From 1398d16353f1254fcb0b6455ee84525c14f8e6cb Mon Sep 17 00:00:00 2001 From: Kai Jan Kriegel Date: Thu, 28 Apr 2022 02:04:02 +0200 Subject: [PATCH] Initial commit --- .cproject | 172 + .idea/.gitignore | 8 + .idea/FabReader2.iml | 2 + .idea/discord.xml | 7 + .idea/misc.xml | 4 + .idea/modules.xml | 8 + .mxproject | 25 + .osx.project | 0 .project | 32 + .../FabReader2-2022-04-28_020118.zip | Bin 0 -> 21882 bytes Hardware/FabReader2/FabReader2.kicad_pcb | 2 + Hardware/FabReader2/FabReader2.kicad_prl | 75 + Hardware/FabReader2/FabReader2.kicad_pro | 326 + Hardware/FabReader2/FabReader2.kicad_sch | 14 + .../Library/2305018-2/2305018-2.kicad_sym | 148 + .../Library/2305018-2/2305018-2.lib | 49 + .../Library/2305018-2/2305018-2.step | 42595 ++++++++++++++++ .../FabReader2/Library/2305018-2/License.txt | 24 + .../Library/2305018-2/TE_2305018-2.kicad_mod | 57 + .../Library/2305018-2/how-to-import.htm | 1 + .../CMI-9705-0380-SMT-TR.kicad_sym | 135 + .../CMI-9705-0380-SMT-TR.lib | 36 + .../CUI_CMI-9705-0380-SMT-TR.kicad_mod | 40 + .../Library/CMI-9705-0380-SMT-TR/License.txt | 24 + .../CMI-9705-0380-SMT-TR/how-to-import.htm | 1 + .../FabReader2/Library/DW01A/DW01A.kicad_sym | 61 + Hardware/FabReader2/Library/DW01A/DW01A.lib | 28 + Hardware/FabReader2/Library/DW01A/DW01A.step | 3216 ++ Hardware/FabReader2/Library/DW01A/License.txt | 24 + .../Library/DW01A/SOT23-6.kicad_mod | 76 + .../Library/DW01A/how-to-import.htm | 1 + .../ESP32-C3-WROOM-02-H4.kicad_sym | 193 + .../ESP32-C3-WROOM-02-H4.lib | 61 + .../ESP32-C3-WROOM-02-H4.step | 15939 ++++++ .../Library/ESP32-C3-WROOM-02-H4/License.txt | 24 + .../MODULE_ESP32-C3-WROOM-02-H4.kicad_mod | 110 + .../ESP32-C3-WROOM-02-H4/how-to-import.htm | 1 + .../JST_S2B-PH-SM4-TB(LF)(SN).kicad_mod | 33 + .../Library/S2B-PH-SM4-TB_LF__SN_/License.txt | 24 + .../S2B-PH-SM4-TB_LF__SN_.kicad_sym | 47 + .../S2B-PH-SM4-TB_LF__SN_.lib | 24 + .../S2B-PH-SM4-TB_LF__SN_.step | 5201 ++ .../S2B-PH-SM4-TB_LF__SN_/how-to-import.htm | 1 + .../Library/ST25R3911B-AQFT/License.txt | 24 + .../QFN50P500X500X100-33N.kicad_mod | 69 + .../ST25R3911B-AQFT/ST25R3911B-AQFT.kicad_sym | 268 + .../ST25R3911B-AQFT/ST25R3911B-AQFT.lib | 88 + .../Library/ST25R3911B-AQFT/how-to-import.htm | 1 + .../TPS63060DSCT/CONV_TPS63060DSCT.kicad_mod | 2304 + .../Library/TPS63060DSCT/License.txt | 24 + .../TPS63060DSCT/TPS63060DSCT.kicad_sym | 81 + .../Library/TPS63060DSCT/TPS63060DSCT.lib | 33 + .../Library/TPS63060DSCT/TPS63060DSCT.step | 7322 +++ .../Library/TPS63060DSCT/how-to-import.htm | 1 + .../Library/TS04-66-95-BK-260-SMT/License.txt | 24 + .../SW_TS04-66-95-BK-260-SMT.kicad_mod | 28 + .../TS04-66-95-BK-260-SMT.kicad_sym | 174 + .../TS04-66-95-BK-260-SMT.lib | 41 + .../TS04-66-95-BK-260-SMT/how-to-import.htm | 1 + Hardware/FabReader2/sym-lib-table | 10 + Software/CMakeLists.txt | 73 + Software/CMakeLists_template.txt | 72 + Software/Core/Inc/demo.h | 62 + Software/Core/Inc/demo_ce.h | 127 + Software/Core/Inc/logger.h | 96 + Software/Core/Inc/main.h | 80 + Software/Core/Inc/ndef_dump.h | 247 + Software/Core/Inc/platform.h | 201 + Software/Core/Inc/spi.h | 104 + Software/Core/Inc/stm32f3xx_hal_conf.h | 359 + Software/Core/Inc/stm32f3xx_it.h | 66 + Software/Core/Inc/usart.h | 64 + Software/Core/Src/demo.c | 651 + Software/Core/Src/demo_ce.c | 672 + Software/Core/Src/logger.c | 157 + Software/Core/Src/main.c | 269 + Software/Core/Src/ndef_demo.c | 1103 + Software/Core/Src/ndef_dump.c | 721 + Software/Core/Src/ndef_example_wrapper.c | 105 + Software/Core/Src/spi.c | 96 + Software/Core/Src/stm32f3xx_hal_msp.c | 150 + Software/Core/Src/stm32f3xx_it.c | 203 + Software/Core/Src/syscalls.c | 155 + Software/Core/Src/sysmem.c | 79 + Software/Core/Src/system_stm32f3xx.c | 291 + Software/Core/Src/usart.c | 109 + Software/Core/Startup/startup_stm32f303retx.s | 492 + .../Components/ST25R3911/Release_Notes.html | 177 + .../BSP/Components/ST25R3911/st25r3911.c | 655 + .../BSP/Components/ST25R3911/st25r3911.h | 601 + .../BSP/Components/ST25R3911/st25r3911_com.c | 457 + .../BSP/Components/ST25R3911/st25r3911_com.h | 816 + .../ST25R3911/st25r3911_interrupt.c | 249 + .../ST25R3911/st25r3911_interrupt.h | 250 + .../BSP/Components/ST25R3911/st_errno.h | 165 + .../Drivers/BSP/Components/ST25R3911/timer.c | 121 + .../Drivers/BSP/Components/ST25R3911/timer.h | 128 + .../Drivers/BSP/Components/ST25R3911/utils.h | 111 + .../Drivers/BSP/NFC05A1/Release_Notes.html | 180 + Software/Drivers/BSP/NFC05A1/led.c | 145 + Software/Drivers/BSP/NFC05A1/led.h | 81 + .../Device/ST/STM32F3xx/Include/stm32f303xe.h | 15340 ++++++ .../Device/ST/STM32F3xx/Include/stm32f3xx.h | 286 + .../ST/STM32F3xx/Include/system_stm32f3xx.h | 106 + .../CMSIS/Device/ST/STM32F3xx/License.md | 83 + Software/Drivers/CMSIS/Include/cmsis_armcc.h | 865 + .../Drivers/CMSIS/Include/cmsis_armclang.h | 1869 + .../Drivers/CMSIS/Include/cmsis_compiler.h | 266 + Software/Drivers/CMSIS/Include/cmsis_gcc.h | 2085 + Software/Drivers/CMSIS/Include/cmsis_iccarm.h | 935 + .../Drivers/CMSIS/Include/cmsis_version.h | 39 + .../Drivers/CMSIS/Include/core_armv8mbl.h | 1918 + .../Drivers/CMSIS/Include/core_armv8mml.h | 2927 ++ Software/Drivers/CMSIS/Include/core_cm0.h | 949 + Software/Drivers/CMSIS/Include/core_cm0plus.h | 1083 + Software/Drivers/CMSIS/Include/core_cm1.h | 976 + Software/Drivers/CMSIS/Include/core_cm23.h | 1993 + Software/Drivers/CMSIS/Include/core_cm3.h | 1941 + Software/Drivers/CMSIS/Include/core_cm33.h | 3002 ++ Software/Drivers/CMSIS/Include/core_cm4.h | 2129 + Software/Drivers/CMSIS/Include/core_cm7.h | 2671 + Software/Drivers/CMSIS/Include/core_sc000.h | 1022 + Software/Drivers/CMSIS/Include/core_sc300.h | 1915 + Software/Drivers/CMSIS/Include/mpu_armv7.h | 270 + Software/Drivers/CMSIS/Include/mpu_armv8.h | 333 + Software/Drivers/CMSIS/Include/tz_context.h | 70 + Software/Drivers/CMSIS/LICENSE.txt | 201 + .../Inc/Legacy/stm32_hal_legacy.h | 3850 ++ .../STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal.h | 945 + .../Inc/stm32f3xx_hal_cortex.h | 426 + .../Inc/stm32f3xx_hal_def.h | 177 + .../Inc/stm32f3xx_hal_dma.h | 454 + .../Inc/stm32f3xx_hal_dma_ex.h | 274 + .../Inc/stm32f3xx_hal_exti.h | 404 + .../Inc/stm32f3xx_hal_flash.h | 381 + .../Inc/stm32f3xx_hal_flash_ex.h | 475 + .../Inc/stm32f3xx_hal_gpio.h | 325 + .../Inc/stm32f3xx_hal_gpio_ex.h | 1522 + .../Inc/stm32f3xx_hal_i2c.h | 838 + .../Inc/stm32f3xx_hal_i2c_ex.h | 180 + .../Inc/stm32f3xx_hal_pwr.h | 219 + .../Inc/stm32f3xx_hal_pwr_ex.h | 322 + .../Inc/stm32f3xx_hal_rcc.h | 1740 + .../Inc/stm32f3xx_hal_rcc_ex.h | 3827 ++ .../Inc/stm32f3xx_hal_spi.h | 852 + .../Inc/stm32f3xx_hal_spi_ex.h | 75 + .../Inc/stm32f3xx_hal_tim.h | 2533 + .../Inc/stm32f3xx_hal_tim_ex.h | 343 + .../Drivers/STM32F3xx_HAL_Driver/License.md | 3 + .../STM32F3xx_HAL_Driver/Src/stm32f3xx_hal.c | 531 + .../Src/stm32f3xx_hal_cortex.c | 513 + .../Src/stm32f3xx_hal_dma.c | 900 + .../Src/stm32f3xx_hal_exti.c | 621 + .../Src/stm32f3xx_hal_flash.c | 695 + .../Src/stm32f3xx_hal_flash_ex.c | 983 + .../Src/stm32f3xx_hal_gpio.c | 542 + .../Src/stm32f3xx_hal_i2c.c | 6794 +++ .../Src/stm32f3xx_hal_i2c_ex.c | 367 + .../Src/stm32f3xx_hal_pwr.c | 461 + .../Src/stm32f3xx_hal_pwr_ex.c | 272 + .../Src/stm32f3xx_hal_rcc.c | 1224 + .../Src/stm32f3xx_hal_rcc_ex.c | 1584 + .../Src/stm32f3xx_hal_spi.c | 4458 ++ .../Src/stm32f3xx_hal_spi_ex.c | 115 + .../Src/stm32f3xx_hal_tim.c | 7942 +++ .../Src/stm32f3xx_hal_tim_ex.c | 2554 + Software/FabReader2.ioc | 203 + .../ST/ndef/Inc/message/ndef_buffer.h | 86 + .../ST/ndef/Inc/message/ndef_message.h | 196 + .../ST/ndef/Inc/message/ndef_record.h | 412 + .../ST/ndef/Inc/message/ndef_type_wifi.h | 161 + .../ST/ndef/Inc/message/ndef_types.h | 330 + .../ST/ndef/Inc/message/ndef_types_mime.h | 203 + .../ST/ndef/Inc/message/ndef_types_rtd.h | 366 + .../ST/ndef/Inc/poller/ndef_poller.h | 594 + .../Middlewares/ST/ndef/Inc/poller/ndef_t2t.h | 340 + .../Middlewares/ST/ndef/Inc/poller/ndef_t3t.h | 339 + .../Middlewares/ST/ndef/Inc/poller/ndef_t4t.h | 485 + .../Middlewares/ST/ndef/Inc/poller/ndef_t5t.h | 412 + .../ST/ndef/Src/message/ndef_message.c | 299 + .../ST/ndef/Src/message/ndef_record.c | 627 + .../ST/ndef/Src/message/ndef_type_wifi.c | 512 + .../ST/ndef/Src/message/ndef_types.c | 321 + .../ST/ndef/Src/message/ndef_types_mime.c | 766 + .../ST/ndef/Src/message/ndef_types_rtd.c | 1167 + .../ST/ndef/Src/poller/ndef_poller.c | 588 + .../Middlewares/ST/ndef/Src/poller/ndef_t2t.c | 835 + .../Middlewares/ST/ndef/Src/poller/ndef_t3t.c | 912 + .../Middlewares/ST/ndef/Src/poller/ndef_t4t.c | 933 + .../Middlewares/ST/ndef/Src/poller/ndef_t5t.c | 1149 + .../Middlewares/ST/ndef/doc/changelog.txt | 57 + .../ST/ndef/doc/examples/ndef_example_read.c | 278 + .../ST/ndef/doc/examples/ndef_example_write.c | 174 + Software/Middlewares/ST/ndef/doc/ndef.chm | Bin 0 -> 837404 bytes .../ST/rfal/Inc/rfal_analogConfig.h | 334 + .../ST/rfal/Inc/rfal_analogConfigTbl.h | 426 + Software/Middlewares/ST/rfal/Inc/rfal_chip.h | 296 + Software/Middlewares/ST/rfal/Inc/rfal_crc.h | 75 + Software/Middlewares/ST/rfal/Inc/rfal_dpo.h | 209 + .../Middlewares/ST/rfal/Inc/rfal_dpoTbl.h | 56 + .../Middlewares/ST/rfal/Inc/rfal_features.h | 115 + .../Middlewares/ST/rfal/Inc/rfal_iso15693_2.h | 202 + .../Middlewares/ST/rfal/Inc/rfal_isoDep.h | 866 + Software/Middlewares/ST/rfal/Inc/rfal_nfc.h | 406 + .../Middlewares/ST/rfal/Inc/rfal_nfcDep.h | 700 + Software/Middlewares/ST/rfal/Inc/rfal_nfca.h | 391 + Software/Middlewares/ST/rfal/Inc/rfal_nfcb.h | 398 + Software/Middlewares/ST/rfal/Inc/rfal_nfcf.h | 370 + Software/Middlewares/ST/rfal/Inc/rfal_nfcv.h | 772 + Software/Middlewares/ST/rfal/Inc/rfal_rf.h | 1539 + .../Middlewares/ST/rfal/Inc/rfal_st25tb.h | 355 + .../Middlewares/ST/rfal/Inc/rfal_st25xv.h | 729 + Software/Middlewares/ST/rfal/Inc/rfal_t1t.h | 187 + Software/Middlewares/ST/rfal/Inc/rfal_t2t.h | 153 + Software/Middlewares/ST/rfal/Inc/rfal_t4t.h | 365 + .../ST/rfal/Src/rfal_analogConfig.c | 417 + Software/Middlewares/ST/rfal/Src/rfal_crc.c | 86 + Software/Middlewares/ST/rfal/Src/rfal_dpo.c | 240 + .../Middlewares/ST/rfal/Src/rfal_iso15693_2.c | 534 + .../Middlewares/ST/rfal/Src/rfal_isoDep.c | 2552 + Software/Middlewares/ST/rfal/Src/rfal_nfc.c | 1684 + .../Middlewares/ST/rfal/Src/rfal_nfcDep.c | 2530 + Software/Middlewares/ST/rfal/Src/rfal_nfca.c | 630 + Software/Middlewares/ST/rfal/Src/rfal_nfcb.c | 504 + Software/Middlewares/ST/rfal/Src/rfal_nfcf.c | 546 + Software/Middlewares/ST/rfal/Src/rfal_nfcv.c | 874 + .../ST/rfal/Src/rfal_rfst25r3911.c | 3733 ++ .../Middlewares/ST/rfal/Src/rfal_st25tb.c | 551 + .../Middlewares/ST/rfal/Src/rfal_st25xv.c | 528 + Software/Middlewares/ST/rfal/Src/rfal_t1t.c | 220 + Software/Middlewares/ST/rfal/Src/rfal_t2t.c | 242 + Software/Middlewares/ST/rfal/Src/rfal_t4t.c | 398 + .../ST/rfal/doc/Release_Notes.html | 303 + .../doc/ST25R3916_MisraComplianceReport.html | 8747 ++++ .../ST/rfal/doc/_htmresc/st_logo.png | Bin 0 -> 18616 bytes Software/Middlewares/ST/rfal/doc/rfal.chm | Bin 0 -> 2359250 bytes Software/STM32F303RETX_FLASH.ld | 206 + 237 files changed, 233491 insertions(+) create mode 100644 .cproject create mode 100644 .idea/.gitignore create mode 100644 .idea/FabReader2.iml create mode 100644 .idea/discord.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .mxproject create mode 100644 .osx.project create mode 100644 .project create mode 100644 Hardware/FabReader2/FabReader2-backups/FabReader2-2022-04-28_020118.zip create mode 100644 Hardware/FabReader2/FabReader2.kicad_pcb create mode 100644 Hardware/FabReader2/FabReader2.kicad_prl create mode 100644 Hardware/FabReader2/FabReader2.kicad_pro create mode 100644 Hardware/FabReader2/FabReader2.kicad_sch create mode 100644 Hardware/FabReader2/Library/2305018-2/2305018-2.kicad_sym create mode 100644 Hardware/FabReader2/Library/2305018-2/2305018-2.lib create mode 100644 Hardware/FabReader2/Library/2305018-2/2305018-2.step create mode 100644 Hardware/FabReader2/Library/2305018-2/License.txt create mode 100644 Hardware/FabReader2/Library/2305018-2/TE_2305018-2.kicad_mod create mode 100644 Hardware/FabReader2/Library/2305018-2/how-to-import.htm create mode 100644 Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/CMI-9705-0380-SMT-TR.kicad_sym create mode 100644 Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/CMI-9705-0380-SMT-TR.lib create mode 100644 Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/CUI_CMI-9705-0380-SMT-TR.kicad_mod create mode 100644 Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/License.txt create mode 100644 Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/how-to-import.htm create mode 100644 Hardware/FabReader2/Library/DW01A/DW01A.kicad_sym create mode 100644 Hardware/FabReader2/Library/DW01A/DW01A.lib create mode 100644 Hardware/FabReader2/Library/DW01A/DW01A.step create mode 100644 Hardware/FabReader2/Library/DW01A/License.txt create mode 100644 Hardware/FabReader2/Library/DW01A/SOT23-6.kicad_mod create mode 100644 Hardware/FabReader2/Library/DW01A/how-to-import.htm create mode 100644 Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/ESP32-C3-WROOM-02-H4.kicad_sym create mode 100644 Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/ESP32-C3-WROOM-02-H4.lib create mode 100644 Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/ESP32-C3-WROOM-02-H4.step create mode 100644 Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/License.txt create mode 100644 Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/MODULE_ESP32-C3-WROOM-02-H4.kicad_mod create mode 100644 Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/how-to-import.htm create mode 100644 Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/JST_S2B-PH-SM4-TB(LF)(SN).kicad_mod create mode 100644 Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/License.txt create mode 100644 Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/S2B-PH-SM4-TB_LF__SN_.kicad_sym create mode 100644 Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/S2B-PH-SM4-TB_LF__SN_.lib create mode 100644 Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/S2B-PH-SM4-TB_LF__SN_.step create mode 100644 Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/how-to-import.htm create mode 100644 Hardware/FabReader2/Library/ST25R3911B-AQFT/License.txt create mode 100644 Hardware/FabReader2/Library/ST25R3911B-AQFT/QFN50P500X500X100-33N.kicad_mod create mode 100644 Hardware/FabReader2/Library/ST25R3911B-AQFT/ST25R3911B-AQFT.kicad_sym create mode 100644 Hardware/FabReader2/Library/ST25R3911B-AQFT/ST25R3911B-AQFT.lib create mode 100644 Hardware/FabReader2/Library/ST25R3911B-AQFT/how-to-import.htm create mode 100644 Hardware/FabReader2/Library/TPS63060DSCT/CONV_TPS63060DSCT.kicad_mod create mode 100644 Hardware/FabReader2/Library/TPS63060DSCT/License.txt create mode 100644 Hardware/FabReader2/Library/TPS63060DSCT/TPS63060DSCT.kicad_sym create mode 100644 Hardware/FabReader2/Library/TPS63060DSCT/TPS63060DSCT.lib create mode 100644 Hardware/FabReader2/Library/TPS63060DSCT/TPS63060DSCT.step create mode 100644 Hardware/FabReader2/Library/TPS63060DSCT/how-to-import.htm create mode 100644 Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/License.txt create mode 100644 Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/SW_TS04-66-95-BK-260-SMT.kicad_mod create mode 100644 Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/TS04-66-95-BK-260-SMT.kicad_sym create mode 100644 Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/TS04-66-95-BK-260-SMT.lib create mode 100644 Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/how-to-import.htm create mode 100644 Hardware/FabReader2/sym-lib-table create mode 100644 Software/CMakeLists.txt create mode 100644 Software/CMakeLists_template.txt create mode 100644 Software/Core/Inc/demo.h create mode 100644 Software/Core/Inc/demo_ce.h create mode 100644 Software/Core/Inc/logger.h create mode 100644 Software/Core/Inc/main.h create mode 100644 Software/Core/Inc/ndef_dump.h create mode 100644 Software/Core/Inc/platform.h create mode 100644 Software/Core/Inc/spi.h create mode 100644 Software/Core/Inc/stm32f3xx_hal_conf.h create mode 100644 Software/Core/Inc/stm32f3xx_it.h create mode 100644 Software/Core/Inc/usart.h create mode 100644 Software/Core/Src/demo.c create mode 100644 Software/Core/Src/demo_ce.c create mode 100644 Software/Core/Src/logger.c create mode 100644 Software/Core/Src/main.c create mode 100644 Software/Core/Src/ndef_demo.c create mode 100644 Software/Core/Src/ndef_dump.c create mode 100644 Software/Core/Src/ndef_example_wrapper.c create mode 100644 Software/Core/Src/spi.c create mode 100644 Software/Core/Src/stm32f3xx_hal_msp.c create mode 100644 Software/Core/Src/stm32f3xx_it.c create mode 100644 Software/Core/Src/syscalls.c create mode 100644 Software/Core/Src/sysmem.c create mode 100644 Software/Core/Src/system_stm32f3xx.c create mode 100644 Software/Core/Src/usart.c create mode 100644 Software/Core/Startup/startup_stm32f303retx.s create mode 100644 Software/Drivers/BSP/Components/ST25R3911/Release_Notes.html create mode 100644 Software/Drivers/BSP/Components/ST25R3911/st25r3911.c create mode 100644 Software/Drivers/BSP/Components/ST25R3911/st25r3911.h create mode 100644 Software/Drivers/BSP/Components/ST25R3911/st25r3911_com.c create mode 100644 Software/Drivers/BSP/Components/ST25R3911/st25r3911_com.h create mode 100644 Software/Drivers/BSP/Components/ST25R3911/st25r3911_interrupt.c create mode 100644 Software/Drivers/BSP/Components/ST25R3911/st25r3911_interrupt.h create mode 100644 Software/Drivers/BSP/Components/ST25R3911/st_errno.h create mode 100644 Software/Drivers/BSP/Components/ST25R3911/timer.c create mode 100644 Software/Drivers/BSP/Components/ST25R3911/timer.h create mode 100644 Software/Drivers/BSP/Components/ST25R3911/utils.h create mode 100644 Software/Drivers/BSP/NFC05A1/Release_Notes.html create mode 100644 Software/Drivers/BSP/NFC05A1/led.c create mode 100644 Software/Drivers/BSP/NFC05A1/led.h create mode 100644 Software/Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f303xe.h create mode 100644 Software/Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h create mode 100644 Software/Drivers/CMSIS/Device/ST/STM32F3xx/Include/system_stm32f3xx.h create mode 100644 Software/Drivers/CMSIS/Device/ST/STM32F3xx/License.md create mode 100644 Software/Drivers/CMSIS/Include/cmsis_armcc.h create mode 100644 Software/Drivers/CMSIS/Include/cmsis_armclang.h create mode 100644 Software/Drivers/CMSIS/Include/cmsis_compiler.h create mode 100644 Software/Drivers/CMSIS/Include/cmsis_gcc.h create mode 100644 Software/Drivers/CMSIS/Include/cmsis_iccarm.h create mode 100644 Software/Drivers/CMSIS/Include/cmsis_version.h create mode 100644 Software/Drivers/CMSIS/Include/core_armv8mbl.h create mode 100644 Software/Drivers/CMSIS/Include/core_armv8mml.h create mode 100644 Software/Drivers/CMSIS/Include/core_cm0.h create mode 100644 Software/Drivers/CMSIS/Include/core_cm0plus.h create mode 100644 Software/Drivers/CMSIS/Include/core_cm1.h create mode 100644 Software/Drivers/CMSIS/Include/core_cm23.h create mode 100644 Software/Drivers/CMSIS/Include/core_cm3.h create mode 100644 Software/Drivers/CMSIS/Include/core_cm33.h create mode 100644 Software/Drivers/CMSIS/Include/core_cm4.h create mode 100644 Software/Drivers/CMSIS/Include/core_cm7.h create mode 100644 Software/Drivers/CMSIS/Include/core_sc000.h create mode 100644 Software/Drivers/CMSIS/Include/core_sc300.h create mode 100644 Software/Drivers/CMSIS/Include/mpu_armv7.h create mode 100644 Software/Drivers/CMSIS/Include/mpu_armv8.h create mode 100644 Software/Drivers/CMSIS/Include/tz_context.h create mode 100644 Software/Drivers/CMSIS/LICENSE.txt create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_cortex.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_def.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_dma.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_dma_ex.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_exti.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_flash.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_flash_ex.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_gpio.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_gpio_ex.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_i2c.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_i2c_ex.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_pwr.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_pwr_ex.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_rcc.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_rcc_ex.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_spi.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_spi_ex.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_tim.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_tim_ex.h create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/License.md create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_cortex.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_dma.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_exti.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_flash.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_flash_ex.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_gpio.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_i2c.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_i2c_ex.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_pwr.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_pwr_ex.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_rcc.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_rcc_ex.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_spi.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_spi_ex.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim.c create mode 100644 Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim_ex.c create mode 100644 Software/FabReader2.ioc create mode 100644 Software/Middlewares/ST/ndef/Inc/message/ndef_buffer.h create mode 100644 Software/Middlewares/ST/ndef/Inc/message/ndef_message.h create mode 100644 Software/Middlewares/ST/ndef/Inc/message/ndef_record.h create mode 100644 Software/Middlewares/ST/ndef/Inc/message/ndef_type_wifi.h create mode 100644 Software/Middlewares/ST/ndef/Inc/message/ndef_types.h create mode 100644 Software/Middlewares/ST/ndef/Inc/message/ndef_types_mime.h create mode 100644 Software/Middlewares/ST/ndef/Inc/message/ndef_types_rtd.h create mode 100644 Software/Middlewares/ST/ndef/Inc/poller/ndef_poller.h create mode 100644 Software/Middlewares/ST/ndef/Inc/poller/ndef_t2t.h create mode 100644 Software/Middlewares/ST/ndef/Inc/poller/ndef_t3t.h create mode 100644 Software/Middlewares/ST/ndef/Inc/poller/ndef_t4t.h create mode 100644 Software/Middlewares/ST/ndef/Inc/poller/ndef_t5t.h create mode 100644 Software/Middlewares/ST/ndef/Src/message/ndef_message.c create mode 100644 Software/Middlewares/ST/ndef/Src/message/ndef_record.c create mode 100644 Software/Middlewares/ST/ndef/Src/message/ndef_type_wifi.c create mode 100644 Software/Middlewares/ST/ndef/Src/message/ndef_types.c create mode 100644 Software/Middlewares/ST/ndef/Src/message/ndef_types_mime.c create mode 100644 Software/Middlewares/ST/ndef/Src/message/ndef_types_rtd.c create mode 100644 Software/Middlewares/ST/ndef/Src/poller/ndef_poller.c create mode 100644 Software/Middlewares/ST/ndef/Src/poller/ndef_t2t.c create mode 100644 Software/Middlewares/ST/ndef/Src/poller/ndef_t3t.c create mode 100644 Software/Middlewares/ST/ndef/Src/poller/ndef_t4t.c create mode 100644 Software/Middlewares/ST/ndef/Src/poller/ndef_t5t.c create mode 100644 Software/Middlewares/ST/ndef/doc/changelog.txt create mode 100644 Software/Middlewares/ST/ndef/doc/examples/ndef_example_read.c create mode 100644 Software/Middlewares/ST/ndef/doc/examples/ndef_example_write.c create mode 100644 Software/Middlewares/ST/ndef/doc/ndef.chm create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_analogConfig.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_analogConfigTbl.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_chip.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_crc.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_dpo.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_dpoTbl.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_features.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_iso15693_2.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_isoDep.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_nfc.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_nfcDep.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_nfca.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_nfcb.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_nfcf.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_nfcv.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_rf.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_st25tb.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_st25xv.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_t1t.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_t2t.h create mode 100644 Software/Middlewares/ST/rfal/Inc/rfal_t4t.h create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_analogConfig.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_crc.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_dpo.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_iso15693_2.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_isoDep.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_nfc.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_nfcDep.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_nfca.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_nfcb.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_nfcf.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_nfcv.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_rfst25r3911.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_st25tb.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_st25xv.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_t1t.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_t2t.c create mode 100644 Software/Middlewares/ST/rfal/Src/rfal_t4t.c create mode 100644 Software/Middlewares/ST/rfal/doc/Release_Notes.html create mode 100644 Software/Middlewares/ST/rfal/doc/ST25R3916_MisraComplianceReport.html create mode 100644 Software/Middlewares/ST/rfal/doc/_htmresc/st_logo.png create mode 100644 Software/Middlewares/ST/rfal/doc/rfal.chm create mode 100644 Software/STM32F303RETX_FLASH.ld diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..b4b1c34 --- /dev/null +++ b/.cproject @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/FabReader2.iml b/.idea/FabReader2.iml new file mode 100644 index 0000000..f08604b --- /dev/null +++ b/.idea/FabReader2.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..30bab2a --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..79b3c94 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..c95d862 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.mxproject b/.mxproject new file mode 100644 index 0000000..4d8cd9e --- /dev/null +++ b/.mxproject @@ -0,0 +1,25 @@ +[PreviousGenFiles] +AdvancedFolderStructure=true +HeaderFileListSize=3 +HeaderFiles#0=/Users/kjkriegel/Documents/Development/FabAccess/FabReader2/Core/Inc/stm32f3xx_it.h +HeaderFiles#1=/Users/kjkriegel/Documents/Development/FabAccess/FabReader2/Core/Inc/stm32f3xx_hal_conf.h +HeaderFiles#2=/Users/kjkriegel/Documents/Development/FabAccess/FabReader2/Core/Inc/main.h +HeaderFolderListSize=1 +HeaderPath#0=/Users/kjkriegel/Documents/Development/FabAccess/FabReader2/Core/Inc +HeaderFiles=; +SourceFileListSize=3 +SourceFiles#0=/Users/kjkriegel/Documents/Development/FabAccess/FabReader2/Core/Src/stm32f3xx_it.c +SourceFiles#1=/Users/kjkriegel/Documents/Development/FabAccess/FabReader2/Core/Src/stm32f3xx_hal_msp.c +SourceFiles#2=/Users/kjkriegel/Documents/Development/FabAccess/FabReader2/Core/Src/main.c +SourceFolderListSize=1 +SourcePath#0=/Users/kjkriegel/Documents/Development/FabAccess/FabReader2/Core/Src +SourceFiles=; + +[PreviousLibFiles] +LibFiles=Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_spi.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_spi_ex.h;Drivers/STM32F3xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_def.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_rcc.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_rcc_ex.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_gpio.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_gpio_ex.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_dma_ex.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_dma.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_cortex.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_pwr.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_pwr_ex.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_flash.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_flash_ex.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_i2c.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_i2c_ex.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_exti.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_tim.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_tim_ex.h;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_spi.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_spi_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_rcc.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_rcc_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_gpio.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_dma.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_cortex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_pwr.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_pwr_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_flash.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_flash_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_i2c.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_i2c_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_exti.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim_ex.c;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_spi.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_spi_ex.h;Drivers/STM32F3xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_def.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_rcc.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_rcc_ex.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_gpio.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_gpio_ex.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_dma_ex.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_dma.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_cortex.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_pwr.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_pwr_ex.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_flash.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_flash_ex.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_i2c.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_i2c_ex.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_exti.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_tim.h;Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_tim_ex.h;Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f303xe.h;Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h;Drivers/CMSIS/Device/ST/STM32F3xx/Include/system_stm32f3xx.h;Drivers/CMSIS/Device/ST/STM32F3xx/Source/Templates/system_stm32f3xx.c;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/tz_context.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_armv8mbl.h; + +[PreviousUsedCubeIDEFiles] +SourceFiles=Core/Src/main.c;Core/Src/stm32f3xx_it.c;Core/Src/stm32f3xx_hal_msp.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_spi.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_spi_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_rcc.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_rcc_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_gpio.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_dma.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_cortex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_pwr.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_pwr_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_flash.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_flash_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_i2c.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_i2c_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_exti.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim_ex.c;Drivers/CMSIS/Device/ST/STM32F3xx/Source/Templates/system_stm32f3xx.c;Core/Src/system_stm32f3xx.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_spi.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_spi_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_rcc.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_rcc_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_gpio.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_dma.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_cortex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_pwr.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_pwr_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_flash.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_flash_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_i2c.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_i2c_ex.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_exti.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim.c;Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim_ex.c;Drivers/CMSIS/Device/ST/STM32F3xx/Source/Templates/system_stm32f3xx.c;Core/Src/system_stm32f3xx.c;;; +HeaderPath=Drivers/STM32F3xx_HAL_Driver/Inc;Drivers/STM32F3xx_HAL_Driver/Inc/Legacy;Drivers/CMSIS/Device/ST/STM32F3xx/Include;Drivers/CMSIS/Include;Core/Inc; +CDefines=USE_HAL_DRIVER;STM32F303xE;USE_HAL_DRIVER;USE_HAL_DRIVER; + diff --git a/.osx.project b/.osx.project new file mode 100644 index 0000000..e69de29 diff --git a/.project b/.project new file mode 100644 index 0000000..958597d --- /dev/null +++ b/.project @@ -0,0 +1,32 @@ + + + FabReader2 + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.st.stm32cube.ide.mcu.MCUProjectNature + org.eclipse.cdt.core.cnature + com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature + com.st.stm32cube.ide.mcu.MCUCubeProjectNature + com.st.stm32cube.ide.mcu.MCUAdvancedStructureProjectNature + com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature + com.st.stm32cube.ide.mcu.MCURootProjectNature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Hardware/FabReader2/FabReader2-backups/FabReader2-2022-04-28_020118.zip b/Hardware/FabReader2/FabReader2-backups/FabReader2-2022-04-28_020118.zip new file mode 100644 index 0000000000000000000000000000000000000000..ec514ddc605b10b21225e4d8a242cad281fec485 GIT binary patch literal 21882 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 literal 0 HcmV?d00001 diff --git a/Hardware/FabReader2/FabReader2.kicad_pcb b/Hardware/FabReader2/FabReader2.kicad_pcb new file mode 100644 index 0000000..28b47a1 --- /dev/null +++ b/Hardware/FabReader2/FabReader2.kicad_pcb @@ -0,0 +1,2 @@ +(kicad_pcb (version 20211014) (generator pcbnew) +) \ No newline at end of file diff --git a/Hardware/FabReader2/FabReader2.kicad_prl b/Hardware/FabReader2/FabReader2.kicad_prl new file mode 100644 index 0000000..910e9e1 --- /dev/null +++ b/Hardware/FabReader2/FabReader2.kicad_prl @@ -0,0 +1,75 @@ +{ + "board": { + "active_layer": 0, + "active_layer_preset": "", + "auto_track_width": true, + "hidden_nets": [], + "high_contrast_mode": 0, + "net_color_mode": 1, + "opacity": { + "pads": 1.0, + "tracks": 1.0, + "vias": 1.0, + "zones": 0.6 + }, + "ratsnest_display_mode": 0, + "selection_filter": { + "dimensions": true, + "footprints": true, + "graphics": true, + "keepouts": true, + "lockedItems": true, + "otherItems": true, + "pads": true, + "text": true, + "tracks": true, + "vias": true, + "zones": true + }, + "visible_items": [ + 0, + 1, + 2, + 3, + 4, + 5, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 32, + 33, + 34, + 35, + 36 + ], + "visible_layers": "fffffff_ffffffff", + "zone_display_mode": 0 + }, + "meta": { + "filename": "FabReader2.kicad_prl", + "version": 3 + }, + "project": { + "files": [] + } +} diff --git a/Hardware/FabReader2/FabReader2.kicad_pro b/Hardware/FabReader2/FabReader2.kicad_pro new file mode 100644 index 0000000..e4dd3f2 --- /dev/null +++ b/Hardware/FabReader2/FabReader2.kicad_pro @@ -0,0 +1,326 @@ +{ + "board": { + "design_settings": { + "defaults": { + "board_outline_line_width": 0.1, + "copper_line_width": 0.2, + "copper_text_size_h": 1.5, + "copper_text_size_v": 1.5, + "copper_text_thickness": 0.3, + "other_line_width": 0.15, + "silk_line_width": 0.15, + "silk_text_size_h": 1.0, + "silk_text_size_v": 1.0, + "silk_text_thickness": 0.15 + }, + "diff_pair_dimensions": [], + "drc_exclusions": [], + "rules": { + "min_copper_edge_clearance": 0.0, + "solder_mask_clearance": 0.0, + "solder_mask_min_width": 0.0 + }, + "track_widths": [], + "via_dimensions": [] + }, + "layer_presets": [] + }, + "boards": [], + "cvpcb": { + "equivalence_files": [] + }, + "erc": { + "erc_exclusions": [], + "meta": { + "version": 0 + }, + "pin_map": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 2, + 0, + 1, + 0, + 0, + 1, + 0, + 2, + 2, + 2, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 2 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 1, + 1, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + [ + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 2 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 2, + 1, + 2, + 0, + 0, + 1, + 0, + 2, + 2, + 2, + 2 + ], + [ + 0, + 2, + 0, + 1, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 2 + ], + [ + 0, + 2, + 1, + 1, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 2 + ], + [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ] + ], + "rule_severities": { + "bus_definition_conflict": "error", + "bus_entry_needed": "error", + "bus_label_syntax": "error", + "bus_to_bus_conflict": "error", + "bus_to_net_conflict": "error", + "different_unit_footprint": "error", + "different_unit_net": "error", + "duplicate_reference": "error", + "duplicate_sheet_names": "error", + "extra_units": "error", + "global_label_dangling": "warning", + "hier_label_mismatch": "error", + "label_dangling": "error", + "lib_symbol_issues": "warning", + "multiple_net_names": "warning", + "net_not_bus_member": "warning", + "no_connect_connected": "warning", + "no_connect_dangling": "warning", + "pin_not_connected": "error", + "pin_not_driven": "error", + "pin_to_pin": "warning", + "power_pin_not_driven": "error", + "similar_labels": "warning", + "unannotated": "error", + "unit_value_mismatch": "error", + "unresolved_variable": "error", + "wire_dangling": "error" + } + }, + "libraries": { + "pinned_footprint_libs": [], + "pinned_symbol_libs": [] + }, + "meta": { + "filename": "FabReader2.kicad_pro", + "version": 1 + }, + "net_settings": { + "classes": [ + { + "bus_width": 12.0, + "clearance": 0.2, + "diff_pair_gap": 0.25, + "diff_pair_via_gap": 0.25, + "diff_pair_width": 0.2, + "line_style": 0, + "microvia_diameter": 0.3, + "microvia_drill": 0.1, + "name": "Default", + "pcb_color": "rgba(0, 0, 0, 0.000)", + "schematic_color": "rgba(0, 0, 0, 0.000)", + "track_width": 0.25, + "via_diameter": 0.8, + "via_drill": 0.4, + "wire_width": 6.0 + } + ], + "meta": { + "version": 2 + }, + "net_colors": null + }, + "pcbnew": { + "last_paths": { + "gencad": "", + "idf": "", + "netlist": "", + "specctra_dsn": "", + "step": "", + "vrml": "" + }, + "page_layout_descr_file": "" + }, + "schematic": { + "annotate_start_num": 0, + "drawing": { + "default_line_thickness": 6.0, + "default_text_size": 50.0, + "field_names": [], + "intersheets_ref_own_page": false, + "intersheets_ref_prefix": "", + "intersheets_ref_short": false, + "intersheets_ref_show": false, + "intersheets_ref_suffix": "", + "junction_size_choice": 3, + "label_size_ratio": 0.375, + "pin_symbol_size": 25.0, + "text_offset_ratio": 0.15 + }, + "legacy_lib_dir": "", + "legacy_lib_list": [], + "meta": { + "version": 1 + }, + "net_format_name": "", + "ngspice": { + "fix_include_paths": true, + "fix_passive_vals": false, + "meta": { + "version": 0 + }, + "model_mode": 0, + "workbook_filename": "" + }, + "page_layout_descr_file": "", + "plot_directory": "", + "spice_adjust_passive_values": false, + "spice_external_command": "spice \"%I\"", + "subpart_first_id": 65, + "subpart_id_separator": 0 + }, + "sheets": [ + [ + "e63e39d7-6ac0-4ffd-8aa3-1841a4541b55", + "" + ] + ], + "text_variables": {} +} diff --git a/Hardware/FabReader2/FabReader2.kicad_sch b/Hardware/FabReader2/FabReader2.kicad_sch new file mode 100644 index 0000000..64e0524 --- /dev/null +++ b/Hardware/FabReader2/FabReader2.kicad_sch @@ -0,0 +1,14 @@ +(kicad_sch (version 20211123) (generator eeschema) + + (uuid e63e39d7-6ac0-4ffd-8aa3-1841a4541b55) + + (paper "A4") + + (lib_symbols + ) + + + (sheet_instances + (path "/" (page "1")) + ) +) diff --git a/Hardware/FabReader2/Library/2305018-2/2305018-2.kicad_sym b/Hardware/FabReader2/Library/2305018-2/2305018-2.kicad_sym new file mode 100644 index 0000000..5e972d8 --- /dev/null +++ b/Hardware/FabReader2/Library/2305018-2/2305018-2.kicad_sym @@ -0,0 +1,148 @@ +(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor) + (symbol "2305018-2" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) + (property "Reference" "J" (id 0) (at -12.7 18.0594 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Value" "2305018-2" (id 1) (at -12.7 -20.3454 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Footprint" "TE_2305018-2" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "Datasheet" "" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "Comment" "2305018-2" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "ki_locked" "" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27))) + ) + (symbol "2305018-2_0_0" + (rectangle (start -12.7 -17.78) (end 12.7 17.78) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type background)) + ) + (pin passive line (at -17.78 -7.62 0) (length 5.08) + (name "GNDA" (effects (font (size 1.016 1.016)))) + (number "A1" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -17.78 -5.08 0) (length 5.08) + (name "RX2_N" (effects (font (size 1.016 1.016)))) + (number "A10" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -17.78 -2.54 0) (length 5.08) + (name "RX2_P" (effects (font (size 1.016 1.016)))) + (number "A11" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -17.78 -7.62 0) (length 5.08) + (name "GNDA" (effects (font (size 1.016 1.016)))) + (number "A12" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -17.78 15.24 0) (length 5.08) + (name "TX1_P" (effects (font (size 1.016 1.016)))) + (number "A2" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -17.78 12.7 0) (length 5.08) + (name "TX1_N" (effects (font (size 1.016 1.016)))) + (number "A3" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -17.78 10.16 0) (length 5.08) + (name "VBUS_A" (effects (font (size 1.016 1.016)))) + (number "A4" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -17.78 7.62 0) (length 5.08) + (name "CC1" (effects (font (size 1.016 1.016)))) + (number "A5" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -17.78 5.08 0) (length 5.08) + (name "DA_P" (effects (font (size 1.016 1.016)))) + (number "A6" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -17.78 2.54 0) (length 5.08) + (name "DA_N" (effects (font (size 1.016 1.016)))) + (number "A7" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -17.78 0 0) (length 5.08) + (name "SBU1" (effects (font (size 1.016 1.016)))) + (number "A8" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -17.78 10.16 0) (length 5.08) + (name "VBUS_A" (effects (font (size 1.016 1.016)))) + (number "A9" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at 17.78 -7.62 180) (length 5.08) + (name "GNDB" (effects (font (size 1.016 1.016)))) + (number "B1" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at 17.78 12.7 180) (length 5.08) + (name "RX1_N" (effects (font (size 1.016 1.016)))) + (number "B10" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at 17.78 15.24 180) (length 5.08) + (name "RX1_P" (effects (font (size 1.016 1.016)))) + (number "B11" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at 17.78 -7.62 180) (length 5.08) + (name "GNDB" (effects (font (size 1.016 1.016)))) + (number "B12" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at 17.78 -2.54 180) (length 5.08) + (name "TX2_P" (effects (font (size 1.016 1.016)))) + (number "B2" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at 17.78 -5.08 180) (length 5.08) + (name "TX2_N" (effects (font (size 1.016 1.016)))) + (number "B3" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at 17.78 10.16 180) (length 5.08) + (name "VBUS_B" (effects (font (size 1.016 1.016)))) + (number "B4" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at 17.78 7.62 180) (length 5.08) + (name "CC2" (effects (font (size 1.016 1.016)))) + (number "B5" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at 17.78 5.08 180) (length 5.08) + (name "DB_P" (effects (font (size 1.016 1.016)))) + (number "B6" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at 17.78 2.54 180) (length 5.08) + (name "DB_N" (effects (font (size 1.016 1.016)))) + (number "B7" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at 17.78 0 180) (length 5.08) + (name "SBU2" (effects (font (size 1.016 1.016)))) + (number "B8" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at 17.78 10.16 180) (length 5.08) + (name "VBUS_B" (effects (font (size 1.016 1.016)))) + (number "B9" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -12.7 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "G1" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -12.7 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "G2" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "SHIELD" (effects (font (size 1.016 1.016)))) + (number "S1" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "SHIELD" (effects (font (size 1.016 1.016)))) + (number "S2" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "SHIELD" (effects (font (size 1.016 1.016)))) + (number "S3" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "SHIELD" (effects (font (size 1.016 1.016)))) + (number "S4" (effects (font (size 1.016 1.016)))) + ) + ) + ) +) diff --git a/Hardware/FabReader2/Library/2305018-2/2305018-2.lib b/Hardware/FabReader2/Library/2305018-2/2305018-2.lib new file mode 100644 index 0000000..db72169 --- /dev/null +++ b/Hardware/FabReader2/Library/2305018-2/2305018-2.lib @@ -0,0 +1,49 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +#(c) SnapEDA 2016 (snapeda.com) +#This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Design Exception 1.0 +# +# 2305018-2 +# +DEF 2305018-2 J 0 40 Y Y 1 L N +F0 "J" -500 711 50 H V L BNN +F1 "2305018-2" -500 -801 50 H V L BNN +F2 "TE_2305018-2" 0 0 50 H I L BNN +F3 "" 0 0 50 H I L BNN +F4 "2305018-2" 0 0 50 H I L BNN "Comment" +DRAW +S -500 -700 500 700 0 0 10 f +X TX1_P A2 -700 600 200 R 40 40 0 0 P +X TX1_N A3 -700 500 200 R 40 40 0 0 P +X VBUS_A A4 -700 400 200 R 40 40 0 0 P +X VBUS_A A9 -700 400 200 R 40 40 0 0 P +X CC1 A5 -700 300 200 R 40 40 0 0 P +X DA_P A6 -700 200 200 R 40 40 0 0 P +X DA_N A7 -700 100 200 R 40 40 0 0 P +X SBU1 A8 -700 0 200 R 40 40 0 0 P +X RX2_P A11 -700 -100 200 R 40 40 0 0 P +X RX2_N A10 -700 -200 200 R 40 40 0 0 P +X GNDA A1 -700 -300 200 R 40 40 0 0 P +X GNDA A12 -700 -300 200 R 40 40 0 0 P +X RX1_P B11 700 600 200 L 40 40 0 0 P +X RX1_N B10 700 500 200 L 40 40 0 0 P +X VBUS_B B4 700 400 200 L 40 40 0 0 P +X VBUS_B B9 700 400 200 L 40 40 0 0 P +X CC2 B5 700 300 200 L 40 40 0 0 P +X DB_P B6 700 200 200 L 40 40 0 0 P +X DB_N B7 700 100 200 L 40 40 0 0 P +X SBU2 B8 700 0 200 L 40 40 0 0 P +X TX2_P B2 700 -100 200 L 40 40 0 0 P +X TX2_N B3 700 -200 200 L 40 40 0 0 P +X GNDB B1 700 -300 200 L 40 40 0 0 P +X GNDB B12 700 -300 200 L 40 40 0 0 P +X GND G1 700 -500 200 L 40 40 0 0 W +X GND G2 700 -500 200 L 40 40 0 0 W +X SHIELD S1 700 -600 200 L 40 40 0 0 W +X SHIELD S2 700 -600 200 L 40 40 0 0 W +X SHIELD S3 700 -600 200 L 40 40 0 0 W +X SHIELD S4 700 -600 200 L 40 40 0 0 W +ENDDRAW +ENDDEF +# +# End Library \ No newline at end of file diff --git a/Hardware/FabReader2/Library/2305018-2/2305018-2.step b/Hardware/FabReader2/Library/2305018-2/2305018-2.step new file mode 100644 index 0000000..498598c --- /dev/null +++ b/Hardware/FabReader2/Library/2305018-2/2305018-2.step @@ -0,0 +1,42595 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP214' ), + '1' ); +FILE_NAME ('2305018-2.STEP', + '2018-05-29T12:46:23', + ( '' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2017', + '' ); +FILE_SCHEMA (( 'AUTOMOTIVE_DESIGN' )); +ENDSEC; + +DATA; +#1 = ADVANCED_FACE ( 'NONE', ( #38028 ), #16803, .T. ) ; +#2 = SURFACE_STYLE_USAGE ( .BOTH. , #405 ) ; +#3 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.080001745296136600, -5.599999999999999600 ) ) ; +#4 = EDGE_CURVE ( 'NONE', #33011, #21944, #684, .T. ) ; +#5 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -1.994459358809380600 ) ) ; +#6 = ORIENTED_EDGE ( 'NONE', *, *, #27738, .F. ) ; +#7 = VECTOR ( 'NONE', #1126, 1000.000000000000000 ) ; +#8 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9 = EDGE_CURVE ( 'NONE', #8155, #3462, #17843, .T. ) ; +#10 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33249 ), #7244 ) ; +#12 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13 = EDGE_CURVE ( 'NONE', #38900, #11203, #17005, .T. ) ; +#14 = CARTESIAN_POINT ( 'NONE', ( -3.978497408938404000, 0.5300017452961688400, -4.576794919243113200 ) ) ; +#15 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.5300017452961696100, -3.999999999999998200 ) ) ; +#16 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19139 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10659, #33280, #16618 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17 = PLANE ( 'NONE', #32700 ) ; +#18 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#19 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, 0.7071067811865483500 ) ) ; +#20 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15084 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26849, #36707, #1033 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21 = PRESENTATION_STYLE_ASSIGNMENT (( #2227 ) ) ; +#22 = FILL_AREA_STYLE_COLOUR ( '', #30527 ) ; +#23 = ORIENTED_EDGE ( 'NONE', *, *, #26265, .F. ) ; +#25 = EDGE_CURVE ( 'NONE', #22514, #20124, #31658, .T. ) ; +#24 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18130 ), #22440 ) ; +#26 = DIRECTION ( 'NONE', ( 2.891205793294677400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#27 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.499998254703824400, -6.299999999999993600 ) ) ; +#28 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#29 = PRESENTATION_STYLE_ASSIGNMENT (( #21240 ) ) ; +#30 = EDGE_LOOP ( 'NONE', ( #22959, #40498, #11306, #26050 ) ) ; +#31 = VERTEX_POINT ( 'NONE', #27780 ) ; +#32 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33 = FACE_OUTER_BOUND ( 'NONE', #19472, .T. ) ; +#35 = AXIS2_PLACEMENT_3D ( 'NONE', #36011, #16652, #3768 ) ; +#34 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #838 ) ) ; +#36 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#37 = AXIS2_PLACEMENT_3D ( 'NONE', #20653, #33193, #39804 ) ; +#38 = SURFACE_STYLE_FILL_AREA ( #13752 ) ; +#39 = STYLED_ITEM ( 'NONE', ( #35587 ), #33492 ) ; +#40 = FILL_AREA_STYLE ('',( #11295 ) ) ; +#41 = ORIENTED_EDGE ( 'NONE', *, *, #37530, .T. ) ; +#42 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#43 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, -0.2800000000000026400, 0.0000000000000000000 ) ) ; +#45 = CYLINDRICAL_SURFACE ( 'NONE', #12816, 0.1000000000000002600 ) ; +#44 = FILL_AREA_STYLE ('',( #35311 ) ) ; +#46 = EDGE_LOOP ( 'NONE', ( #28316, #32849, #35401, #18178, #23206, #8713, #38443, #32268 ) ) ; +#48 = ORIENTED_EDGE ( 'NONE', *, *, #8216, .T. ) ; +#47 = ADVANCED_FACE ( 'NONE', ( #38224 ), #37508, .F. ) ; +#49 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#50 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.056601140521967900E-031 ) ) ; +#51 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9172 ) ) ; +#52 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#53 = CARTESIAN_POINT ( 'NONE', ( -3.978589795751490900, 0.5300017452961685000, -4.414589803375032600 ) ) ; +#54 = ORIENTED_EDGE ( 'NONE', *, *, #23721, .F. ) ; +#56 = FILL_AREA_STYLE ('',( #18120 ) ) ; +#55 = SURFACE_SIDE_STYLE ('',( #8129 ) ) ; +#57 = PRESENTATION_STYLE_ASSIGNMENT (( #12728 ) ) ; +#58 = ADVANCED_FACE ( 'NONE', ( #41275 ), #7364, .F. ) ; +#59 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#60 = SURFACE_SIDE_STYLE ('',( #24935 ) ) ; +#61 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#62 = ORIENTED_EDGE ( 'NONE', *, *, #26133, .T. ) ; +#63 = VECTOR ( 'NONE', #25678, 1000.000000000000000 ) ; +#64 = EDGE_CURVE ( 'NONE', #21135, #11430, #7902, .T. ) ; +#65 = VECTOR ( 'NONE', #1805, 1000.000000000000000 ) ; +#66 = FILL_AREA_STYLE ('',( #18421 ) ) ; +#67 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#68 = ORIENTED_EDGE ( 'NONE', *, *, #263, .F. ) ; +#69 = FACE_OUTER_BOUND ( 'NONE', #34794, .T. ) ; +#70 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#71 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#72 = LINE ( 'NONE', #34461, #7591 ) ; +#73 = EDGE_CURVE ( 'NONE', #34849, #41621, #32142, .T. ) ; +#74 = STYLED_ITEM ( 'NONE', ( #40904 ), #23763 ) ; +#75 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#76 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid39', #39487 ) ; +#77 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#78 = ORIENTED_EDGE ( 'NONE', *, *, #19991, .T. ) ; +#79 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#80 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#81 = STYLED_ITEM ( 'NONE', ( #29366 ), #22867 ) ; +#82 = ORIENTED_EDGE ( 'NONE', *, *, #13559, .T. ) ; +#83 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#84 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16548 ) ) ; +#85 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#86 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, 2.322941965694886000, -1.250000000000000000 ) ) ; +#87 = PLANE ( 'NONE', #9098 ) ; +#88 = ORIENTED_EDGE ( 'NONE', *, *, #30147, .F. ) ; +#89 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39240 ) ) ; +#90 = VECTOR ( 'NONE', #164, 1000.000000000000000 ) ; +#91 = SURFACE_STYLE_USAGE ( .BOTH. , #3286 ) ; +#92 = ADVANCED_FACE ( 'NONE', ( #5891 ), #1350, .T. ) ; +#93 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19557 ) ) ; +#94 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#95 = SURFACE_STYLE_FILL_AREA ( #34684 ) ; +#96 = VECTOR ( 'NONE', #16921, 1000.000000000000000 ) ; +#98 = AXIS2_PLACEMENT_3D ( 'NONE', #26626, #3721, #39586 ) ; +#97 = AXIS2_PLACEMENT_3D ( 'NONE', #38425, #41666, #18833 ) ; +#99 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#100 = PLANE ( 'NONE', #27210 ) ; +#101 = PLANE ( 'NONE', #33138 ) ; +#102 = LINE ( 'NONE', #6368, #18274 ) ; +#104 = EDGE_CURVE ( 'NONE', #9995, #34550, #18517, .T. ) ; +#103 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28204 ), #30359 ) ; +#105 = FILL_AREA_STYLE ('',( #29552 ) ) ; +#106 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#107 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745296168900, -3.814459358809384200 ) ) ; +#108 = AXIS2_PLACEMENT_3D ( 'NONE', #24389, #34404, #18036 ) ; +#109 = FILL_AREA_STYLE ('',( #32799 ) ) ; +#110 = LINE ( 'NONE', #5628, #24853 ) ; +#111 = FILL_AREA_STYLE ('',( #22655 ) ) ; +#112 = VERTEX_POINT ( 'NONE', #33334 ) ; +#113 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#114 = VECTOR ( 'NONE', #9115, 1000.000000000000000 ) ; +#115 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#116 = EDGE_LOOP ( 'NONE', ( #1159, #9810, #41657, #15822 ) ) ; +#117 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12647, 'distance_accuracy_value', 'NONE'); +#118 = VERTEX_POINT ( 'NONE', #39017 ) ; +#119 = SURFACE_STYLE_FILL_AREA ( #30070 ) ; +#120 = VECTOR ( 'NONE', #33117, 1000.000000000000000 ) ; +#121 = EDGE_LOOP ( 'NONE', ( #26458, #23781, #29847, #34038 ) ) ; +#122 = EDGE_LOOP ( 'NONE', ( #3141, #33743, #33345, #23448 ) ) ; +#123 = ORIENTED_EDGE ( 'NONE', *, *, #25716, .T. ) ; +#124 = FILL_AREA_STYLE ('',( #9650 ) ) ; +#125 = FILL_AREA_STYLE_COLOUR ( '', #27086 ) ; +#126 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#127 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.080001745296178500, -5.599999999999999600 ) ) ; +#128 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#129 = VERTEX_POINT ( 'NONE', #8393 ) ; +#130 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#131 = SURFACE_SIDE_STYLE ('',( #22411 ) ) ; +#132 = CIRCLE ( 'NONE', #7714, 1.450380239188924400 ) ; +#133 = ORIENTED_EDGE ( 'NONE', *, *, #34599, .F. ) ; +#134 = EDGE_CURVE ( 'NONE', #39218, #19617, #13401, .T. ) ; +#135 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#136 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#137 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#138 = EDGE_CURVE ( 'NONE', #30601, #34936, #35154, .T. ) ; +#139 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12569, 'distance_accuracy_value', 'NONE'); +#140 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25526 ) ) ; +#141 = CARTESIAN_POINT ( 'NONE', ( 3.237718385398000300, -0.07499999999999999700, 0.7155313145785999800 ) ) ; +#142 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#143 = FILL_AREA_STYLE ('',( #278 ) ) ; +#144 = SURFACE_STYLE_FILL_AREA ( #39164 ) ; +#145 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#146 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 1.630001745296168100, -3.999999999999998200 ) ) ; +#147 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #27400, #17951, #11422, #33900 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#148 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#149 = AXIS2_PLACEMENT_3D ( 'NONE', #1231, #39304, #36633 ) ; +#150 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#151 = CARTESIAN_POINT ( 'NONE', ( -3.178333333333019300, -0.2999999999999999900, -0.06128090415826408600 ) ) ; +#152 = FACE_OUTER_BOUND ( 'NONE', #121, .T. ) ; +#153 = EDGE_LOOP ( 'NONE', ( #1053, #21175 ) ) ; +#154 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#155 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#156 = AXIS2_PLACEMENT_3D ( 'NONE', #4229, #27001, #4666 ) ; +#157 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.2300017452961680700, -6.224999999999999600 ) ) ; +#158 = STYLED_ITEM ( 'NONE', ( #34109 ), #31366 ) ; +#159 = EDGE_LOOP ( 'NONE', ( #20647, #36531 ) ) ; +#161 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32485 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22635, #32785, #25885 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#160 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7378 ) ) ; +#162 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.879999999999742500, -0.2339555568811695900 ) ) ; +#165 = EDGE_CURVE ( 'NONE', #41672, #15629, #11383, .T. ) ; +#164 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#163 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6171 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38106, #37843, #18516 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#166 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#167 = VERTEX_POINT ( 'NONE', #5077 ) ; +#168 = CARTESIAN_POINT ( 'NONE', ( 4.449999999999999300, -0.01886685437025778900, -7.500000000000000900 ) ) ; +#169 = FILL_AREA_STYLE ('',( #38645 ) ) ; +#171 = AXIS2_PLACEMENT_3D ( 'NONE', #13725, #4251, #36337 ) ; +#170 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23383 ), #16868 ) ; +#172 = EDGE_LOOP ( 'NONE', ( #32277, #16205, #17173, #7301 ) ) ; +#173 = ORIENTED_EDGE ( 'NONE', *, *, #17250, .T. ) ; +#174 = SURFACE_STYLE_FILL_AREA ( #39105 ) ; +#175 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#176 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#177 = LINE ( 'NONE', #35023, #19843 ) ; +#178 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20831, 'distance_accuracy_value', 'NONE'); +#179 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#180 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.949998254703823300, -5.767712434446771400 ) ) ; +#181 = PLANE ( 'NONE', #33205 ) ; +#182 = PRESENTATION_STYLE_ASSIGNMENT (( #12772 ) ) ; +#183 = LINE ( 'NONE', #27220, #40556 ) ; +#184 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#185 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#186 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#187 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11690, 'distance_accuracy_value', 'NONE'); +#188 = ORIENTED_EDGE ( 'NONE', *, *, #35234, .F. ) ; +#189 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169000, -3.214459358809383700 ) ) ; +#190 = EDGE_CURVE ( 'NONE', #34872, #6960, #33656, .T. ) ; +#191 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244514300E-016 ) ) ; +#192 = FILL_AREA_STYLE ('',( #28398 ) ) ; +#193 = ORIENTED_EDGE ( 'NONE', *, *, #36957, .T. ) ; +#194 = CARTESIAN_POINT ( 'NONE', ( 4.770000000000131900, -0.2800000000000026400, -0.5000000000000879300 ) ) ; +#195 = EDGE_CURVE ( 'NONE', #15318, #3259, #34669, .T. ) ; +#196 = ORIENTED_EDGE ( 'NONE', *, *, #1718, .T. ) ; +#197 = CARTESIAN_POINT ( 'NONE', ( -3.395000000000000000, -0.4636038969321074100, -3.300000000000000300 ) ) ; +#198 = ORIENTED_EDGE ( 'NONE', *, *, #14009, .T. ) ; +#200 = ORIENTED_EDGE ( 'NONE', *, *, #37625, .F. ) ; +#199 = PRESENTATION_STYLE_ASSIGNMENT (( #26322 ) ) ; +#201 = AXIS2_PLACEMENT_3D ( 'NONE', #34406, #1968, #31153 ) ; +#202 = ORIENTED_EDGE ( 'NONE', *, *, #2284, .T. ) ; +#203 = LINE ( 'NONE', #33598, #34525 ) ; +#204 = CIRCLE ( 'NONE', #41004, 0.1000000000000000500 ) ; +#205 = ORIENTED_EDGE ( 'NONE', *, *, #23375, .T. ) ; +#206 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#207 = PRESENTATION_STYLE_ASSIGNMENT (( #9268 ) ) ; +#208 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#209 = CARTESIAN_POINT ( 'NONE', ( -3.027045797641987300, 0.3500000000000001400, -1.523650442969290300 ) ) ; +#210 = ADVANCED_FACE ( 'NONE', ( #41234 ), #29597, .T. ) ; +#211 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5522 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21063, #36851, #17521 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#212 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#213 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#214 = FACE_OUTER_BOUND ( 'NONE', #31986, .T. ) ; +#216 = EDGE_CURVE ( 'NONE', #1444, #33335, #9349, .T. ) ; +#215 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28311 ), #33454 ) ; +#217 = CARTESIAN_POINT ( 'NONE', ( 3.242513005636281000, -0.2999999999999999900, 0.7036642131129724500 ) ) ; +#218 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#219 = LINE ( 'NONE', #18196, #10239 ) ; +#220 = PRESENTATION_STYLE_ASSIGNMENT (( #32589 ) ) ; +#222 = STYLED_ITEM ( 'NONE', ( #26139 ), #2281 ) ; +#221 = STYLED_ITEM ( 'NONE', ( #3453 ), #27305 ) ; +#223 = STYLED_ITEM ( 'NONE', ( #1657 ), #40155 ) ; +#224 = SURFACE_SIDE_STYLE ('',( #38689 ) ) ; +#225 = SURFACE_SIDE_STYLE ('',( #6799 ) ) ; +#226 = LINE ( 'NONE', #7905, #14325 ) ; +#227 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18336 ) ) ; +#228 = FILL_AREA_STYLE_COLOUR ( '', #75 ) ; +#229 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#230 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#231 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.180001745296166000, -4.775000000000000400 ) ) ; +#232 = CARTESIAN_POINT ( 'NONE', ( -4.770000000000131900, 0.2800000000000027500, -0.5000000000000879300 ) ) ; +#233 = SURFACE_SIDE_STYLE ('',( #25342 ) ) ; +#234 = VERTEX_POINT ( 'NONE', #17636 ) ; +#235 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#236 = EDGE_LOOP ( 'NONE', ( #29351, #850, #12967, #6438 ) ) ; +#237 = ORIENTED_EDGE ( 'NONE', *, *, #12391, .T. ) ; +#238 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#239 = ORIENTED_EDGE ( 'NONE', *, *, #24713, .F. ) ; +#240 = VERTEX_POINT ( 'NONE', #19771 ) ; +#242 = SURFACE_STYLE_USAGE ( .BOTH. , #29265 ) ; +#241 = PRESENTATION_STYLE_ASSIGNMENT (( #32656 ) ) ; +#243 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -500000.0000000000600, -3.514459358691020000 ) ) ; +#244 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28997, 'distance_accuracy_value', 'NONE'); +#245 = SURFACE_SIDE_STYLE ('',( #1921 ) ) ; +#246 = ADVANCED_FACE ( 'NONE', ( #9867 ), #26681, .T. ) ; +#247 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#248 = FACE_OUTER_BOUND ( 'NONE', #15313, .T. ) ; +#249 = PRESENTATION_STYLE_ASSIGNMENT (( #21816 ) ) ; +#250 = EDGE_CURVE ( 'NONE', #35736, #22511, #39047, .T. ) ; +#251 = VECTOR ( 'NONE', #22677, 1000.000000000000000 ) ; +#252 = FACE_OUTER_BOUND ( 'NONE', #33991, .T. ) ; +#253 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.4300017452961689100, -4.975000000000000500 ) ) ; +#254 = EDGE_CURVE ( 'NONE', #22169, #32175, #39184, .T. ) ; +#255 = EDGE_CURVE ( 'NONE', #3598, #25038, #38172, .T. ) ; +#256 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.779999999999868400, 0.0000000000000000000 ) ) ; +#257 = FACE_OUTER_BOUND ( 'NONE', #20032, .T. ) ; +#258 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#259 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21045 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33566, #23959, #23826 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#260 = ADVANCED_FACE ( 'NONE', ( #30617 ), #12428, .F. ) ; +#261 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, -1.399999999999999900 ) ) ; +#262 = CARTESIAN_POINT ( 'NONE', ( 2.859829086680000000, -0.2000000000000001500, 1.149999999999999900 ) ) ; +#263 = EDGE_CURVE ( 'NONE', #14718, #20956, #36651, .T. ) ; +#264 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38726, 'distance_accuracy_value', 'NONE'); +#265 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#266 = FILL_AREA_STYLE_COLOUR ( '', #41365 ) ; +#267 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#268 = AXIS2_PLACEMENT_3D ( 'NONE', #25938, #16337, #9811 ) ; +#269 = EDGE_LOOP ( 'NONE', ( #8530, #11527, #35078, #27276 ) ) ; +#270 = AXIS2_PLACEMENT_3D ( 'NONE', #19381, #15400, #15121 ) ; +#271 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#272 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#273 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#276 = EDGE_CURVE ( 'NONE', #17567, #4564, #18478, .T. ) ; +#275 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13117 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11581, #37175, #5235 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#274 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#277 = CARTESIAN_POINT ( 'NONE', ( 1.149999999999999900, -1.380001745296132400, -6.031671842700004200 ) ) ; +#278 = FILL_AREA_STYLE_COLOUR ( '', #23691 ) ; +#279 = ORIENTED_EDGE ( 'NONE', *, *, #4177, .T. ) ; +#280 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, 0.2999999999999999900, 0.6780706550913999700 ) ) ; +#281 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#282 = SURFACE_STYLE_FILL_AREA ( #27802 ) ; +#283 = ORIENTED_EDGE ( 'NONE', *, *, #22663, .F. ) ; +#284 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24896 ), #2434 ) ; +#285 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#286 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#287 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25679 ) ) ; +#288 = SURFACE_STYLE_FILL_AREA ( #29490 ) ; +#289 = LINE ( 'NONE', #16273, #40131 ) ; +#290 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -3.516331370223256700E-016 ) ) ; +#291 = AXIS2_PLACEMENT_3D ( 'NONE', #6378, #41802, #41659 ) ; +#292 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875040400E-015, 0.0000000000000000000 ) ) ; +#293 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#295 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20570 ), #1095 ) ; +#294 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#296 = LINE ( 'NONE', #41151, #15409 ) ; +#297 = EDGE_LOOP ( 'NONE', ( #16060, #35579, #33549, #14420 ) ) ; +#298 = SURFACE_SIDE_STYLE ('',( #23761 ) ) ; +#299 = SURFACE_STYLE_FILL_AREA ( #26906 ) ; +#300 = ADVANCED_FACE ( 'NONE', ( #41199 ), #9833, .F. ) ; +#301 = ORIENTED_EDGE ( 'NONE', *, *, #11670, .F. ) ; +#302 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#303 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#304 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.180001745296169700, -4.099999999999999600 ) ) ; +#305 = PLANE ( 'NONE', #18000 ) ; +#306 = EDGE_LOOP ( 'NONE', ( #8122, #32195 ) ) ; +#307 = SURFACE_STYLE_FILL_AREA ( #5549 ) ; +#308 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#309 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8856, 'distance_accuracy_value', 'NONE'); +#310 = SURFACE_SIDE_STYLE ('',( #32730 ) ) ; +#311 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#312 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#313 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.5199999999999842500, -5.299999999999999800 ) ) ; +#314 = EDGE_CURVE ( 'NONE', #37367, #14890, #35645, .T. ) ; +#315 = ORIENTED_EDGE ( 'NONE', *, *, #36698, .T. ) ; +#316 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#317 = EDGE_CURVE ( 'NONE', #8969, #13045, #7830, .T. ) ; +#318 = PRESENTATION_STYLE_ASSIGNMENT (( #23144 ) ) ; +#319 = ORIENTED_EDGE ( 'NONE', *, *, #23232, .F. ) ; +#320 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#321 = CARTESIAN_POINT ( 'NONE', ( -0.2500000000000032800, -2.031000000000001500, -6.749999999999999100 ) ) ; +#322 = AXIS2_PLACEMENT_3D ( 'NONE', #2262, #28072, #15230 ) ; +#323 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#324 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#325 = AXIS2_PLACEMENT_3D ( 'NONE', #25811, #3477, #26074 ) ; +#326 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#327 = ORIENTED_EDGE ( 'NONE', *, *, #418, .F. ) ; +#328 = STYLED_ITEM ( 'NONE', ( #28065 ), #404 ) ; +#329 = SURFACE_SIDE_STYLE ('',( #5189 ) ) ; +#330 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12450 ), #20369 ) ; +#331 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27304 ) ) ; +#332 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#334 = AXIS2_PLACEMENT_3D ( 'NONE', #14512, #8546, #8135 ) ; +#333 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26086 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38153, #5964, #28702 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#337 = EDGE_CURVE ( 'NONE', #25159, #11605, #38655, .T. ) ; +#336 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#335 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7579 ) ) ; +#338 = STYLED_ITEM ( 'NONE', ( #14248 ), #8924 ) ; +#339 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#340 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4299, 'distance_accuracy_value', 'NONE'); +#341 = CARTESIAN_POINT ( 'NONE', ( -3.245000000007000700, -0.2999999999999999900, -1.600000000000000800 ) ) ; +#342 = CARTESIAN_POINT ( 'NONE', ( -2.995000000012500300, 0.3499999999999999800, -1.399999999965187500 ) ) ; +#343 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37678 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16479, #22971, #571 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#344 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.056601140521966100E-031 ) ) ; +#345 = ORIENTED_EDGE ( 'NONE', *, *, #19723, .T. ) ; +#346 = ADVANCED_FACE ( 'NONE', ( #32595 ), #9555, .F. ) ; +#347 = SURFACE_SIDE_STYLE ('',( #33945 ) ) ; +#348 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.3300017452961695500, -6.325000000000000200 ) ) ; +#349 = ORIENTED_EDGE ( 'NONE', *, *, #20277, .F. ) ; +#350 = VERTEX_POINT ( 'NONE', #12667 ) ; +#351 = PRESENTATION_STYLE_ASSIGNMENT (( #3657 ) ) ; +#352 = VERTEX_POINT ( 'NONE', #26239 ) ; +#353 = CIRCLE ( 'NONE', #35390, 0.2999999999999999300 ) ; +#354 = PRESENTATION_STYLE_ASSIGNMENT (( #10238 ) ) ; +#355 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.139998254717356800, -6.299996877890552400 ) ) ; +#356 = FACE_OUTER_BOUND ( 'NONE', #24735, .T. ) ; +#357 = ORIENTED_EDGE ( 'NONE', *, *, #40486, .F. ) ; +#358 = DIRECTION ( 'NONE', ( 4.840188270024573500E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#359 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998526700, -1.949999999999999500 ) ) ; +#360 = VECTOR ( 'NONE', #19986, 1000.000000000000000 ) ; +#361 = EDGE_LOOP ( 'NONE', ( #40380, #9075, #11121, #14563 ) ) ; +#362 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#363 = FILL_AREA_STYLE ('',( #3162 ) ) ; +#364 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#365 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000800, 1.480001745296169600, -1.650000000000000400 ) ) ; +#366 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.891205793294662500E-015, 0.0000000000000000000 ) ) ; +#367 = EDGE_CURVE ( 'NONE', #32157, #40741, #8822, .T. ) ; +#368 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#369 = DIRECTION ( 'NONE', ( 3.941151930913548000E-045, 1.845450506358318100E-016, 1.000000000000000000 ) ) ; +#370 = CIRCLE ( 'NONE', #399, 0.05000000000000012800 ) ; +#371 = EDGE_CURVE ( 'NONE', #31577, #20124, #19985, .T. ) ; +#372 = STYLED_ITEM ( 'NONE', ( #26636 ), #10596 ) ; +#373 = LINE ( 'NONE', #37715, #15540 ) ; +#374 = PLANE ( 'NONE', #38741 ) ; +#375 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37943 ), #38493 ) ; +#376 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.139998254717370600, -5.049996877890552400 ) ) ; +#377 = ORIENTED_EDGE ( 'NONE', *, *, #21463, .T. ) ; +#378 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#379 = AXIS2_PLACEMENT_3D ( 'NONE', #3304, #10761, #29983 ) ; +#380 = VERTEX_POINT ( 'NONE', #3898 ) ; +#381 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.3699999999999857300, -4.500000000000000000 ) ) ; +#382 = ORIENTED_EDGE ( 'NONE', *, *, #9104, .F. ) ; +#383 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#385 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3089 ), #38503 ) ; +#384 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34444 ) ) ; +#386 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664844900, -1.080001745296171900, -6.250000000000000000 ) ) ; +#387 = LINE ( 'NONE', #33992, #28639 ) ; +#388 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.2800017452961689500, -5.150000000000000400 ) ) ; +#390 = EDGE_CURVE ( 'NONE', #14218, #13500, #15934, .T. ) ; +#389 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6294 ), #11957 ) ; +#391 = ORIENTED_EDGE ( 'NONE', *, *, #21957, .T. ) ; +#392 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.380001745296132400, -6.031671842700004200 ) ) ; +#393 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#394 = VECTOR ( 'NONE', #4018, 1000.000000000000000 ) ; +#395 = SURFACE_SIDE_STYLE ('',( #11444 ) ) ; +#396 = ORIENTED_EDGE ( 'NONE', *, *, #33928, .T. ) ; +#397 = PRESENTATION_STYLE_ASSIGNMENT (( #17795 ) ) ; +#398 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 2.322941965694886000, 0.6999999999999999600 ) ) ; +#400 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31484 ) ) ; +#399 = AXIS2_PLACEMENT_3D ( 'NONE', #33847, #4744, #15039 ) ; +#401 = SURFACE_STYLE_USAGE ( .BOTH. , #36111 ) ; +#402 = FILL_AREA_STYLE_COLOUR ( '', #9684 ) ; +#403 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #35158, #28931, #35449, #6075, #15798, #32032 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.001905866625204583000, 0.002002715335759059000, 0.002099564046313533700 ), + .UNSPECIFIED. ) ; +#404 = ADVANCED_FACE ( 'NONE', ( #34628 ), #1278, .T. ) ; +#405 = SURFACE_SIDE_STYLE ('',( #10149 ) ) ; +#406 = FILL_AREA_STYLE_COLOUR ( '', #21251 ) ; +#407 = FILL_AREA_STYLE ('',( #3744 ) ) ; +#408 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.730424212713734600, -1.049979056049130000 ) ) ; +#409 = ORIENTED_EDGE ( 'NONE', *, *, #39851, .T. ) ; +#410 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#411 = FACE_OUTER_BOUND ( 'NONE', #15538, .T. ) ; +#412 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#413 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.139998254717367300, -5.049996877890552400 ) ) ; +#414 = ORIENTED_EDGE ( 'NONE', *, *, #33146, .T. ) ; +#415 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#416 = SURFACE_STYLE_USAGE ( .BOTH. , #12941 ) ; +#417 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#418 = EDGE_CURVE ( 'NONE', #16333, #7453, #18443, .T. ) ; +#419 = EDGE_LOOP ( 'NONE', ( #41781, #11308, #33140, #40060 ) ) ; +#420 = SURFACE_STYLE_USAGE ( .BOTH. , #32713 ) ; +#421 = ORIENTED_EDGE ( 'NONE', *, *, #11280, .T. ) ; +#422 = ORIENTED_EDGE ( 'NONE', *, *, #4750, .T. ) ; +#423 = CONICAL_SURFACE ( 'NONE', #31541, 1.450424212713734300, 0.0002094395102314604200 ) ; +#424 = CIRCLE ( 'NONE', #17446, 1.450380239188924400 ) ; +#425 = SURFACE_STYLE_FILL_AREA ( #13765 ) ; +#426 = DIRECTION ( 'NONE', ( 0.9961946980917455500, 2.635991797933898700E-016, -0.08715574274765916500 ) ) ; +#427 = VECTOR ( 'NONE', #24115, 1000.000000000000000 ) ; +#428 = EDGE_CURVE ( 'NONE', #25814, #11920, #20477, .T. ) ; +#429 = LINE ( 'NONE', #8391, #3905 ) ; +#430 = ORIENTED_EDGE ( 'NONE', *, *, #36352, .T. ) ; +#431 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, 0.4300017452961685800, -6.850000000000000500 ) ) ; +#432 = ORIENTED_EDGE ( 'NONE', *, *, #23648, .F. ) ; +#433 = PRESENTATION_STYLE_ASSIGNMENT (( #27509 ) ) ; +#434 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.139998254717353500, -6.299996877890552400 ) ) ; +#435 = AXIS2_PLACEMENT_3D ( 'NONE', #28368, #5914, #8719 ) ; +#436 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165600, -6.900000000000000400 ) ) ; +#437 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#438 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -4.675000000000000700 ) ) ; +#439 = VERTEX_POINT ( 'NONE', #10680 ) ; +#440 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.499998254703833500, -5.449999999999994000 ) ) ; +#441 = SURFACE_SIDE_STYLE ('',( #23371 ) ) ; +#442 = ADVANCED_FACE ( 'NONE', ( #27034 ), #796, .F. ) ; +#443 = AXIS2_PLACEMENT_3D ( 'NONE', #13626, #4453, #10654 ) ; +#444 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14374, 'distance_accuracy_value', 'NONE'); +#445 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#446 = SURFACE_SIDE_STYLE ('',( #24920 ) ) ; +#448 = EDGE_CURVE ( 'NONE', #605, #18007, #29593, .T. ) ; +#447 = STYLED_ITEM ( 'NONE', ( #41745 ), #36523 ) ; +#449 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#450 = PRESENTATION_STYLE_ASSIGNMENT (( #30872 ) ) ; +#451 = ORIENTED_EDGE ( 'NONE', *, *, #19124, .T. ) ; +#453 = CARTESIAN_POINT ( 'NONE', ( -4.170000000000001700, 0.2800000000000027500, -0.2000017452961698200 ) ) ; +#452 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#454 = VERTEX_POINT ( 'NONE', #7566 ) ; +#455 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#456 = ADVANCED_FACE ( 'NONE', ( #32053 ), #1268, .F. ) ; +#458 = AXIS2_PLACEMENT_3D ( 'NONE', #29496, #16335, #32414 ) ; +#457 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14238 ) ) ; +#459 = SURFACE_SIDE_STYLE ('',( #29439 ) ) ; +#460 = FILL_AREA_STYLE_COLOUR ( '', #11711 ) ; +#461 = AXIS2_PLACEMENT_3D ( 'NONE', #31199, #37838, #24891 ) ; +#462 = ORIENTED_EDGE ( 'NONE', *, *, #27548, .T. ) ; +#463 = FACE_OUTER_BOUND ( 'NONE', #6545, .T. ) ; +#464 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#465 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35070 ), #2633 ) ; +#466 = VERTEX_POINT ( 'NONE', #27096 ) ; +#467 = ORIENTED_EDGE ( 'NONE', *, *, #23844, .F. ) ; +#468 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#469 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#470 = LINE ( 'NONE', #16180, #30266 ) ; +#471 = SURFACE_STYLE_FILL_AREA ( #34714 ) ; +#472 = LINE ( 'NONE', #40035, #31275 ) ; +#473 = CARTESIAN_POINT ( 'NONE', ( 2.149999999999999900, -1.139998254717353500, -6.299996877890552400 ) ) ; +#474 = VERTEX_POINT ( 'NONE', #15203 ) ; +#475 = LINE ( 'NONE', #6447, #7994 ) ; +#476 = EDGE_LOOP ( 'NONE', ( #14311, #37252, #7689, #9826 ) ) ; +#477 = ORIENTED_EDGE ( 'NONE', *, *, #37960, .T. ) ; +#478 = SURFACE_SIDE_STYLE ('',( #17365 ) ) ; +#479 = CARTESIAN_POINT ( 'NONE', ( -3.245000000007000700, -0.3292893218813453000, -1.600000000000000800 ) ) ; +#480 = CARTESIAN_POINT ( 'NONE', ( -3.145000000000000000, -0.2999999999999999900, 0.03300000000000000200 ) ) ; +#481 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#482 = SURFACE_SIDE_STYLE ('',( #39657 ) ) ; +#483 = ORIENTED_EDGE ( 'NONE', *, *, #34543, .F. ) ; +#484 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#485 = SURFACE_STYLE_USAGE ( .BOTH. , #28964 ) ; +#486 = LINE ( 'NONE', #39480, #32287 ) ; +#487 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#488 = EDGE_CURVE ( 'NONE', #41825, #37036, #29306, .T. ) ; +#489 = PLANE ( 'NONE', #6525 ) ; +#490 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34950, 'distance_accuracy_value', 'NONE'); +#491 = CYLINDRICAL_SURFACE ( 'NONE', #7379, 0.3000000000000007700 ) ; +#493 = DIRECTION ( 'NONE', ( 2.168401191219098200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#492 = CARTESIAN_POINT ( 'NONE', ( -2.995000000029000000, -0.3499999999999999200, -1.546446609391131500 ) ) ; +#494 = EDGE_CURVE ( 'NONE', #28949, #25964, #5275, .T. ) ; +#495 = CARTESIAN_POINT ( 'NONE', ( 4.010831726188969900, 0.7300017452961703500, -14.55000000000000100 ) ) ; +#496 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#497 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169000, -3.514459358809377300 ) ) ; +#498 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -1.149999999999999900 ) ) ; +#499 = ADVANCED_FACE ( 'NONE', ( #9793 ), #34262, .F. ) ; +#500 = EDGE_CURVE ( 'NONE', #26824, #18527, #35605, .T. ) ; +#501 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34519, 'distance_accuracy_value', 'NONE'); +#502 = LINE ( 'NONE', #4690, #24222 ) ; +#503 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#504 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#505 = SURFACE_SIDE_STYLE ('',( #34556 ) ) ; +#506 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#507 = ORIENTED_EDGE ( 'NONE', *, *, #19231, .T. ) ; +#508 = PRESENTATION_STYLE_ASSIGNMENT (( #21699 ) ) ; +#509 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28062 ) ) ; +#510 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 5.706431195920516700E-031 ) ) ; +#511 = ORIENTED_EDGE ( 'NONE', *, *, #20490, .T. ) ; +#512 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#513 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#514 = VECTOR ( 'NONE', #28171, 1000.000000000000000 ) ; +#515 = AXIS2_PLACEMENT_3D ( 'NONE', #38575, #22366, #19272 ) ; +#516 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#517 = CARTESIAN_POINT ( 'NONE', ( -0.2500000000000032800, 0.4300017452961685800, -6.750000000000000000 ) ) ; +#520 = EDGE_CURVE ( 'NONE', #16642, #29274, #24521, .T. ) ; +#519 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#518 = AXIS2_PLACEMENT_3D ( 'NONE', #33477, #4228, #17244 ) ; +#521 = VERTEX_POINT ( 'NONE', #21583 ) ; +#522 = VECTOR ( 'NONE', #13796, 1000.000000000000100 ) ; +#523 = ORIENTED_EDGE ( 'NONE', *, *, #3251, .F. ) ; +#524 = EDGE_LOOP ( 'NONE', ( #2052, #22589, #33781, #30335 ) ) ; +#525 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, 0.2799999999999973100, -0.2339555568811697600 ) ) ; +#527 = AXIS2_PLACEMENT_3D ( 'NONE', #12963, #32031, #9574 ) ; +#526 = STYLED_ITEM ( 'NONE', ( #28138 ), #27679 ) ; +#528 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#529 = STYLED_ITEM ( 'NONE', ( #12581 ), #40424 ) ; +#530 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#531 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24318 ), #22703 ) ; +#532 = VERTEX_POINT ( 'NONE', #40596 ) ; +#533 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#534 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33775 ), #27850 ) ; +#535 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#536 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#537 = VECTOR ( 'NONE', #24645, 1000.000000000000000 ) ; +#538 = SURFACE_STYLE_FILL_AREA ( #38891 ) ; +#539 = CARTESIAN_POINT ( 'NONE', ( -2.965005742680040200, -0.2124614162259312300, 1.131307875661103200 ) ) ; +#540 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#541 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#542 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#543 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#544 = SURFACE_STYLE_FILL_AREA ( #33079 ) ; +#545 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#546 = VERTEX_POINT ( 'NONE', #24689 ) ; +#547 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#548 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#549 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#550 = SURFACE_SIDE_STYLE ('',( #35742 ) ) ; +#551 = PLANE ( 'NONE', #721 ) ; +#552 = EDGE_LOOP ( 'NONE', ( #21302, #40279, #10397, #18800 ) ) ; +#553 = LINE ( 'NONE', #9195, #33870 ) ; +#554 = ORIENTED_EDGE ( 'NONE', *, *, #26386, .T. ) ; +#555 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#556 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#557 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#558 = ADVANCED_FACE ( 'NONE', ( #9313 ), #5299, .T. ) ; +#559 = VECTOR ( 'NONE', #29252, 1000.000000000000000 ) ; +#560 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#561 = VERTEX_POINT ( 'NONE', #37783 ) ; +#562 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#563 = VECTOR ( 'NONE', #17947, 1000.000000000000000 ) ; +#564 = VERTEX_POINT ( 'NONE', #28455 ) ; +#565 = ORIENTED_EDGE ( 'NONE', *, *, #1505, .F. ) ; +#566 = EDGE_CURVE ( 'NONE', #9503, #24307, #12370, .T. ) ; +#567 = SURFACE_SIDE_STYLE ('',( #40703 ) ) ; +#568 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#569 = AXIS2_PLACEMENT_3D ( 'NONE', #29372, #487, #23180 ) ; +#570 = FILL_AREA_STYLE_COLOUR ( '', #36347 ) ; +#571 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#572 = EDGE_CURVE ( 'NONE', #38026, #34730, #35073, .T. ) ; +#573 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.931303021499040500, -0.3590461068823618300 ) ) ; +#574 = EDGE_LOOP ( 'NONE', ( #30828, #10838 ) ) ; +#575 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#576 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000012400, -1.949998254703821700, -6.732287565553231300 ) ) ; +#577 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21863 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10702, #26989, #33737 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#578 = LINE ( 'NONE', #40604, #14676 ) ; +#579 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -2.399999999999999500 ) ) ; +#580 = LINE ( 'NONE', #26700, #33892 ) ; +#582 = EDGE_CURVE ( 'NONE', #598, #4444, #5775, .T. ) ; +#581 = AXIS2_PLACEMENT_3D ( 'NONE', #22299, #6189, #35699 ) ; +#583 = CARTESIAN_POINT ( 'NONE', ( 1.649999999999999900, -1.380001745296130600, -6.031671842700004200 ) ) ; +#584 = VECTOR ( 'NONE', #28146, 1000.000000000000000 ) ; +#585 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#586 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31538 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8815, #9226, #31853 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#587 = LINE ( 'NONE', #408, #26321 ) ; +#588 = FILL_AREA_STYLE ('',( #36291 ) ) ; +#589 = ORIENTED_EDGE ( 'NONE', *, *, #29324, .F. ) ; +#591 = AXIS2_PLACEMENT_3D ( 'NONE', #5429, #15324, #28031 ) ; +#590 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31652 ), #14352 ) ; +#592 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.380001745296134000, -6.699999999999994000 ) ) ; +#593 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -2.322941965694886000, -1.250000000000000000 ) ) ; +#594 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#595 = CYLINDRICAL_SURFACE ( 'NONE', #10710, 0.04999999999999991300 ) ; +#596 = CARTESIAN_POINT ( 'NONE', ( 9.035018104045870900E-016, 10.30000000000000100, -1.249999999999997800 ) ) ; +#597 = ORIENTED_EDGE ( 'NONE', *, *, #36100, .T. ) ; +#598 = VERTEX_POINT ( 'NONE', #35240 ) ; +#599 = SURFACE_STYLE_FILL_AREA ( #24226 ) ; +#600 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#601 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.499998254703825300, -5.449999999999994000 ) ) ; +#602 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35447, 'distance_accuracy_value', 'NONE'); +#603 = ORIENTED_EDGE ( 'NONE', *, *, #39813, .F. ) ; +#604 = FACE_OUTER_BOUND ( 'NONE', #20616, .T. ) ; +#605 = VERTEX_POINT ( 'NONE', #25512 ) ; +#606 = ORIENTED_EDGE ( 'NONE', *, *, #3544, .T. ) ; +#607 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#608 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#609 = PLANE ( 'NONE', #12388 ) ; +#610 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#611 = ORIENTED_EDGE ( 'NONE', *, *, #18170, .T. ) ; +#612 = VECTOR ( 'NONE', #25810, 1000.000000000000000 ) ; +#613 = PRESENTATION_STYLE_ASSIGNMENT (( #416 ) ) ; +#614 = ORIENTED_EDGE ( 'NONE', *, *, #36670, .T. ) ; +#615 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#616 = PRESENTATION_STYLE_ASSIGNMENT (( #15954 ) ) ; +#617 = EDGE_CURVE ( 'NONE', #5207, #14812, #11358, .T. ) ; +#618 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#619 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#620 = CARTESIAN_POINT ( 'NONE', ( -3.098553390597959600, -0.3500000000000000300, -1.650000000005126900 ) ) ; +#621 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#622 = ADVANCED_FACE ( 'NONE', ( #2771 ), #40119, .T. ) ; +#623 = CARTESIAN_POINT ( 'NONE', ( 1.486602540378444600, 1.480001745296169600, -1.700000000000002000 ) ) ; +#624 = EDGE_CURVE ( 'NONE', #37804, #37363, #12321, .T. ) ; +#625 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17113 ) ) ; +#626 = ORIENTED_EDGE ( 'NONE', *, *, #39217, .T. ) ; +#627 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#628 = SURFACE_STYLE_USAGE ( .BOTH. , #6780 ) ; +#629 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000032500, 0.2800017452961687200, -6.749999999999999100 ) ) ; +#630 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#631 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3934, 'distance_accuracy_value', 'NONE'); +#632 = ORIENTED_EDGE ( 'NONE', *, *, #17577, .F. ) ; +#633 = DIRECTION ( 'NONE', ( 7.744301232039317900E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#634 = PRESENTATION_STYLE_ASSIGNMENT (( #38832 ) ) ; +#635 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25937 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8877, #14984, #37987 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#636 = PLANE ( 'NONE', #30316 ) ; +#637 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#638 = VECTOR ( 'NONE', #32207, 1000.000000000000000 ) ; +#639 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#640 = ORIENTED_EDGE ( 'NONE', *, *, #17911, .F. ) ; +#641 = AXIS2_PLACEMENT_3D ( 'NONE', #14695, #5084, #34040 ) ; +#642 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#643 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36058 ), #14949 ) ; +#644 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#647 = AXIS2_PLACEMENT_3D ( 'NONE', #38980, #22899, #3549 ) ; +#646 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#645 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6290 ) ) ; +#648 = FILL_AREA_STYLE_COLOUR ( '', #40127 ) ; +#649 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -1.049979056049130000 ) ) ; +#650 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -1.999999999999999600 ) ) ; +#651 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#652 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#654 = EDGE_CURVE ( 'NONE', #13256, #10288, #29565, .T. ) ; +#653 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6533 ), #913 ) ; +#655 = EDGE_LOOP ( 'NONE', ( #4579, #3953, #11879, #6235 ) ) ; +#656 = FILL_AREA_STYLE_COLOUR ( '', #1518 ) ; +#657 = FACE_OUTER_BOUND ( 'NONE', #30549, .T. ) ; +#658 = ORIENTED_EDGE ( 'NONE', *, *, #8050, .T. ) ; +#659 = CARTESIAN_POINT ( 'NONE', ( 4.449999999999999300, -1.400001745296165500, -7.500000000000000900 ) ) ; +#660 = VECTOR ( 'NONE', #20627, 1000.000000000000000 ) ; +#661 = LINE ( 'NONE', #36863, #20874 ) ; +#662 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#664 = AXIS2_PLACEMENT_3D ( 'NONE', #31292, #24975, #41032 ) ; +#663 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21746 ), #22519 ) ; +#665 = VECTOR ( 'NONE', #37151, 1000.000000000000000 ) ; +#666 = ADVANCED_FACE ( 'NONE', ( #28550 ), #30539, .F. ) ; +#667 = DIRECTION ( 'NONE', ( 6.056601140521967000E-031, 1.987721548152419000E-045, 1.000000000000000000 ) ) ; +#668 = FACE_OUTER_BOUND ( 'NONE', #20654, .T. ) ; +#669 = SURFACE_SIDE_STYLE ('',( #19994 ) ) ; +#670 = DIRECTION ( 'NONE', ( 4.336808689942015400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#671 = ORIENTED_EDGE ( 'NONE', *, *, #22080, .T. ) ; +#672 = FILL_AREA_STYLE ('',( #26331 ) ) ; +#673 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#674 = SURFACE_STYLE_USAGE ( .BOTH. , #20140 ) ; +#675 = ORIENTED_EDGE ( 'NONE', *, *, #13384, .F. ) ; +#676 = ADVANCED_FACE ( 'NONE', ( #38097 ), #12839, .F. ) ; +#677 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.080001745296136600, -6.250000000000000000 ) ) ; +#678 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, -0.09999999999998375500, -1.749999999999999800 ) ) ; +#679 = LINE ( 'NONE', #1145, #29428 ) ; +#680 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.499998254703822000, -5.049999999999993600 ) ) ; +#681 = EDGE_LOOP ( 'NONE', ( #2590, #20611, #21856, #25998 ) ) ; +#682 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, 0.2800017452961687200, -6.449999999999999300 ) ) ; +#683 = EDGE_CURVE ( 'NONE', #22123, #31839, #23391, .T. ) ; +#684 = LINE ( 'NONE', #31437, #33990 ) ; +#685 = ORIENTED_EDGE ( 'NONE', *, *, #8098, .T. ) ; +#686 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296169600, -0.2339555568811697600 ) ) ; +#687 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000010300, -1.999998254703822000, -3.500000000000000000 ) ) ; +#688 = EDGE_CURVE ( 'NONE', #11525, #30029, #2827, .T. ) ; +#689 = STYLED_ITEM ( 'NONE', ( #8810 ), #11024 ) ; +#690 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#691 = ORIENTED_EDGE ( 'NONE', *, *, #24677, .T. ) ; +#692 = VERTEX_POINT ( 'NONE', #39442 ) ; +#693 = FILL_AREA_STYLE ('',( #7261 ) ) ; +#694 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#695 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #23717, #17229, #26705, #30204, #10837, #27126 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#697 = PRESENTATION_STYLE_ASSIGNMENT (( #24937 ) ) ; +#696 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#698 = DIRECTION ( 'NONE', ( 6.056601140521967000E-031, 1.987721548152419000E-045, 1.000000000000000000 ) ) ; +#699 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37812, 'distance_accuracy_value', 'NONE'); +#700 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#701 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#702 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40419 ) ) ; +#703 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#705 = FILL_AREA_STYLE ('',( #23398 ) ) ; +#704 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31077 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33779, #24328, #7913 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#706 = CIRCLE ( 'NONE', #35045, 0.3000000000000007700 ) ; +#707 = DIRECTION ( 'NONE', ( 3.872150616019659000E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#709 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26654 ), #40425 ) ; +#708 = AXIS2_PLACEMENT_3D ( 'NONE', #3294, #15860, #6538 ) ; +#710 = DIRECTION ( 'NONE', ( -1.084202172485504700E-016, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#711 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33723, 'distance_accuracy_value', 'NONE'); +#712 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14224, 'distance_accuracy_value', 'NONE'); +#713 = ORIENTED_EDGE ( 'NONE', *, *, #12461, .F. ) ; +#716 = EDGE_CURVE ( 'NONE', #21671, #32097, #34590, .T. ) ; +#715 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.07499999999999998300, -0.2088107318966277700 ) ) ; +#714 = AXIS2_PLACEMENT_3D ( 'NONE', #41765, #6340, #19648 ) ; +#717 = CARTESIAN_POINT ( 'NONE', ( 2.995000000025375400, -0.3499999999999999800, -1.399999999994125100 ) ) ; +#718 = ADVANCED_FACE ( 'NONE', ( #6773 ), #1810, .T. ) ; +#719 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#720 = ORIENTED_EDGE ( 'NONE', *, *, #15192, .F. ) ; +#721 = AXIS2_PLACEMENT_3D ( 'NONE', #23101, #36112, #7120 ) ; +#722 = VECTOR ( 'NONE', #28932, 1000.000000000000000 ) ; +#723 = ORIENTED_EDGE ( 'NONE', *, *, #2955, .T. ) ; +#724 = ORIENTED_EDGE ( 'NONE', *, *, #38917, .T. ) ; +#725 = SURFACE_STYLE_USAGE ( .BOTH. , #7151 ) ; +#726 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34964, 'distance_accuracy_value', 'NONE'); +#727 = VERTEX_POINT ( 'NONE', #3847 ) ; +#728 = ORIENTED_EDGE ( 'NONE', *, *, #17195, .T. ) ; +#729 = ORIENTED_EDGE ( 'NONE', *, *, #35993, .F. ) ; +#730 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#731 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#732 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#733 = CARTESIAN_POINT ( 'NONE', ( 3.680000000000000200, -1.380001745296125100, -6.699999999999994000 ) ) ; +#734 = CARTESIAN_POINT ( 'NONE', ( -0.6500000000000000200, -1.380001745296134000, -6.699999999999994000 ) ) ; +#735 = ORIENTED_EDGE ( 'NONE', *, *, #8037, .T. ) ; +#736 = PRESENTATION_STYLE_ASSIGNMENT (( #28790 ) ) ; +#737 = LINE ( 'NONE', #35196, #25473 ) ; +#738 = LINE ( 'NONE', #30141, #21438 ) ; +#739 = VECTOR ( 'NONE', #781, 1000.000000000000000 ) ; +#740 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.032879073410318800E-016 ) ) ; +#741 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#742 = VECTOR ( 'NONE', #22199, 1000.000000000000200 ) ; +#743 = EDGE_CURVE ( 'NONE', #40017, #35724, #27545, .T. ) ; +#744 = FACE_OUTER_BOUND ( 'NONE', #16359, .T. ) ; +#745 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#746 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.3500000000000000300, 0.3499999999999999800 ) ) ; +#747 = SURFACE_SIDE_STYLE ('',( #5160 ) ) ; +#748 = EDGE_CURVE ( 'NONE', #27440, #1731, #16395, .T. ) ; +#749 = CARTESIAN_POINT ( 'NONE', ( 17.14169132166999900, 0.6500000000000001300, -3.250000000000000400 ) ) ; +#750 = VECTOR ( 'NONE', #1061, 1000.000000000000000 ) ; +#751 = AXIS2_PLACEMENT_3D ( 'NONE', #9366, #5591, #41562 ) ; +#752 = ORIENTED_EDGE ( 'NONE', *, *, #5293, .T. ) ; +#753 = ORIENTED_EDGE ( 'NONE', *, *, #10977, .F. ) ; +#754 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18315 ) ) ; +#755 = ORIENTED_EDGE ( 'NONE', *, *, #20225, .T. ) ; +#756 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#758 = EDGE_LOOP ( 'NONE', ( #29060, #29516, #34804, #6000 ) ) ; +#757 = VECTOR ( 'NONE', #24415, 1000.000000000000000 ) ; +#759 = FILL_AREA_STYLE_COLOUR ( '', #29560 ) ; +#760 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#761 = ORIENTED_EDGE ( 'NONE', *, *, #35101, .T. ) ; +#762 = LINE ( 'NONE', #23058, #34069 ) ; +#763 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1923 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4782, #40633, #27378 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#764 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.380001745296165500, -1.999999999999999600 ) ) ; +#766 = EDGE_CURVE ( 'NONE', #39156, #3794, #18975, .T. ) ; +#765 = AXIS2_PLACEMENT_3D ( 'NONE', #39109, #32343, #3539 ) ; +#767 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, 0.07499999999999998300, 0.03300000000000001500 ) ) ; +#768 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, 0.2800017452961687200, -6.849999999999999600 ) ) ; +#769 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#770 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#771 = VECTOR ( 'NONE', #4980, 1000.000000000000000 ) ; +#772 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.380001745296165000, -6.250000000000000000 ) ) ; +#773 = DIRECTION ( 'NONE', ( 0.9396926207859082100, 0.3420201433256694900, -5.715545067758737700E-031 ) ) ; +#775 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39126 ), #2927 ) ; +#774 = STYLED_ITEM ( 'NONE', ( #11204 ), #27200 ) ; +#776 = VECTOR ( 'NONE', #16696, 1000.000000000000100 ) ; +#777 = ORIENTED_EDGE ( 'NONE', *, *, #12614, .T. ) ; +#778 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26159 ) ) ; +#779 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#780 = AXIS2_PLACEMENT_3D ( 'NONE', #41336, #18479, #18899 ) ; +#781 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#783 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2747 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6357, #16099, #28809 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#782 = LINE ( 'NONE', #9834, #34090 ) ; +#784 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#785 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#786 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, 0.07499999999999998300, 0.03299999999999998800 ) ) ; +#787 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#788 = ORIENTED_EDGE ( 'NONE', *, *, #29900, .T. ) ; +#789 = PLANE ( 'NONE', #19942 ) ; +#790 = PLANE ( 'NONE', #26358 ) ; +#791 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30026, 'distance_accuracy_value', 'NONE'); +#792 = FILL_AREA_STYLE ('',( #26034 ) ) ; +#793 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#794 = SURFACE_STYLE_USAGE ( .BOTH. , #13596 ) ; +#795 = EDGE_LOOP ( 'NONE', ( #16804, #2221, #23708, #40215 ) ) ; +#796 = CYLINDRICAL_SURFACE ( 'NONE', #40372, 0.2999999999999999300 ) ; +#797 = PLANE ( 'NONE', #34002 ) ; +#798 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#799 = FACE_OUTER_BOUND ( 'NONE', #32797, .T. ) ; +#800 = CIRCLE ( 'NONE', #36182, 0.1000000000000009100 ) ; +#801 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#802 = LINE ( 'NONE', #31312, #10333 ) ; +#803 = VERTEX_POINT ( 'NONE', #27725 ) ; +#804 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.414176746720224900E-016, -1.000000000000000000 ) ) ; +#805 = ORIENTED_EDGE ( 'NONE', *, *, #12551, .T. ) ; +#806 = FACE_BOUND ( 'NONE', #39485, .T. ) ; +#807 = VECTOR ( 'NONE', #9618, 1000.000000000000000 ) ; +#808 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36560, 'distance_accuracy_value', 'NONE'); +#809 = EDGE_CURVE ( 'NONE', #19265, #11869, #32059, .T. ) ; +#810 = FACE_OUTER_BOUND ( 'NONE', #30431, .T. ) ; +#811 = VECTOR ( 'NONE', #34370, 1000.000000000000000 ) ; +#812 = ORIENTED_EDGE ( 'NONE', *, *, #21523, .T. ) ; +#813 = VECTOR ( 'NONE', #8056, 1000.000000000000000 ) ; +#814 = ORIENTED_EDGE ( 'NONE', *, *, #26061, .F. ) ; +#815 = EDGE_CURVE ( 'NONE', #36449, #853, #23982, .T. ) ; +#816 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.830380236995680300, -0.8400000000000000800 ) ) ; +#817 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760844200E-015 ) ) ; +#818 = SURFACE_STYLE_FILL_AREA ( #20428 ) ; +#819 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#820 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2171 ), #4281 ) ; +#821 = EDGE_LOOP ( 'NONE', ( #1009, #7956, #9450, #23789 ) ) ; +#822 = SURFACE_STYLE_USAGE ( .BOTH. , #36237 ) ; +#823 = EDGE_CURVE ( 'NONE', #34759, #7340, #4272, .T. ) ; +#824 = LINE ( 'NONE', #28714, #1831 ) ; +#825 = SURFACE_SIDE_STYLE ('',( #18608 ) ) ; +#826 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -2.904459358809384600 ) ) ; +#827 = STYLED_ITEM ( 'NONE', ( #31402 ), #21823 ) ; +#828 = AXIS2_PLACEMENT_3D ( 'NONE', #29820, #33072, #26881 ) ; +#829 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -5.075000000000000200 ) ) ; +#831 = EDGE_CURVE ( 'NONE', #38900, #21781, #41164, .T. ) ; +#830 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40038 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15810, #9849, #29076 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#832 = PLANE ( 'NONE', #11213 ) ; +#833 = CARTESIAN_POINT ( 'NONE', ( -4.170000000000001700, -0.2799999999999974200, -3.299999999999999800 ) ) ; +#834 = VERTEX_POINT ( 'NONE', #8629 ) ; +#835 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -1.139998254717364200, -5.049996877890552400 ) ) ; +#836 = ADVANCED_FACE ( 'NONE', ( #7795 ), #24531, .T. ) ; +#837 = ORIENTED_EDGE ( 'NONE', *, *, #20123, .T. ) ; +#839 = STYLED_ITEM ( 'NONE', ( #5415 ), #3632 ) ; +#838 = STYLED_ITEM ( 'NONE', ( #19892 ), #28645 ) ; +#840 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#841 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#842 = ORIENTED_EDGE ( 'NONE', *, *, #27770, .F. ) ; +#843 = PRESENTATION_STYLE_ASSIGNMENT (( #5893 ) ) ; +#844 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#845 = PRESENTATION_STYLE_ASSIGNMENT (( #27501 ) ) ; +#846 = MANIFOLD_SOLID_BREP ( '1-1-solid13', #17913 ) ; +#847 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27581 ) ) ; +#848 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, 0.2800000000000027500, 0.0000000000000000000 ) ) ; +#849 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#850 = ORIENTED_EDGE ( 'NONE', *, *, #29833, .T. ) ; +#852 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1640 ), #5123 ) ; +#851 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#853 = VERTEX_POINT ( 'NONE', #22204 ) ; +#854 = VERTEX_POINT ( 'NONE', #25595 ) ; +#855 = LINE ( 'NONE', #29924, #34157 ) ; +#856 = SURFACE_STYLE_USAGE ( .BOTH. , #7411 ) ; +#857 = LINE ( 'NONE', #14383, #33665 ) ; +#858 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.3699999999999850600, -4.599999999999999600 ) ) ; +#859 = LINE ( 'NONE', #19341, #26091 ) ; +#860 = PRESENTATION_STYLE_ASSIGNMENT (( #34089 ) ) ; +#861 = ORIENTED_EDGE ( 'NONE', *, *, #16302, .T. ) ; +#862 = FACE_OUTER_BOUND ( 'NONE', #1248, .T. ) ; +#863 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#864 = VECTOR ( 'NONE', #18276, 1000.000000000000000 ) ; +#865 = FACE_OUTER_BOUND ( 'NONE', #31463, .T. ) ; +#866 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#867 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#868 = ORIENTED_EDGE ( 'NONE', *, *, #18061, .T. ) ; +#869 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25265, 'distance_accuracy_value', 'NONE'); +#870 = SURFACE_STYLE_FILL_AREA ( #37208 ) ; +#871 = FILL_AREA_STYLE_COLOUR ( '', #21882 ) ; +#872 = LINE ( 'NONE', #32066, #33159 ) ; +#873 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#874 = PRESENTATION_STYLE_ASSIGNMENT (( #28170 ) ) ; +#875 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#876 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998392100, -1.749999999999999800 ) ) ; +#877 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#878 = PLANE ( 'NONE', #7017 ) ; +#879 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.499998254703838600, -5.449999999999994000 ) ) ; +#880 = ADVANCED_FACE ( 'NONE', ( #31908 ), #25380, .T. ) ; +#881 = EDGE_CURVE ( 'NONE', #35724, #12019, #24351, .T. ) ; +#882 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15165, 'distance_accuracy_value', 'NONE'); +#883 = FILL_AREA_STYLE_COLOUR ( '', #30128 ) ; +#884 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#885 = FILL_AREA_STYLE_COLOUR ( '', #29308 ) ; +#886 = EDGE_CURVE ( 'NONE', #7867, #22260, #15740, .T. ) ; +#887 = AXIS2_PLACEMENT_3D ( 'NONE', #14215, #40161, #21017 ) ; +#888 = ORIENTED_EDGE ( 'NONE', *, *, #5721, .T. ) ; +#889 = VECTOR ( 'NONE', #15241, 1000.000000000000000 ) ; +#890 = STYLED_ITEM ( 'NONE', ( #38996 ), #22712 ) ; +#891 = ORIENTED_EDGE ( 'NONE', *, *, #14229, .F. ) ; +#892 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#893 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#894 = VERTEX_POINT ( 'NONE', #22746 ) ; +#895 = VERTEX_POINT ( 'NONE', #39525 ) ; +#896 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745296169300, -2.594459358809384500 ) ) ; +#897 = ADVANCED_FACE ( 'NONE', ( #15236 ), #30356, .T. ) ; +#898 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18738 ), #18989 ) ; +#899 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#900 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#901 = LINE ( 'NONE', #37475, #35212 ) ; +#902 = LINE ( 'NONE', #30937, #34206 ) ; +#903 = FILL_AREA_STYLE ('',( #36567 ) ) ; +#904 = ORIENTED_EDGE ( 'NONE', *, *, #39309, .T. ) ; +#905 = AXIS2_PLACEMENT_3D ( 'NONE', #38947, #32599, #16507 ) ; +#906 = ORIENTED_EDGE ( 'NONE', *, *, #32046, .T. ) ; +#907 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34221 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #924, #39826, #17254 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#908 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#909 = SURFACE_STYLE_FILL_AREA ( #26621 ) ; +#911 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37652 ) ) ; +#910 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33332 ), #13257 ) ; +#912 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#915 = EDGE_CURVE ( 'NONE', #20150, #28663, #5126, .T. ) ; +#914 = SURFACE_SIDE_STYLE ('',( #28442 ) ) ; +#913 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7091 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13468, #20292, #29582 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#916 = CYLINDRICAL_SURFACE ( 'NONE', #23877, 0.05000000000000012800 ) ; +#917 = AXIS2_PLACEMENT_3D ( 'NONE', #10269, #16938, #17089 ) ; +#918 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745296168900, -3.214459358809377500 ) ) ; +#919 = AXIS2_PLACEMENT_3D ( 'NONE', #33930, #40829, #11588 ) ; +#920 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.139998254717356800, -6.299996877890552400 ) ) ; +#921 = CARTESIAN_POINT ( 'NONE', ( 4.620424212713737200, -0.2800000000000026400, -1.049979056049130000 ) ) ; +#922 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#923 = CIRCLE ( 'NONE', #36599, 0.09999999999999999200 ) ; +#924 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#925 = EDGE_LOOP ( 'NONE', ( #32245, #7224 ) ) ; +#926 = PRESENTATION_STYLE_ASSIGNMENT (( #5657 ) ) ; +#928 = SURFACE_STYLE_USAGE ( .BOTH. , #14008 ) ; +#927 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#929 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#930 = CARTESIAN_POINT ( 'NONE', ( 0.2500000000000032800, -2.031000000000001500, -6.749999999999999100 ) ) ; +#931 = ADVANCED_FACE ( 'NONE', ( #9640 ), #17098, .F. ) ; +#932 = EDGE_LOOP ( 'NONE', ( #7634, #17248, #3700, #5830 ) ) ; +#933 = VECTOR ( 'NONE', #31373, 1000.000000000000000 ) ; +#934 = ORIENTED_EDGE ( 'NONE', *, *, #6745, .F. ) ; +#935 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#936 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#937 = VECTOR ( 'NONE', #5034, 1000.000000000000000 ) ; +#938 = EDGE_LOOP ( 'NONE', ( #23545, #28153, #13546, #17186 ) ) ; +#939 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.258751240853227700E-015, 0.0000000000000000000 ) ) ; +#940 = EDGE_LOOP ( 'NONE', ( #12934, #21145, #7323, #19962 ) ) ; +#941 = EDGE_CURVE ( 'NONE', #4147, #40741, #33422, .T. ) ; +#942 = SURFACE_STYLE_FILL_AREA ( #29921 ) ; +#943 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#944 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#945 = SURFACE_STYLE_FILL_AREA ( #36292 ) ; +#946 = EDGE_CURVE ( 'NONE', #35649, #11480, #31395, .T. ) ; +#947 = AXIS2_PLACEMENT_3D ( 'NONE', #13333, #988, #10077 ) ; +#948 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33733, 'distance_accuracy_value', 'NONE'); +#949 = LINE ( 'NONE', #31458, #8968 ) ; +#950 = FILL_AREA_STYLE_COLOUR ( '', #22069 ) ; +#951 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#952 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#953 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.2999999999999848300, -4.249999999999998200 ) ) ; +#954 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24760 ), #2543 ) ; +#955 = ORIENTED_EDGE ( 'NONE', *, *, #31719, .T. ) ; +#956 = AXIS2_PLACEMENT_3D ( 'NONE', #25873, #9175, #31802 ) ; +#957 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28498 ) ) ; +#958 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#959 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.297781607976734100E-015, -1.000000000000000000 ) ) ; +#960 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.630424214906979600, -1.050000000000000000 ) ) ; +#962 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29040 ), #27162 ) ; +#961 = STYLED_ITEM ( 'NONE', ( #12483 ), #30849 ) ; +#963 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#964 = ORIENTED_EDGE ( 'NONE', *, *, #26960, .F. ) ; +#966 = EDGE_CURVE ( 'NONE', #40360, #17096, #4105, .T. ) ; +#965 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10541 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9139, #12259, #21638 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#967 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#968 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#969 = VECTOR ( 'NONE', #4283, 1000.000000000000000 ) ; +#970 = SURFACE_STYLE_USAGE ( .BOTH. , #32829 ) ; +#971 = VERTEX_POINT ( 'NONE', #35437 ) ; +#972 = VERTEX_POINT ( 'NONE', #9699 ) ; +#973 = LINE ( 'NONE', #11446, #32757 ) ; +#974 = VERTEX_POINT ( 'NONE', #35575 ) ; +#975 = VECTOR ( 'NONE', #26588, 1000.000000000000000 ) ; +#976 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#978 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23130 ) ) ; +#977 = AXIS2_PLACEMENT_3D ( 'NONE', #12597, #15858, #3038 ) ; +#979 = VECTOR ( 'NONE', #12217, 1000.000000000000000 ) ; +#980 = LINE ( 'NONE', #7431, #35775 ) ; +#981 = VECTOR ( 'NONE', #23124, 1000.000000000000000 ) ; +#982 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#983 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.180001745296169500, -4.099999999999999600 ) ) ; +#984 = EDGE_LOOP ( 'NONE', ( #40146, #19945 ) ) ; +#985 = VERTEX_POINT ( 'NONE', #25300 ) ; +#986 = ORIENTED_EDGE ( 'NONE', *, *, #32242, .T. ) ; +#987 = PRESENTATION_STYLE_ASSIGNMENT (( #9630 ) ) ; +#988 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#989 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#990 = ORIENTED_EDGE ( 'NONE', *, *, #14377, .T. ) ; +#991 = CARTESIAN_POINT ( 'NONE', ( 4.620424212713737200, 0.2799999999999973100, -1.049979056049130000 ) ) ; +#992 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#993 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#994 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#995 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16750, 'distance_accuracy_value', 'NONE'); +#996 = PLANE ( 'NONE', #24969 ) ; +#997 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865475700, 0.7071067811865475700 ) ) ; +#998 = EDGE_CURVE ( 'NONE', #16736, #22680, #22798, .T. ) ; +#999 = ORIENTED_EDGE ( 'NONE', *, *, #35261, .F. ) ; +#1000 = LINE ( 'NONE', #27413, #8501 ) ; +#1001 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1002 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1003 = EDGE_CURVE ( 'NONE', #31053, #11129, #3115, .T. ) ; +#1004 = ORIENTED_EDGE ( 'NONE', *, *, #28866, .F. ) ; +#1005 = FILL_AREA_STYLE ('',( #30326 ) ) ; +#1006 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -1.380001745296131500, -4.781671842700004200 ) ) ; +#1007 = VERTEX_POINT ( 'NONE', #31893 ) ; +#1008 = VECTOR ( 'NONE', #10611, 1000.000000000000000 ) ; +#1009 = ORIENTED_EDGE ( 'NONE', *, *, #30421, .F. ) ; +#1010 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27764 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31702, #31570, #12054 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1011 = FACE_OUTER_BOUND ( 'NONE', #35698, .T. ) ; +#1012 = LINE ( 'NONE', #2523, #3984 ) ; +#1013 = DIRECTION ( 'NONE', ( 2.168404344971009400E-016, -2.367138801244516800E-016, -1.000000000000000000 ) ) ; +#1014 = LINE ( 'NONE', #30483, #5008 ) ; +#1015 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1016 = VERTEX_POINT ( 'NONE', #9272 ) ; +#1017 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1018 = CARTESIAN_POINT ( 'NONE', ( 9.035018104045870900E-016, -0.2999999999999999900, -1.249999999999997800 ) ) ; +#1019 = ORIENTED_EDGE ( 'NONE', *, *, #15044, .T. ) ; +#1020 = ORIENTED_EDGE ( 'NONE', *, *, #3797, .F. ) ; +#1021 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36428 ), #13958 ) ; +#1022 = STYLED_ITEM ( 'NONE', ( #32488 ), #11435 ) ; +#1023 = FILL_AREA_STYLE_COLOUR ( '', #27119 ) ; +#1024 = PLANE ( 'NONE', #27524 ) ; +#1025 = EDGE_CURVE ( 'NONE', #17428, #21420, #11680, .T. ) ; +#1026 = ORIENTED_EDGE ( 'NONE', *, *, #33822, .F. ) ; +#1027 = FILL_AREA_STYLE ('',( #10698 ) ) ; +#1028 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.480001745296169600, -0.2000017452961698200 ) ) ; +#1029 = VECTOR ( 'NONE', #39123, 1000.000000000000100 ) ; +#1030 = CYLINDRICAL_SURFACE ( 'NONE', #13320, 0.3600000000000078700 ) ; +#1031 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #187 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11690, #18365, #18233 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1032 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 1.485063948690956900E-014, -3.099999999999998800 ) ) ; +#1033 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1034 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.2999999999999999900, 0.6999999999999999600 ) ) ; +#1035 = CLOSED_SHELL ( 'NONE', ( #13269, #35428, #40578, #28959, #9460, #5246 ) ) ; +#1036 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1037 = FACE_OUTER_BOUND ( 'NONE', #15978, .T. ) ; +#1038 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.6800017452961725200, -3.999999999999995600 ) ) ; +#1039 = ORIENTED_EDGE ( 'NONE', *, *, #26559, .T. ) ; +#1040 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.4300017452961686900, -4.750000000000000000 ) ) ; +#1041 = ORIENTED_EDGE ( 'NONE', *, *, #23290, .F. ) ; +#1042 = LINE ( 'NONE', #23399, #11080 ) ; +#1043 = ADVANCED_FACE ( 'NONE', ( #37466 ), #38422, .F. ) ; +#1044 = VECTOR ( 'NONE', #10412, 1000.000000000000000 ) ; +#1045 = LINE ( 'NONE', #31307, #34356 ) ; +#1046 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.380001745296139700, -4.781671842700004200 ) ) ; +#1047 = SURFACE_STYLE_FILL_AREA ( #35435 ) ; +#1048 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1049 = CARTESIAN_POINT ( 'NONE', ( -4.070001745296171900, 0.2800000000000026900, -4.099999999999999600 ) ) ; +#1050 = VERTEX_POINT ( 'NONE', #32936 ) ; +#1051 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1052 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.478176394252580200E-017, -6.082356018693180500E-031 ) ) ; +#1053 = ORIENTED_EDGE ( 'NONE', *, *, #566, .T. ) ; +#1054 = VERTEX_POINT ( 'NONE', #19568 ) ; +#1055 = FACE_OUTER_BOUND ( 'NONE', #26135, .T. ) ; +#1056 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1057 = EDGE_CURVE ( 'NONE', #17337, #13841, #12151, .T. ) ; +#1058 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1059 = EDGE_CURVE ( 'NONE', #35784, #11525, #13674, .T. ) ; +#1060 = FILL_AREA_STYLE_COLOUR ( '', #8334 ) ; +#1061 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1062 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.355252715606881000E-016, -1.000000000000000000 ) ) ; +#1063 = VERTEX_POINT ( 'NONE', #652 ) ; +#1064 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10806, 'distance_accuracy_value', 'NONE'); +#1065 = EDGE_CURVE ( 'NONE', #21908, #25157, #20812, .T. ) ; +#1066 = PRESENTATION_STYLE_ASSIGNMENT (( #2056 ) ) ; +#1067 = DIRECTION ( 'NONE', ( -3.252601786828647500E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1068 = CARTESIAN_POINT ( 'NONE', ( -3.090769194355483600, 0.2666666666666668300, 1.050000000000572500 ) ) ; +#1069 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, -0.07499999999999999700, 0.01000000000000000400 ) ) ; +#1070 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 1.468654402296581600E-014, -2.095470210943120000 ) ) ; +#1071 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29969 ), #33506 ) ; +#1072 = CARTESIAN_POINT ( 'NONE', ( 4.449999999999999300, 0.08000174529617037900, -7.500000000000000900 ) ) ; +#1073 = SURFACE_STYLE_USAGE ( .BOTH. , #17144 ) ; +#1074 = AXIS2_PLACEMENT_3D ( 'NONE', #21276, #34655, #37614 ) ; +#1075 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#1076 = VERTEX_POINT ( 'NONE', #39278 ) ; +#1079 = EDGE_CURVE ( 'NONE', #25038, #17837, #36426, .T. ) ; +#1078 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14041 ) ) ; +#1077 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1080 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1225, 'distance_accuracy_value', 'NONE'); +#1081 = FILL_AREA_STYLE_COLOUR ( '', #31080 ) ; +#1082 = ADVANCED_FACE ( 'NONE', ( #35941 ), #790, .F. ) ; +#1083 = CARTESIAN_POINT ( 'NONE', ( 3.178333333333021500, 0.2999999999999999900, -0.06128090415826344800 ) ) ; +#1084 = ORIENTED_EDGE ( 'NONE', *, *, #11754, .F. ) ; +#1086 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33525 ) ) ; +#1085 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24895 ), #39180 ) ; +#1087 = AXIS2_PLACEMENT_3D ( 'NONE', #14729, #21122, #30823 ) ; +#1088 = CIRCLE ( 'NONE', #23374, 0.3000000000000001600 ) ; +#1089 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1090 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21367 ), #22151 ) ; +#1091 = VERTEX_POINT ( 'NONE', #35640 ) ; +#1092 = SURFACE_STYLE_FILL_AREA ( #21909 ) ; +#1093 = ORIENTED_EDGE ( 'NONE', *, *, #41368, .T. ) ; +#1094 = ORIENTED_EDGE ( 'NONE', *, *, #6681, .T. ) ; +#1095 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17749 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7946, #10925, #17739 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1096 = CARTESIAN_POINT ( 'NONE', ( 4.620424212713737200, 0.2799999999999973100, -1.049979056049130000 ) ) ; +#1097 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.139998254717351100, -5.049996877890552400 ) ) ; +#1098 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1099 = ADVANCED_FACE ( 'NONE', ( #13174 ), #26315, .F. ) ; +#1100 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.380001745296126600, -6.031671842700004200 ) ) ; +#1101 = FILL_AREA_STYLE_COLOUR ( '', #29361 ) ; +#1102 = VERTEX_POINT ( 'NONE', #29831 ) ; +#1103 = SURFACE_STYLE_USAGE ( .BOTH. , #36373 ) ; +#1104 = CARTESIAN_POINT ( 'NONE', ( -3.045000000000000400, -0.2999999999999999900, 12.42614000000000000 ) ) ; +#1105 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#1106 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1107 = PLANE ( 'NONE', #39449 ) ; +#1108 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1109 = DIRECTION ( 'NONE', ( -7.239049582268421600E-031, 2.367138801244513300E-016, 1.000000000000000000 ) ) ; +#1110 = CARTESIAN_POINT ( 'NONE', ( -3.245000000005249700, 0.2999999999999999900, -1.600000000000000100 ) ) ; +#1111 = FILL_AREA_STYLE ('',( #7403 ) ) ; +#1112 = LINE ( 'NONE', #32537, #33411 ) ; +#1113 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27974, 'distance_accuracy_value', 'NONE'); +#1114 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1115 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#1116 = ORIENTED_EDGE ( 'NONE', *, *, #11932, .F. ) ; +#1117 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.630424214906980300, -1.149999999999999900 ) ) ; +#1118 = CYLINDRICAL_SURFACE ( 'NONE', #8618, 0.1000000000000009100 ) ; +#1119 = PLANE ( 'NONE', #31931 ) ; +#1120 = FACE_OUTER_BOUND ( 'NONE', #2293, .T. ) ; +#1121 = EDGE_CURVE ( 'NONE', #18033, #11747, #36947, .T. ) ; +#1122 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1123 = EDGE_LOOP ( 'NONE', ( #24919, #15356, #29733, #15021 ) ) ; +#1124 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1125 = CIRCLE ( 'NONE', #26741, 0.3600000000000078700 ) ; +#1126 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#1127 = LINE ( 'NONE', #39540, #7628 ) ; +#1128 = EDGE_CURVE ( 'NONE', #6503, #41461, #6103, .T. ) ; +#1129 = LINE ( 'NONE', #4106, #35459 ) ; +#1130 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1131 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11027, 'distance_accuracy_value', 'NONE'); +#1132 = CARTESIAN_POINT ( 'NONE', ( -3.344813086426266800, 0.07499999999999999700, 0.4434843258806566700 ) ) ; +#1133 = EDGE_LOOP ( 'NONE', ( #7428, #36613, #2783, #19385 ) ) ; +#1134 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12694 ) ) ; +#1136 = ADVANCED_FACE ( 'NONE', ( #32882 ), #14029, .F. ) ; +#1135 = VERTEX_POINT ( 'NONE', #14168 ) ; +#1137 = DIRECTION ( 'NONE', ( -2.168404344971012800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1138 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.8400209439508702400 ) ) ; +#1139 = FILL_AREA_STYLE_COLOUR ( '', #16388 ) ; +#1140 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22740 ), #37093 ) ; +#1141 = DIRECTION ( 'NONE', ( -2.168404344971012800E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1142 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33012 ), #37888 ) ; +#1143 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1144 = ORIENTED_EDGE ( 'NONE', *, *, #766, .F. ) ; +#1145 = CARTESIAN_POINT ( 'NONE', ( 4.524999999999999500, 1.630001745296169000, -4.000000000000000000 ) ) ; +#1146 = LINE ( 'NONE', #31475, #41010 ) ; +#1147 = ORIENTED_EDGE ( 'NONE', *, *, #19317, .T. ) ; +#1148 = FACE_OUTER_BOUND ( 'NONE', #26662, .T. ) ; +#1149 = PRESENTATION_STYLE_ASSIGNMENT (( #13843 ) ) ; +#1150 = STYLED_ITEM ( 'NONE', ( #12821 ), #4686 ) ; +#1151 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1153 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36549 ) ) ; +#1152 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8934 ), #5431 ) ; +#1154 = PLANE ( 'NONE', #20563 ) ; +#1155 = PLANE ( 'NONE', #19006 ) ; +#1156 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.380001745296126600, -6.031671842700004200 ) ) ; +#1157 = STYLED_ITEM ( 'NONE', ( #27899 ), #8889 ) ; +#1158 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#1159 = ORIENTED_EDGE ( 'NONE', *, *, #32861, .T. ) ; +#1160 = VECTOR ( 'NONE', #3930, 1000.000000000000000 ) ; +#1161 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#1162 = PLANE ( 'NONE', #7318 ) ; +#1163 = FILL_AREA_STYLE_COLOUR ( '', #10865 ) ; +#1164 = EDGE_LOOP ( 'NONE', ( #25549, #34674, #32872, #15965 ) ) ; +#1165 = CIRCLE ( 'NONE', #41790, 0.1000000000000001200 ) ; +#1166 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, 0.2799999999999973100, -0.2339555568811697600 ) ) ; +#1167 = CYLINDRICAL_SURFACE ( 'NONE', #37410, 0.1499999999999999700 ) ; +#1168 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.8500017452961657900, -5.575000000000001100 ) ) ; +#1169 = SURFACE_STYLE_FILL_AREA ( #14645 ) ; +#1170 = ORIENTED_EDGE ( 'NONE', *, *, #6420, .T. ) ; +#1171 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.710505431213765500E-016, 1.000000000000000000 ) ) ; +#1172 = SURFACE_SIDE_STYLE ('',( #28869 ) ) ; +#1173 = EDGE_LOOP ( 'NONE', ( #432, #34083, #27975, #7132 ) ) ; +#1174 = SURFACE_SIDE_STYLE ('',( #40443 ) ) ; +#1175 = ORIENTED_EDGE ( 'NONE', *, *, #6145, .T. ) ; +#1176 = EDGE_CURVE ( 'NONE', #36839, #23496, #23241, .T. ) ; +#1177 = LINE ( 'NONE', #36164, #18345 ) ; +#1178 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1179 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#1180 = PLANE ( 'NONE', #4233 ) ; +#1181 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1182 = EDGE_CURVE ( 'NONE', #41785, #30097, #4567, .T. ) ; +#1183 = SURFACE_STYLE_FILL_AREA ( #1598 ) ; +#1184 = PLANE ( 'NONE', #2630 ) ; +#1185 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1186 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1187 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29957 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29599, #7406, #17185 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1188 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1189 = AXIS2_PLACEMENT_3D ( 'NONE', #5195, #29029, #29741 ) ; +#1190 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.480001745296166000, -1.749999999999999300 ) ) ; +#1191 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1192 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, -0.07499999999999999700, 0.01000000000000000400 ) ) ; +#1193 = EDGE_LOOP ( 'NONE', ( #6035, #14665, #12409, #29143 ) ) ; +#1194 = LINE ( 'NONE', #22604, #30972 ) ; +#1195 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32328 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15201, #34959, #2655 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1196 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1197 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18888 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22446, #38383, #19081 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1198 = EDGE_LOOP ( 'NONE', ( #22301, #21040, #22675, #37130 ) ) ; +#1201 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16318 ) ) ; +#1200 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#1199 = STYLED_ITEM ( 'NONE', ( #3002 ), #30686 ) ; +#1202 = PLANE ( 'NONE', #3020 ) ; +#1203 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1204 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1205 = ORIENTED_EDGE ( 'NONE', *, *, #17294, .T. ) ; +#1206 = PRESENTATION_STYLE_ASSIGNMENT (( #37340 ) ) ; +#1208 = EDGE_CURVE ( 'NONE', #474, #1535, #6070, .T. ) ; +#1207 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8987 ) ) ; +#1209 = SURFACE_STYLE_USAGE ( .BOTH. , #7495 ) ; +#1210 = ORIENTED_EDGE ( 'NONE', *, *, #6867, .T. ) ; +#1211 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#1212 = ORIENTED_EDGE ( 'NONE', *, *, #3418, .F. ) ; +#1213 = VERTEX_POINT ( 'NONE', #31078 ) ; +#1214 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.5199999999999843600, -4.500000000000000000 ) ) ; +#1216 = AXIS2_PLACEMENT_3D ( 'NONE', #2175, #33780, #186 ) ; +#1215 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36614 ) ) ; +#1217 = SURFACE_STYLE_USAGE ( .BOTH. , #4556 ) ; +#1218 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, 0.0000000000000000000 ) ) ; +#1219 = EDGE_LOOP ( 'NONE', ( #41873, #20541, #28106, #8381, #21864, #5708, #6102, #26720, #20499, #14116, #8505, #8962 ) ) ; +#1220 = VECTOR ( 'NONE', #10986, 1000.000000000000000 ) ; +#1221 = EDGE_LOOP ( 'NONE', ( #37111, #22099, #40980, #32812 ) ) ; +#1222 = LINE ( 'NONE', #38121, #29495 ) ; +#1223 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1224 = VECTOR ( 'NONE', #35747, 1000.000000000000000 ) ; +#1225 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1226 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40842, 'distance_accuracy_value', 'NONE'); +#1227 = CARTESIAN_POINT ( 'NONE', ( 4.070001745296171900, 0.2799999999999973100, -4.099999999999999600 ) ) ; +#1228 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1229 = SURFACE_STYLE_FILL_AREA ( #3228 ) ; +#1230 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1231 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, -0.6500000000000001300, -3.250000000000000400 ) ) ; +#1232 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1233 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13414, 'distance_accuracy_value', 'NONE'); +#1234 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1235 = SURFACE_STYLE_USAGE ( .BOTH. , #24220 ) ; +#1236 = EDGE_CURVE ( 'NONE', #3702, #28917, #24824, .T. ) ; +#1237 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1238 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.730380236995679600, -0.8400000000000000800 ) ) ; +#1239 = EDGE_CURVE ( 'NONE', #10489, #25100, #32843, .T. ) ; +#1240 = ORIENTED_EDGE ( 'NONE', *, *, #18621, .F. ) ; +#1241 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1242 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1243 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000000200, -1.380001745296133300, -4.781671842700004200 ) ) ; +#1244 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#1245 = ORIENTED_EDGE ( 'NONE', *, *, #23486, .T. ) ; +#1246 = ORIENTED_EDGE ( 'NONE', *, *, #11033, .F. ) ; +#1247 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#1248 = EDGE_LOOP ( 'NONE', ( #33880, #32629, #15667, #13548 ) ) ; +#1249 = ORIENTED_EDGE ( 'NONE', *, *, #19932, .F. ) ; +#1250 = ADVANCED_FACE ( 'NONE', ( #1555 ), #25305, .F. ) ; +#1251 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#1252 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1253 = DIRECTION ( 'NONE', ( 2.628368902995161200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1254 = FILL_AREA_STYLE_COLOUR ( '', #40397 ) ; +#1255 = PRESENTATION_STYLE_ASSIGNMENT (( #38539 ) ) ; +#1256 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#1257 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32952, 'distance_accuracy_value', 'NONE'); +#1258 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1259 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33698 ) ) ; +#1260 = SURFACE_STYLE_FILL_AREA ( #9885 ) ; +#1261 = SURFACE_STYLE_USAGE ( .BOTH. , #30444 ) ; +#1264 = EDGE_CURVE ( 'NONE', #19024, #32078, #38388, .T. ) ; +#1263 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, 0.3500000000000000300, -1.300000000000000000 ) ) ; +#1262 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23118 ) ) ; +#1265 = SURFACE_STYLE_USAGE ( .BOTH. , #5018 ) ; +#1266 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11984, 'distance_accuracy_value', 'NONE'); +#1267 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745296169300, -1.994459358809381100 ) ) ; +#1268 = PLANE ( 'NONE', #37416 ) ; +#1270 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36812 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26500, #29737, #13478 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1269 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15027 ), #33954 ) ; +#1271 = EDGE_LOOP ( 'NONE', ( #39857, #4454, #35408, #37745 ) ) ; +#1272 = STYLED_ITEM ( 'NONE', ( #7768 ), #39621 ) ; +#1273 = FILL_AREA_STYLE ('',( #871 ) ) ; +#1274 = PLANE ( 'NONE', #29284 ) ; +#1275 = FILL_AREA_STYLE ('',( #14096 ) ) ; +#1276 = PLANE ( 'NONE', #10670 ) ; +#1277 = ORIENTED_EDGE ( 'NONE', *, *, #9162, .T. ) ; +#1278 = CYLINDRICAL_SURFACE ( 'NONE', #26038, 0.4000000000000001900 ) ; +#1279 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1280 = VERTEX_POINT ( 'NONE', #10413 ) ; +#1281 = SURFACE_STYLE_FILL_AREA ( #4015 ) ; +#1282 = FILL_AREA_STYLE_COLOUR ( '', #3903 ) ; +#1283 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1284 = CARTESIAN_POINT ( 'NONE', ( -3.315443653851780900, 0.07499999999999999700, -0.07334759913713004300 ) ) ; +#1285 = ADVANCED_FACE ( 'NONE', ( #69 ), #21462, .F. ) ; +#1286 = VERTEX_POINT ( 'NONE', #37249 ) ; +#1287 = EDGE_LOOP ( 'NONE', ( #39193, #6462, #15592, #3644 ) ) ; +#1288 = SURFACE_STYLE_FILL_AREA ( #37767 ) ; +#1289 = SURFACE_SIDE_STYLE ('',( #30659 ) ) ; +#1290 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1291 = PRESENTATION_STYLE_ASSIGNMENT (( #1550 ) ) ; +#1292 = FACE_OUTER_BOUND ( 'NONE', #35838, .T. ) ; +#1293 = EDGE_CURVE ( 'NONE', #3435, #28917, #31350, .T. ) ; +#1294 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003000, 0.2800017452961687200, -6.150000000000000400 ) ) ; +#1295 = VECTOR ( 'NONE', #29665, 1000.000000000000000 ) ; +#1296 = ADVANCED_FACE ( 'NONE', ( #31830 ), #5538, .F. ) ; +#1298 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1297 = SURFACE_SIDE_STYLE ('',( #21859 ) ) ; +#1299 = SURFACE_STYLE_FILL_AREA ( #33620 ) ; +#1300 = ORIENTED_EDGE ( 'NONE', *, *, #27617, .T. ) ; +#1301 = EDGE_CURVE ( 'NONE', #16444, #31432, #35900, .T. ) ; +#1302 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1303 = EDGE_CURVE ( 'NONE', #21455, #13136, #26795, .T. ) ; +#1304 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, 0.3499999999999996400, -1.250000000000000000 ) ) ; +#1305 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1306 = LINE ( 'NONE', #14139, #29049 ) ; +#1307 = STYLED_ITEM ( 'NONE', ( #21815 ), #16401 ) ; +#1308 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745278514100, -2.904459358809381000 ) ) ; +#1309 = ORIENTED_EDGE ( 'NONE', *, *, #28120, .T. ) ; +#1310 = ORIENTED_EDGE ( 'NONE', *, *, #28291, .T. ) ; +#1311 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25045, 'distance_accuracy_value', 'NONE'); +#1312 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1313 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, -10.30000000000000100, -1.250000000000000000 ) ) ; +#1314 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15994 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41791, #25724, #28942 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1315 = SURFACE_STYLE_USAGE ( .BOTH. , #27138 ) ; +#1316 = ORIENTED_EDGE ( 'NONE', *, *, #13965, .F. ) ; +#1317 = AXIS2_PLACEMENT_3D ( 'NONE', #28899, #25680, #2831 ) ; +#1318 = VECTOR ( 'NONE', #16491, 1000.000000000000000 ) ; +#1319 = DIRECTION ( 'NONE', ( 0.9961946980917454300, -1.807562417839940400E-016, -0.08715574274766037200 ) ) ; +#1321 = EDGE_CURVE ( 'NONE', #20662, #7821, #35864, .T. ) ; +#1320 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6945 ), #11279 ) ; +#1322 = DIRECTION ( 'NONE', ( 3.077917520101936400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1323 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.8400000000000000800 ) ) ; +#1324 = ORIENTED_EDGE ( 'NONE', *, *, #23175, .T. ) ; +#1325 = SURFACE_STYLE_FILL_AREA ( #6529 ) ; +#1326 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, 0.2800017452961687200, -6.449999999999999300 ) ) ; +#1327 = FILL_AREA_STYLE_COLOUR ( '', #12228 ) ; +#1328 = LINE ( 'NONE', #18620, #6816 ) ; +#1329 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34569 ) ) ; +#1330 = FILL_AREA_STYLE ('',( #4679 ) ) ; +#1331 = LINE ( 'NONE', #38396, #12374 ) ; +#1332 = FACE_OUTER_BOUND ( 'NONE', #23286, .T. ) ; +#1333 = ORIENTED_EDGE ( 'NONE', *, *, #6920, .T. ) ; +#1334 = AXIS2_PLACEMENT_3D ( 'NONE', #2260, #31590, #8965 ) ; +#1335 = FILL_AREA_STYLE_COLOUR ( '', #22382 ) ; +#1336 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000013700, -1.949998254703823700, -2.467712434446772000 ) ) ; +#1337 = ADVANCED_FACE ( 'NONE', ( #18687 ), #12365, .F. ) ; +#1338 = PLANE ( 'NONE', #35568 ) ; +#1339 = STYLED_ITEM ( 'NONE', ( #7328 ), #7759 ) ; +#1340 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1341 = LINE ( 'NONE', #25976, #31611 ) ; +#1342 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#1343 = ORIENTED_EDGE ( 'NONE', *, *, #8798, .T. ) ; +#1344 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.2800017452961674500, -5.650000000000000400 ) ) ; +#1345 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.828353493440455200E-016, 1.000000000000000000 ) ) ; +#1346 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1347 = FILL_AREA_STYLE_COLOUR ( '', #10390 ) ; +#1348 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1349 = SURFACE_SIDE_STYLE ('',( #39663 ) ) ; +#1350 = CYLINDRICAL_SURFACE ( 'NONE', #18433, 0.1000000000000000500 ) ; +#1351 = VECTOR ( 'NONE', #41070, 1000.000000000000000 ) ; +#1352 = MANIFOLD_SOLID_BREP ( '1-1-solid9', #14847 ) ; +#1353 = EDGE_CURVE ( 'NONE', #17831, #23748, #33829, .T. ) ; +#1354 = ORIENTED_EDGE ( 'NONE', *, *, #4906, .T. ) ; +#1355 = ORIENTED_EDGE ( 'NONE', *, *, #9641, .F. ) ; +#1356 = FILL_AREA_STYLE_COLOUR ( '', #2307 ) ; +#1357 = VECTOR ( 'NONE', #30639, 1000.000000000000000 ) ; +#1358 = ORIENTED_EDGE ( 'NONE', *, *, #17823, .T. ) ; +#1359 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.08000174529616907400, -7.350000000000000500 ) ) ; +#1360 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4161 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28020, #4994, #1783 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1361 = SURFACE_STYLE_FILL_AREA ( #41640 ) ; +#1362 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1363 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.630424214906979600, -1.050000000000000000 ) ) ; +#1364 = EDGE_CURVE ( 'NONE', #41089, #13495, #18208, .T. ) ; +#1365 = TOROIDAL_SURFACE ( 'NONE', #26800, 1.550380236995680100, 0.1000000000000008500 ) ; +#1366 = ORIENTED_EDGE ( 'NONE', *, *, #29407, .T. ) ; +#1367 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#1368 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.380001745296132400, -6.031671842700004200 ) ) ; +#1369 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1370 = EDGE_LOOP ( 'NONE', ( #11962, #1933, #31703, #20356 ) ) ; +#1371 = VECTOR ( 'NONE', #27055, 1000.000000000000000 ) ; +#1372 = AXIS2_PLACEMENT_3D ( 'NONE', #40772, #17665, #40630 ) ; +#1373 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36420, 'distance_accuracy_value', 'NONE'); +#1376 = EDGE_CURVE ( 'NONE', #2978, #13351, #15147, .T. ) ; +#1375 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27569 ), #9413 ) ; +#1374 = DIRECTION ( 'NONE', ( 2.891205793294677000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1377 = SURFACE_SIDE_STYLE ('',( #19112 ) ) ; +#1378 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#1379 = ADVANCED_FACE ( 'NONE', ( #23735 ), #35368, .T. ) ; +#1380 = PLANE ( 'NONE', #37935 ) ; +#1382 = AXIS2_PLACEMENT_3D ( 'NONE', #440, #10124, #23279 ) ; +#1381 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18140 ), #36256 ) ; +#1383 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, -0.3000000000000001600, -1.250000000000000000 ) ) ; +#1384 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#1385 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41378 ), #38391 ) ; +#1386 = LINE ( 'NONE', #4606, #24644 ) ; +#1387 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#1388 = AXIS2_PLACEMENT_3D ( 'NONE', #18508, #32315, #9837 ) ; +#1389 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, 0.03300000000000000200 ) ) ; +#1390 = ORIENTED_EDGE ( 'NONE', *, *, #10848, .F. ) ; +#1391 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#1392 = VECTOR ( 'NONE', #37854, 1000.000000000000000 ) ; +#1394 = AXIS2_PLACEMENT_3D ( 'NONE', #15841, #34786, #2765 ) ; +#1393 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#1395 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41035, 'distance_accuracy_value', 'NONE'); +#1396 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#1397 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1398 = ORIENTED_EDGE ( 'NONE', *, *, #11580, .F. ) ; +#1399 = PRESENTATION_STYLE_ASSIGNMENT (( #33188 ) ) ; +#1400 = CARTESIAN_POINT ( 'NONE', ( -2.995000000020000100, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#1401 = CYLINDRICAL_SURFACE ( 'NONE', #5069, 0.3600000000000078700 ) ; +#1402 = VERTEX_POINT ( 'NONE', #13791 ) ; +#1403 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1404 = ORIENTED_EDGE ( 'NONE', *, *, #29261, .T. ) ; +#1405 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1406 = ORIENTED_EDGE ( 'NONE', *, *, #20467, .F. ) ; +#1408 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1407 = LINE ( 'NONE', #16051, #22652 ) ; +#1409 = VECTOR ( 'NONE', #14846, 1000.000000000000000 ) ; +#1410 = ORIENTED_EDGE ( 'NONE', *, *, #23461, .F. ) ; +#1411 = CARTESIAN_POINT ( 'NONE', ( 2.949999999999999700, -1.380001745296126600, -6.031671842700004200 ) ) ; +#1412 = ORIENTED_EDGE ( 'NONE', *, *, #40467, .F. ) ; +#1413 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1414 = FACE_OUTER_BOUND ( 'NONE', #33108, .T. ) ; +#1415 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, -2.322941965694886000, -1.250000000000000000 ) ) ; +#1416 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1417 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -9.268445570935432200E-016, 1.000000000000000000 ) ) ; +#1418 = EDGE_CURVE ( 'NONE', #17475, #14191, #12071, .T. ) ; +#1419 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -9.035070666963931600E-017 ) ) ; +#1420 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745296168900, -2.904459358809384600 ) ) ; +#1421 = EDGE_CURVE ( 'NONE', #16333, #41856, #24788, .T. ) ; +#1422 = AXIS2_PLACEMENT_3D ( 'NONE', #29696, #39005, #366 ) ; +#1423 = ORIENTED_EDGE ( 'NONE', *, *, #25944, .T. ) ; +#1424 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1425 = FILL_AREA_STYLE_COLOUR ( '', #17574 ) ; +#1426 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36847 ) ) ; +#1427 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1428 = AXIS2_PLACEMENT_3D ( 'NONE', #29370, #31891, #11041 ) ; +#1429 = STYLED_ITEM ( 'NONE', ( #4222 ), #18507 ) ; +#1430 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1431 = ORIENTED_EDGE ( 'NONE', *, *, #5712, .F. ) ; +#1432 = ORIENTED_EDGE ( 'NONE', *, *, #16730, .F. ) ; +#1433 = VERTEX_POINT ( 'NONE', #39479 ) ; +#1434 = LINE ( 'NONE', #21508, #13505 ) ; +#1436 = AXIS2_PLACEMENT_3D ( 'NONE', #10644, #7390, #32827 ) ; +#1435 = AXIS2_PLACEMENT_3D ( 'NONE', #38766, #25668, #38901 ) ; +#1437 = PRESENTATION_STYLE_ASSIGNMENT (( #20371 ) ) ; +#1438 = VECTOR ( 'NONE', #5179, 1000.000000000000000 ) ; +#1441 = EDGE_CURVE ( 'NONE', #11156, #34193, #1042, .T. ) ; +#1440 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1439 = AXIS2_PLACEMENT_3D ( 'NONE', #35817, #36505, #26779 ) ; +#1442 = ORIENTED_EDGE ( 'NONE', *, *, #24029, .T. ) ; +#1443 = DIRECTION ( 'NONE', ( -0.9396926207859068700, 0.3420201433256725400, -5.691343398792006000E-031 ) ) ; +#1444 = VERTEX_POINT ( 'NONE', #26378 ) ; +#1445 = ORIENTED_EDGE ( 'NONE', *, *, #5834, .T. ) ; +#1446 = FILL_AREA_STYLE ('',( #40087 ) ) ; +#1447 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1448 = ADVANCED_FACE ( 'NONE', ( #31796 ), #39356, .F. ) ; +#1450 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9243 ) ) ; +#1449 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28991 ), #2258 ) ; +#1451 = DIRECTION ( 'NONE', ( -0.08715574274766037200, 0.0000000000000000000, -0.9961946980917453200 ) ) ; +#1452 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8138, 'distance_accuracy_value', 'NONE'); +#1453 = VECTOR ( 'NONE', #145, 1000.000000000000000 ) ; +#1454 = CARTESIAN_POINT ( 'NONE', ( 3.045000000000000400, 0.2999999999999999900, 12.42614000000000000 ) ) ; +#1455 = EDGE_LOOP ( 'NONE', ( #3471, #13984, #34368, #29237 ) ) ; +#1456 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#1457 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, 0.4300017452961685800, -6.850000000000000500 ) ) ; +#1458 = FILL_AREA_STYLE ('',( #16821 ) ) ; +#1459 = SURFACE_STYLE_FILL_AREA ( #10691 ) ; +#1460 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.499998254703826200, -6.299999999999993600 ) ) ; +#1461 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 0.0000000000000000000 ) ) ; +#1462 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#1463 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15097, 'distance_accuracy_value', 'NONE'); +#1464 = LINE ( 'NONE', #2102, #17624 ) ; +#1465 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#1466 = ORIENTED_EDGE ( 'NONE', *, *, #16743, .F. ) ; +#1467 = SURFACE_STYLE_FILL_AREA ( #7840 ) ; +#1468 = PLANE ( 'NONE', #2323 ) ; +#1469 = DIRECTION ( 'NONE', ( -0.9396926207856547400, 0.0000000000000000000, 0.3420201433263653800 ) ) ; +#1470 = ORIENTED_EDGE ( 'NONE', *, *, #28174, .T. ) ; +#1471 = DIRECTION ( 'NONE', ( -2.465190328815661900E-032, -1.000000000000000000, 2.367138801244516300E-016 ) ) ; +#1472 = EDGE_CURVE ( 'NONE', #3318, #36619, #4483, .T. ) ; +#1473 = SURFACE_STYLE_USAGE ( .BOTH. , #27170 ) ; +#1474 = ORIENTED_EDGE ( 'NONE', *, *, #22363, .T. ) ; +#1475 = ORIENTED_EDGE ( 'NONE', *, *, #14933, .T. ) ; +#1476 = ORIENTED_EDGE ( 'NONE', *, *, #37991, .F. ) ; +#1477 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.07499999999999999700, 0.0000000000000000000 ) ) ; +#1478 = CARTESIAN_POINT ( 'NONE', ( 2.949999999999999700, -1.499998254703820400, -6.699999999999994000 ) ) ; +#1479 = VECTOR ( 'NONE', #18658, 1000.000000000000000 ) ; +#1480 = EDGE_CURVE ( 'NONE', #30257, #37554, #21214, .T. ) ; +#1481 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12251 ), #39590 ) ; +#1482 = PRESENTATION_STYLE_ASSIGNMENT (( #7143 ) ) ; +#1483 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#1484 = SURFACE_STYLE_USAGE ( .BOTH. , #1349 ) ; +#1485 = ORIENTED_EDGE ( 'NONE', *, *, #19460, .T. ) ; +#1486 = ORIENTED_EDGE ( 'NONE', *, *, #20755, .F. ) ; +#1488 = VERTEX_POINT ( 'NONE', #17335 ) ; +#1487 = ADVANCED_FACE ( 'NONE', ( #27749 ), #14100, .F. ) ; +#1489 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23917 ), #14446 ) ; +#1490 = FILL_AREA_STYLE_COLOUR ( '', #37885 ) ; +#1491 = VERTEX_POINT ( 'NONE', #7838 ) ; +#1492 = SURFACE_STYLE_FILL_AREA ( #3890 ) ; +#1493 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23269 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9133, #27965, #8583 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1494 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34365 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13429, #12867, #6933 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1495 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, -0.3000000000000001600, -1.250000000000000000 ) ) ; +#1496 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1497 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1498 = ADVANCED_FACE ( 'NONE', ( #12032 ), #26950, .T. ) ; +#1500 = AXIS2_PLACEMENT_3D ( 'NONE', #14740, #40564, #13406 ) ; +#1499 = AXIS2_PLACEMENT_3D ( 'NONE', #11303, #23770, #7501 ) ; +#1501 = PRESENTATION_STYLE_ASSIGNMENT (( #40001 ) ) ; +#1502 = SURFACE_STYLE_USAGE ( .BOTH. , #40138 ) ; +#1503 = SURFACE_STYLE_USAGE ( .BOTH. , #23642 ) ; +#1505 = EDGE_CURVE ( 'NONE', #30213, #14941, #37351, .T. ) ; +#1504 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12824 ), #15019 ) ; +#1506 = CARTESIAN_POINT ( 'NONE', ( 3.178333333333020600, -0.2999999999999999900, -0.06128090415826747300 ) ) ; +#1507 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#1508 = LINE ( 'NONE', #8310, #25757 ) ; +#1509 = SURFACE_SIDE_STYLE ('',( #22569 ) ) ; +#1510 = STYLED_ITEM ( 'NONE', ( #12256 ), #26519 ) ; +#1511 = ORIENTED_EDGE ( 'NONE', *, *, #10358, .F. ) ; +#1512 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.5300017452961696100, -4.099999999999997900 ) ) ; +#1513 = FILL_AREA_STYLE_COLOUR ( '', #27037 ) ; +#1514 = FACE_OUTER_BOUND ( 'NONE', #1892, .T. ) ; +#1515 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#1516 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1517 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #32915, #4527, #23322, #33353 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#1518 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#1519 = ORIENTED_EDGE ( 'NONE', *, *, #41405, .T. ) ; +#1520 = SURFACE_STYLE_FILL_AREA ( #9101 ) ; +#1521 = SURFACE_STYLE_FILL_AREA ( #16741 ) ; +#1522 = CARTESIAN_POINT ( 'NONE', ( -0.2500000000000032800, -2.031000000000001500, -6.549999999999999800 ) ) ; +#1523 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1524 = LINE ( 'NONE', #12672, #5006 ) ; +#1525 = VECTOR ( 'NONE', #39900, 1000.000000000000000 ) ; +#1526 = ORIENTED_EDGE ( 'NONE', *, *, #32763, .F. ) ; +#1527 = CIRCLE ( 'NONE', #41239, 0.05000000000000012800 ) ; +#1528 = ORIENTED_EDGE ( 'NONE', *, *, #29150, .F. ) ; +#1529 = ORIENTED_EDGE ( 'NONE', *, *, #31389, .T. ) ; +#1530 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1531 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1532 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1533 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1534 = SURFACE_STYLE_USAGE ( .BOTH. , #33975 ) ; +#1535 = VERTEX_POINT ( 'NONE', #23673 ) ; +#1536 = EDGE_CURVE ( 'NONE', #34788, #24787, #3978, .T. ) ; +#1537 = ADVANCED_FACE ( 'NONE', ( #18160 ), #3940, .F. ) ; +#1538 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -2.322941965694886000, -1.250000000000000000 ) ) ; +#1539 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1540 = LINE ( 'NONE', #38605, #16177 ) ; +#1541 = SURFACE_SIDE_STYLE ('',( #3134 ) ) ; +#1542 = EDGE_CURVE ( 'NONE', #29623, #2031, #9481, .T. ) ; +#1543 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#1544 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21037, 'distance_accuracy_value', 'NONE'); +#1545 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.3590461068823620500 ) ) ; +#1546 = LINE ( 'NONE', #4116, #34869 ) ; +#1547 = STYLED_ITEM ( 'NONE', ( #10155 ), #16098 ) ; +#1548 = LINE ( 'NONE', #26372, #36378 ) ; +#1549 = EDGE_LOOP ( 'NONE', ( #349, #4918, #38551, #5541 ) ) ; +#1550 = SURFACE_STYLE_USAGE ( .BOTH. , #33866 ) ; +#1551 = STYLED_ITEM ( 'NONE', ( #22102 ), #20363 ) ; +#1552 = ORIENTED_EDGE ( 'NONE', *, *, #39407, .T. ) ; +#1553 = PRESENTATION_STYLE_ASSIGNMENT (( #38168 ) ) ; +#1554 = VERTEX_POINT ( 'NONE', #31264 ) ; +#1555 = FACE_OUTER_BOUND ( 'NONE', #6390, .T. ) ; +#1556 = LINE ( 'NONE', #31812, #35901 ) ; +#1557 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10158 ) ) ; +#1558 = SURFACE_STYLE_USAGE ( .BOTH. , #31020 ) ; +#1559 = DIRECTION ( 'NONE', ( -4.336808689942016900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1560 = SURFACE_STYLE_FILL_AREA ( #36205 ) ; +#1562 = EDGE_CURVE ( 'NONE', #22856, #19795, #15583, .T. ) ; +#1561 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27036 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18830, #25474, #25745 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1563 = ORIENTED_EDGE ( 'NONE', *, *, #35563, .T. ) ; +#1564 = CIRCLE ( 'NONE', #29854, 1.350424214906979600 ) ; +#1565 = ORIENTED_EDGE ( 'NONE', *, *, #12432, .F. ) ; +#1566 = VERTEX_POINT ( 'NONE', #16699 ) ; +#1567 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.5199999999999850300, -4.599999999999999600 ) ) ; +#1568 = DIRECTION ( 'NONE', ( 3.097720492815727200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1570 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39126 ) ) ; +#1569 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28640 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15865, #22248, #19292 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1571 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1572 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.3499999999999999800, -1.649999999992750200 ) ) ; +#1573 = AXIS2_PLACEMENT_3D ( 'NONE', #39908, #39631, #26963 ) ; +#1574 = FILL_AREA_STYLE ('',( #40214 ) ) ; +#1575 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34828 ), #21311 ) ; +#1576 = ORIENTED_EDGE ( 'NONE', *, *, #3868, .F. ) ; +#1577 = FILL_AREA_STYLE_COLOUR ( '', #36753 ) ; +#1578 = VECTOR ( 'NONE', #17652, 1000.000000000000000 ) ; +#1579 = CIRCLE ( 'NONE', #9972, 0.1000000000000000500 ) ; +#1580 = FILL_AREA_STYLE ('',( #24429 ) ) ; +#1581 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1582 = SURFACE_SIDE_STYLE ('',( #23272 ) ) ; +#1583 = ADVANCED_FACE ( 'NONE', ( #5987 ), #39418, .T. ) ; +#1584 = CIRCLE ( 'NONE', #22206, 0.2000000000000007300 ) ; +#1585 = FILL_AREA_STYLE ('',( #4791 ) ) ; +#1586 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.056601140521967900E-031 ) ) ; +#1587 = VECTOR ( 'NONE', #25943, 1000.000000000000000 ) ; +#1588 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -3.799999999999999800 ) ) ; +#1589 = ORIENTED_EDGE ( 'NONE', *, *, #40116, .F. ) ; +#1590 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23073, 'distance_accuracy_value', 'NONE'); +#1591 = CARTESIAN_POINT ( 'NONE', ( 2.995000000000000100, 0.2999999999999999900, 12.42614000000000000 ) ) ; +#1592 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.6199999999999850100, -4.599999999999999600 ) ) ; +#1593 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.9396926207856547400, -0.3420201433263653800 ) ) ; +#1594 = ORIENTED_EDGE ( 'NONE', *, *, #41632, .F. ) ; +#1595 = PRESENTATION_STYLE_ASSIGNMENT (( #10083 ) ) ; +#1596 = ORIENTED_EDGE ( 'NONE', *, *, #34535, .T. ) ; +#1597 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1598 = FILL_AREA_STYLE ('',( #1327 ) ) ; +#1599 = EDGE_CURVE ( 'NONE', #5537, #37424, #20153, .T. ) ; +#1600 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#1601 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#1602 = PRESENTATION_STYLE_ASSIGNMENT (( #28700 ) ) ; +#1603 = SURFACE_SIDE_STYLE ('',( #6209 ) ) ; +#1604 = ORIENTED_EDGE ( 'NONE', *, *, #195, .F. ) ; +#1605 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.180001745296166000, -4.675000000000000700 ) ) ; +#1606 = ORIENTED_EDGE ( 'NONE', *, *, #4095, .F. ) ; +#1607 = VERTEX_POINT ( 'NONE', #30250 ) ; +#1608 = EDGE_CURVE ( 'NONE', #25052, #35330, #2969, .T. ) ; +#1609 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1610 = AXIS2_PLACEMENT_3D ( 'NONE', #27478, #30736, #24837 ) ; +#1611 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1612 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 0.2999999999999999900, 0.6999999999999999600 ) ) ; +#1613 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34972, 'distance_accuracy_value', 'NONE'); +#1614 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#1615 = EDGE_CURVE ( 'NONE', #25684, #9975, #35822, .T. ) ; +#1616 = CLOSED_SHELL ( 'NONE', ( #1337, #27606, #38165, #16465, #34293, #35552, #29636, #31736, #34033, #25602, #5212, #10180, #12884, #11075, #23299, #27112, #21028, #16979, #7640, #3379, #31771, #13068, #41051, #17674, #26042, #40293, #35633, #5727, #21823, #2489, #1082, #210, #25638, #836, #25257, #7358, #27347, #24339, #30320, #7961, #40627, #41152, #26432, #24386, #7542, #29647, #20873, #33553, #1379, #22016, #10760, #25487, #8210, #22253, #34457 ) ) ; +#1617 = SURFACE_STYLE_USAGE ( .BOTH. , #1903 ) ; +#1618 = CIRCLE ( 'NONE', #268, 0.1000000000000009100 ) ; +#1619 = ORIENTED_EDGE ( 'NONE', *, *, #20239, .F. ) ; +#1620 = STYLED_ITEM ( 'NONE', ( #18768 ), #21611 ) ; +#1621 = LINE ( 'NONE', #40319, #20837 ) ; +#1622 = SURFACE_STYLE_USAGE ( .BOTH. , #4263 ) ; +#1623 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6699 ), #8858 ) ; +#1624 = FACE_OUTER_BOUND ( 'NONE', #5248, .T. ) ; +#1625 = CARTESIAN_POINT ( 'NONE', ( -3.429999999999999700, -1.499998254703818900, -6.299999999999993600 ) ) ; +#1626 = SURFACE_STYLE_FILL_AREA ( #29079 ) ; +#1628 = EDGE_CURVE ( 'NONE', #8602, #31318, #40325, .T. ) ; +#1627 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, 0.6908697363250209100 ) ) ; +#1629 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1630 = FILL_AREA_STYLE_COLOUR ( '', #10880 ) ; +#1631 = VECTOR ( 'NONE', #41181, 1000.000000000000000 ) ; +#1632 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #7531, #40010, #33400, #1649 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 1.570796326794856100, 4.712388980384648800 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.3333333333333335400, 0.3333333333333335400, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#1634 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #839 ), #10231 ) ; +#1633 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10495 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13718, #17264, #20105 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1635 = CIRCLE ( 'NONE', #8668, 0.3000000000000003800 ) ; +#1636 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23910 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25145, #21622, #28355 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1637 = ORIENTED_EDGE ( 'NONE', *, *, #36901, .F. ) ; +#1638 = FACE_OUTER_BOUND ( 'NONE', #1221, .T. ) ; +#1639 = STYLED_ITEM ( 'NONE', ( #21922 ), #33545 ) ; +#1640 = STYLED_ITEM ( 'NONE', ( #29018 ), #8090 ) ; +#1641 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1642 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.8320502943378437200, 0.5547001962252291500 ) ) ; +#1643 = ORIENTED_EDGE ( 'NONE', *, *, #11018, .T. ) ; +#1644 = FILL_AREA_STYLE_COLOUR ( '', #8452 ) ; +#1645 = VECTOR ( 'NONE', #35484, 1000.000000000000000 ) ; +#1646 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1647 = ORIENTED_EDGE ( 'NONE', *, *, #30732, .F. ) ; +#1648 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1649 = CARTESIAN_POINT ( 'NONE', ( -4.570925237316274100, -0.4099999999999989200, -6.861124800398366500 ) ) ; +#1650 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.03000174529616905800, -6.900000000000000400 ) ) ; +#1651 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1652 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760845000E-015 ) ) ; +#1653 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.480001745296170000, -0.2339555568811695900 ) ) ; +#1654 = ORIENTED_EDGE ( 'NONE', *, *, #28169, .T. ) ; +#1655 = VERTEX_POINT ( 'NONE', #10879 ) ; +#1656 = FACE_OUTER_BOUND ( 'NONE', #38745, .T. ) ; +#1657 = PRESENTATION_STYLE_ASSIGNMENT (( #7427 ) ) ; +#1658 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1659 = ADVANCED_FACE ( 'NONE', ( #2488 ), #1468, .T. ) ; +#1660 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#1661 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1662 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 2.322941965694886000, -1.250000000000000000 ) ) ; +#1663 = EDGE_CURVE ( 'NONE', #15706, #16621, #11040, .T. ) ; +#1664 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000005700, -0.2999999999999852200, -3.099999999999998800 ) ) ; +#1665 = CARTESIAN_POINT ( 'NONE', ( -2.949999999999999700, -1.499998254703820400, -6.299999999999993600 ) ) ; +#1666 = EDGE_CURVE ( 'NONE', #895, #3147, #18647, .T. ) ; +#1667 = ORIENTED_EDGE ( 'NONE', *, *, #9261, .T. ) ; +#1668 = FILL_AREA_STYLE_COLOUR ( '', #3642 ) ; +#1669 = FACE_OUTER_BOUND ( 'NONE', #1975, .T. ) ; +#1670 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1671 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1672 = CARTESIAN_POINT ( 'NONE', ( 3.048825363047789900, 0.2416666666666666400, 1.088792722454407800 ) ) ; +#1673 = ORIENTED_EDGE ( 'NONE', *, *, #314, .T. ) ; +#1674 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22740 ) ) ; +#1675 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#1676 = PLANE ( 'NONE', #7206 ) ; +#1677 = FACE_OUTER_BOUND ( 'NONE', #25467, .T. ) ; +#1678 = ORIENTED_EDGE ( 'NONE', *, *, #37509, .T. ) ; +#1679 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17634 ), #26274 ) ; +#1680 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1681 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30528 ), #4841 ) ; +#1683 = ORIENTED_EDGE ( 'NONE', *, *, #25292, .F. ) ; +#1682 = VECTOR ( 'NONE', #31969, 1000.000000000000000 ) ; +#1684 = ORIENTED_EDGE ( 'NONE', *, *, #25322, .T. ) ; +#1685 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1687 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25031 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13767, #7249, #39311 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1686 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13833 ) ) ; +#1688 = CARTESIAN_POINT ( 'NONE', ( 0.1500000000000000200, -1.380001745296135700, -6.031671842700004200 ) ) ; +#1690 = EDGE_CURVE ( 'NONE', #10079, #19555, #9996, .T. ) ; +#1689 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37104 ), #40055 ) ; +#1691 = SURFACE_SIDE_STYLE ('',( #24664 ) ) ; +#1692 = EDGE_LOOP ( 'NONE', ( #4576, #40405, #20802, #18842 ) ) ; +#1693 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1694 = FACE_OUTER_BOUND ( 'NONE', #23126, .T. ) ; +#1695 = SURFACE_STYLE_USAGE ( .BOTH. , #21043 ) ; +#1696 = ORIENTED_EDGE ( 'NONE', *, *, #30276, .T. ) ; +#1697 = ADVANCED_FACE ( 'NONE', ( #6972 ), #5097, .T. ) ; +#1698 = PRESENTATION_STYLE_ASSIGNMENT (( #9151 ) ) ; +#1699 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14622 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4237, #32420, #3340 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1700 = FACE_OUTER_BOUND ( 'NONE', #2333, .T. ) ; +#1701 = LINE ( 'NONE', #28149, #40064 ) ; +#1702 = AXIS2_PLACEMENT_3D ( 'NONE', #35143, #29183, #28781 ) ; +#1703 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, -0.2800000000000028000, -0.2339555568811695400 ) ) ; +#1704 = DIRECTION ( 'NONE', ( 4.336808689942020900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1705 = ADVANCED_FACE ( 'NONE', ( #30747 ), #1338, .T. ) ; +#1706 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000027500, -0.2000017452961698200 ) ) ; +#1707 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#1708 = ORIENTED_EDGE ( 'NONE', *, *, #4861, .F. ) ; +#1709 = SURFACE_STYLE_USAGE ( .BOTH. , #5064 ) ; +#1710 = PRESENTATION_STYLE_ASSIGNMENT (( #4811 ) ) ; +#1711 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, 0.2799999999999973100, 0.0000000000000000000 ) ) ; +#1712 = LINE ( 'NONE', #22588, #11755 ) ; +#1713 = ORIENTED_EDGE ( 'NONE', *, *, #40032, .F. ) ; +#1714 = FILL_AREA_STYLE_COLOUR ( '', #34490 ) ; +#1715 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#1716 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1717 = EDGE_LOOP ( 'NONE', ( #6080, #32233, #33307, #10688 ) ) ; +#1718 = EDGE_CURVE ( 'NONE', #22770, #27296, #1434, .T. ) ; +#1719 = EDGE_LOOP ( 'NONE', ( #29769, #8226 ) ) ; +#1720 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1721 = ORIENTED_EDGE ( 'NONE', *, *, #33485, .F. ) ; +#1722 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1723 = PLANE ( 'NONE', #32008 ) ; +#1724 = ORIENTED_EDGE ( 'NONE', *, *, #38728, .F. ) ; +#1725 = FACE_OUTER_BOUND ( 'NONE', #22921, .T. ) ; +#1726 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1727 = EDGE_CURVE ( 'NONE', #564, #6503, #22124, .T. ) ; +#1728 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1729 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1730 = CYLINDRICAL_SURFACE ( 'NONE', #25124, 0.09999999999987406500 ) ; +#1731 = VERTEX_POINT ( 'NONE', #37434 ) ; +#1732 = FACE_OUTER_BOUND ( 'NONE', #34466, .T. ) ; +#1733 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, -0.2000000000000000100, 12.42614000000000000 ) ) ; +#1734 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11151 ) ) ; +#1735 = FILL_AREA_STYLE_COLOUR ( '', #33966 ) ; +#1736 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27785, 'distance_accuracy_value', 'NONE'); +#1737 = VECTOR ( 'NONE', #4721, 1000.000000000000000 ) ; +#1738 = SURFACE_SIDE_STYLE ('',( #24515 ) ) ; +#1739 = CARTESIAN_POINT ( 'NONE', ( 3.500000000000004400, 0.4300017452961686900, -6.549999999999999800 ) ) ; +#1740 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1741 = AXIS2_PLACEMENT_3D ( 'NONE', #16164, #22525, #22932 ) ; +#1742 = CARTESIAN_POINT ( 'NONE', ( -4.599429204713762200, -0.01999825470386210800, -7.186926638587857900 ) ) ; +#1743 = ADVANCED_FACE ( 'NONE', ( #35770 ), #28254, .F. ) ; +#1744 = STYLED_ITEM ( 'NONE', ( #17766 ), #19089 ) ; +#1745 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1746 = AXIS2_PLACEMENT_3D ( 'NONE', #2225, #18312, #31132 ) ; +#1748 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, 0.0000000000000000000 ) ) ; +#1747 = AXIS2_PLACEMENT_3D ( 'NONE', #6253, #38163, #9471 ) ; +#1749 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.837630800822890800E-016, 1.000000000000000000 ) ) ; +#1750 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165600, -5.475000000000000500 ) ) ; +#1751 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38045, 'distance_accuracy_value', 'NONE'); +#1753 = EDGE_CURVE ( 'NONE', #38639, #36543, #26167, .T. ) ; +#1752 = STYLED_ITEM ( 'NONE', ( #11044 ), #35853 ) ; +#1754 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.2800017452961689500, -5.150000000000000400 ) ) ; +#1755 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.9396926207856547400, 0.3420201433263653800 ) ) ; +#1756 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9804 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21798, #5800, #31632 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1757 = SURFACE_STYLE_USAGE ( .BOTH. , #2043 ) ; +#1758 = CIRCLE ( 'NONE', #20238, 0.3499999999999996400 ) ; +#1759 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1760 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1761 = ORIENTED_EDGE ( 'NONE', *, *, #27213, .F. ) ; +#1762 = EDGE_LOOP ( 'NONE', ( #12239, #29315, #40303, #9317 ) ) ; +#1763 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1764 = ORIENTED_EDGE ( 'NONE', *, *, #18030, .F. ) ; +#1765 = ORIENTED_EDGE ( 'NONE', *, *, #3601, .T. ) ; +#1766 = VECTOR ( 'NONE', #26690, 1000.000000000000000 ) ; +#1767 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1768 = PRESENTATION_STYLE_ASSIGNMENT (( #1473 ) ) ; +#1769 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#1770 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, -2.322941965694886000, -1.250000000000000000 ) ) ; +#1771 = LINE ( 'NONE', #6248, #39613 ) ; +#1772 = FILL_AREA_STYLE_COLOUR ( '', #37685 ) ; +#1773 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23938, 'distance_accuracy_value', 'NONE'); +#1774 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1775 = VECTOR ( 'NONE', #15220, 1000.000000000000000 ) ; +#1776 = VECTOR ( 'NONE', #16281, 1000.000000000000000 ) ; +#1777 = VECTOR ( 'NONE', #14552, 1000.000000000000000 ) ; +#1778 = ORIENTED_EDGE ( 'NONE', *, *, #13493, .T. ) ; +#1779 = FILL_AREA_STYLE_COLOUR ( '', #23271 ) ; +#1780 = VECTOR ( 'NONE', #13157, 1000.000000000000000 ) ; +#1781 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.1000000000000133800, -4.450000000000000200 ) ) ; +#1782 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1783 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1784 = EDGE_CURVE ( 'NONE', #17177, #16839, #7945, .T. ) ; +#1785 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22421, 'distance_accuracy_value', 'NONE'); +#1786 = VECTOR ( 'NONE', #36154, 1000.000000000000000 ) ; +#1787 = PRESENTATION_STYLE_ASSIGNMENT (( #18512 ) ) ; +#1788 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1789 = ORIENTED_EDGE ( 'NONE', *, *, #19838, .T. ) ; +#1790 = EDGE_CURVE ( 'NONE', #29204, #31405, #28677, .T. ) ; +#1791 = SURFACE_SIDE_STYLE ('',( #30582 ) ) ; +#1793 = ADVANCED_FACE ( 'NONE', ( #29685 ), #423, .T. ) ; +#1792 = PRESENTATION_STYLE_ASSIGNMENT (( #14289 ) ) ; +#1794 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#1795 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #18244, #28099, #37419, #31346, #2157, #11703 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#1796 = ORIENTED_EDGE ( 'NONE', *, *, #30481, .F. ) ; +#1797 = AXIS2_PLACEMENT_3D ( 'NONE', #7004, #3900, #39771 ) ; +#1798 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -2.294459358809381100 ) ) ; +#1799 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.139998254717353500, -6.299996877890552400 ) ) ; +#1800 = SURFACE_STYLE_FILL_AREA ( #5589 ) ; +#1801 = DIRECTION ( 'NONE', ( -0.9961946980917453200, -3.269420623233417900E-015, 0.08715574274766035900 ) ) ; +#1802 = FACE_OUTER_BOUND ( 'NONE', #9123, .T. ) ; +#1803 = PLANE ( 'NONE', #29487 ) ; +#1804 = LINE ( 'NONE', #34557, #22012 ) ; +#1805 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1806 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35051 ) ) ; +#1807 = ORIENTED_EDGE ( 'NONE', *, *, #9846, .F. ) ; +#1808 = PLANE ( 'NONE', #27171 ) ; +#1810 = CONICAL_SURFACE ( 'NONE', #15758, 0.3000000000000001600, 0.3490658503988666700 ) ; +#1809 = PRESENTATION_STYLE_ASSIGNMENT (( #13015 ) ) ; +#1811 = VERTEX_POINT ( 'NONE', #5654 ) ; +#1812 = STYLED_ITEM ( 'NONE', ( #3430 ), #7000 ) ; +#1813 = VECTOR ( 'NONE', #40859, 1000.000000000000000 ) ; +#1814 = PRESENTATION_STYLE_ASSIGNMENT (( #13529 ) ) ; +#1815 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1818 = EDGE_CURVE ( 'NONE', #36536, #39643, #41324, .T. ) ; +#1817 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.5199999999999842500, -5.299999999999999800 ) ) ; +#1816 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39722 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12481, #41187, #21998 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1819 = ORIENTED_EDGE ( 'NONE', *, *, #683, .T. ) ; +#1820 = CYLINDRICAL_SURFACE ( 'NONE', #3875, 0.1000000000000000500 ) ; +#1821 = ORIENTED_EDGE ( 'NONE', *, *, #17453, .T. ) ; +#1822 = FILL_AREA_STYLE_COLOUR ( '', #35321 ) ; +#1823 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1824 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1826 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3928 ), #17774 ) ; +#1825 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22090 ), #35885 ) ; +#1827 = CYLINDRICAL_SURFACE ( 'NONE', #19434, 0.05000000000000012800 ) ; +#1828 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1829 = ORIENTED_EDGE ( 'NONE', *, *, #27614, .T. ) ; +#1830 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1272 ) ) ; +#1831 = VECTOR ( 'NONE', #25624, 1000.000000000000000 ) ; +#1832 = FILL_AREA_STYLE_COLOUR ( '', #27356 ) ; +#1833 = AXIS2_PLACEMENT_3D ( 'NONE', #1070, #7219, #20542 ) ; +#1834 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521965300E-031 ) ) ; +#1835 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1836 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000005300, -1.500001745296163600, -7.350000000000005900 ) ) ; +#1837 = ORIENTED_EDGE ( 'NONE', *, *, #32263, .F. ) ; +#1838 = FILL_AREA_STYLE ('',( #17904 ) ) ; +#1839 = ORIENTED_EDGE ( 'NONE', *, *, #8742, .F. ) ; +#1840 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -0.3000000000000001600, -1.250000000000000000 ) ) ; +#1841 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1842 = FACE_OUTER_BOUND ( 'NONE', #12438, .T. ) ; +#1843 = ORIENTED_EDGE ( 'NONE', *, *, #23094, .F. ) ; +#1844 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.630424214906979600, -1.050000000000000000 ) ) ; +#1845 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1846 = VERTEX_POINT ( 'NONE', #27849 ) ; +#1847 = FACE_OUTER_BOUND ( 'NONE', #419, .T. ) ; +#1848 = VERTEX_POINT ( 'NONE', #40814 ) ; +#1849 = EDGE_CURVE ( 'NONE', #29684, #2209, #16559, .T. ) ; +#1850 = SURFACE_SIDE_STYLE ('',( #2190 ) ) ; +#1851 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#1852 = EDGE_CURVE ( 'NONE', #34092, #9805, #2455, .T. ) ; +#1853 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.710505431213765500E-016, 1.000000000000000000 ) ) ; +#1854 = ORIENTED_EDGE ( 'NONE', *, *, #41353, .F. ) ; +#1855 = SURFACE_SIDE_STYLE ('',( #28378 ) ) ; +#1856 = ORIENTED_EDGE ( 'NONE', *, *, #2959, .T. ) ; +#1857 = EDGE_CURVE ( 'NONE', #8117, #1050, #40281, .T. ) ; +#1858 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1859 = LINE ( 'NONE', #29587, #15490 ) ; +#1860 = CYLINDRICAL_SURFACE ( 'NONE', #34813, 0.1000000000000000500 ) ; +#1861 = AXIS2_PLACEMENT_3D ( 'NONE', #11911, #28177, #15042 ) ; +#1862 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#1863 = ORIENTED_EDGE ( 'NONE', *, *, #6534, .T. ) ; +#1864 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.8190279881558656400, -0.5737535661042597600 ) ) ; +#1865 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.799998254703822000, -3.700000000000000200 ) ) ; +#1866 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.499998254703822900, -6.699999999999994000 ) ) ; +#1867 = VERTEX_POINT ( 'NONE', #19091 ) ; +#1868 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41108 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18490, #9114, #18629 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1869 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#1870 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1871 = LINE ( 'NONE', #41141, #3356 ) ; +#1872 = ADVANCED_FACE ( 'NONE', ( #10996 ), #32176, .T. ) ; +#1873 = STYLED_ITEM ( 'NONE', ( #34110 ), #12181 ) ; +#1874 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1876 = EDGE_CURVE ( 'NONE', #17598, #2872, #29145, .T. ) ; +#1875 = STYLED_ITEM ( 'NONE', ( #17600 ), #24086 ) ; +#1877 = FILL_AREA_STYLE ('',( #30373 ) ) ; +#1878 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1879 = ORIENTED_EDGE ( 'NONE', *, *, #40203, .F. ) ; +#1880 = LINE ( 'NONE', #1483, #23071 ) ; +#1882 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41598 ), #13449 ) ; +#1881 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35385 ) ) ; +#1883 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12648 ), #33527 ) ; +#1884 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#1885 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#1886 = VECTOR ( 'NONE', #34161, 1000.000000000000000 ) ; +#1887 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25392, 'distance_accuracy_value', 'NONE'); +#1888 = STYLED_ITEM ( 'NONE', ( #37605 ), #33412 ) ; +#1889 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#1890 = EDGE_LOOP ( 'NONE', ( #21284, #23254, #34893, #35727 ) ) ; +#1891 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1339 ) ) ; +#1892 = EDGE_LOOP ( 'NONE', ( #12743, #28771, #4294, #36227 ) ) ; +#1893 = ORIENTED_EDGE ( 'NONE', *, *, #15903, .F. ) ; +#1894 = VECTOR ( 'NONE', #38128, 1000.000000000000000 ) ; +#1895 = FILL_AREA_STYLE_COLOUR ( '', #39623 ) ; +#1896 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, 0.6000000000000000900, -3.250000000000000400 ) ) ; +#1897 = FILL_AREA_STYLE_COLOUR ( '', #10942 ) ; +#1898 = VECTOR ( 'NONE', #31805, 1000.000000000000000 ) ; +#1899 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745278514100, -3.514459358809384400 ) ) ; +#1900 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.499998254703820600, -5.449999999999994000 ) ) ; +#1901 = LINE ( 'NONE', #39459, #7385 ) ; +#1902 = ORIENTED_EDGE ( 'NONE', *, *, #18418, .T. ) ; +#1903 = SURFACE_SIDE_STYLE ('',( #25694 ) ) ; +#1904 = VECTOR ( 'NONE', #38321, 1000.000000000000000 ) ; +#1905 = ORIENTED_EDGE ( 'NONE', *, *, #15081, .T. ) ; +#1906 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#1907 = FILL_AREA_STYLE_COLOUR ( '', #13460 ) ; +#1908 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32597, 'distance_accuracy_value', 'NONE'); +#1909 = LINE ( 'NONE', #11493, #35225 ) ; +#1910 = CARTESIAN_POINT ( 'NONE', ( 4.449999999999999300, -0.01886685437025778900, -7.350000000000001400 ) ) ; +#1911 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1912 = LINE ( 'NONE', #20175, #32165 ) ; +#1913 = ADVANCED_FACE ( 'NONE', ( #24660 ), #31626, .T. ) ; +#1914 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1915 = SURFACE_SIDE_STYLE ('',( #8385 ) ) ; +#1916 = LINE ( 'NONE', #5015, #26112 ) ; +#1917 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1918 = PRESENTATION_STYLE_ASSIGNMENT (( #36358 ) ) ; +#1919 = EDGE_CURVE ( 'NONE', #36866, #30424, #8912, .T. ) ; +#1920 = ORIENTED_EDGE ( 'NONE', *, *, #10959, .F. ) ; +#1921 = SURFACE_STYLE_FILL_AREA ( #39016 ) ; +#1922 = CARTESIAN_POINT ( 'NONE', ( 4.620380239188926400, -0.2800000000000026400, -0.8400209439508702400 ) ) ; +#1923 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4782, 'distance_accuracy_value', 'NONE'); +#1924 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1925 = ADVANCED_FACE ( 'NONE', ( #36276 ), #9916, .F. ) ; +#1926 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1927 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#1928 = EDGE_CURVE ( 'NONE', #22566, #27728, #9444, .T. ) ; +#1929 = VECTOR ( 'NONE', #19230, 1000.000000000000000 ) ; +#1930 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1931 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.180001745296166000, -4.775000000000000400 ) ) ; +#1932 = AXIS2_PLACEMENT_3D ( 'NONE', #16561, #23054, #16701 ) ; +#1933 = ORIENTED_EDGE ( 'NONE', *, *, #29330, .F. ) ; +#1934 = ORIENTED_EDGE ( 'NONE', *, *, #25411, .T. ) ; +#1935 = VECTOR ( 'NONE', #35586, 1000.000000000000000 ) ; +#1936 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18737 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36259, #16466, #32699 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1937 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998497600, -4.250000000000000000 ) ) ; +#1938 = SURFACE_STYLE_FILL_AREA ( #4720 ) ; +#1939 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1941 = STYLED_ITEM ( 'NONE', ( #39220 ), #92 ) ; +#1940 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.139998254717356800, -6.299996877890552400 ) ) ; +#1942 = FACE_OUTER_BOUND ( 'NONE', #16586, .T. ) ; +#1943 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, 0.03299999999999998800 ) ) ; +#1944 = ORIENTED_EDGE ( 'NONE', *, *, #20377, .F. ) ; +#1945 = CARTESIAN_POINT ( 'NONE', ( -3.395000000000000000, 8.593182742395999400, -3.250000000000000400 ) ) ; +#1946 = ORIENTED_EDGE ( 'NONE', *, *, #3066, .F. ) ; +#1948 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19245 ), #28434 ) ; +#1947 = AXIS2_PLACEMENT_3D ( 'NONE', #3061, #3457, #128 ) ; +#1949 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.6300017452961683700, -4.750000000000000000 ) ) ; +#1950 = CARTESIAN_POINT ( 'NONE', ( 3.840834401707410500, 0.6277601246688474500, -4.400000000000000400 ) ) ; +#1951 = SURFACE_SIDE_STYLE ('',( #30314 ) ) ; +#1953 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27333 ), #40302 ) ; +#1952 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25202 ) ) ; +#1954 = VERTEX_POINT ( 'NONE', #19612 ) ; +#1955 = FILL_AREA_STYLE_COLOUR ( '', #36386 ) ; +#1957 = STYLED_ITEM ( 'NONE', ( #616 ), #9041 ) ; +#1956 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1958 = SURFACE_STYLE_FILL_AREA ( #37193 ) ; +#1959 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#1960 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40977, 'distance_accuracy_value', 'NONE'); +#1961 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#1962 = PLANE ( 'NONE', #33495 ) ; +#1963 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1964 = ADVANCED_FACE ( 'NONE', ( #17054 ), #9387, .F. ) ; +#1965 = VECTOR ( 'NONE', #3299, 1000.000000000000000 ) ; +#1966 = SURFACE_SIDE_STYLE ('',( #4466 ) ) ; +#1967 = DIRECTION ( 'NONE', ( -0.9999999780675459200, 0.0000000000000000000, -0.0002094395087002862800 ) ) ; +#1968 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#1969 = VERTEX_POINT ( 'NONE', #32280 ) ; +#1970 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#1971 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1972 = FILL_AREA_STYLE ('',( #4895 ) ) ; +#1973 = PRESENTATION_STYLE_ASSIGNMENT (( #33273 ) ) ; +#1974 = ORIENTED_EDGE ( 'NONE', *, *, #25416, .F. ) ; +#1975 = EDGE_LOOP ( 'NONE', ( #31914, #7654, #36311, #6980 ) ) ; +#1976 = FACE_OUTER_BOUND ( 'NONE', #6232, .T. ) ; +#1977 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1978 = ORIENTED_EDGE ( 'NONE', *, *, #6475, .T. ) ; +#1979 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#1980 = VECTOR ( 'NONE', #32729, 1000.000000000000000 ) ; +#1981 = FILL_AREA_STYLE_COLOUR ( '', #20922 ) ; +#1982 = SURFACE_SIDE_STYLE ('',( #36282 ) ) ; +#1983 = ORIENTED_EDGE ( 'NONE', *, *, #8440, .T. ) ; +#1984 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, 0.07499999999999999700, -0.03474420003090527400 ) ) ; +#1985 = ORIENTED_EDGE ( 'NONE', *, *, #12015, .F. ) ; +#1986 = ORIENTED_EDGE ( 'NONE', *, *, #14825, .T. ) ; +#1987 = EDGE_CURVE ( 'NONE', #20659, #9508, #1407, .T. ) ; +#1988 = SURFACE_SIDE_STYLE ('',( #38179 ) ) ; +#1989 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1990 = EDGE_CURVE ( 'NONE', #8598, #21617, #31669, .T. ) ; +#1991 = AXIS2_PLACEMENT_3D ( 'NONE', #17374, #33176, #23566 ) ; +#1992 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20540, 'distance_accuracy_value', 'NONE'); +#1993 = ORIENTED_EDGE ( 'NONE', *, *, #35983, .F. ) ; +#1994 = VECTOR ( 'NONE', #33973, 1000.000000000000100 ) ; +#1995 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30085 ), #23595 ) ; +#1996 = SURFACE_SIDE_STYLE ('',( #30790 ) ) ; +#1997 = AXIS2_PLACEMENT_3D ( 'NONE', #19452, #19609, #26496 ) ; +#1998 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.480001745296169600, -0.2339555568811697600 ) ) ; +#1999 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29657, 'distance_accuracy_value', 'NONE'); +#2000 = SURFACE_SIDE_STYLE ('',( #37219 ) ) ; +#2001 = AXIS2_PLACEMENT_3D ( 'NONE', #21304, #17897, #34537 ) ; +#2002 = AXIS2_PLACEMENT_3D ( 'NONE', #40602, #1680, #30743 ) ; +#2003 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664848500, 0.2800017452961318700, -5.650000000000000400 ) ) ; +#2005 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10483 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28704, #22222, #38566 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2004 = AXIS2_PLACEMENT_3D ( 'NONE', #4595, #27064, #20595 ) ; +#2006 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2007 = ORIENTED_EDGE ( 'NONE', *, *, #19183, .T. ) ; +#2010 = EDGE_CURVE ( 'NONE', #37367, #31066, #5899, .T. ) ; +#2009 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#2008 = AXIS2_PLACEMENT_3D ( 'NONE', #3277, #7048, #29527 ) ; +#2011 = FILL_AREA_STYLE_COLOUR ( '', #29303 ) ; +#2012 = LINE ( 'NONE', #35404, #25220 ) ; +#2013 = ADVANCED_FACE ( 'NONE', ( #34473 ), #551, .F. ) ; +#2014 = SURFACE_STYLE_USAGE ( .BOTH. , #21349 ) ; +#2015 = ORIENTED_EDGE ( 'NONE', *, *, #2955, .F. ) ; +#2016 = SURFACE_SIDE_STYLE ('',( #38582 ) ) ; +#2017 = VERTEX_POINT ( 'NONE', #9935 ) ; +#2018 = LINE ( 'NONE', #41448, #20200 ) ; +#2019 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2020 = VECTOR ( 'NONE', #22586, 1000.000000000000000 ) ; +#2021 = LINE ( 'NONE', #35293, #21221 ) ; +#2022 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2023 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#2024 = FILL_AREA_STYLE ('',( #14827 ) ) ; +#2025 = ORIENTED_EDGE ( 'NONE', *, *, #35035, .F. ) ; +#2026 = SURFACE_STYLE_USAGE ( .BOTH. , #37697 ) ; +#2027 = VERTEX_POINT ( 'NONE', #13203 ) ; +#2028 = SURFACE_STYLE_USAGE ( .BOTH. , #11287 ) ; +#2029 = FILL_AREA_STYLE_COLOUR ( '', #32050 ) ; +#2030 = FILL_AREA_STYLE_COLOUR ( '', #29946 ) ; +#2031 = VERTEX_POINT ( 'NONE', #39046 ) ; +#2032 = LINE ( 'NONE', #13792, #36361 ) ; +#2033 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296169800, -1.149999999999999900 ) ) ; +#2034 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169000, -3.514459358809377300 ) ) ; +#2035 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2036 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#2037 = PLANE ( 'NONE', #33067 ) ; +#2038 = PLANE ( 'NONE', #26990 ) ; +#2039 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745278514100, -3.514459358809377300 ) ) ; +#2040 = EDGE_CURVE ( 'NONE', #22447, #16169, #10167, .T. ) ; +#2041 = FILL_AREA_STYLE_COLOUR ( '', #36590 ) ; +#2042 = CARTESIAN_POINT ( 'NONE', ( -1.400000000000000800, 1.630001745296169500, -1.750000000000000900 ) ) ; +#2043 = SURFACE_SIDE_STYLE ('',( #32607 ) ) ; +#2044 = EDGE_CURVE ( 'NONE', #4711, #27857, #18329, .T. ) ; +#2045 = AXIS2_PLACEMENT_3D ( 'NONE', #19406, #32223, #35499 ) ; +#2046 = ORIENTED_EDGE ( 'NONE', *, *, #25128, .T. ) ; +#2047 = LINE ( 'NONE', #3883, #23235 ) ; +#2048 = CARTESIAN_POINT ( 'NONE', ( -4.856063034915695900, 0.2800000000000027500, -0.6228541982233617400 ) ) ; +#2049 = CIRCLE ( 'NONE', #29784, 0.9000017452961695000 ) ; +#2050 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#2051 = ORIENTED_EDGE ( 'NONE', *, *, #36318, .F. ) ; +#2052 = ORIENTED_EDGE ( 'NONE', *, *, #22061, .F. ) ; +#2053 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4976 ), #15792 ) ; +#2054 = FACE_OUTER_BOUND ( 'NONE', #27631, .T. ) ; +#2055 = VECTOR ( 'NONE', #14522, 1000.000000000000000 ) ; +#2056 = SURFACE_STYLE_USAGE ( .BOTH. , #15004 ) ; +#2057 = ORIENTED_EDGE ( 'NONE', *, *, #31889, .F. ) ; +#2058 = VERTEX_POINT ( 'NONE', #6919 ) ; +#2059 = ORIENTED_EDGE ( 'NONE', *, *, #16103, .F. ) ; +#2060 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7129 ), #17985 ) ; +#2061 = FILL_AREA_STYLE ('',( #38007 ) ) ; +#2062 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.2999999999999851700, -1.950000000000001300 ) ) ; +#2063 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2064 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13070 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9757, #29538, #642 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2065 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2066 = EDGE_CURVE ( 'NONE', #22085, #34212, #37507, .T. ) ; +#2067 = ORIENTED_EDGE ( 'NONE', *, *, #25046, .T. ) ; +#2068 = SURFACE_SIDE_STYLE ('',( #24661 ) ) ; +#2069 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2070 = DIRECTION ( 'NONE', ( -1.387778780781409300E-017, 2.367138801244514800E-016, 1.000000000000000000 ) ) ; +#2071 = EDGE_LOOP ( 'NONE', ( #13103, #4578, #14814, #9454 ) ) ; +#2072 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2073 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#2074 = CIRCLE ( 'NONE', #3999, 0.1499999999998701800 ) ; +#2075 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2077 = AXIS2_PLACEMENT_3D ( 'NONE', #38708, #3411, #493 ) ; +#2076 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33152 ) ) ; +#2078 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14360 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30818, #20714, #21117 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2079 = CARTESIAN_POINT ( 'NONE', ( -3.315809924354953700, -0.3499999999999811000, -1.649999999999999500 ) ) ; +#2080 = SURFACE_STYLE_USAGE ( .BOTH. , #34514 ) ; +#2081 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23513, 'distance_accuracy_value', 'NONE'); +#2082 = PRESENTATION_STYLE_ASSIGNMENT (( #9878 ) ) ; +#2083 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2084 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #10770, #36233, #17445, #7932, #23924, #33942, #11466, #37329, #7807, #10912, #21265, #33807, #30562 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 2, 1, 2, 2, 4 ), + ( 0.0000000000000000000, 0.2499999999999954500, 0.3749999999999928400, 0.4374999999999922800, 0.4687499999999913400, 0.4999999999999904000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#2085 = ADVANCED_FACE ( 'NONE', ( #13756 ), #10450, .F. ) ; +#2086 = SURFACE_STYLE_USAGE ( .BOTH. , #18021 ) ; +#2087 = PLANE ( 'NONE', #14879 ) ; +#2088 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.5300017452961685000, -4.750000000000000000 ) ) ; +#2089 = ORIENTED_EDGE ( 'NONE', *, *, #31090, .F. ) ; +#2090 = PRESENTATION_STYLE_ASSIGNMENT (( #11942 ) ) ; +#2091 = SURFACE_SIDE_STYLE ('',( #40896 ) ) ; +#2092 = VERTEX_POINT ( 'NONE', #6843 ) ; +#2093 = ORIENTED_EDGE ( 'NONE', *, *, #17363, .T. ) ; +#2094 = CARTESIAN_POINT ( 'NONE', ( -3.475000000000000100, 1.630001745296169000, -4.100000000000000500 ) ) ; +#2095 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000010300, -1.999998254703822000, -3.500000000000000000 ) ) ; +#2096 = FILL_AREA_STYLE_COLOUR ( '', #38820 ) ; +#2097 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#2098 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2099 = ORIENTED_EDGE ( 'NONE', *, *, #35116, .F. ) ; +#2100 = EDGE_CURVE ( 'NONE', #27571, #17428, #22841, .T. ) ; +#2101 = ORIENTED_EDGE ( 'NONE', *, *, #30590, .T. ) ; +#2102 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703822500, -2.399999999999999500 ) ) ; +#2103 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2104 = CARTESIAN_POINT ( 'NONE', ( 3.138390552697796200, 0.3500000000000001400, -1.626596100347774200 ) ) ; +#2105 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.966063034915693300, -0.6228541982233617400 ) ) ; +#2106 = EDGE_CURVE ( 'NONE', #6037, #24784, #40003, .T. ) ; +#2107 = ORIENTED_EDGE ( 'NONE', *, *, #23211, .T. ) ; +#2108 = SURFACE_STYLE_FILL_AREA ( #13354 ) ; +#2109 = EDGE_CURVE ( 'NONE', #15546, #18964, #11192, .T. ) ; +#2110 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2111 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.445602896647293600E-014 ) ) ; +#2112 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5030 ) ) ; +#2113 = CYLINDRICAL_SURFACE ( 'NONE', #22148, 0.2999999999999999300 ) ; +#2114 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#2115 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000012100, -1.999998254703822000, -2.599999999999999600 ) ) ; +#2116 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.367138801244516300E-016, -1.000000000000000000 ) ) ; +#2117 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.380001745296133300, -5.449999999999994000 ) ) ; +#2118 = ADVANCED_FACE ( 'NONE', ( #11716 ), #40822, .F. ) ; +#2119 = STYLED_ITEM ( 'NONE', ( #31997 ), #21028 ) ; +#2120 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#2121 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10666 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14613, #14749, #40152 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2122 = SURFACE_STYLE_USAGE ( .BOTH. , #14932 ) ; +#2123 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#2124 = ORIENTED_EDGE ( 'NONE', *, *, #8843, .F. ) ; +#2126 = EDGE_CURVE ( 'NONE', #6731, #5207, #1165, .T. ) ; +#2125 = AXIS2_PLACEMENT_3D ( 'NONE', #14134, #26864, #36725 ) ; +#2127 = DIRECTION ( 'NONE', ( -6.056601140521966100E-031, 2.020499752019424000E-045, 1.000000000000000000 ) ) ; +#2128 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid42', #39564 ) ; +#2129 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2130 = ORIENTED_EDGE ( 'NONE', *, *, #15866, .F. ) ; +#2131 = ADVANCED_FACE ( 'NONE', ( #21372 ), #29080, .F. ) ; +#2133 = AXIS2_PLACEMENT_3D ( 'NONE', #13281, #12856, #22907 ) ; +#2132 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35385 ), #41849 ) ; +#2134 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2135 = FILL_AREA_STYLE_COLOUR ( '', #32914 ) ; +#2136 = STYLED_ITEM ( 'NONE', ( #32331 ), #40798 ) ; +#2137 = FACE_OUTER_BOUND ( 'NONE', #18734, .T. ) ; +#2138 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -1.380001745296139700, -4.781671842700004200 ) ) ; +#2139 = CIRCLE ( 'NONE', #956, 0.3000000000000001000 ) ; +#2140 = STYLED_ITEM ( 'NONE', ( #37676 ), #32632 ) ; +#2141 = ORIENTED_EDGE ( 'NONE', *, *, #32110, .T. ) ; +#2142 = CARTESIAN_POINT ( 'NONE', ( 2.573205080756887100, 1.630001745296169500, -1.650000000000000400 ) ) ; +#2143 = ORIENTED_EDGE ( 'NONE', *, *, #21209, .T. ) ; +#2144 = FILL_AREA_STYLE ('',( #5630 ) ) ; +#2145 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31038 ), #29682 ) ; +#2146 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, 0.07499999999999999700, 0.4305619708689000200 ) ) ; +#2147 = SURFACE_SIDE_STYLE ('',( #29395 ) ) ; +#2148 = ORIENTED_EDGE ( 'NONE', *, *, #26149, .T. ) ; +#2149 = VECTOR ( 'NONE', #15367, 1000.000000000000000 ) ; +#2150 = SURFACE_STYLE_FILL_AREA ( #15647 ) ; +#2151 = ORIENTED_EDGE ( 'NONE', *, *, #3062, .T. ) ; +#2152 = VECTOR ( 'NONE', #12636, 1000.000000000000000 ) ; +#2153 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.880000000000130000, -0.5000000000000879300 ) ) ; +#2154 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#2155 = DIRECTION ( 'NONE', ( -6.056601140521967000E-031, -1.987721548152419000E-045, -1.000000000000000000 ) ) ; +#2156 = SURFACE_SIDE_STYLE ('',( #25346 ) ) ; +#2157 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.3000000000000000400, -0.2088107318966278000 ) ) ; +#2158 = PRESENTATION_STYLE_ASSIGNMENT (( #40466 ) ) ; +#2159 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7103, 'distance_accuracy_value', 'NONE'); +#2160 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2161 = EDGE_CURVE ( 'NONE', #3613, #4358, #41757, .T. ) ; +#2162 = SURFACE_SIDE_STYLE ('',( #7327 ) ) ; +#2163 = ORIENTED_EDGE ( 'NONE', *, *, #30674, .T. ) ; +#2164 = LINE ( 'NONE', #26552, #24384 ) ; +#2165 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.499998254703829500, -6.299999999999993600 ) ) ; +#2166 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2167 = ADVANCED_FACE ( 'NONE', ( #1414 ), #12696, .F. ) ; +#2168 = EDGE_CURVE ( 'NONE', #15706, #31185, #3876, .T. ) ; +#2169 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.380001745296136400, -5.000000000000000000 ) ) ; +#2170 = ORIENTED_EDGE ( 'NONE', *, *, #41193, .T. ) ; +#2171 = STYLED_ITEM ( 'NONE', ( #25156 ), #17594 ) ; +#2172 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2173 = FILL_AREA_STYLE_COLOUR ( '', #21131 ) ; +#2174 = FILL_AREA_STYLE_COLOUR ( '', #26978 ) ; +#2175 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.5199999999999850300, -4.599999999999999600 ) ) ; +#2176 = LINE ( 'NONE', #38397, #3153 ) ; +#2177 = EDGE_CURVE ( 'NONE', #15553, #9621, #2424, .T. ) ; +#2178 = FACE_OUTER_BOUND ( 'NONE', #172, .T. ) ; +#2179 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#2180 = ORIENTED_EDGE ( 'NONE', *, *, #20939, .T. ) ; +#2181 = AXIS2_PLACEMENT_3D ( 'NONE', #1798, #14213, #40023 ) ; +#2182 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2183 = SURFACE_STYLE_USAGE ( .BOTH. , #21518 ) ; +#2184 = STYLED_ITEM ( 'NONE', ( #18284 ), #13121 ) ; +#2185 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2188 = EDGE_CURVE ( 'NONE', #30344, #12511, #9410, .T. ) ; +#2187 = AXIS2_PLACEMENT_3D ( 'NONE', #41352, #37958, #5902 ) ; +#2186 = CARTESIAN_POINT ( 'NONE', ( -3.237718385397935400, -0.2999999999999999900, 0.7155313145785737700 ) ) ; +#2189 = ORIENTED_EDGE ( 'NONE', *, *, #8935, .F. ) ; +#2190 = SURFACE_STYLE_FILL_AREA ( #10836 ) ; +#2191 = ORIENTED_EDGE ( 'NONE', *, *, #15908, .F. ) ; +#2192 = VECTOR ( 'NONE', #33318, 1000.000000000000000 ) ; +#2193 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#2194 = CYLINDRICAL_SURFACE ( 'NONE', #32643, 0.1000000000000000500 ) ; +#2196 = AXIS2_PLACEMENT_3D ( 'NONE', #30047, #13954, #14251 ) ; +#2195 = STYLED_ITEM ( 'NONE', ( #6677 ), #28774 ) ; +#2197 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22454 ), #31898 ) ; +#2198 = FILL_AREA_STYLE_COLOUR ( '', #27777 ) ; +#2199 = AXIS2_PLACEMENT_3D ( 'NONE', #12299, #15009, #5821 ) ; +#2200 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25205 ), #37601 ) ; +#2201 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2202 = CARTESIAN_POINT ( 'NONE', ( 3.315809924354999900, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#2203 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2204 = ORIENTED_EDGE ( 'NONE', *, *, #9401, .F. ) ; +#2205 = PRESENTATION_STYLE_ASSIGNMENT (( #25862 ) ) ; +#2206 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.4300017452961695800, -4.099999999999998800 ) ) ; +#2207 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -2.891205793294629500E-014 ) ) ; +#2208 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169000, -3.514459358809384400 ) ) ; +#2209 = VERTEX_POINT ( 'NONE', #23153 ) ; +#2210 = SURFACE_STYLE_USAGE ( .BOTH. , #21139 ) ; +#2211 = LINE ( 'NONE', #38661, #23898 ) ; +#2212 = DIRECTION ( 'NONE', ( 0.9961946980917454300, -3.129741034912050000E-016, 0.08715574274766049700 ) ) ; +#2214 = PRESENTATION_STYLE_ASSIGNMENT (( #2210 ) ) ; +#2213 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2215 = LINE ( 'NONE', #25960, #26964 ) ; +#2216 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2217 = ORIENTED_EDGE ( 'NONE', *, *, #16350, .T. ) ; +#2218 = ADVANCED_FACE ( 'NONE', ( #19076 ), #25627, .F. ) ; +#2219 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, -0.6000000000000000900, -3.250000000000000400 ) ) ; +#2221 = ORIENTED_EDGE ( 'NONE', *, *, #5917, .F. ) ; +#2220 = CYLINDRICAL_SURFACE ( 'NONE', #33567, 0.1000000000000000500 ) ; +#2222 = VERTEX_POINT ( 'NONE', #40071 ) ; +#2223 = PRESENTATION_STYLE_ASSIGNMENT (( #30256 ) ) ; +#2224 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2225 = CARTESIAN_POINT ( 'NONE', ( 3.429999999999999700, -1.139998254717349300, -6.299996877890552400 ) ) ; +#2226 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #892, 'distance_accuracy_value', 'NONE'); +#2227 = SURFACE_STYLE_USAGE ( .BOTH. , #2091 ) ; +#2228 = VECTOR ( 'NONE', #8469, 1000.000000000000000 ) ; +#2229 = EDGE_LOOP ( 'NONE', ( #24715, #22691, #6575, #30472 ) ) ; +#2230 = EDGE_CURVE ( 'NONE', #34240, #4711, #8931, .T. ) ; +#2231 = VECTOR ( 'NONE', #9014, 1000.000000000000000 ) ; +#2232 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000012400, -1.949998254703821700, -5.767712434446769600 ) ) ; +#2233 = EDGE_CURVE ( 'NONE', #20276, #24242, #25160, .T. ) ; +#2234 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#2235 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16540 ), #23845 ) ; +#2236 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.851779305051321700E-015, 0.0000000000000000000 ) ) ; +#2237 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31695 ) ) ; +#2238 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#2239 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#2240 = LINE ( 'NONE', #19483, #36564 ) ; +#2241 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18738 ) ) ; +#2242 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2243 = STYLED_ITEM ( 'NONE', ( #23226 ), #38165 ) ; +#2244 = STYLED_ITEM ( 'NONE', ( #23955 ), #18422 ) ; +#2245 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, -2.031000000000001500, -6.449999999999999300 ) ) ; +#2246 = SURFACE_STYLE_USAGE ( .BOTH. , #11923 ) ; +#2248 = AXIS2_PLACEMENT_3D ( 'NONE', #11327, #4992, #40431 ) ; +#2247 = AXIS2_PLACEMENT_3D ( 'NONE', #19122, #25070, #25604 ) ; +#2249 = LINE ( 'NONE', #30504, #25954 ) ; +#2250 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.4300017452961691400, -6.900000000000000400 ) ) ; +#2252 = EDGE_CURVE ( 'NONE', #25314, #41583, #24118, .T. ) ; +#2251 = STYLED_ITEM ( 'NONE', ( #6435 ), #34918 ) ; +#2253 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#2254 = EDGE_LOOP ( 'NONE', ( #30381, #17630, #39437, #29275 ) ) ; +#2255 = ORIENTED_EDGE ( 'NONE', *, *, #18352, .T. ) ; +#2256 = ORIENTED_EDGE ( 'NONE', *, *, #29919, .F. ) ; +#2257 = ORIENTED_EDGE ( 'NONE', *, *, #18621, .T. ) ; +#2259 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9243 ), #14414 ) ; +#2258 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32742 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12421, #18547, #2602 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2260 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -4.875000000000000900 ) ) ; +#2261 = FACE_OUTER_BOUND ( 'NONE', #37029, .T. ) ; +#2262 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#2263 = FACE_OUTER_BOUND ( 'NONE', #16872, .T. ) ; +#2264 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17586, 'distance_accuracy_value', 'NONE'); +#2265 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.3499999999999999800, 0.6999999999999999600 ) ) ; +#2266 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#2267 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40831, 'distance_accuracy_value', 'NONE'); +#2268 = SURFACE_STYLE_FILL_AREA ( #23379 ) ; +#2269 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.380001745296165500, -6.800000000000000700 ) ) ; +#2270 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.07499999999999999700, 0.0000000000000000000 ) ) ; +#2271 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2272 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#2273 = SURFACE_STYLE_FILL_AREA ( #22164 ) ; +#2274 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2275 = EDGE_LOOP ( 'NONE', ( #22249, #15699, #891, #2521, #21632, #37322, #9270, #10529, #5955 ) ) ; +#2276 = CYLINDRICAL_SURFACE ( 'NONE', #28613, 0.3600000000000078700 ) ; +#2277 = SURFACE_STYLE_USAGE ( .BOTH. , #11961 ) ; +#2278 = EDGE_CURVE ( 'NONE', #13458, #24532, #41299, .T. ) ; +#2279 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2280 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2281 = ADVANCED_FACE ( 'NONE', ( #31680 ), #7737, .F. ) ; +#2282 = ORIENTED_EDGE ( 'NONE', *, *, #16165, .T. ) ; +#2283 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -10.30000000000000100, -1.250000000000000000 ) ) ; +#2284 = EDGE_CURVE ( 'NONE', #24271, #20756, #3828, .T. ) ; +#2285 = SURFACE_STYLE_FILL_AREA ( #7320 ) ; +#2286 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31994 ), #38488 ) ; +#2287 = ORIENTED_EDGE ( 'NONE', *, *, #7109, .F. ) ; +#2288 = SURFACE_STYLE_FILL_AREA ( #19180 ) ; +#2289 = CARTESIAN_POINT ( 'NONE', ( 2.573205080756887100, 1.480001745296169600, -1.750000000000000200 ) ) ; +#2290 = FILL_AREA_STYLE ('',( #31488 ) ) ; +#2291 = ORIENTED_EDGE ( 'NONE', *, *, #28169, .F. ) ; +#2292 = VECTOR ( 'NONE', #24639, 1000.000000000000000 ) ; +#2293 = EDGE_LOOP ( 'NONE', ( #17068, #1946, #31864, #31279 ) ) ; +#2294 = CARTESIAN_POINT ( 'NONE', ( -3.365710678118654100, 0.4464466094067264800, -3.300000000000000700 ) ) ; +#2295 = AXIS2_PLACEMENT_3D ( 'NONE', #20142, #4434, #23786 ) ; +#2296 = SURFACE_SIDE_STYLE ('',( #11867 ) ) ; +#2297 = LINE ( 'NONE', #1018, #37635 ) ; +#2298 = FILL_AREA_STYLE_COLOUR ( '', #35528 ) ; +#2299 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#2300 = SURFACE_STYLE_USAGE ( .BOTH. , #5652 ) ; +#2301 = PRESENTATION_STYLE_ASSIGNMENT (( #25188 ) ) ; +#2302 = FACE_OUTER_BOUND ( 'NONE', #7153, .T. ) ; +#2303 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20425 ), #22561 ) ; +#2304 = SURFACE_SIDE_STYLE ('',( #28196 ) ) ; +#2305 = AXIS2_PLACEMENT_3D ( 'NONE', #31272, #24522, #21283 ) ; +#2306 = SURFACE_STYLE_FILL_AREA ( #7472 ) ; +#2307 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2310 = AXIS2_PLACEMENT_3D ( 'NONE', #36915, #8345, #17989 ) ; +#2309 = SURFACE_STYLE_USAGE ( .BOTH. , #21238 ) ; +#2308 = AXIS2_PLACEMENT_3D ( 'NONE', #7787, #36612, #20550 ) ; +#2311 = SURFACE_SIDE_STYLE ('',( #36862 ) ) ; +#2312 = CARTESIAN_POINT ( 'NONE', ( 2.573205080756887100, 1.630001745296169500, -1.650000000000000400 ) ) ; +#2313 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2314 = EDGE_LOOP ( 'NONE', ( #35471, #28024, #21366, #28644 ) ) ; +#2315 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2316 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2318 = EDGE_CURVE ( 'NONE', #36110, #23252, #17527, .T. ) ; +#2317 = STYLED_ITEM ( 'NONE', ( #4073 ), #35475 ) ; +#2319 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23440, 'distance_accuracy_value', 'NONE'); +#2320 = DIRECTION ( 'NONE', ( -6.056601140521967000E-031, -1.987721548152419000E-045, -1.000000000000000000 ) ) ; +#2321 = PLANE ( 'NONE', #26088 ) ; +#2323 = AXIS2_PLACEMENT_3D ( 'NONE', #27279, #14707, #14562 ) ; +#2322 = AXIS2_PLACEMENT_3D ( 'NONE', #29399, #510, #33373 ) ; +#2324 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2325 = ORIENTED_EDGE ( 'NONE', *, *, #3091, .F. ) ; +#2326 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2327 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2328 = ORIENTED_EDGE ( 'NONE', *, *, #19730, .T. ) ; +#2329 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2330 = ADVANCED_FACE ( 'NONE', ( #36717 ), #20053, .F. ) ; +#2331 = PRESENTATION_STYLE_ASSIGNMENT (( #17123 ) ) ; +#2332 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, -0.3499999999999996400, -1.250000000000000000 ) ) ; +#2333 = EDGE_LOOP ( 'NONE', ( #21582, #24758, #16075, #8870 ) ) ; +#2334 = VECTOR ( 'NONE', #12524, 1000.000000000000000 ) ; +#2335 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40194, 'distance_accuracy_value', 'NONE'); +#2336 = VECTOR ( 'NONE', #3080, 1000.000000000000000 ) ; +#2337 = ORIENTED_EDGE ( 'NONE', *, *, #2778, .T. ) ; +#2338 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2339 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.779999999999867900, -0.2339555568811695400 ) ) ; +#2340 = ORIENTED_EDGE ( 'NONE', *, *, #15607, .T. ) ; +#2342 = ADVANCED_FACE ( 'NONE', ( #31641 ), #12641, .T. ) ; +#2341 = FACE_BOUND ( 'NONE', #23650, .T. ) ; +#2343 = FILL_AREA_STYLE_COLOUR ( '', #32869 ) ; +#2344 = CYLINDRICAL_SURFACE ( 'NONE', #37096, 0.3000000000000003800 ) ; +#2345 = VERTEX_POINT ( 'NONE', #19333 ) ; +#2346 = SURFACE_STYLE_USAGE ( .BOTH. , #11477 ) ; +#2347 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( + ( #16265, #3676, #620, #36179 ), + ( #6509, #13562, #29363, #32484 ), + ( #38974, #16813, #19682, #479 ), + ( #12991, #10009, #29094, #341 ) ), + .UNSPECIFIED., .F., .F., .F. ) + B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) + GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( + ( 1.000000000000000000, 0.8047378541161150900, 0.8047378541161150900, 1.000000000000000000), + ( 0.8047378541243649400, 0.6476030138540487300, 0.6476030138540487300, 0.8047378541243649400), + ( 0.8047378541243649400, 0.6476030138540487300, 0.6476030138540487300, 0.8047378541243649400), + ( 1.000000000000000000, 0.8047378541161150900, 0.8047378541161150900, 1.000000000000000000) ) ) + REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); +#2348 = FACE_OUTER_BOUND ( 'NONE', #4803, .T. ) ; +#2349 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2350 = EDGE_CURVE ( 'NONE', #30097, #11824, #7880, .T. ) ; +#2351 = ORIENTED_EDGE ( 'NONE', *, *, #38934, .T. ) ; +#2352 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2353 = VERTEX_POINT ( 'NONE', #13537 ) ; +#2354 = EDGE_CURVE ( 'NONE', #5496, #22600, #13426, .T. ) ; +#2355 = SURFACE_SIDE_STYLE ('',( #24825 ) ) ; +#2356 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2357 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.380001745296133300, -5.449999999999994000 ) ) ; +#2358 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745296168900, -3.814459358809377100 ) ) ; +#2359 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2360 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2361 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.480001745296166000, -1.649999999999999500 ) ) ; +#2362 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid4', #13292 ) ; +#2363 = STYLED_ITEM ( 'NONE', ( #10344 ), #20738 ) ; +#2364 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.380001745296165500, -3.700000000000000200 ) ) ; +#2365 = FILL_AREA_STYLE_COLOUR ( '', #35335 ) ; +#2366 = STYLED_ITEM ( 'NONE', ( #4880 ), #11613 ) ; +#2367 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2368 = CARTESIAN_POINT ( 'NONE', ( -3.500000000000003600, 0.4300017452961686900, -6.550000000000000700 ) ) ; +#2369 = PRESENTATION_STYLE_ASSIGNMENT (( #18632 ) ) ; +#2371 = EDGE_CURVE ( 'NONE', #11715, #40611, #10929, .T. ) ; +#2370 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13707 ), #1561 ) ; +#2372 = LINE ( 'NONE', #1158, #17008 ) ; +#2373 = ADVANCED_FACE ( 'NONE', ( #19565 ), #19594, .T. ) ; +#2374 = ORIENTED_EDGE ( 'NONE', *, *, #40640, .F. ) ; +#2375 = SURFACE_STYLE_USAGE ( .BOTH. , #15474 ) ; +#2376 = VERTEX_POINT ( 'NONE', #5792 ) ; +#2377 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, 0.5999999999999994200, -3.279289321881344600 ) ) ; +#2378 = ORIENTED_EDGE ( 'NONE', *, *, #22360, .F. ) ; +#2380 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6247 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34984, #15634, #22144 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2379 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6651 ) ) ; +#2381 = SURFACE_SIDE_STYLE ('',( #20889 ) ) ; +#2382 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2383 = ORIENTED_EDGE ( 'NONE', *, *, #35169, .F. ) ; +#2384 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13152 ) ) ; +#2385 = LINE ( 'NONE', #39014, #15486 ) ; +#2386 = ORIENTED_EDGE ( 'NONE', *, *, #2665, .F. ) ; +#2387 = SURFACE_SIDE_STYLE ('',( #4401 ) ) ; +#2388 = PRESENTATION_STYLE_ASSIGNMENT (( #29711 ) ) ; +#2389 = ADVANCED_FACE ( 'NONE', ( #40182 ), #3110, .F. ) ; +#2390 = PLANE ( 'NONE', #27103 ) ; +#2391 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 0.3500000000000000300, 0.6999999999999999600 ) ) ; +#2392 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2393 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28040, 'distance_accuracy_value', 'NONE'); +#2394 = CYLINDRICAL_SURFACE ( 'NONE', #15507, 0.3000000000000003800 ) ; +#2395 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 3.410973126920708000E-015, -1.000000000000000000 ) ) ; +#2396 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2397 = SURFACE_STYLE_FILL_AREA ( #8048 ) ; +#2398 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2399 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2400 = EDGE_CURVE ( 'NONE', #1867, #25052, #1341, .T. ) ; +#2401 = FILL_AREA_STYLE_COLOUR ( '', #12679 ) ; +#2402 = EDGE_CURVE ( 'NONE', #39313, #35973, #3317, .T. ) ; +#2403 = SURFACE_STYLE_USAGE ( .BOTH. , #40777 ) ; +#2404 = LINE ( 'NONE', #10265, #8905 ) ; +#2405 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41630, 'distance_accuracy_value', 'NONE'); +#2406 = EDGE_CURVE ( 'NONE', #16026, #36632, #34652, .T. ) ; +#2407 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2408 = EDGE_LOOP ( 'NONE', ( #23525, #10369, #23090, #13409 ) ) ; +#2409 = ORIENTED_EDGE ( 'NONE', *, *, #4775, .T. ) ; +#2410 = ORIENTED_EDGE ( 'NONE', *, *, #9, .F. ) ; +#2411 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30773 ), #39420 ) ; +#2412 = PLANE ( 'NONE', #581 ) ; +#2413 = EDGE_CURVE ( 'NONE', #1554, #32555, #18014, .T. ) ; +#2414 = SURFACE_STYLE_FILL_AREA ( #12628 ) ; +#2415 = SURFACE_STYLE_USAGE ( .BOTH. , #2147 ) ; +#2416 = ORIENTED_EDGE ( 'NONE', *, *, #23844, .T. ) ; +#2417 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#2418 = VERTEX_POINT ( 'NONE', #4266 ) ; +#2419 = STYLED_ITEM ( 'NONE', ( #13192 ), #21489 ) ; +#2420 = ADVANCED_FACE ( 'NONE', ( #25590 ), #34425, .F. ) ; +#2421 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#2422 = SURFACE_STYLE_USAGE ( .BOTH. , #34733 ) ; +#2423 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13772 ), #16738 ) ; +#2424 = LINE ( 'NONE', #36168, #2910 ) ; +#2425 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2426 = SURFACE_STYLE_FILL_AREA ( #1111 ) ; +#2428 = EDGE_CURVE ( 'NONE', #26824, #37314, #23543, .T. ) ; +#2427 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24888 ), #29161 ) ; +#2429 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -10.30000000000000100, -1.250000000000000000 ) ) ; +#2430 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.6800017452961714100, -1.650000000000000800 ) ) ; +#2431 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#2432 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2434 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20002 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29488, #33444, #19174 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2433 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24050 ) ) ; +#2435 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25679 ), #19195 ) ; +#2436 = SURFACE_STYLE_USAGE ( .BOTH. , #5648 ) ; +#2437 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2438 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40982 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38418, #15698, #19117 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2439 = FACE_OUTER_BOUND ( 'NONE', #8909, .T. ) ; +#2440 = FILL_AREA_STYLE_COLOUR ( '', #5869 ) ; +#2441 = ORIENTED_EDGE ( 'NONE', *, *, #4409, .F. ) ; +#2442 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2443 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35086 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20591, #1237, #23796 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2444 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32924, 'distance_accuracy_value', 'NONE'); +#2445 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2446 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000003200, 0.2800017452961687200, -6.150000000000000400 ) ) ; +#2447 = FILL_AREA_STYLE ('',( #21797 ) ) ; +#2448 = LINE ( 'NONE', #6131, #36775 ) ; +#2449 = SURFACE_STYLE_USAGE ( .BOTH. , #25181 ) ; +#2450 = FILL_AREA_STYLE_COLOUR ( '', #13263 ) ; +#2451 = ORIENTED_EDGE ( 'NONE', *, *, #11280, .F. ) ; +#2452 = VERTEX_POINT ( 'NONE', #38150 ) ; +#2453 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#2454 = ORIENTED_EDGE ( 'NONE', *, *, #23521, .T. ) ; +#2455 = LINE ( 'NONE', #24615, #24147 ) ; +#2456 = FILL_AREA_STYLE_COLOUR ( '', #7868 ) ; +#2457 = SURFACE_STYLE_USAGE ( .BOTH. , #15292 ) ; +#2458 = VECTOR ( 'NONE', #32826, 1000.000000000000000 ) ; +#2459 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2460 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822000, -2.550738490052339500 ) ) ; +#2461 = ORIENTED_EDGE ( 'NONE', *, *, #29900, .F. ) ; +#2462 = VERTEX_POINT ( 'NONE', #26242 ) ; +#2463 = EDGE_LOOP ( 'NONE', ( #35940, #29534, #33316, #38167 ) ) ; +#2464 = PRESENTATION_STYLE_ASSIGNMENT (( #30482 ) ) ; +#2465 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2466 = ORIENTED_EDGE ( 'NONE', *, *, #17250, .F. ) ; +#2467 = EDGE_CURVE ( 'NONE', #33306, #19098, #26055, .T. ) ; +#2468 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000000200, -1.139998254717357500, -5.049996877890552400 ) ) ; +#2469 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#2470 = SURFACE_STYLE_USAGE ( .BOTH. , #41526 ) ; +#2471 = EDGE_CURVE ( 'NONE', #11050, #16838, #33640, .T. ) ; +#2472 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2473 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2474 = LINE ( 'NONE', #5020, #38292 ) ; +#2475 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000000004400, -1.499998254703846200, 0.001000000000001867500 ) ) ; +#2476 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27094 ), #13822 ) ; +#2477 = ORIENTED_EDGE ( 'NONE', *, *, #20305, .T. ) ; +#2478 = STYLED_ITEM ( 'NONE', ( #32839 ), #13480 ) ; +#2479 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#2480 = ORIENTED_EDGE ( 'NONE', *, *, #22688, .F. ) ; +#2481 = STYLED_ITEM ( 'NONE', ( #13878 ), #442 ) ; +#2482 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2483 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -2.031000000000000600, -2.904459358809383700 ) ) ; +#2484 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38441 ), #13829 ) ; +#2485 = STYLED_ITEM ( 'NONE', ( #11878 ), #17835 ) ; +#2486 = ORIENTED_EDGE ( 'NONE', *, *, #11509, .T. ) ; +#2487 = EDGE_LOOP ( 'NONE', ( #15103, #8876, #16274, #35007 ) ) ; +#2488 = FACE_OUTER_BOUND ( 'NONE', #7996, .T. ) ; +#2489 = ADVANCED_FACE ( 'NONE', ( #6374 ), #28047, .T. ) ; +#2490 = VECTOR ( 'NONE', #18721, 1000.000000000000000 ) ; +#2492 = AXIS2_PLACEMENT_3D ( 'NONE', #23700, #4198, #4637 ) ; +#2491 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8126 ), #26278 ) ; +#2493 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.830380236995680300, -0.8400000000000000800 ) ) ; +#2494 = LINE ( 'NONE', #32264, #24202 ) ; +#2495 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2496 = SURFACE_STYLE_FILL_AREA ( #35502 ) ; +#2497 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2499 = EDGE_CURVE ( 'NONE', #33297, #34772, #13899, .T. ) ; +#2498 = AXIS2_PLACEMENT_3D ( 'NONE', #24403, #14926, #18753 ) ; +#2500 = EDGE_LOOP ( 'NONE', ( #2527, #15394, #37433, #6400 ) ) ; +#2501 = PLANE ( 'NONE', #28962 ) ; +#2502 = VECTOR ( 'NONE', #14495, 1000.000000000000100 ) ; +#2503 = VERTEX_POINT ( 'NONE', #5419 ) ; +#2504 = ORIENTED_EDGE ( 'NONE', *, *, #34415, .F. ) ; +#2505 = SURFACE_STYLE_FILL_AREA ( #15723 ) ; +#2507 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20643 ) ) ; +#2506 = CARTESIAN_POINT ( 'NONE', ( -3.119636707815099300, 0.2999999999999999300, 1.000000000000057500 ) ) ; +#2508 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39216, 'distance_accuracy_value', 'NONE'); +#2509 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2510 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2511 = VERTEX_POINT ( 'NONE', #8225 ) ; +#2512 = CIRCLE ( 'NONE', #23315, 0.09999999999987406500 ) ; +#2513 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.5199999999999847000, -5.200000000000000200 ) ) ; +#2514 = FILL_AREA_STYLE ('',( #15342 ) ) ; +#2515 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2516 = FILL_AREA_STYLE ('',( #35243 ) ) ; +#2517 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22928, 'distance_accuracy_value', 'NONE'); +#2518 = PRESENTATION_STYLE_ASSIGNMENT (( #37852 ) ) ; +#2519 = SURFACE_SIDE_STYLE ('',( #34905 ) ) ; +#2520 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 0.2999999999999999900, 0.6999999999999999600 ) ) ; +#2521 = ORIENTED_EDGE ( 'NONE', *, *, #21297, .F. ) ; +#2522 = LINE ( 'NONE', #1115, #10036 ) ; +#2523 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#2524 = FILL_AREA_STYLE ('',( #6023 ) ) ; +#2525 = ADVANCED_FACE ( 'NONE', ( #34124 ), #27557, .T. ) ; +#2526 = EDGE_CURVE ( 'NONE', #32704, #26198, #2826, .T. ) ; +#2527 = ORIENTED_EDGE ( 'NONE', *, *, #3296, .T. ) ; +#2528 = EDGE_LOOP ( 'NONE', ( #1355, #34235, #8063, #22753 ) ) ; +#2529 = CIRCLE ( 'NONE', #37956, 1.686063034915694000 ) ; +#2530 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2531 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2532 = VECTOR ( 'NONE', #25700, 1000.000000000000000 ) ; +#2533 = EDGE_CURVE ( 'NONE', #28243, #37672, #2832, .T. ) ; +#2534 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18513 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27456, #8091, #11076 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2535 = FILL_AREA_STYLE ('',( #31996 ) ) ; +#2536 = FACE_OUTER_BOUND ( 'NONE', #13097, .T. ) ; +#2537 = ORIENTED_EDGE ( 'NONE', *, *, #9045, .F. ) ; +#2538 = ORIENTED_EDGE ( 'NONE', *, *, #32430, .F. ) ; +#2539 = CARTESIAN_POINT ( 'NONE', ( -3.138129219828471600, 0.3000000000000000400, -0.07549520480363448900 ) ) ; +#2540 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2542 = ADVANCED_FACE ( 'NONE', ( #3282 ), #1827, .F. ) ; +#2541 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34808, 'distance_accuracy_value', 'NONE'); +#2543 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29024 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20997, #1926, #34084 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2544 = PLANE ( 'NONE', #39979 ) ; +#2545 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2546 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -1.499998254703828600, -5.049999999999993600 ) ) ; +#2547 = ORIENTED_EDGE ( 'NONE', *, *, #39098, .F. ) ; +#2548 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5405 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31289, #37639, #8390 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2549 = LINE ( 'NONE', #22428, #37883 ) ; +#2550 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2551 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19054 ) ) ; +#2552 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20312, 'distance_accuracy_value', 'NONE'); +#2553 = SURFACE_STYLE_FILL_AREA ( #25353 ) ; +#2554 = SURFACE_STYLE_FILL_AREA ( #36766 ) ; +#2556 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8983 ), #4691 ) ; +#2555 = AXIS2_PLACEMENT_3D ( 'NONE', #22111, #19574, #16426 ) ; +#2557 = SURFACE_STYLE_FILL_AREA ( #38201 ) ; +#2558 = SURFACE_STYLE_USAGE ( .BOTH. , #34726 ) ; +#2561 = EDGE_CURVE ( 'NONE', #20779, #14218, #31074, .T. ) ; +#2560 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, 0.0000000000000000000 ) ) ; +#2559 = AXIS2_PLACEMENT_3D ( 'NONE', #1323, #33619, #8304 ) ; +#2562 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2563 = PRESENTATION_STYLE_ASSIGNMENT (( #26876 ) ) ; +#2564 = SURFACE_STYLE_USAGE ( .BOTH. , #41083 ) ; +#2566 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19326 ), #21495 ) ; +#2565 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15757 ) ) ; +#2567 = VECTOR ( 'NONE', #4169, 1000.000000000000000 ) ; +#2568 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#2569 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.4300017452961686900, -4.750000000000000000 ) ) ; +#2570 = ORIENTED_EDGE ( 'NONE', *, *, #35542, .T. ) ; +#2571 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#2572 = PLANE ( 'NONE', #16555 ) ; +#2573 = FACE_OUTER_BOUND ( 'NONE', #6240, .T. ) ; +#2574 = VECTOR ( 'NONE', #12744, 1000.000000000000000 ) ; +#2575 = ORIENTED_EDGE ( 'NONE', *, *, #19718, .T. ) ; +#2576 = LINE ( 'NONE', #38301, #13635 ) ; +#2578 = FACE_OUTER_BOUND ( 'NONE', #32649, .T. ) ; +#2577 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#2579 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2580 = ORIENTED_EDGE ( 'NONE', *, *, #26727, .F. ) ; +#2581 = FILL_AREA_STYLE ('',( #13669 ) ) ; +#2582 = FACE_OUTER_BOUND ( 'NONE', #9913, .T. ) ; +#2583 = VERTEX_POINT ( 'NONE', #18708 ) ; +#2585 = ADVANCED_FACE ( 'NONE', ( #28568 ), #2796, .F. ) ; +#2584 = ORIENTED_EDGE ( 'NONE', *, *, #35433, .T. ) ; +#2586 = LINE ( 'NONE', #33690, #23257 ) ; +#2587 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2588 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.931303021499040500, -0.3590461068823621000 ) ) ; +#2589 = CARTESIAN_POINT ( 'NONE', ( 3.145000000000000000, -0.2999999999999999900, 0.6780706550913999700 ) ) ; +#2590 = ORIENTED_EDGE ( 'NONE', *, *, #4177, .F. ) ; +#2591 = VECTOR ( 'NONE', #16762, 999.9999999999998900 ) ; +#2592 = EDGE_CURVE ( 'NONE', #14426, #23498, #296, .T. ) ; +#2593 = SURFACE_SIDE_STYLE ('',( #28007 ) ) ; +#2594 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -5.460789592991141900E-031 ) ) ; +#2595 = LINE ( 'NONE', #18204, #34903 ) ; +#2596 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#2597 = ADVANCED_FACE ( 'NONE', ( #27519 ), #2767, .T. ) ; +#2598 = SURFACE_STYLE_FILL_AREA ( #672 ) ; +#2599 = PRESENTATION_STYLE_ASSIGNMENT (( #22267 ) ) ; +#2600 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.2800017452961688400, -5.250000000000000000 ) ) ; +#2601 = EDGE_CURVE ( 'NONE', #19853, #36839, #30563, .T. ) ; +#2602 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2603 = FILL_AREA_STYLE_COLOUR ( '', #36561 ) ; +#2604 = CARTESIAN_POINT ( 'NONE', ( 3.217018655616160800, -0.2999999999999999900, -0.04760357729905644000 ) ) ; +#2605 = FACE_OUTER_BOUND ( 'NONE', #12329, .T. ) ; +#2606 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21529 ), #36648 ) ; +#2607 = ORIENTED_EDGE ( 'NONE', *, *, #6083, .F. ) ; +#2608 = STYLED_ITEM ( 'NONE', ( #17613 ), #20141 ) ; +#2609 = PLANE ( 'NONE', #2199 ) ; +#2610 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2611 = EDGE_LOOP ( 'NONE', ( #18762, #39512, #26625 ) ) ; +#2612 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.139998254717356800, -6.299996877890552400 ) ) ; +#2613 = ORIENTED_EDGE ( 'NONE', *, *, #40682, .T. ) ; +#2614 = AXIS2_PLACEMENT_3D ( 'NONE', #3698, #38581, #29390 ) ; +#2615 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2616 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37118, 'distance_accuracy_value', 'NONE'); +#2617 = VECTOR ( 'NONE', #16959, 1000.000000000000000 ) ; +#2618 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#2620 = EDGE_CURVE ( 'NONE', #17867, #33601, #25041, .T. ) ; +#2619 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40734 ) ) ; +#2621 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760845000E-015 ) ) ; +#2622 = ORIENTED_EDGE ( 'NONE', *, *, #27990, .F. ) ; +#2623 = SURFACE_SIDE_STYLE ('',( #33442 ) ) ; +#2624 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2625 = ORIENTED_EDGE ( 'NONE', *, *, #33245, .T. ) ; +#2626 = VERTEX_POINT ( 'NONE', #9337 ) ; +#2627 = SURFACE_STYLE_USAGE ( .BOTH. , #28711 ) ; +#2629 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #222 ), #2380 ) ; +#2628 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14238 ), #6897 ) ; +#2630 = AXIS2_PLACEMENT_3D ( 'NONE', #13567, #26436, #4235 ) ; +#2631 = DIRECTION ( 'NONE', ( -2.572150981388940300E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2632 = FILL_AREA_STYLE_COLOUR ( '', #30033 ) ; +#2633 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19367 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16421, #6531, #35923 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2634 = FILL_AREA_STYLE_COLOUR ( '', #1298 ) ; +#2635 = EDGE_LOOP ( 'NONE', ( #6343, #38259, #31119, #15959 ) ) ; +#2636 = ORIENTED_EDGE ( 'NONE', *, *, #34234, .T. ) ; +#2637 = ADVANCED_FACE ( 'NONE', ( #9293 ), #40631, .F. ) ; +#2638 = PRESENTATION_STYLE_ASSIGNMENT (( #12477 ) ) ; +#2640 = FACE_OUTER_BOUND ( 'NONE', #30580, .T. ) ; +#2639 = FILL_AREA_STYLE ('',( #34799 ) ) ; +#2641 = CARTESIAN_POINT ( 'NONE', ( 3.475000000000000100, 1.630001745296169000, -4.100000000000000500 ) ) ; +#2642 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2643 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2644 = DIRECTION ( 'NONE', ( -0.08715574274765916500, -2.860372408307886300E-016, -0.9961946980917455500 ) ) ; +#2645 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2646 = SURFACE_STYLE_FILL_AREA ( #18495 ) ; +#2647 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.649999999999999900 ) ) ; +#2648 = ORIENTED_EDGE ( 'NONE', *, *, #23461, .T. ) ; +#2649 = FILL_AREA_STYLE_COLOUR ( '', #20648 ) ; +#2650 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid12', #25337 ) ; +#2651 = VECTOR ( 'NONE', #39935, 1000.000000000000000 ) ; +#2652 = CARTESIAN_POINT ( 'NONE', ( -3.058278386399381900, -0.2459192347481240800, 1.081121147877813800 ) ) ; +#2653 = FACE_OUTER_BOUND ( 'NONE', #37612, .T. ) ; +#2654 = EDGE_CURVE ( 'NONE', #40751, #29684, #7810, .T. ) ; +#2655 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2656 = CARTESIAN_POINT ( 'NONE', ( 3.179314575050761000, 0.5999999999999993100, -3.279289321881345000 ) ) ; +#2657 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2658 = VERTEX_POINT ( 'NONE', #32084 ) ; +#2659 = SURFACE_STYLE_USAGE ( .BOTH. , #41315 ) ; +#2660 = EDGE_CURVE ( 'NONE', #35497, #4358, #33600, .T. ) ; +#2661 = CIRCLE ( 'NONE', #14356, 0.3600000000000078700 ) ; +#2662 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.2800017452961687200, -6.249999999999998200 ) ) ; +#2663 = ORIENTED_EDGE ( 'NONE', *, *, #15254, .F. ) ; +#2664 = LINE ( 'NONE', #10794, #10676 ) ; +#2665 = EDGE_CURVE ( 'NONE', #37825, #37440, #40135, .T. ) ; +#2666 = CARTESIAN_POINT ( 'NONE', ( -4.920000000000007900, -0.01999825470386316600, -6.526326723416069300 ) ) ; +#2667 = FILL_AREA_STYLE_COLOUR ( '', #31154 ) ; +#2668 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25116 ), #40220 ) ; +#2669 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#2670 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2671 = ORIENTED_EDGE ( 'NONE', *, *, #24037, .T. ) ; +#2672 = SURFACE_STYLE_USAGE ( .BOTH. , #41577 ) ; +#2673 = PLANE ( 'NONE', #17071 ) ; +#2674 = LINE ( 'NONE', #18905, #2149 ) ; +#2675 = VERTEX_POINT ( 'NONE', #32783 ) ; +#2676 = AXIS2_PLACEMENT_3D ( 'NONE', #2878, #28817, #9447 ) ; +#2677 = LINE ( 'NONE', #20764, #18828 ) ; +#2678 = VECTOR ( 'NONE', #20230, 1000.000000000000000 ) ; +#2679 = STYLED_ITEM ( 'NONE', ( #38611 ), #12266 ) ; +#2680 = SURFACE_STYLE_FILL_AREA ( #16093 ) ; +#2681 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#2682 = CARTESIAN_POINT ( 'NONE', ( -3.840839110756181900, 0.6277504459551578300, -4.549999999999998900 ) ) ; +#2684 = EDGE_CURVE ( 'NONE', #3704, #1286, #26511, .T. ) ; +#2683 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40355 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4792, #40225, #40643 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2685 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000005700, -0.2999999999999852800, -3.099999999999998800 ) ) ; +#2686 = LINE ( 'NONE', #19032, #4674 ) ; +#2687 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2688 = VECTOR ( 'NONE', #21032, 1000.000000000000000 ) ; +#2689 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29876, 'distance_accuracy_value', 'NONE'); +#2691 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20815 ), #6954 ) ; +#2690 = AXIS2_PLACEMENT_3D ( 'NONE', #495, #19402, #3284 ) ; +#2692 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -2.604459358809380700 ) ) ; +#2693 = SURFACE_STYLE_USAGE ( .BOTH. , #25407 ) ; +#2694 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18074 ) ) ; +#2695 = ORIENTED_EDGE ( 'NONE', *, *, #25108, .T. ) ; +#2696 = PLANE ( 'NONE', #17246 ) ; +#2697 = LINE ( 'NONE', #9856, #1160 ) ; +#2698 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20456 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40000, #33531, #26772 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2699 = SURFACE_SIDE_STYLE ('',( #7126 ) ) ; +#2700 = SURFACE_SIDE_STYLE ('',( #5413 ) ) ; +#2701 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7782 ), #34337 ) ; +#2702 = ORIENTED_EDGE ( 'NONE', *, *, #17485, .F. ) ; +#2703 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2704 = CARTESIAN_POINT ( 'NONE', ( 2.972500000000000100, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#2705 = ORIENTED_EDGE ( 'NONE', *, *, #10894, .F. ) ; +#2707 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#2706 = SURFACE_STYLE_FILL_AREA ( #111 ) ; +#2708 = ORIENTED_EDGE ( 'NONE', *, *, #3715, .T. ) ; +#2709 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000800, -10.30000000000000100, -1.250000000000000000 ) ) ; +#2710 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20930, 'distance_accuracy_value', 'NONE'); +#2711 = ORIENTED_EDGE ( 'NONE', *, *, #33610, .F. ) ; +#2712 = ORIENTED_EDGE ( 'NONE', *, *, #28847, .F. ) ; +#2713 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2714 = LINE ( 'NONE', #21552, #40548 ) ; +#2715 = LINE ( 'NONE', #21786, #19888 ) ; +#2716 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2717 = CARTESIAN_POINT ( 'NONE', ( -3.094999999999943400, 0.07499999999999998300, -1.532287565553075200 ) ) ; +#2718 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521965300E-031 ) ) ; +#2719 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19253, 'distance_accuracy_value', 'NONE'); +#2720 = EDGE_CURVE ( 'NONE', #6822, #32728, #16896, .T. ) ; +#2721 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2722 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26508 ), #35166 ) ; +#2723 = CARTESIAN_POINT ( 'NONE', ( -17.14169132166999900, -0.6000000000000000900, -3.250000000000000400 ) ) ; +#2724 = EDGE_CURVE ( 'NONE', #2872, #4849, #24498, .T. ) ; +#2725 = ORIENTED_EDGE ( 'NONE', *, *, #37385, .F. ) ; +#2726 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2727 = STYLED_ITEM ( 'NONE', ( #12369 ), #22003 ) ; +#2728 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2730 = CARTESIAN_POINT ( 'NONE', ( 4.551493546202548800, -1.300001745296165400, -6.639019554637397600 ) ) ; +#2729 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000008300, -0.8500017452961653500, -5.599999999999999600 ) ) ; +#2731 = CARTESIAN_POINT ( 'NONE', ( 2.995000000000000100, 0.3499999999999999200, -1.400000000000000100 ) ) ; +#2732 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40282 ) ) ; +#2735 = EDGE_CURVE ( 'NONE', #21877, #9395, #35588, .T. ) ; +#2734 = AXIS2_PLACEMENT_3D ( 'NONE', #24876, #31877, #25415 ) ; +#2733 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2736 = ORIENTED_EDGE ( 'NONE', *, *, #39958, .F. ) ; +#2737 = ADVANCED_FACE ( 'NONE', ( #34568 ), #6925, .T. ) ; +#2738 = EDGE_LOOP ( 'NONE', ( #29852, #29208, #16163, #38156 ) ) ; +#2739 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2741 = ORIENTED_EDGE ( 'NONE', *, *, #35098, .F. ) ; +#2740 = LINE ( 'NONE', #19329, #30987 ) ; +#2742 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2743 = ORIENTED_EDGE ( 'NONE', *, *, #17037, .T. ) ; +#2744 = SURFACE_STYLE_FILL_AREA ( #23896 ) ; +#2745 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30850 ) ) ; +#2746 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14349 ) ) ; +#2747 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6357, 'distance_accuracy_value', 'NONE'); +#2748 = LINE ( 'NONE', #18892, #19916 ) ; +#2750 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11354 ), #13525 ) ; +#2749 = STYLED_ITEM ( 'NONE', ( #1149 ), #33867 ) ; +#2751 = ORIENTED_EDGE ( 'NONE', *, *, #9147, .F. ) ; +#2752 = AXIS2_PLACEMENT_3D ( 'NONE', #29376, #28969, #32497 ) ; +#2753 = FACE_OUTER_BOUND ( 'NONE', #11548, .T. ) ; +#2754 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2755 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#2756 = ADVANCED_FACE ( 'NONE', ( #16372 ), #25756, .F. ) ; +#2757 = SURFACE_STYLE_FILL_AREA ( #14608 ) ; +#2758 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, -2.322941965694886000, -1.250000000000000000 ) ) ; +#2759 = PLANE ( 'NONE', #16805 ) ; +#2760 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24244, 'distance_accuracy_value', 'NONE'); +#2761 = DIRECTION ( 'NONE', ( -0.9961946980917454300, -2.635991797933898700E-016, 0.08715574274765916500 ) ) ; +#2762 = FILL_AREA_STYLE ('',( #9328 ) ) ; +#2763 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2764 = FILL_AREA_STYLE_COLOUR ( '', #6553 ) ; +#2765 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2766 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2767 = PLANE ( 'NONE', #31843 ) ; +#2768 = FILL_AREA_STYLE_COLOUR ( '', #35182 ) ; +#2769 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2770 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.966063034915694700, -0.6228541982233617400 ) ) ; +#2771 = FACE_OUTER_BOUND ( 'NONE', #13771, .T. ) ; +#2772 = FILL_AREA_STYLE_COLOUR ( '', #5286 ) ; +#2773 = ORIENTED_EDGE ( 'NONE', *, *, #13356, .F. ) ; +#2774 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2775 = FACE_OUTER_BOUND ( 'NONE', #5183, .T. ) ; +#2776 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703821100, -5.899999999999999500 ) ) ; +#2777 = EDGE_LOOP ( 'NONE', ( #6968, #13804, #39079, #25762 ) ) ; +#2778 = EDGE_CURVE ( 'NONE', #16811, #36866, #32535, .T. ) ; +#2779 = ORIENTED_EDGE ( 'NONE', *, *, #2126, .F. ) ; +#2780 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2782 = VERTEX_POINT ( 'NONE', #6524 ) ; +#2781 = SURFACE_STYLE_FILL_AREA ( #7068 ) ; +#2783 = ORIENTED_EDGE ( 'NONE', *, *, #37575, .T. ) ; +#2784 = SURFACE_SIDE_STYLE ('',( #25733 ) ) ; +#2785 = DIRECTION ( 'NONE', ( -0.9961946980917454300, -3.269420623233418300E-015, 0.08715574274766037200 ) ) ; +#2786 = EDGE_CURVE ( 'NONE', #14132, #25692, #33561, .T. ) ; +#2787 = AXIS2_PLACEMENT_3D ( 'NONE', #1567, #40487, #30623 ) ; +#2788 = FACE_OUTER_BOUND ( 'NONE', #37840, .T. ) ; +#2789 = FILL_AREA_STYLE_COLOUR ( '', #31176 ) ; +#2790 = STYLED_ITEM ( 'NONE', ( #27825 ), #23173 ) ; +#2791 = ADVANCED_FACE ( 'NONE', ( #252 ), #29250, .T. ) ; +#2792 = VECTOR ( 'NONE', #4673, 1000.000000000000000 ) ; +#2793 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244519300E-016 ) ) ; +#2794 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25784 ) ) ; +#2795 = LINE ( 'NONE', #6162, #35047 ) ; +#2796 = CYLINDRICAL_SURFACE ( 'NONE', #14524, 0.2999999999999999300 ) ; +#2797 = SURFACE_STYLE_FILL_AREA ( #18654 ) ; +#2798 = ORIENTED_EDGE ( 'NONE', *, *, #21486, .T. ) ; +#2799 = VECTOR ( 'NONE', #35634, 1000.000000000000000 ) ; +#2800 = FILL_AREA_STYLE ('',( #19437 ) ) ; +#2801 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21002 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24310, #11839, #2160 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2802 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35247 ), #7062 ) ; +#2803 = SURFACE_STYLE_FILL_AREA ( #26113 ) ; +#2804 = FILL_AREA_STYLE ('',( #2667 ) ) ; +#2805 = ADVANCED_FACE ( 'NONE', ( #8763 ), #20397, .F. ) ; +#2807 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26593 ) ) ; +#2806 = AXIS2_PLACEMENT_3D ( 'NONE', #19450, #982, #36105 ) ; +#2808 = ORIENTED_EDGE ( 'NONE', *, *, #8559, .F. ) ; +#2809 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2811 = EDGE_CURVE ( 'NONE', #30797, #36436, #11779, .T. ) ; +#2810 = AXIS2_PLACEMENT_3D ( 'NONE', #35534, #19443, #130 ) ; +#2812 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#2813 = FILL_AREA_STYLE_COLOUR ( '', #14621 ) ; +#2814 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2815 = VECTOR ( 'NONE', #21229, 1000.000000000000000 ) ; +#2816 = ORIENTED_EDGE ( 'NONE', *, *, #29235, .T. ) ; +#2817 = SURFACE_STYLE_USAGE ( .BOTH. , #12917 ) ; +#2819 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26686 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27350, #17342, #20621 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2818 = AXIS2_PLACEMENT_3D ( 'NONE', #11361, #18456, #24970 ) ; +#2820 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2821 = FILL_AREA_STYLE_COLOUR ( '', #512 ) ; +#2822 = CARTESIAN_POINT ( 'NONE', ( -3.394999999999999600, -0.2000000000000000100, -3.299999999999999800 ) ) ; +#2823 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#2824 = ORIENTED_EDGE ( 'NONE', *, *, #27247, .F. ) ; +#2825 = CARTESIAN_POINT ( 'NONE', ( 2.900000000000000400, -1.499998254703820600, -5.049999999999993600 ) ) ; +#2826 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #34095, #27605, #40860, #28027, #11758, #30848, #21277, #31262, #37346, #18018 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 2, 2, 4 ), + ( 0.0000000000000000000, 0.2500000000000028900, 0.3749999999999967800, 0.4999999999999906700, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#2827 = LINE ( 'NONE', #13887, #5284 ) ; +#2828 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.499998254703828600, -5.049999999999993600 ) ) ; +#2829 = PRESENTATION_STYLE_ASSIGNMENT (( #2080 ) ) ; +#2830 = VECTOR ( 'NONE', #32316, 1000.000000000000000 ) ; +#2831 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2832 = LINE ( 'NONE', #31127, #10354 ) ; +#2833 = ORIENTED_EDGE ( 'NONE', *, *, #25641, .F. ) ; +#2834 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2835 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 2.322941965694886000, 0.3499999999999999800 ) ) ; +#2836 = EDGE_CURVE ( 'NONE', #35039, #11050, #18388, .T. ) ; +#2837 = ADVANCED_FACE ( 'NONE', ( #14317 ), #20531, .T. ) ; +#2838 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36443, 'distance_accuracy_value', 'NONE'); +#2839 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.5199999999999842500, -5.299999999999999800 ) ) ; +#2840 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#2841 = SURFACE_SIDE_STYLE ('',( #2273 ) ) ; +#2842 = EDGE_CURVE ( 'NONE', #26968, #28419, #16850, .T. ) ; +#2843 = ORIENTED_EDGE ( 'NONE', *, *, #488, .F. ) ; +#2844 = CARTESIAN_POINT ( 'NONE', ( -3.429999999999999700, -1.499998254703818900, -6.299999999999993600 ) ) ; +#2845 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.779999999999868600, -0.2339555568811697600 ) ) ; +#2846 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2847 = STYLED_ITEM ( 'NONE', ( #11299 ), #15423 ) ; +#2848 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8384, 'distance_accuracy_value', 'NONE'); +#2849 = VERTEX_POINT ( 'NONE', #4390 ) ; +#2850 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.2800017452961687200, -6.150000000000000400 ) ) ; +#2851 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 0.3500000000000000300, -1.249999999999999800 ) ) ; +#2852 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.499998254703823800, -5.449999999999994000 ) ) ; +#2853 = FILL_AREA_STYLE ('',( #12815 ) ) ; +#2854 = AXIS2_PLACEMENT_3D ( 'NONE', #10244, #29620, #36274 ) ; +#2855 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, 2.322941965694886000, -1.250000000000000000 ) ) ; +#2856 = ORIENTED_EDGE ( 'NONE', *, *, #32664, .T. ) ; +#2857 = AXIS2_PLACEMENT_3D ( 'NONE', #21974, #2911, #15459 ) ; +#2858 = ORIENTED_EDGE ( 'NONE', *, *, #5552, .T. ) ; +#2859 = LINE ( 'NONE', #34303, #39687 ) ; +#2860 = EDGE_LOOP ( 'NONE', ( #8158, #6658, #39076, #12775 ) ) ; +#2862 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41775 ), #39060 ) ; +#2861 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39867 ) ) ; +#2863 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2864 = LINE ( 'NONE', #20576, #26578 ) ; +#2865 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2866 = PRESENTATION_STYLE_ASSIGNMENT (( #37982 ) ) ; +#2868 = EDGE_CURVE ( 'NONE', #1491, #37626, #32840, .T. ) ; +#2867 = AXIS2_PLACEMENT_3D ( 'NONE', #19358, #19083, #9567 ) ; +#2869 = ORIENTED_EDGE ( 'NONE', *, *, #32861, .F. ) ; +#2870 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2871 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32735, 'distance_accuracy_value', 'NONE'); +#2872 = VERTEX_POINT ( 'NONE', #20110 ) ; +#2873 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 1.485063948690956900E-014, -3.099999999999998800 ) ) ; +#2874 = VECTOR ( 'NONE', #19875, 1000.000000000000000 ) ; +#2875 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#2877 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30977 ) ) ; +#2876 = STYLED_ITEM ( 'NONE', ( #32938 ), #26703 ) ; +#2878 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000030900, 0.4300017452961686900, -6.550000000000000700 ) ) ; +#2879 = PRESENTATION_STYLE_ASSIGNMENT (( #37192 ) ) ; +#2880 = ORIENTED_EDGE ( 'NONE', *, *, #15366, .F. ) ; +#2881 = AXIS2_PLACEMENT_3D ( 'NONE', #12290, #22201, #18827 ) ; +#2882 = CIRCLE ( 'NONE', #6809, 0.1000000000000001600 ) ; +#2883 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2884 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17271, 'distance_accuracy_value', 'NONE'); +#2885 = SURFACE_STYLE_FILL_AREA ( #33655 ) ; +#2886 = VERTEX_POINT ( 'NONE', #30246 ) ; +#2887 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2888 = CARTESIAN_POINT ( 'NONE', ( -4.700922750916311600, -1.400001745296195500, -6.625946193225248100 ) ) ; +#2889 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000013700, -1.949998254703823700, -2.467712434446772000 ) ) ; +#2890 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2891 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 2.032879073410321300E-016, 1.000000000000000000 ) ) ; +#2892 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2893 = EDGE_CURVE ( 'NONE', #10056, #22485, #39050, .T. ) ; +#2894 = EDGE_LOOP ( 'NONE', ( #25275, #33544, #32937, #6126 ) ) ; +#2895 = ORIENTED_EDGE ( 'NONE', *, *, #20437, .F. ) ; +#2896 = ORIENTED_EDGE ( 'NONE', *, *, #25178, .F. ) ; +#2897 = FACE_OUTER_BOUND ( 'NONE', #821, .T. ) ; +#2898 = FACE_OUTER_BOUND ( 'NONE', #17612, .T. ) ; +#2899 = EDGE_CURVE ( 'NONE', #28000, #3655, #30476, .T. ) ; +#2900 = FILL_AREA_STYLE_COLOUR ( '', #12072 ) ; +#2901 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2902 = ORIENTED_EDGE ( 'NONE', *, *, #32930, .F. ) ; +#2903 = FILL_AREA_STYLE ('',( #5842 ) ) ; +#2904 = FACE_OUTER_BOUND ( 'NONE', #9599, .T. ) ; +#2905 = VERTEX_POINT ( 'NONE', #14014 ) ; +#2906 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2907 = STYLED_ITEM ( 'NONE', ( #23807 ), #16267 ) ; +#2908 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2909 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, 0.7071067811865483500 ) ) ; +#2910 = VECTOR ( 'NONE', #6754, 1000.000000000000000 ) ; +#2911 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521965300E-031 ) ) ; +#2912 = DIRECTION ( 'NONE', ( 6.056601140521967900E-031, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2913 = VECTOR ( 'NONE', #8058, 1000.000000000000000 ) ; +#2914 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2915 = STYLED_ITEM ( 'NONE', ( #20533 ), #20615 ) ; +#2916 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12613, 'distance_accuracy_value', 'NONE'); +#2917 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35027 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17873, #24365, #36932 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2918 = PLANE ( 'NONE', #10973 ) ; +#2919 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -1.149999999999999900 ) ) ; +#2922 = EDGE_CURVE ( 'NONE', #37941, #31553, #4202, .T. ) ; +#2921 = SURFACE_SIDE_STYLE ('',( #4426 ) ) ; +#2920 = STYLED_ITEM ( 'NONE', ( #16389 ), #37210 ) ; +#2923 = ORIENTED_EDGE ( 'NONE', *, *, #16179, .T. ) ; +#2924 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#2925 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.286487835346686100E-015, 0.0000000000000000000 ) ) ; +#2927 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18177 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26583, #7210, #10455 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2926 = STYLED_ITEM ( 'NONE', ( #12507 ), #27259 ) ; +#2928 = SURFACE_STYLE_USAGE ( .BOTH. , #12203 ) ; +#2929 = VERTEX_POINT ( 'NONE', #17833 ) ; +#2930 = ORIENTED_EDGE ( 'NONE', *, *, #14568, .T. ) ; +#2931 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -2.031000000000000600, -3.514459358809376400 ) ) ; +#2932 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4386 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27799, #34007, #5188 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2933 = ORIENTED_EDGE ( 'NONE', *, *, #2526, .T. ) ; +#2934 = STYLED_ITEM ( 'NONE', ( #17045 ), #7520 ) ; +#2935 = VECTOR ( 'NONE', #5378, 1000.000000000000000 ) ; +#2936 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2937 = VERTEX_POINT ( 'NONE', #29679 ) ; +#2938 = CARTESIAN_POINT ( 'NONE', ( -3.237718385397967900, 0.07499999999999998300, 0.7155313145785868700 ) ) ; +#2939 = SURFACE_STYLE_FILL_AREA ( #27421 ) ; +#2940 = PRESENTATION_STYLE_ASSIGNMENT (( #17783 ) ) ; +#2941 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2942 = LINE ( 'NONE', #26891, #24662 ) ; +#2943 = ORIENTED_EDGE ( 'NONE', *, *, #33822, .T. ) ; +#2944 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2945 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2946 = ORIENTED_EDGE ( 'NONE', *, *, #27019, .T. ) ; +#2947 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, -0.1999999999999992900, -3.279289321881345000 ) ) ; +#2948 = SURFACE_STYLE_USAGE ( .BOTH. , #9382 ) ; +#2949 = ORIENTED_EDGE ( 'NONE', *, *, #5325, .T. ) ; +#2950 = FACE_OUTER_BOUND ( 'NONE', #37942, .T. ) ; +#2951 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2952 = ADVANCED_FACE ( 'NONE', ( #6244 ), #39412, .F. ) ; +#2953 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2954 = EDGE_CURVE ( 'NONE', #32179, #36536, #41601, .T. ) ; +#2955 = EDGE_CURVE ( 'NONE', #41348, #19624, #13270, .T. ) ; +#2956 = ORIENTED_EDGE ( 'NONE', *, *, #37023, .T. ) ; +#2957 = FILL_AREA_STYLE ('',( #35286 ) ) ; +#2958 = VERTEX_POINT ( 'NONE', #4683 ) ; +#2959 = EDGE_CURVE ( 'NONE', #28709, #24747, #29988, .T. ) ; +#2960 = ORIENTED_EDGE ( 'NONE', *, *, #11048, .T. ) ; +#2961 = LINE ( 'NONE', #19002, #29185 ) ; +#2962 = CARTESIAN_POINT ( 'NONE', ( -3.846156164834738400, 0.6165030250713622300, -4.550456058592868800 ) ) ; +#2963 = AXIS2_PLACEMENT_3D ( 'NONE', #26073, #29309, #32003 ) ; +#2964 = EDGE_LOOP ( 'NONE', ( #32841, #38181, #8995, #26679 ) ) ; +#2965 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2966 = ORIENTED_EDGE ( 'NONE', *, *, #5776, .T. ) ; +#2967 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745296168900, -3.514459358809384400 ) ) ; +#2968 = ORIENTED_EDGE ( 'NONE', *, *, #38169, .T. ) ; +#2969 = CIRCLE ( 'NONE', #10112, 0.3600000000000078700 ) ; +#2970 = SURFACE_SIDE_STYLE ('',( #38093 ) ) ; +#2971 = CIRCLE ( 'NONE', #14223, 0.1000000000000000500 ) ; +#2973 = EDGE_CURVE ( 'NONE', #8874, #22538, #6040, .T. ) ; +#2972 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29419 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13386, #17387, #6887 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2974 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2975 = SURFACE_STYLE_USAGE ( .BOTH. , #12394 ) ; +#2976 = ORIENTED_EDGE ( 'NONE', *, *, #36609, .T. ) ; +#2977 = DIRECTION ( 'NONE', ( -4.336808689942015400E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2978 = VERTEX_POINT ( 'NONE', #8317 ) ; +#2979 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30423, 'distance_accuracy_value', 'NONE'); +#2981 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #839 ) ) ; +#2980 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20875 ) ) ; +#2982 = STYLED_ITEM ( 'NONE', ( #5905 ), #41436 ) ; +#2983 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703822500, -3.700000000000000200 ) ) ; +#2984 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31797 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2201, #11870, #40985 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2985 = ORIENTED_EDGE ( 'NONE', *, *, #5997, .T. ) ; +#2986 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2987 = ADVANCED_FACE ( 'NONE', ( #24457 ), #30380, .F. ) ; +#2988 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38176 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6027, #3201, #31857 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2989 = VECTOR ( 'NONE', #20718, 1000.000000000000000 ) ; +#2990 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2991 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2992 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2993 = SURFACE_STYLE_FILL_AREA ( #34474 ) ; +#2995 = SURFACE_SIDE_STYLE ('',( #21111 ) ) ; +#2994 = FILL_AREA_STYLE_COLOUR ( '', #4130 ) ; +#2996 = ADVANCED_FACE ( 'NONE', ( #9704 ), #14294, .F. ) ; +#2997 = VERTEX_POINT ( 'NONE', #33631 ) ; +#2998 = LINE ( 'NONE', #28165, #7494 ) ; +#2999 = CARTESIAN_POINT ( 'NONE', ( 3.208603896932106900, -0.6500000000000002400, -3.300000000000000300 ) ) ; +#3000 = SURFACE_SIDE_STYLE ('',( #18452 ) ) ; +#3001 = VERTEX_POINT ( 'NONE', #27409 ) ; +#3002 = PRESENTATION_STYLE_ASSIGNMENT (( #242 ) ) ; +#3003 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#3004 = EDGE_LOOP ( 'NONE', ( #27759, #22348, #34151, #5400 ) ) ; +#3005 = ORIENTED_EDGE ( 'NONE', *, *, #38367, .F. ) ; +#3006 = EDGE_CURVE ( 'NONE', #11120, #28223, #16615, .T. ) ; +#3007 = CIRCLE ( 'NONE', #40874, 0.09999999999999999200 ) ; +#3008 = SURFACE_SIDE_STYLE ('',( #4714 ) ) ; +#3009 = SURFACE_SIDE_STYLE ('',( #7632 ) ) ; +#3010 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23646, 'distance_accuracy_value', 'NONE'); +#3011 = FILL_AREA_STYLE ('',( #15971 ) ) ; +#3012 = SURFACE_STYLE_USAGE ( .BOTH. , #21956 ) ; +#3013 = EDGE_CURVE ( 'NONE', #32326, #27857, #17328, .T. ) ; +#3014 = EDGE_LOOP ( 'NONE', ( #32276, #12065, #16723, #3830 ) ) ; +#3015 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.4300017452961689100, -5.150000000000000400 ) ) ; +#3016 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3017 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.2339555568811697600 ) ) ; +#3018 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2552 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20312, #2908, #6930 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3019 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#3020 = AXIS2_PLACEMENT_3D ( 'NONE', #39838, #33224, #20539 ) ; +#3021 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27911, 'distance_accuracy_value', 'NONE'); +#3022 = FILL_AREA_STYLE_COLOUR ( '', #17448 ) ; +#3024 = AXIS2_PLACEMENT_3D ( 'NONE', #23145, #23281, #26118 ) ; +#3023 = PRESENTATION_STYLE_ASSIGNMENT (( #21227 ) ) ; +#3025 = ADVANCED_FACE ( 'NONE', ( #24410 ), #24762, .F. ) ; +#3026 = AXIS2_PLACEMENT_3D ( 'NONE', #24168, #33766, #4802 ) ; +#3027 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3028 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19852 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34648, #11880, #5555 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3029 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.307718258760844200E-015, -1.000000000000000000 ) ) ; +#3030 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.499998254703827700, -6.699999999999994000 ) ) ; +#3031 = ORIENTED_EDGE ( 'NONE', *, *, #12576, .F. ) ; +#3032 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.380001745296146200, -5.449999999999994000 ) ) ; +#3033 = VECTOR ( 'NONE', #26368, 1000.000000000000000 ) ; +#3035 = EDGE_CURVE ( 'NONE', #32267, #854, #2715, .T. ) ; +#3034 = AXIS2_PLACEMENT_3D ( 'NONE', #10775, #26924, #26350 ) ; +#3036 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3037 = SURFACE_STYLE_FILL_AREA ( #27414 ) ; +#3039 = STYLED_ITEM ( 'NONE', ( #14678 ), #9250 ) ; +#3038 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3040 = VERTEX_POINT ( 'NONE', #5365 ) ; +#3041 = VECTOR ( 'NONE', #21977, 1000.000000000000000 ) ; +#3042 = VERTEX_POINT ( 'NONE', #21368 ) ; +#3043 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3044 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3045 = SURFACE_STYLE_FILL_AREA ( #17786 ) ; +#3046 = SURFACE_STYLE_FILL_AREA ( #5057 ) ; +#3047 = VECTOR ( 'NONE', #417, 1000.000000000000000 ) ; +#3048 = EDGE_LOOP ( 'NONE', ( #13337, #22989, #21303, #36980 ) ) ; +#3049 = VECTOR ( 'NONE', #38644, 1000.000000000000000 ) ; +#3050 = VERTEX_POINT ( 'NONE', #2165 ) ; +#3051 = ORIENTED_EDGE ( 'NONE', *, *, #33610, .T. ) ; +#3052 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3053 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #36381, #20161, #4153, #13775 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 4.712388980384648800, 7.853981633974441900 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.3333333333333333700, 0.3333333333333333700, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#3054 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3055 = VERTEX_POINT ( 'NONE', #14978 ) ; +#3056 = PRESENTATION_STYLE_ASSIGNMENT (( #36669 ) ) ; +#3057 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6308, 'distance_accuracy_value', 'NONE'); +#3058 = VECTOR ( 'NONE', #30614, 1000.000000000000000 ) ; +#3059 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 0.3500000000000000300, -1.300000000000000000 ) ) ; +#3060 = PRESENTATION_STYLE_ASSIGNMENT (( #20424 ) ) ; +#3061 = CARTESIAN_POINT ( 'NONE', ( 4.524999999999999500, 1.630001745296169000, -4.000000000000000000 ) ) ; +#3062 = EDGE_CURVE ( 'NONE', #36956, #18079, #20529, .T. ) ; +#3063 = FACE_OUTER_BOUND ( 'NONE', #39400, .T. ) ; +#3064 = FILL_AREA_STYLE_COLOUR ( '', #29561 ) ; +#3065 = FILL_AREA_STYLE_COLOUR ( '', #34167 ) ; +#3066 = EDGE_CURVE ( 'NONE', #38714, #14593, #25900, .T. ) ; +#3067 = EDGE_LOOP ( 'NONE', ( #30453, #12480, #39367, #14528 ) ) ; +#3068 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000027500, -1.149999999999999900 ) ) ; +#3069 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.770989605758628000E-031, -9.637352644315598700E-016 ) ) ; +#3070 = SURFACE_SIDE_STYLE ('',( #30298 ) ) ; +#3071 = CIRCLE ( 'NONE', #29388, 0.3000000000000003800 ) ; +#3072 = FILL_AREA_STYLE ('',( #38907 ) ) ; +#3073 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #6039, #38079, #37939, #11938, #2539, #22143 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#3074 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3075 = ORIENTED_EDGE ( 'NONE', *, *, #9888, .T. ) ; +#3076 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6814 ) ) ; +#3077 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, 10.30000000000000100, -1.250000000000000000 ) ) ; +#3078 = VECTOR ( 'NONE', #21357, 1000.000000000000000 ) ; +#3079 = PRESENTATION_STYLE_ASSIGNMENT (( #28280 ) ) ; +#3080 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#3081 = LINE ( 'NONE', #39675, #41468 ) ; +#3082 = ORIENTED_EDGE ( 'NONE', *, *, #21668, .F. ) ; +#3083 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.499998254703820400, -6.699999999999994000 ) ) ; +#3084 = VERTEX_POINT ( 'NONE', #12265 ) ; +#3085 = EDGE_LOOP ( 'NONE', ( #28426, #36876, #32669, #7983 ) ) ; +#3086 = AXIS2_PLACEMENT_3D ( 'NONE', #11372, #8259, #35479 ) ; +#3087 = AXIS2_PLACEMENT_3D ( 'NONE', #23572, #21426, #24957 ) ; +#3089 = STYLED_ITEM ( 'NONE', ( #7569 ), #5737 ) ; +#3088 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38502 ) ) ; +#3090 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745296169300, -2.294459358809381100 ) ) ; +#3091 = EDGE_CURVE ( 'NONE', #3733, #1054, #3171, .T. ) ; +#3092 = EDGE_LOOP ( 'NONE', ( #4478, #6432, #17617 ) ) ; +#3093 = LINE ( 'NONE', #19895, #90 ) ; +#3094 = ORIENTED_EDGE ( 'NONE', *, *, #16719, .F. ) ; +#3095 = FILL_AREA_STYLE ('',( #12947 ) ) ; +#3096 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3097 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3099 = AXIS2_PLACEMENT_3D ( 'NONE', #39269, #19970, #30525 ) ; +#3098 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28266 ) ) ; +#3100 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.4300017452961685800, -7.150000000000001200 ) ) ; +#3101 = CIRCLE ( 'NONE', #23311, 1.200001745296169500 ) ; +#3102 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.949998254703823000, 0.0000000000000000000 ) ) ; +#3103 = SURFACE_STYLE_USAGE ( .BOTH. , #25433 ) ; +#3104 = VECTOR ( 'NONE', #41851, 1000.000000000000000 ) ; +#3105 = PRESENTATION_STYLE_ASSIGNMENT (( #40634 ) ) ; +#3106 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3107 = ORIENTED_EDGE ( 'NONE', *, *, #9962, .F. ) ; +#3108 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3110 = PLANE ( 'NONE', #22091 ) ; +#3109 = CARTESIAN_POINT ( 'NONE', ( -4.407583426132274200, -1.982581680836082500, -5.804658566907516400 ) ) ; +#3111 = VECTOR ( 'NONE', #11828, 1000.000000000000000 ) ; +#3112 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3113 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3114 = ORIENTED_EDGE ( 'NONE', *, *, #8302, .F. ) ; +#3115 = LINE ( 'NONE', #10994, #35454 ) ; +#3116 = SURFACE_SIDE_STYLE ('',( #16551 ) ) ; +#3117 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40114, 'distance_accuracy_value', 'NONE'); +#3118 = VECTOR ( 'NONE', #29818, 1000.000000000000000 ) ; +#3119 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3120 = ORIENTED_EDGE ( 'NONE', *, *, #12616, .T. ) ; +#3121 = EDGE_CURVE ( 'NONE', #28949, #41573, #36040, .T. ) ; +#3122 = VERTEX_POINT ( 'NONE', #15402 ) ; +#3124 = DIRECTION ( 'NONE', ( -2.224004456380521900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3123 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3125 = EDGE_CURVE ( 'NONE', #36459, #32704, #7192, .T. ) ; +#3126 = ORIENTED_EDGE ( 'NONE', *, *, #37996, .F. ) ; +#3127 = VERTEX_POINT ( 'NONE', #2299 ) ; +#3128 = VECTOR ( 'NONE', #15895, 1000.000000000000000 ) ; +#3129 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32909 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36721, #17240, #33340 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3130 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3131 = VECTOR ( 'NONE', #32747, 1000.000000000000000 ) ; +#3132 = AXIS2_PLACEMENT_3D ( 'NONE', #17711, #20971, #24045 ) ; +#3133 = PLANE ( 'NONE', #15401 ) ; +#3134 = SURFACE_STYLE_FILL_AREA ( #17632 ) ; +#3135 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.8320502943378437200, 0.5547001962252291500 ) ) ; +#3136 = ADVANCED_FACE ( 'NONE', ( #25440 ), #37705, .T. ) ; +#3137 = STYLED_ITEM ( 'NONE', ( #14529 ), #7358 ) ; +#3138 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25713 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20367, #16798, #13827 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3139 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3140 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703821100, -6.600000000000000500 ) ) ; +#3141 = ORIENTED_EDGE ( 'NONE', *, *, #21157, .F. ) ; +#3143 = EDGE_CURVE ( 'NONE', #31468, #27130, #38524, .T. ) ; +#3142 = AXIS2_PLACEMENT_3D ( 'NONE', #25256, #5877, #28461 ) ; +#3144 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10405, 'distance_accuracy_value', 'NONE'); +#3145 = CARTESIAN_POINT ( 'NONE', ( -4.700922750916311600, -1.300001745296164500, -6.625946193225248100 ) ) ; +#3146 = CARTESIAN_POINT ( 'NONE', ( 4.542777971927782800, -1.300001745296165900, -6.539400084828222300 ) ) ; +#3147 = VERTEX_POINT ( 'NONE', #22177 ) ; +#3148 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#3149 = VECTOR ( 'NONE', #694, 1000.000000000000000 ) ; +#3150 = PLANE ( 'NONE', #26810 ) ; +#3151 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33173 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6225, #35324, #38821 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3152 = STYLED_ITEM ( 'NONE', ( #30396 ), #40248 ) ; +#3153 = VECTOR ( 'NONE', #13235, 1000.000000000000000 ) ; +#3154 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3155 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3156 = AXIS2_PLACEMENT_3D ( 'NONE', #12126, #5233, #15279 ) ; +#3157 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#3158 = ORIENTED_EDGE ( 'NONE', *, *, #28409, .F. ) ; +#3159 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#3160 = CIRCLE ( 'NONE', #33321, 0.09999999999999982500 ) ; +#3161 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.139998254717351100, -5.049996877890552400 ) ) ; +#3162 = FILL_AREA_STYLE_COLOUR ( '', #35289 ) ; +#3163 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#3164 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3165 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#3166 = ORIENTED_EDGE ( 'NONE', *, *, #13688, .T. ) ; +#3167 = FACE_OUTER_BOUND ( 'NONE', #3183, .T. ) ; +#3168 = ORIENTED_EDGE ( 'NONE', *, *, #32609, .T. ) ; +#3169 = SURFACE_SIDE_STYLE ('',( #37197 ) ) ; +#3170 = CIRCLE ( 'NONE', #21867, 1.499999999999867700 ) ; +#3171 = LINE ( 'NONE', #12116, #20915 ) ; +#3172 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3173 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -2.710505431213766000E-016, -1.000000000000000000 ) ) ; +#3174 = LINE ( 'NONE', #30654, #22861 ) ; +#3175 = ADVANCED_FACE ( 'NONE', ( #3678 ), #22043, .F. ) ; +#3176 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.080001745296136600, -5.599999999999999600 ) ) ; +#3177 = VECTOR ( 'NONE', #31717, 1000.000000000000000 ) ; +#3178 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3179 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30352, 'distance_accuracy_value', 'NONE'); +#3180 = EDGE_CURVE ( 'NONE', #21057, #28269, #23876, .T. ) ; +#3181 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#3182 = EDGE_CURVE ( 'NONE', #605, #13604, #28486, .T. ) ; +#3183 = EDGE_LOOP ( 'NONE', ( #34551, #22119, #19784, #6682 ) ) ; +#3184 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3185 = EDGE_CURVE ( 'NONE', #11557, #6127, #177, .T. ) ; +#3186 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3187 = ORIENTED_EDGE ( 'NONE', *, *, #36166, .T. ) ; +#3188 = STYLED_ITEM ( 'NONE', ( #31235 ), #17199 ) ; +#3189 = ADVANCED_FACE ( 'NONE', ( #3648 ), #31768, .F. ) ; +#3190 = LINE ( 'NONE', #41496, #7220 ) ; +#3191 = FILL_AREA_STYLE_COLOUR ( '', #4134 ) ; +#3192 = VERTEX_POINT ( 'NONE', #2851 ) ; +#3193 = PRESENTATION_STYLE_ASSIGNMENT (( #5974 ) ) ; +#3194 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#3195 = VERTEX_POINT ( 'NONE', #38394 ) ; +#3196 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34307 ), #35672 ) ; +#3198 = VERTEX_POINT ( 'NONE', #5928 ) ; +#3197 = SURFACE_STYLE_FILL_AREA ( #2535 ) ; +#3199 = VERTEX_POINT ( 'NONE', #28525 ) ; +#3200 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33759 ) ) ; +#3201 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3202 = FILL_AREA_STYLE ('',( #3065 ) ) ; +#3203 = EDGE_CURVE ( 'NONE', #21754, #36264, #31450, .T. ) ; +#3204 = CARTESIAN_POINT ( 'NONE', ( 3.233743872640742800, 0.4843419060098344000, -1.814380149268752600 ) ) ; +#3205 = SURFACE_STYLE_FILL_AREA ( #28671 ) ; +#3206 = EDGE_LOOP ( 'NONE', ( #7457, #39443, #39330, #1829 ) ) ; +#3207 = SURFACE_STYLE_USAGE ( .BOTH. , #38357 ) ; +#3208 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.2800017452961689500, -5.150000000000000400 ) ) ; +#3209 = PRESENTATION_STYLE_ASSIGNMENT (( #15784 ) ) ; +#3210 = SURFACE_STYLE_FILL_AREA ( #38839 ) ; +#3212 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21924 ) ) ; +#3211 = AXIS2_PLACEMENT_3D ( 'NONE', #21925, #21784, #34330 ) ; +#3213 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.3000000000000000400, -0.2071998105385152200 ) ) ; +#3214 = PLANE ( 'NONE', #325 ) ; +#3215 = AXIS2_PLACEMENT_3D ( 'NONE', #40694, #34074, #11315 ) ; +#3216 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3217 = AXIS2_PLACEMENT_3D ( 'NONE', #2094, #7684, #17459 ) ; +#3218 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3219 = AXIS2_PLACEMENT_3D ( 'NONE', #39463, #19737, #23511 ) ; +#3220 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3221 = VERTEX_POINT ( 'NONE', #31902 ) ; +#3222 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3223 = LINE ( 'NONE', #24609, #36568 ) ; +#3224 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3225 = ADVANCED_FACE ( 'NONE', ( #36005 ), #24158, .F. ) ; +#3226 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3227 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#3228 = FILL_AREA_STYLE ('',( #22850 ) ) ; +#3229 = ORIENTED_EDGE ( 'NONE', *, *, #37625, .T. ) ; +#3230 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3231 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, -0.2800000000000028000, -0.2339555568811697600 ) ) ; +#3232 = ORIENTED_EDGE ( 'NONE', *, *, #18784, .T. ) ; +#3233 = ORIENTED_EDGE ( 'NONE', *, *, #17621, .T. ) ; +#3235 = EDGE_LOOP ( 'NONE', ( #3444, #21625, #22658, #14909 ) ) ; +#3234 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3236 = ORIENTED_EDGE ( 'NONE', *, *, #1990, .F. ) ; +#3237 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3238 = CIRCLE ( 'NONE', #37461, 0.1000000000000004800 ) ; +#3239 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7162, 'distance_accuracy_value', 'NONE'); +#3240 = CARTESIAN_POINT ( 'NONE', ( 2.945000000000000300, 0.5999999999999999800, -3.299999999999999800 ) ) ; +#3241 = SURFACE_SIDE_STYLE ('',( #11956 ) ) ; +#3242 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3243 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745278514100, -2.294459358809381100 ) ) ; +#3244 = FACE_OUTER_BOUND ( 'NONE', #17048, .T. ) ; +#3245 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003000, 0.6800017452961716300, -3.999999999999998200 ) ) ; +#3246 = EDGE_CURVE ( 'NONE', #30038, #8155, #17072, .T. ) ; +#3247 = PRESENTATION_STYLE_ASSIGNMENT (( #26488 ) ) ; +#3248 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3249 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.2800017452961688400, -5.250000000000000000 ) ) ; +#3250 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3251 = EDGE_CURVE ( 'NONE', #35461, #7164, #9535, .T. ) ; +#3252 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36266, 'distance_accuracy_value', 'NONE'); +#3253 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#3254 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5407 ) ) ; +#3255 = LINE ( 'NONE', #29765, #3758 ) ; +#3256 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.499998254703829500, -6.299999999999993600 ) ) ; +#3257 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #117 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12647, #22291, #2953 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3258 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3259 = VERTEX_POINT ( 'NONE', #438 ) ; +#3260 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24945 ), #31172 ) ; +#3261 = PRESENTATION_STYLE_ASSIGNMENT (( #12446 ) ) ; +#3262 = VERTEX_POINT ( 'NONE', #33027 ) ; +#3264 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19245 ) ) ; +#3263 = AXIS2_PLACEMENT_3D ( 'NONE', #23086, #963, #26346 ) ; +#3265 = VECTOR ( 'NONE', #35478, 1000.000000000000000 ) ; +#3266 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#3268 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39713 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23815, #23949, #14351 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3267 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32655 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7991, #4337, #4764 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3269 = ORIENTED_EDGE ( 'NONE', *, *, #29011, .T. ) ; +#3270 = AXIS2_PLACEMENT_3D ( 'NONE', #16246, #25987, #3659 ) ; +#3271 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3272 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3273 = DIRECTION ( 'NONE', ( -1.608784677951146400E-031, 1.355252715606881300E-016, 1.000000000000000000 ) ) ; +#3274 = CLOSED_SHELL ( 'NONE', ( #35810, #39112, #30272, #41325 ) ) ; +#3275 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3276 = CYLINDRICAL_SURFACE ( 'NONE', #35981, 0.3499999999999996400 ) ; +#3277 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.499998254703826200, -6.299999999999993600 ) ) ; +#3278 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3279 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296169800, 0.0000000000000000000 ) ) ; +#3280 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3281 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3282 = FACE_OUTER_BOUND ( 'NONE', #12000, .T. ) ; +#3283 = VERTEX_POINT ( 'NONE', #6738 ) ; +#3284 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3285 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.8400209439508702400 ) ) ; +#3286 = SURFACE_SIDE_STYLE ('',( #9117 ) ) ; +#3287 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000000200, -1.380001745296133300, -4.781671842700004200 ) ) ; +#3288 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#3289 = VERTEX_POINT ( 'NONE', #22863 ) ; +#3290 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -0.3500000000000000300, 0.1499999999999999700 ) ) ; +#3291 = VERTEX_POINT ( 'NONE', #29631 ) ; +#3292 = EDGE_CURVE ( 'NONE', #17010, #41040, #8451, .T. ) ; +#3293 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3294 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -500000.0000000000600, -2.294459358691027400 ) ) ; +#3295 = EDGE_LOOP ( 'NONE', ( #7177, #31635, #28717, #4491 ) ) ; +#3296 = EDGE_CURVE ( 'NONE', #19871, #16839, #3911, .T. ) ; +#3297 = LINE ( 'NONE', #31656, #8826 ) ; +#3298 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41065 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18350, #40921, #41341 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3299 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3300 = FACE_OUTER_BOUND ( 'NONE', #31962, .T. ) ; +#3301 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40918 ), #1187 ) ; +#3302 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37695, 'distance_accuracy_value', 'NONE'); +#3303 = ORIENTED_EDGE ( 'NONE', *, *, #32237, .T. ) ; +#3304 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 0.6800017452961697500, -1.650000000000000400 ) ) ; +#3305 = CYLINDRICAL_SURFACE ( 'NONE', #8176, 0.3600000000000078700 ) ; +#3306 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25206 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9802, #548, #32133 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3307 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.499998254703820400, -6.699999999999994000 ) ) ; +#3308 = VECTOR ( 'NONE', #14216, 1000.000000000000000 ) ; +#3309 = SURFACE_SIDE_STYLE ('',( #39462 ) ) ; +#3310 = ORIENTED_EDGE ( 'NONE', *, *, #34060, .F. ) ; +#3311 = AXIS2_PLACEMENT_3D ( 'NONE', #28183, #21720, #12197 ) ; +#3312 = SURFACE_STYLE_FILL_AREA ( #21110 ) ; +#3313 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25789 ), #1197 ) ; +#3314 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.1000000000000150100, -4.250000000000000000 ) ) ; +#3315 = PLANE ( 'NONE', #12014 ) ; +#3316 = STYLED_ITEM ( 'NONE', ( #34355 ), #30473 ) ; +#3317 = LINE ( 'NONE', #28385, #34168 ) ; +#3318 = VERTEX_POINT ( 'NONE', #592 ) ; +#3319 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3320 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3321 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12103, 'distance_accuracy_value', 'NONE'); +#3323 = EDGE_CURVE ( 'NONE', #29041, #10788, #32200, .T. ) ; +#3322 = STYLED_ITEM ( 'NONE', ( #17802 ), #35178 ) ; +#3324 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -2.031000000000000600, -1.994459358809380200 ) ) ; +#3325 = FILL_AREA_STYLE ('',( #16324 ) ) ; +#3326 = PLANE ( 'NONE', #34896 ) ; +#3328 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27399 ), #29298 ) ; +#3327 = AXIS2_PLACEMENT_3D ( 'NONE', #39611, #7552, #23672 ) ; +#3329 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3330 = DIRECTION ( 'NONE', ( 0.3746065948720311300, 0.0000000000000000000, -0.9271838539784770200 ) ) ; +#3331 = PLANE ( 'NONE', #36050 ) ; +#3332 = LINE ( 'NONE', #14309, #3798 ) ; +#3333 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#3334 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #2962, #25949, #6592, #19760, #14, #16070 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.001712069454505934500, 0.001808968039855264500, 0.001905866625204595500 ), + .UNSPECIFIED. ) ; +#3335 = ADVANCED_FACE ( 'NONE', ( #33235 ), #23141, .F. ) ; +#3336 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169000, -3.214459358809377500 ) ) ; +#3337 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.3300017452961679900, -6.224999999999999600 ) ) ; +#3338 = ORIENTED_EDGE ( 'NONE', *, *, #30455, .T. ) ; +#3339 = LINE ( 'NONE', #11945, #36697 ) ; +#3340 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3341 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3342 = VERTEX_POINT ( 'NONE', #20064 ) ; +#3343 = EDGE_LOOP ( 'NONE', ( #41502, #32907, #25995 ) ) ; +#3344 = ORIENTED_EDGE ( 'NONE', *, *, #28835, .T. ) ; +#3345 = SURFACE_STYLE_FILL_AREA ( #34691 ) ; +#3346 = SURFACE_STYLE_USAGE ( .BOTH. , #39063 ) ; +#3347 = VERTEX_POINT ( 'NONE', #3650 ) ; +#3348 = SURFACE_SIDE_STYLE ('',( #9073 ) ) ; +#3349 = ORIENTED_EDGE ( 'NONE', *, *, #17233, .F. ) ; +#3350 = EDGE_CURVE ( 'NONE', #29681, #40951, #41800, .T. ) ; +#3351 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3352 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3353 = EDGE_CURVE ( 'NONE', #22416, #7098, #9453, .T. ) ; +#3354 = PRESENTATION_STYLE_ASSIGNMENT (( #23806 ) ) ; +#3355 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#3356 = VECTOR ( 'NONE', #14873, 1000.000000000000000 ) ; +#3357 = CARTESIAN_POINT ( 'NONE', ( 3.395000000000000000, -0.1999999999999998700, -3.299999999999999800 ) ) ; +#3358 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#3359 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3360 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid43', #38800 ) ; +#3361 = FILL_AREA_STYLE ('',( #32458 ) ) ; +#3362 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.139998254717355100, -6.299996877890552400 ) ) ; +#3363 = ADVANCED_FACE ( 'NONE', ( #13521 ), #36156, .T. ) ; +#3364 = AXIS2_PLACEMENT_3D ( 'NONE', #24071, #9181, #32493 ) ; +#3365 = CIRCLE ( 'NONE', #15096, 0.2000000000000000900 ) ; +#3366 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33283 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33083, #39556, #20261 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3367 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3368 = ORIENTED_EDGE ( 'NONE', *, *, #32741, .F. ) ; +#3370 = EDGE_CURVE ( 'NONE', #27168, #16597, #11496, .T. ) ; +#3369 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34812 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33441, #40052, #14099 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3371 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3372 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 2.367138801244516300E-016, -1.000000000000000000 ) ) ; +#3373 = ORIENTED_EDGE ( 'NONE', *, *, #9205, .F. ) ; +#3374 = EDGE_LOOP ( 'NONE', ( #26793, #12559, #26337, #19322 ) ) ; +#3375 = VECTOR ( 'NONE', #3372, 1000.000000000000000 ) ; +#3376 = VERTEX_POINT ( 'NONE', #7728 ) ; +#3377 = SURFACE_STYLE_FILL_AREA ( #6312 ) ; +#3378 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3379 = ADVANCED_FACE ( 'NONE', ( #35271 ), #20677, .T. ) ; +#3380 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32394 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18525, #2587, #41100 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3381 = CARTESIAN_POINT ( 'NONE', ( 0.1500000000000000200, -1.499998254703829500, -6.299999999999993600 ) ) ; +#3382 = SURFACE_STYLE_FILL_AREA ( #14607 ) ; +#3383 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3931 ), #17776 ) ; +#3384 = PRESENTATION_STYLE_ASSIGNMENT (( #22998 ) ) ; +#3385 = SURFACE_STYLE_FILL_AREA ( #26352 ) ; +#3386 = SURFACE_STYLE_USAGE ( .BOTH. , #39099 ) ; +#3387 = ORIENTED_EDGE ( 'NONE', *, *, #30205, .T. ) ; +#3388 = VECTOR ( 'NONE', #27322, 1000.000000000000000 ) ; +#3389 = ORIENTED_EDGE ( 'NONE', *, *, #14686, .F. ) ; +#3390 = CYLINDRICAL_SURFACE ( 'NONE', #10578, 0.1000000000000002600 ) ; +#3391 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3392 = SURFACE_STYLE_FILL_AREA ( #693 ) ; +#3393 = PRESENTATION_STYLE_ASSIGNMENT (( #18821 ) ) ; +#3394 = ORIENTED_EDGE ( 'NONE', *, *, #41479, .F. ) ; +#3395 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3396 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30108, 'distance_accuracy_value', 'NONE'); +#3397 = SURFACE_STYLE_USAGE ( .BOTH. , #3950 ) ; +#3398 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3399 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3400 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3401 = DIRECTION ( 'NONE', ( -3.944304526105059000E-031, -1.000000000000000000, 2.367138801244521200E-016 ) ) ; +#3402 = SURFACE_STYLE_USAGE ( .BOTH. , #38699 ) ; +#3403 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3404 = CYLINDRICAL_SURFACE ( 'NONE', #27946, 0.1000000000000000500 ) ; +#3405 = SURFACE_STYLE_USAGE ( .BOTH. , #22768 ) ; +#3406 = EDGE_CURVE ( 'NONE', #21086, #13933, #41342, .T. ) ; +#3407 = VERTEX_POINT ( 'NONE', #36691 ) ; +#3408 = SURFACE_STYLE_FILL_AREA ( #14908 ) ; +#3409 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3411 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3410 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3412 = EDGE_CURVE ( 'NONE', #16022, #564, #36809, .T. ) ; +#3413 = ORIENTED_EDGE ( 'NONE', *, *, #27475, .T. ) ; +#3414 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3415 = FILL_AREA_STYLE ('',( #39130 ) ) ; +#3416 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -10.30000000000000100, -1.250000000000000000 ) ) ; +#3417 = ADVANCED_FACE ( 'NONE', ( #18626 ), #1154, .F. ) ; +#3418 = EDGE_CURVE ( 'NONE', #21881, #33459, #35803, .T. ) ; +#3419 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.730380236995679300, -0.8400000000000000800 ) ) ; +#3420 = ORIENTED_EDGE ( 'NONE', *, *, #11876, .F. ) ; +#3421 = PRESENTATION_STYLE_ASSIGNMENT (( #16101 ) ) ; +#3422 = ORIENTED_EDGE ( 'NONE', *, *, #18838, .T. ) ; +#3423 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5599 ) ) ; +#3424 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3425 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3426 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#3427 = SURFACE_STYLE_FILL_AREA ( #39211 ) ; +#3428 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#3429 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3430 = PRESENTATION_STYLE_ASSIGNMENT (( #10465 ) ) ; +#3431 = FACE_OUTER_BOUND ( 'NONE', #4436, .T. ) ; +#3432 = ORIENTED_EDGE ( 'NONE', *, *, #13441, .T. ) ; +#3433 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.3300017452961689900, -6.325000000000000200 ) ) ; +#3434 = FACE_BOUND ( 'NONE', #36321, .T. ) ; +#3435 = VERTEX_POINT ( 'NONE', #13951 ) ; +#3436 = AXIS2_PLACEMENT_3D ( 'NONE', #32615, #9988, #36023 ) ; +#3437 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 0.2999999999999999900, 0.6999999999999999600 ) ) ; +#3438 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#3439 = AXIS2_PLACEMENT_3D ( 'NONE', #10454, #7630, #23888 ) ; +#3440 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703821100, -6.800000000000001600 ) ) ; +#3441 = PLANE ( 'NONE', #35487 ) ; +#3443 = EDGE_CURVE ( 'NONE', #28073, #28469, #16581, .T. ) ; +#3442 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38872 ), #16434 ) ; +#3444 = ORIENTED_EDGE ( 'NONE', *, *, #17740, .F. ) ; +#3445 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521965300E-031 ) ) ; +#3447 = AXIS2_PLACEMENT_3D ( 'NONE', #38805, #19651, #19778 ) ; +#3446 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27270 ), #25908 ) ; +#3448 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3449 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #529 ) ) ; +#3450 = SURFACE_STYLE_USAGE ( .BOTH. , #16443 ) ; +#3451 = AXIS2_PLACEMENT_3D ( 'NONE', #3465, #28764, #3329 ) ; +#3452 = EDGE_LOOP ( 'NONE', ( #842, #38520, #22086, #26710 ) ) ; +#3453 = PRESENTATION_STYLE_ASSIGNMENT (( #21989 ) ) ; +#3454 = FILL_AREA_STYLE ('',( #29286 ) ) ; +#3455 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3456 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#3457 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 2.367138801244516800E-016, 1.000000000000000000 ) ) ; +#3458 = EDGE_LOOP ( 'NONE', ( #16291, #10218, #32122, #22159 ) ) ; +#3459 = PRESENTATION_STYLE_ASSIGNMENT (( #32273 ) ) ; +#3460 = ORIENTED_EDGE ( 'NONE', *, *, #38976, .T. ) ; +#3461 = VERTEX_POINT ( 'NONE', #20204 ) ; +#3462 = VERTEX_POINT ( 'NONE', #13668 ) ; +#3463 = LINE ( 'NONE', #39010, #12561 ) ; +#3464 = LINE ( 'NONE', #15219, #18127 ) ; +#3465 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#3466 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9017, 'distance_accuracy_value', 'NONE'); +#3467 = VECTOR ( 'NONE', #10106, 1000.000000000000000 ) ; +#3468 = CARTESIAN_POINT ( 'NONE', ( -0.1500000000000000200, -1.499998254703829500, -6.299999999999993600 ) ) ; +#3469 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.734723475976960100E-015, 0.0000000000000000000 ) ) ; +#3470 = FACE_OUTER_BOUND ( 'NONE', #34472, .T. ) ; +#3471 = ORIENTED_EDGE ( 'NONE', *, *, #17673, .T. ) ; +#3472 = FACE_OUTER_BOUND ( 'NONE', #1173, .T. ) ; +#3473 = ORIENTED_EDGE ( 'NONE', *, *, #73, .F. ) ; +#3474 = EDGE_LOOP ( 'NONE', ( #26043, #13242, #40832, #14305, #11309, #24094, #24518, #27955, #30690, #36580, #18135, #33362, #9379, #31156, #14859, #28602, #1210, #38495, #30278, #31634, #24484, #15619, #3422, #24481, #11392, #28114, #8343, #9533, #17012, #25213, #26243, #3914, #20743, #24454, #3075, #35453, #21623, #37039, #7333, #29674, #11439, #9575, #12407, #15419, #5706 ) ) ; +#3475 = FACE_OUTER_BOUND ( 'NONE', #38761, .T. ) ; +#3476 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000800, -0.3499999999999996400, -1.250000000000000000 ) ) ; +#3477 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#3478 = ADVANCED_FACE ( 'NONE', ( #23132 ), #35779, .F. ) ; +#3479 = FILL_AREA_STYLE ('',( #22835 ) ) ; +#3480 = ORIENTED_EDGE ( 'NONE', *, *, #10919, .T. ) ; +#3481 = FACE_OUTER_BOUND ( 'NONE', #25104, .T. ) ; +#3482 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3483 = EDGE_CURVE ( 'NONE', #23912, #39776, #27197, .T. ) ; +#3484 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3485 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3486 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2485 ), #15672 ) ; +#3487 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#3488 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#3489 = EDGE_CURVE ( 'NONE', #10056, #11037, #29693, .T. ) ; +#3490 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3491 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3492 = SURFACE_STYLE_FILL_AREA ( #34464 ) ; +#3493 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7561 ), #5663 ) ; +#3494 = FACE_OUTER_BOUND ( 'NONE', #38878, .T. ) ; +#3495 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.499998254703828600, -5.449999999999994000 ) ) ; +#3496 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, 1.349831704744453000E-014, -3.999999999999998200 ) ) ; +#3497 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3498 = AXIS2_PLACEMENT_3D ( 'NONE', #3337, #9673, #12501 ) ; +#3499 = VECTOR ( 'NONE', #40583, 1000.000000000000000 ) ; +#3500 = PLANE ( 'NONE', #30153 ) ; +#3501 = ORIENTED_EDGE ( 'NONE', *, *, #30210, .F. ) ; +#3503 = EDGE_CURVE ( 'NONE', #23074, #36028, #30593, .T. ) ; +#3502 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19485 ) ) ; +#3504 = FILL_AREA_STYLE_COLOUR ( '', #21390 ) ; +#3505 = SURFACE_SIDE_STYLE ('',( #7721 ) ) ; +#3506 = ORIENTED_EDGE ( 'NONE', *, *, #31533, .F. ) ; +#3507 = ORIENTED_EDGE ( 'NONE', *, *, #9147, .T. ) ; +#3508 = VECTOR ( 'NONE', #29748, 1000.000000000000000 ) ; +#3509 = PRESENTATION_STYLE_ASSIGNMENT (( #27109 ) ) ; +#3510 = AXIS2_PLACEMENT_3D ( 'NONE', #40781, #8152, #27662 ) ; +#3511 = FILL_AREA_STYLE_COLOUR ( '', #2272 ) ; +#3512 = LINE ( 'NONE', #7484, #36871 ) ; +#3513 = AXIS2_PLACEMENT_3D ( 'NONE', #17675, #7319, #10570 ) ; +#3514 = CARTESIAN_POINT ( 'NONE', ( -3.315857794870082900, 0.3498816609189517300, -1.622912009385738800 ) ) ; +#3515 = ORIENTED_EDGE ( 'NONE', *, *, #5839, .T. ) ; +#3516 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3517 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#3518 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3519 = EDGE_LOOP ( 'NONE', ( #34502, #1920, #40765, #4067 ) ) ; +#3520 = EDGE_LOOP ( 'NONE', ( #19493, #18448, #39263, #37924 ) ) ; +#3521 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20888 ) ) ; +#3522 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27233, 'distance_accuracy_value', 'NONE'); +#3523 = ORIENTED_EDGE ( 'NONE', *, *, #29468, .T. ) ; +#3524 = SURFACE_SIDE_STYLE ('',( #34678 ) ) ; +#3525 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3527 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3526 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.499998254703829500, -6.699999999999994000 ) ) ; +#3528 = PLANE ( 'NONE', #28255 ) ; +#3529 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3530 = SURFACE_STYLE_USAGE ( .BOTH. , #747 ) ; +#3531 = SURFACE_STYLE_USAGE ( .BOTH. , #329 ) ; +#3532 = PRESENTATION_STYLE_ASSIGNMENT (( #29884 ) ) ; +#3533 = ORIENTED_EDGE ( 'NONE', *, *, #28291, .F. ) ; +#3534 = CARTESIAN_POINT ( 'NONE', ( 3.340721027416471600, -0.2673789813097241500, -1.600000000000000800 ) ) ; +#3535 = CIRCLE ( 'NONE', #13001, 0.1000000000000002600 ) ; +#3536 = EDGE_CURVE ( 'NONE', #35821, #12368, #25657, .T. ) ; +#3537 = ORIENTED_EDGE ( 'NONE', *, *, #37327, .F. ) ; +#3538 = ORIENTED_EDGE ( 'NONE', *, *, #14747, .F. ) ; +#3539 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3540 = FILL_AREA_STYLE ('',( #26431 ) ) ; +#3541 = VERTEX_POINT ( 'NONE', #27642 ) ; +#3542 = ADVANCED_FACE ( 'NONE', ( #9963 ), #21454, .F. ) ; +#3543 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.355252715606881000E-016, -1.000000000000000000 ) ) ; +#3544 = EDGE_CURVE ( 'NONE', #9395, #16642, #41329, .T. ) ; +#3545 = STYLED_ITEM ( 'NONE', ( #23228 ), #23336 ) ; +#3546 = FILL_AREA_STYLE_COLOUR ( '', #29575 ) ; +#3547 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3548 = ORIENTED_EDGE ( 'NONE', *, *, #24345, .F. ) ; +#3549 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3550 = STYLED_ITEM ( 'NONE', ( #5076 ), #23122 ) ; +#3551 = ORIENTED_EDGE ( 'NONE', *, *, #12274, .T. ) ; +#3552 = EDGE_LOOP ( 'NONE', ( #1863, #8708, #26203, #24445 ) ) ; +#3553 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3554 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12749, 'distance_accuracy_value', 'NONE'); +#3555 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17378 ) ) ; +#3556 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3557 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3558 = FILL_AREA_STYLE ('',( #10177 ) ) ; +#3559 = ORIENTED_EDGE ( 'NONE', *, *, #20524, .T. ) ; +#3560 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39240 ), #36852 ) ; +#3561 = SURFACE_STYLE_USAGE ( .BOTH. , #9886 ) ; +#3562 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11860, 'distance_accuracy_value', 'NONE'); +#3563 = LINE ( 'NONE', #1156, #4590 ) ; +#3564 = CIRCLE ( 'NONE', #25972, 0.3600000000000078700 ) ; +#3566 = LINE ( 'NONE', #11796, #20792 ) ; +#3565 = FILL_AREA_STYLE_COLOUR ( '', #16122 ) ; +#3567 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3568 = FILL_AREA_STYLE_COLOUR ( '', #38591 ) ; +#3569 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3571 = EDGE_CURVE ( 'NONE', #11691, #40400, #14538, .T. ) ; +#3570 = STYLED_ITEM ( 'NONE', ( #18649 ), #34660 ) ; +#3572 = FILL_AREA_STYLE ('',( #656 ) ) ; +#3573 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3575 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36868 ), #7891 ) ; +#3574 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41201 ), #25270 ) ; +#3576 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3577 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3578 = ORIENTED_EDGE ( 'NONE', *, *, #32551, .T. ) ; +#3579 = PLANE ( 'NONE', #29412 ) ; +#3580 = ADVANCED_FACE ( 'NONE', ( #28202 ), #8263, .T. ) ; +#3581 = FILL_AREA_STYLE_COLOUR ( '', #15043 ) ; +#3582 = ORIENTED_EDGE ( 'NONE', *, *, #10392, .T. ) ; +#3583 = CARTESIAN_POINT ( 'NONE', ( -3.145000000000000000, -0.2999999999999999900, 0.6780706550913999700 ) ) ; +#3584 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#3585 = LINE ( 'NONE', #30236, #25848 ) ; +#3586 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -7.744301232039317900E-017 ) ) ; +#3587 = VERTEX_POINT ( 'NONE', #24714 ) ; +#3588 = ORIENTED_EDGE ( 'NONE', *, *, #3960, .T. ) ; +#3589 = VERTEX_POINT ( 'NONE', #41330 ) ; +#3590 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#3591 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3592 = ADVANCED_FACE ( 'NONE', ( #1942 ), #14510, .T. ) ; +#3593 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#3594 = EDGE_LOOP ( 'NONE', ( #28607, #13023, #22970, #39929 ) ) ; +#3595 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3596 = VECTOR ( 'NONE', #6845, 1000.000000000000000 ) ; +#3597 = FILL_AREA_STYLE_COLOUR ( '', #23623 ) ; +#3598 = VERTEX_POINT ( 'NONE', #15495 ) ; +#3599 = EDGE_CURVE ( 'NONE', #834, #22172, #30182, .T. ) ; +#3600 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.07499999999999998300, 0.03300000000000001500 ) ) ; +#3601 = EDGE_CURVE ( 'NONE', #38982, #31175, #23087, .T. ) ; +#3602 = PLANE ( 'NONE', #2806 ) ; +#3603 = PLANE ( 'NONE', #30159 ) ; +#3604 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.8500017452961660100, -4.875000000000000900 ) ) ; +#3605 = VECTOR ( 'NONE', #8079, 1000.000000000000100 ) ; +#3606 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3607 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3608 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #16984, #39555, #23472, #4118, #1068, #23617 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#3609 = FACE_OUTER_BOUND ( 'NONE', #39845, .T. ) ; +#3610 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23917 ) ) ; +#3611 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#3612 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#3613 = VERTEX_POINT ( 'NONE', #41047 ) ; +#3614 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -1.139998254717367300, -5.049996877890552400 ) ) ; +#3615 = CIRCLE ( 'NONE', #1372, 0.3000000000000007700 ) ; +#3616 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3617 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21536 ) ) ; +#3618 = SURFACE_STYLE_USAGE ( .BOTH. , #4034 ) ; +#3620 = CARTESIAN_POINT ( 'NONE', ( -2.949999999999999700, -1.499998254703820400, -6.699999999999994000 ) ) ; +#3619 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17987 ) ) ; +#3621 = EDGE_LOOP ( 'NONE', ( #28443, #26616, #29591, #33658 ) ) ; +#3622 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3624 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18281 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27655, #24134, #8279 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3623 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16064 ) ) ; +#3625 = CARTESIAN_POINT ( 'NONE', ( -3.374999999999998700, 0.5300017452961712800, -4.576794919243110500 ) ) ; +#3626 = LINE ( 'NONE', #23030, #1645 ) ; +#3627 = VECTOR ( 'NONE', #16277, 1000.000000000000000 ) ; +#3629 = EDGE_CURVE ( 'NONE', #2222, #6852, #16525, .T. ) ; +#3628 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.4300017452961689100, -5.075000000000000200 ) ) ; +#3630 = PRESENTATION_STYLE_ASSIGNMENT (( #31926 ) ) ; +#3631 = ORIENTED_EDGE ( 'NONE', *, *, #38361, .T. ) ; +#3632 = ADVANCED_FACE ( 'NONE', ( #37234 ), #15068, .T. ) ; +#3633 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3634 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3636 = AXIS2_PLACEMENT_3D ( 'NONE', #1396, #4747, #17620 ) ; +#3635 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25859 ), #12281 ) ; +#3637 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3638 = STYLED_ITEM ( 'NONE', ( #24542 ), #39366 ) ; +#3639 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3640 = ORIENTED_EDGE ( 'NONE', *, *, #32117, .T. ) ; +#3641 = CARTESIAN_POINT ( 'NONE', ( -0.1500000000000000200, -1.139998254717359900, -6.299996877890552400 ) ) ; +#3642 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3643 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3644 = ORIENTED_EDGE ( 'NONE', *, *, #12461, .T. ) ; +#3645 = LINE ( 'NONE', #40067, #34493 ) ; +#3646 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7708, 'distance_accuracy_value', 'NONE'); +#3647 = SURFACE_STYLE_FILL_AREA ( #18983 ) ; +#3648 = FACE_OUTER_BOUND ( 'NONE', #18661, .T. ) ; +#3649 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#3650 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822900, -6.600000000000000500 ) ) ; +#3651 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3652 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3653 = LINE ( 'NONE', #2250, #23882 ) ; +#3654 = PLANE ( 'NONE', #5632 ) ; +#3655 = VERTEX_POINT ( 'NONE', #37656 ) ; +#3656 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35496, 'distance_accuracy_value', 'NONE'); +#3657 = SURFACE_STYLE_USAGE ( .BOTH. , #3524 ) ; +#3658 = EDGE_CURVE ( 'NONE', #36028, #39630, #5906, .T. ) ; +#3659 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3660 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#3661 = VERTEX_POINT ( 'NONE', #2391 ) ; +#3662 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3663 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#3664 = EDGE_CURVE ( 'NONE', #10288, #17767, #30672, .T. ) ; +#3665 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3666 = ORIENTED_EDGE ( 'NONE', *, *, #39064, .F. ) ; +#3667 = ORIENTED_EDGE ( 'NONE', *, *, #40026, .F. ) ; +#3668 = VERTEX_POINT ( 'NONE', #5452 ) ; +#3669 = AXIS2_PLACEMENT_3D ( 'NONE', #18463, #37785, #5302 ) ; +#3670 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.799998254703820700, -6.600000000000000500 ) ) ; +#3671 = ORIENTED_EDGE ( 'NONE', *, *, #18670, .T. ) ; +#3672 = FACE_OUTER_BOUND ( 'NONE', #26655, .T. ) ; +#3673 = VERTEX_POINT ( 'NONE', #2812 ) ; +#3674 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27496 ), #14514 ) ; +#3675 = CIRCLE ( 'NONE', #5304, 0.4000000000000001900 ) ; +#3676 = CARTESIAN_POINT ( 'NONE', ( -2.995000000000000600, -0.3500000000000000300, -1.546446609410791200 ) ) ; +#3677 = STYLED_ITEM ( 'NONE', ( #26535 ), #11910 ) ; +#3678 = FACE_OUTER_BOUND ( 'NONE', #36837, .T. ) ; +#3679 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3680 = EDGE_CURVE ( 'NONE', #5440, #9130, #14504, .T. ) ; +#3681 = PLANE ( 'NONE', #26673 ) ; +#3682 = CARTESIAN_POINT ( 'NONE', ( 17.14169132166999900, 0.6000000000000000900, -3.250000000000000400 ) ) ; +#3683 = CARTESIAN_POINT ( 'NONE', ( -4.551493546202550500, -0.01999825470386194400, -6.639019554637394000 ) ) ; +#3684 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -0.9500017452961654300, -5.075000000000000200 ) ) ; +#3685 = PRESENTATION_STYLE_ASSIGNMENT (( #14786 ) ) ; +#3686 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41007, 'distance_accuracy_value', 'NONE'); +#3687 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3689 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26158 ), #15086 ) ; +#3688 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19694 ), #5863 ) ; +#3690 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39128 ) ) ; +#3691 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3692 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3693 = AXIS2_PLACEMENT_3D ( 'NONE', #38404, #19093, #12411 ) ; +#3694 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3695 = ORIENTED_EDGE ( 'NONE', *, *, #24540, .T. ) ; +#3696 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3697 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3698 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000800, -0.8400000000000000800 ) ) ; +#3699 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#3700 = ORIENTED_EDGE ( 'NONE', *, *, #39784, .T. ) ; +#3701 = FACE_OUTER_BOUND ( 'NONE', #40617, .T. ) ; +#3702 = VERTEX_POINT ( 'NONE', #15218 ) ; +#3703 = ORIENTED_EDGE ( 'NONE', *, *, #8494, .T. ) ; +#3704 = VERTEX_POINT ( 'NONE', #31306 ) ; +#3705 = VERTEX_POINT ( 'NONE', #37799 ) ; +#3706 = FILL_AREA_STYLE_COLOUR ( '', #14304 ) ; +#3707 = SURFACE_STYLE_FILL_AREA ( #21225 ) ; +#3708 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3709 = VECTOR ( 'NONE', #15815, 1000.000000000000000 ) ; +#3710 = ORIENTED_EDGE ( 'NONE', *, *, #15369, .F. ) ; +#3711 = CARTESIAN_POINT ( 'NONE', ( 3.218754194991534100, 0.2999999999999999900, -0.04698997146834622800 ) ) ; +#3712 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3713 = EDGE_CURVE ( 'NONE', #10955, #33744, #13465, .T. ) ; +#3714 = DIRECTION ( 'NONE', ( -9.268445570935432200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3715 = EDGE_CURVE ( 'NONE', #33335, #12505, #39773, .T. ) ; +#3716 = AXIS2_PLACEMENT_3D ( 'NONE', #9211, #28740, #9081 ) ; +#3717 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3718 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3719 = EDGE_CURVE ( 'NONE', #2626, #27855, #36754, .T. ) ; +#3720 = PLANE ( 'NONE', #3034 ) ; +#3721 = DIRECTION ( 'NONE', ( -3.944304526105059000E-031, -1.000000000000000000, 2.367138801244519300E-016 ) ) ; +#3722 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, -0.2498427124745999900 ) ) ; +#3723 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26205 ), #5913 ) ; +#3724 = SURFACE_STYLE_FILL_AREA ( #6952 ) ; +#3725 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, 0.4300017452961685800, -6.750000000000000000 ) ) ; +#3726 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3727 = EDGE_LOOP ( 'NONE', ( #29958, #8665 ) ) ; +#3730 = EDGE_CURVE ( 'NONE', #2511, #35937, #20626, .T. ) ; +#3729 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14041 ), #17576 ) ; +#3728 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#3731 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, -1.600000000000000100 ) ) ; +#3732 = CARTESIAN_POINT ( 'NONE', ( -4.570925237316274100, -0.4099999999999989200, -6.861124800398366500 ) ) ; +#3733 = VERTEX_POINT ( 'NONE', #18473 ) ; +#3734 = ORIENTED_EDGE ( 'NONE', *, *, #30997, .T. ) ; +#3735 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3736 = ORIENTED_EDGE ( 'NONE', *, *, #29651, .F. ) ; +#3737 = ORIENTED_EDGE ( 'NONE', *, *, #33811, .F. ) ; +#3738 = ADVANCED_FACE ( 'NONE', ( #10961 ), #35734, .F. ) ; +#3739 = AXIS2_PLACEMENT_3D ( 'NONE', #7581, #23421, #20639 ) ; +#3740 = FILL_AREA_STYLE ('',( #39604 ) ) ; +#3741 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11599 ) ) ; +#3742 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21048, 'distance_accuracy_value', 'NONE'); +#3743 = FACE_OUTER_BOUND ( 'NONE', #40852, .T. ) ; +#3744 = FILL_AREA_STYLE_COLOUR ( '', #35382 ) ; +#3745 = STYLED_ITEM ( 'NONE', ( #20914 ), #33654 ) ; +#3746 = SURFACE_STYLE_USAGE ( .BOTH. , #36524 ) ; +#3747 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3748 = AXIS2_PLACEMENT_3D ( 'NONE', #14468, #14206, #4151 ) ; +#3749 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3750 = SURFACE_STYLE_FILL_AREA ( #31946 ) ; +#3751 = ORIENTED_EDGE ( 'NONE', *, *, #16414, .T. ) ; +#3752 = FILL_AREA_STYLE_COLOUR ( '', #10556 ) ; +#3753 = PRESENTATION_STYLE_ASSIGNMENT (( #35766 ) ) ; +#3754 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1759, 'distance_accuracy_value', 'NONE'); +#3755 = FILL_AREA_STYLE ('',( #6996 ) ) ; +#3756 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, 0.07499999999999999700, 0.4305619708689000200 ) ) ; +#3757 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, -0.2799999999999974200, -1.149999999999999900 ) ) ; +#3758 = VECTOR ( 'NONE', #26534, 1000.000000000000000 ) ; +#3759 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3760 = ORIENTED_EDGE ( 'NONE', *, *, #5459, .F. ) ; +#3761 = PLANE ( 'NONE', #30103 ) ; +#3762 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3763 = ORIENTED_EDGE ( 'NONE', *, *, #36638, .T. ) ; +#3764 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3765 = SURFACE_SIDE_STYLE ('',( #22470 ) ) ; +#3766 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3767 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3769 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.380001745296134000, -6.031671842700004200 ) ) ; +#3768 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3770 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#3771 = ADVANCED_FACE ( 'NONE', ( #36240 ), #13005, .F. ) ; +#3772 = EDGE_CURVE ( 'NONE', #25581, #7340, #29110, .T. ) ; +#3773 = ORIENTED_EDGE ( 'NONE', *, *, #17391, .T. ) ; +#3774 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3775 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#3776 = EDGE_CURVE ( 'NONE', #37544, #5496, #25109, .T. ) ; +#3777 = FACE_OUTER_BOUND ( 'NONE', #15246, .T. ) ; +#3778 = VECTOR ( 'NONE', #28562, 1000.000000000000000 ) ; +#3779 = EDGE_LOOP ( 'NONE', ( #33871, #35694, #3671, #40204 ) ) ; +#3780 = LINE ( 'NONE', #36900, #9850 ) ; +#3781 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27094 ) ) ; +#3782 = ORIENTED_EDGE ( 'NONE', *, *, #10266, .T. ) ; +#3783 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31174, 'distance_accuracy_value', 'NONE'); +#3784 = LINE ( 'NONE', #13140, #15910 ) ; +#3785 = ADVANCED_FACE ( 'NONE', ( #17022 ), #24066, .T. ) ; +#3786 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -2.294459358809381100 ) ) ; +#3787 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3788 = ORIENTED_EDGE ( 'NONE', *, *, #3062, .F. ) ; +#3789 = VECTOR ( 'NONE', #94, 1000.000000000000000 ) ; +#3790 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10274 ) ) ; +#3791 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6005 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31935, #2763, #38159 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3793 = AXIS2_PLACEMENT_3D ( 'NONE', #10922, #24070, #39875 ) ; +#3792 = AXIS2_PLACEMENT_3D ( 'NONE', #40816, #31214, #2172 ) ; +#3794 = VERTEX_POINT ( 'NONE', #11713 ) ; +#3797 = EDGE_CURVE ( 'NONE', #240, #23498, #18533, .T. ) ; +#3796 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000000200, -1.499998254703827100, -5.449999999999994000 ) ) ; +#3795 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6767 ) ) ; +#3798 = VECTOR ( 'NONE', #4221, 1000.000000000000000 ) ; +#3799 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3800 = FILL_AREA_STYLE ('',( #19814 ) ) ; +#3801 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, -2.322941965694886000, -1.250000000000000000 ) ) ; +#3802 = PRESENTATION_STYLE_ASSIGNMENT (( #20799 ) ) ; +#3803 = AXIS2_PLACEMENT_3D ( 'NONE', #11955, #22031, #38233 ) ; +#3804 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3805 = LINE ( 'NONE', #38225, #2336 ) ; +#3806 = LINE ( 'NONE', #30618, #37186 ) ; +#3807 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -0.3590461068823618300 ) ) ; +#3808 = CARTESIAN_POINT ( 'NONE', ( -4.425000000000014000, -1.999998254703822000, -5.899999999999999500 ) ) ; +#3809 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3810 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3811 = EDGE_LOOP ( 'NONE', ( #28986, #40700, #9579, #22121 ) ) ; +#3812 = ORIENTED_EDGE ( 'NONE', *, *, #8963, .T. ) ; +#3813 = PRESENTATION_STYLE_ASSIGNMENT (( #28357 ) ) ; +#3814 = ORIENTED_EDGE ( 'NONE', *, *, #34815, .T. ) ; +#3815 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.949998254703823700, 0.0000000000000000000 ) ) ; +#3816 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3817 = SURFACE_STYLE_FILL_AREA ( #40484 ) ; +#3818 = LINE ( 'NONE', #41097, #29611 ) ; +#3819 = SURFACE_STYLE_USAGE ( .BOTH. , #225 ) ; +#3820 = EDGE_LOOP ( 'NONE', ( #5897, #20242, #34224, #21818 ) ) ; +#3821 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3822 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, 0.2800000000000027500, 0.0000000000000000000 ) ) ; +#3823 = SURFACE_STYLE_FILL_AREA ( #3982 ) ; +#3824 = ORIENTED_EDGE ( 'NONE', *, *, #5085, .T. ) ; +#3825 = ADVANCED_FACE ( 'NONE', ( #15483 ), #21233, .T. ) ; +#3826 = VECTOR ( 'NONE', #11183, 1000.000000000000000 ) ; +#3827 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -1.999999999999999600 ) ) ; +#3828 = LINE ( 'NONE', #9534, #21069 ) ; +#3829 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3830 = ORIENTED_EDGE ( 'NONE', *, *, #32132, .T. ) ; +#3831 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#3832 = SURFACE_STYLE_USAGE ( .BOTH. , #23192 ) ; +#3833 = LINE ( 'NONE', #17878, #27603 ) ; +#3834 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #34311, #17678, #14818, #37138 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.8047378541243649400, 0.8047378541243649400, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#3835 = CARTESIAN_POINT ( 'NONE', ( 3.245000000073000400, -0.2999999999999999900, -1.600000000000000100 ) ) ; +#3836 = EDGE_CURVE ( 'NONE', #31553, #15786, #23577, .T. ) ; +#3837 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3838 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3839 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3840 = CARTESIAN_POINT ( 'NONE', ( -3.100000000000000100, -1.499998254703840000, -5.449999999999994000 ) ) ; +#3841 = EDGE_CURVE ( 'NONE', #9770, #6388, #7383, .T. ) ; +#3842 = STYLED_ITEM ( 'NONE', ( #12913 ), #10805 ) ; +#3843 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.380001745296132400, -6.031671842700004200 ) ) ; +#3844 = LINE ( 'NONE', #27291, #23556 ) ; +#3845 = ORIENTED_EDGE ( 'NONE', *, *, #12638, .F. ) ; +#3846 = SURFACE_SIDE_STYLE ('',( #4381 ) ) ; +#3847 = CARTESIAN_POINT ( 'NONE', ( -2.995000000000000100, -0.3500000000000000300, -1.300000000000000300 ) ) ; +#3848 = AXIS2_PLACEMENT_3D ( 'NONE', #7936, #30565, #37330 ) ; +#3849 = FACE_OUTER_BOUND ( 'NONE', #29578, .T. ) ; +#3850 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.4300017452961689100, -4.975000000000000500 ) ) ; +#3851 = FACE_OUTER_BOUND ( 'NONE', #8637, .T. ) ; +#3852 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19876 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35650, #6676, #35800 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3853 = AXIS2_PLACEMENT_3D ( 'NONE', #30228, #16952, #39532 ) ; +#3854 = VERTEX_POINT ( 'NONE', #1742 ) ; +#3855 = AXIS2_PLACEMENT_3D ( 'NONE', #16793, #30062, #4350 ) ; +#3856 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, 0.2999999999999999900, 0.6780706550913999700 ) ) ; +#3857 = FILL_AREA_STYLE ('',( #29857 ) ) ; +#3858 = VERTEX_POINT ( 'NONE', #27278 ) ; +#3859 = FILL_AREA_STYLE ('',( #23640 ) ) ; +#3860 = VECTOR ( 'NONE', #1755, 1000.000000000000100 ) ; +#3862 = AXIS2_PLACEMENT_3D ( 'NONE', #17296, #4006, #26773 ) ; +#3861 = AXIS2_PLACEMENT_3D ( 'NONE', #1940, #27741, #8364 ) ; +#3863 = TOROIDAL_SURFACE ( 'NONE', #6832, 1.599999999999742300, 0.09999999999987406500 ) ; +#3864 = SURFACE_STYLE_USAGE ( .BOTH. , #33251 ) ; +#3865 = PLANE ( 'NONE', #40866 ) ; +#3866 = VECTOR ( 'NONE', #20148, 1000.000000000000000 ) ; +#3868 = EDGE_CURVE ( 'NONE', #11824, #29117, #902, .T. ) ; +#3867 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1752 ) ) ; +#3869 = ORIENTED_EDGE ( 'NONE', *, *, #17682, .F. ) ; +#3870 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#3871 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, 0.2999999999999999900, -1.399999999999999900 ) ) ; +#3872 = ORIENTED_EDGE ( 'NONE', *, *, #37034, .F. ) ; +#3873 = SURFACE_STYLE_FILL_AREA ( #12230 ) ; +#3874 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#3875 = AXIS2_PLACEMENT_3D ( 'NONE', #20128, #29698, #16706 ) ; +#3876 = LINE ( 'NONE', #10141, #19604 ) ; +#3877 = FILL_AREA_STYLE ('',( #39321 ) ) ; +#3878 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3879 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#3880 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#3881 = FILL_AREA_STYLE_COLOUR ( '', #14497 ) ; +#3882 = PLANE ( 'NONE', #38927 ) ; +#3883 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.380001745296126600, -6.031671842700004200 ) ) ; +#3884 = CARTESIAN_POINT ( 'NONE', ( 3.021268262062366100, -0.3430343677141071700, -1.293034367714107200 ) ) ; +#3885 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3886 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3887 = ORIENTED_EDGE ( 'NONE', *, *, #23403, .T. ) ; +#3888 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3889 = ORIENTED_EDGE ( 'NONE', *, *, #24504, .T. ) ; +#3890 = FILL_AREA_STYLE ('',( #32856 ) ) ; +#3891 = VERTEX_POINT ( 'NONE', #4816 ) ; +#3892 = SURFACE_STYLE_USAGE ( .BOTH. , #19896 ) ; +#3893 = EDGE_CURVE ( 'NONE', #3705, #40345, #41747, .T. ) ; +#3894 = EDGE_LOOP ( 'NONE', ( #30273, #35785, #28628, #34272 ) ) ; +#3895 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521965300E-031 ) ) ; +#3896 = ORIENTED_EDGE ( 'NONE', *, *, #2161, .F. ) ; +#3898 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -3.204459358809380800 ) ) ; +#3897 = PRESENTATION_STYLE_ASSIGNMENT (( #41240 ) ) ; +#3899 = VECTOR ( 'NONE', #40259, 1000.000000000000000 ) ; +#3900 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3901 = EDGE_CURVE ( 'NONE', #13605, #30655, #24625, .T. ) ; +#3902 = PRESENTATION_STYLE_ASSIGNMENT (( #4548 ) ) ; +#3903 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3904 = SURFACE_STYLE_USAGE ( .BOTH. , #29055 ) ; +#3905 = VECTOR ( 'NONE', #34121, 1000.000000000000000 ) ; +#3906 = ORIENTED_EDGE ( 'NONE', *, *, #18425, .F. ) ; +#3907 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#3908 = ORIENTED_EDGE ( 'NONE', *, *, #39159, .F. ) ; +#3909 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3910 = STYLED_ITEM ( 'NONE', ( #31975 ), #15796 ) ; +#3911 = CIRCLE ( 'NONE', #38884, 0.05000000000000012800 ) ; +#3912 = SURFACE_SIDE_STYLE ('',( #27527 ) ) ; +#3913 = CIRCLE ( 'NONE', #12755, 0.3600000000000078700 ) ; +#3914 = ORIENTED_EDGE ( 'NONE', *, *, #9334, .T. ) ; +#3915 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32048 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30708, #4596, #2509 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3916 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2425, 'distance_accuracy_value', 'NONE'); +#3917 = LINE ( 'NONE', #10640, #4420 ) ; +#3918 = AXIS2_PLACEMENT_3D ( 'NONE', #13016, #19566, #3288 ) ; +#3919 = AXIS2_PLACEMENT_3D ( 'NONE', #4214, #7454, #36175 ) ; +#3920 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, -2.031000000000001500, -6.849999999999999600 ) ) ; +#3921 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#3922 = EDGE_CURVE ( 'NONE', #25157, #35666, #10429, .T. ) ; +#3923 = EDGE_LOOP ( 'NONE', ( #32027, #30746, #18361, #14705 ) ) ; +#3924 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#3925 = EDGE_LOOP ( 'NONE', ( #16360, #22947, #17196, #5945, #3734, #39774 ) ) ; +#3926 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3928 = STYLED_ITEM ( 'NONE', ( #2879 ), #2362 ) ; +#3927 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9051 ) ) ; +#3929 = DIRECTION ( 'NONE', ( 1.734723475976959900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3930 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#3931 = STYLED_ITEM ( 'NONE', ( #15365 ), #39783 ) ; +#3932 = ORIENTED_EDGE ( 'NONE', *, *, #33271, .T. ) ; +#3933 = PRESENTATION_STYLE_ASSIGNMENT (( #19563 ) ) ; +#3934 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3935 = STYLED_ITEM ( 'NONE', ( #21434 ), #31982 ) ; +#3936 = LINE ( 'NONE', #39325, #21172 ) ; +#3937 = ORIENTED_EDGE ( 'NONE', *, *, #28897, .T. ) ; +#3938 = ORIENTED_EDGE ( 'NONE', *, *, #36714, .F. ) ; +#3939 = ORIENTED_EDGE ( 'NONE', *, *, #34504, .T. ) ; +#3940 = CYLINDRICAL_SURFACE ( 'NONE', #7948, 0.1000000000000009100 ) ; +#3941 = PRESENTATION_STYLE_ASSIGNMENT (( #19842 ) ) ; +#3942 = LINE ( 'NONE', #38612, #19146 ) ; +#3943 = LINE ( 'NONE', #18601, #22166 ) ; +#3944 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#3945 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3946 = ORIENTED_EDGE ( 'NONE', *, *, #39724, .F. ) ; +#3947 = ORIENTED_EDGE ( 'NONE', *, *, #10066, .F. ) ; +#3948 = ORIENTED_EDGE ( 'NONE', *, *, #33253, .T. ) ; +#3949 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, -10.30000000000000100, -1.250000000000000000 ) ) ; +#3950 = SURFACE_SIDE_STYLE ('',( #9314 ) ) ; +#3951 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3952 = ADVANCED_FACE ( 'NONE', ( #17520 ), #27591, .F. ) ; +#3953 = ORIENTED_EDGE ( 'NONE', *, *, #38852, .T. ) ; +#3954 = FILL_AREA_STYLE_COLOUR ( '', #18772 ) ; +#3955 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3956 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3957 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3958 = EDGE_CURVE ( 'NONE', #34143, #25434, #31116, .T. ) ; +#3959 = FILL_AREA_STYLE ('',( #39544 ) ) ; +#3960 = EDGE_CURVE ( 'NONE', #24439, #40967, #19512, .T. ) ; +#3961 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3962 = CARTESIAN_POINT ( 'NONE', ( -3.050336130087929500, 0.5903418392534531800, -1.920341839253453500 ) ) ; +#3963 = EDGE_CURVE ( 'NONE', #34911, #9246, #22532, .T. ) ; +#3964 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5340 ) ) ; +#3965 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3966 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#3967 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3968 = SURFACE_STYLE_USAGE ( .BOTH. , #7345 ) ; +#3969 = FILL_AREA_STYLE_COLOUR ( '', #21421 ) ; +#3970 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3971 = ORIENTED_EDGE ( 'NONE', *, *, #14491, .T. ) ; +#3972 = CIRCLE ( 'NONE', #5973, 0.3600000000000078700 ) ; +#3973 = SURFACE_SIDE_STYLE ('',( #27747 ) ) ; +#3974 = STYLED_ITEM ( 'NONE', ( #13229 ), #21388 ) ; +#3975 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.2300017452961684900, -6.325000000000000200 ) ) ; +#3976 = ORIENTED_EDGE ( 'NONE', *, *, #40938, .T. ) ; +#3977 = VERTEX_POINT ( 'NONE', #37706 ) ; +#3978 = LINE ( 'NONE', #33697, #20199 ) ; +#3979 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3980 = PRESENTATION_STYLE_ASSIGNMENT (( #25369 ) ) ; +#3981 = AXIS2_PLACEMENT_3D ( 'NONE', #5416, #8507, #38023 ) ; +#3982 = FILL_AREA_STYLE ('',( #1347 ) ) ; +#3983 = FILL_AREA_STYLE ('',( #39436 ) ) ; +#3984 = VECTOR ( 'NONE', #2392, 1000.000000000000000 ) ; +#3985 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #24781, #28131, #2460, #40687 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 5.560451059366164000, 6.283185307179586200 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956562200, 0.9569428977956562200, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#3986 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3987 = SURFACE_STYLE_FILL_AREA ( #38511 ) ; +#3990 = EDGE_CURVE ( 'NONE', #2353, #25801, #32114, .T. ) ; +#3989 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1875 ) ) ; +#3988 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#3991 = ORIENTED_EDGE ( 'NONE', *, *, #26410, .F. ) ; +#3992 = SURFACE_STYLE_FILL_AREA ( #22978 ) ; +#3994 = ADVANCED_FACE ( 'NONE', ( #7338 ), #34890, .T. ) ; +#3993 = EDGE_LOOP ( 'NONE', ( #34108, #27848, #2648 ) ) ; +#3995 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3996 = FILL_AREA_STYLE_COLOUR ( '', #29508 ) ; +#3998 = STYLED_ITEM ( 'NONE', ( #39778 ), #3379 ) ; +#3997 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23719 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8454, #8871, #15120 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3999 = AXIS2_PLACEMENT_3D ( 'NONE', #21396, #1767, #24791 ) ; +#4000 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4001 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41603 ) ) ; +#4002 = EDGE_LOOP ( 'NONE', ( #14635, #30410, #1366, #32939 ) ) ; +#4003 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13302 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20776, #16933, #40065 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4004 = LINE ( 'NONE', #23181, #39864 ) ; +#4005 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.3300017452961679900, -6.224999999999999600 ) ) ; +#4006 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4007 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4008 = ADVANCED_FACE ( 'NONE', ( #14460 ), #28598, .F. ) ; +#4009 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4010 = SURFACE_SIDE_STYLE ('',( #41021 ) ) ; +#4011 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 10.30000000000000100, -1.250000000000000000 ) ) ; +#4012 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4013 = SURFACE_STYLE_USAGE ( .BOTH. , #26489 ) ; +#4014 = VECTOR ( 'NONE', #784, 1000.000000000000000 ) ; +#4015 = FILL_AREA_STYLE ('',( #7253 ) ) ; +#4016 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#4017 = EDGE_LOOP ( 'NONE', ( #20407, #37274, #19579, #3349 ) ) ; +#4018 = DIRECTION ( 'NONE', ( -2.168404344971012800E-015, -2.710505431213766000E-016, -1.000000000000000000 ) ) ; +#4019 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4020 = VERTEX_POINT ( 'NONE', #40960 ) ; +#4021 = ORIENTED_EDGE ( 'NONE', *, *, #22662, .F. ) ; +#4022 = SURFACE_STYLE_FILL_AREA ( #12586 ) ; +#4023 = FILL_AREA_STYLE ('',( #29596 ) ) ; +#4024 = CYLINDRICAL_SURFACE ( 'NONE', #5996, 0.9999999999999991100 ) ; +#4025 = LINE ( 'NONE', #16181, #10579 ) ; +#4026 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4027 = VECTOR ( 'NONE', #13498, 1000.000000000000000 ) ; +#4028 = EDGE_LOOP ( 'NONE', ( #25742, #6494, #21387, #14692 ) ) ; +#4029 = PRESENTATION_STYLE_ASSIGNMENT (( #19073 ) ) ; +#4030 = ORIENTED_EDGE ( 'NONE', *, *, #10457, .F. ) ; +#4031 = VERTEX_POINT ( 'NONE', #15268 ) ; +#4032 = EDGE_CURVE ( 'NONE', #3084, #26547, #3818, .T. ) ; +#4033 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23075, 'distance_accuracy_value', 'NONE'); +#4034 = SURFACE_SIDE_STYLE ('',( #16441 ) ) ; +#4035 = FILL_AREA_STYLE ('',( #35979 ) ) ; +#4036 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#4037 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#4038 = EDGE_CURVE ( 'NONE', #7098, #26750, #23532, .T. ) ; +#4039 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4040 = ORIENTED_EDGE ( 'NONE', *, *, #18971, .T. ) ; +#4041 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000900, 1.167528855492236500, -4.400000000000001200 ) ) ; +#4042 = VERTEX_POINT ( 'NONE', #28252 ) ; +#4043 = AXIS2_PLACEMENT_3D ( 'NONE', #32652, #362, #10030 ) ; +#4044 = ADVANCED_FACE ( 'NONE', ( #36201 ), #31499, .F. ) ; +#4045 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#4046 = CONICAL_SURFACE ( 'NONE', #16807, 1.651303021499040300, 1.221730476395289900 ) ; +#4047 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#4048 = SURFACE_STYLE_FILL_AREA ( #7668 ) ; +#4049 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#4050 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4132 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36909, #8202, #20844 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4051 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -9.035070666963931600E-017 ) ) ; +#4052 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4053 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4055 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27104 ), #14103 ) ; +#4054 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4865 ), #586 ) ; +#4056 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#4057 = STYLED_ITEM ( 'NONE', ( #30638 ), #15110 ) ; +#4058 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#4059 = VERTEX_POINT ( 'NONE', #38660 ) ; +#4060 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33512 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2497, #25090, #5707 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4061 = FILL_AREA_STYLE_COLOUR ( '', #26684 ) ; +#4062 = FILL_AREA_STYLE_COLOUR ( '', #7605 ) ; +#4063 = CARTESIAN_POINT ( 'NONE', ( -3.337718385397965300, -0.07499999999999999700, 0.4680226303560859300 ) ) ; +#4064 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.779999999999868600, -0.2339555568811697600 ) ) ; +#4065 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10684, 'distance_accuracy_value', 'NONE'); +#4066 = AXIS2_PLACEMENT_3D ( 'NONE', #15811, #35032, #8887 ) ; +#4067 = ORIENTED_EDGE ( 'NONE', *, *, #19602, .F. ) ; +#4068 = LINE ( 'NONE', #15720, #5789 ) ; +#4069 = ORIENTED_EDGE ( 'NONE', *, *, #9607, .F. ) ; +#4070 = LINE ( 'NONE', #14612, #26832 ) ; +#4071 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -0.9500017452961654300, -5.575000000000001100 ) ) ; +#4072 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4073 = PRESENTATION_STYLE_ASSIGNMENT (( #7894 ) ) ; +#4074 = FACE_OUTER_BOUND ( 'NONE', #122, .T. ) ; +#4075 = VERTEX_POINT ( 'NONE', #2852 ) ; +#4076 = ORIENTED_EDGE ( 'NONE', *, *, #31325, .F. ) ; +#4077 = EDGE_LOOP ( 'NONE', ( #12110, #6708, #31039, #17717 ) ) ; +#4078 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4079 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4080 = PLANE ( 'NONE', #41474 ) ; +#4081 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21876, 'distance_accuracy_value', 'NONE'); +#4082 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4083 = PLANE ( 'NONE', #10974 ) ; +#4084 = VERTEX_POINT ( 'NONE', #25444 ) ; +#4085 = FACE_OUTER_BOUND ( 'NONE', #4348, .T. ) ; +#4086 = ORIENTED_EDGE ( 'NONE', *, *, #14991, .F. ) ; +#4087 = LINE ( 'NONE', #1543, #41484 ) ; +#4088 = SURFACE_STYLE_FILL_AREA ( #37967 ) ; +#4089 = PRESENTATION_STYLE_ASSIGNMENT (( #17117 ) ) ; +#4090 = PLANE ( 'NONE', #23684 ) ; +#4091 = EDGE_CURVE ( 'NONE', #24307, #9503, #17961, .T. ) ; +#4092 = SURFACE_STYLE_FILL_AREA ( #17732 ) ; +#4093 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703821100, -5.899999999999999500 ) ) ; +#4094 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4095 = EDGE_CURVE ( 'NONE', #1848, #38777, #25538, .T. ) ; +#4096 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35235 ), #6273 ) ; +#4097 = ORIENTED_EDGE ( 'NONE', *, *, #35881, .F. ) ; +#4098 = CARTESIAN_POINT ( 'NONE', ( -4.700922750916311600, -0.1199982547038624300, -6.625946193225244600 ) ) ; +#4099 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4100 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#4101 = SURFACE_SIDE_STYLE ('',( #7761 ) ) ; +#4102 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#4103 = ORIENTED_EDGE ( 'NONE', *, *, #3658, .F. ) ; +#4104 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4105 = CIRCLE ( 'NONE', #22039, 0.09999999999999999200 ) ; +#4106 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.499998254703822900, -6.699999999999994000 ) ) ; +#4107 = PRESENTATION_STYLE_ASSIGNMENT (( #33207 ) ) ; +#4108 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#4109 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 0.0000000000000000000 ) ) ; +#4110 = EDGE_LOOP ( 'NONE', ( #16963, #16672, #2151, #18932 ) ) ; +#4111 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30887, 'distance_accuracy_value', 'NONE'); +#4112 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.845797985667148500, -0.3279248189596167300 ) ) ; +#4113 = ORIENTED_EDGE ( 'NONE', *, *, #1849, .F. ) ; +#4114 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24039 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6730, #29332, #9965 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4117 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29544 ), #31716 ) ; +#4116 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#4115 = AXIS2_PLACEMENT_3D ( 'NONE', #34199, #14841, #37435 ) ; +#4118 = CARTESIAN_POINT ( 'NONE', ( -3.048825363047789100, 0.2416666666666655000, 1.088792722454407200 ) ) ; +#4119 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#4120 = EDGE_CURVE ( 'NONE', #35138, #23580, #31203, .T. ) ; +#4121 = EDGE_LOOP ( 'NONE', ( #17450, #12869, #31622, #37341 ) ) ; +#4122 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.279999999999999100, -3.299999999999999800 ) ) ; +#4123 = PRESENTATION_STYLE_ASSIGNMENT (( #28895 ) ) ; +#4124 = LINE ( 'NONE', #8439, #21840 ) ; +#4125 = ORIENTED_EDGE ( 'NONE', *, *, #27167, .T. ) ; +#4126 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4128 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41725 ) ) ; +#4127 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27088 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18171, #8527, #21435 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4129 = CARTESIAN_POINT ( 'NONE', ( -4.454959014219316100, -0.01961921875636193900, -7.500000000000001800 ) ) ; +#4130 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#4131 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.07499999999999998300, 0.6780706550913999700 ) ) ; +#4132 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36909, 'distance_accuracy_value', 'NONE'); +#4133 = FILL_AREA_STYLE ('',( #39576 ) ) ; +#4134 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#4135 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4136 = ORIENTED_EDGE ( 'NONE', *, *, #19741, .F. ) ; +#4137 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4138 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4139 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4140 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4141 = VERTEX_POINT ( 'NONE', #28799 ) ; +#4142 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.499998254703820400, -6.699999999999994000 ) ) ; +#4143 = PRESENTATION_STYLE_ASSIGNMENT (( #6743 ) ) ; +#4144 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4145 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#4146 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4147 = VERTEX_POINT ( 'NONE', #9282 ) ; +#4148 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4149 = EDGE_CURVE ( 'NONE', #17394, #13754, #403, .T. ) ; +#4150 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#4151 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4152 = EDGE_CURVE ( 'NONE', #37949, #21897, #1331, .T. ) ; +#4153 = CARTESIAN_POINT ( 'NONE', ( -4.669005014832223700, -1.009999999999998500, -6.261124800398365900 ) ) ; +#4154 = CARTESIAN_POINT ( 'NONE', ( -4.070001745296171900, 0.2800000000000025200, -4.400000000000000400 ) ) ; +#4155 = CARTESIAN_POINT ( 'NONE', ( -4.518432039200718900, -0.4099999999999987500, -6.261124800398365900 ) ) ; +#4156 = VERTEX_POINT ( 'NONE', #19225 ) ; +#4157 = FACE_OUTER_BOUND ( 'NONE', #16670, .T. ) ; +#4158 = LINE ( 'NONE', #7316, #20380 ) ; +#4159 = LINE ( 'NONE', #20057, #5715 ) ; +#4160 = PRESENTATION_STYLE_ASSIGNMENT (( #36035 ) ) ; +#4161 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28020, 'distance_accuracy_value', 'NONE'); +#4162 = ADVANCED_FACE ( 'NONE', ( #810 ), #40661, .T. ) ; +#4163 = AXIS2_PLACEMENT_3D ( 'NONE', #20089, #10440, #23171 ) ; +#4165 = PRESENTATION_STYLE_ASSIGNMENT (( #5404 ) ) ; +#4164 = FILL_AREA_STYLE_COLOUR ( '', #13672 ) ; +#4167 = SURFACE_STYLE_FILL_AREA ( #24611 ) ; +#4166 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#4168 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4169 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4170 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19364 ) ) ; +#4171 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4172 = VECTOR ( 'NONE', #20469, 1000.000000000000100 ) ; +#4173 = STYLED_ITEM ( 'NONE', ( #18214 ), #6597 ) ; +#4174 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4175 = ORIENTED_EDGE ( 'NONE', *, *, #19068, .F. ) ; +#4177 = EDGE_CURVE ( 'NONE', #11480, #28472, #17479, .T. ) ; +#4176 = AXIS2_PLACEMENT_3D ( 'NONE', #26969, #17352, #14246 ) ; +#4178 = SURFACE_STYLE_USAGE ( .BOTH. , #17339 ) ; +#4179 = SURFACE_STYLE_USAGE ( .BOTH. , #27348 ) ; +#4180 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.499998254703822900, -6.699999999999994000 ) ) ; +#4181 = VERTEX_POINT ( 'NONE', #9576 ) ; +#4183 = AXIS2_PLACEMENT_3D ( 'NONE', #41389, #41506, #25856 ) ; +#4182 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7631 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #336, #31637, #34901 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4184 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.710505431213765500E-016, 1.000000000000000000 ) ) ; +#4185 = AXIS2_PLACEMENT_3D ( 'NONE', #30405, #24049, #17851 ) ; +#4186 = ORIENTED_EDGE ( 'NONE', *, *, #21831, .F. ) ; +#4187 = FACE_OUTER_BOUND ( 'NONE', #35932, .T. ) ; +#4188 = CARTESIAN_POINT ( 'NONE', ( -3.315809924354953700, -0.3499999999999811000, -1.680000000000000400 ) ) ; +#4189 = VERTEX_POINT ( 'NONE', #16096 ) ; +#4190 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4192 = SURFACE_STYLE_FILL_AREA ( #34125 ) ; +#4191 = VECTOR ( 'NONE', #38217, 1000.000000000000000 ) ; +#4193 = FACE_OUTER_BOUND ( 'NONE', #20233, .T. ) ; +#4194 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40366, 'distance_accuracy_value', 'NONE'); +#4195 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#4196 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.880000000000129800, -0.5000000000000879300 ) ) ; +#4197 = CARTESIAN_POINT ( 'NONE', ( 2.949999999999999700, -1.380001745296126600, -6.699999999999994000 ) ) ; +#4198 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4199 = EDGE_LOOP ( 'NONE', ( #2461, #28305, #24332, #41048 ) ) ; +#4200 = ADVANCED_FACE ( 'NONE', ( #11362 ), #32459, .F. ) ; +#4201 = PRESENTATION_STYLE_ASSIGNMENT (( #31631 ) ) ; +#4202 = LINE ( 'NONE', #7341, #16339 ) ; +#4203 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -5.075000000000000200 ) ) ; +#4204 = CYLINDRICAL_SURFACE ( 'NONE', #21293, 0.1000000000000002600 ) ; +#4205 = EDGE_CURVE ( 'NONE', #21453, #36101, #39650, .T. ) ; +#4206 = LINE ( 'NONE', #1415, #21444 ) ; +#4207 = FILL_AREA_STYLE_COLOUR ( '', #37278 ) ; +#4208 = CARTESIAN_POINT ( 'NONE', ( 3.841919123051637600, 0.6255038504094642100, -4.550037912683802900 ) ) ; +#4209 = VECTOR ( 'NONE', #35569, 1000.000000000000000 ) ; +#4210 = FILL_AREA_STYLE ('',( #33180 ) ) ; +#4211 = ADVANCED_FACE ( 'NONE', ( #3777 ), #26400, .T. ) ; +#4212 = DIRECTION ( 'NONE', ( 4.840188270024573500E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4213 = EDGE_CURVE ( 'NONE', #14466, #38583, #22022, .T. ) ; +#4214 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -2.322941965694886000, 0.3499999999999999800 ) ) ; +#4215 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4216 = EDGE_CURVE ( 'NONE', #14035, #15139, #5827, .T. ) ; +#4217 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4218 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24128 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6054, #28225, #2562 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4219 = ORIENTED_EDGE ( 'NONE', *, *, #40116, .T. ) ; +#4220 = CONICAL_SURFACE ( 'NONE', #3219, 1.493004880385252500, 0.9597148367210011100 ) ; +#4221 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4222 = PRESENTATION_STYLE_ASSIGNMENT (( #3103 ) ) ; +#4223 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.837630800822890800E-016, -1.000000000000000000 ) ) ; +#4224 = ORIENTED_EDGE ( 'NONE', *, *, #40459, .T. ) ; +#4225 = ORIENTED_EDGE ( 'NONE', *, *, #37010, .F. ) ; +#4226 = FILL_AREA_STYLE_COLOUR ( '', #32988 ) ; +#4227 = VERTEX_POINT ( 'NONE', #3517 ) ; +#4228 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#4229 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -3.299999999999999800 ) ) ; +#4230 = ORIENTED_EDGE ( 'NONE', *, *, #29513, .F. ) ; +#4231 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32425 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37538, #12235, #11819 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4232 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.380001745296141500, -5.449999999999994000 ) ) ; +#4234 = EDGE_CURVE ( 'NONE', #19679, #28001, #19999, .T. ) ; +#4233 = AXIS2_PLACEMENT_3D ( 'NONE', #11418, #11274, #14409 ) ; +#4235 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4236 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4237 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4238 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.4300017452961689100, -6.424999999999999800 ) ) ; +#4239 = VECTOR ( 'NONE', #14992, 1000.000000000000000 ) ; +#4240 = DIRECTION ( 'NONE', ( 0.9396926207859068700, 0.3420201433256725400, -5.691343398792006000E-031 ) ) ; +#4241 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17515 ), #23184 ) ; +#4242 = VECTOR ( 'NONE', #38478, 1000.000000000000000 ) ; +#4243 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2136 ) ) ; +#4244 = LINE ( 'NONE', #33653, #15370 ) ; +#4245 = FILL_AREA_STYLE ('',( #27016 ) ) ; +#4246 = SURFACE_STYLE_USAGE ( .BOTH. , #39546 ) ; +#4247 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2140 ) ) ; +#4248 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, 0.2000000000000000100, 12.42614000000000000 ) ) ; +#4249 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4250 = ADVANCED_FACE ( 'NONE', ( #23008 ), #19780, .F. ) ; +#4251 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4253 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28879 ) ) ; +#4252 = LINE ( 'NONE', #5927, #7781 ) ; +#4254 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4255 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4256 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4257 = ORIENTED_EDGE ( 'NONE', *, *, #30516, .F. ) ; +#4258 = SURFACE_SIDE_STYLE ('',( #35044 ) ) ; +#4259 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#4260 = FILL_AREA_STYLE_COLOUR ( '', #7499 ) ; +#4261 = VECTOR ( 'NONE', #20679, 1000.000000000000000 ) ; +#4262 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4263 = SURFACE_SIDE_STYLE ('',( #2939 ) ) ; +#4264 = ORIENTED_EDGE ( 'NONE', *, *, #37934, .T. ) ; +#4265 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4266 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.4300017452961686900, -4.750000000000000000 ) ) ; +#4267 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4268 = CARTESIAN_POINT ( 'NONE', ( -3.039616728018147600, -0.3236744236933970500, -1.273674423693397000 ) ) ; +#4269 = ORIENTED_EDGE ( 'NONE', *, *, #26323, .F. ) ; +#4270 = FILL_AREA_STYLE ('',( #7514 ) ) ; +#4272 = LINE ( 'NONE', #37591, #37629 ) ; +#4271 = LINE ( 'NONE', #3966, #29515 ) ; +#4273 = VERTEX_POINT ( 'NONE', #6874 ) ; +#4274 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21264, 'distance_accuracy_value', 'NONE'); +#4275 = EDGE_CURVE ( 'NONE', #10015, #9767, #27504, .T. ) ; +#4276 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 9.035070666963931600E-017, -1.000000000000000000 ) ) ; +#4277 = SURFACE_STYLE_FILL_AREA ( #25329 ) ; +#4278 = EDGE_CURVE ( 'NONE', #31509, #18526, #5290, .T. ) ; +#4279 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4280 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#4281 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31620 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39312, #10645, #7107 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4282 = ORIENTED_EDGE ( 'NONE', *, *, #41227, .F. ) ; +#4283 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4284 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.3300017452961689900, -6.424999999999999800 ) ) ; +#4285 = EDGE_CURVE ( 'NONE', #23029, #22252, #35277, .T. ) ; +#4286 = SURFACE_STYLE_FILL_AREA ( #32505 ) ; +#4287 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5514, 'distance_accuracy_value', 'NONE'); +#4288 = FILL_AREA_STYLE_COLOUR ( '', #6932 ) ; +#4289 = SURFACE_STYLE_USAGE ( .BOTH. , #1509 ) ; +#4290 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19478 ) ) ; +#4291 = AXIS2_PLACEMENT_3D ( 'NONE', #34013, #40210, #4912 ) ; +#4292 = FILL_AREA_STYLE_COLOUR ( '', #24478 ) ; +#4293 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -4.775000000000000400 ) ) ; +#4294 = ORIENTED_EDGE ( 'NONE', *, *, #4723, .T. ) ; +#4297 = EDGE_CURVE ( 'NONE', #28936, #27120, #17441, .T. ) ; +#4296 = AXIS2_PLACEMENT_3D ( 'NONE', #25153, #2274, #12240 ) ; +#4295 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#4298 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4299 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4300 = EDGE_LOOP ( 'NONE', ( #78, #11438, #6382, #33222 ) ) ; +#4301 = EDGE_LOOP ( 'NONE', ( #6691, #15284, #25732, #26843 ) ) ; +#4303 = STYLED_ITEM ( 'NONE', ( #1291 ), #4375 ) ; +#4302 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2195 ), #6481 ) ; +#4304 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4305 = VECTOR ( 'NONE', #19207, 1000.000000000000000 ) ; +#4306 = AXIS2_PLACEMENT_3D ( 'NONE', #23581, #27132, #7745 ) ; +#4307 = PRESENTATION_STYLE_ASSIGNMENT (( #37845 ) ) ; +#4308 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4309 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1639 ) ) ; +#4310 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -1.049979056049130000 ) ) ; +#4311 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.499998254703820600, -5.449999999999994000 ) ) ; +#4312 = ORIENTED_EDGE ( 'NONE', *, *, #21651, .F. ) ; +#4314 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4878 ) ) ; +#4313 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4315 = ORIENTED_EDGE ( 'NONE', *, *, #2811, .T. ) ; +#4316 = VERTEX_POINT ( 'NONE', #36693 ) ; +#4317 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36477, 'distance_accuracy_value', 'NONE'); +#4318 = FILL_AREA_STYLE_COLOUR ( '', #8027 ) ; +#4319 = SURFACE_STYLE_FILL_AREA ( #37206 ) ; +#4320 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4321 = CARTESIAN_POINT ( 'NONE', ( 3.058010858782313600, -0.07499999999999998300, -0.1678751304874323800 ) ) ; +#4322 = CLOSED_SHELL ( 'NONE', ( #35344, #16508, #4517, #16144, #31192, #12231 ) ) ; +#4323 = FILL_AREA_STYLE_COLOUR ( '', #26297 ) ; +#4324 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36219, 'distance_accuracy_value', 'NONE'); +#4325 = CARTESIAN_POINT ( 'NONE', ( -1.486602540378444200, 1.480001745296169600, -1.700000000000001500 ) ) ; +#4326 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4327 = LINE ( 'NONE', #40423, #37201 ) ; +#4328 = PRESENTATION_STYLE_ASSIGNMENT (( #24366 ) ) ; +#4329 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4330 = VERTEX_POINT ( 'NONE', #40195 ) ; +#4331 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4332 = FILL_AREA_STYLE ('',( #19770 ) ) ; +#4333 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4334 = PLANE ( 'NONE', #4176 ) ; +#4335 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4336 = SURFACE_STYLE_USAGE ( .BOTH. , #17078 ) ; +#4337 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4338 = PLANE ( 'NONE', #11893 ) ; +#4339 = EDGE_CURVE ( 'NONE', #11635, #15788, #38631, .T. ) ; +#4340 = EDGE_CURVE ( 'NONE', #4147, #40655, #9279, .T. ) ; +#4341 = STYLED_ITEM ( 'NONE', ( #27794 ), #23538 ) ; +#4342 = ORIENTED_EDGE ( 'NONE', *, *, #27810, .T. ) ; +#4343 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17921 ), #17373 ) ; +#4344 = VERTEX_POINT ( 'NONE', #10970 ) ; +#4345 = SURFACE_SIDE_STYLE ('',( #6982 ) ) ; +#4347 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4346 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4348 = EDGE_LOOP ( 'NONE', ( #17614, #23730, #19761, #20163 ) ) ; +#4349 = ORIENTED_EDGE ( 'NONE', *, *, #27482, .F. ) ; +#4350 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.293877011362424000E-016, 0.0000000000000000000 ) ) ; +#4351 = FACE_OUTER_BOUND ( 'NONE', #20405, .T. ) ; +#4352 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.2999999999999999900, -1.399999999999999900 ) ) ; +#4353 = FILL_AREA_STYLE ('',( #23441 ) ) ; +#4354 = LINE ( 'NONE', #9124, #11918 ) ; +#4355 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#4356 = ORIENTED_EDGE ( 'NONE', *, *, #27368, .T. ) ; +#4357 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18635 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26732, #23598, #11149 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4358 = VERTEX_POINT ( 'NONE', #17213 ) ; +#4359 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2244 ), #8680 ) ; +#4360 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4361 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.307718258760844200E-015, -1.000000000000000000 ) ) ; +#4363 = STYLED_ITEM ( 'NONE', ( #12261 ), #5004 ) ; +#4362 = AXIS2_PLACEMENT_3D ( 'NONE', #24501, #27734, #21402 ) ; +#4364 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4365 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4368 = EDGE_CURVE ( 'NONE', #29866, #22856, #18940, .T. ) ; +#4367 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -10.30000000000000100, -1.250000000000000000 ) ) ; +#4366 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2251 ), #36070 ) ; +#4369 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4370 = ORIENTED_EDGE ( 'NONE', *, *, #37087, .F. ) ; +#4371 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4372 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4373 = FILL_AREA_STYLE ('',( #36456 ) ) ; +#4374 = SURFACE_STYLE_FILL_AREA ( #27306 ) ; +#4375 = ADVANCED_FACE ( 'NONE', ( #5788 ), #11244, .T. ) ; +#4377 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7080 ), #8694 ) ; +#4376 = STYLED_ITEM ( 'NONE', ( #19080 ), #25197 ) ; +#4378 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4379 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, -0.07499999999999999700, 0.01000000000000000000 ) ) ; +#4380 = DIRECTION ( 'NONE', ( 6.776263578034402700E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4381 = SURFACE_STYLE_FILL_AREA ( #4133 ) ; +#4382 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4383 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#4385 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#4384 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4386 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27799, 'distance_accuracy_value', 'NONE'); +#4387 = EDGE_LOOP ( 'NONE', ( #4136, #34785, #34353, #15942 ) ) ; +#4388 = SURFACE_SIDE_STYLE ('',( #6339 ) ) ; +#4389 = SURFACE_STYLE_USAGE ( .BOTH. , #33217 ) ; +#4390 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000003200, 0.4300017452961686900, -6.200000000000001100 ) ) ; +#4391 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#4392 = ORIENTED_EDGE ( 'NONE', *, *, #21331, .T. ) ; +#4393 = EDGE_LOOP ( 'NONE', ( #33828, #4394, #8787, #7719 ) ) ; +#4394 = ORIENTED_EDGE ( 'NONE', *, *, #33811, .T. ) ; +#4395 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#4396 = SURFACE_STYLE_FILL_AREA ( #11730 ) ; +#4397 = FILL_AREA_STYLE_COLOUR ( '', #10028 ) ; +#4398 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4399 = CARTESIAN_POINT ( 'NONE', ( -4.425000000000014000, -1.999998254703822400, -3.500000000000000000 ) ) ; +#4400 = CARTESIAN_POINT ( 'NONE', ( -2.000000000000000000, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#4401 = SURFACE_STYLE_FILL_AREA ( #31443 ) ; +#4402 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4403 = VECTOR ( 'NONE', #37542, 1000.000000000000000 ) ; +#4404 = SURFACE_STYLE_FILL_AREA ( #11925 ) ; +#4405 = FACE_OUTER_BOUND ( 'NONE', #3092, .T. ) ; +#4406 = ORIENTED_EDGE ( 'NONE', *, *, #39032, .F. ) ; +#4407 = DIRECTION ( 'NONE', ( 3.077917520101936400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4408 = ORIENTED_EDGE ( 'NONE', *, *, #10890, .F. ) ; +#4409 = EDGE_CURVE ( 'NONE', #12836, #24062, #8795, .T. ) ; +#4410 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.3300017452961679900, -6.224999999999999600 ) ) ; +#4411 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4412 = EDGE_CURVE ( 'NONE', #11557, #41856, #2297, .T. ) ; +#4413 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #372 ) ) ; +#4414 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, 0.2000000000000000100, 12.42614000000000000 ) ) ; +#4415 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4416 = ORIENTED_EDGE ( 'NONE', *, *, #18476, .T. ) ; +#4417 = ADVANCED_FACE ( 'NONE', ( #2788 ), #27110, .T. ) ; +#4418 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.773004880385254100, -0.7580972011844128200 ) ) ; +#4419 = FILL_AREA_STYLE ('',( #23776 ) ) ; +#4420 = VECTOR ( 'NONE', #36503, 1000.000000000000000 ) ; +#4421 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33448 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33944, #24500, #4987 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4422 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4423 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid33', #39729 ) ; +#4424 = PRESENTATION_STYLE_ASSIGNMENT (( #2375 ) ) ; +#4425 = ORIENTED_EDGE ( 'NONE', *, *, #27187, .F. ) ; +#4426 = SURFACE_STYLE_FILL_AREA ( #19156 ) ; +#4427 = STYLED_ITEM ( 'NONE', ( #38626 ), #31527 ) ; +#4428 = SURFACE_SIDE_STYLE ('',( #818 ) ) ; +#4429 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4430 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4431 = ADVANCED_FACE ( 'NONE', ( #3743 ), #4338, .F. ) ; +#4433 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20178 ) ) ; +#4432 = STYLED_ITEM ( 'NONE', ( #9917 ), #31093 ) ; +#4434 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#4435 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.180001745296166000, -7.200000000000001100 ) ) ; +#4436 = EDGE_LOOP ( 'NONE', ( #32389, #28187, #5102, #7541 ) ) ; +#4438 = EDGE_CURVE ( 'NONE', #28440, #19662, #38594, .T. ) ; +#4437 = AXIS2_PLACEMENT_3D ( 'NONE', #28372, #40948, #8588 ) ; +#4439 = LINE ( 'NONE', #41776, #28188 ) ; +#4440 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.380001745296132400, -6.031671842700004200 ) ) ; +#4441 = FILL_AREA_STYLE_COLOUR ( '', #34005 ) ; +#4442 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, -0.2336906316634772600, -1.600000000000000800 ) ) ; +#4443 = EDGE_LOOP ( 'NONE', ( #26525, #20396, #33191, #15069 ) ) ; +#4444 = VERTEX_POINT ( 'NONE', #21042 ) ; +#4445 = ORIENTED_EDGE ( 'NONE', *, *, #7426, .T. ) ; +#4446 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -500000.0000000000600, -2.594459358691024100 ) ) ; +#4447 = AXIS2_PLACEMENT_3D ( 'NONE', #40108, #11436, #14162 ) ; +#4448 = CYLINDRICAL_SURFACE ( 'NONE', #1439, 0.3600000000000078700 ) ; +#4449 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822000, -5.850738490052340700 ) ) ; +#4450 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#4451 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13104, 'distance_accuracy_value', 'NONE'); +#4452 = FACE_OUTER_BOUND ( 'NONE', #20836, .T. ) ; +#4453 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.307718258760844200E-015, -1.000000000000000000 ) ) ; +#4454 = ORIENTED_EDGE ( 'NONE', *, *, #23211, .F. ) ; +#4455 = VERTEX_POINT ( 'NONE', #31013 ) ; +#4456 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 0.3499999999999996400, -1.250000000000000000 ) ) ; +#4457 = CARTESIAN_POINT ( 'NONE', ( 0.6500000000000000200, -1.139998254717358200, -6.299996877890552400 ) ) ; +#4458 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4459 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#4460 = ORIENTED_EDGE ( 'NONE', *, *, #36982, .T. ) ; +#4461 = SURFACE_SIDE_STYLE ('',( #10627 ) ) ; +#4462 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28425, 'distance_accuracy_value', 'NONE'); +#4463 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.499998254703825300, -5.449999999999994000 ) ) ; +#4464 = SURFACE_STYLE_USAGE ( .BOTH. , #16901 ) ; +#4465 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 0.6800017452961684100, -3.999999999999998200 ) ) ; +#4466 = SURFACE_STYLE_FILL_AREA ( #24387 ) ; +#4467 = EDGE_CURVE ( 'NONE', #3977, #31436, #40093, .T. ) ; +#4468 = ADVANCED_FACE ( 'NONE', ( #12812 ), #28005, .T. ) ; +#4469 = VERTEX_POINT ( 'NONE', #2117 ) ; +#4470 = LINE ( 'NONE', #1817, #15571 ) ; +#4471 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4472 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4473 = EDGE_CURVE ( 'NONE', #34212, #41091, #34073, .T. ) ; +#4474 = ORIENTED_EDGE ( 'NONE', *, *, #2109, .T. ) ; +#4475 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000032500, 0.2800017452961687200, -6.849999999999999600 ) ) ; +#4476 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4477 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#4478 = ORIENTED_EDGE ( 'NONE', *, *, #31592, .T. ) ; +#4479 = ORIENTED_EDGE ( 'NONE', *, *, #6386, .T. ) ; +#4480 = SURFACE_STYLE_FILL_AREA ( #14171 ) ; +#4481 = VERTEX_POINT ( 'NONE', #30754 ) ; +#4482 = SURFACE_SIDE_STYLE ('',( #11485 ) ) ; +#4483 = LINE ( 'NONE', #33291, #30785 ) ; +#4484 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23973 ) ) ; +#4485 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#4486 = PRESENTATION_STYLE_ASSIGNMENT (( #33148 ) ) ; +#4487 = EDGE_LOOP ( 'NONE', ( #23151, #7498, #12565, #19113 ) ) ; +#4488 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -5.075000000000000200 ) ) ; +#4490 = CONICAL_SURFACE ( 'NONE', #13644, 1.651303021499040300, 1.221730476395289900 ) ; +#4489 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -500000.0000000000600, -2.904459358691023700 ) ) ; +#4491 = ORIENTED_EDGE ( 'NONE', *, *, #5895, .T. ) ; +#4492 = ORIENTED_EDGE ( 'NONE', *, *, #35592, .F. ) ; +#4493 = VECTOR ( 'NONE', #31683, 1000.000000000000000 ) ; +#4494 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7720 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12876, #3172, #25506 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4495 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39370 ), #12573 ) ; +#4496 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, 0.07499999999999999700, 0.4305619708689000200 ) ) ; +#4497 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4499 = EDGE_CURVE ( 'NONE', #27531, #28522, #24997, .T. ) ; +#4498 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24565 ), #26982 ) ; +#4500 = ORIENTED_EDGE ( 'NONE', *, *, #38417, .F. ) ; +#4501 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23312, 'distance_accuracy_value', 'NONE'); +#4502 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4503 = VECTOR ( 'NONE', #20100, 1000.000000000000000 ) ; +#4505 = STYLED_ITEM ( 'NONE', ( #16493 ), #2330 ) ; +#4504 = STYLED_ITEM ( 'NONE', ( #5483 ), #27290 ) ; +#4506 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4507 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4508 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37786 ), #21061 ) ; +#4509 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.056601140521967900E-031 ) ) ; +#4510 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18336 ), #37540 ) ; +#4511 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4512 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -3.307718258760844200E-015 ) ) ; +#4513 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005900, -0.2818014882866752300, -3.099999999999998800 ) ) ; +#4514 = ORIENTED_EDGE ( 'NONE', *, *, #40288, .F. ) ; +#4515 = FILL_AREA_STYLE ('',( #23865 ) ) ; +#4516 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4517 = ADVANCED_FACE ( 'NONE', ( #19425 ), #11927, .F. ) ; +#4518 = CIRCLE ( 'NONE', #18175, 0.1499999999998701800 ) ; +#4519 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#4520 = ORIENTED_EDGE ( 'NONE', *, *, #35352, .T. ) ; +#4521 = PRESENTATION_STYLE_ASSIGNMENT (( #34978 ) ) ; +#4522 = VECTOR ( 'NONE', #18843, 1000.000000000000000 ) ; +#4523 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4524 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12125, 'distance_accuracy_value', 'NONE'); +#4525 = LINE ( 'NONE', #20112, #29271 ) ; +#4526 = SURFACE_SIDE_STYLE ('',( #36128 ) ) ; +#4527 = CARTESIAN_POINT ( 'NONE', ( -3.217812702993460200, 0.2999999999999999900, -0.04732283915633857900 ) ) ; +#4528 = VERTEX_POINT ( 'NONE', #14656 ) ; +#4529 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4530 = ORIENTED_EDGE ( 'NONE', *, *, #5856, .F. ) ; +#4531 = ORIENTED_EDGE ( 'NONE', *, *, #32678, .T. ) ; +#4532 = SURFACE_STYLE_FILL_AREA ( #4738 ) ; +#4533 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, -0.2000000000000000100, -3.250000000000001300 ) ) ; +#4534 = EDGE_CURVE ( 'NONE', #25231, #18991, #41130, .T. ) ; +#4535 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4536 = EDGE_CURVE ( 'NONE', #20115, #28233, #32527, .T. ) ; +#4537 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34576, 'distance_accuracy_value', 'NONE'); +#4538 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4539 = ORIENTED_EDGE ( 'NONE', *, *, #29713, .F. ) ; +#4540 = CIRCLE ( 'NONE', #40287, 0.2999999999999999300 ) ; +#4541 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#4542 = EDGE_CURVE ( 'NONE', #532, #35209, #2748, .T. ) ; +#4543 = PRESENTATION_STYLE_ASSIGNMENT (( #8267 ) ) ; +#4544 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6734 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26517, #7559, #10389 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4545 = VECTOR ( 'NONE', #33528, 1000.000000000000000 ) ; +#4546 = PLANE ( 'NONE', #19804 ) ; +#4547 = SURFACE_SIDE_STYLE ('',( #3037 ) ) ; +#4548 = SURFACE_STYLE_USAGE ( .BOTH. , #4820 ) ; +#4549 = FILL_AREA_STYLE ('',( #4822 ) ) ; +#4550 = EDGE_CURVE ( 'NONE', #14331, #37312, #25469, .T. ) ; +#4551 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 0.2999999999999999900, 0.3499999999999999800 ) ) ; +#4552 = LINE ( 'NONE', #35912, #20765 ) ; +#4553 = AXIS2_PLACEMENT_3D ( 'NONE', #28625, #5620, #15638 ) ; +#4554 = DIRECTION ( 'NONE', ( -0.9396926207859093200, -0.3420201433256663300, -4.188538737677058300E-017 ) ) ; +#4555 = AXIS2_PLACEMENT_3D ( 'NONE', #34331, #27407, #1601 ) ; +#4556 = SURFACE_SIDE_STYLE ('',( #21066 ) ) ; +#4557 = ORIENTED_EDGE ( 'NONE', *, *, #33615, .F. ) ; +#4560 = EDGE_CURVE ( 'NONE', #352, #16642, #38118, .T. ) ; +#4559 = STYLED_ITEM ( 'NONE', ( #9519 ), #23813 ) ; +#4558 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4561 = CIRCLE ( 'NONE', #15683, 0.1000000000000009100 ) ; +#4562 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4563 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4564 = VERTEX_POINT ( 'NONE', #19035 ) ; +#4565 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -1.139998254717359000, -5.049996877890552400 ) ) ; +#4566 = EDGE_LOOP ( 'NONE', ( #29606, #29604, #37791, #5310 ) ) ; +#4567 = LINE ( 'NONE', #1900, #9069 ) ; +#4569 = AXIS2_PLACEMENT_3D ( 'NONE', #8133, #31167, #24266 ) ; +#4568 = STYLED_ITEM ( 'NONE', ( #6298 ), #28132 ) ; +#4570 = AXIS2_PLACEMENT_3D ( 'NONE', #8068, #18283, #21532 ) ; +#4571 = VECTOR ( 'NONE', #7766, 1000.000000000000000 ) ; +#4572 = PRESENTATION_STYLE_ASSIGNMENT (( #3561 ) ) ; +#4573 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, 2.322941965694886000, -1.250000000000000000 ) ) ; +#4574 = PRESENTATION_STYLE_ASSIGNMENT (( #4178 ) ) ; +#4575 = STYLED_ITEM ( 'NONE', ( #5254 ), #33416 ) ; +#4576 = ORIENTED_EDGE ( 'NONE', *, *, #28784, .T. ) ; +#4577 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#4578 = ORIENTED_EDGE ( 'NONE', *, *, #4612, .T. ) ; +#4579 = ORIENTED_EDGE ( 'NONE', *, *, #35377, .T. ) ; +#4580 = VECTOR ( 'NONE', #38913, 1000.000000000000000 ) ; +#4581 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37052 ) ) ; +#4582 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#4583 = FILL_AREA_STYLE ('',( #20850 ) ) ; +#4584 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -1.380001745296143100, -4.781671842700004200 ) ) ; +#4585 = SURFACE_SIDE_STYLE ('',( #22826 ) ) ; +#4586 = ORIENTED_EDGE ( 'NONE', *, *, #27027, .T. ) ; +#4587 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4588 = FACE_OUTER_BOUND ( 'NONE', #17654, .T. ) ; +#4589 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4590 = VECTOR ( 'NONE', #33445, 1000.000000000000000 ) ; +#4591 = CIRCLE ( 'NONE', #41655, 1.200001745296169500 ) ; +#4592 = SURFACE_STYLE_FILL_AREA ( #19854 ) ; +#4593 = VECTOR ( 'NONE', #19026, 1000.000000000000000 ) ; +#4594 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4595 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.630424214906979600, -1.050000000000000000 ) ) ; +#4596 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4597 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4598 = ADVANCED_FACE ( 'NONE', ( #30992 ), #31583, .T. ) ; +#4599 = SURFACE_SIDE_STYLE ('',( #38469 ) ) ; +#4600 = FILL_AREA_STYLE ('',( #4737 ) ) ; +#4601 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#4602 = VERTEX_POINT ( 'NONE', #21879 ) ; +#4603 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4604 = LINE ( 'NONE', #21487, #3111 ) ; +#4605 = EDGE_CURVE ( 'NONE', #4156, #16721, #15826, .T. ) ; +#4606 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.499998254703827700, -6.699999999999994000 ) ) ; +#4607 = ORIENTED_EDGE ( 'NONE', *, *, #4669, .T. ) ; +#4608 = ORIENTED_EDGE ( 'NONE', *, *, #11448, .T. ) ; +#4609 = VECTOR ( 'NONE', #33367, 1000.000000000000000 ) ; +#4610 = CARTESIAN_POINT ( 'NONE', ( -4.720380236995682200, 0.2800000000000027500, -0.8400000000000000800 ) ) ; +#4611 = VECTOR ( 'NONE', #26066, 1000.000000000000000 ) ; +#4612 = EDGE_CURVE ( 'NONE', #30213, #16736, #2795, .T. ) ; +#4613 = VECTOR ( 'NONE', #21817, 1000.000000000000000 ) ; +#4614 = SURFACE_STYLE_USAGE ( .BOTH. , #21025 ) ; +#4615 = ORIENTED_EDGE ( 'NONE', *, *, #11015, .F. ) ; +#4616 = AXIS2_PLACEMENT_3D ( 'NONE', #15759, #19044, #41456 ) ; +#4617 = VERTEX_POINT ( 'NONE', #37802 ) ; +#4618 = ORIENTED_EDGE ( 'NONE', *, *, #38294, .F. ) ; +#4619 = CARTESIAN_POINT ( 'NONE', ( 3.332298852287715700, 0.2999999198035229700, -1.600000000000000300 ) ) ; +#4620 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19915, 'distance_accuracy_value', 'NONE'); +#4621 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4622 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4623 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23270, 'distance_accuracy_value', 'NONE'); +#4624 = ORIENTED_EDGE ( 'NONE', *, *, #9104, .T. ) ; +#4626 = LINE ( 'NONE', #3077, #3596 ) ; +#4625 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7211 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33030, #3518, #3652 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4627 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4628 = ORIENTED_EDGE ( 'NONE', *, *, #14081, .F. ) ; +#4629 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27304 ), #21967 ) ; +#4630 = FILL_AREA_STYLE ('',( #39777 ) ) ; +#4632 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23706 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11378, #37246, #8405 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4631 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13833 ), #6765 ) ; +#4633 = SURFACE_STYLE_USAGE ( .BOTH. , #20201 ) ; +#4635 = EDGE_CURVE ( 'NONE', #34872, #32105, #5216, .T. ) ; +#4634 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35743 ) ) ; +#4636 = SURFACE_SIDE_STYLE ('',( #8085 ) ) ; +#4637 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4638 = ADVANCED_FACE ( 'NONE', ( #27517 ), #2673, .F. ) ; +#4640 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6344 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17544, #39827, #4535 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4639 = FACE_OUTER_BOUND ( 'NONE', #12048, .T. ) ; +#4641 = LINE ( 'NONE', #21446, #5115 ) ; +#4642 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#4643 = AXIS2_PLACEMENT_3D ( 'NONE', #24092, #4879, #4748 ) ; +#4644 = PRESENTATION_STYLE_ASSIGNMENT (( #24581 ) ) ; +#4645 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19040, 'distance_accuracy_value', 'NONE'); +#4646 = DIRECTION ( 'NONE', ( -7.744301232039317900E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4647 = ORIENTED_EDGE ( 'NONE', *, *, #8686, .F. ) ; +#4648 = VECTOR ( 'NONE', #17380, 1000.000000000000000 ) ; +#4649 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#4650 = SURFACE_STYLE_USAGE ( .BOTH. , #8006 ) ; +#4651 = ORIENTED_EDGE ( 'NONE', *, *, #2959, .F. ) ; +#4652 = ADVANCED_FACE ( 'NONE', ( #28529 ), #7229, .T. ) ; +#4653 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.4300017452961691400, -6.900000000000000400 ) ) ; +#4654 = CARTESIAN_POINT ( 'NONE', ( -1.649999999999999900, -1.499998254703824400, -6.699999999999994000 ) ) ; +#4655 = EDGE_LOOP ( 'NONE', ( #2741, #9312, #30050, #17024 ) ) ; +#4656 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#4657 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#4658 = ORIENTED_EDGE ( 'NONE', *, *, #37199, .F. ) ; +#4659 = SURFACE_STYLE_USAGE ( .BOTH. , #1582 ) ; +#4660 = ORIENTED_EDGE ( 'NONE', *, *, #11415, .F. ) ; +#4661 = EDGE_CURVE ( 'NONE', #1731, #2782, #39572, .T. ) ; +#4662 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4663 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4664 = VECTOR ( 'NONE', #1720, 1000.000000000000000 ) ; +#4665 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.8500017452961659000, -5.599999999999999600 ) ) ; +#4666 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.602085213965213000E-015, 0.0000000000000000000 ) ) ; +#4667 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#4668 = FILL_AREA_STYLE_COLOUR ( '', #19480 ) ; +#4669 = EDGE_CURVE ( 'NONE', #34212, #8230, #9245, .T. ) ; +#4670 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#4671 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40092 ) ) ; +#4672 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32887, 'distance_accuracy_value', 'NONE'); +#4673 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, -0.7071067811865483500 ) ) ; +#4674 = VECTOR ( 'NONE', #2941, 1000.000000000000000 ) ; +#4675 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.710505431213761100E-016 ) ) ; +#4676 = AXIS2_PLACEMENT_3D ( 'NONE', #33809, #14459, #4845 ) ; +#4677 = DIRECTION ( 'NONE', ( -3.336029078258395200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4678 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4679 = FILL_AREA_STYLE_COLOUR ( '', #18436 ) ; +#4680 = CARTESIAN_POINT ( 'NONE', ( -3.178333333333030400, -0.2999999999999999900, -0.06128090415829449300 ) ) ; +#4681 = VERTEX_POINT ( 'NONE', #26060 ) ; +#4682 = LINE ( 'NONE', #26272, #30935 ) ; +#4683 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#4684 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24871 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31698, #25101, #38182 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4685 = FILL_AREA_STYLE ('',( #8042 ) ) ; +#4686 = ADVANCED_FACE ( 'NONE', ( #17886 ), #17412, .F. ) ; +#4687 = AXIS2_PLACEMENT_3D ( 'NONE', #34031, #27537, #33758 ) ; +#4688 = ORIENTED_EDGE ( 'NONE', *, *, #21184, .F. ) ; +#4691 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14906 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17160, #23784, #29710 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4690 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#4689 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1199 ), #6828 ) ; +#4692 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.03000174529616634800, -7.300000000000000700 ) ) ; +#4693 = FILL_AREA_STYLE_COLOUR ( '', #7455 ) ; +#4694 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4695 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4696 = ORIENTED_EDGE ( 'NONE', *, *, #2371, .F. ) ; +#4698 = EDGE_CURVE ( 'NONE', #1280, #4273, #30518, .T. ) ; +#4697 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40936 ) ) ; +#4699 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#4700 = VERTEX_POINT ( 'NONE', #6835 ) ; +#4701 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -2.322941965694886000, -1.250000000000000000 ) ) ; +#4703 = ORIENTED_EDGE ( 'NONE', *, *, #22034, .F. ) ; +#4702 = CIRCLE ( 'NONE', #21961, 0.2999999999999999300 ) ; +#4704 = ORIENTED_EDGE ( 'NONE', *, *, #25647, .F. ) ; +#4705 = SURFACE_SIDE_STYLE ('',( #21138 ) ) ; +#4707 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24890 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29548, #13018, #13161 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4706 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13327 ) ) ; +#4708 = FILL_AREA_STYLE_COLOUR ( '', #11366 ) ; +#4709 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4710 = EDGE_LOOP ( 'NONE', ( #5303, #19689, #2409, #34724 ) ) ; +#4711 = VERTEX_POINT ( 'NONE', #29431 ) ; +#4712 = FACE_OUTER_BOUND ( 'NONE', #1762, .T. ) ; +#4713 = LINE ( 'NONE', #26387, #40544 ) ; +#4714 = SURFACE_STYLE_FILL_AREA ( #6098 ) ; +#4715 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29756, 'distance_accuracy_value', 'NONE'); +#4716 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#4717 = LINE ( 'NONE', #31164, #8205 ) ; +#4718 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.07499999999999998300, -1.399999999996500000 ) ) ; +#4719 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2500000000000000000, 1.075000000000000000 ) ) ; +#4720 = FILL_AREA_STYLE ('',( #27595 ) ) ; +#4721 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4722 = DIRECTION ( 'NONE', ( -2.891205793294932600E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4723 = EDGE_CURVE ( 'NONE', #3668, #21174, #38085, .T. ) ; +#4724 = ORIENTED_EDGE ( 'NONE', *, *, #13200, .F. ) ; +#4725 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4726 = EDGE_CURVE ( 'NONE', #28000, #27235, #21954, .T. ) ; +#4727 = ORIENTED_EDGE ( 'NONE', *, *, #33515, .F. ) ; +#4728 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4729 = ORIENTED_EDGE ( 'NONE', *, *, #8538, .F. ) ; +#4730 = ADVANCED_FACE ( 'NONE', ( #30021 ), #35536, .T. ) ; +#4731 = ORIENTED_EDGE ( 'NONE', *, *, #1599, .T. ) ; +#4732 = SURFACE_STYLE_USAGE ( .BOTH. , #26939 ) ; +#4734 = VERTEX_POINT ( 'NONE', #12776 ) ; +#4733 = VECTOR ( 'NONE', #35274, 1000.000000000000000 ) ; +#4735 = ORIENTED_EDGE ( 'NONE', *, *, #34053, .F. ) ; +#4736 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3910 ), #37211 ) ; +#4737 = FILL_AREA_STYLE_COLOUR ( '', #15142 ) ; +#4738 = FILL_AREA_STYLE ('',( #5279 ) ) ; +#4739 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4740 = ORIENTED_EDGE ( 'NONE', *, *, #3797, .T. ) ; +#4741 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2608 ) ) ; +#4742 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4743 = SURFACE_STYLE_FILL_AREA ( #15674 ) ; +#4744 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4745 = CYLINDRICAL_SURFACE ( 'NONE', #6122, 0.3600000000000078700 ) ; +#4746 = FACE_OUTER_BOUND ( 'NONE', #3458, .T. ) ; +#4747 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865475700, 0.7071067811865475700 ) ) ; +#4748 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4750 = EDGE_CURVE ( 'NONE', #16022, #10468, #32036, .T. ) ; +#4749 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16375 ) ) ; +#4751 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4752 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4754 = AXIS2_PLACEMENT_3D ( 'NONE', #6891, #39093, #3527 ) ; +#4753 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25080 ), #12022 ) ; +#4755 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4756 = STYLED_ITEM ( 'NONE', ( #736 ), #39882 ) ; +#4757 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39386 ), #6905 ) ; +#4758 = SURFACE_SIDE_STYLE ('',( #39028 ) ) ; +#4759 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4760 = EDGE_LOOP ( 'NONE', ( #8902, #31764, #11568, #35162 ) ) ; +#4761 = VECTOR ( 'NONE', #32910, 1000.000000000000000 ) ; +#4762 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4763 = FILL_AREA_STYLE ('',( #27790 ) ) ; +#4764 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4765 = VERTEX_POINT ( 'NONE', #22405 ) ; +#4766 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4767 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, 0.2800000000000028000, -0.2339555568811697600 ) ) ; +#4768 = VERTEX_POINT ( 'NONE', #25797 ) ; +#4769 = ORIENTED_EDGE ( 'NONE', *, *, #31345, .F. ) ; +#4770 = VERTEX_POINT ( 'NONE', #38613 ) ; +#4771 = LINE ( 'NONE', #27610, #37115 ) ; +#4772 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4773 = LINE ( 'NONE', #41261, #38596 ) ; +#4774 = LINE ( 'NONE', #1072, #38112 ) ; +#4775 = EDGE_CURVE ( 'NONE', #24439, #24480, #23954, .T. ) ; +#4777 = DIRECTION ( 'NONE', ( -4.336808689942020900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4776 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4778 = CARTESIAN_POINT ( 'NONE', ( -1.149999999999999900, -1.380001745296132400, -6.031671842700004200 ) ) ; +#4779 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4780 = ORIENTED_EDGE ( 'NONE', *, *, #2354, .T. ) ; +#4781 = EDGE_CURVE ( 'NONE', #36152, #22447, #14872, .T. ) ; +#4782 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4783 = EDGE_CURVE ( 'NONE', #22142, #5294, #16895, .T. ) ; +#4784 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4785 = FACE_OUTER_BOUND ( 'NONE', #17464, .T. ) ; +#4786 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26180 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28095, #24436, #34024 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4787 = SURFACE_SIDE_STYLE ('',( #24060 ) ) ; +#4788 = EDGE_LOOP ( 'NONE', ( #16391, #34588, #30907, #14959 ) ) ; +#4789 = PLANE ( 'NONE', #17773 ) ; +#4790 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30495 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4967, #37180, #40396 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4791 = FILL_AREA_STYLE_COLOUR ( '', #32407 ) ; +#4792 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4793 = DIRECTION ( 'NONE', ( -4.840188270024573500E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4794 = ADVANCED_FACE ( 'NONE', ( #20463 ), #9923, .T. ) ; +#4795 = EDGE_LOOP ( 'NONE', ( #32026, #41494, #22005, #12535 ) ) ; +#4796 = AXIS2_PLACEMENT_3D ( 'NONE', #3285, #13151, #25881 ) ; +#4797 = DIRECTION ( 'NONE', ( 1.000000000000000000, 2.478176394252580200E-017, 6.082356018693180500E-031 ) ) ; +#4798 = PRESENTATION_STYLE_ASSIGNMENT (( #10156 ) ) ; +#4799 = EDGE_CURVE ( 'NONE', #24571, #10667, #23464, .T. ) ; +#4800 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4801 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#4802 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4803 = EDGE_LOOP ( 'NONE', ( #26448, #29194, #6036, #2702 ) ) ; +#4804 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, -0.6000000000000000900, -3.250000000000000400 ) ) ; +#4805 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4806 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30287, 'distance_accuracy_value', 'NONE'); +#4808 = AXIS2_PLACEMENT_3D ( 'NONE', #31361, #41096, #38110 ) ; +#4807 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32956 ), #8566 ) ; +#4809 = LINE ( 'NONE', #15987, #6815 ) ; +#4810 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4811 = SURFACE_STYLE_USAGE ( .BOTH. , #30933 ) ; +#4812 = LINE ( 'NONE', #21407, #811 ) ; +#4813 = ORIENTED_EDGE ( 'NONE', *, *, #34139, .T. ) ; +#4814 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18619 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29299, #10069, #13621 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4815 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4816 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, 0.2999999999999999900, 0.6999999999999999600 ) ) ; +#4817 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4818 = ORIENTED_EDGE ( 'NONE', *, *, #26860, .F. ) ; +#4819 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10723 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15499, #2530, #15360 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4820 = SURFACE_SIDE_STYLE ('',( #9448 ) ) ; +#4821 = ORIENTED_EDGE ( 'NONE', *, *, #5325, .F. ) ; +#4822 = FILL_AREA_STYLE_COLOUR ( '', #38030 ) ; +#4823 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#4824 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4825 = CARTESIAN_POINT ( 'NONE', ( 3.332298852287715700, 0.2999999198035229700, -1.600000000000000300 ) ) ; +#4826 = PLANE ( 'NONE', #10097 ) ; +#4827 = PLANE ( 'NONE', #3132 ) ; +#4828 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169000, -3.814459358809384200 ) ) ; +#4829 = VERTEX_POINT ( 'NONE', #33257 ) ; +#4830 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4831 = ADVANCED_FACE ( 'NONE', ( #40629 ), #20015, .F. ) ; +#4832 = CIRCLE ( 'NONE', #7772, 1.651303021499040300 ) ; +#4833 = FILL_AREA_STYLE ('',( #17716 ) ) ; +#4834 = PRESENTATION_STYLE_ASSIGNMENT (( #25539 ) ) ; +#4835 = FACE_OUTER_BOUND ( 'NONE', #22534, .T. ) ; +#4836 = EDGE_CURVE ( 'NONE', #41583, #32404, #738, .T. ) ; +#4837 = EDGE_LOOP ( 'NONE', ( #19980, #7418, #20381, #4520 ) ) ; +#4838 = ORIENTED_EDGE ( 'NONE', *, *, #8768, .F. ) ; +#4839 = FILL_AREA_STYLE_COLOUR ( '', #17926 ) ; +#4840 = ORIENTED_EDGE ( 'NONE', *, *, #20605, .T. ) ; +#4841 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13479 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30570, #14609, #14465 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4844 = ADVANCED_FACE ( 'NONE', ( #33526 ), #26780, .F. ) ; +#4843 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22654, 'distance_accuracy_value', 'NONE'); +#4842 = LINE ( 'NONE', #25988, #17992 ) ; +#4845 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4846 = PRESENTATION_STYLE_ASSIGNMENT (( #13038 ) ) ; +#4847 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 2.032879073410321300E-016, 1.000000000000000000 ) ) ; +#4848 = EDGE_CURVE ( 'NONE', #18408, #18007, #34041, .T. ) ; +#4849 = VERTEX_POINT ( 'NONE', #36098 ) ; +#4850 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169000, -3.514459358809384400 ) ) ; +#4851 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4852 = VERTEX_POINT ( 'NONE', #682 ) ; +#4853 = AXIS2_PLACEMENT_3D ( 'NONE', #17420, #4398, #30107 ) ; +#4854 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24519, 'distance_accuracy_value', 'NONE'); +#4855 = SURFACE_STYLE_FILL_AREA ( #37738 ) ; +#4856 = STYLED_ITEM ( 'NONE', ( #2090 ), #13212 ) ; +#4857 = FILL_AREA_STYLE_COLOUR ( '', #27956 ) ; +#4858 = ORIENTED_EDGE ( 'NONE', *, *, #11638, .F. ) ; +#4859 = FACE_OUTER_BOUND ( 'NONE', #32681, .T. ) ; +#4861 = EDGE_CURVE ( 'NONE', #6127, #5582, #34532, .T. ) ; +#4860 = STYLED_ITEM ( 'NONE', ( #11569 ), #24800 ) ; +#4862 = SURFACE_SIDE_STYLE ('',( #35265 ) ) ; +#4863 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.807003620809177100E-016, -1.000000000000000000 ) ) ; +#4864 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.931303021499040500, -0.3590461068823621000 ) ) ; +#4866 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9168 ), #19495 ) ; +#4865 = STYLED_ITEM ( 'NONE', ( #12759 ), #28803 ) ; +#4867 = SURFACE_STYLE_USAGE ( .BOTH. , #40158 ) ; +#4868 = STYLED_ITEM ( 'NONE', ( #6819 ), #41716 ) ; +#4869 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17856, 'distance_accuracy_value', 'NONE'); +#4870 = VECTOR ( 'NONE', #31828, 1000.000000000000000 ) ; +#4871 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19079, 'distance_accuracy_value', 'NONE'); +#4872 = CARTESIAN_POINT ( 'NONE', ( -3.100000000000000100, -1.380001745296146200, -5.449999999999994000 ) ) ; +#4874 = STYLED_ITEM ( 'NONE', ( #5014 ), #9505 ) ; +#4873 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40301 ) ) ; +#4875 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#4876 = ORIENTED_EDGE ( 'NONE', *, *, #8609, .T. ) ; +#4878 = STYLED_ITEM ( 'NONE', ( #23856 ), #8626 ) ; +#4877 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4879 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4880 = PRESENTATION_STYLE_ASSIGNMENT (( #24140 ) ) ; +#4881 = PRESENTATION_STYLE_ASSIGNMENT (( #26545 ) ) ; +#4882 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4883 = ADVANCED_FACE ( 'NONE', ( #17366 ), #20146, .T. ) ; +#4884 = ORIENTED_EDGE ( 'NONE', *, *, #2040, .T. ) ; +#4885 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, 0.5999999999999999800, -1.930000000000000200 ) ) ; +#4886 = ORIENTED_EDGE ( 'NONE', *, *, #11820, .F. ) ; +#4887 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#4888 = FILL_AREA_STYLE_COLOUR ( '', #2459 ) ; +#4889 = ORIENTED_EDGE ( 'NONE', *, *, #24022, .T. ) ; +#4890 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.4300017452961689100, -4.975000000000000500 ) ) ; +#4891 = FACE_OUTER_BOUND ( 'NONE', #6668, .T. ) ; +#4892 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#4893 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4894 = ORIENTED_EDGE ( 'NONE', *, *, #34856, .F. ) ; +#4895 = FILL_AREA_STYLE_COLOUR ( '', #30946 ) ; +#4896 = ORIENTED_EDGE ( 'NONE', *, *, #16665, .F. ) ; +#4897 = CARTESIAN_POINT ( 'NONE', ( -3.629999999999999900, -1.139998254717349300, -6.299996877890552400 ) ) ; +#4898 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, -4.688441826964342300E-016 ) ) ; +#4899 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000011200, -1.999998254703821500, -5.850738490052339800 ) ) ; +#4900 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4901 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4902 = FILL_AREA_STYLE_COLOUR ( '', #36888 ) ; +#4903 = EDGE_CURVE ( 'NONE', #34577, #25243, #36091, .T. ) ; +#4904 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4905 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#4906 = EDGE_CURVE ( 'NONE', #23846, #31629, #19925, .T. ) ; +#4907 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17113 ), #11388 ) ; +#4908 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8753 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9256, #6047, #15643 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4909 = EDGE_LOOP ( 'NONE', ( #40638, #26937, #4624, #1245 ) ) ; +#4910 = CARTESIAN_POINT ( 'NONE', ( -2.000000000000000000, -0.3000000000000001600, -1.250000000000000000 ) ) ; +#4911 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4912 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4913 = ORIENTED_EDGE ( 'NONE', *, *, #1790, .T. ) ; +#4914 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, -0.2999999999999847800, -4.249999999999998200 ) ) ; +#4915 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2243 ), #4357 ) ; +#4916 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5481 ) ) ; +#4917 = FILL_AREA_STYLE ('',( #11689 ) ) ; +#4918 = ORIENTED_EDGE ( 'NONE', *, *, #8098, .F. ) ; +#4919 = LINE ( 'NONE', #28264, #933 ) ; +#4920 = ORIENTED_EDGE ( 'NONE', *, *, #34367, .F. ) ; +#4921 = VECTOR ( 'NONE', #8732, 1000.000000000000100 ) ; +#4922 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38204 ), #30106 ) ; +#4923 = SURFACE_SIDE_STYLE ('',( #30132 ) ) ; +#4924 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4925 = VECTOR ( 'NONE', #31010, 1000.000000000000000 ) ; +#4926 = FACE_OUTER_BOUND ( 'NONE', #27188, .T. ) ; +#4929 = EDGE_CURVE ( 'NONE', #4181, #41573, #8244, .T. ) ; +#4928 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.499998254703836900, -5.049999999999993600 ) ) ; +#4927 = AXIS2_PLACEMENT_3D ( 'NONE', #40848, #11476, #12016 ) ; +#4930 = ORIENTED_EDGE ( 'NONE', *, *, #26211, .T. ) ; +#4931 = FILL_AREA_STYLE ('',( #30778 ) ) ; +#4932 = ORIENTED_EDGE ( 'NONE', *, *, #13943, .T. ) ; +#4933 = LINE ( 'NONE', #34428, #28687 ) ; +#4934 = ADVANCED_FACE ( 'NONE', ( #18906 ), #10776, .F. ) ; +#4935 = SURFACE_SIDE_STYLE ('',( #30397 ) ) ; +#4936 = FILL_AREA_STYLE_COLOUR ( '', #14850 ) ; +#4938 = AXIS2_PLACEMENT_3D ( 'NONE', #22257, #22391, #2925 ) ; +#4937 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33346 ) ) ; +#4939 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4940 = VECTOR ( 'NONE', #35405, 1000.000000000000000 ) ; +#4941 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4942 = VERTEX_POINT ( 'NONE', #30569 ) ; +#4943 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4944 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165600, -6.900000000000000400 ) ) ; +#4945 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4946 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4947 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17698, 'distance_accuracy_value', 'NONE'); +#4948 = FILL_AREA_STYLE ('',( #26883 ) ) ; +#4949 = VECTOR ( 'NONE', #28044, 1000.000000000000000 ) ; +#4950 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4951 = EDGE_LOOP ( 'NONE', ( #36328, #20672, #33275, #7909 ) ) ; +#4952 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4953 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -1.499998254703836900, -5.449999999999994000 ) ) ; +#4954 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -4.400000000000000400 ) ) ; +#4955 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.837630800822890800E-016 ) ) ; +#4956 = ORIENTED_EDGE ( 'NONE', *, *, #17649, .T. ) ; +#4957 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4958 = EDGE_CURVE ( 'NONE', #23748, #25930, #31967, .T. ) ; +#4959 = ORIENTED_EDGE ( 'NONE', *, *, #31878, .F. ) ; +#4960 = VERTEX_POINT ( 'NONE', #37058 ) ; +#4961 = LINE ( 'NONE', #20967, #27711 ) ; +#4962 = ORIENTED_EDGE ( 'NONE', *, *, #654, .T. ) ; +#4963 = PRESENTATION_STYLE_ASSIGNMENT (( #24323 ) ) ; +#4964 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003000, 0.2800017452961687200, -6.150000000000000400 ) ) ; +#4965 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4966 = CYLINDRICAL_SURFACE ( 'NONE', #708, 0.3000000000000003800 ) ; +#4967 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4968 = EDGE_CURVE ( 'NONE', #21528, #11715, #29945, .T. ) ; +#4969 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13053 ), #15565 ) ; +#4970 = FACE_OUTER_BOUND ( 'NONE', #4795, .T. ) ; +#4971 = VERTEX_POINT ( 'NONE', #20861 ) ; +#4972 = FACE_OUTER_BOUND ( 'NONE', #36911, .T. ) ; +#4973 = EDGE_LOOP ( 'NONE', ( #5379, #18880, #11710, #6267 ) ) ; +#4974 = ORIENTED_EDGE ( 'NONE', *, *, #31836, .T. ) ; +#4975 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, 10.30000000000000100, -1.250000000000000000 ) ) ; +#4976 = STYLED_ITEM ( 'NONE', ( #30116 ), #15102 ) ; +#4977 = SURFACE_SIDE_STYLE ('',( #12582 ) ) ; +#4978 = ORIENTED_EDGE ( 'NONE', *, *, #16236, .T. ) ; +#4979 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14474 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33006, #16905, #13657 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4980 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4981 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4982 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20878, 'distance_accuracy_value', 'NONE'); +#4983 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4985 = AXIS2_PLACEMENT_3D ( 'NONE', #24798, #5397, #40986 ) ; +#4984 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41246 ), #25318 ) ; +#4986 = LINE ( 'NONE', #11319, #29749 ) ; +#4987 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4988 = CARTESIAN_POINT ( 'NONE', ( 4.770000000000131900, -0.2800000000000026400, -0.5000000000000879300 ) ) ; +#4990 = EDGE_CURVE ( 'NONE', #10178, #23482, #7733, .T. ) ; +#4989 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41778 ), #9298 ) ; +#4991 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#4992 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4993 = VECTOR ( 'NONE', #23539, 1000.000000000000000 ) ; +#4994 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4995 = LINE ( 'NONE', #30253, #25720 ) ; +#4996 = SURFACE_SIDE_STYLE ('',( #18887 ) ) ; +#4998 = AXIS2_PLACEMENT_3D ( 'NONE', #33277, #33122, #3607 ) ; +#4997 = AXIS2_PLACEMENT_3D ( 'NONE', #4367, #17671, #40363 ) ; +#4999 = AXIS2_PLACEMENT_3D ( 'NONE', #40406, #14315, #33521 ) ; +#5000 = EDGE_LOOP ( 'NONE', ( #18893, #40417, #29617, #24900, #40864, #41652, #18091, #25623, #41002, #18895, #30948, #12324, #27159, #20067, #19090, #6693, #28415, #12375, #18694, #16207, #22448, #25517, #25020, #34312, #16774, #32892, #3947, #32594, #13652, #14254, #34858, #3939, #26461, #38966, #41455, #32521, #8486, #40863, #2351, #812 ) ) ; +#5001 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5002 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5003 = ORIENTED_EDGE ( 'NONE', *, *, #4903, .T. ) ; +#5004 = ADVANCED_FACE ( 'NONE', ( #8201 ), #23932, .T. ) ; +#5005 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5006 = VECTOR ( 'NONE', #6337, 1000.000000000000000 ) ; +#5007 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5008 = VECTOR ( 'NONE', #34292, 1000.000000000000000 ) ; +#5009 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5010 = EDGE_LOOP ( 'NONE', ( #40208, #1526, #16640, #18464 ) ) ; +#5011 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998497600, -4.250000000000000000 ) ) ; +#5012 = ORIENTED_EDGE ( 'NONE', *, *, #10516, .T. ) ; +#5013 = ORIENTED_EDGE ( 'NONE', *, *, #30279, .T. ) ; +#5014 = PRESENTATION_STYLE_ASSIGNMENT (( #8236 ) ) ; +#5015 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.2800017452961673900, -7.150000000000001200 ) ) ; +#5016 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#5017 = ORIENTED_EDGE ( 'NONE', *, *, #24154, .F. ) ; +#5018 = SURFACE_SIDE_STYLE ('',( #27265 ) ) ; +#5019 = EDGE_CURVE ( 'NONE', #29191, #36101, #13784, .T. ) ; +#5020 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#5021 = FACE_OUTER_BOUND ( 'NONE', #46, .T. ) ; +#5022 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#5023 = PRESENTATION_STYLE_ASSIGNMENT (( #11741 ) ) ; +#5024 = FILL_AREA_STYLE_COLOUR ( '', #10694 ) ; +#5025 = EDGE_CURVE ( 'NONE', #26204, #25231, #23918, .T. ) ; +#5026 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5027 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5028 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.2999999999999999900, -1.400000000000000100 ) ) ; +#5029 = PLANE ( 'NONE', #6884 ) ; +#5030 = STYLED_ITEM ( 'NONE', ( #10624 ), #16619 ) ; +#5031 = FILL_AREA_STYLE_COLOUR ( '', #37866 ) ; +#5032 = VERTEX_POINT ( 'NONE', #8766 ) ; +#5033 = LINE ( 'NONE', #6846, #6061 ) ; +#5034 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -7.228014483236708400E-016 ) ) ; +#5035 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5036 = FACE_BOUND ( 'NONE', #33155, .T. ) ; +#5037 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5038 = ADVANCED_FACE ( 'NONE', ( #5718 ), #24505, .T. ) ; +#5039 = AXIS2_PLACEMENT_3D ( 'NONE', #26759, #30120, #20414 ) ; +#5040 = ORIENTED_EDGE ( 'NONE', *, *, #28811, .F. ) ; +#5041 = AXIS2_PLACEMENT_3D ( 'NONE', #8221, #17609, #36789 ) ; +#5042 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5043 = FACE_OUTER_BOUND ( 'NONE', #32406, .T. ) ; +#5044 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5045 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, 0.7071067811865483500 ) ) ; +#5046 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12021, 'distance_accuracy_value', 'NONE'); +#5047 = SURFACE_STYLE_FILL_AREA ( #13723 ) ; +#5049 = EDGE_CURVE ( 'NONE', #40611, #29935, #1701, .T. ) ; +#5048 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29663 ) ) ; +#5050 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -3.799999999999999800 ) ) ; +#5051 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#5052 = ORIENTED_EDGE ( 'NONE', *, *, #10136, .F. ) ; +#5053 = EDGE_LOOP ( 'NONE', ( #31932, #2217, #22815 ) ) ; +#5054 = EDGE_LOOP ( 'NONE', ( #13191, #32904, #1354, #13060 ) ) ; +#5055 = VECTOR ( 'NONE', #33555, 1000.000000000000000 ) ; +#5056 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5057 = FILL_AREA_STYLE ('',( #24418 ) ) ; +#5058 = ADVANCED_FACE ( 'NONE', ( #6208 ), #19886, .F. ) ; +#5059 = AXIS2_PLACEMENT_3D ( 'NONE', #29821, #639, #3821 ) ; +#5060 = PLANE ( 'NONE', #38614 ) ; +#5061 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5062 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4065 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10684, #33301, #17207 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5063 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19758, 'distance_accuracy_value', 'NONE'); +#5064 = SURFACE_SIDE_STYLE ('',( #27151 ) ) ; +#5065 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15091 ), #9370 ) ; +#5066 = ORIENTED_EDGE ( 'NONE', *, *, #22929, .T. ) ; +#5067 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5068 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.499998254703822900, -6.699999999999994000 ) ) ; +#5069 = AXIS2_PLACEMENT_3D ( 'NONE', #19369, #15673, #41384 ) ; +#5070 = SURFACE_STYLE_FILL_AREA ( #39782 ) ; +#5071 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#5072 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5073 = CARTESIAN_POINT ( 'NONE', ( -3.314492898064261600, -0.07499999999999999700, -0.07363105974681953500 ) ) ; +#5074 = VECTOR ( 'NONE', #1443, 1000.000000000000100 ) ; +#5075 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5076 = PRESENTATION_STYLE_ASSIGNMENT (( #25815 ) ) ; +#5077 = CARTESIAN_POINT ( 'NONE', ( -3.315809924354953700, -0.3499999999999811000, -1.649999999999999500 ) ) ; +#5078 = ORIENTED_EDGE ( 'NONE', *, *, #5234, .F. ) ; +#5079 = SURFACE_STYLE_FILL_AREA ( #24865 ) ; +#5080 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5081 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5082 = ORIENTED_EDGE ( 'NONE', *, *, #18355, .T. ) ; +#5083 = EDGE_LOOP ( 'NONE', ( #22346, #14694, #7180, #26389 ) ) ; +#5084 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5085 = EDGE_CURVE ( 'NONE', #21253, #6139, #2714, .T. ) ; +#5086 = VECTOR ( 'NONE', #40512, 1000.000000000000000 ) ; +#5087 = FILL_AREA_STYLE ('',( #21087 ) ) ; +#5088 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5089 = VECTOR ( 'NONE', #27257, 1000.000000000000000 ) ; +#5090 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5091 = ORIENTED_EDGE ( 'NONE', *, *, #7556, .F. ) ; +#5092 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5093 = ORIENTED_EDGE ( 'NONE', *, *, #7296, .F. ) ; +#5095 = ADVANCED_FACE ( 'NONE', ( #7191 ), #31251, .F. ) ; +#5094 = EDGE_LOOP ( 'NONE', ( #30142, #2798, #1004, #9984, #3420 ) ) ; +#5096 = EDGE_CURVE ( 'NONE', #19647, #9770, #9703, .T. ) ; +#5097 = PLANE ( 'NONE', #20441 ) ; +#5098 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5099 = SURFACE_SIDE_STYLE ('',( #22931 ) ) ; +#5100 = CARTESIAN_POINT ( 'NONE', ( 3.120369891805397300, 0.2800000000000000800, -4.400000000000001200 ) ) ; +#5101 = EDGE_CURVE ( 'NONE', #16710, #25807, #16778, .T. ) ; +#5102 = ORIENTED_EDGE ( 'NONE', *, *, #13139, .T. ) ; +#5103 = FILL_AREA_STYLE_COLOUR ( '', #6467 ) ; +#5104 = VECTOR ( 'NONE', #3490, 1000.000000000000000 ) ; +#5105 = ORIENTED_EDGE ( 'NONE', *, *, #2406, .F. ) ; +#5106 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #827 ), #9407 ) ; +#5107 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5108 = CYLINDRICAL_SURFACE ( 'NONE', #36737, 0.2000017452961698200 ) ; +#5109 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5110 = STYLED_ITEM ( 'NONE', ( #28459 ), #12469 ) ; +#5111 = VECTOR ( 'NONE', #16310, 1000.000000000000000 ) ; +#5113 = EDGE_CURVE ( 'NONE', #972, #41089, #17326, .T. ) ; +#5112 = STYLED_ITEM ( 'NONE', ( #3421 ), #24135 ) ; +#5114 = CARTESIAN_POINT ( 'NONE', ( 4.454963661008731500, -0.01961992375106462100, -7.350000000000001400 ) ) ; +#5115 = VECTOR ( 'NONE', #11508, 1000.000000000000000 ) ; +#5117 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41213 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30192, #36832, #7854 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5116 = AXIS2_PLACEMENT_3D ( 'NONE', #16363, #38942, #732 ) ; +#5118 = AXIS2_PLACEMENT_3D ( 'NONE', #11948, #31609, #34861 ) ; +#5119 = ORIENTED_EDGE ( 'NONE', *, *, #5049, .T. ) ; +#5120 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5121 = SURFACE_STYLE_FILL_AREA ( #24136 ) ; +#5122 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33285 ) ) ; +#5123 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25273 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13620, #36375, #16601 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5124 = SURFACE_STYLE_USAGE ( .BOTH. , #40698 ) ; +#5125 = ORIENTED_EDGE ( 'NONE', *, *, #20791, .F. ) ; +#5126 = LINE ( 'NONE', #33194, #21327 ) ; +#5127 = FILL_AREA_STYLE_COLOUR ( '', #10482 ) ; +#5128 = FACE_OUTER_BOUND ( 'NONE', #3594, .T. ) ; +#5129 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003900, 0.3000000000000148700, -3.099999999999998800 ) ) ; +#5130 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.2300017452961680700, -5.175000000000000700 ) ) ; +#5131 = VERTEX_POINT ( 'NONE', #5132 ) ; +#5132 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703821100, -5.700000000000000200 ) ) ; +#5133 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5134 = LINE ( 'NONE', #1522, #41000 ) ; +#5135 = ORIENTED_EDGE ( 'NONE', *, *, #31286, .T. ) ; +#5136 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5137 = FILL_AREA_STYLE ('',( #37613 ) ) ; +#5138 = CARTESIAN_POINT ( 'NONE', ( -3.178333333333019300, -0.2999999999999999900, -0.06128090415826408600 ) ) ; +#5139 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13563, 'distance_accuracy_value', 'NONE'); +#5140 = FILL_AREA_STYLE ('',( #34515 ) ) ; +#5141 = EDGE_LOOP ( 'NONE', ( #40790, #18133, #724, #41206 ) ) ; +#5142 = VERTEX_POINT ( 'NONE', #31121 ) ; +#5144 = ADVANCED_FACE ( 'NONE', ( #10192 ), #26943, .F. ) ; +#5143 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5145 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760845000E-015 ) ) ; +#5146 = VECTOR ( 'NONE', #30742, 1000.000000000000000 ) ; +#5147 = LINE ( 'NONE', #37413, #4664 ) ; +#5148 = SURFACE_STYLE_USAGE ( .BOTH. , #24674 ) ; +#5149 = VECTOR ( 'NONE', #25326, 1000.000000000000000 ) ; +#5150 = FILL_AREA_STYLE ('',( #17183 ) ) ; +#5151 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5152 = EDGE_CURVE ( 'NONE', #30344, #38714, #24924, .T. ) ; +#5153 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5154 = SURFACE_SIDE_STYLE ('',( #36677 ) ) ; +#5155 = DIRECTION ( 'NONE', ( -4.336808689942015400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5156 = EDGE_CURVE ( 'NONE', #11756, #25038, #12224, .T. ) ; +#5157 = STYLED_ITEM ( 'NONE', ( #30819 ), #23703 ) ; +#5158 = ORIENTED_EDGE ( 'NONE', *, *, #23486, .F. ) ; +#5159 = SURFACE_SIDE_STYLE ('',( #24180 ) ) ; +#5160 = SURFACE_STYLE_FILL_AREA ( #13687 ) ; +#5161 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5162 = STYLED_ITEM ( 'NONE', ( #199 ), #22614 ) ; +#5163 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5164 = CARTESIAN_POINT ( 'NONE', ( 3.121349557030700600, 0.3500000000000000900, -1.617954202358003100 ) ) ; +#5165 = ORIENTED_EDGE ( 'NONE', *, *, #19897, .T. ) ; +#5166 = SURFACE_STYLE_FILL_AREA ( #56 ) ; +#5167 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41460 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28436, #18852, #31679 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5168 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5169 = DIRECTION ( 'NONE', ( 6.056601140521967900E-031, 1.854100822792756000E-045, 1.000000000000000000 ) ) ; +#5170 = ORIENTED_EDGE ( 'NONE', *, *, #22963, .F. ) ; +#5171 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27632 ) ) ; +#5172 = STYLED_ITEM ( 'NONE', ( #16897 ), #18415 ) ; +#5173 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703822500, -2.399999999999999500 ) ) ; +#5174 = ORIENTED_EDGE ( 'NONE', *, *, #37441, .T. ) ; +#5175 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29791 ) ) ; +#5176 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5178 = EDGE_CURVE ( 'NONE', #14378, #38105, #41517, .T. ) ; +#5177 = AXIS2_PLACEMENT_3D ( 'NONE', #19175, #29004, #32545 ) ; +#5179 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5180 = ORIENTED_EDGE ( 'NONE', *, *, #14628, .T. ) ; +#5181 = SURFACE_SIDE_STYLE ('',( #32309 ) ) ; +#5182 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5183 = EDGE_LOOP ( 'NONE', ( #39585, #39496, #28793, #15046 ) ) ; +#5184 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3039 ), #6004 ) ; +#5185 = FILL_AREA_STYLE ('',( #14931 ) ) ; +#5187 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34376 ), #28992 ) ; +#5186 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3754 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1759, #37583, #24337 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5188 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5189 = SURFACE_STYLE_FILL_AREA ( #19668 ) ; +#5190 = SURFACE_SIDE_STYLE ('',( #39106 ) ) ; +#5191 = MANIFOLD_SOLID_BREP ( '1-1-solid3', #12441 ) ; +#5192 = CIRCLE ( 'NONE', #9422, 0.1000000000000009100 ) ; +#5193 = FILL_AREA_STYLE_COLOUR ( '', #7430 ) ; +#5194 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 2.341948692522932000E-016 ) ) ; +#5195 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.499998254703824400, -6.299999999999993600 ) ) ; +#5196 = ORIENTED_EDGE ( 'NONE', *, *, #8280, .T. ) ; +#5197 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244521200E-016 ) ) ; +#5198 = DIRECTION ( 'NONE', ( 6.056601140521965300E-031, -1.987721548152418300E-045, -1.000000000000000000 ) ) ; +#5199 = SURFACE_STYLE_USAGE ( .BOTH. , #21068 ) ; +#5200 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5201 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5202 = CARTESIAN_POINT ( 'NONE', ( -4.720380236995682200, 0.2800000000000028000, -0.8400000000000000800 ) ) ; +#5203 = VECTOR ( 'NONE', #303, 1000.000000000000000 ) ; +#5204 = SURFACE_STYLE_USAGE ( .BOTH. , #21630 ) ; +#5205 = ORIENTED_EDGE ( 'NONE', *, *, #18103, .T. ) ; +#5206 = EDGE_CURVE ( 'NONE', #27771, #2997, #5682, .T. ) ; +#5207 = VERTEX_POINT ( 'NONE', #3146 ) ; +#5208 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#5209 = ORIENTED_EDGE ( 'NONE', *, *, #18300, .F. ) ; +#5210 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664844900, -1.080001745296171900, -6.850000000000000500 ) ) ; +#5211 = ORIENTED_EDGE ( 'NONE', *, *, #40910, .T. ) ; +#5212 = ADVANCED_FACE ( 'NONE', ( #17819 ), #17281, .T. ) ; +#5213 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5214 = EDGE_CURVE ( 'NONE', #20982, #18383, #19806, .T. ) ; +#5215 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37694 ), #24161 ) ; +#5216 = LINE ( 'NONE', #8818, #20995 ) ; +#5217 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -10.30000000000000100, -1.250000000000000000 ) ) ; +#5218 = FILL_AREA_STYLE_COLOUR ( '', #11817 ) ; +#5219 = LINE ( 'NONE', #41109, #22415 ) ; +#5220 = ORIENTED_EDGE ( 'NONE', *, *, #32298, .F. ) ; +#5221 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#5222 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28456, 'distance_accuracy_value', 'NONE'); +#5223 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5224 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17692 ), #13890 ) ; +#5225 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5226 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5227 = FILL_AREA_STYLE ('',( #34047 ) ) ; +#5228 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20426 ), #13893 ) ; +#5231 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29290 ), #31470 ) ; +#5230 = FILL_AREA_STYLE_COLOUR ( '', #33816 ) ; +#5229 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7410 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14720, #40826, #27992 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5232 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.08000174529616772800, -7.150000000000001200 ) ) ; +#5233 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#5234 = EDGE_CURVE ( 'NONE', #34067, #16474, #24886, .T. ) ; +#5235 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5236 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.279999999999999800, -0.2000017452961698200 ) ) ; +#5237 = CARTESIAN_POINT ( 'NONE', ( -4.425000000000014000, -1.999998254703822900, -6.600000000000000500 ) ) ; +#5239 = STYLED_ITEM ( 'NONE', ( #28718 ), #1697 ) ; +#5238 = STYLED_ITEM ( 'NONE', ( #9284 ), #26099 ) ; +#5240 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 10.30000000000000100, -1.250000000000000000 ) ) ; +#5241 = ORIENTED_EDGE ( 'NONE', *, *, #33115, .T. ) ; +#5242 = CARTESIAN_POINT ( 'NONE', ( 3.237718385397935400, 0.2999999999999999900, 0.7155313145785737700 ) ) ; +#5243 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000008500, -1.999998254703822000, -2.550738490052338700 ) ) ; +#5244 = VECTOR ( 'NONE', #19909, 1000.000000000000000 ) ; +#5245 = VERTEX_POINT ( 'NONE', #31663 ) ; +#5246 = ADVANCED_FACE ( 'NONE', ( #20341 ), #19126, .T. ) ; +#5247 = ORIENTED_EDGE ( 'NONE', *, *, #27990, .T. ) ; +#5248 = EDGE_LOOP ( 'NONE', ( #33386, #38864, #13131, #25575 ) ) ; +#5249 = ORIENTED_EDGE ( 'NONE', *, *, #3990, .F. ) ; +#5250 = CIRCLE ( 'NONE', #11232, 0.3000000000000001000 ) ; +#5251 = LINE ( 'NONE', #5383, #40132 ) ; +#5252 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5253 = SURFACE_SIDE_STYLE ('',( #27843 ) ) ; +#5254 = PRESENTATION_STYLE_ASSIGNMENT (( #5685 ) ) ; +#5255 = SURFACE_STYLE_USAGE ( .BOTH. , #24799 ) ; +#5256 = ADVANCED_FACE ( 'NONE', ( #28367 ), #12306, .F. ) ; +#5257 = PRESENTATION_STYLE_ASSIGNMENT (( #9620 ) ) ; +#5258 = SURFACE_STYLE_FILL_AREA ( #5647 ) ; +#5259 = FILL_AREA_STYLE_COLOUR ( '', #40760 ) ; +#5260 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#5261 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.710505431213765500E-016, 1.000000000000000000 ) ) ; +#5262 = SURFACE_SIDE_STYLE ('',( #23875 ) ) ; +#5263 = SURFACE_SIDE_STYLE ('',( #6362 ) ) ; +#5264 = EDGE_CURVE ( 'NONE', #19867, #14492, #7157, .T. ) ; +#5265 = PRESENTATION_STYLE_ASSIGNMENT (( #19649 ) ) ; +#5266 = ORIENTED_EDGE ( 'NONE', *, *, #18324, .T. ) ; +#5267 = EDGE_CURVE ( 'NONE', #24870, #22252, #14247, .T. ) ; +#5268 = CARTESIAN_POINT ( 'NONE', ( 3.864496143150409200, 0.5898935071985682600, -4.401287438601851700 ) ) ; +#5269 = SURFACE_STYLE_FILL_AREA ( #3415 ) ; +#5270 = SURFACE_STYLE_FILL_AREA ( #5087 ) ; +#5271 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5272 = VERTEX_POINT ( 'NONE', #36046 ) ; +#5273 = SURFACE_SIDE_STYLE ('',( #8647 ) ) ; +#5274 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5275 = CIRCLE ( 'NONE', #664, 0.1000000000000000500 ) ; +#5276 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5277 = LINE ( 'NONE', #35897, #36153 ) ; +#5278 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34387, 'distance_accuracy_value', 'NONE'); +#5279 = FILL_AREA_STYLE_COLOUR ( '', #14148 ) ; +#5280 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, 0.6000000000000000900, -3.250000000000000400 ) ) ; +#5281 = AXIS2_PLACEMENT_3D ( 'NONE', #12466, #25635, #2645 ) ; +#5282 = VERTEX_POINT ( 'NONE', #19395 ) ; +#5284 = VECTOR ( 'NONE', #20561, 1000.000000000000000 ) ; +#5283 = CONICAL_SURFACE ( 'NONE', #1932, 1.493004880385252500, 0.9597148367210011100 ) ; +#5285 = ORIENTED_EDGE ( 'NONE', *, *, #11018, .F. ) ; +#5286 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#5287 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31038 ) ) ; +#5288 = STYLED_ITEM ( 'NONE', ( #18562 ), #11558 ) ; +#5289 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.139998254717359900, -6.299996877890552400 ) ) ; +#5290 = CIRCLE ( 'NONE', #35, 0.1000000000000002600 ) ; +#5293 = EDGE_CURVE ( 'NONE', #33221, #37386, #5643, .T. ) ; +#5292 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.2800017452961673900, -7.150000000000001200 ) ) ; +#5291 = AXIS2_PLACEMENT_3D ( 'NONE', #41860, #13186, #3186 ) ; +#5294 = VERTEX_POINT ( 'NONE', #348 ) ; +#5295 = FILL_AREA_STYLE ('',( #37914 ) ) ; +#5297 = ORIENTED_EDGE ( 'NONE', *, *, #40342, .T. ) ; +#5296 = ADVANCED_FACE ( 'NONE', ( #13196 ), #29371, .F. ) ; +#5298 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 2.322941965694886000, 0.6999999999999999600 ) ) ; +#5299 = PLANE ( 'NONE', #13026 ) ; +#5301 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3928 ) ) ; +#5300 = AXIS2_PLACEMENT_3D ( 'NONE', #5202, #34578, #8851 ) ; +#5302 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5303 = ORIENTED_EDGE ( 'NONE', *, *, #33804, .F. ) ; +#5304 = AXIS2_PLACEMENT_3D ( 'NONE', #23268, #29470, #35994 ) ; +#5305 = FACE_OUTER_BOUND ( 'NONE', #28512, .T. ) ; +#5306 = FILL_AREA_STYLE_COLOUR ( '', #26354 ) ; +#5307 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33469 ) ) ; +#5308 = FILL_AREA_STYLE_COLOUR ( '', #25154 ) ; +#5309 = ORIENTED_EDGE ( 'NONE', *, *, #8659, .F. ) ; +#5310 = ORIENTED_EDGE ( 'NONE', *, *, #33339, .T. ) ; +#5311 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -1.499998254703825300, -5.449999999999994000 ) ) ; +#5312 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5313 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.730380239188924900, -0.8400209439508702400 ) ) ; +#5314 = CYLINDRICAL_SURFACE ( 'NONE', #34565, 0.1499999999998701300 ) ; +#5315 = ORIENTED_EDGE ( 'NONE', *, *, #15428, .F. ) ; +#5316 = PLANE ( 'NONE', #18638 ) ; +#5317 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5318 = FACE_OUTER_BOUND ( 'NONE', #27664, .T. ) ; +#5319 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5320 = ORIENTED_EDGE ( 'NONE', *, *, #1608, .T. ) ; +#5321 = FILL_AREA_STYLE_COLOUR ( '', #36288 ) ; +#5322 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5323 = ORIENTED_EDGE ( 'NONE', *, *, #14491, .F. ) ; +#5324 = PRESENTATION_STYLE_ASSIGNMENT (( #22474 ) ) ; +#5325 = EDGE_CURVE ( 'NONE', #5294, #12030, #6130, .T. ) ; +#5326 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19004, 'distance_accuracy_value', 'NONE'); +#5327 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5328 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5329 = VECTOR ( 'NONE', #16329, 1000.000000000000000 ) ; +#5330 = PRESENTATION_STYLE_ASSIGNMENT (( #12908 ) ) ; +#5331 = EDGE_CURVE ( 'NONE', #21086, #21656, #31735, .T. ) ; +#5332 = VECTOR ( 'NONE', #12931, 1000.000000000000000 ) ; +#5333 = TOROIDAL_SURFACE ( 'NONE', #13254, 1.200001745296169300, 0.2000017452961698200 ) ; +#5334 = FILL_AREA_STYLE ('',( #37816 ) ) ; +#5335 = VERTEX_POINT ( 'NONE', #3683 ) ; +#5336 = SURFACE_SIDE_STYLE ('',( #36457 ) ) ; +#5337 = LINE ( 'NONE', #20704, #38673 ) ; +#5338 = EDGE_CURVE ( 'NONE', #25992, #20912, #35965, .T. ) ; +#5339 = VECTOR ( 'NONE', #15297, 1000.000000000000000 ) ; +#5340 = STYLED_ITEM ( 'NONE', ( #16649 ), #16883 ) ; +#5341 = ORIENTED_EDGE ( 'NONE', *, *, #6644, .F. ) ; +#5342 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5343 = VECTOR ( 'NONE', #15846, 999.9999999999998900 ) ; +#5344 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5345 = ORIENTED_EDGE ( 'NONE', *, *, #19866, .F. ) ; +#5346 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26100 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10272, #26988, #33463 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5347 = ADVANCED_FACE ( 'NONE', ( #15214 ), #32354, .T. ) ; +#5348 = CARTESIAN_POINT ( 'NONE', ( -1.400000000000000800, 1.630001745296169500, -1.650000000000000400 ) ) ; +#5349 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 0.1000000000000131600, -1.749999999999999800 ) ) ; +#5350 = AXIS2_PLACEMENT_3D ( 'NONE', #35069, #2766, #5978 ) ; +#5351 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5353 = EDGE_CURVE ( 'NONE', #29937, #22087, #11658, .T. ) ; +#5352 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5466 ), #10478 ) ; +#5354 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 2.322941965694886000, -1.249999999999999800 ) ) ; +#5355 = SURFACE_STYLE_USAGE ( .BOTH. , #8863 ) ; +#5356 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5357 = LINE ( 'NONE', #9617, #29092 ) ; +#5358 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5360 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39181 ), #7517 ) ; +#5359 = STYLED_ITEM ( 'NONE', ( #40695 ), #28197 ) ; +#5361 = AXIS2_PLACEMENT_3D ( 'NONE', #40837, #34223, #37458 ) ; +#5362 = ORIENTED_EDGE ( 'NONE', *, *, #10651, .T. ) ; +#5363 = SURFACE_SIDE_STYLE ('',( #38533 ) ) ; +#5364 = LINE ( 'NONE', #37679, #1351 ) ; +#5365 = CARTESIAN_POINT ( 'NONE', ( -2.149999999999999900, -1.499998254703822900, -6.699999999999994000 ) ) ; +#5366 = CARTESIAN_POINT ( 'NONE', ( -4.620380239188926400, 0.2800000000000027500, -0.8400209439508702400 ) ) ; +#5367 = ORIENTED_EDGE ( 'NONE', *, *, #30080, .T. ) ; +#5368 = STYLED_ITEM ( 'NONE', ( #10818 ), #8007 ) ; +#5369 = ORIENTED_EDGE ( 'NONE', *, *, #31574, .T. ) ; +#5370 = ORIENTED_EDGE ( 'NONE', *, *, #24121, .T. ) ; +#5371 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17165, 'distance_accuracy_value', 'NONE'); +#5372 = SURFACE_STYLE_USAGE ( .BOTH. , #24464 ) ; +#5373 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#5374 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5375 = FACE_OUTER_BOUND ( 'NONE', #38354, .T. ) ; +#5376 = FACE_OUTER_BOUND ( 'NONE', #41001, .T. ) ; +#5377 = ORIENTED_EDGE ( 'NONE', *, *, #17564, .F. ) ; +#5378 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#5379 = ORIENTED_EDGE ( 'NONE', *, *, #40995, .F. ) ; +#5380 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5381 = CIRCLE ( 'NONE', #27768, 0.2999999999999999300 ) ; +#5382 = PRESENTATION_STYLE_ASSIGNMENT (( #13922 ) ) ; +#5383 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#5384 = FACE_OUTER_BOUND ( 'NONE', #18044, .T. ) ; +#5385 = FILL_AREA_STYLE_COLOUR ( '', #952 ) ; +#5386 = VECTOR ( 'NONE', #25331, 1000.000000000000000 ) ; +#5387 = EDGE_LOOP ( 'NONE', ( #40988, #23193, #30713, #41433 ) ) ; +#5388 = SURFACE_STYLE_USAGE ( .BOTH. , #40835 ) ; +#5389 = LINE ( 'NONE', #4584, #38724 ) ; +#5390 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33247, 'distance_accuracy_value', 'NONE'); +#5391 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5392 = EDGE_CURVE ( 'NONE', #30894, #19017, #32369, .T. ) ; +#5393 = EDGE_LOOP ( 'NONE', ( #11143, #54, #38791, #2340 ) ) ; +#5394 = VECTOR ( 'NONE', #7230, 1000.000000000000000 ) ; +#5395 = VECTOR ( 'NONE', #39972, 1000.000000000000000 ) ; +#5396 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -2.031000000000000600, -3.814459358809376300 ) ) ; +#5397 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, -1.000000000000000000, -1.414176746720224900E-016 ) ) ; +#5398 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5399 = EDGE_CURVE ( 'NONE', #31912, #20276, #9134, .T. ) ; +#5400 = ORIENTED_EDGE ( 'NONE', *, *, #37991, .T. ) ; +#5401 = FACE_OUTER_BOUND ( 'NONE', #16799, .T. ) ; +#5402 = CIRCLE ( 'NONE', #30804, 0.1000000000000001600 ) ; +#5403 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -2.031000000000000600, -2.904459358809380100 ) ) ; +#5404 = SURFACE_STYLE_USAGE ( .BOTH. , #12017 ) ; +#5405 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31289, 'distance_accuracy_value', 'NONE'); +#5406 = FILL_AREA_STYLE_COLOUR ( '', #5871 ) ; +#5407 = STYLED_ITEM ( 'NONE', ( #15899 ), #22044 ) ; +#5408 = EDGE_LOOP ( 'NONE', ( #13455, #21459, #23698, #17653, #34449, #36189, #24206, #38137, #29917, #10751, #38780, #37660 ) ) ; +#5409 = VERTEX_POINT ( 'NONE', #10727 ) ; +#5410 = CIRCLE ( 'NONE', #29039, 0.1999999999999996500 ) ; +#5411 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31906 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4458, #27072, #27329 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5412 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5413 = SURFACE_STYLE_FILL_AREA ( #41217 ) ; +#5414 = CARTESIAN_POINT ( 'NONE', ( 3.946177312342037200, 0.5380239544519859200, -4.411952535465530900 ) ) ; +#5415 = PRESENTATION_STYLE_ASSIGNMENT (( #6021 ) ) ; +#5416 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, -1.600000000000000100 ) ) ; +#5417 = LINE ( 'NONE', #15476, #15520 ) ; +#5418 = VERTEX_POINT ( 'NONE', #33208 ) ; +#5419 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 0.3500000000000000300, -1.300000000000000000 ) ) ; +#5420 = ORIENTED_EDGE ( 'NONE', *, *, #33088, .T. ) ; +#5421 = PRESENTATION_STYLE_ASSIGNMENT (( #28485 ) ) ; +#5422 = CARTESIAN_POINT ( 'NONE', ( -0.6500000000000000200, -1.499998254703827700, -6.699999999999994000 ) ) ; +#5423 = ADVANCED_FACE ( 'NONE', ( #2640 ), #37446, .F. ) ; +#5425 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28690 ) ) ; +#5424 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20634 ) ) ; +#5426 = FILL_AREA_STYLE_COLOUR ( '', #28836 ) ; +#5427 = STYLED_ITEM ( 'NONE', ( #17999 ), #41542 ) ; +#5428 = CARTESIAN_POINT ( 'NONE', ( 3.846156164834738400, 0.6165030250713639000, -4.400260404654702000 ) ) ; +#5429 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -1.149999999999999900 ) ) ; +#5430 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14244, 'distance_accuracy_value', 'NONE'); +#5432 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38144 ) ) ; +#5431 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1373 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36420, #10260, #19654 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5434 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21436 ), #11904 ) ; +#5433 = CARTESIAN_POINT ( 'NONE', ( -3.340721027416471600, 0.2673789813097241500, -1.600000000000000800 ) ) ; +#5435 = CARTESIAN_POINT ( 'NONE', ( -2.985630157013561700, -0.5999999999999999800, -1.930000000000001000 ) ) ; +#5436 = FILL_AREA_STYLE ('',( #21156 ) ) ; +#5437 = DIRECTION ( 'NONE', ( 0.5737535661042597600, -0.0000000000000000000, 0.8190279881558657500 ) ) ; +#5438 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5439 = VECTOR ( 'NONE', #15868, 1000.000000000000000 ) ; +#5440 = VERTEX_POINT ( 'NONE', #10584 ) ; +#5441 = SURFACE_STYLE_USAGE ( .BOTH. , #1966 ) ; +#5442 = CARTESIAN_POINT ( 'NONE', ( -3.095000000000000200, -0.07499999999999999700, -0.3254101966250000900 ) ) ; +#5443 = SURFACE_SIDE_STYLE ('',( #24605 ) ) ; +#5444 = EDGE_LOOP ( 'NONE', ( #3094, #15358, #30675, #14157, #13632, #23262, #22527, #40370 ) ) ; +#5445 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.2300017452961684900, -6.325000000000000200 ) ) ; +#5446 = LINE ( 'NONE', #22466, #18602 ) ; +#5447 = EDGE_LOOP ( 'NONE', ( #39654, #36647, #1528, #12414 ) ) ; +#5448 = ORIENTED_EDGE ( 'NONE', *, *, #18664, .F. ) ; +#5449 = CIRCLE ( 'NONE', #11047, 0.2999999999999999300 ) ; +#5450 = ORIENTED_EDGE ( 'NONE', *, *, #4968, .F. ) ; +#5451 = LINE ( 'NONE', #39355, #7462 ) ; +#5452 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.380001745296129100, -6.031671842700004200 ) ) ; +#5453 = EDGE_LOOP ( 'NONE', ( #3908, #27835, #39885, #34965 ) ) ; +#5454 = SURFACE_STYLE_USAGE ( .BOTH. , #11926 ) ; +#5455 = SURFACE_STYLE_FILL_AREA ( #17175 ) ; +#5456 = EDGE_LOOP ( 'NONE', ( #13942, #23229, #16150, #4735 ) ) ; +#5458 = ORIENTED_EDGE ( 'NONE', *, *, #4038, .T. ) ; +#5457 = ADVANCED_FACE ( 'NONE', ( #17784 ), #20243, .F. ) ; +#5459 = EDGE_CURVE ( 'NONE', #1731, #27440, #16739, .T. ) ; +#5460 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#5461 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37134, 'distance_accuracy_value', 'NONE'); +#5462 = DIRECTION ( 'NONE', ( 6.056601140521967900E-031, -1.591898209559296700E-045, -1.000000000000000000 ) ) ; +#5463 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -5.475000000000000500 ) ) ; +#5464 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5465 = EDGE_CURVE ( 'NONE', #28059, #36673, #38450, .T. ) ; +#5466 = STYLED_ITEM ( 'NONE', ( #35366 ), #23804 ) ; +#5467 = SURFACE_STYLE_USAGE ( .BOTH. , #18215 ) ; +#5468 = ORIENTED_EDGE ( 'NONE', *, *, #20056, .T. ) ; +#5469 = AXIS2_PLACEMENT_3D ( 'NONE', #4310, #20459, #10376 ) ; +#5470 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#5471 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -2.710505431213761100E-017, -4.549999999999999800 ) ) ; +#5472 = ADVANCED_FACE ( 'NONE', ( #28851 ), #11653, .F. ) ; +#5473 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16308 ) ) ; +#5474 = SURFACE_SIDE_STYLE ('',( #5079 ) ) ; +#5475 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5476 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26162, 'distance_accuracy_value', 'NONE'); +#5478 = CIRCLE ( 'NONE', #8425, 0.1000000000000002600 ) ; +#5477 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9780 ), #4684 ) ; +#5479 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5480 = ORIENTED_EDGE ( 'NONE', *, *, #7239, .F. ) ; +#5481 = STYLED_ITEM ( 'NONE', ( #24983 ), #18614 ) ; +#5482 = PLANE ( 'NONE', #5118 ) ; +#5483 = PRESENTATION_STYLE_ASSIGNMENT (( #28176 ) ) ; +#5485 = STYLED_ITEM ( 'NONE', ( #35431 ), #5457 ) ; +#5484 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3316 ), #25013 ) ; +#5486 = CARTESIAN_POINT ( 'NONE', ( 3.429999999999999700, -1.380001745296125100, -6.031671842700004200 ) ) ; +#5487 = CLOSED_SHELL ( 'NONE', ( #15179, #21278, #14016, #20184, #22058, #37090 ) ) ; +#5488 = FACE_OUTER_BOUND ( 'NONE', #19005, .T. ) ; +#5491 = EDGE_CURVE ( 'NONE', #30432, #6852, #10606, .T. ) ; +#5490 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5489 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23382 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30793, #27402, #11012 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5492 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.499998254703838600, -5.049999999999993600 ) ) ; +#5493 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#5494 = VERTEX_POINT ( 'NONE', #15351 ) ; +#5495 = CARTESIAN_POINT ( 'NONE', ( -4.407583426132275100, -1.982581680836083400, -2.504658566907515600 ) ) ; +#5496 = VERTEX_POINT ( 'NONE', #37925 ) ; +#5497 = FACE_OUTER_BOUND ( 'NONE', #9234, .T. ) ; +#5498 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.07499999999999998300, -0.008031980578130947000 ) ) ; +#5499 = EDGE_LOOP ( 'NONE', ( #41011, #14071, #7903, #10951 ) ) ; +#5501 = STYLED_ITEM ( 'NONE', ( #34841 ), #1337 ) ; +#5500 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14964 ) ) ; +#5502 = FILL_AREA_STYLE_COLOUR ( '', #33570 ) ; +#5503 = SURFACE_STYLE_FILL_AREA ( #21888 ) ; +#5504 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#5505 = FILL_AREA_STYLE_COLOUR ( '', #30019 ) ; +#5506 = PRESENTATION_STYLE_ASSIGNMENT (( #27913 ) ) ; +#5507 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5508 = EDGE_LOOP ( 'NONE', ( #30353, #30393, #13923, #18298, #19069, #41541, #21501, #9800, #23725, #16589, #20003, #1684, #3310, #14232, #4356, #8991, #34236, #38806, #26016, #24833, #27226, #33262, #36397, #32851, #18073, #4978, #10420, #41441, #12381, #17877, #25649, #11807, #12169, #8392, #193, #38316, #31937, #8110, #7522, #25817, #10742, #30500, #21947, #36877, #34430, #37030, #19514, #17990, #39403, #4225, #5362, #22766, #8057, #34308, #27828, #36683, #4531, #18328 ) ) ; +#5509 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5510 = PRESENTATION_STYLE_ASSIGNMENT (( #7002 ) ) ; +#5511 = ORIENTED_EDGE ( 'NONE', *, *, #31345, .T. ) ; +#5512 = VERTEX_POINT ( 'NONE', #40894 ) ; +#5513 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -500000.0000000000600, -3.214459358691026800 ) ) ; +#5514 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5515 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003900, 0.3000000000000149800, -2.095470210943120000 ) ) ; +#5516 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5517 = ORIENTED_EDGE ( 'NONE', *, *, #36643, .F. ) ; +#5518 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5519 = FILL_AREA_STYLE ('',( #12404 ) ) ; +#5520 = ADVANCED_FACE ( 'NONE', ( #10110 ), #21874, .F. ) ; +#5521 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5522 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21063, 'distance_accuracy_value', 'NONE'); +#5523 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5524 = SURFACE_STYLE_USAGE ( .BOTH. , #21374 ) ; +#5525 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -1.139998254717354400, -5.049996877890552400 ) ) ; +#5526 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#5527 = EDGE_CURVE ( 'NONE', #25574, #12794, #578, .T. ) ; +#5528 = PLANE ( 'NONE', #41789 ) ; +#5529 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#5530 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.499998254703826200, -6.299999999999993600 ) ) ; +#5531 = PRESENTATION_STYLE_ASSIGNMENT (( #34524 ) ) ; +#5532 = EDGE_CURVE ( 'NONE', #26807, #31, #39423, .T. ) ; +#5533 = ORIENTED_EDGE ( 'NONE', *, *, #25172, .F. ) ; +#5534 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5535 = CARTESIAN_POINT ( 'NONE', ( -1.649999999999999900, -1.139998254717355100, -6.299996877890552400 ) ) ; +#5536 = CIRCLE ( 'NONE', #1422, 0.1500000000000008300 ) ; +#5537 = VERTEX_POINT ( 'NONE', #8681 ) ; +#5538 = CYLINDRICAL_SURFACE ( 'NONE', #30119, 0.1999999999999998700 ) ; +#5539 = AXIS2_PLACEMENT_3D ( 'NONE', #26241, #4049, #6866 ) ; +#5540 = CIRCLE ( 'NONE', #16628, 0.09999999999987406500 ) ; +#5541 = ORIENTED_EDGE ( 'NONE', *, *, #26771, .F. ) ; +#5542 = PRESENTATION_STYLE_ASSIGNMENT (( #22308 ) ) ; +#5543 = ORIENTED_EDGE ( 'NONE', *, *, #38367, .T. ) ; +#5544 = VERTEX_POINT ( 'NONE', #21593 ) ; +#5545 = CIRCLE ( 'NONE', #22211, 0.1499999999998701800 ) ; +#5546 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27669 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32838, #20021, #29301 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5547 = PLANE ( 'NONE', #31901 ) ; +#5548 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5549 = FILL_AREA_STYLE ('',( #37877 ) ) ; +#5550 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18798 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29688, #3829, #10317 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5552 = EDGE_CURVE ( 'NONE', #31185, #22416, #11131, .T. ) ; +#5551 = STYLED_ITEM ( 'NONE', ( #8350 ), #36621 ) ; +#5553 = EDGE_LOOP ( 'NONE', ( #32519, #36625, #5105, #37313 ) ) ; +#5554 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5555 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5556 = CARTESIAN_POINT ( 'NONE', ( 3.332298852287715700, -0.2999999198035229700, -1.600000000000000300 ) ) ; +#5557 = ORIENTED_EDGE ( 'NONE', *, *, #20918, .F. ) ; +#5558 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5559 = STYLED_ITEM ( 'NONE', ( #37985 ), #2085 ) ; +#5560 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5561 = FILL_AREA_STYLE ('',( #28292 ) ) ; +#5562 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5563 = ADVANCED_FACE ( 'NONE', ( #21272 ), #18467, .F. ) ; +#5564 = FACE_OUTER_BOUND ( 'NONE', #20996, .T. ) ; +#5565 = PLANE ( 'NONE', #17047 ) ; +#5566 = CIRCLE ( 'NONE', #5469, 1.450424212713734300 ) ; +#5567 = PLANE ( 'NONE', #29855 ) ; +#5568 = ORIENTED_EDGE ( 'NONE', *, *, #30769, .F. ) ; +#5569 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#5570 = SURFACE_SIDE_STYLE ('',( #14125 ) ) ; +#5571 = FACE_OUTER_BOUND ( 'NONE', #33604, .T. ) ; +#5572 = ORIENTED_EDGE ( 'NONE', *, *, #38620, .T. ) ; +#5573 = CARTESIAN_POINT ( 'NONE', ( 3.475000000000000100, 1.480001745296169100, -4.100000000000000500 ) ) ; +#5574 = VERTEX_POINT ( 'NONE', #18338 ) ; +#5575 = EDGE_LOOP ( 'NONE', ( #23301, #6231, #30222, #30741 ) ) ; +#5576 = FILL_AREA_STYLE ('',( #2365 ) ) ; +#5577 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33391, 'distance_accuracy_value', 'NONE'); +#5578 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000007100, -1.380001745296165000, -5.650000000000000400 ) ) ; +#5579 = SURFACE_STYLE_FILL_AREA ( #1877 ) ; +#5580 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5581 = PLANE ( 'NONE', #1861 ) ; +#5582 = VERTEX_POINT ( 'NONE', #5028 ) ; +#5583 = EDGE_CURVE ( 'NONE', #6500, #5142, #31380, .T. ) ; +#5584 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#5585 = VERTEX_POINT ( 'NONE', #15060 ) ; +#5586 = VERTEX_POINT ( 'NONE', #37649 ) ; +#5587 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5588 = CARTESIAN_POINT ( 'NONE', ( 3.137984242873237900, -0.2999999999999999300, 0.9623819784616954900 ) ) ; +#5589 = FILL_AREA_STYLE ('',( #34540 ) ) ; +#5590 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5591 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5592 = EDGE_CURVE ( 'NONE', #28342, #2905, #3566, .T. ) ; +#5593 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.4300017452961694700, -6.424999999999999800 ) ) ; +#5594 = ORIENTED_EDGE ( 'NONE', *, *, #254, .F. ) ; +#5595 = EDGE_CURVE ( 'NONE', #5703, #32236, #38411, .T. ) ; +#5596 = PRESENTATION_STYLE_ASSIGNMENT (( #25110 ) ) ; +#5597 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5598 = SURFACE_STYLE_USAGE ( .BOTH. , #8260 ) ; +#5599 = STYLED_ITEM ( 'NONE', ( #34426 ), #16465 ) ; +#5600 = FACE_OUTER_BOUND ( 'NONE', #20165, .T. ) ; +#5601 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, -0.2799999999999974200, -0.2339555568811697600 ) ) ; +#5602 = DIRECTION ( 'NONE', ( 0.3746065948736244700, 0.0000000000000000000, 0.9271838539778333200 ) ) ; +#5603 = SURFACE_SIDE_STYLE ('',( #12348 ) ) ; +#5604 = STYLED_ITEM ( 'NONE', ( #35584 ), #20992 ) ; +#5605 = STYLED_ITEM ( 'NONE', ( #33582 ), #12063 ) ; +#5606 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5607 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5608 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5609 = ORIENTED_EDGE ( 'NONE', *, *, #31779, .F. ) ; +#5611 = EDGE_CURVE ( 'NONE', #10050, #25351, #12138, .T. ) ; +#5610 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19989 ) ) ; +#5612 = FILL_AREA_STYLE_COLOUR ( '', #39598 ) ; +#5613 = LINE ( 'NONE', #36861, #18285 ) ; +#5614 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.779999999999868600, -0.2339555568811695400 ) ) ; +#5615 = EDGE_LOOP ( 'NONE', ( #21409, #7841, #37680, #25780, #23667, #2130, #39034, #1431 ) ) ; +#5616 = SURFACE_STYLE_FILL_AREA ( #23635 ) ; +#5617 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31072, 'distance_accuracy_value', 'NONE'); +#5619 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15637 ), #22936 ) ; +#5618 = STYLED_ITEM ( 'NONE', ( #29058 ), #27940 ) ; +#5620 = DIRECTION ( 'NONE', ( -0.9961946980917453200, -3.269420623233417900E-015, -0.08715574274766037200 ) ) ; +#5621 = DIRECTION ( 'NONE', ( 1.548860246407863600E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5622 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30242 ), #29415 ) ; +#5623 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#5624 = VECTOR ( 'NONE', #3694, 1000.000000000000000 ) ; +#5625 = PRESENTATION_STYLE_ASSIGNMENT (( #32911 ) ) ; +#5626 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12901 ) ) ; +#5627 = ORIENTED_EDGE ( 'NONE', *, *, #9390, .F. ) ; +#5628 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703821100, -5.700000000000000200 ) ) ; +#5629 = EDGE_LOOP ( 'NONE', ( #26155, #40519, #11311, #14745 ) ) ; +#5630 = FILL_AREA_STYLE_COLOUR ( '', #27128 ) ; +#5631 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #31223, #25324, #15283, #18536 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 3.141592653589793100, 3.864326901403188700 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956591100, 0.9569428977956591100, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#5632 = AXIS2_PLACEMENT_3D ( 'NONE', #17368, #17083, #10411 ) ; +#5633 = FILL_AREA_STYLE_COLOUR ( '', #29837 ) ; +#5634 = ORIENTED_EDGE ( 'NONE', *, *, #41308, .T. ) ; +#5635 = PLANE ( 'NONE', #34548 ) ; +#5636 = FACE_OUTER_BOUND ( 'NONE', #26768, .T. ) ; +#5637 = LINE ( 'NONE', #24878, #35470 ) ; +#5638 = ORIENTED_EDGE ( 'NONE', *, *, #29235, .F. ) ; +#5639 = LINE ( 'NONE', #17777, #5146 ) ; +#5640 = SURFACE_STYLE_USAGE ( .BOTH. , #12246 ) ; +#5641 = ADVANCED_FACE ( 'NONE', ( #14205 ), #41321, .F. ) ; +#5642 = LINE ( 'NONE', #32250, #38446 ) ; +#5643 = LINE ( 'NONE', #9746, #31922 ) ; +#5644 = PLANE ( 'NONE', #33125 ) ; +#5645 = SURFACE_SIDE_STYLE ('',( #15831 ) ) ; +#5646 = SURFACE_SIDE_STYLE ('',( #23249 ) ) ; +#5647 = FILL_AREA_STYLE ('',( #5218 ) ) ; +#5648 = SURFACE_SIDE_STYLE ('',( #26527 ) ) ; +#5649 = FILL_AREA_STYLE_COLOUR ( '', #41071 ) ; +#5650 = ORIENTED_EDGE ( 'NONE', *, *, #21218, .F. ) ; +#5651 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5652 = SURFACE_SIDE_STYLE ('',( #29073 ) ) ; +#5653 = EDGE_CURVE ( 'NONE', #38908, #16026, #1540, .T. ) ; +#5654 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.499998254703824400, -6.699999999999994000 ) ) ; +#5655 = ORIENTED_EDGE ( 'NONE', *, *, #35116, .T. ) ; +#5656 = SURFACE_STYLE_FILL_AREA ( #37579 ) ; +#5657 = SURFACE_STYLE_USAGE ( .BOTH. , #21932 ) ; +#5658 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.499998254703826200, -6.699999999999994000 ) ) ; +#5659 = EDGE_CURVE ( 'NONE', #31175, #3702, #6557, .T. ) ; +#5660 = LINE ( 'NONE', #25475, #26379 ) ; +#5661 = FILL_AREA_STYLE_COLOUR ( '', #35249 ) ; +#5662 = EDGE_LOOP ( 'NONE', ( #18496, #25853, #10749, #6025 ) ) ; +#5663 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11822 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39837, #33497, #935 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5664 = DIRECTION ( 'NONE', ( -2.891205793294677400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5665 = SURFACE_STYLE_FILL_AREA ( #26902 ) ; +#5666 = SURFACE_SIDE_STYLE ('',( #26085 ) ) ; +#5667 = STYLED_ITEM ( 'NONE', ( #13132 ), #13269 ) ; +#5668 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, 0.07499999999999999700, 0.0000000000000000000 ) ) ; +#5671 = EDGE_CURVE ( 'NONE', #8073, #28395, #18231, .T. ) ; +#5670 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19485 ), #16494 ) ; +#5669 = FILL_AREA_STYLE_COLOUR ( '', #4415 ) ; +#5672 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29404, 'distance_accuracy_value', 'NONE'); +#5673 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.180001745296169700, -4.400000000000000400 ) ) ; +#5674 = ORIENTED_EDGE ( 'NONE', *, *, #22732, .F. ) ; +#5675 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#5676 = VERTEX_POINT ( 'NONE', #19310 ) ; +#5677 = ADVANCED_FACE ( 'NONE', ( #40934 ), #41713, .F. ) ; +#5678 = FILL_AREA_STYLE_COLOUR ( '', #26052 ) ; +#5679 = SURFACE_STYLE_FILL_AREA ( #32769 ) ; +#5681 = AXIS2_PLACEMENT_3D ( 'NONE', #29771, #10407, #33166 ) ; +#5680 = STYLED_ITEM ( 'NONE', ( #9748 ), #28553 ) ; +#5682 = LINE ( 'NONE', #35347, #39011 ) ; +#5683 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17330 ), #15696 ) ; +#5684 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39471 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6252, #3410, #38986 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5685 = SURFACE_STYLE_USAGE ( .BOTH. , #41137 ) ; +#5686 = FILL_AREA_STYLE ('',( #34497 ) ) ; +#5687 = FACE_BOUND ( 'NONE', #15160, .T. ) ; +#5688 = ADVANCED_FACE ( 'NONE', ( #26817 ), #38336, .F. ) ; +#5689 = PLANE ( 'NONE', #8972 ) ; +#5690 = CARTESIAN_POINT ( 'NONE', ( -3.137984242873222300, 0.2999999999999999300, 0.9623819784616983700 ) ) ; +#5691 = ORIENTED_EDGE ( 'NONE', *, *, #32237, .F. ) ; +#5692 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#5693 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5694 = SURFACE_STYLE_USAGE ( .BOTH. , #34926 ) ; +#5695 = ORIENTED_EDGE ( 'NONE', *, *, #8720, .F. ) ; +#5696 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5697 = LINE ( 'NONE', #313, #21900 ) ; +#5698 = VERTEX_POINT ( 'NONE', #26191 ) ; +#5699 = SURFACE_SIDE_STYLE ('',( #4022 ) ) ; +#5700 = FILL_AREA_STYLE_COLOUR ( '', #22020 ) ; +#5701 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5702 = SURFACE_SIDE_STYLE ('',( #22969 ) ) ; +#5703 = VERTEX_POINT ( 'NONE', #32671 ) ; +#5705 = ORIENTED_EDGE ( 'NONE', *, *, #10724, .F. ) ; +#5704 = PRESENTATION_STYLE_ASSIGNMENT (( #35647 ) ) ; +#5706 = ORIENTED_EDGE ( 'NONE', *, *, #34299, .T. ) ; +#5707 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5708 = ORIENTED_EDGE ( 'NONE', *, *, #37819, .T. ) ; +#5709 = DIRECTION ( 'NONE', ( 3.281909278875040400E-015, -1.000000000000000000, 1.355252715606881300E-016 ) ) ; +#5710 = VECTOR ( 'NONE', #36988, 1000.000000000000000 ) ; +#5711 = ORIENTED_EDGE ( 'NONE', *, *, #10959, .T. ) ; +#5712 = EDGE_CURVE ( 'NONE', #29761, #33358, #23220, .T. ) ; +#5713 = CIRCLE ( 'NONE', #29113, 0.8000000000000003800 ) ; +#5714 = DIRECTION ( 'NONE', ( 0.9961946980917455500, 2.635991797933898700E-016, -0.08715574274765916500 ) ) ; +#5715 = VECTOR ( 'NONE', #13227, 1000.000000000000000 ) ; +#5716 = CIRCLE ( 'NONE', #7271, 0.1000000000000001600 ) ; +#5717 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5718 = FACE_OUTER_BOUND ( 'NONE', #35424, .T. ) ; +#5719 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -0.2339555568811695400 ) ) ; +#5720 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5721 = EDGE_CURVE ( 'NONE', #20512, #28666, #31334, .T. ) ; +#5722 = SURFACE_STYLE_FILL_AREA ( #32337 ) ; +#5723 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17119 ), #14385 ) ; +#5724 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -4.099999999999999600 ) ) ; +#5725 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5726 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #890 ), #39541 ) ; +#5727 = ADVANCED_FACE ( 'NONE', ( #23766 ), #16173, .F. ) ; +#5728 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.770989605758628000E-031, -9.637352644315598700E-016 ) ) ; +#5729 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999300, 0.2000000000000000100, -3.249999999999999600 ) ) ; +#5730 = DIRECTION ( 'NONE', ( 0.9961946980917454300, 3.269420623233418300E-015, 0.08715574274766037200 ) ) ; +#5731 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10020 ), #35490 ) ; +#5732 = CONICAL_SURFACE ( 'NONE', #20364, 1.450424212713734300, 0.0002094395102324932000 ) ; +#5733 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13579 ) ) ; +#5734 = AXIS2_PLACEMENT_3D ( 'NONE', #27145, #5081, #17538 ) ; +#5735 = FILL_AREA_STYLE_COLOUR ( '', #39906 ) ; +#5736 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -1.380001745296139700, -5.449999999999994000 ) ) ; +#5737 = ADVANCED_FACE ( 'NONE', ( #25288 ), #32118, .T. ) ; +#5739 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28976 ) ) ; +#5738 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26878 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35968, #7256, #29435 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5740 = VECTOR ( 'NONE', #37552, 1000.000000000000000 ) ; +#5741 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.380001745296126600, -6.699999999999994000 ) ) ; +#5743 = EDGE_CURVE ( 'NONE', #33974, #31509, #37371, .T. ) ; +#5742 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40362 ), #24712 ) ; +#5744 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.3699999999999850600, -4.599999999999999600 ) ) ; +#5745 = EDGE_LOOP ( 'NONE', ( #28251, #4727, #3695 ) ) ; +#5746 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#5747 = EDGE_LOOP ( 'NONE', ( #5078, #14819, #21176, #33669 ) ) ; +#5749 = ORIENTED_EDGE ( 'NONE', *, *, #34297, .F. ) ; +#5748 = LINE ( 'NONE', #25402, #20410 ) ; +#5750 = ORIENTED_EDGE ( 'NONE', *, *, #6684, .T. ) ; +#5751 = SURFACE_SIDE_STYLE ('',( #38142 ) ) ; +#5753 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41202 ) ) ; +#5752 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41201 ) ) ; +#5754 = CARTESIAN_POINT ( 'NONE', ( -3.843002961787012100, 0.6232492637573516800, -4.550076005058281600 ) ) ; +#5755 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#5756 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000007100, -0.3699982547038314100, -3.999999999999998200 ) ) ; +#5757 = SURFACE_STYLE_USAGE ( .BOTH. , #25133 ) ; +#5758 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18186, 'distance_accuracy_value', 'NONE'); +#5759 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.2800017452961688400, -5.200000000000001100 ) ) ; +#5760 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5761 = LINE ( 'NONE', #5673, #40632 ) ; +#5762 = FILL_AREA_STYLE_COLOUR ( '', #35689 ) ; +#5763 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5764 = FILL_AREA_STYLE_COLOUR ( '', #20581 ) ; +#5765 = LINE ( 'NONE', #30042, #36093 ) ; +#5766 = PRESENTATION_STYLE_ASSIGNMENT (( #6472 ) ) ; +#5767 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703821100, -6.800000000000001600 ) ) ; +#5768 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5769 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -2.322941965694886000, -1.250000000000000000 ) ) ; +#5770 = EDGE_CURVE ( 'NONE', #35688, #11824, #23715, .T. ) ; +#5771 = ADVANCED_FACE ( 'NONE', ( #20219 ), #13037, .F. ) ; +#5772 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5773 = ORIENTED_EDGE ( 'NONE', *, *, #12425, .F. ) ; +#5774 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16681, 'distance_accuracy_value', 'NONE'); +#5775 = LINE ( 'NONE', #37921, #30589 ) ; +#5776 = EDGE_CURVE ( 'NONE', #14115, #29571, #39869, .T. ) ; +#5777 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10653 ) ) ; +#5778 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5779 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5780 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998526700, -1.949999999999999500 ) ) ; +#5781 = ORIENTED_EDGE ( 'NONE', *, *, #12049, .F. ) ; +#5783 = ORIENTED_EDGE ( 'NONE', *, *, #1480, .T. ) ; +#5782 = CIRCLE ( 'NONE', #26518, 0.05000000000000056500 ) ; +#5784 = EDGE_LOOP ( 'NONE', ( #12234, #23702, #26501, #40379 ) ) ; +#5785 = FILL_AREA_STYLE_COLOUR ( '', #4485 ) ; +#5786 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#5787 = AXIS2_PLACEMENT_3D ( 'NONE', #32773, #13402, #3804 ) ; +#5788 = FACE_OUTER_BOUND ( 'NONE', #31666, .T. ) ; +#5789 = VECTOR ( 'NONE', #15848, 1000.000000000000000 ) ; +#5790 = CARTESIAN_POINT ( 'NONE', ( -3.106167806357272200, 0.07499999999999999700, -0.1000355246808047900 ) ) ; +#5792 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.845797985667148900, -0.3279248189596167300 ) ) ; +#5791 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5793 = LINE ( 'NONE', #10891, #33064 ) ; +#5794 = STYLED_ITEM ( 'NONE', ( #29314 ), #19462 ) ; +#5796 = AXIS2_PLACEMENT_3D ( 'NONE', #29115, #13007, #16283 ) ; +#5795 = STYLED_ITEM ( 'NONE', ( #8913 ), #30984 ) ; +#5797 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5798 = EDGE_LOOP ( 'NONE', ( #11375, #10129, #25313, #23747 ) ) ; +#5799 = SURFACE_SIDE_STYLE ('',( #35052 ) ) ; +#5800 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5801 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5803 = EDGE_CURVE ( 'NONE', #32397, #13256, #19692, .T. ) ; +#5802 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22333 ), #15807 ) ; +#5804 = SURFACE_SIDE_STYLE ('',( #3205 ) ) ; +#5805 = SURFACE_STYLE_FILL_AREA ( #16222 ) ; +#5806 = SURFACE_STYLE_USAGE ( .BOTH. , #41505 ) ; +#5807 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703822500, -2.399999999999999500 ) ) ; +#5809 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2884 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17271, #7214, #29825 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5808 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9436 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27991, #5107, #27708 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5810 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5811 = ORIENTED_EDGE ( 'NONE', *, *, #22120, .F. ) ; +#5812 = AXIS2_PLACEMENT_3D ( 'NONE', #14726, #31383, #31241 ) ; +#5813 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, -0.07499999999999999700, 0.4305619708689000200 ) ) ; +#5814 = SURFACE_SIDE_STYLE ('',( #6246 ) ) ; +#5815 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#5816 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.2999999999999999900, -1.399999999993000000 ) ) ; +#5817 = ORIENTED_EDGE ( 'NONE', *, *, #29550, .F. ) ; +#5818 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23560, 'distance_accuracy_value', 'NONE'); +#5819 = LINE ( 'NONE', #9099, #19499 ) ; +#5820 = ORIENTED_EDGE ( 'NONE', *, *, #34048, .F. ) ; +#5821 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#5822 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#5823 = SURFACE_SIDE_STYLE ('',( #307 ) ) ; +#5824 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#5825 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.3500000000000000300, 0.6999999999999999600 ) ) ; +#5826 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#5827 = LINE ( 'NONE', #29910, #37154 ) ; +#5828 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36859, 'distance_accuracy_value', 'NONE'); +#5829 = LINE ( 'NONE', #28706, #31061 ) ; +#5830 = ORIENTED_EDGE ( 'NONE', *, *, #21051, .T. ) ; +#5831 = SURFACE_STYLE_USAGE ( .BOTH. , #22359 ) ; +#5832 = LINE ( 'NONE', #18851, #9698 ) ; +#5833 = SURFACE_STYLE_FILL_AREA ( #23197 ) ; +#5834 = EDGE_CURVE ( 'NONE', #19098, #11691, #31293, .T. ) ; +#5835 = ORIENTED_EDGE ( 'NONE', *, *, #18909, .F. ) ; +#5836 = PRESENTATION_STYLE_ASSIGNMENT (( #28405 ) ) ; +#5837 = VECTOR ( 'NONE', #19738, 1000.000000000000000 ) ; +#5838 = VERTEX_POINT ( 'NONE', #13614 ) ; +#5839 = EDGE_CURVE ( 'NONE', #21781, #3318, #10021, .T. ) ; +#5840 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5841 = FILL_AREA_STYLE ('',( #2632 ) ) ; +#5842 = FILL_AREA_STYLE_COLOUR ( '', #37124 ) ; +#5843 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19672 ), #21039 ) ; +#5844 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5845 = SURFACE_SIDE_STYLE ('',( #34268 ) ) ; +#5846 = VERTEX_POINT ( 'NONE', #33248 ) ; +#5847 = STYLED_ITEM ( 'NONE', ( #14989 ), #20398 ) ; +#5848 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5849 = CARTESIAN_POINT ( 'NONE', ( 2.949999999999999700, -1.499998254703820400, -6.699999999999994000 ) ) ; +#5850 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40699 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14208, #21009, #10933 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5851 = FILL_AREA_STYLE_COLOUR ( '', #21590 ) ; +#5852 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169000, -3.514459358809377300 ) ) ; +#5853 = VERTEX_POINT ( 'NONE', #7671 ) ; +#5856 = EDGE_CURVE ( 'NONE', #692, #24793, #14121, .T. ) ; +#5855 = SURFACE_SIDE_STYLE ('',( #21688 ) ) ; +#5854 = AXIS2_PLACEMENT_3D ( 'NONE', #2612, #41272, #2063 ) ; +#5857 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -2.604459358809384300 ) ) ; +#5858 = ORIENTED_EDGE ( 'NONE', *, *, #19536, .T. ) ; +#5859 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 6.056601140521967000E-031 ) ) ; +#5860 = ORIENTED_EDGE ( 'NONE', *, *, #4234, .T. ) ; +#5861 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -500000.0000000000600, -3.204459358691027500 ) ) ; +#5862 = ORIENTED_EDGE ( 'NONE', *, *, #28596, .T. ) ; +#5864 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6423 ), #9364 ) ; +#5863 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21934 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6544, #16159, #41556 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5865 = FILL_AREA_STYLE_COLOUR ( '', #19050 ) ; +#5866 = SURFACE_STYLE_USAGE ( .BOTH. , #34963 ) ; +#5867 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18333 ) ) ; +#5868 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#5869 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#5870 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#5871 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#5872 = ORIENTED_EDGE ( 'NONE', *, *, #14262, .F. ) ; +#5873 = AXIS2_PLACEMENT_3D ( 'NONE', #19928, #12971, #19510 ) ; +#5874 = VERTEX_POINT ( 'NONE', #13753 ) ; +#5875 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5876 = VECTOR ( 'NONE', #41586, 1000.000000000000000 ) ; +#5877 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5878 = SURFACE_STYLE_FILL_AREA ( #14733 ) ; +#5879 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5880 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#5881 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5882 = FACE_OUTER_BOUND ( 'NONE', #31441, .T. ) ; +#5883 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5884 = CARTESIAN_POINT ( 'NONE', ( -3.374999999999998700, 0.6300017452961683700, -4.750000000000000000 ) ) ; +#5885 = ADVANCED_FACE ( 'NONE', ( #36848 ), #1030, .T. ) ; +#5886 = PRESENTATION_STYLE_ASSIGNMENT (( #34106 ) ) ; +#5887 = CARTESIAN_POINT ( 'NONE', ( -3.846156164834738400, 0.6165030250713622300, -4.550456058592868800 ) ) ; +#5888 = SURFACE_STYLE_USAGE ( .BOTH. , #41589 ) ; +#5889 = ADVANCED_FACE ( 'NONE', ( #34339 ), #491, .T. ) ; +#5890 = SURFACE_STYLE_USAGE ( .BOTH. , #34716 ) ; +#5891 = FACE_OUTER_BOUND ( 'NONE', #6335, .T. ) ; +#5892 = EDGE_CURVE ( 'NONE', #11430, #33354, #6490, .T. ) ; +#5893 = SURFACE_STYLE_USAGE ( .BOTH. , #22702 ) ; +#5894 = VECTOR ( 'NONE', #740, 1000.000000000000000 ) ; +#5895 = EDGE_CURVE ( 'NONE', #28464, #24607, #32781, .T. ) ; +#5896 = SURFACE_SIDE_STYLE ('',( #6395 ) ) ; +#5897 = ORIENTED_EDGE ( 'NONE', *, *, #31645, .F. ) ; +#5898 = ORIENTED_EDGE ( 'NONE', *, *, #31453, .F. ) ; +#5899 = LINE ( 'NONE', #22957, #39232 ) ; +#5900 = AXIS2_PLACEMENT_3D ( 'NONE', #35956, #16590, #19595 ) ; +#5901 = LINE ( 'NONE', #34056, #26129 ) ; +#5902 = DIRECTION ( 'NONE', ( -3.252601786828647100E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5903 = VECTOR ( 'NONE', #2111, 1000.000000000000000 ) ; +#5904 = EDGE_CURVE ( 'NONE', #974, #18288, #34822, .T. ) ; +#5905 = PRESENTATION_STYLE_ASSIGNMENT (( #8844 ) ) ; +#5906 = LINE ( 'NONE', #41194, #17565 ) ; +#5907 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.380001745296165500, -1.649999999999999500 ) ) ; +#5908 = VERTEX_POINT ( 'NONE', #30280 ) ; +#5909 = VECTOR ( 'NONE', #18865, 1000.000000000000000 ) ; +#5910 = ORIENTED_EDGE ( 'NONE', *, *, #1784, .T. ) ; +#5911 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #501 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34519, #14758, #11767 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5912 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -3.307718258760844200E-015, 1.000000000000000000 ) ) ; +#5913 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22590 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39236, #16382, #29785 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5914 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5915 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5917 = EDGE_CURVE ( 'NONE', #41082, #19187, #23675, .T. ) ; +#5916 = AXIS2_PLACEMENT_3D ( 'NONE', #41386, #37721, #34478 ) ; +#5918 = FILL_AREA_STYLE_COLOUR ( '', #14831 ) ; +#5919 = FILL_AREA_STYLE_COLOUR ( '', #16647 ) ; +#5920 = CARTESIAN_POINT ( 'NONE', ( -3.045000000000000800, 0.2999999999999999900, -1.399999999927000100 ) ) ; +#5921 = VECTOR ( 'NONE', #24802, 1000.000000000000000 ) ; +#5922 = FILL_AREA_STYLE_COLOUR ( '', #18651 ) ; +#5924 = AXIS2_PLACEMENT_3D ( 'NONE', #4196, #23977, #27230 ) ; +#5923 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10484 ), #1633 ) ; +#5925 = AXIS2_PLACEMENT_3D ( 'NONE', #14319, #37292, #37425 ) ; +#5926 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8556, 'distance_accuracy_value', 'NONE'); +#5927 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.380001745296165500, -3.700000000000000200 ) ) ; +#5928 = CARTESIAN_POINT ( 'NONE', ( 3.178333333333021500, 0.2999999999999999900, -0.06128090415826344800 ) ) ; +#5929 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5930 = ADVANCED_FACE ( 'NONE', ( #9013 ), #26233, .F. ) ; +#5931 = ORIENTED_EDGE ( 'NONE', *, *, #30205, .F. ) ; +#5932 = PRESENTATION_STYLE_ASSIGNMENT (( #41698 ) ) ; +#5933 = SURFACE_SIDE_STYLE ('',( #19593 ) ) ; +#5934 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37052 ), #9434 ) ; +#5935 = SURFACE_STYLE_USAGE ( .BOTH. , #22049 ) ; +#5936 = CARTESIAN_POINT ( 'NONE', ( -3.846156164834738400, 0.6165030250713622300, -4.400260404654702000 ) ) ; +#5937 = ORIENTED_EDGE ( 'NONE', *, *, #34731, .F. ) ; +#5938 = ORIENTED_EDGE ( 'NONE', *, *, #6333, .F. ) ; +#5939 = FACE_OUTER_BOUND ( 'NONE', #31265, .T. ) ; +#5940 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22226, 'distance_accuracy_value', 'NONE'); +#5941 = ORIENTED_EDGE ( 'NONE', *, *, #6867, .F. ) ; +#5943 = DIRECTION ( 'NONE', ( 0.08715574274766037200, 0.0000000000000000000, -0.9961946980917453200 ) ) ; +#5942 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5944 = ORIENTED_EDGE ( 'NONE', *, *, #36166, .F. ) ; +#5945 = ORIENTED_EDGE ( 'NONE', *, *, #32664, .F. ) ; +#5946 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#5947 = PRESENTATION_STYLE_ASSIGNMENT (( #14440 ) ) ; +#5948 = DIRECTION ( 'NONE', ( -6.776263578034402700E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5949 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#5950 = PRESENTATION_STYLE_ASSIGNMENT (( #33331 ) ) ; +#5951 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5952 = SURFACE_STYLE_FILL_AREA ( #33980 ) ; +#5953 = ORIENTED_EDGE ( 'NONE', *, *, #14377, .F. ) ; +#5954 = PRESENTATION_STYLE_ASSIGNMENT (( #33408 ) ) ; +#5955 = ORIENTED_EDGE ( 'NONE', *, *, #11134, .F. ) ; +#5956 = CIRCLE ( 'NONE', #2787, 0.1000000000000001600 ) ; +#5957 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5958 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26749, 'distance_accuracy_value', 'NONE'); +#5959 = VERTEX_POINT ( 'NONE', #4718 ) ; +#5960 = FACE_OUTER_BOUND ( 'NONE', #15168, .T. ) ; +#5961 = EDGE_CURVE ( 'NONE', #21371, #32548, #22185, .T. ) ; +#5962 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5963 = CARTESIAN_POINT ( 'NONE', ( 3.245000000016000200, 0.3499999999999999800, -1.649999999990000100 ) ) ; +#5964 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5965 = EDGE_CURVE ( 'NONE', #34193, #11411, #39340, .T. ) ; +#5966 = PLANE ( 'NONE', #22273 ) ; +#5967 = FILL_AREA_STYLE_COLOUR ( '', #38483 ) ; +#5968 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5969 = STYLED_ITEM ( 'NONE', ( #25466 ), #22419 ) ; +#5970 = VERTEX_POINT ( 'NONE', #11063 ) ; +#5971 = ORIENTED_EDGE ( 'NONE', *, *, #8623, .T. ) ; +#5972 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -5.075000000000000200 ) ) ; +#5973 = AXIS2_PLACEMENT_3D ( 'NONE', #30155, #40024, #10937 ) ; +#5974 = SURFACE_STYLE_USAGE ( .BOTH. , #31407 ) ; +#5975 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31582, 'distance_accuracy_value', 'NONE'); +#5976 = VERTEX_POINT ( 'NONE', #7805 ) ; +#5977 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000032500, -2.031000000000001500, -6.749999999999999100 ) ) ; +#5978 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5979 = PRESENTATION_STYLE_ASSIGNMENT (( #9060 ) ) ; +#5980 = SURFACE_STYLE_USAGE ( .BOTH. , #38439 ) ; +#5981 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19166 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33167, #39642, #36974 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5982 = ADVANCED_FACE ( 'NONE', ( #26733 ), #23923, .F. ) ; +#5983 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8925 ) ) ; +#5984 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5985 = ORIENTED_EDGE ( 'NONE', *, *, #22963, .T. ) ; +#5986 = ORIENTED_EDGE ( 'NONE', *, *, #26189, .F. ) ; +#5987 = FACE_OUTER_BOUND ( 'NONE', #2229, .T. ) ; +#5988 = LINE ( 'NONE', #39710, #13550 ) ; +#5989 = AXIS2_PLACEMENT_3D ( 'NONE', #6110, #18560, #31397 ) ; +#5990 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#5991 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#5992 = SURFACE_STYLE_USAGE ( .BOTH. , #25364 ) ; +#5993 = VECTOR ( 'NONE', #19410, 1000.000000000000000 ) ; +#5994 = FILL_AREA_STYLE_COLOUR ( '', #19189 ) ; +#5995 = LINE ( 'NONE', #16319, #40328 ) ; +#5997 = EDGE_CURVE ( 'NONE', #40495, #23596, #25250, .T. ) ; +#5996 = AXIS2_PLACEMENT_3D ( 'NONE', #11110, #20909, #24123 ) ; +#5998 = ORIENTED_EDGE ( 'NONE', *, *, #6154, .T. ) ; +#5999 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6000 = ORIENTED_EDGE ( 'NONE', *, *, #11534, .T. ) ; +#6001 = ORIENTED_EDGE ( 'NONE', *, *, #38757, .T. ) ; +#6002 = VECTOR ( 'NONE', #23710, 1000.000000000000000 ) ; +#6004 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37899 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32847, #560, #26371 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6003 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6005 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31935, 'distance_accuracy_value', 'NONE'); +#6006 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -2.322941965694886000, 0.6999999999999999600 ) ) ; +#6007 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15676 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38094, #28638, #8984 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6008 = FILL_AREA_STYLE ('',( #12336 ) ) ; +#6009 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#6010 = SURFACE_SIDE_STYLE ('',( #10980 ) ) ; +#6011 = ORIENTED_EDGE ( 'NONE', *, *, #30610, .F. ) ; +#6012 = PRESENTATION_STYLE_ASSIGNMENT (( #15190 ) ) ; +#6013 = CARTESIAN_POINT ( 'NONE', ( 3.126618024744703700, -0.2999999999999999300, 0.9879080043746015800 ) ) ; +#6014 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865475700, 0.7071067811865475700 ) ) ; +#6015 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#6016 = FACE_OUTER_BOUND ( 'NONE', #8920, .T. ) ; +#6017 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6018 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6019 = SURFACE_SIDE_STYLE ('',( #28410 ) ) ; +#6020 = ORIENTED_EDGE ( 'NONE', *, *, #38261, .T. ) ; +#6021 = SURFACE_STYLE_USAGE ( .BOTH. , #38060 ) ; +#6022 = FILL_AREA_STYLE ('',( #2813 ) ) ; +#6023 = FILL_AREA_STYLE_COLOUR ( '', #29485 ) ; +#6024 = EDGE_CURVE ( 'NONE', #31984, #3122, #8008, .T. ) ; +#6025 = ORIENTED_EDGE ( 'NONE', *, *, #5917, .T. ) ; +#6026 = ORIENTED_EDGE ( 'NONE', *, *, #10457, .T. ) ; +#6027 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6028 = FILL_AREA_STYLE ('',( #34977 ) ) ; +#6029 = FILL_AREA_STYLE ('',( #2821 ) ) ; +#6030 = FACE_OUTER_BOUND ( 'NONE', #10042, .T. ) ; +#6031 = EDGE_CURVE ( 'NONE', #10963, #23867, #33292, .T. ) ; +#6032 = AXIS2_PLACEMENT_3D ( 'NONE', #9188, #15719, #28294 ) ; +#6033 = VECTOR ( 'NONE', #6055, 1000.000000000000000 ) ; +#6034 = FACE_OUTER_BOUND ( 'NONE', #39880, .T. ) ; +#6035 = ORIENTED_EDGE ( 'NONE', *, *, #28503, .F. ) ; +#6036 = ORIENTED_EDGE ( 'NONE', *, *, #38757, .F. ) ; +#6037 = VERTEX_POINT ( 'NONE', #7931 ) ; +#6038 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#6039 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, 0.2999999999999999900, -0.2498427124746000500 ) ) ; +#6040 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #14700, #30936, #37297, #17965, #40520, #21230 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#6041 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.380001745296136400, -5.650000000000000400 ) ) ; +#6042 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6043 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6044 = ORIENTED_EDGE ( 'NONE', *, *, #21457, .T. ) ; +#6045 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10594 ) ) ; +#6046 = SURFACE_STYLE_FILL_AREA ( #13083 ) ; +#6047 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6048 = STYLED_ITEM ( 'NONE', ( #3630 ), #18942 ) ; +#6049 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165600, -2.299999999999999400 ) ) ; +#6050 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40109 ), #7643 ) ; +#6053 = EDGE_CURVE ( 'NONE', #19755, #34774, #4986, .T. ) ; +#6052 = FILL_AREA_STYLE_COLOUR ( '', #36448 ) ; +#6051 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26922 ), #25552 ) ; +#6054 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6055 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6056 = PLANE ( 'NONE', #23108 ) ; +#6058 = AXIS2_PLACEMENT_3D ( 'NONE', #20543, #4695, #20263 ) ; +#6057 = AXIS2_PLACEMENT_3D ( 'NONE', #7077, #10472, #3573 ) ; +#6059 = FACE_OUTER_BOUND ( 'NONE', #16162, .T. ) ; +#6060 = ORIENTED_EDGE ( 'NONE', *, *, #16908, .F. ) ; +#6061 = VECTOR ( 'NONE', #26799, 1000.000000000000000 ) ; +#6062 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998358800, -4.450000000000000200 ) ) ; +#6063 = CARTESIAN_POINT ( 'NONE', ( 4.750000000000003600, -0.7099999999999991900, -6.861124800398366500 ) ) ; +#6064 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.730424212713734800, -1.049979056049130000 ) ) ; +#6065 = VECTOR ( 'NONE', #37305, 1000.000000000000000 ) ; +#6066 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, 0.3500000000000000300, 0.6999999999999999600 ) ) ; +#6067 = ORIENTED_EDGE ( 'NONE', *, *, #36922, .F. ) ; +#6068 = ORIENTED_EDGE ( 'NONE', *, *, #25356, .T. ) ; +#6069 = SURFACE_SIDE_STYLE ('',( #38871 ) ) ; +#6070 = LINE ( 'NONE', #18113, #17218 ) ; +#6071 = CIRCLE ( 'NONE', #12509, 0.1000000000000002600 ) ; +#6072 = PRESENTATION_STYLE_ASSIGNMENT (( #35916 ) ) ; +#6073 = SURFACE_SIDE_STYLE ('',( #2680 ) ) ; +#6074 = ORIENTED_EDGE ( 'NONE', *, *, #8410, .T. ) ; +#6075 = CARTESIAN_POINT ( 'NONE', ( 3.889193007174661000, 0.5680172716341861400, -4.559155588574147300 ) ) ; +#6076 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6077 = ORIENTED_EDGE ( 'NONE', *, *, #13052, .F. ) ; +#6078 = EDGE_LOOP ( 'NONE', ( #39231, #39337, #25591, #11752 ) ) ; +#6079 = SURFACE_SIDE_STYLE ('',( #13265 ) ) ; +#6080 = ORIENTED_EDGE ( 'NONE', *, *, #29468, .F. ) ; +#6081 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165600, -3.799999999999999800 ) ) ; +#6082 = LINE ( 'NONE', #1400, #40708 ) ; +#6083 = EDGE_CURVE ( 'NONE', #21382, #33923, #8490, .T. ) ; +#6084 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6085 = LINE ( 'NONE', #26828, #27316 ) ; +#6086 = CARTESIAN_POINT ( 'NONE', ( 3.045000000000000800, 0.2999999999999999900, -1.517157287559287600 ) ) ; +#6087 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703822500, -3.500000000000000000 ) ) ; +#6088 = EDGE_CURVE ( 'NONE', #11644, #24232, #24729, .T. ) ; +#6089 = VECTOR ( 'NONE', #29782, 1000.000000000000000 ) ; +#6090 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.779999999999868600, -0.2339555568811697600 ) ) ; +#6091 = ADVANCED_FACE ( 'NONE', ( #35315 ), #24215, .F. ) ; +#6092 = SURFACE_STYLE_FILL_AREA ( #14737 ) ; +#6093 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11208 ) ) ; +#6094 = LINE ( 'NONE', #155, #34910 ) ; +#6095 = ORIENTED_EDGE ( 'NONE', *, *, #24221, .T. ) ; +#6096 = VECTOR ( 'NONE', #9537, 1000.000000000000000 ) ; +#6097 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32321 ) ) ; +#6098 = FILL_AREA_STYLE ('',( #25472 ) ) ; +#6099 = ORIENTED_EDGE ( 'NONE', *, *, #32794, .F. ) ; +#6100 = DIRECTION ( 'NONE', ( -3.872150616019659000E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6101 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6102 = ORIENTED_EDGE ( 'NONE', *, *, #22688, .T. ) ; +#6103 = CIRCLE ( 'NONE', #6058, 0.09999999999987406500 ) ; +#6104 = ADVANCED_FACE ( 'NONE', ( #25971 ), #30560, .F. ) ; +#6106 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12819 ), #6356 ) ; +#6105 = CIRCLE ( 'NONE', #16560, 0.09999999999999999200 ) ; +#6107 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23984 ), #19120 ) ; +#6108 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18662, 'distance_accuracy_value', 'NONE'); +#6109 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6110 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.139998254717358200, -6.299996877890552400 ) ) ; +#6112 = EDGE_CURVE ( 'NONE', #36632, #31798, #7093, .T. ) ; +#6111 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13383 ) ) ; +#6113 = PRESENTATION_STYLE_ASSIGNMENT (( #11556 ) ) ; +#6114 = VERTEX_POINT ( 'NONE', #8761 ) ; +#6115 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#6116 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000900, 1.167528855492236500, -4.549999999999999800 ) ) ; +#6117 = ORIENTED_EDGE ( 'NONE', *, *, #15627, .F. ) ; +#6118 = ORIENTED_EDGE ( 'NONE', *, *, #16495, .T. ) ; +#6119 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6121 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16852 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9720, #6084, #31782 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6120 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26413 ) ) ; +#6122 = AXIS2_PLACEMENT_3D ( 'NONE', #21777, #14970, #34320 ) ; +#6123 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6124 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10896, 'distance_accuracy_value', 'NONE'); +#6125 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14530 ) ) ; +#6126 = ORIENTED_EDGE ( 'NONE', *, *, #19401, .T. ) ; +#6127 = VERTEX_POINT ( 'NONE', #31245 ) ; +#6128 = VECTOR ( 'NONE', #11794, 1000.000000000000000 ) ; +#6129 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#6130 = CIRCLE ( 'NONE', #22270, 0.09999999999999999200 ) ; +#6131 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#6132 = SURFACE_STYLE_USAGE ( .BOTH. , #28853 ) ; +#6133 = FACE_OUTER_BOUND ( 'NONE', #19524, .T. ) ; +#6134 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 0.3500000000000000300, -1.300000000000000000 ) ) ; +#6135 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6136 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6137 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6138 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#6139 = VERTEX_POINT ( 'NONE', #9622 ) ; +#6140 = ADVANCED_FACE ( 'NONE', ( #12649 ), #24650, .F. ) ; +#6141 = CARTESIAN_POINT ( 'NONE', ( -4.170000000000001700, 0.2800000000000026900, -3.299999999999999800 ) ) ; +#6142 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999998900, 0.4343145750507615400, -3.279289321881345000 ) ) ; +#6143 = ORIENTED_EDGE ( 'NONE', *, *, #22789, .F. ) ; +#6144 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26900, 'distance_accuracy_value', 'NONE'); +#6145 = EDGE_CURVE ( 'NONE', #13040, #4734, #14226, .T. ) ; +#6146 = SURFACE_STYLE_FILL_AREA ( #13056 ) ; +#6147 = DIRECTION ( 'NONE', ( -4.840188270024573500E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6148 = EDGE_CURVE ( 'NONE', #23580, #30774, #22292, .T. ) ; +#6149 = PRESENTATION_STYLE_ASSIGNMENT (( #19539 ) ) ; +#6150 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.966063034915694700, -0.6228541982233617400 ) ) ; +#6151 = ORIENTED_EDGE ( 'NONE', *, *, #1293, .T. ) ; +#6152 = VECTOR ( 'NONE', #14619, 1000.000000000000000 ) ; +#6153 = ORIENTED_EDGE ( 'NONE', *, *, #31191, .F. ) ; +#6154 = EDGE_CURVE ( 'NONE', #7549, #5494, #37947, .T. ) ; +#6155 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38322, 'distance_accuracy_value', 'NONE'); +#6156 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, -2.322941965694886000, 0.6999999999999999600 ) ) ; +#6157 = SURFACE_SIDE_STYLE ('',( #6855 ) ) ; +#6158 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21813 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37638, #40884, #34534 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6159 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6160 = ORIENTED_EDGE ( 'NONE', *, *, #18725, .F. ) ; +#6161 = FILL_AREA_STYLE_COLOUR ( '', #16118 ) ; +#6162 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#6163 = LINE ( 'NONE', #41343, #39494 ) ; +#6164 = EDGE_LOOP ( 'NONE', ( #5627, #28676, #37917, #2466 ) ) ; +#6165 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3974 ) ) ; +#6166 = SURFACE_STYLE_FILL_AREA ( #8023 ) ; +#6167 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2679 ), #31587 ) ; +#6168 = VECTOR ( 'NONE', #15442, 1000.000000000000000 ) ; +#6169 = CARTESIAN_POINT ( 'NONE', ( 3.179314575050763600, -0.5999999999999997600, -3.279289321881346400 ) ) ; +#6170 = PLANE ( 'NONE', #3451 ) ; +#6171 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38106, 'distance_accuracy_value', 'NONE'); +#6173 = EDGE_CURVE ( 'NONE', #35285, #35859, #10631, .T. ) ; +#6172 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17610 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7785, #39707, #39975 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6174 = SURFACE_SIDE_STYLE ('',( #6732 ) ) ; +#6175 = FILL_AREA_STYLE ('',( #15760 ) ) ; +#6176 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6178 = AXIS2_PLACEMENT_3D ( 'NONE', #25035, #28250, #25169 ) ; +#6177 = AXIS2_PLACEMENT_3D ( 'NONE', #14976, #40956, #24761 ) ; +#6179 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.6199999999999849000, -5.199999999999999300 ) ) ; +#6180 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6181 = EDGE_LOOP ( 'NONE', ( #38278, #9884, #27544, #22885 ) ) ; +#6182 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#6183 = CIRCLE ( 'NONE', #24044, 0.1499999999998701800 ) ; +#6184 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24318 ) ) ; +#6185 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#6186 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, -0.07499999999999999700, 0.4305619708689000200 ) ) ; +#6187 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1339 ), #9912 ) ; +#6188 = VERTEX_POINT ( 'NONE', #2062 ) ; +#6189 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6190 = CIRCLE ( 'NONE', #39438, 1.200001745296169300 ) ; +#6191 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6192 = PLANE ( 'NONE', #33195 ) ; +#6193 = ORIENTED_EDGE ( 'NONE', *, *, #1059, .T. ) ; +#6194 = ADVANCED_FACE ( 'NONE', ( #30868 ), #34363, .F. ) ; +#6195 = DIRECTION ( 'NONE', ( 7.744301232039317900E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6196 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -3.700000000000000200 ) ) ; +#6197 = ORIENTED_EDGE ( 'NONE', *, *, #37568, .F. ) ; +#6198 = SURFACE_SIDE_STYLE ('',( #33613 ) ) ; +#6199 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6200 = SURFACE_SIDE_STYLE ('',( #13817 ) ) ; +#6201 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#6202 = VERTEX_POINT ( 'NONE', #37737 ) ; +#6203 = PRESENTATION_STYLE_ASSIGNMENT (( #27809 ) ) ; +#6204 = CARTESIAN_POINT ( 'NONE', ( -3.115710678085374900, 0.3500000000000002600, -1.620710678123179900 ) ) ; +#6205 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6206 = ORIENTED_EDGE ( 'NONE', *, *, #27245, .F. ) ; +#6207 = SURFACE_SIDE_STYLE ('',( #28235 ) ) ; +#6208 = FACE_OUTER_BOUND ( 'NONE', #32345, .T. ) ; +#6209 = SURFACE_STYLE_FILL_AREA ( #20822 ) ; +#6210 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6211 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6212 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6213 = SURFACE_STYLE_USAGE ( .BOTH. , #25572 ) ; +#6214 = EDGE_CURVE ( 'NONE', #39552, #35578, #21826, .T. ) ; +#6215 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.480001745296166000, -1.649999999999999500 ) ) ; +#6216 = VECTOR ( 'NONE', #12358, 1000.000000000000000 ) ; +#6217 = VECTOR ( 'NONE', #4184, 1000.000000000000000 ) ; +#6218 = SURFACE_STYLE_USAGE ( .BOTH. , #18953 ) ; +#6219 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6220 = EDGE_CURVE ( 'NONE', #38744, #41581, #29849, .T. ) ; +#6221 = EDGE_LOOP ( 'NONE', ( #13146, #9609, #8718, #37900 ) ) ; +#6222 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#6223 = AXIS2_PLACEMENT_3D ( 'NONE', #37531, #2127, #24567 ) ; +#6225 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6224 = FILL_AREA_STYLE ('',( #21804 ) ) ; +#6226 = CARTESIAN_POINT ( 'NONE', ( 3.127842712513713200, 0.2999999999999999900, -1.600000000042762500 ) ) ; +#6227 = STYLED_ITEM ( 'NONE', ( #37345 ), #13581 ) ; +#6228 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.951433523848735700E-015, 0.0000000000000000000 ) ) ; +#6229 = AXIS2_PLACEMENT_3D ( 'NONE', #6330, #29050, #3497 ) ; +#6230 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.779999999999868600, -0.2339555568811695400 ) ) ; +#6231 = ORIENTED_EDGE ( 'NONE', *, *, #24355, .T. ) ; +#6232 = EDGE_LOOP ( 'NONE', ( #2378, #22637, #10044 ) ) ; +#6233 = EDGE_LOOP ( 'NONE', ( #10620, #32913, #29479, #23368 ) ) ; +#6234 = SURFACE_STYLE_USAGE ( .BOTH. , #32051 ) ; +#6235 = ORIENTED_EDGE ( 'NONE', *, *, #38480, .F. ) ; +#6237 = STYLED_ITEM ( 'NONE', ( #37607 ), #4730 ) ; +#6236 = AXIS2_PLACEMENT_3D ( 'NONE', #26196, #13321, #35957 ) ; +#6238 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13226 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #311, #3516, #6739 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6239 = SURFACE_STYLE_FILL_AREA ( #29360 ) ; +#6240 = EDGE_LOOP ( 'NONE', ( #28590, #39299, #17861, #15752 ) ) ; +#6241 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #338 ), #34391 ) ; +#6242 = FILL_AREA_STYLE ('',( #31924 ) ) ; +#6243 = VECTOR ( 'NONE', #28915, 1000.000000000000000 ) ; +#6244 = FACE_OUTER_BOUND ( 'NONE', #19094, .T. ) ; +#6245 = SURFACE_STYLE_USAGE ( .BOTH. , #41408 ) ; +#6246 = SURFACE_STYLE_FILL_AREA ( #31092 ) ; +#6247 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34984, 'distance_accuracy_value', 'NONE'); +#6248 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, -10.30000000000000100, -1.250000000000000000 ) ) ; +#6249 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, -2.322941965694886000, -1.250000000000000000 ) ) ; +#6250 = LINE ( 'NONE', #35012, #13317 ) ; +#6251 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -2.031000000000000600, -3.514459358809376400 ) ) ; +#6252 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6253 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 1.485063948690956900E-014, -2.095470210943120000 ) ) ; +#6254 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.966063034915694700, -0.6228541982233617400 ) ) ; +#6255 = DIRECTION ( 'NONE', ( 0.9396926207859068700, 0.3420201433256725400, -5.691343398792006000E-031 ) ) ; +#6256 = FILL_AREA_STYLE ('',( #2768 ) ) ; +#6257 = SURFACE_STYLE_USAGE ( .BOTH. , #21972 ) ; +#6258 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6259 = LINE ( 'NONE', #24443, #22439 ) ; +#6260 = VERTEX_POINT ( 'NONE', #24929 ) ; +#6261 = FILL_AREA_STYLE ('',( #28982 ) ) ; +#6262 = SURFACE_SIDE_STYLE ('',( #10572 ) ) ; +#6263 = ORIENTED_EDGE ( 'NONE', *, *, #14929, .T. ) ; +#6264 = EDGE_CURVE ( 'NONE', #16077, #37872, #41466, .T. ) ; +#6265 = ORIENTED_EDGE ( 'NONE', *, *, #20534, .T. ) ; +#6266 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6267 = ORIENTED_EDGE ( 'NONE', *, *, #37744, .T. ) ; +#6268 = CLOSED_SHELL ( 'NONE', ( #20363, #2118, #41700, #3335, #28343, #33032 ) ) ; +#6269 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6270 = SURFACE_SIDE_STYLE ('',( #24112 ) ) ; +#6271 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#6272 = EDGE_CURVE ( 'NONE', #5440, #2452, #13178, .T. ) ; +#6273 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14105 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19455, #19045, #15898 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6274 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000800, 1.630001745296169500, -1.650000000000000400 ) ) ; +#6275 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30085 ) ) ; +#6276 = LINE ( 'NONE', #5354, #39612 ) ; +#6277 = VECTOR ( 'NONE', #8344, 1000.000000000000000 ) ; +#6278 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14123, 'distance_accuracy_value', 'NONE'); +#6279 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#6280 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #340 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4299, #26934, #30150 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6281 = SURFACE_STYLE_FILL_AREA ( #36374 ) ; +#6282 = TOROIDAL_SURFACE ( 'NONE', #21730, 1.550380236995679600, 0.1000000000000008500 ) ; +#6283 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.309669789692593200E-015, 0.0000000000000000000 ) ) ; +#6284 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25788 ), #35805 ) ; +#6285 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24425 ), #10597 ) ; +#6286 = FACE_OUTER_BOUND ( 'NONE', #1271, .T. ) ; +#6287 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6288 = PRESENTATION_STYLE_ASSIGNMENT (( #31045 ) ) ; +#6289 = CARTESIAN_POINT ( 'NONE', ( -2.149999999999999900, -1.499998254703822900, -6.699999999999994000 ) ) ; +#6291 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12302 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #769, #3955, #23323 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6290 = STYLED_ITEM ( 'NONE', ( #11152 ), #30049 ) ; +#6292 = ORIENTED_EDGE ( 'NONE', *, *, #41451, .F. ) ; +#6293 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -2.322941965694886000, 0.6999999999999999600 ) ) ; +#6295 = EDGE_CURVE ( 'NONE', #22297, #1135, #34922, .T. ) ; +#6294 = STYLED_ITEM ( 'NONE', ( #4107 ), #35236 ) ; +#6296 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.380001745296136400, -4.400000000000000400 ) ) ; +#6297 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6298 = PRESENTATION_STYLE_ASSIGNMENT (( #2436 ) ) ; +#6299 = VERTEX_POINT ( 'NONE', #19700 ) ; +#6300 = SURFACE_STYLE_FILL_AREA ( #11647 ) ; +#6301 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#6303 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19874 ), #8450 ) ; +#6302 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15757 ), #33094 ) ; +#6304 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6305 = LINE ( 'NONE', #23313, #38618 ) ; +#6306 = VECTOR ( 'NONE', #40439, 1000.000000000000000 ) ; +#6307 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000000000, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#6308 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6310 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#6309 = SURFACE_STYLE_USAGE ( .BOTH. , #33609 ) ; +#6311 = ORIENTED_EDGE ( 'NONE', *, *, #14653, .F. ) ; +#6312 = FILL_AREA_STYLE ('',( #6878 ) ) ; +#6313 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #5138, #37889, #18434, #1943 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#6314 = ORIENTED_EDGE ( 'NONE', *, *, #23155, .F. ) ; +#6315 = ADVANCED_FACE ( 'NONE', ( #26330 ), #18727, .F. ) ; +#6316 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.499998254703828600, -5.049999999999993600 ) ) ; +#6317 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6318 = VERTEX_POINT ( 'NONE', #10312 ) ; +#6319 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.773004880385253600, -0.7580972011844128200 ) ) ; +#6320 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#6321 = ORIENTED_EDGE ( 'NONE', *, *, #33435, .T. ) ; +#6322 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#6323 = VERTEX_POINT ( 'NONE', #10179 ) ; +#6324 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6325 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.380001745296130600, -6.031671842700004200 ) ) ; +#6326 = EDGE_CURVE ( 'NONE', #32326, #16898, #9605, .T. ) ; +#6327 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6328 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 10.30000000000000100, -1.250000000000000000 ) ) ; +#6329 = SURFACE_STYLE_FILL_AREA ( #17247 ) ; +#6330 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.3300017452961679900, -6.224999999999999600 ) ) ; +#6331 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6332 = ORIENTED_EDGE ( 'NONE', *, *, #14517, .T. ) ; +#6333 = EDGE_CURVE ( 'NONE', #14688, #11907, #29310, .T. ) ; +#6334 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34736 ) ) ; +#6335 = EDGE_LOOP ( 'NONE', ( #32852, #4076, #31732, #24779 ) ) ; +#6336 = FILL_AREA_STYLE ('',( #5918 ) ) ; +#6337 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.367138801244516300E-016, -1.000000000000000000 ) ) ; +#6338 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0002094395087002862800, 0.9999999780675458100 ) ) ; +#6339 = SURFACE_STYLE_FILL_AREA ( #26580 ) ; +#6340 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -2.367138801244516300E-016 ) ) ; +#6341 = VERTEX_POINT ( 'NONE', #26446 ) ; +#6342 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17156 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3400, #6912, #36183 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6343 = ORIENTED_EDGE ( 'NONE', *, *, #13019, .T. ) ; +#6344 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17544, 'distance_accuracy_value', 'NONE'); +#6345 = CARTESIAN_POINT ( 'NONE', ( 4.623418435431830200, -1.009999999999998500, -7.461124800398367000 ) ) ; +#6346 = LINE ( 'NONE', #32285, #20029 ) ; +#6347 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6348 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -1.499998254703833500, -5.049999999999993600 ) ) ; +#6349 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6350 = ADVANCED_FACE ( 'NONE', ( #40412 ), #8596, .T. ) ; +#6351 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28253 ), #1493 ) ; +#6352 = ORIENTED_EDGE ( 'NONE', *, *, #40142, .F. ) ; +#6353 = LINE ( 'NONE', #18363, #32107 ) ; +#6354 = CLOSED_SHELL ( 'NONE', ( #30486, #14429, #718, #6091 ) ) ; +#6355 = CIRCLE ( 'NONE', #23922, 0.3600000000000078700 ) ; +#6356 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #699 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37812, #5322, #18067 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6357 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6358 = FACE_OUTER_BOUND ( 'NONE', #8031, .T. ) ; +#6359 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.307718258760844200E-015, -1.000000000000000000 ) ) ; +#6360 = VECTOR ( 'NONE', #20173, 1000.000000000000000 ) ; +#6361 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2780, 'distance_accuracy_value', 'NONE'); +#6362 = SURFACE_STYLE_FILL_AREA ( #30973 ) ; +#6364 = EDGE_CURVE ( 'NONE', #39651, #34577, #15663, .T. ) ; +#6363 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35318 ) ) ; +#6365 = ORIENTED_EDGE ( 'NONE', *, *, #22572, .T. ) ; +#6366 = FACE_OUTER_BOUND ( 'NONE', #30622, .T. ) ; +#6367 = TOROIDAL_SURFACE ( 'NONE', #20440, 1.550380236995679600, 0.1000000000000008500 ) ; +#6369 = DIRECTION ( 'NONE', ( -0.9961946980917453200, 3.129741034912049500E-016, -0.08715574274766048300 ) ) ; +#6368 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664848500, 0.2800017452961317500, -6.850000000000000500 ) ) ; +#6370 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6371 = ADVANCED_FACE ( 'NONE', ( #2578 ), #29385, .T. ) ; +#6373 = STYLED_ITEM ( 'NONE', ( #38501 ), #2128 ) ; +#6372 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38823 ) ) ; +#6374 = FACE_OUTER_BOUND ( 'NONE', #38313, .T. ) ; +#6375 = ORIENTED_EDGE ( 'NONE', *, *, #23465, .T. ) ; +#6376 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16400 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2465, #24783, #30960 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6377 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6378 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.480001745296170000, -0.2339555568811697600 ) ) ; +#6379 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6380 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.2800017452961386900, -4.400000000000000400 ) ) ; +#6381 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6382 = ORIENTED_EDGE ( 'NONE', *, *, #7317, .F. ) ; +#6383 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.2699999999999848600, -5.199999999999999300 ) ) ; +#6384 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6385 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6386 = EDGE_CURVE ( 'NONE', #38026, #24146, #37911, .T. ) ; +#6387 = ORIENTED_EDGE ( 'NONE', *, *, #28866, .T. ) ; +#6388 = VERTEX_POINT ( 'NONE', #7779 ) ; +#6389 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#6390 = EDGE_LOOP ( 'NONE', ( #38018, #29478, #14073, #21832 ) ) ; +#6391 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6392 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000011200, -1.999998254703821500, -6.649261509947660200 ) ) ; +#6393 = SURFACE_STYLE_FILL_AREA ( #25390 ) ; +#6394 = EDGE_CURVE ( 'NONE', #13022, #454, #26295, .T. ) ; +#6395 = SURFACE_STYLE_FILL_AREA ( #27949 ) ; +#6396 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#6397 = SURFACE_STYLE_USAGE ( .BOTH. , #38438 ) ; +#6398 = VERTEX_POINT ( 'NONE', #10026 ) ; +#6399 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.999998254703822900, -5.899999999999999500 ) ) ; +#6400 = ORIENTED_EDGE ( 'NONE', *, *, #7292, .T. ) ; +#6401 = ADVANCED_FACE ( 'NONE', ( #7592 ), #20532, .F. ) ; +#6402 = EDGE_CURVE ( 'NONE', #36907, #12686, #35374, .T. ) ; +#6403 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6404 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7432 ), #23724 ) ; +#6405 = FILL_AREA_STYLE ('',( #648 ) ) ; +#6406 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6407 = SURFACE_STYLE_FILL_AREA ( #38490 ) ; +#6408 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#6409 = FACE_OUTER_BOUND ( 'NONE', #31266, .T. ) ; +#6410 = FACE_OUTER_BOUND ( 'NONE', #4710, .T. ) ; +#6411 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.499998254703840000, -5.449999999999994000 ) ) ; +#6412 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34552 ) ) ; +#6413 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6414 = PLANE ( 'NONE', #30417 ) ; +#6415 = STYLED_ITEM ( 'NONE', ( #24524 ), #11964 ) ; +#6416 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.07499999999999999700, 0.01000000000000000000 ) ) ; +#6417 = SURFACE_SIDE_STYLE ('',( #40011 ) ) ; +#6420 = EDGE_CURVE ( 'NONE', #26417, #13926, #3512, .T. ) ; +#6419 = FILL_AREA_STYLE ('',( #22657 ) ) ; +#6418 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41144 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20946, #1870, #5075 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6421 = ORIENTED_EDGE ( 'NONE', *, *, #31572, .F. ) ; +#6423 = STYLED_ITEM ( 'NONE', ( #29577 ), #2542 ) ; +#6422 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36920 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1348, #23484, #33097 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6424 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, -0.7071067811865483500 ) ) ; +#6425 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2136 ), #17263 ) ; +#6426 = EDGE_LOOP ( 'NONE', ( #15669, #15243, #41709, #10700 ) ) ; +#6427 = VECTOR ( 'NONE', #39424, 1000.000000000000000 ) ; +#6428 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2140 ), #10738 ) ; +#6429 = ORIENTED_EDGE ( 'NONE', *, *, #38426, .F. ) ; +#6430 = ORIENTED_EDGE ( 'NONE', *, *, #15185, .F. ) ; +#6431 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6432 = ORIENTED_EDGE ( 'NONE', *, *, #582, .F. ) ; +#6433 = PLANE ( 'NONE', #28558 ) ; +#6434 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#6435 = PRESENTATION_STYLE_ASSIGNMENT (( #41142 ) ) ; +#6437 = LINE ( 'NONE', #21993, #3866 ) ; +#6436 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3044, 'distance_accuracy_value', 'NONE'); +#6438 = ORIENTED_EDGE ( 'NONE', *, *, #34622, .F. ) ; +#6439 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -5.075000000000000200 ) ) ; +#6440 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.139998254717353500, -6.299996877890552400 ) ) ; +#6441 = SURFACE_STYLE_FILL_AREA ( #35519 ) ; +#6442 = ORIENTED_EDGE ( 'NONE', *, *, #19969, .T. ) ; +#6443 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, -0.4343145750507614900, -3.250000000000000900 ) ) ; +#6444 = SURFACE_STYLE_USAGE ( .BOTH. , #25800 ) ; +#6445 = VECTOR ( 'NONE', #13630, 1000.000000000000000 ) ; +#6446 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000012100, -1.999998254703821500, -5.899999999999999500 ) ) ; +#6447 = CARTESIAN_POINT ( 'NONE', ( 2.673205080756886800, 1.630001745296169500, -1.650000000000000800 ) ) ; +#6448 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.499998254703822000, -5.449999999999994000 ) ) ; +#6449 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6450 = CARTESIAN_POINT ( 'NONE', ( -3.145000000000000000, -0.2999999999999999900, 0.6780706550913999700 ) ) ; +#6451 = EDGE_CURVE ( 'NONE', #10923, #17232, #4525, .T. ) ; +#6452 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6453 = PRESENTATION_STYLE_ASSIGNMENT (( #19717 ) ) ; +#6454 = FILL_AREA_STYLE ('',( #35692 ) ) ; +#6455 = EDGE_CURVE ( 'NONE', #12836, #38000, #31314, .T. ) ; +#6456 = ORIENTED_EDGE ( 'NONE', *, *, #3836, .F. ) ; +#6457 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000800, -0.5000000000000879300 ) ) ; +#6458 = LINE ( 'NONE', #32244, #39792 ) ; +#6459 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29263 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41424, #29389, #34538 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6460 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -2.294459358809384700 ) ) ; +#6461 = EDGE_CURVE ( 'NONE', #19017, #17105, #16432, .T. ) ; +#6462 = ORIENTED_EDGE ( 'NONE', *, *, #35352, .F. ) ; +#6463 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32435 ) ) ; +#6464 = ORIENTED_EDGE ( 'NONE', *, *, #15312, .T. ) ; +#6465 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -2.031000000000000600, -1.994459358809383700 ) ) ; +#6466 = ORIENTED_EDGE ( 'NONE', *, *, #4536, .T. ) ; +#6467 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#6468 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.056601140521967900E-031 ) ) ; +#6469 = ORIENTED_EDGE ( 'NONE', *, *, #18717, .F. ) ; +#6470 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6471 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33008 ), #12950 ) ; +#6472 = SURFACE_STYLE_USAGE ( .BOTH. , #2970 ) ; +#6473 = LINE ( 'NONE', #20403, #38273 ) ; +#6475 = EDGE_CURVE ( 'NONE', #33019, #22297, #11082, .T. ) ; +#6474 = STYLED_ITEM ( 'NONE', ( #15944 ), #24557 ) ; +#6476 = VERTEX_POINT ( 'NONE', #23891 ) ; +#6477 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.799998254703822000, -3.700000000000000200 ) ) ; +#6478 = VECTOR ( 'NONE', #22550, 1000.000000000000000 ) ; +#6479 = VERTEX_POINT ( 'NONE', #39965 ) ; +#6480 = LINE ( 'NONE', #34801, #9495 ) ; +#6482 = AXIS2_PLACEMENT_3D ( 'NONE', #8174, #27410, #37567 ) ; +#6481 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15982 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28060, #22127, #2809 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6483 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41378 ) ) ; +#6484 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6485 = CARTESIAN_POINT ( 'NONE', ( 3.119636707815099300, 0.2999999999999999300, 1.000000000000057300 ) ) ; +#6486 = ORIENTED_EDGE ( 'NONE', *, *, #16043, .T. ) ; +#6487 = SURFACE_STYLE_USAGE ( .BOTH. , #25839 ) ; +#6488 = FILL_AREA_STYLE ('',( #12685 ) ) ; +#6489 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4878 ), #15943 ) ; +#6490 = LINE ( 'NONE', #26916, #21198 ) ; +#6491 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6492 = CARTESIAN_POINT ( 'NONE', ( -3.864489691160448700, 0.5899028684060801900, -4.401287077292113100 ) ) ; +#6493 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.168401191219098200E-015, 0.0000000000000000000 ) ) ; +#6494 = ORIENTED_EDGE ( 'NONE', *, *, #11725, .T. ) ; +#6495 = PLANE ( 'NONE', #16262 ) ; +#6496 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6497 = VERTEX_POINT ( 'NONE', #30247 ) ; +#6498 = ORIENTED_EDGE ( 'NONE', *, *, #15081, .F. ) ; +#6499 = VERTEX_POINT ( 'NONE', #33633 ) ; +#6500 = VERTEX_POINT ( 'NONE', #23333 ) ; +#6501 = VECTOR ( 'NONE', #4677, 1000.000000000000000 ) ; +#6502 = VERTEX_POINT ( 'NONE', #4541 ) ; +#6503 = VERTEX_POINT ( 'NONE', #4112 ) ; +#6504 = ORIENTED_EDGE ( 'NONE', *, *, #33703, .F. ) ; +#6505 = EDGE_CURVE ( 'NONE', #6398, #36996, #5540, .T. ) ; +#6506 = LINE ( 'NONE', #1662, #10007 ) ; +#6507 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6508 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17535, 'distance_accuracy_value', 'NONE'); +#6509 = CARTESIAN_POINT ( 'NONE', ( -3.024289321881345600, -0.3500000000000000300, -1.400000000000000100 ) ) ; +#6510 = FILL_AREA_STYLE ('',( #12301 ) ) ; +#6511 = ADVANCED_FACE ( 'NONE', ( #28797 ), #21257, .T. ) ; +#6512 = EDGE_CURVE ( 'NONE', #11470, #5703, #12078, .T. ) ; +#6513 = AXIS2_PLACEMENT_3D ( 'NONE', #1389, #4739, #7968 ) ; +#6514 = VERTEX_POINT ( 'NONE', #17080 ) ; +#6515 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000012100, -1.999998254703822400, -5.899999999999999500 ) ) ; +#6516 = FACE_OUTER_BOUND ( 'NONE', #12419, .T. ) ; +#6517 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6518 = CIRCLE ( 'NONE', #32754, 0.05000000000000056500 ) ; +#6519 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.837630800822890800E-016 ) ) ; +#6520 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18184 ), #9469 ) ; +#6521 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6522 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000026900, 0.0000000000000000000 ) ) ; +#6523 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6524 = CARTESIAN_POINT ( 'NONE', ( -4.750000000000003600, -0.4099999999999990900, -6.861124800398366500 ) ) ; +#6525 = AXIS2_PLACEMENT_3D ( 'NONE', #17257, #23460, #7477 ) ; +#6526 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26023 ) ) ; +#6528 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8127 ) ) ; +#6527 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7713 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2890, #18978, #34920 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6529 = FILL_AREA_STYLE ('',( #38859 ) ) ; +#6530 = PLANE ( 'NONE', #26014 ) ; +#6531 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6532 = ORIENTED_EDGE ( 'NONE', *, *, #20695, .F. ) ; +#6534 = EDGE_CURVE ( 'NONE', #4960, #834, #4025, .T. ) ; +#6533 = STYLED_ITEM ( 'NONE', ( #13017 ), #34701 ) ; +#6535 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.2999999999999999900, -1.399999999993000600 ) ) ; +#6536 = SURFACE_STYLE_FILL_AREA ( #31959 ) ; +#6537 = ORIENTED_EDGE ( 'NONE', *, *, #5552, .F. ) ; +#6538 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6540 = AXIS2_PLACEMENT_3D ( 'NONE', #17290, #29986, #13447 ) ; +#6539 = AXIS2_PLACEMENT_3D ( 'NONE', #28401, #12285, #41393 ) ; +#6541 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -0.2000017452961698200 ) ) ; +#6542 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, 0.07499999999999999700, 0.0000000000000000000 ) ) ; +#6543 = LINE ( 'NONE', #27, #9030 ) ; +#6544 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6545 = EDGE_LOOP ( 'NONE', ( #11805, #32357, #30000, #20584 ) ) ; +#6546 = ORIENTED_EDGE ( 'NONE', *, *, #6684, .F. ) ; +#6548 = ORIENTED_EDGE ( 'NONE', *, *, #28788, .T. ) ; +#6547 = ADVANCED_FACE ( 'NONE', ( #26253 ), #30764, .T. ) ; +#6549 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.3300017452961694400, -4.975000000000000500 ) ) ; +#6550 = SURFACE_STYLE_USAGE ( .BOTH. , #9643 ) ; +#6551 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6552 = ORIENTED_EDGE ( 'NONE', *, *, #3776, .T. ) ; +#6553 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#6554 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#6555 = DIRECTION ( 'NONE', ( -3.281909278875039200E-015, 1.000000000000000000, -1.008560160451628400E-016 ) ) ; +#6556 = LINE ( 'NONE', #4573, #4545 ) ; +#6557 = LINE ( 'NONE', #34831, #19728 ) ; +#6558 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6559 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6560 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6561 = EDGE_CURVE ( 'NONE', #34774, #3613, #27801, .T. ) ; +#6562 = VECTOR ( 'NONE', #31531, 1000.000000000000000 ) ; +#6563 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6564 = SURFACE_STYLE_FILL_AREA ( #33418 ) ; +#6565 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6566 = EDGE_CURVE ( 'NONE', #33220, #28229, #19710, .T. ) ; +#6567 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #689 ) ) ; +#6568 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21842, 'distance_accuracy_value', 'NONE'); +#6569 = ORIENTED_EDGE ( 'NONE', *, *, #31398, .T. ) ; +#6570 = SURFACE_SIDE_STYLE ('',( #7655 ) ) ; +#6571 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6572 = SURFACE_SIDE_STYLE ('',( #31731 ) ) ; +#6573 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.380001745296126800, -5.449999999999994000 ) ) ; +#6574 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #13150, #9753, #19964, #36052 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#6575 = ORIENTED_EDGE ( 'NONE', *, *, #4723, .F. ) ; +#6576 = AXIS2_PLACEMENT_3D ( 'NONE', #1100, #4009, #16860 ) ; +#6577 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6578 = DIRECTION ( 'NONE', ( 5.833849355614570300E-031, -3.516331370223256700E-016, -1.000000000000000000 ) ) ; +#6579 = VECTOR ( 'NONE', #36324, 1000.000000000000000 ) ; +#6580 = ORIENTED_EDGE ( 'NONE', *, *, #29705, .F. ) ; +#6581 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.499998254703829500, -6.299999999999993600 ) ) ; +#6582 = EDGE_LOOP ( 'NONE', ( #30088, #28569, #20127, #36185 ) ) ; +#6583 = ORIENTED_EDGE ( 'NONE', *, *, #30585, .T. ) ; +#6584 = AXIS2_PLACEMENT_3D ( 'NONE', #22758, #32626, #3398 ) ; +#6585 = SURFACE_SIDE_STYLE ('',( #25580 ) ) ; +#6587 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6586 = AXIS2_PLACEMENT_3D ( 'NONE', #38309, #31822, #9193 ) ; +#6589 = AXIS2_PLACEMENT_3D ( 'NONE', #26022, #6659, #13419 ) ; +#6588 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6879 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4411, #40395, #40118 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6590 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6593 = EDGE_CURVE ( 'NONE', #26417, #15621, #19221, .T. ) ; +#6592 = CARTESIAN_POINT ( 'NONE', ( -3.889279205788390500, 0.5679460736528758600, -4.559178982413207800 ) ) ; +#6591 = STYLED_ITEM ( 'NONE', ( #25772 ), #35552 ) ; +#6594 = ORIENTED_EDGE ( 'NONE', *, *, #138, .F. ) ; +#6595 = SURFACE_SIDE_STYLE ('',( #34222 ) ) ; +#6596 = VECTOR ( 'NONE', #29456, 1000.000000000000000 ) ; +#6597 = ADVANCED_FACE ( 'NONE', ( #40912 ), #36701, .F. ) ; +#6598 = FACE_OUTER_BOUND ( 'NONE', #8727, .T. ) ; +#6599 = PRESENTATION_STYLE_ASSIGNMENT (( #3450 ) ) ; +#6600 = VECTOR ( 'NONE', #1977, 1000.000000000000000 ) ; +#6602 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23384 ), #14470 ) ; +#6601 = AXIS2_PLACEMENT_3D ( 'NONE', #11986, #34055, #18402 ) ; +#6603 = SURFACE_STYLE_USAGE ( .BOTH. , #26106 ) ; +#6604 = SURFACE_SIDE_STYLE ('',( #31492 ) ) ; +#6605 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6606 = VECTOR ( 'NONE', #40846, 1000.000000000000000 ) ; +#6607 = SURFACE_STYLE_FILL_AREA ( #34859 ) ; +#6608 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6609 = ORIENTED_EDGE ( 'NONE', *, *, #12798, .T. ) ; +#6610 = LINE ( 'NONE', #40925, #31388 ) ; +#6611 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6612 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6613 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6614 = FACE_OUTER_BOUND ( 'NONE', #13183, .T. ) ; +#6615 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#6616 = ORIENTED_EDGE ( 'NONE', *, *, #1536, .F. ) ; +#6617 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#6618 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4805, 'distance_accuracy_value', 'NONE'); +#6619 = FILL_AREA_STYLE ('',( #9714 ) ) ; +#6620 = FILL_AREA_STYLE_COLOUR ( '', #15789 ) ; +#6621 = PRESENTATION_STYLE_ASSIGNMENT (( #14007 ) ) ; +#6622 = ORIENTED_EDGE ( 'NONE', *, *, #12555, .T. ) ; +#6623 = EDGE_CURVE ( 'NONE', #22566, #10090, #7015, .T. ) ; +#6624 = VECTOR ( 'NONE', #28164, 1000.000000000000000 ) ; +#6625 = VERTEX_POINT ( 'NONE', #23994 ) ; +#6626 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875040400E-015, -6.056601140521968800E-031 ) ) ; +#6627 = FILL_AREA_STYLE_COLOUR ( '', #37673 ) ; +#6628 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -4.400000000000000400 ) ) ; +#6629 = EDGE_CURVE ( 'NONE', #21185, #29191, #9031, .T. ) ; +#6630 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.3699999999999856200, -5.299999999999999800 ) ) ; +#6631 = EDGE_LOOP ( 'NONE', ( #3373, #36176, #25704, #17152 ) ) ; +#6632 = ORIENTED_EDGE ( 'NONE', *, *, #30837, .F. ) ; +#6633 = VECTOR ( 'NONE', #3330, 1000.000000000000200 ) ; +#6634 = SURFACE_STYLE_FILL_AREA ( #27783 ) ; +#6635 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23973 ), #41296 ) ; +#6636 = LINE ( 'NONE', #22471, #13741 ) ; +#6637 = CYLINDRICAL_SURFACE ( 'NONE', #12710, 0.3000000000000003800 ) ; +#6638 = FACE_BOUND ( 'NONE', #8187, .T. ) ; +#6639 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6640 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6641 = AXIS2_PLACEMENT_3D ( 'NONE', #20652, #17231, #1302 ) ; +#6642 = VERTEX_POINT ( 'NONE', #1294 ) ; +#6644 = EDGE_CURVE ( 'NONE', #14941, #3891, #24754, .T. ) ; +#6643 = AXIS2_PLACEMENT_3D ( 'NONE', #4719, #1642, #36771 ) ; +#6645 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6646 = FILL_AREA_STYLE_COLOUR ( '', #32923 ) ; +#6647 = DIRECTION ( 'NONE', ( 0.7071067811865352500, 0.7071067811865597900, 4.282663737405171400E-031 ) ) ; +#6648 = ORIENTED_EDGE ( 'NONE', *, *, #11091, .F. ) ; +#6649 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2065, 'distance_accuracy_value', 'NONE'); +#6650 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6652 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26740 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22828, #22554, #35683 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6651 = STYLED_ITEM ( 'NONE', ( #22263 ), #27155 ) ; +#6653 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20419 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37235, #4893, #24258 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6654 = FILL_AREA_STYLE_COLOUR ( '', #30615 ) ; +#6655 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6656 = CIRCLE ( 'NONE', #25544, 0.1999999999999996500 ) ; +#6657 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6658 = ORIENTED_EDGE ( 'NONE', *, *, #19474, .T. ) ; +#6659 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865475700, 0.7071067811865475700 ) ) ; +#6660 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6661 = VECTOR ( 'NONE', #7353, 1000.000000000000000 ) ; +#6662 = PLANE ( 'NONE', #35989 ) ; +#6663 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6664 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#6665 = ORIENTED_EDGE ( 'NONE', *, *, #3719, .F. ) ; +#6666 = CARTESIAN_POINT ( 'NONE', ( 3.127842712510461100, -0.3292893218813451300, -1.600000000042762800 ) ) ; +#6667 = CIRCLE ( 'NONE', #22974, 0.09999999999999999200 ) ; +#6668 = EDGE_LOOP ( 'NONE', ( #39841, #20892, #5910, #11771 ) ) ; +#6669 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, 0.6780706550913999700 ) ) ; +#6670 = VECTOR ( 'NONE', #30076, 1000.000000000000000 ) ; +#6671 = FILL_AREA_STYLE ('',( #41688 ) ) ; +#6672 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6673 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6674 = PRESENTATION_STYLE_ASSIGNMENT (( #33486 ) ) ; +#6675 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6676 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6677 = PRESENTATION_STYLE_ASSIGNMENT (( #41046 ) ) ; +#6678 = SURFACE_STYLE_FILL_AREA ( #7846 ) ; +#6679 = EDGE_CURVE ( 'NONE', #14331, #10955, #22685, .T. ) ; +#6680 = SURFACE_STYLE_USAGE ( .BOTH. , #16021 ) ; +#6681 = EDGE_CURVE ( 'NONE', #15788, #39019, #22209, .T. ) ; +#6682 = ORIENTED_EDGE ( 'NONE', *, *, #19037, .T. ) ; +#6683 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7188, 'distance_accuracy_value', 'NONE'); +#6684 = EDGE_CURVE ( 'NONE', #35418, #3673, #21701, .T. ) ; +#6685 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6686 = EDGE_LOOP ( 'NONE', ( #36149, #6665 ) ) ; +#6687 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6688 = FACE_BOUND ( 'NONE', #32266, .T. ) ; +#6689 = FILL_AREA_STYLE_COLOUR ( '', #38006 ) ; +#6690 = EDGE_CURVE ( 'NONE', #11644, #14426, #13601, .T. ) ; +#6691 = ORIENTED_EDGE ( 'NONE', *, *, #17303, .T. ) ; +#6692 = SURFACE_SIDE_STYLE ('',( #27715 ) ) ; +#6693 = ORIENTED_EDGE ( 'NONE', *, *, #27994, .F. ) ; +#6694 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6695 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2419 ) ) ; +#6697 = VERTEX_POINT ( 'NONE', #15233 ) ; +#6696 = FACE_OUTER_BOUND ( 'NONE', #38703, .T. ) ; +#6698 = EDGE_LOOP ( 'NONE', ( #19417, #10753, #9327, #30006 ) ) ; +#6699 = STYLED_ITEM ( 'NONE', ( #29920 ), #12734 ) ; +#6700 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664843100, -1.380001745296171900, -5.650000000000000400 ) ) ; +#6701 = SURFACE_SIDE_STYLE ('',( #17488 ) ) ; +#6704 = EDGE_CURVE ( 'NONE', #18033, #16591, #1014, .T. ) ; +#6703 = AXIS2_PLACEMENT_3D ( 'NONE', #8185, #24040, #40392 ) ; +#6702 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#6705 = CARTESIAN_POINT ( 'NONE', ( 3.273571428571024500, -0.07499999999999999700, -0.08583148475007257300 ) ) ; +#6706 = VERTEX_POINT ( 'NONE', #11939 ) ; +#6707 = LINE ( 'NONE', #7450, #5710 ) ; +#6708 = ORIENTED_EDGE ( 'NONE', *, *, #33088, .F. ) ; +#6709 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6710 = VECTOR ( 'NONE', #302, 1000.000000000000000 ) ; +#6711 = ADVANCED_FACE ( 'NONE', ( #40373 ), #14797, .F. ) ; +#6712 = AXIS2_PLACEMENT_3D ( 'NONE', #27149, #1884, #17960 ) ; +#6713 = SURFACE_STYLE_FILL_AREA ( #14837 ) ; +#6714 = STYLED_ITEM ( 'NONE', ( #30805 ), #40914 ) ; +#6715 = CARTESIAN_POINT ( 'NONE', ( -3.315809924354813400, 0.3499999999999244800, 12.42614000000000000 ) ) ; +#6716 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39 ) ) ; +#6717 = SURFACE_STYLE_USAGE ( .BOTH. , #38776 ) ; +#6718 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6721 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5368 ) ) ; +#6720 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#6719 = SURFACE_STYLE_FILL_AREA ( #34412 ) ; +#6722 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6723 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000600, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#6724 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000030900, -2.031000000000001500, -6.449999999999999300 ) ) ; +#6725 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, -0.3000000000000001600, -1.250000000000000000 ) ) ; +#6726 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#6727 = ORIENTED_EDGE ( 'NONE', *, *, #20090, .F. ) ; +#6728 = SURFACE_STYLE_USAGE ( .BOTH. , #23133 ) ; +#6729 = ORIENTED_EDGE ( 'NONE', *, *, #23150, .T. ) ; +#6730 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6731 = VERTEX_POINT ( 'NONE', #37940 ) ; +#6733 = ORIENTED_EDGE ( 'NONE', *, *, #22304, .T. ) ; +#6732 = SURFACE_STYLE_FILL_AREA ( #38352 ) ; +#6734 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26517, 'distance_accuracy_value', 'NONE'); +#6735 = ORIENTED_EDGE ( 'NONE', *, *, #10448, .F. ) ; +#6736 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6737 = SURFACE_SIDE_STYLE ('',( #2803 ) ) ; +#6738 = CARTESIAN_POINT ( 'NONE', ( -3.045000000000000400, 0.2999999999999999900, -1.399999999955500200 ) ) ; +#6739 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6740 = FILL_AREA_STYLE_COLOUR ( '', #20985 ) ; +#6741 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#6742 = LINE ( 'NONE', #24471, #4239 ) ; +#6743 = SURFACE_STYLE_USAGE ( .BOTH. , #23000 ) ; +#6744 = ADVANCED_FACE ( 'NONE', ( #15626 ), #40625, .T. ) ; +#6745 = EDGE_CURVE ( 'NONE', #38653, #24143, #14623, .T. ) ; +#6746 = FACE_OUTER_BOUND ( 'NONE', #7019, .T. ) ; +#6747 = VECTOR ( 'NONE', #39951, 1000.000000000000000 ) ; +#6748 = LINE ( 'NONE', #24928, #22933 ) ; +#6749 = FILL_AREA_STYLE_COLOUR ( '', #14013 ) ; +#6750 = EDGE_CURVE ( 'NONE', #13682, #20982, #29766, .T. ) ; +#6751 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20769, 'distance_accuracy_value', 'NONE'); +#6752 = SURFACE_STYLE_USAGE ( .BOTH. , #19933 ) ; +#6754 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.734723475976805600E-016, 1.000000000000000000 ) ) ; +#6753 = FILL_AREA_STYLE ('',( #32185 ) ) ; +#6755 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6756 = ADVANCED_FACE ( 'NONE', ( #21220 ), #8700, .T. ) ; +#6757 = STYLED_ITEM ( 'NONE', ( #508 ), #13701 ) ; +#6758 = FILL_AREA_STYLE_COLOUR ( '', #16368 ) ; +#6759 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6760 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999998900, -0.4343145750507618200, -3.249999999999999600 ) ) ; +#6761 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#6762 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8118 ), #5981 ) ; +#6763 = STYLED_ITEM ( 'NONE', ( #38109 ), #18031 ) ; +#6764 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, 0.2800017452961687200, -6.749999999999999100 ) ) ; +#6766 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9737 ) ) ; +#6765 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13110 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33776, #27555, #20963 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6769 = EDGE_CURVE ( 'NONE', #6697, #31628, #26715, .T. ) ; +#6768 = SURFACE_STYLE_USAGE ( .BOTH. , #16532 ) ; +#6767 = STYLED_ITEM ( 'NONE', ( #9029 ), #34457 ) ; +#6770 = ORIENTED_EDGE ( 'NONE', *, *, #2126, .T. ) ; +#6771 = AXIS2_PLACEMENT_3D ( 'NONE', #24171, #27405, #17693 ) ; +#6772 = PLANE ( 'NONE', #36262 ) ; +#6773 = FACE_OUTER_BOUND ( 'NONE', #8480, .T. ) ; +#6774 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6775 = SURFACE_STYLE_USAGE ( .BOTH. , #19683 ) ; +#6776 = ORIENTED_EDGE ( 'NONE', *, *, #20239, .T. ) ; +#6777 = STYLED_ITEM ( 'NONE', ( #38846 ), #24883 ) ; +#6778 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#6779 = DIRECTION ( 'NONE', ( 0.3746065948719964300, 0.0000000000000000000, -0.9271838539784911200 ) ) ; +#6780 = SURFACE_SIDE_STYLE ('',( #28393 ) ) ; +#6781 = CARTESIAN_POINT ( 'NONE', ( -3.337718385397990600, -0.2999999999999999900, 0.4680226303560962000 ) ) ; +#6782 = SURFACE_STYLE_FILL_AREA ( #18545 ) ; +#6783 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12087, 'distance_accuracy_value', 'NONE'); +#6784 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6785 = LINE ( 'NONE', #1457, #36085 ) ; +#6786 = VERTEX_POINT ( 'NONE', #5614 ) ; +#6787 = PRESENTATION_STYLE_ASSIGNMENT (( #35354 ) ) ; +#6788 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6789 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.2699999999999848600, -5.199999999999999300 ) ) ; +#6790 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6791 = ADVANCED_FACE ( 'NONE', ( #11045 ), #8419, .T. ) ; +#6792 = FILL_AREA_STYLE ('',( #16286 ) ) ; +#6793 = SURFACE_STYLE_USAGE ( .BOTH. , #9485 ) ; +#6794 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6795 = ORIENTED_EDGE ( 'NONE', *, *, #11820, .T. ) ; +#6796 = FILL_AREA_STYLE ('',( #29122 ) ) ; +#6797 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.2300017452961680700, -6.325000000000000200 ) ) ; +#6798 = EDGE_LOOP ( 'NONE', ( #22449, #14065, #28206, #30633 ) ) ; +#6799 = SURFACE_STYLE_FILL_AREA ( #36202 ) ; +#6800 = CARTESIAN_POINT ( 'NONE', ( 4.770000000000131900, 0.2799999999999973100, -0.5000000000000879300 ) ) ; +#6801 = EDGE_CURVE ( 'NONE', #23744, #18082, #21182, .T. ) ; +#6802 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#6803 = SURFACE_SIDE_STYLE ('',( #34276 ) ) ; +#6804 = ORIENTED_EDGE ( 'NONE', *, *, #11825, .F. ) ; +#6805 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#6806 = CARTESIAN_POINT ( 'NONE', ( 9.035018104045870900E-016, -0.3499999999999999800, -1.249999999999997800 ) ) ; +#6807 = EDGE_CURVE ( 'NONE', #972, #9925, #9999, .T. ) ; +#6808 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#6809 = AXIS2_PLACEMENT_3D ( 'NONE', #14615, #1794, #28029 ) ; +#6810 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.2800017452961687200, -6.249999999999998200 ) ) ; +#6811 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#6812 = ORIENTED_EDGE ( 'NONE', *, *, #31286, .F. ) ; +#6813 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.499998254703827700, -6.299999999999993600 ) ) ; +#6814 = STYLED_ITEM ( 'NONE', ( #30688 ), #14888 ) ; +#6815 = VECTOR ( 'NONE', #41817, 1000.000000000000000 ) ; +#6816 = VECTOR ( 'NONE', #40909, 1000.000000000000000 ) ; +#6817 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.499998254703822000, -5.449999999999994000 ) ) ; +#6818 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36455, 'distance_accuracy_value', 'NONE'); +#6819 = PRESENTATION_STYLE_ASSIGNMENT (( #3618 ) ) ; +#6820 = FILL_AREA_STYLE_COLOUR ( '', #14204 ) ; +#6821 = LINE ( 'NONE', #21553, #39155 ) ; +#6822 = VERTEX_POINT ( 'NONE', #3426 ) ; +#6823 = AXIS2_PLACEMENT_3D ( 'NONE', #31840, #5728, #22114 ) ; +#6824 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28945 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38420, #19119, #25601 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6825 = CARTESIAN_POINT ( 'NONE', ( 4.748858409427523200, 0.08000174529616929700, -7.173853277175703100 ) ) ; +#6826 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#6827 = CYLINDRICAL_SURFACE ( 'NONE', #29176, 0.1000000000000009100 ) ; +#6829 = STYLED_ITEM ( 'NONE', ( #38328 ), #5930 ) ; +#6828 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3554 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12749, #35231, #9634 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6830 = EDGE_LOOP ( 'NONE', ( #861, #9967, #19270, #27996 ) ) ; +#6831 = SURFACE_SIDE_STYLE ('',( #144 ) ) ; +#6833 = EDGE_CURVE ( 'NONE', #6497, #20399, #19147, .T. ) ; +#6832 = AXIS2_PLACEMENT_3D ( 'NONE', #31534, #35203, #31933 ) ; +#6834 = SURFACE_SIDE_STYLE ('',( #34800 ) ) ; +#6835 = CARTESIAN_POINT ( 'NONE', ( 4.599429204713762200, -1.400001745296165300, -7.186926638587857900 ) ) ; +#6836 = VECTOR ( 'NONE', #3543, 1000.000000000000000 ) ; +#6838 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27399 ) ) ; +#6837 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17710 ) ) ; +#6839 = SURFACE_SIDE_STYLE ('',( #38463 ) ) ; +#6840 = CARTESIAN_POINT ( 'NONE', ( 3.027042081088487300, 0.5937568000502925200, -1.923561226168958700 ) ) ; +#6841 = FILL_AREA_STYLE ('',( #16609 ) ) ; +#6842 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6843 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000012400, -1.949998254703821700, -6.732287565553231300 ) ) ; +#6844 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #2079, #21275, #24511, #28157 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#6845 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6846 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664844900, -1.080001745296171900, -6.250000000000000000 ) ) ; +#6847 = VECTOR ( 'NONE', #8838, 1000.000000000000000 ) ; +#6848 = CARTESIAN_POINT ( 'NONE', ( 3.027773529658075000, -0.3380711211894935600, -1.288071121189493300 ) ) ; +#6849 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 10.30000000000000100, -1.250000000000000000 ) ) ; +#6850 = ORIENTED_EDGE ( 'NONE', *, *, #22241, .F. ) ; +#6851 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6852 = VERTEX_POINT ( 'NONE', #9890 ) ; +#6853 = ORIENTED_EDGE ( 'NONE', *, *, #448, .T. ) ; +#6854 = FILL_AREA_STYLE_COLOUR ( '', #39886 ) ; +#6855 = SURFACE_STYLE_FILL_AREA ( #2804 ) ; +#6856 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1130, 'distance_accuracy_value', 'NONE'); +#6857 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 0.2800017452961674500, -5.650000000000000400 ) ) ; +#6858 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#6859 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#6860 = VERTEX_POINT ( 'NONE', #22782 ) ; +#6861 = EDGE_CURVE ( 'NONE', #37590, #27080, #13552, .T. ) ; +#6862 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6863 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998358800, -4.450000000000000200 ) ) ; +#6864 = LINE ( 'NONE', #13474, #20050 ) ; +#6865 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6866 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 2.367138801244516800E-016, 1.000000000000000000 ) ) ; +#6867 = EDGE_CURVE ( 'NONE', #32559, #27746, #2971, .T. ) ; +#6868 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.949998254703820600, 0.0000000000000000000 ) ) ; +#6869 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#6870 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15333 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28510, #25023, #28098 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6871 = FACE_OUTER_BOUND ( 'NONE', #38671, .T. ) ; +#6872 = FILL_AREA_STYLE_COLOUR ( '', #40636 ) ; +#6873 = FILL_AREA_STYLE ('',( #4062 ) ) ; +#6874 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000800, 1.480001745296169600, -1.750000000000000900 ) ) ; +#6875 = EDGE_LOOP ( 'NONE', ( #35952, #25123, #40618, #2410 ) ) ; +#6876 = AXIS2_PLACEMENT_3D ( 'NONE', #14069, #36513, #7536 ) ; +#6877 = SURFACE_STYLE_FILL_AREA ( #26905 ) ; +#6878 = FILL_AREA_STYLE_COLOUR ( '', #27666 ) ; +#6879 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4411, 'distance_accuracy_value', 'NONE'); +#6880 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33698 ), #14765 ) ; +#6881 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.3500000000000000300, -1.300000000000000000 ) ) ; +#6882 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#6883 = ORIENTED_EDGE ( 'NONE', *, *, #6769, .F. ) ; +#6885 = EDGE_CURVE ( 'NONE', #30940, #380, #8999, .T. ) ; +#6884 = AXIS2_PLACEMENT_3D ( 'NONE', #14648, #11518, #27786 ) ; +#6886 = VECTOR ( 'NONE', #36163, 1000.000000000000000 ) ; +#6887 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6888 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17891, 'distance_accuracy_value', 'NONE'); +#6889 = ORIENTED_EDGE ( 'NONE', *, *, #19124, .F. ) ; +#6891 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -2.322941965694886000, -1.250000000000000000 ) ) ; +#6890 = FILL_AREA_STYLE ('',( #16517 ) ) ; +#6892 = ORIENTED_EDGE ( 'NONE', *, *, #21835, .T. ) ; +#6893 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#6894 = VERTEX_POINT ( 'NONE', #16563 ) ; +#6895 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -0.3499999999999999800, 0.3499999999999999800 ) ) ; +#6896 = CIRCLE ( 'NONE', #2308, 0.3600000000000078700 ) ; +#6898 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4505 ) ) ; +#6897 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29932 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10947, #33565, #20181 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6899 = PLANE ( 'NONE', #28364 ) ; +#6900 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, 0.2999999999999999900, 0.6999999999999999600 ) ) ; +#6901 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4756 ) ) ; +#6902 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#6903 = SURFACE_STYLE_USAGE ( .BOTH. , #38830 ) ; +#6904 = ORIENTED_EDGE ( 'NONE', *, *, #13688, .F. ) ; +#6905 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4317 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36477, #7347, #17135 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6906 = VERTEX_POINT ( 'NONE', #10032 ) ; +#6907 = VECTOR ( 'NONE', #39178, 1000.000000000000000 ) ; +#6908 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6909 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6910 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000001100, 1.167528855492236500, -4.549999999999999800 ) ) ; +#6911 = ADVANCED_FACE ( 'NONE', ( #4970 ), #100, .F. ) ; +#6912 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6913 = SURFACE_STYLE_USAGE ( .BOTH. , #31515 ) ; +#6914 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6915 = CARTESIAN_POINT ( 'NONE', ( -1.486602540378444200, 1.630001745296169500, -1.700000000000001500 ) ) ; +#6916 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.139998254717355100, -6.299996877890552400 ) ) ; +#6917 = EDGE_LOOP ( 'NONE', ( #31988, #9077, #27459, #24979 ) ) ; +#6918 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6919 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745296168900, -3.214459358809384200 ) ) ; +#6920 = EDGE_CURVE ( 'NONE', #26204, #8269, #41366, .T. ) ; +#6921 = SURFACE_SIDE_STYLE ('',( #11382 ) ) ; +#6922 = SURFACE_SIDE_STYLE ('',( #5269 ) ) ; +#6923 = VERTEX_POINT ( 'NONE', #364 ) ; +#6924 = PRESENTATION_STYLE_ASSIGNMENT (( #33365 ) ) ; +#6925 = PLANE ( 'NONE', #12892 ) ; +#6926 = EDGE_CURVE ( 'NONE', #10284, #12039, #26208, .T. ) ; +#6927 = ORIENTED_EDGE ( 'NONE', *, *, #28354, .T. ) ; +#6928 = ORIENTED_EDGE ( 'NONE', *, *, #14017, .F. ) ; +#6929 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25889 ), #9090 ) ; +#6930 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6931 = SURFACE_STYLE_USAGE ( .BOTH. , #25761 ) ; +#6932 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#6933 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6934 = FACE_OUTER_BOUND ( 'NONE', #29972, .T. ) ; +#6935 = VERTEX_POINT ( 'NONE', #32228 ) ; +#6936 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6937 = ORIENTED_EDGE ( 'NONE', *, *, #19845, .T. ) ; +#6938 = SURFACE_STYLE_FILL_AREA ( #23435 ) ; +#6939 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24846 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #59, #22476, #22741 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6940 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.499998254703823800, -5.049999999999993600 ) ) ; +#6941 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6942 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4462 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28425, #9055, #34932 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6943 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6944 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -1.139998254717359000, -5.049996877890552400 ) ) ; +#6947 = EDGE_CURVE ( 'NONE', #561, #28837, #11521, .T. ) ; +#6946 = PLANE ( 'NONE', #14286 ) ; +#6945 = STYLED_ITEM ( 'NONE', ( #39589 ), #37414 ) ; +#6948 = VERTEX_POINT ( 'NONE', #32370 ) ; +#6949 = PRESENTATION_STYLE_ASSIGNMENT (( #27767 ) ) ; +#6950 = ADVANCED_FACE ( 'NONE', ( #28238 ), #13427, .F. ) ; +#6951 = SURFACE_STYLE_USAGE ( .BOTH. , #13446 ) ; +#6952 = FILL_AREA_STYLE ('',( #3996 ) ) ; +#6954 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29281 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16505, #39085, #26254 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6953 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22145 ), #17261 ) ; +#6955 = AXIS2_PLACEMENT_3D ( 'NONE', #23639, #4279, #17988 ) ; +#6956 = CLOSED_SHELL ( 'NONE', ( #23025, #14638, #7416, #27460, #4794, #22475 ) ) ; +#6957 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5818 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23560, #27115, #13961 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6958 = FILL_AREA_STYLE_COLOUR ( '', #24808 ) ; +#6959 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.4300017452961689100, -5.075000000000000200 ) ) ; +#6960 = VERTEX_POINT ( 'NONE', #19976 ) ; +#6961 = ADVANCED_FACE ( 'NONE', ( #11995 ), #23768, .T. ) ; +#6962 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019659000E-017 ) ) ; +#6963 = SURFACE_STYLE_USAGE ( .BOTH. , #23506 ) ; +#6964 = ORIENTED_EDGE ( 'NONE', *, *, #20521, .T. ) ; +#6965 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6966 = VECTOR ( 'NONE', #39881, 1000.000000000000000 ) ; +#6967 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.380001745296126600, -6.699999999999994000 ) ) ; +#6968 = ORIENTED_EDGE ( 'NONE', *, *, #36840, .T. ) ; +#6969 = VERTEX_POINT ( 'NONE', #16987 ) ; +#6970 = PRESENTATION_STYLE_ASSIGNMENT (( #34054 ) ) ; +#6971 = ORIENTED_EDGE ( 'NONE', *, *, #34815, .F. ) ; +#6972 = FACE_OUTER_BOUND ( 'NONE', #37378, .T. ) ; +#6973 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6974 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#6975 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#6976 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#6977 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6978 = CARTESIAN_POINT ( 'NONE', ( -4.570925237316274100, -1.009999999999999100, -6.861124800398366500 ) ) ; +#6979 = ORIENTED_EDGE ( 'NONE', *, *, #17426, .T. ) ; +#6980 = ORIENTED_EDGE ( 'NONE', *, *, #3013, .T. ) ; +#6981 = ORIENTED_EDGE ( 'NONE', *, *, #40968, .T. ) ; +#6982 = SURFACE_STYLE_FILL_AREA ( #1027 ) ; +#6983 = CARTESIAN_POINT ( 'NONE', ( 3.045000000000000400, -0.2999999999999999900, -1.421843600000000100 ) ) ; +#6984 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6985 = SURFACE_SIDE_STYLE ('',( #36384 ) ) ; +#6986 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.3300017452961688800, -5.075000000000000200 ) ) ; +#6987 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid41', #40416 ) ; +#6988 = EDGE_LOOP ( 'NONE', ( #23643, #28953, #7919, #3946 ) ) ; +#6989 = SURFACE_STYLE_FILL_AREA ( #11780 ) ; +#6990 = FILL_AREA_STYLE ('',( #16887 ) ) ; +#6991 = EDGE_CURVE ( 'NONE', #15829, #36203, #26173, .T. ) ; +#6992 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6993 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.480001745296169600, 0.0000000000000000000 ) ) ; +#6994 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.499998254703820400, -6.299999999999993600 ) ) ; +#6995 = EDGE_CURVE ( 'NONE', #16530, #14188, #30220, .T. ) ; +#6996 = FILL_AREA_STYLE_COLOUR ( '', #15716 ) ; +#6997 = CARTESIAN_POINT ( 'NONE', ( 4.750000000000003600, -1.009999999999999100, -6.861124800398366500 ) ) ; +#6998 = LINE ( 'NONE', #20332, #31252 ) ; +#6999 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7561 ) ) ; +#7000 = ADVANCED_FACE ( 'NONE', ( #17606 ), #7218, .F. ) ; +#7001 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7002 = SURFACE_STYLE_USAGE ( .BOTH. , #9956 ) ; +#7003 = AXIS2_PLACEMENT_3D ( 'NONE', #25006, #8834, #8704 ) ; +#7004 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.499998254703822000, -5.049999999999993600 ) ) ; +#7005 = EDGE_LOOP ( 'NONE', ( #8586, #6430, #22326, #3114, #16255, #10571, #16717, #10790 ) ) ; +#7007 = EDGE_CURVE ( 'NONE', #28950, #27728, #16566, .T. ) ; +#7006 = STYLED_ITEM ( 'NONE', ( #27277 ), #24748 ) ; +#7008 = VECTOR ( 'NONE', #36520, 1000.000000000000000 ) ; +#7009 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.5199999999999849200, -5.200000000000000200 ) ) ; +#7010 = ORIENTED_EDGE ( 'NONE', *, *, #28603, .F. ) ; +#7011 = FILL_AREA_STYLE ('',( #7156 ) ) ; +#7013 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18689 ) ) ; +#7012 = AXIS2_PLACEMENT_3D ( 'NONE', #4435, #10917, #33396 ) ; +#7014 = AXIS2_PLACEMENT_3D ( 'NONE', #6849, #36125, #17039 ) ; +#7015 = LINE ( 'NONE', #4910, #31273 ) ; +#7016 = LINE ( 'NONE', #7414, #41401 ) ; +#7018 = AXIS2_PLACEMENT_3D ( 'NONE', #3614, #844, #29311 ) ; +#7017 = AXIS2_PLACEMENT_3D ( 'NONE', #23422, #26399, #35872 ) ; +#7019 = EDGE_LOOP ( 'NONE', ( #41311, #41080, #37301, #18168 ) ) ; +#7020 = FILL_AREA_STYLE ('',( #29339 ) ) ; +#7021 = FILL_AREA_STYLE_COLOUR ( '', #4810 ) ; +#7022 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7023 = VERTEX_POINT ( 'NONE', #1069 ) ; +#7024 = PRESENTATION_STYLE_ASSIGNMENT (( #14897 ) ) ; +#7025 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41136 ), #13789 ) ; +#7026 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38152, 'distance_accuracy_value', 'NONE'); +#7027 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7028 = ORIENTED_EDGE ( 'NONE', *, *, #35917, .T. ) ; +#7029 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.742851110636538100E-015, 0.0000000000000000000 ) ) ; +#7030 = SURFACE_SIDE_STYLE ('',( #27547 ) ) ; +#7031 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -3.799999999999999800 ) ) ; +#7032 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23880, 'distance_accuracy_value', 'NONE'); +#7033 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#7034 = EDGE_LOOP ( 'NONE', ( #41033, #1565, #38747, #16557 ) ) ; +#7035 = FILL_AREA_STYLE ('',( #26424 ) ) ; +#7036 = LINE ( 'NONE', #36339, #6065 ) ; +#7037 = EDGE_CURVE ( 'NONE', #36449, #5496, #6473, .T. ) ; +#7038 = SURFACE_STYLE_USAGE ( .BOTH. , #478 ) ; +#7039 = ORIENTED_EDGE ( 'NONE', *, *, #14462, .T. ) ; +#7040 = PLANE ( 'NONE', #41060 ) ; +#7041 = CARTESIAN_POINT ( 'NONE', ( -3.176427610841603900, 0.3500000000000000300, -1.649999999999999900 ) ) ; +#7042 = ORIENTED_EDGE ( 'NONE', *, *, #36462, .T. ) ; +#7043 = DIRECTION ( 'NONE', ( -6.056601140521966100E-031, -1.736611218856585300E-045, -1.000000000000000000 ) ) ; +#7044 = EDGE_CURVE ( 'NONE', #41573, #985, #22645, .T. ) ; +#7045 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7084 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31025, #8005, #11677 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7046 = ADVANCED_FACE ( 'NONE', ( #7951 ), #30808, .F. ) ; +#7047 = FILL_AREA_STYLE ('',( #19953 ) ) ; +#7048 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7049 = ORIENTED_EDGE ( 'NONE', *, *, #10767, .F. ) ; +#7050 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.2800017452961251500, -5.650000000000000400 ) ) ; +#7051 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#7052 = ORIENTED_EDGE ( 'NONE', *, *, #18352, .F. ) ; +#7053 = ORIENTED_EDGE ( 'NONE', *, *, #10070, .T. ) ; +#7054 = SURFACE_SIDE_STYLE ('',( #17159 ) ) ; +#7055 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9777 ), #33624 ) ; +#7056 = FILL_AREA_STYLE_COLOUR ( '', #22332 ) ; +#7057 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -6.900000000000000400 ) ) ; +#7058 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7059 = ORIENTED_EDGE ( 'NONE', *, *, #9789, .T. ) ; +#7060 = CIRCLE ( 'NONE', #18330, 0.2999999999999999300 ) ; +#7061 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7062 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16526 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40187, #37375, #24111 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7063 = FACE_OUTER_BOUND ( 'NONE', #5387, .T. ) ; +#7064 = VECTOR ( 'NONE', #29991, 1000.000000000000000 ) ; +#7067 = STYLED_ITEM ( 'NONE', ( #7069 ), #5520 ) ; +#7066 = FILL_AREA_STYLE ('',( #38561 ) ) ; +#7065 = AXIS2_PLACEMENT_3D ( 'NONE', #32690, #16607, #36250 ) ; +#7069 = PRESENTATION_STYLE_ASSIGNMENT (( #12060 ) ) ; +#7068 = FILL_AREA_STYLE ('',( #20401 ) ) ; +#7070 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7071 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#7072 = FILL_AREA_STYLE ('',( #13731 ) ) ; +#7073 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7075 = EDGE_CURVE ( 'NONE', #27706, #37478, #2942, .T. ) ; +#7074 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28204 ) ) ; +#7076 = DIRECTION ( 'NONE', ( 2.602085213965211800E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7077 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, 0.2799999999999972500, 0.0000000000000000000 ) ) ; +#7078 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#7080 = STYLED_ITEM ( 'NONE', ( #9809 ), #718 ) ; +#7079 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30165 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2870, #18913, #36529 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7081 = FILL_AREA_STYLE ('',( #32948 ) ) ; +#7082 = CIRCLE ( 'NONE', #41699, 0.1000000000000004800 ) ; +#7083 = SURFACE_STYLE_USAGE ( .BOTH. , #26760 ) ; +#7084 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31025, 'distance_accuracy_value', 'NONE'); +#7085 = ORIENTED_EDGE ( 'NONE', *, *, #22903, .F. ) ; +#7086 = PRESENTATION_STYLE_ASSIGNMENT (( #38494 ) ) ; +#7087 = SURFACE_SIDE_STYLE ('',( #25130 ) ) ; +#7088 = ORIENTED_EDGE ( 'NONE', *, *, #11262, .T. ) ; +#7089 = CARTESIAN_POINT ( 'NONE', ( -4.454963661008731500, -0.01961992375108334200, -7.350000000000000500 ) ) ; +#7090 = EDGE_LOOP ( 'NONE', ( #8195, #15514, #23167, #14020 ) ) ; +#7091 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13468, 'distance_accuracy_value', 'NONE'); +#7092 = VECTOR ( 'NONE', #4801, 1000.000000000000000 ) ; +#7093 = LINE ( 'NONE', #18556, #40455 ) ; +#7094 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #943, 'distance_accuracy_value', 'NONE'); +#7095 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7096 = ORIENTED_EDGE ( 'NONE', *, *, #8302, .T. ) ; +#7097 = ORIENTED_EDGE ( 'NONE', *, *, #2735, .F. ) ; +#7098 = VERTEX_POINT ( 'NONE', #27283 ) ; +#7099 = SURFACE_SIDE_STYLE ('',( #41176 ) ) ; +#7100 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#7101 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#7102 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7103 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7104 = FILL_AREA_STYLE ('',( #26486 ) ) ; +#7105 = ORIENTED_EDGE ( 'NONE', *, *, #8287, .F. ) ; +#7106 = CARTESIAN_POINT ( 'NONE', ( 2.859829086680000500, -0.2999999999999999900, 1.149999999999999900 ) ) ; +#7107 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7108 = EDGE_LOOP ( 'NONE', ( #25702, #14200, #39814, #18561 ) ) ; +#7109 = EDGE_CURVE ( 'NONE', #33431, #38026, #35257, .T. ) ; +#7110 = LINE ( 'NONE', #34827, #8124 ) ; +#7111 = LINE ( 'NONE', #38739, #40475 ) ; +#7112 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7113 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -5.075000000000000200 ) ) ; +#7114 = EDGE_CURVE ( 'NONE', #20912, #7867, #41794, .T. ) ; +#7115 = FACE_OUTER_BOUND ( 'NONE', #3085, .T. ) ; +#7116 = STYLED_ITEM ( 'NONE', ( #26554 ), #10859 ) ; +#7117 = FILL_AREA_STYLE ('',( #23230 ) ) ; +#7118 = FILL_AREA_STYLE_COLOUR ( '', #5493 ) ; +#7119 = VECTOR ( 'NONE', #36096, 1000.000000000000000 ) ; +#7120 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -6.056601140521967900E-031 ) ) ; +#7121 = LINE ( 'NONE', #9082, #1631 ) ; +#7122 = ADVANCED_FACE ( 'NONE', ( #16034 ), #37021, .T. ) ; +#7123 = STYLED_ITEM ( 'NONE', ( #18468 ), #15221 ) ; +#7124 = SURFACE_SIDE_STYLE ('',( #24308 ) ) ; +#7125 = CARTESIAN_POINT ( 'NONE', ( 4.773991411063332400, -1.009999999999998000, -7.461124800398367000 ) ) ; +#7126 = SURFACE_STYLE_FILL_AREA ( #41346 ) ; +#7127 = VERTEX_POINT ( 'NONE', #40113 ) ; +#7128 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865475700, 0.7071067811865475700 ) ) ; +#7129 = STYLED_ITEM ( 'NONE', ( #8600 ), #19457 ) ; +#7131 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, 0.2999999999999999900, -0.2498427124746000500 ) ) ; +#7130 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31773 ), #1494 ) ; +#7132 = ORIENTED_EDGE ( 'NONE', *, *, #29729, .T. ) ; +#7133 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#7135 = STYLED_ITEM ( 'NONE', ( #20820 ), #6315 ) ; +#7134 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5795 ), #5229 ) ; +#7136 = SURFACE_STYLE_USAGE ( .BOTH. , #26514 ) ; +#7139 = EDGE_CURVE ( 'NONE', #22485, #26958, #15008, .T. ) ; +#7138 = CARTESIAN_POINT ( 'NONE', ( -2.149999999999999900, -1.139998254717353500, -6.299996877890552400 ) ) ; +#7137 = STYLED_ITEM ( 'NONE', ( #25226 ), #35971 ) ; +#7140 = PRESENTATION_STYLE_ASSIGNMENT (( #24396 ) ) ; +#7141 = ORIENTED_EDGE ( 'NONE', *, *, #28914, .T. ) ; +#7142 = ORIENTED_EDGE ( 'NONE', *, *, #18039, .T. ) ; +#7143 = SURFACE_STYLE_USAGE ( .BOTH. , #16767 ) ; +#7144 = SURFACE_SIDE_STYLE ('',( #30796 ) ) ; +#7146 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40663 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34483, #8614, #38127 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7145 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2876 ) ) ; +#7147 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -5.475000000000000500 ) ) ; +#7148 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3638 ) ) ; +#7149 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7150 = ORIENTED_EDGE ( 'NONE', *, *, #9527, .T. ) ; +#7151 = SURFACE_SIDE_STYLE ('',( #23409 ) ) ; +#7152 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7153 = EDGE_LOOP ( 'NONE', ( #32836, #35843, #7788, #40164 ) ) ; +#7154 = PRESENTATION_STYLE_ASSIGNMENT (( #19607 ) ) ; +#7155 = PRESENTATION_STYLE_ASSIGNMENT (( #17347 ) ) ; +#7156 = FILL_AREA_STYLE_COLOUR ( '', #33748 ) ; +#7157 = LINE ( 'NONE', #6915, #11700 ) ; +#7158 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -5.575000000000001100 ) ) ; +#7159 = PLANE ( 'NONE', #905 ) ; +#7160 = ADVANCED_FACE ( 'NONE', ( #18555 ), #30255, .F. ) ; +#7161 = FACE_OUTER_BOUND ( 'NONE', #35019, .T. ) ; +#7162 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7163 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7164 = VERTEX_POINT ( 'NONE', #30387 ) ; +#7165 = EDGE_CURVE ( 'NONE', #25351, #4227, #24696, .T. ) ; +#7166 = FILL_AREA_STYLE ('',( #32466 ) ) ; +#7167 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7168 = EDGE_LOOP ( 'NONE', ( #1643, #27268, #4704, #7966, #29736, #11587, #507, #17106 ) ) ; +#7170 = ADVANCED_FACE ( 'NONE', ( #36733 ), #24034, .F. ) ; +#7169 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35022, 'distance_accuracy_value', 'NONE'); +#7171 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7172 = EDGE_CURVE ( 'NONE', #23158, #38956, #14004, .T. ) ; +#7173 = ORIENTED_EDGE ( 'NONE', *, *, #26515, .T. ) ; +#7174 = SURFACE_STYLE_FILL_AREA ( #15026 ) ; +#7175 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.799998254703822000, -3.500000000000000000 ) ) ; +#7176 = LINE ( 'NONE', #27633, #37511 ) ; +#7177 = ORIENTED_EDGE ( 'NONE', *, *, #26515, .F. ) ; +#7178 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29975, 'distance_accuracy_value', 'NONE'); +#7179 = LINE ( 'NONE', #35085, #31951 ) ; +#7180 = ORIENTED_EDGE ( 'NONE', *, *, #25350, .F. ) ; +#7181 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13692 ) ) ; +#7182 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7183 = EDGE_LOOP ( 'NONE', ( #31319, #9397, #31907, #6001, #17351, #8723, #35165, #5370, #26299, #1404, #32319, #35726, #10382, #5174, #29720, #17758, #35416, #37871, #17892, #17217, #14574, #38264, #15294, #37841, #32186, #28299, #15082, #12357, #24860, #10754, #8284, #19713, #36702, #26805, #4838, #5533, #17712, #13913, #41340, #29798 ) ) ; +#7184 = VECTOR ( 'NONE', #24575, 1000.000000000000000 ) ; +#7185 = EDGE_LOOP ( 'NONE', ( #4858, #21657, #38395, #26303 ) ) ; +#7186 = AXIS2_PLACEMENT_3D ( 'NONE', #26130, #13686, #3929 ) ; +#7187 = PLANE ( 'NONE', #10236 ) ; +#7188 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7189 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7190 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21046 ), #9348 ) ; +#7191 = FACE_OUTER_BOUND ( 'NONE', #25043, .T. ) ; +#7192 = LINE ( 'NONE', #31063, #18864 ) ; +#7193 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20593, 'distance_accuracy_value', 'NONE'); +#7195 = EDGE_CURVE ( 'NONE', #2092, #20512, #17540, .T. ) ; +#7194 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28311 ) ) ; +#7196 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7197 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 2.322941965694886000, -1.250000000000000000 ) ) ; +#7198 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000032500, -2.031000000000001500, -6.749999999999999100 ) ) ; +#7199 = SURFACE_STYLE_USAGE ( .BOTH. , #4101 ) ; +#7200 = CYLINDRICAL_SURFACE ( 'NONE', #41127, 0.1000000000000000100 ) ; +#7201 = VECTOR ( 'NONE', #39629, 1000.000000000000000 ) ; +#7202 = CARTESIAN_POINT ( 'NONE', ( 4.721498212947777200, -0.4099999999999984200, -6.861124800398366500 ) ) ; +#7203 = CARTESIAN_POINT ( 'NONE', ( -3.237718385398000300, -0.2999999999999999900, 0.7155313145785999800 ) ) ; +#7205 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24574 ) ) ; +#7204 = AXIS2_PLACEMENT_3D ( 'NONE', #10521, #23533, #33849 ) ; +#7206 = AXIS2_PLACEMENT_3D ( 'NONE', #33986, #21036, #14644 ) ; +#7207 = FILL_AREA_STYLE_COLOUR ( '', #4215 ) ; +#7208 = VERTEX_POINT ( 'NONE', #21649 ) ; +#7209 = AXIS2_PLACEMENT_3D ( 'NONE', #9100, #31729, #2820 ) ; +#7210 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7211 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33030, 'distance_accuracy_value', 'NONE'); +#7212 = SURFACE_STYLE_USAGE ( .BOTH. , #17127 ) ; +#7213 = ADVANCED_FACE ( 'NONE', ( #37735 ), #9902, .T. ) ; +#7214 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7215 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2934 ) ) ; +#7216 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, 0.0000000000000000000 ) ) ; +#7217 = SURFACE_STYLE_USAGE ( .BOTH. , #28977 ) ; +#7218 = PLANE ( 'NONE', #24584 ) ; +#7219 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#7220 = VECTOR ( 'NONE', #25446, 1000.000000000000000 ) ; +#7221 = ORIENTED_EDGE ( 'NONE', *, *, #19720, .T. ) ; +#7222 = ORIENTED_EDGE ( 'NONE', *, *, #21091, .T. ) ; +#7223 = ORIENTED_EDGE ( 'NONE', *, *, #33984, .T. ) ; +#7224 = ORIENTED_EDGE ( 'NONE', *, *, #17577, .T. ) ; +#7225 = EDGE_LOOP ( 'NONE', ( #40461, #26324, #29350, #5297 ) ) ; +#7226 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7227 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7228 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#7229 = CYLINDRICAL_SURFACE ( 'NONE', #7574, 0.3499999999999996400 ) ; +#7230 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#7231 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3429, 'distance_accuracy_value', 'NONE'); +#7232 = ORIENTED_EDGE ( 'NONE', *, *, #19486, .F. ) ; +#7233 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7234 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#7235 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, 0.2800017452961687200, -6.849999999999999600 ) ) ; +#7236 = EDGE_CURVE ( 'NONE', #39138, #118, #40767, .T. ) ; +#7237 = PRESENTATION_STYLE_ASSIGNMENT (( #31917 ) ) ; +#7238 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#7239 = EDGE_CURVE ( 'NONE', #21194, #34772, #39756, .T. ) ; +#7240 = SURFACE_STYLE_FILL_AREA ( #23551 ) ; +#7241 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7242 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.3300017452961679900, -5.175000000000000700 ) ) ; +#7243 = SURFACE_SIDE_STYLE ('',( #909 ) ) ; +#7244 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2916 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12613, #22115, #15737 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7245 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7246 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7247 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7248 = EDGE_CURVE ( 'NONE', #11272, #4141, #7898, .T. ) ; +#7249 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7250 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36244 ), #5911 ) ; +#7251 = STYLED_ITEM ( 'NONE', ( #1710 ), #12484 ) ; +#7252 = PRESENTATION_STYLE_ASSIGNMENT (( #23209 ) ) ; +#7253 = FILL_AREA_STYLE_COLOUR ( '', #6310 ) ; +#7254 = SURFACE_STYLE_USAGE ( .BOTH. , #6701 ) ; +#7255 = VECTOR ( 'NONE', #17532, 1000.000000000000000 ) ; +#7258 = EDGE_CURVE ( 'NONE', #12128, #4059, #11937, .T. ) ; +#7257 = STYLED_ITEM ( 'NONE', ( #19059 ), #24386 ) ; +#7256 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7259 = VERTEX_POINT ( 'NONE', #28117 ) ; +#7260 = ORIENTED_EDGE ( 'NONE', *, *, #20182, .F. ) ; +#7261 = FILL_AREA_STYLE_COLOUR ( '', #33724 ) ; +#7262 = ORIENTED_EDGE ( 'NONE', *, *, #22814, .F. ) ; +#7263 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20465, 'distance_accuracy_value', 'NONE'); +#7264 = ORIENTED_EDGE ( 'NONE', *, *, #25408, .F. ) ; +#7265 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33525 ), #8066 ) ; +#7266 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7267 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7268 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25228 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18777, #12094, #11821 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7269 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#7270 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7271 = AXIS2_PLACEMENT_3D ( 'NONE', #38691, #32058, #12717 ) ; +#7272 = SURFACE_STYLE_USAGE ( .BOTH. , #10664 ) ; +#7273 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7274 = SURFACE_STYLE_FILL_AREA ( #34460 ) ; +#7275 = LINE ( 'NONE', #31655, #37083 ) ; +#7276 = PRESENTATION_STYLE_ASSIGNMENT (( #8898 ) ) ; +#7277 = VECTOR ( 'NONE', #11705, 1000.000000000000000 ) ; +#7278 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7279 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000032500, -2.031000000000001500, -6.849999999999999600 ) ) ; +#7280 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#7281 = FILL_AREA_STYLE ('',( #26663 ) ) ; +#7282 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#7283 = CIRCLE ( 'NONE', #11458, 0.1000000000000000500 ) ; +#7284 = ORIENTED_EDGE ( 'NONE', *, *, #25292, .T. ) ; +#7285 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7286 = FACE_OUTER_BOUND ( 'NONE', #16116, .T. ) ; +#7287 = SURFACE_STYLE_USAGE ( .BOTH. , #13947 ) ; +#7288 = EDGE_LOOP ( 'NONE', ( #20134, #37261, #25297, #10586, #32672, #30176, #24213, #26620 ) ) ; +#7289 = ORIENTED_EDGE ( 'NONE', *, *, #29839, .F. ) ; +#7290 = SURFACE_SIDE_STYLE ('',( #288 ) ) ; +#7291 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.445602896647293600E-014 ) ) ; +#7292 = EDGE_CURVE ( 'NONE', #5494, #19871, #3365, .T. ) ; +#7293 = ORIENTED_EDGE ( 'NONE', *, *, #25322, .F. ) ; +#7294 = EDGE_LOOP ( 'NONE', ( #34137, #31190, #7974, #8512 ) ) ; +#7295 = SURFACE_SIDE_STYLE ('',( #22081 ) ) ; +#7296 = EDGE_CURVE ( 'NONE', #28549, #17719, #23597, .T. ) ; +#7297 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3545 ) ) ; +#7298 = VERTEX_POINT ( 'NONE', #40679 ) ; +#7299 = LINE ( 'NONE', #37031, #813 ) ; +#7300 = AXIS2_PLACEMENT_3D ( 'NONE', #26040, #32526, #35791 ) ; +#7301 = ORIENTED_EDGE ( 'NONE', *, *, #37010, .T. ) ; +#7302 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -5.599999999999999600 ) ) ; +#7303 = LINE ( 'NONE', #38282, #33106 ) ; +#7304 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7305 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17378 ), #38435 ) ; +#7306 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.779999999999868100, 0.0000000000000000000 ) ) ; +#7307 = ORIENTED_EDGE ( 'NONE', *, *, #831, .T. ) ; +#7308 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10274 ), #36307 ) ; +#7309 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11667 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30795, #7895, #37290 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7310 = LINE ( 'NONE', #23738, #32586 ) ; +#7312 = STYLED_ITEM ( 'NONE', ( #26395 ), #5144 ) ; +#7311 = STYLED_ITEM ( 'NONE', ( #15608 ), #29767 ) ; +#7313 = ORIENTED_EDGE ( 'NONE', *, *, #22429, .T. ) ; +#7314 = EDGE_LOOP ( 'NONE', ( #11595, #7407, #34847, #31744 ) ) ; +#7317 = EDGE_CURVE ( 'NONE', #13500, #5409, #373, .T. ) ; +#7316 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, 0.03299999999999998100 ) ) ; +#7315 = AXIS2_PLACEMENT_3D ( 'NONE', #3870, #39310, #541 ) ; +#7318 = AXIS2_PLACEMENT_3D ( 'NONE', #16792, #20359, #23567 ) ; +#7319 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7320 = FILL_AREA_STYLE ('',( #16535 ) ) ; +#7321 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7322 = ADVANCED_FACE ( 'NONE', ( #19628 ), #25180, .T. ) ; +#7323 = ORIENTED_EDGE ( 'NONE', *, *, #12952, .T. ) ; +#7324 = SURFACE_STYLE_FILL_AREA ( #26668 ) ; +#7326 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22520 ) ) ; +#7325 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20107 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24477, #33792, #8478 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7327 = SURFACE_STYLE_FILL_AREA ( #40807 ) ; +#7328 = PRESENTATION_STYLE_ASSIGNMENT (( #18209 ) ) ; +#7329 = DIRECTION ( 'NONE', ( -2.626294891657798900E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7330 = FILL_AREA_STYLE ('',( #3954 ) ) ; +#7331 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#7332 = ORIENTED_EDGE ( 'NONE', *, *, #41720, .F. ) ; +#7333 = ORIENTED_EDGE ( 'NONE', *, *, #29585, .T. ) ; +#7334 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.3500000000000000300, 0.3499999999999999800 ) ) ; +#7335 = PRESENTATION_STYLE_ASSIGNMENT (( #39795 ) ) ; +#7336 = SURFACE_SIDE_STYLE ('',( #33426 ) ) ; +#7337 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7338 = FACE_OUTER_BOUND ( 'NONE', #14080, .T. ) ; +#7339 = SURFACE_STYLE_FILL_AREA ( #21686 ) ; +#7340 = VERTEX_POINT ( 'NONE', #21511 ) ; +#7341 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -4.675000000000000700 ) ) ; +#7342 = DIRECTION ( 'NONE', ( -2.367138801244516300E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#7343 = FILL_AREA_STYLE_COLOUR ( '', #38372 ) ; +#7344 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#7345 = SURFACE_SIDE_STYLE ('',( #15589 ) ) ; +#7346 = ORIENTED_EDGE ( 'NONE', *, *, #30295, .F. ) ; +#7347 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7348 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7349 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.3500000000000000300, 0.3499999999999999800 ) ) ; +#7350 = ORIENTED_EDGE ( 'NONE', *, *, #6173, .T. ) ; +#7351 = EDGE_CURVE ( 'NONE', #14093, #36833, #5446, .T. ) ; +#7352 = CARTESIAN_POINT ( 'NONE', ( 4.170000000000001700, -0.2800000000000026900, -3.299999999999999800 ) ) ; +#7353 = DIRECTION ( 'NONE', ( 0.3746065948736244700, 0.0000000000000000000, -0.9271838539778333200 ) ) ; +#7354 = EDGE_CURVE ( 'NONE', #37672, #21754, #24141, .T. ) ; +#7355 = AXIS2_PLACEMENT_3D ( 'NONE', #23100, #3606, #3735 ) ; +#7356 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7357 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -2.299999999999999400 ) ) ; +#7358 = ADVANCED_FACE ( 'NONE', ( #27660 ), #21654, .T. ) ; +#7359 = ORIENTED_EDGE ( 'NONE', *, *, #35786, .T. ) ; +#7360 = CYLINDRICAL_SURFACE ( 'NONE', #28623, 0.1000000000000001600 ) ; +#7361 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7362 = STYLED_ITEM ( 'NONE', ( #19573 ), #14963 ) ; +#7363 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13854, 'distance_accuracy_value', 'NONE'); +#7364 = CYLINDRICAL_SURFACE ( 'NONE', #11887, 0.09999999999999982500 ) ; +#7365 = LINE ( 'NONE', #2270, #8386 ) ; +#7366 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#7367 = VECTOR ( 'NONE', #20645, 1000.000000000000000 ) ; +#7368 = AXIS2_PLACEMENT_3D ( 'NONE', #3801, #760, #20086 ) ; +#7369 = ORIENTED_EDGE ( 'NONE', *, *, #18546, .T. ) ; +#7370 = STYLED_ITEM ( 'NONE', ( #23039 ), #31309 ) ; +#7371 = EDGE_LOOP ( 'NONE', ( #38405, #36541, #11205, #32975 ) ) ; +#7372 = SURFACE_STYLE_USAGE ( .BOTH. , #4428 ) ; +#7373 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#7374 = ORIENTED_EDGE ( 'NONE', *, *, #6053, .T. ) ; +#7375 = DIRECTION ( 'NONE', ( 2.628368902995161200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7376 = ADVANCED_FACE ( 'NONE', ( #38782 ), #12546, .F. ) ; +#7377 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7379 = AXIS2_PLACEMENT_3D ( 'NONE', #20429, #817, #959 ) ; +#7378 = STYLED_ITEM ( 'NONE', ( #10997 ), #30938 ) ; +#7380 = PRESENTATION_STYLE_ASSIGNMENT (( #31662 ) ) ; +#7381 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7382 = FILL_AREA_STYLE_COLOUR ( '', #13745 ) ; +#7383 = LINE ( 'NONE', #40666, #26092 ) ; +#7384 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14634, 'distance_accuracy_value', 'NONE'); +#7385 = VECTOR ( 'NONE', #17456, 1000.000000000000000 ) ; +#7387 = EDGE_CURVE ( 'NONE', #3127, #3289, #20109, .T. ) ; +#7386 = AXIS2_PLACEMENT_3D ( 'NONE', #16083, #28791, #29056 ) ; +#7388 = VERTEX_POINT ( 'NONE', #32177 ) ; +#7389 = SURFACE_STYLE_USAGE ( .BOTH. , #39734 ) ; +#7390 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7391 = SURFACE_STYLE_FILL_AREA ( #28732 ) ; +#7392 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244519300E-016 ) ) ; +#7393 = VERTEX_POINT ( 'NONE', #25577 ) ; +#7394 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296169600, -0.2339555568811695900 ) ) ; +#7396 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23384 ) ) ; +#7395 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32832 ) ) ; +#7397 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7398 = LINE ( 'NONE', #24516, #32164 ) ; +#7399 = SURFACE_STYLE_USAGE ( .BOTH. , #29875 ) ; +#7400 = SURFACE_STYLE_USAGE ( .BOTH. , #20162 ) ; +#7401 = FILL_AREA_STYLE ('',( #23234 ) ) ; +#7402 = LINE ( 'NONE', #3620, #26639 ) ; +#7403 = FILL_AREA_STYLE_COLOUR ( '', #5915 ) ; +#7404 = CARTESIAN_POINT ( 'NONE', ( -0.2500000000000032800, 0.2800017452961687800, -6.549999999999999800 ) ) ; +#7405 = VECTOR ( 'NONE', #37627, 1000.000000000000100 ) ; +#7406 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7407 = ORIENTED_EDGE ( 'NONE', *, *, #16595, .F. ) ; +#7408 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #39609 ) ; +#7409 = SURFACE_SIDE_STYLE ('',( #11459 ) ) ; +#7410 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14720, 'distance_accuracy_value', 'NONE'); +#7411 = SURFACE_SIDE_STYLE ('',( #25269 ) ) ; +#7412 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7413 = SURFACE_STYLE_USAGE ( .BOTH. , #36403 ) ; +#7414 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.779999999999868100, 0.0000000000000000000 ) ) ; +#7415 = EDGE_CURVE ( 'NONE', #20974, #35039, #4439, .T. ) ; +#7416 = ADVANCED_FACE ( 'NONE', ( #8950 ), #1401, .T. ) ; +#7417 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7503, 'distance_accuracy_value', 'NONE'); +#7418 = ORIENTED_EDGE ( 'NONE', *, *, #12994, .F. ) ; +#7419 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#7420 = ORIENTED_EDGE ( 'NONE', *, *, #12308, .F. ) ; +#7421 = VECTOR ( 'NONE', #4656, 1000.000000000000000 ) ; +#7422 = PLANE ( 'NONE', #40984 ) ; +#7423 = ORIENTED_EDGE ( 'NONE', *, *, #33703, .T. ) ; +#7425 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, 1.414176746720224900E-016 ) ) ; +#7424 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#7426 = EDGE_CURVE ( 'NONE', #20276, #38067, #9437, .T. ) ; +#7427 = SURFACE_STYLE_USAGE ( .BOTH. , #20193 ) ; +#7428 = ORIENTED_EDGE ( 'NONE', *, *, #37502, .T. ) ; +#7429 = EDGE_LOOP ( 'NONE', ( #14753, #7221, #906, #27038 ) ) ; +#7430 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#7431 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#7432 = STYLED_ITEM ( 'NONE', ( #38414 ), #16316 ) ; +#7433 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.180001745296169500, -4.400000000000000400 ) ) ; +#7434 = CARTESIAN_POINT ( 'NONE', ( 3.237718385398046500, -0.2999999999999999900, 0.7155313145786185200 ) ) ; +#7435 = VECTOR ( 'NONE', #21384, 1000.000000000000000 ) ; +#7436 = FILL_AREA_STYLE ('',( #17079 ) ) ; +#7437 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7438 = DIRECTION ( 'NONE', ( 1.133987551255204500E-030, 1.000000000000000000, -2.367138801244545900E-016 ) ) ; +#7439 = AXIS2_PLACEMENT_3D ( 'NONE', #6416, #3839, #3576 ) ; +#7440 = STYLED_ITEM ( 'NONE', ( #3902 ), #7122 ) ; +#7441 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23984 ) ) ; +#7442 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#7443 = FILL_AREA_STYLE ('',( #26835 ) ) ; +#7445 = EDGE_CURVE ( 'NONE', #5032, #5272, #26659, .T. ) ; +#7444 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40734 ), #1816 ) ; +#7446 = ORIENTED_EDGE ( 'NONE', *, *, #8686, .T. ) ; +#7447 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7449 = STYLED_ITEM ( 'NONE', ( #16986 ), #2420 ) ; +#7448 = STYLED_ITEM ( 'NONE', ( #613 ), #27004 ) ; +#7450 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -10.30000000000000100, -1.250000000000000000 ) ) ; +#7451 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -10.30000000000000100, -1.250000000000000000 ) ) ; +#7452 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41592 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33436, #36687, #26677 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7453 = VERTEX_POINT ( 'NONE', #6881 ) ; +#7454 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7455 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#7456 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37775 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28532, #2865, #31777 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7457 = ORIENTED_EDGE ( 'NONE', *, *, #16633, .F. ) ; +#7458 = VERTEX_POINT ( 'NONE', #9150 ) ; +#7459 = SURFACE_STYLE_FILL_AREA ( #37024 ) ; +#7460 = ORIENTED_EDGE ( 'NONE', *, *, #18030, .T. ) ; +#7461 = SURFACE_STYLE_FILL_AREA ( #14431 ) ; +#7462 = VECTOR ( 'NONE', #29480, 1000.000000000000000 ) ; +#7463 = SURFACE_STYLE_FILL_AREA ( #27135 ) ; +#7464 = SURFACE_SIDE_STYLE ('',( #39042 ) ) ; +#7465 = EDGE_LOOP ( 'NONE', ( #4729, #30752, #16516, #3232 ) ) ; +#7466 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#7467 = EDGE_LOOP ( 'NONE', ( #33707, #37760, #15544, #28725 ) ) ; +#7468 = ORIENTED_EDGE ( 'NONE', *, *, #19097, .F. ) ; +#7469 = FACE_OUTER_BOUND ( 'NONE', #22060, .T. ) ; +#7470 = FILL_AREA_STYLE ('',( #26862 ) ) ; +#7471 = PLANE ( 'NONE', #39682 ) ; +#7472 = FILL_AREA_STYLE ('',( #26872 ) ) ; +#7473 = ORIENTED_EDGE ( 'NONE', *, *, #8285, .F. ) ; +#7474 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#7475 = VECTOR ( 'NONE', #17336, 1000.000000000000000 ) ; +#7476 = CARTESIAN_POINT ( 'NONE', ( -2.673205080756886800, 1.630001745296169500, -1.650000000000000800 ) ) ; +#7477 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7478 = EDGE_CURVE ( 'NONE', #4020, #38459, #39225, .T. ) ; +#7479 = VECTOR ( 'NONE', #37463, 1000.000000000000000 ) ; +#7480 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7481 = EDGE_CURVE ( 'NONE', #1969, #20486, #10948, .T. ) ; +#7482 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.5199999999999843600, -4.500000000000000000 ) ) ; +#7483 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7484 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#7485 = EDGE_CURVE ( 'NONE', #21371, #18653, #25646, .T. ) ; +#7486 = ORIENTED_EDGE ( 'NONE', *, *, #36530, .T. ) ; +#7487 = CIRCLE ( 'NONE', #28319, 0.04999999999999991300 ) ; +#7488 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7489 = SURFACE_STYLE_USAGE ( .BOTH. , #23340 ) ; +#7490 = SURFACE_SIDE_STYLE ('',( #24711 ) ) ; +#7491 = FILL_AREA_STYLE_COLOUR ( '', #10256 ) ; +#7492 = EDGE_CURVE ( 'NONE', #16474, #25497, #34229, .T. ) ; +#7493 = ORIENTED_EDGE ( 'NONE', *, *, #33435, .F. ) ; +#7494 = VECTOR ( 'NONE', #21569, 1000.000000000000000 ) ; +#7495 = SURFACE_SIDE_STYLE ('',( #20699 ) ) ; +#7496 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34132 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37258, #27516, #34434 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7497 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7498 = ORIENTED_EDGE ( 'NONE', *, *, #27570, .F. ) ; +#7499 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#7500 = ORIENTED_EDGE ( 'NONE', *, *, #10451, .T. ) ; +#7501 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#7502 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#7503 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7504 = SURFACE_STYLE_FILL_AREA ( #32071 ) ; +#7505 = SURFACE_STYLE_FILL_AREA ( #15658 ) ; +#7506 = LINE ( 'NONE', #9690, #20203 ) ; +#7508 = EDGE_CURVE ( 'NONE', #28059, #30186, #2404, .T. ) ; +#7507 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33077 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37438, #11173, #8466 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7509 = SURFACE_STYLE_FILL_AREA ( #5295 ) ; +#7510 = CARTESIAN_POINT ( 'NONE', ( -3.037023391492366600, -0.3281300595408345700, -1.278130059540834300 ) ) ; +#7511 = ORIENTED_EDGE ( 'NONE', *, *, #9393, .F. ) ; +#7512 = LINE ( 'NONE', #9191, #25076 ) ; +#7513 = ORIENTED_EDGE ( 'NONE', *, *, #40910, .F. ) ; +#7514 = FILL_AREA_STYLE_COLOUR ( '', #41769 ) ; +#7515 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#7517 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15567 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7989, #8403, #30611 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7516 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5359 ), #3997 ) ; +#7518 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30844 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30962, #5391, #27580 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7519 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, 1.000000000000000000, 1.807003620809177300E-016 ) ) ; +#7520 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid19', #29822 ) ; +#7521 = AXIS2_PLACEMENT_3D ( 'NONE', #27907, #40881, #39879 ) ; +#7522 = ORIENTED_EDGE ( 'NONE', *, *, #22662, .T. ) ; +#7523 = FACE_OUTER_BOUND ( 'NONE', #37779, .T. ) ; +#7524 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29747 ) ) ; +#7525 = CARTESIAN_POINT ( 'NONE', ( -3.237718385397967900, 0.2999999999999999900, 0.7155313145785868700 ) ) ; +#7526 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, -0.07499999999999999700, -0.3254101966249999800 ) ) ; +#7527 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7528 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7529 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#7530 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.380001745296126600, -6.031671842700004200 ) ) ; +#7531 = CARTESIAN_POINT ( 'NONE', ( -4.570925237316274100, -1.009999999999999100, -6.861124800398366500 ) ) ; +#7532 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7533 = PRESENTATION_STYLE_ASSIGNMENT (( #10941 ) ) ; +#7534 = SURFACE_STYLE_USAGE ( .BOTH. , #40729 ) ; +#7535 = EDGE_LOOP ( 'NONE', ( #41689, #5594, #17143, #5691 ) ) ; +#7536 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.056601140521968800E-031 ) ) ; +#7537 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7538 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7539 = ORIENTED_EDGE ( 'NONE', *, *, #36406, .T. ) ; +#7540 = SURFACE_STYLE_FILL_AREA ( #3572 ) ; +#7541 = ORIENTED_EDGE ( 'NONE', *, *, #16471, .T. ) ; +#7542 = ADVANCED_FACE ( 'NONE', ( #23076 ), #32323, .F. ) ; +#7543 = SURFACE_STYLE_FILL_AREA ( #34789 ) ; +#7544 = SURFACE_SIDE_STYLE ('',( #11147 ) ) ; +#7545 = SURFACE_STYLE_FILL_AREA ( #15927 ) ; +#7546 = ORIENTED_EDGE ( 'NONE', *, *, #19810, .T. ) ; +#7547 = LINE ( 'NONE', #6328, #3049 ) ; +#7548 = VERTEX_POINT ( 'NONE', #35718 ) ; +#7549 = VERTEX_POINT ( 'NONE', #16373 ) ; +#7550 = EDGE_CURVE ( 'NONE', #23410, #7917, #5402, .T. ) ; +#7551 = SURFACE_STYLE_USAGE ( .BOTH. , #26947 ) ; +#7552 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521965300E-031 ) ) ; +#7553 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35281, 'distance_accuracy_value', 'NONE'); +#7554 = FILL_AREA_STYLE ('',( #40030 ) ) ; +#7555 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7556 = EDGE_CURVE ( 'NONE', #7836, #2503, #38740, .T. ) ; +#7557 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7558 = ORIENTED_EDGE ( 'NONE', *, *, #26261, .T. ) ; +#7559 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7560 = VECTOR ( 'NONE', #38922, 1000.000000000000000 ) ; +#7561 = STYLED_ITEM ( 'NONE', ( #22483 ), #22058 ) ; +#7562 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#7563 = VECTOR ( 'NONE', #9331, 1000.000000000000000 ) ; +#7564 = SURFACE_STYLE_FILL_AREA ( #14250 ) ; +#7565 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#7566 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#7567 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6757 ), #25723 ) ; +#7568 = LINE ( 'NONE', #40266, #38893 ) ; +#7569 = PRESENTATION_STYLE_ASSIGNMENT (( #26051 ) ) ; +#7570 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23552 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15347, #2515, #37644 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7571 = SURFACE_STYLE_USAGE ( .BOTH. , #23690 ) ; +#7572 = SURFACE_STYLE_USAGE ( .BOTH. , #33860 ) ; +#7574 = AXIS2_PLACEMENT_3D ( 'NONE', #5884, #2814, #25395 ) ; +#7573 = AXIS2_PLACEMENT_3D ( 'NONE', #32677, #16861, #19729 ) ; +#7575 = FACE_OUTER_BOUND ( 'NONE', #15821, .T. ) ; +#7576 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18148, 'distance_accuracy_value', 'NONE'); +#7577 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.8400000000000000800 ) ) ; +#7578 = ORIENTED_EDGE ( 'NONE', *, *, #22674, .T. ) ; +#7580 = AXIS2_PLACEMENT_3D ( 'NONE', #33284, #4026, #7270 ) ; +#7579 = STYLED_ITEM ( 'NONE', ( #33348 ), #34379 ) ; +#7581 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000800, -0.2000017452961698200 ) ) ; +#7582 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7583 = VECTOR ( 'NONE', #41481, 1000.000000000000000 ) ; +#7584 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7585 = ADVANCED_FACE ( 'NONE', ( #22594 ), #13239, .F. ) ; +#7586 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6618 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4805, #11016, #33625 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7587 = ORIENTED_EDGE ( 'NONE', *, *, #40459, .F. ) ; +#7588 = ORIENTED_EDGE ( 'NONE', *, *, #6264, .T. ) ; +#7589 = SURFACE_STYLE_FILL_AREA ( #8741 ) ; +#7590 = SURFACE_STYLE_USAGE ( .BOTH. , #1289 ) ; +#7591 = VECTOR ( 'NONE', #5779, 1000.000000000000000 ) ; +#7592 = FACE_OUTER_BOUND ( 'NONE', #18720, .T. ) ; +#7593 = EDGE_LOOP ( 'NONE', ( #7223, #14343, #8070, #16667 ) ) ; +#7594 = ORIENTED_EDGE ( 'NONE', *, *, #40337, .F. ) ; +#7595 = ORIENTED_EDGE ( 'NONE', *, *, #31057, .F. ) ; +#7597 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 2.032879073410321300E-016, 1.000000000000000000 ) ) ; +#7596 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, 0.2000000000000001200, -3.250000000000000000 ) ) ; +#7598 = ADVANCED_FACE ( 'NONE', ( #36225 ), #3654, .T. ) ; +#7599 = FILL_AREA_STYLE ('',( #23716 ) ) ; +#7600 = PLANE ( 'NONE', #35179 ) ; +#7601 = VERTEX_POINT ( 'NONE', #4496 ) ; +#7602 = VECTOR ( 'NONE', #32015, 1000.000000000000000 ) ; +#7603 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, 0.2999999999999999900, -1.399999999999999900 ) ) ; +#7604 = LINE ( 'NONE', #18740, #31376 ) ; +#7605 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#7606 = LINE ( 'NONE', #22940, #40971 ) ; +#7607 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.1000000000000131600, -1.749999999999999800 ) ) ; +#7608 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7609 = EDGE_CURVE ( 'NONE', #16621, #41528, #14977, .T. ) ; +#7610 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7611 = LINE ( 'NONE', #12895, #31385 ) ; +#7612 = FILL_AREA_STYLE_COLOUR ( '', #9798 ) ; +#7613 = CARTESIAN_POINT ( 'NONE', ( -0.6000000000000000900, -1.380001745296138200, -5.449999999999994000 ) ) ; +#7614 = FILL_AREA_STYLE ('',( #16955 ) ) ; +#7615 = EDGE_CURVE ( 'NONE', #5574, #18968, #13454, .T. ) ; +#7616 = AXIS2_PLACEMENT_3D ( 'NONE', #1844, #40205, #37398 ) ; +#7617 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32654, 'distance_accuracy_value', 'NONE'); +#7618 = ORIENTED_EDGE ( 'NONE', *, *, #8341, .F. ) ; +#7619 = PLANE ( 'NONE', #33330 ) ; +#7620 = SURFACE_STYLE_FILL_AREA ( #8579 ) ; +#7621 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27937 ) ) ; +#7622 = ORIENTED_EDGE ( 'NONE', *, *, #24810, .T. ) ; +#7623 = ORIENTED_EDGE ( 'NONE', *, *, #500, .T. ) ; +#7624 = FILL_AREA_STYLE ('',( #10864 ) ) ; +#7625 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26576 ) ) ; +#7626 = PRESENTATION_STYLE_ASSIGNMENT (( #20020 ) ) ; +#7627 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -2.032879073410321300E-016, -1.000000000000000000 ) ) ; +#7628 = VECTOR ( 'NONE', #17407, 1000.000000000000000 ) ; +#7629 = SURFACE_STYLE_USAGE ( .BOTH. , #33488 ) ; +#7630 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#7631 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #336, 'distance_accuracy_value', 'NONE'); +#7632 = SURFACE_STYLE_FILL_AREA ( #22216 ) ; +#7633 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7634 = ORIENTED_EDGE ( 'NONE', *, *, #22543, .T. ) ; +#7635 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27947 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27774, #40593, #33979 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7636 = SURFACE_STYLE_USAGE ( .BOTH. , #16977 ) ; +#7637 = VECTOR ( 'NONE', #17468, 1000.000000000000000 ) ; +#7638 = ORIENTED_EDGE ( 'NONE', *, *, #31689, .F. ) ; +#7640 = ADVANCED_FACE ( 'NONE', ( #31144 ), #36559, .F. ) ; +#7639 = ORIENTED_EDGE ( 'NONE', *, *, #1562, .F. ) ; +#7641 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28746 ), #4114 ) ; +#7642 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745296168900, -2.904459358809384600 ) ) ; +#7645 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5485 ), #6291 ) ; +#7644 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7643 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1257 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32952, #4558, #18831 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7646 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7647 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7648 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -2.032879073410321300E-016, -1.000000000000000000 ) ) ; +#7650 = EDGE_CURVE ( 'NONE', #38648, #15061, #2372, .T. ) ; +#7649 = STYLED_ITEM ( 'NONE', ( #6149 ), #35160 ) ; +#7651 = ORIENTED_EDGE ( 'NONE', *, *, #21891, .T. ) ; +#7652 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7653 = FACE_OUTER_BOUND ( 'NONE', #26245, .T. ) ; +#7654 = ORIENTED_EDGE ( 'NONE', *, *, #2230, .F. ) ; +#7655 = SURFACE_STYLE_FILL_AREA ( #9801 ) ; +#7656 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.3499999999999996400, -1.250000000000000000 ) ) ; +#7657 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7659 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19874 ) ) ; +#7658 = AXIS2_PLACEMENT_3D ( 'NONE', #39339, #39057, #412 ) ; +#7660 = CARTESIAN_POINT ( 'NONE', ( -1.300000000000000000, 1.630001745296169500, -1.650000000000000800 ) ) ; +#7661 = SURFACE_STYLE_FILL_AREA ( #9301 ) ; +#7662 = FILL_AREA_STYLE_COLOUR ( '', #41269 ) ; +#7663 = CARTESIAN_POINT ( 'NONE', ( 4.449999999999999300, -1.400001745296165500, -7.200000000000005500 ) ) ; +#7664 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.380001745296129100, -6.031671842700004200 ) ) ; +#7665 = LINE ( 'NONE', #27481, #32416 ) ; +#7666 = VECTOR ( 'NONE', #18077, 1000.000000000000000 ) ; +#7667 = ORIENTED_EDGE ( 'NONE', *, *, #33192, .T. ) ; +#7668 = FILL_AREA_STYLE ('',( #1490 ) ) ; +#7669 = CYLINDRICAL_SURFACE ( 'NONE', #4291, 0.2000017452961698200 ) ; +#7670 = DIRECTION ( 'NONE', ( -0.0002094395087002862800, 0.0000000000000000000, 0.9999999780675458100 ) ) ; +#7671 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.2300017452961680700, -6.224999999999999600 ) ) ; +#7672 = DIRECTION ( 'NONE', ( -1.741447568840169000E-031, -2.344220913482171200E-016, -1.000000000000000000 ) ) ; +#7673 = ORIENTED_EDGE ( 'NONE', *, *, #29956, .F. ) ; +#7674 = FILL_AREA_STYLE_COLOUR ( '', #24075 ) ; +#7675 = SURFACE_SIDE_STYLE ('',( #40804 ) ) ; +#7676 = FILL_AREA_STYLE_COLOUR ( '', #618 ) ; +#7677 = SURFACE_STYLE_FILL_AREA ( #41534 ) ; +#7678 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.279999999999999800, -3.299999999999999800 ) ) ; +#7679 = EDGE_LOOP ( 'NONE', ( #18454, #25918, #3269, #28684 ) ) ; +#7680 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -5.075000000000000200 ) ) ; +#7681 = EDGE_CURVE ( 'NONE', #25692, #10907, #10903, .T. ) ; +#7682 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#7683 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7684 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#7685 = EDGE_CURVE ( 'NONE', #35724, #37070, #29640, .T. ) ; +#7686 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -1.380001745296141500, -4.781671842700004200 ) ) ; +#7687 = FILL_AREA_STYLE_COLOUR ( '', #28208 ) ; +#7688 = CARTESIAN_POINT ( 'NONE', ( 0.1500000000000000200, -1.380001745296135700, -6.031671842700004200 ) ) ; +#7689 = ORIENTED_EDGE ( 'NONE', *, *, #26348, .F. ) ; +#7690 = ADVANCED_FACE ( 'NONE', ( #3851 ), #33170, .T. ) ; +#7691 = CARTESIAN_POINT ( 'NONE', ( 3.680000000000000200, -1.499998254703818900, -6.299999999999993600 ) ) ; +#7692 = LINE ( 'NONE', #39492, #12222 ) ; +#7693 = VECTOR ( 'NONE', #23729, 1000.000000000000000 ) ; +#7694 = AXIS2_PLACEMENT_3D ( 'NONE', #32720, #16769, #39345 ) ; +#7695 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.380001745296132400, -6.699999999999994000 ) ) ; +#7696 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 2.322941965694886000, 0.6999999999999999600 ) ) ; +#7697 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.8500017452961654600, -4.875000000000000900 ) ) ; +#7698 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31521 ), #24243 ) ; +#7700 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703822500, -3.700000000000000200 ) ) ; +#7699 = LINE ( 'NONE', #24849, #19850 ) ; +#7701 = PRESENTATION_STYLE_ASSIGNMENT (( #39490 ) ) ; +#7702 = AXIS2_PLACEMENT_3D ( 'NONE', #14120, #17923, #21195 ) ; +#7703 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7704 = ORIENTED_EDGE ( 'NONE', *, *, #20182, .T. ) ; +#7707 = EDGE_CURVE ( 'NONE', #3613, #6037, #22558, .T. ) ; +#7706 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#7705 = STYLED_ITEM ( 'NONE', ( #41706 ), #36674 ) ; +#7708 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7709 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, 0.2800017452961687200, -6.749999999999999100 ) ) ; +#7710 = SURFACE_STYLE_USAGE ( .BOTH. , #26816 ) ; +#7711 = CARTESIAN_POINT ( 'NONE', ( 2.995000000000001000, 0.3500000000000000900, -1.468572389158397700 ) ) ; +#7712 = ORIENTED_EDGE ( 'NONE', *, *, #40288, .T. ) ; +#7713 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2890, 'distance_accuracy_value', 'NONE'); +#7715 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36680 ), #15814 ) ; +#7714 = AXIS2_PLACEMENT_3D ( 'NONE', #8578, #8711, #31040 ) ; +#7716 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#7717 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3302 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37695, #41229, #15111 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7718 = PRESENTATION_STYLE_ASSIGNMENT (( #6213 ) ) ; +#7719 = ORIENTED_EDGE ( 'NONE', *, *, #2842, .T. ) ; +#7720 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12876, 'distance_accuracy_value', 'NONE'); +#7721 = SURFACE_STYLE_FILL_AREA ( #22854 ) ; +#7722 = VERTEX_POINT ( 'NONE', #17505 ) ; +#7723 = CARTESIAN_POINT ( 'NONE', ( 0.6500000000000000200, -1.139998254717358200, -6.299996877890552400 ) ) ; +#7724 = ORIENTED_EDGE ( 'NONE', *, *, #18870, .T. ) ; +#7725 = ORIENTED_EDGE ( 'NONE', *, *, #37174, .T. ) ; +#7726 = SURFACE_STYLE_USAGE ( .BOTH. , #13948 ) ; +#7727 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7728 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 0.3500000000000000300, 0.3499999999999999800 ) ) ; +#7729 = ORIENTED_EDGE ( 'NONE', *, *, #26837, .T. ) ; +#7730 = SURFACE_SIDE_STYLE ('',( #29523 ) ) ; +#7731 = VECTOR ( 'NONE', #30064, 1000.000000000000000 ) ; +#7732 = EDGE_LOOP ( 'NONE', ( #22482, #12119, #37018, #22524 ) ) ; +#7733 = CIRCLE ( 'NONE', #3793, 0.1000000000000002600 ) ; +#7734 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#7735 = FACE_OUTER_BOUND ( 'NONE', #17793, .T. ) ; +#7736 = EDGE_CURVE ( 'NONE', #23868, #28549, #40737, .T. ) ; +#7737 = PLANE ( 'NONE', #33462 ) ; +#7738 = PRESENTATION_STYLE_ASSIGNMENT (( #6603 ) ) ; +#7739 = SURFACE_SIDE_STYLE ('',( #35545 ) ) ; +#7740 = EDGE_CURVE ( 'NONE', #32468, #20166, #23520, .T. ) ; +#7741 = VERTEX_POINT ( 'NONE', #4642 ) ; +#7742 = FILL_AREA_STYLE ('',( #11128 ) ) ; +#7743 = LINE ( 'NONE', #32335, #13828 ) ; +#7744 = EDGE_CURVE ( 'NONE', #12737, #38400, #38658, .T. ) ; +#7745 = DIRECTION ( 'NONE', ( 5.782411586589354100E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7746 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7747 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7432 ) ) ; +#7748 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 1.485063948690956900E-014, -2.095470210943120000 ) ) ; +#7749 = VECTOR ( 'NONE', #14546, 1000.000000000000000 ) ; +#7750 = PRESENTATION_STYLE_ASSIGNMENT (( #10780 ) ) ; +#7751 = FILL_AREA_STYLE ('',( #39527 ) ) ; +#7752 = SURFACE_STYLE_USAGE ( .BOTH. , #20507 ) ; +#7753 = CLOSED_SHELL ( 'NONE', ( #41359, #14180, #13701, #26565, #1583, #33611 ) ) ; +#7754 = AXIS2_PLACEMENT_3D ( 'NONE', #8620, #22059, #28400 ) ; +#7755 = ORIENTED_EDGE ( 'NONE', *, *, #11994, .F. ) ; +#7756 = ORIENTED_EDGE ( 'NONE', *, *, #29348, .F. ) ; +#7757 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#7758 = EDGE_LOOP ( 'NONE', ( #14527, #200, #13832, #27498 ) ) ; +#7759 = ADVANCED_FACE ( 'NONE', ( #33133 ), #12401, .T. ) ; +#7760 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17818 ), #6942 ) ; +#7761 = SURFACE_STYLE_FILL_AREA ( #10302 ) ; +#7763 = EDGE_CURVE ( 'NONE', #14666, #36087, #9356, .T. ) ; +#7762 = AXIS2_PLACEMENT_3D ( 'NONE', #21491, #27536, #2155 ) ; +#7764 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid30', #27847 ) ; +#7765 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#7766 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7767 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7768 = PRESENTATION_STYLE_ASSIGNMENT (( #27264 ) ) ; +#7769 = LINE ( 'NONE', #18286, #17894 ) ; +#7770 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, 0.0000000000000000000 ) ) ; +#7771 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.180001745296165300, -7.300000000000000700 ) ) ; +#7773 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19997 ) ) ; +#7772 = AXIS2_PLACEMENT_3D ( 'NONE', #28970, #3414, #25754 ) ; +#7774 = FACE_OUTER_BOUND ( 'NONE', #8648, .T. ) ; +#7775 = AXIS2_PLACEMENT_3D ( 'NONE', #8949, #27920, #24695 ) ; +#7776 = PRESENTATION_STYLE_ASSIGNMENT (( #33516 ) ) ; +#7777 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7778 = AXIS2_PLACEMENT_3D ( 'NONE', #15079, #37807, #24994 ) ; +#7779 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#7780 = FILL_AREA_STYLE_COLOUR ( '', #22163 ) ; +#7782 = STYLED_ITEM ( 'NONE', ( #34150 ), #7809 ) ; +#7781 = VECTOR ( 'NONE', #10119, 1000.000000000000000 ) ; +#7783 = SURFACE_SIDE_STYLE ('',( #29131 ) ) ; +#7784 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#7785 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7786 = SURFACE_SIDE_STYLE ('',( #32608 ) ) ; +#7787 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.139998254717359900, -6.299996877890552400 ) ) ; +#7788 = ORIENTED_EDGE ( 'NONE', *, *, #37174, .F. ) ; +#7789 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#7790 = FILL_AREA_STYLE ('',( #39988 ) ) ; +#7791 = ADVANCED_FACE ( 'NONE', ( #24055 ), #21052, .T. ) ; +#7792 = ORIENTED_EDGE ( 'NONE', *, *, #36140, .T. ) ; +#7793 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7795 = FACE_OUTER_BOUND ( 'NONE', #1287, .T. ) ; +#7794 = VECTOR ( 'NONE', #10744, 1000.000000000000000 ) ; +#7796 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21913, 'distance_accuracy_value', 'NONE'); +#7797 = ORIENTED_EDGE ( 'NONE', *, *, #8351, .T. ) ; +#7798 = CIRCLE ( 'NONE', #2857, 0.1000000000000000500 ) ; +#7799 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#7800 = SURFACE_STYLE_FILL_AREA ( #40260 ) ; +#7801 = VECTOR ( 'NONE', #40394, 1000.000000000000000 ) ; +#7802 = VERTEX_POINT ( 'NONE', #17657 ) ; +#7803 = EDGE_CURVE ( 'NONE', #16721, #14718, #3806, .T. ) ; +#7804 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7805 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -2.099999999999999600 ) ) ; +#7806 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#7807 = CARTESIAN_POINT ( 'NONE', ( 3.187857291441410300, -0.5178638274295195300, -1.847863378040788000 ) ) ; +#7808 = AXIS2_PLACEMENT_3D ( 'NONE', #3017, #22224, #18985 ) ; +#7809 = ADVANCED_FACE ( 'NONE', ( #4835 ), #34006, .F. ) ; +#7810 = LINE ( 'NONE', #15989, #41178 ) ; +#7811 = ORIENTED_EDGE ( 'NONE', *, *, #8594, .T. ) ; +#7812 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7813 = EDGE_CURVE ( 'NONE', #4330, #29902, #15661, .T. ) ; +#7814 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.499998254703827700, -6.299999999999993600 ) ) ; +#7815 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7816 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244519300E-016 ) ) ; +#7817 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2727 ) ) ; +#7818 = LINE ( 'NONE', #9705, #13359 ) ; +#7819 = CIRCLE ( 'NONE', #17179, 0.1000000000000002600 ) ; +#7820 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5667 ) ) ; +#7821 = VERTEX_POINT ( 'NONE', #18898 ) ; +#7822 = EDGE_CURVE ( 'NONE', #20115, #19456, #5819, .T. ) ; +#7823 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.6199999999999849000, -5.199999999999999300 ) ) ; +#7824 = EDGE_LOOP ( 'NONE', ( #35814, #1445, #753, #5986, #20715 ) ) ; +#7825 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.9999999780675459200, -0.0002094395087002863300 ) ) ; +#7826 = ORIENTED_EDGE ( 'NONE', *, *, #14207, .F. ) ; +#7828 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15933 ), #13782 ) ; +#7827 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25354 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4335, #33310, #26970 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7829 = FILL_AREA_STYLE ('',( #39887 ) ) ; +#7830 = LINE ( 'NONE', #6724, #31588 ) ; +#7831 = LINE ( 'NONE', #2202, #35648 ) ; +#7833 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4874 ), #9973 ) ; +#7832 = AXIS2_PLACEMENT_3D ( 'NONE', #26689, #20206, #16506 ) ; +#7834 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.380001745296126800, -4.781671842700004200 ) ) ; +#7835 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#7836 = VERTEX_POINT ( 'NONE', #8964 ) ; +#7837 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40763 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24507, #25079, #37886 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7838 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, 0.5999999999999999800, -1.930000000000000200 ) ) ; +#7839 = VECTOR ( 'NONE', #16187, 1000.000000000000000 ) ; +#7840 = FILL_AREA_STYLE ('',( #36811 ) ) ; +#7841 = ORIENTED_EDGE ( 'NONE', *, *, #3664, .F. ) ; +#7842 = ADVANCED_FACE ( 'NONE', ( #3300 ), #5316, .F. ) ; +#7843 = FILL_AREA_STYLE_COLOUR ( '', #22190 ) ; +#7844 = PLANE ( 'NONE', #3364 ) ; +#7845 = LINE ( 'NONE', #16460, #41218 ) ; +#7846 = FILL_AREA_STYLE ('',( #17344 ) ) ; +#7847 = EDGE_LOOP ( 'NONE', ( #36206, #19274, #28035, #10535 ) ) ; +#7848 = FILL_AREA_STYLE_COLOUR ( '', #39981 ) ; +#7849 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#7850 = LINE ( 'NONE', #36041, #27102 ) ; +#7851 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7852 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12975, 'distance_accuracy_value', 'NONE'); +#7853 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, 0.2799999999999973100, 0.0000000000000000000 ) ) ; +#7854 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7855 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7856 = EDGE_CURVE ( 'NONE', #33379, #12885, #18970, .T. ) ; +#7857 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17025, 'distance_accuracy_value', 'NONE'); +#7858 = VECTOR ( 'NONE', #35796, 1000.000000000000000 ) ; +#7859 = CARTESIAN_POINT ( 'NONE', ( -0.1500000000000000200, -1.380001745296135700, -6.031671842700004200 ) ) ; +#7860 = EDGE_CURVE ( 'NONE', #32564, #7977, #27541, .T. ) ; +#7861 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#7862 = AXIS2_PLACEMENT_3D ( 'NONE', #29838, #17148, #798 ) ; +#7863 = ORIENTED_EDGE ( 'NONE', *, *, #1876, .F. ) ; +#7865 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875040400E-015, -6.056601140521968800E-031 ) ) ; +#7864 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7866 = ORIENTED_EDGE ( 'NONE', *, *, #20041, .F. ) ; +#7867 = VERTEX_POINT ( 'NONE', #34418 ) ; +#7868 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#7869 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36847 ), #635 ) ; +#7870 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.5300017452961685000, -4.414589803375031700 ) ) ; +#7871 = SURFACE_SIDE_STYLE ('',( #34468 ) ) ; +#7872 = CONICAL_SURFACE ( 'NONE', #40299, 0.3000000000000001000, 0.3490658503988666700 ) ; +#7873 = LINE ( 'NONE', #16735, #33187 ) ; +#7874 = ORIENTED_EDGE ( 'NONE', *, *, #9401, .T. ) ; +#7875 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32503 ) ) ; +#7876 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#7877 = ORIENTED_EDGE ( 'NONE', *, *, #4205, .F. ) ; +#7878 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1429 ) ) ; +#7879 = AXIS2_PLACEMENT_3D ( 'NONE', #36587, #30084, #26569 ) ; +#7880 = LINE ( 'NONE', #6573, #20592 ) ; +#7883 = EDGE_CURVE ( 'NONE', #21918, #11156, #34632, .T. ) ; +#7882 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.499998254703822900, -6.299999999999993600 ) ) ; +#7881 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12010 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22676, #38759, #22816 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7884 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7885 = ADVANCED_FACE ( 'NONE', ( #22995 ), #24993, .F. ) ; +#7886 = PLANE ( 'NONE', #12962 ) ; +#7887 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7888 = SURFACE_STYLE_USAGE ( .BOTH. , #40644 ) ; +#7889 = PRESENTATION_STYLE_ASSIGNMENT (( #6245 ) ) ; +#7891 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31049 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32619, #26277, #16386 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7890 = STYLED_ITEM ( 'NONE', ( #6012 ), #24987 ) ; +#7892 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244516300E-016 ) ) ; +#7893 = SURFACE_STYLE_USAGE ( .BOTH. , #36327 ) ; +#7894 = SURFACE_STYLE_USAGE ( .BOTH. , #27266 ) ; +#7895 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7896 = VERTEX_POINT ( 'NONE', #34842 ) ; +#7897 = VECTOR ( 'NONE', #26465, 1000.000000000000000 ) ; +#7898 = LINE ( 'NONE', #2588, #34712 ) ; +#7899 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7900 = SURFACE_SIDE_STYLE ('',( #18348 ) ) ; +#7901 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8496, 'distance_accuracy_value', 'NONE'); +#7902 = CIRCLE ( 'NONE', #38681, 0.2000000000000000900 ) ; +#7903 = ORIENTED_EDGE ( 'NONE', *, *, #40522, .F. ) ; +#7904 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 0.3500000000000000300, 0.3499999999999999800 ) ) ; +#7905 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.3300017452961685500, -5.075000000000000200 ) ) ; +#7906 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7907 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7908 = VERTEX_POINT ( 'NONE', #15078 ) ; +#7909 = ORIENTED_EDGE ( 'NONE', *, *, #41503, .T. ) ; +#7910 = EDGE_LOOP ( 'NONE', ( #6026, #35111, #1944, #9731 ) ) ; +#7911 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7912 = CYLINDRICAL_SURFACE ( 'NONE', #25262, 0.2999999999999999300 ) ; +#7913 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7914 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#7915 = CIRCLE ( 'NONE', #9424, 0.09999999999987406500 ) ; +#7916 = PRESENTATION_STYLE_ASSIGNMENT (( #970 ) ) ; +#7917 = VERTEX_POINT ( 'NONE', #38212 ) ; +#7918 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -500000.0000000000600, -3.814459358691027400 ) ) ; +#7919 = ORIENTED_EDGE ( 'NONE', *, *, #18564, .T. ) ; +#7920 = EDGE_CURVE ( 'NONE', #38185, #4681, #1804, .T. ) ; +#7921 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7922 = SURFACE_SIDE_STYLE ('',( #3312 ) ) ; +#7923 = EDGE_CURVE ( 'NONE', #8155, #39313, #9835, .T. ) ; +#7924 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27423 ), #39037 ) ; +#7925 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7926 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4976 ) ) ; +#7927 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7928 = ORIENTED_EDGE ( 'NONE', *, *, #33738, .F. ) ; +#7929 = AXIS2_PLACEMENT_3D ( 'NONE', #1899, #11168, #4694 ) ; +#7930 = PLANE ( 'NONE', #19753 ) ; +#7931 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000003200, 0.3000000000000145900, -1.950000000000001300 ) ) ; +#7932 = CARTESIAN_POINT ( 'NONE', ( 3.244861097302665700, -0.4653767314822222500, -1.795167761766716300 ) ) ; +#7933 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( + ( #35033, #6226, #6086, #8888 ), + ( #28678, #31915, #38537, #35176 ), + ( #22057, #28815, #25186, #32043 ), + ( #41390, #25050, #34904, #2731 ) ), + .UNSPECIFIED., .F., .F., .F. ) + B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) + GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( + ( 1.000000000000000000, 0.8047378540383339800, 0.8047378540383339800, 1.000000000000000000), + ( 0.8047378541243661600, 0.6476030137914562400, 0.6476030137914562400, 0.8047378541243661600), + ( 0.8047378541243661600, 0.6476030137914562400, 0.6476030137914562400, 0.8047378541243661600), + ( 1.000000000000000000, 0.8047378540383339800, 0.8047378540383339800, 1.000000000000000000) ) ) + REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); +#7935 = AXIS2_PLACEMENT_3D ( 'NONE', #26585, #26885, #11158 ) ; +#7934 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26343 ), #14457 ) ; +#7936 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.139998254717353500, -6.299996877890552400 ) ) ; +#7937 = ORIENTED_EDGE ( 'NONE', *, *, #35858, .T. ) ; +#7938 = FACE_OUTER_BOUND ( 'NONE', #9765, .T. ) ; +#7939 = EDGE_CURVE ( 'NONE', #31432, #8598, #802, .T. ) ; +#7940 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#7941 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7942 = ORIENTED_EDGE ( 'NONE', *, *, #41105, .T. ) ; +#7943 = VERTEX_POINT ( 'NONE', #31451 ) ; +#7944 = ORIENTED_EDGE ( 'NONE', *, *, #5264, .T. ) ; +#7945 = LINE ( 'NONE', #28388, #38792 ) ; +#7946 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7948 = AXIS2_PLACEMENT_3D ( 'NONE', #4610, #40169, #26509 ) ; +#7947 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38823 ), #9305 ) ; +#7950 = FACE_OUTER_BOUND ( 'NONE', #30005, .T. ) ; +#7949 = STYLED_ITEM ( 'NONE', ( #26611 ), #39112 ) ; +#7951 = FACE_OUTER_BOUND ( 'NONE', #22756, .T. ) ; +#7952 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7953 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -9.757819552369557300E-015, -1.000000000000000000 ) ) ; +#7954 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.4300017452961694700, -6.424999999999999800 ) ) ; +#7955 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#7956 = ORIENTED_EDGE ( 'NONE', *, *, #38122, .F. ) ; +#7957 = TOROIDAL_SURFACE ( 'NONE', #15561, 1.550380236995680100, 0.1000000000000008500 ) ; +#7958 = ORIENTED_EDGE ( 'NONE', *, *, #24024, .T. ) ; +#7959 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7960 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #26487, #23224, #10496, #23645, #39457 ), + .UNSPECIFIED., .F., .F., + ( 4, 1, 4 ), + ( 1.084202172485504400E-019, 7.398295686211458200E-006, 1.479659137242280800E-005 ), + .UNSPECIFIED. ) ; +#7961 = ADVANCED_FACE ( 'NONE', ( #9316 ), #34584, .T. ) ; +#7962 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7963 = SURFACE_SIDE_STYLE ('',( #22198 ) ) ; +#7965 = SURFACE_STYLE_FILL_AREA ( #15363 ) ; +#7964 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25431, 'distance_accuracy_value', 'NONE'); +#7966 = ORIENTED_EDGE ( 'NONE', *, *, #24093, .T. ) ; +#7967 = LINE ( 'NONE', #11637, #19653 ) ; +#7968 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7969 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#7970 = PLANE ( 'NONE', #19325 ) ; +#7971 = PLANE ( 'NONE', #19815 ) ; +#7972 = SURFACE_STYLE_USAGE ( .BOTH. , #5159 ) ; +#7973 = EDGE_CURVE ( 'NONE', #17355, #2345, #24527, .T. ) ; +#7974 = ORIENTED_EDGE ( 'NONE', *, *, #24434, .F. ) ; +#7975 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7976 = EDGE_CURVE ( 'NONE', #18896, #6860, #21496, .T. ) ; +#7977 = VERTEX_POINT ( 'NONE', #19038 ) ; +#7978 = CYLINDRICAL_SURFACE ( 'NONE', #27097, 0.3600000000000078700 ) ; +#7979 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#7980 = CARTESIAN_POINT ( 'NONE', ( 3.105918336655572700, 0.07499999999999999700, -0.09985912296315846400 ) ) ; +#7981 = EDGE_LOOP ( 'NONE', ( #5369, #554 ) ) ; +#7982 = ORIENTED_EDGE ( 'NONE', *, *, #30143, .T. ) ; +#7983 = ORIENTED_EDGE ( 'NONE', *, *, #28414, .F. ) ; +#7984 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.380001745296165500, -2.099999999999999600 ) ) ; +#7985 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1547 ) ) ; +#7986 = LINE ( 'NONE', #8960, #979 ) ; +#7987 = VECTOR ( 'NONE', #26110, 1000.000000000000000 ) ; +#7988 = SURFACE_STYLE_USAGE ( .BOTH. , #18049 ) ; +#7989 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7990 = ORIENTED_EDGE ( 'NONE', *, *, #29078, .F. ) ; +#7991 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7992 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, 2.322941965694886000, -1.250000000000000000 ) ) ; +#7994 = VECTOR ( 'NONE', #22953, 1000.000000000000000 ) ; +#7993 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.056601140521968800E-031 ) ) ; +#7996 = EDGE_LOOP ( 'NONE', ( #8563, #38633, #36293, #18035 ) ) ; +#7995 = ADVANCED_FACE ( 'NONE', ( #30544 ), #3326, .T. ) ; +#7997 = CIRCLE ( 'NONE', #41695, 0.3600000000000078700 ) ; +#7998 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36975 ) ) ; +#7999 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10720 ) ) ; +#8000 = FILL_AREA_STYLE_COLOUR ( '', #17517 ) ; +#8002 = EDGE_CURVE ( 'NONE', #33382, #33470, #19453, .T. ) ; +#8001 = STYLED_ITEM ( 'NONE', ( #39680 ), #36934 ) ; +#8003 = ORIENTED_EDGE ( 'NONE', *, *, #7445, .F. ) ; +#8004 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#8005 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8006 = SURFACE_SIDE_STYLE ('',( #3046 ) ) ; +#8007 = ADVANCED_FACE ( 'NONE', ( #32558 ), #40231, .F. ) ; +#8008 = LINE ( 'NONE', #27302, #7479 ) ; +#8010 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17515 ) ) ; +#8009 = AXIS2_PLACEMENT_3D ( 'NONE', #38323, #113, #12882 ) ; +#8011 = FILL_AREA_STYLE_COLOUR ( '', #40018 ) ; +#8012 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000001100, 1.167528855492236500, -4.400000000000001200 ) ) ; +#8013 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39128 ), #10172 ) ; +#8014 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3117 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40114, #14713, #24187 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8015 = VECTOR ( 'NONE', #13937, 1000.000000000000000 ) ; +#8016 = SURFACE_SIDE_STYLE ('',( #25656 ) ) ; +#8017 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8018 = EDGE_LOOP ( 'NONE', ( #33590, #5450, #9086, #23534 ) ) ; +#8019 = SURFACE_STYLE_FILL_AREA ( #14077 ) ; +#8020 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000000200, -1.380001745296133300, -5.449999999999994000 ) ) ; +#8021 = SURFACE_STYLE_USAGE ( .BOTH. , #1174 ) ; +#8022 = FACE_OUTER_BOUND ( 'NONE', #16019, .T. ) ; +#8023 = FILL_AREA_STYLE ('',( #11417 ) ) ; +#8024 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, 0.2999999999999999900, 0.6780706550913999700 ) ) ; +#8025 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8026 = ORIENTED_EDGE ( 'NONE', *, *, #35679, .T. ) ; +#8027 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#8028 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8029 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8030 = FILL_AREA_STYLE ('',( #36873 ) ) ; +#8031 = EDGE_LOOP ( 'NONE', ( #35381, #34400, #33421, #23177, #24992, #35142, #3788, #17638 ) ) ; +#8032 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -3.299999999999999800 ) ) ; +#8033 = ORIENTED_EDGE ( 'NONE', *, *, #24546, .T. ) ; +#8034 = ORIENTED_EDGE ( 'NONE', *, *, #16189, .T. ) ; +#8035 = FILL_AREA_STYLE_COLOUR ( '', #40892 ) ; +#8036 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.966063034915694700, -0.6228541982233617400 ) ) ; +#8037 = EDGE_CURVE ( 'NONE', #24787, #36713, #25532, .T. ) ; +#8038 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, 0.3500000000000000300, 0.1499999999999999700 ) ) ; +#8039 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1774, 'distance_accuracy_value', 'NONE'); +#8040 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.180001745296166000, -4.775000000000000400 ) ) ; +#8041 = VERTEX_POINT ( 'NONE', #39171 ) ; +#8042 = FILL_AREA_STYLE_COLOUR ( '', #16482 ) ; +#8043 = ADVANCED_FACE ( 'NONE', ( #41653 ), #10068, .F. ) ; +#8044 = EDGE_CURVE ( 'NONE', #37070, #11756, #39638, .T. ) ; +#8045 = SURFACE_STYLE_USAGE ( .BOTH. , #30803 ) ; +#8046 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26775 ) ) ; +#8047 = SURFACE_STYLE_USAGE ( .BOTH. , #16983 ) ; +#8048 = FILL_AREA_STYLE ('',( #4693 ) ) ; +#8049 = CARTESIAN_POINT ( 'NONE', ( -3.220262413180746500, 0.07500000000000001100, -0.1017251623802896400 ) ) ; +#8050 = EDGE_CURVE ( 'NONE', #6935, #23046, #15389, .T. ) ; +#8051 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8052 = STYLED_ITEM ( 'NONE', ( #35988 ), #21772 ) ; +#8054 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -500000.0000000000600, -3.514459358691027100 ) ) ; +#8053 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#8055 = PLANE ( 'NONE', #1499 ) ; +#8056 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8057 = ORIENTED_EDGE ( 'NONE', *, *, #9299, .F. ) ; +#8059 = EDGE_CURVE ( 'NONE', #35821, #3084, #13883, .T. ) ; +#8058 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8060 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003000, 0.6800017452961719700, -1.650000000000001700 ) ) ; +#8061 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, 0.2800000000000027500, -0.2339555568811695400 ) ) ; +#8062 = ORIENTED_EDGE ( 'NONE', *, *, #36344, .T. ) ; +#8063 = ORIENTED_EDGE ( 'NONE', *, *, #39732, .T. ) ; +#8064 = VECTOR ( 'NONE', #37755, 1000.000000000000000 ) ; +#8066 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33704 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8544, #37380, #37243 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8065 = STYLED_ITEM ( 'NONE', ( #30036 ), #28097 ) ; +#8067 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41129 ), #25441 ) ; +#8068 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -1.749999999999999300 ) ) ; +#8069 = AXIS2_PLACEMENT_3D ( 'NONE', #22892, #26143, #13267 ) ; +#8070 = ORIENTED_EDGE ( 'NONE', *, *, #16043, .F. ) ; +#8071 = LINE ( 'NONE', #15105, #9611 ) ; +#8072 = ORIENTED_EDGE ( 'NONE', *, *, #16970, .T. ) ; +#8073 = VERTEX_POINT ( 'NONE', #686 ) ; +#8074 = AXIS2_PLACEMENT_3D ( 'NONE', #31991, #6301, #9380 ) ; +#8075 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, -0.2799999999999974200, -0.2339555568811697600 ) ) ; +#8076 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8077 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14122, 'distance_accuracy_value', 'NONE'); +#8078 = SURFACE_STYLE_USAGE ( .BOTH. , #24216 ) ; +#8079 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#8080 = ORIENTED_EDGE ( 'NONE', *, *, #10415, .F. ) ; +#8081 = SURFACE_STYLE_USAGE ( .BOTH. , #10921 ) ; +#8082 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8083 = SURFACE_STYLE_USAGE ( .BOTH. , #33815 ) ; +#8084 = LINE ( 'NONE', #27929, #41446 ) ; +#8085 = SURFACE_STYLE_FILL_AREA ( #17498 ) ; +#8086 = CIRCLE ( 'NONE', #33214, 1.450380236995679300 ) ; +#8087 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8088 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#8089 = DIRECTION ( 'NONE', ( 2.628368902995161200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8090 = ADVANCED_FACE ( 'NONE', ( #40651 ), #13773, .F. ) ; +#8091 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8092 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#8093 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, -0.09999999999998343500, -4.450000000000000200 ) ) ; +#8094 = ORIENTED_EDGE ( 'NONE', *, *, #29215, .T. ) ; +#8095 = CARTESIAN_POINT ( 'NONE', ( 1.486602540378444200, 1.630001745296169500, -1.700000000000001500 ) ) ; +#8096 = PLANE ( 'NONE', #10013 ) ; +#8097 = LINE ( 'NONE', #9260, #40449 ) ; +#8098 = EDGE_CURVE ( 'NONE', #32260, #37915, #17906, .T. ) ; +#8099 = DIRECTION ( 'NONE', ( 4.130328317307650600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8100 = ORIENTED_EDGE ( 'NONE', *, *, #40647, .T. ) ; +#8101 = ORIENTED_EDGE ( 'NONE', *, *, #20610, .F. ) ; +#8102 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8103 = EDGE_CURVE ( 'NONE', #7259, #19912, #24981, .T. ) ; +#8104 = PLANE ( 'NONE', #15873 ) ; +#8105 = VECTOR ( 'NONE', #33053, 1000.000000000000000 ) ; +#8106 = ORIENTED_EDGE ( 'NONE', *, *, #23967, .F. ) ; +#8107 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3271, 'distance_accuracy_value', 'NONE'); +#8108 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#8109 = AXIS2_PLACEMENT_3D ( 'NONE', #6944, #39015, #19708 ) ; +#8110 = ORIENTED_EDGE ( 'NONE', *, *, #32359, .T. ) ; +#8111 = ORIENTED_EDGE ( 'NONE', *, *, #41347, .T. ) ; +#8112 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8113 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8114 = CARTESIAN_POINT ( 'NONE', ( 2.906813814880128800, 0.2000000000000005400, 1.149999999999999700 ) ) ; +#8115 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34373 ) ) ; +#8116 = FILL_AREA_STYLE ('',( #5024 ) ) ; +#8117 = VERTEX_POINT ( 'NONE', #32549 ) ; +#8118 = STYLED_ITEM ( 'NONE', ( #11722 ), #37707 ) ; +#8119 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8120 = SURFACE_STYLE_FILL_AREA ( #38924 ) ; +#8121 = CARTESIAN_POINT ( 'NONE', ( 3.178333333333021500, 0.07499999999999998300, -0.06128090415825945100 ) ) ; +#8122 = ORIENTED_EDGE ( 'NONE', *, *, #1818, .T. ) ; +#8123 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11322 ), #19801 ) ; +#8124 = VECTOR ( 'NONE', #41444, 1000.000000000000000 ) ; +#8125 = FACE_OUTER_BOUND ( 'NONE', #30988, .T. ) ; +#8127 = STYLED_ITEM ( 'NONE', ( #9252 ), #4934 ) ; +#8126 = STYLED_ITEM ( 'NONE', ( #13664 ), #29525 ) ; +#8128 = PRESENTATION_STYLE_ASSIGNMENT (( #5598 ) ) ; +#8129 = SURFACE_STYLE_FILL_AREA ( #6890 ) ; +#8130 = PLANE ( 'NONE', #22990 ) ; +#8132 = EDGE_CURVE ( 'NONE', #20411, #9215, #22442, .T. ) ; +#8131 = STYLED_ITEM ( 'NONE', ( #14675 ), #34246 ) ; +#8133 = CARTESIAN_POINT ( 'NONE', ( 2.573205080756887100, 1.480001745296169600, -1.650000000000000400 ) ) ; +#8134 = PLANE ( 'NONE', #31956 ) ; +#8135 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8136 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8137 = LINE ( 'NONE', #19863, #7119 ) ; +#8138 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8139 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8140 = DIRECTION ( 'NONE', ( -4.336808689942020900E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8141 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25400, 'distance_accuracy_value', 'NONE'); +#8142 = ORIENTED_EDGE ( 'NONE', *, *, #30892, .F. ) ; +#8143 = LINE ( 'NONE', #33464, #2651 ) ; +#8144 = FACE_OUTER_BOUND ( 'NONE', #10336, .T. ) ; +#8145 = ORIENTED_EDGE ( 'NONE', *, *, #4783, .T. ) ; +#8146 = PLANE ( 'NONE', #14813 ) ; +#8147 = VECTOR ( 'NONE', #6914, 1000.000000000000000 ) ; +#8148 = VECTOR ( 'NONE', #10591, 1000.000000000000000 ) ; +#8149 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#8150 = ORIENTED_EDGE ( 'NONE', *, *, #8894, .T. ) ; +#8151 = CARTESIAN_POINT ( 'NONE', ( -4.720380236995682200, -0.2799999999999974200, -0.8400000000000000800 ) ) ; +#8152 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#8153 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8154 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.949998254703822800, -3.632287565553229400 ) ) ; +#8155 = VERTEX_POINT ( 'NONE', #23227 ) ; +#8156 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.380001745296146200, -5.449999999999994000 ) ) ; +#8157 = FACE_OUTER_BOUND ( 'NONE', #5553, .T. ) ; +#8158 = ORIENTED_EDGE ( 'NONE', *, *, #29386, .F. ) ; +#8159 = EDGE_CURVE ( 'NONE', #33019, #8346, #25957, .T. ) ; +#8160 = DIRECTION ( 'NONE', ( 1.794016668472960600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8161 = ADVANCED_FACE ( 'NONE', ( #2775 ), #4220, .T. ) ; +#8162 = VECTOR ( 'NONE', #38158, 1000.000000000000000 ) ; +#8163 = VECTOR ( 'NONE', #18802, 1000.000000000000000 ) ; +#8164 = EDGE_CURVE ( 'NONE', #22918, #32260, #32021, .T. ) ; +#8165 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29090 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4597, #27201, #36935 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8166 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8167 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.2800017452961689500, -5.150000000000000400 ) ) ; +#8168 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026400, -0.2339555568811697600 ) ) ; +#8169 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8170 = AXIS2_PLACEMENT_3D ( 'NONE', #18701, #24930, #34642 ) ; +#8171 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 1.480001745296168700, -1.650000000000000800 ) ) ; +#8172 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#8173 = ORIENTED_EDGE ( 'NONE', *, *, #250, .F. ) ; +#8174 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.139998254717354400, -5.049996877890552400 ) ) ; +#8175 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17063 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14278, #29944, #17400 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8176 = AXIS2_PLACEMENT_3D ( 'NONE', #32188, #39095, #3378 ) ; +#8177 = ORIENTED_EDGE ( 'NONE', *, *, #2778, .F. ) ; +#8178 = AXIS2_PLACEMENT_3D ( 'NONE', #6156, #35250, #22399 ) ; +#8179 = CARTESIAN_POINT ( 'NONE', ( 14.52500000000000900, -0.7099999999999663200, -6.861124800398366500 ) ) ; +#8180 = FILL_AREA_STYLE_COLOUR ( '', #37272 ) ; +#8181 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8182 = LINE ( 'NONE', #879, #10704 ) ; +#8184 = EDGE_CURVE ( 'NONE', #25818, #31066, #10280, .T. ) ; +#8183 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37173 ), #13902 ) ; +#8185 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -500000.0000000000600, -2.904459358691023700 ) ) ; +#8186 = ORIENTED_EDGE ( 'NONE', *, *, #7744, .F. ) ; +#8187 = EDGE_LOOP ( 'NONE', ( #4840, #31076 ) ) ; +#8189 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8188 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#8191 = AXIS2_PLACEMENT_3D ( 'NONE', #6797, #39001, #39428 ) ; +#8190 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24777 ) ) ; +#8192 = DIRECTION ( 'NONE', ( 3.281909278875040400E-015, -1.000000000000000000, 1.355252715606881300E-016 ) ) ; +#8193 = FILL_AREA_STYLE ('',( #17847 ) ) ; +#8194 = SURFACE_STYLE_USAGE ( .BOTH. , #36904 ) ; +#8195 = ORIENTED_EDGE ( 'NONE', *, *, #14996, .F. ) ; +#8196 = SURFACE_STYLE_FILL_AREA ( #30629 ) ; +#8197 = ORIENTED_EDGE ( 'NONE', *, *, #16784, .T. ) ; +#8198 = ADVANCED_FACE ( 'NONE', ( #33541 ), #10786, .T. ) ; +#8199 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#8200 = CIRCLE ( 'NONE', #15749, 0.1000000000000001200 ) ; +#8201 = FACE_OUTER_BOUND ( 'NONE', #24101, .T. ) ; +#8202 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8203 = LINE ( 'NONE', #6630, #40068 ) ; +#8204 = SURFACE_SIDE_STYLE ('',( #39379 ) ) ; +#8205 = VECTOR ( 'NONE', #37101, 1000.000000000000000 ) ; +#8206 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8207 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8208 = VECTOR ( 'NONE', #1141, 1000.000000000000000 ) ; +#8209 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#8210 = ADVANCED_FACE ( 'NONE', ( #26992 ), #39558, .T. ) ; +#8211 = SURFACE_STYLE_USAGE ( .BOTH. , #21266 ) ; +#8212 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8213 = VERTEX_POINT ( 'NONE', #26783 ) ; +#8214 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8215 = SURFACE_STYLE_USAGE ( .BOTH. , #14464 ) ; +#8216 = EDGE_CURVE ( 'NONE', #24307, #20768, #30982, .T. ) ; +#8217 = CLOSED_SHELL ( 'NONE', ( #41450, #6401, #4162, #23083, #4883, #13956 ) ) ; +#8218 = FILL_AREA_STYLE ('',( #4857 ) ) ; +#8219 = EDGE_CURVE ( 'NONE', #28663, #23035, #32513, .T. ) ; +#8220 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#8222 = FACE_OUTER_BOUND ( 'NONE', #11977, .T. ) ; +#8221 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.499998254703829500, -6.299999999999993600 ) ) ; +#8223 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29057, 'distance_accuracy_value', 'NONE'); +#8224 = PRESENTATION_STYLE_ASSIGNMENT (( #16910 ) ) ; +#8225 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998386600, -1.749999999999999800 ) ) ; +#8226 = ORIENTED_EDGE ( 'NONE', *, *, #41759, .F. ) ; +#8227 = ORIENTED_EDGE ( 'NONE', *, *, #40032, .T. ) ; +#8228 = FILL_AREA_STYLE_COLOUR ( '', #5880 ) ; +#8229 = CARTESIAN_POINT ( 'NONE', ( 3.500000000000003100, 0.2800017452961687200, -6.749999999999999100 ) ) ; +#8230 = VERTEX_POINT ( 'NONE', #7394 ) ; +#8231 = ORIENTED_EDGE ( 'NONE', *, *, #20728, .F. ) ; +#8232 = LINE ( 'NONE', #23343, #11277 ) ; +#8233 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16914 ), #32870 ) ; +#8234 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.08000174529616972700, -7.350000000000000500 ) ) ; +#8235 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.380001745296165500, -6.800000000000000700 ) ) ; +#8236 = SURFACE_STYLE_USAGE ( .BOTH. , #1951 ) ; +#8237 = FILL_AREA_STYLE ('',( #1254 ) ) ; +#8238 = VECTOR ( 'NONE', #15685, 1000.000000000000000 ) ; +#8239 = ORIENTED_EDGE ( 'NONE', *, *, #15915, .T. ) ; +#8240 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32321 ), #19116 ) ; +#8241 = PRESENTATION_STYLE_ASSIGNMENT (( #25715 ) ) ; +#8242 = AXIS2_PLACEMENT_3D ( 'NONE', #13286, #9486, #3567 ) ; +#8243 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26145 ), #22075 ) ; +#8244 = LINE ( 'NONE', #11198, #1737 ) ; +#8247 = EDGE_CURVE ( 'NONE', #14035, #28990, #35037, .T. ) ; +#8246 = FILL_AREA_STYLE_COLOUR ( '', #40853 ) ; +#8245 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7705 ) ) ; +#8248 = SURFACE_STYLE_USAGE ( .BOTH. , #20757 ) ; +#8249 = ADVANCED_FACE ( 'NONE', ( #22402 ), #20726, .T. ) ; +#8250 = CARTESIAN_POINT ( 'NONE', ( 2.149999999999999900, -1.380001745296129100, -6.699999999999994000 ) ) ; +#8251 = CARTESIAN_POINT ( 'NONE', ( -4.721498212947778900, -1.009999999999998700, -6.861124800398366500 ) ) ; +#8252 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#8253 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28875 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32156, #41221, #2834 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8254 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8255 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#8256 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32900 ), #36445 ) ; +#8257 = SURFACE_SIDE_STYLE ('',( #10151 ) ) ; +#8258 = AXIS2_PLACEMENT_3D ( 'NONE', #15537, #35317, #18956 ) ; +#8259 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8260 = SURFACE_SIDE_STYLE ('',( #41486 ) ) ; +#8261 = CARTESIAN_POINT ( 'NONE', ( -3.429999999999999700, -1.380001745296125100, -6.031671842700004200 ) ) ; +#8262 = ORIENTED_EDGE ( 'NONE', *, *, #23960, .F. ) ; +#8263 = PLANE ( 'NONE', #9671 ) ; +#8264 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#8265 = ORIENTED_EDGE ( 'NONE', *, *, #19346, .T. ) ; +#8266 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#8267 = SURFACE_STYLE_USAGE ( .BOTH. , #37520 ) ; +#8268 = ORIENTED_EDGE ( 'NONE', *, *, #12616, .F. ) ; +#8269 = VERTEX_POINT ( 'NONE', #36510 ) ; +#8270 = ORIENTED_EDGE ( 'NONE', *, *, #7822, .F. ) ; +#8271 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -3.307718258760844200E-015, 1.000000000000000000 ) ) ; +#8272 = PLANE ( 'NONE', #19438 ) ; +#8273 = PRESENTATION_STYLE_ASSIGNMENT (( #17909 ) ) ; +#8274 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#8275 = CARTESIAN_POINT ( 'NONE', ( 3.120369891805397300, 0.2800000000000000800, -14.55000000000000100 ) ) ; +#8276 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid21', #31365 ) ; +#8277 = PRESENTATION_STYLE_ASSIGNMENT (( #19238 ) ) ; +#8278 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8279 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8280 = EDGE_CURVE ( 'NONE', #16591, #11747, #30497, .T. ) ; +#8281 = DIRECTION ( 'NONE', ( 1.084202172485504700E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8283 = VECTOR ( 'NONE', #38712, 1000.000000000000000 ) ; +#8282 = FILL_AREA_STYLE_COLOUR ( '', #22320 ) ; +#8284 = ORIENTED_EDGE ( 'NONE', *, *, #15057, .F. ) ; +#8285 = EDGE_CURVE ( 'NONE', #1433, #11960, #29965, .T. ) ; +#8286 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8287 = EDGE_CURVE ( 'NONE', #11156, #33519, #36069, .T. ) ; +#8288 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10461 ), #22125 ) ; +#8289 = ORIENTED_EDGE ( 'NONE', *, *, #6272, .T. ) ; +#8290 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.949998254703820400, -3.632287565553231600 ) ) ; +#8291 = SURFACE_SIDE_STYLE ('',( #32386 ) ) ; +#8292 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31339 ) ) ; +#8294 = ADVANCED_FACE ( 'NONE', ( #4187 ), #40567, .F. ) ; +#8293 = LINE ( 'NONE', #18104, #27030 ) ; +#8295 = CARTESIAN_POINT ( 'NONE', ( -3.332298852287715700, -0.2999999198035229700, -1.600000000000000300 ) ) ; +#8296 = SURFACE_STYLE_USAGE ( .BOTH. , #2016 ) ; +#8297 = ORIENTED_EDGE ( 'NONE', *, *, #30674, .F. ) ; +#8298 = STYLED_ITEM ( 'NONE', ( #32544 ), #12422 ) ; +#8299 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#8300 = VECTOR ( 'NONE', #33824, 1000.000000000000000 ) ; +#8302 = EDGE_CURVE ( 'NONE', #41584, #2511, #41574, .T. ) ; +#8301 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4559 ) ) ; +#8303 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8304 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8305 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.830380236995680300, -0.8400000000000000800 ) ) ; +#8306 = ORIENTED_EDGE ( 'NONE', *, *, #20290, .F. ) ; +#8307 = PRESENTATION_STYLE_ASSIGNMENT (( #6234 ) ) ; +#8308 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9559, 'distance_accuracy_value', 'NONE'); +#8309 = ORIENTED_EDGE ( 'NONE', *, *, #37719, .T. ) ; +#8310 = CARTESIAN_POINT ( 'NONE', ( -2.673205080756886800, 1.630001745296169500, -1.650000000000000800 ) ) ; +#8311 = STYLED_ITEM ( 'NONE', ( #17853 ), #3136 ) ; +#8312 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13208 ), #32958 ) ; +#8313 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8314 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005900, -0.2818014882866753400, -2.095470210943120000 ) ) ; +#8315 = ORIENTED_EDGE ( 'NONE', *, *, #17453, .F. ) ; +#8316 = STYLED_ITEM ( 'NONE', ( #13939 ), #32989 ) ; +#8317 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.080001745296165200, -5.599999999999999600 ) ) ; +#8318 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#8319 = ORIENTED_EDGE ( 'NONE', *, *, #14686, .T. ) ; +#8320 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8321 = STYLED_ITEM ( 'NONE', ( #9870 ), #7690 ) ; +#8322 = VECTOR ( 'NONE', #944, 1000.000000000000000 ) ; +#8323 = PLANE ( 'NONE', #4115 ) ; +#8324 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#8325 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.9396926207856547400, 0.3420201433263653800 ) ) ; +#8326 = ORIENTED_EDGE ( 'NONE', *, *, #15731, .T. ) ; +#8327 = LINE ( 'NONE', #15579, #20013 ) ; +#8328 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8329 = DIRECTION ( 'NONE', ( -9.637352644315598700E-016, 1.807003620809174900E-016, 1.000000000000000000 ) ) ; +#8330 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8331 = SURFACE_STYLE_USAGE ( .BOTH. , #17976 ) ; +#8332 = ORIENTED_EDGE ( 'NONE', *, *, #25880, .F. ) ; +#8333 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8334 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#8335 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.499998254703835300, -5.049999999999993600 ) ) ; +#8336 = ORIENTED_EDGE ( 'NONE', *, *, #39036, .T. ) ; +#8337 = VECTOR ( 'NONE', #40228, 1000.000000000000000 ) ; +#8338 = CIRCLE ( 'NONE', #16679, 0.3600000000000078700 ) ; +#8339 = VECTOR ( 'NONE', #41467, 1000.000000000000000 ) ; +#8340 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8341 = EDGE_CURVE ( 'NONE', #13376, #33019, #40571, .T. ) ; +#8342 = ORIENTED_EDGE ( 'NONE', *, *, #11381, .F. ) ; +#8343 = ORIENTED_EDGE ( 'NONE', *, *, #31987, .T. ) ; +#8344 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.734723475976805600E-016, 1.000000000000000000 ) ) ; +#8345 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#8346 = VERTEX_POINT ( 'NONE', #11332 ) ; +#8347 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8348 = VECTOR ( 'NONE', #23713, 1000.000000000000000 ) ; +#8349 = FACE_OUTER_BOUND ( 'NONE', #38230, .T. ) ; +#8350 = PRESENTATION_STYLE_ASSIGNMENT (( #9651 ) ) ; +#8351 = EDGE_CURVE ( 'NONE', #11735, #23410, #32972, .T. ) ; +#8352 = ORIENTED_EDGE ( 'NONE', *, *, #35600, .T. ) ; +#8353 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8354 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -5.575000000000001100 ) ) ; +#8355 = LINE ( 'NONE', #29700, #360 ) ; +#8356 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8357 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3783 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31174, #18484, #34149 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8358 = VECTOR ( 'NONE', #25058, 1000.000000000000000 ) ; +#8359 = LINE ( 'NONE', #6975, #2874 ) ; +#8360 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#8361 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2478 ) ) ; +#8362 = SURFACE_STYLE_USAGE ( .BOTH. , #4996 ) ; +#8363 = EDGE_LOOP ( 'NONE', ( #34401, #40963, #37060, #41322 ) ) ; +#8365 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13849 ), #40858 ) ; +#8364 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8366 = FILL_AREA_STYLE_COLOUR ( '', #12893 ) ; +#8367 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8368 = ADVANCED_FACE ( 'NONE', ( #8222 ), #34374, .F. ) ; +#8370 = AXIS2_PLACEMENT_3D ( 'NONE', #19600, #16456, #22542 ) ; +#8369 = STYLED_ITEM ( 'NONE', ( #37496 ), #28995 ) ; +#8371 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8372 = SURFACE_STYLE_USAGE ( .BOTH. , #37355 ) ; +#8373 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5427 ) ) ; +#8374 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#8375 = FILL_AREA_STYLE_COLOUR ( '', #5786 ) ; +#8376 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15995, 'distance_accuracy_value', 'NONE'); +#8377 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#8379 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20063 ) ) ; +#8378 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9106 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4371, #13992, #11136 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8380 = DIRECTION ( 'NONE', ( 2.367138801244516300E-016, -2.566457030884037700E-032, -1.000000000000000000 ) ) ; +#8381 = ORIENTED_EDGE ( 'NONE', *, *, #3180, .F. ) ; +#8383 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1957 ) ) ; +#8382 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8384 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8385 = SURFACE_STYLE_FILL_AREA ( #37046 ) ; +#8386 = VECTOR ( 'NONE', #27945, 1000.000000000000000 ) ; +#8387 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8388 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703821100, -5.899999999999999500 ) ) ; +#8389 = ORIENTED_EDGE ( 'NONE', *, *, #8603, .T. ) ; +#8390 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8391 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -3.799999999999999800 ) ) ; +#8392 = ORIENTED_EDGE ( 'NONE', *, *, #15925, .T. ) ; +#8393 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.499998254703822900, -6.299999999999993600 ) ) ; +#8394 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.3300017452961689900, -6.424999999999999800 ) ) ; +#8395 = CIRCLE ( 'NONE', #3142, 0.1000000000000009100 ) ; +#8396 = SURFACE_STYLE_USAGE ( .BOTH. , #17902 ) ; +#8397 = SURFACE_STYLE_FILL_AREA ( #26927 ) ; +#8398 = LINE ( 'NONE', #13599, #33190 ) ; +#8399 = ORIENTED_EDGE ( 'NONE', *, *, #39091, .T. ) ; +#8400 = FILL_AREA_STYLE_COLOUR ( '', #33402 ) ; +#8401 = FILL_AREA_STYLE_COLOUR ( '', #30670 ) ; +#8402 = LINE ( 'NONE', #17016, #18543 ) ; +#8403 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8404 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8405 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8406 = ADVANCED_FACE ( 'NONE', ( #26962 ), #25417, .T. ) ; +#8407 = EDGE_CURVE ( 'NONE', #6969, #7298, #10370, .T. ) ; +#8408 = DIRECTION ( 'NONE', ( -6.056601140521967000E-031, -1.987721548152419000E-045, -1.000000000000000000 ) ) ; +#8409 = SURFACE_SIDE_STYLE ('',( #40410 ) ) ; +#8410 = EDGE_CURVE ( 'NONE', #18408, #13736, #31473, .T. ) ; +#8411 = AXIS2_PLACEMENT_3D ( 'NONE', #26070, #38905, #9934 ) ; +#8412 = SURFACE_SIDE_STYLE ('',( #282 ) ) ; +#8413 = PRESENTATION_STYLE_ASSIGNMENT (( #38597 ) ) ; +#8414 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35660 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #701, #26806, #30157 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8415 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33244, 'distance_accuracy_value', 'NONE'); +#8416 = ORIENTED_EDGE ( 'NONE', *, *, #1441, .T. ) ; +#8417 = FACE_OUTER_BOUND ( 'NONE', #18501, .T. ) ; +#8418 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#8419 = PLANE ( 'NONE', #3918 ) ; +#8420 = ADVANCED_FACE ( 'NONE', ( #18844 ), #21834, .T. ) ; +#8421 = FILL_AREA_STYLE ('',( #18403 ) ) ; +#8422 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.168404344971012800E-015, 0.0000000000000000000 ) ) ; +#8423 = ORIENTED_EDGE ( 'NONE', *, *, #29664, .F. ) ; +#8424 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#8425 = AXIS2_PLACEMENT_3D ( 'NONE', #7709, #30173, #14236 ) ; +#8426 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8427 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#8428 = EDGE_LOOP ( 'NONE', ( #40242, #13966, #40407, #29102 ) ) ; +#8429 = ORIENTED_EDGE ( 'NONE', *, *, #17169, .T. ) ; +#8430 = ORIENTED_EDGE ( 'NONE', *, *, #20668, .F. ) ; +#8431 = SURFACE_STYLE_FILL_AREA ( #41595 ) ; +#8432 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#8434 = AXIS2_PLACEMENT_3D ( 'NONE', #2245, #14784, #14918 ) ; +#8433 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23751 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #690, #3878, #26494 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8435 = VECTOR ( 'NONE', #1749, 1000.000000000000000 ) ; +#8436 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#8437 = VECTOR ( 'NONE', #2103, 1000.000000000000000 ) ; +#8440 = EDGE_CURVE ( 'NONE', #10135, #25373, #19864, .T. ) ; +#8439 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, -10.30000000000000100, -1.250000000000000000 ) ) ; +#8438 = STYLED_ITEM ( 'NONE', ( #26880 ), #35344 ) ; +#8441 = ORIENTED_EDGE ( 'NONE', *, *, #21976, .T. ) ; +#8442 = SURFACE_STYLE_USAGE ( .BOTH. , #8291 ) ; +#8443 = FACE_OUTER_BOUND ( 'NONE', #22563, .T. ) ; +#8444 = ORIENTED_EDGE ( 'NONE', *, *, #20157, .T. ) ; +#8445 = LINE ( 'NONE', #40768, #14544 ) ; +#8446 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, -0.07499999999999999700, -0.03270148751209846200 ) ) ; +#8447 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.6199999999999847900, -4.599999999999999600 ) ) ; +#8448 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8450 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37286 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1305, #24006, #27384 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8449 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25021 ), #23629 ) ; +#8451 = CIRCLE ( 'NONE', #3447, 0.1000000000000001600 ) ; +#8452 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#8453 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8454 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8455 = CARTESIAN_POINT ( 'NONE', ( -4.170000000000001700, -0.2799999999999974200, -0.2000017452961698200 ) ) ; +#8456 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000007100, -0.8500017452961659000, -5.599999999999999600 ) ) ; +#8457 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8458 = ADVANCED_FACE ( 'NONE', ( #24392 ), #8771, .F. ) ; +#8459 = VERTEX_POINT ( 'NONE', #18571 ) ; +#8460 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -1.049979056049130000 ) ) ; +#8461 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8462 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#8463 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8464 = ORIENTED_EDGE ( 'NONE', *, *, #10651, .F. ) ; +#8465 = SURFACE_STYLE_FILL_AREA ( #32653 ) ; +#8466 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8467 = EDGE_CURVE ( 'NONE', #25894, #4770, #31439, .T. ) ; +#8468 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29506, 'distance_accuracy_value', 'NONE'); +#8469 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -3.410973126920707600E-015, 1.000000000000000000 ) ) ; +#8470 = ORIENTED_EDGE ( 'NONE', *, *, #14266, .F. ) ; +#8471 = VERTEX_POINT ( 'NONE', #38298 ) ; +#8472 = ORIENTED_EDGE ( 'NONE', *, *, #22369, .T. ) ; +#8473 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8474 = FILL_AREA_STYLE_COLOUR ( '', #4817 ) ; +#8475 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#8476 = EDGE_CURVE ( 'NONE', #25807, #6499, #40006, .T. ) ; +#8477 = AXIS2_PLACEMENT_3D ( 'NONE', #41295, #28848, #25360 ) ; +#8478 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8479 = PRESENTATION_STYLE_ASSIGNMENT (( #6309 ) ) ; +#8480 = EDGE_LOOP ( 'NONE', ( #39362, #18657, #18903, #31487 ) ) ; +#8481 = SURFACE_STYLE_FILL_AREA ( #17317 ) ; +#8482 = VERTEX_POINT ( 'NONE', #2479 ) ; +#8483 = VERTEX_POINT ( 'NONE', #8915 ) ; +#8484 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8485 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7123 ), #28794 ) ; +#8486 = ORIENTED_EDGE ( 'NONE', *, *, #10204, .T. ) ; +#8487 = AXIS2_PLACEMENT_3D ( 'NONE', #20049, #3895, #26666 ) ; +#8488 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8489 = SURFACE_SIDE_STYLE ('',( #14823 ) ) ; +#8490 = CIRCLE ( 'NONE', #39303, 0.1000000000000001600 ) ; +#8491 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.07499999999999998300, -1.399999999999999900 ) ) ; +#8492 = PLANE ( 'NONE', #5989 ) ; +#8494 = EDGE_CURVE ( 'NONE', #6894, #25801, #14263, .T. ) ; +#8493 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10442 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34410, #37514, #37794 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8495 = FILL_AREA_STYLE ('',( #21269 ) ) ; +#8496 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8498 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33907, 'distance_accuracy_value', 'NONE'); +#8497 = VECTOR ( 'NONE', #10678, 1000.000000000000000 ) ; +#8499 = PLANE ( 'NONE', #41420 ) ; +#8500 = ORIENTED_EDGE ( 'NONE', *, *, #13875, .F. ) ; +#8501 = VECTOR ( 'NONE', #7911, 1000.000000000000000 ) ; +#8503 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6373 ) ) ; +#8502 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28347 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13837, #10436, #6908 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8504 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21559 ) ) ; +#8505 = ORIENTED_EDGE ( 'NONE', *, *, #20788, .T. ) ; +#8506 = SURFACE_SIDE_STYLE ('',( #1521 ) ) ; +#8507 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8508 = SURFACE_STYLE_FILL_AREA ( #39594 ) ; +#8509 = ADVANCED_FACE ( 'NONE', ( #18335 ), #9050, .T. ) ; +#8510 = CARTESIAN_POINT ( 'NONE', ( 4.454959014219315200, -0.01961921875632917700, -7.500000000000000900 ) ) ; +#8511 = ORIENTED_EDGE ( 'NONE', *, *, #16605, .F. ) ; +#8512 = ORIENTED_EDGE ( 'NONE', *, *, #28346, .F. ) ; +#8513 = PRESENTATION_STYLE_ASSIGNMENT (( #20608 ) ) ; +#8514 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#8515 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8516 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8517 = VECTOR ( 'NONE', #41627, 1000.000000000000000 ) ; +#8518 = SURFACE_STYLE_USAGE ( .BOTH. , #14894 ) ; +#8519 = FACE_OUTER_BOUND ( 'NONE', #32197, .T. ) ; +#8520 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8521 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17772, 'distance_accuracy_value', 'NONE'); +#8522 = CIRCLE ( 'NONE', #31333, 0.04999999999999991300 ) ; +#8523 = ORIENTED_EDGE ( 'NONE', *, *, #31323, .T. ) ; +#8524 = ORIENTED_EDGE ( 'NONE', *, *, #1919, .T. ) ; +#8525 = ORIENTED_EDGE ( 'NONE', *, *, #25108, .F. ) ; +#8526 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#8527 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8528 = FILL_AREA_STYLE ('',( #24533 ) ) ; +#8529 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8530 = ORIENTED_EDGE ( 'NONE', *, *, #7685, .T. ) ; +#8531 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000800, -2.322941965694886000, -1.250000000000000000 ) ) ; +#8532 = LINE ( 'NONE', #6994, #40885 ) ; +#8533 = EDGE_CURVE ( 'NONE', #4700, #6731, #15280, .T. ) ; +#8534 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296169600, -4.099999999999999600 ) ) ; +#8535 = FACE_OUTER_BOUND ( 'NONE', #35002, .T. ) ; +#8536 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8537 = EDGE_CURVE ( 'NONE', #14097, #2886, #12204, .T. ) ; +#8538 = EDGE_CURVE ( 'NONE', #26198, #20486, #32431, .T. ) ; +#8539 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019659000E-017 ) ) ; +#8540 = AXIS2_PLACEMENT_3D ( 'NONE', #20794, #4223, #11268 ) ; +#8541 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8542 = VERTEX_POINT ( 'NONE', #28422 ) ; +#8543 = FACE_OUTER_BOUND ( 'NONE', #3520, .T. ) ; +#8544 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8545 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.480001745296170000, -0.2339555568811697600 ) ) ; +#8546 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#8547 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.499998254703835300, -5.449999999999994000 ) ) ; +#8548 = AXIS2_PLACEMENT_3D ( 'NONE', #35034, #18819, #5948 ) ; +#8549 = ORIENTED_EDGE ( 'NONE', *, *, #4499, .T. ) ; +#8550 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#8551 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24757, 'distance_accuracy_value', 'NONE'); +#8552 = ORIENTED_EDGE ( 'NONE', *, *, #3251, .T. ) ; +#8553 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41055 ) ) ; +#8554 = SURFACE_STYLE_USAGE ( .BOTH. , #24722 ) ; +#8555 = FACE_OUTER_BOUND ( 'NONE', #29205, .T. ) ; +#8556 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8557 = FACE_OUTER_BOUND ( 'NONE', #6917, .T. ) ; +#8559 = EDGE_CURVE ( 'NONE', #532, #28802, #23373, .T. ) ; +#8558 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36744 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27964, #3112, #19088 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8560 = FILL_AREA_STYLE ('',( #5612 ) ) ; +#8561 = ORIENTED_EDGE ( 'NONE', *, *, #4661, .F. ) ; +#8562 = FACE_OUTER_BOUND ( 'NONE', #24720, .T. ) ; +#8563 = ORIENTED_EDGE ( 'NONE', *, *, #28788, .F. ) ; +#8564 = ORIENTED_EDGE ( 'NONE', *, *, #16605, .T. ) ; +#8565 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8567 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24934 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6657, #41820, #10024 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8566 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6124 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10896, #33513, #17150 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8568 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32518 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31440, #12056, #28053 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8569 = SURFACE_STYLE_USAGE ( .BOTH. , #34437 ) ; +#8570 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24949, 'distance_accuracy_value', 'NONE'); +#8571 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14293 ), #38333 ) ; +#8572 = ORIENTED_EDGE ( 'NONE', *, *, #20534, .F. ) ; +#8573 = FACE_OUTER_BOUND ( 'NONE', #10635, .T. ) ; +#8574 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8575 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34558 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34202, #34606, #34754 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8576 = CYLINDRICAL_SURFACE ( 'NONE', #15452, 0.2999999999999999300 ) ; +#8577 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8578 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -0.8400209439508702400 ) ) ; +#8579 = FILL_AREA_STYLE ('',( #31041 ) ) ; +#8580 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#8581 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -6.800000000000000700 ) ) ; +#8582 = PLANE ( 'NONE', #9103 ) ; +#8583 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8584 = ADVANCED_FACE ( 'NONE', ( #2178 ), #25882, .T. ) ; +#8585 = SURFACE_STYLE_USAGE ( .BOTH. , #24749 ) ; +#8586 = ORIENTED_EDGE ( 'NONE', *, *, #23465, .F. ) ; +#8587 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8588 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8589 = SURFACE_STYLE_USAGE ( .BOTH. , #20807 ) ; +#8590 = ORIENTED_EDGE ( 'NONE', *, *, #20415, .T. ) ; +#8591 = ORIENTED_EDGE ( 'NONE', *, *, #32794, .T. ) ; +#8592 = FILL_AREA_STYLE_COLOUR ( '', #37891 ) ; +#8593 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#8594 = EDGE_CURVE ( 'NONE', #39630, #41354, #31970, .T. ) ; +#8596 = CYLINDRICAL_SURFACE ( 'NONE', #5796, 0.3000000000000000400 ) ; +#8595 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8597 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#8598 = VERTEX_POINT ( 'NONE', #13147 ) ; +#8599 = FILL_AREA_STYLE ('',( #14703 ) ) ; +#8600 = PRESENTATION_STYLE_ASSIGNMENT (( #28232 ) ) ; +#8601 = ORIENTED_EDGE ( 'NONE', *, *, #15908, .T. ) ; +#8602 = VERTEX_POINT ( 'NONE', #26015 ) ; +#8603 = EDGE_CURVE ( 'NONE', #12866, #41856, #38988, .T. ) ; +#8604 = AXIS2_PLACEMENT_3D ( 'NONE', #826, #7392, #4148 ) ; +#8605 = PLANE ( 'NONE', #14952 ) ; +#8606 = FILL_AREA_STYLE_COLOUR ( '', #1515 ) ; +#8607 = FILL_AREA_STYLE ('',( #2173 ) ) ; +#8608 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8609 = EDGE_CURVE ( 'NONE', #11802, #40495, #19827, .T. ) ; +#8610 = ORIENTED_EDGE ( 'NONE', *, *, #29778, .T. ) ; +#8611 = SURFACE_STYLE_USAGE ( .BOTH. , #27989 ) ; +#8612 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8052 ) ) ; +#8613 = FILL_AREA_STYLE ('',( #28126 ) ) ; +#8614 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8615 = LINE ( 'NONE', #36965, #37443 ) ; +#8616 = CIRCLE ( 'NONE', #39502, 0.1000000000000001600 ) ; +#8617 = DIRECTION ( 'NONE', ( 0.9961946980917454300, 3.269420623233418300E-015, 0.08715574274766037200 ) ) ; +#8618 = AXIS2_PLACEMENT_3D ( 'NONE', #18223, #20925, #15239 ) ; +#8619 = FACE_BOUND ( 'NONE', #38964, .T. ) ; +#8620 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, 2.322941965694886000, -1.250000000000000000 ) ) ; +#8623 = EDGE_CURVE ( 'NONE', #27080, #4829, #2661, .T. ) ; +#8622 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6474 ) ) ; +#8621 = FILL_AREA_STYLE ('',( #5669 ) ) ; +#8624 = CARTESIAN_POINT ( 'NONE', ( -4.821303021499042900, 0.2800000000000027500, -0.3590461068823618300 ) ) ; +#8625 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8626 = ADVANCED_FACE ( 'NONE', ( #13763 ), #3150, .F. ) ; +#8627 = CARTESIAN_POINT ( 'NONE', ( 4.465000000000003400, -0.01999825470383237400, -7.349248115565993400 ) ) ; +#8628 = LINE ( 'NONE', #35524, #12674 ) ; +#8629 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -1.499998254703825300, -5.449999999999994000 ) ) ; +#8630 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25479, 'distance_accuracy_value', 'NONE'); +#8631 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25967 ), #27573 ) ; +#8632 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3351, 'distance_accuracy_value', 'NONE'); +#8633 = LINE ( 'NONE', #37541, #26869 ) ; +#8634 = VERTEX_POINT ( 'NONE', #38851 ) ; +#8635 = LINE ( 'NONE', #34987, #114 ) ; +#8636 = STYLED_ITEM ( 'NONE', ( #24966 ), #33553 ) ; +#8637 = EDGE_LOOP ( 'NONE', ( #9142, #11759, #25498, #15030 ) ) ; +#8638 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, -0.2999999999999999900, 0.6999999999999999600 ) ) ; +#8639 = ORIENTED_EDGE ( 'NONE', *, *, #30949, .F. ) ; +#8640 = ADVANCED_FACE ( 'NONE', ( #33946 ), #39689, .F. ) ; +#8641 = LINE ( 'NONE', #10505, #120 ) ; +#8642 = CARTESIAN_POINT ( 'NONE', ( -2.573205080756887100, 1.480001745296169600, -1.650000000000000400 ) ) ; +#8643 = VECTOR ( 'NONE', #22894, 1000.000000000000000 ) ; +#8644 = SURFACE_SIDE_STYLE ('',( #41286 ) ) ; +#8645 = ORIENTED_EDGE ( 'NONE', *, *, #2654, .T. ) ; +#8646 = CARTESIAN_POINT ( 'NONE', ( 3.315857794870085100, -0.3498816609189463500, -1.622912009385364000 ) ) ; +#8647 = SURFACE_STYLE_FILL_AREA ( #15180 ) ; +#8648 = EDGE_LOOP ( 'NONE', ( #27455, #7085, #3551, #34805 ) ) ; +#8649 = FILL_AREA_STYLE ('',( #18011 ) ) ; +#8650 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -6.900000000000000400 ) ) ; +#8651 = DIRECTION ( 'NONE', ( 0.08715574274766049700, 2.860372408307929200E-016, -0.9961946980917454300 ) ) ; +#8652 = ORIENTED_EDGE ( 'NONE', *, *, #6295, .T. ) ; +#8653 = LINE ( 'NONE', #30917, #11693 ) ; +#8654 = EDGE_LOOP ( 'NONE', ( #34300, #3166, #6332, #28113 ) ) ; +#8655 = CYLINDRICAL_SURFACE ( 'NONE', #41316, 0.04999999999999969700 ) ; +#8656 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8657 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -2.168404344971009400E-016 ) ) ; +#8658 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.2699999999999847000, -5.199999999999999300 ) ) ; +#8659 = EDGE_CURVE ( 'NONE', #34722, #2872, #19302, .T. ) ; +#8660 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8661 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21399, 'distance_accuracy_value', 'NONE'); +#8662 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8663 = EDGE_CURVE ( 'NONE', #33764, #38462, #1129, .T. ) ; +#8664 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6888 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17891, #27464, #36805 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8665 = ORIENTED_EDGE ( 'NONE', *, *, #18425, .T. ) ; +#8666 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8667 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#8668 = AXIS2_PLACEMENT_3D ( 'NONE', #24872, #21764, #5479 ) ; +#8669 = ADVANCED_FACE ( 'NONE', ( #15240 ), #636, .F. ) ; +#8670 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.445602896647293600E-014 ) ) ; +#8671 = PLANE ( 'NONE', #21095 ) ; +#8672 = ORIENTED_EDGE ( 'NONE', *, *, #25408, .T. ) ; +#8673 = STYLED_ITEM ( 'NONE', ( #33255 ), #13996 ) ; +#8674 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#8675 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#8676 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11504, 'distance_accuracy_value', 'NONE'); +#8677 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8678 = ORIENTED_EDGE ( 'NONE', *, *, #36252, .T. ) ; +#8679 = AXIS2_PLACEMENT_3D ( 'NONE', #36879, #4104, #20519 ) ; +#8680 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35515 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18381, #37558, #27833 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8681 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.4300017452961689100, -5.200000000000000200 ) ) ; +#8682 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8684 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8127 ), #34693 ) ; +#8683 = AXIS2_PLACEMENT_3D ( 'NONE', #9043, #35201, #34644 ) ; +#8685 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8686 = EDGE_CURVE ( 'NONE', #14452, #19588, #26882, .T. ) ; +#8687 = EDGE_LOOP ( 'NONE', ( #11003, #21821, #29423, #12727 ) ) ; +#8688 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#8689 = FILL_AREA_STYLE_COLOUR ( '', #41629 ) ; +#8690 = ORIENTED_EDGE ( 'NONE', *, *, #2402, .T. ) ; +#8691 = PRESENTATION_STYLE_ASSIGNMENT (( #28383 ) ) ; +#8692 = DIRECTION ( 'NONE', ( -1.387778780781409300E-017, 2.367138801244514800E-016, 1.000000000000000000 ) ) ; +#8694 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22282 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26474, #39577, #20420 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8693 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39013 ), #5186 ) ; +#8695 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8696 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998497600, -4.250000000000000000 ) ) ; +#8697 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8698 = VECTOR ( 'NONE', #28201, 1000.000000000000000 ) ; +#8699 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8700 = PLANE ( 'NONE', #40170 ) ; +#8701 = LINE ( 'NONE', #30180, #4172 ) ; +#8702 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1241, 'distance_accuracy_value', 'NONE'); +#8703 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8704 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#8705 = ORIENTED_EDGE ( 'NONE', *, *, #12383, .F. ) ; +#8706 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8707 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34664, 'distance_accuracy_value', 'NONE'); +#8708 = ORIENTED_EDGE ( 'NONE', *, *, #28480, .F. ) ; +#8709 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8710 = VECTOR ( 'NONE', #28021, 1000.000000000000000 ) ; +#8711 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8712 = SURFACE_STYLE_FILL_AREA ( #11100 ) ; +#8713 = ORIENTED_EDGE ( 'NONE', *, *, #27107, .T. ) ; +#8714 = EDGE_CURVE ( 'NONE', #4316, #24153, #28862, .T. ) ; +#8715 = ADVANCED_FACE ( 'NONE', ( #16237 ), #12690, .F. ) ; +#8716 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -4.975000000000000500 ) ) ; +#8717 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8718 = ORIENTED_EDGE ( 'NONE', *, *, #33924, .F. ) ; +#8719 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8720 = EDGE_CURVE ( 'NONE', #6960, #350, #29890, .T. ) ; +#8721 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3842 ), #18790 ) ; +#8722 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8723 = ORIENTED_EDGE ( 'NONE', *, *, #1928, .T. ) ; +#8724 = VECTOR ( 'NONE', #17228, 1000.000000000000000 ) ; +#8725 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, 0.3000000000000001600, -1.250000000000000000 ) ) ; +#8726 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#8727 = EDGE_LOOP ( 'NONE', ( #19291, #7874, #38056, #10417 ) ) ; +#8728 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8729 = STYLED_ITEM ( 'NONE', ( #20549 ), #15179 ) ; +#8730 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.3300017452961679900, -5.175000000000000700 ) ) ; +#8731 = STYLED_ITEM ( 'NONE', ( #1602 ), #19036 ) ; +#8732 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.9396926207856547400, 0.3420201433263653800 ) ) ; +#8734 = LINE ( 'NONE', #11241, #18874 ) ; +#8733 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39863 ), #31212 ) ; +#8737 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32731 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1196, #14015, #26743 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8736 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8735 = AXIS2_PLACEMENT_3D ( 'NONE', #1477, #33787, #17280 ) ; +#8738 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8739 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.966063034915694200, -0.6228541982233617400 ) ) ; +#8740 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8741 = FILL_AREA_STYLE ('',( #34342 ) ) ; +#8742 = EDGE_CURVE ( 'NONE', #18981, #1016, #28874, .T. ) ; +#8743 = LINE ( 'NONE', #34188, #24977 ) ; +#8744 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8745 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.180001745296169700, -4.099999999999999600 ) ) ; +#8746 = FILL_AREA_STYLE ('',( #23752 ) ) ; +#8747 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.6199999999999849000, -5.199999999999999300 ) ) ; +#8748 = ORIENTED_EDGE ( 'NONE', *, *, #34139, .F. ) ; +#8750 = STYLED_ITEM ( 'NONE', ( #34313 ), #1537 ) ; +#8749 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12013 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39980, #37027, #36611 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8751 = ORIENTED_EDGE ( 'NONE', *, *, #37693, .T. ) ; +#8752 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8753 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9256, 'distance_accuracy_value', 'NONE'); +#8754 = SURFACE_STYLE_FILL_AREA ( #31762 ) ; +#8755 = ORIENTED_EDGE ( 'NONE', *, *, #17916, .T. ) ; +#8756 = ORIENTED_EDGE ( 'NONE', *, *, #13622, .T. ) ; +#8757 = DIRECTION ( 'NONE', ( 5.916456789157588500E-031, 1.000000000000000000, -2.367138801244518800E-016 ) ) ; +#8758 = ORIENTED_EDGE ( 'NONE', *, *, #19007, .T. ) ; +#8759 = ORIENTED_EDGE ( 'NONE', *, *, #9825, .T. ) ; +#8760 = FILL_AREA_STYLE ('',( #28141 ) ) ; +#8761 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026900, -4.099999999999999600 ) ) ; +#8762 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#8763 = FACE_OUTER_BOUND ( 'NONE', #33505, .T. ) ; +#8764 = CARTESIAN_POINT ( 'NONE', ( 1.649999999999999900, -1.139998254717355100, -6.299996877890552400 ) ) ; +#8765 = FILL_AREA_STYLE ('',( #28148 ) ) ; +#8766 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 1.480001745296169800, -1.649999999999999900 ) ) ; +#8767 = FILL_AREA_STYLE_COLOUR ( '', #22052 ) ; +#8768 = EDGE_CURVE ( 'NONE', #19680, #6969, #11683, .T. ) ; +#8769 = TOROIDAL_SURFACE ( 'NONE', #33278, 1.350424214906978700, 0.1000000000000002800 ) ; +#8770 = SURFACE_STYLE_FILL_AREA ( #34459 ) ; +#8771 = PLANE ( 'NONE', #29497 ) ; +#8772 = ORIENTED_EDGE ( 'NONE', *, *, #36433, .F. ) ; +#8773 = EDGE_CURVE ( 'NONE', #27746, #6318, #19752, .T. ) ; +#8774 = FILL_AREA_STYLE_COLOUR ( '', #21256 ) ; +#8775 = FILL_AREA_STYLE ('',( #8366 ) ) ; +#8776 = CIRCLE ( 'NONE', #23483, 0.1000000000000002600 ) ; +#8777 = FILL_AREA_STYLE_COLOUR ( '', #30109 ) ; +#8778 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8779 = ADVANCED_FACE ( 'NONE', ( #26675 ), #11988, .F. ) ; +#8780 = ORIENTED_EDGE ( 'NONE', *, *, #12127, .F. ) ; +#8781 = AXIS2_PLACEMENT_3D ( 'NONE', #376, #9507, #32111 ) ; +#8782 = FILL_AREA_STYLE ('',( #5426 ) ) ; +#8783 = PLANE ( 'NONE', #41177 ) ; +#8784 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.3300017452961694400, -5.075000000000000200 ) ) ; +#8785 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8786 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1551 ), #4494 ) ; +#8787 = ORIENTED_EDGE ( 'NONE', *, *, #41353, .T. ) ; +#8789 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#8788 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#8790 = EDGE_LOOP ( 'NONE', ( #23079, #17184, #27872, #23 ) ) ; +#8792 = CARTESIAN_POINT ( 'NONE', ( -4.856063034915696800, 0.2800000000000027500, -0.6228541982233617400 ) ) ; +#8791 = PRESENTATION_STYLE_ASSIGNMENT (( #18853 ) ) ; +#8793 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#8794 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#8795 = LINE ( 'NONE', #39641, #36626 ) ; +#8796 = VECTOR ( 'NONE', #38701, 1000.000000000000000 ) ; +#8798 = EDGE_CURVE ( 'NONE', #24439, #23868, #34980, .T. ) ; +#8797 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8799 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid20', #16484 ) ; +#8800 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8801 = ORIENTED_EDGE ( 'NONE', *, *, #39346, .T. ) ; +#8802 = FACE_OUTER_BOUND ( 'NONE', #32727, .T. ) ; +#8803 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8805 = AXIS2_PLACEMENT_3D ( 'NONE', #19190, #12923, #38771 ) ; +#8804 = STYLED_ITEM ( 'NONE', ( #37780 ), #27347 ) ; +#8806 = FILL_AREA_STYLE_COLOUR ( '', #35199 ) ; +#8807 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 1.485063948690956900E-014, -3.099999999999998800 ) ) ; +#8808 = EDGE_LOOP ( 'NONE', ( #5119, #16687, #35950, #40946 ) ) ; +#8809 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9367 ) ) ; +#8810 = PRESENTATION_STYLE_ASSIGNMENT (( #8194 ) ) ; +#8811 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8812 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#8813 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8814 = VERTEX_POINT ( 'NONE', #40382 ) ; +#8815 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8816 = VERTEX_POINT ( 'NONE', #14423 ) ; +#8817 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169000, -3.214459358809384200 ) ) ; +#8818 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, 2.322941965694886000, -1.250000000000000000 ) ) ; +#8819 = ADVANCED_FACE ( 'NONE', ( #10194 ), #39957, .F. ) ; +#8820 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#8821 = VERTEX_POINT ( 'NONE', #1460 ) ; +#8822 = LINE ( 'NONE', #29462, #37140 ) ; +#8823 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8824 = CARTESIAN_POINT ( 'NONE', ( -3.845113824816692300, 0.6187511952825143200, -4.550303974693532500 ) ) ; +#8825 = SURFACE_SIDE_STYLE ('',( #1520 ) ) ; +#8826 = VECTOR ( 'NONE', #6100, 1000.000000000000000 ) ; +#8827 = CARTESIAN_POINT ( 'NONE', ( 2.995000000000000100, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#8828 = VERTEX_POINT ( 'NONE', #14151 ) ; +#8829 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8830 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20624, 'distance_accuracy_value', 'NONE'); +#8831 = ADVANCED_FACE ( 'NONE', ( #10722 ), #11153, .T. ) ; +#8832 = EDGE_CURVE ( 'NONE', #33459, #38978, #17820, .T. ) ; +#8833 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#8834 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8835 = FACE_OUTER_BOUND ( 'NONE', #26304, .T. ) ; +#8836 = EDGE_CURVE ( 'NONE', #2929, #38950, #11740, .T. ) ; +#8837 = CYLINDRICAL_SURFACE ( 'NONE', #16476, 0.8000000000000003800 ) ; +#8838 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8839 = CLOSED_SHELL ( 'NONE', ( #22832, #19036, #9552, #4844, #13156, #5677 ) ) ; +#8840 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8841 = FACE_OUTER_BOUND ( 'NONE', #20281, .T. ) ; +#8842 = ORIENTED_EDGE ( 'NONE', *, *, #4968, .T. ) ; +#8843 = EDGE_CURVE ( 'NONE', #1954, #26807, #3174, .T. ) ; +#8844 = SURFACE_STYLE_USAGE ( .BOTH. , #2700 ) ; +#8845 = CIRCLE ( 'NONE', #35691, 0.04999999999999969700 ) ; +#8846 = SURFACE_STYLE_FILL_AREA ( #36278 ) ; +#8847 = ORIENTED_EDGE ( 'NONE', *, *, #23223, .F. ) ; +#8848 = FILL_AREA_STYLE ('',( #5633 ) ) ; +#8849 = EDGE_CURVE ( 'NONE', #30424, #19853, #41059, .T. ) ; +#8850 = CYLINDRICAL_SURFACE ( 'NONE', #32885, 0.05000000000000012800 ) ; +#8851 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8852 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8853 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15856 ) ) ; +#8854 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#8855 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8856 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8857 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36045, 'distance_accuracy_value', 'NONE'); +#8858 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41244 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38962, #22879, #16797 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8859 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25553, 'distance_accuracy_value', 'NONE'); +#8861 = EDGE_CURVE ( 'NONE', #28440, #37941, #24926, .T. ) ; +#8860 = STYLED_ITEM ( 'NONE', ( #30782 ), #23874 ) ; +#8862 = SURFACE_STYLE_USAGE ( .BOTH. , #5645 ) ; +#8863 = SURFACE_SIDE_STYLE ('',( #13637 ) ) ; +#8864 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8865 = LINE ( 'NONE', #23726, #28580 ) ; +#8866 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, 0.6207106781186549900, -3.300000000000000300 ) ) ; +#8868 = AXIS2_PLACEMENT_3D ( 'NONE', #2115, #14925, #27926 ) ; +#8867 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37844 ) ) ; +#8869 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15398 ) ) ; +#8870 = ORIENTED_EDGE ( 'NONE', *, *, #4038, .F. ) ; +#8871 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8872 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8107 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3271, #2887, #5962 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8873 = ADVANCED_FACE ( 'NONE', ( #36521 ), #35174, .T. ) ; +#8874 = VERTEX_POINT ( 'NONE', #41388 ) ; +#8875 = ORIENTED_EDGE ( 'NONE', *, *, #19429, .F. ) ; +#8876 = ORIENTED_EDGE ( 'NONE', *, *, #29162, .F. ) ; +#8877 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8878 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8879 = VECTOR ( 'NONE', #21604, 1000.000000000000000 ) ; +#8880 = CARTESIAN_POINT ( 'NONE', ( -2.673205080756886800, 1.480001745296169600, -1.650000000000000800 ) ) ; +#8881 = LINE ( 'NONE', #25945, #26579 ) ; +#8882 = PRESENTATION_STYLE_ASSIGNMENT (( #8083 ) ) ; +#8883 = ORIENTED_EDGE ( 'NONE', *, *, #14825, .F. ) ; +#8884 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.730380239188924300, -0.8400209439508702400 ) ) ; +#8885 = ORIENTED_EDGE ( 'NONE', *, *, #8901, .T. ) ; +#8886 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 0.6800017452961697500, -1.650000000000000400 ) ) ; +#8887 = DIRECTION ( 'NONE', ( -4.336808689942015400E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8888 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.2999999999999999900, -1.400000000000000600 ) ) ; +#8889 = ADVANCED_FACE ( 'NONE', ( #32410 ), #41518, .T. ) ; +#8890 = SURFACE_STYLE_USAGE ( .BOTH. , #24778 ) ; +#8891 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8892 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8893 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38813, 'distance_accuracy_value', 'NONE'); +#8894 = EDGE_CURVE ( 'NONE', #28484, #23693, #18313, .T. ) ; +#8895 = ORIENTED_EDGE ( 'NONE', *, *, #6644, .T. ) ; +#8896 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#8897 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703822500, -3.700000000000000200 ) ) ; +#8898 = SURFACE_STYLE_USAGE ( .BOTH. , #8489 ) ; +#8899 = PLANE ( 'NONE', #39925 ) ; +#8900 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8901 = EDGE_CURVE ( 'NONE', #14064, #37544, #37494, .T. ) ; +#8902 = ORIENTED_EDGE ( 'NONE', *, *, #23310, .F. ) ; +#8903 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36658, 'distance_accuracy_value', 'NONE'); +#8904 = CIRCLE ( 'NONE', #31282, 0.1000000000000000500 ) ; +#8905 = VECTOR ( 'NONE', #13111, 1000.000000000000000 ) ; +#8906 = DIRECTION ( 'NONE', ( -0.0002094395087002862800, 0.0000000000000000000, 0.9999999780675458100 ) ) ; +#8907 = FILL_AREA_STYLE ('',( #28834 ) ) ; +#8908 = STYLED_ITEM ( 'NONE', ( #27420 ), #22502 ) ; +#8909 = EDGE_LOOP ( 'NONE', ( #8332, #19141, #15187, #25216 ) ) ; +#8910 = ORIENTED_EDGE ( 'NONE', *, *, #24877, .F. ) ; +#8911 = ORIENTED_EDGE ( 'NONE', *, *, #21770, .T. ) ; +#8912 = LINE ( 'NONE', #32737, #1935 ) ; +#8913 = PRESENTATION_STYLE_ASSIGNMENT (( #34214 ) ) ; +#8914 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34929 ), #3257 ) ; +#8915 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, 0.3500000000000000300, -1.300000000000000000 ) ) ; +#8916 = LINE ( 'NONE', #11326, #23620 ) ; +#8917 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8918 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8919 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#8920 = EDGE_LOOP ( 'NONE', ( #4889, #8953, #35041, #33092 ) ) ; +#8921 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4111 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30887, #27792, #40613 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8922 = CIRCLE ( 'NONE', #32878, 0.1999999999999996500 ) ; +#8923 = EDGE_LOOP ( 'NONE', ( #11445, #13154, #19800, #2282 ) ) ; +#8924 = ADVANCED_FACE ( 'NONE', ( #23356 ), #22056, .F. ) ; +#8925 = STYLED_ITEM ( 'NONE', ( #11363 ), #17979 ) ; +#8926 = FILL_AREA_STYLE ('',( #41543 ) ) ; +#8928 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19336 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1416, #33314, #30333 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8927 = AXIS2_PLACEMENT_3D ( 'NONE', #39421, #39553, #32787 ) ; +#8929 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.380001745296144800, -5.449999999999994000 ) ) ; +#8930 = SURFACE_SIDE_STYLE ('',( #26199 ) ) ; +#8931 = LINE ( 'NONE', #23712, #26632 ) ; +#8932 = CARTESIAN_POINT ( 'NONE', ( -3.374999999999998700, 0.4300017452961686900, -4.750000000000000000 ) ) ; +#8933 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8935 = EDGE_CURVE ( 'NONE', #3192, #3127, #39500, .T. ) ; +#8934 = STYLED_ITEM ( 'NONE', ( #33401 ), #34175 ) ; +#8936 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#8937 = STYLED_ITEM ( 'NONE', ( #29907 ), #9023 ) ; +#8938 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.275194062716628600E-015, 0.0000000000000000000 ) ) ; +#8939 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6777 ) ) ; +#8940 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8941 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 0.3500000000000000300, -1.300000000000000000 ) ) ; +#8942 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#8943 = FILL_AREA_STYLE ('',( #12194 ) ) ; +#8944 = LINE ( 'NONE', #25783, #31694 ) ; +#8945 = CARTESIAN_POINT ( 'NONE', ( 3.145000000000000000, -0.2999999999999999900, 0.6780706550913999700 ) ) ; +#8946 = SURFACE_STYLE_USAGE ( .BOTH. , #395 ) ; +#8947 = FILL_AREA_STYLE ('',( #41703 ) ) ; +#8948 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.2800017452961687200, -6.249999999999998200 ) ) ; +#8949 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.880000000000130000, -0.5000000000000879300 ) ) ; +#8950 = FACE_OUTER_BOUND ( 'NONE', #2254, .T. ) ; +#8951 = VERTEX_POINT ( 'NONE', #2729 ) ; +#8952 = VERTEX_POINT ( 'NONE', #31638 ) ; +#8953 = ORIENTED_EDGE ( 'NONE', *, *, #5156, .T. ) ; +#8954 = CARTESIAN_POINT ( 'NONE', ( -3.244813086426267200, 0.07499999999999999700, 0.6909930101031527300 ) ) ; +#8955 = VECTOR ( 'NONE', #18665, 1000.000000000000000 ) ; +#8956 = FACE_OUTER_BOUND ( 'NONE', #7034, .T. ) ; +#8957 = VECTOR ( 'NONE', #1171, 1000.000000000000000 ) ; +#8958 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8959 = ORIENTED_EDGE ( 'NONE', *, *, #15309, .F. ) ; +#8960 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, -0.3499999999999999800, -1.680000000000000200 ) ) ; +#8961 = SURFACE_SIDE_STYLE ('',( #36132 ) ) ; +#8962 = ORIENTED_EDGE ( 'NONE', *, *, #14130, .T. ) ; +#8963 = EDGE_CURVE ( 'NONE', #18567, #4156, #20342, .T. ) ; +#8964 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 0.3499999999999999800, -1.249999999999999800 ) ) ; +#8965 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8966 = EDGE_CURVE ( 'NONE', #28990, #32559, #38487, .T. ) ; +#8967 = STYLED_ITEM ( 'NONE', ( #20545 ), #10760 ) ; +#8968 = VECTOR ( 'NONE', #12082, 1000.000000000000000 ) ; +#8969 = VERTEX_POINT ( 'NONE', #25048 ) ; +#8970 = PRESENTATION_STYLE_ASSIGNMENT (( #17713 ) ) ; +#8971 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8972 = AXIS2_PLACEMENT_3D ( 'NONE', #15436, #12011, #21955 ) ; +#8973 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8974 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.4300017452961689100, -4.975000000000000500 ) ) ; +#8975 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8977 = VECTOR ( 'NONE', #9080, 1000.000000000000000 ) ; +#8976 = AXIS2_PLACEMENT_3D ( 'NONE', #35090, #38048, #115 ) ; +#8978 = ORIENTED_EDGE ( 'NONE', *, *, #37016, .T. ) ; +#8979 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31545 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41803, #41661, #41407 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8980 = CARTESIAN_POINT ( 'NONE', ( 2.945000000000000700, 0.5999999999999999800, -1.930000000000000600 ) ) ; +#8981 = ORIENTED_EDGE ( 'NONE', *, *, #37819, .F. ) ; +#8983 = STYLED_ITEM ( 'NONE', ( #1501 ), #5885 ) ; +#8982 = STYLED_ITEM ( 'NONE', ( #39848 ), #30693 ) ; +#8984 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8985 = ORIENTED_EDGE ( 'NONE', *, *, #24408, .F. ) ; +#8986 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7321, 'distance_accuracy_value', 'NONE'); +#8989 = EDGE_CURVE ( 'NONE', #34228, #10135, #28888, .T. ) ; +#8988 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8987 = STYLED_ITEM ( 'NONE', ( #7380 ), #35003 ) ; +#8990 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 2.322941965694886000, 0.3499999999999999800 ) ) ; +#8991 = ORIENTED_EDGE ( 'NONE', *, *, #33515, .T. ) ; +#8992 = ORIENTED_EDGE ( 'NONE', *, *, #8720, .T. ) ; +#8993 = PRESENTATION_STYLE_ASSIGNMENT (( #27417 ) ) ; +#8994 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.180001745296169700, -4.099999999999999600 ) ) ; +#8995 = ORIENTED_EDGE ( 'NONE', *, *, #29455, .F. ) ; +#8997 = AXIS2_PLACEMENT_3D ( 'NONE', #27800, #1989, #5464 ) ; +#8996 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37415 ) ) ; +#8998 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8999 = CIRCLE ( 'NONE', #8242, 0.2999999999999999300 ) ; +#9000 = CYLINDRICAL_SURFACE ( 'NONE', #35687, 0.1000000000000000100 ) ; +#9001 = CIRCLE ( 'NONE', #25653, 0.09999999999987406500 ) ; +#9002 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9003 = VERTEX_POINT ( 'NONE', #16105 ) ; +#9004 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9005 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#9006 = VERTEX_POINT ( 'NONE', #19517 ) ; +#9007 = ORIENTED_EDGE ( 'NONE', *, *, #27869, .T. ) ; +#9008 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000800, -1.050000000000000000 ) ) ; +#9009 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9010 = EDGE_LOOP ( 'NONE', ( #32127, #13724, #18646, #33398 ) ) ; +#9011 = DIRECTION ( 'NONE', ( -6.056601140521967000E-031, -1.987721548152419000E-045, -1.000000000000000000 ) ) ; +#9012 = FILL_AREA_STYLE ('',( #18395 ) ) ; +#9013 = FACE_OUTER_BOUND ( 'NONE', #16875, .T. ) ; +#9014 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9015 = EDGE_CURVE ( 'NONE', #28837, #11480, #15259, .T. ) ; +#9016 = CARTESIAN_POINT ( 'NONE', ( 3.095000000000000600, -0.07499999999999999700, -0.3254101966249999800 ) ) ; +#9017 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9018 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9019 = EDGE_CURVE ( 'NONE', #39681, #9805, #6636, .T. ) ; +#9020 = ORIENTED_EDGE ( 'NONE', *, *, #35415, .T. ) ; +#9021 = SURFACE_STYLE_FILL_AREA ( #37765 ) ; +#9022 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.380001745296178600, -5.000000000000000000 ) ) ; +#9023 = ADVANCED_FACE ( 'NONE', ( #31422 ), #16740, .F. ) ; +#9024 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.3499999999999999800, 0.6999999999999999600 ) ) ; +#9025 = ORIENTED_EDGE ( 'NONE', *, *, #24959, .T. ) ; +#9026 = VERTEX_POINT ( 'NONE', #39092 ) ; +#9027 = AXIS2_PLACEMENT_3D ( 'NONE', #30454, #26959, #30325 ) ; +#9028 = LINE ( 'NONE', #22244, #514 ) ; +#9029 = PRESENTATION_STYLE_ASSIGNMENT (( #37931 ) ) ; +#9030 = VECTOR ( 'NONE', #41762, 1000.000000000000000 ) ; +#9031 = LINE ( 'NONE', #30624, #20202 ) ; +#9032 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31452, 'distance_accuracy_value', 'NONE'); +#9033 = VECTOR ( 'NONE', #16902, 1000.000000000000000 ) ; +#9034 = ORIENTED_EDGE ( 'NONE', *, *, #28985, .T. ) ; +#9035 = CIRCLE ( 'NONE', #8487, 0.09999999999999999200 ) ; +#9036 = ORIENTED_EDGE ( 'NONE', *, *, #24932, .T. ) ; +#9037 = ORIENTED_EDGE ( 'NONE', *, *, #38294, .T. ) ; +#9038 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14763 ) ) ; +#9039 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9040 = SURFACE_STYLE_USAGE ( .BOTH. , #28825 ) ; +#9041 = ADVANCED_FACE ( 'NONE', ( #40476 ), #23013, .F. ) ; +#9042 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9043 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -1.049979056049130000 ) ) ; +#9045 = EDGE_CURVE ( 'NONE', #8816, #31276, #16217, .T. ) ; +#9044 = AXIS2_PLACEMENT_3D ( 'NONE', #27925, #11797, #6018 ) ; +#9046 = ORIENTED_EDGE ( 'NONE', *, *, #21339, .T. ) ; +#9047 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.4300017452961686900, -6.249999999999998200 ) ) ; +#9048 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#9049 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#9050 = PLANE ( 'NONE', #25979 ) ; +#9052 = STYLED_ITEM ( 'NONE', ( #35665 ), #2373 ) ; +#9051 = STYLED_ITEM ( 'NONE', ( #25866 ), #26866 ) ; +#9053 = AXIS2_PLACEMENT_3D ( 'NONE', #22312, #9415, #26 ) ; +#9054 = SURFACE_SIDE_STYLE ('',( #15148 ) ) ; +#9055 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9056 = AXIS2_PLACEMENT_3D ( 'NONE', #25227, #18586, #38452 ) ; +#9057 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#9058 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.293877011362424000E-016, 0.0000000000000000000 ) ) ; +#9059 = CARTESIAN_POINT ( 'NONE', ( -4.570925237316274100, -0.4099999999999989200, -6.861124800398366500 ) ) ; +#9060 = SURFACE_STYLE_USAGE ( .BOTH. , #5845 ) ; +#9061 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9062 = EDGE_LOOP ( 'NONE', ( #26289, #35206, #38585, #16155 ) ) ; +#9063 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000004100, 0.2818014882867045900, -3.099999999999998800 ) ) ; +#9064 = FILL_AREA_STYLE_COLOUR ( '', #25302 ) ; +#9065 = ORIENTED_EDGE ( 'NONE', *, *, #6505, .F. ) ; +#9066 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.080001745296165200, -5.000000000000000000 ) ) ; +#9067 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17672, 'distance_accuracy_value', 'NONE'); +#9068 = ORIENTED_EDGE ( 'NONE', *, *, #12250, .F. ) ; +#9069 = VECTOR ( 'NONE', #27705, 1000.000000000000000 ) ; +#9070 = CARTESIAN_POINT ( 'NONE', ( -3.106956640297644500, -0.5663739415595059300, -1.896196437387030600 ) ) ; +#9071 = FACE_OUTER_BOUND ( 'NONE', #30337, .T. ) ; +#9072 = PRESENTATION_STYLE_ASSIGNMENT (( #12107 ) ) ; +#9073 = SURFACE_STYLE_FILL_AREA ( #29188 ) ; +#9074 = CARTESIAN_POINT ( 'NONE', ( -2.859829086680000000, -0.2000000000000003200, 1.149999999999999900 ) ) ; +#9075 = ORIENTED_EDGE ( 'NONE', *, *, #4536, .F. ) ; +#9076 = ORIENTED_EDGE ( 'NONE', *, *, #10785, .F. ) ; +#9078 = ADVANCED_FACE ( 'NONE', ( #17238 ), #6495, .F. ) ; +#9077 = ORIENTED_EDGE ( 'NONE', *, *, #20149, .T. ) ; +#9079 = LINE ( 'NONE', #7696, #25315 ) ; +#9080 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9081 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9082 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.499998254703833500, -5.049999999999993600 ) ) ; +#9083 = EDGE_CURVE ( 'NONE', #37312, #33744, #19807, .T. ) ; +#9084 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9085 = ORIENTED_EDGE ( 'NONE', *, *, #13761, .T. ) ; +#9086 = ORIENTED_EDGE ( 'NONE', *, *, #10200, .F. ) ; +#9087 = EDGE_CURVE ( 'NONE', #13073, #28419, #102, .T. ) ; +#9088 = VECTOR ( 'NONE', #1417, 1000.000000000000000 ) ; +#9089 = VECTOR ( 'NONE', #13528, 1000.000000000000000 ) ; +#9090 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17398 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23727, #4369, #30641 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9091 = ADVANCED_FACE ( 'NONE', ( #7115 ), #29922, .F. ) ; +#9092 = VECTOR ( 'NONE', #20136, 1000.000000000000000 ) ; +#9093 = VECTOR ( 'NONE', #607, 1000.000000000000000 ) ; +#9094 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.630001745296167500, -4.200000000000000200 ) ) ; +#9095 = DIRECTION ( 'NONE', ( -6.056601140521967000E-031, -1.987721548152419000E-045, -1.000000000000000000 ) ) ; +#9096 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9097 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5604 ) ) ; +#9098 = AXIS2_PLACEMENT_3D ( 'NONE', #22631, #29676, #16823 ) ; +#9099 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -500000.0000000000600, -1.994459358691027100 ) ) ; +#9100 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.380001745296165500, -3.799999999999999800 ) ) ; +#9101 = FILL_AREA_STYLE ('',( #26087 ) ) ; +#9102 = ORIENTED_EDGE ( 'NONE', *, *, #36173, .F. ) ; +#9104 = EDGE_CURVE ( 'NONE', #11920, #22085, #3101, .T. ) ; +#9103 = AXIS2_PLACEMENT_3D ( 'NONE', #15666, #6349, #16097 ) ; +#9105 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9106 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4371, 'distance_accuracy_value', 'NONE'); +#9107 = LINE ( 'NONE', #27960, #12681 ) ; +#9108 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9109 = CIRCLE ( 'NONE', #16737, 0.3600000000000078700 ) ; +#9110 = VERTEX_POINT ( 'NONE', #26985 ) ; +#9111 = LINE ( 'NONE', #37064, #10130 ) ; +#9113 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41598 ) ) ; +#9112 = AXIS2_PLACEMENT_3D ( 'NONE', #16693, #3691, #10023 ) ; +#9114 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9115 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -4.818676322157808200E-016, -1.000000000000000000 ) ) ; +#9116 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26737 ) ) ; +#9117 = SURFACE_STYLE_FILL_AREA ( #16553 ) ; +#9118 = SURFACE_SIDE_STYLE ('',( #13920 ) ) ; +#9119 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8316 ), #24901 ) ; +#9120 = ORIENTED_EDGE ( 'NONE', *, *, #12801, .F. ) ; +#9121 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, 0.07499999999999998300, 0.6780706550913999700 ) ) ; +#9122 = ORIENTED_EDGE ( 'NONE', *, *, #5892, .T. ) ; +#9123 = EDGE_LOOP ( 'NONE', ( #23579, #3773, #23001, #7097 ) ) ; +#9124 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000600, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#9125 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14840 ) ) ; +#9126 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9127 = SURFACE_STYLE_USAGE ( .BOTH. , #28502 ) ; +#9128 = ORIENTED_EDGE ( 'NONE', *, *, #7609, .F. ) ; +#9129 = CARTESIAN_POINT ( 'NONE', ( -4.735797985667151300, 0.2800000000000027500, -0.3279248189596167300 ) ) ; +#9130 = VERTEX_POINT ( 'NONE', #7596 ) ; +#9131 = ADVANCED_FACE ( 'NONE', ( #6133 ), #1162, .F. ) ; +#9132 = VECTOR ( 'NONE', #21588, 1000.000000000000000 ) ; +#9133 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9134 = LINE ( 'NONE', #7050, #27861 ) ; +#9135 = SURFACE_SIDE_STYLE ('',( #8770 ) ) ; +#9136 = DIRECTION ( 'NONE', ( 0.7071067811865368000, -0.7071067811865583400, 4.282663737405208200E-031 ) ) ; +#9137 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9138 = LINE ( 'NONE', #40139, #34947 ) ; +#9139 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9140 = CIRCLE ( 'NONE', #38981, 0.1000000000000009100 ) ; +#9141 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9142 = ORIENTED_EDGE ( 'NONE', *, *, #18505, .F. ) ; +#9143 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9145 = FILL_AREA_STYLE_COLOUR ( '', #26596 ) ; +#9144 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000004700, 0.2800017452961689500, -5.150000000000000400 ) ) ; +#9146 = VECTOR ( 'NONE', #10849, 1000.000000000000000 ) ; +#9147 = EDGE_CURVE ( 'NONE', #13754, #38384, #19884, .T. ) ; +#9148 = ORIENTED_EDGE ( 'NONE', *, *, #40218, .F. ) ; +#9149 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40048 ), #15453 ) ; +#9150 = CARTESIAN_POINT ( 'NONE', ( -0.2500000000000036600, 0.2800017452961686100, -6.750000000000000000 ) ) ; +#9151 = SURFACE_STYLE_USAGE ( .BOTH. , #25320 ) ; +#9152 = EDGE_CURVE ( 'NONE', #14890, #27374, #16705, .T. ) ; +#9153 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165600, -7.200000000000000200 ) ) ; +#9154 = VERTEX_POINT ( 'NONE', #26845 ) ; +#9155 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#9156 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10525 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23339, #13585, #17273 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9157 = DIRECTION ( 'NONE', ( 3.855870243489082900E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9158 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4856 ) ) ; +#9159 = FILL_AREA_STYLE ('',( #12283 ) ) ; +#9162 = EDGE_CURVE ( 'NONE', #14393, #29721, #27320, .T. ) ; +#9161 = AXIS2_PLACEMENT_3D ( 'NONE', #413, #32999, #13352 ) ; +#9160 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.480001745296165600, -1.899999999999999700 ) ) ; +#9163 = SURFACE_STYLE_USAGE ( .BOTH. , #22064 ) ; +#9164 = EDGE_LOOP ( 'NONE', ( #31674, #7622, #25268, #22629 ) ) ; +#9165 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#9166 = ORIENTED_EDGE ( 'NONE', *, *, #31079, .T. ) ; +#9168 = STYLED_ITEM ( 'NONE', ( #24535 ), #4162 ) ; +#9167 = AXIS2_PLACEMENT_3D ( 'NONE', #1363, #23927, #36919 ) ; +#9169 = AXIS2_PLACEMENT_3D ( 'NONE', #33846, #37080, #36806 ) ; +#9170 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37360 ), #12714 ) ; +#9172 = STYLED_ITEM ( 'NONE', ( #3193 ), #8458 ) ; +#9171 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#9173 = CARTESIAN_POINT ( 'NONE', ( 2.149999999999999900, -1.499998254703822900, -6.299999999999993600 ) ) ; +#9174 = CIRCLE ( 'NONE', #40721, 0.09999999999999999200 ) ; +#9175 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#9176 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40812, 'distance_accuracy_value', 'NONE'); +#9177 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -9.035070666963931600E-017 ) ) ; +#9178 = VERTEX_POINT ( 'NONE', #3924 ) ; +#9179 = LINE ( 'NONE', #7031, #9678 ) ; +#9180 = SURFACE_STYLE_USAGE ( .BOTH. , #2623 ) ; +#9181 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9182 = ORIENTED_EDGE ( 'NONE', *, *, #39732, .F. ) ; +#9183 = SURFACE_SIDE_STYLE ('',( #26268 ) ) ; +#9184 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9185 = LINE ( 'NONE', #22866, #14301 ) ; +#9186 = FILL_AREA_STYLE ('',( #41417 ) ) ; +#9187 = SURFACE_SIDE_STYLE ('',( #19960 ) ) ; +#9188 = CARTESIAN_POINT ( 'NONE', ( 9.035018104045870900E-016, -10.30000000000000100, -1.249999999999997800 ) ) ; +#9189 = ORIENTED_EDGE ( 'NONE', *, *, #30285, .F. ) ; +#9190 = LINE ( 'NONE', #37171, #31522 ) ; +#9191 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#9192 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9193 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9194 = ORIENTED_EDGE ( 'NONE', *, *, #36433, .T. ) ; +#9195 = CARTESIAN_POINT ( 'NONE', ( -2.859829086680000000, 8.593182742395999400, 1.149999999999999900 ) ) ; +#9196 = PRESENTATION_STYLE_ASSIGNMENT (( #34295 ) ) ; +#9197 = CIRCLE ( 'NONE', #26669, 0.3600000000000078700 ) ; +#9198 = VERTEX_POINT ( 'NONE', #30202 ) ; +#9199 = EDGE_CURVE ( 'NONE', #9154, #25434, #23798, .T. ) ; +#9200 = SURFACE_STYLE_FILL_AREA ( #26546 ) ; +#9201 = LINE ( 'NONE', #3355, #6710 ) ; +#9202 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, -0.5999999999999999800, -1.930000000000000600 ) ) ; +#9203 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9204 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#9205 = EDGE_CURVE ( 'NONE', #20124, #3342, #15215, .T. ) ; +#9206 = CYLINDRICAL_SURFACE ( 'NONE', #30728, 0.2000000000000000900 ) ; +#9207 = AXIS2_PLACEMENT_3D ( 'NONE', #32091, #9488, #25493 ) ; +#9208 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.08000174529616772800, -7.150000000000001200 ) ) ; +#9209 = AXIS2_PLACEMENT_3D ( 'NONE', #21621, #2271, #31035 ) ; +#9210 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9211 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.3699999999999847900, -5.200000000000000200 ) ) ; +#9212 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39659, 'distance_accuracy_value', 'NONE'); +#9213 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38735 ) ) ; +#9214 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9215 = VERTEX_POINT ( 'NONE', #10418 ) ; +#9216 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -5.475000000000000500 ) ) ; +#9217 = FACE_OUTER_BOUND ( 'NONE', #5453, .T. ) ; +#9218 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8498 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33907, #20958, #8453 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9219 = AXIS2_PLACEMENT_3D ( 'NONE', #1545, #27484, #24261 ) ; +#9220 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28850, 'distance_accuracy_value', 'NONE'); +#9221 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.139998254717364200, -5.049996877890552400 ) ) ; +#9222 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9223 = ORIENTED_EDGE ( 'NONE', *, *, #14009, .F. ) ; +#9225 = AXIS2_PLACEMENT_3D ( 'NONE', #21959, #25608, #15976 ) ; +#9224 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17385 ), #40358 ) ; +#9226 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9227 = ORIENTED_EDGE ( 'NONE', *, *, #21858, .T. ) ; +#9228 = VECTOR ( 'NONE', #40283, 1000.000000000000000 ) ; +#9230 = EDGE_CURVE ( 'NONE', #5272, #24480, #580, .T. ) ; +#9229 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6294 ) ) ; +#9231 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9232 = FACE_OUTER_BOUND ( 'NONE', #27309, .T. ) ; +#9233 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#9234 = EDGE_LOOP ( 'NONE', ( #20151, #26997, #10253, #26582 ) ) ; +#9235 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9236 = ADVANCED_FACE ( 'NONE', ( #39427 ), #10235, .T. ) ; +#9237 = ORIENTED_EDGE ( 'NONE', *, *, #881, .T. ) ; +#9238 = ORIENTED_EDGE ( 'NONE', *, *, #22080, .F. ) ; +#9239 = VERTEX_POINT ( 'NONE', #29743 ) ; +#9240 = PRESENTATION_STYLE_ASSIGNMENT (( #33919 ) ) ; +#9241 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9243 = STYLED_ITEM ( 'NONE', ( #26531 ), #558 ) ; +#9242 = STYLED_ITEM ( 'NONE', ( #25163 ), #25168 ) ; +#9244 = CARTESIAN_POINT ( 'NONE', ( 2.995000000000000100, 0.3500000000000000300, -1.300000000000000300 ) ) ; +#9245 = CIRCLE ( 'NONE', #33580, 1.200001745296169300 ) ; +#9246 = VERTEX_POINT ( 'NONE', #6986 ) ; +#9247 = SURFACE_STYLE_USAGE ( .BOTH. , #18486 ) ; +#9248 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #38770, #32000, #38624, #280 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#9249 = VECTOR ( 'NONE', #15967, 1000.000000000000000 ) ; +#9250 = ADVANCED_FACE ( 'NONE', ( #24289 ), #36261, .F. ) ; +#9252 = PRESENTATION_STYLE_ASSIGNMENT (( #8215 ) ) ; +#9251 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9253 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9254 = LINE ( 'NONE', #12143, #19930 ) ; +#9255 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.480001745296169800, -1.149999999999999900 ) ) ; +#9256 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9257 = LINE ( 'NONE', #4058, #37569 ) ; +#9258 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9259 = CARTESIAN_POINT ( 'NONE', ( -4.920000000000007900, -0.01999825470386316600, -6.526326723416069300 ) ) ; +#9260 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -5.475000000000000500 ) ) ; +#9261 = EDGE_CURVE ( 'NONE', #17177, #18383, #36113, .T. ) ; +#9262 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9263 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9264 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9265 = EDGE_CURVE ( 'NONE', #37478, #11615, #30830, .T. ) ; +#9266 = STYLED_ITEM ( 'NONE', ( #21514 ), #10983 ) ; +#9267 = VECTOR ( 'NONE', #13472, 1000.000000000000000 ) ; +#9268 = SURFACE_STYLE_USAGE ( .BOTH. , #35434 ) ; +#9269 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9270 = ORIENTED_EDGE ( 'NONE', *, *, #27308, .F. ) ; +#9271 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#9272 = CARTESIAN_POINT ( 'NONE', ( 4.750000000000003600, -0.4099999999999990900, -6.861124800398366500 ) ) ; +#9273 = ORIENTED_EDGE ( 'NONE', *, *, #41280, .F. ) ; +#9275 = ORIENTED_EDGE ( 'NONE', *, *, #22619, .F. ) ; +#9274 = PRESENTATION_STYLE_ASSIGNMENT (( #34423 ) ) ; +#9276 = ORIENTED_EDGE ( 'NONE', *, *, #22334, .T. ) ; +#9277 = PRESENTATION_STYLE_ASSIGNMENT (( #5992 ) ) ; +#9278 = FILL_AREA_STYLE_COLOUR ( '', #36639 ) ; +#9279 = LINE ( 'NONE', #33727, #35087 ) ; +#9280 = SURFACE_STYLE_FILL_AREA ( #26154 ) ; +#9281 = SURFACE_STYLE_USAGE ( .BOTH. , #6073 ) ; +#9282 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.499998254703824400, -6.699999999999994000 ) ) ; +#9283 = FACE_OUTER_BOUND ( 'NONE', #15477, .T. ) ; +#9284 = PRESENTATION_STYLE_ASSIGNMENT (( #14037 ) ) ; +#9285 = SURFACE_SIDE_STYLE ('',( #35570 ) ) ; +#9286 = ADVANCED_FACE ( 'NONE', ( #10588 ), #32701, .F. ) ; +#9287 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26078 ), #10665 ) ; +#9288 = SURFACE_STYLE_USAGE ( .BOTH. , #5933 ) ; +#9289 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14942 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35224, #22375, #21846 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9291 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7135 ), #2064 ) ; +#9290 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23926 ), #20177 ) ; +#9292 = PRESENTATION_STYLE_ASSIGNMENT (( #12218 ) ) ; +#9293 = FACE_OUTER_BOUND ( 'NONE', #269, .T. ) ; +#9294 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9295 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#9296 = ORIENTED_EDGE ( 'NONE', *, *, #4149, .F. ) ; +#9297 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.480001745296170200, -4.099999999999999600 ) ) ; +#9299 = EDGE_CURVE ( 'NONE', #7164, #37626, #21263, .T. ) ; +#9298 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #711 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33723, #4759, #20633 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9300 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -4.099999999999999600 ) ) ; +#9301 = FILL_AREA_STYLE ('',( #15545 ) ) ; +#9302 = CYLINDRICAL_SURFACE ( 'NONE', #21783, 0.1000000000000002600 ) ; +#9303 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9304 = ADVANCED_FACE ( 'NONE', ( #29317 ), #24278, .T. ) ; +#9306 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37565 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19365, #35451, #32034 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9305 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41527 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32622, #38263, #12276 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9307 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9308 = ORIENTED_EDGE ( 'NONE', *, *, #14799, .F. ) ; +#9309 = STYLED_ITEM ( 'NONE', ( #5836 ), #39416 ) ; +#9310 = DIRECTION ( 'NONE', ( 3.281909278875040000E-015, 1.000000000000000000, -3.738809578667646900E-045 ) ) ; +#9311 = FILL_AREA_STYLE_COLOUR ( '', #16927 ) ; +#9312 = ORIENTED_EDGE ( 'NONE', *, *, #25592, .F. ) ; +#9313 = FACE_OUTER_BOUND ( 'NONE', #12257, .T. ) ; +#9314 = SURFACE_STYLE_FILL_AREA ( #35748 ) ; +#9315 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#9316 = FACE_OUTER_BOUND ( 'NONE', #7108, .T. ) ; +#9317 = ORIENTED_EDGE ( 'NONE', *, *, #12801, .T. ) ; +#9319 = VECTOR ( 'NONE', #33381, 1000.000000000000000 ) ; +#9318 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#9320 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9321 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9322 = ORIENTED_EDGE ( 'NONE', *, *, #20972, .F. ) ; +#9323 = CIRCLE ( 'NONE', #34993, 0.1499999999998701800 ) ; +#9324 = CARTESIAN_POINT ( 'NONE', ( -3.429999999999999700, -1.499998254703818900, -6.699999999999994000 ) ) ; +#9325 = CARTESIAN_POINT ( 'NONE', ( -3.062181641390000000, -0.2999999999999999900, 1.149999999999999900 ) ) ; +#9326 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13066, 'distance_accuracy_value', 'NONE'); +#9327 = ORIENTED_EDGE ( 'NONE', *, *, #19161, .F. ) ; +#9328 = FILL_AREA_STYLE_COLOUR ( '', #14279 ) ; +#9329 = SURFACE_SIDE_STYLE ('',( #32605 ) ) ; +#9330 = EDGE_CURVE ( 'NONE', #32286, #21167, #41442, .T. ) ; +#9331 = DIRECTION ( 'NONE', ( 9.268445570935432200E-016, -1.004886882357184900E-031, 1.000000000000000000 ) ) ; +#9332 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#9333 = VERTEX_POINT ( 'NONE', #40160 ) ; +#9334 = EDGE_CURVE ( 'NONE', #13605, #15710, #12122, .T. ) ; +#9335 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.280001745296170300, -4.400000000000001200 ) ) ; +#9336 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -6.900000000000000400 ) ) ; +#9337 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000005700, -0.2999999999999853300, -2.095470210943120000 ) ) ; +#9338 = ADVANCED_FACE ( 'NONE', ( #9580 ), #26646, .F. ) ; +#9339 = LINE ( 'NONE', #1046, #31083 ) ; +#9340 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13692 ), #39668 ) ; +#9341 = FILL_AREA_STYLE ('',( #12184 ) ) ; +#9342 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165600, -4.675000000000000700 ) ) ; +#9343 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9344 = ORIENTED_EDGE ( 'NONE', *, *, #35792, .T. ) ; +#9345 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9346 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21731 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #899, #39235, #4082 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9347 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, 0.7071067811865483500 ) ) ; +#9348 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19507 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40290, #27453, #8918 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9349 = LINE ( 'NONE', #20473, #28104 ) ; +#9350 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.8500017452961657900, -4.875000000000000900 ) ) ; +#9351 = CARTESIAN_POINT ( 'NONE', ( 3.095000000000000600, 0.07499999999999999700, -0.3254101966249999800 ) ) ; +#9352 = LINE ( 'NONE', #27871, #16431 ) ; +#9355 = EDGE_CURVE ( 'NONE', #18383, #24056, #2586, .T. ) ; +#9354 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9353 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24565 ) ) ; +#9356 = CIRCLE ( 'NONE', #19200, 1.350424214906980100 ) ; +#9357 = VERTEX_POINT ( 'NONE', #29883 ) ; +#9358 = ORIENTED_EDGE ( 'NONE', *, *, #12494, .F. ) ; +#9359 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000008300, -0.8500017452961653500, -5.575000000000001100 ) ) ; +#9360 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18713, 'distance_accuracy_value', 'NONE'); +#9361 = ORIENTED_EDGE ( 'NONE', *, *, #26923, .F. ) ; +#9362 = PRESENTATION_STYLE_ASSIGNMENT (( #11532 ) ) ; +#9364 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19232 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37890, #24814, #37759 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9363 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #221 ), #17514 ) ; +#9365 = LINE ( 'NONE', #4905, #36708 ) ; +#9366 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -4.099999999999999600 ) ) ; +#9368 = VECTOR ( 'NONE', #35530, 1000.000000000000000 ) ; +#9367 = STYLED_ITEM ( 'NONE', ( #24884 ), #40209 ) ; +#9369 = ORIENTED_EDGE ( 'NONE', *, *, #14956, .F. ) ; +#9370 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5926 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8556, #24854, #18760 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9371 = CYLINDRICAL_SURFACE ( 'NONE', #7439, 0.1000000000000000100 ) ; +#9372 = EDGE_LOOP ( 'NONE', ( #39967, #39861, #8572, #25651, #30910, #4479 ) ) ; +#9373 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3137 ) ) ; +#9374 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.6199999999999850100, -4.599999999999999600 ) ) ; +#9375 = ORIENTED_EDGE ( 'NONE', *, *, #10039, .F. ) ; +#9376 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 1.485063948690956900E-014, -2.095470210943120000 ) ) ; +#9377 = LINE ( 'NONE', #29451, #13432 ) ; +#9378 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9379 = ORIENTED_EDGE ( 'NONE', *, *, #41686, .T. ) ; +#9380 = DIRECTION ( 'NONE', ( -4.336808689942015400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9381 = LINE ( 'NONE', #28033, #10404 ) ; +#9382 = SURFACE_SIDE_STYLE ('',( #41714 ) ) ; +#9383 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6992, 'distance_accuracy_value', 'NONE'); +#9384 = SURFACE_STYLE_USAGE ( .BOTH. , #6570 ) ; +#9385 = VECTOR ( 'NONE', #36354, 1000.000000000000000 ) ; +#9386 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9387 = PLANE ( 'NONE', #4998 ) ; +#9388 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#9389 = SURFACE_SIDE_STYLE ('',( #37071 ) ) ; +#9390 = EDGE_CURVE ( 'NONE', #692, #31436, #34894, .T. ) ; +#9391 = EDGE_LOOP ( 'NONE', ( #34553, #24144, #7374, #15951 ) ) ; +#9392 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.499998254703824400, -6.299999999999993600 ) ) ; +#9393 = EDGE_CURVE ( 'NONE', #4344, #36905, #26305, .T. ) ; +#9394 = FILL_AREA_STYLE_COLOUR ( '', #24578 ) ; +#9395 = VERTEX_POINT ( 'NONE', #4459 ) ; +#9396 = ORIENTED_EDGE ( 'NONE', *, *, #31476, .T. ) ; +#9397 = ORIENTED_EDGE ( 'NONE', *, *, #4412, .T. ) ; +#9398 = AXIS2_PLACEMENT_3D ( 'NONE', #33259, #35961, #29717 ) ; +#9399 = LINE ( 'NONE', #3015, #41211 ) ; +#9400 = SURFACE_SIDE_STYLE ('',( #16170 ) ) ; +#9401 = EDGE_CURVE ( 'NONE', #12406, #32404, #17727, .T. ) ; +#9402 = PRESENTATION_STYLE_ASSIGNMENT (( #4289 ) ) ; +#9403 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9404 = ORIENTED_EDGE ( 'NONE', *, *, #39662, .F. ) ; +#9405 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#9406 = ORIENTED_EDGE ( 'NONE', *, *, #28105, .F. ) ; +#9407 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27383 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31271, #27894, #30851 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9408 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, -0.2800000000000026400, 0.0000000000000000000 ) ) ; +#9409 = STYLED_ITEM ( 'NONE', ( #41566 ), #12644 ) ; +#9410 = LINE ( 'NONE', #453, #36247 ) ; +#9411 = FILL_AREA_STYLE ('',( #22 ) ) ; +#9412 = FACE_OUTER_BOUND ( 'NONE', #6631, .T. ) ; +#9414 = EDGE_CURVE ( 'NONE', #3661, #25924, #9079, .T. ) ; +#9413 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9985 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16658, #29349, #39226 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9415 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#9416 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.730424212713734600, -1.049979056049130000 ) ) ; +#9417 = SURFACE_STYLE_FILL_AREA ( #34487 ) ; +#9418 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.3699999999999849000, -5.200000000000000200 ) ) ; +#9419 = ORIENTED_EDGE ( 'NONE', *, *, #19602, .T. ) ; +#9420 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.499998254703824400, -6.699999999999994000 ) ) ; +#9421 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.2300017452961680700, -6.325000000000000200 ) ) ; +#9423 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21924 ), #5117 ) ; +#9422 = AXIS2_PLACEMENT_3D ( 'NONE', #34694, #8685, #18749 ) ; +#9424 = AXIS2_PLACEMENT_3D ( 'NONE', #34019, #30635, #17936 ) ; +#9425 = PRESENTATION_STYLE_ASSIGNMENT (( #37497 ) ) ; +#9426 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28335, 'distance_accuracy_value', 'NONE'); +#9427 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24301 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37602, #25063, #21949 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9428 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9429 = VECTOR ( 'NONE', #36089, 1000.000000000000000 ) ; +#9430 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9431 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9432 = EDGE_LOOP ( 'NONE', ( #38362, #20331, #38538, #23972 ) ) ; +#9433 = FILL_AREA_STYLE_COLOUR ( '', #31714 ) ; +#9434 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11252 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38616, #6563, #12633 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9435 = DIRECTION ( 'NONE', ( -7.744301232039317900E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9436 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27991, 'distance_accuracy_value', 'NONE'); +#9437 = LINE ( 'NONE', #35028, #18565 ) ; +#9438 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9439 = ORIENTED_EDGE ( 'NONE', *, *, #22360, .T. ) ; +#9440 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9441 = ORIENTED_EDGE ( 'NONE', *, *, #26599, .F. ) ; +#9442 = CIRCLE ( 'NONE', #11835, 0.8000000000000003800 ) ; +#9443 = EDGE_LOOP ( 'NONE', ( #31018, #23492, #35644, #33884 ) ) ; +#9444 = LINE ( 'NONE', #32560, #34725 ) ; +#9445 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9446 = LINE ( 'NONE', #10191, #28679 ) ; +#9447 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9448 = SURFACE_STYLE_FILL_AREA ( #14435 ) ; +#9449 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9450 = ORIENTED_EDGE ( 'NONE', *, *, #28110, .T. ) ; +#9451 = CIRCLE ( 'NONE', #34252, 1.499999999999868100 ) ; +#9452 = ORIENTED_EDGE ( 'NONE', *, *, #9199, .T. ) ; +#9453 = CIRCLE ( 'NONE', #14287, 0.2000000000000000900 ) ; +#9454 = ORIENTED_EDGE ( 'NONE', *, *, #10774, .T. ) ; +#9455 = VECTOR ( 'NONE', #27568, 1000.000000000000000 ) ; +#9456 = EDGE_CURVE ( 'NONE', #30601, #41672, #5545, .T. ) ; +#9457 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.2339555568811695900 ) ) ; +#9458 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#9459 = SURFACE_STYLE_FILL_AREA ( #11194 ) ; +#9460 = ADVANCED_FACE ( 'NONE', ( #13607 ), #27076, .F. ) ; +#9461 = DIRECTION ( 'NONE', ( 0.3746065948736244700, 0.0000000000000000000, -0.9271838539778333200 ) ) ; +#9462 = SURFACE_SIDE_STYLE ('',( #35398 ) ) ; +#9463 = EDGE_CURVE ( 'NONE', #7722, #35784, #29276, .T. ) ; +#9464 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41857 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5999, #2914, #6135 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9465 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000013700, -1.949998254703823700, -3.632287565553227600 ) ) ; +#9466 = SURFACE_SIDE_STYLE ('',( #17963 ) ) ; +#9467 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41350 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9636, #32241, #12877 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9468 = ORIENTED_EDGE ( 'NONE', *, *, #19530, .F. ) ; +#9469 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3396 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30108, #7070, #10183 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9470 = EDGE_LOOP ( 'NONE', ( #20079, #5345, #38943, #723 ) ) ; +#9471 = DIRECTION ( 'NONE', ( -2.891205793294677000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9472 = SURFACE_SIDE_STYLE ('',( #29551 ) ) ; +#9473 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9474 = AXIS2_PLACEMENT_3D ( 'NONE', #23701, #10821, #7584 ) ; +#9475 = PRESENTATION_STYLE_ASSIGNMENT (( #3864 ) ) ; +#9476 = FILL_AREA_STYLE ('',( #34793 ) ) ; +#9477 = VERTEX_POINT ( 'NONE', #27755 ) ; +#9478 = ORIENTED_EDGE ( 'NONE', *, *, #6214, .F. ) ; +#9479 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#9480 = ORIENTED_EDGE ( 'NONE', *, *, #39561, .F. ) ; +#9481 = CIRCLE ( 'NONE', #10928, 0.2999999999999999300 ) ; +#9483 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29914 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5693, #24655, #18151 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9482 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37749 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22219, #28829, #28284 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9484 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9485 = SURFACE_SIDE_STYLE ('',( #8465 ) ) ; +#9486 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#9487 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.499998254703832000, -5.049999999999993600 ) ) ; +#9488 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#9490 = EDGE_CURVE ( 'NONE', #6697, #6202, #21756, .T. ) ; +#9489 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3570 ), #7881 ) ; +#9491 = EDGE_LOOP ( 'NONE', ( #7493, #24137, #6795, #35704 ) ) ; +#9492 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9493 = ORIENTED_EDGE ( 'NONE', *, *, #35935, .F. ) ; +#9494 = VERTEX_POINT ( 'NONE', #24237 ) ; +#9495 = VECTOR ( 'NONE', #11898, 1000.000000000000000 ) ; +#9497 = STYLED_ITEM ( 'NONE', ( #10652 ), #9131 ) ; +#9496 = SURFACE_STYLE_USAGE ( .BOTH. , #32520 ) ; +#9498 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#9500 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29225 ) ) ; +#9499 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4376 ), #26867 ) ; +#9501 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9502 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9503 = VERTEX_POINT ( 'NONE', #27611 ) ; +#9504 = FACE_OUTER_BOUND ( 'NONE', #19543, .T. ) ; +#9505 = ADVANCED_FACE ( 'NONE', ( #25782 ), #17472, .F. ) ; +#9506 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9695, 'distance_accuracy_value', 'NONE'); +#9507 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9508 = VERTEX_POINT ( 'NONE', #37357 ) ; +#9509 = LINE ( 'NONE', #36890, #32786 ) ; +#9510 = SURFACE_STYLE_USAGE ( .BOTH. , #38054 ) ; +#9511 = ADVANCED_FACE ( 'NONE', ( #1055 ), #32320, .T. ) ; +#9512 = ORIENTED_EDGE ( 'NONE', *, *, #35715, .T. ) ; +#9513 = SURFACE_STYLE_FILL_AREA ( #14759 ) ; +#9514 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17110, 'distance_accuracy_value', 'NONE'); +#9515 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#9516 = VECTOR ( 'NONE', #13912, 1000.000000000000000 ) ; +#9517 = EDGE_CURVE ( 'NONE', #39127, #15485, #32809, .T. ) ; +#9518 = ORIENTED_EDGE ( 'NONE', *, *, #12989, .T. ) ; +#9519 = PRESENTATION_STYLE_ASSIGNMENT (( #23900 ) ) ; +#9520 = ORIENTED_EDGE ( 'NONE', *, *, #24751, .T. ) ; +#9521 = SURFACE_STYLE_FILL_AREA ( #7554 ) ; +#9522 = VECTOR ( 'NONE', #2644, 999.9999999999998900 ) ; +#9523 = CARTESIAN_POINT ( 'NONE', ( 3.191446609406727800, -0.6207106781186544400, -3.300000000000000700 ) ) ; +#9524 = PRESENTATION_STYLE_ASSIGNMENT (( #35107 ) ) ; +#9525 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.380001745296130600, -6.031671842700004200 ) ) ; +#9526 = TOROIDAL_SURFACE ( 'NONE', #9548, 1.350424214906979400, 0.1000000000000002800 ) ; +#9527 = EDGE_CURVE ( 'NONE', #32468, #21944, #34851, .T. ) ; +#9528 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #372 ), #8165 ) ; +#9529 = VECTOR ( 'NONE', #1568, 1000.000000000000000 ) ; +#9530 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.799998254703820700, -6.800000000000001600 ) ) ; +#9531 = CARTESIAN_POINT ( 'NONE', ( 3.315809924354955500, 0.3499999999999811000, -1.680000000000000400 ) ) ; +#9532 = EDGE_LOOP ( 'NONE', ( #15123, #20098, #10326, #34954 ) ) ; +#9533 = ORIENTED_EDGE ( 'NONE', *, *, #10577, .T. ) ; +#9534 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, 2.322941965694886000, -1.250000000000000000 ) ) ; +#9535 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #39361, #16780, #3514, #22725 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#9536 = FILL_AREA_STYLE_COLOUR ( '', #37963 ) ; +#9537 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, -1.000000000000000000, 3.516331370223256700E-016 ) ) ; +#9538 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9539 = ORIENTED_EDGE ( 'NONE', *, *, #22674, .F. ) ; +#9540 = AXIS2_PLACEMENT_3D ( 'NONE', #22613, #67, #9458 ) ; +#9541 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9542 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11813 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29505, #32613, #35728 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9543 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#9545 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6829 ) ) ; +#9544 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38502 ), #26919 ) ; +#9546 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#9547 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9550 = EDGE_CURVE ( 'NONE', #29117, #10138, #22733, .T. ) ; +#9549 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9548 = AXIS2_PLACEMENT_3D ( 'NONE', #9008, #18795, #31895 ) ; +#9551 = SURFACE_STYLE_USAGE ( .BOTH. , #3348 ) ; +#9552 = ADVANCED_FACE ( 'NONE', ( #23749 ), #1803, .F. ) ; +#9553 = LINE ( 'NONE', #29826, #4014 ) ; +#9554 = DIRECTION ( 'NONE', ( 9.035070666963930400E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9555 = PLANE ( 'NONE', #14883 ) ; +#9557 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5239 ) ) ; +#9556 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17457 ) ) ; +#9558 = VECTOR ( 'NONE', #11212, 1000.000000000000000 ) ; +#9559 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9560 = VERTEX_POINT ( 'NONE', #4872 ) ; +#9561 = PLANE ( 'NONE', #38331 ) ; +#9562 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9563 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.080001745296136600, -6.850000000000000500 ) ) ; +#9564 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, -0.2800000000000026400, -0.2339555568811697600 ) ) ; +#9565 = ORIENTED_EDGE ( 'NONE', *, *, #33928, .F. ) ; +#9566 = ORIENTED_EDGE ( 'NONE', *, *, #8836, .F. ) ; +#9567 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9568 = PRESENTATION_STYLE_ASSIGNMENT (( #20324 ) ) ; +#9569 = LINE ( 'NONE', #41678, #23736 ) ; +#9570 = VECTOR ( 'NONE', #21600, 1000.000000000000000 ) ; +#9571 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9572 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid40', #20280 ) ; +#9573 = FACE_OUTER_BOUND ( 'NONE', #19833, .T. ) ; +#9574 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#9575 = ORIENTED_EDGE ( 'NONE', *, *, #12250, .T. ) ; +#9576 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.8500017452961652300, -5.575000000000001100 ) ) ; +#9577 = VECTOR ( 'NONE', #38512, 1000.000000000000000 ) ; +#9578 = ORIENTED_EDGE ( 'NONE', *, *, #5997, .F. ) ; +#9579 = ORIENTED_EDGE ( 'NONE', *, *, #276, .F. ) ; +#9580 = FACE_OUTER_BOUND ( 'NONE', #36190, .T. ) ; +#9581 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.837630800822890800E-016 ) ) ; +#9582 = ORIENTED_EDGE ( 'NONE', *, *, #35299, .T. ) ; +#9583 = EDGE_CURVE ( 'NONE', #39676, #31629, #6506, .T. ) ; +#9584 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9585 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#9586 = CARTESIAN_POINT ( 'NONE', ( -3.429999999999999700, -1.139998254717349300, -6.299996877890552400 ) ) ; +#9587 = SURFACE_STYLE_FILL_AREA ( #31101 ) ; +#9588 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 9.035070666963931600E-017 ) ) ; +#9589 = EDGE_CURVE ( 'NONE', #7548, #22162, #12044, .T. ) ; +#9590 = CARTESIAN_POINT ( 'NONE', ( -3.208603896932108200, -0.6500000000000002400, -3.300000000000000300 ) ) ; +#9591 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#9592 = AXIS2_PLACEMENT_3D ( 'NONE', #27251, #20660, #26861 ) ; +#9593 = ORIENTED_EDGE ( 'NONE', *, *, #1208, .F. ) ; +#9594 = LINE ( 'NONE', #18771, #6096 ) ; +#9595 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23980 ) ) ; +#9596 = FILL_AREA_STYLE_COLOUR ( '', #25936 ) ; +#9597 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30807, 'distance_accuracy_value', 'NONE'); +#9598 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9599 = EDGE_LOOP ( 'NONE', ( #32714, #29476, #18493, #8981 ) ) ; +#9600 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -2.904459358809381000 ) ) ; +#9602 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28337 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24327, #14300, #34052 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9601 = CONICAL_SURFACE ( 'NONE', #19560, 1.450424212713734600, 0.0002094395102314604200 ) ; +#9603 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26145 ) ) ; +#9604 = SURFACE_STYLE_USAGE ( .BOTH. , #19394 ) ; +#9605 = LINE ( 'NONE', #3822, #15194 ) ; +#9607 = EDGE_CURVE ( 'NONE', #17096, #9907, #3007, .T. ) ; +#9606 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5551 ), #9845 ) ; +#9608 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.280001745296167800, -4.200000000000000200 ) ) ; +#9609 = ORIENTED_EDGE ( 'NONE', *, *, #688, .T. ) ; +#9610 = FILL_AREA_STYLE ('',( #23032 ) ) ; +#9611 = VECTOR ( 'NONE', #41485, 1000.000000000000000 ) ; +#9612 = ORIENTED_EDGE ( 'NONE', *, *, #21948, .F. ) ; +#9613 = ORIENTED_EDGE ( 'NONE', *, *, #23841, .F. ) ; +#9614 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9616 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7449 ), #30738 ) ; +#9615 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13972 ), #11789 ) ; +#9617 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703821100, -6.800000000000001600 ) ) ; +#9618 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9619 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38051 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27986, #8608, #40966 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9620 = SURFACE_STYLE_USAGE ( .BOTH. , #16413 ) ; +#9621 = VERTEX_POINT ( 'NONE', #18854 ) ; +#9622 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.4300017452961686900, -6.200000000000001100 ) ) ; +#9623 = ORIENTED_EDGE ( 'NONE', *, *, #28042, .T. ) ; +#9624 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703821100, -6.800000000000000700 ) ) ; +#9625 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9626 = FILL_AREA_STYLE_COLOUR ( '', #17044 ) ; +#9627 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9628 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9629 = PRESENTATION_STYLE_ASSIGNMENT (( #10558 ) ) ; +#9630 = SURFACE_STYLE_USAGE ( .BOTH. , #41549 ) ; +#9631 = SURFACE_SIDE_STYLE ('',( #39392 ) ) ; +#9632 = FILL_AREA_STYLE_COLOUR ( '', #863 ) ; +#9633 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#9634 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9635 = FILL_AREA_STYLE_COLOUR ( '', #20080 ) ; +#9636 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9637 = EDGE_LOOP ( 'NONE', ( #10500, #10206, #12911, #5572, #25348, #34360, #29816, #25111 ) ) ; +#9638 = SURFACE_STYLE_USAGE ( .BOTH. , #6010 ) ; +#9639 = VERTEX_POINT ( 'NONE', #9063 ) ; +#9640 = FACE_OUTER_BOUND ( 'NONE', #35288, .T. ) ; +#9641 = EDGE_CURVE ( 'NONE', #6341, #28277, #27761, .T. ) ; +#9642 = FACE_OUTER_BOUND ( 'NONE', #27346, .T. ) ; +#9643 = SURFACE_SIDE_STYLE ('',( #34417 ) ) ; +#9644 = EDGE_CURVE ( 'NONE', #40705, #33001, #29239, .T. ) ; +#9645 = PRESENTATION_STYLE_ASSIGNMENT (( #33068 ) ) ; +#9646 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.367138801244516300E-016, -1.000000000000000000 ) ) ; +#9647 = ORIENTED_EDGE ( 'NONE', *, *, #165, .T. ) ; +#9648 = ORIENTED_EDGE ( 'NONE', *, *, #14681, .T. ) ; +#9649 = EDGE_CURVE ( 'NONE', #3794, #27046, #10552, .T. ) ; +#9650 = FILL_AREA_STYLE_COLOUR ( '', #15128 ) ; +#9651 = SURFACE_STYLE_USAGE ( .BOTH. , #32400 ) ; +#9652 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3188 ) ) ; +#9653 = EDGE_CURVE ( 'NONE', #37393, #32105, #15117, .T. ) ; +#9654 = ORIENTED_EDGE ( 'NONE', *, *, #11784, .F. ) ; +#9655 = FILL_AREA_STYLE_COLOUR ( '', #15587 ) ; +#9656 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 2.322941965694886000, 0.3499999999999999800 ) ) ; +#9657 = FACE_OUTER_BOUND ( 'NONE', #41381, .T. ) ; +#9658 = EDGE_LOOP ( 'NONE', ( #14701, #17306, #8895, #37418 ) ) ; +#9659 = AXIS2_PLACEMENT_3D ( 'NONE', #21758, #8833, #38084 ) ; +#9660 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2444 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32924, #32361, #38853 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9661 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.279999999999999100, -0.2000017452961698200 ) ) ; +#9662 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39655, 'distance_accuracy_value', 'NONE'); +#9664 = EDGE_CURVE ( 'NONE', #5959, #41292, #41458, .T. ) ; +#9663 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25584 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28534, #15678, #18401 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9665 = CARTESIAN_POINT ( 'NONE', ( 3.149747613015456700, 0.5439237163914580900, -1.873861940660602500 ) ) ; +#9666 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#9667 = PRESENTATION_STYLE_ASSIGNMENT (( #13189 ) ) ; +#9668 = FACE_OUTER_BOUND ( 'NONE', #27658, .T. ) ; +#9669 = ADVANCED_FACE ( 'NONE', ( #3475 ), #38356, .F. ) ; +#9671 = AXIS2_PLACEMENT_3D ( 'NONE', #24555, #40193, #33864 ) ; +#9670 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33812 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22176, #3106, #6210 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9672 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9673 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#9674 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6714 ), #26223 ) ; +#9675 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31981, 'distance_accuracy_value', 'NONE'); +#9676 = VERTEX_POINT ( 'NONE', #18446 ) ; +#9677 = FILL_AREA_STYLE_COLOUR ( '', #13403 ) ; +#9678 = VECTOR ( 'NONE', #39383, 1000.000000000000000 ) ; +#9679 = STYLED_ITEM ( 'NONE', ( #20494 ), #33202 ) ; +#9680 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000800, 1.630001745296169500, -1.650000000000000400 ) ) ; +#9681 = CARTESIAN_POINT ( 'NONE', ( 4.170000000000001700, -0.2800000000000026900, -0.2000017452961698200 ) ) ; +#9682 = STYLED_ITEM ( 'NONE', ( #15853 ), #8210 ) ; +#9683 = VERTEX_POINT ( 'NONE', #35076 ) ; +#9684 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#9685 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9686 = VECTOR ( 'NONE', #38019, 1000.000000000000000 ) ; +#9687 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9688 = SURFACE_STYLE_USAGE ( .BOTH. , #6595 ) ; +#9689 = EDGE_LOOP ( 'NONE', ( #32062, #21828 ) ) ; +#9690 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.999998254703822000, -5.899999999999999500 ) ) ; +#9691 = LINE ( 'NONE', #6542, #23860 ) ; +#9692 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000100, -1.499998254703838600, -5.049999999999993600 ) ) ; +#9693 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9694 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.03000174529616634800, -7.300000000000000700 ) ) ; +#9695 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9696 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9697 = ORIENTED_EDGE ( 'NONE', *, *, #10479, .F. ) ; +#9698 = VECTOR ( 'NONE', #2769, 1000.000000000000000 ) ; +#9699 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.180001745296166000, -4.775000000000000400 ) ) ; +#9700 = ORIENTED_EDGE ( 'NONE', *, *, #17823, .F. ) ; +#9701 = CIRCLE ( 'NONE', #20317, 0.1999999999999996500 ) ; +#9702 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, -0.2800000000000026400, 0.0000000000000000000 ) ) ; +#9703 = LINE ( 'NONE', #37334, #32947 ) ; +#9704 = FACE_OUTER_BOUND ( 'NONE', #3811, .T. ) ; +#9705 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.08000174529616907400, -7.350000000000000500 ) ) ; +#9706 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9707 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9708 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9709 = ADVANCED_FACE ( 'NONE', ( #20713 ), #18137, .F. ) ; +#9710 = EDGE_CURVE ( 'NONE', #41402, #21708, #26217, .T. ) ; +#9711 = LINE ( 'NONE', #18886, #8698 ) ; +#9712 = PRESENTATION_STYLE_ASSIGNMENT (( #20190 ) ) ; +#9713 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1911, 'distance_accuracy_value', 'NONE'); +#9714 = FILL_AREA_STYLE_COLOUR ( '', #36742 ) ; +#9715 = PLANE ( 'NONE', #3693 ) ; +#9716 = EDGE_CURVE ( 'NONE', #15022, #31984, #6480, .T. ) ; +#9717 = ORIENTED_EDGE ( 'NONE', *, *, #26778, .T. ) ; +#9718 = AXIS2_PLACEMENT_3D ( 'NONE', #12738, #38031, #38579 ) ; +#9720 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9719 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9721 = FILL_AREA_STYLE ('',( #6627 ) ) ; +#9722 = ORIENTED_EDGE ( 'NONE', *, *, #35745, .F. ) ; +#9723 = ADVANCED_FACE ( 'NONE', ( #39818 ), #12868, .F. ) ; +#9724 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24420 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27609, #17883, #5274 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9725 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9726 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9727 = EDGE_LOOP ( 'NONE', ( #26711, #36571, #21024, #14773 ) ) ; +#9728 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13849 ) ) ; +#9729 = FILL_AREA_STYLE ('',( #19940 ) ) ; +#9730 = PRESENTATION_STYLE_ASSIGNMENT (( #725 ) ) ; +#9731 = ORIENTED_EDGE ( 'NONE', *, *, #12774, .T. ) ; +#9733 = ORIENTED_EDGE ( 'NONE', *, *, #20521, .F. ) ; +#9732 = LINE ( 'NONE', #517, #32475 ) ; +#9734 = ORIENTED_EDGE ( 'NONE', *, *, #6402, .F. ) ; +#9735 = CYLINDRICAL_SURFACE ( 'NONE', #38253, 0.1499999999998701800 ) ; +#9737 = STYLED_ITEM ( 'NONE', ( #22456 ), #4431 ) ; +#9736 = AXIS2_PLACEMENT_3D ( 'NONE', #29149, #6558, #38609 ) ; +#9738 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16918 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17474, #20748, #4742 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9739 = EDGE_LOOP ( 'NONE', ( #11146, #40058, #29512, #38665 ) ) ; +#9740 = ORIENTED_EDGE ( 'NONE', *, *, #22310, .T. ) ; +#9741 = AXIS2_PLACEMENT_3D ( 'NONE', #41257, #12415, #18959 ) ; +#9742 = LINE ( 'NONE', #33051, #1224 ) ; +#9743 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9744 = CARTESIAN_POINT ( 'NONE', ( 1.149999999999999900, -1.499998254703826200, -6.699999999999994000 ) ) ; +#9745 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9746 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.6199999999999850100, -4.599999999999999600 ) ) ; +#9747 = SURFACE_SIDE_STYLE ('',( #9280 ) ) ; +#9748 = PRESENTATION_STYLE_ASSIGNMENT (( #11799 ) ) ; +#9749 = VECTOR ( 'NONE', #16638, 1000.000000000000000 ) ; +#9750 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9751 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20580, 'distance_accuracy_value', 'NONE'); +#9752 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9753 = CARTESIAN_POINT ( 'NONE', ( 3.061666666666666500, 0.07499999999999999700, -1.494491118252232900 ) ) ; +#9754 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.380001745296126600, -6.031671842700004200 ) ) ; +#9755 = LINE ( 'NONE', #14557, #31003 ) ; +#9756 = FILL_AREA_STYLE_COLOUR ( '', #3248 ) ; +#9757 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9758 = ADVANCED_FACE ( 'NONE', ( #7469 ), #38721, .F. ) ; +#9759 = DIRECTION ( 'NONE', ( -6.056601140521966100E-031, 2.501575119733568800E-045, 1.000000000000000000 ) ) ; +#9760 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9761 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#9762 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#9763 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9764 = CARTESIAN_POINT ( 'NONE', ( 3.245000000080559200, -0.3499999999999999200, -1.620710678118654400 ) ) ; +#9765 = EDGE_LOOP ( 'NONE', ( #15913, #27425, #21224, #19056 ) ) ; +#9766 = EDGE_CURVE ( 'NONE', #27288, #33358, #33798, .T. ) ; +#9767 = VERTEX_POINT ( 'NONE', #15852 ) ; +#9768 = FILL_AREA_STYLE ('',( #28730 ) ) ; +#9769 = ORIENTED_EDGE ( 'NONE', *, *, #27475, .F. ) ; +#9770 = VERTEX_POINT ( 'NONE', #6134 ) ; +#9771 = DIRECTION ( 'NONE', ( -2.904751851060896600E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9772 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#9773 = FILL_AREA_STYLE_COLOUR ( '', #7682 ) ; +#9774 = EDGE_CURVE ( 'NONE', #34162, #14611, #16614, .T. ) ; +#9775 = STYLED_ITEM ( 'NONE', ( #24114 ), #10086 ) ; +#9776 = FACE_OUTER_BOUND ( 'NONE', #40834, .T. ) ; +#9777 = STYLED_ITEM ( 'NONE', ( #15101 ), #14476 ) ; +#9778 = FILL_AREA_STYLE ('',( #15878 ) ) ; +#9780 = STYLED_ITEM ( 'NONE', ( #18634 ), #38731 ) ; +#9779 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31434, 'distance_accuracy_value', 'NONE'); +#9781 = AXIS2_PLACEMENT_3D ( 'NONE', #19645, #13230, #39078 ) ; +#9782 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#9783 = FILL_AREA_STYLE_COLOUR ( '', #35654 ) ; +#9785 = AXIS2_PLACEMENT_3D ( 'NONE', #16272, #3809, #19691 ) ; +#9784 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36948 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28570, #34931, #18993 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9786 = ORIENTED_EDGE ( 'NONE', *, *, #14384, .T. ) ; +#9787 = CARTESIAN_POINT ( 'NONE', ( 3.048825363047789100, -0.2416666666666655000, 1.088792722454407200 ) ) ; +#9789 = EDGE_CURVE ( 'NONE', #24666, #3733, #7997, .T. ) ; +#9788 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7649 ) ) ; +#9790 = SURFACE_STYLE_FILL_AREA ( #20680 ) ; +#9791 = FILL_AREA_STYLE_COLOUR ( '', #14535 ) ; +#9792 = EDGE_LOOP ( 'NONE', ( #28209, #10844, #9361, #8590 ) ) ; +#9793 = FACE_OUTER_BOUND ( 'NONE', #21999, .T. ) ; +#9794 = SURFACE_SIDE_STYLE ('',( #21015 ) ) ; +#9796 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5501 ) ) ; +#9795 = AXIS2_PLACEMENT_3D ( 'NONE', #30315, #29885, #26651 ) ; +#9797 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.4300017452961690200, -4.099999999999997900 ) ) ; +#9798 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#9799 = VECTOR ( 'NONE', #4863, 1000.000000000000000 ) ; +#9800 = ORIENTED_EDGE ( 'NONE', *, *, #11033, .T. ) ; +#9801 = FILL_AREA_STYLE ('',( #21509 ) ) ; +#9803 = VECTOR ( 'NONE', #272, 1000.000000000000000 ) ; +#9802 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9804 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21798, 'distance_accuracy_value', 'NONE'); +#9805 = VERTEX_POINT ( 'NONE', #16004 ) ; +#9806 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9807 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #41822, #23634, #20271, #4268, #7510, #30122, #25759, #32085 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 2, 4 ), + ( 0.0000000000000000000, 0.2499999999999995000, 0.4999999999999990000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#9809 = PRESENTATION_STYLE_ASSIGNMENT (( #30125 ) ) ; +#9808 = FACE_OUTER_BOUND ( 'NONE', #26573, .T. ) ; +#9810 = ORIENTED_EDGE ( 'NONE', *, *, #36860, .F. ) ; +#9811 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9812 = CARTESIAN_POINT ( 'NONE', ( 3.008908212981180600, -0.3485203830362403900, -1.298520383036240000 ) ) ; +#9813 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9814 = SURFACE_STYLE_FILL_AREA ( #33061 ) ; +#9815 = EDGE_LOOP ( 'NONE', ( #2570, #28636, #6074, #8429 ) ) ; +#9816 = FILL_AREA_STYLE ('',( #32013 ) ) ; +#9817 = VECTOR ( 'NONE', #4562, 1000.000000000000000 ) ; +#9818 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 1.468654402296581600E-014, -2.095470210943120000 ) ) ; +#9819 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.139998254717358200, -6.299996877890552400 ) ) ; +#9820 = EDGE_CURVE ( 'NONE', #16444, #9560, #16089, .T. ) ; +#9821 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9822 = SURFACE_STYLE_FILL_AREA ( #18939 ) ; +#9823 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9824 = ORIENTED_EDGE ( 'NONE', *, *, #19838, .F. ) ; +#9825 = EDGE_CURVE ( 'NONE', #33753, #32927, #14594, .T. ) ; +#9826 = ORIENTED_EDGE ( 'NONE', *, *, #27553, .F. ) ; +#9827 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9828 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#9829 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25950, 'distance_accuracy_value', 'NONE'); +#9830 = SURFACE_STYLE_USAGE ( .BOTH. , #35440 ) ; +#9831 = ORIENTED_EDGE ( 'NONE', *, *, #22423, .T. ) ; +#9832 = STYLED_ITEM ( 'NONE', ( #9712 ), #15718 ) ; +#9833 = CYLINDRICAL_SURFACE ( 'NONE', #6229, 0.09999999999999999200 ) ; +#9834 = CARTESIAN_POINT ( 'NONE', ( -3.395000000000000000, 0.0000000000000000000, -3.299999999999999800 ) ) ; +#9835 = LINE ( 'NONE', #2681, #13370 ) ; +#9836 = FILL_AREA_STYLE_COLOUR ( '', #30720 ) ; +#9837 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9838 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9839 = ORIENTED_EDGE ( 'NONE', *, *, #6083, .T. ) ; +#9840 = SURFACE_STYLE_FILL_AREA ( #13685 ) ; +#9841 = AXIS2_PLACEMENT_3D ( 'NONE', #27939, #25134, #21470 ) ; +#9842 = CYLINDRICAL_SURFACE ( 'NONE', #7778, 0.3600000000000078700 ) ; +#9843 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.2999999999999999900, 0.6999999999999999600 ) ) ; +#9844 = LINE ( 'NONE', #40850, #20001 ) ; +#9846 = EDGE_CURVE ( 'NONE', #3376, #23846, #22174, .T. ) ; +#9845 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31690 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3455, #22670, #26053 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9847 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18845, 'distance_accuracy_value', 'NONE'); +#9848 = ORIENTED_EDGE ( 'NONE', *, *, #6561, .T. ) ; +#9849 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9850 = VECTOR ( 'NONE', #14038, 1000.000000000000000 ) ; +#9851 = LINE ( 'NONE', #9066, #33634 ) ; +#9852 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9853 = SURFACE_SIDE_STYLE ('',( #38186 ) ) ; +#9854 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22090 ) ) ; +#9855 = FILL_AREA_STYLE_COLOUR ( '', #770 ) ; +#9857 = VECTOR ( 'NONE', #17631, 1000.000000000000000 ) ; +#9856 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.2699999999999849200, -4.599999999999999600 ) ) ; +#9858 = ORIENTED_EDGE ( 'NONE', *, *, #19627, .F. ) ; +#9859 = AXIS2_PLACEMENT_3D ( 'NONE', #920, #29810, #39399 ) ; +#9860 = FACE_OUTER_BOUND ( 'NONE', #3894, .T. ) ; +#9861 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9862 = SURFACE_STYLE_FILL_AREA ( #32782 ) ; +#9863 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9864 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9865 = CARTESIAN_POINT ( 'NONE', ( -2.995000000015367400, 0.3499999999999999800, -1.432177578400512600 ) ) ; +#9866 = ADVANCED_FACE ( 'NONE', ( #37805 ), #10470, .F. ) ; +#9867 = FACE_OUTER_BOUND ( 'NONE', #12932, .T. ) ; +#9868 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, 0.6780706550913999700 ) ) ; +#9869 = EDGE_LOOP ( 'NONE', ( #3736, #15765, #27227, #20904 ) ) ; +#9870 = PRESENTATION_STYLE_ASSIGNMENT (( #7590 ) ) ; +#9871 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.480001745296167600, -4.200000000000000200 ) ) ; +#9872 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9873 = EDGE_CURVE ( 'NONE', #4768, #20756, #27724, .T. ) ; +#9874 = ORIENTED_EDGE ( 'NONE', *, *, #4216, .F. ) ; +#9875 = ORIENTED_EDGE ( 'NONE', *, *, #37824, .F. ) ; +#9876 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12731, 'distance_accuracy_value', 'NONE'); +#9877 = ORIENTED_EDGE ( 'NONE', *, *, #28480, .T. ) ; +#9878 = SURFACE_STYLE_USAGE ( .BOTH. , #23038 ) ; +#9879 = CARTESIAN_POINT ( 'NONE', ( 4.492416573867750200, -1.982581680836082100, -6.695341433092486300 ) ) ; +#9880 = VECTOR ( 'NONE', #16174, 1000.000000000000000 ) ; +#9881 = EDGE_CURVE ( 'NONE', #37626, #14401, #39285, .T. ) ; +#9882 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.880000000000130000, -0.5000000000000879300 ) ) ; +#9883 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.891205793294679000E-015, 0.0000000000000000000 ) ) ; +#9884 = ORIENTED_EDGE ( 'NONE', *, *, #35659, .F. ) ; +#9885 = FILL_AREA_STYLE ('',( #9756 ) ) ; +#9886 = SURFACE_SIDE_STYLE ('',( #1560 ) ) ; +#9887 = ORIENTED_EDGE ( 'NONE', *, *, #11200, .T. ) ; +#9888 = EDGE_CURVE ( 'NONE', #37465, #12852, #28210, .T. ) ; +#9889 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25889 ) ) ; +#9890 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#9891 = FILL_AREA_STYLE_COLOUR ( '', #30864 ) ; +#9892 = LINE ( 'NONE', #12140, #10934 ) ; +#9893 = CARTESIAN_POINT ( 'NONE', ( 3.044999999995900100, -0.3292893218813451300, -1.517157287555538800 ) ) ; +#9894 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31015 ) ) ; +#9895 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#9896 = CARTESIAN_POINT ( 'NONE', ( -3.002212133807256500, 0.3499279245778491600, -1.299927924577849000 ) ) ; +#9897 = STYLED_ITEM ( 'NONE', ( #30575 ), #12280 ) ; +#9900 = EDGE_CURVE ( 'NONE', #33210, #37590, #26178, .T. ) ; +#9899 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9898 = AXIS2_PLACEMENT_3D ( 'NONE', #32033, #12682, #35450 ) ; +#9901 = ADVANCED_FACE ( 'NONE', ( #33231 ), #34244, .F. ) ; +#9902 = CONICAL_SURFACE ( 'NONE', #34020, 0.3000000000000001000, 0.3490658503988666700 ) ; +#9904 = AXIS2_PLACEMENT_3D ( 'NONE', #36883, #37014, #17549 ) ; +#9903 = AXIS2_PLACEMENT_3D ( 'NONE', #10196, #26041, #35795 ) ; +#9905 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9906 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18631 ), #19998 ) ; +#9907 = VERTEX_POINT ( 'NONE', #14387 ) ; +#9908 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9909 = VECTOR ( 'NONE', #32886, 1000.000000000000000 ) ; +#9910 = STYLED_ITEM ( 'NONE', ( #33673 ), #32819 ) ; +#9911 = ORIENTED_EDGE ( 'NONE', *, *, #39536, .T. ) ; +#9912 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1452 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8138, #14794, #4772 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9913 = EDGE_LOOP ( 'NONE', ( #11086, #28844, #24285, #658 ) ) ; +#9914 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.499998254703827700, -6.699999999999994000 ) ) ; +#9915 = EDGE_LOOP ( 'NONE', ( #16315, #14259, #22805, #12245 ) ) ; +#9916 = CYLINDRICAL_SURFACE ( 'NONE', #458, 0.1000000000000000500 ) ; +#9918 = ADVANCED_FACE ( 'NONE', ( #35787 ), #26844, .F. ) ; +#9917 = PRESENTATION_STYLE_ASSIGNMENT (( #18816 ) ) ; +#9919 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9920 = LINE ( 'NONE', #8261, #27629 ) ; +#9921 = LINE ( 'NONE', #2003, #31672 ) ; +#9922 = ORIENTED_EDGE ( 'NONE', *, *, #39851, .F. ) ; +#9923 = PLANE ( 'NONE', #36314 ) ; +#9924 = LINE ( 'NONE', #34811, #3388 ) ; +#9925 = VERTEX_POINT ( 'NONE', #20215 ) ; +#9926 = VECTOR ( 'NONE', #8418, 1000.000000000000000 ) ; +#9927 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9928 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#9929 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -2.322941965694886000, -1.250000000000000000 ) ) ; +#9930 = VECTOR ( 'NONE', #39045, 1000.000000000000000 ) ; +#9931 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9932 = CARTESIAN_POINT ( 'NONE', ( 3.172450947323305100, 0.5290829170021198500, -1.859072882017431400 ) ) ; +#9933 = SURFACE_STYLE_USAGE ( .BOTH. , #29017 ) ; +#9934 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9935 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.499998254703829500, -6.699999999999994000 ) ) ; +#9936 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #79, 'distance_accuracy_value', 'NONE'); +#9937 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9938 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9939 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9940 = LINE ( 'NONE', #13031, #5439 ) ; +#9941 = EDGE_CURVE ( 'NONE', #30870, #33221, #5956, .T. ) ; +#9942 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9943 = VECTOR ( 'NONE', #8942, 1000.000000000000000 ) ; +#9944 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.499998254703822900, -6.299999999999993600 ) ) ; +#9945 = AXIS2_PLACEMENT_3D ( 'NONE', #40433, #23933, #4722 ) ; +#9946 = EDGE_CURVE ( 'NONE', #27046, #29008, #16572, .T. ) ; +#9947 = ORIENTED_EDGE ( 'NONE', *, *, #40273, .T. ) ; +#9948 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9949 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#9950 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28125 ), #12131 ) ; +#9951 = ADVANCED_FACE ( 'NONE', ( #23137 ), #13517, .T. ) ; +#9952 = EDGE_LOOP ( 'NONE', ( #27298, #17880, #9993, #34438 ) ) ; +#9953 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9954 = ORIENTED_EDGE ( 'NONE', *, *, #36034, .F. ) ; +#9955 = FACE_OUTER_BOUND ( 'NONE', #10555, .T. ) ; +#9956 = SURFACE_SIDE_STYLE ('',( #3992 ) ) ; +#9957 = ORIENTED_EDGE ( 'NONE', *, *, #25375, .F. ) ; +#9958 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36845 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5061, #5328, #34296 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9959 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9960 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#9962 = EDGE_CURVE ( 'NONE', #20790, #15695, #38281, .T. ) ; +#9961 = AXIS2_PLACEMENT_3D ( 'NONE', #14677, #37129, #8017 ) ; +#9963 = FACE_OUTER_BOUND ( 'NONE', #938, .T. ) ; +#9964 = ORIENTED_EDGE ( 'NONE', *, *, #6623, .T. ) ; +#9965 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9966 = LINE ( 'NONE', #39324, #6478 ) ; +#9967 = ORIENTED_EDGE ( 'NONE', *, *, #3035, .F. ) ; +#9968 = ORIENTED_EDGE ( 'NONE', *, *, #31889, .T. ) ; +#9970 = STYLED_ITEM ( 'NONE', ( #2866 ), #3994 ) ; +#9969 = STYLED_ITEM ( 'NONE', ( #13866 ), #28387 ) ; +#9971 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4057 ), #19247 ) ; +#9973 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32201 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17887, #34250, #21150 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9972 = AXIS2_PLACEMENT_3D ( 'NONE', #8716, #12102, #3108 ) ; +#9974 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.500238293652193500E-011 ) ) ; +#9975 = VERTEX_POINT ( 'NONE', #27806 ) ; +#9976 = PRESENTATION_STYLE_ASSIGNMENT (( #40820 ) ) ; +#9977 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, -0.2799999999999974200, -0.2339555568811695900 ) ) ; +#9978 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#9979 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9980 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14882, 'distance_accuracy_value', 'NONE'); +#9981 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165600, -2.299999999999999400 ) ) ; +#9982 = SURFACE_SIDE_STYLE ('',( #17364 ) ) ; +#9983 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, -2.031000000000001500, -6.749999999999999100 ) ) ; +#9984 = ORIENTED_EDGE ( 'NONE', *, *, #31336, .F. ) ; +#9985 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16658, 'distance_accuracy_value', 'NONE'); +#9986 = SURFACE_SIDE_STYLE ('',( #1626 ) ) ; +#9987 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, 0.6780706550913999700 ) ) ; +#9988 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9989 = ORIENTED_EDGE ( 'NONE', *, *, #1121, .F. ) ; +#9990 = SURFACE_STYLE_FILL_AREA ( #14620 ) ; +#9991 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9992 = CLOSED_SHELL ( 'NONE', ( #37707, #456, #36621, #23914 ) ) ; +#9993 = ORIENTED_EDGE ( 'NONE', *, *, #10070, .F. ) ; +#9994 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9995 = VERTEX_POINT ( 'NONE', #1703 ) ; +#9996 = LINE ( 'NONE', #11298, #17642 ) ; +#9997 = FACE_OUTER_BOUND ( 'NONE', #40838, .T. ) ; +#9998 = LINE ( 'NONE', #29333, #2020 ) ; +#9999 = LINE ( 'NONE', #231, #38310 ) ; +#10000 = PRESENTATION_STYLE_ASSIGNMENT (( #29898 ) ) ; +#10001 = PRESENTATION_STYLE_ASSIGNMENT (( #24972 ) ) ; +#10002 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.931303021499040500, -0.3590461068823618300 ) ) ; +#10003 = ORIENTED_EDGE ( 'NONE', *, *, #40212, .T. ) ; +#10004 = ORIENTED_EDGE ( 'NONE', *, *, #36406, .F. ) ; +#10005 = EDGE_LOOP ( 'NONE', ( #3703, #5249, #31478, #16790 ) ) ; +#10006 = EDGE_CURVE ( 'NONE', #27299, #3283, #24155, .T. ) ; +#10007 = VECTOR ( 'NONE', #27463, 1000.000000000000000 ) ; +#10008 = FILL_AREA_STYLE_COLOUR ( '', #27977 ) ; +#10009 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.2999999999999999900, -1.517157287528632300 ) ) ; +#10010 = SURFACE_STYLE_USAGE ( .BOTH. , #35898 ) ; +#10011 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.499998254703820600, -5.449999999999994000 ) ) ; +#10012 = EDGE_CURVE ( 'NONE', #23345, #30134, #8445, .T. ) ; +#10013 = AXIS2_PLACEMENT_3D ( 'NONE', #33691, #23950, #27208 ) ; +#10014 = PLANE ( 'NONE', #2881 ) ; +#10015 = VERTEX_POINT ( 'NONE', #24417 ) ; +#10016 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865475700, 0.7071067811865475700 ) ) ; +#10017 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, 0.6780706550913999700 ) ) ; +#10018 = CARTESIAN_POINT ( 'NONE', ( -4.425000000000014000, -1.999998254703822400, -2.599999999999999600 ) ) ; +#10019 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #81 ) ) ; +#10020 = STYLED_ITEM ( 'NONE', ( #29 ), #14180 ) ; +#10021 = LINE ( 'NONE', #9914, #11576 ) ; +#10022 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10023 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10024 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10025 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17933 ), #18742 ) ; +#10026 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.845797985667148500, -0.3279248189596167300 ) ) ; +#10027 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18190 ), #38444 ) ; +#10028 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#10029 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26593 ), #40933 ) ; +#10030 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#10031 = SURFACE_SIDE_STYLE ('',( #19096 ) ) ; +#10032 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026900, 0.0000000000000000000 ) ) ; +#10033 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.2800017452961689500, -5.150000000000000400 ) ) ; +#10034 = FILL_AREA_STYLE ('',( #23344 ) ) ; +#10035 = EDGE_LOOP ( 'NONE', ( #13968, #21083, #7863, #10202 ) ) ; +#10036 = VECTOR ( 'NONE', #41017, 1000.000000000000000 ) ; +#10037 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9502, 'distance_accuracy_value', 'NONE'); +#10039 = EDGE_CURVE ( 'NONE', #33246, #8634, #27675, .T. ) ; +#10038 = STYLED_ITEM ( 'NONE', ( #35774 ), #34762 ) ; +#10040 = SURFACE_SIDE_STYLE ('',( #7540 ) ) ; +#10041 = FILL_AREA_STYLE ('',( #29970 ) ) ; +#10042 = EDGE_LOOP ( 'NONE', ( #29562, #88, #33950, #13020 ) ) ; +#10043 = VECTOR ( 'NONE', #36214, 1000.000000000000000 ) ; +#10044 = ORIENTED_EDGE ( 'NONE', *, *, #6024, .T. ) ; +#10045 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#10047 = AXIS2_PLACEMENT_3D ( 'NONE', #6764, #332, #9994 ) ; +#10046 = AXIS2_PLACEMENT_3D ( 'NONE', #11503, #14766, #17895 ) ; +#10048 = PLANE ( 'NONE', #34806 ) ; +#10049 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#10050 = VERTEX_POINT ( 'NONE', #24133 ) ; +#10051 = CIRCLE ( 'NONE', #39054, 0.2999999999999999300 ) ; +#10052 = ORIENTED_EDGE ( 'NONE', *, *, #1852, .F. ) ; +#10053 = ORIENTED_EDGE ( 'NONE', *, *, #17430, .T. ) ; +#10054 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10055 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#10056 = VERTEX_POINT ( 'NONE', #30763 ) ; +#10057 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760844200E-015 ) ) ; +#10058 = DIRECTION ( 'NONE', ( 1.133987551255206200E-030, 1.000000000000000000, -2.367138801244466000E-016 ) ) ; +#10059 = FACE_OUTER_BOUND ( 'NONE', #12900, .T. ) ; +#10060 = PRESENTATION_STYLE_ASSIGNMENT (( #9510 ) ) ; +#10061 = CARTESIAN_POINT ( 'NONE', ( -3.119636707815099300, -0.2999999999999999300, 1.000000000000057500 ) ) ; +#10062 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10063 = CARTESIAN_POINT ( 'NONE', ( -4.750000000000003600, -0.4099999999999990900, -6.861124800398366500 ) ) ; +#10064 = CIRCLE ( 'NONE', #8679, 0.1000000000000002600 ) ; +#10065 = FILL_AREA_STYLE ('',( #23508 ) ) ; +#10066 = EDGE_CURVE ( 'NONE', #25413, #521, #4933, .T. ) ; +#10067 = CIRCLE ( 'NONE', #15997, 0.2000000000000007300 ) ; +#10068 = PLANE ( 'NONE', #17591 ) ; +#10069 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10070 = EDGE_CURVE ( 'NONE', #16121, #11105, #22609, .T. ) ; +#10071 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7116 ) ) ; +#10072 = ORIENTED_EDGE ( 'NONE', *, *, #11509, .F. ) ; +#10073 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.139998254717370600, -5.049996877890552400 ) ) ; +#10074 = CARTESIAN_POINT ( 'NONE', ( 3.112655293855990400, -0.07499999999999999700, -0.2188033176481640200 ) ) ; +#10075 = LINE ( 'NONE', #39470, #34350 ) ; +#10076 = VERTEX_POINT ( 'NONE', #11538 ) ; +#10077 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10078 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #9202, #5435, #41434, #41023, #9070, #38320, #38042, #15334, #28036, #35083, #18589, #15188, #15466 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 2, 1, 2, 2, 4 ), + ( 0.0000000000000000000, 0.2499999999999993300, 0.3750000000000000000, 0.4375000000000002200, 0.4687500000000004400, 0.5000000000000006700, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#10079 = VERTEX_POINT ( 'NONE', #24569 ) ; +#10080 = ADVANCED_FACE ( 'NONE', ( #30187 ), #37254, .F. ) ; +#10081 = STYLED_ITEM ( 'NONE', ( #34616 ), #15269 ) ; +#10082 = LINE ( 'NONE', #31543, #22245 ) ; +#10083 = SURFACE_STYLE_USAGE ( .BOTH. , #7124 ) ; +#10084 = VECTOR ( 'NONE', #23048, 1000.000000000000000 ) ; +#10085 = SURFACE_SIDE_STYLE ('',( #28804 ) ) ; +#10086 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid37', #29845 ) ; +#10087 = ORIENTED_EDGE ( 'NONE', *, *, #11025, .F. ) ; +#10088 = SURFACE_SIDE_STYLE ('',( #24817 ) ) ; +#10089 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#10090 = VERTEX_POINT ( 'NONE', #5470 ) ; +#10091 = ORIENTED_EDGE ( 'NONE', *, *, #40337, .T. ) ; +#10092 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7129 ) ) ; +#10093 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#10095 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10094 = AXIS2_PLACEMENT_3D ( 'NONE', #33643, #17839, #4955 ) ; +#10096 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -10.30000000000000100, -1.249999999999999800 ) ) ; +#10098 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28808 ), #3624 ) ; +#10097 = AXIS2_PLACEMENT_3D ( 'NONE', #14578, #17427, #24043 ) ; +#10099 = SURFACE_STYLE_USAGE ( .BOTH. , #16760 ) ; +#10102 = EDGE_CURVE ( 'NONE', #18344, #24241, #34732, .T. ) ; +#10101 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10100 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38474 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16091, #38652, #32 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10103 = ORIENTED_EDGE ( 'NONE', *, *, #11200, .F. ) ; +#10104 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10105 = TOROIDAL_SURFACE ( 'NONE', #22877, 1.200001745296169300, 0.2000017452961698200 ) ; +#10106 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10107 = FACE_OUTER_BOUND ( 'NONE', #30372, .T. ) ; +#10108 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#10109 = FACE_OUTER_BOUND ( 'NONE', #17128, .T. ) ; +#10110 = FACE_OUTER_BOUND ( 'NONE', #10642, .T. ) ; +#10112 = AXIS2_PLACEMENT_3D ( 'NONE', #24181, #24461, #33636 ) ; +#10111 = AXIS2_PLACEMENT_3D ( 'NONE', #7882, #7608, #36995 ) ; +#10113 = AXIS2_PLACEMENT_3D ( 'NONE', #21527, #8757, #13273 ) ; +#10114 = PLANE ( 'NONE', #14526 ) ; +#10115 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10116 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#10117 = PLANE ( 'NONE', #20180 ) ; +#10118 = CIRCLE ( 'NONE', #16545, 0.1000000000000001600 ) ; +#10119 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#10120 = ORIENTED_EDGE ( 'NONE', *, *, #15688, .F. ) ; +#10121 = LINE ( 'NONE', #18354, #17251 ) ; +#10122 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, 0.7071067811865483500 ) ) ; +#10123 = SURFACE_STYLE_USAGE ( .BOTH. , #10547 ) ; +#10124 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10125 = FACE_OUTER_BOUND ( 'NONE', #37396, .T. ) ; +#10126 = SURFACE_STYLE_USAGE ( .BOTH. , #441 ) ; +#10127 = ADVANCED_FACE ( 'NONE', ( #40793 ), #3390, .T. ) ; +#10128 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3679, 'distance_accuracy_value', 'NONE'); +#10129 = ORIENTED_EDGE ( 'NONE', *, *, #30765, .F. ) ; +#10130 = VECTOR ( 'NONE', #33539, 1000.000000000000000 ) ; +#10131 = SURFACE_SIDE_STYLE ('',( #41780 ) ) ; +#10132 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#10133 = LINE ( 'NONE', #39394, #36466 ) ; +#10134 = FILL_AREA_STYLE ('',( #33605 ) ) ; +#10135 = VERTEX_POINT ( 'NONE', #21609 ) ; +#10136 = EDGE_CURVE ( 'NONE', #25413, #22958, #3073, .T. ) ; +#10137 = SURFACE_STYLE_FILL_AREA ( #2639 ) ; +#10138 = VERTEX_POINT ( 'NONE', #2825 ) ; +#10139 = ORIENTED_EDGE ( 'NONE', *, *, #39309, .F. ) ; +#10141 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -2.399999999999999500 ) ) ; +#10140 = SURFACE_SIDE_STYLE ('',( #23836 ) ) ; +#10142 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10143 = ADVANCED_FACE ( 'NONE', ( #20632 ), #34563, .F. ) ; +#10144 = SURFACE_STYLE_USAGE ( .BOTH. , #459 ) ; +#10145 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.730424212713734400, -1.049979056049130000 ) ) ; +#10146 = EDGE_CURVE ( 'NONE', #10050, #11525, #35794, .T. ) ; +#10147 = CARTESIAN_POINT ( 'NONE', ( -3.395000000000000000, -0.1999999999999999600, -3.300000000000000300 ) ) ; +#10148 = ORIENTED_EDGE ( 'NONE', *, *, #18811, .T. ) ; +#10149 = SURFACE_STYLE_FILL_AREA ( #35413 ) ; +#10150 = ORIENTED_EDGE ( 'NONE', *, *, #30772, .F. ) ; +#10151 = SURFACE_STYLE_FILL_AREA ( #30875 ) ; +#10152 = LINE ( 'NONE', #1869, #29871 ) ; +#10153 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1547 ), #28296 ) ; +#10154 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36975 ), #25366 ) ; +#10155 = PRESENTATION_STYLE_ASSIGNMENT (( #5866 ) ) ; +#10156 = SURFACE_STYLE_USAGE ( .BOTH. , #32625 ) ; +#10157 = FILL_AREA_STYLE_COLOUR ( '', #15242 ) ; +#10158 = STYLED_ITEM ( 'NONE', ( #35114 ), #11890 ) ; +#10159 = FACE_OUTER_BOUND ( 'NONE', #27043, .T. ) ; +#10160 = ORIENTED_EDGE ( 'NONE', *, *, #29839, .T. ) ; +#10162 = EDGE_CURVE ( 'NONE', #24138, #10178, #949, .T. ) ; +#10161 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7576 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18148, #15011, #25207 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10163 = FILL_AREA_STYLE ('',( #22765 ) ) ; +#10164 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10165 = EDGE_LOOP ( 'NONE', ( #28760, #37582, #11763, #35566 ) ) ; +#10166 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10167 = LINE ( 'NONE', #32561, #3149 ) ; +#10169 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000003200, 0.3000000000000145900, -1.950000000000001300 ) ) ; +#10168 = CARTESIAN_POINT ( 'NONE', ( -3.245000000002999900, -0.3499999999999999800, -1.649999999985500400 ) ) ; +#10171 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18878 ), #15346 ) ; +#10170 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33461 ) ) ; +#10172 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #726 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34964, #11919, #31706 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10173 = SURFACE_STYLE_FILL_AREA ( #35905 ) ; +#10174 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10175 = SURFACE_STYLE_USAGE ( .BOTH. , #6922 ) ; +#10176 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10989 ) ) ; +#10177 = FILL_AREA_STYLE_COLOUR ( '', #20960 ) ; +#10178 = VERTEX_POINT ( 'NONE', #37669 ) ; +#10179 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, 0.07499999999999999700, 0.4305619708689000200 ) ) ; +#10180 = ADVANCED_FACE ( 'NONE', ( #13524 ), #25667, .T. ) ; +#10181 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -2.294459358809381100 ) ) ; +#10182 = SURFACE_STYLE_USAGE ( .BOTH. , #29120 ) ; +#10183 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10184 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10185 = CARTESIAN_POINT ( 'NONE', ( 4.570925237316274100, -1.009999999999999100, -6.861124800398366500 ) ) ; +#10186 = EDGE_LOOP ( 'NONE', ( #31555, #11276, #8173, #14010 ) ) ; +#10187 = CARTESIAN_POINT ( 'NONE', ( 3.024289321876820300, -0.3499999999999999200, -1.529289321914624900 ) ) ; +#10188 = VERTEX_POINT ( 'NONE', #13065 ) ; +#10189 = FACE_OUTER_BOUND ( 'NONE', #15182, .T. ) ; +#10190 = CYLINDRICAL_SURFACE ( 'NONE', #20882, 0.1499999999998701300 ) ; +#10191 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#10192 = FACE_OUTER_BOUND ( 'NONE', #33168, .T. ) ; +#10193 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10194 = FACE_OUTER_BOUND ( 'NONE', #40774, .T. ) ; +#10195 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7532, 'distance_accuracy_value', 'NONE'); +#10196 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#10197 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10198 = PRESENTATION_STYLE_ASSIGNMENT (( #29580 ) ) ; +#10199 = SURFACE_SIDE_STYLE ('',( #3724 ) ) ; +#10200 = EDGE_CURVE ( 'NONE', #30134, #21528, #17075, .T. ) ; +#10201 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5153, 'distance_accuracy_value', 'NONE'); +#10202 = ORIENTED_EDGE ( 'NONE', *, *, #14715, .F. ) ; +#10203 = SURFACE_STYLE_FILL_AREA ( #16523 ) ; +#10204 = EDGE_CURVE ( 'NONE', #25185, #36110, #9248, .T. ) ; +#10205 = SURFACE_SIDE_STYLE ('',( #24073 ) ) ; +#10206 = ORIENTED_EDGE ( 'NONE', *, *, #20408, .T. ) ; +#10207 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15127 ) ) ; +#10208 = DIRECTION ( 'NONE', ( 3.281909278875040000E-015, 1.000000000000000000, -3.919063683626571500E-045 ) ) ; +#10209 = FACE_OUTER_BOUND ( 'NONE', #18368, .T. ) ; +#10210 = EDGE_CURVE ( 'NONE', #32267, #41082, #26182, .T. ) ; +#10211 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#10212 = CIRCLE ( 'NONE', #15745, 0.04999999999999969700 ) ; +#10213 = FILL_AREA_STYLE_COLOUR ( '', #21664 ) ; +#10214 = ORIENTED_EDGE ( 'NONE', *, *, #11048, .F. ) ; +#10215 = SURFACE_SIDE_STYLE ('',( #11778 ) ) ; +#10216 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33603 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25677, #38773, #26221 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10217 = ORIENTED_EDGE ( 'NONE', *, *, #28110, .F. ) ; +#10218 = ORIENTED_EDGE ( 'NONE', *, *, #37873, .T. ) ; +#10219 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#10220 = AXIS2_PLACEMENT_3D ( 'NONE', #32899, #13542, #900 ) ; +#10221 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#10224 = EDGE_CURVE ( 'NONE', #454, #8542, #41338, .T. ) ; +#10223 = AXIS2_PLACEMENT_3D ( 'NONE', #33647, #29967, #4407 ) ; +#10222 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#10225 = SURFACE_SIDE_STYLE ('',( #40334 ) ) ; +#10226 = ORIENTED_EDGE ( 'NONE', *, *, #37815, .T. ) ; +#10227 = VECTOR ( 'NONE', #1571, 1000.000000000000000 ) ; +#10228 = ORIENTED_EDGE ( 'NONE', *, *, #28835, .F. ) ; +#10229 = FILL_AREA_STYLE ('',( #19883 ) ) ; +#10231 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1887 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25392, #25264, #28609 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10230 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11055 ) ) ; +#10232 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10233 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.2999999999999850000, -4.249999999999998200 ) ) ; +#10234 = PRESENTATION_STYLE_ASSIGNMENT (( #6903 ) ) ; +#10235 = PLANE ( 'NONE', #11666 ) ; +#10236 = AXIS2_PLACEMENT_3D ( 'NONE', #16950, #339, #10437 ) ; +#10237 = DIRECTION ( 'NONE', ( -9.035070666963930400E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10238 = SURFACE_STYLE_USAGE ( .BOTH. , #36265 ) ; +#10240 = AXIS2_PLACEMENT_3D ( 'NONE', #41334, #28066, #8692 ) ; +#10239 = VECTOR ( 'NONE', #30608, 1000.000000000000000 ) ; +#10241 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10242 = CARTESIAN_POINT ( 'NONE', ( -1.649999999999999900, -1.499998254703824400, -6.699999999999994000 ) ) ; +#10243 = SURFACE_STYLE_FILL_AREA ( #40662 ) ; +#10244 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.380001745296165900, -2.099999999999999600 ) ) ; +#10245 = VERTEX_POINT ( 'NONE', #19611 ) ; +#10246 = LINE ( 'NONE', #22461, #722 ) ; +#10247 = ORIENTED_EDGE ( 'NONE', *, *, #36787, .F. ) ; +#10248 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10101, 'distance_accuracy_value', 'NONE'); +#10249 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.139998254717358200, -6.299996877890552400 ) ) ; +#10250 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#10251 = ORIENTED_EDGE ( 'NONE', *, *, #26033, .F. ) ; +#10252 = FILL_AREA_STYLE ('',( #23135 ) ) ; +#10253 = ORIENTED_EDGE ( 'NONE', *, *, #27141, .F. ) ; +#10254 = ORIENTED_EDGE ( 'NONE', *, *, #11221, .T. ) ; +#10255 = EDGE_LOOP ( 'NONE', ( #22113, #22212, #10787, #30919 ) ) ; +#10256 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#10257 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10258 = VECTOR ( 'NONE', #18754, 1000.000000000000000 ) ; +#10259 = VECTOR ( 'NONE', #4529, 1000.000000000000000 ) ; +#10260 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10261 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#10262 = SURFACE_SIDE_STYLE ('',( #26921 ) ) ; +#10263 = EDGE_LOOP ( 'NONE', ( #27070, #27793, #38608, #2858 ) ) ; +#10264 = EDGE_CURVE ( 'NONE', #38479, #14688, #3913, .T. ) ; +#10265 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.380001745296141500, -4.781671842700004200 ) ) ; +#10266 = EDGE_CURVE ( 'NONE', #36619, #36470, #41801, .T. ) ; +#10267 = AXIS2_PLACEMENT_3D ( 'NONE', #35228, #28441, #16152 ) ; +#10268 = STYLED_ITEM ( 'NONE', ( #5704 ), #22660 ) ; +#10269 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#10270 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10271 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34373 ), #41641 ) ; +#10272 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10273 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -2.341948692522932000E-016 ) ) ; +#10274 = STYLED_ITEM ( 'NONE', ( #13656 ), #37761 ) ; +#10275 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11322 ) ) ; +#10276 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30683, 'distance_accuracy_value', 'NONE'); +#10277 = AXIS2_PLACEMENT_3D ( 'NONE', #27058, #40009, #4587 ) ; +#10278 = CIRCLE ( 'NONE', #765, 0.3000000000000003800 ) ; +#10279 = ORIENTED_EDGE ( 'NONE', *, *, #28042, .F. ) ; +#10280 = LINE ( 'NONE', #33675, #16357 ) ; +#10282 = EDGE_CURVE ( 'NONE', #20628, #8483, #14550, .T. ) ; +#10281 = AXIS2_PLACEMENT_3D ( 'NONE', #8688, #1693, #31168 ) ; +#10283 = ORIENTED_EDGE ( 'NONE', *, *, #12614, .F. ) ; +#10284 = VERTEX_POINT ( 'NONE', #16050 ) ; +#10285 = AXIS2_PLACEMENT_3D ( 'NONE', #36303, #36563, #17227 ) ; +#10286 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10288 = VERTEX_POINT ( 'NONE', #29304 ) ; +#10287 = PRESENTATION_STYLE_ASSIGNMENT (( #5467 ) ) ; +#10289 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.280001745296167800, -4.200000000000000200 ) ) ; +#10290 = SURFACE_SIDE_STYLE ('',( #39962 ) ) ; +#10291 = ORIENTED_EDGE ( 'NONE', *, *, #27308, .T. ) ; +#10293 = ADVANCED_FACE ( 'NONE', ( #27205 ), #27684, .F. ) ; +#10292 = CIRCLE ( 'NONE', #14451, 0.3000000000000007700 ) ; +#10294 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24130 ), #11116 ) ; +#10295 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165600, -5.475000000000000500 ) ) ; +#10296 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20019, 'distance_accuracy_value', 'NONE'); +#10297 = FACE_OUTER_BOUND ( 'NONE', #39081, .T. ) ; +#10298 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10299 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10300 = FILL_AREA_STYLE_COLOUR ( '', #23795 ) ; +#10301 = CIRCLE ( 'NONE', #2676, 0.1000000000000002600 ) ; +#10302 = FILL_AREA_STYLE ('',( #35757 ) ) ; +#10303 = CYLINDRICAL_SURFACE ( 'NONE', #29051, 0.09999999999999999200 ) ; +#10304 = FACE_OUTER_BOUND ( 'NONE', #31880, .T. ) ; +#10305 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10306 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10307 = ORIENTED_EDGE ( 'NONE', *, *, #30112, .F. ) ; +#10308 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.2800017452961685000, -7.500000000000000000 ) ) ; +#10309 = FILL_AREA_STYLE_COLOUR ( '', #28546 ) ; +#10310 = CARTESIAN_POINT ( 'NONE', ( -3.145238922125641600, 0.5464776925295528100, -1.876477692529553000 ) ) ; +#10311 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22757, 'distance_accuracy_value', 'NONE'); +#10312 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703822500, -2.399999999999999500 ) ) ; +#10313 = VECTOR ( 'NONE', #31767, 1000.000000000000000 ) ; +#10314 = FACE_OUTER_BOUND ( 'NONE', #33084, .T. ) ; +#10315 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.2999999999999999900, -1.399999999999999900 ) ) ; +#10316 = FILL_AREA_STYLE ('',( #13586 ) ) ; +#10317 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10318 = ORIENTED_EDGE ( 'NONE', *, *, #20415, .F. ) ; +#10319 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296166100, -1.649999999999999500 ) ) ; +#10320 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10321 = EDGE_LOOP ( 'NONE', ( #21943, #3507, #32986, #25865, #21020, #18470 ) ) ; +#10322 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -3.299999999999999800 ) ) ; +#10323 = EDGE_CURVE ( 'NONE', #32708, #23889, #39291, .T. ) ; +#10324 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.5300017452961690600, -4.099999999999997900 ) ) ; +#10325 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#10326 = ORIENTED_EDGE ( 'NONE', *, *, #10919, .F. ) ; +#10327 = VECTOR ( 'NONE', #27916, 1000.000000000000000 ) ; +#10328 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10329 = EDGE_CURVE ( 'NONE', #35263, #17460, #36802, .T. ) ; +#10330 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35793 ), #27683 ) ; +#10331 = FACE_OUTER_BOUND ( 'NONE', #7185, .T. ) ; +#10332 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10333 = VECTOR ( 'NONE', #12074, 1000.000000000000000 ) ; +#10334 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36660, 'distance_accuracy_value', 'NONE'); +#10335 = ADVANCED_FACE ( 'NONE', ( #24162 ), #40801, .F. ) ; +#10336 = EDGE_LOOP ( 'NONE', ( #17804, #2257, #33388, #22749 ) ) ; +#10337 = PRESENTATION_STYLE_ASSIGNMENT (( #18967 ) ) ; +#10338 = DIRECTION ( 'NONE', ( -2.891205793294677000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10339 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29566 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25069, #28015, #18290 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10340 = VECTOR ( 'NONE', #10548, 1000.000000000000000 ) ; +#10341 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10342 = ORIENTED_EDGE ( 'NONE', *, *, #29006, .F. ) ; +#10343 = AXIS2_PLACEMENT_3D ( 'NONE', #18326, #2238, #14639 ) ; +#10344 = PRESENTATION_STYLE_ASSIGNMENT (( #21248 ) ) ; +#10345 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29471 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21077, #34177, #11419 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10346 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #158 ), #34194 ) ; +#10347 = FILL_AREA_STYLE_COLOUR ( '', #17968 ) ; +#10348 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10349 = PRESENTATION_STYLE_ASSIGNMENT (( #7372 ) ) ; +#10350 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10351 = ADVANCED_FACE ( 'NONE', ( #15036 ), #36255, .T. ) ; +#10353 = AXIS2_PLACEMENT_3D ( 'NONE', #7242, #7100, #39728 ) ; +#10352 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3316 ) ) ; +#10354 = VECTOR ( 'NONE', #24514, 1000.000000000000000 ) ; +#10355 = ORIENTED_EDGE ( 'NONE', *, *, #26061, .T. ) ; +#10356 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760844200E-015 ) ) ; +#10358 = EDGE_CURVE ( 'NONE', #14787, #28948, #32689, .T. ) ; +#10357 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7964 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25431, #28916, #9696 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10359 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -1.499998254703823800, -5.049999999999993600 ) ) ; +#10360 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#10361 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10362 = SURFACE_STYLE_FILL_AREA ( #7614 ) ; +#10363 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#10365 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18511 ), #4707 ) ; +#10364 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5238 ) ) ; +#10366 = DIRECTION ( 'NONE', ( -3.061289293739041200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10367 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#10368 = CARTESIAN_POINT ( 'NONE', ( -4.720380236995682200, 0.2800000000000028000, -0.8400000000000000800 ) ) ; +#10369 = ORIENTED_EDGE ( 'NONE', *, *, #13651, .T. ) ; +#10370 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #25215, #12173, #12310, #34651 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#10371 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18871, 'distance_accuracy_value', 'NONE'); +#10372 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10373 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.499998254703824400, -6.299999999999993600 ) ) ; +#10374 = LINE ( 'NONE', #34779, #33616 ) ; +#10375 = CYLINDRICAL_SURFACE ( 'NONE', #27500, 0.3000000000000003800 ) ; +#10376 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.868767362992667600E-015, 0.0000000000000000000 ) ) ; +#10377 = FILL_AREA_STYLE ('',( #13347 ) ) ; +#10378 = ORIENTED_EDGE ( 'NONE', *, *, #37933, .T. ) ; +#10379 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.032879073410321300E-016, -1.000000000000000000 ) ) ; +#10380 = ORIENTED_EDGE ( 'NONE', *, *, #25263, .T. ) ; +#10381 = LINE ( 'NONE', #11412, #40207 ) ; +#10382 = ORIENTED_EDGE ( 'NONE', *, *, #23586, .F. ) ; +#10383 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#10384 = FILL_AREA_STYLE ('',( #6854 ) ) ; +#10385 = PRESENTATION_STYLE_ASSIGNMENT (( #21321 ) ) ; +#10386 = FILL_AREA_STYLE ('',( #3752 ) ) ; +#10387 = PRESENTATION_STYLE_ASSIGNMENT (( #12018 ) ) ; +#10388 = ORIENTED_EDGE ( 'NONE', *, *, #21957, .F. ) ; +#10389 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10390 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#10391 = ORIENTED_EDGE ( 'NONE', *, *, #39969, .F. ) ; +#10392 = EDGE_CURVE ( 'NONE', #7802, #41581, #16045, .T. ) ; +#10393 = ADVANCED_FACE ( 'NONE', ( #21112 ), #29656, .F. ) ; +#10394 = FACE_OUTER_BOUND ( 'NONE', #21049, .T. ) ; +#10395 = SURFACE_STYLE_USAGE ( .BOTH. , #7144 ) ; +#10396 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10397 = ORIENTED_EDGE ( 'NONE', *, *, #12055, .F. ) ; +#10398 = EDGE_CURVE ( 'NONE', #6935, #41173, #20082, .T. ) ; +#10399 = SURFACE_SIDE_STYLE ('',( #36000 ) ) ; +#10400 = CYLINDRICAL_SURFACE ( 'NONE', #7658, 0.1000000000000000500 ) ; +#10401 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#10402 = CARTESIAN_POINT ( 'NONE', ( 0.1500000000000000200, -1.380001745296135700, -6.699999999999994000 ) ) ; +#10403 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11208 ), #10966 ) ; +#10404 = VECTOR ( 'NONE', #18449, 1000.000000000000000 ) ; +#10405 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10406 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10407 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10408 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20194 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17462, #36382, #39743 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10409 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11216 ) ) ; +#10410 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23419 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9991, #29087, #610 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10411 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#10412 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10413 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000800, 1.630001745296169500, -1.750000000000000900 ) ) ; +#10415 = EDGE_CURVE ( 'NONE', #19871, #18383, #30684, .T. ) ; +#10414 = STYLED_ITEM ( 'NONE', ( #12949 ), #36762 ) ; +#10416 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10417 = ORIENTED_EDGE ( 'NONE', *, *, #2252, .F. ) ; +#10418 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -0.8500017452961652300, -4.875000000000000900 ) ) ; +#10419 = ORIENTED_EDGE ( 'NONE', *, *, #40609, .T. ) ; +#10420 = ORIENTED_EDGE ( 'NONE', *, *, #31425, .T. ) ; +#10421 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10422 = CYLINDRICAL_SURFACE ( 'NONE', #22327, 0.2000000000000000100 ) ; +#10424 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36300 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7245, #23084, #7377 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10423 = STYLED_ITEM ( 'NONE', ( #31882 ), #26955 ) ; +#10425 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10426 = LINE ( 'NONE', #22082, #1898 ) ; +#10427 = AXIS2_PLACEMENT_3D ( 'NONE', #9024, #23176, #39539 ) ; +#10428 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#10429 = LINE ( 'NONE', #24612, #15986 ) ; +#10430 = FILL_AREA_STYLE_COLOUR ( '', #2716 ) ; +#10431 = ORIENTED_EDGE ( 'NONE', *, *, #1987, .F. ) ; +#10432 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11127 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18669, #25044, #27854 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10433 = VERTEX_POINT ( 'NONE', #39467 ) ; +#10434 = FILL_AREA_STYLE_COLOUR ( '', #10999 ) ; +#10435 = PRESENTATION_STYLE_ASSIGNMENT (( #39794 ) ) ; +#10436 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10437 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10438 = FILL_AREA_STYLE ('',( #7612 ) ) ; +#10439 = PLANE ( 'NONE', #31210 ) ; +#10440 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10441 = VECTOR ( 'NONE', #39757, 1000.000000000000000 ) ; +#10442 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34410, 'distance_accuracy_value', 'NONE'); +#10443 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10444 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10445 = PLANE ( 'NONE', #18996 ) ; +#10446 = EDGE_LOOP ( 'NONE', ( #18693, #28634, #36054, #11863 ) ) ; +#10447 = FILL_AREA_STYLE_COLOUR ( '', #3485 ) ; +#10448 = EDGE_CURVE ( 'NONE', #17224, #28658, #12458, .T. ) ; +#10450 = PLANE ( 'NONE', #12023 ) ; +#10449 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -2.399999999999999500 ) ) ; +#10451 = EDGE_CURVE ( 'NONE', #17679, #32918, #30191, .T. ) ; +#10452 = ORIENTED_EDGE ( 'NONE', *, *, #25716, .F. ) ; +#10453 = PLANE ( 'NONE', #28376 ) ; +#10454 = CARTESIAN_POINT ( 'NONE', ( -1.400000000000000800, 1.480001745296169600, -1.650000000000000400 ) ) ; +#10455 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10456 = CARTESIAN_POINT ( 'NONE', ( -4.492416573867751900, -1.982581680836083000, -2.504658566907516100 ) ) ; +#10457 = EDGE_CURVE ( 'NONE', #16943, #29571, #23096, .T. ) ; +#10458 = ORIENTED_EDGE ( 'NONE', *, *, #25829, .T. ) ; +#10459 = ORIENTED_EDGE ( 'NONE', *, *, #41345, .T. ) ; +#10460 = EDGE_LOOP ( 'NONE', ( #41471, #3548, #9848, #24277 ) ) ; +#10461 = STYLED_ITEM ( 'NONE', ( #5506 ), #17153 ) ; +#10462 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#10463 = PLANE ( 'NONE', #24361 ) ; +#10464 = DIRECTION ( 'NONE', ( -2.867303258980864400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10465 = SURFACE_STYLE_USAGE ( .BOTH. , #29829 ) ; +#10466 = LINE ( 'NONE', #585, #32721 ) ; +#10467 = PLANE ( 'NONE', #30964 ) ; +#10468 = VERTEX_POINT ( 'NONE', #26365 ) ; +#10469 = ORIENTED_EDGE ( 'NONE', *, *, #41479, .T. ) ; +#10470 = CYLINDRICAL_SURFACE ( 'NONE', #1991, 0.09999999999999982500 ) ; +#10471 = AXIS2_PLACEMENT_3D ( 'NONE', #1706, #8281, #11395 ) ; +#10472 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10473 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10474 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15605 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15176, #2482, #30981 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10475 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#10476 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#10479 = EDGE_CURVE ( 'NONE', #36622, #23348, #21636, .T. ) ; +#10478 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26339 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22784, #26316, #6936 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10477 = SURFACE_SIDE_STYLE ('',( #6877 ) ) ; +#10480 = VERTEX_POINT ( 'NONE', #26640 ) ; +#10481 = LINE ( 'NONE', #21113, #7435 ) ; +#10482 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#10483 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28704, 'distance_accuracy_value', 'NONE'); +#10485 = STYLED_ITEM ( 'NONE', ( #8691 ), #3025 ) ; +#10484 = STYLED_ITEM ( 'NONE', ( #2331 ), #27983 ) ; +#10486 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34329 ), #19751 ) ; +#10487 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#10488 = AXIS2_PLACEMENT_3D ( 'NONE', #14602, #11188, #4582 ) ; +#10489 = VERTEX_POINT ( 'NONE', #7691 ) ; +#10490 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38092 ), #38637 ) ; +#10491 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.828353493440455200E-016, 1.000000000000000000 ) ) ; +#10492 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10493 = SURFACE_STYLE_USAGE ( .BOTH. , #7675 ) ; +#10494 = ORIENTED_EDGE ( 'NONE', *, *, #18505, .T. ) ; +#10495 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13718, 'distance_accuracy_value', 'NONE'); +#10496 = CARTESIAN_POINT ( 'NONE', ( -3.842998697331153400, 0.6232582415777701000, -4.400043267033130900 ) ) ; +#10497 = TOROIDAL_SURFACE ( 'NONE', #20676, 1.600000000000129100, 0.1499999999998701300 ) ; +#10498 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 2.322941965694886000, -1.250000000000000000 ) ) ; +#10499 = ORIENTED_EDGE ( 'NONE', *, *, #39588, .F. ) ; +#10500 = ORIENTED_EDGE ( 'NONE', *, *, #11818, .T. ) ; +#10501 = SURFACE_STYLE_FILL_AREA ( #17141 ) ; +#10502 = ORIENTED_EDGE ( 'NONE', *, *, #3841, .F. ) ; +#10503 = SURFACE_STYLE_USAGE ( .BOTH. , #26206 ) ; +#10504 = LINE ( 'NONE', #13808, #1980 ) ; +#10505 = CARTESIAN_POINT ( 'NONE', ( 4.520424214906982200, -0.2800000000000026400, -1.149999999999999900 ) ) ; +#10506 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.297781607976743600E-015, -1.000000000000000000 ) ) ; +#10507 = FACE_OUTER_BOUND ( 'NONE', #14146, .T. ) ; +#10508 = ORIENTED_EDGE ( 'NONE', *, *, #37655, .F. ) ; +#10509 = EDGE_LOOP ( 'NONE', ( #23782, #4445, #10706, #9046 ) ) ; +#10510 = ADVANCED_FACE ( 'NONE', ( #22109 ), #36646, .T. ) ; +#10511 = CARTESIAN_POINT ( 'NONE', ( 1.149999999999999900, -1.139998254717356800, -6.299996877890552400 ) ) ; +#10512 = FILL_AREA_STYLE_COLOUR ( '', #40418 ) ; +#10513 = ORIENTED_EDGE ( 'NONE', *, *, #41814, .F. ) ; +#10514 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#10515 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10516 = EDGE_CURVE ( 'NONE', #35736, #31594, #13989, .T. ) ; +#10517 = FILL_AREA_STYLE ('',( #14355 ) ) ; +#10518 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10519 = VECTOR ( 'NONE', #40270, 1000.000000000000000 ) ; +#10520 = EDGE_CURVE ( 'NONE', #17215, #36273, #33678, .T. ) ; +#10521 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -2.031000000000000600, -2.294459358809380200 ) ) ; +#10522 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.480001745296165600, -1.649999999999999500 ) ) ; +#10523 = CIRCLE ( 'NONE', #26584, 1.200001745296169500 ) ; +#10524 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32830 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5844, #12319, #34941 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10525 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23339, 'distance_accuracy_value', 'NONE'); +#10526 = VECTOR ( 'NONE', #31369, 1000.000000000000000 ) ; +#10527 = CARTESIAN_POINT ( 'NONE', ( 4.407583426132273300, -1.982581680836082100, -6.695341433092487200 ) ) ; +#10528 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10529 = ORIENTED_EDGE ( 'NONE', *, *, #22423, .F. ) ; +#10530 = STYLED_ITEM ( 'NONE', ( #41690 ), #246 ) ; +#10531 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#10532 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10533 = SURFACE_STYLE_FILL_AREA ( #29437 ) ; +#10534 = CIRCLE ( 'NONE', #10223, 0.2818014882866899400 ) ; +#10535 = ORIENTED_EDGE ( 'NONE', *, *, #24088, .T. ) ; +#10537 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15435 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35818, #6694, #41721 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10536 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29482 ), #40294 ) ; +#10538 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12741 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22838, #3484, #32994 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10539 = CIRCLE ( 'NONE', #2867, 0.2000017452961698200 ) ; +#10540 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#10541 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9139, 'distance_accuracy_value', 'NONE'); +#10542 = CIRCLE ( 'NONE', #12625, 0.1000000000000009100 ) ; +#10544 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27333 ) ) ; +#10543 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6818 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36455, #17108, #1178 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10545 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -6.056601140521967900E-031 ) ) ; +#10546 = ORIENTED_EDGE ( 'NONE', *, *, #4661, .T. ) ; +#10547 = SURFACE_SIDE_STYLE ('',( #27859 ) ) ; +#10548 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10549 = ORIENTED_EDGE ( 'NONE', *, *, #39813, .T. ) ; +#10551 = VERTEX_POINT ( 'NONE', #39883 ) ; +#10550 = ADVANCED_FACE ( 'NONE', ( #6409 ), #20451, .F. ) ; +#10552 = CIRCLE ( 'NONE', #23554, 0.1499999999998701800 ) ; +#10553 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35336 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38958, #22598, #13118 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10554 = FILL_AREA_STYLE_COLOUR ( '', #13013 ) ; +#10555 = EDGE_LOOP ( 'NONE', ( #22178, #25150, #28050, #39964 ) ) ; +#10556 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#10557 = SURFACE_SIDE_STYLE ('',( #15056 ) ) ; +#10558 = SURFACE_STYLE_USAGE ( .BOTH. , #20493 ) ; +#10559 = SURFACE_SIDE_STYLE ('',( #9840 ) ) ; +#10560 = ADVANCED_FACE ( 'NONE', ( #5384 ), #33826, .F. ) ; +#10561 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.2999999999999999900, -0.2498427124746000500 ) ) ; +#10562 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.380001745296135700, -6.031671842700004200 ) ) ; +#10563 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10564 = SURFACE_SIDE_STYLE ('',( #119 ) ) ; +#10565 = EDGE_LOOP ( 'NONE', ( #7673, #3896, #12171, #21458 ) ) ; +#10566 = LINE ( 'NONE', #8093, #35362 ) ; +#10567 = SURFACE_SIDE_STYLE ('',( #15828 ) ) ; +#10568 = VECTOR ( 'NONE', #33498, 1000.000000000000000 ) ; +#10569 = EDGE_CURVE ( 'NONE', #10489, #112, #30148, .T. ) ; +#10570 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10571 = ORIENTED_EDGE ( 'NONE', *, *, #7707, .F. ) ; +#10572 = SURFACE_STYLE_FILL_AREA ( #15854 ) ; +#10573 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.480001745296169100, -4.100000000000000500 ) ) ; +#10574 = VERTEX_POINT ( 'NONE', #4456 ) ; +#10575 = SURFACE_STYLE_FILL_AREA ( #5137 ) ; +#10576 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#10577 = EDGE_CURVE ( 'NONE', #20411, #11735, #15494, .T. ) ; +#10578 = AXIS2_PLACEMENT_3D ( 'NONE', #35121, #8829, #2687 ) ; +#10579 = VECTOR ( 'NONE', #1228, 1000.000000000000000 ) ; +#10580 = SURFACE_SIDE_STYLE ('',( #9814 ) ) ; +#10581 = VECTOR ( 'NONE', #10104, 1000.000000000000000 ) ; +#10582 = FILL_AREA_STYLE ('',( #13142 ) ) ; +#10583 = ORIENTED_EDGE ( 'NONE', *, *, #20913, .F. ) ; +#10584 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, -0.1999999999999999000, -3.250000000000000900 ) ) ; +#10585 = AXIS2_PLACEMENT_3D ( 'NONE', #13641, #30015, #3886 ) ; +#10586 = ORIENTED_EDGE ( 'NONE', *, *, #5671, .T. ) ; +#10587 = ORIENTED_EDGE ( 'NONE', *, *, #31197, .F. ) ; +#10588 = FACE_OUTER_BOUND ( 'NONE', #9869, .T. ) ; +#10589 = DIRECTION ( 'NONE', ( -3.077917520101936400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10590 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26473 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10773, #17164, #13758 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10591 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10592 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10593 = ORIENTED_EDGE ( 'NONE', *, *, #683, .F. ) ; +#10594 = STYLED_ITEM ( 'NONE', ( #8413 ), #38910 ) ; +#10595 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#10596 = ADVANCED_FACE ( 'NONE', ( #9412 ), #1380, .F. ) ; +#10597 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12627 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5027, #30877, #11512 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10598 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#10599 = SURFACE_STYLE_FILL_AREA ( #24269 ) ; +#10600 = VECTOR ( 'NONE', #25347, 1000.000000000000000 ) ; +#10601 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#10604 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39554 ) ) ; +#10603 = FILL_AREA_STYLE ('',( #22078 ) ) ; +#10602 = STYLED_ITEM ( 'NONE', ( #7154 ), #29859 ) ; +#10606 = LINE ( 'NONE', #8812, #38931 ) ; +#10605 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.2300017452961684900, -6.224999999999999600 ) ) ; +#10607 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10608 = DIRECTION ( 'NONE', ( -3.872150616019659000E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10610 = EDGE_CURVE ( 'NONE', #36101, #13062, #1909, .T. ) ; +#10609 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8438 ), #12773 ) ; +#10611 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#10613 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000035300, 0.2800017452961687200, -6.849999999999999600 ) ) ; +#10612 = CIRCLE ( 'NONE', #8683, 1.450424212713734300 ) ; +#10614 = FILL_AREA_STYLE ('',( #26604 ) ) ; +#10616 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35011 ), #37179 ) ; +#10615 = AXIS2_PLACEMENT_3D ( 'NONE', #27081, #17041, #993 ) ; +#10617 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10618 = LINE ( 'NONE', #32703, #14685 ) ; +#10619 = CARTESIAN_POINT ( 'NONE', ( 4.821303021499042900, -0.2800000000000026400, -0.3590461068823618300 ) ) ; +#10620 = ORIENTED_EDGE ( 'NONE', *, *, #23929, .F. ) ; +#10621 = FILL_AREA_STYLE ('',( #23911 ) ) ; +#10622 = LINE ( 'NONE', #15902, #63 ) ; +#10623 = PLANE ( 'NONE', #13378 ) ; +#10624 = PRESENTATION_STYLE_ASSIGNMENT (( #25555 ) ) ; +#10625 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10626 = EDGE_LOOP ( 'NONE', ( #2538, #35819, #5247, #4974 ) ) ; +#10627 = SURFACE_STYLE_FILL_AREA ( #33556 ) ; +#10628 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10629 = ORIENTED_EDGE ( 'NONE', *, *, #39409, .T. ) ; +#10630 = VECTOR ( 'NONE', #40150, 1000.000000000000000 ) ; +#10631 = LINE ( 'NONE', #18287, #36952 ) ; +#10632 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.845797985667148900, -0.3279248189596167300 ) ) ; +#10633 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5651, 'distance_accuracy_value', 'NONE'); +#10634 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#10635 = EDGE_LOOP ( 'NONE', ( #31096, #41159, #36699, #671 ) ) ; +#10636 = ORIENTED_EDGE ( 'NONE', *, *, #216, .F. ) ; +#10637 = VERTEX_POINT ( 'NONE', #36794 ) ; +#10638 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10639 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.344220913482171200E-016 ) ) ; +#10640 = CARTESIAN_POINT ( 'NONE', ( 2.400000000000000400, -1.380001745296128200, -4.781671842700004200 ) ) ; +#10641 = DIRECTION ( 'NONE', ( -3.336029078258395200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10642 = EDGE_LOOP ( 'NONE', ( #22682, #3559, #18783, #21761 ) ) ; +#10643 = PLANE ( 'NONE', #7315 ) ; +#10644 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#10645 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10646 = EDGE_CURVE ( 'NONE', #32175, #32756, #20594, .T. ) ; +#10647 = SURFACE_STYLE_FILL_AREA ( #31573 ) ; +#10648 = CYLINDRICAL_SURFACE ( 'NONE', #41068, 0.04999999999999969700 ) ; +#10649 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.891200186627333000E-015, 0.0000000000000000000 ) ) ; +#10650 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822000, -5.899999999999999500 ) ) ; +#10651 = EDGE_CURVE ( 'NONE', #41459, #14401, #16003, .T. ) ; +#10652 = PRESENTATION_STYLE_ASSIGNMENT (( #32894 ) ) ; +#10653 = STYLED_ITEM ( 'NONE', ( #3753 ), #10935 ) ; +#10654 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10655 = DIRECTION ( 'NONE', ( -4.130328317307650600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10656 = CIRCLE ( 'NONE', #6236, 1.686063034915693300 ) ; +#10657 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10658 = VECTOR ( 'NONE', #32249, 1000.000000000000000 ) ; +#10659 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10660 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10661 = ORIENTED_EDGE ( 'NONE', *, *, #14201, .T. ) ; +#10662 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#10663 = FACE_OUTER_BOUND ( 'NONE', #40680, .T. ) ; +#10664 = SURFACE_SIDE_STYLE ('',( #12104 ) ) ; +#10665 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30776 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15650, #18920, #18645 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10666 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14613, 'distance_accuracy_value', 'NONE'); +#10667 = VERTEX_POINT ( 'NONE', #21566 ) ; +#10668 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4173 ), #36661 ) ; +#10669 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -2.322941965694886000, 0.3499999999999999800 ) ) ; +#10672 = EDGE_CURVE ( 'NONE', #22123, #5245, #7398, .T. ) ; +#10671 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10670 = AXIS2_PLACEMENT_3D ( 'NONE', #21177, #31161, #28057 ) ; +#10673 = SURFACE_STYLE_FILL_AREA ( #36180 ) ; +#10674 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, -0.2799999999999974200, 0.0000000000000000000 ) ) ; +#10675 = ORIENTED_EDGE ( 'NONE', *, *, #14255, .F. ) ; +#10676 = VECTOR ( 'NONE', #36649, 1000.000000000000000 ) ; +#10677 = ORIENTED_EDGE ( 'NONE', *, *, #25477, .T. ) ; +#10678 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10679 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026400, -0.2000017452961698200 ) ) ; +#10680 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.6800017452961729700, -1.649999999999999500 ) ) ; +#10681 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6373 ), #21556 ) ; +#10682 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10683 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12833 ), #6376 ) ; +#10684 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10685 = EDGE_LOOP ( 'NONE', ( #19257, #39953, #4607, #1470 ) ) ; +#10686 = PRESENTATION_STYLE_ASSIGNMENT (( #12232 ) ) ; +#10687 = FILL_AREA_STYLE_COLOUR ( '', #18366 ) ; +#10688 = ORIENTED_EDGE ( 'NONE', *, *, #35909, .T. ) ; +#10689 = SURFACE_STYLE_FILL_AREA ( #24767 ) ; +#10690 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#10691 = FILL_AREA_STYLE ('',( #30467 ) ) ; +#10692 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 4.818676322157808200E-016, 1.000000000000000000 ) ) ; +#10693 = VECTOR ( 'NONE', #41572, 1000.000000000000000 ) ; +#10694 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#10695 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#10696 = VERTEX_POINT ( 'NONE', #2219 ) ; +#10697 = EDGE_CURVE ( 'NONE', #21185, #16530, #32123, .T. ) ; +#10698 = FILL_AREA_STYLE_COLOUR ( '', #13560 ) ; +#10699 = FILL_AREA_STYLE ('',( #41787 ) ) ; +#10700 = ORIENTED_EDGE ( 'NONE', *, *, #4499, .F. ) ; +#10701 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 0.1000000000000133800, -4.450000000000000200 ) ) ; +#10702 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10703 = EDGE_CURVE ( 'NONE', #12368, #4469, #3833, .T. ) ; +#10704 = VECTOR ( 'NONE', #9979, 1000.000000000000000 ) ; +#10705 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10706 = ORIENTED_EDGE ( 'NONE', *, *, #18841, .T. ) ; +#10707 = EDGE_CURVE ( 'NONE', #4469, #26667, #12420, .T. ) ; +#10708 = FILL_AREA_STYLE_COLOUR ( '', #38796 ) ; +#10709 = VECTOR ( 'NONE', #19987, 1000.000000000000000 ) ; +#10710 = AXIS2_PLACEMENT_3D ( 'NONE', #11133, #4516, #39815 ) ; +#10711 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10712 = ORIENTED_EDGE ( 'NONE', *, *, #38238, .T. ) ; +#10713 = FILL_AREA_STYLE_COLOUR ( '', #12195 ) ; +#10714 = ORIENTED_EDGE ( 'NONE', *, *, #19789, .T. ) ; +#10715 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12870 ) ) ; +#10716 = FILL_AREA_STYLE ('',( #33198 ) ) ; +#10717 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10718 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10719 = ADVANCED_FACE ( 'NONE', ( #19525 ), #27744, .F. ) ; +#10720 = STYLED_ITEM ( 'NONE', ( #10868 ), #12001 ) ; +#10721 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10722 = FACE_OUTER_BOUND ( 'NONE', #18166, .T. ) ; +#10723 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15499, 'distance_accuracy_value', 'NONE'); +#10724 = EDGE_CURVE ( 'NONE', #38914, #36502, #2882, .T. ) ; +#10725 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -6.900000000000000400 ) ) ; +#10726 = CARTESIAN_POINT ( 'NONE', ( -3.237718385397967900, 0.07499999999999998300, 0.7155313145785868700 ) ) ; +#10727 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.380001745296132400, -6.031671842700004200 ) ) ; +#10728 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10729 = LINE ( 'NONE', #12064, #3177 ) ; +#10730 = FILL_AREA_STYLE ('',( #30376 ) ) ; +#10731 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#10733 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26158 ) ) ; +#10732 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17829 ), #12891 ) ; +#10734 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12088 ), #13717 ) ; +#10735 = SURFACE_STYLE_USAGE ( .BOTH. , #30095 ) ; +#10736 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6587, 'distance_accuracy_value', 'NONE'); +#10737 = EDGE_LOOP ( 'NONE', ( #18695, #15449, #19298, #31151 ) ) ; +#10738 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28450 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28214, #12364, #41203 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10739 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10740 = SURFACE_SIDE_STYLE ('',( #18123 ) ) ; +#10741 = AXIS2_PLACEMENT_3D ( 'NONE', #25042, #40965, #31370 ) ; +#10742 = ORIENTED_EDGE ( 'NONE', *, *, #40527, .F. ) ; +#10743 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10744 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10745 = FILL_AREA_STYLE_COLOUR ( '', #35244 ) ; +#10746 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -10.30000000000000100, -1.250000000000000000 ) ) ; +#10747 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, -0.2000000000000000100, -3.249999999999999600 ) ) ; +#10748 = FACE_OUTER_BOUND ( 'NONE', #15516, .T. ) ; +#10749 = ORIENTED_EDGE ( 'NONE', *, *, #26903, .F. ) ; +#10750 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, 0.0000000000000000000 ) ) ; +#10751 = ORIENTED_EDGE ( 'NONE', *, *, #10516, .F. ) ; +#10752 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10753 = ORIENTED_EDGE ( 'NONE', *, *, #9820, .F. ) ; +#10754 = ORIENTED_EDGE ( 'NONE', *, *, #5331, .F. ) ; +#10756 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10755 = VECTOR ( 'NONE', #16830, 1000.000000000000000 ) ; +#10757 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10758 = LINE ( 'NONE', #20365, #1220 ) ; +#10759 = VERTEX_POINT ( 'NONE', #11760 ) ; +#10760 = ADVANCED_FACE ( 'NONE', ( #40222 ), #14955, .T. ) ; +#10761 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 2.032879073410321300E-016, 1.000000000000000000 ) ) ; +#10762 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 1.485063948690956900E-014, -2.095470210943120000 ) ) ; +#10763 = PRESENTATION_STYLE_ASSIGNMENT (( #17307 ) ) ; +#10764 = VECTOR ( 'NONE', #17267, 1000.000000000000000 ) ; +#10765 = EDGE_CURVE ( 'NONE', #19617, #3221, #39332, .T. ) ; +#10766 = SURFACE_SIDE_STYLE ('',( #2554 ) ) ; +#10767 = EDGE_CURVE ( 'NONE', #22693, #37590, #20054, .T. ) ; +#10768 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.6199999999999850100, -4.599999999999999600 ) ) ; +#10769 = DIRECTION ( 'NONE', ( 4.336808689942016200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10770 = CARTESIAN_POINT ( 'NONE', ( 3.315809924354955500, -0.3499999999999811000, -1.679999999999999900 ) ) ; +#10771 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38070 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23380, #23089, #36508 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10772 = ADVANCED_FACE ( 'NONE', ( #4859 ), #12591, .T. ) ; +#10773 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10774 = EDGE_CURVE ( 'NONE', #22680, #33753, #38680, .T. ) ; +#10775 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.480001745296170000, -0.2339555568811688700 ) ) ; +#10776 = PLANE ( 'NONE', #39808 ) ; +#10777 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.499998254703827700, -6.699999999999994000 ) ) ; +#10778 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32435 ), #18117 ) ; +#10779 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27318 ), #28680 ) ; +#10780 = SURFACE_STYLE_USAGE ( .BOTH. , #17313 ) ; +#10781 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10782 = LINE ( 'NONE', #27256, #21940 ) ; +#10785 = EDGE_CURVE ( 'NONE', #27294, #24911, #22540, .T. ) ; +#10784 = AXIS2_PLACEMENT_3D ( 'NONE', #9983, #449, #20793 ) ; +#10783 = CARTESIAN_POINT ( 'NONE', ( 4.010831726188969900, 0.5300017452961703900, -4.414589803375030800 ) ) ; +#10786 = CYLINDRICAL_SURFACE ( 'NONE', #16209, 0.3600000000000078700 ) ; +#10787 = ORIENTED_EDGE ( 'NONE', *, *, #27136, .T. ) ; +#10788 = VERTEX_POINT ( 'NONE', #34658 ) ; +#10789 = FILL_AREA_STYLE_COLOUR ( '', #4365 ) ; +#10790 = ORIENTED_EDGE ( 'NONE', *, *, #6053, .F. ) ; +#10791 = ORIENTED_EDGE ( 'NONE', *, *, #9774, .F. ) ; +#10793 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24642 ), #40295 ) ; +#10792 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28420 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35869, #26397, #30466 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10794 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000000000, 1.630001745296169500, -1.650000000000000800 ) ) ; +#10795 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10796 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8636 ), #40552 ) ; +#10797 = CIRCLE ( 'NONE', #32374, 0.9000017452961695000 ) ; +#10798 = STYLED_ITEM ( 'NONE', ( #9645 ), #8669 ) ; +#10799 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10800 = PRESENTATION_STYLE_ASSIGNMENT (( #29114 ) ) ; +#10801 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10802 = LINE ( 'NONE', #20557, #25984 ) ; +#10803 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10804 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -9.035070666963931600E-017 ) ) ; +#10805 = ADVANCED_FACE ( 'NONE', ( #33156 ), #38166, .F. ) ; +#10806 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10807 = CYLINDRICAL_SURFACE ( 'NONE', #12958, 0.3600000000000078700 ) ; +#10808 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#10809 = ORIENTED_EDGE ( 'NONE', *, *, #7681, .F. ) ; +#10810 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10811 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33438, 'distance_accuracy_value', 'NONE'); +#10812 = LINE ( 'NONE', #6254, #37133 ) ; +#10813 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.3300017452961689900, -6.424999999999999800 ) ) ; +#10814 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10815 = ORIENTED_EDGE ( 'NONE', *, *, #34486, .T. ) ; +#10816 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.499998254703825300, -5.449999999999994000 ) ) ; +#10817 = SURFACE_STYLE_FILL_AREA ( #5561 ) ; +#10818 = PRESENTATION_STYLE_ASSIGNMENT (( #35399 ) ) ; +#10819 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#10820 = FILL_AREA_STYLE ('',( #30195 ) ) ; +#10821 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#10822 = EDGE_CURVE ( 'NONE', #12852, #10245, #824, .T. ) ; +#10823 = ORIENTED_EDGE ( 'NONE', *, *, #12825, .T. ) ; +#10824 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#10825 = ORIENTED_EDGE ( 'NONE', *, *, #40081, .F. ) ; +#10826 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#10827 = EDGE_CURVE ( 'NONE', #11687, #38459, #16454, .T. ) ; +#10828 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14430 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24676, #8785, #31426 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10829 = VECTOR ( 'NONE', #39844, 999.9999999999998900 ) ; +#10830 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #890 ) ) ; +#10831 = ORIENTED_EDGE ( 'NONE', *, *, #3715, .F. ) ; +#10832 = CARTESIAN_POINT ( 'NONE', ( 3.844056509991732500, 0.6210042263929166400, -4.550189809879857000 ) ) ; +#10833 = FACE_OUTER_BOUND ( 'NONE', #23827, .T. ) ; +#10834 = SURFACE_STYLE_USAGE ( .BOTH. , #36565 ) ; +#10835 = AXIS2_PLACEMENT_3D ( 'NONE', #36475, #19975, #20402 ) ; +#10836 = FILL_AREA_STYLE ('',( #11125 ) ) ; +#10837 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.07499999999999998300, -0.2088107318966278300 ) ) ; +#10838 = ORIENTED_EDGE ( 'NONE', *, *, #23929, .T. ) ; +#10839 = PLANE ( 'NONE', #37 ) ; +#10840 = PRESENTATION_STYLE_ASSIGNMENT (( #12399 ) ) ; +#10841 = CYLINDRICAL_SURFACE ( 'NONE', #37456, 0.1000000000000001200 ) ; +#10842 = AXIS2_PLACEMENT_3D ( 'NONE', #8460, #30806, #21373 ) ; +#10843 = FILL_AREA_STYLE ('',( #11132 ) ) ; +#10844 = ORIENTED_EDGE ( 'NONE', *, *, #23778, .F. ) ; +#10845 = ORIENTED_EDGE ( 'NONE', *, *, #13261, .T. ) ; +#10848 = EDGE_CURVE ( 'NONE', #3195, #32610, #8327, .T. ) ; +#10847 = CARTESIAN_POINT ( 'NONE', ( 0.1500000000000000200, -1.139998254717359900, -6.299996877890552400 ) ) ; +#10846 = AXIS2_PLACEMENT_3D ( 'NONE', #36777, #24069, #27310 ) ; +#10849 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -2.341948692522932000E-016 ) ) ; +#10850 = ADVANCED_FACE ( 'NONE', ( #33644 ), #28430, .T. ) ; +#10851 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10852 = FILL_AREA_STYLE ('',( #13994 ) ) ; +#10853 = CLOSED_SHELL ( 'NONE', ( #37832, #3175, #18885, #17153, #11646, #21188 ) ) ; +#10855 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36008 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2742, #28407, #31648 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10854 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7890 ), #11669 ) ; +#10856 = DIRECTION ( 'NONE', ( 0.08715574274765916500, 2.860372408307886300E-016, 0.9961946980917455500 ) ) ; +#10857 = LINE ( 'NONE', #22484, #40692 ) ; +#10858 = ADVANCED_FACE ( 'NONE', ( #29581 ), #38445, .F. ) ; +#10859 = MANIFOLD_SOLID_BREP ( '1-1-solid8', #33101 ) ; +#10860 = DIRECTION ( 'NONE', ( 1.387778780781437500E-017, 2.367138801244514300E-016, 1.000000000000000000 ) ) ; +#10861 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#10862 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.139998254717359900, -6.299996877890552400 ) ) ; +#10863 = ORIENTED_EDGE ( 'NONE', *, *, #19397, .T. ) ; +#10864 = FILL_AREA_STYLE_COLOUR ( '', #38369 ) ; +#10865 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#10867 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -5.952072798849889700E-031 ) ) ; +#10866 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10868 = PRESENTATION_STYLE_ASSIGNMENT (( #20732 ) ) ; +#10869 = CIRCLE ( 'NONE', #7209, 0.1000000000000000500 ) ; +#10870 = VECTOR ( 'NONE', #3591, 1000.000000000000000 ) ; +#10871 = SURFACE_SIDE_STYLE ('',( #40153 ) ) ; +#10872 = DIRECTION ( 'NONE', ( 0.9961946980917454300, 2.635991797933898700E-016, -0.08715574274765916500 ) ) ; +#10873 = SURFACE_STYLE_FILL_AREA ( #11199 ) ; +#10874 = ORIENTED_EDGE ( 'NONE', *, *, #20791, .T. ) ; +#10875 = CARTESIAN_POINT ( 'NONE', ( -2.988312805509078200, 0.5999999999999999800, -1.929999999999999900 ) ) ; +#10876 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10877 = VECTOR ( 'NONE', #16425, 1000.000000000000000 ) ; +#10878 = EDGE_LOOP ( 'NONE', ( #41738, #19879, #41684, #1974 ) ) ; +#10879 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.3000000000000147500, -1.950000000000001300 ) ) ; +#10880 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#10881 = SURFACE_STYLE_USAGE ( .BOTH. , #24033 ) ; +#10882 = SURFACE_STYLE_USAGE ( .BOTH. , #16827 ) ; +#10883 = SURFACE_STYLE_USAGE ( .BOTH. , #30529 ) ; +#10884 = VECTOR ( 'NONE', #29475, 1000.000000000000000 ) ; +#10885 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#10886 = ORIENTED_EDGE ( 'NONE', *, *, #33455, .F. ) ; +#10887 = CARTESIAN_POINT ( 'NONE', ( 4.170000000000001700, -0.2800000000000026400, -0.2000017452961698200 ) ) ; +#10888 = SURFACE_STYLE_FILL_AREA ( #6256 ) ; +#10889 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10890 = EDGE_CURVE ( 'NONE', #34722, #18855, #18503, .T. ) ; +#10891 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#10892 = LINE ( 'NONE', #13272, #6836 ) ; +#10893 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10894 = EDGE_CURVE ( 'NONE', #13376, #15786, #29043, .T. ) ; +#10895 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10653 ), #40399 ) ; +#10896 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10897 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10898 = CARTESIAN_POINT ( 'NONE', ( 2.573205080756887100, 1.630001745296169500, -1.750000000000000200 ) ) ; +#10899 = AXIS2_PLACEMENT_3D ( 'NONE', #481, #29808, #12993 ) ; +#10900 = ORIENTED_EDGE ( 'NONE', *, *, #26197, .T. ) ; +#10901 = LINE ( 'NONE', #18224, #6847 ) ; +#10902 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.380001745296165500, -1.899999999999999700 ) ) ; +#10903 = LINE ( 'NONE', #30053, #35690 ) ; +#10904 = AXIS2_PLACEMENT_3D ( 'NONE', #38929, #12948, #22848 ) ; +#10905 = ORIENTED_EDGE ( 'NONE', *, *, #5904, .F. ) ; +#10906 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7370 ), #22564 ) ; +#10907 = VERTEX_POINT ( 'NONE', #22776 ) ; +#10908 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10909 = LINE ( 'NONE', #40221, #33178 ) ; +#10910 = SURFACE_SIDE_STYLE ('',( #12053 ) ) ; +#10911 = ORIENTED_EDGE ( 'NONE', *, *, #16784, .F. ) ; +#10912 = CARTESIAN_POINT ( 'NONE', ( 3.185710290650530100, -0.5195126016631547200, -1.849515327111979700 ) ) ; +#10914 = STYLED_ITEM ( 'NONE', ( #22763 ), #6401 ) ; +#10913 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4432 ) ) ; +#10915 = LINE ( 'NONE', #5463, #8879 ) ; +#10916 = FILL_AREA_STYLE ('',( #16728 ) ) ; +#10917 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#10919 = EDGE_CURVE ( 'NONE', #32548, #4147, #15414, .T. ) ; +#10918 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2335 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40194, #37107, #28333 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10920 = EDGE_LOOP ( 'NONE', ( #18569, #11515, #9120, #8842 ) ) ; +#10921 = SURFACE_SIDE_STYLE ('',( #1938 ) ) ; +#10922 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.180001745296165500, -7.200000000000001100 ) ) ; +#10923 = VERTEX_POINT ( 'NONE', #19558 ) ; +#10924 = LINE ( 'NONE', #35272, #5876 ) ; +#10925 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10926 = LINE ( 'NONE', #7835, #35707 ) ; +#10928 = AXIS2_PLACEMENT_3D ( 'NONE', #7642, #644, #14018 ) ; +#10927 = STYLED_ITEM ( 'NONE', ( #17409 ), #26269 ) ; +#10929 = LINE ( 'NONE', #30137, #33676 ) ; +#10930 = CARTESIAN_POINT ( 'NONE', ( 4.407583426132273300, -1.982581680836082100, -5.804658566907515500 ) ) ; +#10931 = FILL_AREA_STYLE_COLOUR ( '', #26329 ) ; +#10932 = FILL_AREA_STYLE ('',( #7687 ) ) ; +#10933 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10934 = VECTOR ( 'NONE', #41263, 1000.000000000000000 ) ; +#10935 = ADVANCED_FACE ( 'NONE', ( #26017 ), #10623, .F. ) ; +#10936 = FILL_AREA_STYLE_COLOUR ( '', #9155 ) ; +#10937 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10938 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#10939 = FILL_AREA_STYLE ('',( #10512 ) ) ; +#10940 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#10941 = SURFACE_STYLE_USAGE ( .BOTH. , #4461 ) ; +#10942 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#10943 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10944 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10945 = ORIENTED_EDGE ( 'NONE', *, *, #24875, .F. ) ; +#10946 = FACE_OUTER_BOUND ( 'NONE', #36346, .T. ) ; +#10947 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10948 = LINE ( 'NONE', #19508, #9909 ) ; +#10949 = FILL_AREA_STYLE ('',( #23679 ) ) ; +#10950 = EDGE_CURVE ( 'NONE', #37915, #39566, #36137, .T. ) ; +#10951 = ORIENTED_EDGE ( 'NONE', *, *, #40803, .F. ) ; +#10952 = DIRECTION ( 'NONE', ( 2.867303258980864400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10953 = EDGE_LOOP ( 'NONE', ( #19342, #21627, #13624, #18015 ) ) ; +#10954 = FACE_OUTER_BOUND ( 'NONE', #655, .T. ) ; +#10955 = VERTEX_POINT ( 'NONE', #3419 ) ; +#10956 = SURFACE_STYLE_USAGE ( .BOTH. , #20898 ) ; +#10957 = LINE ( 'NONE', #7678, #37751 ) ; +#10958 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.4300017452961686900, -4.750000000000000000 ) ) ; +#10959 = EDGE_CURVE ( 'NONE', #6127, #727, #9807, .T. ) ; +#10960 = LINE ( 'NONE', #40357, #29151 ) ; +#10961 = FACE_OUTER_BOUND ( 'NONE', #24795, .T. ) ; +#10962 = PLANE ( 'NONE', #40492 ) ; +#10963 = VERTEX_POINT ( 'NONE', #23487 ) ; +#10964 = ORIENTED_EDGE ( 'NONE', *, *, #8901, .F. ) ; +#10965 = VECTOR ( 'NONE', #2129, 1000.000000000000000 ) ; +#10966 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15832 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37094, #14500, #4472 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10967 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10866, 'distance_accuracy_value', 'NONE'); +#10968 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10969 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.499998254703832000, -5.049999999999993600 ) ) ; +#10970 = CARTESIAN_POINT ( 'NONE', ( 4.620380236995680800, 0.2799999999999973100, -0.8400000000000000800 ) ) ; +#10971 = SURFACE_STYLE_USAGE ( .BOTH. , #26691 ) ; +#10972 = ADVANCED_FACE ( 'NONE', ( #5305 ), #30567, .F. ) ; +#10973 = AXIS2_PLACEMENT_3D ( 'NONE', #25371, #28993, #6138 ) ; +#10974 = AXIS2_PLACEMENT_3D ( 'NONE', #26708, #32902, #4509 ) ; +#10975 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8813, 'distance_accuracy_value', 'NONE'); +#10977 = EDGE_CURVE ( 'NONE', #25930, #11691, #28533, .T. ) ; +#10976 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8001 ), #10161 ) ; +#10978 = SURFACE_STYLE_FILL_AREA ( #16020 ) ; +#10979 = ORIENTED_EDGE ( 'NONE', *, *, #3893, .F. ) ; +#10980 = SURFACE_STYLE_FILL_AREA ( #31971 ) ; +#10981 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10982 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10983 = ADVANCED_FACE ( 'NONE', ( #38123 ), #16412, .T. ) ; +#10985 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24256 ) ) ; +#10984 = AXIS2_PLACEMENT_3D ( 'NONE', #24683, #5437, #31433 ) ; +#10986 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10987 = AXIS2_PLACEMENT_3D ( 'NONE', #10249, #16218, #16770 ) ; +#10988 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.773004880385254100, -0.7580972011844128200 ) ) ; +#10989 = STYLED_ITEM ( 'NONE', ( #15320 ), #31927 ) ; +#10990 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10991 = ORIENTED_EDGE ( 'NONE', *, *, #2786, .F. ) ; +#10992 = EDGE_LOOP ( 'NONE', ( #34402, #23857, #1039, #18704 ) ) ; +#10993 = PRESENTATION_STYLE_ASSIGNMENT (( #8611 ) ) ; +#10994 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.999998254703822900, -6.600000000000000500 ) ) ; +#10995 = ORIENTED_EDGE ( 'NONE', *, *, #8132, .T. ) ; +#10996 = FACE_OUTER_BOUND ( 'NONE', #25778, .T. ) ; +#10997 = PRESENTATION_STYLE_ASSIGNMENT (( #30117 ) ) ; +#10998 = LINE ( 'NONE', #29715, #2458 ) ; +#10999 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#11000 = SURFACE_STYLE_FILL_AREA ( #18034 ) ; +#11001 = CARTESIAN_POINT ( 'NONE', ( -4.407583426132275100, -1.982581680836083400, -3.595341433092484900 ) ) ; +#11002 = EDGE_LOOP ( 'NONE', ( #14778, #40664, #1673 ) ) ; +#11003 = ORIENTED_EDGE ( 'NONE', *, *, #29641, .T. ) ; +#11004 = ORIENTED_EDGE ( 'NONE', *, *, #36964, .T. ) ; +#11005 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#11006 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11007 = FILL_AREA_STYLE_COLOUR ( '', #10634 ) ; +#11008 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.414176746720224900E-016, -1.000000000000000000 ) ) ; +#11009 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#11010 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#11011 = ORIENTED_EDGE ( 'NONE', *, *, #38261, .F. ) ; +#11012 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11013 = FILL_AREA_STYLE ('',( #33482 ) ) ; +#11014 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 1.468654402296581600E-014, -3.099999999999998800 ) ) ; +#11015 = EDGE_CURVE ( 'NONE', #39156, #27531, #19475, .T. ) ; +#11016 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11017 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36385, 'distance_accuracy_value', 'NONE'); +#11018 = EDGE_CURVE ( 'NONE', #23867, #6260, #18465, .T. ) ; +#11019 = PLANE ( 'NONE', #17003 ) ; +#11020 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11021 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998358800, -4.450000000000000200 ) ) ; +#11022 = SURFACE_STYLE_FILL_AREA ( #37920 ) ; +#11023 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.380001745296130600, -6.031671842700004200 ) ) ; +#11024 = ADVANCED_FACE ( 'NONE', ( #28052 ), #33564, .T. ) ; +#11025 = EDGE_CURVE ( 'NONE', #9026, #16077, #10802, .T. ) ; +#11026 = ORIENTED_EDGE ( 'NONE', *, *, #28841, .T. ) ; +#11027 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11028 = STYLED_ITEM ( 'NONE', ( #36831 ), #16979 ) ; +#11029 = SURFACE_STYLE_USAGE ( .BOTH. , #24325 ) ; +#11030 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#11031 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11032 = SURFACE_SIDE_STYLE ('',( #2744 ) ) ; +#11033 = EDGE_CURVE ( 'NONE', #3435, #40645, #35591, .T. ) ; +#11034 = ORIENTED_EDGE ( 'NONE', *, *, #36071, .F. ) ; +#11035 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11036 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15856 ), #5346 ) ; +#11037 = VERTEX_POINT ( 'NONE', #11181 ) ; +#11038 = SURFACE_STYLE_FILL_AREA ( #20406 ) ; +#11039 = ORIENTED_EDGE ( 'NONE', *, *, #24889, .T. ) ; +#11040 = CIRCLE ( 'NONE', #36377, 0.1000000000000000500 ) ; +#11041 = DIRECTION ( 'NONE', ( 4.336808689942015400E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11042 = STYLED_ITEM ( 'NONE', ( #31979 ), #12683 ) ; +#11043 = SURFACE_STYLE_USAGE ( .BOTH. , #30265 ) ; +#11044 = PRESENTATION_STYLE_ASSIGNMENT (( #41232 ) ) ; +#11045 = FACE_OUTER_BOUND ( 'NONE', #7090, .T. ) ; +#11046 = SURFACE_STYLE_FILL_AREA ( #36142 ) ; +#11048 = EDGE_CURVE ( 'NONE', #34228, #34169, #39617, .T. ) ; +#11047 = AXIS2_PLACEMENT_3D ( 'NONE', #2039, #1471, #4824 ) ; +#11049 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11050 = VERTEX_POINT ( 'NONE', #40402 ) ; +#11051 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#11052 = ORIENTED_EDGE ( 'NONE', *, *, #26447, .F. ) ; +#11053 = ORIENTED_EDGE ( 'NONE', *, *, #23592, .F. ) ; +#11054 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000005300, 1.298332101551391600E-014, -4.549999999999999800 ) ) ; +#11055 = STYLED_ITEM ( 'NONE', ( #16949 ), #27971 ) ; +#11056 = AXIS2_PLACEMENT_3D ( 'NONE', #29460, #39205, #7001 ) ; +#11057 = SURFACE_STYLE_USAGE ( .BOTH. , #20567 ) ; +#11058 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12402 ), #9427 ) ; +#11059 = ORIENTED_EDGE ( 'NONE', *, *, #31221, .T. ) ; +#11060 = PRESENTATION_STYLE_ASSIGNMENT (( #7136 ) ) ; +#11061 = STYLED_ITEM ( 'NONE', ( #21415 ), #8276 ) ; +#11062 = LINE ( 'NONE', #3815, #19241 ) ; +#11063 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.630001745296168800, -4.200000000000000200 ) ) ; +#11064 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.380001745296165900, -1.899999999999999700 ) ) ; +#11065 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #513, 'distance_accuracy_value', 'NONE'); +#11066 = VECTOR ( 'NONE', #12905, 1000.000000000000000 ) ; +#11067 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11068 = DIRECTION ( 'NONE', ( -6.776263578034402700E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11069 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.2800017452961688400, -5.250000000000000000 ) ) ; +#11070 = SURFACE_SIDE_STYLE ('',( #19413 ) ) ; +#11071 = ORIENTED_EDGE ( 'NONE', *, *, #11751, .T. ) ; +#11072 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#11073 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, -0.2799999999999974200, 0.0000000000000000000 ) ) ; +#11074 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#11075 = ADVANCED_FACE ( 'NONE', ( #17413 ), #34086, .T. ) ; +#11076 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11077 = ORIENTED_EDGE ( 'NONE', *, *, #32418, .T. ) ; +#11078 = PRESENTATION_STYLE_ASSIGNMENT (( #15724 ) ) ; +#11079 = ORIENTED_EDGE ( 'NONE', *, *, #3443, .F. ) ; +#11080 = VECTOR ( 'NONE', #707, 1000.000000000000000 ) ; +#11081 = SURFACE_STYLE_USAGE ( .BOTH. , #4599 ) ; +#11082 = CIRCLE ( 'NONE', #30418, 0.1000000000000000500 ) ; +#11083 = CARTESIAN_POINT ( 'NONE', ( 3.429999999999999700, -1.139998254717349300, -6.299996877890552400 ) ) ; +#11084 = PRESENTATION_STYLE_ASSIGNMENT (( #8248 ) ) ; +#11085 = ORIENTED_EDGE ( 'NONE', *, *, #30143, .F. ) ; +#11086 = ORIENTED_EDGE ( 'NONE', *, *, #35161, .F. ) ; +#11087 = ORIENTED_EDGE ( 'NONE', *, *, #30394, .F. ) ; +#11088 = EDGE_CURVE ( 'NONE', #12030, #4564, #16900, .T. ) ; +#11089 = CARTESIAN_POINT ( 'NONE', ( 2.995000000007500300, 0.3499999999999999800, -1.400000000000000100 ) ) ; +#11090 = FILL_AREA_STYLE ('',( #36810 ) ) ; +#11091 = EDGE_CURVE ( 'NONE', #7393, #41198, #4244, .T. ) ; +#11092 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11093 = VERTEX_POINT ( 'NONE', #8060 ) ; +#11094 = VECTOR ( 'NONE', #12938, 1000.000000000000000 ) ; +#11095 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27881 ), #16242 ) ; +#11096 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#11097 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11098 = AXIS2_PLACEMENT_3D ( 'NONE', #36938, #30581, #1523 ) ; +#11099 = LINE ( 'NONE', #7366, #21271 ) ; +#11100 = FILL_AREA_STYLE ('',( #10687 ) ) ; +#11101 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23588 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6385, #32635, #13407 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11102 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11104 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3522 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27233, #7855, #7437 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11103 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18999 ) ) ; +#11105 = VERTEX_POINT ( 'NONE', #37586 ) ; +#11106 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#11108 = EDGE_CURVE ( 'NONE', #27685, #32468, #3985, .T. ) ; +#11107 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32202 ) ) ; +#11109 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11110 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, 0.0000000000000000000 ) ) ; +#11111 = SURFACE_STYLE_FILL_AREA ( #33918 ) ; +#11112 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.139998254717359900, -6.299996877890552400 ) ) ; +#11113 = VERTEX_POINT ( 'NONE', #27042 ) ; +#11114 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10967 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10866, #4384, #14554 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11115 = ORIENTED_EDGE ( 'NONE', *, *, #6461, .T. ) ; +#11116 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33294 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26090, #12793, #16346 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11117 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.180001745296165300, -7.300000000000000700 ) ) ; +#11118 = LINE ( 'NONE', #26235, #10581 ) ; +#11119 = ORIENTED_EDGE ( 'NONE', *, *, #32430, .T. ) ; +#11120 = VERTEX_POINT ( 'NONE', #21385 ) ; +#11121 = ORIENTED_EDGE ( 'NONE', *, *, #7822, .T. ) ; +#11122 = SURFACE_STYLE_USAGE ( .BOTH. , #20649 ) ; +#11124 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#11123 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11125 = FILL_AREA_STYLE_COLOUR ( '', #20379 ) ; +#11126 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#11127 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18669, 'distance_accuracy_value', 'NONE'); +#11128 = FILL_AREA_STYLE_COLOUR ( '', #378 ) ; +#11129 = VERTEX_POINT ( 'NONE', #27998 ) ; +#11130 = CARTESIAN_POINT ( 'NONE', ( -4.856063034915695900, -0.2799999999999974200, -0.6228541982233617400 ) ) ; +#11131 = LINE ( 'NONE', #5173, #30843 ) ; +#11132 = FILL_AREA_STYLE_COLOUR ( '', #6893 ) ; +#11133 = CARTESIAN_POINT ( 'NONE', ( -17.14169132166999900, 0.2999999999999999900, -1.649999999999999900 ) ) ; +#11134 = EDGE_CURVE ( 'NONE', #23035, #6625, #5761, .T. ) ; +#11135 = CIRCLE ( 'NONE', #2247, 0.1999999999999996500 ) ; +#11136 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11137 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28783, 'distance_accuracy_value', 'NONE'); +#11138 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -4.840188270024573500E-017 ) ) ; +#11139 = ADVANCED_FACE ( 'NONE', ( #19436 ), #40976, .T. ) ; +#11140 = SURFACE_SIDE_STYLE ('',( #19972 ) ) ; +#11141 = EDGE_CURVE ( 'NONE', #36619, #38900, #24502, .T. ) ; +#11142 = AXIS2_PLACEMENT_3D ( 'NONE', #41878, #3333, #10657 ) ; +#11143 = ORIENTED_EDGE ( 'NONE', *, *, #27808, .F. ) ; +#11144 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11145 = SURFACE_STYLE_USAGE ( .BOTH. , #30650 ) ; +#11146 = ORIENTED_EDGE ( 'NONE', *, *, #38053, .T. ) ; +#11147 = SURFACE_STYLE_FILL_AREA ( #26798 ) ; +#11148 = VERTEX_POINT ( 'NONE', #11455 ) ; +#11149 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11150 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#11151 = STYLED_ITEM ( 'NONE', ( #33685 ), #14999 ) ; +#11152 = PRESENTATION_STYLE_ASSIGNMENT (( #7399 ) ) ; +#11153 = PLANE ( 'NONE', #6771 ) ; +#11154 = FILL_AREA_STYLE ('',( #20819 ) ) ; +#11155 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#11156 = VERTEX_POINT ( 'NONE', #11734 ) ; +#11157 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37950 ), #3852 ) ; +#11158 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11159 = ORIENTED_EDGE ( 'NONE', *, *, #29215, .F. ) ; +#11160 = VERTEX_POINT ( 'NONE', #11592 ) ; +#11161 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20425 ) ) ; +#11162 = CARTESIAN_POINT ( 'NONE', ( -2.573205080756887100, 1.630001745296169500, -1.650000000000000400 ) ) ; +#11165 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6829 ), #12510 ) ; +#11164 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#11163 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32821 ), #36601 ) ; +#11166 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11167 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11168 = DIRECTION ( 'NONE', ( -5.916456789157588500E-031, -1.000000000000000000, 2.367138801244518800E-016 ) ) ; +#11169 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11171 = EDGE_CURVE ( 'NONE', #21944, #7098, #22139, .T. ) ; +#11170 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8630 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25479, #28963, #18982 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11172 = ORIENTED_EDGE ( 'NONE', *, *, #19665, .T. ) ; +#11173 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11174 = ORIENTED_EDGE ( 'NONE', *, *, #9644, .F. ) ; +#11175 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, 0.2336906316634773100, -1.600000000000000800 ) ) ; +#11176 = FACE_OUTER_BOUND ( 'NONE', #13909, .T. ) ; +#11177 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11178 = PRESENTATION_STYLE_ASSIGNMENT (( #31846 ) ) ; +#11179 = SURFACE_STYLE_USAGE ( .BOTH. , #7922 ) ; +#11180 = SURFACE_STYLE_USAGE ( .BOTH. , #27997 ) ; +#11181 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#11182 = ADVANCED_FACE ( 'NONE', ( #33070 ), #18405, .F. ) ; +#11183 = DIRECTION ( 'NONE', ( 6.776263578034402700E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11184 = ORIENTED_EDGE ( 'NONE', *, *, #20968, .T. ) ; +#11185 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, 0.0000000000000000000 ) ) ; +#11186 = FACE_OUTER_BOUND ( 'NONE', #9470, .T. ) ; +#11187 = PRESENTATION_STYLE_ASSIGNMENT (( #8021 ) ) ; +#11188 = DIRECTION ( 'NONE', ( -3.281909278875039200E-015, -1.000000000000000000, 1.008560160451628400E-016 ) ) ; +#11189 = SURFACE_SIDE_STYLE ('',( #40845 ) ) ; +#11190 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6452, 'distance_accuracy_value', 'NONE'); +#11191 = ORIENTED_EDGE ( 'NONE', *, *, #38599, .T. ) ; +#11192 = LINE ( 'NONE', #1190, #34962 ) ; +#11193 = ADVANCED_FACE ( 'NONE', ( #18390 ), #4204, .F. ) ; +#11194 = FILL_AREA_STYLE ('',( #1644 ) ) ; +#11195 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11196 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11197 = ORIENTED_EDGE ( 'NONE', *, *, #17551, .F. ) ; +#11198 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.8500017452961653500, -5.575000000000001100 ) ) ; +#11199 = FILL_AREA_STYLE ('',( #17735 ) ) ; +#11200 = EDGE_CURVE ( 'NONE', #971, #40751, #29990, .T. ) ; +#11201 = EDGE_CURVE ( 'NONE', #3462, #30038, #9254, .T. ) ; +#11202 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11203 = VERTEX_POINT ( 'NONE', #22345 ) ; +#11204 = PRESENTATION_STYLE_ASSIGNMENT (( #1534 ) ) ; +#11205 = ORIENTED_EDGE ( 'NONE', *, *, #32741, .T. ) ; +#11206 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0002094395087002863100, -0.9999999780675458100 ) ) ; +#11207 = VECTOR ( 'NONE', #14815, 1000.000000000000000 ) ; +#11208 = STYLED_ITEM ( 'NONE', ( #26909 ), #15834 ) ; +#11209 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11210 = FILL_AREA_STYLE_COLOUR ( '', #33336 ) ; +#11211 = SURFACE_SIDE_STYLE ('',( #4532 ) ) ; +#11212 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11213 = AXIS2_PLACEMENT_3D ( 'NONE', #23387, #32983, #40015 ) ; +#11214 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11215 = CARTESIAN_POINT ( 'NONE', ( -4.942930275675570900, -1.400001745296164400, -6.604773278320842600 ) ) ; +#11216 = STYLED_ITEM ( 'NONE', ( #24236 ), #6744 ) ; +#11217 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.2800017452961688400, -5.250000000000000000 ) ) ; +#11218 = ORIENTED_EDGE ( 'NONE', *, *, #13421, .T. ) ; +#11221 = EDGE_CURVE ( 'NONE', #13558, #36021, #19043, .T. ) ; +#11220 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, -1.000000000000000000, -1.807003620809177300E-016 ) ) ; +#11219 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31532 ), #20753 ) ; +#11222 = ADVANCED_FACE ( 'NONE', ( #37563 ), #15960, .F. ) ; +#11223 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#11224 = ORIENTED_EDGE ( 'NONE', *, *, #37390, .T. ) ; +#11225 = AXIS2_PLACEMENT_3D ( 'NONE', #12795, #25418, #41355 ) ; +#11226 = CARTESIAN_POINT ( 'NONE', ( 4.070001745296171900, -0.2800000000000026400, -4.099999999999999600 ) ) ; +#11227 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4756 ), #22093 ) ; +#11228 = ORIENTED_EDGE ( 'NONE', *, *, #21577, .T. ) ; +#11229 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#11230 = DIRECTION ( 'NONE', ( 7.744301232039317900E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11231 = LINE ( 'NONE', #36967, #24394 ) ; +#11232 = AXIS2_PLACEMENT_3D ( 'NONE', #12322, #34943, #15588 ) ; +#11233 = ORIENTED_EDGE ( 'NONE', *, *, #2413, .T. ) ; +#11234 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.499998254703822000, -5.449999999999994000 ) ) ; +#11235 = CARTESIAN_POINT ( 'NONE', ( 3.138129219828456100, 0.07500000000000001100, -0.07549520480363226800 ) ) ; +#11237 = ORIENTED_EDGE ( 'NONE', *, *, #10610, .T. ) ; +#11236 = SURFACE_STYLE_FILL_AREA ( #12753 ) ; +#11238 = ORIENTED_EDGE ( 'NONE', *, *, #14559, .F. ) ; +#11239 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11240 = LINE ( 'NONE', #24467, #28432 ) ; +#11241 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000000000, 1.480001745296169100, -3.999999999999998200 ) ) ; +#11242 = ORIENTED_EDGE ( 'NONE', *, *, #14266, .T. ) ; +#11243 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#11244 = PLANE ( 'NONE', #29232 ) ; +#11245 = FILL_AREA_STYLE ('',( #31014 ) ) ; +#11246 = ORIENTED_EDGE ( 'NONE', *, *, #27830, .T. ) ; +#11247 = LINE ( 'NONE', #25958, #40062 ) ; +#11248 = VECTOR ( 'NONE', #25336, 1000.000000000000000 ) ; +#11249 = SURFACE_SIDE_STYLE ('',( #30083 ) ) ; +#11250 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11251 = VECTOR ( 'NONE', #29786, 1000.000000000000000 ) ; +#11252 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38616, 'distance_accuracy_value', 'NONE'); +#11253 = SURFACE_STYLE_FILL_AREA ( #31007 ) ; +#11254 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#11255 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#11256 = LINE ( 'NONE', #12670, #29994 ) ; +#11257 = SURFACE_STYLE_USAGE ( .BOTH. , #27376 ) ; +#11258 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11259 = EDGE_CURVE ( 'NONE', #3655, #37393, #22424, .T. ) ; +#11260 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7412, 'distance_accuracy_value', 'NONE'); +#11261 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11262 = EDGE_CURVE ( 'NONE', #6706, #38639, #26477, .T. ) ; +#11263 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11264 = ORIENTED_EDGE ( 'NONE', *, *, #38047, .F. ) ; +#11265 = STYLED_ITEM ( 'NONE', ( #15231 ), #16508 ) ; +#11266 = PRESENTATION_STYLE_ASSIGNMENT (( #8296 ) ) ; +#11267 = FACE_OUTER_BOUND ( 'NONE', #22759, .T. ) ; +#11268 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#11269 = ORIENTED_EDGE ( 'NONE', *, *, #12079, .T. ) ; +#11270 = STYLED_ITEM ( 'NONE', ( #1255 ), #20978 ) ; +#11271 = ADVANCED_FACE ( 'NONE', ( #20423 ), #15422, .F. ) ; +#11272 = VERTEX_POINT ( 'NONE', #19240 ) ; +#11273 = ORIENTED_EDGE ( 'NONE', *, *, #35506, .T. ) ; +#11274 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11275 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11276 = ORIENTED_EDGE ( 'NONE', *, *, #17172, .F. ) ; +#11277 = VECTOR ( 'NONE', #20121, 1000.000000000000000 ) ; +#11278 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9897 ), #9660 ) ; +#11280 = EDGE_CURVE ( 'NONE', #9357, #30703, #14833, .T. ) ; +#11279 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41637 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21076, #14817, #1722 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11281 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11282 = SURFACE_STYLE_USAGE ( .BOTH. , #18100 ) ; +#11283 = CYLINDRICAL_SURFACE ( 'NONE', #39671, 0.2000000000000000900 ) ; +#11284 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#11285 = PRESENTATION_STYLE_ASSIGNMENT (( #31224 ) ) ; +#11286 = ORIENTED_EDGE ( 'NONE', *, *, #3203, .T. ) ; +#11287 = SURFACE_SIDE_STYLE ('',( #29296 ) ) ; +#11289 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12434 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18394, #40958, #5516 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11288 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39444 ), #19996 ) ; +#11290 = VECTOR ( 'NONE', #13469, 1000.000000000000000 ) ; +#11291 = SURFACE_STYLE_FILL_AREA ( #3558 ) ; +#11292 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8415 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33244, #17721, #1089 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11293 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11294 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38088 ) ) ; +#11295 = FILL_AREA_STYLE_COLOUR ( '', #14031 ) ; +#11296 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11297 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32788, 'distance_accuracy_value', 'NONE'); +#11298 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.4300017452961686900, -6.150000000000000400 ) ) ; +#11299 = PRESENTATION_STYLE_ASSIGNMENT (( #34734 ) ) ; +#11300 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11301 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#11302 = FILL_AREA_STYLE ('',( #1897 ) ) ; +#11303 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.380001745296138200, -4.781671842700004200 ) ) ; +#11304 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11305 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#11306 = ORIENTED_EDGE ( 'NONE', *, *, #24540, .F. ) ; +#11307 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.773004880385254100, -0.7580972011844128200 ) ) ; +#11308 = ORIENTED_EDGE ( 'NONE', *, *, #4285, .T. ) ; +#11309 = ORIENTED_EDGE ( 'NONE', *, *, #3963, .T. ) ; +#11311 = ORIENTED_EDGE ( 'NONE', *, *, #14586, .T. ) ; +#11310 = VECTOR ( 'NONE', #3696, 1000.000000000000000 ) ; +#11312 = ORIENTED_EDGE ( 'NONE', *, *, #38972, .F. ) ; +#11313 = PRESENTATION_STYLE_ASSIGNMENT (( #8518 ) ) ; +#11314 = SURFACE_STYLE_FILL_AREA ( #33588 ) ; +#11315 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11316 = FACE_OUTER_BOUND ( 'NONE', #19829, .T. ) ; +#11317 = EDGE_CURVE ( 'NONE', #30235, #15022, #31495, .T. ) ; +#11318 = FILL_AREA_STYLE_COLOUR ( '', #27511 ) ; +#11319 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998358800, -4.450000000000000200 ) ) ; +#11320 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#11321 = CARTESIAN_POINT ( 'NONE', ( 3.458233997336492400, 1.005153670744121500, -4.400000000000001200 ) ) ; +#11322 = STYLED_ITEM ( 'NONE', ( #10387 ), #17789 ) ; +#11323 = EDGE_LOOP ( 'NONE', ( #12178, #9238, #7460, #18304 ) ) ; +#11324 = CARTESIAN_POINT ( 'NONE', ( 4.692207176641545600, -1.300001745296165400, -6.526326723416073800 ) ) ; +#11325 = EDGE_CURVE ( 'NONE', #18606, #27353, #22385, .T. ) ; +#11326 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -6.900000000000000400 ) ) ; +#11327 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.139998254717355100, -6.299996877890552400 ) ) ; +#11328 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -1.499998254703836900, -5.049999999999993600 ) ) ; +#11329 = STYLED_ITEM ( 'NONE', ( #34589 ), #22200 ) ; +#11330 = VECTOR ( 'NONE', #11559, 1000.000000000000000 ) ; +#11331 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30087 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38912, #25939, #9938 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11332 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.9500017452961654300, -4.775000000000000400 ) ) ; +#11333 = ORIENTED_EDGE ( 'NONE', *, *, #8935, .T. ) ; +#11336 = EDGE_CURVE ( 'NONE', #8269, #18991, #23919, .T. ) ; +#11335 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3252 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36266, #29750, #39760 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11334 = SURFACE_STYLE_USAGE ( .BOTH. , #33820 ) ; +#11337 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, 0.4300017452961685800, -6.850000000000000500 ) ) ; +#11338 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000800, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#11339 = ORIENTED_EDGE ( 'NONE', *, *, #40142, .T. ) ; +#11340 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #34462, #21358, #37975, #12108 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 1.570796326794856100, 4.712388980384648800 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.3333333333333335400, 0.3333333333333335400, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#11341 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#11342 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11343 = ADVANCED_FACE ( 'NONE', ( #17371 ), #15893, .F. ) ; +#11344 = EDGE_LOOP ( 'NONE', ( #40823, #18197 ) ) ; +#11346 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18689 ), #13520 ) ; +#11345 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29482 ) ) ; +#11347 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -1.380001745296130000, -4.781671842700004200 ) ) ; +#11348 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11349 = PRESENTATION_STYLE_ASSIGNMENT (( #10956 ) ) ; +#11350 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20879 ), #40870 ) ; +#11351 = VECTOR ( 'NONE', #19255, 1000.000000000000000 ) ; +#11352 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11354 = STYLED_ITEM ( 'NONE', ( #39858 ), #9669 ) ; +#11353 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29486 ), #14108 ) ; +#11355 = EDGE_LOOP ( 'NONE', ( #21419, #35124, #37720, #805 ) ) ; +#11357 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30558 ), #35452 ) ; +#11356 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11358 = LINE ( 'NONE', #41560, #39148 ) ; +#11359 = EDGE_LOOP ( 'NONE', ( #5448, #19632, #2255, #40920 ) ) ; +#11360 = SURFACE_STYLE_FILL_AREA ( #4210 ) ; +#11361 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, -2.322941965694886000, -1.250000000000000000 ) ) ; +#11362 = FACE_OUTER_BOUND ( 'NONE', #3206, .T. ) ; +#11363 = PRESENTATION_STYLE_ASSIGNMENT (( #5694 ) ) ; +#11364 = ORIENTED_EDGE ( 'NONE', *, *, #26133, .F. ) ; +#11365 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865475700, 0.7071067811865475700 ) ) ; +#11366 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#11367 = LINE ( 'NONE', #36345, #23012 ) ; +#11368 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -3.204459358809380800 ) ) ; +#11369 = SURFACE_STYLE_USAGE ( .BOTH. , #33983 ) ; +#11370 = ORIENTED_EDGE ( 'NONE', *, *, #11108, .F. ) ; +#11371 = CARTESIAN_POINT ( 'NONE', ( -3.178333333333019300, -0.07499999999999998300, -0.06128090415826408600 ) ) ; +#11372 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.139998254717365900, -5.049996877890552400 ) ) ; +#11373 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#11374 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11375 = ORIENTED_EDGE ( 'NONE', *, *, #14141, .F. ) ; +#11376 = FILL_AREA_STYLE_COLOUR ( '', #17061 ) ; +#11377 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521965300E-031 ) ) ; +#11378 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11379 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, -0.3500000000000000300, 0.6999999999999999600 ) ) ; +#11380 = ADVANCED_FACE ( 'NONE', ( #23393 ), #9206, .F. ) ; +#11381 = EDGE_CURVE ( 'NONE', #11802, #33357, #8203, .T. ) ; +#11382 = SURFACE_STYLE_FILL_AREA ( #13004 ) ; +#11383 = LINE ( 'NONE', #8624, #8337 ) ; +#11384 = DIRECTION ( 'NONE', ( -2.890297565655449600E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11385 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -2.299999999999999400 ) ) ; +#11386 = EDGE_CURVE ( 'NONE', #28272, #10056, #18867, .T. ) ; +#11387 = VECTOR ( 'NONE', #5398, 1000.000000000000000 ) ; +#11388 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27873 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9108, #8699, #31734 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11389 = STYLED_ITEM ( 'NONE', ( #18320 ), #22832 ) ; +#11390 = EDGE_LOOP ( 'NONE', ( #20295, #1606, #12806 ) ) ; +#11391 = VERTEX_POINT ( 'NONE', #35468 ) ; +#11392 = ORIENTED_EDGE ( 'NONE', *, *, #15366, .T. ) ; +#11393 = ADVANCED_FACE ( 'NONE', ( #214 ), #16384, .F. ) ; +#11394 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38735 ), #38187 ) ; +#11395 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11396 = DIRECTION ( 'NONE', ( 1.575776934994679200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11397 = SURFACE_STYLE_FILL_AREA ( #31021 ) ; +#11398 = VECTOR ( 'NONE', #7375, 1000.000000000000000 ) ; +#11399 = LINE ( 'NONE', #13645, #6360 ) ; +#11400 = VECTOR ( 'NONE', #27982, 1000.000000000000000 ) ; +#11401 = SURFACE_SIDE_STYLE ('',( #13452 ) ) ; +#11402 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23858 ), #30354 ) ; +#11403 = PRESENTATION_STYLE_ASSIGNMENT (( #12871 ) ) ; +#11404 = ORIENTED_EDGE ( 'NONE', *, *, #37562, .T. ) ; +#11405 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12098 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33302, #13663, #36823 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11406 = PRESENTATION_STYLE_ASSIGNMENT (( #40689 ) ) ; +#11407 = LINE ( 'NONE', #9929, #18009 ) ; +#11409 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20933 ), #36062 ) ; +#11408 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12345 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30003, #29589, #23097 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11410 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#11411 = VERTEX_POINT ( 'NONE', #13126 ) ; +#11412 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2000000000000000400, 1.149999999999999900 ) ) ; +#11413 = VECTOR ( 'NONE', #37348, 1000.000000000000000 ) ; +#11415 = EDGE_CURVE ( 'NONE', #8483, #10284, #20919, .T. ) ; +#11414 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11416 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#11417 = FILL_AREA_STYLE_COLOUR ( '', #1658 ) ; +#11418 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, 2.322941965694886000, -1.250000000000000000 ) ) ; +#11419 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11421 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19185 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31567, #19160, #3052 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11420 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17146 ), #35269 ) ; +#11422 = CARTESIAN_POINT ( 'NONE', ( 3.325012795576618400, 0.3282168317299801700, -1.600000000000000800 ) ) ; +#11423 = CYLINDRICAL_SURFACE ( 'NONE', #30118, 0.1999999999999996500 ) ; +#11424 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -2.594459358809384500 ) ) ; +#11425 = PRESENTATION_STYLE_ASSIGNMENT (( #17287 ) ) ; +#11426 = DIRECTION ( 'NONE', ( -2.367138801244516300E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#11427 = ORIENTED_EDGE ( 'NONE', *, *, #17860, .F. ) ; +#11428 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15651, 'distance_accuracy_value', 'NONE'); +#11429 = FILL_AREA_STYLE ('',( #8035 ) ) ; +#11430 = VERTEX_POINT ( 'NONE', #36446 ) ; +#11431 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875040400E-015, -6.056601140521968800E-031 ) ) ; +#11432 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11433 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11434 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11435 = ADVANCED_FACE ( 'NONE', ( #7735 ), #8850, .F. ) ; +#11436 = DIRECTION ( 'NONE', ( -5.916456789157588500E-031, -1.000000000000000000, 2.367138801244518800E-016 ) ) ; +#11437 = ORIENTED_EDGE ( 'NONE', *, *, #38299, .F. ) ; +#11438 = ORIENTED_EDGE ( 'NONE', *, *, #27617, .F. ) ; +#11439 = ORIENTED_EDGE ( 'NONE', *, *, #27507, .T. ) ; +#11440 = VECTOR ( 'NONE', #19104, 1000.000000000000000 ) ; +#11441 = SURFACE_SIDE_STYLE ('',( #10689 ) ) ; +#11442 = DIRECTION ( 'NONE', ( 2.891200186627333000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11443 = CARTESIAN_POINT ( 'NONE', ( -3.111851510618836200, 0.07499999999999999700, -0.2202296999669085300 ) ) ; +#11444 = SURFACE_STYLE_FILL_AREA ( #31435 ) ; +#11445 = ORIENTED_EDGE ( 'NONE', *, *, #33672, .T. ) ; +#11446 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.380001745296126600, -6.031671842700004200 ) ) ; +#11447 = ORIENTED_EDGE ( 'NONE', *, *, #29330, .T. ) ; +#11448 = EDGE_CURVE ( 'NONE', #16131, #18288, #40754, .T. ) ; +#11449 = SURFACE_SIDE_STYLE ('',( #19430 ) ) ; +#11450 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11451 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11452 = EDGE_CURVE ( 'NONE', #853, #31990, #41602, .T. ) ; +#11453 = AXIS2_PLACEMENT_3D ( 'NONE', #33931, #30404, #33380 ) ; +#11454 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, 0.6780706550913999700 ) ) ; +#11455 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.380001745296128200, -5.449999999999994000 ) ) ; +#11456 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -3.410973126920707600E-015, 1.000000000000000000 ) ) ; +#11457 = SURFACE_STYLE_FILL_AREA ( #37739 ) ; +#11458 = AXIS2_PLACEMENT_3D ( 'NONE', #24300, #14967, #27539 ) ; +#11459 = SURFACE_STYLE_FILL_AREA ( #17619 ) ; +#11460 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26150, 'distance_accuracy_value', 'NONE'); +#11461 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11462 = ORIENTED_EDGE ( 'NONE', *, *, #40527, .T. ) ; +#11463 = STYLED_ITEM ( 'NONE', ( #8791 ), #31562 ) ; +#11464 = CARTESIAN_POINT ( 'NONE', ( 4.465000000000003400, -0.01999825470383237400, -6.526326723416069300 ) ) ; +#11465 = DIRECTION ( 'NONE', ( 3.855870243489082900E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11466 = CARTESIAN_POINT ( 'NONE', ( 3.204109336335062300, -0.5049350729205541700, -1.834897218411856400 ) ) ; +#11468 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41247 ), #28258 ) ; +#11467 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24496 ), #15804 ) ; +#11469 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11470 = VERTEX_POINT ( 'NONE', #29653 ) ; +#11471 = ORIENTED_EDGE ( 'NONE', *, *, #29269, .T. ) ; +#11472 = LINE ( 'NONE', #36064, #37262 ) ; +#11474 = EDGE_CURVE ( 'NONE', #26750, #18568, #25629, .T. ) ; +#11473 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23118 ), #3369 ) ; +#11475 = PRESENTATION_STYLE_ASSIGNMENT (( #28530 ) ) ; +#11476 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#11477 = SURFACE_SIDE_STYLE ('',( #15336 ) ) ; +#11478 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11479 = ORIENTED_EDGE ( 'NONE', *, *, #7803, .F. ) ; +#11480 = VERTEX_POINT ( 'NONE', #17094 ) ; +#11481 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11483 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36145 ) ) ; +#11482 = AXIS2_PLACEMENT_3D ( 'NONE', #30073, #10711, #36572 ) ; +#11485 = SURFACE_STYLE_FILL_AREA ( #27485 ) ; +#11484 = AXIS2_PLACEMENT_3D ( 'NONE', #4565, #7793, #1763 ) ; +#11486 = SURFACE_STYLE_USAGE ( .BOTH. , #2355 ) ; +#11487 = SURFACE_SIDE_STYLE ('',( #16917 ) ) ; +#11488 = PRESENTATION_STYLE_ASSIGNMENT (( #21163 ) ) ; +#11489 = EDGE_LOOP ( 'NONE', ( #11462, #5196, #28338, #6314 ) ) ; +#11490 = VECTOR ( 'NONE', #1652, 1000.000000000000000 ) ; +#11491 = ORIENTED_EDGE ( 'NONE', *, *, #20856, .T. ) ; +#11492 = ADVANCED_FACE ( 'NONE', ( #3849 ), #4083, .F. ) ; +#11493 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#11494 = FILL_AREA_STYLE ('',( #21844 ) ) ; +#11495 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 3.307718258760844200E-015 ) ) ; +#11496 = LINE ( 'NONE', #20345, #36290 ) ; +#11497 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11498 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9449, 'distance_accuracy_value', 'NONE'); +#11499 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.548860246407863600E-016 ) ) ; +#11500 = ORIENTED_EDGE ( 'NONE', *, *, #30334, .F. ) ; +#11501 = FILL_AREA_STYLE_COLOUR ( '', #10938 ) ; +#11502 = LINE ( 'NONE', #40271, #39785 ) ; +#11503 = CARTESIAN_POINT ( 'NONE', ( -1.400000000000000800, 1.480001745296169600, -1.650000000000000400 ) ) ; +#11504 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11505 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11506 = EDGE_CURVE ( 'NONE', #28278, #36115, #30166, .T. ) ; +#11507 = VERTEX_POINT ( 'NONE', #16945 ) ; +#11508 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11509 = EDGE_CURVE ( 'NONE', #17640, #39566, #34718, .T. ) ; +#11510 = EDGE_LOOP ( 'NONE', ( #1654, #27723, #1594, #18247 ) ) ; +#11511 = SURFACE_STYLE_USAGE ( .BOTH. , #8257 ) ; +#11512 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11513 = LINE ( 'NONE', #36107, #38303 ) ; +#11514 = EDGE_LOOP ( 'NONE', ( #31789, #14063, #999, #16332 ) ) ; +#11515 = ORIENTED_EDGE ( 'NONE', *, *, #31001, .F. ) ; +#11516 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11517 = ORIENTED_EDGE ( 'NONE', *, *, #2786, .T. ) ; +#11518 = DIRECTION ( 'NONE', ( 0.7071067811865490200, 0.7071067811865460200, -4.282663737405283500E-031 ) ) ; +#11519 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38858 ) ) ; +#11520 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#11521 = LINE ( 'NONE', #22510, #12036 ) ; +#11522 = SURFACE_STYLE_FILL_AREA ( #7281 ) ; +#11523 = CIRCLE ( 'NONE', #12379, 0.04999999999999991300 ) ; +#11524 = CARTESIAN_POINT ( 'NONE', ( 4.748858409427525000, -1.400001745296164800, -7.173853277175704000 ) ) ; +#11525 = VERTEX_POINT ( 'NONE', #20501 ) ; +#11526 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.630424214906979600, -1.149999999999999900 ) ) ; +#11527 = ORIENTED_EDGE ( 'NONE', *, *, #8044, .T. ) ; +#11528 = ORIENTED_EDGE ( 'NONE', *, *, #5834, .F. ) ; +#11529 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22379 ), #15618 ) ; +#11530 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34810 ), #23737 ) ; +#11531 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11532 = SURFACE_STYLE_USAGE ( .BOTH. , #40341 ) ; +#11534 = EDGE_CURVE ( 'NONE', #39725, #18968, #26123, .T. ) ; +#11533 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2920 ) ) ; +#11535 = CARTESIAN_POINT ( 'NONE', ( -4.926985231857519100, -0.01999825470386319300, -6.606168288894343400 ) ) ; +#11536 = ORIENTED_EDGE ( 'NONE', *, *, #2066, .F. ) ; +#11537 = CIRCLE ( 'NONE', #10046, 0.1000000000000004800 ) ; +#11538 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, 0.07499999999999998300, -1.399999999963500000 ) ) ; +#11539 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11541 = STYLED_ITEM ( 'NONE', ( #12851 ), #2585 ) ; +#11540 = AXIS2_PLACEMENT_3D ( 'NONE', #31692, #28039, #34533 ) ; +#11542 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11543 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11544 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36933 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9084, #19165, #38602 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11545 = AXIS2_PLACEMENT_3D ( 'NONE', #14663, #37527, #1559 ) ; +#11546 = STYLED_ITEM ( 'NONE', ( #32181 ), #7542 ) ; +#11547 = CARTESIAN_POINT ( 'NONE', ( -2.995000000010000600, 0.3500000000000000300, -1.300000000000000000 ) ) ; +#11548 = EDGE_LOOP ( 'NONE', ( #26842, #15744, #22280 ) ) ; +#11549 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35985, 'distance_accuracy_value', 'NONE'); +#11550 = LINE ( 'NONE', #24520, #34835 ) ; +#11551 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11552 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11553 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11554 = ORIENTED_EDGE ( 'NONE', *, *, #20305, .F. ) ; +#11555 = FILL_AREA_STYLE_COLOUR ( '', #6726 ) ; +#11556 = SURFACE_STYLE_USAGE ( .BOTH. , #2156 ) ; +#11557 = VERTEX_POINT ( 'NONE', #23578 ) ; +#11558 = ADVANCED_FACE ( 'NONE', ( #10946 ), #19585, .F. ) ; +#11559 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#11560 = FACE_OUTER_BOUND ( 'NONE', #16123, .T. ) ; +#11561 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#11562 = ORIENTED_EDGE ( 'NONE', *, *, #15130, .T. ) ; +#11563 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.931303021499040500, -0.3590461068823621000 ) ) ; +#11564 = VERTEX_POINT ( 'NONE', #17932 ) ; +#11565 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11566 = EDGE_CURVE ( 'NONE', #15710, #39725, #8904, .T. ) ; +#11567 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -3.204459358809384400 ) ) ; +#11568 = ORIENTED_EDGE ( 'NONE', *, *, #34593, .T. ) ; +#11569 = PRESENTATION_STYLE_ASSIGNMENT (( #29454 ) ) ; +#11570 = EDGE_CURVE ( 'NONE', #33744, #21094, #11944, .T. ) ; +#11571 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.730424212713734800, -1.049979056049130000 ) ) ; +#11572 = CYLINDRICAL_SURFACE ( 'NONE', #23047, 0.1000000000000002600 ) ; +#11573 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38921 ) ) ; +#11574 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27787, 'distance_accuracy_value', 'NONE'); +#11575 = FILL_AREA_STYLE_COLOUR ( '', #32941 ) ; +#11576 = VECTOR ( 'NONE', #10638, 1000.000000000000000 ) ; +#11577 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11578 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11579 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#11580 = EDGE_CURVE ( 'NONE', #37363, #12476, #35202, .T. ) ; +#11581 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11582 = LINE ( 'NONE', #27546, #37857 ) ; +#11583 = STYLED_ITEM ( 'NONE', ( #32929 ), #21693 ) ; +#11584 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17429, 'distance_accuracy_value', 'NONE'); +#11585 = SURFACE_STYLE_FILL_AREA ( #20687 ) ; +#11586 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23884 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2437, #27980, #25034 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11587 = ORIENTED_EDGE ( 'NONE', *, *, #39153, .T. ) ; +#11590 = EDGE_CURVE ( 'NONE', #27056, #31468, #31180, .T. ) ; +#11589 = AXIS2_PLACEMENT_3D ( 'NONE', #27386, #8153, #14808 ) ; +#11588 = DIRECTION ( 'NONE', ( -4.336808689942015400E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11591 = LINE ( 'NONE', #19887, #3033 ) ; +#11592 = CARTESIAN_POINT ( 'NONE', ( -4.735797985667151300, 0.2800000000000027500, -0.3279248189596167300 ) ) ; +#11593 = ADVANCED_FACE ( 'NONE', ( #5401 ), #14394, .T. ) ; +#11594 = CARTESIAN_POINT ( 'NONE', ( -3.094999999999886100, -0.2999999999999999900, -1.532287565553100300 ) ) ; +#11595 = ORIENTED_EDGE ( 'NONE', *, *, #23375, .F. ) ; +#11596 = VERTEX_POINT ( 'NONE', #4914 ) ; +#11597 = LINE ( 'NONE', #30846, #15659 ) ; +#11598 = AXIS2_PLACEMENT_3D ( 'NONE', #18340, #34970, #34833 ) ; +#11599 = STYLED_ITEM ( 'NONE', ( #38274 ), #41225 ) ; +#11600 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #2232, #10930, #4449, #10650 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 5.560451059366172900, 6.283185307179586200 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956571100, 0.9569428977956571100, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#11601 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5507, 'distance_accuracy_value', 'NONE'); +#11602 = SURFACE_STYLE_USAGE ( .BOTH. , #17854 ) ; +#11603 = LINE ( 'NONE', #39066, #3047 ) ; +#11604 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39190 ) ) ; +#11605 = VERTEX_POINT ( 'NONE', #40493 ) ; +#11606 = ORIENTED_EDGE ( 'NONE', *, *, #9265, .T. ) ; +#11607 = ORIENTED_EDGE ( 'NONE', *, *, #37690, .F. ) ; +#11608 = SURFACE_STYLE_FILL_AREA ( #10939 ) ; +#11609 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20570 ) ) ; +#11610 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#11611 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11612 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.032879073410321300E-016, -1.000000000000000000 ) ) ; +#11613 = ADVANCED_FACE ( 'NONE', ( #30658 ), #23564, .T. ) ; +#11614 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -2.594459358809384500 ) ) ; +#11615 = VERTEX_POINT ( 'NONE', #21201 ) ; +#11616 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11617 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#11618 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8169, 'distance_accuracy_value', 'NONE'); +#11619 = CARTESIAN_POINT ( 'NONE', ( 3.315809924354953700, -0.3499999999999811000, -1.649999999999999900 ) ) ; +#11620 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#11621 = SURFACE_STYLE_USAGE ( .BOTH. , #30980 ) ; +#11622 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.499998254703823800, -5.049999999999993600 ) ) ; +#11623 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#11624 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11625 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.275194062716610100E-015, 0.0000000000000000000 ) ) ; +#11626 = FACE_OUTER_BOUND ( 'NONE', #10263, .T. ) ; +#11627 = FILL_AREA_STYLE ('',( #28166 ) ) ; +#11628 = EDGE_LOOP ( 'NONE', ( #8423, #1358, #11026, #17875 ) ) ; +#11629 = DIRECTION ( 'NONE', ( 2.867303258980864400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11630 = FACE_OUTER_BOUND ( 'NONE', #2894, .T. ) ; +#11631 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11632 = LINE ( 'NONE', #34866, #16192 ) ; +#11633 = EDGE_CURVE ( 'NONE', #37158, #16943, #13963, .T. ) ; +#11634 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, 0.2799999999999973100, -0.2339555568811697600 ) ) ; +#11635 = VERTEX_POINT ( 'NONE', #21334 ) ; +#11636 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11637 = CARTESIAN_POINT ( 'NONE', ( 14.52500000000000700, -0.4099999999999662200, -6.861124800398366500 ) ) ; +#11638 = EDGE_CURVE ( 'NONE', #20046, #23744, #40202, .T. ) ; +#11639 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31140 ), #8664 ) ; +#11640 = SURFACE_STYLE_USAGE ( .BOTH. , #18179 ) ; +#11641 = CLOSED_SHELL ( 'NONE', ( #36235, #11492, #8043, #26866, #17199, #37878, #20670, #24352 ) ) ; +#11642 = FACE_OUTER_BOUND ( 'NONE', #26226, .T. ) ; +#11643 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6155 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38322, #25508, #31431 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11644 = VERTEX_POINT ( 'NONE', #20926 ) ; +#11646 = ADVANCED_FACE ( 'NONE', ( #18521 ), #2696, .T. ) ; +#11645 = ORIENTED_EDGE ( 'NONE', *, *, #38535, .F. ) ; +#11647 = FILL_AREA_STYLE ('',( #17900 ) ) ; +#11648 = VERTEX_POINT ( 'NONE', #28220 ) ; +#11649 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12450 ) ) ; +#11650 = LINE ( 'NONE', #6325, #24331 ) ; +#11651 = EDGE_LOOP ( 'NONE', ( #19214, #12974, #9308, #11437 ) ) ; +#11652 = FACE_OUTER_BOUND ( 'NONE', #25567, .T. ) ; +#11653 = PLANE ( 'NONE', #41718 ) ; +#11654 = FILL_AREA_STYLE ('',( #8401 ) ) ; +#11655 = LINE ( 'NONE', #6015, #26356 ) ; +#11657 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7312 ) ) ; +#11656 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7311 ) ) ; +#11658 = LINE ( 'NONE', #7331, #30883 ) ; +#11659 = SURFACE_SIDE_STYLE ('',( #11253 ) ) ; +#11661 = EDGE_CURVE ( 'NONE', #23585, #21420, #41734, .T. ) ; +#11660 = AXIS2_PLACEMENT_3D ( 'NONE', #4850, #4991, #20722 ) ; +#11662 = CARTESIAN_POINT ( 'NONE', ( 4.492416573867750200, -1.982581680836082100, -5.804658566907514600 ) ) ; +#11663 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11664 = FILL_AREA_STYLE ('',( #34283 ) ) ; +#11665 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 2.367138801244516300E-016, -1.000000000000000000 ) ) ; +#11666 = AXIS2_PLACEMENT_3D ( 'NONE', #35842, #7128, #25942 ) ; +#11667 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30795, 'distance_accuracy_value', 'NONE'); +#11668 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11670 = EDGE_CURVE ( 'NONE', #36496, #14787, #30621, .T. ) ; +#11669 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30698 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37774, #15040, #40732 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11671 = LINE ( 'NONE', #38226, #19774 ) ; +#11672 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#11673 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11674 = ORIENTED_EDGE ( 'NONE', *, *, #36414, .F. ) ; +#11675 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11676 = VECTOR ( 'NONE', #11416, 1000.000000000000000 ) ; +#11677 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11678 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11679 = ORIENTED_EDGE ( 'NONE', *, *, #36100, .F. ) ; +#11680 = CIRCLE ( 'NONE', #16869, 0.3000000000000003800 ) ; +#11681 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.880000000000130000, -0.5000000000000879300 ) ) ; +#11682 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11683 = LINE ( 'NONE', #7203, #3118 ) ; +#11684 = FILL_AREA_STYLE ('',( #37948 ) ) ; +#11685 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36887, 'distance_accuracy_value', 'NONE'); +#11686 = VECTOR ( 'NONE', #38148, 1000.000000000000000 ) ; +#11687 = VERTEX_POINT ( 'NONE', #34571 ) ; +#11688 = ORIENTED_EDGE ( 'NONE', *, *, #25606, .F. ) ; +#11689 = FILL_AREA_STYLE_COLOUR ( '', #14067 ) ; +#11690 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11691 = VERTEX_POINT ( 'NONE', #38086 ) ; +#11692 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -10.30000000000000100, -1.250000000000000000 ) ) ; +#11693 = VECTOR ( 'NONE', #37826, 1000.000000000000000 ) ; +#11694 = CLOSED_SHELL ( 'NONE', ( #7376, #9091, #5982, #39533, #14235, #41225 ) ) ; +#11695 = EDGE_CURVE ( 'NONE', #36606, #21453, #5364, .T. ) ; +#11696 = ADVANCED_FACE ( 'NONE', ( #14448 ), #41236, .F. ) ; +#11697 = FILL_AREA_STYLE ('',( #30922 ) ) ; +#11698 = VECTOR ( 'NONE', #14131, 1000.000000000000000 ) ; +#11699 = FILL_AREA_STYLE ('',( #11555 ) ) ; +#11700 = VECTOR ( 'NONE', #23031, 1000.000000000000000 ) ; +#11701 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11702 = EDGE_CURVE ( 'NONE', #39493, #2849, #3339, .T. ) ; +#11703 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.2999999999999999900, -0.2498427124746000500 ) ) ; +#11704 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11705 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#11706 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7026 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38152, #38291, #34919 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11707 = CYLINDRICAL_SURFACE ( 'NONE', #12997, 0.09999999999999982500 ) ; +#11708 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296169800, -0.2339555568811695900 ) ) ; +#11709 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11710 = ORIENTED_EDGE ( 'NONE', *, *, #23989, .T. ) ; +#11711 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#11712 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, 0.6500000000000001300, -3.299999999999999800 ) ) ; +#11713 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.966063034915694700, -0.6228541982233617400 ) ) ; +#11714 = STYLED_ITEM ( 'NONE', ( #40996 ), #19047 ) ; +#11715 = VERTEX_POINT ( 'NONE', #2546 ) ; +#11716 = FACE_OUTER_BOUND ( 'NONE', #14921, .T. ) ; +#11718 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29040 ) ) ; +#11717 = CARTESIAN_POINT ( 'NONE', ( -2.949999999999999700, -1.499998254703820400, -6.299999999999993600 ) ) ; +#11719 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11720 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11721 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11722 = PRESENTATION_STYLE_ASSIGNMENT (( #23559 ) ) ; +#11723 = VECTOR ( 'NONE', #16136, 1000.000000000000000 ) ; +#11725 = EDGE_CURVE ( 'NONE', #36713, #8213, #7365, .T. ) ; +#11724 = STYLED_ITEM ( 'NONE', ( #24790 ), #35753 ) ; +#11726 = LINE ( 'NONE', #17349, #27921 ) ; +#11727 = DIRECTION ( 'NONE', ( 5.916456789157588500E-031, 1.000000000000000000, -2.367138801244518800E-016 ) ) ; +#11728 = EDGE_LOOP ( 'NONE', ( #14856, #11077, #30384, #39646 ) ) ; +#11729 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.6228541982233617400 ) ) ; +#11730 = FILL_AREA_STYLE ('',( #27565 ) ) ; +#11732 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5239 ), #13907 ) ; +#11731 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17457 ), #13906 ) ; +#11733 = PLANE ( 'NONE', #12068 ) ; +#11734 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#11735 = VERTEX_POINT ( 'NONE', #28348 ) ; +#11736 = LINE ( 'NONE', #24730, #38519 ) ; +#11737 = ORIENTED_EDGE ( 'NONE', *, *, #38015, .F. ) ; +#11738 = CIRCLE ( 'NONE', #8069, 0.1000000000000001600 ) ; +#11739 = VECTOR ( 'NONE', #34232, 1000.000000000000000 ) ; +#11740 = LINE ( 'NONE', #40238, #665 ) ; +#11741 = SURFACE_STYLE_USAGE ( .BOTH. , #4977 ) ; +#11742 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#11743 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#11744 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11745 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#11746 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.799998254703820700, -5.899999999999999500 ) ) ; +#11747 = VERTEX_POINT ( 'NONE', #31464 ) ; +#11748 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 0.6800017452961688600, -1.650000000000000400 ) ) ; +#11749 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11750 = DIRECTION ( 'NONE', ( 1.543290588833364200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11751 = EDGE_CURVE ( 'NONE', #20956, #4156, #33172, .T. ) ; +#11752 = ORIENTED_EDGE ( 'NONE', *, *, #28071, .T. ) ; +#11753 = FILL_AREA_STYLE_COLOUR ( '', #25461 ) ; +#11754 = EDGE_CURVE ( 'NONE', #37440, #33519, #10901, .T. ) ; +#11755 = VECTOR ( 'NONE', #41771, 1000.000000000000000 ) ; +#11756 = VERTEX_POINT ( 'NONE', #21893 ) ; +#11757 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11758 = CARTESIAN_POINT ( 'NONE', ( 3.020874367350281800, 0.3429370128379890000, -1.292799604889681700 ) ) ; +#11759 = ORIENTED_EDGE ( 'NONE', *, *, #15542, .T. ) ; +#11760 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#11761 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #5428, #17885, #21148, #11768, #1950, #34520 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.002392525674368529300, 0.002399883692633026200, 0.002407241710897523200 ), + .UNSPECIFIED. ) ; +#11763 = ORIENTED_EDGE ( 'NONE', *, *, #23027, .T. ) ; +#11762 = CIRCLE ( 'NONE', #4616, 0.9000017452961695000 ) ; +#11764 = ORIENTED_EDGE ( 'NONE', *, *, #4534, .F. ) ; +#11765 = ADVANCED_FACE ( 'NONE', ( #16468 ), #10375, .T. ) ; +#11766 = AXIS2_PLACEMENT_3D ( 'NONE', #30028, #36820, #14643 ) ; +#11767 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11768 = CARTESIAN_POINT ( 'NONE', ( 3.841913243476150700, 0.6255161290010278200, -4.400021511121381400 ) ) ; +#11769 = FILL_AREA_STYLE ('',( #21849 ) ) ; +#11770 = CIRCLE ( 'NONE', #32333, 0.3000000000000001000 ) ; +#11771 = ORIENTED_EDGE ( 'NONE', *, *, #3296, .F. ) ; +#11772 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #264 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38726, #9501, #21985 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11773 = FACE_OUTER_BOUND ( 'NONE', #10255, .T. ) ; +#11774 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11775 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28879 ), #21624 ) ; +#11776 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27766 ), #10410 ) ; +#11777 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25916, 'distance_accuracy_value', 'NONE'); +#11778 = SURFACE_STYLE_FILL_AREA ( #36507 ) ; +#11779 = LINE ( 'NONE', #16976, #17367 ) ; +#11780 = FILL_AREA_STYLE ('',( #21294 ) ) ; +#11781 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#11784 = EDGE_CURVE ( 'NONE', #14452, #25892, #34631, .T. ) ; +#11783 = CARTESIAN_POINT ( 'NONE', ( 1.649999999999999900, -1.499998254703824400, -6.699999999999994000 ) ) ; +#11782 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35060 ) ) ; +#11785 = FILL_AREA_STYLE ('',( #37501 ) ) ; +#11786 = CARTESIAN_POINT ( 'NONE', ( 2.000000000000000000, -0.3000000000000001600, -1.250000000000000000 ) ) ; +#11787 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11788 = VECTOR ( 'NONE', #6331, 1000.000000000000000 ) ; +#11790 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24256 ), #3151 ) ; +#11789 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11549 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35985, #22843, #26095 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11791 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -10.30000000000000100, -1.250000000000000000 ) ) ; +#11792 = STYLED_ITEM ( 'NONE', ( #25435 ), #40004 ) ; +#11793 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20554, 'distance_accuracy_value', 'NONE'); +#11794 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#11795 = STYLED_ITEM ( 'NONE', ( #33520 ), #32173 ) ; +#11796 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165600, -6.900000000000000400 ) ) ; +#11797 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#11798 = LINE ( 'NONE', #24156, #7749 ) ; +#11799 = SURFACE_STYLE_USAGE ( .BOTH. , #17646 ) ; +#11800 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#11801 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.03000174529616905800, -6.900000000000000400 ) ) ; +#11802 = VERTEX_POINT ( 'NONE', #19196 ) ; +#11803 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11804 = ADVANCED_FACE ( 'NONE', ( #5318 ), #19461, .F. ) ; +#11805 = ORIENTED_EDGE ( 'NONE', *, *, #1990, .T. ) ; +#11806 = ORIENTED_EDGE ( 'NONE', *, *, #26559, .F. ) ; +#11807 = ORIENTED_EDGE ( 'NONE', *, *, #31449, .T. ) ; +#11808 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#11809 = CARTESIAN_POINT ( 'NONE', ( -3.839743771154401100, 0.6300017452961683700, -4.549999999999999800 ) ) ; +#11810 = SURFACE_SIDE_STYLE ('',( #16879 ) ) ; +#11811 = VECTOR ( 'NONE', #20754, 1000.000000000000000 ) ; +#11812 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.2999999999999999900, -0.2498427124745999900 ) ) ; +#11814 = ADVANCED_FACE ( 'NONE', ( #38177 ), #14936, .T. ) ; +#11813 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29505, 'distance_accuracy_value', 'NONE'); +#11815 = EDGE_CURVE ( 'NONE', #27867, #32286, #29598, .T. ) ; +#11816 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#11817 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#11818 = EDGE_CURVE ( 'NONE', #28277, #25527, #31100, .T. ) ; +#11819 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11820 = EDGE_CURVE ( 'NONE', #33844, #21455, #3805, .T. ) ; +#11821 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11822 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39837, 'distance_accuracy_value', 'NONE'); +#11823 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3188 ), #22671 ) ; +#11824 = VERTEX_POINT ( 'NONE', #25282 ) ; +#11825 = EDGE_CURVE ( 'NONE', #32728, #9508, #6346, .T. ) ; +#11826 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11827 = FACE_OUTER_BOUND ( 'NONE', #3014, .T. ) ; +#11828 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11829 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11830 = PLANE ( 'NONE', #22324 ) ; +#11831 = VERTEX_POINT ( 'NONE', #35555 ) ; +#11832 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5605 ), #19179 ) ; +#11833 = PRESENTATION_STYLE_ASSIGNMENT (( #30574 ) ) ; +#11834 = ORIENTED_EDGE ( 'NONE', *, *, #16495, .F. ) ; +#11836 = EDGE_CURVE ( 'NONE', #2027, #9130, #28586, .T. ) ; +#11835 = AXIS2_PLACEMENT_3D ( 'NONE', #31501, #15541, #41254 ) ; +#11837 = ORIENTED_EDGE ( 'NONE', *, *, #11452, .F. ) ; +#11838 = ORIENTED_EDGE ( 'NONE', *, *, #10204, .F. ) ; +#11839 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11840 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29170 ), #9670 ) ; +#11841 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35131 ) ) ; +#11842 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11843 = FILL_AREA_STYLE ('',( #21926 ) ) ; +#11844 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40246 ), #4814 ) ; +#11845 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11846 = PRESENTATION_STYLE_ASSIGNMENT (( #13593 ) ) ; +#11847 = ADVANCED_FACE ( 'NONE', ( #41696 ), #22994, .F. ) ; +#11848 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#11849 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23172 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4725, #4594, #976 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11850 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#11851 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11852 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.837630800822890800E-016 ) ) ; +#11853 = VECTOR ( 'NONE', #11889, 1000.000000000000000 ) ; +#11854 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, -1.000000000000000000, 3.516331370223256700E-016 ) ) ; +#11855 = ORIENTED_EDGE ( 'NONE', *, *, #33339, .F. ) ; +#11856 = PLANE ( 'NONE', #5916 ) ; +#11857 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.2999999999999999900, -1.249999999999999800 ) ) ; +#11858 = VECTOR ( 'NONE', #9141, 1000.000000000000000 ) ; +#11859 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#11860 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11861 = EDGE_LOOP ( 'NONE', ( #12977, #2537, #24619, #23821 ) ) ; +#11862 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11863 = ORIENTED_EDGE ( 'NONE', *, *, #38604, .F. ) ; +#11864 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 6.056601140521965300E-031 ) ) ; +#11865 = ORIENTED_EDGE ( 'NONE', *, *, #25905, .T. ) ; +#11866 = VECTOR ( 'NONE', #21400, 1000.000000000000000 ) ; +#11867 = SURFACE_STYLE_FILL_AREA ( #21503 ) ; +#11868 = EDGE_CURVE ( 'NONE', #19187, #17224, #13369, .T. ) ; +#11869 = VERTEX_POINT ( 'NONE', #26224 ) ; +#11870 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11871 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.949998254703823300, -6.600000000000000500 ) ) ; +#11872 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#11873 = LINE ( 'NONE', #12918, #7839 ) ; +#11874 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11875 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#11876 = EDGE_CURVE ( 'NONE', #6860, #36905, #800, .T. ) ; +#11877 = LINE ( 'NONE', #23818, #32604 ) ; +#11878 = PRESENTATION_STYLE_ASSIGNMENT (( #31253 ) ) ; +#11879 = ORIENTED_EDGE ( 'NONE', *, *, #12121, .F. ) ; +#11880 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11881 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 7.228014483236708400E-016 ) ) ; +#11882 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5407 ), #39486 ) ; +#11883 = VERTEX_POINT ( 'NONE', #5 ) ; +#11884 = AXIS2_PLACEMENT_3D ( 'NONE', #1949, #27751, #27896 ) ; +#11885 = ORIENTED_EDGE ( 'NONE', *, *, #8285, .T. ) ; +#11887 = AXIS2_PLACEMENT_3D ( 'NONE', #28048, #8674, #28320 ) ; +#11886 = CARTESIAN_POINT ( 'NONE', ( 0.3999999999999999700, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#11888 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 10.30000000000000100, -1.250000000000000000 ) ) ; +#11889 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11890 = ADVANCED_FACE ( 'NONE', ( #14415 ), #25000, .F. ) ; +#11891 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#11893 = AXIS2_PLACEMENT_3D ( 'NONE', #31308, #4901, #34414 ) ; +#11892 = STYLED_ITEM ( 'NONE', ( #15690 ), #29222 ) ; +#11894 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#11895 = SURFACE_SIDE_STYLE ('',( #9021 ) ) ; +#11896 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40192 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1530, #30586, #17189 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11897 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#11898 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11900 = STYLED_ITEM ( 'NONE', ( #7024 ), #9511 ) ; +#11899 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12460 ) ) ; +#11901 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11902 = FACE_OUTER_BOUND ( 'NONE', #41445, .T. ) ; +#11904 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25994 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3123, #9719, #35593 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11903 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11905 = FILL_AREA_STYLE ('',( #31281 ) ) ; +#11906 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11907 = VERTEX_POINT ( 'NONE', #18017 ) ; +#11908 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11909 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#11910 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid29', #34517 ) ; +#11911 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.499998254703835300, -5.049999999999993600 ) ) ; +#11912 = ORIENTED_EDGE ( 'NONE', *, *, #2811, .F. ) ; +#11913 = EDGE_LOOP ( 'NONE', ( #38229, #37319, #40020, #27063 ) ) ; +#11914 = LINE ( 'NONE', #40501, #39727 ) ; +#11915 = SURFACE_SIDE_STYLE ('',( #5952 ) ) ; +#11916 = ORIENTED_EDGE ( 'NONE', *, *, #9873, .T. ) ; +#11917 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521965300E-031 ) ) ; +#11918 = VECTOR ( 'NONE', #31183, 1000.000000000000100 ) ; +#11919 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11920 = VERTEX_POINT ( 'NONE', #1653 ) ; +#11921 = ORIENTED_EDGE ( 'NONE', *, *, #9583, .T. ) ; +#11922 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#11923 = SURFACE_SIDE_STYLE ('',( #36751 ) ) ; +#11924 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11925 = FILL_AREA_STYLE ('',( #22129 ) ) ; +#11926 = SURFACE_SIDE_STYLE ('',( #21748 ) ) ; +#11927 = PLANE ( 'NONE', #22747 ) ; +#11928 = EDGE_CURVE ( 'NONE', #26667, #22030, #41204, .T. ) ; +#11929 = VECTOR ( 'NONE', #34253, 1000.000000000000000 ) ; +#11930 = SURFACE_SIDE_STYLE ('',( #21545 ) ) ; +#11931 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11932 = EDGE_CURVE ( 'NONE', #14188, #30038, #14896, .T. ) ; +#11933 = STYLED_ITEM ( 'NONE', ( #35267 ), #9901 ) ; +#11934 = FILL_AREA_STYLE_COLOUR ( '', #8788 ) ; +#11935 = FACE_OUTER_BOUND ( 'NONE', #33542, .T. ) ; +#11936 = FACE_OUTER_BOUND ( 'NONE', #5408, .T. ) ; +#11937 = LINE ( 'NONE', #15278, #1392 ) ; +#11938 = CARTESIAN_POINT ( 'NONE', ( -3.105918336655589100, 0.2999999999999999900, -0.09985912296315879700 ) ) ; +#11939 = CARTESIAN_POINT ( 'NONE', ( -4.620424212713737200, 0.2800000000000027500, -1.049979056049130000 ) ) ; +#11940 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12928, 'distance_accuracy_value', 'NONE'); +#11941 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26576 ), #6280 ) ; +#11942 = SURFACE_STYLE_USAGE ( .BOTH. , #5474 ) ; +#11943 = EDGE_LOOP ( 'NONE', ( #32636, #25301, #12475, #10900 ) ) ; +#11944 = LINE ( 'NONE', #10988, #1886 ) ; +#11945 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.4300017452961686900, -6.199999999999999300 ) ) ; +#11946 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37950 ) ) ; +#11947 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000012100, -1.999998254703822400, -5.899999999999999500 ) ) ; +#11948 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.499998254703824400, -6.699999999999994000 ) ) ; +#11949 = EDGE_LOOP ( 'NONE', ( #12972, #25059, #38588, #13633, #31278, #31899 ) ) ; +#11950 = ORIENTED_EDGE ( 'NONE', *, *, #64, .F. ) ; +#11951 = VECTOR ( 'NONE', #24776, 1000.000000000000000 ) ; +#11953 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5485 ) ) ; +#11952 = AXIS2_PLACEMENT_3D ( 'NONE', #19154, #22923, #29125 ) ; +#11954 = PRESENTATION_STYLE_ASSIGNMENT (( #8081 ) ) ; +#11955 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.07499999999999999700, 0.4305619708689000200 ) ) ; +#11956 = SURFACE_STYLE_FILL_AREA ( #40 ) ; +#11959 = EDGE_CURVE ( 'NONE', #38828, #15032, #17470, .T. ) ; +#11958 = SURFACE_SIDE_STYLE ('',( #41513 ) ) ; +#11957 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40190 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10299, #13569, #23743 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11960 = VERTEX_POINT ( 'NONE', #7688 ) ; +#11961 = SURFACE_SIDE_STYLE ('',( #7620 ) ) ; +#11962 = ORIENTED_EDGE ( 'NONE', *, *, #35816, .F. ) ; +#11963 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#11964 = ADVANCED_FACE ( 'NONE', ( #1802 ), #33958, .T. ) ; +#11966 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5501 ), #14174 ) ; +#11965 = AXIS2_PLACEMENT_3D ( 'NONE', #35695, #10379, #16754 ) ; +#11967 = VECTOR ( 'NONE', #38946, 1000.000000000000000 ) ; +#11968 = FILL_AREA_STYLE ('',( #31618 ) ) ; +#11969 = FACE_OUTER_BOUND ( 'NONE', #24270, .T. ) ; +#11970 = FACE_OUTER_BOUND ( 'NONE', #37277, .T. ) ; +#11971 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.279999999999999600, -0.2000017452961698200 ) ) ; +#11972 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 2.367138801244516300E-016, -1.000000000000000000 ) ) ; +#11973 = SURFACE_SIDE_STYLE ('',( #37539 ) ) ; +#11974 = SURFACE_SIDE_STYLE ('',( #4167 ) ) ; +#11975 = SURFACE_STYLE_FILL_AREA ( #41557 ) ; +#11976 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11977 = EDGE_LOOP ( 'NONE', ( #15559, #30416, #33179, #15631 ) ) ; +#11978 = PRESENTATION_STYLE_ASSIGNMENT (( #9638 ) ) ; +#11979 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11980 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11981 = DIRECTION ( 'NONE', ( -4.336808689942002000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11982 = DIRECTION ( 'NONE', ( 0.3746065948720311300, 0.0000000000000000000, 0.9271838539784770200 ) ) ; +#11983 = SURFACE_STYLE_USAGE ( .BOTH. , #25321 ) ; +#11984 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11985 = EDGE_CURVE ( 'NONE', #34286, #6935, #19988, .T. ) ; +#11986 = CARTESIAN_POINT ( 'NONE', ( -4.620424212713737200, 0.2800000000000027500, -1.049979056049130000 ) ) ; +#11987 = ORIENTED_EDGE ( 'NONE', *, *, #22872, .T. ) ; +#11988 = PLANE ( 'NONE', #31429 ) ; +#11989 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#11990 = VERTEX_POINT ( 'NONE', #11338 ) ; +#11991 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11992 = SURFACE_STYLE_FILL_AREA ( #20014 ) ; +#11993 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#11994 = EDGE_CURVE ( 'NONE', #33221, #17010, #32554, .T. ) ; +#11995 = FACE_OUTER_BOUND ( 'NONE', #19908, .T. ) ; +#11996 = CARTESIAN_POINT ( 'NONE', ( 4.720380236995682200, -0.2800000000000026400, -0.8400000000000000800 ) ) ; +#11997 = VECTOR ( 'NONE', #22811, 1000.000000000000000 ) ; +#11998 = SURFACE_SIDE_STYLE ('',( #22468 ) ) ; +#11999 = EDGE_LOOP ( 'NONE', ( #10979, #41552, #34281, #24329 ) ) ; +#12000 = EDGE_LOOP ( 'NONE', ( #17779, #19505, #28381, #22130 ) ) ; +#12002 = EDGE_LOOP ( 'NONE', ( #6456, #33474, #20809, #21161 ) ) ; +#12001 = ADVANCED_FACE ( 'NONE', ( #10331 ), #20870, .F. ) ; +#12003 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25834 ) ) ; +#12004 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41208, 'distance_accuracy_value', 'NONE'); +#12005 = VERTEX_POINT ( 'NONE', #1378 ) ; +#12006 = STYLED_ITEM ( 'NONE', ( #30224 ), #20135 ) ; +#12007 = DIRECTION ( 'NONE', ( 0.0002094395087002862800, 0.0000000000000000000, 0.9999999780675458100 ) ) ; +#12008 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.139998254717354400, -5.049996877890552400 ) ) ; +#12009 = ADVANCED_FACE ( 'NONE', ( #18492 ), #37066, .T. ) ; +#12010 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22676, 'distance_accuracy_value', 'NONE'); +#12011 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, -1.000000000000000000, -1.414176746720224900E-016 ) ) ; +#12012 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, 1.498909503461209900E-014, -1.649999999999999500 ) ) ; +#12013 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39980, 'distance_accuracy_value', 'NONE'); +#12015 = EDGE_CURVE ( 'NONE', #22336, #32756, #29070, .T. ) ; +#12014 = AXIS2_PLACEMENT_3D ( 'NONE', #35955, #10058, #32673 ) ; +#12016 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12017 = SURFACE_SIDE_STYLE ('',( #12750 ) ) ; +#12018 = SURFACE_STYLE_USAGE ( .BOTH. , #5263 ) ; +#12019 = VERTEX_POINT ( 'NONE', #12174 ) ; +#12020 = FACE_OUTER_BOUND ( 'NONE', #19115, .T. ) ; +#12021 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12023 = AXIS2_PLACEMENT_3D ( 'NONE', #23600, #30090, #36595 ) ; +#12022 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13618 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39341, #10671, #4039 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12024 = STYLED_ITEM ( 'NONE', ( #26011 ), #39533 ) ; +#12025 = ORIENTED_EDGE ( 'NONE', *, *, #18751, .F. ) ; +#12026 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12027 = CYLINDRICAL_SURFACE ( 'NONE', #14091, 0.3600000000000078700 ) ; +#12028 = FILL_AREA_STYLE ('',( #37615 ) ) ; +#12029 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12030 = VERTEX_POINT ( 'NONE', #7954 ) ; +#12031 = EDGE_LOOP ( 'NONE', ( #19669, #12081, #36910, #30594 ) ) ; +#12032 = FACE_OUTER_BOUND ( 'NONE', #9432, .T. ) ; +#12033 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#12034 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12035 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.779999999999868400, -0.2339555568811697600 ) ) ; +#12036 = VECTOR ( 'NONE', #35773, 1000.000000000000000 ) ; +#12037 = CARTESIAN_POINT ( 'NONE', ( 3.061666666666666500, -0.07499999999999999700, -1.494491118252232900 ) ) ; +#12038 = PRESENTATION_STYLE_ASSIGNMENT (( #11640 ) ) ; +#12039 = VERTEX_POINT ( 'NONE', #34377 ) ; +#12040 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875040400E-015, 0.0000000000000000000 ) ) ; +#12041 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#12042 = VERTEX_POINT ( 'NONE', #37483 ) ; +#12043 = ORIENTED_EDGE ( 'NONE', *, *, #28847, .T. ) ; +#12044 = LINE ( 'NONE', #8095, #32278 ) ; +#12045 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000800, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#12046 = ORIENTED_EDGE ( 'NONE', *, *, #41821, .T. ) ; +#12047 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#12048 = EDGE_LOOP ( 'NONE', ( #22875, #28224, #12439, #31225 ) ) ; +#12049 = EDGE_CURVE ( 'NONE', #11113, #11557, #21544, .T. ) ; +#12050 = ADVANCED_FACE ( 'NONE', ( #17432 ), #16390, .F. ) ; +#12051 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#12052 = SURFACE_STYLE_FILL_AREA ( #16966 ) ; +#12053 = SURFACE_STYLE_FILL_AREA ( #3857 ) ; +#12054 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12055 = EDGE_CURVE ( 'NONE', #20912, #34591, #23528, .T. ) ; +#12056 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12057 = VECTOR ( 'NONE', #18248, 1000.000000000000000 ) ; +#12058 = EDGE_CURVE ( 'NONE', #28342, #31873, #19448, .T. ) ; +#12059 = VECTOR ( 'NONE', #17558, 1000.000000000000000 ) ; +#12060 = SURFACE_STYLE_USAGE ( .BOTH. , #2519 ) ; +#12061 = PLANE ( 'NONE', #26409 ) ; +#12062 = AXIS2_PLACEMENT_3D ( 'NONE', #15251, #37275, #30920 ) ; +#12063 = ADVANCED_FACE ( 'NONE', ( #14944 ), #18577, .F. ) ; +#12064 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#12065 = ORIENTED_EDGE ( 'NONE', *, *, #2720, .T. ) ; +#12066 = DIRECTION ( 'NONE', ( 2.367138801244516300E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12067 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12068 = AXIS2_PLACEMENT_3D ( 'NONE', #5240, #20839, #11451 ) ; +#12069 = ORIENTED_EDGE ( 'NONE', *, *, #30199, .T. ) ; +#12070 = EDGE_LOOP ( 'NONE', ( #21326, #40792, #2833, #9007 ) ) ; +#12071 = CIRCLE ( 'NONE', #38515, 0.05000000000000002400 ) ; +#12072 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#12073 = AXIS2_PLACEMENT_3D ( 'NONE', #37756, #14884, #27885 ) ; +#12074 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12075 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12076 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12077 = VECTOR ( 'NONE', #9269, 1000.000000000000000 ) ; +#12078 = CIRCLE ( 'NONE', #1500, 0.3600000000000078700 ) ; +#12079 = EDGE_CURVE ( 'NONE', #13290, #38648, #6313, .T. ) ; +#12080 = EDGE_LOOP ( 'NONE', ( #40739, #15769, #7313, #589 ) ) ; +#12081 = ORIENTED_EDGE ( 'NONE', *, *, #39289, .T. ) ; +#12082 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#12083 = SURFACE_STYLE_USAGE ( .BOTH. , #1996 ) ; +#12085 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30241 ) ) ; +#12084 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17829 ) ) ; +#12086 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12087 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12088 = STYLED_ITEM ( 'NONE', ( #2638 ), #40578 ) ; +#12089 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -2.891205793294629500E-014 ) ) ; +#12090 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9910 ) ) ; +#12091 = ORIENTED_EDGE ( 'NONE', *, *, #30647, .F. ) ; +#12092 = CIRCLE ( 'NONE', #27649, 0.2999999999999999300 ) ; +#12093 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12094 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12095 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15645 ) ) ; +#12096 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#12097 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12098 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33302, 'distance_accuracy_value', 'NONE'); +#12099 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#12100 = CIRCLE ( 'NONE', #33329, 0.8000000000000000400 ) ; +#12101 = ADVANCED_FACE ( 'NONE', ( #25068 ), #35130, .F. ) ; +#12102 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#12103 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12104 = SURFACE_STYLE_FILL_AREA ( #39607 ) ; +#12105 = PLANE ( 'NONE', #32307 ) ; +#12106 = ORIENTED_EDGE ( 'NONE', *, *, #14956, .T. ) ; +#12107 = SURFACE_STYLE_USAGE ( .BOTH. , #5646 ) ; +#12108 = CARTESIAN_POINT ( 'NONE', ( -4.721498212947778900, -0.4099999999999984200, -6.861124800398366500 ) ) ; +#12109 = ORIENTED_EDGE ( 'NONE', *, *, #30519, .F. ) ; +#12110 = ORIENTED_EDGE ( 'NONE', *, *, #20214, .T. ) ; +#12111 = CARTESIAN_POINT ( 'NONE', ( -3.395000000000000000, 0.4636038969321075700, -3.300000000000000300 ) ) ; +#12112 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#12113 = PRESENTATION_STYLE_ASSIGNMENT (( #11621 ) ) ; +#12114 = SURFACE_STYLE_USAGE ( .BOTH. , #41094 ) ; +#12115 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12116 = CARTESIAN_POINT ( 'NONE', ( -3.629999999999999900, -1.380001745296125100, -6.031671842700004200 ) ) ; +#12117 = ORIENTED_EDGE ( 'NONE', *, *, #1321, .F. ) ; +#12118 = SURFACE_STYLE_FILL_AREA ( #18237 ) ; +#12119 = ORIENTED_EDGE ( 'NONE', *, *, #12383, .T. ) ; +#12120 = ORIENTED_EDGE ( 'NONE', *, *, #34319, .F. ) ; +#12121 = EDGE_CURVE ( 'NONE', #35308, #20274, #41210, .T. ) ; +#12122 = LINE ( 'NONE', #17035, #32853 ) ; +#12123 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40048 ) ) ; +#12124 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12125 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12126 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -4.875000000000000900 ) ) ; +#12127 = EDGE_CURVE ( 'NONE', #6476, #22408, #31601, .T. ) ; +#12128 = VERTEX_POINT ( 'NONE', #25218 ) ; +#12129 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -2.322941965694886000, -1.250000000000000000 ) ) ; +#12130 = SURFACE_STYLE_FILL_AREA ( #39762 ) ; +#12131 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9220 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28850, #15999, #9484 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12132 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12133 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12134 = FACE_OUTER_BOUND ( 'NONE', #11728, .T. ) ; +#12135 = SURFACE_STYLE_FILL_AREA ( #32734 ) ; +#12136 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5667 ), #11331 ) ; +#12137 = LINE ( 'NONE', #3850, #9092 ) ; +#12138 = LINE ( 'NONE', #28328, #33890 ) ; +#12139 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12142 = EDGE_CURVE ( 'NONE', #23046, #31918, #16932, .T. ) ; +#12141 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7257 ) ) ; +#12140 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, -10.30000000000000100, -1.250000000000000000 ) ) ; +#12143 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#12144 = PLANE ( 'NONE', #10427 ) ; +#12145 = LINE ( 'NONE', #3181, #18278 ) ; +#12147 = STYLED_ITEM ( 'NONE', ( #20526 ), #4008 ) ; +#12146 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20875 ), #10792 ) ; +#12148 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#12149 = AXIS2_PLACEMENT_3D ( 'NONE', #16753, #39192, #13213 ) ; +#12150 = ORIENTED_EDGE ( 'NONE', *, *, #28236, .T. ) ; +#12151 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #10185, #26030, #32790, #13430 ), + .UNSPECIFIED., .F., .T. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 4.712388980384730500, 7.853981633974523600 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.3333333333333333700, 0.3333333333333333700, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#12152 = SURFACE_STYLE_FILL_AREA ( #28492 ) ; +#12154 = AXIS2_PLACEMENT_3D ( 'NONE', #37076, #5009, #40582 ) ; +#12153 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2749 ), #10543 ) ; +#12155 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22656 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18840, #41415, #25482 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12156 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703821100, -6.800000000000000700 ) ) ; +#12157 = DIRECTION ( 'NONE', ( 6.056601140521965300E-031, -1.987721548152418300E-045, -1.000000000000000000 ) ) ; +#12159 = FACE_OUTER_BOUND ( 'NONE', #23080, .T. ) ; +#12158 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.032879073410321300E-016 ) ) ; +#12160 = ORIENTED_EDGE ( 'NONE', *, *, #4848, .T. ) ; +#12161 = PRESENTATION_STYLE_ASSIGNMENT (( #33086 ) ) ; +#12162 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12163 = SURFACE_STYLE_FILL_AREA ( #19877 ) ; +#12164 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12165 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.1000000000000133800, -1.749999999999999800 ) ) ; +#12166 = VECTOR ( 'NONE', #16143, 1000.000000000000000 ) ; +#12167 = LINE ( 'NONE', #16266, #28349 ) ; +#12168 = FILL_AREA_STYLE ('',( #19264 ) ) ; +#12169 = ORIENTED_EDGE ( 'NONE', *, *, #25712, .F. ) ; +#12170 = PLANE ( 'NONE', #24350 ) ; +#12171 = ORIENTED_EDGE ( 'NONE', *, *, #7707, .T. ) ; +#12172 = ORIENTED_EDGE ( 'NONE', *, *, #9330, .F. ) ; +#12173 = CARTESIAN_POINT ( 'NONE', ( -3.132753748148134700, -0.2999999999999999300, 0.9753279071347695800 ) ) ; +#12174 = CARTESIAN_POINT ( 'NONE', ( -3.500000000000003100, 0.2800017452961687200, -6.749999999999999100 ) ) ; +#12175 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003900, 0.3000000000000149800, -2.095470210943120000 ) ) ; +#12176 = ORIENTED_EDGE ( 'NONE', *, *, #3185, .T. ) ; +#12177 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#12178 = ORIENTED_EDGE ( 'NONE', *, *, #25099, .F. ) ; +#12179 = SURFACE_STYLE_USAGE ( .BOTH. , #22370 ) ; +#12180 = FACE_OUTER_BOUND ( 'NONE', #2314, .T. ) ; +#12181 = ADVANCED_FACE ( 'NONE', ( #14424 ), #38151, .F. ) ; +#12183 = VECTOR ( 'NONE', #3016, 1000.000000000000000 ) ; +#12182 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.414176746720224900E-016, -1.000000000000000000 ) ) ; +#12184 = FILL_AREA_STYLE_COLOUR ( '', #1970 ) ; +#12185 = VECTOR ( 'NONE', #452, 1000.000000000000000 ) ; +#12186 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12187 = EDGE_CURVE ( 'NONE', #28464, #32434, #4809, .T. ) ; +#12188 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29197, 'distance_accuracy_value', 'NONE'); +#12189 = SURFACE_STYLE_USAGE ( .BOTH. , #12334 ) ; +#12190 = EDGE_CURVE ( 'NONE', #24784, #29433, #21021, .T. ) ; +#12191 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14951 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25764, #38722, #12462 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12192 = ORIENTED_EDGE ( 'NONE', *, *, #18200, .F. ) ; +#12193 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12194 = FILL_AREA_STYLE_COLOUR ( '', #3003 ) ; +#12195 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#12196 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27372 ), #29530 ) ; +#12197 = DIRECTION ( 'NONE', ( 4.336808689942015400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12198 = CARTESIAN_POINT ( 'NONE', ( 3.208603896932107300, 0.6500000000000003600, -3.300000000000000300 ) ) ; +#12199 = SURFACE_STYLE_USAGE ( .BOTH. , #38461 ) ; +#12200 = VERTEX_POINT ( 'NONE', #21964 ) ; +#12201 = SURFACE_STYLE_FILL_AREA ( #23328 ) ; +#12202 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8673 ), #23040 ) ; +#12203 = SURFACE_SIDE_STYLE ('',( #28374 ) ) ; +#12204 = LINE ( 'NONE', #35491, #29380 ) ; +#12205 = CARTESIAN_POINT ( 'NONE', ( 4.700922750916311600, -1.400001745296165100, -6.625946193225249000 ) ) ; +#12206 = ORIENTED_EDGE ( 'NONE', *, *, #41409, .F. ) ; +#12207 = AXIS2_PLACEMENT_3D ( 'NONE', #11014, #4383, #10589 ) ; +#12208 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23304 ), #15993 ) ; +#12209 = PRESENTATION_STYLE_ASSIGNMENT (( #38727 ) ) ; +#12210 = CARTESIAN_POINT ( 'NONE', ( 3.680000000000000200, -1.380001745296125500, -6.031671842700004200 ) ) ; +#12212 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29544 ) ) ; +#12211 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30913 ) ) ; +#12213 = SURFACE_STYLE_USAGE ( .BOTH. , #11659 ) ; +#12215 = EDGE_CURVE ( 'NONE', #3122, #13022, #35106, .T. ) ; +#12214 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38654 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #967, #1234, #27185 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12216 = ORIENTED_EDGE ( 'NONE', *, *, #29614, .F. ) ; +#12217 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12218 = SURFACE_STYLE_USAGE ( .BOTH. , #25266 ) ; +#12219 = EDGE_LOOP ( 'NONE', ( #31105, #39354, #19634, #22368 ) ) ; +#12220 = ADVANCED_FACE ( 'NONE', ( #7286 ), #22097, .T. ) ; +#12221 = LINE ( 'NONE', #13381, #17813 ) ; +#12222 = VECTOR ( 'NONE', #23689, 1000.000000000000000 ) ; +#12223 = FACE_OUTER_BOUND ( 'NONE', #6078, .T. ) ; +#12224 = LINE ( 'NONE', #15568, #8162 ) ; +#12225 = FILL_AREA_STYLE_COLOUR ( '', #2823 ) ; +#12227 = AXIS2_PLACEMENT_3D ( 'NONE', #28688, #19526, #35891 ) ; +#12226 = AXIS2_PLACEMENT_3D ( 'NONE', #5289, #18321, #8529 ) ; +#12228 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#12229 = FACE_OUTER_BOUND ( 'NONE', #8808, .T. ) ; +#12230 = FILL_AREA_STYLE ('',( #14939 ) ) ; +#12231 = ADVANCED_FACE ( 'NONE', ( #11827 ), #41539, .T. ) ; +#12232 = SURFACE_STYLE_USAGE ( .BOTH. , #34854 ) ; +#12233 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12234 = ORIENTED_EDGE ( 'NONE', *, *, #24286, .F. ) ; +#12235 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12236 = PRESENTATION_STYLE_ASSIGNMENT (( #33182 ) ) ; +#12237 = FILL_AREA_STYLE_COLOUR ( '', #4601 ) ; +#12238 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12239 = ORIENTED_EDGE ( 'NONE', *, *, #41061, .T. ) ; +#12240 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12241 = ORIENTED_EDGE ( 'NONE', *, *, #33397, .T. ) ; +#12242 = FILL_AREA_STYLE ('',( #38509 ) ) ; +#12243 = VERTEX_POINT ( 'NONE', #28571 ) ; +#12244 = EDGE_CURVE ( 'NONE', #3794, #13925, #10812, .T. ) ; +#12245 = ORIENTED_EDGE ( 'NONE', *, *, #17316, .T. ) ; +#12246 = SURFACE_SIDE_STYLE ('',( #1092 ) ) ; +#12247 = ORIENTED_EDGE ( 'NONE', *, *, #11928, .F. ) ; +#12248 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12249 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12250 = EDGE_CURVE ( 'NONE', #33261, #24138, #16909, .T. ) ; +#12251 = STYLED_ITEM ( 'NONE', ( #6787 ), #10972 ) ; +#12252 = FILL_AREA_STYLE ('',( #35152 ) ) ; +#12253 = DIRECTION ( 'NONE', ( -2.168404344971012800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12254 = EDGE_LOOP ( 'NONE', ( #37139, #22213, #9520, #32621 ) ) ; +#12255 = CARTESIAN_POINT ( 'NONE', ( 3.629999999999999900, -1.499998254703818900, -6.699999999999994000 ) ) ; +#12256 = PRESENTATION_STYLE_ASSIGNMENT (( #29795 ) ) ; +#12257 = EDGE_LOOP ( 'NONE', ( #30855, #15962, #17912, #5872 ) ) ; +#12258 = PRESENTATION_STYLE_ASSIGNMENT (( #29200 ) ) ; +#12259 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12260 = STYLED_ITEM ( 'NONE', ( #6288 ), #15300 ) ; +#12261 = PRESENTATION_STYLE_ASSIGNMENT (( #24219 ) ) ; +#12262 = VECTOR ( 'NONE', #34333, 1000.000000000000000 ) ; +#12263 = VECTOR ( 'NONE', #13396, 1000.000000000000000 ) ; +#12264 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.4300017452961689100, -5.150000000000000400 ) ) ; +#12265 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000000200, -1.499998254703827100, -5.049999999999993600 ) ) ; +#12266 = ADVANCED_FACE ( 'NONE', ( #22985 ), #87, .F. ) ; +#12267 = AXIS2_PLACEMENT_3D ( 'NONE', #16214, #35705, #6468 ) ; +#12269 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#12268 = AXIS2_PLACEMENT_3D ( 'NONE', #9487, #2495, #6258 ) ; +#12270 = AXIS2_PLACEMENT_3D ( 'NONE', #11023, #39699, #10595 ) ; +#12271 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12272 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12274 = EDGE_CURVE ( 'NONE', #36543, #24062, #14405, .T. ) ; +#12273 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26657 ), #20998 ) ; +#12275 = SURFACE_SIDE_STYLE ('',( #32715 ) ) ; +#12276 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12277 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12278 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12279 = ORIENTED_EDGE ( 'NONE', *, *, #15462, .T. ) ; +#12280 = ADVANCED_FACE ( 'NONE', ( #22479 ), #13577, .F. ) ; +#12282 = AXIS2_PLACEMENT_3D ( 'NONE', #36400, #17191, #1124 ) ; +#12281 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23957 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17390, #33473, #1312 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12283 = FILL_AREA_STYLE_COLOUR ( '', #6320 ) ; +#12284 = AXIS2_PLACEMENT_3D ( 'NONE', #17155, #13306, #3995 ) ; +#12285 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12286 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#12287 = SURFACE_STYLE_FILL_AREA ( #41763 ) ; +#12288 = ORIENTED_EDGE ( 'NONE', *, *, #41252, .T. ) ; +#12289 = VERTEX_POINT ( 'NONE', #9754 ) ; +#12290 = CARTESIAN_POINT ( 'NONE', ( 1.486602540378444200, 1.630001745296169500, -1.700000000000001500 ) ) ; +#12291 = VERTEX_POINT ( 'NONE', #29535 ) ; +#12292 = ORIENTED_EDGE ( 'NONE', *, *, #25773, .F. ) ; +#12293 = SURFACE_STYLE_FILL_AREA ( #36607 ) ; +#12294 = PRESENTATION_STYLE_ASSIGNMENT (( #38211 ) ) ; +#12295 = PRESENTATION_STYLE_ASSIGNMENT (( #39517 ) ) ; +#12296 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#12297 = ORIENTED_EDGE ( 'NONE', *, *, #16980, .F. ) ; +#12298 = VECTOR ( 'NONE', #22592, 1000.000000000000000 ) ; +#12299 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.4300017452961691400, -6.899999999999998600 ) ) ; +#12300 = FILL_AREA_STYLE_COLOUR ( '', #31046 ) ; +#12301 = FILL_AREA_STYLE_COLOUR ( '', #30422 ) ; +#12302 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #769, 'distance_accuracy_value', 'NONE'); +#12303 = SURFACE_SIDE_STYLE ('',( #38244 ) ) ; +#12304 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12305 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000012100, -1.999998254703822000, -3.549261509947658300 ) ) ; +#12306 = PLANE ( 'NONE', #9785 ) ; +#12307 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.280001745296167800, -4.200000000000000200 ) ) ; +#12308 = EDGE_CURVE ( 'NONE', #13046, #2675, #35602, .T. ) ; +#12309 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#12310 = CARTESIAN_POINT ( 'NONE', ( -3.126618024744703700, -0.2999999999999999300, 0.9879080043746013600 ) ) ; +#12311 = EDGE_CURVE ( 'NONE', #5245, #2937, #16385, .T. ) ; +#12312 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23417, 'distance_accuracy_value', 'NONE'); +#12313 = FILL_AREA_STYLE_COLOUR ( '', #37152 ) ; +#12314 = CIRCLE ( 'NONE', #27824, 0.1000000000000001200 ) ; +#12315 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12316 = ADVANCED_FACE ( 'NONE', ( #41150 ), #2276, .T. ) ; +#12317 = DIRECTION ( 'NONE', ( -1.293877011362424000E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12318 = AXIS2_PLACEMENT_3D ( 'NONE', #8807, #25383, #15606 ) ; +#12319 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12320 = CARTESIAN_POINT ( 'NONE', ( 3.337718385397934600, -0.07499999999999999700, 0.4680226303560737800 ) ) ; +#12321 = LINE ( 'NONE', #36624, #22948 ) ; +#12322 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 1.485063948690956900E-014, -3.099999999999998800 ) ) ; +#12323 = CONICAL_SURFACE ( 'NONE', #41587, 0.3000000000000001000, 0.3490658503988666700 ) ; +#12324 = ORIENTED_EDGE ( 'NONE', *, *, #22008, .F. ) ; +#12325 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -2.031000000000000600, -2.294459358809380200 ) ) ; +#12326 = DIRECTION ( 'NONE', ( -4.336808689942002000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12327 = ORIENTED_EDGE ( 'NONE', *, *, #31811, .T. ) ; +#12328 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6436 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3044, #19155, #35084 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12329 = EDGE_LOOP ( 'NONE', ( #26707, #11921, #11228, #24252 ) ) ; +#12330 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, 0.2000000000000000100, -1.600000000000000300 ) ) ; +#12332 = ORIENTED_EDGE ( 'NONE', *, *, #27875, .F. ) ; +#12331 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#12333 = VERTEX_POINT ( 'NONE', #19697 ) ; +#12334 = SURFACE_SIDE_STYLE ('',( #17643 ) ) ; +#12335 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19422 ), #30230 ) ; +#12336 = FILL_AREA_STYLE_COLOUR ( '', #13983 ) ; +#12337 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.2999999999999999900, -1.249999999999999800 ) ) ; +#12340 = EDGE_CURVE ( 'NONE', #16077, #18064, #8776, .T. ) ; +#12339 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12338 = AXIS2_PLACEMENT_3D ( 'NONE', #37464, #40843, #15302 ) ; +#12341 = SURFACE_STYLE_USAGE ( .BOTH. , #22255 ) ; +#12342 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12343 = FACE_OUTER_BOUND ( 'NONE', #38586, .T. ) ; +#12344 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745278514100, -2.294459358809381100 ) ) ; +#12345 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30003, 'distance_accuracy_value', 'NONE'); +#12347 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31118 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25485, #35071, #38025 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12346 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8804 ) ) ; +#12348 = SURFACE_STYLE_FILL_AREA ( #2524 ) ; +#12349 = FILL_AREA_STYLE ('',( #38464 ) ) ; +#12350 = EDGE_LOOP ( 'NONE', ( #41865, #34816, #16397, #7053 ) ) ; +#12351 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21468 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9827, #32444, #22852 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12352 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16141 ), #15350 ) ; +#12353 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38270, 'distance_accuracy_value', 'NONE'); +#12354 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12355 = TOROIDAL_SURFACE ( 'NONE', #27429, 1.600000000000129800, 0.1499999999998701300 ) ; +#12356 = CARTESIAN_POINT ( 'NONE', ( -3.095000000000000200, -0.07499999999999999700, -1.532287565553000200 ) ) ; +#12357 = ORIENTED_EDGE ( 'NONE', *, *, #39407, .F. ) ; +#12358 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#12359 = ORIENTED_EDGE ( 'NONE', *, *, #19474, .F. ) ; +#12360 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 10.30000000000000100, -1.250000000000000000 ) ) ; +#12361 = CARTESIAN_POINT ( 'NONE', ( 4.821303021499042900, -0.2800000000000026400, -0.3590461068823621000 ) ) ; +#12362 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12363 = ORIENTED_EDGE ( 'NONE', *, *, #28409, .T. ) ; +#12364 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12365 = PLANE ( 'NONE', #26105 ) ; +#12366 = ORIENTED_EDGE ( 'NONE', *, *, #14653, .T. ) ; +#12367 = PLANE ( 'NONE', #38431 ) ; +#12368 = VERTEX_POINT ( 'NONE', #23045 ) ; +#12370 = CIRCLE ( 'NONE', #39569, 0.3000000000000003800 ) ; +#12369 = PRESENTATION_STYLE_ASSIGNMENT (( #22779 ) ) ; +#12371 = PLANE ( 'NONE', #20547 ) ; +#12372 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12373 = EDGE_CURVE ( 'NONE', #3291, #40292, #13324, .T. ) ; +#12374 = VECTOR ( 'NONE', #22728, 1000.000000000000000 ) ; +#12375 = ORIENTED_EDGE ( 'NONE', *, *, #8832, .F. ) ; +#12376 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12377 = SURFACE_STYLE_FILL_AREA ( #39711 ) ; +#12378 = EDGE_CURVE ( 'NONE', #8213, #13933, #13631, .T. ) ; +#12379 = AXIS2_PLACEMENT_3D ( 'NONE', #26057, #29291, #9919 ) ; +#12380 = VECTOR ( 'NONE', #8367, 1000.000000000000000 ) ; +#12381 = ORIENTED_EDGE ( 'NONE', *, *, #38564, .F. ) ; +#12382 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745278514100, -2.604459358809383800 ) ) ; +#12383 = EDGE_CURVE ( 'NONE', #7023, #37349, #13067, .T. ) ; +#12384 = PLANE ( 'NONE', #11225 ) ; +#12385 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.8500017452961652300, -4.875000000000000900 ) ) ; +#12386 = STYLED_ITEM ( 'NONE', ( #33922 ), #21567 ) ; +#12387 = DIRECTION ( 'NONE', ( 0.08715574274766037200, 0.0000000000000000000, -0.9961946980917453200 ) ) ; +#12388 = AXIS2_PLACEMENT_3D ( 'NONE', #32470, #32616, #20075 ) ; +#12389 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12391 = EDGE_CURVE ( 'NONE', #21841, #6894, #27028, .T. ) ; +#12390 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40566 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33504, #7652, #26894 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12392 = ORIENTED_EDGE ( 'NONE', *, *, #21709, .T. ) ; +#12393 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12394 = SURFACE_SIDE_STYLE ('',( #1047 ) ) ; +#12395 = CARTESIAN_POINT ( 'NONE', ( -3.127842712444462800, 0.2999999999999999900, -1.600000000004099900 ) ) ; +#12397 = AXIS2_PLACEMENT_3D ( 'NONE', #18752, #5881, #28466 ) ; +#12396 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4287 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5514, #18251, #24898 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12398 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13785 ) ) ; +#12399 = SURFACE_STYLE_USAGE ( .BOTH. , #38525 ) ; +#12400 = VECTOR ( 'NONE', #19339, 1000.000000000000000 ) ; +#12401 = CYLINDRICAL_SURFACE ( 'NONE', #32398, 0.04999999999999969700 ) ; +#12402 = STYLED_ITEM ( 'NONE', ( #41596 ), #33460 ) ; +#12403 = FILL_AREA_STYLE_COLOUR ( '', #15794 ) ; +#12404 = FILL_AREA_STYLE_COLOUR ( '', #37194 ) ; +#12405 = CARTESIAN_POINT ( 'NONE', ( 4.070001745296171900, 0.2799999999999973100, -4.400000000000000400 ) ) ; +#12406 = VERTEX_POINT ( 'NONE', #33628 ) ; +#12407 = ORIENTED_EDGE ( 'NONE', *, *, #29086, .T. ) ; +#12408 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#12409 = ORIENTED_EDGE ( 'NONE', *, *, #41845, .T. ) ; +#12410 = FILL_AREA_STYLE ('',( #31909 ) ) ; +#12411 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12412 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#12413 = CIRCLE ( 'NONE', #40727, 0.09999999999987406500 ) ; +#12414 = ORIENTED_EDGE ( 'NONE', *, *, #9045, .T. ) ; +#12416 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -2.224004456380521900E-016 ) ) ; +#12415 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12417 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#12418 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#12419 = EDGE_LOOP ( 'NONE', ( #38798, #18379, #22243 ) ) ; +#12420 = LINE ( 'NONE', #2357, #22062 ) ; +#12421 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12422 = ADVANCED_FACE ( 'NONE', ( #20966 ), #29507, .F. ) ; +#12423 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12424 = SURFACE_STYLE_FILL_AREA ( #31113 ) ; +#12425 = EDGE_CURVE ( 'NONE', #5335, #24916, #12314, .T. ) ; +#12426 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#12427 = FILL_AREA_STYLE_COLOUR ( '', #13180 ) ; +#12428 = PLANE ( 'NONE', #18210 ) ; +#12429 = ADVANCED_FACE ( 'NONE', ( #30533 ), #39100, .F. ) ; +#12430 = PRESENTATION_STYLE_ASSIGNMENT (( #23210 ) ) ; +#12431 = FILL_AREA_STYLE_COLOUR ( '', #21038 ) ; +#12432 = EDGE_CURVE ( 'NONE', #5142, #28948, #27483, .T. ) ; +#12433 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5157 ) ) ; +#12434 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18394, 'distance_accuracy_value', 'NONE'); +#12435 = CARTESIAN_POINT ( 'NONE', ( 2.573205080756887100, 1.630001745296169500, -1.650000000000000400 ) ) ; +#12436 = FILL_AREA_STYLE_COLOUR ( '', #35088 ) ; +#12437 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10268 ) ) ; +#12438 = EDGE_LOOP ( 'NONE', ( #3814, #20566, #9068, #39196 ) ) ; +#12439 = ORIENTED_EDGE ( 'NONE', *, *, #23788, .F. ) ; +#12440 = PRESENTATION_STYLE_ASSIGNMENT (( #16515 ) ) ; +#12441 = CLOSED_SHELL ( 'NONE', ( #4934, #38960, #22908, #30733, #18919, #26703 ) ) ; +#12442 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12443 = AXIS2_PLACEMENT_3D ( 'NONE', #25760, #230, #9761 ) ; +#12444 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.380001745296130000, -4.781671842700004200 ) ) ; +#12445 = LINE ( 'NONE', #24654, #13461 ) ; +#12446 = SURFACE_STYLE_USAGE ( .BOTH. , #9472 ) ; +#12447 = FACE_OUTER_BOUND ( 'NONE', #4110, .T. ) ; +#12448 = ORIENTED_EDGE ( 'NONE', *, *, #14769, .T. ) ; +#12449 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12450 = STYLED_ITEM ( 'NONE', ( #27814 ), #37832 ) ; +#12451 = ORIENTED_EDGE ( 'NONE', *, *, #27078, .F. ) ; +#12452 = STYLED_ITEM ( 'NONE', ( #860 ), #17798 ) ; +#12453 = CARTESIAN_POINT ( 'NONE', ( 4.542777971927784500, -0.1199982547038323900, -6.539400084828218800 ) ) ; +#12454 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28975 ), #9482 ) ; +#12455 = CARTESIAN_POINT ( 'NONE', ( 2.673205080756886800, 1.480001745296169600, -1.650000000000000800 ) ) ; +#12456 = PRESENTATION_STYLE_ASSIGNMENT (( #25586 ) ) ; +#12457 = PLANE ( 'NONE', #39610 ) ; +#12458 = CIRCLE ( 'NONE', #24752, 0.3600000000000078700 ) ; +#12459 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.07499999999999998300, -1.399999999996500000 ) ) ; +#12461 = EDGE_CURVE ( 'NONE', #28663, #12505, #33044, .T. ) ; +#12460 = STYLED_ITEM ( 'NONE', ( #9524 ), #34467 ) ; +#12462 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12464 = STYLED_ITEM ( 'NONE', ( #38918 ), #9286 ) ; +#12463 = FILL_AREA_STYLE_COLOUR ( '', #8374 ) ; +#12465 = PLANE ( 'NONE', #32257 ) ; +#12466 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 10.30000000000000100, -1.250000000000000000 ) ) ; +#12467 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 1.630001745296169500, -1.650000000000000800 ) ) ; +#12468 = LINE ( 'NONE', #13924, #19084 ) ; +#12469 = ADVANCED_FACE ( 'NONE', ( #28504 ), #30378, .T. ) ; +#12470 = ORIENTED_EDGE ( 'NONE', *, *, #40267, .T. ) ; +#12471 = VECTOR ( 'NONE', #23069, 1000.000000000000000 ) ; +#12472 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#12473 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32845, 'distance_accuracy_value', 'NONE'); +#12474 = DIRECTION ( 'NONE', ( -2.465190328815661900E-032, -1.000000000000000000, 2.367138801244519300E-016 ) ) ; +#12475 = ORIENTED_EDGE ( 'NONE', *, *, #11134, .T. ) ; +#12476 = VERTEX_POINT ( 'NONE', #1739 ) ; +#12477 = SURFACE_STYLE_USAGE ( .BOTH. , #3309 ) ; +#12478 = VERTEX_POINT ( 'NONE', #8038 ) ; +#12479 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12480 = ORIENTED_EDGE ( 'NONE', *, *, #2428, .T. ) ; +#12481 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12482 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#12484 = ADVANCED_FACE ( 'NONE', ( #12796 ), #14835, .T. ) ; +#12483 = PRESENTATION_STYLE_ASSIGNMENT (( #794 ) ) ; +#12485 = VECTOR ( 'NONE', #40324, 1000.000000000000000 ) ; +#12486 = VECTOR ( 'NONE', #40889, 1000.000000000000100 ) ; +#12487 = DIRECTION ( 'NONE', ( 2.891205793294677000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12488 = ORIENTED_EDGE ( 'NONE', *, *, #37744, .F. ) ; +#12489 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12490 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12491 = VERTEX_POINT ( 'NONE', #37427 ) ; +#12492 = EDGE_CURVE ( 'NONE', #40206, #13290, #22431, .T. ) ; +#12493 = VECTOR ( 'NONE', #33322, 1000.000000000000000 ) ; +#12494 = EDGE_CURVE ( 'NONE', #30257, #380, #3223, .T. ) ; +#12495 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3842 ) ) ; +#12496 = EDGE_LOOP ( 'NONE', ( #5650, #9227, #904, #38545, #39070 ) ) ; +#12497 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#12498 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, 0.03000174529616954700, -6.900000000000000400 ) ) ; +#12499 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #6705, #29302, #22551, #10074, #19330, #12784 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#12500 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12501 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12502 = SURFACE_SIDE_STYLE ('',( #28069 ) ) ; +#12503 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39298 ), #2548 ) ; +#12504 = SURFACE_SIDE_STYLE ('',( #21320 ) ) ; +#12505 = VERTEX_POINT ( 'NONE', #24026 ) ; +#12506 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12507 = PRESENTATION_STYLE_ASSIGNMENT (( #7972 ) ) ; +#12508 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9212 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39659, #26702, #7304 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12510 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21155 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4429, #20285, #4139 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12509 = AXIS2_PLACEMENT_3D ( 'NONE', #14748, #40857, #31260 ) ; +#12511 = VERTEX_POINT ( 'NONE', #8455 ) ; +#12512 = CIRCLE ( 'NONE', #24105, 0.1000000000000009100 ) ; +#12515 = EDGE_CURVE ( 'NONE', #19867, #31087, #19403, .T. ) ; +#12514 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12513 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40681 ), #39872 ) ; +#12516 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12517 = ADVANCED_FACE ( 'NONE', ( #27988 ), #17548, .T. ) ; +#12518 = ORIENTED_EDGE ( 'NONE', *, *, #34319, .T. ) ; +#12519 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12520 = ORIENTED_EDGE ( 'NONE', *, *, #13323, .F. ) ; +#12521 = SURFACE_SIDE_STYLE ('',( #31317 ) ) ; +#12522 = ORIENTED_EDGE ( 'NONE', *, *, #18364, .T. ) ; +#12524 = DIRECTION ( 'NONE', ( -7.744301232039317900E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12523 = PRESENTATION_STYLE_ASSIGNMENT (( #36600 ) ) ; +#12526 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14965 ), #39319 ) ; +#12525 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32832 ), #33404 ) ; +#12527 = PRESENTATION_STYLE_ASSIGNMENT (( #39029 ) ) ; +#12528 = SURFACE_SIDE_STYLE ('',( #28967 ) ) ; +#12529 = PRESENTATION_STYLE_ASSIGNMENT (( #6931 ) ) ; +#12530 = LINE ( 'NONE', #20503, #8957 ) ; +#12531 = PRESENTATION_STYLE_ASSIGNMENT (( #31288 ) ) ; +#12532 = ORIENTED_EDGE ( 'NONE', *, *, #14006, .F. ) ; +#12533 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 0.2999999999999999900, 0.6999999999999999600 ) ) ; +#12534 = LINE ( 'NONE', #4180, #37320 ) ; +#12535 = ORIENTED_EDGE ( 'NONE', *, *, #7248, .T. ) ; +#12536 = EDGE_LOOP ( 'NONE', ( #26084, #18406, #25148, #11071 ) ) ; +#12537 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.630001745296167500, -4.200000000000000200 ) ) ; +#12538 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41285, 'distance_accuracy_value', 'NONE'); +#12539 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -2.594459358809380900 ) ) ; +#12540 = ORIENTED_EDGE ( 'NONE', *, *, #6512, .F. ) ; +#12541 = VECTOR ( 'NONE', #36950, 1000.000000000000000 ) ; +#12543 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12542 = CARTESIAN_POINT ( 'NONE', ( -4.425000000000014000, -1.999998254703821500, -5.850738490052341600 ) ) ; +#12544 = PLANE ( 'NONE', #14281 ) ; +#12545 = PRESENTATION_STYLE_ASSIGNMENT (( #33941 ) ) ; +#12546 = PLANE ( 'NONE', #18080 ) ; +#12547 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12548 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#12549 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6324, 'distance_accuracy_value', 'NONE'); +#12550 = PRESENTATION_STYLE_ASSIGNMENT (( #4179 ) ) ; +#12551 = EDGE_CURVE ( 'NONE', #12737, #12885, #9755, .T. ) ; +#12552 = VECTOR ( 'NONE', #1611, 1000.000000000000000 ) ; +#12553 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12554 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12555 = EDGE_CURVE ( 'NONE', #15629, #20790, #18400, .T. ) ; +#12556 = CLOSED_SHELL ( 'NONE', ( #41542, #31921, #32989, #18308 ) ) ; +#12557 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, -0.7071067811865483500 ) ) ; +#12558 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#12559 = ORIENTED_EDGE ( 'NONE', *, *, #10520, .T. ) ; +#12560 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2847 ), #6870 ) ; +#12561 = VECTOR ( 'NONE', #32239, 1000.000000000000000 ) ; +#12562 = PRESENTATION_STYLE_ASSIGNMENT (( #12083 ) ) ; +#12563 = FACE_OUTER_BOUND ( 'NONE', #4121, .T. ) ; +#12564 = EDGE_LOOP ( 'NONE', ( #27625, #4896, #11053, #10583 ) ) ; +#12565 = ORIENTED_EDGE ( 'NONE', *, *, #29086, .F. ) ; +#12566 = PRESENTATION_STYLE_ASSIGNMENT (( #14761 ) ) ; +#12567 = AXIS2_PLACEMENT_3D ( 'NONE', #983, #39465, #4298 ) ; +#12568 = SURFACE_STYLE_USAGE ( .BOTH. , #3008 ) ; +#12569 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12570 = SURFACE_STYLE_USAGE ( .BOTH. , #12841 ) ; +#12571 = SURFACE_SIDE_STYLE ('',( #21047 ) ) ; +#12572 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7617 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32654, #28979, #35638 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12573 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39933 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29356, #16527, #3665 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12574 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#12576 = EDGE_CURVE ( 'NONE', #9246, #22287, #226, .T. ) ; +#12575 = AXIS2_PLACEMENT_3D ( 'NONE', #13896, #23503, #4280 ) ; +#12577 = VERTEX_POINT ( 'NONE', #27842 ) ; +#12578 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000012100, -1.999998254703822000, -3.500000000000000000 ) ) ; +#12579 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.480001745296169800, -0.2000017452961698200 ) ) ; +#12580 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12581 = PRESENTATION_STYLE_ASSIGNMENT (( #15484 ) ) ; +#12582 = SURFACE_STYLE_FILL_AREA ( #24343 ) ; +#12583 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12584 = AXIS2_PLACEMENT_3D ( 'NONE', #38781, #16632, #29613 ) ; +#12585 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35067 ), #30181 ) ; +#12586 = FILL_AREA_STYLE ('',( #41538 ) ) ; +#12587 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12588 = AXIS2_PLACEMENT_3D ( 'NONE', #41777, #6359, #3250 ) ; +#12589 = PRESENTATION_STYLE_ASSIGNMENT (( #17691 ) ) ; +#12590 = PRESENTATION_STYLE_ASSIGNMENT (( #15972 ) ) ; +#12591 = PLANE ( 'NONE', #6032 ) ; +#12592 = CARTESIAN_POINT ( 'NONE', ( 4.570925237316274100, -0.4099999999999989200, -6.861124800398366500 ) ) ; +#12593 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12594 = ORIENTED_EDGE ( 'NONE', *, *, #1753, .T. ) ; +#12595 = CARTESIAN_POINT ( 'NONE', ( -0.1500000000000000200, -1.499998254703829500, -6.699999999999994000 ) ) ; +#12596 = PRESENTATION_STYLE_ASSIGNMENT (( #5524 ) ) ; +#12597 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998497600, -4.250000000000000000 ) ) ; +#12598 = EDGE_LOOP ( 'NONE', ( #26460, #17158, #20736, #4264 ) ) ; +#12599 = VERTEX_POINT ( 'NONE', #11567 ) ; +#12600 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -4.975000000000000500 ) ) ; +#12601 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.3699999999999850600, -4.599999999999999600 ) ) ; +#12602 = CARTESIAN_POINT ( 'NONE', ( 3.178333333333021500, 0.07499999999999998300, -0.06128090415825945100 ) ) ; +#12603 = LINE ( 'NONE', #18342, #15150 ) ; +#12604 = LINE ( 'NONE', #34876, #16678 ) ; +#12605 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22396, 'distance_accuracy_value', 'NONE'); +#12606 = PLANE ( 'NONE', #23183 ) ; +#12607 = ORIENTED_EDGE ( 'NONE', *, *, #7650, .T. ) ; +#12608 = LINE ( 'NONE', #25825, #23746 ) ; +#12609 = VERTEX_POINT ( 'NONE', #8314 ) ; +#12610 = ORIENTED_EDGE ( 'NONE', *, *, #33978, .F. ) ; +#12611 = PRESENTATION_STYLE_ASSIGNMENT (( #20316 ) ) ; +#12612 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12613 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12614 = EDGE_CURVE ( 'NONE', #23889, #466, #21935, .T. ) ; +#12615 = FILL_AREA_STYLE ('',( #15875 ) ) ; +#12616 = EDGE_CURVE ( 'NONE', #3587, #5245, #7743, .T. ) ; +#12617 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12618 = ORIENTED_EDGE ( 'NONE', *, *, #10774, .F. ) ; +#12619 = SURFACE_STYLE_FILL_AREA ( #13794 ) ; +#12620 = ORIENTED_EDGE ( 'NONE', *, *, #17223, .T. ) ; +#12621 = EDGE_CURVE ( 'NONE', #36793, #13814, #8743, .T. ) ; +#12622 = VECTOR ( 'NONE', #23979, 1000.000000000000000 ) ; +#12623 = FILL_AREA_STYLE ('',( #16029 ) ) ; +#12624 = CARTESIAN_POINT ( 'NONE', ( 4.170000000000001700, 0.2799999999999973100, -3.299999999999999800 ) ) ; +#12625 = AXIS2_PLACEMENT_3D ( 'NONE', #20613, #33977, #27621 ) ; +#12626 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.2800017452961673900, -7.150000000000001200 ) ) ; +#12627 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5027, 'distance_accuracy_value', 'NONE'); +#12628 = FILL_AREA_STYLE ('',( #38475 ) ) ; +#12629 = FILL_AREA_STYLE ('',( #41332 ) ) ; +#12630 = FILL_AREA_STYLE_COLOUR ( '', #24450 ) ; +#12631 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15488 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37945, #12500, #35128 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12632 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8298 ) ) ; +#12633 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12634 = VECTOR ( 'NONE', #29177, 1000.000000000000000 ) ; +#12635 = VERTEX_POINT ( 'NONE', #37846 ) ; +#12638 = EDGE_CURVE ( 'NONE', #35263, #21253, #23930, .T. ) ; +#12637 = AXIS2_PLACEMENT_3D ( 'NONE', #10750, #11035, #939 ) ; +#12636 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#12639 = FACE_OUTER_BOUND ( 'NONE', #18094, .T. ) ; +#12640 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12641 = PLANE ( 'NONE', #8805 ) ; +#12642 = EDGE_LOOP ( 'NONE', ( #33420, #32985, #1596, #30627 ) ) ; +#12643 = ORIENTED_EDGE ( 'NONE', *, *, #36372, .F. ) ; +#12644 = ADVANCED_FACE ( 'NONE', ( #32501 ), #18392, .F. ) ; +#12645 = VECTOR ( 'NONE', #14068, 1000.000000000000000 ) ; +#12646 = AXIS2_PLACEMENT_3D ( 'NONE', #23186, #13862, #39828 ) ; +#12647 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12648 = STYLED_ITEM ( 'NONE', ( #33268 ), #41098 ) ; +#12649 = FACE_OUTER_BOUND ( 'NONE', #36419, .T. ) ; +#12650 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12651 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1888 ) ) ; +#12652 = ORIENTED_EDGE ( 'NONE', *, *, #38365, .F. ) ; +#12653 = PLANE ( 'NONE', #33065 ) ; +#12654 = ORIENTED_EDGE ( 'NONE', *, *, #20225, .F. ) ; +#12655 = ORIENTED_EDGE ( 'NONE', *, *, #6364, .F. ) ; +#12656 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.2999999999999999900, 0.6999999999999999600 ) ) ; +#12657 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35953 ), #4003 ) ; +#12658 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12659 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.2999999999999999900, 0.6999999999999999600 ) ) ; +#12660 = ORIENTED_EDGE ( 'NONE', *, *, #40938, .F. ) ; +#12661 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12662 = LINE ( 'NONE', #3628, #6596 ) ; +#12663 = ORIENTED_EDGE ( 'NONE', *, *, #30342, .T. ) ; +#12664 = SURFACE_STYLE_USAGE ( .BOTH. , #22577 ) ; +#12665 = PRESENTATION_STYLE_ASSIGNMENT (( #19779 ) ) ; +#12666 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12667 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#12668 = CYLINDRICAL_SURFACE ( 'NONE', #14288, 0.9499999999999998400 ) ; +#12669 = SURFACE_STYLE_FILL_AREA ( #13710 ) ; +#12670 = CARTESIAN_POINT ( 'NONE', ( -3.337718385397999900, -0.07499999999999999700, 0.4680226303561000300 ) ) ; +#12671 = PLANE ( 'NONE', #29355 ) ; +#12672 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.480001745296169800, -0.2339555568811695900 ) ) ; +#12673 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521965300E-031 ) ) ; +#12674 = VECTOR ( 'NONE', #16583, 1000.000000000000000 ) ; +#12675 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.2300017452961684900, -5.175000000000000700 ) ) ; +#12676 = PRESENTATION_STYLE_ASSIGNMENT (( #38496 ) ) ; +#12677 = ORIENTED_EDGE ( 'NONE', *, *, #12015, .T. ) ; +#12678 = MANIFOLD_SOLID_BREP ( '1-1-solid23', #27582 ) ; +#12679 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#12680 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12681 = VECTOR ( 'NONE', #15100, 1000.000000000000000 ) ; +#12682 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#12683 = ADVANCED_FACE ( 'NONE', ( #40562 ), #31205, .F. ) ; +#12684 = EDGE_CURVE ( 'NONE', #16121, #21617, #1194, .T. ) ; +#12685 = FILL_AREA_STYLE_COLOUR ( '', #36748 ) ; +#12686 = VERTEX_POINT ( 'NONE', #31356 ) ; +#12687 = FACE_OUTER_BOUND ( 'NONE', #22650, .T. ) ; +#12688 = LINE ( 'NONE', #26437, #38953 ) ; +#12689 = EDGE_CURVE ( 'NONE', #39077, #27855, #36533, .T. ) ; +#12690 = CYLINDRICAL_SURFACE ( 'NONE', #33033, 0.1000000000000002600 ) ; +#12691 = FACE_OUTER_BOUND ( 'NONE', #27122, .T. ) ; +#12692 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#12693 = ORIENTED_EDGE ( 'NONE', *, *, #19903, .T. ) ; +#12694 = STYLED_ITEM ( 'NONE', ( #18487 ), #22016 ) ; +#12695 = ORIENTED_EDGE ( 'NONE', *, *, #35659, .T. ) ; +#12696 = PLANE ( 'NONE', #4754 ) ; +#12697 = ADVANCED_FACE ( 'NONE', ( #9217 ), #29417, .F. ) ; +#12698 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12473 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32845, #20169, #39335 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12699 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12700 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19731, 'distance_accuracy_value', 'NONE'); +#12701 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12920 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6605, #20059, #7152 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12702 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#12703 = ORIENTED_EDGE ( 'NONE', *, *, #8280, .F. ) ; +#12704 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#12705 = PRESENTATION_STYLE_ASSIGNMENT (( #18915 ) ) ; +#12706 = ORIENTED_EDGE ( 'NONE', *, *, #4438, .T. ) ; +#12707 = LINE ( 'NONE', #3068, #35472 ) ; +#12708 = LINE ( 'NONE', #34128, #13738 ) ; +#12709 = SURFACE_STYLE_FILL_AREA ( #7470 ) ; +#12711 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6237 ) ) ; +#12710 = AXIS2_PLACEMENT_3D ( 'NONE', #26623, #16729, #20289 ) ; +#12712 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20879 ) ) ; +#12714 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #995 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16750, #39336, #700 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12713 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36803 ), #23817 ) ; +#12716 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14153 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30239, #36880, #17259 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12715 = LINE ( 'NONE', #32259, #27904 ) ; +#12717 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12718 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3054, 'distance_accuracy_value', 'NONE'); +#12719 = PLANE ( 'NONE', #27506 ) ; +#12720 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#12721 = SURFACE_SIDE_STYLE ('',( #17495 ) ) ; +#12722 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.3699999999999855600, -4.500000000000000000 ) ) ; +#12723 = ORIENTED_EDGE ( 'NONE', *, *, #24932, .F. ) ; +#12724 = LINE ( 'NONE', #23300, #27912 ) ; +#12725 = SURFACE_SIDE_STYLE ('',( #7504 ) ) ; +#12726 = FILL_AREA_STYLE ('',( #19127 ) ) ; +#12727 = ORIENTED_EDGE ( 'NONE', *, *, #8663, .T. ) ; +#12728 = SURFACE_STYLE_USAGE ( .BOTH. , #28839 ) ; +#12729 = CARTESIAN_POINT ( 'NONE', ( 4.599429204713762200, -1.400001745296165300, -7.186926638587853400 ) ) ; +#12730 = SURFACE_STYLE_USAGE ( .BOTH. , #5699 ) ; +#12731 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12732 = FACE_OUTER_BOUND ( 'NONE', #34021, .T. ) ; +#12733 = ORIENTED_EDGE ( 'NONE', *, *, #38874, .T. ) ; +#12734 = ADVANCED_FACE ( 'NONE', ( #19374 ), #22358, .T. ) ; +#12735 = SURFACE_SIDE_STYLE ('',( #299 ) ) ; +#12736 = FACE_OUTER_BOUND ( 'NONE', #1549, .T. ) ; +#12737 = VERTEX_POINT ( 'NONE', #26131 ) ; +#12738 = CARTESIAN_POINT ( 'NONE', ( 3.395000000000000000, 0.2000000000000005100, -3.250000000000000400 ) ) ; +#12739 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#12740 = FILL_AREA_STYLE_COLOUR ( '', #11808 ) ; +#12741 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22838, 'distance_accuracy_value', 'NONE'); +#12742 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 0.3000000000000149200, -4.249999999999998200 ) ) ; +#12743 = ORIENTED_EDGE ( 'NONE', *, *, #27136, .F. ) ; +#12744 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12745 = ORIENTED_EDGE ( 'NONE', *, *, #18603, .T. ) ; +#12746 = EDGE_CURVE ( 'NONE', #25185, #26001, #4682, .T. ) ; +#12747 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12748 = CYLINDRICAL_SURFACE ( 'NONE', #10987, 0.3600000000000078700 ) ; +#12749 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12750 = SURFACE_STYLE_FILL_AREA ( #40849 ) ; +#12751 = VECTOR ( 'NONE', #30660, 1000.000000000000000 ) ; +#12752 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12753 = FILL_AREA_STYLE ('',( #3706 ) ) ; +#12754 = EDGE_CURVE ( 'NONE', #3655, #34872, #12724, .T. ) ; +#12755 = AXIS2_PLACEMENT_3D ( 'NONE', #12787, #22284, #35682 ) ; +#12756 = PLANE ( 'NONE', #9903 ) ; +#12757 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27937 ), #8414 ) ; +#12758 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#12759 = PRESENTATION_STYLE_ASSIGNMENT (( #28608 ) ) ; +#12760 = VECTOR ( 'NONE', #10808, 1000.000000000000000 ) ; +#12761 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13238 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24769, #11719, #34340 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12762 = FILL_AREA_STYLE ('',( #28872 ) ) ; +#12763 = ORIENTED_EDGE ( 'NONE', *, *, #494, .F. ) ; +#12764 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#12765 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25788 ) ) ; +#12766 = STYLED_ITEM ( 'NONE', ( #25386 ), #18919 ) ; +#12767 = SURFACE_SIDE_STYLE ('',( #21806 ) ) ; +#12768 = FILL_AREA_STYLE ('',( #125 ) ) ; +#12769 = ORIENTED_EDGE ( 'NONE', *, *, #14320, .T. ) ; +#12771 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31737 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18191, #2110, #24704 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12770 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21196 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22412, #29160, #29015 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12772 = SURFACE_STYLE_USAGE ( .BOTH. , #38895 ) ; +#12774 = EDGE_CURVE ( 'NONE', #17198, #16943, #2697, .T. ) ; +#12773 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7032 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23880, #36586, #26568 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12775 = ORIENTED_EDGE ( 'NONE', *, *, #30421, .T. ) ; +#12776 = CARTESIAN_POINT ( 'NONE', ( 3.315809924354953700, -0.3499999999999811000, -1.649999999999999900 ) ) ; +#12777 = ORIENTED_EDGE ( 'NONE', *, *, #33317, .F. ) ; +#12778 = EDGE_LOOP ( 'NONE', ( #2416, #29357, #8758, #41331 ) ) ; +#12779 = FILL_AREA_STYLE ('',( #41723 ) ) ; +#12780 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12781 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21427, 'distance_accuracy_value', 'NONE'); +#12782 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003000, 0.3000000000000150900, -4.249999999999998200 ) ) ; +#12783 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.5199999999999840300, -5.299999999999999800 ) ) ; +#12784 = CARTESIAN_POINT ( 'NONE', ( 3.095000000000000600, -0.07499999999999999700, -0.3254101966249999800 ) ) ; +#12785 = EDGE_LOOP ( 'NONE', ( #11679, #10419, #14219, #27199 ) ) ; +#12786 = CIRCLE ( 'NONE', #3156, 0.1000000000000000500 ) ; +#12787 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.139998254717358200, -6.299996877890552400 ) ) ; +#12788 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.380001745296135700, -6.031671842700004200 ) ) ; +#12789 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #3756, #1132, #39620, #16763 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#12790 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#12791 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12792 = LINE ( 'NONE', #22716, #15343 ) ; +#12793 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12794 = VERTEX_POINT ( 'NONE', #3663 ) ; +#12795 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.499998254703823800, -5.049999999999993600 ) ) ; +#12796 = FACE_OUTER_BOUND ( 'NONE', #12642, .T. ) ; +#12797 = FILL_AREA_STYLE ('',( #35986 ) ) ; +#12798 = EDGE_CURVE ( 'NONE', #350, #27235, #33976, .T. ) ; +#12799 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#12800 = SURFACE_SIDE_STYLE ('',( #39678 ) ) ; +#12801 = EDGE_CURVE ( 'NONE', #21528, #234, #2164, .T. ) ; +#12802 = FILL_AREA_STYLE_COLOUR ( '', #1223 ) ; +#12803 = FILL_AREA_STYLE_COLOUR ( '', #33835 ) ; +#12804 = VERTEX_POINT ( 'NONE', #16250 ) ; +#12805 = CARTESIAN_POINT ( 'NONE', ( -3.044999999957238600, 0.2999999999999999900, -1.517157287489537800 ) ) ; +#12806 = ORIENTED_EDGE ( 'NONE', *, *, #26187, .F. ) ; +#12807 = VERTEX_POINT ( 'NONE', #38826 ) ; +#12808 = ORIENTED_EDGE ( 'NONE', *, *, #13965, .T. ) ; +#12809 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -9.035070666963931600E-017 ) ) ; +#12810 = AXIS2_PLACEMENT_3D ( 'NONE', #20388, #33204, #36458 ) ; +#12811 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745278514100, -2.594459358809384500 ) ) ; +#12812 = FACE_OUTER_BOUND ( 'NONE', #12778, .T. ) ; +#12813 = FILL_AREA_STYLE_COLOUR ( '', #29403 ) ; +#12814 = CARTESIAN_POINT ( 'NONE', ( 2.900000000000000400, -1.139998254717351100, -5.049996877890552400 ) ) ; +#12815 = FILL_AREA_STYLE_COLOUR ( '', #13799 ) ; +#12816 = AXIS2_PLACEMENT_3D ( 'NONE', #31481, #2840, #41224 ) ; +#12817 = FACE_OUTER_BOUND ( 'NONE', #9915, .T. ) ; +#12818 = VECTOR ( 'NONE', #30831, 1000.000000000000000 ) ; +#12819 = STYLED_ITEM ( 'NONE', ( #34316 ), #6711 ) ; +#12820 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24369, 'distance_accuracy_value', 'NONE'); +#12821 = PRESENTATION_STYLE_ASSIGNMENT (( #15888 ) ) ; +#12822 = CARTESIAN_POINT ( 'NONE', ( -4.010831726188969900, 0.5300017452961686100, -4.414589803375031700 ) ) ; +#12823 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#12825 = EDGE_CURVE ( 'NONE', #34169, #34243, #6183, .T. ) ; +#12824 = STYLED_ITEM ( 'NONE', ( #38234 ), #36389 ) ; +#12826 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12827 = LINE ( 'NONE', #19762, #33483 ) ; +#12828 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12830 = STYLED_ITEM ( 'NONE', ( #39644 ), #2131 ) ; +#12829 = AXIS2_PLACEMENT_3D ( 'NONE', #473, #32762, #39389 ) ; +#12831 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#12832 = ORIENTED_EDGE ( 'NONE', *, *, #7172, .T. ) ; +#12833 = STYLED_ITEM ( 'NONE', ( #11406 ), #39162 ) ; +#12834 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.2800017452961688400, -5.200000000000001100 ) ) ; +#12835 = ORIENTED_EDGE ( 'NONE', *, *, #17391, .F. ) ; +#12836 = VERTEX_POINT ( 'NONE', #10145 ) ; +#12837 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12839 = CYLINDRICAL_SURFACE ( 'NONE', #6540, 0.1000000000000002600 ) ; +#12838 = VECTOR ( 'NONE', #20120, 1000.000000000000000 ) ; +#12840 = SURFACE_STYLE_USAGE ( .BOTH. , #22072 ) ; +#12841 = SURFACE_SIDE_STYLE ('',( #24910 ) ) ; +#12842 = VERTEX_POINT ( 'NONE', #3381 ) ; +#12843 = ADVANCED_FACE ( 'NONE', ( #21894 ), #609, .F. ) ; +#12844 = FILL_AREA_STYLE ('',( #6646 ) ) ; +#12845 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12846 = FACE_OUTER_BOUND ( 'NONE', #35207, .T. ) ; +#12847 = EDGE_CURVE ( 'NONE', #3891, #28801, #15767, .T. ) ; +#12848 = ORIENTED_EDGE ( 'NONE', *, *, #11818, .F. ) ; +#12849 = CARTESIAN_POINT ( 'NONE', ( -4.748858409427525000, -0.01999825470386262100, -7.173853277175708400 ) ) ; +#12850 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17021, 'distance_accuracy_value', 'NONE'); +#12851 = PRESENTATION_STYLE_ASSIGNMENT (( #38577 ) ) ; +#12852 = VERTEX_POINT ( 'NONE', #32751 ) ; +#12853 = EDGE_CURVE ( 'NONE', #24195, #28440, #9179, .T. ) ; +#12854 = FILL_AREA_STYLE ('',( #19548 ) ) ; +#12855 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12856 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#12857 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12858 = EDGE_CURVE ( 'NONE', #40523, #37386, #30447, .T. ) ; +#12859 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12860 = LINE ( 'NONE', #25032, #24005 ) ; +#12861 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#12862 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11265 ) ) ; +#12863 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12864 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12865 = FILL_AREA_STYLE_COLOUR ( '', #19675 ) ; +#12866 = VERTEX_POINT ( 'NONE', #35731 ) ; +#12867 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12868 = PLANE ( 'NONE', #38688 ) ; +#12869 = ORIENTED_EDGE ( 'NONE', *, *, #19969, .F. ) ; +#12870 = STYLED_ITEM ( 'NONE', ( #22493 ), #20778 ) ; +#12871 = SURFACE_STYLE_USAGE ( .BOTH. , #35230 ) ; +#12872 = FILL_AREA_STYLE ('',( #25504 ) ) ; +#12873 = ORIENTED_EDGE ( 'NONE', *, *, #12215, .F. ) ; +#12874 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2366 ) ) ; +#12875 = PRESENTATION_STYLE_ASSIGNMENT (( #15780 ) ) ; +#12876 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12877 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12878 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26618, 'distance_accuracy_value', 'NONE'); +#12879 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#12883 = EDGE_CURVE ( 'NONE', #28278, #1433, #26914, .T. ) ; +#12882 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#12881 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#12880 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25127 ) ) ; +#12884 = ADVANCED_FACE ( 'NONE', ( #1669 ), #30489, .F. ) ; +#12885 = VERTEX_POINT ( 'NONE', #29649 ) ; +#12886 = SURFACE_SIDE_STYLE ('',( #14052 ) ) ; +#12887 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#12888 = ORIENTED_EDGE ( 'NONE', *, *, #32920, .F. ) ; +#12889 = ORIENTED_EDGE ( 'NONE', *, *, #32481, .F. ) ; +#12890 = SURFACE_STYLE_FILL_AREA ( #36020 ) ; +#12892 = AXIS2_PLACEMENT_3D ( 'NONE', #497, #35632, #19273 ) ; +#12891 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29381 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1077, #4267, #10757 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12893 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#12894 = CIRCLE ( 'NONE', #25914, 0.3000000000000003800 ) ; +#12895 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#12897 = VECTOR ( 'NONE', #22808, 1000.000000000000000 ) ; +#12896 = AXIS2_PLACEMENT_3D ( 'NONE', #26478, #39020, #3714 ) ; +#12898 = SURFACE_STYLE_FILL_AREA ( #5519 ) ; +#12899 = FACE_OUTER_BOUND ( 'NONE', #14901, .T. ) ; +#12900 = EDGE_LOOP ( 'NONE', ( #32971, #24068, #8352, #27379 ) ) ; +#12901 = STYLED_ITEM ( 'NONE', ( #28118 ), #32614 ) ; +#12902 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29517, 'distance_accuracy_value', 'NONE'); +#12903 = CIRCLE ( 'NONE', #22611, 0.3499999999999996400 ) ; +#12904 = AXIS2_PLACEMENT_3D ( 'NONE', #25714, #31776, #2990 ) ; +#12905 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#12906 = VECTOR ( 'NONE', #27427, 1000.000000000000000 ) ; +#12907 = SURFACE_STYLE_FILL_AREA ( #3877 ) ; +#12908 = SURFACE_STYLE_USAGE ( .BOTH. , #32256 ) ; +#12909 = ADVANCED_FACE ( 'NONE', ( #23848 ), #20651, .T. ) ; +#12910 = SURFACE_STYLE_FILL_AREA ( #41008 ) ; +#12911 = ORIENTED_EDGE ( 'NONE', *, *, #29895, .T. ) ; +#12912 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12913 = PRESENTATION_STYLE_ASSIGNMENT (( #18582 ) ) ; +#12914 = FACE_OUTER_BOUND ( 'NONE', #26381, .T. ) ; +#12915 = SURFACE_STYLE_USAGE ( .BOTH. , #6692 ) ; +#12916 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12917 = SURFACE_SIDE_STYLE ('',( #14371 ) ) ; +#12918 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#12919 = PLANE ( 'NONE', #6876 ) ; +#12920 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6605, 'distance_accuracy_value', 'NONE'); +#12921 = VECTOR ( 'NONE', #39718, 1000.000000000000000 ) ; +#12922 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.830380236995680100, -0.8400000000000000800 ) ) ; +#12923 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865475700, 0.7071067811865475700 ) ) ; +#12924 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.2999999999999999900, -0.2498427124746000500 ) ) ; +#12925 = SURFACE_SIDE_STYLE ('',( #28823 ) ) ; +#12926 = EDGE_CURVE ( 'NONE', #25611, #28472, #31900, .T. ) ; +#12927 = ORIENTED_EDGE ( 'NONE', *, *, #21403, .F. ) ; +#12928 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12929 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12930 = EDGE_CURVE ( 'NONE', #17567, #24241, #32421, .T. ) ; +#12931 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12932 = EDGE_LOOP ( 'NONE', ( #40489, #1837, #26280 ) ) ; +#12933 = ORIENTED_EDGE ( 'NONE', *, *, #34787, .T. ) ; +#12934 = ORIENTED_EDGE ( 'NONE', *, *, #39587, .T. ) ; +#12935 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41197 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30999, #1823, #8113 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12936 = VECTOR ( 'NONE', #23015, 1000.000000000000000 ) ; +#12937 = SURFACE_STYLE_FILL_AREA ( #12168 ) ; +#12938 = DIRECTION ( 'NONE', ( -4.130328317307650600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12939 = EDGE_CURVE ( 'NONE', #29002, #23074, #38979, .T. ) ; +#12940 = VECTOR ( 'NONE', #24176, 1000.000000000000000 ) ; +#12941 = SURFACE_SIDE_STYLE ('',( #39458 ) ) ; +#12942 = ORIENTED_EDGE ( 'NONE', *, *, #39619, .F. ) ; +#12943 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12944 = ORIENTED_EDGE ( 'NONE', *, *, #3443, .T. ) ; +#12945 = AXIS2_PLACEMENT_3D ( 'NONE', #24956, #37490, #11625 ) ; +#12946 = ADVANCED_FACE ( 'NONE', ( #1638 ), #7600, .F. ) ; +#12947 = FILL_AREA_STYLE_COLOUR ( '', #27754 ) ; +#12948 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12949 = PRESENTATION_STYLE_ASSIGNMENT (( #36094 ) ) ; +#12950 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17444 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28626, #25137, #9253 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12952 = EDGE_CURVE ( 'NONE', #40206, #13612, #695, .T. ) ; +#12951 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6474 ), #15140 ) ; +#12953 = CARTESIAN_POINT ( 'NONE', ( -2.972500000000000100, 0.3000000000000001600, -1.250000000000000000 ) ) ; +#12954 = SURFACE_STYLE_FILL_AREA ( #26229 ) ; +#12955 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#12956 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18367, 'distance_accuracy_value', 'NONE'); +#12957 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12959 = AXIS2_PLACEMENT_3D ( 'NONE', #3243, #28656, #35310 ) ; +#12958 = AXIS2_PLACEMENT_3D ( 'NONE', #35156, #22455, #28524 ) ; +#12960 = AXIS2_PLACEMENT_3D ( 'NONE', #29936, #13691, #16947 ) ; +#12961 = CARTESIAN_POINT ( 'NONE', ( 4.735797985667151300, 0.2799999999999973100, -0.3279248189596167300 ) ) ; +#12962 = AXIS2_PLACEMENT_3D ( 'NONE', #27137, #23587, #20382 ) ; +#12963 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.380001745296141500, -4.781671842700004200 ) ) ; +#12964 = SURFACE_SIDE_STYLE ('',( #4088 ) ) ; +#12965 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12966 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#12967 = ORIENTED_EDGE ( 'NONE', *, *, #41759, .T. ) ; +#12968 = SURFACE_STYLE_FILL_AREA ( #21084 ) ; +#12969 = AXIS2_PLACEMENT_3D ( 'NONE', #10731, #3687, #17122 ) ; +#12970 = SURFACE_STYLE_USAGE ( .BOTH. , #32739 ) ; +#12971 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12972 = ORIENTED_EDGE ( 'NONE', *, *, #17140, .T. ) ; +#12973 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.499998254703827100, -5.049999999999993600 ) ) ; +#12974 = ORIENTED_EDGE ( 'NONE', *, *, #25795, .F. ) ; +#12975 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12976 = SURFACE_STYLE_FILL_AREA ( #30358 ) ; +#12977 = ORIENTED_EDGE ( 'NONE', *, *, #30769, .T. ) ; +#12978 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12979 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.380001745296144800, -4.781671842700004200 ) ) ; +#12980 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12981 = LINE ( 'NONE', #33949, #18084 ) ; +#12982 = LINE ( 'NONE', #24004, #4403 ) ; +#12983 = VECTOR ( 'NONE', #2670, 1000.000000000000000 ) ; +#12984 = SURFACE_SIDE_STYLE ('',( #40650 ) ) ; +#12985 = ORIENTED_EDGE ( 'NONE', *, *, #6145, .F. ) ; +#12986 = ORIENTED_EDGE ( 'NONE', *, *, #13747, .T. ) ; +#12987 = SURFACE_SIDE_STYLE ('',( #23326 ) ) ; +#12988 = PRESENTATION_STYLE_ASSIGNMENT (( #20025 ) ) ; +#12989 = EDGE_CURVE ( 'NONE', #380, #30940, #39474, .T. ) ; +#12990 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 0.2800017452961672300, -5.599999999999999600 ) ) ; +#12991 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.2999999999999999900, -1.399999999999999900 ) ) ; +#12992 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12993 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#12994 = EDGE_CURVE ( 'NONE', #38679, #32097, #3615, .T. ) ; +#12995 = FILL_AREA_STYLE_COLOUR ( '', #22309 ) ; +#12996 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#12997 = AXIS2_PLACEMENT_3D ( 'NONE', #2142, #31182, #27812 ) ; +#12998 = EDGE_LOOP ( 'NONE', ( #20948, #15093, #25820, #20737 ) ) ; +#12999 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35630, 'distance_accuracy_value', 'NONE'); +#13000 = CARTESIAN_POINT ( 'NONE', ( -4.721498212947778900, -0.4099999999999984200, -6.861124800398366500 ) ) ; +#13001 = AXIS2_PLACEMENT_3D ( 'NONE', #27023, #14712, #23895 ) ; +#13002 = FILL_AREA_STYLE ('',( #16408 ) ) ; +#13003 = ORIENTED_EDGE ( 'NONE', *, *, #12058, .F. ) ; +#13004 = FILL_AREA_STYLE ('',( #39129 ) ) ; +#13005 = PLANE ( 'NONE', #17584 ) ; +#13006 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41710 ) ) ; +#13007 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13008 = STYLED_ITEM ( 'NONE', ( #36596 ), #18459 ) ; +#13009 = FILL_AREA_STYLE ('',( #41680 ) ) ; +#13010 = ORIENTED_EDGE ( 'NONE', *, *, #38207, .T. ) ; +#13011 = ORIENTED_EDGE ( 'NONE', *, *, #24810, .F. ) ; +#13012 = ORIENTED_EDGE ( 'NONE', *, *, #4368, .F. ) ; +#13013 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#13014 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28749 ) ) ; +#13015 = SURFACE_STYLE_USAGE ( .BOTH. , #32368 ) ; +#13016 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -6.900000000000000400 ) ) ; +#13017 = PRESENTATION_STYLE_ASSIGNMENT (( #1103 ) ) ; +#13018 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13019 = EDGE_CURVE ( 'NONE', #12042, #14966, #8143, .T. ) ; +#13020 = ORIENTED_EDGE ( 'NONE', *, *, #38135, .T. ) ; +#13021 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13022 = VERTEX_POINT ( 'NONE', #1707 ) ; +#13023 = ORIENTED_EDGE ( 'NONE', *, *, #6679, .T. ) ; +#13024 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -3.700000000000000200 ) ) ; +#13026 = AXIS2_PLACEMENT_3D ( 'NONE', #28592, #6014, #18876 ) ; +#13025 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28991 ) ) ; +#13027 = SURFACE_SIDE_STYLE ('',( #24629 ) ) ; +#13028 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521965300E-031 ) ) ; +#13029 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#13030 = ORIENTED_EDGE ( 'NONE', *, *, #2467, .F. ) ; +#13031 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 0.3000000000000145900, -1.950000000000001300 ) ) ; +#13032 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13033 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.5199999999999841400, -4.500000000000000000 ) ) ; +#13034 = LINE ( 'NONE', #27216, #37335 ) ; +#13035 = ORIENTED_EDGE ( 'NONE', *, *, #18234, .T. ) ; +#13036 = CIRCLE ( 'NONE', #24838, 0.1000000000000002600 ) ; +#13037 = PLANE ( 'NONE', #35812 ) ; +#13038 = SURFACE_STYLE_USAGE ( .BOTH. , #26192 ) ; +#13039 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -4.675000000000000700 ) ) ; +#13040 = VERTEX_POINT ( 'NONE', #1572 ) ; +#13041 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, 0.2799999999999973100, -0.2339555568811695400 ) ) ; +#13042 = DIRECTION ( 'NONE', ( -0.9396926207859082100, 0.3420201433256694900, -5.715545067758737700E-031 ) ) ; +#13043 = PRESENTATION_STYLE_ASSIGNMENT (( #13627 ) ) ; +#13044 = EDGE_CURVE ( 'NONE', #31318, #16811, #30896, .T. ) ; +#13045 = VERTEX_POINT ( 'NONE', #17800 ) ; +#13046 = VERTEX_POINT ( 'NONE', #1998 ) ; +#13047 = ORIENTED_EDGE ( 'NONE', *, *, #24566, .F. ) ; +#13048 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875040000E-015, 6.056601140521967000E-031 ) ) ; +#13049 = LINE ( 'NONE', #3324, #29233 ) ; +#13050 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#13051 = CONICAL_SURFACE ( 'NONE', #39308, 0.3000000000000001600, 0.3490658503988666700 ) ; +#13052 = EDGE_CURVE ( 'NONE', #8041, #474, #27371, .T. ) ; +#13053 = STYLED_ITEM ( 'NONE', ( #41677 ), #10850 ) ; +#13054 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#13055 = FACE_OUTER_BOUND ( 'NONE', #25397, .T. ) ; +#13056 = FILL_AREA_STYLE ('',( #22952 ) ) ; +#13057 = CARTESIAN_POINT ( 'NONE', ( 3.163431895087529500, 0.5351372956108617600, -1.865109232484031700 ) ) ; +#13058 = SURFACE_SIDE_STYLE ('',( #10533 ) ) ; +#13059 = CIRCLE ( 'NONE', #19973, 1.493004880385253400 ) ; +#13060 = ORIENTED_EDGE ( 'NONE', *, *, #9583, .F. ) ; +#13061 = CIRCLE ( 'NONE', #20172, 1.450380239188924200 ) ; +#13062 = VERTEX_POINT ( 'NONE', #21330 ) ; +#13063 = ORIENTED_EDGE ( 'NONE', *, *, #41036, .F. ) ; +#13064 = SURFACE_STYLE_FILL_AREA ( #24377 ) ; +#13065 = CARTESIAN_POINT ( 'NONE', ( -3.245000000006000200, -0.2999999999999999900, -1.600000000000000100 ) ) ; +#13066 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13067 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #1192, #36465, #36597, #26581 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#13068 = ADVANCED_FACE ( 'NONE', ( #11186 ), #7669, .T. ) ; +#13069 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20810 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5351, #5213, #8028 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13070 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9757, 'distance_accuracy_value', 'NONE'); +#13071 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#13072 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13073 = VERTEX_POINT ( 'NONE', #27518 ) ; +#13074 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -500000.0000000000600, -1.994459358691023500 ) ) ; +#13075 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40419 ), #4979 ) ; +#13076 = CARTESIAN_POINT ( 'NONE', ( 3.337718385397934600, -0.07499999999999999700, 0.4680226303560737800 ) ) ; +#13078 = FILL_AREA_STYLE_COLOUR ( '', #39745 ) ; +#13077 = STYLED_ITEM ( 'NONE', ( #7335 ), #31322 ) ; +#13079 = CYLINDRICAL_SURFACE ( 'NONE', #34935, 0.09999999999999999200 ) ; +#13081 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10914 ), #8737 ) ; +#13080 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4432 ), #15274 ) ; +#13082 = VECTOR ( 'NONE', #6685, 1000.000000000000000 ) ; +#13083 = FILL_AREA_STYLE ('',( #19343 ) ) ; +#13085 = EDGE_CURVE ( 'NONE', #29008, #41672, #33456, .T. ) ; +#13084 = FILL_AREA_STYLE_COLOUR ( '', #32364 ) ; +#13086 = CARTESIAN_POINT ( 'NONE', ( -3.094999999999943400, -0.07499999999999998300, -1.532287565553050300 ) ) ; +#13087 = FILL_AREA_STYLE_COLOUR ( '', #5504 ) ; +#13088 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13090 = AXIS2_PLACEMENT_3D ( 'NONE', #16759, #3622, #10518 ) ; +#13089 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10927 ) ) ; +#13091 = CIRCLE ( 'NONE', #34113, 0.1000000000000002600 ) ; +#13092 = DIRECTION ( 'NONE', ( -1.548860246407863600E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13093 = EDGE_LOOP ( 'NONE', ( #11159, #6498, #9037, #12106 ) ) ; +#13094 = PRESENTATION_STYLE_ASSIGNMENT (( #23811 ) ) ; +#13095 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13096 = PRESENTATION_STYLE_ASSIGNMENT (( #22954 ) ) ; +#13097 = EDGE_LOOP ( 'NONE', ( #8525, #3932, #28769, #26325 ) ) ; +#13098 = EDGE_LOOP ( 'NONE', ( #30347, #11119, #39894, #21680 ) ) ; +#13099 = LINE ( 'NONE', #24851, #20742 ) ; +#13100 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13101 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#13102 = FILL_AREA_STYLE_COLOUR ( '', #3391 ) ; +#13103 = ORIENTED_EDGE ( 'NONE', *, *, #13291, .T. ) ; +#13104 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13105 = SURFACE_STYLE_USAGE ( .BOTH. , #41770 ) ; +#13106 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, -0.6199999999999847900, -4.599999999999999600 ) ) ; +#13107 = ORIENTED_EDGE ( 'NONE', *, *, #25178, .T. ) ; +#13109 = ORIENTED_EDGE ( 'NONE', *, *, #10950, .F. ) ; +#13108 = ADVANCED_FACE ( 'NONE', ( #16270 ), #30630, .T. ) ; +#13110 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33776, 'distance_accuracy_value', 'NONE'); +#13111 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13112 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, 0.2800000000000027500, 0.0000000000000000000 ) ) ; +#13113 = ORIENTED_EDGE ( 'NONE', *, *, #23283, .T. ) ; +#13114 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13115 = VECTOR ( 'NONE', #9685, 1000.000000000000000 ) ; +#13116 = EDGE_CURVE ( 'NONE', #4084, #36028, #33417, .T. ) ; +#13117 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11581, 'distance_accuracy_value', 'NONE'); +#13118 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13119 = PRESENTATION_STYLE_ASSIGNMENT (( #28565 ) ) ; +#13120 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#13121 = ADVANCED_FACE ( 'NONE', ( #23816 ), #1118, .F. ) ; +#13122 = FACE_OUTER_BOUND ( 'NONE', #11390, .T. ) ; +#13123 = VECTOR ( 'NONE', #9782, 1000.000000000000000 ) ; +#13124 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#13125 = EDGE_CURVE ( 'NONE', #3318, #1846, #19293, .T. ) ; +#13126 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#13127 = VECTOR ( 'NONE', #7899, 1000.000000000000000 ) ; +#13128 = PRESENTATION_STYLE_ASSIGNMENT (( #2470 ) ) ; +#13129 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16117 ) ) ; +#13130 = FACE_OUTER_BOUND ( 'NONE', #4028, .T. ) ; +#13131 = ORIENTED_EDGE ( 'NONE', *, *, #31867, .T. ) ; +#13132 = PRESENTATION_STYLE_ASSIGNMENT (( #38629 ) ) ; +#13133 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1551 ) ) ; +#13134 = EDGE_LOOP ( 'NONE', ( #25261, #23569, #36268 ) ) ; +#13135 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.2699999999999847000, -5.199999999999999300 ) ) ; +#13136 = VERTEX_POINT ( 'NONE', #22019 ) ; +#13137 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3179 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30352, #11261, #30906 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13139 = EDGE_CURVE ( 'NONE', #38185, #14370, #39950, .T. ) ; +#13138 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29663 ), #18323 ) ; +#13140 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.380001745296131500, -4.781671842700004200 ) ) ; +#13141 = SURFACE_STYLE_FILL_AREA ( #17533 ) ; +#13142 = FILL_AREA_STYLE_COLOUR ( '', #5623 ) ; +#13143 = EDGE_LOOP ( 'NONE', ( #1678, #14935, #27183 ) ) ; +#13144 = FILL_AREA_STYLE ('',( #38845 ) ) ; +#13145 = ORIENTED_EDGE ( 'NONE', *, *, #17430, .F. ) ; +#13146 = ORIENTED_EDGE ( 'NONE', *, *, #32263, .T. ) ; +#13147 = CARTESIAN_POINT ( 'NONE', ( -3.100000000000000100, -1.380001745296146200, -4.781671842700004200 ) ) ; +#13148 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8804 ), #18877 ) ; +#13149 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9367 ), #15349 ) ; +#13150 = CARTESIAN_POINT ( 'NONE', ( 3.094999999999943400, 0.07499999999999998300, -1.532287565553050300 ) ) ; +#13151 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13152 = STYLED_ITEM ( 'NONE', ( #1698 ), #32138 ) ; +#13153 = SURFACE_STYLE_USAGE ( .BOTH. , #32502 ) ; +#13154 = ORIENTED_EDGE ( 'NONE', *, *, #33646, .F. ) ; +#13155 = CARTESIAN_POINT ( 'NONE', ( -4.748858409427525000, 0.08000174529616799200, -7.173853277175703100 ) ) ; +#13156 = ADVANCED_FACE ( 'NONE', ( #10663 ), #15368, .F. ) ; +#13157 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#13158 = SURFACE_SIDE_STYLE ('',( #23011 ) ) ; +#13159 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -2.322941965694886000, 0.6999999999999999600 ) ) ; +#13160 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#13161 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13162 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39134, 'distance_accuracy_value', 'NONE'); +#13164 = SURFACE_STYLE_USAGE ( .BOTH. , #3169 ) ; +#13163 = SURFACE_STYLE_FILL_AREA ( #17998 ) ; +#13165 = CIRCLE ( 'NONE', #8781, 0.3600000000000078700 ) ; +#13166 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13167 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.2800017452961687200, -6.199999999999999300 ) ) ; +#13168 = ORIENTED_EDGE ( 'NONE', *, *, #36583, .T. ) ; +#13169 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13170 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 10.30000000000000100, -1.249999999999999800 ) ) ; +#13171 = ORIENTED_EDGE ( 'NONE', *, *, #18376, .T. ) ; +#13172 = FACE_OUTER_BOUND ( 'NONE', #940, .T. ) ; +#13173 = EDGE_LOOP ( 'NONE', ( #19318, #38867, #26952, #3168 ) ) ; +#13174 = FACE_OUTER_BOUND ( 'NONE', #25768, .T. ) ; +#13175 = EDGE_CURVE ( 'NONE', #20662, #28802, #8635, .T. ) ; +#13176 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22467, 'distance_accuracy_value', 'NONE'); +#13177 = EDGE_CURVE ( 'NONE', #35649, #25611, #10121, .T. ) ; +#13178 = LINE ( 'NONE', #15163, #4613 ) ; +#13179 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13180 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#13181 = EDGE_LOOP ( 'NONE', ( #18219, #20655, #34422, #26498, #34068, #35657, #19103, #6011, #1589, #30503 ) ) ; +#13182 = VECTOR ( 'NONE', #12182, 1000.000000000000000 ) ; +#13183 = EDGE_LOOP ( 'NONE', ( #21187, #33722, #13780, #1807 ) ) ; +#13184 = ORIENTED_EDGE ( 'NONE', *, *, #8861, .F. ) ; +#13185 = EDGE_CURVE ( 'NONE', #4829, #22693, #40981, .T. ) ; +#13186 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.837630800822890800E-016 ) ) ; +#13187 = AXIS2_PLACEMENT_3D ( 'NONE', #34115, #11365, #30448 ) ; +#13188 = CARTESIAN_POINT ( 'NONE', ( 2.995000000000000100, -0.3500000000000000300, -1.300000000000000000 ) ) ; +#13189 = SURFACE_STYLE_USAGE ( .BOTH. , #6831 ) ; +#13190 = EDGE_CURVE ( 'NONE', #27867, #18896, #16224, .T. ) ; +#13191 = ORIENTED_EDGE ( 'NONE', *, *, #32132, .F. ) ; +#13192 = PRESENTATION_STYLE_ASSIGNMENT (( #16200 ) ) ; +#13193 = EDGE_LOOP ( 'NONE', ( #33052, #3763, #9223, #38305 ) ) ; +#13194 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30779 ) ) ; +#13195 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18221 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34045, #40244, #11432 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13196 = FACE_OUTER_BOUND ( 'NONE', #2487, .T. ) ; +#13197 = FILL_AREA_STYLE_COLOUR ( '', #41618 ) ; +#13198 = FILL_AREA_STYLE ('',( #13328 ) ) ; +#13200 = EDGE_CURVE ( 'NONE', #29940, #31509, #6610, .T. ) ; +#13199 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#13201 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745278514100, -1.994459358809384200 ) ) ; +#13202 = CARTESIAN_POINT ( 'NONE', ( -2.949999999999999700, -1.380001745296126600, -6.031671842700004200 ) ) ; +#13203 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, 0.2000000000000000100, -1.600000000000000300 ) ) ; +#13204 = LINE ( 'NONE', #28049, #39468 ) ; +#13205 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26850 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20818, #14834, #8313 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13206 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13207 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13208 = STYLED_ITEM ( 'NONE', ( #1066 ), #40844 ) ; +#13209 = ADVANCED_FACE ( 'NONE', ( #38944 ), #34435, .T. ) ; +#13210 = ORIENTED_EDGE ( 'NONE', *, *, #367, .F. ) ; +#13211 = CARTESIAN_POINT ( 'NONE', ( 3.040693382414519300, -0.3244836197218135500, -1.274483619721813700 ) ) ; +#13212 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid2', #1616 ) ; +#13213 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#13214 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29747 ), #11849 ) ; +#13215 = ORIENTED_EDGE ( 'NONE', *, *, #1615, .F. ) ; +#13216 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13217 = LINE ( 'NONE', #3682, #8147 ) ; +#13218 = FACE_OUTER_BOUND ( 'NONE', #20825, .T. ) ; +#13219 = FILL_AREA_STYLE_COLOUR ( '', #26803 ) ; +#13220 = ORIENTED_EDGE ( 'NONE', *, *, #29707, .F. ) ; +#13221 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13222 = LINE ( 'NONE', #13167, #26928 ) ; +#13223 = FILL_AREA_STYLE ('',( #23266 ) ) ; +#13224 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13225 = SURFACE_SIDE_STYLE ('',( #26949 ) ) ; +#13226 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #311, 'distance_accuracy_value', 'NONE'); +#13227 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#13228 = VERTEX_POINT ( 'NONE', #8974 ) ; +#13229 = PRESENTATION_STYLE_ASSIGNMENT (( #22290 ) ) ; +#13230 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#13231 = VERTEX_POINT ( 'NONE', #2269 ) ; +#13232 = PRESENTATION_STYLE_ASSIGNMENT (( #24440 ) ) ; +#13233 = SURFACE_STYLE_FILL_AREA ( #8746 ) ; +#13234 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13235 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13236 = EDGE_CURVE ( 'NONE', #439, #3291, #9594, .T. ) ; +#13237 = LINE ( 'NONE', #4890, #19335 ) ; +#13238 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24769, 'distance_accuracy_value', 'NONE'); +#13239 = PLANE ( 'NONE', #32963 ) ; +#13240 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, -10.30000000000000100, -1.250000000000000000 ) ) ; +#13241 = EDGE_CURVE ( 'NONE', #14785, #34092, #22750, .T. ) ; +#13242 = ORIENTED_EDGE ( 'NONE', *, *, #15903, .T. ) ; +#13243 = DIRECTION ( 'NONE', ( -0.9961946980917453200, 3.129741034912049500E-016, -0.08715574274766048300 ) ) ; +#13244 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8908 ) ) ; +#13245 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -1.999999999999999600 ) ) ; +#13246 = SURFACE_SIDE_STYLE ('',( #12890 ) ) ; +#13247 = EDGE_LOOP ( 'NONE', ( #13011, #6504, #23142, #16446, #26840, #33711, #30745, #21753, #2751, #9296 ) ) ; +#13248 = STYLED_ITEM ( 'NONE', ( #32261 ), #13743 ) ; +#13249 = FILL_AREA_STYLE_COLOUR ( '', #36498 ) ; +#13250 = ORIENTED_EDGE ( 'NONE', *, *, #40026, .T. ) ; +#13251 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999998900, -0.2000000000000000100, -3.279289321881344600 ) ) ; +#13252 = ORIENTED_EDGE ( 'NONE', *, *, #25766, .F. ) ; +#13253 = AXIS2_PLACEMENT_3D ( 'NONE', #40333, #27363, #7993 ) ; +#13254 = AXIS2_PLACEMENT_3D ( 'NONE', #36926, #40277, #17865 ) ; +#13255 = VERTEX_POINT ( 'NONE', #16201 ) ; +#13256 = VERTEX_POINT ( 'NONE', #41733 ) ; +#13258 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21423 ), #11104 ) ; +#13257 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28662 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24184, #14565, #10743 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13261 = EDGE_CURVE ( 'NONE', #5853, #16131, #32874, .T. ) ; +#13260 = SURFACE_STYLE_USAGE ( .BOTH. , #2593 ) ; +#13259 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37062 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17212, #27232, #33313 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13262 = CLOSED_SHELL ( 'NONE', ( #4250, #23070, #34701, #17111, #19921, #37659 ) ) ; +#13263 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#13264 = ORIENTED_EDGE ( 'NONE', *, *, #40364, .T. ) ; +#13265 = SURFACE_STYLE_FILL_AREA ( #25451 ) ; +#13266 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23820 ), #34949 ) ; +#13267 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13268 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#13269 = ADVANCED_FACE ( 'NONE', ( #37902 ), #28896, .F. ) ; +#13270 = CIRCLE ( 'NONE', #39691, 0.2000017452961698200 ) ; +#13271 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6777 ), #26291 ) ; +#13272 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 0.2800017452961674500, -4.400000000000000400 ) ) ; +#13273 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13274 = FILL_AREA_STYLE_COLOUR ( '', #17302 ) ; +#13275 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13276 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, 0.07499999999999999700, -1.450395263067831600 ) ) ; +#13277 = FACE_OUTER_BOUND ( 'NONE', #29430, .T. ) ; +#13278 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13279 = SURFACE_STYLE_USAGE ( .BOTH. , #29378 ) ; +#13280 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.07499999999999998300, 0.6908697363250209100 ) ) ; +#13281 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.1000000000000150100, -4.250000000000000000 ) ) ; +#13282 = SURFACE_SIDE_STYLE ('',( #17741 ) ) ; +#13283 = ORIENTED_EDGE ( 'NONE', *, *, #24606, .F. ) ; +#13284 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13285 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -1.180001745296165500, -7.200000000000001100 ) ) ; +#13286 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -2.904459358809381000 ) ) ; +#13287 = FACE_OUTER_BOUND ( 'NONE', #38104, .T. ) ; +#13288 = ORIENTED_EDGE ( 'NONE', *, *, #17975, .T. ) ; +#13289 = CARTESIAN_POINT ( 'NONE', ( 3.245000000072999900, -0.3292893218813450800, -1.600000000000000300 ) ) ; +#13290 = VERTEX_POINT ( 'NONE', #151 ) ; +#13291 = EDGE_CURVE ( 'NONE', #33753, #30213, #10622, .T. ) ; +#13292 = CLOSED_SHELL ( 'NONE', ( #17746, #31482, #39584, #28995 ) ) ; +#13293 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#13295 = ORIENTED_EDGE ( 'NONE', *, *, #29136, .F. ) ; +#13294 = LINE ( 'NONE', #31593, #4733 ) ; +#13296 = ORIENTED_EDGE ( 'NONE', *, *, #7740, .F. ) ; +#13297 = FILL_AREA_STYLE_COLOUR ( '', #28719 ) ; +#13298 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13299 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 7.228014483236709400E-016 ) ) ; +#13300 = EDGE_CURVE ( 'NONE', #24062, #10955, #4561, .T. ) ; +#13301 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25526 ), #40649 ) ; +#13302 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20776, 'distance_accuracy_value', 'NONE'); +#13303 = SURFACE_STYLE_FILL_AREA ( #36589 ) ; +#13304 = FILL_AREA_STYLE ('',( #29701 ) ) ; +#13305 = ADVANCED_FACE ( 'NONE', ( #11630 ), #32417, .F. ) ; +#13306 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13307 = VECTOR ( 'NONE', #8488, 1000.000000000000000 ) ; +#13308 = AXIS2_PLACEMENT_3D ( 'NONE', #38696, #28701, #71 ) ; +#13309 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#13310 = FILL_AREA_STYLE ('',( #5865 ) ) ; +#13311 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #8154, #11001, #30221, #30498 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 5.560451059366172900, 6.283185307179586200 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956571100, 0.9569428977956571100, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#13312 = FILL_AREA_STYLE_COLOUR ( '', #12096 ) ; +#13313 = STYLED_ITEM ( 'NONE', ( #1918 ), #38948 ) ; +#13314 = STYLED_ITEM ( 'NONE', ( #25312 ), #19347 ) ; +#13315 = VECTOR ( 'NONE', #13809, 1000.000000000000000 ) ; +#13316 = SURFACE_SIDE_STYLE ('',( #21766 ) ) ; +#13317 = VECTOR ( 'NONE', #34871, 1000.000000000000000 ) ; +#13318 = ADVANCED_FACE ( 'NONE', ( #22283 ), #3214, .T. ) ; +#13320 = AXIS2_PLACEMENT_3D ( 'NONE', #1097, #14056, #10348 ) ; +#13319 = AXIS2_PLACEMENT_3D ( 'NONE', #12600, #3438, #3043 ) ; +#13321 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13323 = EDGE_CURVE ( 'NONE', #32725, #41402, #16668, .T. ) ; +#13322 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38138 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8353, #11616, #31250 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13324 = CIRCLE ( 'NONE', #39433, 0.1000000000000000500 ) ; +#13325 = FILL_AREA_STYLE_COLOUR ( '', #20422 ) ; +#13326 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -4.775000000000000400 ) ) ; +#13327 = STYLED_ITEM ( 'NONE', ( #15963 ), #25808 ) ; +#13328 = FILL_AREA_STYLE_COLOUR ( '', #22537 ) ; +#13329 = FILL_AREA_STYLE_COLOUR ( '', #11051 ) ; +#13330 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.499998254703838600, -5.049999999999993600 ) ) ; +#13331 = ORIENTED_EDGE ( 'NONE', *, *, #2177, .F. ) ; +#13332 = EDGE_LOOP ( 'NONE', ( #31445, #25648, #37188, #27944 ) ) ; +#13333 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 1.485356976305141100E-014, 0.0000000000000000000 ) ) ; +#13334 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13335 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#13336 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #25634, #9896, #32096, #32523, #35369, #35789, #32378, #19286 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 2, 4 ), + ( 0.0000000000000000000, 0.2499999999999983300, 0.4999999999999966700, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#13337 = ORIENTED_EDGE ( 'NONE', *, *, #28985, .F. ) ; +#13338 = ORIENTED_EDGE ( 'NONE', *, *, #34852, .T. ) ; +#13339 = LINE ( 'NONE', #40444, #20983 ) ; +#13340 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.499998254703829500, -6.299999999999993600 ) ) ; +#13341 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13342 = LINE ( 'NONE', #10018, #36120 ) ; +#13343 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244519300E-016 ) ) ; +#13344 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#13345 = VECTOR ( 'NONE', #2324, 1000.000000000000000 ) ; +#13346 = SURFACE_STYLE_FILL_AREA ( #33648 ) ; +#13347 = FILL_AREA_STYLE_COLOUR ( '', #30093 ) ; +#13348 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#13349 = LINE ( 'NONE', #17252, #1295 ) ; +#13350 = LINE ( 'NONE', #20674, #17929 ) ; +#13351 = VERTEX_POINT ( 'NONE', #3 ) ; +#13352 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13353 = VECTOR ( 'NONE', #22636, 1000.000000000000000 ) ; +#13354 = FILL_AREA_STYLE ('',( #32709 ) ) ; +#13355 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#13356 = EDGE_CURVE ( 'NONE', #31236, #28484, #5033, .T. ) ; +#13357 = ADVANCED_FACE ( 'NONE', ( #17714 ), #38380, .F. ) ; +#13358 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13359 = VECTOR ( 'NONE', #6484, 1000.000000000000000 ) ; +#13360 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, -0.2799999999999974200, -0.2339555568811695400 ) ) ; +#13361 = VERTEX_POINT ( 'NONE', #39183 ) ; +#13362 = EDGE_CURVE ( 'NONE', #38078, #11391, #27512, .T. ) ; +#13363 = PLANE ( 'NONE', #16139 ) ; +#13364 = VECTOR ( 'NONE', #3155, 1000.000000000000000 ) ; +#13365 = LINE ( 'NONE', #24025, #34096 ) ; +#13366 = VERTEX_POINT ( 'NONE', #3612 ) ; +#13367 = SURFACE_STYLE_FILL_AREA ( #26430 ) ; +#13368 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13369 = LINE ( 'NONE', #32145, #16433 ) ; +#13370 = VECTOR ( 'NONE', #31726, 1000.000000000000000 ) ; +#13371 = FILL_AREA_STYLE_COLOUR ( '', #14039 ) ; +#13372 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#13373 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13374 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15390, 'distance_accuracy_value', 'NONE'); +#13375 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39559 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4728, #33680, #15467 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13376 = VERTEX_POINT ( 'NONE', #16885 ) ; +#13377 = AXIS2_PLACEMENT_3D ( 'NONE', #5471, #11539, #2540 ) ; +#13378 = AXIS2_PLACEMENT_3D ( 'NONE', #9624, #9759, #38857 ) ; +#13379 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -0.9500017452961654300, -4.975000000000000500 ) ) ; +#13380 = SURFACE_STYLE_FILL_AREA ( #6028 ) ; +#13381 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#13382 = FACE_OUTER_BOUND ( 'NONE', #31310, .T. ) ; +#13384 = EDGE_CURVE ( 'NONE', #18600, #39651, #18715, .T. ) ; +#13383 = STYLED_ITEM ( 'NONE', ( #4846 ), #36631 ) ; +#13385 = ORIENTED_EDGE ( 'NONE', *, *, #32953, .T. ) ; +#13386 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13387 = VECTOR ( 'NONE', #16573, 1000.000000000000000 ) ; +#13388 = CARTESIAN_POINT ( 'NONE', ( 3.846156164834738400, 0.6165030250713639000, -4.550456058592868800 ) ) ; +#13389 = FACE_OUTER_BOUND ( 'NONE', #27488, .T. ) ; +#13391 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35066 ) ) ; +#13390 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19937 ), #14774 ) ; +#13392 = FILL_AREA_STYLE_COLOUR ( '', #6741 ) ; +#13393 = VERTEX_POINT ( 'NONE', #7404 ) ; +#13394 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34511 ) ) ; +#13395 = SURFACE_STYLE_FILL_AREA ( #9476 ) ; +#13396 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#13397 = STYLED_ITEM ( 'NONE', ( #27967 ), #31771 ) ; +#13398 = PLANE ( 'NONE', #17203 ) ; +#13399 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.6300017452961683700, -4.750000000000000000 ) ) ; +#13400 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.380001745296133300, -4.781671842700004200 ) ) ; +#13401 = CIRCLE ( 'NONE', #33347, 0.09999999999999999200 ) ; +#13402 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#13403 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#13404 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13405 = PLANE ( 'NONE', #25016 ) ; +#13406 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13407 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13408 = ORIENTED_EDGE ( 'NONE', *, *, #14681, .F. ) ; +#13409 = ORIENTED_EDGE ( 'NONE', *, *, #28130, .T. ) ; +#13410 = CIRCLE ( 'NONE', #2187, 1.200001745296169500 ) ; +#13411 = ORIENTED_EDGE ( 'NONE', *, *, #23909, .F. ) ; +#13412 = DIRECTION ( 'NONE', ( -6.056601140521965300E-031, 1.987721548152418300E-045, 1.000000000000000000 ) ) ; +#13413 = EDGE_CURVE ( 'NONE', #6479, #11648, #10075, .T. ) ; +#13414 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13415 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#13416 = ORIENTED_EDGE ( 'NONE', *, *, #7923, .F. ) ; +#13417 = SURFACE_SIDE_STYLE ('',( #11291 ) ) ; +#13418 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29065, 'distance_accuracy_value', 'NONE'); +#13419 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#13420 = ORIENTED_EDGE ( 'NONE', *, *, #809, .F. ) ; +#13421 = EDGE_CURVE ( 'NONE', #9239, #3195, #19209, .T. ) ; +#13422 = VECTOR ( 'NONE', #38617, 1000.000000000000000 ) ; +#13423 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#13424 = CARTESIAN_POINT ( 'NONE', ( 3.629999999999999900, -1.380001745296125100, -6.031671842700004200 ) ) ; +#13425 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13426 = LINE ( 'NONE', #146, #13988 ) ; +#13427 = PLANE ( 'NONE', #37215 ) ; +#13428 = EDGE_LOOP ( 'NONE', ( #27198, #20833, #40469, #30499 ) ) ; +#13429 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13430 = CARTESIAN_POINT ( 'NONE', ( 4.570925237316274100, -0.4099999999999989200, -6.861124800398366500 ) ) ; +#13431 = VECTOR ( 'NONE', #2906, 1000.000000000000000 ) ; +#13432 = VECTOR ( 'NONE', #22965, 1000.000000000000000 ) ; +#13433 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13434 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31005 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21521, #40972, #38131 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13435 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -9.035070666963931600E-017 ) ) ; +#13436 = FACE_OUTER_BOUND ( 'NONE', #13595, .T. ) ; +#13437 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13438 = AXIS2_PLACEMENT_3D ( 'NONE', #22229, #25484, #6123 ) ; +#13439 = SURFACE_SIDE_STYLE ('',( #35172 ) ) ; +#13441 = EDGE_CURVE ( 'NONE', #5959, #13682, #11591, .T. ) ; +#13440 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41843 ), #17249 ) ; +#13442 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16831, 'distance_accuracy_value', 'NONE'); +#13443 = VECTOR ( 'NONE', #20842, 1000.000000000000000 ) ; +#13444 = ORIENTED_EDGE ( 'NONE', *, *, #40736, .T. ) ; +#13445 = PRESENTATION_STYLE_ASSIGNMENT (( #27039 ) ) ; +#13446 = SURFACE_SIDE_STYLE ('',( #32660 ) ) ; +#13447 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13449 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21827 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16920, #39639, #11109 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13448 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22145 ) ) ; +#13450 = AXIS2_PLACEMENT_3D ( 'NONE', #7238, #3586, #16584 ) ; +#13451 = ORIENTED_EDGE ( 'NONE', *, *, #4205, .T. ) ; +#13452 = SURFACE_STYLE_FILL_AREA ( #1574 ) ; +#13453 = PLANE ( 'NONE', #13450 ) ; +#13454 = CIRCLE ( 'NONE', #30251, 0.1000000000000001600 ) ; +#13455 = ORIENTED_EDGE ( 'NONE', *, *, #6214, .T. ) ; +#13456 = AXIS2_PLACEMENT_3D ( 'NONE', #20210, #20351, #1419 ) ; +#13457 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13458 = VERTEX_POINT ( 'NONE', #10233 ) ; +#13459 = PLANE ( 'NONE', #32068 ) ; +#13460 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#13461 = VECTOR ( 'NONE', #34506, 1000.000000000000000 ) ; +#13462 = CARTESIAN_POINT ( 'NONE', ( -2.887224704147326900, -0.2000000000000000100, 1.150000000000000100 ) ) ; +#13463 = FACE_OUTER_BOUND ( 'NONE', #41374, .T. ) ; +#13464 = FILL_AREA_STYLE ('',( #7382 ) ) ; +#13465 = CIRCLE ( 'NONE', #22698, 0.1000000000000009100 ) ; +#13466 = PRESENTATION_STYLE_ASSIGNMENT (( #8946 ) ) ; +#13467 = ORIENTED_EDGE ( 'NONE', *, *, #20056, .F. ) ; +#13468 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13469 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13470 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13471 = ORIENTED_EDGE ( 'NONE', *, *, #5353, .F. ) ; +#13472 = DIRECTION ( 'NONE', ( 2.224004456380521900E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13473 = SURFACE_STYLE_FILL_AREA ( #23850 ) ; +#13474 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.2800017452961688400, -5.200000000000001100 ) ) ; +#13475 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.07499999999999998300, 0.6908697363250209100 ) ) ; +#13476 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13477 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13478 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13479 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30570, 'distance_accuracy_value', 'NONE'); +#13480 = ADVANCED_FACE ( 'NONE', ( #41426 ), #13482, .T. ) ; +#13481 = SURFACE_STYLE_USAGE ( .BOTH. , #13783 ) ; +#13482 = PLANE ( 'NONE', #41414 ) ; +#13483 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13484 = EDGE_CURVE ( 'NONE', #6479, #1811, #31825, .T. ) ; +#13485 = ORIENTED_EDGE ( 'NONE', *, *, #36042, .F. ) ; +#13486 = FILL_AREA_STYLE_COLOUR ( '', #32644 ) ; +#13487 = LINE ( 'NONE', #39144, #12471 ) ; +#13488 = CARTESIAN_POINT ( 'NONE', ( 2.573205080756887100, 1.630001745296169500, -1.750000000000000200 ) ) ; +#13489 = AXIS2_PLACEMENT_3D ( 'NONE', #14742, #18006, #11750 ) ; +#13490 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13491 = ORIENTED_EDGE ( 'NONE', *, *, #26634, .F. ) ; +#13492 = CARTESIAN_POINT ( 'NONE', ( -4.769999999999744700, 0.2800000000000028000, -0.2339555568811695900 ) ) ; +#13493 = EDGE_CURVE ( 'NONE', #28707, #36152, #2047, .T. ) ; +#13494 = ORIENTED_EDGE ( 'NONE', *, *, #39721, .F. ) ; +#13495 = VERTEX_POINT ( 'NONE', #23247 ) ; +#13496 = SURFACE_STYLE_FILL_AREA ( #10316 ) ; +#13497 = SURFACE_STYLE_USAGE ( .BOTH. , #38640 ) ; +#13498 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13499 = AXIS2_PLACEMENT_3D ( 'NONE', #3161, #19001, #22507 ) ; +#13500 = VERTEX_POINT ( 'NONE', #7695 ) ; +#13501 = FILL_AREA_STYLE_COLOUR ( '', #38311 ) ; +#13502 = ORIENTED_EDGE ( 'NONE', *, *, #10102, .F. ) ; +#13503 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -0.3590461068823620500 ) ) ; +#13504 = ORIENTED_EDGE ( 'NONE', *, *, #38114, .F. ) ; +#13505 = VECTOR ( 'NONE', #5521, 1000.000000000000000 ) ; +#13506 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34618 ), #19482 ) ; +#13507 = SURFACE_SIDE_STYLE ('',( #28454 ) ) ; +#13508 = FACE_OUTER_BOUND ( 'NONE', #24545, .T. ) ; +#13510 = EDGE_CURVE ( 'NONE', #17767, #29761, #10566, .T. ) ; +#13509 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21192 ) ) ; +#13511 = SURFACE_STYLE_FILL_AREA ( #40329 ) ; +#13512 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.734723475976960100E-015, 0.0000000000000000000 ) ) ; +#13513 = VECTOR ( 'NONE', #15047, 1000.000000000000000 ) ; +#13514 = ORIENTED_EDGE ( 'NONE', *, *, #37777, .F. ) ; +#13515 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13516 = VERTEX_POINT ( 'NONE', #23666 ) ; +#13517 = CYLINDRICAL_SURFACE ( 'NONE', #7616, 0.1000000000000002600 ) ; +#13518 = CARTESIAN_POINT ( 'NONE', ( 0.3999999999999999700, -0.3500000000000000300, -1.300000000000000000 ) ) ; +#13520 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25536 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32598, #20207, #312 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13519 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11892 ) ) ; +#13521 = FACE_OUTER_BOUND ( 'NONE', #41532, .T. ) ; +#13522 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'part', '', ( #30986 ) ) ; +#13523 = PLANE ( 'NONE', #5116 ) ; +#13524 = FACE_OUTER_BOUND ( 'NONE', #23018, .T. ) ; +#13525 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5326 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19004, #2642, #8933 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13526 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13527 = EDGE_LOOP ( 'NONE', ( #14627, #14450, #34288 ) ) ; +#13528 = DIRECTION ( 'NONE', ( 1.156482317317871700E-015, 1.445602896647339700E-016, 1.000000000000000000 ) ) ; +#13530 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13529 = SURFACE_STYLE_USAGE ( .BOTH. , #25975 ) ; +#13531 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, -4.688441826964342300E-016 ) ) ; +#13532 = ADVANCED_FACE ( 'NONE', ( #8543 ), #19703, .F. ) ; +#13533 = AXIS2_PLACEMENT_3D ( 'NONE', #1937, #18154, #11481 ) ; +#13534 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13535 = ORIENTED_EDGE ( 'NONE', *, *, #37222, .F. ) ; +#13536 = VECTOR ( 'NONE', #27342, 1000.000000000000000 ) ; +#13537 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000000000, 1.630001745296169500, -1.650000000000000800 ) ) ; +#13538 = ORIENTED_EDGE ( 'NONE', *, *, #15523, .F. ) ; +#13539 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13540 = ADVANCED_FACE ( 'NONE', ( #40361 ), #39348, .F. ) ; +#13541 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.879999999999742500, -0.2339555568811695900 ) ) ; +#13542 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#13543 = ORIENTED_EDGE ( 'NONE', *, *, #39907, .F. ) ; +#13544 = FILL_AREA_STYLE ('',( #29933 ) ) ; +#13545 = PRESENTATION_STYLE_ASSIGNMENT (( #23152 ) ) ; +#13546 = ORIENTED_EDGE ( 'NONE', *, *, #35031, .F. ) ; +#13547 = VECTOR ( 'NONE', #30676, 1000.000000000000000 ) ; +#13548 = ORIENTED_EDGE ( 'NONE', *, *, #37285, .F. ) ; +#13549 = SURFACE_STYLE_FILL_AREA ( #17553 ) ; +#13550 = VECTOR ( 'NONE', #23064, 1000.000000000000000 ) ; +#13551 = VECTOR ( 'NONE', #19218, 1000.000000000000000 ) ; +#13552 = LINE ( 'NONE', #38719, #5993 ) ; +#13553 = CYLINDRICAL_SURFACE ( 'NONE', #36801, 1.499999999999867700 ) ; +#13554 = LINE ( 'NONE', #29425, #11997 ) ; +#13555 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#13556 = ORIENTED_EDGE ( 'NONE', *, *, #34361, .F. ) ; +#13557 = ORIENTED_EDGE ( 'NONE', *, *, #30147, .T. ) ; +#13558 = VERTEX_POINT ( 'NONE', #21013 ) ; +#13559 = EDGE_CURVE ( 'NONE', #4942, #41198, #28271, .T. ) ; +#13560 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#13561 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#13562 = CARTESIAN_POINT ( 'NONE', ( -3.024289321881345600, -0.3500000000000000300, -1.529289321884933300 ) ) ; +#13563 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13564 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.180001745296165300, -7.300000000000000700 ) ) ; +#13565 = EDGE_CURVE ( 'NONE', #36030, #39846, #3972, .T. ) ; +#13566 = STYLED_ITEM ( 'NONE', ( #38317 ), #9866 ) ; +#13567 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, 2.322941965694886000, -1.250000000000000000 ) ) ; +#13568 = ORIENTED_EDGE ( 'NONE', *, *, #1079, .T. ) ; +#13569 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13570 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13571 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -1.380001745296131500, -4.781671842700004200 ) ) ; +#13572 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26888 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39571, #20268, #10328 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13573 = CARTESIAN_POINT ( 'NONE', ( 3.429999999999999700, -1.380001745296125100, -6.031671842700004200 ) ) ; +#13574 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37842 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15129, #2445, #37714 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13575 = CARTESIAN_POINT ( 'NONE', ( 4.750000000000003600, -0.4099999999999990900, -6.861124800398366500 ) ) ; +#13576 = FILL_AREA_STYLE_COLOUR ( '', #19491 ) ; +#13577 = PLANE ( 'NONE', #16428 ) ; +#13578 = SURFACE_STYLE_USAGE ( .BOTH. , #39266 ) ; +#13579 = STYLED_ITEM ( 'NONE', ( #36364 ), #38081 ) ; +#13580 = FILL_AREA_STYLE ('',( #38993 ) ) ; +#13581 = ADVANCED_FACE ( 'NONE', ( #21736 ), #27462, .F. ) ; +#13582 = AXIS2_PLACEMENT_3D ( 'NONE', #5780, #2431, #2977 ) ; +#13584 = AXIS2_PLACEMENT_3D ( 'NONE', #6515, #6647, #32492 ) ; +#13583 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10602 ), #12770 ) ; +#13585 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13586 = FILL_AREA_STYLE_COLOUR ( '', #415 ) ; +#13587 = FILL_AREA_STYLE ('',( #36340 ) ) ; +#13588 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999998200, -1.779999999999868100, 0.0000000000000000000 ) ) ; +#13589 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13590 = EDGE_LOOP ( 'NONE', ( #1796, #9478, #22242, #33017 ) ) ; +#13591 = EDGE_CURVE ( 'NONE', #24062, #19388, #31791, .T. ) ; +#13592 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13593 = SURFACE_STYLE_USAGE ( .BOTH. , #32657 ) ; +#13594 = FACE_OUTER_BOUND ( 'NONE', #297, .T. ) ; +#13595 = EDGE_LOOP ( 'NONE', ( #8315, #24940, #14953, #632 ) ) ; +#13596 = SURFACE_SIDE_STYLE ('',( #19105 ) ) ; +#13598 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36082 ), #37662 ) ; +#13597 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38763 ) ) ; +#13599 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.2800017452961688400, -5.200000000000000200 ) ) ; +#13600 = SURFACE_STYLE_USAGE ( .BOTH. , #32949 ) ; +#13601 = LINE ( 'NONE', #36984, #38350 ) ; +#13602 = VECTOR ( 'NONE', #35564, 1000.000000000000000 ) ; +#13603 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#13604 = VERTEX_POINT ( 'NONE', #30304 ) ; +#13605 = VERTEX_POINT ( 'NONE', #14480 ) ; +#13606 = ORIENTED_EDGE ( 'NONE', *, *, #18664, .T. ) ; +#13607 = FACE_OUTER_BOUND ( 'NONE', #32363, .T. ) ; +#13608 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.966063034915693300, -0.6228541982233617400 ) ) ; +#13609 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13610 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24347, 'distance_accuracy_value', 'NONE'); +#13611 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13612 = VERTEX_POINT ( 'NONE', #20455 ) ; +#13613 = PLANE ( 'NONE', #17009 ) ; +#13614 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 0.3500000000000000300, -1.300000000000000000 ) ) ; +#13615 = PRESENTATION_STYLE_ASSIGNMENT (( #29142 ) ) ; +#13616 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.630424214906980300, -1.149999999999999900 ) ) ; +#13617 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -2.399999999999999500 ) ) ; +#13618 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39341, 'distance_accuracy_value', 'NONE'); +#13619 = EDGE_CURVE ( 'NONE', #37630, #39388, #31305, .T. ) ; +#13620 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13621 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13622 = EDGE_CURVE ( 'NONE', #19912, #38914, #18682, .T. ) ; +#13623 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20343 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12859, #38715, #33238 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13624 = ORIENTED_EDGE ( 'NONE', *, *, #5532, .T. ) ; +#13625 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.380001745296134800, -4.781671842700004200 ) ) ; +#13626 = CARTESIAN_POINT ( 'NONE', ( 4.465000000000003400, 0.08000174529616761700, -7.350000000000000500 ) ) ; +#13627 = SURFACE_STYLE_USAGE ( .BOTH. , #33119 ) ; +#13628 = VECTOR ( 'NONE', #29828, 1000.000000000000000 ) ; +#13629 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#13630 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13631 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #29379, #13280, #13719, #20395 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#13632 = ORIENTED_EDGE ( 'NONE', *, *, #41252, .F. ) ; +#13633 = ORIENTED_EDGE ( 'NONE', *, *, #3503, .T. ) ; +#13634 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36117 ), #24485 ) ; +#13635 = VECTOR ( 'NONE', #35214, 1000.000000000000000 ) ; +#13636 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13637 = SURFACE_STYLE_FILL_AREA ( #41370 ) ; +#13638 = VECTOR ( 'NONE', #23468, 1000.000000000000000 ) ; +#13639 = CYLINDRICAL_SURFACE ( 'NONE', #20228, 0.3600000000000078700 ) ; +#13640 = ORIENTED_EDGE ( 'NONE', *, *, #37087, .T. ) ; +#13641 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, 0.6780706550913999700 ) ) ; +#13642 = EDGE_LOOP ( 'NONE', ( #29342, #16294, #25452, #5003 ) ) ; +#13643 = ORIENTED_EDGE ( 'NONE', *, *, #18001, .T. ) ; +#13644 = AXIS2_PLACEMENT_3D ( 'NONE', #13503, #10108, #1671 ) ; +#13645 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.480001745296166000, -1.649999999999999500 ) ) ; +#13647 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13646 = AXIS2_PLACEMENT_3D ( 'NONE', #16288, #22914, #19567 ) ; +#13648 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27753, 'distance_accuracy_value', 'NONE'); +#13649 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23926 ) ) ; +#13651 = EDGE_CURVE ( 'NONE', #7896, #11644, #2522, .T. ) ; +#13650 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13652 = ORIENTED_EDGE ( 'NONE', *, *, #35291, .T. ) ; +#13653 = FILL_AREA_STYLE ('',( #20328 ) ) ; +#13654 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13787, 'distance_accuracy_value', 'NONE'); +#13655 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.380001745296138200, -5.449999999999994000 ) ) ; +#13656 = PRESENTATION_STYLE_ASSIGNMENT (( #10971 ) ) ; +#13657 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13659 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33405 ), #3380 ) ; +#13658 = AXIS2_PLACEMENT_3D ( 'NONE', #8886, #31503, #37992 ) ; +#13660 = SURFACE_SIDE_STYLE ('',( #41559 ) ) ; +#13661 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11460 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26150, #12423, #25333 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13662 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#13663 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13664 = PRESENTATION_STYLE_ASSIGNMENT (( #32067 ) ) ; +#13665 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13666 = LINE ( 'NONE', #22837, #1587 ) ; +#13667 = ORIENTED_EDGE ( 'NONE', *, *, #520, .F. ) ; +#13668 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#13669 = FILL_AREA_STYLE_COLOUR ( '', #37868 ) ; +#13670 = LINE ( 'NONE', #32433, #33825 ) ; +#13671 = CARTESIAN_POINT ( 'NONE', ( 9.035018104045870900E-016, 0.2999999999999999900, -1.249999999999997800 ) ) ; +#13672 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#13673 = ORIENTED_EDGE ( 'NONE', *, *, #26184, .F. ) ; +#13674 = LINE ( 'NONE', #16289, #21822 ) ; +#13675 = LINE ( 'NONE', #36785, #19259 ) ; +#13676 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13677 = PLANE ( 'NONE', #39697 ) ; +#13678 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#13679 = EDGE_LOOP ( 'NONE', ( #36437, #39315, #32381, #33536 ) ) ; +#13680 = EDGE_CURVE ( 'NONE', #40577, #9767, #11550, .T. ) ; +#13681 = ORIENTED_EDGE ( 'NONE', *, *, #10224, .F. ) ; +#13682 = VERTEX_POINT ( 'NONE', #40869 ) ; +#13684 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13683 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13685 = FILL_AREA_STYLE ('',( #29645 ) ) ; +#13686 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13687 = FILL_AREA_STYLE ('',( #19523 ) ) ; +#13688 = EDGE_CURVE ( 'NONE', #30432, #21312, #23194, .T. ) ; +#13689 = EDGE_LOOP ( 'NONE', ( #6442, #8464, #37078, #20071, #21104, #19134, #38132 ) ) ; +#13690 = VERTEX_POINT ( 'NONE', #18442 ) ; +#13691 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13692 = STYLED_ITEM ( 'NONE', ( #21035 ), #16674 ) ; +#13693 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#13694 = FILL_AREA_STYLE_COLOUR ( '', #8726 ) ; +#13695 = STYLED_ITEM ( 'NONE', ( #12295 ), #21016 ) ; +#13696 = PRESENTATION_STYLE_ASSIGNMENT (( #20855 ) ) ; +#13697 = SURFACE_SIDE_STYLE ('',( #5679 ) ) ; +#13698 = CYLINDRICAL_SURFACE ( 'NONE', #201, 0.4000000000000000800 ) ; +#13699 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.999998254703822400, -2.599999999999999600 ) ) ; +#13700 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#13701 = ADVANCED_FACE ( 'NONE', ( #1514 ), #7978, .T. ) ; +#13702 = AXIS2_PLACEMENT_3D ( 'NONE', #21618, #31181, #15090 ) ; +#13703 = LINE ( 'NONE', #40779, #40483 ) ; +#13704 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #22992 ) ; +#13705 = CARTESIAN_POINT ( 'NONE', ( -4.748858409427525000, -1.400001745296195700, -7.173853277175703100 ) ) ; +#13706 = ORIENTED_EDGE ( 'NONE', *, *, #13903, .F. ) ; +#13708 = EDGE_CURVE ( 'NONE', #35464, #6341, #2998, .T. ) ; +#13707 = STYLED_ITEM ( 'NONE', ( #30081 ), #37040 ) ; +#13709 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13710 = FILL_AREA_STYLE ('',( #10300 ) ) ; +#13711 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13712 = ORIENTED_EDGE ( 'NONE', *, *, #27770, .T. ) ; +#13713 = CARTESIAN_POINT ( 'NONE', ( 4.620380239188927300, -0.2800000000000025200, -0.8400209439508702400 ) ) ; +#13714 = CARTESIAN_POINT ( 'NONE', ( -3.098553390611868100, -0.3499999999999999200, -1.649999999972757500 ) ) ; +#13716 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26736 ), #15874 ) ; +#13715 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26735 ) ) ; +#13717 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #244 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28997, #530, #20000 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13718 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13719 = CARTESIAN_POINT ( 'NONE', ( 3.242513005636281000, -0.07499999999999998300, 0.7036642131129724500 ) ) ; +#13720 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31847 ), #36204 ) ; +#13721 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, 0.5999999999999999800, -1.930000000000000200 ) ) ; +#13722 = ORIENTED_EDGE ( 'NONE', *, *, #17292, .F. ) ; +#13723 = FILL_AREA_STYLE ('',( #13865 ) ) ; +#13724 = ORIENTED_EDGE ( 'NONE', *, *, #19373, .F. ) ; +#13725 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.139998254717353500, -6.299996877890552400 ) ) ; +#13726 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39700 ), #783 ) ; +#13727 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#13728 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#13729 = FILL_AREA_STYLE_COLOUR ( '', #19213 ) ; +#13730 = SURFACE_STYLE_USAGE ( .BOTH. , #7490 ) ; +#13731 = FILL_AREA_STYLE_COLOUR ( '', #731 ) ; +#13732 = ORIENTED_EDGE ( 'NONE', *, *, #13421, .F. ) ; +#13733 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000001800, 0.6800017452961719700, -3.999999999999996400 ) ) ; +#13734 = FACE_OUTER_BOUND ( 'NONE', #10005, .T. ) ; +#13735 = PRESENTATION_STYLE_ASSIGNMENT (( #2415 ) ) ; +#13736 = VERTEX_POINT ( 'NONE', #30719 ) ; +#13737 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.480001745296166000, -1.749999999999998900 ) ) ; +#13738 = VECTOR ( 'NONE', #14779, 1000.000000000000000 ) ; +#13739 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13740 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13741 = VECTOR ( 'NONE', #9584, 1000.000000000000000 ) ; +#13742 = SURFACE_SIDE_STYLE ('',( #26612 ) ) ; +#13743 = ADVANCED_FACE ( 'NONE', ( #18157 ), #2087, .F. ) ; +#13744 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13745 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#13746 = SURFACE_STYLE_USAGE ( .BOTH. , #10199 ) ; +#13747 = EDGE_CURVE ( 'NONE', #7127, #39080, #18640, .T. ) ; +#13748 = ORIENTED_EDGE ( 'NONE', *, *, #11633, .T. ) ; +#13749 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 0.3499999999999996400, -1.250000000000000000 ) ) ; +#13750 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18946, 'distance_accuracy_value', 'NONE'); +#13751 = EDGE_CURVE ( 'NONE', #27458, #21189, #39842, .T. ) ; +#13752 = FILL_AREA_STYLE ('',( #12803 ) ) ; +#13753 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.3499999999999996400, -1.250000000000000000 ) ) ; +#13754 = VERTEX_POINT ( 'NONE', #34249 ) ; +#13755 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38921 ), #19471 ) ; +#13756 = FACE_OUTER_BOUND ( 'NONE', #38831, .T. ) ; +#13757 = ADVANCED_FACE ( 'NONE', ( #463 ), #12027, .T. ) ; +#13758 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13759 = LINE ( 'NONE', #17081, #28906 ) ; +#13760 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -5.475000000000000500 ) ) ; +#13761 = EDGE_CURVE ( 'NONE', #21185, #13062, #20693, .T. ) ; +#13762 = ORIENTED_EDGE ( 'NONE', *, *, #40647, .F. ) ; +#13763 = FACE_OUTER_BOUND ( 'NONE', #4017, .T. ) ; +#13764 = PRESENTATION_STYLE_ASSIGNMENT (( #24548 ) ) ; +#13765 = FILL_AREA_STYLE ('',( #9791 ) ) ; +#13766 = CLOSED_SHELL ( 'NONE', ( #26147, #7885, #17789, #39333 ) ) ; +#13767 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13768 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13769 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11583 ), #35427 ) ; +#13770 = SURFACE_STYLE_FILL_AREA ( #3983 ) ; +#13771 = EDGE_LOOP ( 'NONE', ( #40686, #7942, #21512, #888, #29677, #7811 ) ) ; +#13772 = STYLED_ITEM ( 'NONE', ( #2205 ), #12697 ) ; +#13773 = PLANE ( 'NONE', #38402 ) ; +#13774 = CARTESIAN_POINT ( 'NONE', ( 4.750000000000003600, -0.7099999999999991900, -6.861124800398366500 ) ) ; +#13776 = EDGE_CURVE ( 'NONE', #3589, #6188, #16592, .T. ) ; +#13775 = CARTESIAN_POINT ( 'NONE', ( -4.721498212947778900, -1.009999999999998700, -6.861124800398366500 ) ) ; +#13777 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.7099999999999995200, -6.861124800398366500 ) ) ; +#13778 = FILL_AREA_STYLE ('',( #7118 ) ) ; +#13779 = ORIENTED_EDGE ( 'NONE', *, *, #38015, .T. ) ; +#13780 = ORIENTED_EDGE ( 'NONE', *, *, #26897, .T. ) ; +#13782 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31869 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14558, #34190, #5092 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13781 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9969 ) ) ; +#13784 = LINE ( 'NONE', #30425, #21392 ) ; +#13783 = SURFACE_SIDE_STYLE ('',( #37423 ) ) ; +#13785 = STYLED_ITEM ( 'NONE', ( #40256 ), #41359 ) ; +#13786 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24167 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16669, #39249, #756 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13787 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13788 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.2800017452961689500, -5.150000000000000400 ) ) ; +#13789 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12538 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41285, #2352, #5558 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13790 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16113, 'distance_accuracy_value', 'NONE'); +#13791 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 0.2999999999999999900, -1.249999999999999800 ) ) ; +#13792 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#13793 = EDGE_LOOP ( 'NONE', ( #39765, #8145, #2949, #13969, #13502, #3005, #30225, #6971, #23833, #4724, #41514, #28160, #34029, #2869, #29384, #5377, #38432, #5517, #38590, #18256, #38789, #19248, #15359, #28737, #35531, #1604, #23899, #16094, #11950, #33630, #14177, #10342, #18733, #28155, #17395, #14127, #33607, #20023, #40330, #28191, #345, #40274, #19920, #21206, #35546 ) ) ; +#13794 = FILL_AREA_STYLE ('',( #36532 ) ) ; +#13795 = ADVANCED_FACE ( 'NONE', ( #5488 ), #31954, .F. ) ; +#13796 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#13797 = EDGE_LOOP ( 'NONE', ( #41834, #35611, #37350, #24874 ) ) ; +#13798 = CARTESIAN_POINT ( 'NONE', ( -4.821303021499042900, -0.2799999999999974200, -0.3590461068823618300 ) ) ; +#13799 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#13800 = ORIENTED_EDGE ( 'NONE', *, *, #1128, .T. ) ; +#13801 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#13802 = ORIENTED_EDGE ( 'NONE', *, *, #39588, .T. ) ; +#13803 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13804 = ORIENTED_EDGE ( 'NONE', *, *, #18061, .F. ) ; +#13806 = ORIENTED_EDGE ( 'NONE', *, *, #5156, .F. ) ; +#13805 = FACE_OUTER_BOUND ( 'NONE', #36696, .T. ) ; +#13807 = ORIENTED_EDGE ( 'NONE', *, *, #4726, .T. ) ; +#13808 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.4300017452961693600, -5.075000000000000200 ) ) ; +#13809 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.008560160451628400E-016, 1.000000000000000000 ) ) ; +#13810 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#13811 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13812 = SURFACE_STYLE_USAGE ( .BOTH. , #29633 ) ; +#13813 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13814 = VERTEX_POINT ( 'NONE', #12320 ) ; +#13815 = EDGE_CURVE ( 'NONE', #10284, #22882, #2448, .T. ) ; +#13816 = CIRCLE ( 'NONE', #12588, 0.1000000000000000500 ) ; +#13817 = SURFACE_STYLE_FILL_AREA ( #6336 ) ; +#13818 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13819 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.139998254717357500, -5.049996877890552400 ) ) ; +#13820 = EDGE_CURVE ( 'NONE', #30260, #13361, #39799, .T. ) ; +#13821 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16540 ) ) ; +#13822 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20685 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18062, #37937, #18622 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13823 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13824 = PRESENTATION_STYLE_ASSIGNMENT (( #15923 ) ) ; +#13825 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33325 ), #31152 ) ; +#13826 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13827 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13828 = VECTOR ( 'NONE', #37702, 1000.000000000000000 ) ; +#13829 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29218 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33315, #17214, #14375 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13830 = AXIS2_PLACEMENT_3D ( 'NONE', #19955, #13711, #3956 ) ; +#13831 = FILL_AREA_STYLE ('',( #10434 ) ) ; +#13832 = ORIENTED_EDGE ( 'NONE', *, *, #14017, .T. ) ; +#13834 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7312 ), #20375 ) ; +#13833 = STYLED_ITEM ( 'NONE', ( #17170 ), #29647 ) ; +#13835 = VECTOR ( 'NONE', #39317, 1000.000000000000000 ) ; +#13838 = EDGE_CURVE ( 'NONE', #6497, #27531, #12512, .T. ) ; +#13837 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13836 = AXIS2_PLACEMENT_3D ( 'NONE', #21000, #17734, #2472 ) ; +#13839 = CIRCLE ( 'NONE', #25010, 0.1000000000000000500 ) ; +#13840 = ORIENTED_EDGE ( 'NONE', *, *, #1239, .T. ) ; +#13841 = VERTEX_POINT ( 'NONE', #12592 ) ; +#13842 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41431 ) ) ; +#13843 = SURFACE_STYLE_USAGE ( .BOTH. , #20508 ) ; +#13845 = ORIENTED_EDGE ( 'NONE', *, *, #1987, .T. ) ; +#13844 = LINE ( 'NONE', #31456, #757 ) ; +#13846 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#13847 = ORIENTED_EDGE ( 'NONE', *, *, #14769, .F. ) ; +#13849 = STYLED_ITEM ( 'NONE', ( #15970 ), #58 ) ; +#13848 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17402 ) ) ; +#13850 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000032500, 0.4300017452961685800, -6.750000000000000000 ) ) ; +#13851 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#13852 = DIRECTION ( 'NONE', ( -0.9961946980917454300, -2.635991797933898700E-016, 0.08715574274765916500 ) ) ; +#13853 = SURFACE_SIDE_STYLE ('',( #19788 ) ) ; +#13854 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13855 = LINE ( 'NONE', #12418, #35089 ) ; +#13856 = PLANE ( 'NONE', #14646 ) ; +#13857 = CYLINDRICAL_SURFACE ( 'NONE', #34215, 0.4000000000000001900 ) ; +#13858 = VECTOR ( 'NONE', #14867, 1000.000000000000000 ) ; +#13859 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13860 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#13861 = VECTOR ( 'NONE', #11864, 1000.000000000000000 ) ; +#13862 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13863 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31234, 'distance_accuracy_value', 'NONE'); +#13864 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#13865 = FILL_AREA_STYLE_COLOUR ( '', #35870 ) ; +#13866 = PRESENTATION_STYLE_ASSIGNMENT (( #25970 ) ) ; +#13867 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13868 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#13869 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.3699999999999857300, -4.500000000000000000 ) ) ; +#13870 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000000200, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#13871 = ORIENTED_EDGE ( 'NONE', *, *, #4285, .F. ) ; +#13872 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29563, 'distance_accuracy_value', 'NONE'); +#13873 = ORIENTED_EDGE ( 'NONE', *, *, #9900, .T. ) ; +#13874 = FILL_AREA_STYLE ('',( #20546 ) ) ; +#13875 = EDGE_CURVE ( 'NONE', #38909, #34240, #15053, .T. ) ; +#13876 = VECTOR ( 'NONE', #11431, 1000.000000000000000 ) ; +#13877 = CARTESIAN_POINT ( 'NONE', ( 3.237718385397935400, 0.07499999999999998300, 0.7155313145785738800 ) ) ; +#13878 = PRESENTATION_STYLE_ASSIGNMENT (( #23965 ) ) ; +#13879 = SURFACE_STYLE_USAGE ( .BOTH. , #33234 ) ; +#13880 = EDGE_CURVE ( 'NONE', #37941, #13376, #30207, .T. ) ; +#13881 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37694 ) ) ; +#13882 = DIRECTION ( 'NONE', ( -7.744301232039317900E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13883 = LINE ( 'NONE', #35966, #9803 ) ; +#13884 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.499998254703824400, -6.299999999999993600 ) ) ; +#13885 = ORIENTED_EDGE ( 'NONE', *, *, #33113, .T. ) ; +#13886 = PLANE ( 'NONE', #12284 ) ; +#13887 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 0.3000000000000001600, -1.250000000000000000 ) ) ; +#13888 = ORIENTED_EDGE ( 'NONE', *, *, #886, .F. ) ; +#13889 = FACE_OUTER_BOUND ( 'NONE', #32152, .T. ) ; +#13890 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21574 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35345, #41525, #41665 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13891 = ORIENTED_EDGE ( 'NONE', *, *, #18979, .F. ) ; +#13892 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11714 ) ) ; +#13893 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37467 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31550, #25492, #41300 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13894 = FILL_AREA_STYLE ('',( #10347 ) ) ; +#13895 = PRESENTATION_STYLE_ASSIGNMENT (( #20284 ) ) ; +#13896 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -3.700000000000000200 ) ) ; +#13898 = AXIS2_PLACEMENT_3D ( 'NONE', #2666, #2936, #28604 ) ; +#13897 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37986 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10756, #7657, #11177 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13899 = LINE ( 'NONE', #11622, #11853 ) ; +#13900 = ORIENTED_EDGE ( 'NONE', *, *, #32242, .F. ) ; +#13901 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#13903 = EDGE_CURVE ( 'NONE', #31087, #21841, #2961, .T. ) ; +#13902 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40344 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37420, #4943, #27542 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13904 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.3300017452961685500, -6.224999999999999600 ) ) ; +#13905 = FILL_AREA_STYLE ('',( #33266 ) ) ; +#13907 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11685 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36887, #8320, #1745 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13906 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16973 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31082, #24333, #40969 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13908 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#13909 = EDGE_LOOP ( 'NONE', ( #25303, #8772, #16088, #29708 ) ) ; +#13910 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.07499999999999998300, 0.6780706550913999700 ) ) ; +#13911 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13912 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13913 = ORIENTED_EDGE ( 'NONE', *, *, #12079, .F. ) ; +#13914 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#13915 = SURFACE_SIDE_STYLE ('',( #2426 ) ) ; +#13916 = ADVANCED_FACE ( 'NONE', ( #31219 ), #8783, .F. ) ; +#13917 = ORIENTED_EDGE ( 'NONE', *, *, #2654, .F. ) ; +#13918 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13919 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13920 = SURFACE_STYLE_FILL_AREA ( #19052 ) ; +#13921 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#13922 = SURFACE_STYLE_USAGE ( .BOTH. , #36526 ) ; +#13923 = ORIENTED_EDGE ( 'NONE', *, *, #29513, .T. ) ; +#13924 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#13925 = VERTEX_POINT ( 'NONE', #2770 ) ; +#13926 = VERTEX_POINT ( 'NONE', #5991 ) ; +#13927 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#13928 = FILL_AREA_STYLE ('',( #20176 ) ) ; +#13929 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#13930 = SURFACE_STYLE_USAGE ( .BOTH. , #26951 ) ; +#13931 = PRESENTATION_STYLE_ASSIGNMENT (( #13105 ) ) ; +#13932 = CARTESIAN_POINT ( 'NONE', ( 3.178333333333020600, -0.07499999999999998300, -0.06128090415826346200 ) ) ; +#13933 = VERTEX_POINT ( 'NONE', #25363 ) ; +#13934 = PLANE ( 'NONE', #14023 ) ; +#13935 = LINE ( 'NONE', #32095, #41711 ) ; +#13936 = EDGE_CURVE ( 'NONE', #13516, #22172, #16068, .T. ) ; +#13937 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 2.168404344971009400E-016 ) ) ; +#13938 = LINE ( 'NONE', #11594, #18008 ) ; +#13939 = PRESENTATION_STYLE_ASSIGNMENT (( #7254 ) ) ; +#13940 = SURFACE_STYLE_FILL_AREA ( #14192 ) ; +#13941 = FILL_AREA_STYLE_COLOUR ( '', #25449 ) ; +#13942 = ORIENTED_EDGE ( 'NONE', *, *, #37474, .T. ) ; +#13943 = EDGE_CURVE ( 'NONE', #24110, #5512, #40318, .T. ) ; +#13944 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#13945 = CARTESIAN_POINT ( 'NONE', ( -4.450000000000001100, 0.08000174529616907400, -7.500000000000000900 ) ) ; +#13946 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39624, 'distance_accuracy_value', 'NONE'); +#13947 = SURFACE_SIDE_STYLE ('',( #24435 ) ) ; +#13948 = SURFACE_SIDE_STYLE ('',( #19639 ) ) ; +#13949 = AXIS2_PLACEMENT_3D ( 'NONE', #25514, #38050, #6147 ) ; +#13950 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#13951 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#13952 = VECTOR ( 'NONE', #14182, 1000.000000000000000 ) ; +#13953 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.630001745296169000, -4.100000000000000500 ) ) ; +#13954 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13955 = CARTESIAN_POINT ( 'NONE', ( -3.273571428571022700, 0.07499999999999999700, -0.08583148475006674400 ) ) ; +#13956 = ADVANCED_FACE ( 'NONE', ( #23644 ), #22641, .F. ) ; +#13957 = STYLED_ITEM ( 'NONE', ( #15991 ), #20457 ) ; +#13958 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33800 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38531, #9294, #2863 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13959 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36429 ), #3138 ) ; +#13960 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#13961 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13962 = FILL_AREA_STYLE ('',( #17084 ) ) ; +#13963 = LINE ( 'NONE', #30491, #15975 ) ; +#13965 = EDGE_CURVE ( 'NONE', #13045, #15157, #19625, .T. ) ; +#13964 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13383 ), #30730 ) ; +#13966 = ORIENTED_EDGE ( 'NONE', *, *, #34610, .F. ) ; +#13967 = DIRECTION ( 'NONE', ( 2.168401191219097800E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#13968 = ORIENTED_EDGE ( 'NONE', *, *, #15675, .F. ) ; +#13969 = ORIENTED_EDGE ( 'NONE', *, *, #23866, .F. ) ; +#13970 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13971 = ADVANCED_FACE ( 'NONE', ( #37788 ), #16000, .F. ) ; +#13973 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4505 ), #36442 ) ; +#13972 = STYLED_ITEM ( 'NONE', ( #35426 ), #27069 ) ; +#13974 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#13975 = DIRECTION ( 'NONE', ( -9.268445570935432200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13976 = SURFACE_STYLE_FILL_AREA ( #8495 ) ; +#13978 = VECTOR ( 'NONE', #15491, 1000.000000000000000 ) ; +#13977 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37786 ) ) ; +#13979 = CIRCLE ( 'NONE', #23812, 0.1000000000000000500 ) ; +#13980 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#13981 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#13982 = ORIENTED_EDGE ( 'NONE', *, *, #2100, .F. ) ; +#13983 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#13984 = ORIENTED_EDGE ( 'NONE', *, *, #32993, .F. ) ; +#13985 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13986 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, -1.499998254703820900, -7.500000000000006200 ) ) ; +#13987 = VECTOR ( 'NONE', #3747, 1000.000000000000000 ) ; +#13988 = VECTOR ( 'NONE', #7597, 1000.000000000000000 ) ; +#13989 = LINE ( 'NONE', #33547, #19569 ) ; +#13990 = CARTESIAN_POINT ( 'NONE', ( -3.429999999999999700, -1.139998254717349300, -6.299996877890552400 ) ) ; +#13991 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003000, 0.4300017452961686900, -6.150000000000000400 ) ) ; +#13992 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13993 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13994 = FILL_AREA_STYLE_COLOUR ( '', #2097 ) ; +#13995 = FILL_AREA_STYLE_COLOUR ( '', #11373 ) ; +#13996 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid16', #20453 ) ; +#13997 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000032500, 0.4300017452961685800, -6.850000000000000500 ) ) ; +#13998 = DIRECTION ( 'NONE', ( 1.084202172485504700E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#13999 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14000 = FACE_OUTER_BOUND ( 'NONE', #22436, .T. ) ; +#14001 = FILL_AREA_STYLE_COLOUR ( '', #8274 ) ; +#14002 = ORIENTED_EDGE ( 'NONE', *, *, #1628, .F. ) ; +#14003 = LINE ( 'NONE', #19990, #5394 ) ; +#14004 = LINE ( 'NONE', #8739, #30161 ) ; +#14005 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.280001745296167800, -4.200000000000000200 ) ) ; +#14006 = EDGE_CURVE ( 'NONE', #23867, #19853, #25179, .T. ) ; +#14008 = SURFACE_SIDE_STYLE ('',( #12201 ) ) ; +#14007 = SURFACE_STYLE_USAGE ( .BOTH. , #26734 ) ; +#14009 = EDGE_CURVE ( 'NONE', #18896, #35739, #16023, .T. ) ; +#14010 = ORIENTED_EDGE ( 'NONE', *, *, #17649, .F. ) ; +#14011 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#14012 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14013 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#14014 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165400, -6.900000000000000400 ) ) ; +#14015 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14016 = ADVANCED_FACE ( 'NONE', ( #7938 ), #6530, .F. ) ; +#14017 = EDGE_CURVE ( 'NONE', #33923, #11802, #32180, .T. ) ; +#14018 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14019 = EDGE_LOOP ( 'NONE', ( #41867, #35525, #38295, #36355 ) ) ; +#14020 = ORIENTED_EDGE ( 'NONE', *, *, #27041, .T. ) ; +#14021 = SURFACE_STYLE_FILL_AREA ( #18957 ) ; +#14022 = CLOSED_SHELL ( 'NONE', ( #28846, #10805, #7791, #21401, #32189, #22614 ) ) ; +#14023 = AXIS2_PLACEMENT_3D ( 'NONE', #36141, #23535, #30171 ) ; +#14024 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000003200, 0.4300017452961686900, -6.150000000000000400 ) ) ; +#14025 = CARTESIAN_POINT ( 'NONE', ( -3.094999999999943400, -0.07499999999999998300, -1.532287565553050300 ) ) ; +#14026 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14027 = CIRCLE ( 'NONE', #36921, 0.1000000000000000500 ) ; +#14028 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14029 = PLANE ( 'NONE', #40121 ) ; +#14030 = EDGE_CURVE ( 'NONE', #6514, #7917, #11472, .T. ) ; +#14031 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#14032 = ORIENTED_EDGE ( 'NONE', *, *, #29550, .T. ) ; +#14033 = CARTESIAN_POINT ( 'NONE', ( 2.486602540378443700, 1.480001745296169600, -1.700000000000002000 ) ) ; +#14034 = LINE ( 'NONE', #24227, #39775 ) ; +#14035 = VERTEX_POINT ( 'NONE', #3827 ) ; +#14036 = STYLED_ITEM ( 'NONE', ( #4123 ), #21442 ) ; +#14037 = SURFACE_STYLE_USAGE ( .BOTH. , #36898 ) ; +#14038 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#14039 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#14042 = EDGE_CURVE ( 'NONE', #33358, #1655, #23604, .T. ) ; +#14041 = STYLED_ITEM ( 'NONE', ( #39272 ), #24081 ) ; +#14040 = CARTESIAN_POINT ( 'NONE', ( 3.145000000000000000, -0.2999999999999999900, 0.03300000000000000200 ) ) ; +#14043 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14044 = SURFACE_SIDE_STYLE ('',( #27612 ) ) ; +#14045 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39114, 'distance_accuracy_value', 'NONE'); +#14046 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14048 = AXIS2_PLACEMENT_3D ( 'NONE', #9376, #25519, #12487 ) ; +#14047 = AXIS2_PLACEMENT_3D ( 'NONE', #32310, #9571, #38657 ) ; +#14049 = STYLED_ITEM ( 'NONE', ( #41869 ), #41051 ) ; +#14050 = FILL_AREA_STYLE_COLOUR ( '', #1539 ) ; +#14051 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35444 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37631, #36511, #26785 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14052 = SURFACE_STYLE_FILL_AREA ( #38733 ) ; +#14053 = ORIENTED_EDGE ( 'NONE', *, *, #12621, .T. ) ; +#14054 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41382 ), #39999 ) ; +#14055 = FILL_AREA_STYLE_COLOUR ( '', #7806 ) ; +#14056 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14057 = CARTESIAN_POINT ( 'NONE', ( 1.149999999999999900, -1.380001745296132400, -6.699999999999994000 ) ) ; +#14058 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14059 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 6.056601140521967900E-031 ) ) ; +#14060 = ORIENTED_EDGE ( 'NONE', *, *, #15808, .T. ) ; +#14061 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14062 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14063 = ORIENTED_EDGE ( 'NONE', *, *, #33741, .F. ) ; +#14064 = VERTEX_POINT ( 'NONE', #33082 ) ; +#14065 = ORIENTED_EDGE ( 'NONE', *, *, #21738, .T. ) ; +#14066 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.380001745296135700, -6.031671842700004200 ) ) ; +#14067 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#14068 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#14069 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664844900, -1.080001745296171900, -5.599999999999999600 ) ) ; +#14070 = CARTESIAN_POINT ( 'NONE', ( -1.486602540378444200, 1.480001745296169600, -1.700000000000001500 ) ) ; +#14071 = ORIENTED_EDGE ( 'NONE', *, *, #33115, .F. ) ; +#14072 = FACE_OUTER_BOUND ( 'NONE', #27889, .T. ) ; +#14073 = ORIENTED_EDGE ( 'NONE', *, *, #9941, .F. ) ; +#14074 = EDGE_LOOP ( 'NONE', ( #12109, #26080, #15992, #35835 ) ) ; +#14075 = FILL_AREA_STYLE_COLOUR ( '', #912 ) ; +#14076 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14077 = FILL_AREA_STYLE ('',( #36800 ) ) ; +#14078 = ADVANCED_FACE ( 'NONE', ( #5939 ), #1202, .T. ) ; +#14079 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.3300017452961688800, -5.075000000000000200 ) ) ; +#14080 = EDGE_LOOP ( 'NONE', ( #18145, #15981, #1993, #4813 ) ) ; +#14081 = EDGE_CURVE ( 'NONE', #3461, #31605, #23117, .T. ) ; +#14082 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14083 = EDGE_CURVE ( 'NONE', #5032, #24439, #33740, .T. ) ; +#14084 = FILL_AREA_STYLE_COLOUR ( '', #23742 ) ; +#14085 = VECTOR ( 'NONE', #10952, 1000.000000000000000 ) ; +#14086 = AXIS2_PLACEMENT_3D ( 'NONE', #41297, #35356, #32087 ) ; +#14087 = ORIENTED_EDGE ( 'NONE', *, *, #34415, .T. ) ; +#14088 = FILL_AREA_STYLE_COLOUR ( '', #29217 ) ; +#14089 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14090 = CARTESIAN_POINT ( 'NONE', ( 2.995000000007500300, 0.3499999999999999800, -1.400000000000000100 ) ) ; +#14091 = AXIS2_PLACEMENT_3D ( 'NONE', #31131, #2224, #21147 ) ; +#14092 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14093 = VERTEX_POINT ( 'NONE', #4399 ) ; +#14094 = AXIS2_PLACEMENT_3D ( 'NONE', #29134, #528, #19581 ) ; +#14095 = SURFACE_STYLE_USAGE ( .BOTH. , #10399 ) ; +#14096 = FILL_AREA_STYLE_COLOUR ( '', #20564 ) ; +#14097 = VERTEX_POINT ( 'NONE', #14025 ) ; +#14098 = ORIENTED_EDGE ( 'NONE', *, *, #22061, .T. ) ; +#14099 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14100 = CYLINDRICAL_SURFACE ( 'NONE', #21808, 0.3000000000000001000 ) ; +#14101 = VECTOR ( 'NONE', #37772, 1000.000000000000000 ) ; +#14103 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33036 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28611, #9235, #38064 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14102 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30850 ), #20061 ) ; +#14104 = PRESENTATION_STYLE_ASSIGNMENT (( #15705 ) ) ; +#14105 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19455, 'distance_accuracy_value', 'NONE'); +#14106 = FILL_AREA_STYLE_COLOUR ( '', #12309 ) ; +#14107 = LINE ( 'NONE', #3495, #3467 ) ; +#14109 = STYLED_ITEM ( 'NONE', ( #18696 ), #9460 ) ; +#14108 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1908 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32597, #33165, #20065 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14110 = SURFACE_STYLE_USAGE ( .BOTH. , #26687 ) ; +#14111 = ORIENTED_EDGE ( 'NONE', *, *, #12926, .F. ) ; +#14112 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14113 = FILL_AREA_STYLE_COLOUR ( '', #23986 ) ; +#14114 = VECTOR ( 'NONE', #16636, 1000.000000000000000 ) ; +#14115 = VERTEX_POINT ( 'NONE', #13869 ) ; +#14116 = ORIENTED_EDGE ( 'NONE', *, *, #36472, .T. ) ; +#14117 = FILL_AREA_STYLE ('',( #883 ) ) ; +#14118 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14119 = ORIENTED_EDGE ( 'NONE', *, *, #30647, .T. ) ; +#14120 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 1.398620802506300700E-014, 0.0000000000000000000 ) ) ; +#14121 = CIRCLE ( 'NONE', #10353, 0.09999999999999999200 ) ; +#14122 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14123 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14124 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14125 = SURFACE_STYLE_FILL_AREA ( #11769 ) ; +#14126 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.4300017452961695800, -6.900000000000000400 ) ) ; +#14127 = ORIENTED_EDGE ( 'NONE', *, *, #18539, .T. ) ; +#14128 = CARTESIAN_POINT ( 'NONE', ( -2.949999999999999700, -1.499998254703820400, -6.699999999999994000 ) ) ; +#14129 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14130 = EDGE_CURVE ( 'NONE', #12243, #11120, #16878, .T. ) ; +#14131 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14132 = VERTEX_POINT ( 'NONE', #29687 ) ; +#14133 = VECTOR ( 'NONE', #3036, 1000.000000000000000 ) ; +#14134 = CARTESIAN_POINT ( 'NONE', ( -4.450000000000001100, -1.400001745296194800, -7.200000000000005500 ) ) ; +#14135 = ORIENTED_EDGE ( 'NONE', *, *, #20290, .T. ) ; +#14136 = VECTOR ( 'NONE', #22138, 1000.000000000000000 ) ; +#14137 = ADVANCED_FACE ( 'NONE', ( #30699 ), #5732, .T. ) ; +#14138 = LINE ( 'NONE', #41816, #4522 ) ; +#14139 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.2999999999999850000, -4.249999999999998200 ) ) ; +#14140 = VECTOR ( 'NONE', #2713, 1000.000000000000000 ) ; +#14141 = EDGE_CURVE ( 'NONE', #5512, #21579, #39065, .T. ) ; +#14142 = VECTOR ( 'NONE', #7342, 1000.000000000000000 ) ; +#14143 = FILL_AREA_STYLE_COLOUR ( '', #25002 ) ; +#14144 = SURFACE_STYLE_USAGE ( .BOTH. , #13853 ) ; +#14145 = ORIENTED_EDGE ( 'NONE', *, *, #16376, .T. ) ; +#14146 = EDGE_LOOP ( 'NONE', ( #2773, #7578, #20329, #38916 ) ) ; +#14147 = ORIENTED_EDGE ( 'NONE', *, *, #448, .F. ) ; +#14148 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#14149 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14150 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16308 ), #10590 ) ; +#14152 = FILL_AREA_STYLE_COLOUR ( '', #14260 ) ; +#14151 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.8500017452961654600, -4.975000000000000500 ) ) ; +#14153 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30239, 'distance_accuracy_value', 'NONE'); +#14154 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14155 = FILL_AREA_STYLE_COLOUR ( '', #6761 ) ; +#14156 = CARTESIAN_POINT ( 'NONE', ( -3.163458460581285000, 0.5352098383252479300, -1.865209838325248200 ) ) ; +#14157 = ORIENTED_EDGE ( 'NONE', *, *, #22363, .F. ) ; +#14158 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13313 ) ) ; +#14159 = FACE_OUTER_BOUND ( 'NONE', #20322, .T. ) ; +#14160 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14161 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27381 ) ) ; +#14162 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14164 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7363 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13854, #13999, #13570 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14163 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1199 ) ) ; +#14166 = PRESENTATION_STYLE_ASSIGNMENT (( #35954 ) ) ; +#14165 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14167 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14168 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000007100, -0.8500017452961660100, -4.975000000000000500 ) ) ; +#14169 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17641, 'distance_accuracy_value', 'NONE'); +#14170 = EDGE_CURVE ( 'NONE', #21908, #19795, #24694, .T. ) ; +#14171 = FILL_AREA_STYLE ('',( #20696 ) ) ; +#14172 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 1.485063948690956900E-014, -2.095470210943120000 ) ) ; +#14174 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9032 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31452, #12076, #34707 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14173 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30924 ) ) ; +#14175 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14176 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#14177 = ORIENTED_EDGE ( 'NONE', *, *, #5392, .F. ) ; +#14178 = FILL_AREA_STYLE ('',( #7662 ) ) ; +#14179 = FILL_AREA_STYLE_COLOUR ( '', #12823 ) ; +#14180 = ADVANCED_FACE ( 'NONE', ( #2573 ), #23473, .F. ) ; +#14181 = ORIENTED_EDGE ( 'NONE', *, *, #17107, .F. ) ; +#14182 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14183 = EDGE_LOOP ( 'NONE', ( #27492, #8875, #16196, #39854 ) ) ; +#14184 = ORIENTED_EDGE ( 'NONE', *, *, #16863, .T. ) ; +#14185 = FACE_OUTER_BOUND ( 'NONE', #9443, .T. ) ; +#14186 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#14187 = PRESENTATION_STYLE_ASSIGNMENT (( #40088 ) ) ; +#14188 = VERTEX_POINT ( 'NONE', #21097 ) ; +#14189 = FACE_OUTER_BOUND ( 'NONE', #27623, .T. ) ; +#14190 = ORIENTED_EDGE ( 'NONE', *, *, #33377, .T. ) ; +#14191 = VERTEX_POINT ( 'NONE', #1896 ) ; +#14192 = FILL_AREA_STYLE ('',( #40134 ) ) ; +#14194 = ADVANCED_FACE ( 'NONE', ( #1037 ), #16153, .F. ) ; +#14193 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14922, 'distance_accuracy_value', 'NONE'); +#14195 = FILL_AREA_STYLE ('',( #7674 ) ) ; +#14196 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14197 = EDGE_LOOP ( 'NONE', ( #9874, #30571, #21405, #34917 ) ) ; +#14198 = FILL_AREA_STYLE ('',( #30700 ) ) ; +#14199 = LINE ( 'NONE', #25289, #7602 ) ; +#14200 = ORIENTED_EDGE ( 'NONE', *, *, #19429, .T. ) ; +#14201 = EDGE_CURVE ( 'NONE', #28824, #23240, #3535, .T. ) ; +#14202 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#14203 = CIRCLE ( 'NONE', #18692, 0.09999999999987406500 ) ; +#14204 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#14205 = FACE_OUTER_BOUND ( 'NONE', #28032, .T. ) ; +#14206 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14207 = EDGE_CURVE ( 'NONE', #20979, #8634, #18203, .T. ) ; +#14208 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14209 = CIRCLE ( 'NONE', #4362, 0.3499999999999996400 ) ; +#14210 = FILL_AREA_STYLE ('',( #14075 ) ) ; +#14211 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #13955, #1284, #1984, #27646 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#14212 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4715 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29756, #39073, #22981 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14213 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244519300E-016 ) ) ; +#14214 = VERTEX_POINT ( 'NONE', #27163 ) ; +#14215 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.9500017452961654300, -5.575000000000001100 ) ) ; +#14216 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.008560160451628400E-016, 1.000000000000000000 ) ) ; +#14217 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296170000, -0.2339555568811697600 ) ) ; +#14218 = VERTEX_POINT ( 'NONE', #30668 ) ; +#14219 = ORIENTED_EDGE ( 'NONE', *, *, #27015, .T. ) ; +#14220 = VECTOR ( 'NONE', #16220, 1000.000000000000000 ) ; +#14221 = FILL_AREA_STYLE ('',( #4318 ) ) ; +#14223 = AXIS2_PLACEMENT_3D ( 'NONE', #32089, #35922, #23057 ) ; +#14222 = LINE ( 'NONE', #12782, #34433 ) ; +#14224 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14225 = VECTOR ( 'NONE', #20094, 1000.000000000000000 ) ; +#14226 = LINE ( 'NONE', #15010, #12166 ) ; +#14229 = EDGE_CURVE ( 'NONE', #38679, #20150, #2049, .T. ) ; +#14228 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14227 = AXIS2_PLACEMENT_3D ( 'NONE', #960, #30135, #36367 ) ; +#14230 = LINE ( 'NONE', #16671, #36954 ) ; +#14231 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14232 = ORIENTED_EDGE ( 'NONE', *, *, #34367, .T. ) ; +#14233 = SURFACE_STYLE_FILL_AREA ( #8782 ) ; +#14235 = ADVANCED_FACE ( 'NONE', ( #26284 ), #34051, .F. ) ; +#14234 = EDGE_LOOP ( 'NONE', ( #20010, #41846, #16613, #4103 ) ) ; +#14236 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14237 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998386600, -1.749999999999999800 ) ) ; +#14238 = STYLED_ITEM ( 'NONE', ( #3056 ), #27124 ) ; +#14239 = AXIS2_PLACEMENT_3D ( 'NONE', #4098, #13852, #26728 ) ; +#14240 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.5300017452961696100, -4.099999999999998800 ) ) ; +#14241 = ORIENTED_EDGE ( 'NONE', *, *, #40847, .T. ) ; +#14242 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.4300017452961686900, -6.249999999999998200 ) ) ; +#14243 = LINE ( 'NONE', #40502, #33439 ) ; +#14244 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14245 = ORIENTED_EDGE ( 'NONE', *, *, #10765, .F. ) ; +#14246 = DIRECTION ( 'NONE', ( -3.188821734606921400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14247 = LINE ( 'NONE', #6781, #40510 ) ; +#14248 = PRESENTATION_STYLE_ASSIGNMENT (( #15287 ) ) ; +#14249 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14250 = FILL_AREA_STYLE ('',( #20346 ) ) ; +#14251 = DIRECTION ( 'NONE', ( 1.734723475976959500E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14252 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14253 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#14254 = ORIENTED_EDGE ( 'NONE', *, *, #18681, .T. ) ; +#14255 = EDGE_CURVE ( 'NONE', #16169, #28707, #7036, .T. ) ; +#14256 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14258 = SURFACE_SIDE_STYLE ('',( #13473 ) ) ; +#14257 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.8400000000000000800 ) ) ; +#14259 = ORIENTED_EDGE ( 'NONE', *, *, #34257, .F. ) ; +#14260 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#14261 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14262 = EDGE_CURVE ( 'NONE', #30951, #37367, #37383, .T. ) ; +#14263 = LINE ( 'NONE', #28290, #9686 ) ; +#14264 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14265 = ORIENTED_EDGE ( 'NONE', *, *, #40640, .T. ) ; +#14266 = EDGE_CURVE ( 'NONE', #15485, #18344, #31827, .T. ) ; +#14267 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14268 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31006 ) ) ; +#14269 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.499998254703832000, -5.449999999999994000 ) ) ; +#14270 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14271 = VERTEX_POINT ( 'NONE', #1612 ) ; +#14272 = VERTEX_POINT ( 'NONE', #17421 ) ; +#14273 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2363 ), #4790 ) ; +#14274 = ADVANCED_FACE ( 'NONE', ( #5036, #29797, #40403 ), #2037, .F. ) ; +#14275 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14276 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31150, 'distance_accuracy_value', 'NONE'); +#14277 = DIRECTION ( 'NONE', ( -7.239049582268421600E-031, 2.367138801244513300E-016, 1.000000000000000000 ) ) ; +#14278 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14279 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#14280 = PRESENTATION_STYLE_ASSIGNMENT (( #18815 ) ) ; +#14282 = EDGE_CURVE ( 'NONE', #13255, #40953, #28757, .T. ) ; +#14281 = AXIS2_PLACEMENT_3D ( 'NONE', #5348, #12966, #18949 ) ; +#14283 = LINE ( 'NONE', #17058, #6217 ) ; +#14284 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#14285 = SURFACE_STYLE_USAGE ( .BOTH. , #20813 ) ; +#14287 = AXIS2_PLACEMENT_3D ( 'NONE', #32457, #16365, #26114 ) ; +#14286 = AXIS2_PLACEMENT_3D ( 'NONE', #23357, #32804, #519 ) ; +#14288 = AXIS2_PLACEMENT_3D ( 'NONE', #41708, #32115, #6283 ) ; +#14289 = SURFACE_STYLE_USAGE ( .BOTH. , #34187 ) ; +#14290 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14291 = ORIENTED_EDGE ( 'NONE', *, *, #38601, .F. ) ; +#14292 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19236, 'distance_accuracy_value', 'NONE'); +#14293 = STYLED_ITEM ( 'NONE', ( #27588 ), #32600 ) ; +#14294 = PLANE ( 'NONE', #9904 ) ; +#14295 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -4.875000000000000900 ) ) ; +#14296 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14297 = ORIENTED_EDGE ( 'NONE', *, *, #23678, .T. ) ; +#14298 = DIRECTION ( 'NONE', ( 2.891205793294629500E-014, -1.837630800822891000E-016, -1.000000000000000000 ) ) ; +#14299 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14300 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14301 = VECTOR ( 'NONE', #13531, 1000.000000000000000 ) ; +#14302 = SURFACE_SIDE_STYLE ('',( #4480 ) ) ; +#14303 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14305 = ORIENTED_EDGE ( 'NONE', *, *, #35914, .T. ) ; +#14304 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#14306 = ORIENTED_EDGE ( 'NONE', *, *, #10102, .T. ) ; +#14307 = VECTOR ( 'NONE', #21650, 1000.000000000000000 ) ; +#14308 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14309 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#14310 = FILL_AREA_STYLE_COLOUR ( '', #2316 ) ; +#14311 = ORIENTED_EDGE ( 'NONE', *, *, #8247, .F. ) ; +#14312 = PRESENTATION_STYLE_ASSIGNMENT (( #10144 ) ) ; +#14313 = CIRCLE ( 'NONE', #11482, 1.200001745296169300 ) ; +#14314 = ORIENTED_EDGE ( 'NONE', *, *, #27682, .F. ) ; +#14315 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14316 = SURFACE_STYLE_FILL_AREA ( #29331 ) ; +#14317 = FACE_OUTER_BOUND ( 'NONE', #13590, .T. ) ; +#14318 = PRESENTATION_STYLE_ASSIGNMENT (( #3531 ) ) ; +#14319 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.1000000000000145800, -1.949999999999999500 ) ) ; +#14320 = EDGE_CURVE ( 'NONE', #39218, #12577, #39351, .T. ) ; +#14321 = FACE_BOUND ( 'NONE', #3727, .T. ) ; +#14322 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11682, 'distance_accuracy_value', 'NONE'); +#14323 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12452 ), #1360 ) ; +#14324 = EDGE_CURVE ( 'NONE', #20979, #14452, #19704, .T. ) ; +#14325 = VECTOR ( 'NONE', #1885, 1000.000000000000000 ) ; +#14326 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14327 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -2.399999999999999500 ) ) ; +#14328 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15679 ), #10524 ) ; +#14329 = VERTEX_POINT ( 'NONE', #15408 ) ; +#14330 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -4.400000000000000400 ) ) ; +#14331 = VERTEX_POINT ( 'NONE', #40678 ) ; +#14333 = EDGE_CURVE ( 'NONE', #31243, #32725, #23196, .T. ) ; +#14332 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40775 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33472, #32743, #36019 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14334 = DIRECTION ( 'NONE', ( 1.084202172485501700E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14336 = SURFACE_STYLE_FILL_AREA ( #27602 ) ; +#14335 = FILL_AREA_STYLE ('',( #17743 ) ) ; +#14337 = ORIENTED_EDGE ( 'NONE', *, *, #27614, .F. ) ; +#14338 = ORIENTED_EDGE ( 'NONE', *, *, #28130, .F. ) ; +#14339 = ORIENTED_EDGE ( 'NONE', *, *, #7426, .F. ) ; +#14340 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14342 = ORIENTED_EDGE ( 'NONE', *, *, #1857, .T. ) ; +#14341 = SURFACE_STYLE_FILL_AREA ( #28449 ) ; +#14343 = ORIENTED_EDGE ( 'NONE', *, *, #7258, .F. ) ; +#14344 = ADVANCED_FACE ( 'NONE', ( #8022 ), #41103, .T. ) ; +#14346 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12147 ) ) ; +#14345 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27918 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22862, #29630, #10257 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14347 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.499998254703835300, -5.449999999999994000 ) ) ; +#14348 = SURFACE_SIDE_STYLE ('',( #24780 ) ) ; +#14349 = STYLED_ITEM ( 'NONE', ( #5382 ), #41753 ) ; +#14350 = SURFACE_STYLE_FILL_AREA ( #11013 ) ; +#14351 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14353 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11900 ), #16504 ) ; +#14352 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16871 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19501, #32170, #3242 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14354 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.575776934994679200E-015, 0.0000000000000000000 ) ) ; +#14356 = AXIS2_PLACEMENT_3D ( 'NONE', #25753, #35760, #32216 ) ; +#14355 = FILL_AREA_STYLE_COLOUR ( '', #24592 ) ; +#14357 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14358 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#14359 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#14360 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30818, 'distance_accuracy_value', 'NONE'); +#14361 = VECTOR ( 'NONE', #27289, 1000.000000000000100 ) ; +#14362 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14363 = FILL_AREA_STYLE ('',( #23682 ) ) ; +#14364 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14365 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14366 = FILL_AREA_STYLE_COLOUR ( '', #34477 ) ; +#14367 = ORIENTED_EDGE ( 'NONE', *, *, #23434, .T. ) ; +#14368 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#14369 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -3.799999999999999800 ) ) ; +#14370 = VERTEX_POINT ( 'NONE', #34475 ) ; +#14371 = SURFACE_STYLE_FILL_AREA ( #22136 ) ; +#14372 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14373 = CARTESIAN_POINT ( 'NONE', ( -2.673205080756886800, 1.630001745296169500, -1.650000000000000800 ) ) ; +#14374 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14375 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14376 = ADVANCED_FACE ( 'NONE', ( #15144 ), #24906, .F. ) ; +#14377 = EDGE_CURVE ( 'NONE', #9805, #21708, #34838, .T. ) ; +#14378 = VERTEX_POINT ( 'NONE', #18530 ) ; +#14379 = ORIENTED_EDGE ( 'NONE', *, *, #10520, .F. ) ; +#14380 = EDGE_LOOP ( 'NONE', ( #10150, #16269, #23199, #16880 ) ) ; +#14381 = SURFACE_STYLE_FILL_AREA ( #31955 ) ; +#14382 = FILL_AREA_STYLE_COLOUR ( '', #15470 ) ; +#14383 = CARTESIAN_POINT ( 'NONE', ( 0.2500000000000032800, 0.4300017452961685800, -6.750000000000000000 ) ) ; +#14384 = EDGE_CURVE ( 'NONE', #14329, #18606, #29260, .T. ) ; +#14385 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13654 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13787, #17036, #20318 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14386 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3550 ) ) ; +#14387 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.2300017452961684900, -6.224999999999999600 ) ) ; +#14388 = VECTOR ( 'NONE', #11610, 1000.000000000000000 ) ; +#14389 = ADVANCED_FACE ( 'NONE', ( #21742 ), #26068, .F. ) ; +#14390 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21725 ), #39797 ) ; +#14391 = DIRECTION ( 'NONE', ( -2.891205793294677400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14392 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#14393 = VERTEX_POINT ( 'NONE', #13202 ) ; +#14394 = PLANE ( 'NONE', #15077 ) ; +#14395 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26124 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21360, #27404, #24456 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14396 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29789 ) ) ; +#14397 = LINE ( 'NONE', #22587, #21003 ) ; +#14399 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34445 ), #36602 ) ; +#14398 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30913 ), #8433 ) ; +#14400 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.380001745296135700, -6.699999999999994000 ) ) ; +#14401 = VERTEX_POINT ( 'NONE', #9531 ) ; +#14402 = ORIENTED_EDGE ( 'NONE', *, *, #38299, .T. ) ; +#14404 = EDGE_CURVE ( 'NONE', #37349, #26425, #12499, .T. ) ; +#14403 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39812 ) ) ; +#14405 = CIRCLE ( 'NONE', #4796, 1.450380239188924200 ) ; +#14406 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14407 = CIRCLE ( 'NONE', #30552, 0.1999999999999998700 ) ; +#14408 = SURFACE_SIDE_STYLE ('',( #25897 ) ) ; +#14409 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14410 = DIRECTION ( 'NONE', ( 6.056601140521967900E-031, 1.591898209559296700E-045, 1.000000000000000000 ) ) ; +#14411 = ORIENTED_EDGE ( 'NONE', *, *, #29449, .T. ) ; +#14412 = PRESENTATION_STYLE_ASSIGNMENT (( #35430 ) ) ; +#14414 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16578 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2657, #15344, #8803 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14413 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33346 ), #7079 ) ; +#14415 = FACE_OUTER_BOUND ( 'NONE', #40377, .T. ) ; +#14416 = FILL_AREA_STYLE ('',( #39254 ) ) ; +#14417 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14418 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14419 = ORIENTED_EDGE ( 'NONE', *, *, #3246, .F. ) ; +#14420 = ORIENTED_EDGE ( 'NONE', *, *, #2350, .T. ) ; +#14421 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14422 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31995, 'distance_accuracy_value', 'NONE'); +#14423 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.499998254703829500, -6.699999999999994000 ) ) ; +#14424 = FACE_OUTER_BOUND ( 'NONE', #4788, .T. ) ; +#14425 = VECTOR ( 'NONE', #5607, 1000.000000000000000 ) ; +#14426 = VERTEX_POINT ( 'NONE', #9666 ) ; +#14427 = SURFACE_SIDE_STYLE ('',( #35700 ) ) ; +#14428 = CIRCLE ( 'NONE', #39318, 0.09999999999999999200 ) ; +#14429 = ADVANCED_FACE ( 'NONE', ( #28226 ), #3331, .T. ) ; +#14430 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24676, 'distance_accuracy_value', 'NONE'); +#14431 = FILL_AREA_STYLE ('',( #17418 ) ) ; +#14432 = VECTOR ( 'NONE', #35040, 1000.000000000000000 ) ; +#14433 = CARTESIAN_POINT ( 'NONE', ( 2.149999999999999900, -1.499998254703822900, -6.699999999999994000 ) ) ; +#14434 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#14435 = FILL_AREA_STYLE ('',( #8180 ) ) ; +#14436 = CARTESIAN_POINT ( 'NONE', ( -3.273571428571022700, 0.07499999999999999700, -0.08583148475006674400 ) ) ; +#14437 = PLANE ( 'NONE', #32131 ) ; +#14438 = EDGE_CURVE ( 'NONE', #31066, #14890, #2012, .T. ) ; +#14439 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14440 = SURFACE_STYLE_USAGE ( .BOTH. , #4705 ) ; +#14441 = EDGE_CURVE ( 'NONE', #18855, #4849, #16114, .T. ) ; +#14442 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7116 ), #37449 ) ; +#14443 = DIRECTION ( 'NONE', ( 3.976777186418611300E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14444 = FILL_AREA_STYLE ('',( #14179 ) ) ; +#14445 = FILL_AREA_STYLE_COLOUR ( '', #40724 ) ; +#14446 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18453 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24159, #30789, #2019 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14447 = ORIENTED_EDGE ( 'NONE', *, *, #29269, .F. ) ; +#14448 = FACE_OUTER_BOUND ( 'NONE', #25409, .T. ) ; +#14449 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5794 ), #30963 ) ; +#14450 = ORIENTED_EDGE ( 'NONE', *, *, #16480, .F. ) ; +#14451 = AXIS2_PLACEMENT_3D ( 'NONE', #16002, #9763, #32229 ) ; +#14452 = VERTEX_POINT ( 'NONE', #13330 ) ; +#14453 = SURFACE_SIDE_STYLE ('',( #31027 ) ) ; +#14454 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14455 = VERTEX_POINT ( 'NONE', #35833 ) ; +#14456 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.2999999999999999900, -0.2498427124746000500 ) ) ; +#14457 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4843 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22654, #31966, #25898 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14458 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#14459 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521965300E-031 ) ) ; +#14460 = FACE_OUTER_BOUND ( 'NONE', #12496, .T. ) ; +#14462 = EDGE_CURVE ( 'NONE', #36021, #36956, #33303, .T. ) ; +#14461 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25849 ) ) ; +#14463 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14464 = SURFACE_SIDE_STYLE ('',( #37085 ) ) ; +#14465 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14466 = VERTEX_POINT ( 'NONE', #16191 ) ; +#14467 = LINE ( 'NONE', #7101, #40753 ) ; +#14468 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, 0.0000000000000000000 ) ) ; +#14470 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41654 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1258, #14082, #23822 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14469 = STYLED_ITEM ( 'NONE', ( #26426 ), #26641 ) ; +#14471 = DIRECTION ( 'NONE', ( 3.872150616019659000E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14472 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.480001745296170000, -0.2339555568811695900 ) ) ; +#14473 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14474 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33006, 'distance_accuracy_value', 'NONE'); +#14475 = PRESENTATION_STYLE_ASSIGNMENT (( #29181 ) ) ; +#14476 = ADVANCED_FACE ( 'NONE', ( #27743 ), #38768, .F. ) ; +#14477 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.8500017452961660100, -4.875000000000000900 ) ) ; +#14478 = PRESENTATION_STYLE_ASSIGNMENT (( #15836 ) ) ; +#14479 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.931303021499040300, -0.3590461068823618300 ) ) ; +#14480 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -5.475000000000000500 ) ) ; +#14481 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14482 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000027500, -0.2339555568811695900 ) ) ; +#14483 = VERTEX_POINT ( 'NONE', #19743 ) ; +#14484 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #7969 ) ; +#14485 = SURFACE_STYLE_FILL_AREA ( #10621 ) ; +#14486 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14487 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000001200, 1.630001745296169000, -4.000000000000000000 ) ) ; +#14488 = ORIENTED_EDGE ( 'NONE', *, *, #30732, .T. ) ; +#14489 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14490 = CARTESIAN_POINT ( 'NONE', ( 3.245000000016000200, 0.2999999999999999900, -1.649999999999999900 ) ) ; +#14491 = EDGE_CURVE ( 'NONE', #14806, #28342, #17635, .T. ) ; +#14492 = VERTEX_POINT ( 'NONE', #14070 ) ; +#14493 = ORIENTED_EDGE ( 'NONE', *, *, #17801, .T. ) ; +#14494 = PRESENTATION_STYLE_ASSIGNMENT (( #35171 ) ) ; +#14495 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#14496 = ORIENTED_EDGE ( 'NONE', *, *, #1025, .F. ) ; +#14498 = DIRECTION ( 'NONE', ( 1.133987551255206200E-030, 1.000000000000000000, -2.367138801244466000E-016 ) ) ; +#14497 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#14499 = LINE ( 'NONE', #18542, #3860 ) ; +#14500 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14501 = LINE ( 'NONE', #21594, #23621 ) ; +#14502 = EDGE_CURVE ( 'NONE', #26031, #4768, #25728, .T. ) ; +#14503 = VECTOR ( 'NONE', #41073, 1000.000000000000000 ) ; +#14504 = LINE ( 'NONE', #40900, #38755 ) ; +#14505 = ORIENTED_EDGE ( 'NONE', *, *, #22605, .T. ) ; +#14506 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 10.30000000000000100, -1.250000000000000000 ) ) ; +#14507 = AXIS2_PLACEMENT_3D ( 'NONE', #7716, #4755, #4621 ) ; +#14508 = SURFACE_STYLE_FILL_AREA ( #17924 ) ; +#14509 = VECTOR ( 'NONE', #29592, 1000.000000000000000 ) ; +#14510 = PLANE ( 'NONE', #18387 ) ; +#14511 = LINE ( 'NONE', #24636, #2913 ) ; +#14512 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.3300017452961685500, -5.175000000000000700 ) ) ; +#14513 = SURFACE_SIDE_STYLE ('',( #35918 ) ) ; +#14514 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19667 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36218, #13166, #29558 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14515 = AXIS2_PLACEMENT_3D ( 'NONE', #37344, #30297, #14473 ) ; +#14516 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#14517 = EDGE_CURVE ( 'NONE', #21312, #2222, #35331, .T. ) ; +#14518 = MANIFOLD_SOLID_BREP ( '1-1-solid15', #8839 ) ; +#14519 = LINE ( 'NONE', #3176, #34744 ) ; +#14520 = EDGE_LOOP ( 'NONE', ( #14938, #12723, #30711, #19983 ) ) ; +#14521 = PRESENTATION_STYLE_ASSIGNMENT (( #35934 ) ) ; +#14522 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14524 = AXIS2_PLACEMENT_3D ( 'NONE', #2483, #9057, #31675 ) ; +#14523 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33461 ), #16690 ) ; +#14525 = DIRECTION ( 'NONE', ( 5.782411586589354900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14526 = AXIS2_PLACEMENT_3D ( 'NONE', #6868, #19488, #32724 ) ; +#14527 = ORIENTED_EDGE ( 'NONE', *, *, #16376, .F. ) ; +#14528 = ORIENTED_EDGE ( 'NONE', *, *, #26829, .F. ) ; +#14529 = PRESENTATION_STYLE_ASSIGNMENT (( #6218 ) ) ; +#14530 = STYLED_ITEM ( 'NONE', ( #40021 ), #32348 ) ; +#14531 = ORIENTED_EDGE ( 'NONE', *, *, #20283, .T. ) ; +#14532 = EDGE_LOOP ( 'NONE', ( #17723, #31743, #39375, #2584 ) ) ; +#14533 = ORIENTED_EDGE ( 'NONE', *, *, #41428, .T. ) ; +#14534 = PRESENTATION_STYLE_ASSIGNMENT (( #25842 ) ) ; +#14535 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#14536 = LINE ( 'NONE', #30188, #32192 ) ; +#14537 = SURFACE_STYLE_FILL_AREA ( #29790 ) ; +#14538 = LINE ( 'NONE', #11524, #19108 ) ; +#14539 = SURFACE_SIDE_STYLE ('',( #39006 ) ) ; +#14540 = EDGE_LOOP ( 'NONE', ( #24407, #5205, #29954, #21969 ) ) ; +#14541 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14542 = VECTOR ( 'NONE', #35680, 1000.000000000000000 ) ; +#14543 = ORIENTED_EDGE ( 'NONE', *, *, #20610, .T. ) ; +#14544 = VECTOR ( 'NONE', #11254, 1000.000000000000000 ) ; +#14545 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, 0.2799999999999973100, -0.2339555568811697600 ) ) ; +#14546 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14547 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.280001745296167800, -4.200000000000000200 ) ) ; +#14548 = ADVANCED_FACE ( 'NONE', ( #30259 ), #24698, .T. ) ; +#14549 = CARTESIAN_POINT ( 'NONE', ( -4.407583426132274200, -1.982581680836082500, -6.695341433092485400 ) ) ; +#14550 = LINE ( 'NONE', #25530, #15558 ) ; +#14551 = ORIENTED_EDGE ( 'NONE', *, *, #35261, .T. ) ; +#14552 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#14553 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1340, 'distance_accuracy_value', 'NONE'); +#14554 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14555 = EDGE_CURVE ( 'NONE', #21897, #2345, #40167, .T. ) ; +#14556 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.380001745296141500, -4.781671842700004200 ) ) ; +#14557 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, -1.499998254703820900, -7.500000000000006200 ) ) ; +#14558 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14559 = EDGE_CURVE ( 'NONE', #20399, #28522, #33258, .T. ) ; +#14560 = EDGE_LOOP ( 'NONE', ( #20338, #34001, #28152, #39595 ) ) ; +#14561 = LINE ( 'NONE', #15469, #38296 ) ; +#14562 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, 0.0000000000000000000 ) ) ; +#14563 = ORIENTED_EDGE ( 'NONE', *, *, #21890, .F. ) ; +#14564 = AXIS2_PLACEMENT_3D ( 'NONE', #5298, #40464, #5163 ) ; +#14565 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14566 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#14567 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14568 = EDGE_CURVE ( 'NONE', #28666, #13231, #11513, .T. ) ; +#14569 = VERTEX_POINT ( 'NONE', #1110 ) ; +#14570 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14571 = FACE_OUTER_BOUND ( 'NONE', #31255, .T. ) ; +#14572 = AXIS2_PLACEMENT_3D ( 'NONE', #16884, #10232, #26367 ) ; +#14573 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#14574 = ORIENTED_EDGE ( 'NONE', *, *, #38669, .F. ) ; +#14575 = EDGE_LOOP ( 'NONE', ( #28672, #133, #10714, #30784 ) ) ; +#14576 = LINE ( 'NONE', #30534, #13547 ) ; +#14577 = ORIENTED_EDGE ( 'NONE', *, *, #33206, .T. ) ; +#14578 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#14579 = VECTOR ( 'NONE', #29835, 1000.000000000000000 ) ; +#14580 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5110 ) ) ; +#14581 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14582 = FACE_OUTER_BOUND ( 'NONE', #20104, .T. ) ; +#14583 = PRESENTATION_STYLE_ASSIGNMENT (( #3968 ) ) ; +#14586 = EDGE_CURVE ( 'NONE', #30029, #4444, #3936, .T. ) ; +#14585 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25191 ) ) ; +#14584 = CARTESIAN_POINT ( 'NONE', ( 3.680000000000000200, -1.380001745296125500, -6.031671842700004200 ) ) ; +#14587 = CIRCLE ( 'NONE', #5900, 0.09999999999999999200 ) ; +#14588 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14589 = ORIENTED_EDGE ( 'NONE', *, *, #19661, .T. ) ; +#14590 = CIRCLE ( 'NONE', #29341, 0.3499999999999996400 ) ; +#14591 = ORIENTED_EDGE ( 'NONE', *, *, #10697, .F. ) ; +#14593 = VERTEX_POINT ( 'NONE', #833 ) ; +#14592 = ADVANCED_FACE ( 'NONE', ( #14571 ), #23659, .F. ) ; +#14594 = LINE ( 'NONE', #22513, #33276 ) ; +#14595 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31897 ) ) ; +#14596 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21121 ) ) ; +#14597 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#14598 = AXIS2_PLACEMENT_3D ( 'NONE', #16125, #19391, #16263 ) ; +#14599 = VERTEX_POINT ( 'NONE', #24816 ) ; +#14600 = FACE_OUTER_BOUND ( 'NONE', #7294, .T. ) ; +#14601 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1640 ) ) ; +#14602 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.4300017452961689100, -5.075000000000000200 ) ) ; +#14603 = SURFACE_STYLE_USAGE ( .BOTH. , #24063 ) ; +#14604 = ADVANCED_FACE ( 'NONE', ( #22634 ), #10497, .T. ) ; +#14605 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#14606 = CARTESIAN_POINT ( 'NONE', ( -2.859829086680000000, 0.2000000000000002900, 1.149999999999999900 ) ) ; +#14607 = FILL_AREA_STYLE ('',( #40275 ) ) ; +#14608 = FILL_AREA_STYLE ('',( #32976 ) ) ; +#14609 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14610 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14611 = VERTEX_POINT ( 'NONE', #20578 ) ; +#14612 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#14613 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14614 = VECTOR ( 'NONE', #31073, 1000.000000000000000 ) ; +#14615 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.5199999999999850300, -4.599999999999999600 ) ) ; +#14616 = VECTOR ( 'NONE', #19981, 1000.000000000000000 ) ; +#14617 = ORIENTED_EDGE ( 'NONE', *, *, #15126, .F. ) ; +#14618 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#14619 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14620 = FILL_AREA_STYLE ('',( #33965 ) ) ; +#14621 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#14622 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4237, 'distance_accuracy_value', 'NONE'); +#14623 = CIRCLE ( 'NONE', #15014, 0.3000000000000003800 ) ; +#14624 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14625 = VERTEX_POINT ( 'NONE', #33395 ) ; +#14626 = EDGE_LOOP ( 'NONE', ( #3031, #40818, #36999, #21344 ) ) ; +#14627 = ORIENTED_EDGE ( 'NONE', *, *, #2684, .F. ) ; +#14628 = EDGE_CURVE ( 'NONE', #27294, #14812, #32220, .T. ) ; +#14629 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#14630 = SURFACE_SIDE_STYLE ('',( #19158 ) ) ; +#14631 = EDGE_CURVE ( 'NONE', #9395, #24056, #23647, .T. ) ; +#14632 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40590 ) ) ; +#14633 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26602, 'distance_accuracy_value', 'NONE'); +#14634 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14635 = ORIENTED_EDGE ( 'NONE', *, *, #30829, .F. ) ; +#14636 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296169800, -0.2000017452961698200 ) ) ; +#14637 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29219 ), #34927 ) ; +#14638 = ADVANCED_FACE ( 'NONE', ( #34271 ), #20011, .F. ) ; +#14639 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14640 = CIRCLE ( 'NONE', #40046, 0.9999999999999991100 ) ; +#14641 = CARTESIAN_POINT ( 'NONE', ( 3.182147862467852800, 0.3499999999999999200, -1.644149025077156200 ) ) ; +#14642 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#14643 = DIRECTION ( 'NONE', ( -4.336808689942016900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14644 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14645 = FILL_AREA_STYLE ('',( #14366 ) ) ; +#14646 = AXIS2_PLACEMENT_3D ( 'NONE', #10862, #17118, #23594 ) ; +#14647 = LINE ( 'NONE', #14433, #34344 ) ; +#14648 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822900, -5.899999999999999500 ) ) ; +#14650 = STYLED_ITEM ( 'NONE', ( #39615 ), #4831 ) ; +#14649 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30252 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23615, #13867, #39274 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14651 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14652 = VERTEX_POINT ( 'NONE', #32968 ) ; +#14653 = EDGE_CURVE ( 'NONE', #13558, #10696, #25674, .T. ) ; +#14654 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14655 = FILL_AREA_STYLE_COLOUR ( '', #10049 ) ; +#14656 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, 0.2799999999999973100, -4.099999999999999600 ) ) ; +#14657 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.499998254703825300, -5.449999999999994000 ) ) ; +#14658 = AXIS2_PLACEMENT_3D ( 'NONE', #19889, #6578, #290 ) ; +#14659 = ORIENTED_EDGE ( 'NONE', *, *, #20214, .F. ) ; +#14660 = ORIENTED_EDGE ( 'NONE', *, *, #13680, .T. ) ; +#14661 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14662 = AXIS2_PLACEMENT_3D ( 'NONE', #16066, #32153, #19201 ) ; +#14663 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 0.03000174529616905800, -6.900000000000000400 ) ) ; +#14664 = CYLINDRICAL_SURFACE ( 'NONE', #19407, 0.1000000000000001600 ) ; +#14665 = ORIENTED_EDGE ( 'NONE', *, *, #15842, .T. ) ; +#14666 = VERTEX_POINT ( 'NONE', #13616 ) ; +#14667 = ORIENTED_EDGE ( 'NONE', *, *, #32582, .F. ) ; +#14668 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14669 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14670 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, 0.4300017452961686900, -6.550000000000000700 ) ) ; +#14671 = ORIENTED_EDGE ( 'NONE', *, *, #12311, .F. ) ; +#14672 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14673 = CARTESIAN_POINT ( 'NONE', ( 2.149999999999999900, -1.499998254703822900, -6.299999999999993600 ) ) ; +#14674 = CIRCLE ( 'NONE', #21170, 0.2999999999999999300 ) ; +#14675 = PRESENTATION_STYLE_ASSIGNMENT (( #33726 ) ) ; +#14676 = VECTOR ( 'NONE', #21315, 1000.000000000000000 ) ; +#14677 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 1.474514954580286000E-014, -1.250000000000000200 ) ) ; +#14678 = PRESENTATION_STYLE_ASSIGNMENT (( #16340 ) ) ; +#14679 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14680 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.3500000000000000300, 0.6999999999999999600 ) ) ; +#14681 = EDGE_CURVE ( 'NONE', #5976, #3055, #23636, .T. ) ; +#14682 = ADVANCED_FACE ( 'NONE', ( #27176 ), #41804, .T. ) ; +#14683 = VECTOR ( 'NONE', #15166, 1000.000000000000000 ) ; +#14684 = FILL_AREA_STYLE_COLOUR ( '', #10089 ) ; +#14685 = VECTOR ( 'NONE', #16206, 1000.000000000000000 ) ; +#14686 = EDGE_CURVE ( 'NONE', #16169, #20729, #17582, .T. ) ; +#14687 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36353 ), #26904 ) ; +#14688 = VERTEX_POINT ( 'NONE', #33109 ) ; +#14689 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.2999999999999999300, -0.2088107318966278000 ) ) ; +#14690 = DIRECTION ( 'NONE', ( -3.077917520101936400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14691 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#14692 = ORIENTED_EDGE ( 'NONE', *, *, #33894, .T. ) ; +#14693 = LINE ( 'NONE', #20454, #32880 ) ; +#14694 = ORIENTED_EDGE ( 'NONE', *, *, #8663, .F. ) ; +#14695 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, -2.322941965694886000, -1.250000000000000000 ) ) ; +#14696 = AXIS2_PLACEMENT_3D ( 'NONE', #14605, #11067, #20854 ) ; +#14697 = FACE_OUTER_BOUND ( 'NONE', #11359, .T. ) ; +#14698 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 0.1000000000000149000, -4.250000000000000000 ) ) ; +#14699 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#14700 = CARTESIAN_POINT ( 'NONE', ( 3.273571428571024500, 0.07499999999999999700, -0.08583148475007257300 ) ) ; +#14701 = ORIENTED_EDGE ( 'NONE', *, *, #4612, .F. ) ; +#14702 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18016 ) ) ; +#14703 = FILL_AREA_STYLE_COLOUR ( '', #40748 ) ; +#14704 = CIRCLE ( 'NONE', #9718, 0.05000000000000012800 ) ; +#14705 = ORIENTED_EDGE ( 'NONE', *, *, #3901, .T. ) ; +#14706 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6048 ) ) ; +#14707 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, 1.000000000000000000, 1.414176746720224900E-016 ) ) ; +#14708 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15479 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10421, #13539, #36304 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14711 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3089 ) ) ; +#14710 = FILL_AREA_STYLE ('',( #20829 ) ) ; +#14709 = AXIS2_PLACEMENT_3D ( 'NONE', #5977, #22228, #8917 ) ; +#14712 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14713 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14715 = EDGE_CURVE ( 'NONE', #28531, #17598, #3917, .T. ) ; +#14714 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11724 ), #10918 ) ; +#14716 = EDGE_LOOP ( 'NONE', ( #6068, #16427, #1277, #11039 ) ) ; +#14717 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#14718 = VERTEX_POINT ( 'NONE', #29995 ) ; +#14719 = FACE_OUTER_BOUND ( 'NONE', #32353, .T. ) ; +#14720 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14721 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#14723 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22823 ), #35826 ) ; +#14722 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23383 ) ) ; +#14724 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14725 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.4300017452961689100, -6.424999999999999800 ) ) ; +#14726 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.2300017452961680700, -6.325000000000000200 ) ) ; +#14727 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#14728 = EDGE_LOOP ( 'NONE', ( #16450, #29745, #35488, #9612 ) ) ; +#14729 = CARTESIAN_POINT ( 'NONE', ( 4.720380236995682200, -0.2800000000000026400, -0.8400000000000000800 ) ) ; +#14730 = SURFACE_STYLE_FILL_AREA ( #18072 ) ; +#14731 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.779999999999868400, 0.0000000000000000000 ) ) ; +#14732 = FILL_AREA_STYLE_COLOUR ( '', #33554 ) ; +#14733 = FILL_AREA_STYLE ('',( #1772 ) ) ; +#14734 = EDGE_LOOP ( 'NONE', ( #27412, #21910, #30989, #25223 ) ) ; +#14735 = PLANE ( 'NONE', #14696 ) ; +#14736 = FACE_OUTER_BOUND ( 'NONE', #2635, .T. ) ; +#14737 = FILL_AREA_STYLE ('',( #1779 ) ) ; +#14738 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14739 = ORIENTED_EDGE ( 'NONE', *, *, #21270, .F. ) ; +#14740 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.139998254717355900, -5.049996877890552400 ) ) ; +#14741 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24012, 'distance_accuracy_value', 'NONE'); +#14742 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -0.6228541982233617400 ) ) ; +#14743 = EDGE_CURVE ( 'NONE', #33387, #28484, #17082, .T. ) ; +#14744 = FACE_OUTER_BOUND ( 'NONE', #29886, .T. ) ; +#14745 = ORIENTED_EDGE ( 'NONE', *, *, #31592, .F. ) ; +#14746 = FILL_AREA_STYLE_COLOUR ( '', #39027 ) ; +#14747 = EDGE_CURVE ( 'NONE', #41528, #39241, #33242, .T. ) ; +#14748 = CARTESIAN_POINT ( 'NONE', ( 3.475000000000000100, 1.630001745296169000, -4.100000000000000500 ) ) ; +#14749 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14750 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14751 = CLOSED_SHELL ( 'NONE', ( #5457, #28606, #11393, #24782, #30645, #40197 ) ) ; +#14752 = SURFACE_STYLE_FILL_AREA ( #31600 ) ; +#14753 = ORIENTED_EDGE ( 'NONE', *, *, #1542, .T. ) ; +#14754 = FILL_AREA_STYLE ('',( #34097 ) ) ; +#14755 = VECTOR ( 'NONE', #27101, 1000.000000000000000 ) ; +#14756 = ADVANCED_FACE ( 'NONE', ( #37291 ), #14735, .T. ) ; +#14757 = AXIS2_PLACEMENT_3D ( 'NONE', #35150, #38516, #35298 ) ; +#14758 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14759 = FILL_AREA_STYLE ('',( #14893 ) ) ; +#14760 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.380001745296146200, -4.781671842700004200 ) ) ; +#14761 = SURFACE_STYLE_USAGE ( .BOTH. , #34103 ) ; +#14762 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14763 = STYLED_ITEM ( 'NONE', ( #37276 ), #20184 ) ; +#14764 = FILL_AREA_STYLE ('',( #11501 ) ) ; +#14765 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27074 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36476, #39703, #23619 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14766 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#14767 = ORIENTED_EDGE ( 'NONE', *, *, #10006, .F. ) ; +#14769 = EDGE_CURVE ( 'NONE', #26083, #40951, #11502, .T. ) ; +#14768 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5551 ) ) ; +#14770 = PRESENTATION_STYLE_ASSIGNMENT (( #36170 ) ) ; +#14771 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14772 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.168401191219098200E-015, 0.0000000000000000000 ) ) ; +#14773 = ORIENTED_EDGE ( 'NONE', *, *, #37079, .T. ) ; +#14775 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7449 ) ) ; +#14774 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34521 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38235, #28908, #9549 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14776 = AXIS2_PLACEMENT_3D ( 'NONE', #33763, #27401, #10860 ) ; +#14777 = LINE ( 'NONE', #13671, #21378 ) ; +#14778 = ORIENTED_EDGE ( 'NONE', *, *, #14438, .F. ) ; +#14779 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14780 = FACE_OUTER_BOUND ( 'NONE', #24669, .T. ) ; +#14781 = AXIS2_PLACEMENT_3D ( 'NONE', #37022, #17705, #24036 ) ; +#14782 = ORIENTED_EDGE ( 'NONE', *, *, #23989, .F. ) ; +#14783 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14784 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.837630800822890800E-016, 1.000000000000000000 ) ) ; +#14785 = VERTEX_POINT ( 'NONE', #27181 ) ; +#14786 = SURFACE_STYLE_USAGE ( .BOTH. , #40191 ) ; +#14787 = VERTEX_POINT ( 'NONE', #20720 ) ; +#14788 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14789 = SURFACE_SIDE_STYLE ('',( #33059 ) ) ; +#14790 = ORIENTED_EDGE ( 'NONE', *, *, #35669, .T. ) ; +#14791 = ADVANCED_FACE ( 'NONE', ( #11970 ), #19082, .T. ) ; +#14792 = PRESENTATION_STYLE_ASSIGNMENT (( #32740 ) ) ; +#14793 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33535, 'distance_accuracy_value', 'NONE'); +#14794 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14795 = DIRECTION ( 'NONE', ( 3.061289293739041200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14796 = CARTESIAN_POINT ( 'NONE', ( -3.629999999999999900, -1.380001745296125100, -6.031671842700004200 ) ) ; +#14797 = PLANE ( 'NONE', #9841 ) ; +#14798 = ADVANCED_FACE ( 'NONE', ( #29661 ), #17997, .F. ) ; +#14799 = EDGE_CURVE ( 'NONE', #16722, #34934, #16537, .T. ) ; +#14800 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#14801 = EDGE_CURVE ( 'NONE', #33254, #33795, #5389, .T. ) ; +#14802 = EDGE_LOOP ( 'NONE', ( #4282, #15310, #23416, #16230 ) ) ; +#14803 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#14804 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#14805 = EDGE_CURVE ( 'NONE', #18653, #32157, #41764, .T. ) ; +#14806 = VERTEX_POINT ( 'NONE', #17595 ) ; +#14807 = STYLED_ITEM ( 'NONE', ( #4574 ), #16765 ) ; +#14808 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14809 = VECTOR ( 'NONE', #21555, 1000.000000000000000 ) ; +#14810 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14811 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14812 = VERTEX_POINT ( 'NONE', #11324 ) ; +#14813 = AXIS2_PLACEMENT_3D ( 'NONE', #34012, #31178, #37675 ) ; +#14814 = ORIENTED_EDGE ( 'NONE', *, *, #998, .T. ) ; +#14815 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14816 = ORIENTED_EDGE ( 'NONE', *, *, #17855, .T. ) ; +#14817 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14818 = CARTESIAN_POINT ( 'NONE', ( -3.395000000000000000, 0.4636038969321073000, -3.300000000000000300 ) ) ; +#14819 = ORIENTED_EDGE ( 'NONE', *, *, #18131, .T. ) ; +#14820 = AXIS2_PLACEMENT_3D ( 'NONE', #35493, #16140, #25617 ) ; +#14821 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14822 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31647, 'distance_accuracy_value', 'NONE'); +#14823 = SURFACE_STYLE_FILL_AREA ( #33806 ) ; +#14825 = EDGE_CURVE ( 'NONE', #19456, #39696, #40265, .T. ) ; +#14824 = STYLED_ITEM ( 'NONE', ( #38345 ), #23914 ) ; +#14826 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14827 = FILL_AREA_STYLE_COLOUR ( '', #39446 ) ; +#14828 = SURFACE_STYLE_FILL_AREA ( #26704 ) ; +#14829 = PRESENTATION_STYLE_ASSIGNMENT (( #20083 ) ) ; +#14830 = ORIENTED_EDGE ( 'NONE', *, *, #35161, .T. ) ; +#14831 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#14832 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12648 ) ) ; +#14833 = LINE ( 'NONE', #6230, #38562 ) ; +#14834 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14835 = PLANE ( 'NONE', #4555 ) ; +#14836 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1888 ), #19197 ) ; +#14837 = FILL_AREA_STYLE ('',( #40247 ) ) ; +#14838 = ADVANCED_FACE ( 'NONE', ( #24129 ), #33201, .F. ) ; +#14840 = STYLED_ITEM ( 'NONE', ( #4881 ), #7598 ) ; +#14839 = SURFACE_STYLE_FILL_AREA ( #20636 ) ; +#14841 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14842 = SURFACE_STYLE_USAGE ( .BOTH. , #2311 ) ; +#14843 = FILL_AREA_STYLE ('',( #21933 ) ) ; +#14844 = SURFACE_STYLE_FILL_AREA ( #26739 ) ; +#14845 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14846 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#14847 = CLOSED_SHELL ( 'NONE', ( #26918, #16619, #12644, #9758, #19521, #29594 ) ) ; +#14848 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#14849 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#14850 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#14851 = ORIENTED_EDGE ( 'NONE', *, *, #6326, .F. ) ; +#14852 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#14853 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.139998254717358200, -6.299996877890552400 ) ) ; +#14854 = VECTOR ( 'NONE', #9137, 1000.000000000000000 ) ; +#14855 = VERTEX_POINT ( 'NONE', #40702 ) ; +#14856 = ORIENTED_EDGE ( 'NONE', *, *, #19720, .F. ) ; +#14858 = EDGE_LOOP ( 'NONE', ( #8911, #34349 ) ) ; +#14857 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#14859 = ORIENTED_EDGE ( 'NONE', *, *, #8247, .T. ) ; +#14860 = SURFACE_STYLE_FILL_AREA ( #28437 ) ; +#14861 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14862 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22434, 'distance_accuracy_value', 'NONE'); +#14863 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14864 = CIRCLE ( 'NONE', #569, 0.2818014882866900500 ) ; +#14865 = LINE ( 'NONE', #37729, #36588 ) ; +#14866 = EDGE_CURVE ( 'NONE', #1535, #22566, #21118, .T. ) ; +#14867 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14868 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#14869 = PRESENTATION_STYLE_ASSIGNMENT (( #34585 ) ) ; +#14870 = VECTOR ( 'NONE', #1769, 1000.000000000000000 ) ; +#14871 = PLANE ( 'NONE', #12338 ) ; +#14872 = CIRCLE ( 'NONE', #27893, 0.3600000000000078700 ) ; +#14873 = DIRECTION ( 'NONE', ( -6.056601140521965300E-031, 1.987721548152418300E-045, 1.000000000000000000 ) ) ; +#14874 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14875 = EDGE_CURVE ( 'NONE', #11037, #10923, #16011, .T. ) ; +#14876 = FILL_AREA_STYLE_COLOUR ( '', #176 ) ; +#14877 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37337 ), #8357 ) ; +#14878 = LINE ( 'NONE', #3240, #10313 ) ; +#14879 = AXIS2_PLACEMENT_3D ( 'NONE', #8234, #30852, #11495 ) ; +#14880 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14881 = ORIENTED_EDGE ( 'NONE', *, *, #38848, .T. ) ; +#14883 = AXIS2_PLACEMENT_3D ( 'NONE', #39208, #7425, #39626 ) ; +#14882 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14884 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#14885 = ORIENTED_EDGE ( 'NONE', *, *, #23469, .T. ) ; +#14886 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.5000000000000879300 ) ) ; +#14888 = ADVANCED_FACE ( 'NONE', ( #24640 ), #5689, .T. ) ; +#14887 = VECTOR ( 'NONE', #24173, 1000.000000000000000 ) ; +#14889 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#14890 = VERTEX_POINT ( 'NONE', #37471 ) ; +#14892 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37426 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6297, #267, #12916 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14891 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11892 ), #24371 ) ; +#14893 = FILL_AREA_STYLE_COLOUR ( '', #24189 ) ; +#14894 = SURFACE_SIDE_STYLE ('',( #1288 ) ) ; +#14895 = SURFACE_STYLE_FILL_AREA ( #22612 ) ; +#14896 = LINE ( 'NONE', #40570, #39143 ) ; +#14897 = SURFACE_STYLE_USAGE ( .BOTH. , #30583 ) ; +#14899 = AXIS2_PLACEMENT_3D ( 'NONE', #33132, #30014, #4168 ) ; +#14898 = AXIS2_PLACEMENT_3D ( 'NONE', #30226, #27393, #34176 ) ; +#14900 = SURFACE_SIDE_STYLE ('',( #21780 ) ) ; +#14901 = EDGE_LOOP ( 'NONE', ( #24953, #48, #28216, #8847 ) ) ; +#14903 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1957 ), #10553 ) ; +#14902 = FILL_AREA_STYLE ('',( #27616 ) ) ; +#14904 = FACE_OUTER_BOUND ( 'NONE', #34971, .T. ) ; +#14905 = ORIENTED_EDGE ( 'NONE', *, *, #3483, .F. ) ; +#14906 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17160, 'distance_accuracy_value', 'NONE'); +#14907 = PRESENTATION_STYLE_ASSIGNMENT (( #21960 ) ) ; +#14908 = FILL_AREA_STYLE ('',( #2649 ) ) ; +#14909 = ORIENTED_EDGE ( 'NONE', *, *, #34112, .T. ) ; +#14910 = DIRECTION ( 'NONE', ( -4.336808689942002000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14911 = VECTOR ( 'NONE', #32942, 1000.000000000000000 ) ; +#14912 = VERTEX_POINT ( 'NONE', #31396 ) ; +#14913 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169000, -3.814459358809384200 ) ) ; +#14914 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#14915 = SURFACE_STYLE_USAGE ( .BOTH. , #21723 ) ; +#14916 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, 0.03300000000000001500 ) ) ; +#14917 = ORIENTED_EDGE ( 'NONE', *, *, #10569, .T. ) ; +#14918 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.837630800822890800E-016 ) ) ; +#14919 = PRESENTATION_STYLE_ASSIGNMENT (( #8585 ) ) ; +#14920 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -2.322941965694886000, 0.6999999999999999600 ) ) ; +#14921 = EDGE_LOOP ( 'NONE', ( #4349, #24309, #21995, #38819 ) ) ; +#14922 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14923 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7233, 'distance_accuracy_value', 'NONE'); +#14924 = VERTEX_POINT ( 'NONE', #31530 ) ; +#14925 = DIRECTION ( 'NONE', ( 0.7071067811865352500, 0.7071067811865597900, 4.282663737405171400E-031 ) ) ; +#14926 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14927 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 1.485063948690956900E-014, -3.099999999999998800 ) ) ; +#14928 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14929 = EDGE_CURVE ( 'NONE', #13612, #29644, #15001, .T. ) ; +#14930 = ORIENTED_EDGE ( 'NONE', *, *, #28344, .F. ) ; +#14931 = FILL_AREA_STYLE_COLOUR ( '', #7861 ) ; +#14932 = SURFACE_SIDE_STYLE ('',( #11397 ) ) ; +#14933 = EDGE_CURVE ( 'NONE', #31053, #35138, #1871, .T. ) ; +#14934 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11933 ) ) ; +#14935 = ORIENTED_EDGE ( 'NONE', *, *, #12049, .T. ) ; +#14936 = CYLINDRICAL_SURFACE ( 'NONE', #1317, 0.3600000000000078700 ) ; +#14937 = CARTESIAN_POINT ( 'NONE', ( 3.237718385398000300, 0.07499999999999999700, 0.7155313145785999800 ) ) ; +#14938 = ORIENTED_EDGE ( 'NONE', *, *, #1690, .T. ) ; +#14939 = FILL_AREA_STYLE_COLOUR ( '', #28162 ) ; +#14940 = FILL_AREA_STYLE ('',( #34153 ) ) ; +#14941 = VERTEX_POINT ( 'NONE', #11745 ) ; +#14942 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35224, 'distance_accuracy_value', 'NONE'); +#14943 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28741 ), #13574 ) ; +#14944 = FACE_OUTER_BOUND ( 'NONE', #41403, .T. ) ; +#14945 = FACE_OUTER_BOUND ( 'NONE', #34608, .T. ) ; +#14946 = SURFACE_SIDE_STYLE ('',( #19538 ) ) ; +#14947 = EDGE_LOOP ( 'NONE', ( #36018, #15897 ) ) ; +#14948 = LINE ( 'NONE', #6669, #21554 ) ; +#14949 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33893 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10532, #4190, #4476 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14950 = SURFACE_STYLE_USAGE ( .BOTH. , #40635 ) ; +#14951 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25764, 'distance_accuracy_value', 'NONE'); +#14952 = AXIS2_PLACEMENT_3D ( 'NONE', #6307, #32411, #13199 ) ; +#14953 = ORIENTED_EDGE ( 'NONE', *, *, #39440, .T. ) ; +#14954 = CARTESIAN_POINT ( 'NONE', ( 3.337718385397934600, 0.07499999999999999700, 0.4680226303560737800 ) ) ; +#14955 = CYLINDRICAL_SURFACE ( 'NONE', #20416, 1.200001745296169300 ) ; +#14956 = EDGE_CURVE ( 'NONE', #31990, #27389, #22066, .T. ) ; +#14957 = FACE_OUTER_BOUND ( 'NONE', #27710, .T. ) ; +#14958 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14959 = ORIENTED_EDGE ( 'NONE', *, *, #1364, .T. ) ; +#14960 = SURFACE_SIDE_STYLE ('',( #38 ) ) ; +#14961 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#14962 = LINE ( 'NONE', #31928, #39169 ) ; +#14963 = ADVANCED_FACE ( 'NONE', ( #13436 ), #2394, .T. ) ; +#14965 = STYLED_ITEM ( 'NONE', ( #12161 ), #1136 ) ; +#14964 = STYLED_ITEM ( 'NONE', ( #874 ), #25691 ) ; +#14966 = VERTEX_POINT ( 'NONE', #9744 ) ; +#14967 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#14968 = FACE_OUTER_BOUND ( 'NONE', #13247, .T. ) ; +#14969 = ORIENTED_EDGE ( 'NONE', *, *, #10066, .T. ) ; +#14970 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14971 = PLANE ( 'NONE', #23928 ) ; +#14972 = LINE ( 'NONE', #20560, #13952 ) ; +#14973 = CARTESIAN_POINT ( 'NONE', ( 2.859829086680000000, -0.2000000000000001500, 1.149999999999999900 ) ) ; +#14974 = VECTOR ( 'NONE', #37450, 1000.000000000000000 ) ; +#14975 = FILL_AREA_STYLE_COLOUR ( '', #29251 ) ; +#14976 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#14977 = LINE ( 'NONE', #9981, #37704 ) ; +#14978 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.380001745296165900, -1.999999999999999600 ) ) ; +#14979 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.032879073410321300E-016, -1.000000000000000000 ) ) ; +#14980 = SURFACE_SIDE_STYLE ('',( #20117 ) ) ; +#14981 = ORIENTED_EDGE ( 'NONE', *, *, #8659, .T. ) ; +#14982 = CYLINDRICAL_SURFACE ( 'NONE', #11589, 1.499999999999867700 ) ; +#14983 = VERTEX_POINT ( 'NONE', #22617 ) ; +#14984 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14985 = DIRECTION ( 'NONE', ( -2.891205793294677400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14986 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#14987 = SURFACE_STYLE_FILL_AREA ( #8599 ) ; +#14988 = ORIENTED_EDGE ( 'NONE', *, *, #32298, .T. ) ; +#14989 = PRESENTATION_STYLE_ASSIGNMENT (( #16157 ) ) ; +#14990 = ORIENTED_EDGE ( 'NONE', *, *, #18717, .T. ) ; +#14991 = EDGE_CURVE ( 'NONE', #22600, #11093, #36727, .T. ) ; +#14992 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 9.268445570935432200E-016, 1.000000000000000000 ) ) ; +#14993 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14994 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#14995 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -2.594459358809380900 ) ) ; +#14996 = EDGE_CURVE ( 'NONE', #2905, #24110, #872, .T. ) ; +#14997 = VECTOR ( 'NONE', #23662, 1000.000000000000000 ) ; +#14998 = FILL_AREA_STYLE ('',( #27719 ) ) ; +#14999 = ADVANCED_FACE ( 'NONE', ( #25596 ), #22077, .F. ) ; +#15000 = PLANE ( 'NONE', #36930 ) ; +#15001 = LINE ( 'NONE', #8491, #24597 ) ; +#15002 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10081 ) ) ; +#15003 = PRESENTATION_STYLE_ASSIGNMENT (( #24530 ) ) ; +#15004 = SURFACE_SIDE_STYLE ('',( #9587 ) ) ; +#15005 = ORIENTED_EDGE ( 'NONE', *, *, #4, .T. ) ; +#15006 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28253 ) ) ; +#15007 = VECTOR ( 'NONE', #13169, 1000.000000000000000 ) ; +#15008 = LINE ( 'NONE', #17970, #40819 ) ; +#15009 = DIRECTION ( 'NONE', ( -3.281909278875039200E-015, 1.000000000000000000, 2.828353493440455200E-016 ) ) ; +#15010 = CARTESIAN_POINT ( 'NONE', ( 17.14169132166999900, -0.3499999999999999800, -1.649999999999999900 ) ) ; +#15011 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15012 = ADVANCED_FACE ( 'NONE', ( #18551 ), #26603, .T. ) ; +#15013 = SURFACE_SIDE_STYLE ('',( #35708 ) ) ; +#15014 = AXIS2_PLACEMENT_3D ( 'NONE', #31177, #27807, #11678 ) ; +#15015 = SURFACE_SIDE_STYLE ('',( #12424 ) ) ; +#15016 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15017 = ORIENTED_EDGE ( 'NONE', *, *, #4368, .T. ) ; +#15018 = PRESENTATION_STYLE_ASSIGNMENT (( #32227 ) ) ; +#15020 = EDGE_CURVE ( 'NONE', #31087, #20620, #32658, .T. ) ; +#15019 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10975 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8813, #8682, #17903 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15021 = ORIENTED_EDGE ( 'NONE', *, *, #39873, .T. ) ; +#15022 = VERTEX_POINT ( 'NONE', #25874 ) ; +#15023 = LINE ( 'NONE', #22189, #3375 ) ; +#15024 = ORIENTED_EDGE ( 'NONE', *, *, #31004, .F. ) ; +#15025 = VECTOR ( 'NONE', #8329, 1000.000000000000000 ) ; +#15026 = FILL_AREA_STYLE ('',( #14746 ) ) ; +#15028 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12830 ) ) ; +#15027 = STYLED_ITEM ( 'NONE', ( #22377 ), #26484 ) ; +#15029 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15030 = ORIENTED_EDGE ( 'NONE', *, *, #20090, .T. ) ; +#15031 = SURFACE_SIDE_STYLE ('',( #30066 ) ) ; +#15032 = VERTEX_POINT ( 'NONE', #9324 ) ; +#15033 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#15034 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.6300017452961683700, -4.750000000000000000 ) ) ; +#15035 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.480001745296170000, -0.2339555568811688700 ) ) ; +#15036 = FACE_OUTER_BOUND ( 'NONE', #22526, .T. ) ; +#15037 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, 0.7071067811865483500 ) ) ; +#15038 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000004100, 0.2818014882867045900, -3.099999999999998800 ) ) ; +#15039 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15040 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15041 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid36', #24395 ) ; +#15042 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#15043 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#15044 = EDGE_CURVE ( 'NONE', #12289, #9239, #22544, .T. ) ; +#15045 = ADVANCED_FACE ( 'NONE', ( #36216 ), #35480, .F. ) ; +#15046 = ORIENTED_EDGE ( 'NONE', *, *, #29078, .T. ) ; +#15047 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -2.891205793294629500E-014 ) ) ; +#15048 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#15049 = FILL_AREA_STYLE_COLOUR ( '', #13960 ) ; +#15050 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15051 = EDGE_CURVE ( 'NONE', #38950, #33621, #10892, .T. ) ; +#15052 = ORIENTED_EDGE ( 'NONE', *, *, #40973, .T. ) ; +#15053 = LINE ( 'NONE', #28297, #39307 ) ; +#15054 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15055 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#15056 = SURFACE_STYLE_FILL_AREA ( #20306 ) ; +#15057 = EDGE_CURVE ( 'NONE', #9006, #21086, #14962, .T. ) ; +#15058 = ORIENTED_EDGE ( 'NONE', *, *, #9299, .T. ) ; +#15059 = ORIENTED_EDGE ( 'NONE', *, *, #18681, .F. ) ; +#15060 = CARTESIAN_POINT ( 'NONE', ( -3.475000000000000100, 1.630001745296169000, -4.000000000000000000 ) ) ; +#15061 = VERTEX_POINT ( 'NONE', #9868 ) ; +#15062 = SURFACE_SIDE_STYLE ('',( #36236 ) ) ; +#15063 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38858 ), #27248 ) ; +#15064 = VECTOR ( 'NONE', #35670, 1000.000000000000000 ) ; +#15065 = LINE ( 'NONE', #12675, #37317 ) ; +#15066 = PLANE ( 'NONE', #1947 ) ; +#15067 = FACE_OUTER_BOUND ( 'NONE', #6181, .T. ) ; +#15068 = PLANE ( 'NONE', #12397 ) ; +#15069 = ORIENTED_EDGE ( 'NONE', *, *, #10890, .T. ) ; +#15070 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15072 = LINE ( 'NONE', #277, #41835 ) ; +#15071 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15073 = ORIENTED_EDGE ( 'NONE', *, *, #8494, .F. ) ; +#15074 = ORIENTED_EDGE ( 'NONE', *, *, #31258, .F. ) ; +#15075 = VECTOR ( 'NONE', #25763, 1000.000000000000000 ) ; +#15076 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3562 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11860, #5810, #37995 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15077 = AXIS2_PLACEMENT_3D ( 'NONE', #8149, #30770, #20789 ) ; +#15078 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.779999999999867900, 0.0000000000000000000 ) ) ; +#15079 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.139998254717369000, -5.049996877890552400 ) ) ; +#15081 = EDGE_CURVE ( 'NONE', #18155, #25684, #34659, .T. ) ; +#15080 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22140 ), #6418 ) ; +#15082 = ORIENTED_EDGE ( 'NONE', *, *, #39742, .F. ) ; +#15083 = LINE ( 'NONE', #36664, #12541 ) ; +#15084 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26849, 'distance_accuracy_value', 'NONE'); +#15086 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5476 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26162, #35764, #29383 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15085 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26475 ) ) ; +#15087 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.180001745296169700, -4.400000000000000400 ) ) ; +#15088 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.380001745296134000, -6.699999999999994000 ) ) ; +#15089 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32246 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13179, #29569, #29280 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15090 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15091 = STYLED_ITEM ( 'NONE', ( #29072 ), #32650 ) ; +#15092 = FILL_AREA_STYLE_COLOUR ( '', #33451 ) ; +#15093 = ORIENTED_EDGE ( 'NONE', *, *, #7317, .T. ) ; +#15094 = CARTESIAN_POINT ( 'NONE', ( 3.315809924354953700, 0.3499999999999811000, -1.649999999994999700 ) ) ; +#15095 = FACE_OUTER_BOUND ( 'NONE', #15859, .T. ) ; +#15096 = AXIS2_PLACEMENT_3D ( 'NONE', #31075, #8878, #11720 ) ; +#15097 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15098 = ORIENTED_EDGE ( 'NONE', *, *, #36860, .T. ) ; +#15099 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15100 = DIRECTION ( 'NONE', ( -3.135035834215943800E-015, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#15101 = PRESENTATION_STYLE_ASSIGNMENT (( #9933 ) ) ; +#15102 = ADVANCED_FACE ( 'NONE', ( #38682 ), #38841, .T. ) ; +#15103 = ORIENTED_EDGE ( 'NONE', *, *, #7813, .F. ) ; +#15104 = ORIENTED_EDGE ( 'NONE', *, *, #10329, .T. ) ; +#15105 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.380001745296165300, -1.649999999999999500 ) ) ; +#15106 = ORIENTED_EDGE ( 'NONE', *, *, #30074, .T. ) ; +#15107 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875040400E-015, 0.0000000000000000000 ) ) ; +#15108 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20991, 'distance_accuracy_value', 'NONE'); +#15109 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#15110 = ADVANCED_BREP_SHAPE_REPRESENTATION ( '2305018-2', ( #15796, #13212, #24086, #2362, #16049, #35475, #32632, #38842, #23847, #27727, #27971, #2650, #17114, #33416, #32104, #13996, #41436, #31358, #7520, #8799, #8276, #20240, #17660, #40914, #29525, #35753, #23319, #36762, #11910, #7764, #30824, #26435, #4423, #28249, #39606, #15041, #10086, #19462, #76, #9572, #6987, #2128, #3360, #34467, #18415, #5191, #24646, #29767, #16341, #15300, #10859, #1352, #33937, #35236, #25168, #846, #36523, #14518, #21016, #38325, #20778, #22042, #22793, #18942, #25906, #12678, #21535, #26984, #9169 ), #11896 ) ; +#15111 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15112 = DIRECTION ( 'NONE', ( 2.891205793294677000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#15113 = VERTEX_POINT ( 'NONE', #623 ) ; +#15114 = FACE_OUTER_BOUND ( 'NONE', #758, .T. ) ; +#15115 = EDGE_LOOP ( 'NONE', ( #31012, #27930, #29307, #27169 ) ) ; +#15116 = ORIENTED_EDGE ( 'NONE', *, *, #38379, .F. ) ; +#15117 = LINE ( 'NONE', #41160, #4493 ) ; +#15118 = FILL_AREA_STYLE_COLOUR ( '', #34829 ) ; +#15119 = EDGE_CURVE ( 'NONE', #37872, #14666, #16457, .T. ) ; +#15120 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15121 = DIRECTION ( 'NONE', ( -2.367138801244516300E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15122 = SURFACE_SIDE_STYLE ('',( #37045 ) ) ; +#15123 = ORIENTED_EDGE ( 'NONE', *, *, #367, .T. ) ; +#15124 = SURFACE_STYLE_FILL_AREA ( #36136 ) ; +#15125 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15126 = EDGE_CURVE ( 'NONE', #31918, #35305, #39709, .T. ) ; +#15127 = STYLED_ITEM ( 'NONE', ( #18534 ), #17626 ) ; +#15128 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#15129 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15130 = EDGE_CURVE ( 'NONE', #25611, #4042, #29088, .T. ) ; +#15131 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15132 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4854 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24519, #24672, #8656 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15134 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15133 = CIRCLE ( 'NONE', #26856, 0.2999999999999999300 ) ; +#15135 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#15136 = AXIS2_PLACEMENT_3D ( 'NONE', #8012, #31179, #8422 ) ; +#15137 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15138 = LINE ( 'NONE', #4875, #36424 ) ; +#15139 = VERTEX_POINT ( 'NONE', #764 ) ; +#15141 = EDGE_CURVE ( 'NONE', #16736, #3891, #7850, .T. ) ; +#15140 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21404 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18778, #28093, #9126 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15142 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#15143 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15144 = FACE_OUTER_BOUND ( 'NONE', #27254, .T. ) ; +#15145 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.414176746720224900E-016, 1.000000000000000000 ) ) ; +#15146 = EDGE_LOOP ( 'NONE', ( #29904, #24803, #19947, #11237 ) ) ; +#15147 = LINE ( 'NONE', #41452, #32306 ) ; +#15148 = SURFACE_STYLE_FILL_AREA ( #15713 ) ; +#15149 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40546 ) ) ; +#15150 = VECTOR ( 'NONE', #34282, 1000.000000000000000 ) ; +#15151 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38940 ) ) ; +#15152 = VECTOR ( 'NONE', #41490, 1000.000000000000000 ) ; +#15153 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14668, 'distance_accuracy_value', 'NONE'); +#15154 = VECTOR ( 'NONE', #40488, 1000.000000000000100 ) ; +#15155 = LINE ( 'NONE', #39484, #16160 ) ; +#15156 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17076 ) ) ; +#15157 = VERTEX_POINT ( 'NONE', #35615 ) ; +#15158 = SURFACE_STYLE_FILL_AREA ( #25424 ) ; +#15159 = ORIENTED_EDGE ( 'NONE', *, *, #24160, .T. ) ; +#15160 = EDGE_LOOP ( 'NONE', ( #35697, #37190 ) ) ; +#15161 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10798 ) ) ; +#15162 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.5199999999999843600, -4.500000000000000000 ) ) ; +#15163 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, -0.1999999999999999600, 12.42614000000000000 ) ) ; +#15164 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.280001745296169600, -4.400000000000000400 ) ) ; +#15165 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15166 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#15167 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15285, 'distance_accuracy_value', 'NONE'); +#15168 = EDGE_LOOP ( 'NONE', ( #4651, #12654, #7141, #28122 ) ) ; +#15169 = CARTESIAN_POINT ( 'NONE', ( -3.100000000000000100, -1.139998254717370600, -5.049996877890552400 ) ) ; +#15170 = VECTOR ( 'NONE', #8136, 1000.000000000000000 ) ; +#15171 = FACE_OUTER_BOUND ( 'NONE', #25460, .T. ) ; +#15172 = VECTOR ( 'NONE', #7927, 1000.000000000000000 ) ; +#15173 = SURFACE_STYLE_FILL_AREA ( #19169 ) ; +#15174 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, 2.322941965694886000, -1.250000000000000000 ) ) ; +#15175 = FILL_AREA_STYLE ('',( #8774 ) ) ; +#15176 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15177 = SURFACE_SIDE_STYLE ('',( #37643 ) ) ; +#15178 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#15179 = ADVANCED_FACE ( 'NONE', ( #9860 ), #19817, .F. ) ; +#15180 = FILL_AREA_STYLE ('',( #15322 ) ) ; +#15181 = SURFACE_STYLE_FILL_AREA ( #6454 ) ; +#15182 = EDGE_LOOP ( 'NONE', ( #17343, #33147, #33430, #35987 ) ) ; +#15183 = SURFACE_SIDE_STYLE ('',( #17655 ) ) ; +#15184 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#15185 = EDGE_CURVE ( 'NONE', #35937, #26190, #1306, .T. ) ; +#15186 = CARTESIAN_POINT ( 'NONE', ( -3.332298852287715700, 0.2999999198035229700, -1.600000000000000300 ) ) ; +#15187 = ORIENTED_EDGE ( 'NONE', *, *, #3406, .F. ) ; +#15188 = CARTESIAN_POINT ( 'NONE', ( -3.284742021549935700, -0.4268019112595596900, -1.756801911259373300 ) ) ; +#15189 = LINE ( 'NONE', #20866, #12645 ) ; +#15190 = SURFACE_STYLE_USAGE ( .BOTH. , #40453 ) ; +#15191 = SURFACE_STYLE_FILL_AREA ( #8030 ) ; +#15192 = EDGE_CURVE ( 'NONE', #8821, #5698, #7310, .T. ) ; +#15193 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40590 ), #12191 ) ; +#15194 = VECTOR ( 'NONE', #19830, 1000.000000000000000 ) ; +#15195 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#15196 = PLANE ( 'NONE', #34302 ) ; +#15197 = ORIENTED_EDGE ( 'NONE', *, *, #1727, .T. ) ; +#15198 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31695 ), #30346 ) ; +#15199 = VERTEX_POINT ( 'NONE', #20236 ) ; +#15200 = ORIENTED_EDGE ( 'NONE', *, *, #30610, .T. ) ; +#15201 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15202 = FILL_AREA_STYLE_COLOUR ( '', #41291 ) ; +#15203 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#15204 = AXIS2_PLACEMENT_3D ( 'NONE', #35357, #26312, #3425 ) ; +#15205 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.480001745296165600, -1.749999999999998900 ) ) ; +#15206 = CLOSED_SHELL ( 'NONE', ( #27983, #33412, #37300, #28132, #3771, #15867 ) ) ; +#15207 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2243 ) ) ; +#15208 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26723 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36331, #20516, #33209 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15209 = PRESENTATION_STYLE_ASSIGNMENT (( #37789 ) ) ; +#15210 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15211 = SURFACE_STYLE_USAGE ( .BOTH. , #15062 ) ; +#15213 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30443 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36636, #27596, #14062 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15212 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10602 ) ) ; +#15214 = FACE_OUTER_BOUND ( 'NONE', #24007, .T. ) ; +#15215 = LINE ( 'NONE', #30060, #6089 ) ; +#15217 = EDGE_CURVE ( 'NONE', #803, #39643, #39667, .T. ) ; +#15216 = AXIS2_PLACEMENT_3D ( 'NONE', #15307, #21551, #40563 ) ; +#15218 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#15219 = CARTESIAN_POINT ( 'NONE', ( -3.237718385398000300, 0.2999999999999999900, 0.7155313145785999800 ) ) ; +#15220 = DIRECTION ( 'NONE', ( -7.744301232039317900E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15221 = ADVANCED_FACE ( 'NONE', ( #26557 ), #10841, .T. ) ; +#15222 = LINE ( 'NONE', #21683, #6606 ) ; +#15223 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15225 = STYLED_ITEM ( 'NONE', ( #11349 ), #456 ) ; +#15224 = AXIS2_PLACEMENT_3D ( 'NONE', #31790, #37997, #40974 ) ; +#15226 = VECTOR ( 'NONE', #6185, 1000.000000000000000 ) ; +#15227 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#15228 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15229 = ORIENTED_EDGE ( 'NONE', *, *, #41428, .F. ) ; +#15230 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#15231 = PRESENTATION_STYLE_ASSIGNMENT (( #2277 ) ) ; +#15232 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, 10.30000000000000100, -1.250000000000000000 ) ) ; +#15233 = CARTESIAN_POINT ( 'NONE', ( -4.010831726188969900, 0.5300017452961686100, -4.576794919243112300 ) ) ; +#15234 = CYLINDRICAL_SURFACE ( 'NONE', #41107, 0.1000000000000000500 ) ; +#15235 = VERTEX_POINT ( 'NONE', #20801 ) ; +#15236 = FACE_OUTER_BOUND ( 'NONE', #11355, .T. ) ; +#15237 = ADVANCED_FACE ( 'NONE', ( #16948 ), #17404, .T. ) ; +#15238 = SURFACE_SIDE_STYLE ('',( #37486 ) ) ; +#15239 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15240 = FACE_OUTER_BOUND ( 'NONE', #36287, .T. ) ; +#15241 = DIRECTION ( 'NONE', ( 1.133987551255204500E-030, 1.000000000000000000, -2.367138801244545900E-016 ) ) ; +#15242 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#15243 = ORIENTED_EDGE ( 'NONE', *, *, #6833, .T. ) ; +#15244 = SURFACE_STYLE_USAGE ( .BOTH. , #37818 ) ; +#15245 = EDGE_LOOP ( 'NONE', ( #23626, #24630, #33987, #2625 ) ) ; +#15246 = EDGE_LOOP ( 'NONE', ( #31017, #28548, #27811, #35446 ) ) ; +#15247 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.779999999999867900, -0.2339555568811695400 ) ) ; +#15248 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33540, 'distance_accuracy_value', 'NONE'); +#15249 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521965300E-031 ) ) ; +#15250 = VERTEX_POINT ( 'NONE', #39679 ) ; +#15251 = CARTESIAN_POINT ( 'NONE', ( -4.170000000000001700, 0.2800000000000027500, -0.2000017452961698200 ) ) ; +#15252 = SURFACE_STYLE_FILL_AREA ( #35685 ) ; +#15253 = VERTEX_POINT ( 'NONE', #4232 ) ; +#15254 = EDGE_CURVE ( 'NONE', #24146, #37102, #27564, .T. ) ; +#15255 = LINE ( 'NONE', #141, #6633 ) ; +#15256 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15257 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#15258 = EDGE_CURVE ( 'NONE', #25708, #6500, #9339, .T. ) ; +#15259 = CIRCLE ( 'NONE', #27906, 1.499999999999867900 ) ; +#15260 = AXIS2_PLACEMENT_3D ( 'NONE', #4414, #17848, #14588 ) ; +#15261 = SURFACE_SIDE_STYLE ('',( #7274 ) ) ; +#15262 = PLANE ( 'NONE', #32580 ) ; +#15263 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15264 = SURFACE_SIDE_STYLE ('',( #7505 ) ) ; +#15265 = FILL_AREA_STYLE ('',( #5649 ) ) ; +#15266 = EDGE_LOOP ( 'NONE', ( #7511, #26935, #6937, #23474 ) ) ; +#15267 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15268 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.380001745296135700, -6.031671842700004200 ) ) ; +#15269 = ADVANCED_FACE ( 'NONE', ( #37650 ), #25049, .T. ) ; +#15270 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26078 ) ) ; +#15271 = SURFACE_STYLE_USAGE ( .BOTH. , #14980 ) ; +#15272 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36194 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33324, #3926, #745 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15273 = ORIENTED_EDGE ( 'NONE', *, *, #28665, .T. ) ; +#15276 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37470 ) ) ; +#15275 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#15274 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30485 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12553, #12278, #18961 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15277 = FILL_AREA_STYLE_COLOUR ( '', #12558 ) ; +#15278 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.499998254703833500, -5.449999999999994000 ) ) ; +#15279 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#15280 = LINE ( 'NONE', #12729, #39519 ) ; +#15282 = EDGE_CURVE ( 'NONE', #39526, #34591, #7819, .T. ) ; +#15281 = AXIS2_PLACEMENT_3D ( 'NONE', #34737, #15391, #9002 ) ; +#15283 = CARTESIAN_POINT ( 'NONE', ( -4.492416573867751900, -1.982581680836082500, -6.695341433092482800 ) ) ; +#15284 = ORIENTED_EDGE ( 'NONE', *, *, #4560, .T. ) ; +#15285 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15286 = LINE ( 'NONE', #25015, #18797 ) ; +#15287 = SURFACE_STYLE_USAGE ( .BOTH. , #28397 ) ; +#15288 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#15289 = ADVANCED_FACE ( 'NONE', ( #32086 ), #9302, .F. ) ; +#15291 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32873 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3749, #29607, #39198 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15290 = AXIS2_PLACEMENT_3D ( 'NONE', #35513, #12747, #368 ) ; +#15292 = SURFACE_SIDE_STYLE ('',( #16888 ) ) ; +#15293 = FILL_AREA_STYLE_COLOUR ( '', #11781 ) ; +#15294 = ORIENTED_EDGE ( 'NONE', *, *, #3544, .F. ) ; +#15295 = ORIENTED_EDGE ( 'NONE', *, *, #13139, .F. ) ; +#15296 = FACE_OUTER_BOUND ( 'NONE', #30863, .T. ) ; +#15297 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15298 = CARTESIAN_POINT ( 'NONE', ( -3.475000000000000100, 1.480001745296169100, -4.100000000000000500 ) ) ; +#15299 = VECTOR ( 'NONE', #19266, 1000.000000000000000 ) ; +#15300 = MANIFOLD_SOLID_BREP ( '1-1-solid7', #4322 ) ; +#15301 = CIRCLE ( 'NONE', #7694, 0.05000000000000012800 ) ; +#15302 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#15303 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -10.30000000000000100, -1.250000000000000000 ) ) ; +#15304 = FILL_AREA_STYLE_COLOUR ( '', #11623 ) ; +#15305 = ORIENTED_EDGE ( 'NONE', *, *, #20377, .T. ) ; +#15306 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#15307 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.180001745296166000, -7.200000000000001100 ) ) ; +#15308 = FILL_AREA_STYLE_COLOUR ( '', #15793 ) ; +#15309 = EDGE_CURVE ( 'NONE', #40705, #17719, #7283, .T. ) ; +#15310 = ORIENTED_EDGE ( 'NONE', *, *, #31836, .F. ) ; +#15311 = CARTESIAN_POINT ( 'NONE', ( 4.856063034915695900, 0.2799999999999973100, -0.6228541982233617400 ) ) ; +#15312 = EDGE_CURVE ( 'NONE', #3042, #2782, #40144, .T. ) ; +#15313 = EDGE_LOOP ( 'NONE', ( #26719, #29615, #33428, #1683 ) ) ; +#15314 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.499998254703826200, -6.299999999999993600 ) ) ; +#15315 = ORIENTED_EDGE ( 'NONE', *, *, #11959, .T. ) ; +#15316 = ADVANCED_FACE ( 'NONE', ( #10314 ), #12355, .T. ) ; +#15318 = VERTEX_POINT ( 'NONE', #1588 ) ; +#15317 = FACE_OUTER_BOUND ( 'NONE', #23772, .T. ) ; +#15319 = ORIENTED_EDGE ( 'NONE', *, *, #22141, .F. ) ; +#15320 = PRESENTATION_STYLE_ASSIGNMENT (( #17563 ) ) ; +#15321 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24815 ) ) ; +#15322 = FILL_AREA_STYLE_COLOUR ( '', #17269 ) ; +#15323 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15324 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15325 = ORIENTED_EDGE ( 'NONE', *, *, #12190, .T. ) ; +#15326 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.380001745296165500, -1.999999999999999600 ) ) ; +#15327 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#15328 = ORIENTED_EDGE ( 'NONE', *, *, #27263, .T. ) ; +#15329 = AXIS2_PLACEMENT_3D ( 'NONE', #19707, #13298, #23067 ) ; +#15330 = LINE ( 'NONE', #10132, #35020 ) ; +#15331 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#15332 = CIRCLE ( 'NONE', #9053, 0.3000000000000001000 ) ; +#15333 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28510, 'distance_accuracy_value', 'NONE'); +#15334 = CARTESIAN_POINT ( 'NONE', ( -3.163431895087565500, -0.5351372956108396700, -1.865109232484032800 ) ) ; +#15335 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37773 ) ) ; +#15336 = SURFACE_STYLE_FILL_AREA ( #27186 ) ; +#15337 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#15338 = PLANE ( 'NONE', #37089 ) ; +#15340 = EDGE_CURVE ( 'NONE', #41459, #19894, #147, .T. ) ; +#15339 = STYLED_ITEM ( 'NONE', ( #19496 ), #37004 ) ; +#15341 = FILL_AREA_STYLE ('',( #24684 ) ) ; +#15342 = FILL_AREA_STYLE_COLOUR ( '', #6902 ) ; +#15343 = VECTOR ( 'NONE', #32441, 1000.000000000000000 ) ; +#15344 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15346 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9847 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18845, #22101, #25219 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15345 = AXIS2_PLACEMENT_3D ( 'NONE', #6274, #25637, #31835 ) ; +#15347 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15348 = DIRECTION ( 'NONE', ( 0.9961946980917454300, -3.129741034912050500E-016, 0.08715574274766049700 ) ) ; +#15349 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37453 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18187, #27352, #24393 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15350 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23288 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36017, #7027, #26263 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15351 = CARTESIAN_POINT ( 'NONE', ( 3.245000000054750100, -0.2999999999999999900, -1.600000000000000100 ) ) ; +#15352 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15353 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#15354 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15355 = VECTOR ( 'NONE', #39350, 1000.000000000000000 ) ; +#15356 = ORIENTED_EDGE ( 'NONE', *, *, #2350, .F. ) ; +#15357 = ORIENTED_EDGE ( 'NONE', *, *, #18971, .F. ) ; +#15358 = ORIENTED_EDGE ( 'NONE', *, *, #39222, .F. ) ; +#15359 = ORIENTED_EDGE ( 'NONE', *, *, #31993, .F. ) ; +#15360 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15361 = FACE_OUTER_BOUND ( 'NONE', #27267, .T. ) ; +#15362 = LINE ( 'NONE', #24908, #14307 ) ; +#15363 = FILL_AREA_STYLE ('',( #34713 ) ) ; +#15364 = SURFACE_STYLE_USAGE ( .BOTH. , #25001 ) ; +#15365 = PRESENTATION_STYLE_ASSIGNMENT (( #18377 ) ) ; +#15366 = EDGE_CURVE ( 'NONE', #28863, #972, #38606, .T. ) ; +#15367 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15368 = PLANE ( 'NONE', #32440 ) ; +#15369 = EDGE_CURVE ( 'NONE', #30774, #31053, #22831, .T. ) ; +#15370 = VECTOR ( 'NONE', #37318, 1000.000000000000000 ) ; +#15371 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15372 = EDGE_CURVE ( 'NONE', #19755, #35081, #29541, .T. ) ; +#15373 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.730380239188924900, -0.8400209439508702400 ) ) ; +#15374 = LINE ( 'NONE', #20767, #13315 ) ; +#15375 = VECTOR ( 'NONE', #18922, 1000.000000000000000 ) ; +#15376 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28356 ), #16175 ) ; +#15377 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998358800, -4.450000000000000200 ) ) ; +#15378 = EDGE_CURVE ( 'NONE', #16084, #9621, #37128, .T. ) ; +#15379 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29969 ) ) ; +#15380 = FILL_AREA_STYLE_COLOUR ( '', #5597 ) ; +#15381 = CARTESIAN_POINT ( 'NONE', ( -3.429999999999999700, -1.380001745296125100, -6.699999999999994000 ) ) ; +#15382 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15383 = ADVANCED_FACE ( 'NONE', ( #27529 ), #5644, .T. ) ; +#15384 = ORIENTED_EDGE ( 'NONE', *, *, #39873, .F. ) ; +#15385 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11042 ) ) ; +#15386 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15387 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35072, 'distance_accuracy_value', 'NONE'); +#15388 = EDGE_CURVE ( 'NONE', #17105, #36833, #27021, .T. ) ; +#15389 = LINE ( 'NONE', #829, #31048 ) ; +#15390 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15391 = DIRECTION ( 'NONE', ( 1.000000000000000000, 2.478176394252580200E-017, 6.082356018693180500E-031 ) ) ; +#15392 = FILL_AREA_STYLE_COLOUR ( '', #33069 ) ; +#15393 = ORIENTED_EDGE ( 'NONE', *, *, #38052, .F. ) ; +#15394 = ORIENTED_EDGE ( 'NONE', *, *, #21831, .T. ) ; +#15395 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 1.485063948690956900E-014, -2.095470210943120000 ) ) ; +#15397 = AXIS2_PLACEMENT_3D ( 'NONE', #30522, #14979, #11434 ) ; +#15396 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10484 ) ) ; +#15398 = STYLED_ITEM ( 'NONE', ( #5023 ), #40886 ) ; +#15399 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15400 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -2.367138801244516300E-016 ) ) ; +#15401 = AXIS2_PLACEMENT_3D ( 'NONE', #35608, #6909, #3799 ) ; +#15402 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, -0.3500000000000000300, -1.300000000000000000 ) ) ; +#15403 = DIRECTION ( 'NONE', ( 1.156482317317871700E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15404 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#15405 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244516300E-016 ) ) ; +#15406 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8141 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25400, #25524, #41585 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15407 = VECTOR ( 'NONE', #7670, 1000.000000000000200 ) ; +#15408 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, -0.2799999999999974200, -0.2339555568811697600 ) ) ; +#15409 = VECTOR ( 'NONE', #12449, 1000.000000000000000 ) ; +#15410 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703821100, -6.600000000000000500 ) ) ; +#15411 = VECTOR ( 'NONE', #31201, 1000.000000000000000 ) ; +#15412 = EDGE_LOOP ( 'NONE', ( #9452, #30758, #30067, #3344 ) ) ; +#15413 = SURFACE_SIDE_STYLE ('',( #31999 ) ) ; +#15414 = LINE ( 'NONE', #13884, #13353 ) ; +#15415 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, 0.07499999999999998300, 0.6780706550913999700 ) ) ; +#15416 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, 0.3000000000000001600, -1.250000000000000000 ) ) ; +#15417 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15418 = CARTESIAN_POINT ( 'NONE', ( -4.735797985667151300, -0.2799999999999974200, -0.3279248189596167300 ) ) ; +#15419 = ORIENTED_EDGE ( 'NONE', *, *, #9517, .T. ) ; +#15420 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15421 = ORIENTED_EDGE ( 'NONE', *, *, #16724, .T. ) ; +#15422 = PLANE ( 'NONE', #19924 ) ; +#15423 = ADVANCED_FACE ( 'NONE', ( #41608 ), #28234, .F. ) ; +#15424 = CARTESIAN_POINT ( 'NONE', ( 3.062181641390000000, -0.2999999999999999900, 1.149999999999999900 ) ) ; +#15425 = ORIENTED_EDGE ( 'NONE', *, *, #17707, .F. ) ; +#15426 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#15427 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#15428 = EDGE_CURVE ( 'NONE', #21453, #29191, #40595, .T. ) ; +#15429 = ORIENTED_EDGE ( 'NONE', *, *, #35229, .T. ) ; +#15430 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#15431 = LINE ( 'NONE', #35920, #18974 ) ; +#15432 = SURFACE_STYLE_USAGE ( .BOTH. , #5253 ) ; +#15433 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#15434 = ADVANCED_FACE ( 'NONE', ( #257 ), #12105, .T. ) ; +#15435 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35818, 'distance_accuracy_value', 'NONE'); +#15436 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000003200, 0.3000000000000149200, -4.249999999999998200 ) ) ; +#15437 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15438 = EDGE_CURVE ( 'NONE', #22260, #37804, #19935, .T. ) ; +#15439 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#15440 = CLOSED_SHELL ( 'NONE', ( #30693, #37256, #20135, #11765 ) ) ; +#15441 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15442 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15443 = FACE_OUTER_BOUND ( 'NONE', #4393, .T. ) ; +#15444 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15445 = PRESENTATION_STYLE_ASSIGNMENT (( #30679 ) ) ; +#15446 = AXIS2_PLACEMENT_3D ( 'NONE', #37392, #40623, #21751 ) ; +#15447 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#15448 = STYLED_ITEM ( 'NONE', ( #38829 ), #13795 ) ; +#15449 = ORIENTED_EDGE ( 'NONE', *, *, #22008, .T. ) ; +#15450 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15451 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15452 = AXIS2_PLACEMENT_3D ( 'NONE', #6251, #19130, #83 ) ; +#15453 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31095 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20862, #1369, #4589 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15454 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 0.3500000000000000300, 0.6999999999999999600 ) ) ; +#15455 = VECTOR ( 'NONE', #29662, 1000.000000000000000 ) ; +#15457 = STYLED_ITEM ( 'NONE', ( #8273 ), #4468 ) ; +#15456 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32759 ) ) ; +#15458 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15459 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#15460 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15462 = EDGE_CURVE ( 'NONE', #30097, #37013, #6250, .T. ) ; +#15461 = AXIS2_PLACEMENT_3D ( 'NONE', #31854, #12489, #31985 ) ; +#15463 = CARTESIAN_POINT ( 'NONE', ( 3.839743771154402000, 0.6300017452961683700, -4.400000000000001200 ) ) ; +#15464 = PRESENTATION_STYLE_ASSIGNMENT (( #26018 ) ) ; +#15465 = AXIS2_PLACEMENT_3D ( 'NONE', #33768, #7627, #24023 ) ; +#15466 = CARTESIAN_POINT ( 'NONE', ( -3.315809924354953700, -0.3499999999999811000, -1.680000000000000400 ) ) ; +#15467 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15468 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.180001745296165500, -4.675000000000000700 ) ) ; +#15469 = CARTESIAN_POINT ( 'NONE', ( 4.070001745296171900, -0.2800000000000026400, -4.400000000000000400 ) ) ; +#15470 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#15471 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15472 = ADVANCED_FACE ( 'NONE', ( #744 ), #41086, .F. ) ; +#15473 = VERTEX_POINT ( 'NONE', #2569 ) ; +#15474 = SURFACE_SIDE_STYLE ('',( #39789 ) ) ; +#15475 = ORIENTED_EDGE ( 'NONE', *, *, #3246, .T. ) ; +#15476 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -10.30000000000000100, -1.250000000000000000 ) ) ; +#15477 = EDGE_LOOP ( 'NONE', ( #4406, #2636, #15900, #10677, #23378, #20335 ) ) ; +#15478 = FILL_AREA_STYLE_COLOUR ( '', #37099 ) ; +#15480 = LINE ( 'NONE', #3256, #21542 ) ; +#15479 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10421, 'distance_accuracy_value', 'NONE'); +#15481 = CARTESIAN_POINT ( 'NONE', ( 4.748858409427525000, 0.08000174529616929700, -7.173853277175703100 ) ) ; +#15482 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#15483 = FACE_OUTER_BOUND ( 'NONE', #13428, .T. ) ; +#15484 = SURFACE_STYLE_USAGE ( .BOTH. , #28458 ) ; +#15485 = VERTEX_POINT ( 'NONE', #9694 ) ; +#15486 = VECTOR ( 'NONE', #369, 1000.000000000000000 ) ; +#15487 = ORIENTED_EDGE ( 'NONE', *, *, #22117, .T. ) ; +#15488 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37945, 'distance_accuracy_value', 'NONE'); +#15489 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296170000, -0.2339555568811697600 ) ) ; +#15490 = VECTOR ( 'NONE', #10221, 1000.000000000000000 ) ; +#15491 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#15492 = ADVANCED_FACE ( 'NONE', ( #39094 ), #36048, .T. ) ; +#15493 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.799998254703820700, -6.800000000000001600 ) ) ; +#15494 = LINE ( 'NONE', #14477, #24635 ) ; +#15495 = CARTESIAN_POINT ( 'NONE', ( -3.500000000000003600, 0.2800017452961687800, -6.549999999999999800 ) ) ; +#15496 = PRESENTATION_STYLE_ASSIGNMENT (( #36127 ) ) ; +#15497 = FILL_AREA_STYLE_COLOUR ( '', #6974 ) ; +#15498 = EDGE_CURVE ( 'NONE', #25421, #7208, #34539, .T. ) ; +#15499 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15500 = TOROIDAL_SURFACE ( 'NONE', #28762, 0.9000017452961695000, 0.3000000000000004900 ) ; +#15501 = FILL_AREA_STYLE_COLOUR ( '', #40211 ) ; +#15502 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15503 = EDGE_CURVE ( 'NONE', #1286, #30235, #12792, .T. ) ; +#15504 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16842 ), #2534 ) ; +#15505 = LINE ( 'NONE', #30268, #9385 ) ; +#15506 = FILL_AREA_STYLE_COLOUR ( '', #26137 ) ; +#15507 = AXIS2_PLACEMENT_3D ( 'NONE', #18149, #28413, #29098 ) ; +#15508 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#15509 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15510 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40106 ) ) ; +#15511 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000010300, -1.999998254703821500, -5.899999999999999500 ) ) ; +#15512 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8731 ) ) ; +#15513 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, 0.2800017452961687200, -6.549999999999999800 ) ) ; +#15514 = ORIENTED_EDGE ( 'NONE', *, *, #5592, .F. ) ; +#15515 = LINE ( 'NONE', #32327, #32670 ) ; +#15516 = EDGE_LOOP ( 'NONE', ( #16104, #29473, #30375, #39974, #1309, #4780, #23401, #1905, #39007, #8100, #18823, #35599, #24047, #35958, #1324, #38258, #18432, #32092, #7539, #33274, #10148, #16845 ) ) ; +#15518 = AXIS2_PLACEMENT_3D ( 'NONE', #9221, #12354, #41859 ) ; +#15517 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8982 ) ) ; +#15519 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, 10.30000000000000100, -1.250000000000000000 ) ) ; +#15520 = VECTOR ( 'NONE', #12342, 1000.000000000000000 ) ; +#15523 = EDGE_CURVE ( 'NONE', #4852, #17837, #18875, .T. ) ; +#15522 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15521 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31474 ) ) ; +#15524 = ORIENTED_EDGE ( 'NONE', *, *, #20084, .T. ) ; +#15525 = ORIENTED_EDGE ( 'NONE', *, *, #26283, .F. ) ; +#15526 = ADVANCED_FACE ( 'NONE', ( #38569 ), #3500, .F. ) ; +#15527 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5063 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19758, #39194, #851 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15528 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.3699999999999849000, -5.200000000000000200 ) ) ; +#15529 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.807003620809177100E-016, -1.000000000000000000 ) ) ; +#15530 = FILL_AREA_STYLE_COLOUR ( '', #20940 ) ; +#15531 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, 0.2000000000000000900, -3.279289321881345000 ) ) ; +#15532 = FILL_AREA_STYLE_COLOUR ( '', #37666 ) ; +#15533 = FILL_AREA_STYLE ('',( #32313 ) ) ; +#15534 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15535 = ORIENTED_EDGE ( 'NONE', *, *, #12492, .T. ) ; +#15536 = CARTESIAN_POINT ( 'NONE', ( 2.400000000000000400, -1.139998254717352600, -5.049996877890552400 ) ) ; +#15537 = CARTESIAN_POINT ( 'NONE', ( 4.524999999999999500, 1.480001745296169600, -3.999999999999998200 ) ) ; +#15538 = EDGE_LOOP ( 'NONE', ( #21124, #23828, #9831, #20517 ) ) ; +#15539 = ORIENTED_EDGE ( 'NONE', *, *, #617, .F. ) ; +#15540 = VECTOR ( 'NONE', #21375, 1000.000000000000000 ) ; +#15541 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15542 = EDGE_CURVE ( 'NONE', #16026, #10759, #20430, .T. ) ; +#15543 = PLANE ( 'NONE', #36144 ) ; +#15544 = ORIENTED_EDGE ( 'NONE', *, *, #31633, .T. ) ; +#15545 = FILL_AREA_STYLE_COLOUR ( '', #30927 ) ; +#15546 = VERTEX_POINT ( 'NONE', #15781 ) ; +#15547 = SURFACE_SIDE_STYLE ('',( #40786 ) ) ; +#15548 = PLANE ( 'NONE', #8548 ) ; +#15549 = SURFACE_STYLE_FILL_AREA ( #23088 ) ; +#15550 = CYLINDRICAL_SURFACE ( 'NONE', #28017, 0.3600000000000078700 ) ; +#15551 = EDGE_CURVE ( 'NONE', #22252, #9110, #11256, .T. ) ; +#15552 = VECTOR ( 'NONE', #4217, 1000.000000000000000 ) ; +#15553 = VERTEX_POINT ( 'NONE', #3100 ) ; +#15554 = VECTOR ( 'NONE', #1242, 1000.000000000000000 ) ; +#15555 = ORIENTED_EDGE ( 'NONE', *, *, #33487, .T. ) ; +#15556 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15557 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25834 ), #40157 ) ; +#15558 = VECTOR ( 'NONE', #32279, 1000.000000000000000 ) ; +#15559 = ORIENTED_EDGE ( 'NONE', *, *, #6801, .F. ) ; +#15560 = LINE ( 'NONE', #30814, #28696 ) ; +#15561 = AXIS2_PLACEMENT_3D ( 'NONE', #25928, #26067, #26212 ) ; +#15562 = SURFACE_SIDE_STYLE ('',( #17410 ) ) ; +#15563 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15564 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26404 ), #25067 ) ; +#15565 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26533 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18711, #5984, #12029 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15566 = EDGE_CURVE ( 'NONE', #41402, #39681, #2240, .T. ) ; +#15567 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7989, 'distance_accuracy_value', 'NONE'); +#15568 = CARTESIAN_POINT ( 'NONE', ( -3.500000000000003100, 0.4300017452961685800, -6.750000000000000000 ) ) ; +#15569 = VECTOR ( 'NONE', #21443, 1000.000000000000000 ) ; +#15570 = ORIENTED_EDGE ( 'NONE', *, *, #34179, .F. ) ; +#15571 = VECTOR ( 'NONE', #40034, 1000.000000000000000 ) ; +#15572 = SURFACE_SIDE_STYLE ('',( #7677 ) ) ; +#15574 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35066 ), #19938 ) ; +#15573 = AXIS2_PLACEMENT_3D ( 'NONE', #9259, #22300, #2560 ) ; +#15575 = AXIS2_PLACEMENT_3D ( 'NONE', #24451, #37006, #1322 ) ; +#15576 = EDGE_LOOP ( 'NONE', ( #5543, #8470, #31394, #31710 ) ) ; +#15577 = PRESENTATION_STYLE_ASSIGNMENT (( #8372 ) ) ; +#15578 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31247 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33085, #26597, #651 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15579 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.499998254703820400, -6.699999999999994000 ) ) ; +#15580 = ORIENTED_EDGE ( 'NONE', *, *, #20804, .F. ) ; +#15581 = CYLINDRICAL_SURFACE ( 'NONE', #6703, 0.3000000000000003800 ) ; +#15582 = ORIENTED_EDGE ( 'NONE', *, *, #31090, .T. ) ; +#15583 = LINE ( 'NONE', #10598, #975 ) ; +#15584 = SURFACE_STYLE_FILL_AREA ( #36217 ) ; +#15585 = CARTESIAN_POINT ( 'NONE', ( -3.395000000000000000, 0.2000000000000005100, -3.250000000000000400 ) ) ; +#15586 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.380001745296131500, -5.449999999999994000 ) ) ; +#15587 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#15588 = DIRECTION ( 'NONE', ( -2.891205793294677400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#15589 = SURFACE_STYLE_FILL_AREA ( #16703 ) ; +#15590 = SURFACE_STYLE_FILL_AREA ( #29753 ) ; +#15591 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15592 = ORIENTED_EDGE ( 'NONE', *, *, #915, .T. ) ; +#15593 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.380001745296136400, -6.250000000000000000 ) ) ; +#15594 = ORIENTED_EDGE ( 'NONE', *, *, #32890, .F. ) ; +#15595 = ORIENTED_EDGE ( 'NONE', *, *, #35419, .T. ) ; +#15596 = VECTOR ( 'NONE', #39793, 1000.000000000000000 ) ; +#15597 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003000, 0.4300017452961686900, -6.150000000000000400 ) ) ; +#15598 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15599 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15600 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15601 = SURFACE_STYLE_USAGE ( .BOTH. , #28865 ) ; +#15602 = ORIENTED_EDGE ( 'NONE', *, *, #35914, .F. ) ; +#15603 = FILL_AREA_STYLE_COLOUR ( '', #3944 ) ; +#15604 = CARTESIAN_POINT ( 'NONE', ( 3.365710678118654100, 0.2000000000000000100, -3.300000000000000700 ) ) ; +#15605 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15176, 'distance_accuracy_value', 'NONE'); +#15606 = DIRECTION ( 'NONE', ( 2.891205793294677400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#15607 = EDGE_CURVE ( 'NONE', #38956, #21687, #27434, .T. ) ; +#15608 = PRESENTATION_STYLE_ASSIGNMENT (( #2309 ) ) ; +#15609 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15610 = CARTESIAN_POINT ( 'NONE', ( 0.6500000000000000200, -1.380001745296134000, -6.031671842700004200 ) ) ; +#15611 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33684 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19070, #41610, #12516 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15612 = CARTESIAN_POINT ( 'NONE', ( 4.520424214906982200, 0.2799999999999973100, -1.149999999999999900 ) ) ; +#15613 = VERTEX_POINT ( 'NONE', #25953 ) ; +#15614 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000007100, -0.8500017452961660100, -4.875000000000000900 ) ) ; +#15615 = SURFACE_SIDE_STYLE ('',( #30788 ) ) ; +#15616 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745278514100, -2.294459358809384700 ) ) ; +#15617 = ADVANCED_FACE ( 'NONE', ( #14321, #39058 ), #19077, .F. ) ; +#15618 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12353 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38270, #29083, #9725 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15619 = ORIENTED_EDGE ( 'NONE', *, *, #39003, .T. ) ; +#15620 = CIRCLE ( 'NONE', #41169, 0.9999999999999995600 ) ; +#15621 = VERTEX_POINT ( 'NONE', #32163 ) ; +#15622 = STYLED_ITEM ( 'NONE', ( #19941 ), #12316 ) ; +#15623 = FILL_AREA_STYLE_COLOUR ( '', #32867 ) ; +#15624 = FILL_AREA_STYLE ('',( #21749 ) ) ; +#15625 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#15626 = FACE_OUTER_BOUND ( 'NONE', #7168, .T. ) ; +#15627 = EDGE_CURVE ( 'NONE', #36152, #36030, #18397, .T. ) ; +#15628 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, 10.30000000000000100, -1.250000000000000000 ) ) ; +#15629 = VERTEX_POINT ( 'NONE', #13798 ) ; +#15630 = ORIENTED_EDGE ( 'NONE', *, *, #38540, .F. ) ; +#15631 = ORIENTED_EDGE ( 'NONE', *, *, #36295, .T. ) ; +#15632 = SURFACE_STYLE_FILL_AREA ( #37623 ) ; +#15633 = SURFACE_SIDE_STYLE ('',( #3873 ) ) ; +#15634 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15635 = ADVANCED_FACE ( 'NONE', ( #30484 ), #36280, .T. ) ; +#15637 = STYLED_ITEM ( 'NONE', ( #19360 ), #2996 ) ; +#15636 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32500 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3708, #6675, #19578 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15638 = DIRECTION ( 'NONE', ( -0.08715574274766037200, 0.0000000000000000000, 0.9961946980917453200 ) ) ; +#15639 = CARTESIAN_POINT ( 'NONE', ( -0.6500000000000000200, -1.499998254703827700, -6.299999999999993600 ) ) ; +#15640 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34569 ), #8568 ) ; +#15641 = AXIS2_PLACEMENT_3D ( 'NONE', #816, #4138, #29993 ) ; +#15642 = ORIENTED_EDGE ( 'NONE', *, *, #18481, .F. ) ; +#15643 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15644 = FILL_AREA_STYLE_COLOUR ( '', #8436 ) ; +#15645 = STYLED_ITEM ( 'NONE', ( #36155 ), #7842 ) ; +#15646 = PRESENTATION_STYLE_ASSIGNMENT (( #38788 ) ) ; +#15647 = FILL_AREA_STYLE ('',( #18504 ) ) ; +#15648 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15649 = PRESENTATION_STYLE_ASSIGNMENT (( #8047 ) ) ; +#15650 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15651 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15652 = EDGE_LOOP ( 'NONE', ( #7423, #22840, #8430, #3537 ) ) ; +#15653 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, 0.2800017452961687200, -6.849999999999999600 ) ) ; +#15654 = CARTESIAN_POINT ( 'NONE', ( -3.245000000006999800, 0.3292893218813454600, -1.599999999999999400 ) ) ; +#15655 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#15656 = FACE_OUTER_BOUND ( 'NONE', #29702, .T. ) ; +#15657 = ORIENTED_EDGE ( 'NONE', *, *, #21397, .F. ) ; +#15658 = FILL_AREA_STYLE ('',( #5785 ) ) ; +#15659 = VECTOR ( 'NONE', #12026, 1000.000000000000000 ) ; +#15660 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#15661 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #24561, #40908, #34702, #27933 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 2.418858405776397500, 3.141592653589793100 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956591100, 0.9569428977956591100, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#15662 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, -2.322941965694886000, -1.250000000000000000 ) ) ; +#15663 = LINE ( 'NONE', #39132, #10084 ) ; +#15664 = FACE_OUTER_BOUND ( 'NONE', #30212, .T. ) ; +#15665 = ORIENTED_EDGE ( 'NONE', *, *, #27107, .F. ) ; +#15666 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.499998254703825300, -5.049999999999993600 ) ) ; +#15667 = ORIENTED_EDGE ( 'NONE', *, *, #2954, .T. ) ; +#15669 = ORIENTED_EDGE ( 'NONE', *, *, #13838, .F. ) ; +#15668 = ADVANCED_FACE ( 'NONE', ( #17858, #5687, #22869, #36528, #22390, #15803, #18351 ), #19768, .F. ) ; +#15670 = EDGE_CURVE ( 'NONE', #18079, #23571, #15301, .T. ) ; +#15671 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#15672 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28521 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37610, #18428, #40565 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15673 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15674 = FILL_AREA_STYLE ('',( #25847 ) ) ; +#15675 = EDGE_CURVE ( 'NONE', #4849, #28531, #23883, .T. ) ; +#15676 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38094, 'distance_accuracy_value', 'NONE'); +#15677 = ORIENTED_EDGE ( 'NONE', *, *, #34622, .T. ) ; +#15678 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15679 = STYLED_ITEM ( 'NONE', ( #37431 ), #21907 ) ; +#15680 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#15681 = CYLINDRICAL_SURFACE ( 'NONE', #9474, 0.2999999999999999300 ) ; +#15682 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15683 = AXIS2_PLACEMENT_3D ( 'NONE', #35129, #6577, #6180 ) ; +#15684 = LINE ( 'NONE', #32811, #22778 ) ; +#15685 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#15688 = EDGE_CURVE ( 'NONE', #20114, #17198, #14283, .T. ) ; +#15687 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1463 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15097, #37687, #12097 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15686 = SURFACE_SIDE_STYLE ('',( #26141 ) ) ; +#15689 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#15690 = PRESENTATION_STYLE_ASSIGNMENT (( #31115 ) ) ; +#15691 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#15693 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27339 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #594, #3651, #39364 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15692 = STYLED_ITEM ( 'NONE', ( #182 ), #28846 ) ; +#15694 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#15695 = VERTEX_POINT ( 'NONE', #13360 ) ; +#15697 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27902 ), #4060 ) ; +#15696 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4194 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40366, #34027, #21210 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15698 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15699 = ORIENTED_EDGE ( 'NONE', *, *, #915, .F. ) ; +#15700 = PRESENTATION_STYLE_ASSIGNMENT (( #16746 ) ) ; +#15701 = VERTEX_POINT ( 'NONE', #39209 ) ; +#15702 = SURFACE_SIDE_STYLE ('',( #31649 ) ) ; +#15703 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.779999999999868100, 0.0000000000000000000 ) ) ; +#15704 = CIRCLE ( 'NONE', #22026, 0.2000000000000007300 ) ; +#15705 = SURFACE_STYLE_USAGE ( .BOTH. , #12725 ) ; +#15706 = VERTEX_POINT ( 'NONE', #579 ) ; +#15707 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15708 = SURFACE_SIDE_STYLE ('',( #26005 ) ) ; +#15709 = ORIENTED_EDGE ( 'NONE', *, *, #36186, .T. ) ; +#15710 = VERTEX_POINT ( 'NONE', #7147 ) ; +#15711 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -4.675000000000000700 ) ) ; +#15712 = FILL_AREA_STYLE ('',( #18431 ) ) ; +#15713 = FILL_AREA_STYLE ('',( #19271 ) ) ; +#15714 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15715 = EDGE_LOOP ( 'NONE', ( #23851, #28674, #25310 ) ) ; +#15716 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#15717 = ORIENTED_EDGE ( 'NONE', *, *, #17233, .T. ) ; +#15718 = ADVANCED_FACE ( 'NONE', ( #20391 ), #26385, .F. ) ; +#15719 = DIRECTION ( 'NONE', ( -7.228014483236709400E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15721 = PRESENTATION_STYLE_ASSIGNMENT (( #22767 ) ) ; +#15720 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000007300, -1.400001745296165700, -7.350000000000005900 ) ) ; +#15722 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#15723 = FILL_AREA_STYLE ('',( #28300 ) ) ; +#15724 = SURFACE_STYLE_USAGE ( .BOTH. , #25365 ) ; +#15725 = EDGE_CURVE ( 'NONE', #12609, #32472, #8701, .T. ) ; +#15727 = CARTESIAN_POINT ( 'NONE', ( -3.125752552834331100, 0.2999999999999999900, 0.9874606594872047400 ) ) ; +#15726 = VECTOR ( 'NONE', #10641, 1000.000000000000000 ) ; +#15728 = LINE ( 'NONE', #8255, #17289 ) ; +#15729 = FACE_OUTER_BOUND ( 'NONE', #9532, .T. ) ; +#15730 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15731 = EDGE_CURVE ( 'NONE', #2418, #27458, #16820, .T. ) ; +#15732 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29522 ) ) ; +#15733 = VERTEX_POINT ( 'NONE', #36538 ) ; +#15734 = DIRECTION ( 'NONE', ( -3.336029078258395200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#15735 = AXIS2_PLACEMENT_3D ( 'NONE', #3083, #12093, #18774 ) ; +#15736 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.380001745296134800, -4.781671842700004200 ) ) ; +#15737 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15738 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#15739 = ORIENTED_EDGE ( 'NONE', *, *, #16103, .T. ) ; +#15740 = CIRCLE ( 'NONE', #18759, 0.1000000000000002600 ) ; +#15741 = STYLED_ITEM ( 'NONE', ( #13043 ), #14548 ) ; +#15742 = PLANE ( 'NONE', #13949 ) ; +#15743 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15744 = ORIENTED_EDGE ( 'NONE', *, *, #25956, .F. ) ; +#15745 = AXIS2_PLACEMENT_3D ( 'NONE', #14242, #30034, #20336 ) ; +#15746 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15747 = STYLED_ITEM ( 'NONE', ( #31351 ), #30229 ) ; +#15748 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22689, 'distance_accuracy_value', 'NONE'); +#15750 = EDGE_CURVE ( 'NONE', #5703, #4960, #183, .T. ) ; +#15749 = AXIS2_PLACEMENT_3D ( 'NONE', #3145, #2761, #22491 ) ; +#15751 = SURFACE_STYLE_USAGE ( .BOTH. , #35105 ) ; +#15752 = ORIENTED_EDGE ( 'NONE', *, *, #21100, .T. ) ; +#15753 = ORIENTED_EDGE ( 'NONE', *, *, #36252, .F. ) ; +#15754 = VECTOR ( 'NONE', #13662, 1000.000000000000000 ) ; +#15755 = PRESENTATION_STYLE_ASSIGNMENT (( #9180 ) ) ; +#15756 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, -0.4343145750507614300, -3.279289321881346400 ) ) ; +#15758 = AXIS2_PLACEMENT_3D ( 'NONE', #10762, #29704, #10338 ) ; +#15757 = STYLED_ITEM ( 'NONE', ( #15003 ), #25602 ) ; +#15759 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -4.400000000000000400 ) ) ; +#15760 = FILL_AREA_STYLE_COLOUR ( '', #17616 ) ; +#15761 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #38184, #6013, #41313, #5588 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#15762 = LINE ( 'NONE', #37373, #34463 ) ; +#15763 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15764 = SURFACE_SIDE_STYLE ('',( #39441 ) ) ; +#15765 = ORIENTED_EDGE ( 'NONE', *, *, #17673, .F. ) ; +#15766 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.2800017452961689500, -5.150000000000000400 ) ) ; +#15767 = LINE ( 'NONE', #6900, #28900 ) ; +#15768 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.180001745296169500, -4.400000000000000400 ) ) ; +#15769 = ORIENTED_EDGE ( 'NONE', *, *, #29132, .F. ) ; +#15770 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#15771 = SURFACE_STYLE_FILL_AREA ( #15712 ) ; +#15772 = SURFACE_STYLE_FILL_AREA ( #1972 ) ; +#15773 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15774 = VERTEX_POINT ( 'NONE', #36963 ) ; +#15775 = EDGE_CURVE ( 'NONE', #15733, #6114, #706, .T. ) ; +#15776 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#15777 = VECTOR ( 'NONE', #16158, 1000.000000000000000 ) ; +#15778 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#15779 = ORIENTED_EDGE ( 'NONE', *, *, #34299, .F. ) ; +#15780 = SURFACE_STYLE_USAGE ( .BOTH. , #6198 ) ; +#15781 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.480001745296166000, -1.749999999999999300 ) ) ; +#15782 = EDGE_CURVE ( 'NONE', #38162, #13256, #31460, .T. ) ; +#15783 = STYLED_ITEM ( 'NONE', ( #23956 ), #11139 ) ; +#15784 = SURFACE_STYLE_USAGE ( .BOTH. , #18791 ) ; +#15785 = SURFACE_SIDE_STYLE ('',( #7545 ) ) ; +#15786 = VERTEX_POINT ( 'NONE', #36682 ) ; +#15787 = SURFACE_SIDE_STYLE ('',( #8754 ) ) ; +#15788 = VERTEX_POINT ( 'NONE', #33858 ) ; +#15789 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#15790 = PRESENTATION_STYLE_ASSIGNMENT (( #20797 ) ) ; +#15791 = FILL_AREA_STYLE_COLOUR ( '', #19674 ) ; +#15792 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14045 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39114, #26433, #39253 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15793 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#15794 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#15795 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.380001745296135700, -6.699999999999994000 ) ) ; +#15796 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid1', #17726 ) ; +#15797 = CARTESIAN_POINT ( 'NONE', ( 3.137984242873239600, 0.2999999999999999300, 0.9623819784616916000 ) ) ; +#15799 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15798 = CARTESIAN_POINT ( 'NONE', ( 3.864622544115336600, 0.5897101117398153600, -4.552268541790907000 ) ) ; +#15800 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -7.228014483236709400E-016 ) ) ; +#15801 = AXIS2_PLACEMENT_3D ( 'NONE', #17771, #17202, #33855 ) ; +#15802 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17987 ), #15578 ) ; +#15803 = FACE_BOUND ( 'NONE', #22122, .T. ) ; +#15804 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31774 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28265, #22341, #41258 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15805 = FILL_AREA_STYLE ('',( #35167 ) ) ; +#15806 = ORIENTED_EDGE ( 'NONE', *, *, #13510, .T. ) ; +#15808 = EDGE_CURVE ( 'NONE', #41825, #23037, #28935, .T. ) ; +#15807 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12312 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23417, #33308, #730 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15809 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#15810 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15811 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703822500, -2.599999999999999600 ) ) ; +#15812 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15814 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30055 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6176, #22285, #25531 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15813 = STYLED_ITEM ( 'NONE', ( #14829 ), #26469 ) ; +#15815 = DIRECTION ( 'NONE', ( 3.872150616019659000E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15816 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11461, 'distance_accuracy_value', 'NONE'); +#15817 = STYLED_ITEM ( 'NONE', ( #19086 ), #38994 ) ; +#15818 = ORIENTED_EDGE ( 'NONE', *, *, #815, .F. ) ; +#15819 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15820 = VERTEX_POINT ( 'NONE', #23831 ) ; +#15821 = EDGE_LOOP ( 'NONE', ( #11806, #36320, #18225, #31661 ) ) ; +#15822 = ORIENTED_EDGE ( 'NONE', *, *, #33646, .T. ) ; +#15823 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15824 = ORIENTED_EDGE ( 'NONE', *, *, #37824, .T. ) ; +#15825 = FACE_OUTER_BOUND ( 'NONE', #1717, .T. ) ; +#15826 = LINE ( 'NONE', #5746, #1775 ) ; +#15827 = SURFACE_STYLE_FILL_AREA ( #26551 ) ; +#15828 = SURFACE_STYLE_FILL_AREA ( #19944 ) ; +#15829 = VERTEX_POINT ( 'NONE', #23686 ) ; +#15830 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003900, 0.3000000000000149200, -2.095470210943120000 ) ) ; +#15831 = SURFACE_STYLE_FILL_AREA ( #40652 ) ; +#15832 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37094, 'distance_accuracy_value', 'NONE'); +#15833 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15834 = ADVANCED_FACE ( 'NONE', ( #32997 ), #27098, .T. ) ; +#15835 = VECTOR ( 'NONE', #23606, 1000.000000000000000 ) ; +#15836 = SURFACE_STYLE_USAGE ( .BOTH. , #15702 ) ; +#15837 = FILL_AREA_STYLE ('',( #15304 ) ) ; +#15838 = EDGE_CURVE ( 'NONE', #1811, #27056, #33971, .T. ) ; +#15839 = VECTOR ( 'NONE', #20479, 1000.000000000000000 ) ; +#15840 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#15841 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000005700, 1.539567084929416300E-014, 0.0000000000000000000 ) ) ; +#15842 = EDGE_CURVE ( 'NONE', #16115, #4971, #13237, .T. ) ; +#15843 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15844 = SURFACE_STYLE_USAGE ( .BOTH. , #28842 ) ; +#15845 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15846 = DIRECTION ( 'NONE', ( -0.9961946980917454300, -3.269420623233418300E-015, -0.08715574274766037200 ) ) ; +#15847 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41045 ) ) ; +#15848 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, 1.085563124533160400E-029 ) ) ; +#15849 = FILL_AREA_STYLE_COLOUR ( '', #26751 ) ; +#15850 = FILL_AREA_STYLE ('',( #24376 ) ) ; +#15851 = ORIENTED_EDGE ( 'NONE', *, *, #12689, .T. ) ; +#15852 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#15853 = PRESENTATION_STYLE_ASSIGNMENT (( #30001 ) ) ; +#15854 = FILL_AREA_STYLE ('',( #41429 ) ) ; +#15855 = ORIENTED_EDGE ( 'NONE', *, *, #30394, .T. ) ; +#15856 = STYLED_ITEM ( 'NONE', ( #14312 ), #21074 ) ; +#15857 = ORIENTED_EDGE ( 'NONE', *, *, #29377, .T. ) ; +#15858 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#15859 = EDGE_LOOP ( 'NONE', ( #6594, #27454, #22118, #1519 ) ) ; +#15860 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244521200E-016 ) ) ; +#15861 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21603 ), #4231 ) ; +#15862 = CARTESIAN_POINT ( 'NONE', ( -4.700922750916311600, -0.1199982547038624300, -6.625946193225244600 ) ) ; +#15863 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -1.899999999999999700 ) ) ; +#15864 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#15866 = EDGE_CURVE ( 'NONE', #1655, #28591, #16785, .T. ) ; +#15865 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15867 = ADVANCED_FACE ( 'NONE', ( #9668 ), #33573, .T. ) ; +#15868 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#15869 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#15870 = CARTESIAN_POINT ( 'NONE', ( 3.395000000000000000, 0.4636038969321074100, -3.300000000000000300 ) ) ; +#15871 = LINE ( 'NONE', #11464, #14388 ) ; +#15872 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703821100, -6.600000000000000500 ) ) ; +#15874 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34230 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15714, #41540, #9473 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15873 = AXIS2_PLACEMENT_3D ( 'NONE', #17896, #11220, #40308 ) ; +#15875 = FILL_AREA_STYLE_COLOUR ( '', #14727 ) ; +#15876 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20250 ) ) ; +#15877 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#15878 = FILL_AREA_STYLE_COLOUR ( '', #29872 ) ; +#15879 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31033 ) ) ; +#15880 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2934 ), #20256 ) ; +#15881 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#15882 = SURFACE_STYLE_USAGE ( .BOTH. , #18607 ) ; +#15883 = ADVANCED_FACE ( 'NONE', ( #668 ), #28894, .F. ) ; +#15884 = ORIENTED_EDGE ( 'NONE', *, *, #36102, .F. ) ; +#15885 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.2300017452961680700, -6.325000000000000200 ) ) ; +#15886 = ORIENTED_EDGE ( 'NONE', *, *, #38662, .T. ) ; +#15887 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15888 = SURFACE_STYLE_USAGE ( .BOTH. , #131 ) ; +#15889 = ORIENTED_EDGE ( 'NONE', *, *, #1857, .F. ) ; +#15890 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0002094395087002862800, 0.9999999780675458100 ) ) ; +#15891 = PLANE ( 'NONE', #24580 ) ; +#15892 = PRESENTATION_STYLE_ASSIGNMENT (( #12840 ) ) ; +#15893 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( + ( #10147, #197, #9590, #32194 ), + ( #26418, #36026, #16252, #28946 ), + ( #13251, #22884, #35888, #25991 ), + ( #32753, #6760, #22606, #22744 ) ), + .UNSPECIFIED., .F., .F., .F. ) + B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) + GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( + ( 1.000000000000000000, 0.8047378541243649400, 0.8047378541243649400, 1.000000000000000000), + ( 0.8047378541243588300, 0.6476030138606827500, 0.6476030138606827500, 0.8047378541243588300), + ( 0.8047378541243588300, 0.6476030138606827500, 0.6476030138606827500, 0.8047378541243588300), + ( 1.000000000000000000, 0.8047378541243649400, 0.8047378541243649400, 1.000000000000000000) ) ) + REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); +#15894 = ORIENTED_EDGE ( 'NONE', *, *, #25905, .F. ) ; +#15895 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#15896 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -3.410973126920707600E-015, 1.000000000000000000 ) ) ; +#15897 = ORIENTED_EDGE ( 'NONE', *, *, #18106, .F. ) ; +#15898 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15899 = PRESENTATION_STYLE_ASSIGNMENT (( #38999 ) ) ; +#15900 = ORIENTED_EDGE ( 'NONE', *, *, #8002, .T. ) ; +#15901 = CARTESIAN_POINT ( 'NONE', ( 3.106167806357272600, 0.2999999999999999900, -0.1000355246808153900 ) ) ; +#15902 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#15903 = EDGE_CURVE ( 'NONE', #4564, #3858, #9174, .T. ) ; +#15904 = FACE_OUTER_BOUND ( 'NONE', #17092, .T. ) ; +#15905 = VERTEX_POINT ( 'NONE', #21727 ) ; +#15906 = VECTOR ( 'NONE', #17846, 1000.000000000000100 ) ; +#15907 = ORIENTED_EDGE ( 'NONE', *, *, #38365, .T. ) ; +#15908 = EDGE_CURVE ( 'NONE', #31628, #21189, #15762, .T. ) ; +#15909 = CARTESIAN_POINT ( 'NONE', ( 3.342513005636280600, -0.07499999999999999700, 0.4561555288904724500 ) ) ; +#15910 = VECTOR ( 'NONE', #32633, 1000.000000000000000 ) ; +#15911 = SURFACE_STYLE_FILL_AREA ( #13894 ) ; +#15912 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18685 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19018, #18736, #25103 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15913 = ORIENTED_EDGE ( 'NONE', *, *, #32922, .F. ) ; +#15914 = PLANE ( 'NONE', #14662 ) ; +#15915 = EDGE_CURVE ( 'NONE', #20484, #5586, #20350, .T. ) ; +#15916 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.380001745296138200, -4.781671842700004200 ) ) ; +#15917 = SURFACE_STYLE_USAGE ( .BOTH. , #21768 ) ; +#15918 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18918 ), #37026 ) ; +#15919 = ADVANCED_FACE ( 'NONE', ( #7161 ), #13698, .T. ) ; +#15920 = DIRECTION ( 'NONE', ( 6.056601140521965300E-031, -1.987721548152418300E-045, -1.000000000000000000 ) ) ; +#15921 = SURFACE_SIDE_STYLE ('',( #24794 ) ) ; +#15922 = AXIS2_PLACEMENT_3D ( 'NONE', #21088, #37155, #1462 ) ; +#15923 = SURFACE_STYLE_USAGE ( .BOTH. , #12528 ) ; +#15925 = EDGE_CURVE ( 'NONE', #16731, #598, #15728, .T. ) ; +#15924 = AXIS2_PLACEMENT_3D ( 'NONE', #30915, #27816, #1864 ) ; +#15926 = EDGE_LOOP ( 'NONE', ( #41190, #14551, #31998, #18639 ) ) ; +#15927 = FILL_AREA_STYLE ('',( #5919 ) ) ; +#15928 = CARTESIAN_POINT ( 'NONE', ( 2.149999999999999900, -1.380001745296129100, -6.031671842700004200 ) ) ; +#15929 = DIRECTION ( 'NONE', ( -9.268445570935432200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15930 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.2999999999999853300, -1.950000000000001300 ) ) ; +#15931 = ORIENTED_EDGE ( 'NONE', *, *, #36897, .F. ) ; +#15933 = STYLED_ITEM ( 'NONE', ( #18040 ), #3825 ) ; +#15932 = AXIS2_PLACEMENT_3D ( 'NONE', #33581, #1013, #10540 ) ; +#15934 = LINE ( 'NONE', #35857, #1318 ) ; +#15935 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21121 ), #16748 ) ; +#15936 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.779999999999868600, -0.2339555568811695400 ) ) ; +#15937 = PRESENTATION_STYLE_ASSIGNMENT (( #12114 ) ) ; +#15938 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17483 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27870, #34362, #34636 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15939 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15940 = FILL_AREA_STYLE_COLOUR ( '', #35132 ) ; +#15941 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10341, 'distance_accuracy_value', 'NONE'); +#15942 = ORIENTED_EDGE ( 'NONE', *, *, #15842, .F. ) ; +#15943 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24486 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #85, #6521, #9752 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15944 = PRESENTATION_STYLE_ASSIGNMENT (( #2558 ) ) ; +#15945 = EDGE_LOOP ( 'NONE', ( #3473, #9493, #3523, #17781 ) ) ; +#15946 = VECTOR ( 'NONE', #39377, 1000.000000000000000 ) ; +#15947 = SURFACE_SIDE_STYLE ('',( #29187 ) ) ; +#15948 = SURFACE_STYLE_FILL_AREA ( #38765 ) ; +#15949 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -2.904459358809384600 ) ) ; +#15950 = FACE_OUTER_BOUND ( 'NONE', #21902, .T. ) ; +#15951 = ORIENTED_EDGE ( 'NONE', *, *, #24345, .T. ) ; +#15952 = CARTESIAN_POINT ( 'NONE', ( -4.748858409427525000, -1.400001745296195700, -7.173853277175708400 ) ) ; +#15953 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#15954 = SURFACE_STYLE_USAGE ( .BOTH. , #55 ) ; +#15955 = SURFACE_STYLE_FILL_AREA ( #3202 ) ; +#15956 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, -0.2498427124745999900 ) ) ; +#15957 = PRESENTATION_STYLE_ASSIGNMENT (( #33532 ) ) ; +#15958 = SURFACE_SIDE_STYLE ('',( #29491 ) ) ; +#15959 = ORIENTED_EDGE ( 'NONE', *, *, #23801, .T. ) ; +#15960 = PLANE ( 'NONE', #24826 ) ; +#15961 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#15962 = ORIENTED_EDGE ( 'NONE', *, *, #22004, .T. ) ; +#15963 = PRESENTATION_STYLE_ASSIGNMENT (( #41163 ) ) ; +#15964 = EDGE_CURVE ( 'NONE', #5418, #27728, #4641, .T. ) ; +#15965 = ORIENTED_EDGE ( 'NONE', *, *, #35983, .T. ) ; +#15966 = FACE_OUTER_BOUND ( 'NONE', #14532, .T. ) ; +#15967 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15968 = PLANE ( 'NONE', #26726 ) ; +#15969 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15970 = PRESENTATION_STYLE_ASSIGNMENT (( #31296 ) ) ; +#15971 = FILL_AREA_STYLE_COLOUR ( '', #41268 ) ; +#15972 = SURFACE_STYLE_USAGE ( .BOTH. , #32932 ) ; +#15973 = EDGE_CURVE ( 'NONE', #14611, #971, #7665, .T. ) ; +#15974 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4341 ), #10828 ) ; +#15975 = VECTOR ( 'NONE', #1853, 1000.000000000000000 ) ; +#15976 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#15977 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 3.410973126920708000E-015, -1.000000000000000000 ) ) ; +#15978 = EDGE_LOOP ( 'NONE', ( #39978, #2067, #12150, #20931 ) ) ; +#15979 = EDGE_LOOP ( 'NONE', ( #11079, #14659, #5480, #27910 ) ) ; +#15980 = PRESENTATION_STYLE_ASSIGNMENT (( #27530 ) ) ; +#15981 = ORIENTED_EDGE ( 'NONE', *, *, #41821, .F. ) ; +#15982 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28060, 'distance_accuracy_value', 'NONE'); +#15983 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34740 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35921, #503, #22508 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15984 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -0.3000000000000001600, -1.250000000000000000 ) ) ; +#15985 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#15986 = VECTOR ( 'NONE', #40386, 1000.000000000000000 ) ; +#15987 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.180001745296169700, -4.400000000000000400 ) ) ; +#15988 = EDGE_LOOP ( 'NONE', ( #21705, #40534, #15851, #11273 ) ) ; +#15989 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664844900, -1.080001745296171900, -5.000000000000000000 ) ) ; +#15990 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38441 ) ) ; +#15991 = PRESENTATION_STYLE_ASSIGNMENT (( #26320 ) ) ; +#15992 = ORIENTED_EDGE ( 'NONE', *, *, #8861, .T. ) ; +#15993 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41687 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16961, #20390, #32917 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15994 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41791, 'distance_accuracy_value', 'NONE'); +#15995 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15996 = FACE_OUTER_BOUND ( 'NONE', #9815, .T. ) ; +#15998 = AXIS2_PLACEMENT_3D ( 'NONE', #7530, #10360, #23225 ) ; +#15997 = AXIS2_PLACEMENT_3D ( 'NONE', #3140, #29960, #25748 ) ; +#15999 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16000 = PLANE ( 'NONE', #12443 ) ; +#16001 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.9396926207856547400, 0.3420201433263654300 ) ) ; +#16002 = CARTESIAN_POINT ( 'NONE', ( 4.449999999999999300, -0.01999825470383242600, -7.200000000000001100 ) ) ; +#16003 = LINE ( 'NONE', #41012, #37730 ) ; +#16004 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#16006 = EDGE_CURVE ( 'NONE', #20775, #37314, #13204, .T. ) ; +#16005 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2251 ) ) ; +#16007 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16008 = ORIENTED_EDGE ( 'NONE', *, *, #13085, .F. ) ; +#16010 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21682 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29643, #13683, #36167 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16009 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16011 = LINE ( 'NONE', #5825, #39251 ) ; +#16012 = FILL_AREA_STYLE ('',( #38868 ) ) ; +#16014 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1941 ) ) ; +#16013 = AXIS2_PLACEMENT_3D ( 'NONE', #14487, #27471, #24248 ) ; +#16015 = FILL_AREA_STYLE ('',( #9635 ) ) ; +#16016 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 0.3500000000000000300, 0.6999999999999999600 ) ) ; +#16017 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#16018 = LINE ( 'NONE', #19849, #30123 ) ; +#16019 = EDGE_LOOP ( 'NONE', ( #8142, #606, #36738, #2968 ) ) ; +#16020 = FILL_AREA_STYLE ('',( #19159 ) ) ; +#16021 = SURFACE_SIDE_STYLE ('',( #18756 ) ) ; +#16022 = VERTEX_POINT ( 'NONE', #2105 ) ; +#16023 = LINE ( 'NONE', #28978, #26656 ) ; +#16024 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#16025 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38297, 'distance_accuracy_value', 'NONE'); +#16026 = VERTEX_POINT ( 'NONE', #24841 ) ; +#16027 = EDGE_LOOP ( 'NONE', ( #40323, #14739, #25523, #11172 ) ) ; +#16028 = LINE ( 'NONE', #7607, #7421 ) ; +#16029 = FILL_AREA_STYLE_COLOUR ( '', #19767 ) ; +#16030 = EDGE_LOOP ( 'NONE', ( #11333, #20571, #37125, #14885 ) ) ; +#16031 = FACE_OUTER_BOUND ( 'NONE', #17964, .T. ) ; +#16032 = LINE ( 'NONE', #7814, #29147 ) ; +#16033 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.280001745296167800, -4.200000000000000200 ) ) ; +#16034 = FACE_OUTER_BOUND ( 'NONE', #13143, .T. ) ; +#16035 = PRESENTATION_STYLE_ASSIGNMENT (( #30751 ) ) ; +#16036 = ORIENTED_EDGE ( 'NONE', *, *, #13484, .F. ) ; +#16037 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#16038 = VERTEX_POINT ( 'NONE', #14916 ) ; +#16039 = EDGE_CURVE ( 'NONE', #894, #6114, #37977, .T. ) ; +#16040 = PRESENTATION_STYLE_ASSIGNMENT (( #9247 ) ) ; +#16041 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, -0.1999999999999992900, -3.250000000000000400 ) ) ; +#16042 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.3699999999999856200, -5.299999999999999800 ) ) ; +#16043 = EDGE_CURVE ( 'NONE', #5142, #12128, #7121, .T. ) ; +#16044 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8967 ) ) ; +#16045 = LINE ( 'NONE', #16877, #9930 ) ; +#16046 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#16047 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#16048 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16049 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid5', #13766 ) ; +#16050 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#16051 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#16052 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #19458, #19193, #15901, #29028, #3213, #12924 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#16053 = ADVANCED_FACE ( 'NONE', ( #6638, #19813 ), #19021, .T. ) ; +#16054 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24760 ) ) ; +#16055 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#16056 = FILL_AREA_STYLE_COLOUR ( '', #30332 ) ; +#16057 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#16058 = LINE ( 'NONE', #11786, #4949 ) ; +#16059 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, 10.30000000000000100, -1.250000000000000000 ) ) ; +#16060 = ORIENTED_EDGE ( 'NONE', *, *, #3868, .T. ) ; +#16061 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11714 ), #19856 ) ; +#16062 = PLANE ( 'NONE', #30854 ) ; +#16063 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39863 ) ) ; +#16065 = STYLED_ITEM ( 'NONE', ( #36891 ), #5677 ) ; +#16064 = STYLED_ITEM ( 'NONE', ( #20154 ), #30824 ) ; +#16066 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.139998254717358200, -6.299996877890552400 ) ) ; +#16067 = ORIENTED_EDGE ( 'NONE', *, *, #14441, .F. ) ; +#16068 = LINE ( 'NONE', #15586, #41819 ) ; +#16071 = EDGE_CURVE ( 'NONE', #16038, #36713, #29878, .T. ) ; +#16070 = CARTESIAN_POINT ( 'NONE', ( -4.010831726188969900, 0.5300017452961686100, -4.576794919243112300 ) ) ; +#16069 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37250 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21498, #11704, #21917 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16072 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16073 = EDGE_LOOP ( 'NONE', ( #32149, #26420, #30129, #15005 ) ) ; +#16074 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16075 = ORIENTED_EDGE ( 'NONE', *, *, #24995, .F. ) ; +#16076 = CARTESIAN_POINT ( 'NONE', ( 4.170000000000001700, 0.2799999999999973100, -0.2000017452961698200 ) ) ; +#16077 = VERTEX_POINT ( 'NONE', #28321 ) ; +#16079 = STYLED_ITEM ( 'NONE', ( #4963 ), #1705 ) ; +#16078 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24777 ), #18271 ) ; +#16080 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16081 = FACE_OUTER_BOUND ( 'NONE', #38879, .T. ) ; +#16082 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16083 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.779999999999868400, 0.0000000000000000000 ) ) ; +#16084 = VERTEX_POINT ( 'NONE', #8948 ) ; +#16085 = CARTESIAN_POINT ( 'NONE', ( -3.045000000000000800, 0.3292893218813454600, -1.399999999927000100 ) ) ; +#16086 = LINE ( 'NONE', #3731, #14542 ) ; +#16087 = ORIENTED_EDGE ( 'NONE', *, *, #4213, .F. ) ; +#16088 = ORIENTED_EDGE ( 'NONE', *, *, #6690, .F. ) ; +#16089 = LINE ( 'NONE', #3032, #6002 ) ; +#16090 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21919, 'distance_accuracy_value', 'NONE'); +#16091 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16092 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16093 = FILL_AREA_STYLE ('',( #12813 ) ) ; +#16094 = ORIENTED_EDGE ( 'NONE', *, *, #5892, .F. ) ; +#16095 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.949998254703822800, -2.467712434446770200 ) ) ; +#16096 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.279999999999999100, -3.299999999999999800 ) ) ; +#16097 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#16098 = ADVANCED_FACE ( 'NONE', ( #3609 ), #17745, .T. ) ; +#16099 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16100 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4538, 'distance_accuracy_value', 'NONE'); +#16101 = SURFACE_STYLE_USAGE ( .BOTH. , #25985 ) ; +#16102 = PRESENTATION_STYLE_ASSIGNMENT (( #40039 ) ) ; +#16103 = EDGE_CURVE ( 'NONE', #28229, #6398, #19772, .T. ) ; +#16104 = ORIENTED_EDGE ( 'NONE', *, *, #13175, .T. ) ; +#16106 = SURFACE_SIDE_STYLE ('',( #26422 ) ) ; +#16105 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#16107 = SURFACE_STYLE_USAGE ( .BOTH. , #9853 ) ; +#16108 = ADVANCED_FACE ( 'NONE', ( #20798 ), #15742, .F. ) ; +#16109 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#16110 = FILL_AREA_STYLE ('',( #35598 ) ) ; +#16111 = EDGE_CURVE ( 'NONE', #28233, #39696, #8628, .T. ) ; +#16112 = EDGE_LOOP ( 'NONE', ( #31596, #5040, #23156, #15315 ) ) ; +#16113 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16114 = LINE ( 'NONE', #6448, #40861 ) ; +#16115 = VERTEX_POINT ( 'NONE', #253 ) ; +#16116 = EDGE_LOOP ( 'NONE', ( #9858, #34359, #37073 ) ) ; +#16117 = STYLED_ITEM ( 'NONE', ( #2158 ), #15883 ) ; +#16118 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#16119 = LINE ( 'NONE', #38387, #7987 ) ; +#16120 = SURFACE_STYLE_FILL_AREA ( #24385 ) ; +#16121 = VERTEX_POINT ( 'NONE', #35387 ) ; +#16122 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#16123 = EDGE_LOOP ( 'NONE', ( #10391, #37239, #1147, #7651 ) ) ; +#16124 = VERTEX_POINT ( 'NONE', #22938 ) ; +#16125 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#16126 = FILL_AREA_STYLE_COLOUR ( '', #29061 ) ; +#16127 = CARTESIAN_POINT ( 'NONE', ( 3.095000000000000200, 0.07499999999999999700, 0.0000000000000000000 ) ) ; +#16128 = AXIS2_PLACEMENT_3D ( 'NONE', #2446, #24770, #52 ) ; +#16129 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13790 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16113, #19383, #464 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16130 = EDGE_CURVE ( 'NONE', #19551, #22514, #12145, .T. ) ; +#16131 = VERTEX_POINT ( 'NONE', #28742 ) ; +#16132 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#16133 = SURFACE_SIDE_STYLE ('',( #19323 ) ) ; +#16134 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#16135 = CIRCLE ( 'NONE', #1087, 0.1000000000000009100 ) ; +#16137 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000027500, -0.2339555568811695900 ) ) ; +#16136 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#16138 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32897 ) ) ; +#16139 = AXIS2_PLACEMENT_3D ( 'NONE', #7009, #29625, #4331 ) ; +#16140 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#16141 = STYLED_ITEM ( 'NONE', ( #14792 ), #32189 ) ; +#16142 = DIRECTION ( 'NONE', ( 3.872150616019659000E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16143 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#16144 = ADVANCED_FACE ( 'NONE', ( #2605 ), #19300, .F. ) ; +#16145 = SURFACE_STYLE_USAGE ( .BOTH. , #16284 ) ; +#16146 = FILL_AREA_STYLE ('',( #3565 ) ) ; +#16147 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16148 = LINE ( 'NONE', #17753, #3499 ) ; +#16149 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#16150 = ORIENTED_EDGE ( 'NONE', *, *, #18359, .F. ) ; +#16151 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.2800017452961252600, -4.400000000000000400 ) ) ; +#16152 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#16153 = CYLINDRICAL_SURFACE ( 'NONE', #23852, 0.3000000000000001600 ) ; +#16154 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16155 = ORIENTED_EDGE ( 'NONE', *, *, #12689, .F. ) ; +#16156 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -0.7580972011844128200 ) ) ; +#16157 = SURFACE_STYLE_USAGE ( .BOTH. , #6270 ) ; +#16158 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#16159 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16160 = VECTOR ( 'NONE', #29893, 1000.000000000000000 ) ; +#16161 = ORIENTED_EDGE ( 'NONE', *, *, #31004, .T. ) ; +#16162 = EDGE_LOOP ( 'NONE', ( #26648, #24072, #26965, #14135 ) ) ; +#16163 = ORIENTED_EDGE ( 'NONE', *, *, #32422, .F. ) ; +#16164 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, 0.4300017452961685800, -6.750000000000000000 ) ) ; +#16165 = EDGE_CURVE ( 'NONE', #37465, #8951, #20308, .T. ) ; +#16166 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16167 = EDGE_CURVE ( 'NONE', #31432, #16121, #13165, .T. ) ; +#16168 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#16169 = VERTEX_POINT ( 'NONE', #3307 ) ; +#16170 = SURFACE_STYLE_FILL_AREA ( #9816 ) ; +#16171 = EDGE_CURVE ( 'NONE', #31055, #40953, #35439, .T. ) ; +#16172 = VECTOR ( 'NONE', #39915, 1000.000000000000000 ) ; +#16173 = PLANE ( 'NONE', #31215 ) ; +#16174 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 6.489040814115169100E-016, -1.000000000000000000 ) ) ; +#16175 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2393 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28040, #15471, #21441 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16176 = LINE ( 'NONE', #4716, #15172 ) ; +#16177 = VECTOR ( 'NONE', #31851, 1000.000000000000000 ) ; +#16178 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#16179 = EDGE_CURVE ( 'NONE', #17010, #7943, #19285, .T. ) ; +#16180 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.499998254703822900, -6.699999999999994000 ) ) ; +#16181 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -1.499998254703825300, -5.049999999999993600 ) ) ; +#16182 = CIRCLE ( 'NONE', #12207, 0.2818014882866899400 ) ; +#16183 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3974 ), #30535 ) ; +#16184 = SURFACE_STYLE_FILL_AREA ( #7066 ) ; +#16185 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25426 ) ) ; +#16186 = CARTESIAN_POINT ( 'NONE', ( 3.395000000000000500, -0.4636038969321068000, -3.300000000000000300 ) ) ; +#16187 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#16188 = ORIENTED_EDGE ( 'NONE', *, *, #13323, .T. ) ; +#16189 = EDGE_CURVE ( 'NONE', #25100, #24593, #1112, .T. ) ; +#16190 = FILL_AREA_STYLE ('',( #25803 ) ) ; +#16191 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#16192 = VECTOR ( 'NONE', #41222, 1000.000000000000100 ) ; +#16193 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#16194 = SURFACE_STYLE_USAGE ( .BOTH. , #38358 ) ; +#16195 = LINE ( 'NONE', #7834, #9558 ) ; +#16196 = ORIENTED_EDGE ( 'NONE', *, *, #21297, .T. ) ; +#16197 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28756, 'distance_accuracy_value', 'NONE'); +#16199 = AXIS2_PLACEMENT_3D ( 'NONE', #35262, #38342, #28754 ) ; +#16198 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34883 ) ) ; +#16200 = SURFACE_STYLE_USAGE ( .BOTH. , #32141 ) ; +#16201 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000300, -0.3500000000000000300, -1.300000000000000000 ) ) ; +#16202 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13208 ) ) ; +#16203 = VECTOR ( 'NONE', #14417, 1000.000000000000000 ) ; +#16204 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.630424214906980300, -1.149999999999999900 ) ) ; +#16205 = ORIENTED_EDGE ( 'NONE', *, *, #26837, .F. ) ; +#16206 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16207 = ORIENTED_EDGE ( 'NONE', *, *, #17855, .F. ) ; +#16208 = ORIENTED_EDGE ( 'NONE', *, *, #20544, .T. ) ; +#16209 = AXIS2_PLACEMENT_3D ( 'NONE', #27319, #26929, #1106 ) ; +#16210 = CARTESIAN_POINT ( 'NONE', ( 3.178333333333020600, -0.07499999999999998300, -0.06128090415826346200 ) ) ; +#16211 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16212 = VERTEX_POINT ( 'NONE', #25910 ) ; +#16213 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16214 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.180001745296166000, -4.775000000000000400 ) ) ; +#16215 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#16216 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16217 = LINE ( 'NONE', #25855, #12185 ) ; +#16218 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#16219 = FILL_AREA_STYLE ('',( #32726 ) ) ; +#16220 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#16221 = VECTOR ( 'NONE', #22530, 1000.000000000000000 ) ; +#16222 = FILL_AREA_STYLE ('',( #9278 ) ) ; +#16223 = EDGE_LOOP ( 'NONE', ( #5773, #16657, #9480, #25632 ) ) ; +#16224 = CIRCLE ( 'NONE', #16492, 0.1000000000000002600 ) ; +#16225 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#16226 = DIRECTION ( 'NONE', ( -3.252601786828647100E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#16227 = LINE ( 'NONE', #18506, #22795 ) ; +#16228 = FILL_AREA_STYLE_COLOUR ( '', #16320 ) ; +#16229 = EDGE_CURVE ( 'NONE', #18855, #11148, #17243, .T. ) ; +#16230 = ORIENTED_EDGE ( 'NONE', *, *, #21587, .T. ) ; +#16231 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25483, 'distance_accuracy_value', 'NONE'); +#16232 = SURFACE_STYLE_FILL_AREA ( #39173 ) ; +#16233 = DIRECTION ( 'NONE', ( -9.268445570935432200E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16234 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#16235 = SURFACE_STYLE_FILL_AREA ( #29811 ) ; +#16236 = EDGE_CURVE ( 'NONE', #25818, #15905, #7611, .T. ) ; +#16237 = FACE_OUTER_BOUND ( 'NONE', #24437, .T. ) ; +#16238 = CIRCLE ( 'NONE', #36362, 0.1999999999999996500 ) ; +#16239 = FILL_AREA_STYLE ('',( #38262 ) ) ; +#16240 = ORIENTED_EDGE ( 'NONE', *, *, #26771, .T. ) ; +#16241 = LINE ( 'NONE', #14347, #6152 ) ; +#16242 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18839 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40764, #24726, #34562 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16243 = ORIENTED_EDGE ( 'NONE', *, *, #29796, .F. ) ; +#16244 = ORIENTED_EDGE ( 'NONE', *, *, #1128, .F. ) ; +#16245 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24087, 'distance_accuracy_value', 'NONE'); +#16246 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, -2.031000000000001500, -6.549999999999999800 ) ) ; +#16247 = PLANE ( 'NONE', #3855 ) ; +#16248 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6227 ), #5411 ) ; +#16249 = FILL_AREA_STYLE ('',( #25589 ) ) ; +#16250 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, 0.2800000000000027500, -0.2339555568811695400 ) ) ; +#16251 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38550 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25826, #9693, #26384 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16252 = CARTESIAN_POINT ( 'NONE', ( -3.191446609406725500, -0.6207106781186543200, -3.300000000000000700 ) ) ; +#16253 = ORIENTED_EDGE ( 'NONE', *, *, #37265, .T. ) ; +#16254 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#16255 = ORIENTED_EDGE ( 'NONE', *, *, #41161, .F. ) ; +#16257 = STYLED_ITEM ( 'NONE', ( #28038 ), #4417 ) ; +#16256 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8369 ), #31650 ) ; +#16258 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #30986, .NOT_KNOWN. ) ; +#16259 = VECTOR ( 'NONE', #28938, 1000.000000000000000 ) ; +#16261 = STYLED_ITEM ( 'NONE', ( #37874 ), #9552 ) ; +#16260 = STYLED_ITEM ( 'NONE', ( #27752 ), #34499 ) ; +#16262 = AXIS2_PLACEMENT_3D ( 'NONE', #3526, #29504, #9852 ) ; +#16263 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#16264 = PRESENTATION_STYLE_ASSIGNMENT (( #31976 ) ) ; +#16265 = CARTESIAN_POINT ( 'NONE', ( -2.994999999999999700, -0.3499999999999999800, -1.399999999999999900 ) ) ; +#16266 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.499998254703838600, -5.449999999999994000 ) ) ; +#16267 = ADVANCED_FACE ( 'NONE', ( #28857 ), #19719, .F. ) ; +#16268 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#16269 = ORIENTED_EDGE ( 'NONE', *, *, #28753, .F. ) ; +#16270 = FACE_OUTER_BOUND ( 'NONE', #15715, .T. ) ; +#16271 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16272 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#16273 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.499998254703827700, -6.699999999999994000 ) ) ; +#16274 = ORIENTED_EDGE ( 'NONE', *, *, #24046, .F. ) ; +#16275 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.2000017452961698200 ) ) ; +#16276 = VECTOR ( 'NONE', #27013, 1000.000000000000000 ) ; +#16277 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16278 = FACE_OUTER_BOUND ( 'NONE', #20070, .T. ) ; +#16280 = VECTOR ( 'NONE', #5696, 1000.000000000000000 ) ; +#16279 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.139998254717357500, -5.049996877890552400 ) ) ; +#16281 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16282 = ORIENTED_EDGE ( 'NONE', *, *, #10827, .T. ) ; +#16283 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16284 = SURFACE_SIDE_STYLE ('',( #24038 ) ) ; +#16285 = FACE_OUTER_BOUND ( 'NONE', #17769, .T. ) ; +#16286 = FILL_AREA_STYLE_COLOUR ( '', #5822 ) ; +#16287 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#16288 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -0.3279248189596167300 ) ) ; +#16289 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#16290 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10889, 'distance_accuracy_value', 'NONE'); +#16291 = ORIENTED_EDGE ( 'NONE', *, *, #5904, .T. ) ; +#16292 = SURFACE_STYLE_USAGE ( .BOTH. , #10040 ) ; +#16293 = VECTOR ( 'NONE', #18353, 1000.000000000000000 ) ; +#16294 = ORIENTED_EDGE ( 'NONE', *, *, #40056, .F. ) ; +#16295 = EDGE_CURVE ( 'NONE', #22600, #18155, #29834, .T. ) ; +#16296 = LINE ( 'NONE', #4203, #37000 ) ; +#16297 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.380001745296130000, -5.449999999999994000 ) ) ; +#16298 = FACE_OUTER_BOUND ( 'NONE', #11514, .T. ) ; +#16299 = SURFACE_STYLE_USAGE ( .BOTH. , #38592 ) ; +#16300 = DIRECTION ( 'NONE', ( 2.602085213965211800E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16301 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16302 = EDGE_CURVE ( 'NONE', #28658, #854, #25377, .T. ) ; +#16303 = PRESENTATION_STYLE_ASSIGNMENT (( #27147 ) ) ; +#16304 = AXIS2_PLACEMENT_3D ( 'NONE', #7302, #27242, #20358 ) ; +#16305 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16306 = ADVANCED_FACE ( 'NONE', ( #24295 ), #17531, .F. ) ; +#16307 = DIRECTION ( 'NONE', ( 5.782411586589413300E-015, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#16308 = STYLED_ITEM ( 'NONE', ( #13545 ), #14604 ) ; +#16309 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 10.30000000000000100, -1.250000000000000000 ) ) ; +#16310 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#16311 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13313 ), #18494 ) ; +#16312 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5481 ), #31709 ) ; +#16313 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16314 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16315 = ORIENTED_EDGE ( 'NONE', *, *, #10448, .T. ) ; +#16316 = ADVANCED_FACE ( 'NONE', ( #8144 ), #39943, .F. ) ; +#16318 = STYLED_ITEM ( 'NONE', ( #27895 ), #5296 ) ; +#16317 = AXIS2_PLACEMENT_3D ( 'NONE', #37887, #2212, #34513 ) ; +#16319 = CARTESIAN_POINT ( 'NONE', ( 3.178333333333033500, -0.2999999999999999900, -0.06128090415829343800 ) ) ; +#16320 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#16321 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#16323 = EDGE_CURVE ( 'NONE', #9639, #23832, #35977, .T. ) ; +#16322 = STYLED_ITEM ( 'NONE', ( #14104 ), #35108 ) ; +#16324 = FILL_AREA_STYLE_COLOUR ( '', #21472 ) ; +#16326 = ORIENTED_EDGE ( 'NONE', *, *, #7351, .T. ) ; +#16325 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#16327 = VERTEX_POINT ( 'NONE', #13991 ) ; +#16328 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25281 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1122, #1531, #24090 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16329 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#16330 = CARTESIAN_POINT ( 'NONE', ( 2.985630157013476000, 0.6000000000000000900, -1.930000000000001300 ) ) ; +#16331 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16332 = ORIENTED_EDGE ( 'NONE', *, *, #41030, .F. ) ; +#16333 = VERTEX_POINT ( 'NONE', #36997 ) ; +#16334 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.499998254703832000, -5.449999999999994000 ) ) ; +#16335 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#16336 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #24831, #37778, #40592, #24538 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#16337 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#16339 = VECTOR ( 'NONE', #13864, 1000.000000000000000 ) ; +#16338 = SURFACE_STYLE_USAGE ( .BOTH. , #32004 ) ; +#16340 = SURFACE_STYLE_USAGE ( .BOTH. , #39473 ) ; +#16341 = MANIFOLD_SOLID_BREP ( '1-1-solid6', #11694 ) ; +#16342 = FILL_AREA_STYLE ('',( #24680 ) ) ; +#16343 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -2.099999999999999600 ) ) ; +#16344 = SURFACE_SIDE_STYLE ('',( #12954 ) ) ; +#16345 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#16346 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16347 = CARTESIAN_POINT ( 'NONE', ( 3.095000000000000200, -0.07499999999999999700, -0.3254101966249999800 ) ) ; +#16348 = VECTOR ( 'NONE', #12980, 1000.000000000000000 ) ; +#16349 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16350 = EDGE_CURVE ( 'NONE', #454, #12200, #36983, .T. ) ; +#16351 = ADVANCED_FACE ( 'NONE', ( #2653 ), #595, .T. ) ; +#16352 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#16353 = DIRECTION ( 'NONE', ( -2.359223927328457600E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16354 = EDGE_CURVE ( 'NONE', #11747, #30331, #5613, .T. ) ; +#16355 = FACE_OUTER_BOUND ( 'NONE', #3552, .T. ) ; +#16356 = ORIENTED_EDGE ( 'NONE', *, *, #38174, .F. ) ; +#16357 = VECTOR ( 'NONE', #23935, 1000.000000000000000 ) ; +#16358 = ORIENTED_EDGE ( 'NONE', *, *, #8037, .F. ) ; +#16359 = EDGE_LOOP ( 'NONE', ( #23446, #27240, #28353, #17914 ) ) ; +#16360 = ORIENTED_EDGE ( 'NONE', *, *, #31685, .T. ) ; +#16361 = ORIENTED_EDGE ( 'NONE', *, *, #17916, .F. ) ; +#16362 = AXIS2_PLACEMENT_3D ( 'NONE', #28913, #41615, #22438 ) ; +#16363 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#16364 = VECTOR ( 'NONE', #3810, 1000.000000000000000 ) ; +#16365 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#16366 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16367 = FILL_AREA_STYLE ('',( #7021 ) ) ; +#16368 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#16369 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12006 ) ) ; +#16370 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14012, 'distance_accuracy_value', 'NONE'); +#16371 = STYLED_ITEM ( 'NONE', ( #14583 ), #6987 ) ; +#16372 = FACE_OUTER_BOUND ( 'NONE', #30959, .T. ) ; +#16373 = CARTESIAN_POINT ( 'NONE', ( 3.245000000058750000, 0.2999999999999999900, -1.600000000000000100 ) ) ; +#16374 = DIRECTION ( 'NONE', ( 2.367138801244516300E-016, -2.566457030884037700E-032, -1.000000000000000000 ) ) ; +#16376 = EDGE_CURVE ( 'NONE', #10637, #33357, #20808, .T. ) ; +#16375 = STYLED_ITEM ( 'NONE', ( #16524 ), #36422 ) ; +#16377 = DIRECTION ( 'NONE', ( -2.891205793294677000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16378 = CARTESIAN_POINT ( 'NONE', ( 4.663004880385256200, -0.2800000000000026400, -0.7580972011844128200 ) ) ; +#16380 = STYLED_ITEM ( 'NONE', ( #25151 ), #1925 ) ; +#16379 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7448 ) ) ; +#16381 = CARTESIAN_POINT ( 'NONE', ( 3.237718385397979400, -0.2999999999999999900, 0.7155313145785915400 ) ) ; +#16382 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16383 = STYLED_ITEM ( 'NONE', ( #14869 ), #39748 ) ; +#16384 = PLANE ( 'NONE', #3919 ) ; +#16385 = CIRCLE ( 'NONE', #24299, 0.1499999999999999700 ) ; +#16386 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16387 = ORIENTED_EDGE ( 'NONE', *, *, #138, .T. ) ; +#16388 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#16389 = PRESENTATION_STYLE_ASSIGNMENT (( #39945 ) ) ; +#16390 = CYLINDRICAL_SURFACE ( 'NONE', #1074, 0.2999999999999999300 ) ; +#16391 = ORIENTED_EDGE ( 'NONE', *, *, #31993, .T. ) ; +#16392 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11214, 'distance_accuracy_value', 'NONE'); +#16393 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16394 = ORIENTED_EDGE ( 'NONE', *, *, #4340, .T. ) ; +#16395 = CIRCLE ( 'NONE', #21747, 0.2181066972901060100 ) ; +#16396 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16397 = ORIENTED_EDGE ( 'NONE', *, *, #16167, .T. ) ; +#16398 = FACE_OUTER_BOUND ( 'NONE', #34680, .T. ) ; +#16399 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#16400 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2465, 'distance_accuracy_value', 'NONE'); +#16401 = ADVANCED_FACE ( 'NONE', ( #10125 ), #40791, .F. ) ; +#16402 = VECTOR ( 'NONE', #37316, 1000.000000000000000 ) ; +#16403 = LINE ( 'NONE', #33783, #21991 ) ; +#16404 = EDGE_CURVE ( 'NONE', #17215, #22169, #29340, .T. ) ; +#16405 = ORIENTED_EDGE ( 'NONE', *, *, #18909, .T. ) ; +#16406 = CIRCLE ( 'NONE', #32962, 0.1000000000000000500 ) ; +#16407 = SURFACE_STYLE_USAGE ( .BOTH. , #36193 ) ; +#16408 = FILL_AREA_STYLE_COLOUR ( '', #8675 ) ; +#16409 = FACE_OUTER_BOUND ( 'NONE', #21565, .T. ) ; +#16410 = ORIENTED_EDGE ( 'NONE', *, *, #17871, .F. ) ; +#16411 = EDGE_CURVE ( 'NONE', #18079, #17475, #4604, .T. ) ; +#16412 = CYLINDRICAL_SURFACE ( 'NONE', #30401, 0.04999999999999991300 ) ; +#16413 = SURFACE_SIDE_STYLE ('',( #19926 ) ) ; +#16414 = EDGE_CURVE ( 'NONE', #10696, #27771, #16227, .T. ) ; +#16415 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16416 = FACE_OUTER_BOUND ( 'NONE', #14802, .T. ) ; +#16417 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25116 ) ) ; +#16418 = SURFACE_SIDE_STYLE ('',( #33622 ) ) ; +#16419 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#16420 = ORIENTED_EDGE ( 'NONE', *, *, #30449, .F. ) ; +#16421 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16422 = ORIENTED_EDGE ( 'NONE', *, *, #18174, .F. ) ; +#16423 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28062 ), #33197 ) ; +#16424 = SURFACE_STYLE_FILL_AREA ( #4245 ) ; +#16425 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, -0.7071067811865483500 ) ) ; +#16426 = DIRECTION ( 'NONE', ( -1.355252715606880500E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#16427 = ORIENTED_EDGE ( 'NONE', *, *, #40995, .T. ) ; +#16428 = AXIS2_PLACEMENT_3D ( 'NONE', #19550, #3692, #6523 ) ; +#16429 = CARTESIAN_POINT ( 'NONE', ( -0.2500000000000031600, -2.031000000000001500, -6.749999999999999100 ) ) ; +#16430 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.080001745296165200, -6.250000000000000000 ) ) ; +#16431 = VECTOR ( 'NONE', #8762, 1000.000000000000000 ) ; +#16432 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #1336, #10456, #17550, #33363 ), + .UNSPECIFIED., .F., .T. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 2.418858405776388700, 3.141592653589793100 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956582200, 0.9569428977956582200, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#16433 = VECTOR ( 'NONE', #38632, 1000.000000000000000 ) ; +#16435 = EDGE_CURVE ( 'NONE', #10923, #28272, #16712, .T. ) ; +#16434 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2871 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32735, #36294, #7022 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16436 = VERTEX_POINT ( 'NONE', #27533 ) ; +#16437 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#16439 = AXIS2_PLACEMENT_3D ( 'NONE', #16225, #3766, #26538 ) ; +#16438 = AXIS2_PLACEMENT_3D ( 'NONE', #355, #22773, #29249 ) ; +#16440 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12088 ) ) ; +#16441 = SURFACE_STYLE_FILL_AREA ( #22964 ) ; +#16442 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13647, 'distance_accuracy_value', 'NONE'); +#16443 = SURFACE_SIDE_STYLE ('',( #2598 ) ) ; +#16444 = VERTEX_POINT ( 'NONE', #8156 ) ; +#16445 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28087 ) ) ; +#16446 = ORIENTED_EDGE ( 'NONE', *, *, #29373, .T. ) ; +#16447 = STYLED_ITEM ( 'NONE', ( #36653 ), #7885 ) ; +#16448 = LINE ( 'NONE', #4016, #21031 ) ; +#16449 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16450 = ORIENTED_EDGE ( 'NONE', *, *, #34665, .F. ) ; +#16451 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16452 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -2.099999999999999600 ) ) ; +#16453 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36222, 'distance_accuracy_value', 'NONE'); +#16454 = LINE ( 'NONE', #18847, #22032 ) ; +#16455 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#16456 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16457 = LINE ( 'NONE', #26146, #15455 ) ; +#16458 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.8500017452961657900, -4.875000000000000900 ) ) ; +#16459 = ORIENTED_EDGE ( 'NONE', *, *, #19460, .F. ) ; +#16460 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#16461 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16462 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16463 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#16464 = SURFACE_SIDE_STYLE ('',( #3377 ) ) ; +#16465 = ADVANCED_FACE ( 'NONE', ( #1120 ), #24291, .F. ) ; +#16466 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16467 = ORIENTED_EDGE ( 'NONE', *, *, #11386, .T. ) ; +#16468 = FACE_OUTER_BOUND ( 'NONE', #361, .T. ) ; +#16469 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16470 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#16471 = EDGE_CURVE ( 'NONE', #14370, #1566, #18765, .T. ) ; +#16472 = ORIENTED_EDGE ( 'NONE', *, *, #23349, .F. ) ; +#16473 = PLANE ( 'NONE', #11965 ) ; +#16474 = VERTEX_POINT ( 'NONE', #40939 ) ; +#16475 = VERTEX_POINT ( 'NONE', #1866 ) ; +#16476 = AXIS2_PLACEMENT_3D ( 'NONE', #38017, #18705, #28417 ) ; +#16477 = VECTOR ( 'NONE', #2596, 1000.000000000000000 ) ; +#16478 = SURFACE_SIDE_STYLE ('',( #21744 ) ) ; +#16479 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16480 = EDGE_CURVE ( 'NONE', #22361, #3704, #40983, .T. ) ; +#16481 = LINE ( 'NONE', #16343, #40213 ) ; +#16482 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#16483 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16484 = CLOSED_SHELL ( 'NONE', ( #1285, #30984, #32650, #16401, #39796, #40719 ) ) ; +#16485 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#16486 = PRESENTATION_STYLE_ASSIGNMENT (( #1217 ) ) ; +#16487 = ORIENTED_EDGE ( 'NONE', *, *, #3599, .F. ) ; +#16488 = AXIS2_PLACEMENT_3D ( 'NONE', #35222, #41681, #31819 ) ; +#16489 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16490 = FACE_OUTER_BOUND ( 'NONE', #15979, .T. ) ; +#16491 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16492 = AXIS2_PLACEMENT_3D ( 'NONE', #31866, #22147, #28080 ) ; +#16493 = PRESENTATION_STYLE_ASSIGNMENT (( #16194 ) ) ; +#16495 = EDGE_CURVE ( 'NONE', #24242, #26968, #9107, .T. ) ; +#16494 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25077 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13114, #9438, #38406 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16496 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16497 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16498 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#16500 = AXIS2_PLACEMENT_3D ( 'NONE', #19502, #6212, #22180 ) ; +#16499 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9969 ), #18688 ) ; +#16501 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24375 ) ) ; +#16502 = FILL_AREA_STYLE_COLOUR ( '', #31037 ) ; +#16504 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12781 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21427, #37495, #11352 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16503 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23553 ), #6238 ) ; +#16505 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16506 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#16507 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16508 = ADVANCED_FACE ( 'NONE', ( #6614 ), #21345, .F. ) ; +#16509 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39210, 'distance_accuracy_value', 'NONE'); +#16510 = AXIS2_PLACEMENT_3D ( 'NONE', #28840, #35913, #35622 ) ; +#16511 = VECTOR ( 'NONE', #8536, 1000.000000000000000 ) ; +#16512 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16513 = PLANE ( 'NONE', #17523 ) ; +#16514 = CARTESIAN_POINT ( 'NONE', ( -3.846156164834738400, 0.6165030250713622300, -14.55000000000000100 ) ) ; +#16515 = SURFACE_STYLE_USAGE ( .BOTH. , #38955 ) ; +#16516 = ORIENTED_EDGE ( 'NONE', *, *, #3125, .F. ) ; +#16517 = FILL_AREA_STYLE_COLOUR ( '', #18789 ) ; +#16518 = ORIENTED_EDGE ( 'NONE', *, *, #32041, .F. ) ; +#16519 = ORIENTED_EDGE ( 'NONE', *, *, #30997, .F. ) ; +#16520 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.4300017452961689100, -5.150000000000000400 ) ) ; +#16521 = ADVANCED_FACE ( 'NONE', ( #12639 ), #6192, .F. ) ; +#16522 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, -0.2799999999999974200, 0.0000000000000000000 ) ) ; +#16523 = FILL_AREA_STYLE ('',( #13249 ) ) ; +#16524 = PRESENTATION_STYLE_ASSIGNMENT (( #15211 ) ) ; +#16525 = LINE ( 'NONE', #11800, #19596 ) ; +#16526 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40187, 'distance_accuracy_value', 'NONE'); +#16527 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16528 = ORIENTED_EDGE ( 'NONE', *, *, #31057, .T. ) ; +#16529 = FACE_OUTER_BOUND ( 'NONE', #40086, .T. ) ; +#16530 = VERTEX_POINT ( 'NONE', #25290 ) ; +#16531 = VECTOR ( 'NONE', #7865, 1000.000000000000000 ) ; +#16532 = SURFACE_SIDE_STYLE ('',( #6239 ) ) ; +#16533 = EDGE_CURVE ( 'NONE', #21687, #6398, #11632, .T. ) ; +#16534 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16535 = FILL_AREA_STYLE_COLOUR ( '', #11305 ) ; +#16536 = FILL_AREA_STYLE ('',( #10157 ) ) ; +#16537 = CIRCLE ( 'NONE', #4676, 0.1000000000000000500 ) ; +#16538 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#16539 = EDGE_CURVE ( 'NONE', #10667, #24571, #3071, .T. ) ; +#16540 = STYLED_ITEM ( 'NONE', ( #5531 ), #23504 ) ; +#16541 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, 0.03300000000000001500 ) ) ; +#16542 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16543 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.3300017452961695500, -6.424999999999999800 ) ) ; +#16544 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16545 = AXIS2_PLACEMENT_3D ( 'NONE', #19890, #13344, #8 ) ; +#16546 = EDGE_LOOP ( 'NONE', ( #1789, #13171, #26682, #4660 ) ) ; +#16547 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16548 = STYLED_ITEM ( 'NONE', ( #5979 ), #13916 ) ; +#16549 = SURFACE_STYLE_USAGE ( .BOTH. , #7336 ) ; +#16550 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.630424214906979600, -1.149999999999999900 ) ) ; +#16551 = SURFACE_STYLE_FILL_AREA ( #12410 ) ; +#16552 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23858 ) ) ; +#16553 = FILL_AREA_STYLE ('',( #19967 ) ) ; +#16554 = ADVANCED_FACE ( 'NONE', ( #41457 ), #5635, .T. ) ; +#16555 = AXIS2_PLACEMENT_3D ( 'NONE', #12255, #25164, #40654 ) ; +#16556 = EDGE_LOOP ( 'NONE', ( #39107, #33869, #19449, #28898 ) ) ; +#16557 = ORIENTED_EDGE ( 'NONE', *, *, #20467, .T. ) ; +#16558 = EDGE_LOOP ( 'NONE', ( #12618, #2163, #33583, #27805 ) ) ; +#16559 = LINE ( 'NONE', #2169, #32718 ) ; +#16560 = AXIS2_PLACEMENT_3D ( 'NONE', #1512, #21142, #27451 ) ; +#16561 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.7580972011844129300 ) ) ; +#16562 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16563 = CARTESIAN_POINT ( 'NONE', ( -1.300000000000000000, 1.480001745296169600, -1.650000000000000800 ) ) ; +#16564 = LINE ( 'NONE', #4011, #22126 ) ; +#16565 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16566 = LINE ( 'NONE', #10746, #23657 ) ; +#16568 = EDGE_CURVE ( 'NONE', #11160, #20790, #19252, .T. ) ; +#16567 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39812 ), #26858 ) ; +#16569 = ORIENTED_EDGE ( 'NONE', *, *, #21328, .T. ) ; +#16570 = ORIENTED_EDGE ( 'NONE', *, *, #9649, .F. ) ; +#16571 = ORIENTED_EDGE ( 'NONE', *, *, #27087, .F. ) ; +#16572 = LINE ( 'NONE', #40348, #31725 ) ; +#16573 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#16574 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, 2.322941965694886000, -1.250000000000000000 ) ) ; +#16576 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36868 ) ) ; +#16575 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21746 ) ) ; +#16577 = DIRECTION ( 'NONE', ( 7.744301232039317900E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16578 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2657, 'distance_accuracy_value', 'NONE'); +#16579 = ORIENTED_EDGE ( 'NONE', *, *, #4783, .F. ) ; +#16580 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16581 = LINE ( 'NONE', #17354, #33228 ) ; +#16582 = SURFACE_SIDE_STYLE ('',( #18028 ) ) ; +#16583 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244521200E-016 ) ) ; +#16584 = DIRECTION ( 'NONE', ( -7.744301232039317900E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16585 = PRESENTATION_STYLE_ASSIGNMENT (( #28589 ) ) ; +#16586 = EDGE_LOOP ( 'NONE', ( #36755, #10945, #8652, #38063 ) ) ; +#16587 = CARTESIAN_POINT ( 'NONE', ( 2.900000000000000400, -1.499998254703820600, -5.449999999999994000 ) ) ; +#16588 = FILL_AREA_STYLE ('',( #9783 ) ) ; +#16589 = ORIENTED_EDGE ( 'NONE', *, *, #5096, .T. ) ; +#16590 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#16591 = VERTEX_POINT ( 'NONE', #31746 ) ; +#16592 = CIRCLE ( 'NONE', #40041, 0.2000000000000000700 ) ; +#16593 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16594 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -0.3499999999999999800, 0.3499999999999999800 ) ) ; +#16595 = EDGE_CURVE ( 'NONE', #29041, #35305, #8097, .T. ) ; +#16596 = ORIENTED_EDGE ( 'NONE', *, *, #25644, .F. ) ; +#16597 = VERTEX_POINT ( 'NONE', #35146 ) ; +#16598 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#16599 = ORIENTED_EDGE ( 'NONE', *, *, #34060, .T. ) ; +#16600 = CIRCLE ( 'NONE', #24183, 1.493004880385253600 ) ; +#16601 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16602 = CIRCLE ( 'NONE', #5177, 1.499999999999867700 ) ; +#16603 = SURFACE_SIDE_STYLE ('',( #36208 ) ) ; +#16604 = VECTOR ( 'NONE', #6736, 1000.000000000000000 ) ; +#16605 = EDGE_CURVE ( 'NONE', #19912, #10480, #27834, .T. ) ; +#16606 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9266 ), #26635 ) ; +#16607 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16608 = FILL_AREA_STYLE ('',( #13329 ) ) ; +#16609 = FILL_AREA_STYLE_COLOUR ( '', #21208 ) ; +#16610 = VECTOR ( 'NONE', #27343, 1000.000000000000000 ) ; +#16611 = VERTEX_POINT ( 'NONE', #12385 ) ; +#16612 = VECTOR ( 'NONE', #7565, 1000.000000000000000 ) ; +#16613 = ORIENTED_EDGE ( 'NONE', *, *, #8594, .F. ) ; +#16614 = LINE ( 'NONE', #16151, #15596 ) ; +#16615 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #37428, #40665, #5790, #34596, #18105, #40810 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#16616 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33112, 'distance_accuracy_value', 'NONE'); +#16617 = AXIS2_PLACEMENT_3D ( 'NONE', #37141, #21078, #1726 ) ; +#16618 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16619 = ADVANCED_FACE ( 'NONE', ( #23280 ), #28361, .F. ) ; +#16620 = SURFACE_SIDE_STYLE ('',( #21791 ) ) ; +#16621 = VERTEX_POINT ( 'NONE', #21905 ) ; +#16622 = CIRCLE ( 'NONE', #33594, 0.3600000000000078700 ) ; +#16623 = PLANE ( 'NONE', #20097 ) ; +#16624 = AXIS2_PLACEMENT_3D ( 'NONE', #12799, #12666, #15778 ) ; +#16625 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16626 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875040000E-015, 6.056601140521967000E-031 ) ) ; +#16628 = AXIS2_PLACEMENT_3D ( 'NONE', #39550, #10876, #33219 ) ; +#16627 = AXIS2_PLACEMENT_3D ( 'NONE', #36484, #7078, #29699 ) ; +#16629 = VECTOR ( 'NONE', #30966, 1000.000000000000000 ) ; +#16630 = CARTESIAN_POINT ( 'NONE', ( -1.149999999999999900, -1.380001745296132400, -6.699999999999994000 ) ) ; +#16633 = EDGE_CURVE ( 'NONE', #32314, #2958, #39747, .T. ) ; +#16632 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#16631 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25849 ), #36668 ) ; +#16634 = SURFACE_SIDE_STYLE ('',( #41437 ) ) ; +#16635 = CYLINDRICAL_SURFACE ( 'NONE', #38992, 0.3499999999999996400 ) ; +#16636 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, -1.000000000000000000, 4.688441826964342300E-016 ) ) ; +#16637 = STYLED_ITEM ( 'NONE', ( #33264 ), #1659 ) ; +#16638 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#16639 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3638 ), #13661 ) ; +#16640 = ORIENTED_EDGE ( 'NONE', *, *, #36530, .F. ) ; +#16641 = FILL_AREA_STYLE_COLOUR ( '', #28922 ) ; +#16642 = VERTEX_POINT ( 'NONE', #32711 ) ; +#16643 = ORIENTED_EDGE ( 'NONE', *, *, #25521, .F. ) ; +#16644 = SURFACE_STYLE_USAGE ( .BOTH. , #36002 ) ; +#16645 = VECTOR ( 'NONE', #28424, 1000.000000000000000 ) ; +#16646 = FACE_OUTER_BOUND ( 'NONE', #38957, .T. ) ; +#16647 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#16648 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -2.322941965694886000, -1.250000000000000000 ) ) ; +#16649 = PRESENTATION_STYLE_ASSIGNMENT (( #3892 ) ) ; +#16650 = ORIENTED_EDGE ( 'NONE', *, *, #27078, .T. ) ; +#16651 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.2800017452961674500, -4.400000000000000400 ) ) ; +#16652 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#16653 = LINE ( 'NONE', #29328, #24240 ) ; +#16654 = ORIENTED_EDGE ( 'NONE', *, *, #1376, .F. ) ; +#16655 = ORIENTED_EDGE ( 'NONE', *, *, #35993, .T. ) ; +#16656 = FILL_AREA_STYLE ('',( #38814 ) ) ; +#16657 = ORIENTED_EDGE ( 'NONE', *, *, #22304, .F. ) ; +#16658 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16659 = LINE ( 'NONE', #25819, #13115 ) ; +#16660 = EDGE_CURVE ( 'NONE', #11148, #37869, #12827, .T. ) ; +#16661 = CARTESIAN_POINT ( 'NONE', ( 3.845112588749435700, 0.6187538612931587900, -4.550303794343624200 ) ) ; +#16662 = LINE ( 'NONE', #4767, #7563 ) ; +#16663 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16664 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, 0.07499999999999999700, 0.0000000000000000000 ) ) ; +#16665 = EDGE_CURVE ( 'NONE', #11990, #21814, #13670, .T. ) ; +#16666 = SURFACE_STYLE_FILL_AREA ( #10730 ) ; +#16667 = ORIENTED_EDGE ( 'NONE', *, *, #12432, .T. ) ; +#16668 = LINE ( 'NONE', #35972, #33863 ) ; +#16669 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16670 = EDGE_LOOP ( 'NONE', ( #6020, #31668, #25879, #868 ) ) ; +#16671 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.730424212713734800, -1.049979056049130000 ) ) ; +#16672 = ORIENTED_EDGE ( 'NONE', *, *, #21896, .T. ) ; +#16673 = PRESENTATION_STYLE_ASSIGNMENT (( #23562 ) ) ; +#16674 = ADVANCED_FACE ( 'NONE', ( #5571 ), #14664, .F. ) ; +#16675 = FACE_OUTER_BOUND ( 'NONE', #3295, .T. ) ; +#16676 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10720 ), #2917 ) ; +#16677 = FILL_AREA_STYLE ('',( #35752 ) ) ; +#16678 = VECTOR ( 'NONE', #15529, 1000.000000000000000 ) ; +#16680 = EDGE_CURVE ( 'NONE', #24627, #24188, #11118, .T. ) ; +#16679 = AXIS2_PLACEMENT_3D ( 'NONE', #12008, #34227, #8347 ) ; +#16681 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16682 = ORIENTED_EDGE ( 'NONE', *, *, #3599, .T. ) ; +#16683 = SURFACE_SIDE_STYLE ('',( #17237 ) ) ; +#16684 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, 0.6500000000000001300, -3.299999999999999800 ) ) ; +#16685 = CIRCLE ( 'NONE', #21792, 0.09999999999999999200 ) ; +#16686 = ORIENTED_EDGE ( 'NONE', *, *, #11141, .F. ) ; +#16687 = ORIENTED_EDGE ( 'NONE', *, *, #32355, .F. ) ; +#16688 = VECTOR ( 'NONE', #9939, 1000.000000000000000 ) ; +#16689 = PLANE ( 'NONE', #20928 ) ; +#16691 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38087 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34791, #12315, #25085 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16690 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41818 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38178, #22387, #9354 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16692 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31845 ) ) ; +#16693 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.3499999999999999800, 0.3499999999999999800 ) ) ; +#16694 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16695 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19685 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12075, #28336, #31313 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16696 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#16697 = ORIENTED_EDGE ( 'NONE', *, *, #15675, .T. ) ; +#16698 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760845000E-015 ) ) ; +#16699 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#16700 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#16701 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#16702 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#16703 = FILL_AREA_STYLE ('',( #39425 ) ) ; +#16704 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16705 = LINE ( 'NONE', #39514, #9093 ) ; +#16706 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#16707 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16708 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#16709 = FILL_AREA_STYLE_COLOUR ( '', #16268 ) ; +#16710 = VERTEX_POINT ( 'NONE', #13355 ) ; +#16711 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.279999999999999800, -0.2000017452961698200 ) ) ; +#16712 = LINE ( 'NONE', #14680, #34912 ) ; +#16713 = ADVANCED_FACE ( 'NONE', ( #9573 ), #13639, .T. ) ; +#16714 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16715 = ORIENTED_EDGE ( 'NONE', *, *, #8287, .T. ) ; +#16716 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16717 = ORIENTED_EDGE ( 'NONE', *, *, #6561, .F. ) ; +#16718 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36925, 'distance_accuracy_value', 'NONE'); +#16719 = EDGE_CURVE ( 'NONE', #14097, #29644, #34985, .T. ) ; +#16720 = DIRECTION ( 'NONE', ( 1.548860246407863600E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#16721 = VERTEX_POINT ( 'NONE', #19344 ) ; +#16722 = VERTEX_POINT ( 'NONE', #15 ) ; +#16723 = ORIENTED_EDGE ( 'NONE', *, *, #32802, .T. ) ; +#16724 = EDGE_CURVE ( 'NONE', #26198, #34154, #32848, .T. ) ; +#16725 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16726 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20287 ) ) ; +#16727 = ADVANCED_FACE ( 'NONE', ( #21259 ), #25309, .T. ) ; +#16728 = FILL_AREA_STYLE_COLOUR ( '', #31747 ) ; +#16729 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244519300E-016 ) ) ; +#16730 = EDGE_CURVE ( 'NONE', #3050, #12842, #37913, .T. ) ; +#16731 = VERTEX_POINT ( 'NONE', #6858 ) ; +#16732 = SURFACE_SIDE_STYLE ('',( #11992 ) ) ; +#16733 = SURFACE_STYLE_FILL_AREA ( #19749 ) ; +#16734 = LINE ( 'NONE', #22157, #31374 ) ; +#16735 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.630001745296169000, -4.100000000000000500 ) ) ; +#16736 = VERTEX_POINT ( 'NONE', #33295 ) ; +#16737 = AXIS2_PLACEMENT_3D ( 'NONE', #10511, #33126, #556 ) ; +#16738 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30626 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41095, #6496, #9726 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16739 = CIRCLE ( 'NONE', #33889, 0.2181066972901060100 ) ; +#16740 = CYLINDRICAL_SURFACE ( 'NONE', #3270, 0.1000000000000002600 ) ; +#16743 = EDGE_CURVE ( 'NONE', #3283, #521, #11603, .T. ) ; +#16742 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17762 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17808, #21205, #40787 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16741 = FILL_AREA_STYLE ('',( #5031 ) ) ; +#16744 = VECTOR ( 'NONE', #1646, 1000.000000000000000 ) ; +#16745 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11574 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27787, #34277, #33861 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16746 = SURFACE_STYLE_USAGE ( .BOTH. , #7544 ) ; +#16747 = DIRECTION ( 'NONE', ( 0.7071067811865475700, -0.7071067811865475700, -4.282663737405247600E-031 ) ) ; +#16748 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33995 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8706, #21479, #2407 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16749 = ORIENTED_EDGE ( 'NONE', *, *, #18841, .F. ) ; +#16750 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16751 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8636 ) ) ; +#16752 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#16753 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999992000, -1.500001745296177600, -7.500000000000006200 ) ) ; +#16755 = AXIS2_PLACEMENT_3D ( 'NONE', #26491, #16867, #9927 ) ; +#16754 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.032879073410321300E-016 ) ) ; +#16756 = EDGE_LOOP ( 'NONE', ( #1764, #29896, #33343, #35237 ) ) ; +#16757 = PRESENTATION_STYLE_ASSIGNMENT (( #17384 ) ) ; +#16758 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23154, 'distance_accuracy_value', 'NONE'); +#16759 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, 0.0000000000000000000 ) ) ; +#16760 = SURFACE_SIDE_STYLE ('',( #6046 ) ) ; +#16761 = FACE_OUTER_BOUND ( 'NONE', #41277, .T. ) ; +#16762 = DIRECTION ( 'NONE', ( -0.9961946980917454300, -3.269420623233418300E-015, -0.08715574274766037200 ) ) ; +#16763 = CARTESIAN_POINT ( 'NONE', ( -3.337718385397965300, 0.07499999999999999700, 0.4680226303560859300 ) ) ; +#16764 = EDGE_LOOP ( 'NONE', ( #2451, #41214, #5985, #34850 ) ) ; +#16765 = ADVANCED_FACE ( 'NONE', ( #15664 ), #13934, .T. ) ; +#16766 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #150, 'distance_accuracy_value', 'NONE'); +#16767 = SURFACE_SIDE_STYLE ('',( #11046 ) ) ; +#16768 = FILL_AREA_STYLE_COLOUR ( '', #34848 ) ; +#16769 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#16770 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#16771 = ORIENTED_EDGE ( 'NONE', *, *, #34874, .F. ) ; +#16772 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#16773 = LINE ( 'NONE', #4657, #31447 ) ; +#16774 = ORIENTED_EDGE ( 'NONE', *, *, #37575, .F. ) ; +#16775 = LINE ( 'NONE', #22824, #4611 ) ; +#16776 = PRESENTATION_STYLE_ASSIGNMENT (( #14095 ) ) ; +#16777 = FACE_OUTER_BOUND ( 'NONE', #24693, .T. ) ; +#16778 = LINE ( 'NONE', #41143, #29402 ) ; +#16779 = PLANE ( 'NONE', #35441 ) ; +#16780 = CARTESIAN_POINT ( 'NONE', ( -3.325016342424761200, 0.3282030948168140300, -1.600000000000000800 ) ) ; +#16781 = CARTESIAN_POINT ( 'NONE', ( 3.145000000000000000, -0.2999999999999999900, 0.03300000000000000200 ) ) ; +#16782 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#16783 = FILL_AREA_STYLE_COLOUR ( '', #1675 ) ; +#16784 = EDGE_CURVE ( 'NONE', #27440, #3042, #40915, .T. ) ; +#16785 = CIRCLE ( 'NONE', #11766, 0.2000000000000000400 ) ; +#16786 = FILL_AREA_STYLE_COLOUR ( '', #3371 ) ; +#16787 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#16788 = EDGE_CURVE ( 'NONE', #31405, #29230, #21752, .T. ) ; +#16789 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20733 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25496, #41685, #16007 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16790 = ORIENTED_EDGE ( 'NONE', *, *, #17107, .T. ) ; +#16791 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10268 ), #23295 ) ; +#16792 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, -0.3699982547038309100, -3.999999999999998200 ) ) ; +#16793 = CARTESIAN_POINT ( 'NONE', ( 4.010831726188969900, 0.5300017452961702800, -14.55000000000000100 ) ) ; +#16794 = EDGE_LOOP ( 'NONE', ( #28352, #41122, #17116, #31343 ) ) ; +#16795 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26847 ), #15983 ) ; +#16796 = CARTESIAN_POINT ( 'NONE', ( -3.095000000000000600, 0.07499999999999999700, -0.3254101966250000400 ) ) ; +#16797 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16798 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16799 = EDGE_LOOP ( 'NONE', ( #19415, #9824, #20631 ) ) ; +#16800 = STYLED_ITEM ( 'NONE', ( #36408 ), #37863 ) ; +#16801 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29789 ), #15208 ) ; +#16803 = CYLINDRICAL_SURFACE ( 'NONE', #28683, 0.3600000000000078700 ) ; +#16802 = LINE ( 'NONE', #6806, #29387 ) ; +#16804 = ORIENTED_EDGE ( 'NONE', *, *, #23119, .T. ) ; +#16806 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14650 ), #1687 ) ; +#16805 = AXIS2_PLACEMENT_3D ( 'NONE', #13424, #39701, #646 ) ; +#16808 = EDGE_CURVE ( 'NONE', #7601, #24870, #12789, .T. ) ; +#16807 = AXIS2_PLACEMENT_3D ( 'NONE', #26116, #29489, #39505 ) ; +#16809 = ORIENTED_EDGE ( 'NONE', *, *, #24024, .F. ) ; +#16810 = CIRCLE ( 'NONE', #19177, 0.1499999999998701800 ) ; +#16811 = VERTEX_POINT ( 'NONE', #4041 ) ; +#16812 = CARTESIAN_POINT ( 'NONE', ( 3.315809924354955500, -0.3499999999999811000, -1.679999999999999900 ) ) ; +#16813 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.3292893218813452400, -1.517157287528632300 ) ) ; +#16814 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16815 = VECTOR ( 'NONE', #1507, 1000.000000000000000 ) ; +#16816 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#16817 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.9500017452961654300, -5.475000000000000500 ) ) ; +#16818 = FILL_AREA_STYLE_COLOUR ( '', #14721 ) ; +#16819 = DIRECTION ( 'NONE', ( 1.661826900905435200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16820 = LINE ( 'NONE', #10958, #8208 ) ; +#16821 = FILL_AREA_STYLE_COLOUR ( '', #19732 ) ; +#16822 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16823 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#16824 = ORIENTED_EDGE ( 'NONE', *, *, #10039, .T. ) ; +#16825 = CARTESIAN_POINT ( 'NONE', ( -3.287153716622467100, 0.4208400414769258900, -1.750840041476926500 ) ) ; +#16826 = PLANE ( 'NONE', #36313 ) ; +#16827 = SURFACE_SIDE_STYLE ('',( #2781 ) ) ; +#16828 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.5199999999999842500, -5.299999999999999800 ) ) ; +#16829 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.032879073410322300E-016 ) ) ; +#16830 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#16831 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16832 = PRESENTATION_STYLE_ASSIGNMENT (( #6487 ) ) ; +#16833 = EDGE_LOOP ( 'NONE', ( #22047, #19666, #15657, #477 ) ) ; +#16834 = ORIENTED_EDGE ( 'NONE', *, *, #31136, .T. ) ; +#16835 = EDGE_CURVE ( 'NONE', #25964, #5131, #15155, .T. ) ; +#16836 = VERTEX_POINT ( 'NONE', #36405 ) ; +#16837 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#16838 = VERTEX_POINT ( 'NONE', #20045 ) ; +#16839 = VERTEX_POINT ( 'NONE', #717 ) ; +#16840 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#16841 = EDGE_CURVE ( 'NONE', #561, #38341, #7016, .T. ) ; +#16842 = STYLED_ITEM ( 'NONE', ( #39780 ), #10510 ) ; +#16843 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -6.900000000000000400 ) ) ; +#16844 = LINE ( 'NONE', #38412, #8238 ) ; +#16845 = ORIENTED_EDGE ( 'NONE', *, *, #30285, .T. ) ; +#16846 = VECTOR ( 'NONE', #11982, 1000.000000000000200 ) ; +#16847 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.837630800822890800E-016 ) ) ; +#16848 = SURFACE_STYLE_FILL_AREA ( #2061 ) ; +#16849 = STYLED_ITEM ( 'NONE', ( #30197 ), #14682 ) ; +#16850 = LINE ( 'NONE', #32926, #19393 ) ; +#16851 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.380001745296130600, -6.699999999999994000 ) ) ; +#16852 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9720, 'distance_accuracy_value', 'NONE'); +#16853 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39074 ), #36148 ) ; +#16854 = AXIS2_PLACEMENT_3D ( 'NONE', #480, #6640, #7189 ) ; +#16856 = PRESENTATION_STYLE_ASSIGNMENT (( #36690 ) ) ; +#16855 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13077 ), #14708 ) ; +#16857 = PLANE ( 'NONE', #23497 ) ; +#16859 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5577 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33391, #32965, #36231 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16858 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #490 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34950, #25238, #25093 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16860 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#16861 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16863 = EDGE_CURVE ( 'NONE', #18964, #25234, #25274, .T. ) ; +#16862 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34208 ) ) ; +#16864 = SURFACE_STYLE_FILL_AREA ( #32499 ) ; +#16865 = PLANE ( 'NONE', #31165 ) ; +#16866 = FILL_AREA_STYLE_COLOUR ( '', #20583 ) ; +#16867 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#16869 = AXIS2_PLACEMENT_3D ( 'NONE', #9600, #22435, #18595 ) ; +#16868 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31977 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14303, #24042, #7921 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16870 = PLANE ( 'NONE', #32147 ) ; +#16871 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19501, 'distance_accuracy_value', 'NONE'); +#16872 = EDGE_LOOP ( 'NONE', ( #30310, #29925, #24321, #28086, #31769, #32522, #38205, #28822 ) ) ; +#16873 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16874 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16875 = EDGE_LOOP ( 'NONE', ( #39563, #12206, #34635, #22023 ) ) ; +#16876 = VERTEX_POINT ( 'NONE', #29751 ) ; +#16877 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#16878 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #786, #23190, #26450, #16985 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#16880 = ORIENTED_EDGE ( 'NONE', *, *, #13413, .T. ) ; +#16879 = SURFACE_STYLE_FILL_AREA ( #8560 ) ; +#16881 = ORIENTED_EDGE ( 'NONE', *, *, #20030, .T. ) ; +#16883 = ADVANCED_FACE ( 'NONE', ( #2536 ), #23263, .T. ) ; +#16882 = FACE_OUTER_BOUND ( 'NONE', #11628, .T. ) ; +#16884 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.480001745296169800, -0.2000017452961698200 ) ) ; +#16885 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.180001745296166000, -4.775000000000000400 ) ) ; +#16886 = SURFACE_STYLE_USAGE ( .BOTH. , #10085 ) ; +#16887 = FILL_AREA_STYLE_COLOUR ( '', #22748 ) ; +#16888 = SURFACE_STYLE_FILL_AREA ( #18677 ) ; +#16889 = LINE ( 'NONE', #23769, #19465 ) ; +#16890 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0002094395087002862800, 0.9999999780675458100 ) ) ; +#16891 = SURFACE_SIDE_STYLE ('',( #37207 ) ) ; +#16892 = VECTOR ( 'NONE', #7804, 1000.000000000000000 ) ; +#16893 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8516, 'distance_accuracy_value', 'NONE'); +#16894 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745296168900, -2.904459358809381000 ) ) ; +#16895 = CIRCLE ( 'NONE', #26026, 0.09999999999999999200 ) ; +#16896 = LINE ( 'NONE', #32362, #8283 ) ; +#16897 = PRESENTATION_STYLE_ASSIGNMENT (( #31052 ) ) ; +#16898 = VERTEX_POINT ( 'NONE', #10674 ) ; +#16899 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16900 = LINE ( 'NONE', #14725, #13861 ) ; +#16901 = SURFACE_SIDE_STYLE ('',( #28814 ) ) ; +#16902 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#16903 = EDGE_CURVE ( 'NONE', #36310, #12635, #24238, .T. ) ; +#16904 = FILL_AREA_STYLE_COLOUR ( '', #33791 ) ; +#16905 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16906 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#16907 = EDGE_LOOP ( 'NONE', ( #2743, #11500, #20170 ) ) ; +#16908 = EDGE_CURVE ( 'NONE', #7977, #21579, #39891, .T. ) ; +#16909 = LINE ( 'NONE', #9336, #13364 ) ; +#16910 = SURFACE_STYLE_USAGE ( .BOTH. , #26966 ) ; +#16911 = VECTOR ( 'NONE', #23757, 1000.000000000000000 ) ; +#16912 = SURFACE_STYLE_USAGE ( .BOTH. , #39497 ) ; +#16913 = ORIENTED_EDGE ( 'NONE', *, *, #40714, .T. ) ; +#16914 = STYLED_ITEM ( 'NONE', ( #13824 ), #15526 ) ; +#16915 = VECTOR ( 'NONE', #36962, 1000.000000000000000 ) ; +#16916 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#16917 = SURFACE_STYLE_FILL_AREA ( #34094 ) ; +#16918 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17474, 'distance_accuracy_value', 'NONE'); +#16919 = SURFACE_STYLE_FILL_AREA ( #12779 ) ; +#16920 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16921 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#16922 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, -0.07499999999999999700, 0.4433610521025209700 ) ) ; +#16923 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#16924 = ADVANCED_FACE ( 'NONE', ( #12563 ), #36955, .T. ) ; +#16925 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14763 ), #13375 ) ; +#16926 = ORIENTED_EDGE ( 'NONE', *, *, #25477, .F. ) ; +#16927 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#16928 = ORIENTED_EDGE ( 'NONE', *, *, #17545, .T. ) ; +#16929 = PRESENTATION_STYLE_ASSIGNMENT (( #5148 ) ) ; +#16930 = AXIS2_PLACEMENT_3D ( 'NONE', #10885, #27415, #20690 ) ; +#16931 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #631 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3934, #10705, #33467 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16933 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#16932 = LINE ( 'NONE', #28971, #807 ) ; +#16934 = DIRECTION ( 'NONE', ( -6.056601140521967000E-031, -3.502176061030485800E-045, -1.000000000000000000 ) ) ; +#16935 = EDGE_CURVE ( 'NONE', #15786, #8346, #28275, .T. ) ; +#16936 = ORIENTED_EDGE ( 'NONE', *, *, #24830, .T. ) ; +#16937 = FACE_OUTER_BOUND ( 'NONE', #24442, .T. ) ; +#16938 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16939 = FILL_AREA_STYLE ('',( #1163 ) ) ; +#16940 = ADVANCED_FACE ( 'NONE', ( #6034 ), #21704, .F. ) ; +#16941 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9052 ), #10424 ) ; +#16942 = FILL_AREA_STYLE_COLOUR ( '', #41133 ) ; +#16943 = VERTEX_POINT ( 'NONE', #24097 ) ; +#16944 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38573 ) ) ; +#16945 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#16946 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33469 ), #9619 ) ; +#16947 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#16948 = FACE_OUTER_BOUND ( 'NONE', #39737, .T. ) ; +#16949 = PRESENTATION_STYLE_ASSIGNMENT (( #23329 ) ) ; +#16950 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#16951 = SURFACE_SIDE_STYLE ('',( #41158 ) ) ; +#16952 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#16953 = ORIENTED_EDGE ( 'NONE', *, *, #13903, .T. ) ; +#16954 = VECTOR ( 'NONE', #16538, 1000.000000000000000 ) ; +#16955 = FILL_AREA_STYLE_COLOUR ( '', #12861 ) ; +#16956 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39124, 'distance_accuracy_value', 'NONE'); +#16957 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#16958 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, -0.2999999999999999900, 0.6999999999999999600 ) ) ; +#16959 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#16960 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#16961 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#16962 = ORIENTED_EDGE ( 'NONE', *, *, #10827, .F. ) ; +#16963 = ORIENTED_EDGE ( 'NONE', *, *, #18239, .F. ) ; +#16964 = LINE ( 'NONE', #34863, #36191 ) ; +#16965 = ORIENTED_EDGE ( 'NONE', *, *, #41561, .F. ) ; +#16966 = FILL_AREA_STYLE ('',( #39260 ) ) ; +#16967 = VECTOR ( 'NONE', #33040, 1000.000000000000000 ) ; +#16968 = EDGE_CURVE ( 'NONE', #4344, #10135, #10542, .T. ) ; +#16969 = SURFACE_STYLE_FILL_AREA ( #12768 ) ; +#16970 = EDGE_CURVE ( 'NONE', #2376, #9357, #9001, .T. ) ; +#16971 = CIRCLE ( 'NONE', #12149, 0.1000000000000000500 ) ; +#16972 = DIRECTION ( 'NONE', ( -0.08715574274766037200, 0.0000000000000000000, -0.9961946980917453200 ) ) ; +#16973 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31082, 'distance_accuracy_value', 'NONE'); +#16974 = SURFACE_STYLE_FILL_AREA ( #24938 ) ; +#16975 = ORIENTED_EDGE ( 'NONE', *, *, #190, .T. ) ; +#16976 = CARTESIAN_POINT ( 'NONE', ( 4.170000000000001700, -0.2800000000000026400, -3.299999999999999800 ) ) ; +#16977 = SURFACE_SIDE_STYLE ('',( #5047 ) ) ; +#16978 = VECTOR ( 'NONE', #16708, 1000.000000000000000 ) ; +#16979 = ADVANCED_FACE ( 'NONE', ( #17647 ), #35338, .T. ) ; +#16980 = EDGE_CURVE ( 'NONE', #14912, #605, #18165, .T. ) ; +#16981 = FACE_OUTER_BOUND ( 'NONE', #26558, .T. ) ; +#16982 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7263 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20465, #36270, #33003 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#16983 = SURFACE_SIDE_STYLE ('',( #544 ) ) ; +#16984 = CARTESIAN_POINT ( 'NONE', ( -2.859829086680000000, 0.2000000000000002900, 1.149999999999999900 ) ) ; +#16985 = CARTESIAN_POINT ( 'NONE', ( -3.178333333333019300, 0.07499999999999998300, -0.06128090415826407300 ) ) ; +#16986 = PRESENTATION_STYLE_ASSIGNMENT (( #25935 ) ) ; +#16987 = CARTESIAN_POINT ( 'NONE', ( -3.137984242873222300, -0.2999999999999999300, 0.9623819784616983700 ) ) ; +#16988 = ORIENTED_EDGE ( 'NONE', *, *, #25525, .T. ) ; +#16989 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#16990 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39430 ), #1868 ) ; +#16991 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.661826900905435400E-015, 0.0000000000000000000 ) ) ; +#16992 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#16993 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8298 ), #25664 ) ; +#16994 = FILL_AREA_STYLE ('',( #23771 ) ) ; +#16995 = CARTESIAN_POINT ( 'NONE', ( 3.137984242872999800, 0.2999999999999999900, 0.9623819784616000100 ) ) ; +#16998 = EDGE_CURVE ( 'NONE', #37036, #7549, #8522, .T. ) ; +#16997 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34318 ) ) ; +#16996 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.5199999999999850300, -4.599999999999999600 ) ) ; +#16999 = FACE_OUTER_BOUND ( 'NONE', #32226, .T. ) ; +#17000 = ORIENTED_EDGE ( 'NONE', *, *, #13300, .F. ) ; +#17001 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 0.2800017452961674500, -4.400000000000000400 ) ) ; +#17002 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.8190279881558656400, 0.5737535661042597600 ) ) ; +#17004 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #602 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35447, #35157, #28929 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17003 = AXIS2_PLACEMENT_3D ( 'NONE', #17547, #4945, #30932 ) ; +#17005 = LINE ( 'NONE', #24543, #29097 ) ; +#17006 = VECTOR ( 'NONE', #25008, 1000.000000000000000 ) ; +#17007 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, 0.3000000000000001600, -1.250000000000000000 ) ) ; +#17008 = VECTOR ( 'NONE', #26693, 1000.000000000000000 ) ; +#17009 = AXIS2_PLACEMENT_3D ( 'NONE', #20717, #36769, #20139 ) ; +#17010 = VERTEX_POINT ( 'NONE', #27474 ) ; +#17011 = AXIS2_PLACEMENT_3D ( 'NONE', #33450, #36694, #39923 ) ; +#17012 = ORIENTED_EDGE ( 'NONE', *, *, #19164, .T. ) ; +#17013 = FACE_OUTER_BOUND ( 'NONE', #40451, .T. ) ; +#17014 = FILL_AREA_STYLE ('',( #27053 ) ) ; +#17015 = ORIENTED_EDGE ( 'NONE', *, *, #21890, .T. ) ; +#17016 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.2800017452961689500, -5.150000000000000400 ) ) ; +#17017 = FACE_OUTER_BOUND ( 'NONE', #38925, .T. ) ; +#17018 = SURFACE_SIDE_STYLE ('',( #17489 ) ) ; +#17019 = FACE_OUTER_BOUND ( 'NONE', #39283, .T. ) ; +#17020 = CARTESIAN_POINT ( 'NONE', ( 4.692207176641545600, 0.08000174529616691000, -6.526326723416069300 ) ) ; +#17021 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17022 = FACE_OUTER_BOUND ( 'NONE', #12002, .T. ) ; +#17023 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#17024 = ORIENTED_EDGE ( 'NONE', *, *, #4339, .F. ) ; +#17025 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17026 = CIRCLE ( 'NONE', #15329, 1.200001745296169300 ) ; +#17027 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#17028 = EDGE_LOOP ( 'NONE', ( #35915, #35266, #12532, #30031, #11447, #2808 ) ) ; +#17029 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, -0.3500000000000000300, 0.6999999999999999600 ) ) ; +#17030 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#17031 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#17032 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#17033 = PRESENTATION_STYLE_ASSIGNMENT (( #34781 ) ) ; +#17034 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#17035 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -5.475000000000000500 ) ) ; +#17036 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17037 = EDGE_CURVE ( 'NONE', #25818, #27374, #472, .T. ) ; +#17038 = ORIENTED_EDGE ( 'NONE', *, *, #26706, .F. ) ; +#17039 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#17040 = SURFACE_STYLE_FILL_AREA ( #24907 ) ; +#17041 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17042 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17043 = EDGE_CURVE ( 'NONE', #10135, #23158, #13059, .T. ) ; +#17044 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#17045 = PRESENTATION_STYLE_ASSIGNMENT (( #23287 ) ) ; +#17046 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#17047 = AXIS2_PLACEMENT_3D ( 'NONE', #21424, #12033, #8371 ) ; +#17048 = EDGE_LOOP ( 'NONE', ( #37170, #1343, #26165, #5655 ) ) ; +#17049 = CARTESIAN_POINT ( 'NONE', ( -3.500000000000003100, -2.031000000000001500, -6.749999999999999100 ) ) ; +#17050 = ORIENTED_EDGE ( 'NONE', *, *, #32630, .T. ) ; +#17051 = LINE ( 'NONE', #22737, #34723 ) ; +#17052 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17053 = ORIENTED_EDGE ( 'NONE', *, *, #18870, .F. ) ; +#17054 = FACE_OUTER_BOUND ( 'NONE', #20378, .T. ) ; +#17055 = LINE ( 'NONE', #27287, #36783 ) ; +#17056 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15448 ) ) ; +#17057 = CIRCLE ( 'NONE', #15216, 0.1000000000000002600 ) ; +#17058 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.2699999999999848600, -5.199999999999999300 ) ) ; +#17059 = PRESENTATION_STYLE_ASSIGNMENT (( #33020 ) ) ; +#17060 = VECTOR ( 'NONE', #18360, 1000.000000000000000 ) ; +#17061 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#17062 = CARTESIAN_POINT ( 'NONE', ( 4.735797985667151300, -0.2800000000000026400, -0.3279248189596167300 ) ) ; +#17063 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14278, 'distance_accuracy_value', 'NONE'); +#17064 = EDGE_LOOP ( 'NONE', ( #15709, #24430, #20212, #33494 ) ) ; +#17065 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#17066 = LINE ( 'NONE', #8793, #20126 ) ; +#17067 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17068 = ORIENTED_EDGE ( 'NONE', *, *, #21397, .T. ) ; +#17069 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, 0.2999999999999999900, 0.6780706550913999700 ) ) ; +#17071 = AXIS2_PLACEMENT_3D ( 'NONE', #34700, #12362, #34973 ) ; +#17070 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33022 ), #19244 ) ; +#17072 = LINE ( 'NONE', #25973, #11967 ) ; +#17073 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4057 ) ) ; +#17074 = CARTESIAN_POINT ( 'NONE', ( -4.663004880385256200, 0.2800000000000027500, -0.7580972011844128200 ) ) ; +#17075 = CIRCLE ( 'NONE', #8411, 0.3600000000000078700 ) ; +#17077 = AXIS2_PLACEMENT_3D ( 'NONE', #21014, #8520, #17751 ) ; +#17076 = STYLED_ITEM ( 'NONE', ( #13232 ), #33883 ) ; +#17078 = SURFACE_SIDE_STYLE ('',( #31195 ) ) ; +#17079 = FILL_AREA_STYLE_COLOUR ( '', #28795 ) ; +#17080 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -5.075000000000000200 ) ) ; +#17081 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, 10.30000000000000100, -1.250000000000000000 ) ) ; +#17082 = LINE ( 'NONE', #677, #29168 ) ; +#17083 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#17084 = FILL_AREA_STYLE_COLOUR ( '', #26938 ) ; +#17085 = SURFACE_STYLE_FILL_AREA ( #24836 ) ; +#17086 = VERTEX_POINT ( 'NONE', #33851 ) ; +#17087 = LINE ( 'NONE', #37776, #17590 ) ; +#17088 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17089 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#17090 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521965300E-031 ) ) ; +#17091 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#17092 = EDGE_LOOP ( 'NONE', ( #30696, #14002, #34554, #31848, #35302, #24509 ) ) ; +#17093 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#17094 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, -0.2800000000000028000, 0.0000000000000000000 ) ) ; +#17095 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#17096 = VERTEX_POINT ( 'NONE', #21718 ) ; +#17097 = ORIENTED_EDGE ( 'NONE', *, *, #21243, .T. ) ; +#17098 = PLANE ( 'NONE', #36615 ) ; +#17099 = ORIENTED_EDGE ( 'NONE', *, *, #38856, .F. ) ; +#17100 = CIRCLE ( 'NONE', #34751, 0.1000000000000001600 ) ; +#17101 = LINE ( 'NONE', #6439, #19637 ) ; +#17102 = SURFACE_STYLE_FILL_AREA ( #19492 ) ; +#17103 = VECTOR ( 'NONE', #6794, 1000.000000000000000 ) ; +#17104 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17105 = VERTEX_POINT ( 'NONE', #21159 ) ; +#17106 = ORIENTED_EDGE ( 'NONE', *, *, #6031, .T. ) ; +#17107 = EDGE_CURVE ( 'NONE', #20620, #6894, #35834, .T. ) ; +#17108 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17109 = SURFACE_SIDE_STYLE ('',( #18923 ) ) ; +#17110 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17111 = ADVANCED_FACE ( 'NONE', ( #25230 ), #15196, .F. ) ; +#17112 = EDGE_CURVE ( 'NONE', #33786, #8874, #16336, .T. ) ; +#17113 = STYLED_ITEM ( 'NONE', ( #5421 ), #10143 ) ; +#17114 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid13', #3274 ) ; +#17115 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17116 = ORIENTED_EDGE ( 'NONE', *, *, #9653, .F. ) ; +#17117 = SURFACE_STYLE_USAGE ( .BOTH. , #32916 ) ; +#17118 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17119 = STYLED_ITEM ( 'NONE', ( #3532 ), #23319 ) ; +#17120 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.499998254703823800, -5.449999999999994000 ) ) ; +#17121 = STYLED_ITEM ( 'NONE', ( #9475 ), #14638 ) ; +#17122 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17123 = SURFACE_STYLE_USAGE ( .BOTH. , #4388 ) ; +#17124 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.499998254703833500, -5.049999999999993600 ) ) ; +#17125 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17126 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39831 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14362, #1403, #24100 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17127 = SURFACE_SIDE_STYLE ('',( #31357 ) ) ; +#17128 = EDGE_LOOP ( 'NONE', ( #4658, #19095, #3812, #25432 ) ) ; +#17129 = STYLED_ITEM ( 'NONE', ( #13764 ), #18872 ) ; +#17132 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39554 ), #12771 ) ; +#17131 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17130 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14422 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31995, #274, #19328 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17133 = FILL_AREA_STYLE_COLOUR ( '', #29022 ) ; +#17134 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -2.032879073410321300E-016, -1.000000000000000000 ) ) ; +#17135 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17136 = FILL_AREA_STYLE_COLOUR ( '', #11150 ) ; +#17137 = VERTEX_POINT ( 'NONE', #28314 ) ; +#17138 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#17140 = EDGE_CURVE ( 'NONE', #5131, #25323, #41872, .T. ) ; +#17139 = STYLED_ITEM ( 'NONE', ( #40992 ), #35380 ) ; +#17141 = FILL_AREA_STYLE ('',( #36479 ) ) ; +#17142 = EDGE_LOOP ( 'NONE', ( #15753, #4269, #8186, #33509 ) ) ; +#17143 = ORIENTED_EDGE ( 'NONE', *, *, #37009, .F. ) ; +#17144 = SURFACE_SIDE_STYLE ('',( #15584 ) ) ; +#17145 = CIRCLE ( 'NONE', #30104, 0.1499999999999999700 ) ; +#17147 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22823 ) ) ; +#17146 = STYLED_ITEM ( 'NONE', ( #14475 ), #25398 ) ; +#17148 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#17149 = PRESENTATION_STYLE_ASSIGNMENT (( #12664 ) ) ; +#17150 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17151 = SURFACE_SIDE_STYLE ('',( #4286 ) ) ; +#17152 = ORIENTED_EDGE ( 'NONE', *, *, #29138, .F. ) ; +#17154 = ORIENTED_EDGE ( 'NONE', *, *, #20222, .T. ) ; +#17153 = ADVANCED_FACE ( 'NONE', ( #3470 ), #5581, .F. ) ; +#17155 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -2.322941965694886000, 0.3499999999999999800 ) ) ; +#17156 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3400, 'distance_accuracy_value', 'NONE'); +#17157 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17158 = ORIENTED_EDGE ( 'NONE', *, *, #37753, .F. ) ; +#17159 = SURFACE_STYLE_FILL_AREA ( #29246 ) ; +#17160 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17161 = DIRECTION ( 'NONE', ( 3.281909278875040000E-015, 1.000000000000000000, -3.738809578667646900E-045 ) ) ; +#17162 = ADVANCED_FACE ( 'NONE', ( #32232 ), #1962, .F. ) ; +#17163 = VECTOR ( 'NONE', #22713, 1000.000000000000000 ) ; +#17164 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17165 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17166 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17167 = SURFACE_STYLE_USAGE ( .BOTH. , #10215 ) ; +#17168 = PRESENTATION_STYLE_ASSIGNMENT (( #37149 ) ) ; +#17169 = EDGE_CURVE ( 'NONE', #13736, #7298, #38221, .T. ) ; +#17170 = PRESENTATION_STYLE_ASSIGNMENT (( #11029 ) ) ; +#17171 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17172 = EDGE_CURVE ( 'NONE', #22511, #3198, #5995, .T. ) ; +#17173 = ORIENTED_EDGE ( 'NONE', *, *, #15340, .F. ) ; +#17174 = FILL_AREA_STYLE_COLOUR ( '', #24863 ) ; +#17175 = FILL_AREA_STYLE ('',( #26495 ) ) ; +#17176 = SURFACE_STYLE_USAGE ( .BOTH. , #23943 ) ; +#17177 = VERTEX_POINT ( 'NONE', #13188 ) ; +#17178 = ORIENTED_EDGE ( 'NONE', *, *, #28205, .T. ) ; +#17179 = AXIS2_PLACEMENT_3D ( 'NONE', #13850, #23879, #1181 ) ; +#17180 = FILL_AREA_STYLE ('',( #4164 ) ) ; +#17181 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17182 = SURFACE_STYLE_FILL_AREA ( #7436 ) ; +#17183 = FILL_AREA_STYLE_COLOUR ( '', #14629 ) ; +#17184 = ORIENTED_EDGE ( 'NONE', *, *, #41308, .F. ) ; +#17185 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17186 = ORIENTED_EDGE ( 'NONE', *, *, #15388, .F. ) ; +#17187 = ORIENTED_EDGE ( 'NONE', *, *, #22274, .F. ) ; +#17188 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24591 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13088, #35565, #41613 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17189 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17190 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17191 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#17192 = AXIS2_PLACEMENT_3D ( 'NONE', #41830, #3163, #9627 ) ; +#17193 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.8500017452961657900, -4.875000000000000900 ) ) ; +#17195 = EDGE_CURVE ( 'NONE', #14064, #36449, #39811, .T. ) ; +#17194 = CARTESIAN_POINT ( 'NONE', ( -4.838268912962552900, -1.400001745296196100, -7.460517323015666900 ) ) ; +#17196 = ORIENTED_EDGE ( 'NONE', *, *, #21858, .F. ) ; +#17197 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -2.031000000000000600, -2.594459358809383600 ) ) ; +#17198 = VERTEX_POINT ( 'NONE', #38894 ) ; +#17199 = ADVANCED_FACE ( 'NONE', ( #10507 ), #31693, .F. ) ; +#17200 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000000200, -1.499998254703827100, -5.449999999999994000 ) ) ; +#17201 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#17202 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#17204 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12830 ), #6121 ) ; +#17203 = AXIS2_PLACEMENT_3D ( 'NONE', #13990, #29511, #39246 ) ; +#17205 = SURFACE_STYLE_USAGE ( .BOTH. , #40184 ) ; +#17206 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12833 ) ) ; +#17207 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17208 = PLANE ( 'NONE', #41712 ) ; +#17209 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000100, -1.139998254717369000, -5.049996877890552400 ) ) ; +#17210 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26076, 'distance_accuracy_value', 'NONE'); +#17211 = ORIENTED_EDGE ( 'NONE', *, *, #38174, .T. ) ; +#17212 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17213 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003000, 0.3000000000000150900, -4.249999999999998200 ) ) ; +#17214 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17215 = VERTEX_POINT ( 'NONE', #3593 ) ; +#17216 = LINE ( 'NONE', #40025, #65 ) ; +#17217 = ORIENTED_EDGE ( 'NONE', *, *, #2406, .T. ) ; +#17218 = VECTOR ( 'NONE', #27987, 1000.000000000000000 ) ; +#17219 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#17220 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.4300017452961686900, -6.249999999999998200 ) ) ; +#17221 = VECTOR ( 'NONE', #13846, 1000.000000000000000 ) ; +#17222 = EDGE_LOOP ( 'NONE', ( #21460, #685, #32893, #4460 ) ) ; +#17223 = EDGE_CURVE ( 'NONE', #2978, #3407, #24204, .T. ) ; +#17224 = VERTEX_POINT ( 'NONE', #38046 ) ; +#17225 = VERTEX_POINT ( 'NONE', #5857 ) ; +#17226 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17227 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#17228 = DIRECTION ( 'NONE', ( -5.782411586589413300E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#17229 = CARTESIAN_POINT ( 'NONE', ( -3.139648011050119700, -0.07499999999999998300, -0.07495823101768076000 ) ) ; +#17230 = EDGE_CURVE ( 'NONE', #5582, #10188, #39326, .T. ) ; +#17231 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#17232 = VERTEX_POINT ( 'NONE', #34957 ) ; +#17233 = EDGE_CURVE ( 'NONE', #24035, #8482, #13554, .T. ) ; +#17234 = SURFACE_SIDE_STYLE ('',( #40285 ) ) ; +#17235 = CYLINDRICAL_SURFACE ( 'NONE', #1388, 0.9999999999999991100 ) ; +#17236 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17237 = SURFACE_STYLE_FILL_AREA ( #39119 ) ; +#17238 = FACE_OUTER_BOUND ( 'NONE', #5447, .T. ) ; +#17239 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17240 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17241 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8468 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29506, #35886, #36169 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17242 = DIRECTION ( 'NONE', ( -1.608784677951146400E-031, 1.355252715606881300E-016, 1.000000000000000000 ) ) ; +#17243 = LINE ( 'NONE', #6817, #16221 ) ; +#17244 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#17245 = PLANE ( 'NONE', #30662 ) ; +#17246 = AXIS2_PLACEMENT_3D ( 'NONE', #21760, #41212, #21475 ) ; +#17247 = FILL_AREA_STYLE ('',( #30079 ) ) ; +#17248 = ORIENTED_EDGE ( 'NONE', *, *, #21085, .T. ) ; +#17250 = EDGE_CURVE ( 'NONE', #31436, #30158, #14587, .T. ) ; +#17249 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6683 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7188, #29943, #30227 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17251 = VECTOR ( 'NONE', #15508, 1000.000000000000000 ) ; +#17252 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -500000.0000000000600, -2.604459358691027000 ) ) ; +#17253 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#17254 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17255 = ORIENTED_EDGE ( 'NONE', *, *, #12621, .F. ) ; +#17256 = ORIENTED_EDGE ( 'NONE', *, *, #27739, .F. ) ; +#17257 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.499998254703823800, -5.449999999999994000 ) ) ; +#17258 = VECTOR ( 'NONE', #26209, 1000.000000000000000 ) ; +#17259 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17260 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10897, 'distance_accuracy_value', 'NONE'); +#17262 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11541 ) ) ; +#17261 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35631 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32360, #32217, #6788 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17263 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2264 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17586, #23920, #4422 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17264 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17265 = PRESENTATION_STYLE_ASSIGNMENT (( #16549 ) ) ; +#17266 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30275 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23432, #4072, #26694 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17267 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17268 = ORIENTED_EDGE ( 'NONE', *, *, #36226, .F. ) ; +#17269 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#17270 = ORIENTED_EDGE ( 'NONE', *, *, #9946, .T. ) ; +#17271 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17272 = AXIS2_PLACEMENT_3D ( 'NONE', #3249, #9581, #35316 ) ; +#17273 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17274 = SURFACE_SIDE_STYLE ('',( #18075 ) ) ; +#17275 = FILL_AREA_STYLE_COLOUR ( '', #39809 ) ; +#17276 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#17277 = ORIENTED_EDGE ( 'NONE', *, *, #7883, .F. ) ; +#17278 = ORIENTED_EDGE ( 'NONE', *, *, #2724, .T. ) ; +#17279 = VECTOR ( 'NONE', #7979, 1000.000000000000000 ) ; +#17280 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#17281 = CYLINDRICAL_SURFACE ( 'NONE', #18500, 0.2000017452961698200 ) ; +#17282 = PLANE ( 'NONE', #5039 ) ; +#17283 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#17284 = SURFACE_SIDE_STYLE ('',( #33695 ) ) ; +#17285 = SURFACE_STYLE_USAGE ( .BOTH. , #23162 ) ; +#17286 = CARTESIAN_POINT ( 'NONE', ( 17.14169132166999900, -0.2999999999999999900, -1.649999999999999900 ) ) ; +#17287 = SURFACE_STYLE_USAGE ( .BOTH. , #14044 ) ; +#17288 = VECTOR ( 'NONE', #4144, 1000.000000000000000 ) ; +#17289 = VECTOR ( 'NONE', #21308, 1000.000000000000000 ) ; +#17290 = CARTESIAN_POINT ( 'NONE', ( 4.465000000000003400, 0.08000174529616761700, -7.500000000000000000 ) ) ; +#17291 = LINE ( 'NONE', #10619, #7666 ) ; +#17292 = EDGE_CURVE ( 'NONE', #4316, #10188, #11523, .T. ) ; +#17293 = ORIENTED_EDGE ( 'NONE', *, *, #21403, .T. ) ; +#17294 = EDGE_CURVE ( 'NONE', #11391, #17337, #34280, .T. ) ; +#17295 = CARTESIAN_POINT ( 'NONE', ( 1.149999999999999900, -1.139998254717356800, -6.299996877890552400 ) ) ; +#17296 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.180001745296169500, -4.099999999999999600 ) ) ; +#17297 = FILL_AREA_STYLE_COLOUR ( '', #23582 ) ; +#17298 = ORIENTED_EDGE ( 'NONE', *, *, #27193, .F. ) ; +#17299 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16616 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33112, #19869, #543 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17300 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3718, 'distance_accuracy_value', 'NONE'); +#17301 = FILL_AREA_STYLE_COLOUR ( '', #3399 ) ; +#17302 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#17303 = EDGE_CURVE ( 'NONE', #24627, #352, #25699, .T. ) ; +#17304 = FACE_OUTER_BOUND ( 'NONE', #14728, .T. ) ; +#17305 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17306 = ORIENTED_EDGE ( 'NONE', *, *, #1505, .T. ) ; +#17307 = SURFACE_STYLE_USAGE ( .BOTH. , #20723 ) ; +#17308 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, -0.1999999999999999800, -1.600000000000000300 ) ) ; +#17309 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #827 ) ) ; +#17310 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19337, 'distance_accuracy_value', 'NONE'); +#17311 = LINE ( 'NONE', #16995, #6661 ) ; +#17312 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34618 ) ) ; +#17313 = SURFACE_SIDE_STYLE ('',( #34023 ) ) ; +#17314 = PLANE ( 'NONE', #7521 ) ; +#17316 = EDGE_CURVE ( 'NONE', #35871, #17224, #18132, .T. ) ; +#17315 = STYLED_ITEM ( 'NONE', ( #37747 ), #24229 ) ; +#17317 = FILL_AREA_STYLE ('',( #39039 ) ) ; +#17318 = CLOSED_SHELL ( 'NONE', ( #22268, #2167, #5688, #30577, #34660, #22712 ) ) ; +#17319 = SURFACE_STYLE_FILL_AREA ( #21329 ) ; +#17320 = ORIENTED_EDGE ( 'NONE', *, *, #12340, .F. ) ; +#17321 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#17322 = LINE ( 'NONE', #13945, #14755 ) ; +#17323 = ADVANCED_FACE ( 'NONE', ( #30750 ), #37370, .F. ) ; +#17324 = STYLED_ITEM ( 'NONE', ( #32155 ), #3952 ) ; +#17326 = LINE ( 'NONE', #1931, #11739 ) ; +#17325 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17328 = LINE ( 'NONE', #20961, #12751 ) ; +#17327 = SURFACE_STYLE_USAGE ( .BOTH. , #7963 ) ; +#17329 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41129 ) ) ; +#17330 = STYLED_ITEM ( 'NONE', ( #21351 ), #33915 ) ; +#17331 = FILL_AREA_STYLE ('',( #36263 ) ) ; +#17332 = DIRECTION ( 'NONE', ( 1.156482317317871700E-015, 1.445602896647339700E-016, 1.000000000000000000 ) ) ; +#17334 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10798 ), #19506 ) ; +#17333 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 2.367138801244516300E-016, -1.000000000000000000 ) ) ; +#17335 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.2699999999999847500, -4.599999999999999600 ) ) ; +#17336 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#17337 = VERTEX_POINT ( 'NONE', #24688 ) ; +#17338 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.2000017452961698200 ) ) ; +#17339 = SURFACE_SIDE_STYLE ('',( #17722 ) ) ; +#17340 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28317, 'distance_accuracy_value', 'NONE'); +#17341 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#17342 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17343 = ORIENTED_EDGE ( 'NONE', *, *, #41288, .F. ) ; +#17344 = FILL_AREA_STYLE_COLOUR ( '', #3178 ) ; +#17345 = PRESENTATION_STYLE_ASSIGNMENT (( #31193 ) ) ; +#17346 = ORIENTED_EDGE ( 'NONE', *, *, #39003, .F. ) ; +#17347 = SURFACE_STYLE_USAGE ( .BOTH. , #36415 ) ; +#17348 = ORIENTED_EDGE ( 'NONE', *, *, #34672, .F. ) ; +#17349 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, -0.07499999999999999700, 0.4305619708689000200 ) ) ; +#17350 = LINE ( 'NONE', #2647, #1682 ) ; +#17351 = ORIENTED_EDGE ( 'NONE', *, *, #6623, .F. ) ; +#17352 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.188821734606921400E-015, -4.321659315412274900E-031 ) ) ; +#17353 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#17354 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -1.499998254703823800, -5.449999999999994000 ) ) ; +#17355 = VERTEX_POINT ( 'NONE', #8251 ) ; +#17356 = DIRECTION ( 'NONE', ( -2.341948692522932000E-016, -2.367138801244516800E-016, -1.000000000000000000 ) ) ; +#17357 = FILL_AREA_STYLE ('',( #36552 ) ) ; +#17358 = FACE_OUTER_BOUND ( 'NONE', #3621, .T. ) ; +#17359 = VECTOR ( 'NONE', #38971, 1000.000000000000000 ) ; +#17360 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.6500000000000001300, -3.299999999999999800 ) ) ; +#17361 = ORIENTED_EDGE ( 'NONE', *, *, #27507, .F. ) ; +#17362 = ADVANCED_FACE ( 'NONE', ( #30710 ), #17899, .F. ) ; +#17363 = EDGE_CURVE ( 'NONE', #9683, #14625, #25193, .T. ) ; +#17364 = SURFACE_STYLE_FILL_AREA ( #16656 ) ; +#17365 = SURFACE_STYLE_FILL_AREA ( #26286 ) ; +#17366 = FACE_OUTER_BOUND ( 'NONE', #29939, .T. ) ; +#17367 = VECTOR ( 'NONE', #7483, 1000.000000000000000 ) ; +#17368 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000012400, -1.999998254703822400, -2.599999999999999600 ) ) ; +#17369 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17370 = EDGE_CURVE ( 'NONE', #22294, #15318, #429, .T. ) ; +#17371 = FACE_OUTER_BOUND ( 'NONE', #40749, .T. ) ; +#17372 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16245 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24087, #14762, #30858 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17373 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28203 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30909, #21203, #5067 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17374 = CARTESIAN_POINT ( 'NONE', ( -2.573205080756887100, 1.630001745296169500, -1.650000000000000400 ) ) ; +#17376 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#17375 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.499998254703822900, -6.299999999999993600 ) ) ; +#17377 = ADVANCED_FACE ( 'NONE', ( #35259 ), #18089, .T. ) ; +#17378 = STYLED_ITEM ( 'NONE', ( #15018 ), #14016 ) ; +#17379 = PLANE ( 'NONE', #17569 ) ; +#17380 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#17381 = STYLED_ITEM ( 'NONE', ( #3023 ), #38325 ) ; +#17382 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18190 ) ) ; +#17383 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17384 = SURFACE_STYLE_USAGE ( .BOTH. , #10564 ) ; +#17386 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4363 ) ) ; +#17385 = STYLED_ITEM ( 'NONE', ( #22328 ), #30012 ) ; +#17387 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17388 = ORIENTED_EDGE ( 'NONE', *, *, #15775, .F. ) ; +#17391 = EDGE_CURVE ( 'NONE', #17086, #24056, #34767, .T. ) ; +#17390 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17389 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6533 ) ) ; +#17392 = LINE ( 'NONE', #38936, #33543 ) ; +#17393 = FILL_AREA_STYLE ('',( #20941 ) ) ; +#17394 = VERTEX_POINT ( 'NONE', #37226 ) ; +#17395 = ORIENTED_EDGE ( 'NONE', *, *, #26348, .T. ) ; +#17396 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -0.9500017452961654300, -5.700000000000000200 ) ) ; +#17397 = ORIENTED_EDGE ( 'NONE', *, *, #5961, .F. ) ; +#17398 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23727, 'distance_accuracy_value', 'NONE'); +#17399 = SURFACE_STYLE_USAGE ( .BOTH. , #17109 ) ; +#17400 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17401 = ORIENTED_EDGE ( 'NONE', *, *, #30074, .F. ) ; +#17403 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41725 ), #11421 ) ; +#17402 = STYLED_ITEM ( 'NONE', ( #3393 ), #25246 ) ; +#17404 = PLANE ( 'NONE', #12810 ) ; +#17405 = PRESENTATION_STYLE_ASSIGNMENT (( #37146 ) ) ; +#17406 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169000, -3.814459358809377100 ) ) ; +#17407 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -5.706431195920516700E-031 ) ) ; +#17408 = FILL_AREA_STYLE_COLOUR ( '', #2313 ) ; +#17409 = PRESENTATION_STYLE_ASSIGNMENT (( #18268 ) ) ; +#17410 = SURFACE_STYLE_FILL_AREA ( #31244 ) ; +#17411 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#17412 = CYLINDRICAL_SURFACE ( 'NONE', #8370, 0.2000000000000000100 ) ; +#17413 = FACE_OUTER_BOUND ( 'NONE', #16027, .T. ) ; +#17414 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23568, 'distance_accuracy_value', 'NONE'); +#17415 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17416 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#17417 = ADVANCED_FACE ( 'NONE', ( #4926 ), #8671, .T. ) ; +#17418 = FILL_AREA_STYLE_COLOUR ( '', #41826 ) ; +#17419 = DIRECTION ( 'NONE', ( 4.336808689942015400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#17420 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -2.322941965694886000, -1.249999999999999800 ) ) ; +#17421 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, -0.6500000000000001300, -3.299999999999999800 ) ) ; +#17422 = FILL_AREA_STYLE ('',( #33366 ) ) ; +#17423 = ORIENTED_EDGE ( 'NONE', *, *, #22909, .F. ) ; +#17424 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -7.200000000000000200 ) ) ; +#17425 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, -2.031000000000001500, -6.849999999999999600 ) ) ; +#17426 = EDGE_CURVE ( 'NONE', #27728, #20484, #24150, .T. ) ; +#17427 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#17428 = VERTEX_POINT ( 'NONE', #11368 ) ; +#17429 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17430 = EDGE_CURVE ( 'NONE', #2886, #21057, #29694, .T. ) ; +#17431 = AXIS2_PLACEMENT_3D ( 'NONE', #36763, #20976, #1629 ) ; +#17432 = FACE_OUTER_BOUND ( 'NONE', #236, .T. ) ; +#17433 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#17434 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#17435 = ORIENTED_EDGE ( 'NONE', *, *, #10610, .F. ) ; +#17436 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000004100, 0.2818014882867047000, -2.095470210943120000 ) ) ; +#17437 = FACE_OUTER_BOUND ( 'NONE', #10321, .T. ) ; +#17438 = ORIENTED_EDGE ( 'NONE', *, *, #8894, .F. ) ; +#17439 = SURFACE_STYLE_FILL_AREA ( #38033 ) ; +#17440 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12260 ), #25306 ) ; +#17441 = CIRCLE ( 'NONE', #2196, 1.499999999999868100 ) ; +#17442 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#17443 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.380001745296134000, -6.699999999999994000 ) ) ; +#17444 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28626, 'distance_accuracy_value', 'NONE'); +#17445 = CARTESIAN_POINT ( 'NONE', ( 3.279646847963632700, -0.4222103424663047900, -1.751984083259842100 ) ) ; +#17447 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20178 ), #161 ) ; +#17446 = AXIS2_PLACEMENT_3D ( 'NONE', #20413, #10473, #39432 ) ; +#17448 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#17449 = PRESENTATION_STYLE_ASSIGNMENT (( #11145 ) ) ; +#17450 = ORIENTED_EDGE ( 'NONE', *, *, #9881, .T. ) ; +#17451 = FILL_AREA_STYLE ('',( #7676 ) ) ; +#17453 = EDGE_CURVE ( 'NONE', #10667, #13361, #29153, .T. ) ; +#17452 = AXIS2_PLACEMENT_3D ( 'NONE', #20806, #11144, #33903 ) ; +#17454 = CARTESIAN_POINT ( 'NONE', ( -3.176452843275133100, -0.07499999999999999700, -0.1332099232685595200 ) ) ; +#17455 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 2.322941965694886000, -1.250000000000000000 ) ) ; +#17456 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#17458 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10334 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36660, #39897, #10799 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17457 = STYLED_ITEM ( 'NONE', ( #24999 ), #26259 ) ; +#17459 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#17460 = VERTEX_POINT ( 'NONE', #41175 ) ; +#17461 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745296168900, -3.204459358809380800 ) ) ; +#17462 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17463 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -5.075000000000000200 ) ) ; +#17464 = EDGE_LOOP ( 'NONE', ( #14505, #5066, #34453, #7059 ) ) ; +#17465 = ADVANCED_FACE ( 'NONE', ( #37236 ), #31841, .F. ) ; +#17466 = CARTESIAN_POINT ( 'NONE', ( 3.629999999999999900, -1.499998254703818900, -6.299999999999993600 ) ) ; +#17467 = ORIENTED_EDGE ( 'NONE', *, *, #38564, .T. ) ; +#17468 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17469 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18700, 'distance_accuracy_value', 'NONE'); +#17470 = LINE ( 'NONE', #27066, #6306 ) ; +#17471 = CIRCLE ( 'NONE', #19747, 0.04999999999999969700 ) ; +#17472 = PLANE ( 'NONE', #12154 ) ; +#17473 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#17474 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17475 = VERTEX_POINT ( 'NONE', #34960 ) ; +#17476 = LINE ( 'NONE', #36063, #37148 ) ; +#17477 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#17478 = CIRCLE ( 'NONE', #36547, 0.1000000000000002600 ) ; +#17479 = LINE ( 'NONE', #43, #2830 ) ; +#17480 = FILL_AREA_STYLE ('',( #1668 ) ) ; +#17481 = ORIENTED_EDGE ( 'NONE', *, *, #23119, .F. ) ; +#17482 = FILL_AREA_STYLE ('',( #14084 ) ) ; +#17483 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27870, 'distance_accuracy_value', 'NONE'); +#17484 = LINE ( 'NONE', #38587, #34164 ) ; +#17485 = EDGE_CURVE ( 'NONE', #4481, #12866, #5417, .T. ) ; +#17486 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17487 = LINE ( 'NONE', #18409, #5339 ) ; +#17488 = SURFACE_STYLE_FILL_AREA ( #13198 ) ; +#17489 = SURFACE_STYLE_FILL_AREA ( #32541 ) ; +#17490 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#17491 = ORIENTED_EDGE ( 'NONE', *, *, #1176, .F. ) ; +#17492 = EDGE_CURVE ( 'NONE', #3001, #9006, #15761, .T. ) ; +#17493 = CARTESIAN_POINT ( 'NONE', ( 3.680000000000000200, -1.499998254703818900, -6.699999999999994000 ) ) ; +#17494 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17495 = SURFACE_STYLE_FILL_AREA ( #28827 ) ; +#17496 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24815 ), #38306 ) ; +#17497 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 0.2800017452961672300, -6.850000000000000500 ) ) ; +#17498 = FILL_AREA_STYLE ('',( #36551 ) ) ; +#17499 = SURFACE_SIDE_STYLE ('',( #25033 ) ) ; +#17500 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#17501 = AXIS2_PLACEMENT_3D ( 'NONE', #15862, #2785, #22383 ) ; +#17502 = VECTOR ( 'NONE', #35492, 1000.000000000000000 ) ; +#17503 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32647, 'distance_accuracy_value', 'NONE'); +#17504 = SURFACE_STYLE_FILL_AREA ( #1275 ) ; +#17505 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#17506 = ORIENTED_EDGE ( 'NONE', *, *, #41368, .F. ) ; +#17508 = EDGE_CURVE ( 'NONE', #33357, #23596, #21101, .T. ) ; +#17507 = STYLED_ITEM ( 'NONE', ( #20478 ), #37090 ) ; +#17509 = ORIENTED_EDGE ( 'NONE', *, *, #26410, .T. ) ; +#17510 = CARTESIAN_POINT ( 'NONE', ( -4.551493546202550500, -1.300001745296164500, -6.639019554637396700 ) ) ; +#17511 = ORIENTED_EDGE ( 'NONE', *, *, #34976, .F. ) ; +#17512 = EDGE_LOOP ( 'NONE', ( #30969, #35862, #29654, #10378 ) ) ; +#17513 = PRESENTATION_STYLE_ASSIGNMENT (( #37994 ) ) ; +#17515 = STYLED_ITEM ( 'NONE', ( #5257 ), #2737 ) ; +#17514 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36174 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34397, #12193, #41027 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17516 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.630424214906980300, -1.149999999999999900 ) ) ; +#17517 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#17518 = LINE ( 'NONE', #25652, #26622 ) ; +#17519 = LINE ( 'NONE', #12656, #5332 ) ; +#17520 = FACE_OUTER_BOUND ( 'NONE', #6426, .T. ) ; +#17521 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17522 = ORIENTED_EDGE ( 'NONE', *, *, #26441, .F. ) ; +#17523 = AXIS2_PLACEMENT_3D ( 'NONE', #39371, #16234, #29347 ) ; +#17524 = CIRCLE ( 'NONE', #30474, 0.3600000000000078700 ) ; +#17525 = ORIENTED_EDGE ( 'NONE', *, *, #14042, .T. ) ; +#17526 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17527 = LINE ( 'NONE', #25805, #30146 ) ; +#17528 = CARTESIAN_POINT ( 'NONE', ( 4.551493546202548800, -0.1199982547038320600, -6.639019554637394000 ) ) ; +#17529 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17530 = SURFACE_STYLE_FILL_AREA ( #705 ) ; +#17531 = PLANE ( 'NONE', #9592 ) ; +#17532 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#17533 = FILL_AREA_STYLE ('',( #11007 ) ) ; +#17534 = ADVANCED_FACE ( 'NONE', ( #12447 ), #19216, .F. ) ; +#17535 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17536 = VECTOR ( 'NONE', #11356, 1000.000000000000000 ) ; +#17537 = LINE ( 'NONE', #25907, #26115 ) ; +#17538 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17539 = PRESENTATION_STYLE_ASSIGNMENT (( #20417 ) ) ; +#17540 = CIRCLE ( 'NONE', #32064, 0.2000000000000007300 ) ; +#17541 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 0.6800017452961688600, -1.650000000000000400 ) ) ; +#17542 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37572, 'distance_accuracy_value', 'NONE'); +#17543 = EDGE_CURVE ( 'NONE', #32610, #23451, #24109, .T. ) ; +#17544 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17545 = EDGE_CURVE ( 'NONE', #41796, #33246, #6437, .T. ) ; +#17546 = ORIENTED_EDGE ( 'NONE', *, *, #11534, .F. ) ; +#17547 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#17548 = PLANE ( 'NONE', #17572 ) ; +#17549 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#17550 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000012100, -1.999998254703822000, -2.550738490052340400 ) ) ; +#17551 = EDGE_CURVE ( 'NONE', #23037, #7549, #18578, .T. ) ; +#17552 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12826, 'distance_accuracy_value', 'NONE'); +#17553 = FILL_AREA_STYLE ('',( #7780 ) ) ; +#17554 = ORIENTED_EDGE ( 'NONE', *, *, #35653, .F. ) ; +#17555 = ORIENTED_EDGE ( 'NONE', *, *, #29150, .T. ) ; +#17556 = ORIENTED_EDGE ( 'NONE', *, *, #2893, .T. ) ; +#17557 = STYLED_ITEM ( 'NONE', ( #12531 ), #17162 ) ; +#17558 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17559 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#17560 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#17561 = CYLINDRICAL_SURFACE ( 'NONE', #13836, 0.3600000000000078700 ) ; +#17562 = VECTOR ( 'NONE', #27636, 1000.000000000000000 ) ; +#17563 = SURFACE_STYLE_USAGE ( .BOTH. , #5099 ) ; +#17564 = EDGE_CURVE ( 'NONE', #18968, #8951, #31673, .T. ) ; +#17565 = VECTOR ( 'NONE', #9095, 1000.000000000000000 ) ; +#17566 = FACE_OUTER_BOUND ( 'NONE', #19905, .T. ) ; +#17567 = VERTEX_POINT ( 'NONE', #32684 ) ; +#17568 = EDGE_LOOP ( 'NONE', ( #16809, #7486, #22155, #5860 ) ) ; +#17569 = AXIS2_PLACEMENT_3D ( 'NONE', #23853, #4506, #30488 ) ; +#17570 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#17571 = FILL_AREA_STYLE ('',( #39286 ) ) ; +#17572 = AXIS2_PLACEMENT_3D ( 'NONE', #17962, #5226, #11293 ) ; +#17573 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 0.1000000000000145800, -1.949999999999999500 ) ) ; +#17574 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#17577 = EDGE_CURVE ( 'NONE', #13361, #30260, #29652, .T. ) ; +#17576 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1311 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25045, #15131, #2726 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17575 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#17578 = CARTESIAN_POINT ( 'NONE', ( 4.856063034915695900, -0.2800000000000026400, -0.6228541982233617400 ) ) ; +#17579 = PRESENTATION_STYLE_ASSIGNMENT (( #25055 ) ) ; +#17580 = ADVANCED_FACE ( 'NONE', ( #4405 ), #26627, .T. ) ; +#17581 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#17582 = LINE ( 'NONE', #4142, #21154 ) ; +#17584 = AXIS2_PLACEMENT_3D ( 'NONE', #23237, #14357, #17966 ) ; +#17583 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37436 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23887, #7777, #30800 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17585 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34329 ) ) ; +#17586 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17587 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3745 ) ) ; +#17588 = LINE ( 'NONE', #32106, #25170 ) ; +#17589 = ORIENTED_EDGE ( 'NONE', *, *, #36372, .T. ) ; +#17590 = VECTOR ( 'NONE', #11908, 1000.000000000000000 ) ; +#17591 = AXIS2_PLACEMENT_3D ( 'NONE', #6700, #32831, #33114 ) ; +#17592 = FILL_AREA_STYLE ('',( #11318 ) ) ; +#17593 = FILL_AREA_STYLE ('',( #36916 ) ) ; +#17594 = ADVANCED_FACE ( 'NONE', ( #17566 ), #34207, .F. ) ; +#17595 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -6.800000000000000700 ) ) ; +#17596 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#17597 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#17598 = VERTEX_POINT ( 'NONE', #29432 ) ; +#17599 = EDGE_LOOP ( 'NONE', ( #1563, #37429, #12540, #8801 ) ) ; +#17600 = PRESENTATION_STYLE_ASSIGNMENT (( #34900 ) ) ; +#17601 = ORIENTED_EDGE ( 'NONE', *, *, #21896, .F. ) ; +#17602 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#17603 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#17604 = SURFACE_SIDE_STYLE ('',( #31009 ) ) ; +#17605 = LINE ( 'NONE', #32405, #15064 ) ; +#17606 = FACE_OUTER_BOUND ( 'NONE', #3374, .T. ) ; +#17607 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17608 = CARTESIAN_POINT ( 'NONE', ( 4.700922750916311600, -1.300001745296165000, -6.625946193225249000 ) ) ; +#17609 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#17611 = PRESENTATION_STYLE_ASSIGNMENT (( #30873 ) ) ; +#17610 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7785, 'distance_accuracy_value', 'NONE'); +#17612 = EDGE_LOOP ( 'NONE', ( #27922, #9468, #3126, #14265 ) ) ; +#17613 = PRESENTATION_STYLE_ASSIGNMENT (( #7400 ) ) ; +#17614 = ORIENTED_EDGE ( 'NONE', *, *, #26709, .T. ) ; +#17615 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#17616 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#17617 = ORIENTED_EDGE ( 'NONE', *, *, #15925, .F. ) ; +#17618 = EDGE_CURVE ( 'NONE', #32806, #19265, #7873, .T. ) ; +#17619 = FILL_AREA_STYLE ('',( #20887 ) ) ; +#17620 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#17621 = EDGE_CURVE ( 'NONE', #14466, #29937, #35216, .T. ) ; +#17622 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.499998254703836900, -5.449999999999994000 ) ) ; +#17623 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#17624 = VECTOR ( 'NONE', #17770, 1000.000000000000000 ) ; +#17625 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24686 ), #40036 ) ; +#17626 = ADVANCED_FACE ( 'NONE', ( #356 ), #24067, .F. ) ; +#17627 = EDGE_LOOP ( 'NONE', ( #31016, #27550, #39567, #20450 ) ) ; +#17628 = CARTESIAN_POINT ( 'NONE', ( 2.149999999999999900, -1.499998254703822900, -6.699999999999994000 ) ) ; +#17629 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#17630 = ORIENTED_EDGE ( 'NONE', *, *, #28960, .F. ) ; +#17631 = DIRECTION ( 'NONE', ( -2.168404344971012800E-015, -1.837630800822890800E-016, -1.000000000000000000 ) ) ; +#17632 = FILL_AREA_STYLE ('',( #13941 ) ) ; +#17633 = EDGE_LOOP ( 'NONE', ( #13706, #28462, #7944, #9025 ) ) ; +#17634 = STYLED_ITEM ( 'NONE', ( #57 ), #37966 ) ; +#17635 = CIRCLE ( 'NONE', #29278, 0.1000000000000002600 ) ; +#17636 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.499998254703828600, -5.449999999999994000 ) ) ; +#17637 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12452 ) ) ; +#17638 = ORIENTED_EDGE ( 'NONE', *, *, #14462, .F. ) ; +#17639 = ORIENTED_EDGE ( 'NONE', *, *, #22903, .T. ) ; +#17640 = VERTEX_POINT ( 'NONE', #39167 ) ; +#17641 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17642 = VECTOR ( 'NONE', #37163, 1000.000000000000000 ) ; +#17643 = SURFACE_STYLE_FILL_AREA ( #5576 ) ; +#17645 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9737 ), #24372 ) ; +#17644 = AXIS2_PLACEMENT_3D ( 'NONE', #9325, #15437, #12304 ) ; +#17646 = SURFACE_SIDE_STYLE ('',( #32010 ) ) ; +#17647 = FACE_OUTER_BOUND ( 'NONE', #11323, .T. ) ; +#17649 = EDGE_CURVE ( 'NONE', #34154, #35736, #1901, .T. ) ; +#17648 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16260 ) ) ; +#17650 = EDGE_LOOP ( 'NONE', ( #37198, #10214, #21093, #1983 ) ) ; +#17651 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#17652 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17653 = ORIENTED_EDGE ( 'NONE', *, *, #24473, .T. ) ; +#17654 = EDGE_LOOP ( 'NONE', ( #30985, #18773, #26056, #1934 ) ) ; +#17655 = SURFACE_STYLE_FILL_AREA ( #41301 ) ; +#17656 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26285 ) ) ; +#17657 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#17658 = STYLED_ITEM ( 'NONE', ( #23179 ), #24954 ) ; +#17659 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.499998254703827100, -5.449999999999994000 ) ) ; +#17660 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid23', #37686 ) ; +#17661 = ORIENTED_EDGE ( 'NONE', *, *, #11670, .T. ) ; +#17662 = SURFACE_STYLE_FILL_AREA ( #11090 ) ; +#17663 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#17664 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.1000000000000149000, -4.250000000000000000 ) ) ; +#17665 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17666 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -5.575000000000001100 ) ) ; +#17667 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17668 = PLANE ( 'NONE', #4296 ) ; +#17669 = ORIENTED_EDGE ( 'NONE', *, *, #40486, .T. ) ; +#17670 = VECTOR ( 'NONE', #11348, 1000.000000000000000 ) ; +#17671 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#17672 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17673 = EDGE_CURVE ( 'NONE', #6948, #11831, #24626, .T. ) ; +#17674 = ADVANCED_FACE ( 'NONE', ( #19065 ), #5333, .T. ) ; +#17675 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.139998254717362600, -5.049996877890552400 ) ) ; +#17676 = ORIENTED_EDGE ( 'NONE', *, *, #1293, .F. ) ; +#17677 = DIRECTION ( 'NONE', ( 2.168404344971012800E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#17678 = CARTESIAN_POINT ( 'NONE', ( -3.208603896932106900, 0.6500000000000002400, -3.300000000000000300 ) ) ; +#17679 = VERTEX_POINT ( 'NONE', #7680 ) ; +#17680 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000800, -0.5000000000000879300 ) ) ; +#17681 = FACE_OUTER_BOUND ( 'NONE', #4443, .T. ) ; +#17682 = EDGE_CURVE ( 'NONE', #2345, #21897, #1632, .T. ) ; +#17683 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35793 ) ) ; +#17684 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17685 = PLANE ( 'NONE', #21799 ) ; +#17686 = CLOSED_SHELL ( 'NONE', ( #19312, #29001, #8090, #17835, #6104, #30938 ) ) ; +#17687 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17688 = EDGE_LOOP ( 'NONE', ( #6904, #4894, #5609, #39026 ) ) ; +#17689 = VERTEX_POINT ( 'NONE', #1105 ) ; +#17690 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24651, 'distance_accuracy_value', 'NONE'); +#17691 = SURFACE_STYLE_USAGE ( .BOTH. , #24604 ) ; +#17692 = STYLED_ITEM ( 'NONE', ( #14478 ), #15041 ) ; +#17693 = DIRECTION ( 'NONE', ( 0.3746065948719964300, 0.0000000000000000000, 0.9271838539784911200 ) ) ; +#17694 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 1.084202172485504600E-015 ) ) ; +#17695 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -500000.0000000000600, -3.214459358691019700 ) ) ; +#17696 = EDGE_LOOP ( 'NONE', ( #27599, #25533, #13113, #33320 ) ) ; +#17697 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40106 ), #23363 ) ; +#17698 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17699 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8731 ), #6824 ) ; +#17700 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#17702 = AXIS2_PLACEMENT_3D ( 'NONE', #15881, #25114, #34967 ) ; +#17701 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34995 ), #20686 ) ; +#17703 = SURFACE_SIDE_STYLE ('',( #33341 ) ) ; +#17704 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17705 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.478176394252580200E-017, -6.082356018693180500E-031 ) ) ; +#17707 = EDGE_CURVE ( 'NONE', #11907, #22693, #29612, .T. ) ; +#17706 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8438 ) ) ; +#17708 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17709 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#17710 = STYLED_ITEM ( 'NONE', ( #22541 ), #25447 ) ; +#17711 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -10.30000000000000100, -1.250000000000000000 ) ) ; +#17712 = ORIENTED_EDGE ( 'NONE', *, *, #7650, .F. ) ; +#17713 = SURFACE_STYLE_USAGE ( .BOTH. , #20975 ) ; +#17714 = FACE_OUTER_BOUND ( 'NONE', #11913, .T. ) ; +#17715 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17716 = FILL_AREA_STYLE_COLOUR ( '', #877 ) ; +#17717 = ORIENTED_EDGE ( 'NONE', *, *, #2499, .T. ) ; +#17718 = LINE ( 'NONE', #6411, #2574 ) ; +#17719 = VERTEX_POINT ( 'NONE', #23792 ) ; +#17720 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#17721 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17722 = SURFACE_STYLE_FILL_AREA ( #32858 ) ; +#17723 = ORIENTED_EDGE ( 'NONE', *, *, #21356, .F. ) ; +#17724 = LINE ( 'NONE', #27397, #563 ) ; +#17725 = ORIENTED_EDGE ( 'NONE', *, *, #26599, .T. ) ; +#17726 = CLOSED_SHELL ( 'NONE', ( #25840, #41753, #35380, #3952, #40669, #27124, #27722, #37674, #21693, #35971, #10393, #12683, #33250, #40886, #29211, #9951, #1743, #28334, #17377, #37004, #17362, #35799, #30229, #10127, #22672, #32222, #14137, #38081, #26259, #15269, #1793, #10550, #13121, #28547, #25293, #19968, #18372, #18422, #1537, #41497, #33041, #28428, #18257, #20992, #39051, #11558, #18832, #28144, #34499, #11696, #34175, #37040, #6911, #12697, #9511, #35003, #11182, #19763, #10560, #27891, #2525, #29222, #15316, #40371, #14604, #31723, #41508, #33883, #24438, #22044, #23336, #15012, #8819, #8161, #27290, #41015, #33867 ) ) ; +#17727 = CIRCLE ( 'NONE', #14899, 0.2000017452961698200 ) ; +#17728 = SURFACE_STYLE_USAGE ( .BOTH. , #21398 ) ; +#17729 = FILL_AREA_STYLE ('',( #37054 ) ) ; +#17730 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000012100, -1.999998254703822000, -3.500000000000000000 ) ) ; +#17731 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#17732 = FILL_AREA_STYLE ('',( #1101 ) ) ; +#17733 = ORIENTED_EDGE ( 'NONE', *, *, #38934, .F. ) ; +#17734 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#17735 = FILL_AREA_STYLE_COLOUR ( '', #19513 ) ; +#17736 = EDGE_CURVE ( 'NONE', #33935, #16838, #38491, .T. ) ; +#17737 = PRESENTATION_STYLE_ASSIGNMENT (( #25710 ) ) ; +#17738 = LINE ( 'NONE', #10632, #7064 ) ; +#17739 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17740 = EDGE_CURVE ( 'NONE', #6786, #9995, #30096, .T. ) ; +#17741 = SURFACE_STYLE_FILL_AREA ( #30133 ) ; +#17742 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#17743 = FILL_AREA_STYLE_COLOUR ( '', #13929 ) ; +#17744 = VECTOR ( 'NONE', #27307, 1000.000000000000000 ) ; +#17745 = CONICAL_SURFACE ( 'NONE', #12318, 0.3000000000000001000, 0.3490658503988666700 ) ; +#17746 = ADVANCED_FACE ( 'NONE', ( #12899 ), #2344, .T. ) ; +#17747 = STYLED_ITEM ( 'NONE', ( #35594 ), #15472 ) ; +#17748 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.5199999999999843600, -4.500000000000000000 ) ) ; +#17749 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7946, 'distance_accuracy_value', 'NONE'); +#17750 = ORIENTED_EDGE ( 'NONE', *, *, #4669, .F. ) ; +#17751 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#17752 = PRESENTATION_STYLE_ASSIGNMENT (( #2693 ) ) ; +#17753 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.499998254703835300, -5.449999999999994000 ) ) ; +#17754 = AXIS2_PLACEMENT_3D ( 'NONE', #41166, #41024, #36931 ) ; +#17755 = CARTESIAN_POINT ( 'NONE', ( -2.573205080756887100, 1.630001745296169500, -1.750000000000000200 ) ) ; +#17756 = EDGE_LOOP ( 'NONE', ( #17811, #13210, #25028, #28003 ) ) ; +#17757 = CYLINDRICAL_SURFACE ( 'NONE', #28910, 0.2000000000000000100 ) ; +#17758 = ORIENTED_EDGE ( 'NONE', *, *, #10697, .T. ) ; +#17759 = STYLED_ITEM ( 'NONE', ( #12529 ), #6911 ) ; +#17760 = AXIS2_PLACEMENT_3D ( 'NONE', #7663, #17434, #33794 ) ; +#17761 = LINE ( 'NONE', #921, #35947 ) ; +#17762 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17808, 'distance_accuracy_value', 'NONE'); +#17765 = EDGE_CURVE ( 'NONE', #39241, #15706, #27593, .T. ) ; +#17764 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17763 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7705 ), #41529 ) ; +#17766 = PRESENTATION_STYLE_ASSIGNMENT (( #6775 ) ) ; +#17767 = VERTEX_POINT ( 'NONE', #27313 ) ; +#17768 = PRESENTATION_STYLE_ASSIGNMENT (( #6257 ) ) ; +#17769 = EDGE_LOOP ( 'NONE', ( #19601, #2441, #21779, #7369 ) ) ; +#17770 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#17771 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -3.299999999999999800 ) ) ; +#17772 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17774 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8039 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1774, #12162, #41274 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17773 = AXIS2_PLACEMENT_3D ( 'NONE', #5071, #11551, #21485 ) ; +#17775 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.499998254703824400, -6.699999999999994000 ) ) ; +#17776 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13374 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15390, #40947, #8587 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17777 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#17778 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29603 ) ) ; +#17779 = ORIENTED_EDGE ( 'NONE', *, *, #7415, .T. ) ; +#17780 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875040400E-015, -6.056601140521968800E-031 ) ) ; +#17781 = ORIENTED_EDGE ( 'NONE', *, *, #19866, .T. ) ; +#17782 = LINE ( 'NONE', #41038, #9132 ) ; +#17783 = SURFACE_STYLE_USAGE ( .BOTH. , #4482 ) ; +#17784 = FACE_OUTER_BOUND ( 'NONE', #23445, .T. ) ; +#17785 = FILL_AREA_STYLE_COLOUR ( '', #22128 ) ; +#17786 = FILL_AREA_STYLE ('',( #30753 ) ) ; +#17787 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17788 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#17789 = ADVANCED_FACE ( 'NONE', ( #19023 ), #34233, .T. ) ; +#17790 = PRESENTATION_STYLE_ASSIGNMENT (( #2928 ) ) ; +#17791 = FILL_AREA_STYLE_COLOUR ( '', #39189 ) ; +#17792 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17793 = EDGE_LOOP ( 'NONE', ( #37512, #37758, #2383, #27877 ) ) ; +#17794 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#17795 = SURFACE_STYLE_USAGE ( .BOTH. , #27654 ) ; +#17796 = CARTESIAN_POINT ( 'NONE', ( 4.821303021499042900, 0.2799999999999973100, -0.3590461068823621000 ) ) ; +#17797 = ORIENTED_EDGE ( 'NONE', *, *, #35291, .F. ) ; +#17798 = ADVANCED_FACE ( 'NONE', ( #28600 ), #40707, .F. ) ; +#17799 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17800 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000030900, 0.4300017452961686900, -6.450000000000000200 ) ) ; +#17801 = EDGE_CURVE ( 'NONE', #18341, #4734, #41731, .T. ) ; +#17802 = PRESENTATION_STYLE_ASSIGNMENT (( #3402 ) ) ; +#17803 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#17804 = ORIENTED_EDGE ( 'NONE', *, *, #32825, .T. ) ; +#17805 = EDGE_CURVE ( 'NONE', #13925, #30601, #40704, .T. ) ; +#17806 = PLANE ( 'NONE', #27576 ) ; +#17807 = AXIS2_PLACEMENT_3D ( 'NONE', #32583, #35850, #16485 ) ; +#17808 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17809 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17810 = ORIENTED_EDGE ( 'NONE', *, *, #35720, .T. ) ; +#17811 = ORIENTED_EDGE ( 'NONE', *, *, #27300, .F. ) ; +#17812 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5604 ), #22917 ) ; +#17813 = VECTOR ( 'NONE', #23147, 1000.000000000000000 ) ; +#17814 = CARTESIAN_POINT ( 'NONE', ( -3.273571428571023100, -0.07499999999999999700, -0.08583148475006677200 ) ) ; +#17815 = SURFACE_STYLE_FILL_AREA ( #1273 ) ; +#17816 = SURFACE_SIDE_STYLE ('',( #27995 ) ) ; +#17817 = CARTESIAN_POINT ( 'NONE', ( 3.217812702993399800, 0.07499999999999999700, -0.04732283915649258800 ) ) ; +#17818 = STYLED_ITEM ( 'NONE', ( #21010 ), #12220 ) ; +#17819 = FACE_OUTER_BOUND ( 'NONE', #32339, .T. ) ; +#17820 = LINE ( 'NONE', #15416, #28408 ) ; +#17821 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22259, 'distance_accuracy_value', 'NONE'); +#17823 = EDGE_CURVE ( 'NONE', #38583, #22087, #20528, .T. ) ; +#17822 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27262 ), #8558 ) ; +#17824 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#17825 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -2.904459358809384600 ) ) ; +#17826 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#17827 = FACE_OUTER_BOUND ( 'NONE', #35606, .T. ) ; +#17828 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17829 = STYLED_ITEM ( 'NONE', ( #17539 ), #27727 ) ; +#17830 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18631 ) ) ; +#17831 = VERTEX_POINT ( 'NONE', #24656 ) ; +#17832 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38088 ), #20004 ) ; +#17833 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.380001745296136400, -4.400000000000000400 ) ) ; +#17834 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#17835 = ADVANCED_FACE ( 'NONE', ( #15950 ), #8499, .F. ) ; +#17836 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21370 ), #29992 ) ; +#17837 = VERTEX_POINT ( 'NONE', #21133 ) ; +#17838 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703822500, -2.599999999999999600 ) ) ; +#17839 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.837630800822890800E-016, 1.000000000000000000 ) ) ; +#17840 = VECTOR ( 'NONE', #17065, 1000.000000000000000 ) ; +#17841 = ORIENTED_EDGE ( 'NONE', *, *, #15782, .T. ) ; +#17842 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #20552, #26901, #27035, #20266 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 4.712388980384730500, 7.853981633974523600 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.3333333333333333700, 0.3333333333333333700, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#17843 = LINE ( 'NONE', #11791, #16511 ) ; +#17844 = ORIENTED_EDGE ( 'NONE', *, *, #3006, .F. ) ; +#17845 = CIRCLE ( 'NONE', #7929, 0.3000000000000003800 ) ; +#17846 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#17847 = FILL_AREA_STYLE_COLOUR ( '', #30193 ) ; +#17848 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#17849 = ORIENTED_EDGE ( 'NONE', *, *, #32418, .F. ) ; +#17850 = ORIENTED_EDGE ( 'NONE', *, *, #34294, .F. ) ; +#17851 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#17852 = LINE ( 'NONE', #26560, #6670 ) ; +#17853 = PRESENTATION_STYLE_ASSIGNMENT (( #18523 ) ) ; +#17854 = SURFACE_SIDE_STYLE ('',( #4048 ) ) ; +#17855 = EDGE_CURVE ( 'NONE', #6388, #40951, #6821, .T. ) ; +#17856 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17857 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000005300, 1.298332101551391600E-014, -4.549999999999999800 ) ) ; +#17858 = FACE_BOUND ( 'NONE', #36165, .T. ) ; +#17859 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.380001745296165500, -2.299999999999999400 ) ) ; +#17860 = EDGE_CURVE ( 'NONE', #35209, #19265, #4812, .T. ) ; +#17861 = ORIENTED_EDGE ( 'NONE', *, *, #33868, .T. ) ; +#17862 = CARTESIAN_POINT ( 'NONE', ( -3.095000000000000600, -0.07499999999999999700, -0.3254101966249999800 ) ) ; +#17863 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17864 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10851, 'distance_accuracy_value', 'NONE'); +#17865 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17866 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12694 ), #20863 ) ; +#17867 = VERTEX_POINT ( 'NONE', #40999 ) ; +#17868 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.8500017452961660100, -4.975000000000000500 ) ) ; +#17869 = ORIENTED_EDGE ( 'NONE', *, *, #35476, .F. ) ; +#17871 = EDGE_CURVE ( 'NONE', #33335, #8073, #40173, .T. ) ; +#17870 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7006 ) ) ; +#17872 = FILL_AREA_STYLE ('',( #20446 ) ) ; +#17873 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17874 = VECTOR ( 'NONE', #39495, 1000.000000000000000 ) ; +#17875 = ORIENTED_EDGE ( 'NONE', *, *, #29521, .F. ) ; +#17876 = ADVANCED_FACE ( 'NONE', ( #1332 ), #12170, .F. ) ; +#17877 = ORIENTED_EDGE ( 'NONE', *, *, #5611, .T. ) ; +#17878 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.499998254703827100, -5.449999999999994000 ) ) ; +#17879 = ORIENTED_EDGE ( 'NONE', *, *, #20780, .F. ) ; +#17880 = ORIENTED_EDGE ( 'NONE', *, *, #23625, .F. ) ; +#17882 = AXIS2_PLACEMENT_3D ( 'NONE', #36158, #19655, #22864 ) ; +#17881 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21422 ) ) ; +#17883 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17884 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14349 ), #9738 ) ; +#17885 = CARTESIAN_POINT ( 'NONE', ( 3.845108823762039700, 0.6187619818031294700, -4.400173216857472100 ) ) ; +#17886 = FACE_OUTER_BOUND ( 'NONE', #10186, .T. ) ; +#17887 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17888 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23527, 'distance_accuracy_value', 'NONE'); +#17890 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4874 ) ) ; +#17889 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26452 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21075, #24294, #40795 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17891 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17892 = ORIENTED_EDGE ( 'NONE', *, *, #15542, .F. ) ; +#17893 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.6300017452961683700, -4.549999999999999800 ) ) ; +#17894 = VECTOR ( 'NONE', #37736, 1000.000000000000000 ) ; +#17895 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#17896 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.6199999999999849000, -5.199999999999999300 ) ) ; +#17897 = DIRECTION ( 'NONE', ( 6.056601140521967000E-031, -3.502176061030487700E-045, -1.000000000000000000 ) ) ; +#17898 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#17899 = PLANE ( 'NONE', #37571 ) ; +#17900 = FILL_AREA_STYLE_COLOUR ( '', #271 ) ; +#17901 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#17902 = SURFACE_SIDE_STYLE ('',( #6634 ) ) ; +#17903 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#17904 = FILL_AREA_STYLE_COLOUR ( '', #12269 ) ; +#17905 = ORIENTED_EDGE ( 'NONE', *, *, #36489, .F. ) ; +#17906 = LINE ( 'NONE', #17029, #9267 ) ; +#17907 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#17908 = ORIENTED_EDGE ( 'NONE', *, *, #17801, .F. ) ; +#17909 = SURFACE_STYLE_USAGE ( .BOTH. , #37109 ) ; +#17910 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#17911 = EDGE_CURVE ( 'NONE', #36273, #28578, #5829, .T. ) ; +#17912 = ORIENTED_EDGE ( 'NONE', *, *, #314, .F. ) ; +#17913 = CLOSED_SHELL ( 'NONE', ( #7160, #8626, #20785, #32401, #24126, #14078 ) ) ; +#17914 = ORIENTED_EDGE ( 'NONE', *, *, #6173, .F. ) ; +#17915 = DIRECTION ( 'NONE', ( 2.602085213965209400E-014, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#17916 = EDGE_CURVE ( 'NONE', #19588, #41796, #9844, .T. ) ; +#17917 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13566 ) ) ; +#17918 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#17919 = PRESENTATION_STYLE_ASSIGNMENT (( #2457 ) ) ; +#17920 = LINE ( 'NONE', #4701, #34077 ) ; +#17921 = STYLED_ITEM ( 'NONE', ( #3105 ), #22908 ) ; +#17922 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#17924 = FILL_AREA_STYLE ('',( #1425 ) ) ; +#17923 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.188821734606921400E-015, -4.321659315412274900E-031 ) ) ; +#17925 = PRESENTATION_STYLE_ASSIGNMENT (( #7893 ) ) ; +#17926 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#17927 = STYLED_ITEM ( 'NONE', ( #3459 ), #14429 ) ; +#17928 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.799998254703820700, -5.899999999999999500 ) ) ; +#17929 = VECTOR ( 'NONE', #1878, 1000.000000000000000 ) ; +#17930 = ORIENTED_EDGE ( 'NONE', *, *, #25554, .T. ) ; +#17931 = VECTOR ( 'NONE', #30545, 1000.000000000000000 ) ; +#17932 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#17933 = STYLED_ITEM ( 'NONE', ( #12550 ), #38371 ) ; +#17934 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#17935 = AXIS2_PLACEMENT_3D ( 'NONE', #34130, #1834, #14783 ) ; +#17936 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#17938 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1736 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27785, #41186, #15210 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17937 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15747 ), #19313 ) ; +#17939 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.480001745296166000, -1.899999999999999700 ) ) ; +#17940 = ORIENTED_EDGE ( 'NONE', *, *, #16841, .T. ) ; +#17943 = EDGE_CURVE ( 'NONE', #39146, #12737, #21022, .T. ) ; +#17942 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 1.485356976305141100E-014, 0.0000000000000000000 ) ) ; +#17941 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16322 ) ) ; +#17944 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, -2.322941965694886000, -1.250000000000000000 ) ) ; +#17945 = LINE ( 'NONE', #8171, #39633 ) ; +#17946 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#17947 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#17948 = ADVANCED_FACE ( 'NONE', ( #15904 ), #8837, .T. ) ; +#17949 = ORIENTED_EDGE ( 'NONE', *, *, #22516, .F. ) ; +#17950 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20951 ) ) ; +#17951 = CARTESIAN_POINT ( 'NONE', ( 3.315857705770604000, 0.3498818811787586200, -1.622925393101724500 ) ) ; +#17952 = ORIENTED_EDGE ( 'NONE', *, *, #20524, .F. ) ; +#17953 = VECTOR ( 'NONE', #31589, 1000.000000000000000 ) ; +#17954 = CARTESIAN_POINT ( 'NONE', ( -3.105390508846411100, -0.2999999999999999900, -0.1008701867861798900 ) ) ; +#17955 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, 0.2799999999999973100, -0.2339555568811695900 ) ) ; +#17956 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#17957 = ORIENTED_EDGE ( 'NONE', *, *, #25018, .T. ) ; +#17958 = VERTEX_POINT ( 'NONE', #6116 ) ; +#17959 = SURFACE_SIDE_STYLE ('',( #20224 ) ) ; +#17960 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#17961 = CIRCLE ( 'NONE', #12959, 0.3000000000000003800 ) ; +#17962 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -10.30000000000000100, -1.250000000000000000 ) ) ; +#17963 = SURFACE_STYLE_FILL_AREA ( #8907 ) ; +#17964 = EDGE_LOOP ( 'NONE', ( #40217, #1084, #2386, #25769 ) ) ; +#17965 = CARTESIAN_POINT ( 'NONE', ( 3.111518022855187700, 0.07499999999999999700, -0.2199811328637448200 ) ) ; +#17966 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#17967 = ORIENTED_EDGE ( 'NONE', *, *, #27934, .F. ) ; +#17968 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#17969 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#17970 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.2999999999999999900, -1.249999999999999800 ) ) ; +#17971 = ORIENTED_EDGE ( 'NONE', *, *, #35481, .F. ) ; +#17972 = SURFACE_SIDE_STYLE ('',( #10501 ) ) ; +#17973 = EDGE_CURVE ( 'NONE', #12200, #13022, #33629, .T. ) ; +#17974 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, 0.3499999999999996400, -1.250000000000000000 ) ) ; +#17975 = EDGE_CURVE ( 'NONE', #38956, #3794, #38155, .T. ) ; +#17976 = SURFACE_SIDE_STYLE ('',( #34738 ) ) ; +#17977 = ORIENTED_EDGE ( 'NONE', *, *, #28897, .F. ) ; +#17978 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17979 = ADVANCED_FACE ( 'NONE', ( #13382 ), #18941, .F. ) ; +#17980 = LINE ( 'NONE', #30094, #31585 ) ; +#17981 = FILL_AREA_STYLE ('',( #34220 ) ) ; +#17982 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.499998254703827700, -6.299999999999993600 ) ) ; +#17983 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37084 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4523, #24016, #30231 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17984 = FILL_AREA_STYLE_COLOUR ( '', #10601 ) ; +#17985 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3321 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12103, #18785, #31616 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#17986 = CLOSED_SHELL ( 'NONE', ( #38129, #22660, #1, #26907, #3825, #32862 ) ) ; +#17987 = STYLED_ITEM ( 'NONE', ( #28951 ), #31784 ) ; +#17988 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#17989 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#17990 = ORIENTED_EDGE ( 'NONE', *, *, #22246, .T. ) ; +#17991 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#17993 = ADVANCED_FACE ( 'NONE', ( #10297 ), #31807, .T. ) ; +#17992 = VECTOR ( 'NONE', #38959, 1000.000000000000000 ) ; +#17995 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41775 ) ) ; +#17994 = AXIS2_PLACEMENT_3D ( 'NONE', #22739, #38822, #6370 ) ; +#17996 = VECTOR ( 'NONE', #14795, 1000.000000000000000 ) ; +#17997 = PLANE ( 'NONE', #40659 ) ; +#17998 = FILL_AREA_STYLE ('',( #2343 ) ) ; +#17999 = PRESENTATION_STYLE_ASSIGNMENT (( #35557 ) ) ; +#18001 = EDGE_CURVE ( 'NONE', #23496, #28390, #29524, .T. ) ; +#18000 = AXIS2_PLACEMENT_3D ( 'NONE', #23549, #33160, #29762 ) ; +#18002 = VERTEX_POINT ( 'NONE', #32212 ) ; +#18003 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18004 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#18005 = CYLINDRICAL_SURFACE ( 'NONE', #40480, 0.3000000000000003800 ) ; +#18006 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#18007 = VERTEX_POINT ( 'NONE', #29101 ) ; +#18008 = VECTOR ( 'NONE', #28133, 1000.000000000000000 ) ; +#18009 = VECTOR ( 'NONE', #20301, 1000.000000000000000 ) ; +#18010 = VECTOR ( 'NONE', #34638, 1000.000000000000000 ) ; +#18011 = FILL_AREA_STYLE_COLOUR ( '', #28465 ) ; +#18013 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5559 ) ) ; +#18012 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1510 ) ) ; +#18014 = LINE ( 'NONE', #8229, #9857 ) ; +#18015 = ORIENTED_EDGE ( 'NONE', *, *, #20804, .T. ) ; +#18016 = STYLED_ITEM ( 'NONE', ( #11425 ), #39145 ) ; +#18017 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.499998254703827700, -6.699999999999994000 ) ) ; +#18018 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.2999999999999999900, -1.249999999999999800 ) ) ; +#18019 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#18020 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #13076, #15909, #35693, #6186 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#18021 = SURFACE_SIDE_STYLE ('',( #30382 ) ) ; +#18022 = SURFACE_SIDE_STYLE ('',( #9990 ) ) ; +#18023 = CARTESIAN_POINT ( 'NONE', ( -1.649999999999999900, -1.380001745296130600, -6.699999999999994000 ) ) ; +#18024 = FILL_AREA_STYLE_COLOUR ( '', #6038 ) ; +#18025 = VECTOR ( 'NONE', #667, 1000.000000000000000 ) ; +#18026 = ORIENTED_EDGE ( 'NONE', *, *, #34420, .F. ) ; +#18027 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12845, 'distance_accuracy_value', 'NONE'); +#18028 = SURFACE_STYLE_FILL_AREA ( #13310 ) ; +#18029 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#18030 = EDGE_CURVE ( 'NONE', #38341, #24208, #26504, .T. ) ; +#18031 = ADVANCED_FACE ( 'NONE', ( #37120 ), #3276, .T. ) ; +#18032 = ORIENTED_EDGE ( 'NONE', *, *, #14441, .T. ) ; +#18033 = VERTEX_POINT ( 'NONE', #12996 ) ; +#18034 = FILL_AREA_STYLE ('',( #40740 ) ) ; +#18035 = ORIENTED_EDGE ( 'NONE', *, *, #24470, .T. ) ; +#18036 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#18037 = DIRECTION ( 'NONE', ( 6.056601140521967000E-031, 1.987721548152419000E-045, 1.000000000000000000 ) ) ; +#18038 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#18039 = EDGE_CURVE ( 'NONE', #7917, #32918, #37636, .T. ) ; +#18040 = PRESENTATION_STYLE_ASSIGNMENT (( #37161 ) ) ; +#18041 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10592, 'distance_accuracy_value', 'NONE'); +#18042 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18043 = EDGE_LOOP ( 'NONE', ( #2025, #1761, #25518, #22404 ) ) ; +#18044 = EDGE_LOOP ( 'NONE', ( #5170, #40471, #17270, #16528 ) ) ; +#18045 = EDGE_CURVE ( 'NONE', #10076, #28269, #19046, .T. ) ; +#18046 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -2.322941965694886000, -1.250000000000000000 ) ) ; +#18047 = SURFACE_STYLE_USAGE ( .BOTH. , #2387 ) ; +#18048 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33746 ) ) ; +#18049 = SURFACE_SIDE_STYLE ('',( #6719 ) ) ; +#18050 = SURFACE_STYLE_FILL_AREA ( #14210 ) ; +#18051 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18052 = FACE_OUTER_BOUND ( 'NONE', #37849, .T. ) ; +#18053 = SURFACE_STYLE_USAGE ( .BOTH. , #7730 ) ; +#18054 = PLANE ( 'NONE', #13253 ) ; +#18055 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15054, 'distance_accuracy_value', 'NONE'); +#18056 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32293 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21939, #2185, #41115 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18057 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31392 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35133, #28776, #12650 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18058 = FILL_AREA_STYLE ('',( #40339 ) ) ; +#18059 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#18061 = EDGE_CURVE ( 'NONE', #21781, #13690, #289, .T. ) ; +#18060 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13707 ) ) ; +#18062 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18063 = LINE ( 'NONE', #525, #9429 ) ; +#18064 = VERTEX_POINT ( 'NONE', #26009 ) ; +#18065 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#18066 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#18067 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18068 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37493, 'distance_accuracy_value', 'NONE'); +#18070 = AXIS2_PLACEMENT_3D ( 'NONE', #6399, #28973, #32219 ) ; +#18069 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2926 ), #36196 ) ; +#18071 = CARTESIAN_POINT ( 'NONE', ( 2.673205080756886800, 1.480001745296169600, -1.650000000000000800 ) ) ; +#18072 = FILL_AREA_STYLE ('',( #2135 ) ) ; +#18073 = ORIENTED_EDGE ( 'NONE', *, *, #8184, .F. ) ; +#18074 = STYLED_ITEM ( 'NONE', ( #6599 ), #40627 ) ; +#18075 = SURFACE_STYLE_FILL_AREA ( #39276 ) ; +#18076 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38887 ) ) ; +#18077 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#18078 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17934, 'distance_accuracy_value', 'NONE'); +#18079 = VERTEX_POINT ( 'NONE', #16684 ) ; +#18080 = AXIS2_PLACEMENT_3D ( 'NONE', #32037, #41633, #9435 ) ; +#18081 = EDGE_LOOP ( 'NONE', ( #11085, #18216, #1511, #301 ) ) ; +#18082 = VERTEX_POINT ( 'NONE', #35908 ) ; +#18083 = CIRCLE ( 'NONE', #29608, 0.3000000000000001600 ) ; +#18084 = VECTOR ( 'NONE', #11196, 1000.000000000000000 ) ; +#18085 = SURFACE_SIDE_STYLE ('',( #38704 ) ) ; +#18086 = PRESENTATION_STYLE_ASSIGNMENT (( #7726 ) ) ; +#18087 = VECTOR ( 'NONE', #37306, 999.9999999999998900 ) ; +#18088 = FACE_OUTER_BOUND ( 'NONE', #14575, .T. ) ; +#18089 = CONICAL_SURFACE ( 'NONE', #1610, 1.450424212713734300, 0.0002094395102324932000 ) ; +#18090 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#18091 = ORIENTED_EDGE ( 'NONE', *, *, #31957, .F. ) ; +#18092 = FILL_AREA_STYLE ('',( #27671 ) ) ; +#18093 = LINE ( 'NONE', #11073, #41797 ) ; +#18094 = EDGE_LOOP ( 'NONE', ( #16459, #10886, #28903, #23034, #13871, #30374, #31795, #27222, #40409, #25639, #39761, #37865 ) ) ; +#18095 = ADVANCED_FACE ( 'NONE', ( #30556 ), #41810, .T. ) ; +#18096 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.380001745296144800, -5.449999999999994000 ) ) ; +#18097 = FILL_AREA_STYLE ('',( #4936 ) ) ; +#18098 = FILL_AREA_STYLE_COLOUR ( '', #3759 ) ; +#18099 = ORIENTED_EDGE ( 'NONE', *, *, #37327, .T. ) ; +#18100 = SURFACE_SIDE_STYLE ('',( #5579 ) ) ; +#18101 = LINE ( 'NONE', #27863, #9455 ) ; +#18102 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18103 = EDGE_CURVE ( 'NONE', #14093, #24014, #13342, .T. ) ; +#18104 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.499998254703832000, -5.049999999999993600 ) ) ; +#18105 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, 0.07500000000000001100, -0.2071998105385356400 ) ) ; +#18106 = EDGE_CURVE ( 'NONE', #27344, #39077, #14864, .T. ) ; +#18107 = EDGE_LOOP ( 'NONE', ( #21673, #36657, #2880, #6044 ) ) ; +#18108 = SURFACE_STYLE_FILL_AREA ( #6419 ) ; +#18109 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18110 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32427 ), #6459 ) ; +#18111 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.139998254717369000, -5.049996877890552400 ) ) ; +#18112 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#18113 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#18114 = EDGE_CURVE ( 'NONE', #35871, #40250, #34075, .T. ) ; +#18115 = ORIENTED_EDGE ( 'NONE', *, *, #20848, .T. ) ; +#18116 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18117 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28670 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7266, #10372, #32990 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18118 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18119 = ORIENTED_EDGE ( 'NONE', *, *, #28618, .T. ) ; +#18120 = FILL_AREA_STYLE_COLOUR ( '', #28904 ) ; +#18121 = PRESENTATION_STYLE_ASSIGNMENT (( #1617 ) ) ; +#18122 = ORIENTED_EDGE ( 'NONE', *, *, #1301, .F. ) ; +#18123 = SURFACE_STYLE_FILL_AREA ( #23337 ) ; +#18124 = FILL_AREA_STYLE ('',( #37445 ) ) ; +#18125 = LINE ( 'NONE', #9498, #39316 ) ; +#18126 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7251 ), #27033 ) ; +#18127 = VECTOR ( 'NONE', #5602, 1000.000000000000000 ) ; +#18128 = CYLINDRICAL_SURFACE ( 'NONE', #37473, 0.1999999999999996500 ) ; +#18131 = EDGE_CURVE ( 'NONE', #34067, #13366, #24998, .T. ) ; +#18130 = STYLED_ITEM ( 'NONE', ( #20518 ), #24517 ) ; +#18129 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18132 = LINE ( 'NONE', #32542, #31759 ) ; +#18133 = ORIENTED_EDGE ( 'NONE', *, *, #4149, .T. ) ; +#18134 = CIRCLE ( 'NONE', #24490, 0.2000017452961698200 ) ; +#18135 = ORIENTED_EDGE ( 'NONE', *, *, #31930, .F. ) ; +#18136 = ORIENTED_EDGE ( 'NONE', *, *, #104, .F. ) ; +#18137 = CYLINDRICAL_SURFACE ( 'NONE', #19251, 0.1000000000000004800 ) ; +#18138 = SURFACE_STYLE_USAGE ( .BOTH. , #24921 ) ; +#18139 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 1.480001745296168200, -3.999999999999998200 ) ) ; +#18141 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17324 ) ) ; +#18140 = STYLED_ITEM ( 'NONE', ( #3685 ), #28587 ) ; +#18142 = STYLED_ITEM ( 'NONE', ( #33185 ), #41497 ) ; +#18143 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18144 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37492 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34914, #38147, #5252 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18145 = ORIENTED_EDGE ( 'NONE', *, *, #15731, .F. ) ; +#18146 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#18147 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24380 ) ) ; +#18148 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18149 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -500000.0000000000600, -2.904459358691027200 ) ) ; +#18150 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 2.032879073410321300E-016, 1.000000000000000000 ) ) ; +#18151 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18152 = ORIENTED_EDGE ( 'NONE', *, *, #41168, .F. ) ; +#18153 = LINE ( 'NONE', #33496, #12059 ) ; +#18154 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#18155 = VERTEX_POINT ( 'NONE', #7476 ) ; +#18156 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -10.30000000000000100, -1.250000000000000000 ) ) ; +#18157 = FACE_OUTER_BOUND ( 'NONE', #21789, .T. ) ; +#18158 = ORIENTED_EDGE ( 'NONE', *, *, #34860, .F. ) ; +#18159 = EDGE_LOOP ( 'NONE', ( #16008, #41112, #26999, #28043 ) ) ; +#18160 = FACE_OUTER_BOUND ( 'NONE', #23760, .T. ) ; +#18161 = ADVANCED_FACE ( 'NONE', ( #39083 ), #10445, .T. ) ; +#18162 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18163 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18164 = LINE ( 'NONE', #15776, #34317 ) ; +#18165 = LINE ( 'NONE', #20895, #16610 ) ; +#18166 = EDGE_LOOP ( 'NONE', ( #41729, #32752, #22376, #39327, #16518, #36575, #23134, #40542 ) ) ; +#18167 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#18168 = ORIENTED_EDGE ( 'NONE', *, *, #40056, .T. ) ; +#18169 = EDGE_LOOP ( 'NONE', ( #34639, #30263, #511, #4086 ) ) ; +#18170 = EDGE_CURVE ( 'NONE', #19680, #9110, #23948, .T. ) ; +#18171 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18172 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.830380236995680300, -0.8400000000000000800 ) ) ; +#18173 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 0.1000000000000145800, -1.949999999999999500 ) ) ; +#18174 = EDGE_CURVE ( 'NONE', #22172, #18780, #18414, .T. ) ; +#18175 = AXIS2_PLACEMENT_3D ( 'NONE', #6800, #235, #35642 ) ; +#18176 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#18177 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26583, 'distance_accuracy_value', 'NONE'); +#18178 = ORIENTED_EDGE ( 'NONE', *, *, #10977, .T. ) ; +#18179 = SURFACE_SIDE_STYLE ('',( #33793 ) ) ; +#18180 = VECTOR ( 'NONE', #4037, 1000.000000000000000 ) ; +#18181 = SURFACE_SIDE_STYLE ('',( #17085 ) ) ; +#18182 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#18183 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18184 = STYLED_ITEM ( 'NONE', ( #20108 ), #14137 ) ; +#18185 = CYLINDRICAL_SURFACE ( 'NONE', #4570, 0.1000000000000000500 ) ; +#18186 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18187 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18188 = AXIS2_PLACEMENT_3D ( 'NONE', #4489, #7438, #33728 ) ; +#18189 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.07499999999999998300, -0.2498427124746000500 ) ) ; +#18190 = STYLED_ITEM ( 'NONE', ( #17449 ), #18308 ) ; +#18191 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18192 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#18194 = AXIS2_PLACEMENT_3D ( 'NONE', #15169, #34507, #2473 ) ; +#18193 = AXIS2_PLACEMENT_3D ( 'NONE', #23765, #40252, #11300 ) ; +#18195 = CIRCLE ( 'NONE', #24682, 0.1999999999999998400 ) ; +#18196 = CARTESIAN_POINT ( 'NONE', ( -3.273571428571035100, -0.07499999999999999700, -0.08583148475010826700 ) ) ; +#18197 = ORIENTED_EDGE ( 'NONE', *, *, #1666, .T. ) ; +#18198 = VECTOR ( 'NONE', #13341, 1000.000000000000000 ) ; +#18200 = EDGE_CURVE ( 'NONE', #25787, #11160, #30509, .T. ) ; +#18199 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38453 ) ) ; +#18201 = SURFACE_STYLE_USAGE ( .BOTH. , #27360 ) ; +#18202 = PLANE ( 'NONE', #10281 ) ; +#18203 = LINE ( 'NONE', #24326, #28302 ) ; +#18204 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296169800, -0.2339555568811697600 ) ) ; +#18205 = ADVANCED_FACE ( 'NONE', ( #19426 ), #7619, .F. ) ; +#18206 = FACE_OUTER_BOUND ( 'NONE', #32045, .T. ) ; +#18207 = ORIENTED_EDGE ( 'NONE', *, *, #32547, .F. ) ; +#18208 = LINE ( 'NONE', #18761, #40906 ) ; +#18209 = SURFACE_STYLE_USAGE ( .BOTH. , #21191 ) ; +#18210 = AXIS2_PLACEMENT_3D ( 'NONE', #37969, #12248, #18648 ) ; +#18211 = PRESENTATION_STYLE_ASSIGNMENT (( #40901 ) ) ; +#18212 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18213 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#18214 = PRESENTATION_STYLE_ASSIGNMENT (( #4650 ) ) ; +#18215 = SURFACE_SIDE_STYLE ('',( #33548 ) ) ; +#18216 = ORIENTED_EDGE ( 'NONE', *, *, #33984, .F. ) ; +#18217 = VECTOR ( 'NONE', #19206, 1000.000000000000000 ) ; +#18218 = ORIENTED_EDGE ( 'NONE', *, *, #4605, .F. ) ; +#18219 = ORIENTED_EDGE ( 'NONE', *, *, #27932, .T. ) ; +#18220 = FILL_AREA_STYLE_COLOUR ( '', #15109 ) ; +#18221 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34045, 'distance_accuracy_value', 'NONE'); +#18222 = ADVANCED_FACE ( 'NONE', ( #15361 ), #13856, .T. ) ; +#18223 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.830380236995680300, -0.8400000000000000800 ) ) ; +#18224 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#18225 = ORIENTED_EDGE ( 'NONE', *, *, #34731, .T. ) ; +#18226 = FACE_OUTER_BOUND ( 'NONE', #4760, .T. ) ; +#18227 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#18228 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.499998254703829500, -6.299999999999993600 ) ) ; +#18229 = LINE ( 'NONE', #10969, #39904 ) ; +#18230 = FACE_OUTER_BOUND ( 'NONE', #39637, .T. ) ; +#18231 = LINE ( 'NONE', #15489, #28289 ) ; +#18232 = CARTESIAN_POINT ( 'NONE', ( 3.344813086426265100, 0.07499999999999999700, 0.4434843258806834300 ) ) ; +#18233 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18234 = EDGE_CURVE ( 'NONE', #23563, #24275, #33060, .T. ) ; +#18235 = SURFACE_STYLE_USAGE ( .BOTH. , #37550 ) ; +#18236 = PLANE ( 'NONE', #7762 ) ; +#18237 = FILL_AREA_STYLE ('',( #37553 ) ) ; +#18238 = SURFACE_STYLE_USAGE ( .BOTH. , #34315 ) ; +#18239 = EDGE_CURVE ( 'NONE', #9130, #23571, #35582, .T. ) ; +#18240 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12820 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24369, #5002, #40720 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18242 = ORIENTED_EDGE ( 'NONE', *, *, #30642, .T. ) ; +#18241 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36450, 'distance_accuracy_value', 'NONE'); +#18243 = PRESENTATION_STYLE_ASSIGNMENT (( #16338 ) ) ; +#18244 = CARTESIAN_POINT ( 'NONE', ( 3.178333333333020600, -0.2999999999999999900, -0.06128090415826747300 ) ) ; +#18245 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18246 = SURFACE_STYLE_FILL_AREA ( #12242 ) ; +#18247 = ORIENTED_EDGE ( 'NONE', *, *, #20437, .T. ) ; +#18248 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -5.460789592991141900E-031 ) ) ; +#18249 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34986 ) ) ; +#18250 = VECTOR ( 'NONE', #24165, 1000.000000000000000 ) ; +#18251 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18252 = SURFACE_STYLE_FILL_AREA ( #10852 ) ; +#18253 = ORIENTED_EDGE ( 'NONE', *, *, #27739, .T. ) ; +#18254 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#18255 = ORIENTED_EDGE ( 'NONE', *, *, #34735, .T. ) ; +#18257 = ADVANCED_FACE ( 'NONE', ( #2261 ), #23745, .F. ) ; +#18256 = ORIENTED_EDGE ( 'NONE', *, *, #18039, .F. ) ; +#18258 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39862 ), #8175 ) ; +#18259 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.9999999780675459200, -0.0002094395087002863100 ) ) ; +#18262 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34996 ), #25548 ) ; +#18261 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -2.031000000000000600, -3.814459358809383400 ) ) ; +#18260 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #961 ), #20993 ) ; +#18263 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#18265 = EDGE_CURVE ( 'NONE', #33261, #18526, #35095, .T. ) ; +#18264 = STYLED_ITEM ( 'NONE', ( #9072 ), #35596 ) ; +#18266 = ORIENTED_EDGE ( 'NONE', *, *, #23718, .T. ) ; +#18267 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998386600, -1.749999999999999800 ) ) ; +#18268 = SURFACE_STYLE_USAGE ( .BOTH. , #11449 ) ; +#18269 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#18270 = VECTOR ( 'NONE', #19721, 1000.000000000000000 ) ; +#18272 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16079 ) ) ; +#18271 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20891 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10752, #4262, #7497 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18273 = DIRECTION ( 'NONE', ( -2.628368902995161200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#18274 = VECTOR ( 'NONE', #6626, 1000.000000000000000 ) ; +#18275 = SURFACE_SIDE_STYLE ('',( #32039 ) ) ; +#18276 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#18277 = FACE_OUTER_BOUND ( 'NONE', #27408, .T. ) ; +#18278 = VECTOR ( 'NONE', #22801, 1000.000000000000000 ) ; +#18279 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#18280 = VECTOR ( 'NONE', #25285, 1000.000000000000000 ) ; +#18281 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27655, 'distance_accuracy_value', 'NONE'); +#18282 = ORIENTED_EDGE ( 'NONE', *, *, #11661, .T. ) ; +#18283 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -5.952072798849889700E-031 ) ) ; +#18284 = PRESENTATION_STYLE_ASSIGNMENT (( #21200 ) ) ; +#18285 = VECTOR ( 'NONE', #40079, 1000.000000000000000 ) ; +#18286 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.07499999999999999700, 0.0000000000000000000 ) ) ; +#18287 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#18288 = VERTEX_POINT ( 'NONE', #4238 ) ; +#18289 = PRESENTATION_STYLE_ASSIGNMENT (( #41799 ) ) ; +#18290 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18291 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18292 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31088, 'distance_accuracy_value', 'NONE'); +#18293 = FACE_OUTER_BOUND ( 'NONE', #22040, .T. ) ; +#18294 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#18295 = ORIENTED_EDGE ( 'NONE', *, *, #19467, .F. ) ; +#18296 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -2.891205793294629500E-014 ) ) ; +#18297 = EDGE_CURVE ( 'NONE', #38103, #34911, #38119, .T. ) ; +#18298 = ORIENTED_EDGE ( 'NONE', *, *, #31166, .T. ) ; +#18299 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#18300 = EDGE_CURVE ( 'NONE', #20274, #39526, #6785, .T. ) ; +#18301 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18302 = SURFACE_STYLE_USAGE ( .BOTH. , #31544 ) ; +#18303 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, 0.0000000000000000000, -1.600000000000000100 ) ) ; +#18304 = ORIENTED_EDGE ( 'NONE', *, *, #35935, .T. ) ; +#18305 = VECTOR ( 'NONE', #22146, 1000.000000000000000 ) ; +#18306 = ORIENTED_EDGE ( 'NONE', *, *, #28603, .T. ) ; +#18308 = ADVANCED_FACE ( 'NONE', ( #36134 ), #40513, .T. ) ; +#18307 = FACE_OUTER_BOUND ( 'NONE', #9727, .T. ) ; +#18309 = VECTOR ( 'NONE', #21310, 1000.000000000000000 ) ; +#18310 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39645 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25642, #35945, #16166 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18311 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#18312 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18313 = LINE ( 'NONE', #37859, #37972 ) ; +#18314 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000800, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#18315 = STYLED_ITEM ( 'NONE', ( #30101 ), #20664 ) ; +#18317 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#18316 = LINE ( 'NONE', #15885, #38489 ) ; +#18318 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.2800017452961687200, -6.249999999999998200 ) ) ; +#18319 = STYLED_ITEM ( 'NONE', ( #31222 ), #7376 ) ; +#18320 = PRESENTATION_STYLE_ASSIGNMENT (( #7083 ) ) ; +#18321 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18322 = ORIENTED_EDGE ( 'NONE', *, *, #18599, .F. ) ; +#18324 = EDGE_CURVE ( 'NONE', #15253, #28059, #18954, .T. ) ; +#18323 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37620 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20851, #1497, #27303 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18325 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18326 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -2.031000000000000600, -3.514459358809383500 ) ) ; +#18327 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18328 = ORIENTED_EDGE ( 'NONE', *, *, #35881, .T. ) ; +#18329 = CIRCLE ( 'NONE', #2077, 1.200001745296169300 ) ; +#18331 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41535 ) ) ; +#18330 = AXIS2_PLACEMENT_3D ( 'NONE', #26953, #7706, #7557 ) ; +#18332 = FILL_AREA_STYLE ('',( #15049 ) ) ; +#18333 = STYLED_ITEM ( 'NONE', ( #12258 ), #39989 ) ; +#18334 = FACE_OUTER_BOUND ( 'NONE', #29068, .T. ) ; +#18335 = FACE_OUTER_BOUND ( 'NONE', #21743, .T. ) ; +#18336 = STYLED_ITEM ( 'NONE', ( #35512 ), #32387 ) ; +#18337 = ORIENTED_EDGE ( 'NONE', *, *, #15119, .T. ) ; +#18338 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -0.9500017452961654300, -5.475000000000000500 ) ) ; +#18339 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18340 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.949998254703822600, 0.0000000000000000000 ) ) ; +#18341 = VERTEX_POINT ( 'NONE', #23881 ) ; +#18342 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#18343 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#18344 = VERTEX_POINT ( 'NONE', #27687 ) ; +#18345 = VECTOR ( 'NONE', #16787, 1000.000000000000100 ) ; +#18346 = SURFACE_STYLE_USAGE ( .BOTH. , #5751 ) ; +#18347 = SURFACE_STYLE_USAGE ( .BOTH. , #11930 ) ; +#18348 = SURFACE_STYLE_FILL_AREA ( #33908 ) ; +#18349 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.8500017452961657900, -4.875000000000000900 ) ) ; +#18350 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18351 = FACE_OUTER_BOUND ( 'NONE', #41469, .T. ) ; +#18352 = EDGE_CURVE ( 'NONE', #32356, #16597, #18900, .T. ) ; +#18353 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#18354 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, -0.2800000000000026400, -0.2339555568811697600 ) ) ; +#18355 = EDGE_CURVE ( 'NONE', #36436, #4189, #41180, .T. ) ; +#18356 = ORIENTED_EDGE ( 'NONE', *, *, #15312, .F. ) ; +#18357 = SURFACE_STYLE_FILL_AREA ( #16110 ) ; +#18358 = CARTESIAN_POINT ( 'NONE', ( -3.680000000000000200, -1.380001745296125100, -6.699999999999994000 ) ) ; +#18359 = EDGE_CURVE ( 'NONE', #38433, #6114, #19961, .T. ) ; +#18360 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#18361 = ORIENTED_EDGE ( 'NONE', *, *, #9334, .F. ) ; +#18362 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14807 ), #16982 ) ; +#18363 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#18364 = EDGE_CURVE ( 'NONE', #33764, #7127, #13350, .T. ) ; +#18365 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18366 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#18367 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18368 = EDGE_LOOP ( 'NONE', ( #7346, #9734, #7724, #21755 ) ) ; +#18369 = SURFACE_SIDE_STYLE ('',( #31885 ) ) ; +#18370 = ORIENTED_EDGE ( 'NONE', *, *, #14201, .F. ) ; +#18371 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.07499999999999998300, 0.03299999999999998800 ) ) ; +#18372 = ADVANCED_FACE ( 'NONE', ( #16409 ), #40136, .F. ) ; +#18373 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37834 ) ) ; +#18374 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000012100, -1.999998254703822000, -2.599999999999999600 ) ) ; +#18376 = EDGE_CURVE ( 'NONE', #30331, #22882, #28481, .T. ) ; +#18375 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14824 ), #7507 ) ; +#18377 = SURFACE_STYLE_USAGE ( .BOTH. , #31050 ) ; +#18378 = FILL_AREA_STYLE_COLOUR ( '', #18213 ) ; +#18379 = ORIENTED_EDGE ( 'NONE', *, *, #7007, .F. ) ; +#18380 = LINE ( 'NONE', #10701, #7731 ) ; +#18381 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18382 = PRESENTATION_STYLE_ASSIGNMENT (( #6768 ) ) ; +#18383 = VERTEX_POINT ( 'NONE', #28373 ) ; +#18384 = CYLINDRICAL_SURFACE ( 'NONE', #19698, 0.1000000000000002600 ) ; +#18385 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#18387 = AXIS2_PLACEMENT_3D ( 'NONE', #15614, #38208, #21739 ) ; +#18386 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30458 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9009, #5225, #15399 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18388 = LINE ( 'NONE', #4248, #739 ) ; +#18389 = AXIS2_PLACEMENT_3D ( 'NONE', #4045, #19899, #39067 ) ; +#18390 = FACE_OUTER_BOUND ( 'NONE', #20872, .T. ) ; +#18391 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, 0.07499999999999998300, -0.2498427124745999900 ) ) ; +#18392 = PLANE ( 'NONE', #39170 ) ; +#18393 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9679 ) ) ; +#18394 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18395 = FILL_AREA_STYLE_COLOUR ( '', #17602 ) ; +#18396 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9682 ) ) ; +#18397 = LINE ( 'NONE', #29899, #9749 ) ; +#18398 = PLANE ( 'NONE', #34692 ) ; +#18399 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18400 = LINE ( 'NONE', #30657, #34545 ) ; +#18401 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18402 = DIRECTION ( 'NONE', ( -0.0002094395087002862800, 0.0000000000000000000, -0.9999999780675458100 ) ) ; +#18403 = FILL_AREA_STYLE_COLOUR ( '', #34028 ) ; +#18404 = PRESENTATION_STYLE_ASSIGNMENT (( #38250 ) ) ; +#18405 = PLANE ( 'NONE', #21853 ) ; +#18406 = ORIENTED_EDGE ( 'NONE', *, *, #25471, .T. ) ; +#18407 = ADVANCED_FACE ( 'NONE', ( #19917 ), #2572, .F. ) ; +#18408 = VERTEX_POINT ( 'NONE', #14973 ) ; +#18409 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#18410 = ORIENTED_EDGE ( 'NONE', *, *, #40273, .F. ) ; +#18411 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18412 = ORIENTED_EDGE ( 'NONE', *, *, #19164, .F. ) ; +#18413 = LINE ( 'NONE', #39137, #40090 ) ; +#18414 = LINE ( 'NONE', #13571, #39605 ) ; +#18415 = MANIFOLD_SOLID_BREP ( '1-1-solid2', #40322 ) ; +#18416 = SURFACE_STYLE_FILL_AREA ( #26415 ) ; +#18417 = PRESENTATION_STYLE_ASSIGNMENT (( #13260 ) ) ; +#18418 = EDGE_CURVE ( 'NONE', #14924, #21645, #24499, .T. ) ; +#18419 = SURFACE_STYLE_USAGE ( .BOTH. , #15562 ) ; +#18420 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#18421 = FILL_AREA_STYLE_COLOUR ( '', #5317 ) ; +#18422 = ADVANCED_FACE ( 'NONE', ( #7774 ), #6282, .F. ) ; +#18423 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18424 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18425 = EDGE_CURVE ( 'NONE', #17355, #37949, #11340, .T. ) ; +#18426 = SURFACE_STYLE_FILL_AREA ( #14444 ) ; +#18427 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.2699999999999848600, -5.199999999999999300 ) ) ; +#18428 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18429 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8908 ), #11643 ) ; +#18430 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30027 ) ) ; +#18431 = FILL_AREA_STYLE_COLOUR ( '', #11229 ) ; +#18432 = ORIENTED_EDGE ( 'NONE', *, *, #22789, .T. ) ; +#18433 = AXIS2_PLACEMENT_3D ( 'NONE', #3583, #14861, #8892 ) ; +#18434 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, -0.008031980578130947000 ) ) ; +#18435 = AXIS2_PLACEMENT_3D ( 'NONE', #40196, #23425, #30471 ) ; +#18436 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#18437 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#18438 = ORIENTED_EDGE ( 'NONE', *, *, #28054, .T. ) ; +#18440 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1150 ) ) ; +#18439 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34381 ) ) ; +#18441 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#18442 = CARTESIAN_POINT ( 'NONE', ( 0.6500000000000000200, -1.499998254703827700, -6.699999999999994000 ) ) ; +#18443 = LINE ( 'NONE', #27217, #40646 ) ; +#18444 = AXIS2_PLACEMENT_3D ( 'NONE', #6457, #28633, #29179 ) ; +#18445 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18446 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745296169300, -2.594459358809380900 ) ) ; +#18447 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16260 ), #20637 ) ; +#18448 = ORIENTED_EDGE ( 'NONE', *, *, #40267, .F. ) ; +#18450 = AXIS2_PLACEMENT_3D ( 'NONE', #33323, #33177, #7029 ) ; +#18449 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 5.460789592991141900E-031 ) ) ; +#18452 = SURFACE_STYLE_FILL_AREA ( #31386 ) ; +#18451 = VECTOR ( 'NONE', #36474, 1000.000000000000000 ) ; +#18453 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24159, 'distance_accuracy_value', 'NONE'); +#18454 = ORIENTED_EDGE ( 'NONE', *, *, #23355, .F. ) ; +#18455 = VECTOR ( 'NONE', #41683, 1000.000000000000000 ) ; +#18456 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -7.744301232039317900E-017 ) ) ; +#18457 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -0.3500000000000000300, 0.1499999999999999700 ) ) ; +#18458 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.499998254703833500, -5.049999999999993600 ) ) ; +#18459 = ADVANCED_FACE ( 'NONE', ( #39616 ), #31511, .F. ) ; +#18460 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18461 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#18462 = VECTOR ( 'NONE', #7397, 1000.000000000000000 ) ; +#18463 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, -0.07499999999999999700, -0.3254101966249999800 ) ) ; +#18464 = ORIENTED_EDGE ( 'NONE', *, *, #39926, .F. ) ; +#18465 = CIRCLE ( 'NONE', #11453, 0.2000000000000000900 ) ; +#18466 = FILL_AREA_STYLE_COLOUR ( '', #615 ) ; +#18467 = PLANE ( 'NONE', #27701 ) ; +#18468 = PRESENTATION_STYLE_ASSIGNMENT (( #33614 ) ) ; +#18469 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18470 = ORIENTED_EDGE ( 'NONE', *, *, #31476, .F. ) ; +#18471 = CARTESIAN_POINT ( 'NONE', ( -4.070001745296171900, -0.2799999999999974200, -4.400000000000000400 ) ) ; +#18472 = EDGE_LOOP ( 'NONE', ( #27583, #35797, #13840, #8034 ) ) ; +#18473 = CARTESIAN_POINT ( 'NONE', ( -3.680000000000000200, -1.380001745296125500, -6.031671842700004200 ) ) ; +#18474 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18475 = FILL_AREA_STYLE ('',( #37932 ) ) ; +#18476 = EDGE_CURVE ( 'NONE', #28419, #33387, #26994, .T. ) ; +#18477 = ORIENTED_EDGE ( 'NONE', *, *, #23310, .T. ) ; +#18478 = LINE ( 'NONE', #21911, #24015 ) ; +#18479 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#18480 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.380001745296146200, -4.781671842700004200 ) ) ; +#18481 = EDGE_CURVE ( 'NONE', #38610, #23125, #36573, .T. ) ; +#18482 = FACE_OUTER_BOUND ( 'NONE', #35297, .T. ) ; +#18483 = SURFACE_STYLE_FILL_AREA ( #18659 ) ; +#18484 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18485 = ORIENTED_EDGE ( 'NONE', *, *, #7481, .F. ) ; +#18486 = SURFACE_SIDE_STYLE ('',( #30678 ) ) ; +#18487 = PRESENTATION_STYLE_ASSIGNMENT (( #10182 ) ) ; +#18488 = FACE_OUTER_BOUND ( 'NONE', #28061, .T. ) ; +#18489 = AXIS2_PLACEMENT_3D ( 'NONE', #10368, #29731, #32984 ) ; +#18490 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18491 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18492 = FACE_OUTER_BOUND ( 'NONE', #22395, .T. ) ; +#18493 = ORIENTED_EDGE ( 'NONE', *, *, #39481, .F. ) ; +#18494 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13872 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29563, #10197, #23208 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18495 = FILL_AREA_STYLE ('',( #15092 ) ) ; +#18496 = ORIENTED_EDGE ( 'NONE', *, *, #11868, .T. ) ; +#18497 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27381 ), #33886 ) ; +#18498 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#18500 = AXIS2_PLACEMENT_3D ( 'NONE', #12579, #31934, #28416 ) ; +#18499 = AXIS2_PLACEMENT_3D ( 'NONE', #21690, #11757, #5560 ) ; +#18501 = EDGE_LOOP ( 'NONE', ( #25283, #16161, #20782, #39817 ) ) ; +#18502 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18503 = LINE ( 'NONE', #29255, #3789 ) ; +#18505 = EDGE_CURVE ( 'NONE', #16026, #39704, #19907, .T. ) ; +#18504 = FILL_AREA_STYLE_COLOUR ( '', #12177 ) ; +#18506 = CARTESIAN_POINT ( 'NONE', ( 2.945000000000000300, -0.5999999999999999800, -1.930000000000000200 ) ) ; +#18507 = ADVANCED_FACE ( 'NONE', ( #3701 ), #19355, .T. ) ; +#18508 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, 0.0000000000000000000 ) ) ; +#18509 = FILL_AREA_STYLE_COLOUR ( '', #4577 ) ; +#18511 = STYLED_ITEM ( 'NONE', ( #18289 ), #1043 ) ; +#18510 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38763 ), #40120 ) ; +#18512 = SURFACE_STYLE_USAGE ( .BOTH. , #25295 ) ; +#18513 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27456, 'distance_accuracy_value', 'NONE'); +#18514 = ORIENTED_EDGE ( 'NONE', *, *, #10323, .F. ) ; +#18515 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#18516 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18517 = LINE ( 'NONE', #37408, #7858 ) ; +#18518 = ORIENTED_EDGE ( 'NONE', *, *, #3713, .F. ) ; +#18519 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#18520 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18521 = FACE_OUTER_BOUND ( 'NONE', #31838, .T. ) ; +#18522 = VECTOR ( 'NONE', #26980, 1000.000000000000000 ) ; +#18523 = SURFACE_STYLE_USAGE ( .BOTH. , #15122 ) ; +#18524 = CARTESIAN_POINT ( 'NONE', ( 4.449999999999999300, 0.08000174529616929700, -7.200000000000001100 ) ) ; +#18525 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18526 = VERTEX_POINT ( 'NONE', #25832 ) ; +#18527 = VERTEX_POINT ( 'NONE', #41372 ) ; +#18528 = FACE_OUTER_BOUND ( 'NONE', #36757, .T. ) ; +#18529 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#18530 = CARTESIAN_POINT ( 'NONE', ( 4.620424212713737200, -0.2800000000000025200, -1.049979056049130000 ) ) ; +#18531 = SURFACE_STYLE_FILL_AREA ( #28478 ) ; +#18532 = CARTESIAN_POINT ( 'NONE', ( -3.846156164834738400, 0.6165030250713622300, -4.400260404654702000 ) ) ; +#18533 = LINE ( 'NONE', #40521, #23044 ) ; +#18534 = PRESENTATION_STYLE_ASSIGNMENT (( #4013 ) ) ; +#18535 = ORIENTED_EDGE ( 'NONE', *, *, #39346, .F. ) ; +#18536 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000013700, -1.949998254703824200, -6.732287565553227700 ) ) ; +#18537 = PRESENTATION_STYLE_ASSIGNMENT (( #39141 ) ) ; +#18538 = ORIENTED_EDGE ( 'NONE', *, *, #6947, .F. ) ; +#18539 = EDGE_CURVE ( 'NONE', #15139, #25234, #13839, .T. ) ; +#18540 = SURFACE_STYLE_USAGE ( .BOTH. , #37858 ) ; +#18541 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18542 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.931303021499040500, -0.3590461068823621000 ) ) ; +#18543 = VECTOR ( 'NONE', #36501, 1000.000000000000000 ) ; +#18544 = VECTOR ( 'NONE', #17332, 1000.000000000000000 ) ; +#18545 = FILL_AREA_STYLE ('',( #40122 ) ) ; +#18546 = EDGE_CURVE ( 'NONE', #38000, #19388, #22915, .T. ) ; +#18547 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18548 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18549 = PRESENTATION_STYLE_ASSIGNMENT (( #21667 ) ) ; +#18550 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000004700, -1.400001745296187000, 0.001000000000001867500 ) ) ; +#18551 = FACE_OUTER_BOUND ( 'NONE', #41751, .T. ) ; +#18552 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3916 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2425, #18650, #41226 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18553 = CIRCLE ( 'NONE', #18820, 0.04999999999999969700 ) ; +#18554 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12006 ), #29911 ) ; +#18555 = FACE_OUTER_BOUND ( 'NONE', #25470, .T. ) ; +#18556 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#18557 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12819 ) ) ; +#18558 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5942, 'distance_accuracy_value', 'NONE'); +#18559 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18560 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18561 = ORIENTED_EDGE ( 'NONE', *, *, #5895, .F. ) ; +#18562 = PRESENTATION_STYLE_ASSIGNMENT (( #1709 ) ) ; +#18564 = EDGE_CURVE ( 'NONE', #25924, #15250, #30004, .T. ) ; +#18563 = STYLED_ITEM ( 'NONE', ( #2388 ), #36723 ) ; +#18565 = VECTOR ( 'NONE', #38256, 1000.000000000000000 ) ; +#18566 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18567 = VERTEX_POINT ( 'NONE', #9271 ) ; +#18568 = VERTEX_POINT ( 'NONE', #6477 ) ; +#18569 = ORIENTED_EDGE ( 'NONE', *, *, #2371, .T. ) ; +#18570 = LINE ( 'NONE', #37860, #32675 ) ; +#18571 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.5300017452961696100, -3.999999999999997300 ) ) ; +#18573 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40435 ) ) ; +#18572 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2876 ), #1031 ) ; +#18574 = AXIS2_PLACEMENT_3D ( 'NONE', #5217, #41087, #21497 ) ; +#18575 = LINE ( 'NONE', #24736, #14503 ) ; +#18576 = FILL_AREA_STYLE ('',( #28026 ) ) ; +#18577 = PLANE ( 'NONE', #35929 ) ; +#18578 = CIRCLE ( 'NONE', #39161, 0.2000000000000000900 ) ; +#18579 = ORIENTED_EDGE ( 'NONE', *, *, #38856, .T. ) ; +#18580 = CIRCLE ( 'NONE', #41520, 0.1000000000000002600 ) ; +#18581 = EDGE_LOOP ( 'NONE', ( #36272, #36815, #21130, #29264 ) ) ; +#18582 = SURFACE_STYLE_USAGE ( .BOTH. , #41153 ) ; +#18583 = ADVANCED_FACE ( 'NONE', ( #11267 ), #33368, .T. ) ; +#18584 = CARTESIAN_POINT ( 'NONE', ( 4.170000000000001700, -0.2800000000000026400, -0.2000017452961698200 ) ) ; +#18585 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -2.904459358809384600 ) ) ; +#18586 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18587 = PLANE ( 'NONE', #35482 ) ; +#18588 = FILL_AREA_STYLE ('',( #25237 ) ) ; +#18589 = CARTESIAN_POINT ( 'NONE', ( -3.233743872640926700, -0.4843419060096996700, -1.814380149268539400 ) ) ; +#18590 = SURFACE_SIDE_STYLE ('',( #3408 ) ) ; +#18591 = EDGE_CURVE ( 'NONE', #24188, #546, #36072, .T. ) ; +#18592 = ORIENTED_EDGE ( 'NONE', *, *, #33978, .T. ) ; +#18593 = FACE_OUTER_BOUND ( 'NONE', #34728, .T. ) ; +#18594 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999998900, 0.4343145750507618200, -3.249999999999999600 ) ) ; +#18595 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#18596 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33638, 'distance_accuracy_value', 'NONE'); +#18597 = DIRECTION ( 'NONE', ( -3.872150616019659000E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#18598 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18599 = EDGE_CURVE ( 'NONE', #22294, #28863, #17392, .T. ) ; +#18600 = VERTEX_POINT ( 'NONE', #35860 ) ; +#18601 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003900, 0.3000000000000149200, -3.099999999999998800 ) ) ; +#18602 = VECTOR ( 'NONE', #31630, 1000.000000000000000 ) ; +#18603 = EDGE_CURVE ( 'NONE', #5874, #8041, #38061, .T. ) ; +#18604 = ORIENTED_EDGE ( 'NONE', *, *, #25948, .F. ) ; +#18605 = EDGE_LOOP ( 'NONE', ( #13471, #21978, #37800, #40561 ) ) ; +#18606 = VERTEX_POINT ( 'NONE', #32446 ) ; +#18607 = SURFACE_SIDE_STYLE ('',( #6393 ) ) ; +#18608 = SURFACE_STYLE_FILL_AREA ( #20145 ) ; +#18609 = FACE_OUTER_BOUND ( 'NONE', #11861, .T. ) ; +#18610 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#18611 = ORIENTED_EDGE ( 'NONE', *, *, #36964, .F. ) ; +#18612 = SURFACE_SIDE_STYLE ('',( #38348 ) ) ; +#18613 = ORIENTED_EDGE ( 'NONE', *, *, #14743, .F. ) ; +#18615 = ORIENTED_EDGE ( 'NONE', *, *, #14141, .T. ) ; +#18614 = ADVANCED_FACE ( 'NONE', ( #23940 ), #3761, .F. ) ; +#18616 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#18617 = AXIS2_PLACEMENT_3D ( 'NONE', #22194, #25861, #9588 ) ; +#18618 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15622 ) ) ; +#18619 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29299, 'distance_accuracy_value', 'NONE'); +#18620 = CARTESIAN_POINT ( 'NONE', ( -0.2500000000000032800, 0.2800017452961687200, -6.749999999999999100 ) ) ; +#18621 = EDGE_CURVE ( 'NONE', #7208, #37070, #22403, .T. ) ; +#18622 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18623 = EDGE_LOOP ( 'NONE', ( #26336, #36360 ) ) ; +#18624 = SURFACE_SIDE_STYLE ('',( #5503 ) ) ; +#18625 = ADVANCED_FACE ( 'NONE', ( #36540 ), #24948, .F. ) ; +#18626 = FACE_OUTER_BOUND ( 'NONE', #30216, .T. ) ; +#18628 = AXIS2_PLACEMENT_3D ( 'NONE', #8040, #21089, #40384 ) ; +#18627 = STYLED_ITEM ( 'NONE', ( #28659 ), #27606 ) ; +#18629 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18630 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, -2.322941965694886000, -1.250000000000000000 ) ) ; +#18631 = STYLED_ITEM ( 'NONE', ( #29359 ), #40507 ) ; +#18632 = SURFACE_STYLE_USAGE ( .BOTH. , #14946 ) ; +#18633 = AXIS2_PLACEMENT_3D ( 'NONE', #32130, #6304, #35113 ) ; +#18635 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26732, 'distance_accuracy_value', 'NONE'); +#18634 = PRESENTATION_STYLE_ASSIGNMENT (( #41174 ) ) ; +#18636 = VERTEX_POINT ( 'NONE', #10401 ) ; +#18637 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18638 = AXIS2_PLACEMENT_3D ( 'NONE', #28477, #5462, #31171 ) ; +#18639 = ORIENTED_EDGE ( 'NONE', *, *, #7803, .T. ) ; +#18640 = LINE ( 'NONE', #40580, #34305 ) ; +#18641 = PLANE ( 'NONE', #15573 ) ; +#18642 = EDGE_LOOP ( 'NONE', ( #15806, #31327, #23983, #12470 ) ) ; +#18643 = ORIENTED_EDGE ( 'NONE', *, *, #25296, .F. ) ; +#18644 = LINE ( 'NONE', #23478, #22203 ) ; +#18645 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18646 = ORIENTED_EDGE ( 'NONE', *, *, #25018, .F. ) ; +#18648 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18647 = CIRCLE ( 'NONE', #4447, 0.3000000000000003800 ) ; +#18649 = PRESENTATION_STYLE_ASSIGNMENT (( #12915 ) ) ; +#18650 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18651 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#18652 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18653 = VERTEX_POINT ( 'NONE', #583 ) ; +#18654 = FILL_AREA_STYLE ('',( #31619 ) ) ; +#18655 = LINE ( 'NONE', #21030, #30756 ) ; +#18656 = VERTEX_POINT ( 'NONE', #35574 ) ; +#18657 = ORIENTED_EDGE ( 'NONE', *, *, #27019, .F. ) ; +#18658 = DIRECTION ( 'NONE', ( 5.916456789157588500E-031, 1.000000000000000000, -2.367138801244518800E-016 ) ) ; +#18659 = FILL_AREA_STYLE ('',( #24608 ) ) ; +#18660 = DIRECTION ( 'NONE', ( -0.9396926207859068700, 0.3420201433256725400, -5.691343398792006000E-031 ) ) ; +#18661 = EDGE_LOOP ( 'NONE', ( #467, #12942 ) ) ; +#18662 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18663 = ADVANCED_FACE ( 'NONE', ( #31477 ), #41576, .T. ) ; +#18664 = EDGE_CURVE ( 'NONE', #18527, #27168, #18889, .T. ) ; +#18665 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#18666 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20037 ) ) ; +#18667 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#18668 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#18669 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18670 = EDGE_CURVE ( 'NONE', #37919, #14271, #2215, .T. ) ; +#18671 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18673 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.380001745296165500, -2.099999999999999600 ) ) ; +#18672 = LINE ( 'NONE', #27700, #34830 ) ; +#18674 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18675 = ADVANCED_FACE ( 'NONE', ( #33014 ), #1274, .F. ) ; +#18676 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20052 ) ) ; +#18677 = FILL_AREA_STYLE ('',( #34485 ) ) ; +#18678 = VERTEX_POINT ( 'NONE', #22986 ) ; +#18681 = EDGE_CURVE ( 'NONE', #31696, #37326, #33503, .T. ) ; +#18680 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5112 ) ) ; +#18679 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18682 = LINE ( 'NONE', #17748, #7008 ) ; +#18683 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, -0.6500000000000001300, -3.299999999999999800 ) ) ; +#18684 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000008300, -0.6199999999999846700, -5.199999999999999300 ) ) ; +#18685 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19018, 'distance_accuracy_value', 'NONE'); +#18686 = ORIENTED_EDGE ( 'NONE', *, *, #24304, .T. ) ; +#18687 = FACE_OUTER_BOUND ( 'NONE', #30587, .T. ) ; +#18689 = STYLED_ITEM ( 'NONE', ( #1814 ), #4200 ) ; +#18688 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4620 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19915, #6608, #39359 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18690 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4868 ) ) ; +#18691 = PRESENTATION_STYLE_ASSIGNMENT (( #31206 ) ) ; +#18692 = AXIS2_PLACEMENT_3D ( 'NONE', #26256, #29770, #10406 ) ; +#18693 = ORIENTED_EDGE ( 'NONE', *, *, #8773, .F. ) ; +#18694 = ORIENTED_EDGE ( 'NONE', *, *, #36583, .F. ) ; +#18695 = ORIENTED_EDGE ( 'NONE', *, *, #30334, .T. ) ; +#18696 = PRESENTATION_STYLE_ASSIGNMENT (( #20458 ) ) ; +#18697 = AXIS2_PLACEMENT_3D ( 'NONE', #1650, #33953, #41003 ) ; +#18698 = SURFACE_SIDE_STYLE ('',( #16848 ) ) ; +#18699 = FILL_AREA_STYLE ('',( #24061 ) ) ; +#18700 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18701 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -2.294459358809384700 ) ) ; +#18702 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18703 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27691, 'distance_accuracy_value', 'NONE'); +#18704 = ORIENTED_EDGE ( 'NONE', *, *, #8836, .T. ) ; +#18705 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#18706 = SURFACE_STYLE_FILL_AREA ( #11245 ) ; +#18707 = SURFACE_STYLE_USAGE ( .BOTH. , #41416 ) ; +#18708 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#18709 = LINE ( 'NONE', #29949, #35889 ) ; +#18710 = ADVANCED_FACE ( 'NONE', ( #9232 ), #17208, .T. ) ; +#18711 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18712 = SURFACE_SIDE_STYLE ('',( #10137 ) ) ; +#18713 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18714 = ORIENTED_EDGE ( 'NONE', *, *, #10264, .F. ) ; +#18715 = LINE ( 'NONE', #23105, #37379 ) ; +#18716 = PLANE ( 'NONE', #18726 ) ; +#18717 = EDGE_CURVE ( 'NONE', #32396, #21253, #10212, .T. ) ; +#18718 = CARTESIAN_POINT ( 'NONE', ( -3.131868397853661900, 0.2999999999999999900, 0.9749213189744094800 ) ) ; +#18719 = ORIENTED_EDGE ( 'NONE', *, *, #3353, .F. ) ; +#18720 = EDGE_LOOP ( 'NONE', ( #21056, #21522, #964, #32213 ) ) ; +#18721 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#18722 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.08000174529616772800, -7.150000000000001200 ) ) ; +#18723 = FILL_AREA_STYLE_COLOUR ( '', #24441 ) ; +#18724 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#18725 = EDGE_CURVE ( 'NONE', #6323, #38991, #11726, .T. ) ; +#18726 = AXIS2_PLACEMENT_3D ( 'NONE', #25092, #34803, #15184 ) ; +#18727 = CYLINDRICAL_SURFACE ( 'NONE', #39868, 0.2000000000000000900 ) ; +#18728 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.3000000000000001600, -1.250000000000000000 ) ) ; +#18729 = PRESENTATION_STYLE_ASSIGNMENT (( #25821 ) ) ; +#18730 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875040000E-015, 6.056601140521967000E-031 ) ) ; +#18731 = ORIENTED_EDGE ( 'NONE', *, *, #16111, .T. ) ; +#18732 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32540 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3482, #29448, #3616 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18733 = ORIENTED_EDGE ( 'NONE', *, *, #41453, .T. ) ; +#18734 = EDGE_LOOP ( 'NONE', ( #32665, #11184, #13845, #6804 ) ) ; +#18735 = VECTOR ( 'NONE', #1387, 1000.000000000000000 ) ; +#18736 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18737 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36259, 'distance_accuracy_value', 'NONE'); +#18738 = STYLED_ITEM ( 'NONE', ( #22156 ), #13971 ) ; +#18739 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.3279248189596167300 ) ) ; +#18740 = CARTESIAN_POINT ( 'NONE', ( -4.821303021499042900, 0.2800000000000028000, -0.3590461068823621000 ) ) ; +#18741 = ORIENTED_EDGE ( 'NONE', *, *, #9330, .T. ) ; +#18742 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1064 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10806, #26814, #4471 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18743 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23304 ) ) ; +#18744 = PRESENTATION_STYLE_ASSIGNMENT (( #10123 ) ) ; +#18745 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 1.480001745296168200, -3.999999999999999100 ) ) ; +#18746 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#18748 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9936 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #79, #26152, #35907 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18747 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17542 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37572, #2035, #8736 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18749 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#18751 = EDGE_CURVE ( 'NONE', #7601, #23029, #38508, .T. ) ; +#18750 = STYLED_ITEM ( 'NONE', ( #20076 ), #34958 ) ; +#18752 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -10.30000000000000100, -1.250000000000000000 ) ) ; +#18753 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18754 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#18755 = CIRCLE ( 'NONE', #39242, 0.9499999999999998400 ) ; +#18756 = SURFACE_STYLE_FILL_AREA ( #12762 ) ; +#18757 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#18759 = AXIS2_PLACEMENT_3D ( 'NONE', #36570, #23444, #30215 ) ; +#18758 = AXIS2_PLACEMENT_3D ( 'NONE', #27424, #40537, #14443 ) ; +#18760 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18761 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -4.775000000000000400 ) ) ; +#18762 = ORIENTED_EDGE ( 'NONE', *, *, #29348, .T. ) ; +#18763 = SURFACE_STYLE_USAGE ( .BOTH. , #6174 ) ; +#18764 = SURFACE_STYLE_FILL_AREA ( #31031 ) ; +#18765 = LINE ( 'NONE', #24740, #20319 ) ; +#18766 = SURFACE_SIDE_STYLE ('',( #36758 ) ) ; +#18767 = SURFACE_STYLE_USAGE ( .BOTH. , #21055 ) ; +#18768 = PRESENTATION_STYLE_ASSIGNMENT (( #13481 ) ) ; +#18769 = VERTEX_POINT ( 'NONE', #23411 ) ; +#18770 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18771 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 1.479935965442713600E-014, -1.649999999999999500 ) ) ; +#18772 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#18773 = ORIENTED_EDGE ( 'NONE', *, *, #36034, .T. ) ; +#18774 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#18775 = ORIENTED_EDGE ( 'NONE', *, *, #5532, .F. ) ; +#18776 = ORIENTED_EDGE ( 'NONE', *, *, #5659, .T. ) ; +#18777 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18778 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18779 = FILL_AREA_STYLE ('',( #6052 ) ) ; +#18780 = VERTEX_POINT ( 'NONE', #1006 ) ; +#18781 = SURFACE_SIDE_STYLE ('',( #40950 ) ) ; +#18782 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#18783 = ORIENTED_EDGE ( 'NONE', *, *, #624, .F. ) ; +#18784 = EDGE_CURVE ( 'NONE', #36459, #20486, #39521, .T. ) ; +#18785 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18786 = VECTOR ( 'NONE', #22665, 1000.000000000000100 ) ; +#18787 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18788 = EDGE_CURVE ( 'NONE', #34267, #36030, #35495, .T. ) ; +#18789 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#18790 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6568 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21842, #31547, #22233 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18791 = SURFACE_SIDE_STYLE ('',( #36557 ) ) ; +#18792 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.984726612956918400E-031, -2.168404344971012800E-015 ) ) ; +#18793 = LINE ( 'NONE', #678, #16744 ) ; +#18794 = SURFACE_STYLE_FILL_AREA ( #12615 ) ; +#18795 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#18796 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26072 ) ) ; +#18797 = VECTOR ( 'NONE', #2703, 1000.000000000000000 ) ; +#18798 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29688, 'distance_accuracy_value', 'NONE'); +#18799 = SURFACE_STYLE_USAGE ( .BOTH. , #35445 ) ; +#18800 = ORIENTED_EDGE ( 'NONE', *, *, #5338, .F. ) ; +#18801 = VECTOR ( 'NONE', #21060, 1000.000000000000000 ) ; +#18802 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#18803 = SURFACE_SIDE_STYLE ('',( #39199 ) ) ; +#18804 = AXIS2_PLACEMENT_3D ( 'NONE', #22714, #3352, #25951 ) ; +#18805 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39386 ) ) ; +#18806 = EDGE_LOOP ( 'NONE', ( #37457, #20081, #29154, #41875 ) ) ; +#18808 = AXIS2_PLACEMENT_3D ( 'NONE', #17664, #33734, #1704 ) ; +#18807 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11065 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #513, #29400, #19982 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18809 = FILL_AREA_STYLE ('',( #22050 ) ) ; +#18810 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32029, 'distance_accuracy_value', 'NONE'); +#18811 = EDGE_CURVE ( 'NONE', #24480, #12291, #679, .T. ) ; +#18812 = ORIENTED_EDGE ( 'NONE', *, *, #886, .T. ) ; +#18813 = SURFACE_STYLE_FILL_AREA ( #31130 ) ; +#18814 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, -0.2336906316634772600, -1.600000000000000800 ) ) ; +#18815 = SURFACE_STYLE_USAGE ( .BOTH. , #37993 ) ; +#18816 = SURFACE_STYLE_USAGE ( .BOTH. , #15547 ) ; +#18818 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16637 ) ) ; +#18817 = AXIS2_PLACEMENT_3D ( 'NONE', #40078, #14270, #14679 ) ; +#18819 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.776263578034402700E-017 ) ) ; +#18820 = AXIS2_PLACEMENT_3D ( 'NONE', #26613, #16847, #30124 ) ; +#18821 = SURFACE_STYLE_USAGE ( .BOTH. , #15686 ) ; +#18822 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18823 = ORIENTED_EDGE ( 'NONE', *, *, #12515, .T. ) ; +#18824 = VERTEX_POINT ( 'NONE', #36688 ) ; +#18825 = ADVANCED_FACE ( 'NONE', ( #1677 ), #21379, .T. ) ; +#18826 = LINE ( 'NONE', #10695, #2192 ) ; +#18827 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#18828 = VECTOR ( 'NONE', #23408, 1000.000000000000000 ) ; +#18829 = PRESENTATION_STYLE_ASSIGNMENT (( #5831 ) ) ; +#18830 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18831 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18832 = ADVANCED_FACE ( 'NONE', ( #12732 ), #23376, .T. ) ; +#18833 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18834 = ORIENTED_EDGE ( 'NONE', *, *, #19401, .F. ) ; +#18835 = FILL_AREA_STYLE_COLOUR ( '', #2073 ) ; +#18836 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18837 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#18838 = EDGE_CURVE ( 'NONE', #30651, #22294, #36027, .T. ) ; +#18839 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40764, 'distance_accuracy_value', 'NONE'); +#18840 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18841 = EDGE_CURVE ( 'NONE', #38067, #23693, #11231, .T. ) ; +#18842 = ORIENTED_EDGE ( 'NONE', *, *, #32355, .T. ) ; +#18843 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#18844 = FACE_OUTER_BOUND ( 'NONE', #32187, .T. ) ; +#18845 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18846 = ORIENTED_EDGE ( 'NONE', *, *, #25054, .T. ) ; +#18847 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#18848 = ORIENTED_EDGE ( 'NONE', *, *, #26096, .F. ) ; +#18849 = LINE ( 'NONE', #7784, #26423 ) ; +#18850 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39101 ), #1010 ) ; +#18851 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 2.322941965694886000, 0.6999999999999999600 ) ) ; +#18852 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18853 = SURFACE_STYLE_USAGE ( .BOTH. , #28721 ) ; +#18854 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.4300017452961686900, -6.249999999999998200 ) ) ; +#18855 = VERTEX_POINT ( 'NONE', #11234 ) ; +#18856 = FILL_AREA_STYLE_COLOUR ( '', #8550 ) ; +#18857 = PRESENTATION_STYLE_ASSIGNMENT (( #26993 ) ) ; +#18858 = EDGE_LOOP ( 'NONE', ( #11011, #40002, #22116, #4514 ) ) ; +#18859 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2915 ) ) ; +#18860 = DIRECTION ( 'NONE', ( -9.637352644315598700E-016, 1.807003620809174900E-016, 1.000000000000000000 ) ) ; +#18861 = VECTOR ( 'NONE', #32341, 1000.000000000000000 ) ; +#18862 = PLANE ( 'NONE', #2555 ) ; +#18863 = PRESENTATION_STYLE_ASSIGNMENT (( #2346 ) ) ; +#18864 = VECTOR ( 'NONE', #37566, 1000.000000000000000 ) ; +#18865 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#18866 = FILL_AREA_STYLE ('',( #31558 ) ) ; +#18867 = LINE ( 'NONE', #35735, #38044 ) ; +#18870 = EDGE_CURVE ( 'NONE', #36907, #35464, #7176, .T. ) ; +#18869 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#18868 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #139 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12569, #6379, #25338 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18871 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18872 = ADVANCED_FACE ( 'NONE', ( #14780 ), #33468, .F. ) ; +#18873 = DIRECTION ( 'NONE', ( -6.056601140521967000E-031, 3.502176061030485800E-045, 1.000000000000000000 ) ) ; +#18874 = VECTOR ( 'NONE', #4898, 1000.000000000000000 ) ; +#18875 = LINE ( 'NONE', #38932, #4209 ) ; +#18876 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#18878 = STYLED_ITEM ( 'NONE', ( #34082 ), #2637 ) ; +#18877 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3021 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27911, #31285, #31560 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18879 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9506 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9695, #35571, #36150 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18880 = ORIENTED_EDGE ( 'NONE', *, *, #17543, .F. ) ; +#18881 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18882 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40340 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29159, #26633, #32550 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18883 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18884 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#18885 = ADVANCED_FACE ( 'NONE', ( #13218 ), #40494, .T. ) ; +#18886 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.2999999999999848300, -4.249999999999998200 ) ) ; +#18887 = SURFACE_STYLE_FILL_AREA ( #8649 ) ; +#18888 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22446, 'distance_accuracy_value', 'NONE'); +#18889 = LINE ( 'NONE', #29474, #28947 ) ; +#18890 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18891 = ORIENTED_EDGE ( 'NONE', *, *, #24221, .F. ) ; +#18892 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.480001745296167600, -4.200000000000000200 ) ) ; +#18893 = ORIENTED_EDGE ( 'NONE', *, *, #16724, .F. ) ; +#18895 = ORIENTED_EDGE ( 'NONE', *, *, #688, .F. ) ; +#18894 = CYLINDRICAL_SURFACE ( 'NONE', #26841, 0.2000000000000000900 ) ; +#18896 = VERTEX_POINT ( 'NONE', #33988 ) ; +#18897 = CIRCLE ( 'NONE', #1833, 0.2818014882866900500 ) ; +#18898 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.480001745296169100, -4.100000000000000500 ) ) ; +#18899 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#18900 = LINE ( 'NONE', #24305, #10259 ) ; +#18901 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18902 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#18903 = ORIENTED_EDGE ( 'NONE', *, *, #2620, .T. ) ; +#18904 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18906 = FACE_OUTER_BOUND ( 'NONE', #22220, .T. ) ; +#18905 = CARTESIAN_POINT ( 'NONE', ( -4.170000000000001700, -0.2799999999999974200, -0.2000017452961698200 ) ) ; +#18908 = VECTOR ( 'NONE', #16142, 1000.000000000000000 ) ; +#18907 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#18909 = EDGE_CURVE ( 'NONE', #31125, #1954, #38989, .T. ) ; +#18910 = PRESENTATION_STYLE_ASSIGNMENT (( #31792 ) ) ; +#18911 = EDGE_CURVE ( 'NONE', #22538, #39102, #31910, .T. ) ; +#18912 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38366 ) ) ; +#18913 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18914 = EDGE_CURVE ( 'NONE', #4189, #33502, #5660, .T. ) ; +#18915 = SURFACE_STYLE_USAGE ( .BOTH. , #38506 ) ; +#18916 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#18917 = DIRECTION ( 'NONE', ( -3.944304526105059000E-031, -1.000000000000000000, 2.367138801244519300E-016 ) ) ; +#18918 = STYLED_ITEM ( 'NONE', ( #41482 ), #21535 ) ; +#18919 = ADVANCED_FACE ( 'NONE', ( #17304 ), #25746, .F. ) ; +#18920 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18921 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29974 ) ) ; +#18922 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#18923 = SURFACE_STYLE_FILL_AREA ( #3800 ) ; +#18924 = ORIENTED_EDGE ( 'NONE', *, *, #5965, .F. ) ; +#18926 = EDGE_CURVE ( 'NONE', #11411, #37825, #32925, .T. ) ; +#18925 = AXIS2_PLACEMENT_3D ( 'NONE', #12973, #3119, #2992 ) ; +#18927 = PRESENTATION_STYLE_ASSIGNMENT (( #24074 ) ) ; +#18928 = PLANE ( 'NONE', #31298 ) ; +#18929 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000900, 1.167528855492236500, -14.55000000000000100 ) ) ; +#18930 = ORIENTED_EDGE ( 'NONE', *, *, #26149, .F. ) ; +#18931 = CARTESIAN_POINT ( 'NONE', ( -3.245000000007725500, 0.3500000000000002600, -1.620710678118654400 ) ) ; +#18932 = ORIENTED_EDGE ( 'NONE', *, *, #15670, .T. ) ; +#18933 = ORIENTED_EDGE ( 'NONE', *, *, #40709, .T. ) ; +#18934 = ORIENTED_EDGE ( 'NONE', *, *, #34921, .T. ) ; +#18935 = SURFACE_SIDE_STYLE ('',( #20705 ) ) ; +#18936 = PRESENTATION_STYLE_ASSIGNMENT (( #19003 ) ) ; +#18937 = AXIS2_PLACEMENT_3D ( 'NONE', #21598, #2253, #24850 ) ; +#18938 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2982 ) ) ; +#18939 = FILL_AREA_STYLE ('',( #25706 ) ) ; +#18940 = LINE ( 'NONE', #7992, #38108 ) ; +#18941 = CYLINDRICAL_SURFACE ( 'NONE', #22967, 0.1999999999999996500 ) ; +#18942 = MANIFOLD_SOLID_BREP ( '1-1-solid21', #22238 ) ; +#18943 = STYLED_ITEM ( 'NONE', ( #4160 ), #33706 ) ; +#18944 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998497600, -4.250000000000000000 ) ) ; +#18946 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18945 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18947 = VECTOR ( 'NONE', #19522, 1000.000000000000000 ) ; +#18948 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#18949 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 2.367138801244516800E-016, 1.000000000000000000 ) ) ; +#18950 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#18951 = AXIS2_PLACEMENT_3D ( 'NONE', #3725, #3874, #7112 ) ; +#18952 = VECTOR ( 'NONE', #40554, 1000.000000000000000 ) ; +#18953 = SURFACE_SIDE_STYLE ('',( #23120 ) ) ; +#18954 = LINE ( 'NONE', #36875, #26512 ) ; +#18955 = ORIENTED_EDGE ( 'NONE', *, *, #3180, .T. ) ; +#18956 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 4.688441826964342300E-016 ) ) ; +#18957 = FILL_AREA_STYLE ('',( #28937 ) ) ; +#18958 = PRESENTATION_STYLE_ASSIGNMENT (( #29206 ) ) ; +#18960 = SURFACE_STYLE_USAGE ( .BOTH. , #22340 ) ; +#18959 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#18961 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18962 = ORIENTED_EDGE ( 'NONE', *, *, #39342, .T. ) ; +#18963 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#18964 = VERTEX_POINT ( 'NONE', #38557 ) ; +#18965 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18966 = FILL_AREA_STYLE ('',( #21945 ) ) ; +#18967 = SURFACE_STYLE_USAGE ( .BOTH. , #3000 ) ; +#18968 = VERTEX_POINT ( 'NONE', #19256 ) ; +#18969 = ORIENTED_EDGE ( 'NONE', *, *, #24866, .T. ) ; +#18970 = LINE ( 'NONE', #37806, #20515 ) ; +#18971 = EDGE_CURVE ( 'NONE', #3407, #34162, #41039, .T. ) ; +#18972 = ORIENTED_EDGE ( 'NONE', *, *, #2400, .T. ) ; +#18973 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.056601140521966100E-031 ) ) ; +#18975 = LINE ( 'NONE', #32955, #28034 ) ; +#18974 = VECTOR ( 'NONE', #19408, 1000.000000000000000 ) ; +#18976 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40229, 'distance_accuracy_value', 'NONE'); +#18977 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 2.032879073410321300E-016, 1.000000000000000000 ) ) ; +#18978 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#18979 = EDGE_CURVE ( 'NONE', #40645, #28917, #24869, .T. ) ; +#18980 = AXIS2_PLACEMENT_3D ( 'NONE', #31684, #32234, #12326 ) ; +#18981 = VERTEX_POINT ( 'NONE', #35343 ) ; +#18982 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18983 = FILL_AREA_STYLE ('',( #25211 ) ) ; +#18984 = SURFACE_STYLE_FILL_AREA ( #9159 ) ; +#18985 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.168401191219098200E-015, 0.0000000000000000000 ) ) ; +#18986 = CLOSED_SHELL ( 'NONE', ( #6547, #5472, #23173, #8924, #15423, #20088, #23538, #3025 ) ) ; +#18987 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#18988 = FACE_OUTER_BOUND ( 'NONE', #34304, .T. ) ; +#18989 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33972 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16147, #38860, #38580 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#18990 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#18991 = VERTEX_POINT ( 'NONE', #31657 ) ; +#18992 = SURFACE_STYLE_FILL_AREA ( #28574 ) ; +#18993 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#18994 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#18995 = STYLED_ITEM ( 'NONE', ( #13119 ), #37918 ) ; +#18996 = AXIS2_PLACEMENT_3D ( 'NONE', #39258, #1052, #39401 ) ; +#18997 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, 0.7071067811865483500 ) ) ; +#18998 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27143, 'distance_accuracy_value', 'NONE'); +#19000 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35500 ) ) ; +#18999 = STYLED_ITEM ( 'NONE', ( #12590 ), #29594 ) ; +#19001 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19002 = CARTESIAN_POINT ( 'NONE', ( -1.400000000000000800, 1.630001745296169500, -1.750000000000000900 ) ) ; +#19003 = SURFACE_STYLE_USAGE ( .BOTH. , #22108 ) ; +#19004 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19005 = EDGE_LOOP ( 'NONE', ( #7049, #15425, #29800, #13873 ) ) ; +#19007 = EDGE_CURVE ( 'NONE', #22408, #23832, #2139, .T. ) ; +#19006 = AXIS2_PLACEMENT_3D ( 'NONE', #10819, #7582, #17651 ) ; +#19009 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12464 ) ) ; +#19008 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19010 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#19011 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40066 ) ) ; +#19012 = CARTESIAN_POINT ( 'NONE', ( -3.680000000000000200, -1.380001745296125500, -6.031671842700004200 ) ) ; +#19013 = LINE ( 'NONE', #28282, #11387 ) ; +#19014 = PLANE ( 'NONE', #8009 ) ; +#19015 = EDGE_LOOP ( 'NONE', ( #18538, #37965, #36160, #12695 ) ) ; +#19016 = FILL_AREA_STYLE_COLOUR ( '', #32211 ) ; +#19017 = VERTEX_POINT ( 'NONE', #2889 ) ; +#19018 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19019 = EDGE_LOOP ( 'NONE', ( #26688, #39768, #41392, #33785, #6853, #34197 ) ) ; +#19020 = LINE ( 'NONE', #27651, #17996 ) ; +#19021 = PLANE ( 'NONE', #21843 ) ; +#19022 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#19023 = FACE_OUTER_BOUND ( 'NONE', #38623, .T. ) ; +#19024 = VERTEX_POINT ( 'NONE', #19392 ) ; +#19025 = ORIENTED_EDGE ( 'NONE', *, *, #16935, .F. ) ; +#19026 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#19027 = FACE_OUTER_BOUND ( 'NONE', #40033, .T. ) ; +#19028 = VECTOR ( 'NONE', #545, 1000.000000000000000 ) ; +#19029 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#19030 = PRESENTATION_STYLE_ASSIGNMENT (( #38249 ) ) ; +#19031 = ORIENTED_EDGE ( 'NONE', *, *, #34921, .F. ) ; +#19032 = CARTESIAN_POINT ( 'NONE', ( -3.629999999999999900, -1.499998254703818900, -6.299999999999993600 ) ) ; +#19033 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19034 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19035 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.4300017452961689100, -6.424999999999999800 ) ) ; +#19036 = ADVANCED_FACE ( 'NONE', ( #35948 ), #38289, .F. ) ; +#19037 = EDGE_CURVE ( 'NONE', #37476, #22485, #10133, .T. ) ; +#19038 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 0.03000174529616634800, -7.300000000000000700 ) ) ; +#19039 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#19040 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19041 = EDGE_CURVE ( 'NONE', #8602, #17958, #16238, .T. ) ; +#19042 = AXIS2_PLACEMENT_3D ( 'NONE', #27325, #7825, #11206 ) ; +#19043 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #18683, #2999, #38542, #31646 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.8047378541243649400, 0.8047378541243649400, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#19044 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#19045 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19046 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #28965, #13276, #32779, #19541 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#19047 = ADVANCED_FACE ( 'NONE', ( #19304 ), #32344, .T. ) ; +#19048 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30336 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35200, #3139, #25747 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19049 = FILL_AREA_STYLE_COLOUR ( '', #40447 ) ; +#19050 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#19051 = VECTOR ( 'NONE', #26555, 1000.000000000000000 ) ; +#19052 = FILL_AREA_STYLE ('',( #9677 ) ) ; +#19053 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21559 ), #41262 ) ; +#19054 = STYLED_ITEM ( 'NONE', ( #6113 ), #19312 ) ; +#19055 = FILL_AREA_STYLE ('',( #9394 ) ) ; +#19056 = ORIENTED_EDGE ( 'NONE', *, *, #41510, .T. ) ; +#19057 = STYLED_ITEM ( 'NONE', ( #16929 ), #31415 ) ; +#19058 = ORIENTED_EDGE ( 'NONE', *, *, #16533, .T. ) ; +#19059 = PRESENTATION_STYLE_ASSIGNMENT (( #37409 ) ) ; +#19060 = ORIENTED_EDGE ( 'NONE', *, *, #6833, .F. ) ; +#19062 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22420 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15609, #6017, #12479 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19061 = STYLED_ITEM ( 'NONE', ( #24272 ), #30320 ) ; +#19063 = FACE_OUTER_BOUND ( 'NONE', #22916, .T. ) ; +#19064 = VECTOR ( 'NONE', #38498, 1000.000000000000000 ) ; +#19065 = FACE_OUTER_BOUND ( 'NONE', #32047, .T. ) ; +#19068 = EDGE_CURVE ( 'NONE', #25892, #41796, #12167, .T. ) ; +#19067 = FILL_AREA_STYLE_COLOUR ( '', #18782 ) ; +#19066 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1752 ), #965 ) ; +#19069 = ORIENTED_EDGE ( 'NONE', *, *, #30971, .F. ) ; +#19070 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19071 = CYLINDRICAL_SURFACE ( 'NONE', #17501, 0.1000000000000001200 ) ; +#19072 = ORIENTED_EDGE ( 'NONE', *, *, #15378, .T. ) ; +#19073 = SURFACE_STYLE_USAGE ( .BOTH. , #15921 ) ; +#19075 = STYLED_ITEM ( 'NONE', ( #36388 ), #1379 ) ; +#19074 = STYLED_ITEM ( 'NONE', ( #11285 ), #26219 ) ; +#19076 = FACE_OUTER_BOUND ( 'NONE', #1890, .T. ) ; +#19077 = PLANE ( 'NONE', #38002 ) ; +#19078 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19079 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19080 = PRESENTATION_STYLE_ASSIGNMENT (( #8331 ) ) ; +#19081 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19082 = CYLINDRICAL_SURFACE ( 'NONE', #3848, 0.3600000000000078700 ) ; +#19083 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19084 = VECTOR ( 'NONE', #17190, 1000.000000000000000 ) ; +#19085 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 0.1000000000000149000, -4.250000000000000000 ) ) ; +#19086 = PRESENTATION_STYLE_ASSIGNMENT (( #35936 ) ) ; +#19087 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19088 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19089 = ADVANCED_FACE ( 'NONE', ( #18293 ), #29892, .T. ) ; +#19090 = ORIENTED_EDGE ( 'NONE', *, *, #36140, .F. ) ; +#19091 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.380001745296143100, -5.449999999999994000 ) ) ; +#19092 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19093 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19094 = EDGE_LOOP ( 'NONE', ( #614, #24322, #24705, #24320 ) ) ; +#19095 = ORIENTED_EDGE ( 'NONE', *, *, #33741, .T. ) ; +#19096 = SURFACE_STYLE_FILL_AREA ( #19279 ) ; +#19097 = EDGE_CURVE ( 'NONE', #28475, #22030, #25851, .T. ) ; +#19098 = VERTEX_POINT ( 'NONE', #26561 ) ; +#19100 = FILL_AREA_STYLE_COLOUR ( '', #28648 ) ; +#19099 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 0.3500000000000000300, -1.249999999999999800 ) ) ; +#19101 = ORIENTED_EDGE ( 'NONE', *, *, #28287, .F. ) ; +#19102 = LINE ( 'NONE', #21802, #35768 ) ; +#19103 = ORIENTED_EDGE ( 'NONE', *, *, #7744, .T. ) ; +#19104 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19105 = SURFACE_STYLE_FILL_AREA ( #33091 ) ; +#19106 = PLANE ( 'NONE', #18617 ) ; +#19107 = EDGE_CURVE ( 'NONE', #38547, #27299, #22286, .T. ) ; +#19108 = VECTOR ( 'NONE', #34140, 999.9999999999998900 ) ; +#19109 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#19110 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19111 = ORIENTED_EDGE ( 'NONE', *, *, #16404, .T. ) ; +#19112 = SURFACE_STYLE_FILL_AREA ( #17872 ) ; +#19113 = ORIENTED_EDGE ( 'NONE', *, *, #10162, .T. ) ; +#19114 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22860 ), #14212 ) ; +#19115 = EDGE_LOOP ( 'NONE', ( #37521, #5931, #33215, #33015 ) ) ; +#19116 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21483 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34952, #38457, #9203 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19117 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19118 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.480001745296169800, 0.0000000000000000000 ) ) ; +#19119 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19120 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11498 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9449, #35184, #15819 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19121 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19122 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.6300017452961683700, -4.750000000000000000 ) ) ; +#19124 = EDGE_CURVE ( 'NONE', #28695, #41499, #14230, .T. ) ; +#19123 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10414 ) ) ; +#19125 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19126 = PLANE ( 'NONE', #9225 ) ; +#19127 = FILL_AREA_STYLE_COLOUR ( '', #33103 ) ; +#19128 = ORIENTED_EDGE ( 'NONE', *, *, #8219, .T. ) ; +#19129 = CIRCLE ( 'NONE', #28870, 0.3600000000000078700 ) ; +#19130 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#19132 = AXIS2_PLACEMENT_3D ( 'NONE', #35811, #7102, #32171 ) ; +#19131 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10423 ) ) ; +#19133 = AXIS2_PLACEMENT_3D ( 'NONE', #41761, #35013, #31758 ) ; +#19134 = ORIENTED_EDGE ( 'NONE', *, *, #18239, .T. ) ; +#19135 = SURFACE_STYLE_USAGE ( .BOTH. , #9054 ) ; +#19136 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22632 ) ) ; +#19137 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#19138 = ADVANCED_FACE ( 'NONE', ( #12691 ), #22764, .T. ) ; +#19139 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10659, 'distance_accuracy_value', 'NONE'); +#19140 = SURFACE_SIDE_STYLE ('',( #18992 ) ) ; +#19141 = ORIENTED_EDGE ( 'NONE', *, *, #12378, .T. ) ; +#19142 = VERTEX_POINT ( 'NONE', #36865 ) ; +#19143 = ORIENTED_EDGE ( 'NONE', *, *, #30342, .F. ) ; +#19144 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#19145 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#19146 = VECTOR ( 'NONE', #25659, 1000.000000000000000 ) ; +#19147 = CIRCLE ( 'NONE', #2614, 1.450380236995679100 ) ; +#19148 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19149 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#19150 = ORIENTED_EDGE ( 'NONE', *, *, #2592, .T. ) ; +#19151 = LINE ( 'NONE', #33433, #2502 ) ; +#19152 = ORIENTED_EDGE ( 'NONE', *, *, #5264, .F. ) ; +#19153 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.380001745296129100, -6.699999999999994000 ) ) ; +#19154 = CARTESIAN_POINT ( 'NONE', ( 3.395000000000000000, -0.1999999999999996500, -3.250000000000000400 ) ) ; +#19155 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19156 = FILL_AREA_STYLE ('',( #34955 ) ) ; +#19157 = ORIENTED_EDGE ( 'NONE', *, *, #12847, .T. ) ; +#19158 = SURFACE_STYLE_FILL_AREA ( #34396 ) ; +#19159 = FILL_AREA_STYLE_COLOUR ( '', #38729 ) ; +#19160 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19161 = EDGE_CURVE ( 'NONE', #11105, #16444, #34398, .T. ) ; +#19162 = SURFACE_STYLE_FILL_AREA ( #17729 ) ; +#19163 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19164 = EDGE_CURVE ( 'NONE', #11735, #6514, #26839, .T. ) ; +#19165 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19166 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33167, 'distance_accuracy_value', 'NONE'); +#19167 = EDGE_CURVE ( 'NONE', #13926, #6502, #33385, .T. ) ; +#19168 = LINE ( 'NONE', #18261, #10526 ) ; +#19169 = FILL_AREA_STYLE ('',( #5735 ) ) ; +#19170 = SURFACE_SIDE_STYLE ('',( #3345 ) ) ; +#19171 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5340 ), #4544 ) ; +#19172 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#19173 = EDGE_LOOP ( 'NONE', ( #38237, #13494, #15421, #4956, #5012 ) ) ; +#19174 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19175 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.2339555568811695400 ) ) ; +#19176 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#19177 = AXIS2_PLACEMENT_3D ( 'NONE', #11681, #5327, #24864 ) ; +#19178 = ORIENTED_EDGE ( 'NONE', *, *, #6024, .F. ) ; +#19179 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28807 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31261, #2213, #24812 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19180 = FILL_AREA_STYLE ('',( #35112 ) ) ; +#19181 = PRESENTATION_STYLE_ASSIGNMENT (( #28375 ) ) ; +#19183 = EDGE_CURVE ( 'NONE', #14593, #23889, #32891, .T. ) ; +#19182 = AXIS2_PLACEMENT_3D ( 'NONE', #17425, #26601, #36343 ) ; +#19184 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003000, 0.2800017452961687200, -6.150000000000000400 ) ) ; +#19185 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31567, 'distance_accuracy_value', 'NONE'); +#19186 = ORIENTED_EDGE ( 'NONE', *, *, #16788, .F. ) ; +#19187 = VERTEX_POINT ( 'NONE', #7613 ) ; +#19188 = ORIENTED_EDGE ( 'NONE', *, *, #29953, .F. ) ; +#19189 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#19190 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000000000, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#19192 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10485 ) ) ; +#19191 = STYLED_ITEM ( 'NONE', ( #4307 ), #28144 ) ; +#19193 = CARTESIAN_POINT ( 'NONE', ( 3.138630729056933100, 0.2999999999999999300, -0.07531789451542224300 ) ) ; +#19194 = DIRECTION ( 'NONE', ( -1.548860246407863600E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#19195 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37622 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9953, #35855, #13221 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19196 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.3699999999999856200, -5.299999999999999800 ) ) ; +#19197 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4869 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17856, #27301, #40269 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19198 = ORIENTED_EDGE ( 'NONE', *, *, #38816, .F. ) ; +#19199 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.9396926207856547400, 0.3420201433263653800 ) ) ; +#19200 = AXIS2_PLACEMENT_3D ( 'NONE', #23985, #11668, #11384 ) ; +#19201 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#19202 = DIRECTION ( 'NONE', ( 6.056601140521968800E-031, 1.751088030515227300E-045, 1.000000000000000000 ) ) ; +#19203 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#19204 = FACE_OUTER_BOUND ( 'NONE', #39347, .T. ) ; +#19205 = SURFACE_SIDE_STYLE ('',( #3987 ) ) ; +#19206 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#19207 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19208 = ORIENTED_EDGE ( 'NONE', *, *, #25670, .F. ) ; +#19209 = LINE ( 'NONE', #26222, #18198 ) ; +#19210 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#19211 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.139998254717352600, -5.049996877890552400 ) ) ; +#19212 = DIRECTION ( 'NONE', ( 3.188821734606921400E-015, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#19213 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#19214 = ORIENTED_EDGE ( 'NONE', *, *, #41118, .F. ) ; +#19215 = LINE ( 'NONE', #18314, #39918 ) ; +#19216 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( + ( #41558, #15870, #12198, #28318 ), + ( #15604, #25378, #38049, #25511 ), + ( #31565, #6142, #2656, #2377 ), + ( #5729, #18594, #34820, #25248 ) ), + .UNSPECIFIED., .F., .F., .F. ) + B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) + GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( + ( 1.000000000000000000, 0.8047378541243649400, 0.8047378541243649400, 1.000000000000000000), + ( 0.8047378541243588300, 0.6476030138606827500, 0.6476030138606827500, 0.8047378541243588300), + ( 0.8047378541243588300, 0.6476030138606827500, 0.6476030138606827500, 0.8047378541243588300), + ( 1.000000000000000000, 0.8047378541243649400, 0.8047378541243649400, 1.000000000000000000) ) ) + REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); +#19217 = VERTEX_POINT ( 'NONE', #33478 ) ; +#19218 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#19219 = VECTOR ( 'NONE', #40715, 1000.000000000000100 ) ; +#19220 = CARTESIAN_POINT ( 'NONE', ( 4.570925237316274100, -0.4099999999999989200, -6.861124800398366500 ) ) ; +#19221 = LINE ( 'NONE', #30900, #2055 ) ; +#19222 = FILL_AREA_STYLE ('',( #12403 ) ) ; +#19223 = EDGE_LOOP ( 'NONE', ( #7262, #5817, #10593, #10388, #1856, #18295 ) ) ; +#19224 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#19225 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#19226 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.5300017452961702800, -4.414589803375031700 ) ) ; +#19227 = ORIENTED_EDGE ( 'NONE', *, *, #8537, .T. ) ; +#19228 = EDGE_LOOP ( 'NONE', ( #32685, #41836, #7667 ) ) ; +#19229 = EDGE_CURVE ( 'NONE', #10245, #23580, #15704, .T. ) ; +#19230 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#19231 = EDGE_CURVE ( 'NONE', #29368, #10963, #3081, .T. ) ; +#19232 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37890, 'distance_accuracy_value', 'NONE'); +#19233 = ORIENTED_EDGE ( 'NONE', *, *, #23721, .T. ) ; +#19234 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.4300017452961690200, -4.099999999999997900 ) ) ; +#19235 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37337 ) ) ; +#19236 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19237 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9360 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18713, #9192, #15458 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19238 = SURFACE_STYLE_USAGE ( .BOTH. , #25458 ) ; +#19239 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #328 ) ) ; +#19240 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.931303021499040500, -0.3590461068823618300 ) ) ; +#19241 = VECTOR ( 'NONE', #13412, 1000.000000000000000 ) ; +#19242 = LINE ( 'NONE', #15703, #31340 ) ; +#19243 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19245 = STYLED_ITEM ( 'NONE', ( #38549 ), #4638 ) ; +#19244 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41101 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18291, #8212, #37740 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19246 = VECTOR ( 'NONE', #22560, 1000.000000000000000 ) ; +#19247 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16392 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11214, #30441, #20885 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19248 = ORIENTED_EDGE ( 'NONE', *, *, #39902, .F. ) ; +#19249 = VECTOR ( 'NONE', #19194, 1000.000000000000000 ) ; +#19251 = AXIS2_PLACEMENT_3D ( 'NONE', #41019, #28167, #12186 ) ; +#19250 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17330 ) ) ; +#19252 = LINE ( 'NONE', #9129, #7583 ) ; +#19253 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19254 = ORIENTED_EDGE ( 'NONE', *, *, #16743, .T. ) ; +#19255 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#19256 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -0.8500017452961652300, -5.575000000000001100 ) ) ; +#19257 = ORIENTED_EDGE ( 'NONE', *, *, #38620, .F. ) ; +#19258 = ADVANCED_FACE ( 'NONE', ( #31359 ), #17245, .T. ) ; +#19259 = VECTOR ( 'NONE', #33679, 1000.000000000000000 ) ; +#19260 = FILL_AREA_STYLE ('',( #28556 ) ) ; +#19261 = LINE ( 'NONE', #1456, #16203 ) ; +#19262 = SURFACE_SIDE_STYLE ('',( #16184 ) ) ; +#19263 = VECTOR ( 'NONE', #12157, 1000.000000000000000 ) ; +#19264 = FILL_AREA_STYLE_COLOUR ( '', #28637 ) ; +#19265 = VERTEX_POINT ( 'NONE', #10573 ) ; +#19266 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#19267 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 2.322941965694886000, -1.250000000000000000 ) ) ; +#19268 = FACE_OUTER_BOUND ( 'NONE', #38102, .T. ) ; +#19269 = EDGE_LOOP ( 'NONE', ( #5937, #9887, #8645, #40280 ) ) ; +#19270 = ORIENTED_EDGE ( 'NONE', *, *, #28071, .F. ) ; +#19271 = FILL_AREA_STYLE_COLOUR ( '', #10045 ) ; +#19272 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#19273 = DIRECTION ( 'NONE', ( -7.899824355898891900E-032, 2.367138801244513800E-016, 1.000000000000000000 ) ) ; +#19274 = ORIENTED_EDGE ( 'NONE', *, *, #15782, .F. ) ; +#19275 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19276 = FACE_OUTER_BOUND ( 'NONE', #10460, .T. ) ; +#19277 = SURFACE_STYLE_FILL_AREA ( #7020 ) ; +#19278 = SURFACE_STYLE_FILL_AREA ( #38886 ) ; +#19279 = FILL_AREA_STYLE ('',( #9626 ) ) ; +#19280 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19281 = SURFACE_STYLE_FILL_AREA ( #7166 ) ; +#19282 = SURFACE_SIDE_STYLE ('',( #38801 ) ) ; +#19283 = EDGE_CURVE ( 'NONE', #35285, #12005, #20279, .T. ) ; +#19284 = PLANE ( 'NONE', #977 ) ; +#19285 = LINE ( 'NONE', #26186, #10658 ) ; +#19286 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, 0.3000000000000000400, -1.250000000000000000 ) ) ; +#19287 = PRESENTATION_STYLE_ASSIGNMENT (( #34991 ) ) ; +#19288 = CARTESIAN_POINT ( 'NONE', ( -0.6500000000000000200, -1.499998254703827700, -6.699999999999994000 ) ) ; +#19289 = EDGE_CURVE ( 'NONE', #4469, #28475, #23292, .T. ) ; +#19290 = AXIS2_PLACEMENT_3D ( 'NONE', #37121, #21054, #21469 ) ; +#19291 = ORIENTED_EDGE ( 'NONE', *, *, #34945, .T. ) ; +#19292 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19293 = LINE ( 'NONE', #15088, #37459 ) ; +#19294 = SURFACE_STYLE_FILL_AREA ( #4931 ) ; +#19295 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2790 ), #34427 ) ; +#19296 = ADVANCED_FACE ( 'NONE', ( #4074 ), #10439, .F. ) ; +#19297 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19298 = ORIENTED_EDGE ( 'NONE', *, *, #9463, .F. ) ; +#19299 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29532 ) ) ; +#19300 = PLANE ( 'NONE', #31818 ) ; +#19301 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27044, 'distance_accuracy_value', 'NONE'); +#19302 = LINE ( 'NONE', #26440, #38466 ) ; +#19303 = FILL_AREA_STYLE_COLOUR ( '', #19803 ) ; +#19304 = FACE_OUTER_BOUND ( 'NONE', #29675, .T. ) ; +#19305 = ORIENTED_EDGE ( 'NONE', *, *, #12555, .F. ) ; +#19306 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20681 ) ) ; +#19307 = VECTOR ( 'NONE', #30303, 1000.000000000000000 ) ; +#19308 = ORIENTED_EDGE ( 'NONE', *, *, #12638, .T. ) ; +#19309 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12766 ) ) ; +#19310 = CARTESIAN_POINT ( 'NONE', ( 3.500000000000003100, 0.4300017452961685800, -6.750000000000000000 ) ) ; +#19311 = CARTESIAN_POINT ( 'NONE', ( -4.620380239188926400, -0.2799999999999974200, -0.8400209439508702400 ) ) ; +#19312 = ADVANCED_FACE ( 'NONE', ( #32352 ), #30644, .F. ) ; +#19314 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16318 ), #18748 ) ; +#19313 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8702 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1241, #11202, #17607 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19315 = CARTESIAN_POINT ( 'NONE', ( 3.119636707815099300, -0.2999999999999999300, 1.000000000000057500 ) ) ; +#19317 = EDGE_CURVE ( 'NONE', #17475, #9198, #3834, .T. ) ; +#19316 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3322 ), #29293 ) ; +#19318 = ORIENTED_EDGE ( 'NONE', *, *, #12142, .F. ) ; +#19319 = FILL_AREA_STYLE ('',( #9655 ) ) ; +#19320 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.139998254717350800, -6.299996877890552400 ) ) ; +#19321 = FACE_OUTER_BOUND ( 'NONE', #10920, .T. ) ; +#19322 = ORIENTED_EDGE ( 'NONE', *, *, #37009, .T. ) ; +#19323 = SURFACE_STYLE_FILL_AREA ( #31806 ) ; +#19324 = CARTESIAN_POINT ( 'NONE', ( 3.395000000000000000, -0.1999999999999992300, -3.300000000000000300 ) ) ; +#19326 = STYLED_ITEM ( 'NONE', ( #39920 ), #1296 ) ; +#19325 = AXIS2_PLACEMENT_3D ( 'NONE', #37214, #1956, #30588 ) ; +#19327 = VECTOR ( 'NONE', #2594, 1000.000000000000000 ) ; +#19328 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19329 = CARTESIAN_POINT ( 'NONE', ( -3.100000000000000100, -1.380001745296146200, -4.781671842700004200 ) ) ; +#19330 = CARTESIAN_POINT ( 'NONE', ( 3.095000000000000600, -0.07500000000000001100, -0.2720333372351149700 ) ) ; +#19331 = SURFACE_STYLE_FILL_AREA ( #39455 ) ; +#19332 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.2800017452961687200, -6.199999999999999300 ) ) ; +#19333 = CARTESIAN_POINT ( 'NONE', ( -4.570925237316274100, -1.009999999999999100, -6.861124800398366500 ) ) ; +#19334 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #23632, #33376, #4129, #26608 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.504728772142103900E-005 ), + .UNSPECIFIED. ) ; +#19335 = VECTOR ( 'NONE', #17490, 1000.000000000000000 ) ; +#19336 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1416, 'distance_accuracy_value', 'NONE'); +#19337 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19338 = EDGE_LOOP ( 'NONE', ( #33709, #8444, #35038, #37309 ) ) ; +#19339 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#19340 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, -0.6500000000000001300, -3.250000000000000400 ) ) ; +#19341 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#19342 = ORIENTED_EDGE ( 'NONE', *, *, #28263, .F. ) ; +#19343 = FILL_AREA_STYLE_COLOUR ( '', #3525 ) ; +#19344 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#19345 = ORIENTED_EDGE ( 'NONE', *, *, #24959, .F. ) ; +#19346 = EDGE_CURVE ( 'NONE', #30424, #532, #6656, .T. ) ; +#19347 = ADVANCED_FACE ( 'NONE', ( #2582 ), #1723, .T. ) ; +#19348 = LINE ( 'NONE', #3840, #34482 ) ; +#19349 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.2800017452961687200, -6.150000000000000400 ) ) ; +#19350 = DIRECTION ( 'NONE', ( 0.3746065948720311300, 0.0000000000000000000, 0.9271838539784770200 ) ) ; +#19351 = EDGE_CURVE ( 'NONE', #22511, #39552, #19613, .T. ) ; +#19352 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.499998254703820600, -5.449999999999994000 ) ) ; +#19353 = CARTESIAN_POINT ( 'NONE', ( 2.900000000000000400, -1.499998254703820600, -5.449999999999994000 ) ) ; +#19354 = ORIENTED_EDGE ( 'NONE', *, *, #18355, .F. ) ; +#19355 = PLANE ( 'NONE', #32253 ) ; +#19356 = FILL_AREA_STYLE_COLOUR ( '', #26877 ) ; +#19357 = ORIENTED_EDGE ( 'NONE', *, *, #13441, .F. ) ; +#19358 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.480001745296169800, -0.2000017452961698200 ) ) ; +#19359 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20984 ) ) ; +#19360 = PRESENTATION_STYLE_ASSIGNMENT (( #40105 ) ) ; +#19361 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.3500000000000000300, 0.6999999999999999600 ) ) ; +#19362 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#19363 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19364 = STYLED_ITEM ( 'NONE', ( #5542 ), #19684 ) ; +#19365 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19366 = VECTOR ( 'NONE', #16178, 1000.000000000000000 ) ; +#19367 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16421, 'distance_accuracy_value', 'NONE'); +#19368 = STYLED_ITEM ( 'NONE', ( #39279 ), #6961 ) ; +#19369 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.139998254717350800, -6.299996877890552400 ) ) ; +#19370 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#19371 = ORIENTED_EDGE ( 'NONE', *, *, #2066, .T. ) ; +#19373 = EDGE_CURVE ( 'NONE', #14924, #28591, #39928, .T. ) ; +#19372 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19640 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22316, #29059, #3237 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19374 = FACE_OUTER_BOUND ( 'NONE', #3519, .T. ) ; +#19375 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -5.460789592991141900E-031 ) ) ; +#19376 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33782, 'distance_accuracy_value', 'NONE'); +#19377 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19378 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.080001745296136600, -6.250000000000000000 ) ) ; +#19379 = ORIENTED_EDGE ( 'NONE', *, *, #25525, .F. ) ; +#19380 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34570 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7182, #36317, #3945 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19381 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000027500, -0.2339555568811695900 ) ) ; +#19382 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39074 ) ) ; +#19383 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19384 = PRESENTATION_STYLE_ASSIGNMENT (( #7287 ) ) ; +#19385 = ORIENTED_EDGE ( 'NONE', *, *, #38795, .F. ) ; +#19387 = ORIENTED_EDGE ( 'NONE', *, *, #11928, .T. ) ; +#19386 = LINE ( 'NONE', #25129, #22920 ) ; +#19388 = VERTEX_POINT ( 'NONE', #24157 ) ; +#19389 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#19390 = EDGE_LOOP ( 'NONE', ( #18119, #7473, #29850, #39528 ) ) ; +#19391 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19392 = CARTESIAN_POINT ( 'NONE', ( -3.846156164834738400, 0.6165030250713622300, -4.550456058592868800 ) ) ; +#19393 = VECTOR ( 'NONE', #1062, 1000.000000000000000 ) ; +#19394 = SURFACE_SIDE_STYLE ('',( #41722 ) ) ; +#19395 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -1.994459358809381100 ) ) ; +#19396 = FILL_AREA_STYLE_COLOUR ( '', #17918 ) ; +#19397 = EDGE_CURVE ( 'NONE', #28824, #27867, #1564, .T. ) ; +#19398 = VECTOR ( 'NONE', #27487, 1000.000000000000000 ) ; +#19399 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19400 = SURFACE_STYLE_USAGE ( .BOTH. , #38570 ) ; +#19401 = EDGE_CURVE ( 'NONE', #38479, #27080, #17724, .T. ) ; +#19402 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#19403 = CIRCLE ( 'NONE', #40535, 0.1000000000000004800 ) ; +#19404 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#19405 = EDGE_CURVE ( 'NONE', #11869, #36449, #40415, .T. ) ; +#19406 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#19407 = AXIS2_PLACEMENT_3D ( 'NONE', #22711, #38926, #22844 ) ; +#19408 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#19409 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19410 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#19411 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19412 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19413 = SURFACE_STYLE_FILL_AREA ( #40012 ) ; +#19414 = FILL_AREA_STYLE ('',( #9064 ) ) ; +#19415 = ORIENTED_EDGE ( 'NONE', *, *, #23155, .T. ) ; +#19416 = AXIS2_PLACEMENT_3D ( 'NONE', #24634, #8192, #33789 ) ; +#19417 = ORIENTED_EDGE ( 'NONE', *, *, #22752, .T. ) ; +#19418 = FILL_AREA_STYLE ('',( #25368 ) ) ; +#19419 = ORIENTED_EDGE ( 'NONE', *, *, #40467, .T. ) ; +#19420 = EDGE_LOOP ( 'NONE', ( #38732, #16715, #12069, #18924 ) ) ; +#19421 = SURFACE_STYLE_USAGE ( .BOTH. , #28731 ) ; +#19422 = STYLED_ITEM ( 'NONE', ( #4834 ), #11804 ) ; +#19423 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.3500000000000000300, -1.300000000000000000 ) ) ; +#19424 = DIRECTION ( 'NONE', ( 6.056601140521966100E-031, 1.987721548152419000E-045, -1.000000000000000000 ) ) ; +#19425 = FACE_OUTER_BOUND ( 'NONE', #5054, .T. ) ; +#19426 = FACE_OUTER_BOUND ( 'NONE', #1198, .T. ) ; +#19429 = EDGE_CURVE ( 'NONE', #32434, #21671, #22769, .T. ) ; +#19428 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000009200, -0.9281066972901055300, -6.861124800398366500 ) ) ; +#19427 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31034 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32172, #31904, #24746 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19430 = SURFACE_STYLE_FILL_AREA ( #21381 ) ; +#19431 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#19432 = LINE ( 'NONE', #1922, #771 ) ; +#19434 = AXIS2_PLACEMENT_3D ( 'NONE', #1945, #40717, #24667 ) ; +#19433 = AXIS2_PLACEMENT_3D ( 'NONE', #14040, #23633, #17433 ) ; +#19435 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#19436 = FACE_OUTER_BOUND ( 'NONE', #3993, .T. ) ; +#19437 = FILL_AREA_STYLE_COLOUR ( '', #6129 ) ; +#19438 = AXIS2_PLACEMENT_3D ( 'NONE', #17659, #34146, #24274 ) ; +#19440 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18319 ) ) ; +#19439 = SURFACE_STYLE_FILL_AREA ( #27851 ) ; +#19441 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#19442 = ORIENTED_EDGE ( 'NONE', *, *, #14006, .T. ) ; +#19443 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19444 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865475700, 0.7071067811865475700 ) ) ; +#19445 = ORIENTED_EDGE ( 'NONE', *, *, #30706, .F. ) ; +#19446 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.3500000000000000300, 0.3499999999999999800 ) ) ; +#19447 = LINE ( 'NONE', #23732, #31551 ) ; +#19448 = LINE ( 'NONE', #8650, #25025 ) ; +#19449 = ORIENTED_EDGE ( 'NONE', *, *, #6769, .T. ) ; +#19450 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#19451 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.08000174529616772800, -7.150000000000001200 ) ) ; +#19453 = CIRCLE ( 'NONE', #8074, 0.2000000000000000900 ) ; +#19452 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -2.710505431213761100E-017, -4.400000000000000400 ) ) ; +#19454 = ORIENTED_EDGE ( 'NONE', *, *, #5856, .T. ) ; +#19455 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19456 = VERTEX_POINT ( 'NONE', #28365 ) ; +#19457 = ADVANCED_FACE ( 'NONE', ( #14189 ), #11830, .F. ) ; +#19458 = CARTESIAN_POINT ( 'NONE', ( 3.178333333333021500, 0.2999999999999999900, -0.06128090415826344800 ) ) ; +#19459 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#19460 = EDGE_CURVE ( 'NONE', #19217, #40206, #28773, .T. ) ; +#19461 = PLANE ( 'NONE', #32379 ) ; +#19462 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid38', #7753 ) ; +#19463 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#19464 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#19465 = VECTOR ( 'NONE', #4554, 1000.000000000000100 ) ; +#19466 = EDGE_LOOP ( 'NONE', ( #16682, #40089, #24302, #9877 ) ) ; +#19467 = EDGE_CURVE ( 'NONE', #18824, #24747, #16685, .T. ) ; +#19468 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.279999999999999100, -0.2000017452961698200 ) ) ; +#19469 = CIRCLE ( 'NONE', #35329, 1.651303021499040300 ) ; +#19470 = FACE_OUTER_BOUND ( 'NONE', #14019, .T. ) ; +#19471 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14793 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33535, #36637, #4851 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19472 = EDGE_LOOP ( 'NONE', ( #8101, #35511, #27586, #33906 ) ) ; +#19473 = CARTESIAN_POINT ( 'NONE', ( -3.680000000000000200, -1.499998254703818900, -6.299999999999993600 ) ) ; +#19474 = EDGE_CURVE ( 'NONE', #26961, #31761, #8071, .T. ) ; +#19475 = LINE ( 'NONE', #11307, #9817 ) ; +#19476 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19477 = CARTESIAN_POINT ( 'NONE', ( -3.061666666666666500, -0.07499999999999999700, -1.494491118252165000 ) ) ; +#19478 = STYLED_ITEM ( 'NONE', ( #27846 ), #21861 ) ; +#19479 = CARTESIAN_POINT ( 'NONE', ( -2.994999999999999700, -0.2999999999999999900, -1.399999999999999900 ) ) ; +#19480 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#19481 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#19482 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37606 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41465, #6042, #5760 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19483 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#19484 = VERTEX_POINT ( 'NONE', #15381 ) ; +#19486 = EDGE_CURVE ( 'NONE', #33306, #27294, #25816, .T. ) ; +#19485 = STYLED_ITEM ( 'NONE', ( #14494 ), #24177 ) ; +#19487 = ORIENTED_EDGE ( 'NONE', *, *, #7481, .T. ) ; +#19488 = DIRECTION ( 'NONE', ( 0.7071067811865475700, -0.7071067811865475700, -4.282663737405247600E-031 ) ) ; +#19489 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -1.380001745296141500, -4.781671842700004200 ) ) ; +#19490 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19491 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#19492 = FILL_AREA_STYLE ('',( #25705 ) ) ; +#19493 = ORIENTED_EDGE ( 'NONE', *, *, #3664, .T. ) ; +#19495 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20644 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19363, #19087, #2986 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19494 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29738 ), #7827 ) ; +#19496 = PRESENTATION_STYLE_ASSIGNMENT (( #35197 ) ) ; +#19497 = SURFACE_SIDE_STYLE ('',( #19971 ) ) ; +#19498 = PRESENTATION_STYLE_ASSIGNMENT (( #22425 ) ) ; +#19499 = VECTOR ( 'NONE', #41056, 1000.000000000000000 ) ; +#19500 = SURFACE_STYLE_USAGE ( .BOTH. , #310 ) ; +#19501 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19502 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 2.322941965694886000, -1.250000000000000000 ) ) ; +#19503 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745296168900, -2.604459358809381200 ) ) ; +#19504 = ADVANCED_FACE ( 'NONE', ( #40961 ), #45, .F. ) ; +#19505 = ORIENTED_EDGE ( 'NONE', *, *, #21891, .F. ) ; +#19506 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36391 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23041, #20102, #1058 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19507 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40290, 'distance_accuracy_value', 'NONE'); +#19508 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 10.30000000000000100, -1.250000000000000000 ) ) ; +#19509 = LINE ( 'NONE', #15227, #14425 ) ; +#19510 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19511 = SURFACE_STYLE_FILL_AREA ( #23671 ) ; +#19512 = LINE ( 'NONE', #21788, #33143 ) ; +#19513 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#19514 = ORIENTED_EDGE ( 'NONE', *, *, #3125, .T. ) ; +#19515 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19516 = PRESENTATION_STYLE_ASSIGNMENT (( #13164 ) ) ; +#19517 = CARTESIAN_POINT ( 'NONE', ( 3.137984242873237900, -0.2999999999999999300, 0.9623819784616954900 ) ) ; +#19518 = VECTOR ( 'NONE', #41123, 1000.000000000000000 ) ; +#19519 = PRESENTATION_STYLE_ASSIGNMENT (( #27765 ) ) ; +#19520 = PLANE ( 'NONE', #40673 ) ; +#19521 = ADVANCED_FACE ( 'NONE', ( #19714 ), #38239, .F. ) ; +#19522 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19523 = FILL_AREA_STYLE_COLOUR ( '', #15306 ) ; +#19524 = EDGE_LOOP ( 'NONE', ( #9740, #14402, #30821, #10964 ) ) ; +#19525 = FACE_OUTER_BOUND ( 'NONE', #35163, .T. ) ; +#19526 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19527 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14738, 'distance_accuracy_value', 'NONE'); +#19528 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15833, 'distance_accuracy_value', 'NONE'); +#19529 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31745, 'distance_accuracy_value', 'NONE'); +#19530 = EDGE_CURVE ( 'NONE', #28243, #10079, #38398, .T. ) ; +#19531 = PRESENTATION_STYLE_ASSIGNMENT (( #13279 ) ) ; +#19532 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.2999999999999850000, -4.249999999999998200 ) ) ; +#19533 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#19534 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.499998254703840000, -5.449999999999994000 ) ) ; +#19535 = VECTOR ( 'NONE', #1835, 1000.000000000000000 ) ; +#19536 = EDGE_CURVE ( 'NONE', #21174, #16475, #36395, .T. ) ; +#19537 = ORIENTED_EDGE ( 'NONE', *, *, #7920, .F. ) ; +#19538 = SURFACE_STYLE_FILL_AREA ( #11684 ) ; +#19539 = SURFACE_STYLE_USAGE ( .BOTH. , #347 ) ; +#19540 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521965300E-031 ) ) ; +#19541 = CARTESIAN_POINT ( 'NONE', ( -3.094999999999943400, 0.07499999999999998300, -1.532287565553075200 ) ) ; +#19542 = ORIENTED_EDGE ( 'NONE', *, *, #34104, .T. ) ; +#19543 = EDGE_LOOP ( 'NONE', ( #17555, #39478, #38355, #11059 ) ) ; +#19544 = ORIENTED_EDGE ( 'NONE', *, *, #32016, .T. ) ; +#19545 = AXIS2_PLACEMENT_3D ( 'NONE', #13285, #16419, #16562 ) ; +#19546 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#19547 = VECTOR ( 'NONE', #8139, 1000.000000000000000 ) ; +#19548 = FILL_AREA_STYLE_COLOUR ( '', #21572 ) ; +#19549 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#19550 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -2.322941965694886000, -1.250000000000000000 ) ) ; +#19551 = VERTEX_POINT ( 'NONE', #38374 ) ; +#19552 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#19553 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17381 ) ) ; +#19554 = LINE ( 'NONE', #32380, #24582 ) ; +#19555 = VERTEX_POINT ( 'NONE', #29193 ) ; +#19556 = ADVANCED_FACE ( 'NONE', ( #8562 ), #32438, .T. ) ; +#19557 = STYLED_ITEM ( 'NONE', ( #34607 ), #18372 ) ; +#19558 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.3500000000000000300, 0.6999999999999999600 ) ) ; +#19559 = VECTOR ( 'NONE', #20431, 1000.000000000000000 ) ; +#19561 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4363 ), #41189 ) ; +#19560 = AXIS2_PLACEMENT_3D ( 'NONE', #23799, #8088, #30293 ) ; +#19562 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -2.367138801244516300E-016 ) ) ; +#19563 = SURFACE_STYLE_USAGE ( .BOTH. , #32510 ) ; +#19564 = TOROIDAL_SURFACE ( 'NONE', #26532, 1.550380236995680100, 0.1000000000000008500 ) ; +#19565 = FACE_OUTER_BOUND ( 'NONE', #33312, .T. ) ; +#19566 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#19567 = DIRECTION ( 'NONE', ( -2.769711501509058500E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#19568 = CARTESIAN_POINT ( 'NONE', ( -3.429999999999999700, -1.380001745296125100, -6.031671842700004200 ) ) ; +#19569 = VECTOR ( 'NONE', #24080, 1000.000000000000000 ) ; +#19571 = EDGE_CURVE ( 'NONE', #2058, #30737, #10051, .T. ) ; +#19570 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #869 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25265, #28468, #35264 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19572 = FILL_AREA_STYLE ('',( #9632 ) ) ; +#19573 = PRESENTATION_STYLE_ASSIGNMENT (( #34501 ) ) ; +#19574 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.355252715606880500E-016 ) ) ; +#19576 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7080 ) ) ; +#19575 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39482 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18963, #41511, #18679 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19577 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#19578 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19579 = ORIENTED_EDGE ( 'NONE', *, *, #33485, .T. ) ; +#19580 = CYLINDRICAL_SURFACE ( 'NONE', #24312, 1.200001745296169300 ) ; +#19581 = DIRECTION ( 'NONE', ( -3.469446951953615800E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#19582 = FILL_AREA_STYLE_COLOUR ( '', #9633 ) ; +#19583 = ORIENTED_EDGE ( 'NONE', *, *, #10224, .T. ) ; +#19584 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6413, 'distance_accuracy_value', 'NONE'); +#19585 = CYLINDRICAL_SURFACE ( 'NONE', #33449, 0.09999999999987406500 ) ; +#19586 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19587 = ORIENTED_EDGE ( 'NONE', *, *, #20041, .T. ) ; +#19588 = VERTEX_POINT ( 'NONE', #9692 ) ; +#19589 = LINE ( 'NONE', #19234, #21626 ) ; +#19590 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#19591 = ORIENTED_EDGE ( 'NONE', *, *, #26727, .T. ) ; +#19592 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#19593 = SURFACE_STYLE_FILL_AREA ( #6488 ) ; +#19594 = PLANE ( 'NONE', #19132 ) ; +#19595 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#19596 = VECTOR ( 'NONE', #31580, 1000.000000000000000 ) ; +#19597 = VECTOR ( 'NONE', #35239, 1000.000000000000000 ) ; +#19598 = ORIENTED_EDGE ( 'NONE', *, *, #18926, .T. ) ; +#19599 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#19600 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, -0.2498427124745999900 ) ) ; +#19601 = ORIENTED_EDGE ( 'NONE', *, *, #13591, .F. ) ; +#19602 = EDGE_CURVE ( 'NONE', #24153, #5582, #1527, .T. ) ; +#19603 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.139998254717353500, -6.299996877890552400 ) ) ; +#19604 = VECTOR ( 'NONE', #39229, 1000.000000000000000 ) ; +#19605 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19606 = EDGE_CURVE ( 'NONE', #15710, #5574, #12608, .T. ) ; +#19607 = SURFACE_STYLE_USAGE ( .BOTH. , #11441 ) ; +#19608 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.949998254703822800, -2.467712434446770200 ) ) ; +#19609 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#19610 = FACE_OUTER_BOUND ( 'NONE', #17064, .T. ) ; +#19611 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703821100, -5.700000000000000200 ) ) ; +#19612 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#19613 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #24297, #17817, #33898, #24596 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#19614 = AXIS2_PLACEMENT_3D ( 'NONE', #27826, #4797, #14821 ) ; +#19615 = SURFACE_SIDE_STYLE ('',( #15252 ) ) ; +#19616 = CARTESIAN_POINT ( 'NONE', ( -3.374999999999998700, 0.5300017452961712800, -4.414589803375031700 ) ) ; +#19617 = VERTEX_POINT ( 'NONE', #168 ) ; +#19618 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30258 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35296, #1001, #39206 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19619 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19621 = CARTESIAN_POINT ( 'NONE', ( 4.856063034915695900, 0.2799999999999973100, -0.6228541982233617400 ) ) ; +#19620 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21794 ) ) ; +#19622 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875040400E-015, -6.056601140521968800E-031 ) ) ; +#19623 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26654 ) ) ; +#19624 = VERTEX_POINT ( 'NONE', #16076 ) ; +#19625 = CIRCLE ( 'NONE', #36305, 0.1000000000000002600 ) ; +#19627 = EDGE_CURVE ( 'NONE', #10574, #30029, #7547, .T. ) ; +#19626 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37173 ) ) ; +#19628 = FACE_OUTER_BOUND ( 'NONE', #524, .T. ) ; +#19629 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#19630 = CLOSED_SHELL ( 'NONE', ( #37248, #32819, #18161, #8420 ) ) ; +#19631 = PLANE ( 'NONE', #18389 ) ; +#19632 = ORIENTED_EDGE ( 'NONE', *, *, #26829, .T. ) ; +#19633 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#19634 = ORIENTED_EDGE ( 'NONE', *, *, #6112, .T. ) ; +#19636 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23130 ), #5809 ) ; +#19635 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10927 ), #5808 ) ; +#19637 = VECTOR ( 'NONE', #25923, 1000.000000000000000 ) ; +#19638 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19639 = SURFACE_STYLE_FILL_AREA ( #20474 ) ; +#19640 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22316, 'distance_accuracy_value', 'NONE'); +#19641 = PRESENTATION_STYLE_ASSIGNMENT (( #37106 ) ) ; +#19642 = FILL_AREA_STYLE ('',( #38935 ) ) ; +#19643 = VECTOR ( 'NONE', #19733, 1000.000000000000000 ) ; +#19644 = ORIENTED_EDGE ( 'NONE', *, *, #27560, .F. ) ; +#19645 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703821100, -6.600000000000000500 ) ) ; +#19646 = ORIENTED_EDGE ( 'NONE', *, *, #16179, .F. ) ; +#19647 = VERTEX_POINT ( 'NONE', #19633 ) ; +#19648 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 2.367138801244516300E-016, -1.000000000000000000 ) ) ; +#19649 = SURFACE_STYLE_USAGE ( .BOTH. , #3765 ) ; +#19650 = VECTOR ( 'NONE', #29020, 1000.000000000000000 ) ; +#19651 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#19652 = ORIENTED_EDGE ( 'NONE', *, *, #27321, .T. ) ; +#19653 = VECTOR ( 'NONE', #37499, 1000.000000000000000 ) ; +#19654 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19655 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#19656 = FILL_AREA_STYLE_COLOUR ( '', #22881 ) ; +#19657 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#19658 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19659 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#19660 = SURFACE_STYLE_FILL_AREA ( #28739 ) ; +#19661 = EDGE_CURVE ( 'NONE', #37872, #12836, #39893, .T. ) ; +#19662 = VERTEX_POINT ( 'NONE', #6196 ) ; +#19663 = SURFACE_STYLE_USAGE ( .BOTH. , #10140 ) ; +#19664 = CARTESIAN_POINT ( 'NONE', ( 0.1500000000000000200, -1.499998254703829500, -6.699999999999994000 ) ) ; +#19665 = EDGE_CURVE ( 'NONE', #5908, #12511, #37870, .T. ) ; +#19666 = ORIENTED_EDGE ( 'NONE', *, *, #19183, .F. ) ; +#19667 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36218, 'distance_accuracy_value', 'NONE'); +#19668 = FILL_AREA_STYLE ('',( #38963 ) ) ; +#19669 = ORIENTED_EDGE ( 'NONE', *, *, #18359, .T. ) ; +#19670 = EDGE_LOOP ( 'NONE', ( #22378, #24745, #31548, #9322 ) ) ; +#19671 = ORIENTED_EDGE ( 'NONE', *, *, #23283, .F. ) ; +#19672 = STYLED_ITEM ( 'NONE', ( #16264 ), #16053 ) ; +#19673 = FACE_OUTER_BOUND ( 'NONE', #40156, .T. ) ; +#19674 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#19675 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#19676 = VECTOR ( 'NONE', #25098, 1000.000000000000000 ) ; +#19677 = SURFACE_STYLE_USAGE ( .BOTH. , #5804 ) ; +#19678 = ORIENTED_EDGE ( 'NONE', *, *, #30792, .T. ) ; +#19679 = VERTEX_POINT ( 'NONE', #18 ) ; +#19680 = VERTEX_POINT ( 'NONE', #32296 ) ; +#19681 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13957 ) ) ; +#19682 = CARTESIAN_POINT ( 'NONE', ( -3.127842712478367600, -0.3292893218813452400, -1.600000000004101700 ) ) ; +#19683 = SURFACE_SIDE_STYLE ('',( #26332 ) ) ; +#19684 = ADVANCED_FACE ( 'NONE', ( #37394 ), #6056, .F. ) ; +#19685 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12075, 'distance_accuracy_value', 'NONE'); +#19687 = EDGE_CURVE ( 'NONE', #30951, #1063, #25276, .T. ) ; +#19686 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17507 ) ) ; +#19688 = FILL_AREA_STYLE ('',( #41266 ) ) ; +#19689 = ORIENTED_EDGE ( 'NONE', *, *, #8798, .F. ) ; +#19690 = CARTESIAN_POINT ( 'NONE', ( 2.900000000000000400, -1.499998254703820600, -5.049999999999993600 ) ) ; +#19691 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#19692 = CIRCLE ( 'NONE', #37957, 0.2000000000000000700 ) ; +#19693 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#19695 = STYLED_ITEM ( 'NONE', ( #10800 ), #2756 ) ; +#19694 = STYLED_ITEM ( 'NONE', ( #30200 ), #27460 ) ; +#19696 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16509 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39210, #32591, #16496 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19697 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.4300017452961689100, -5.200000000000000200 ) ) ; +#19698 = AXIS2_PLACEMENT_3D ( 'NONE', #21513, #34476, #2315 ) ; +#19699 = DIRECTION ( 'NONE', ( 3.855870243489082900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#19700 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.3699999999999856200, -5.299999999999999800 ) ) ; +#19701 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000030900, 0.4300017452961686900, -6.550000000000000700 ) ) ; +#19702 = ORIENTED_EDGE ( 'NONE', *, *, #37034, .T. ) ; +#19703 = CYLINDRICAL_SURFACE ( 'NONE', #23542, 0.1999999999999998400 ) ; +#19704 = CIRCLE ( 'NONE', #27941, 0.3600000000000078700 ) ; +#19705 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19706 = EDGE_LOOP ( 'NONE', ( #24391, #35181, #5211, #1647 ) ) ; +#19707 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -1.149999999999999900 ) ) ; +#19708 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#19709 = VECTOR ( 'NONE', #31760, 1000.000000000000000 ) ; +#19710 = LINE ( 'NONE', #17796, #15154 ) ; +#19711 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#19712 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35333, 'distance_accuracy_value', 'NONE'); +#19713 = ORIENTED_EDGE ( 'NONE', *, *, #17492, .F. ) ; +#19714 = FACE_OUTER_BOUND ( 'NONE', #16794, .T. ) ; +#19716 = ORIENTED_EDGE ( 'NONE', *, *, #13125, .T. ) ; +#19715 = ADVANCED_FACE ( 'NONE', ( #15114 ), #32864, .F. ) ; +#19717 = SURFACE_STYLE_USAGE ( .BOTH. , #12886 ) ; +#19718 = EDGE_CURVE ( 'NONE', #4042, #28936, #29773, .T. ) ; +#19719 = PLANE ( 'NONE', #38548 ) ; +#19720 = EDGE_CURVE ( 'NONE', #2031, #12599, #16653, .T. ) ; +#19721 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19722 = ORIENTED_EDGE ( 'NONE', *, *, #29046, .F. ) ; +#19723 = EDGE_CURVE ( 'NONE', #37544, #16722, #31277, .T. ) ; +#19724 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19725 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#19726 = AXIS2_PLACEMENT_3D ( 'NONE', #26195, #26345, #25244 ) ; +#19727 = ADVANCED_FACE ( 'NONE', ( #40378 ), #38836, .F. ) ; +#19728 = VECTOR ( 'NONE', #18883, 1000.000000000000000 ) ; +#19729 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#19730 = EDGE_CURVE ( 'NONE', #6499, #19679, #41874, .T. ) ; +#19731 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19732 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#19733 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#19734 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30779 ), #41580 ) ; +#19735 = CYLINDRICAL_SURFACE ( 'NONE', #97, 0.05000000000000012800 ) ; +#19736 = AXIS2_PLACEMENT_3D ( 'NONE', #35467, #3258, #7171 ) ; +#19737 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#19738 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#19739 = ORIENTED_EDGE ( 'NONE', *, *, #255, .T. ) ; +#19741 = EDGE_CURVE ( 'NONE', #9246, #16115, #9035, .T. ) ; +#19740 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4559 ), #6172 ) ; +#19742 = SURFACE_STYLE_USAGE ( .BOTH. , #10225 ) ; +#19743 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.3699999999999854500, -5.299999999999999800 ) ) ; +#19744 = ORIENTED_EDGE ( 'NONE', *, *, #19289, .F. ) ; +#19745 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39870, 'distance_accuracy_value', 'NONE'); +#19746 = VERTEX_POINT ( 'NONE', #7282 ) ; +#19748 = STYLED_ITEM ( 'NONE', ( #35215 ), #3785 ) ; +#19747 = AXIS2_PLACEMENT_3D ( 'NONE', #12264, #38107, #18519 ) ; +#19749 = FILL_AREA_STYLE ('',( #38911 ) ) ; +#19750 = CARTESIAN_POINT ( 'NONE', ( 4.721498212947777200, -0.4099999999999984200, -6.861124800398366500 ) ) ; +#19751 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8632 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3351, #9821, #16074 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19752 = LINE ( 'NONE', #10449, #6501 ) ; +#19753 = AXIS2_PLACEMENT_3D ( 'NONE', #33805, #40421, #21127 ) ; +#19754 = ORIENTED_EDGE ( 'NONE', *, *, #38053, .F. ) ; +#19755 = VERTEX_POINT ( 'NONE', #6863 ) ; +#19756 = EDGE_LOOP ( 'NONE', ( #11764, #30261, #1333, #21033 ) ) ; +#19757 = CARTESIAN_POINT ( 'NONE', ( -4.821303021499042900, 0.2800000000000027500, -0.3590461068823618300 ) ) ; +#19759 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9682 ), #24903 ) ; +#19758 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19760 = CARTESIAN_POINT ( 'NONE', ( -3.946291285565024100, 0.5379819873243429900, -4.571685863491517000 ) ) ; +#19761 = ORIENTED_EDGE ( 'NONE', *, *, #18911, .F. ) ; +#19762 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.380001745296128200, -4.781671842700004200 ) ) ; +#19763 = ADVANCED_FACE ( 'NONE', ( #27758 ), #4490, .T. ) ; +#19764 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -4.775000000000000400 ) ) ; +#19765 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#19766 = PRESENTATION_STYLE_ASSIGNMENT (( #32539 ) ) ; +#19767 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#19768 = PLANE ( 'NONE', #5539 ) ; +#19769 = FILL_AREA_STYLE ('',( #16641 ) ) ; +#19770 = FILL_AREA_STYLE_COLOUR ( '', #1715 ) ; +#19771 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.2999999999999999900, 0.3499999999999999800 ) ) ; +#19772 = CIRCLE ( 'NONE', #35604, 1.565797985667148500 ) ; +#19773 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#19774 = VECTOR ( 'NONE', #8840, 1000.000000000000000 ) ; +#19775 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000007100, -0.8500017452961659000, -5.575000000000001100 ) ) ; +#19776 = VERTEX_POINT ( 'NONE', #30451 ) ; +#19777 = PRESENTATION_STYLE_ASSIGNMENT (( #41344 ) ) ; +#19778 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#19779 = SURFACE_STYLE_USAGE ( .BOTH. , #26539 ) ; +#19780 = PLANE ( 'NONE', #1382 ) ; +#19781 = PLANE ( 'NONE', #18435 ) ; +#19782 = EDGE_CURVE ( 'NONE', #12243, #31696, #40877, .T. ) ; +#19783 = VECTOR ( 'NONE', #840, 1000.000000000000000 ) ; +#19784 = ORIENTED_EDGE ( 'NONE', *, *, #32922, .T. ) ; +#19785 = PRESENTATION_STYLE_ASSIGNMENT (( #38863 ) ) ; +#19786 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#19787 = PLANE ( 'NONE', #20502 ) ; +#19788 = SURFACE_STYLE_FILL_AREA ( #7330 ) ; +#19789 = EDGE_CURVE ( 'NONE', #16475, #35781, #12534, .T. ) ; +#19790 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#19791 = ORIENTED_EDGE ( 'NONE', *, *, #12425, .T. ) ; +#19792 = CIRCLE ( 'NONE', #14086, 0.3000000000000003800 ) ; +#19793 = AXIS2_PLACEMENT_3D ( 'NONE', #15468, #38043, #25372 ) ; +#19794 = VERTEX_POINT ( 'NONE', #1267 ) ; +#19795 = VERTEX_POINT ( 'NONE', #11223 ) ; +#19796 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34929 ) ) ; +#19797 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#19798 = ORIENTED_EDGE ( 'NONE', *, *, #33174, .T. ) ; +#19799 = AXIS2_PLACEMENT_3D ( 'NONE', #11112, #20347, #30048 ) ; +#19800 = ORIENTED_EDGE ( 'NONE', *, *, #9888, .F. ) ; +#19801 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36037 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11478, #28150, #31401 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19802 = FACE_OUTER_BOUND ( 'NONE', #41676, .T. ) ; +#19803 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#19805 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16257 ) ) ; +#19804 = AXIS2_PLACEMENT_3D ( 'NONE', #39836, #14298, #20537 ) ; +#19806 = LINE ( 'NONE', #28833, #12183 ) ; +#19807 = CIRCLE ( 'NONE', #18450, 1.493004880385253400 ) ; +#19810 = EDGE_CURVE ( 'NONE', #466, #30797, #31763, .T. ) ; +#19809 = SURFACE_STYLE_USAGE ( .BOTH. , #7464 ) ; +#19808 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27106 ) ) ; +#19812 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35746 ), #4640 ) ; +#19811 = LINE ( 'NONE', #13617, #15726 ) ; +#19813 = FACE_OUTER_BOUND ( 'NONE', #39529, .T. ) ; +#19814 = FILL_AREA_STYLE_COLOUR ( '', #14368 ) ; +#19815 = AXIS2_PLACEMENT_3D ( 'NONE', #14359, #4320, #1397 ) ; +#19816 = FACE_OUTER_BOUND ( 'NONE', #32617, .T. ) ; +#19817 = PLANE ( 'NONE', #10899 ) ; +#19818 = ORIENTED_EDGE ( 'NONE', *, *, #15438, .T. ) ; +#19819 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19820 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#19821 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19822 = SURFACE_STYLE_FILL_AREA ( #30223 ) ; +#19823 = ORIENTED_EDGE ( 'NONE', *, *, #9199, .F. ) ; +#19824 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#19825 = SURFACE_STYLE_USAGE ( .BOTH. , #6921 ) ; +#19827 = CIRCLE ( 'NONE', #2752, 0.1000000000000001600 ) ; +#19826 = SURFACE_STYLE_USAGE ( .BOTH. , #22905 ) ; +#19828 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19829 = EDGE_LOOP ( 'NONE', ( #35906, #35294, #4069, #30825 ) ) ; +#19830 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#19831 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19832 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19833 = EDGE_LOOP ( 'NONE', ( #28457, #18834, #23335, #28909 ) ) ; +#19834 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999992000, -1.400001745296177500, -7.500000000000000900 ) ) ; +#19835 = CIRCLE ( 'NONE', #9659, 0.1000000000000001600 ) ; +#19836 = SURFACE_STYLE_FILL_AREA ( #17480 ) ; +#19837 = ORIENTED_EDGE ( 'NONE', *, *, #5465, .T. ) ; +#19838 = EDGE_CURVE ( 'NONE', #8483, #30331, #19151, .T. ) ; +#19839 = SURFACE_STYLE_FILL_AREA ( #13962 ) ; +#19840 = SURFACE_SIDE_STYLE ('',( #20491 ) ) ; +#19841 = SURFACE_STYLE_FILL_AREA ( #23968 ) ; +#19842 = SURFACE_STYLE_USAGE ( .BOTH. , #6803 ) ; +#19843 = VECTOR ( 'NONE', #15939, 1000.000000000000000 ) ; +#19844 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#19845 = EDGE_CURVE ( 'NONE', #15701, #6860, #13061, .T. ) ; +#19846 = VECTOR ( 'NONE', #22339, 1000.000000000000000 ) ; +#19847 = STYLED_ITEM ( 'NONE', ( #36213 ), #10772 ) ; +#19848 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#19849 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000012400, -1.999998254703822400, -3.500000000000000000 ) ) ; +#19850 = VECTOR ( 'NONE', #37929, 1000.000000000000000 ) ; +#19851 = AXIS2_PLACEMENT_3D ( 'NONE', #30283, #29862, #20288 ) ; +#19852 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34648, 'distance_accuracy_value', 'NONE'); +#19853 = VERTEX_POINT ( 'NONE', #20897 ) ; +#19854 = FILL_AREA_STYLE ('',( #6820 ) ) ; +#19855 = AXIS2_PLACEMENT_3D ( 'NONE', #2513, #24973, #5587 ) ; +#19856 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5139 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13563, #12992, #16814 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19857 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13077 ) ) ; +#19858 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, -0.09999999999998511500, -1.949999999999999500 ) ) ; +#19859 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19860 = ORIENTED_EDGE ( 'NONE', *, *, #22619, .T. ) ; +#19862 = STYLED_ITEM ( 'NONE', ( #10060 ), #5688 ) ; +#19861 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8982 ), #22028 ) ; +#19863 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.480001745296169100, -4.100000000000000500 ) ) ; +#19864 = LINE ( 'NONE', #15311, #36025 ) ; +#19866 = EDGE_CURVE ( 'NONE', #6906, #41621, #18134, .T. ) ; +#19865 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5774 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16681, #38844, #484 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19867 = VERTEX_POINT ( 'NONE', #37092 ) ; +#19868 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#19869 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19870 = EDGE_LOOP ( 'NONE', ( #16975, #15907, #22638, #29971 ) ) ; +#19871 = VERTEX_POINT ( 'NONE', #40314 ) ; +#19872 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19874 = STYLED_ITEM ( 'NONE', ( #34431 ), #931 ) ; +#19873 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17710 ), #37971 ) ; +#19875 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#19876 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35650, 'distance_accuracy_value', 'NONE'); +#19877 = FILL_AREA_STYLE ('',( #23386 ) ) ; +#19878 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 1.485063948690956900E-014, -2.095470210943120000 ) ) ; +#19879 = ORIENTED_EDGE ( 'NONE', *, *, #30400, .F. ) ; +#19880 = LINE ( 'NONE', #4778, #10227 ) ; +#19881 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#19882 = ORIENTED_EDGE ( 'NONE', *, *, #33455, .T. ) ; +#19883 = FILL_AREA_STYLE_COLOUR ( '', #31682 ) ; +#19884 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #13388, #16661, #10832, #4208, #23298, #23436 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.001318127446164194000, 0.001325507173817402800, 0.001332886901470611400 ), + .UNSPECIFIED. ) ; +#19885 = ADVANCED_FACE ( 'NONE', ( #3472 ), #7422, .F. ) ; +#19886 = CYLINDRICAL_SURFACE ( 'NONE', #27637, 0.1000000000000000500 ) ; +#19888 = VECTOR ( 'NONE', #2579, 1000.000000000000000 ) ; +#19887 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.07499999999999999700, 0.0000000000000000000 ) ) ; +#19889 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.3699982547038304600, -1.649999999999999500 ) ) ; +#19890 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.9500017452961654300, -4.875000000000000900 ) ) ; +#19891 = FILL_AREA_STYLE_COLOUR ( '', #5868 ) ; +#19892 = PRESENTATION_STYLE_ASSIGNMENT (( #12213 ) ) ; +#19893 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34375, 'distance_accuracy_value', 'NONE'); +#19894 = VERTEX_POINT ( 'NONE', #4619 ) ; +#19895 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -7.200000000000000200 ) ) ; +#19896 = SURFACE_SIDE_STYLE ('',( #24792 ) ) ; +#19897 = EDGE_CURVE ( 'NONE', #2511, #3589, #20164, .T. ) ; +#19898 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #40868, #37764, #30990, #21568 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.8047378541161156500, 0.8047378541161156500, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#19899 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865475700, 0.7071067811865475700 ) ) ; +#19900 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#19901 = ORIENTED_EDGE ( 'NONE', *, *, #21457, .F. ) ; +#19902 = CARTESIAN_POINT ( 'NONE', ( 2.400000000000000400, -1.499998254703822000, -5.449999999999994000 ) ) ; +#19903 = EDGE_CURVE ( 'NONE', #27235, #37393, #18655, .T. ) ; +#19904 = VERTEX_POINT ( 'NONE', #33569 ) ; +#19905 = EDGE_LOOP ( 'NONE', ( #30318, #12777, #30550, #2923 ) ) ; +#19906 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#19907 = LINE ( 'NONE', #12955, #35572 ) ; +#19908 = EDGE_LOOP ( 'NONE', ( #21578, #9964, #26766, #39004 ) ) ; +#19909 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, -0.7071067811865483500 ) ) ; +#19910 = ORIENTED_EDGE ( 'NONE', *, *, #31336, .T. ) ; +#19911 = EDGE_LOOP ( 'NONE', ( #23107, #20935, #18337, #13557 ) ) ; +#19912 = VERTEX_POINT ( 'NONE', #20619 ) ; +#19913 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#19914 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8308 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9559, #9823, #19638 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19915 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19916 = VECTOR ( 'NONE', #41579, 1000.000000000000000 ) ; +#19917 = FACE_OUTER_BOUND ( 'NONE', #15412, .T. ) ; +#19918 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, 0.3499999999999996400, -1.250000000000000000 ) ) ; +#19919 = VECTOR ( 'NONE', #2320, 1000.000000000000000 ) ; +#19920 = ORIENTED_EDGE ( 'NONE', *, *, #41845, .F. ) ; +#19921 = ADVANCED_FACE ( 'NONE', ( #4972 ), #7844, .T. ) ; +#19922 = STYLED_ITEM ( 'NONE', ( #5954 ), #20088 ) ; +#19923 = LINE ( 'NONE', #40841, #13307 ) ; +#19924 = AXIS2_PLACEMENT_3D ( 'NONE', #28402, #2883, #15689 ) ; +#19925 = LINE ( 'NONE', #27311, #27470 ) ; +#19926 = SURFACE_STYLE_FILL_AREA ( #29536 ) ; +#19927 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19928 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -1.050000000000000000 ) ) ; +#19929 = FILL_AREA_STYLE ('',( #885 ) ) ; +#19930 = VECTOR ( 'NONE', #12557, 1000.000000000000000 ) ; +#19932 = EDGE_CURVE ( 'NONE', #15553, #24747, #14590, .T. ) ; +#19931 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18563 ), #22079 ) ; +#19933 = SURFACE_SIDE_STYLE ('',( #12976 ) ) ; +#19934 = VECTOR ( 'NONE', #39912, 1000.000000000000000 ) ; +#19935 = LINE ( 'NONE', #24887, #15375 ) ; +#19936 = ADVANCED_FACE ( 'NONE', ( #39328 ), #3603, .T. ) ; +#19938 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13750 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18946, #12543, #15799 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19937 = STYLED_ITEM ( 'NONE', ( #12705 ), #26907 ) ; +#19939 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26761 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1048, #627, #10298 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19940 = FILL_AREA_STYLE_COLOUR ( '', #41555 ) ; +#19941 = PRESENTATION_STYLE_ASSIGNMENT (( #19826 ) ) ; +#19942 = AXIS2_PLACEMENT_3D ( 'NONE', #13588, #33500, #36212 ) ; +#19943 = FACE_OUTER_BOUND ( 'NONE', #26767, .T. ) ; +#19944 = FILL_AREA_STYLE ('',( #13694 ) ) ; +#19945 = ORIENTED_EDGE ( 'NONE', *, *, #30918, .T. ) ; +#19946 = ORIENTED_EDGE ( 'NONE', *, *, #16480, .T. ) ; +#19947 = ORIENTED_EDGE ( 'NONE', *, *, #5019, .T. ) ; +#19948 = CARTESIAN_POINT ( 'NONE', ( -3.018403899652227100, 0.3500000000000000900, -1.506609447302213800 ) ) ; +#19949 = ORIENTED_EDGE ( 'NONE', *, *, #18200, .T. ) ; +#19950 = VECTOR ( 'NONE', #5276, 1000.000000000000000 ) ; +#19951 = VECTOR ( 'NONE', #24124, 1000.000000000000100 ) ; +#19952 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#19953 = FILL_AREA_STYLE_COLOUR ( '', #23995 ) ; +#19954 = PLANE ( 'NONE', #2008 ) ; +#19955 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.139998254717362600, -5.049996877890552400 ) ) ; +#19956 = SURFACE_STYLE_FILL_AREA ( #33507 ) ; +#19957 = LINE ( 'NONE', #24163, #2792 ) ; +#19958 = LINE ( 'NONE', #24214, #12818 ) ; +#19959 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19960 = SURFACE_STYLE_FILL_AREA ( #2903 ) ; +#19961 = LINE ( 'NONE', #8168, #27520 ) ; +#19962 = ORIENTED_EDGE ( 'NONE', *, *, #23718, .F. ) ; +#19963 = EDGE_CURVE ( 'NONE', #118, #21946, #475, .T. ) ; +#19964 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.07499999999999999700, -1.450395263067899600 ) ) ; +#19965 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#19966 = FILL_AREA_STYLE_COLOUR ( '', #212 ) ; +#19967 = FILL_AREA_STYLE_COLOUR ( '', #32888 ) ; +#19968 = ADVANCED_FACE ( 'NONE', ( #21672 ), #7957, .F. ) ; +#19969 = EDGE_CURVE ( 'NONE', #41425, #14401, #32001, .T. ) ; +#19970 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.837630800822890800E-016 ) ) ; +#19971 = SURFACE_STYLE_FILL_AREA ( #588 ) ; +#19972 = SURFACE_STYLE_FILL_AREA ( #24598 ) ; +#19973 = AXIS2_PLACEMENT_3D ( 'NONE', #34817, #5725, #2236 ) ; +#19974 = PLANE ( 'NONE', #4853 ) ; +#19975 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.837630800822890800E-016 ) ) ; +#19976 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#19977 = ORIENTED_EDGE ( 'NONE', *, *, #30889, .T. ) ; +#19978 = FILL_AREA_STYLE ('',( #27026 ) ) ; +#19979 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#19980 = ORIENTED_EDGE ( 'NONE', *, *, #27388, .F. ) ; +#19981 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#19982 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#19983 = ORIENTED_EDGE ( 'NONE', *, *, #19530, .T. ) ; +#19984 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15622 ), #26463 ) ; +#19985 = LINE ( 'NONE', #29755, #21530 ) ; +#19986 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760845000E-015 ) ) ; +#19987 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#19988 = LINE ( 'NONE', #17463, #32054 ) ; +#19991 = EDGE_CURVE ( 'NONE', #36746, #8952, #15072, .T. ) ; +#19990 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -2.099999999999999600 ) ) ; +#19989 = STYLED_ITEM ( 'NONE', ( #38099 ), #37300 ) ; +#19992 = ORIENTED_EDGE ( 'NONE', *, *, #32384, .F. ) ; +#19993 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703822500, -3.700000000000000200 ) ) ; +#19994 = SURFACE_STYLE_FILL_AREA ( #35939 ) ; +#19995 = CARTESIAN_POINT ( 'NONE', ( -4.465000000000001600, -0.01999825470386167400, -7.349248115565993400 ) ) ; +#19997 = STYLED_ITEM ( 'NONE', ( #40588 ), #2987 ) ; +#19996 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1233 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13414, #10174, #3154 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19998 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17821 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22259, #22533, #6551 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#19999 = LINE ( 'NONE', #10261, #1766 ) ; +#20000 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20001 = VECTOR ( 'NONE', #2349, 1000.000000000000000 ) ; +#20002 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29488, 'distance_accuracy_value', 'NONE'); +#20003 = ORIENTED_EDGE ( 'NONE', *, *, #37448, .T. ) ; +#20004 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25598 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8206, #1641, #37053 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20005 = LINE ( 'NONE', #13737, #14911 ) ; +#20006 = ORIENTED_EDGE ( 'NONE', *, *, #37259, .F. ) ; +#20007 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9426 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28335, #38074, #5606 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20008 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20009 = PRESENTATION_STYLE_ASSIGNMENT (( #7534 ) ) ; +#20010 = ORIENTED_EDGE ( 'NONE', *, *, #3503, .F. ) ; +#20011 = PLANE ( 'NONE', #6576 ) ; +#20012 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.966063034915694200, -0.6228541982233617400 ) ) ; +#20013 = VECTOR ( 'NONE', #38027, 1000.000000000000000 ) ; +#20014 = FILL_AREA_STYLE ('',( #4288 ) ) ; +#20015 = PLANE ( 'NONE', #15998 ) ; +#20016 = FILL_AREA_STYLE ('',( #32977 ) ) ; +#20017 = PRESENTATION_STYLE_ASSIGNMENT (( #26562 ) ) ; +#20018 = CARTESIAN_POINT ( 'NONE', ( 3.217018655616160800, -0.07499999999999998300, -0.04760357729905644000 ) ) ; +#20019 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20020 = SURFACE_STYLE_USAGE ( .BOTH. , #39323 ) ; +#20021 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20022 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -6.900000000000000400 ) ) ; +#20023 = ORIENTED_EDGE ( 'NONE', *, *, #31561, .T. ) ; +#20024 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#20025 = SURFACE_STYLE_USAGE ( .BOTH. , #550 ) ; +#20026 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20027 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#20028 = FACE_OUTER_BOUND ( 'NONE', #26896, .T. ) ; +#20029 = VECTOR ( 'NONE', #22293, 1000.000000000000000 ) ; +#20030 = EDGE_CURVE ( 'NONE', #29230, #1091, #38799, .T. ) ; +#20031 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000030900, 0.2800017452961687200, -6.549999999999999800 ) ) ; +#20032 = EDGE_LOOP ( 'NONE', ( #19583, #14988, #11688, #37952 ) ) ; +#20033 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#20034 = VERTEX_POINT ( 'NONE', #19608 ) ; +#20035 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21504, 'distance_accuracy_value', 'NONE'); +#20036 = ORIENTED_EDGE ( 'NONE', *, *, #35035, .T. ) ; +#20037 = STYLED_ITEM ( 'NONE', ( #14907 ), #17876 ) ; +#20038 = FACE_OUTER_BOUND ( 'NONE', #9164, .T. ) ; +#20039 = CYLINDRICAL_SURFACE ( 'NONE', #34572, 0.1999999999999996500 ) ; +#20040 = LINE ( 'NONE', #23785, #11398 ) ; +#20041 = EDGE_CURVE ( 'NONE', #5494, #18341, #16086, .T. ) ; +#20042 = LINE ( 'NONE', #32854, #23531 ) ; +#20043 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#20044 = ORIENTED_EDGE ( 'NONE', *, *, #3901, .F. ) ; +#20045 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, -0.1999999999999999800, -1.600000000000000300 ) ) ; +#20046 = VERTEX_POINT ( 'NONE', #3468 ) ; +#20047 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27315 ), #40851 ) ; +#20048 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#20049 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.3300017452961688800, -4.975000000000000500 ) ) ; +#20050 = VECTOR ( 'NONE', #36248, 1000.000000000000000 ) ; +#20051 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20052 = STYLED_ITEM ( 'NONE', ( #7086 ), #13305 ) ; +#20053 = CYLINDRICAL_SURFACE ( 'NONE', #22627, 0.04999999999999969700 ) ; +#20054 = LINE ( 'NONE', #5422, #13431 ) ; +#20056 = EDGE_CURVE ( 'NONE', #15113, #23912, #9966, .T. ) ; +#20055 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4860 ), #343 ) ; +#20057 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -2.322941965694886000, -1.250000000000000000 ) ) ; +#20058 = SURFACE_STYLE_USAGE ( .BOTH. , #29202 ) ; +#20059 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20060 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#20061 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36705 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40272, #7812, #30419 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20063 = STYLED_ITEM ( 'NONE', ( #987 ), #9723 ) ; +#20062 = STYLED_ITEM ( 'NONE', ( #26355 ), #33961 ) ; +#20064 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#20065 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20066 = CARTESIAN_POINT ( 'NONE', ( 2.949999999999999700, -1.499998254703820400, -6.299999999999993600 ) ) ; +#20067 = ORIENTED_EDGE ( 'NONE', *, *, #22004, .F. ) ; +#20068 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#20069 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20070 = EDGE_LOOP ( 'NONE', ( #33031, #24368, #14790, #2337, #2712, #9034 ) ) ; +#20071 = ORIENTED_EDGE ( 'NONE', *, *, #26184, .T. ) ; +#20072 = ORIENTED_EDGE ( 'NONE', *, *, #16006, .F. ) ; +#20073 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20074 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20075 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20076 = PRESENTATION_STYLE_ASSIGNMENT (( #34647 ) ) ; +#20077 = LINE ( 'NONE', #21316, #40254 ) ; +#20078 = PRESENTATION_STYLE_ASSIGNMENT (( #31330 ) ) ; +#20079 = ORIENTED_EDGE ( 'NONE', *, *, #21835, .F. ) ; +#20080 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#20081 = ORIENTED_EDGE ( 'NONE', *, *, #7856, .T. ) ; +#20082 = LINE ( 'NONE', #23390, #6907 ) ; +#20083 = SURFACE_STYLE_USAGE ( .BOTH. , #10567 ) ; +#20084 = EDGE_CURVE ( 'NONE', #25102, #30794, #30712, .T. ) ; +#20085 = SURFACE_SIDE_STYLE ('',( #174 ) ) ; +#20086 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20087 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#20088 = ADVANCED_FACE ( 'NONE', ( #29203 ), #12919, .F. ) ; +#20089 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.2339555568811697600 ) ) ; +#20090 = EDGE_CURVE ( 'NONE', #35973, #39704, #22649, .T. ) ; +#20091 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30893 ), #40343 ) ; +#20092 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24223, 'distance_accuracy_value', 'NONE'); +#20093 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.380001745296130600, -6.699999999999994000 ) ) ; +#20094 = DIRECTION ( 'NONE', ( 6.056601140521967000E-031, 1.987721548152419000E-045, 1.000000000000000000 ) ) ; +#20095 = SURFACE_SIDE_STYLE ('',( #34942 ) ) ; +#20096 = SURFACE_SIDE_STYLE ('',( #34559 ) ) ; +#20097 = AXIS2_PLACEMENT_3D ( 'NONE', #35976, #26077, #39191 ) ; +#20098 = ORIENTED_EDGE ( 'NONE', *, *, #941, .F. ) ; +#20099 = SURFACE_STYLE_FILL_AREA ( #38873 ) ; +#20100 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#20101 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15741 ) ) ; +#20102 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20103 = ORIENTED_EDGE ( 'NONE', *, *, #16006, .T. ) ; +#20104 = EDGE_LOOP ( 'NONE', ( #20452, #41373, #37961, #38440 ) ) ; +#20105 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20106 = EDGE_LOOP ( 'NONE', ( #40311, #1485, #15535, #11269 ) ) ; +#20107 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24477, 'distance_accuracy_value', 'NONE'); +#20108 = PRESENTATION_STYLE_ASSIGNMENT (( #7489 ) ) ; +#20109 = LINE ( 'NONE', #22330, #1929 ) ; +#20110 = CARTESIAN_POINT ( 'NONE', ( 2.400000000000000400, -1.499998254703822000, -5.049999999999993600 ) ) ; +#20111 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30908 ), #29537 ) ; +#20112 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -2.322941965694886000, 0.6999999999999999600 ) ) ; +#20113 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17129 ) ) ; +#20114 = VERTEX_POINT ( 'NONE', #23233 ) ; +#20115 = VERTEX_POINT ( 'NONE', #13201 ) ; +#20116 = ORIENTED_EDGE ( 'NONE', *, *, #30455, .F. ) ; +#20117 = SURFACE_STYLE_FILL_AREA ( #9012 ) ; +#20118 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#20119 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26025 ) ) ; +#20120 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#20121 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20122 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#20123 = EDGE_CURVE ( 'NONE', #23035, #38543, #31237, .T. ) ; +#20124 = VERTEX_POINT ( 'NONE', #10367 ) ; +#20125 = PLANE ( 'NONE', #28369 ) ; +#20126 = VECTOR ( 'NONE', #25095, 1000.000000000000000 ) ; +#20127 = ORIENTED_EDGE ( 'NONE', *, *, #25416, .T. ) ; +#20128 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -1.899999999999999700 ) ) ; +#20130 = AXIS2_PLACEMENT_3D ( 'NONE', #15872, #6279, #34821 ) ; +#20129 = AXIS2_PLACEMENT_3D ( 'NONE', #14217, #20749, #17333 ) ; +#20131 = FILL_AREA_STYLE_COLOUR ( '', #29572 ) ; +#20132 = VECTOR ( 'NONE', #6709, 1000.000000000000000 ) ; +#20133 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20134 = ORIENTED_EDGE ( 'NONE', *, *, #38426, .T. ) ; +#20135 = ADVANCED_FACE ( 'NONE', ( #14072 ), #27065, .T. ) ; +#20136 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#20137 = LINE ( 'NONE', #27476, #37298 ) ; +#20138 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#20139 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#20140 = SURFACE_SIDE_STYLE ('',( #34160 ) ) ; +#20141 = ADVANCED_FACE ( 'NONE', ( #3434, #26175, #36791 ), #832, .T. ) ; +#20142 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -2.099999999999999600 ) ) ; +#20143 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.480001745296167600, -4.200000000000000200 ) ) ; +#20144 = ORIENTED_EDGE ( 'NONE', *, *, #36774, .F. ) ; +#20145 = FILL_AREA_STYLE ('',( #10213 ) ) ; +#20146 = PLANE ( 'NONE', #2248 ) ; +#20147 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#20148 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#20149 = EDGE_CURVE ( 'NONE', #12476, #5676, #36286, .T. ) ; +#20150 = VERTEX_POINT ( 'NONE', #4154 ) ; +#20151 = ORIENTED_EDGE ( 'NONE', *, *, #12121, .T. ) ; +#20152 = ORIENTED_EDGE ( 'NONE', *, *, #41503, .F. ) ; +#20153 = CIRCLE ( 'NONE', #3099, 0.04999999999999969700 ) ; +#20154 = PRESENTATION_STYLE_ASSIGNMENT (( #1073 ) ) ; +#20155 = CARTESIAN_POINT ( 'NONE', ( 3.178333333333020600, -0.07499999999999998300, -0.06128090415826346200 ) ) ; +#20156 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -1.139998254717354400, -5.049996877890552400 ) ) ; +#20157 = EDGE_CURVE ( 'NONE', #36310, #18981, #32196, .T. ) ; +#20158 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9713 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1911, #8625, #18548 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20159 = VECTOR ( 'NONE', #9762, 1000.000000000000000 ) ; +#20160 = CYLINDRICAL_SURFACE ( 'NONE', #24052, 0.1000000000000001600 ) ; +#20161 = CARTESIAN_POINT ( 'NONE', ( -4.669005014832223700, -0.4099999999999983700, -6.261124800398365900 ) ) ; +#20162 = SURFACE_SIDE_STYLE ('',( #34770 ) ) ; +#20163 = ORIENTED_EDGE ( 'NONE', *, *, #33762, .T. ) ; +#20164 = LINE ( 'NONE', #14237, #16612 ) ; +#20165 = EDGE_LOOP ( 'NONE', ( #1310, #421, #2477, #21787, #35339, #35980, #39949, #33305, #37671 ) ) ; +#20166 = VERTEX_POINT ( 'NONE', #33272 ) ; +#20167 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20168 = AXIS2_PLACEMENT_3D ( 'NONE', #13564, #7043, #344 ) ; +#20169 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20170 = ORIENTED_EDGE ( 'NONE', *, *, #16236, .F. ) ; +#20171 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#20172 = AXIS2_PLACEMENT_3D ( 'NONE', #1138, #36818, #30323 ) ; +#20173 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20175 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, 0.4300017452961686900, -6.450000000000000200 ) ) ; +#20174 = AXIS2_PLACEMENT_3D ( 'NONE', #10887, #4402, #29690 ) ; +#20176 = FILL_AREA_STYLE_COLOUR ( '', #14618 ) ; +#20178 = STYLED_ITEM ( 'NONE', ( #6072 ), #6350 ) ; +#20177 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22968 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22193, #38410, #15682 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20179 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20182 = EDGE_CURVE ( 'NONE', #7458, #40017, #18580, .T. ) ; +#20181 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20180 = AXIS2_PLACEMENT_3D ( 'NONE', #19773, #4053, #19913 ) ; +#20183 = FACE_OUTER_BOUND ( 'NONE', #34717, .T. ) ; +#20184 = ADVANCED_FACE ( 'NONE', ( #8443 ), #23939, .F. ) ; +#20185 = CIRCLE ( 'NONE', #3792, 0.05000000000000056500 ) ; +#20186 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, 0.0000000000000000000 ) ) ; +#20187 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 10.30000000000000100, -1.250000000000000000 ) ) ; +#20189 = STYLED_ITEM ( 'NONE', ( #40825 ), #1793 ) ; +#20188 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33152 ), #4182 ) ; +#20190 = SURFACE_STYLE_USAGE ( .BOTH. , #13660 ) ; +#20191 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9309 ) ) ; +#20192 = ORIENTED_EDGE ( 'NONE', *, *, #35000, .F. ) ; +#20193 = SURFACE_SIDE_STYLE ('',( #19841 ) ) ; +#20194 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17462, 'distance_accuracy_value', 'NONE'); +#20195 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#20196 = PRESENTATION_STYLE_ASSIGNMENT (( #14842 ) ) ; +#20197 = ORIENTED_EDGE ( 'NONE', *, *, #31079, .F. ) ; +#20198 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745296168900, -3.514459358809377300 ) ) ; +#20199 = VECTOR ( 'NONE', #30162, 1000.000000000000000 ) ; +#20200 = VECTOR ( 'NONE', #9233, 1000.000000000000000 ) ; +#20201 = SURFACE_SIDE_STYLE ('',( #14839 ) ) ; +#20202 = VECTOR ( 'NONE', #1845, 1000.000000000000000 ) ; +#20203 = VECTOR ( 'NONE', #16352, 1000.000000000000000 ) ; +#20204 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.2800017452961688400, -5.200000000000000200 ) ) ; +#20205 = VERTEX_POINT ( 'NONE', #33823 ) ; +#20206 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865475700, 0.7071067811865475700 ) ) ; +#20207 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20208 = FILL_AREA_STYLE ('',( #29772 ) ) ; +#20209 = ORIENTED_EDGE ( 'NONE', *, *, #12373, .T. ) ; +#20210 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.779999999999868400, 0.0000000000000000000 ) ) ; +#20211 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20212 = ORIENTED_EDGE ( 'NONE', *, *, #33557, .T. ) ; +#20213 = SURFACE_STYLE_FILL_AREA ( #10386 ) ; +#20214 = EDGE_CURVE ( 'NONE', #34772, #28073, #9924, .T. ) ; +#20215 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.180001745296165500, -4.775000000000000400 ) ) ; +#20216 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20217 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20218 = FACE_BOUND ( 'NONE', #9637, .T. ) ; +#20219 = FACE_OUTER_BOUND ( 'NONE', #7183, .T. ) ; +#20220 = PLANE ( 'NONE', #38066 ) ; +#20221 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000012400, -1.999998254703822000, -5.899999999999999500 ) ) ; +#20222 = EDGE_CURVE ( 'NONE', #14812, #40400, #25661, .T. ) ; +#20223 = SURFACE_SIDE_STYLE ('',( #41093 ) ) ; +#20224 = SURFACE_STYLE_FILL_AREA ( #40515 ) ; +#20225 = EDGE_CURVE ( 'NONE', #27296, #28709, #8922, .T. ) ; +#20226 = SURFACE_SIDE_STYLE ('',( #14537 ) ) ; +#20227 = FACE_OUTER_BOUND ( 'NONE', #12598, .T. ) ; +#20228 = AXIS2_PLACEMENT_3D ( 'NONE', #9819, #19629, #3491 ) ; +#20229 = VERTEX_POINT ( 'NONE', #14472 ) ; +#20230 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -5.460789592991141900E-031 ) ) ; +#20231 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#20232 = SURFACE_STYLE_USAGE ( .BOTH. , #29804 ) ; +#20233 = EDGE_LOOP ( 'NONE', ( #24943, #10502, #36884 ) ) ; +#20234 = SURFACE_STYLE_FILL_AREA ( #15175 ) ; +#20235 = AXIS2_PLACEMENT_3D ( 'NONE', #5535, #15460, #27604 ) ; +#20236 = CARTESIAN_POINT ( 'NONE', ( -0.1500000000000000200, -1.380001745296135700, -6.031671842700004200 ) ) ; +#20237 = LINE ( 'NONE', #30511, #4571 ) ; +#20239 = EDGE_CURVE ( 'NONE', #24916, #15788, #23627, .T. ) ; +#20238 = AXIS2_PLACEMENT_3D ( 'NONE', #10289, #6774, #20510 ) ; +#20240 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid22', #14022 ) ; +#20241 = FILL_AREA_STYLE_COLOUR ( '', #38465 ) ; +#20242 = ORIENTED_EDGE ( 'NONE', *, *, #7681, .T. ) ; +#20243 = PLANE ( 'NONE', #24428 ) ; +#20244 = SURFACE_STYLE_USAGE ( .BOTH. , #33063 ) ; +#20245 = ORIENTED_EDGE ( 'NONE', *, *, #16435, .T. ) ; +#20246 = ORIENTED_EDGE ( 'NONE', *, *, #22182, .F. ) ; +#20247 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#20249 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6423 ) ) ; +#20248 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7384 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14634, #17764, #11092 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20250 = STYLED_ITEM ( 'NONE', ( #37928 ), #40669 ) ; +#20251 = CARTESIAN_POINT ( 'NONE', ( 4.551493546202554100, -1.300001745296165400, -6.639019554637396700 ) ) ; +#20252 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20253 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38887 ), #21065 ) ; +#20254 = CARTESIAN_POINT ( 'NONE', ( -3.242320329696245300, 0.4784182794861342500, -1.808418279486134500 ) ) ; +#20255 = ORIENTED_EDGE ( 'NONE', *, *, #9789, .F. ) ; +#20256 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23947 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25846, #39221, #29071 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20257 = FACE_OUTER_BOUND ( 'NONE', #13134, .T. ) ; +#20258 = LINE ( 'NONE', #30046, #36409 ) ; +#20259 = SURFACE_STYLE_USAGE ( .BOTH. , #9462 ) ; +#20260 = PRESENTATION_STYLE_ASSIGNMENT (( #41043 ) ) ; +#20261 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20262 = SURFACE_SIDE_STYLE ('',( #12293 ) ) ; +#20263 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20265 = SURFACE_SIDE_STYLE ('',( #31065 ) ) ; +#20264 = LINE ( 'NONE', #12012, #6562 ) ; +#20266 = CARTESIAN_POINT ( 'NONE', ( 4.721498212947777200, -0.4099999999999984200, -6.861124800398366500 ) ) ; +#20267 = LINE ( 'NONE', #6581, #12634 ) ; +#20268 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20269 = ORIENTED_EDGE ( 'NONE', *, *, #32422, .T. ) ; +#20270 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.258751240853227700E-015, 0.0000000000000000000 ) ) ; +#20271 = CARTESIAN_POINT ( 'NONE', ( -3.043923345603630500, -0.3124937723488638900, -1.262493772348863600 ) ) ; +#20272 = PRESENTATION_STYLE_ASSIGNMENT (( #37962 ) ) ; +#20273 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000010300, -1.999998254703822400, -5.899999999999999500 ) ) ; +#20274 = VERTEX_POINT ( 'NONE', #11337 ) ; +#20275 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19163, 'distance_accuracy_value', 'NONE'); +#20276 = VERTEX_POINT ( 'NONE', #5578 ) ; +#20277 = EDGE_CURVE ( 'NONE', #37915, #16212, #14034, .T. ) ; +#20278 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -1.499998254703828600, -5.449999999999994000 ) ) ; +#20279 = LINE ( 'NONE', #7757, #5089 ) ; +#20280 = CLOSED_SHELL ( 'NONE', ( #31972, #34762, #8198, #4431, #36271, #47 ) ) ; +#20281 = EDGE_LOOP ( 'NONE', ( #24879, #25876, #9623, #21338, #17957, #1902, #3631, #28063 ) ) ; +#20282 = ORIENTED_EDGE ( 'NONE', *, *, #36298, .F. ) ; +#20283 = EDGE_CURVE ( 'NONE', #14132, #11605, #17066, .T. ) ; +#20284 = SURFACE_STYLE_USAGE ( .BOTH. , #7099 ) ; +#20285 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20286 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20287 = STYLED_ITEM ( 'NONE', ( #11488 ), #17362 ) ; +#20288 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#20289 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#20290 = EDGE_CURVE ( 'NONE', #16898, #5908, #18093, .T. ) ; +#20291 = ORIENTED_EDGE ( 'NONE', *, *, #24988, .F. ) ; +#20292 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20293 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20294 = FILL_AREA_STYLE_COLOUR ( '', #17023 ) ; +#20295 = ORIENTED_EDGE ( 'NONE', *, *, #39098, .T. ) ; +#20296 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41358 ) ) ; +#20297 = LINE ( 'NONE', #36010, #9089 ) ; +#20298 = AXIS2_PLACEMENT_3D ( 'NONE', #27150, #39411, #39960 ) ; +#20299 = FACE_OUTER_BOUND ( 'NONE', #18169, .T. ) ; +#20300 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#20301 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#20302 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#20303 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18637, 'distance_accuracy_value', 'NONE'); +#20305 = EDGE_CURVE ( 'NONE', #30703, #12804, #9451, .T. ) ; +#20304 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18130 ) ) ; +#20306 = FILL_AREA_STYLE ('',( #36390 ) ) ; +#20307 = PRESENTATION_STYLE_ASSIGNMENT (( #822 ) ) ; +#20308 = LINE ( 'NONE', #38600, #3104 ) ; +#20309 = ADVANCED_FACE ( 'NONE', ( #34242 ), #37910, .T. ) ; +#20311 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9176 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40812, #11976, #21506 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20310 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4081 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21876, #11924, #41191 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20312 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20313 = SURFACE_STYLE_USAGE ( .BOTH. , #39049 ) ; +#20314 = AXIS2_PLACEMENT_3D ( 'NONE', #7603, #30069, #30211 ) ; +#20315 = ORIENTED_EDGE ( 'NONE', *, *, #4726, .F. ) ; +#20316 = SURFACE_STYLE_USAGE ( .BOTH. , #36941 ) ; +#20317 = AXIS2_PLACEMENT_3D ( 'NONE', #13399, #206, #29659 ) ; +#20318 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20319 = VECTOR ( 'NONE', #5072, 1000.000000000000000 ) ; +#20320 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20321 = SURFACE_STYLE_USAGE ( .BOTH. , #7409 ) ; +#20322 = EDGE_LOOP ( 'NONE', ( #32101, #5938, #18714, #4557 ) ) ; +#20323 = VECTOR ( 'NONE', #25703, 1000.000000000000000 ) ; +#20324 = SURFACE_STYLE_USAGE ( .BOTH. , #26652 ) ; +#20325 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20326 = CARTESIAN_POINT ( 'NONE', ( -0.6500000000000000200, -1.380001745296134000, -6.031671842700004200 ) ) ; +#20327 = VECTOR ( 'NONE', #3273, 1000.000000000000000 ) ; +#20328 = FILL_AREA_STYLE_COLOUR ( '', #13101 ) ; +#20329 = ORIENTED_EDGE ( 'NONE', *, *, #37332, .T. ) ; +#20330 = CIRCLE ( 'NONE', #33260, 0.3600000000000078700 ) ; +#20331 = ORIENTED_EDGE ( 'NONE', *, *, #23586, .T. ) ; +#20332 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#20333 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#20334 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#20335 = ORIENTED_EDGE ( 'NONE', *, *, #24995, .T. ) ; +#20336 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20337 = SURFACE_STYLE_FILL_AREA ( #31879 ) ; +#20338 = ORIENTED_EDGE ( 'NONE', *, *, #39784, .F. ) ; +#20339 = LINE ( 'NONE', #35831, #2152 ) ; +#20340 = SURFACE_SIDE_STYLE ('',( #27192 ) ) ; +#20341 = FACE_OUTER_BOUND ( 'NONE', #23893, .T. ) ; +#20342 = LINE ( 'NONE', #28538, #5149 ) ; +#20343 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12859, 'distance_accuracy_value', 'NONE'); +#20344 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20345 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#20346 = FILL_AREA_STYLE_COLOUR ( '', #23265 ) ; +#20347 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#20348 = ADVANCED_FACE ( 'NONE', ( #16529 ), #31833, .F. ) ; +#20349 = EDGE_CURVE ( 'NONE', #33354, #30651, #21103, .T. ) ; +#20350 = LINE ( 'NONE', #40890, #23358 ) ; +#20351 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -9.035070666963931600E-017, -1.000000000000000000 ) ) ; +#20352 = SURFACE_SIDE_STYLE ('',( #32448 ) ) ; +#20353 = EDGE_CURVE ( 'NONE', #27857, #5908, #20586, .T. ) ; +#20354 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18339, 'distance_accuracy_value', 'NONE'); +#20355 = AXIS2_PLACEMENT_3D ( 'NONE', #2776, #28855, #28726 ) ; +#20356 = ORIENTED_EDGE ( 'NONE', *, *, #37204, .F. ) ; +#20357 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31256 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28482, #9105, #28619 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20358 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#20360 = CARTESIAN_POINT ( 'NONE', ( -3.475000000000000100, 1.630001745296169000, -4.100000000000000500 ) ) ; +#20359 = DIRECTION ( 'NONE', ( 9.926251142388974600E-031, 4.688441826964342300E-016, 1.000000000000000000 ) ) ; +#20361 = PLANE ( 'NONE', #3087 ) ; +#20362 = ORIENTED_EDGE ( 'NONE', *, *, #26507, .F. ) ; +#20363 = ADVANCED_FACE ( 'NONE', ( #36242 ), #2918, .F. ) ; +#20364 = AXIS2_PLACEMENT_3D ( 'NONE', #649, #3967, #32934 ) ; +#20365 = CARTESIAN_POINT ( 'NONE', ( -2.149999999999999900, -1.380001745296129100, -6.031671842700004200 ) ) ; +#20366 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#20367 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20368 = ORIENTED_EDGE ( 'NONE', *, *, #31625, .T. ) ; +#20369 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35462 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5037, #24718, #37110 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20370 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34131 ), #7309 ) ; +#20371 = SURFACE_STYLE_USAGE ( .BOTH. , #36569 ) ; +#20372 = LINE ( 'NONE', #16430, #41042 ) ; +#20373 = FILL_AREA_STYLE ('',( #39666 ) ) ; +#20375 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7901 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8496, #11749, #15707 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20374 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28975 ) ) ; +#20377 = EDGE_CURVE ( 'NONE', #17198, #14115, #35219, .T. ) ; +#20376 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23059 ) ) ; +#20378 = EDGE_LOOP ( 'NONE', ( #38838, #41876, #14337, #34677 ) ) ; +#20379 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#20380 = VECTOR ( 'NONE', #23583, 1000.000000000000000 ) ; +#20381 = ORIENTED_EDGE ( 'NONE', *, *, #14229, .T. ) ; +#20382 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#20383 = LINE ( 'NONE', #6383, #10600 ) ; +#20384 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244513300E-016 ) ) ; +#20385 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#20387 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29225 ), #7570 ) ; +#20386 = STYLED_ITEM ( 'NONE', ( #18549 ), #25257 ) ; +#20388 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#20389 = FILL_AREA_STYLE ('',( #16818 ) ) ; +#20390 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20391 = FACE_OUTER_BOUND ( 'NONE', #32477, .T. ) ; +#20392 = CARTESIAN_POINT ( 'NONE', ( 0.1500000000000000200, -1.139998254717359900, -6.299996877890552400 ) ) ; +#20393 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23236, 'distance_accuracy_value', 'NONE'); +#20394 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.734723475976805600E-016, 1.000000000000000000 ) ) ; +#20395 = CARTESIAN_POINT ( 'NONE', ( 3.237718385397979400, -0.07499999999999998300, 0.7155313145785915400 ) ) ; +#20396 = ORIENTED_EDGE ( 'NONE', *, *, #16660, .T. ) ; +#20397 = PLANE ( 'NONE', #27515 ) ; +#20398 = ADVANCED_FACE ( 'NONE', ( #28643 ), #19071, .T. ) ; +#20399 = VERTEX_POINT ( 'NONE', #41841 ) ; +#20400 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20401 = FILL_AREA_STYLE_COLOUR ( '', #12331 ) ; +#20402 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20403 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 1.480001745296168200, -3.999999999999999100 ) ) ; +#20404 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#20405 = EDGE_LOOP ( 'NONE', ( #10431, #33911, #24989, #20656 ) ) ; +#20406 = FILL_AREA_STYLE ('',( #4260 ) ) ; +#20407 = ORIENTED_EDGE ( 'NONE', *, *, #31625, .F. ) ; +#20408 = EDGE_CURVE ( 'NONE', #25527, #21790, #17026, .T. ) ; +#20409 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -2.399999999999999500 ) ) ; +#20411 = VERTEX_POINT ( 'NONE', #9350 ) ; +#20410 = VECTOR ( 'NONE', #41339, 1000.000000000000100 ) ; +#20412 = ORIENTED_EDGE ( 'NONE', *, *, #25072, .T. ) ; +#20413 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -0.8400209439508702400 ) ) ; +#20414 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#20415 = EDGE_CURVE ( 'NONE', #26309, #30344, #22575, .T. ) ; +#20416 = AXIS2_PLACEMENT_3D ( 'NONE', #24671, #31416, #5271 ) ; +#20417 = SURFACE_STYLE_USAGE ( .BOTH. , #36487 ) ; +#20418 = ORIENTED_EDGE ( 'NONE', *, *, #8467, .F. ) ; +#20419 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37235, 'distance_accuracy_value', 'NONE'); +#20420 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20421 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #882 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15165, #18423, #28145 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20422 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#20423 = FACE_OUTER_BOUND ( 'NONE', #37668, .T. ) ; +#20424 = SURFACE_STYLE_USAGE ( .BOTH. , #10766 ) ; +#20425 = STYLED_ITEM ( 'NONE', ( #14187 ), #19258 ) ; +#20427 = FACE_OUTER_BOUND ( 'NONE', #21589, .T. ) ; +#20426 = STYLED_ITEM ( 'NONE', ( #18936 ), #31513 ) ; +#20428 = FILL_AREA_STYLE ('',( #14055 ) ) ; +#20429 = CARTESIAN_POINT ( 'NONE', ( 4.449999999999999300, 0.08000174529616907400, -7.200000000000001100 ) ) ; +#20430 = LINE ( 'NONE', #6725, #11788 ) ; +#20431 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#20432 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10062, 'distance_accuracy_value', 'NONE'); +#20434 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19862 ), #19062 ) ; +#20433 = AXIS2_PLACEMENT_3D ( 'NONE', #26758, #29973, #17709 ) ; +#20435 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#20437 = EDGE_CURVE ( 'NONE', #22597, #12333, #8398, .T. ) ; +#20436 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32014 ) ) ; +#20438 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20439 = FILL_AREA_STYLE_COLOUR ( '', #14358 ) ; +#20441 = AXIS2_PLACEMENT_3D ( 'NONE', #33916, #36745, #21092 ) ; +#20440 = AXIS2_PLACEMENT_3D ( 'NONE', #22653, #22517, #32238 ) ; +#20442 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20443 = VECTOR ( 'NONE', #17677, 1000.000000000000000 ) ; +#20444 = ORIENTED_EDGE ( 'NONE', *, *, #8714, .T. ) ; +#20445 = PLANE ( 'NONE', #41188 ) ; +#20446 = FILL_AREA_STYLE_COLOUR ( '', #27672 ) ; +#20447 = CARTESIAN_POINT ( 'NONE', ( -4.518432039200718900, -1.009999999999998900, -6.261124800398365900 ) ) ; +#20448 = PRESENTATION_STYLE_ASSIGNMENT (( #35303 ) ) ; +#20449 = ORIENTED_EDGE ( 'NONE', *, *, #30169, .T. ) ; +#20450 = ORIENTED_EDGE ( 'NONE', *, *, #35349, .F. ) ; +#20451 = PLANE ( 'NONE', #19042 ) ; +#20452 = ORIENTED_EDGE ( 'NONE', *, *, #13044, .T. ) ; +#20453 = CLOSED_SHELL ( 'NONE', ( #24229, #30902, #39748, #31562, #33830, #28774 ) ) ; +#20454 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#20455 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.07499999999999998300, -0.2498427124746000500 ) ) ; +#20456 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40000, 'distance_accuracy_value', 'NONE'); +#20457 = ADVANCED_FACE ( 'NONE', ( #2904 ), #9371, .T. ) ; +#20458 = SURFACE_STYLE_USAGE ( .BOTH. , #23394 ) ; +#20459 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#20460 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.2999999999999999900, -1.249999999999999800 ) ) ; +#20461 = FILL_AREA_STYLE ('',( #40165 ) ) ; +#20462 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#20463 = FACE_OUTER_BOUND ( 'NONE', #29104, .T. ) ; +#20464 = CARTESIAN_POINT ( 'NONE', ( 3.139648011050120100, -0.07499999999999998300, -0.07495823101768077400 ) ) ; +#20465 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20466 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29375, 'distance_accuracy_value', 'NONE'); +#20467 = EDGE_CURVE ( 'NONE', #6500, #14787, #19554, .T. ) ; +#20468 = CARTESIAN_POINT ( 'NONE', ( 2.956761104396438400, 0.2083333333333323200, 1.138696624018185100 ) ) ; +#20469 = DIRECTION ( 'NONE', ( 0.9396926207859093200, -0.3420201433256663300, 4.188538737676944300E-017 ) ) ; +#20470 = ORIENTED_EDGE ( 'NONE', *, *, #11754, .T. ) ; +#20471 = EDGE_CURVE ( 'NONE', #26813, #25159, #27597, .T. ) ; +#20472 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#20473 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000027500, -0.2339555568811697600 ) ) ; +#20474 = FILL_AREA_STYLE ('',( #36827 ) ) ; +#20475 = EDGE_LOOP ( 'NONE', ( #34274, #1765, #18776, #17268 ) ) ; +#20476 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27486 ) ) ; +#20477 = LINE ( 'NONE', #20760, #16915 ) ; +#20478 = PRESENTATION_STYLE_ASSIGNMENT (( #3397 ) ) ; +#20479 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#20480 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25106, 'distance_accuracy_value', 'NONE'); +#20481 = SURFACE_SIDE_STYLE ('',( #17182 ) ) ; +#20482 = CARTESIAN_POINT ( 'NONE', ( -4.692207176641547400, -1.300001745296165000, -6.526326723416073800 ) ) ; +#20483 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39268 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8330, #27862, #31086 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20484 = VERTEX_POINT ( 'NONE', #19423 ) ; +#20485 = SURFACE_STYLE_FILL_AREA ( #6405 ) ; +#20486 = VERTEX_POINT ( 'NONE', #19577 ) ; +#20487 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18319 ), #22615 ) ; +#20488 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#20490 = EDGE_CURVE ( 'NONE', #37544, #11093, #2385, .T. ) ; +#20489 = AXIS2_PLACEMENT_3D ( 'NONE', #38419, #2755, #25872 ) ; +#20491 = SURFACE_STYLE_FILL_AREA ( #9768 ) ; +#20492 = CARTESIAN_POINT ( 'NONE', ( -3.680000000000000200, -1.139998254717349300, -6.299996877890552400 ) ) ; +#20493 = SURFACE_SIDE_STYLE ('',( #36452 ) ) ; +#20494 = PRESENTATION_STYLE_ASSIGNMENT (( #36365 ) ) ; +#20495 = SURFACE_STYLE_USAGE ( .BOTH. , #7030 ) ; +#20497 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29927 ), #6652 ) ; +#20496 = AXIS2_PLACEMENT_3D ( 'NONE', #9208, #16017, #35522 ) ; +#20498 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.380001745296129100, -6.031671842700004200 ) ) ; +#20499 = ORIENTED_EDGE ( 'NONE', *, *, #32041, .T. ) ; +#20500 = STYLED_ITEM ( 'NONE', ( #7155 ), #40037 ) ; +#20501 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#20502 = AXIS2_PLACEMENT_3D ( 'NONE', #30054, #16934, #39648 ) ; +#20503 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.2699999999999847000, -5.199999999999999300 ) ) ; +#20504 = VECTOR ( 'NONE', #21795, 1000.000000000000000 ) ; +#20505 = ORIENTED_EDGE ( 'NONE', *, *, #29775, .F. ) ; +#20506 = ORIENTED_EDGE ( 'NONE', *, *, #25997, .T. ) ; +#20507 = SURFACE_SIDE_STYLE ('',( #30897 ) ) ; +#20508 = SURFACE_SIDE_STYLE ('',( #22350 ) ) ; +#20509 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21860, 'distance_accuracy_value', 'NONE'); +#20510 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 8.054073281320898400E-015, -1.000000000000000000 ) ) ; +#20511 = ADVANCED_FACE ( 'NONE', ( #862 ), #18005, .T. ) ; +#20512 = VERTEX_POINT ( 'NONE', #3440 ) ; +#20513 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000800, -1.050000000000000000 ) ) ; +#20514 = VECTOR ( 'NONE', #16057, 1000.000000000000000 ) ; +#20515 = VECTOR ( 'NONE', #2395, 1000.000000000000000 ) ; +#20516 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20517 = ORIENTED_EDGE ( 'NONE', *, *, #15775, .T. ) ; +#20518 = PRESENTATION_STYLE_ASSIGNMENT (( #21767 ) ) ; +#20519 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20520 = FACE_OUTER_BOUND ( 'NONE', #14380, .T. ) ; +#20521 = EDGE_CURVE ( 'NONE', #23125, #41360, #17524, .T. ) ; +#20522 = PRESENTATION_STYLE_ASSIGNMENT (( #40716 ) ) ; +#20523 = LINE ( 'NONE', #16042, #5329 ) ; +#20524 = EDGE_CURVE ( 'NONE', #1607, #37363, #25112, .T. ) ; +#20525 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20526 = PRESENTATION_STYLE_ASSIGNMENT (( #2300 ) ) ; +#20527 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#20528 = LINE ( 'NONE', #37743, #27089 ) ; +#20529 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #34888, #37848, #31498, #11712 ), + .UNSPECIFIED., .F., .T. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.8047378541243649400, 0.8047378541243649400, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#20530 = EDGE_LOOP ( 'NONE', ( #26287, #8416, #16834, #21537 ) ) ; +#20531 = PLANE ( 'NONE', #5059 ) ; +#20532 = PLANE ( 'NONE', #12270 ) ; +#20533 = PRESENTATION_STYLE_ASSIGNMENT (( #11043 ) ) ; +#20534 = EDGE_CURVE ( 'NONE', #19776, #11635, #8355, .T. ) ; +#20535 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#20536 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17557 ) ) ; +#20537 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -2.891205793294629500E-014 ) ) ; +#20538 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20539 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#20540 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20541 = ORIENTED_EDGE ( 'NONE', *, *, #20999, .T. ) ; +#20542 = DIRECTION ( 'NONE', ( 3.077917520101935200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#20543 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.879999999999742300, -0.2339555568811695900 ) ) ; +#20544 = EDGE_CURVE ( 'NONE', #7458, #25421, #38198, .T. ) ; +#20545 = PRESENTATION_STYLE_ASSIGNMENT (( #37488 ) ) ; +#20546 = FILL_AREA_STYLE_COLOUR ( '', #30262 ) ; +#20547 = AXIS2_PLACEMENT_3D ( 'NONE', #5759, #25406, #22018 ) ; +#20548 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20549 = PRESENTATION_STYLE_ASSIGNMENT (( #26292 ) ) ; +#20550 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20551 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29974 ), #22684 ) ; +#20552 = CARTESIAN_POINT ( 'NONE', ( 4.721498212947777200, -1.009999999999998700, -6.861124800398366500 ) ) ; +#20553 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20556 = EDGE_CURVE ( 'NONE', #4141, #6786, #12413, .T. ) ; +#20555 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26210 ), #37836 ) ; +#20554 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20557 = CARTESIAN_POINT ( 'NONE', ( -4.520424214906982200, 0.2800000000000027500, -1.149999999999999900 ) ) ; +#20558 = ADVANCED_FACE ( 'NONE', ( #32648 ), #10048, .T. ) ; +#20559 = LINE ( 'NONE', #22904, #32624 ) ; +#20560 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.499998254703836900, -5.049999999999993600 ) ) ; +#20561 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20563 = AXIS2_PLACEMENT_3D ( 'NONE', #23697, #10968, #14249 ) ; +#20562 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19191 ) ) ; +#20564 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#20565 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25507 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22160, #12519, #2965 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20566 = ORIENTED_EDGE ( 'NONE', *, *, #10162, .F. ) ; +#20567 = SURFACE_SIDE_STYLE ('',( #36412 ) ) ; +#20568 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9679 ), #2698 ) ; +#20569 = ORIENTED_EDGE ( 'NONE', *, *, #6295, .F. ) ; +#20570 = STYLED_ITEM ( 'NONE', ( #37103 ), #8161 ) ; +#20571 = ORIENTED_EDGE ( 'NONE', *, *, #7387, .T. ) ; +#20572 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20573 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.380001745296138200, -5.449999999999994000 ) ) ; +#20574 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32082, 'distance_accuracy_value', 'NONE'); +#20575 = ORIENTED_EDGE ( 'NONE', *, *, #25099, .T. ) ; +#20576 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.180001745296165500, -4.775000000000000400 ) ) ; +#20577 = ADVANCED_FACE ( 'NONE', ( #37196 ), #797, .T. ) ; +#20578 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000007100, -1.380001745296165000, -4.400000000000000400 ) ) ; +#20579 = PRESENTATION_STYLE_ASSIGNMENT (( #15882 ) ) ; +#20580 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20581 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#20582 = VECTOR ( 'NONE', #4950, 1000.000000000000000 ) ; +#20583 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#20584 = ORIENTED_EDGE ( 'NONE', *, *, #7939, .T. ) ; +#20585 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20586 = LINE ( 'NONE', #41435, #1904 ) ; +#20587 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#20588 = ORIENTED_EDGE ( 'NONE', *, *, #20848, .F. ) ; +#20589 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#20590 = LINE ( 'NONE', #23367, #19559 ) ; +#20591 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20592 = VECTOR ( 'NONE', #29167, 1000.000000000000000 ) ; +#20593 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20594 = LINE ( 'NONE', #15178, #27639 ) ; +#20595 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20596 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -2.294459358809384700 ) ) ; +#20597 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20598 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865475700, 0.7071067811865475700 ) ) ; +#20599 = SURFACE_STYLE_FILL_AREA ( #32350 ) ; +#20600 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20601 = SURFACE_STYLE_USAGE ( .BOTH. , #14348 ) ; +#20602 = VECTOR ( 'NONE', #27905, 1000.000000000000100 ) ; +#20603 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20604 = PLANE ( 'NONE', #10585 ) ; +#20605 = EDGE_CURVE ( 'NONE', #11391, #38078, #17842, .T. ) ; +#20606 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#20607 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#20608 = SURFACE_STYLE_USAGE ( .BOTH. , #24091 ) ; +#20609 = CARTESIAN_POINT ( 'NONE', ( 4.542777971927782800, -0.1199982547038323900, -6.539400084828218800 ) ) ; +#20610 = EDGE_CURVE ( 'NONE', #12609, #17867, #22535, .T. ) ; +#20611 = ORIENTED_EDGE ( 'NONE', *, *, #946, .F. ) ; +#20612 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20613 = CARTESIAN_POINT ( 'NONE', ( 4.720380236995682200, 0.2799999999999973100, -0.8400000000000000800 ) ) ; +#20614 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29219 ) ) ; +#20615 = ADVANCED_FACE ( 'NONE', ( #6366 ), #17282, .T. ) ; +#20616 = EDGE_LOOP ( 'NONE', ( #18848, #27673, #9911, #2328 ) ) ; +#20617 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#20618 = PRESENTATION_STYLE_ASSIGNMENT (( #6752 ) ) ; +#20619 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.3699999999999857300, -4.500000000000000000 ) ) ; +#20620 = VERTEX_POINT ( 'NONE', #7660 ) ; +#20621 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20622 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30027 ), #1936 ) ; +#20623 = FACE_OUTER_BOUND ( 'NONE', #26327, .T. ) ; +#20624 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20625 = AXIS2_PLACEMENT_3D ( 'NONE', #304, #22987, #3643 ) ; +#20626 = CIRCLE ( 'NONE', #16199, 0.2000000000000001200 ) ; +#20627 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#20628 = VERTEX_POINT ( 'NONE', #1075 ) ; +#20629 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18995 ), #34129 ) ; +#20630 = FILL_AREA_STYLE ('',( #33158 ) ) ; +#20631 = ORIENTED_EDGE ( 'NONE', *, *, #10282, .F. ) ; +#20632 = FACE_OUTER_BOUND ( 'NONE', #7371, .T. ) ; +#20633 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20635 = AXIS2_PLACEMENT_3D ( 'NONE', #40758, #21456, #2945 ) ; +#20634 = STYLED_ITEM ( 'NONE', ( #10198 ), #29001 ) ; +#20636 = FILL_AREA_STYLE ('',( #14106 ) ) ; +#20638 = EDGE_CURVE ( 'NONE', #22260, #1607, #3780, .T. ) ; +#20637 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37307 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38210, #28610, #19034 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20639 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20640 = LINE ( 'NONE', #14852, #32694 ) ; +#20641 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000012400, -1.949998254703821300, -3.632287565553231200 ) ) ; +#20642 = FILL_AREA_STYLE ('',( #27111 ) ) ; +#20643 = STYLED_ITEM ( 'NONE', ( #6674 ), #8799 ) ; +#20644 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19363, 'distance_accuracy_value', 'NONE'); +#20645 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.414176746720224900E-016, 1.000000000000000000 ) ) ; +#20646 = SURFACE_STYLE_USAGE ( .BOTH. , #30340 ) ; +#20647 = ORIENTED_EDGE ( 'NONE', *, *, #29588, .F. ) ; +#20648 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#20649 = SURFACE_SIDE_STYLE ('',( #942 ) ) ; +#20650 = FILL_AREA_STYLE_COLOUR ( '', #30993 ) ; +#20651 = PLANE ( 'NONE', #24362 ) ; +#20652 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.3300017452961689900, -6.424999999999999800 ) ) ; +#20653 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -2.322941965694886000, 0.3499999999999999800 ) ) ; +#20654 = EDGE_LOOP ( 'NONE', ( #20823, #13145, #33286, #35251 ) ) ; +#20655 = ORIENTED_EDGE ( 'NONE', *, *, #134, .T. ) ; +#20656 = ORIENTED_EDGE ( 'NONE', *, *, #26897, .F. ) ; +#20657 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#20658 = VECTOR ( 'NONE', #33225, 1000.000000000000000 ) ; +#20659 = VERTEX_POINT ( 'NONE', #36761 ) ; +#20660 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20661 = ORIENTED_EDGE ( 'NONE', *, *, #17230, .T. ) ; +#20662 = VERTEX_POINT ( 'NONE', #23631 ) ; +#20663 = EDGE_CURVE ( 'NONE', #38433, #33959, #5337, .T. ) ; +#20664 = ADVANCED_FACE ( 'NONE', ( #2348 ), #4827, .T. ) ; +#20665 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -1.380001745296143100, -4.781671842700004200 ) ) ; +#20666 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20667 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20668 = EDGE_CURVE ( 'NONE', #18678, #37478, #12903, .T. ) ; +#20669 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27827 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19148, #9343, #41833 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20670 = ADVANCED_FACE ( 'NONE', ( #15443 ), #30540, .F. ) ; +#20671 = CARTESIAN_POINT ( 'NONE', ( -3.058010858782313600, -0.2999999999999999900, -0.1678751304874323800 ) ) ; +#20672 = ORIENTED_EDGE ( 'NONE', *, *, #37257, .F. ) ; +#20673 = SURFACE_STYLE_USAGE ( .BOTH. , #36732 ) ; +#20674 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.499998254703822900, -6.699999999999994000 ) ) ; +#20675 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24905, 'distance_accuracy_value', 'NONE'); +#20676 = AXIS2_PLACEMENT_3D ( 'NONE', #36369, #23641, #7246 ) ; +#20677 = TOROIDAL_SURFACE ( 'NONE', #3739, 1.200001745296169300, 0.2000017452961698200 ) ; +#20678 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.8190279881558656400, 0.5737535661042598700 ) ) ; +#20679 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#20680 = FILL_AREA_STYLE ('',( #14155 ) ) ; +#20681 = STYLED_ITEM ( 'NONE', ( #16585 ), #38693 ) ; +#20682 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#20683 = VERTEX_POINT ( 'NONE', #1625 ) ; +#20684 = AXIS2_PLACEMENT_3D ( 'NONE', #9418, #16772, #35710 ) ; +#20685 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18062, 'distance_accuracy_value', 'NONE'); +#20688 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34996 ) ) ; +#20687 = FILL_AREA_STYLE ('',( #30386 ) ) ; +#20686 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32533 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15843, #15450, #25084 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20689 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.380001745296129100, -6.031671842700004200 ) ) ; +#20690 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#20691 = CARTESIAN_POINT ( 'NONE', ( -3.095000000000000600, 0.07499999999999999700, -0.3254101966250000400 ) ) ; +#20692 = EDGE_LOOP ( 'NONE', ( #5674, #18962, #40639, #22608, #25645, #17255, #6850, #32842 ) ) ; +#20693 = LINE ( 'NONE', #35223, #36822 ) ; +#20695 = EDGE_CURVE ( 'NONE', #9333, #28728, #41216, .T. ) ; +#20694 = AXIS2_PLACEMENT_3D ( 'NONE', #9047, #38565, #28831 ) ; +#20696 = FILL_AREA_STYLE_COLOUR ( '', #22681 ) ; +#20697 = FILL_AREA_STYLE_COLOUR ( '', #18948 ) ; +#20698 = ORIENTED_EDGE ( 'NONE', *, *, #5592, .T. ) ; +#20699 = SURFACE_STYLE_FILL_AREA ( #13874 ) ; +#20700 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.380001745296129100, -6.031671842700004200 ) ) ; +#20701 = VECTOR ( 'NONE', #24967, 1000.000000000000000 ) ; +#20703 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18511 ) ) ; +#20702 = STYLED_ITEM ( 'NONE', ( #9425 ), #25655 ) ; +#20704 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026400, -0.2339555568811697600 ) ) ; +#20705 = SURFACE_STYLE_FILL_AREA ( #40954 ) ; +#20706 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#20707 = FILL_AREA_STYLE_COLOUR ( '', #25132 ) ; +#20708 = SURFACE_STYLE_FILL_AREA ( #15341 ) ; +#20709 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20710 = ORIENTED_EDGE ( 'NONE', *, *, #36462, .F. ) ; +#20711 = ORIENTED_EDGE ( 'NONE', *, *, #14207, .T. ) ; +#20712 = ORIENTED_EDGE ( 'NONE', *, *, #11702, .F. ) ; +#20713 = FACE_OUTER_BOUND ( 'NONE', #7467, .T. ) ; +#20714 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20715 = ORIENTED_EDGE ( 'NONE', *, *, #10765, .T. ) ; +#20716 = CYLINDRICAL_SURFACE ( 'NONE', #35992, 0.1000000000000001600 ) ; +#20717 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, 2.322941965694886000, 0.6999999999999999600 ) ) ; +#20718 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#20719 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745296168900, -3.514459358809384400 ) ) ; +#20720 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -1.380001745296139700, -4.781671842700004200 ) ) ; +#20721 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#20722 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#20723 = SURFACE_SIDE_STYLE ('',( #2757 ) ) ; +#20724 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20725 = EDGE_CURVE ( 'NONE', #10759, #35973, #23990, .T. ) ; +#20726 = PLANE ( 'NONE', #26230 ) ; +#20727 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.480001745296166000, -1.899999999999999700 ) ) ; +#20728 = EDGE_CURVE ( 'NONE', #24271, #31823, #41171, .T. ) ; +#20729 = VERTEX_POINT ( 'NONE', #1478 ) ; +#20730 = SURFACE_STYLE_USAGE ( .BOTH. , #27195 ) ; +#20731 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000032500, 0.2800017452961687200, -6.749999999999999100 ) ) ; +#20732 = SURFACE_STYLE_USAGE ( .BOTH. , #33681 ) ; +#20733 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25496, 'distance_accuracy_value', 'NONE'); +#20734 = SURFACE_STYLE_FILL_AREA ( #37853 ) ; +#20735 = FILL_AREA_STYLE_COLOUR ( '', #34217 ) ; +#20736 = ORIENTED_EDGE ( 'NONE', *, *, #4297, .T. ) ; +#20737 = ORIENTED_EDGE ( 'NONE', *, *, #2561, .T. ) ; +#20738 = ADVANCED_FACE ( 'NONE', ( #34116 ), #11733, .F. ) ; +#20739 = AXIS2_PLACEMENT_3D ( 'NONE', #38646, #28787, #22583 ) ; +#20740 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000026900, -1.149999999999999900 ) ) ; +#20741 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.730380239188924900, -0.8400209439508702400 ) ) ; +#20742 = VECTOR ( 'NONE', #4900, 1000.000000000000000 ) ; +#20743 = ORIENTED_EDGE ( 'NONE', *, *, #11566, .T. ) ; +#20744 = ORIENTED_EDGE ( 'NONE', *, *, #1608, .F. ) ; +#20745 = ORIENTED_EDGE ( 'NONE', *, *, #15523, .T. ) ; +#20746 = VECTOR ( 'NONE', #40872, 1000.000000000000000 ) ; +#20747 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28008 ), #5546 ) ; +#20748 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20749 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -2.367138801244516300E-016 ) ) ; +#20750 = SURFACE_STYLE_USAGE ( .BOTH. , #36949 ) ; +#20751 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16371 ) ) ; +#20752 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20755 = EDGE_CURVE ( 'NONE', #21687, #27046, #7299, .T. ) ; +#20754 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#20753 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30409 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31852, #15352, #41715 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20756 = VERTEX_POINT ( 'NONE', #40536 ) ; +#20757 = SURFACE_SIDE_STYLE ('',( #32805 ) ) ; +#20758 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.180001745296164900, -7.300000000000000700 ) ) ; +#20759 = FACE_OUTER_BOUND ( 'NONE', #9491, .T. ) ; +#20760 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.480001745296170000, -0.2339555568811695900 ) ) ; +#20761 = CIRCLE ( 'NONE', #39692, 0.3000000000000007700 ) ; +#20763 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30977 ), #7146 ) ; +#20762 = AXIS2_PLACEMENT_3D ( 'NONE', #9818, #22973, #29045 ) ; +#20764 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#20765 = VECTOR ( 'NONE', #19824, 1000.000000000000000 ) ; +#20766 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -2.322941965694886000, -1.250000000000000000 ) ) ; +#20767 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.4300017452961689100, -5.075000000000000200 ) ) ; +#20768 = VERTEX_POINT ( 'NONE', #14995 ) ; +#20769 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20770 = CARTESIAN_POINT ( 'NONE', ( 4.821303021499042900, -0.2800000000000026400, -0.3590461068823618300 ) ) ; +#20771 = SURFACE_STYLE_USAGE ( .BOTH. , #17499 ) ; +#20772 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.380001745296130600, -6.699999999999994000 ) ) ; +#20773 = ADVANCED_FACE ( 'NONE', ( #40667 ), #31064, .T. ) ; +#20774 = LINE ( 'NONE', #37769, #41432 ) ; +#20775 = VERTEX_POINT ( 'NONE', #40827 ) ; +#20776 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20777 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.279999999999999800, -0.2000017452961698200 ) ) ; +#20778 = MANIFOLD_SOLID_BREP ( '1-1-solid18', #14751 ) ; +#20779 = VERTEX_POINT ( 'NONE', #5530 ) ; +#20780 = EDGE_CURVE ( 'NONE', #40573, #5418, #28041, .T. ) ; +#20781 = EDGE_LOOP ( 'NONE', ( #11264, #25468, #6375, #39352 ) ) ; +#20782 = ORIENTED_EDGE ( 'NONE', *, *, #26382, .T. ) ; +#20783 = DIRECTION ( 'NONE', ( -3.097720492815727200E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20784 = DIRECTION ( 'NONE', ( -0.08715574274766037200, 0.0000000000000000000, -0.9961946980917453200 ) ) ; +#20785 = ADVANCED_FACE ( 'NONE', ( #12846 ), #31381, .F. ) ; +#20786 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -1.499998254703835300, -5.049999999999993600 ) ) ; +#20787 = FILL_AREA_STYLE_COLOUR ( '', #23362 ) ; +#20788 = EDGE_CURVE ( 'NONE', #26349, #12243, #37600, .T. ) ; +#20789 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20790 = VERTEX_POINT ( 'NONE', #15418 ) ; +#20791 = EDGE_CURVE ( 'NONE', #28728, #2222, #13855, .T. ) ; +#20792 = VECTOR ( 'NONE', #25650, 1000.000000000000000 ) ; +#20793 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#20794 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, -2.031000000000001500, -6.849999999999999600 ) ) ; +#20795 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2363 ) ) ; +#20796 = PRESENTATION_STYLE_ASSIGNMENT (( #38012 ) ) ; +#20797 = SURFACE_STYLE_USAGE ( .BOTH. , #14408 ) ; +#20798 = FACE_OUTER_BOUND ( 'NONE', #24960, .T. ) ; +#20799 = SURFACE_STYLE_USAGE ( .BOTH. , #12571 ) ; +#20800 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1873 ), #40227 ) ; +#20801 = CARTESIAN_POINT ( 'NONE', ( -2.149999999999999900, -1.380001745296129100, -6.699999999999994000 ) ) ; +#20802 = ORIENTED_EDGE ( 'NONE', *, *, #10012, .F. ) ; +#20804 = EDGE_CURVE ( 'NONE', #31, #35418, #5251, .T. ) ; +#20803 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17864 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10851, #30366, #11006 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20805 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#20806 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#20807 = SURFACE_SIDE_STYLE ('',( #1299 ) ) ; +#20808 = LINE ( 'NONE', #31338, #26874 ) ; +#20809 = ORIENTED_EDGE ( 'NONE', *, *, #13880, .T. ) ; +#20810 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5351, 'distance_accuracy_value', 'NONE'); +#20811 = CLOSED_SHELL ( 'NONE', ( #21772, #22867, #30363, #35178, #36846, #33240 ) ) ; +#20812 = LINE ( 'NONE', #36067, #21290 ) ; +#20813 = SURFACE_SIDE_STYLE ('',( #12968 ) ) ; +#20815 = STYLED_ITEM ( 'NONE', ( #37766 ), #3360 ) ; +#20814 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5618 ) ) ; +#20816 = STYLED_ITEM ( 'NONE', ( #19766 ), #40614 ) ; +#20817 = VECTOR ( 'NONE', #4380, 1000.000000000000000 ) ; +#20818 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20820 = PRESENTATION_STYLE_ASSIGNMENT (( #91 ) ) ; +#20819 = FILL_AREA_STYLE_COLOUR ( '', #28972 ) ; +#20821 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12901 ), #16695 ) ; +#20822 = FILL_AREA_STYLE ('',( #1335 ) ) ; +#20823 = ORIENTED_EDGE ( 'NONE', *, *, #31875, .F. ) ; +#20824 = ORIENTED_EDGE ( 'NONE', *, *, #25583, .F. ) ; +#20826 = ADVANCED_FACE ( 'NONE', ( #22962 ), #15548, .F. ) ; +#20825 = EDGE_LOOP ( 'NONE', ( #24513, #31947, #39635, #37437 ) ) ; +#20827 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20828 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16447 ) ) ; +#20829 = FILL_AREA_STYLE_COLOUR ( '', #38334 ) ; +#20830 = FILL_AREA_STYLE_COLOUR ( '', #549 ) ; +#20831 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20832 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20833 = ORIENTED_EDGE ( 'NONE', *, *, #8467, .T. ) ; +#20834 = FILL_AREA_STYLE ('',( #27856 ) ) ; +#20835 = FACE_OUTER_BOUND ( 'NONE', #22717, .T. ) ; +#20836 = EDGE_LOOP ( 'NONE', ( #29244, #22845, #1205, #37981 ) ) ; +#20837 = VECTOR ( 'NONE', #33718, 1000.000000000000000 ) ; +#20838 = VECTOR ( 'NONE', #12617, 1000.000000000000000 ) ; +#20839 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20840 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26238, 'distance_accuracy_value', 'NONE'); +#20841 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#20842 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#20843 = LINE ( 'NONE', #30284, #30406 ) ; +#20844 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20845 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#20846 = ORIENTED_EDGE ( 'NONE', *, *, #9550, .F. ) ; +#20847 = PLANE ( 'NONE', #5361 ) ; +#20848 = EDGE_CURVE ( 'NONE', #41173, #29041, #14865, .T. ) ; +#20849 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.2699999999999849200, -4.599999999999999600 ) ) ; +#20850 = FILL_AREA_STYLE_COLOUR ( '', #41383 ) ; +#20851 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20852 = ORIENTED_EDGE ( 'NONE', *, *, #27321, .F. ) ; +#20853 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8925 ), #37893 ) ; +#20854 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#20855 = SURFACE_STYLE_USAGE ( .BOTH. , #4585 ) ; +#20856 = EDGE_CURVE ( 'NONE', #35081, #35497, #4773, .T. ) ; +#20857 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#20858 = VECTOR ( 'NONE', #9321, 1000.000000000000000 ) ; +#20859 = CARTESIAN_POINT ( 'NONE', ( -3.095000000000000200, -0.07499999999999998300, -0.2720333372351148600 ) ) ; +#20860 = ORIENTED_EDGE ( 'NONE', *, *, #30524, .T. ) ; +#20861 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.4300017452961693600, -4.975000000000000500 ) ) ; +#20862 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20863 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11297 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32788, #13284, #9760 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20864 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29464 ), #20 ) ; +#20865 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244519300E-016 ) ) ; +#20868 = EDGE_CURVE ( 'NONE', #37485, #28464, #10797, .T. ) ; +#20867 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7257 ), #22983 ) ; +#20866 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -2.299999999999999400 ) ) ; +#20869 = FILL_AREA_STYLE ('',( #27452 ) ) ; +#20870 = PLANE ( 'NONE', #5041 ) ; +#20871 = ORIENTED_EDGE ( 'NONE', *, *, #6885, .F. ) ; +#20872 = EDGE_LOOP ( 'NONE', ( #29870, #31480, #37792, #13888 ) ) ; +#20873 = ADVANCED_FACE ( 'NONE', ( #22460, #2263 ), #19106, .T. ) ; +#20874 = VECTOR ( 'NONE', #33342, 1000.000000000000000 ) ; +#20876 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24383 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11845, #31363, #2166 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20875 = STYLED_ITEM ( 'NONE', ( #5265 ), #28399 ) ; +#20877 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20878 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20879 = STYLED_ITEM ( 'NONE', ( #354 ), #41700 ) ; +#20880 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36469, 'distance_accuracy_value', 'NONE'); +#20881 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20883 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16261 ), #22997 ) ; +#20882 = AXIS2_PLACEMENT_3D ( 'NONE', #2153, #24744, #27676 ) ; +#20884 = PLANE ( 'NONE', #6513 ) ; +#20885 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20888 = STYLED_ITEM ( 'NONE', ( #29931 ), #8584 ) ; +#20887 = FILL_AREA_STYLE_COLOUR ( '', #21072 ) ; +#20886 = LINE ( 'NONE', #22812, #19366 ) ; +#20889 = SURFACE_STYLE_FILL_AREA ( #24692 ) ; +#20890 = SURFACE_SIDE_STYLE ('',( #9521 ) ) ; +#20891 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10752, 'distance_accuracy_value', 'NONE'); +#20892 = ORIENTED_EDGE ( 'NONE', *, *, #9261, .F. ) ; +#20893 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#20894 = VECTOR ( 'NONE', #39518, 1000.000000000000000 ) ; +#20895 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, 1.000000000000000000 ) ) ; +#20896 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.984726612956918400E-031, -2.168404344971012800E-015 ) ) ; +#20897 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000900, 1.167528855492239800, -4.400000000000001200 ) ) ; +#20898 = SURFACE_SIDE_STYLE ('',( #41157 ) ) ; +#20899 = ORIENTED_EDGE ( 'NONE', *, *, #40586, .T. ) ; +#20900 = FILL_AREA_STYLE ('',( #26240 ) ) ; +#20901 = LINE ( 'NONE', #20066, #27416 ) ; +#20902 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#20903 = PRESENTATION_STYLE_ASSIGNMENT (( #7571 ) ) ; +#20904 = ORIENTED_EDGE ( 'NONE', *, *, #14801, .F. ) ; +#20905 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#20906 = ORIENTED_EDGE ( 'NONE', *, *, #2428, .F. ) ; +#20907 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20908 = ORIENTED_EDGE ( 'NONE', *, *, #37719, .F. ) ; +#20909 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#20910 = FACE_OUTER_BOUND ( 'NONE', #34105, .T. ) ; +#20911 = SURFACE_SIDE_STYLE ('',( #31941 ) ) ; +#20912 = VERTEX_POINT ( 'NONE', #22603 ) ; +#20913 = EDGE_CURVE ( 'NONE', #41862, #31577, #27508, .T. ) ; +#20914 = PRESENTATION_STYLE_ASSIGNMENT (( #7038 ) ) ; +#20915 = VECTOR ( 'NONE', #41237, 1000.000000000000000 ) ; +#20916 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20917 = DIRECTION ( 'NONE', ( -2.465190328815661900E-032, -1.000000000000000000, 2.367138801244516300E-016 ) ) ; +#20918 = EDGE_CURVE ( 'NONE', #7388, #1607, #10301, .T. ) ; +#20919 = LINE ( 'NONE', #36711, #11251 ) ; +#20920 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4341 ) ) ; +#20921 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #81 ), #26571 ) ; +#20922 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#20923 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28184 ) ) ; +#20924 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#20925 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#20926 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#20927 = SURFACE_STYLE_FILL_AREA ( #11154 ) ; +#20928 = AXIS2_PLACEMENT_3D ( 'NONE', #23325, #3957, #6784 ) ; +#20929 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26023 ), #907 ) ; +#20930 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20931 = ORIENTED_EDGE ( 'NONE', *, *, #17294, .F. ) ; +#20933 = STYLED_ITEM ( 'NONE', ( #15721 ), #5347 ) ; +#20932 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25258 ), #36060 ) ; +#20934 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#20935 = ORIENTED_EDGE ( 'NONE', *, *, #19661, .F. ) ; +#20936 = PRESENTATION_STYLE_ASSIGNMENT (( #21411 ) ) ; +#20939 = EDGE_CURVE ( 'NONE', #34169, #25373, #36122, .T. ) ; +#20938 = SURFACE_STYLE_USAGE ( .BOTH. , #30360 ) ; +#20937 = AXIS2_PLACEMENT_3D ( 'NONE', #19599, #16455, #3595 ) ; +#20940 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#20941 = FILL_AREA_STYLE_COLOUR ( '', #17794 ) ; +#20942 = EDGE_LOOP ( 'NONE', ( #25214, #6648, #13107 ) ) ; +#20943 = ORIENTED_EDGE ( 'NONE', *, *, #36982, .F. ) ; +#20944 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, -0.07499999999999999700, 0.009999999999999995000 ) ) ; +#20945 = ORIENTED_EDGE ( 'NONE', *, *, #15607, .F. ) ; +#20946 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20947 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#20948 = ORIENTED_EDGE ( 'NONE', *, *, #390, .T. ) ; +#20949 = ADVANCED_FACE ( 'NONE', ( #9283 ), #11283, .T. ) ; +#20951 = STYLED_ITEM ( 'NONE', ( #33093 ), #499 ) ; +#20950 = AXIS2_PLACEMENT_3D ( 'NONE', #25902, #18901, #20334 ) ; +#20952 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#20953 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#20954 = SURFACE_SIDE_STYLE ('',( #14350 ) ) ; +#20955 = CIRCLE ( 'NONE', #35326, 1.686063034915693300 ) ; +#20956 = VERTEX_POINT ( 'NONE', #12831 ) ; +#20957 = LINE ( 'NONE', #2723, #12298 ) ; +#20958 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20959 = DIRECTION ( 'NONE', ( -6.056601140521966100E-031, 1.736611218856585300E-045, 1.000000000000000000 ) ) ; +#20960 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#20961 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, 0.2800000000000028000, 0.0000000000000000000 ) ) ; +#20962 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#20963 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#20964 = SURFACE_STYLE_USAGE ( .BOTH. , #4547 ) ; +#20965 = SURFACE_STYLE_USAGE ( .BOTH. , #7783 ) ; +#20966 = FACE_OUTER_BOUND ( 'NONE', #5444, .T. ) ; +#20967 = CARTESIAN_POINT ( 'NONE', ( -3.500000000000003100, -2.031000000000001500, -6.749999999999999100 ) ) ; +#20968 = EDGE_CURVE ( 'NONE', #6822, #20659, #16844, .T. ) ; +#20969 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#20970 = FILL_AREA_STYLE ('',( #39847 ) ) ; +#20971 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#20972 = EDGE_CURVE ( 'NONE', #11605, #10907, #39087, .T. ) ; +#20973 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27423 ) ) ; +#20974 = VERTEX_POINT ( 'NONE', #41642 ) ; +#20975 = SURFACE_SIDE_STYLE ('',( #33239 ) ) ; +#20976 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#20977 = ORIENTED_EDGE ( 'NONE', *, *, #6088, .F. ) ; +#20978 = ADVANCED_FACE ( 'NONE', ( #35048 ), #35597, .T. ) ; +#20979 = VERTEX_POINT ( 'NONE', #12979 ) ; +#20980 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#20981 = ORIENTED_EDGE ( 'NONE', *, *, #32692, .F. ) ; +#20982 = VERTEX_POINT ( 'NONE', #10561 ) ; +#20983 = VECTOR ( 'NONE', #1801, 1000.000000000000100 ) ; +#20984 = STYLED_ITEM ( 'NONE', ( #14919 ), #15289 ) ; +#20985 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#20986 = FILL_AREA_STYLE_COLOUR ( '', #9543 ) ; +#20987 = LINE ( 'NONE', #40456, #11811 ) ; +#20988 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21536 ), #25316 ) ; +#20989 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#20990 = LINE ( 'NONE', #1495, #13858 ) ; +#20991 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20992 = ADVANCED_FACE ( 'NONE', ( #37077 ), #1730, .F. ) ; +#20994 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36918 ) ) ; +#20993 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35652 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3979, #7226, #13739 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#20995 = VECTOR ( 'NONE', #41449, 1000.000000000000000 ) ; +#20996 = EDGE_LOOP ( 'NONE', ( #31514, #12160, #40733, #27966 ) ) ; +#20997 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#20999 = EDGE_CURVE ( 'NONE', #28223, #10076, #23951, .T. ) ; +#20998 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39772 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3909, #873, #36289 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21000 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.139998254717367300, -5.049996877890552400 ) ) ; +#21001 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.499998254703828600, -5.049999999999993600 ) ) ; +#21002 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24310, 'distance_accuracy_value', 'NONE'); +#21003 = VECTOR ( 'NONE', #25308, 1000.000000000000000 ) ; +#21005 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16637 ), #34216 ) ; +#21004 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41259 ) ) ; +#21006 = ORIENTED_EDGE ( 'NONE', *, *, #33677, .T. ) ; +#21007 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15817 ), #27692 ) ; +#21008 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#21009 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21010 = PRESENTATION_STYLE_ASSIGNMENT (( #15844 ) ) ; +#21011 = FACE_OUTER_BOUND ( 'NONE', #20942, .T. ) ; +#21012 = EDGE_LOOP ( 'NONE', ( #25173, #5158, #19371, #31311 ) ) ; +#21013 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, -0.6500000000000001300, -3.299999999999999800 ) ) ; +#21014 = CARTESIAN_POINT ( 'NONE', ( 2.900000000000000400, -1.139998254717351100, -5.049996877890552400 ) ) ; +#21015 = SURFACE_STYLE_FILL_AREA ( #35268 ) ; +#21016 = MANIFOLD_SOLID_BREP ( '1-1-solid16', #24537 ) ; +#21017 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#21018 = ORIENTED_EDGE ( 'NONE', *, *, #32551, .F. ) ; +#21019 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703821100, -6.800000000000000700 ) ) ; +#21020 = ORIENTED_EDGE ( 'NONE', *, *, #1176, .T. ) ; +#21021 = CIRCLE ( 'NONE', #14820, 0.2000000000000000400 ) ; +#21022 = LINE ( 'NONE', #2475, #31603 ) ; +#21023 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#21024 = ORIENTED_EDGE ( 'NONE', *, *, #10703, .F. ) ; +#21025 = SURFACE_SIDE_STYLE ('',( #16120 ) ) ; +#21026 = VECTOR ( 'NONE', #13293, 1000.000000000000100 ) ; +#21027 = EDGE_CURVE ( 'NONE', #34240, #32326, #27007, .T. ) ; +#21028 = ADVANCED_FACE ( 'NONE', ( #9776 ), #20220, .F. ) ; +#21029 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.499998254703824400, -6.699999999999994000 ) ) ; +#21030 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 0.2999999999999999900, 0.3499999999999999800 ) ) ; +#21031 = VECTOR ( 'NONE', #23093, 1000.000000000000000 ) ; +#21032 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#21033 = ORIENTED_EDGE ( 'NONE', *, *, #11336, .T. ) ; +#21034 = EDGE_CURVE ( 'NONE', #28285, #5282, #24961, .T. ) ; +#21035 = PRESENTATION_STYLE_ASSIGNMENT (( #9688 ) ) ; +#21036 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#21037 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21038 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#21039 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20275 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19163, #41705, #22393 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21040 = ORIENTED_EDGE ( 'NONE', *, *, #29521, .T. ) ; +#21041 = SURFACE_SIDE_STYLE ('',( #3045 ) ) ; +#21042 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#21043 = SURFACE_SIDE_STYLE ('',( #10599 ) ) ; +#21044 = AXIS2_PLACEMENT_3D ( 'NONE', #6541, #39287, #16300 ) ; +#21045 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33566, 'distance_accuracy_value', 'NONE'); +#21046 = STYLED_ITEM ( 'NONE', ( #11833 ), #12009 ) ; +#21047 = SURFACE_STYLE_FILL_AREA ( #32347 ) ; +#21048 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21049 = EDGE_LOOP ( 'NONE', ( #34889, #32224, #3937, #16655 ) ) ; +#21051 = EDGE_CURVE ( 'NONE', #5698, #4455, #37557, .T. ) ; +#21050 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15108 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20991, #27180, #30833 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21052 = CYLINDRICAL_SURFACE ( 'NONE', #25686, 0.3600000000000078700 ) ; +#21053 = ORIENTED_EDGE ( 'NONE', *, *, #26860, .T. ) ; +#21054 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#21055 = SURFACE_SIDE_STYLE ('',( #14508 ) ) ; +#21056 = ORIENTED_EDGE ( 'NONE', *, *, #38486, .T. ) ; +#21057 = VERTEX_POINT ( 'NONE', #16796 ) ; +#21058 = STYLED_ITEM ( 'NONE', ( #36133 ), #2597 ) ; +#21059 = FILL_AREA_STYLE_COLOUR ( '', #31960 ) ; +#21060 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#21061 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24019 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2974, #35301, #28371 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21062 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#21063 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21064 = ORIENTED_EDGE ( 'NONE', *, *, #28227, .T. ) ; +#21065 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26111 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19605, #273, #31992 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21066 = SURFACE_STYLE_FILL_AREA ( #16994 ) ; +#21067 = VERTEX_POINT ( 'NONE', #746 ) ; +#21068 = SURFACE_SIDE_STYLE ('',( #35778 ) ) ; +#21069 = VECTOR ( 'NONE', #32415, 1000.000000000000000 ) ; +#21070 = ORIENTED_EDGE ( 'NONE', *, *, #1718, .F. ) ; +#21071 = CARTESIAN_POINT ( 'NONE', ( 4.735797985667151300, -0.2800000000000027500, -0.3279248189596167300 ) ) ; +#21072 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#21073 = CARTESIAN_POINT ( 'NONE', ( -0.6000000000000000900, -1.499998254703832000, -5.049999999999993600 ) ) ; +#21074 = ADVANCED_FACE ( 'NONE', ( #38036 ), #6899, .T. ) ; +#21075 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21076 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21077 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21078 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#21079 = CIRCLE ( 'NONE', #29297, 0.1000000000000002600 ) ; +#21080 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19819, 'distance_accuracy_value', 'NONE'); +#21081 = PRESENTATION_STYLE_ASSIGNMENT (( #36623 ) ) ; +#21082 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#21083 = ORIENTED_EDGE ( 'NONE', *, *, #2724, .F. ) ; +#21084 = FILL_AREA_STYLE ('',( #24311 ) ) ; +#21085 = EDGE_CURVE ( 'NONE', #24845, #25243, #19880, .T. ) ; +#21086 = VERTEX_POINT ( 'NONE', #16381 ) ; +#21087 = FILL_AREA_STYLE_COLOUR ( '', #11341 ) ; +#21088 = CARTESIAN_POINT ( 'NONE', ( -2.972500000000000100, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#21089 = DIRECTION ( 'NONE', ( -6.056601140521967900E-031, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#21090 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000800, -0.8400000000000000800 ) ) ; +#21091 = EDGE_CURVE ( 'NONE', #25465, #29761, #18380, .T. ) ; +#21092 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#21093 = ORIENTED_EDGE ( 'NONE', *, *, #8989, .T. ) ; +#21094 = VERTEX_POINT ( 'NONE', #23574 ) ; +#21095 = AXIS2_PLACEMENT_3D ( 'NONE', #37505, #18182, #2239 ) ; +#21096 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21097 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -0.3500000000000000300, -1.300000000000000000 ) ) ; +#21098 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -2.322941965694886000, -1.250000000000000000 ) ) ; +#21099 = SURFACE_SIDE_STYLE ('',( #32979 ) ) ; +#21100 = EDGE_CURVE ( 'NONE', #3668, #10433, #35016, .T. ) ; +#21101 = CIRCLE ( 'NONE', #3716, 0.1000000000000001600 ) ; +#21102 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21103 = LINE ( 'NONE', #31687, #5909 ) ; +#21104 = ORIENTED_EDGE ( 'NONE', *, *, #11836, .T. ) ; +#21105 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#21106 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41358 ), #16 ) ; +#21107 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#21108 = FILL_AREA_STYLE_COLOUR ( '', #20118 ) ; +#21109 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7251 ) ) ; +#21110 = FILL_AREA_STYLE ('',( #4708 ) ) ; +#21111 = SURFACE_STYLE_FILL_AREA ( #41639 ) ; +#21112 = FACE_OUTER_BOUND ( 'NONE', #10685, .T. ) ; +#21115 = EDGE_CURVE ( 'NONE', #5874, #10090, #6707, .T. ) ; +#21114 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17315 ) ) ; +#21113 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, 0.2800000000000027500, -0.2339555568811697600 ) ) ; +#21116 = SURFACE_STYLE_FILL_AREA ( #34218 ) ; +#21117 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21118 = LINE ( 'NONE', #15303, #5921 ) ; +#21120 = STYLED_ITEM ( 'NONE', ( #29152 ), #3738 ) ; +#21119 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34626 ) ) ; +#21121 = STYLED_ITEM ( 'NONE', ( #20078 ), #41450 ) ; +#21122 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#21123 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18943 ) ) ; +#21124 = ORIENTED_EDGE ( 'NONE', *, *, #16039, .F. ) ; +#21125 = FACE_OUTER_BOUND ( 'NONE', #35304, .T. ) ; +#21126 = STYLED_ITEM ( 'NONE', ( #40124 ), #7995 ) ; +#21127 = DIRECTION ( 'NONE', ( -3.872150616019659000E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#21128 = ORIENTED_EDGE ( 'NONE', *, *, #13820, .F. ) ; +#21129 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.499998254703835300, -5.449999999999994000 ) ) ; +#21130 = ORIENTED_EDGE ( 'NONE', *, *, #2471, .F. ) ; +#21131 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#21132 = FILL_AREA_STYLE_COLOUR ( '', #35057 ) ; +#21133 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, 0.4300017452961686900, -6.450000000000000200 ) ) ; +#21134 = ORIENTED_EDGE ( 'NONE', *, *, #5392, .T. ) ; +#21135 = VERTEX_POINT ( 'NONE', #26848 ) ; +#21136 = EDGE_LOOP ( 'NONE', ( #17277, #1696, #20470, #7105 ) ) ; +#21137 = VECTOR ( 'NONE', #31367, 1000.000000000000000 ) ; +#21138 = SURFACE_STYLE_FILL_AREA ( #17571 ) ; +#21139 = SURFACE_SIDE_STYLE ('',( #7174 ) ) ; +#21140 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#21141 = CYLINDRICAL_SURFACE ( 'NONE', #30970, 0.3600000000000078700 ) ; +#21142 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#21143 = ORIENTED_EDGE ( 'NONE', *, *, #26954, .F. ) ; +#21144 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21145 = ORIENTED_EDGE ( 'NONE', *, *, #12492, .F. ) ; +#21146 = ADVANCED_FACE ( 'NONE', ( #17358 ), #36553, .T. ) ; +#21147 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#21148 = CARTESIAN_POINT ( 'NONE', ( 3.844050703617147400, 0.6210165485069696300, -4.400108117170507400 ) ) ; +#21149 = PRESENTATION_STYLE_ASSIGNMENT (( #29166 ) ) ; +#21150 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21151 = VERTEX_POINT ( 'NONE', #20786 ) ; +#21152 = CIRCLE ( 'NONE', #18758, 0.2181066972901060100 ) ; +#21153 = EDGE_CURVE ( 'NONE', #15235, #10433, #10758, .T. ) ; +#21154 = VECTOR ( 'NONE', #26776, 1000.000000000000000 ) ; +#21155 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4429, 'distance_accuracy_value', 'NONE'); +#21156 = FILL_AREA_STYLE_COLOUR ( '', #35798 ) ; +#21157 = EDGE_CURVE ( 'NONE', #24209, #21918, #203, .T. ) ; +#21158 = STYLED_ITEM ( 'NONE', ( #21 ), #23488 ) ; +#21159 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000012100, -1.999998254703822000, -2.599999999999999600 ) ) ; +#21160 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5162 ), #41412 ) ; +#21161 = ORIENTED_EDGE ( 'NONE', *, *, #10894, .T. ) ; +#21162 = CARTESIAN_POINT ( 'NONE', ( -4.620380239188927300, 0.2800000000000027500, -0.8400209439508702400 ) ) ; +#21163 = SURFACE_STYLE_USAGE ( .BOTH. , #24253 ) ; +#21164 = ORIENTED_EDGE ( 'NONE', *, *, #11088, .F. ) ; +#21165 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18184 ) ) ; +#21166 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21167 = VERTEX_POINT ( 'NONE', #17516 ) ; +#21168 = SURFACE_STYLE_FILL_AREA ( #28852 ) ; +#21169 = SURFACE_SIDE_STYLE ('',( #23834 ) ) ; +#21170 = AXIS2_PLACEMENT_3D ( 'NONE', #26975, #36835, #30196 ) ; +#21171 = SURFACE_STYLE_USAGE ( .BOTH. , #4758 ) ; +#21172 = VECTOR ( 'NONE', #7537, 1000.000000000000000 ) ; +#21173 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34131 ) ) ; +#21174 = VERTEX_POINT ( 'NONE', #23999 ) ; +#21175 = ORIENTED_EDGE ( 'NONE', *, *, #4091, .T. ) ; +#21176 = ORIENTED_EDGE ( 'NONE', *, *, #39284, .T. ) ; +#21177 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.139998254717356800, -6.299996877890552400 ) ) ; +#21178 = SURFACE_STYLE_FILL_AREA ( #12872 ) ; +#21180 = STYLED_ITEM ( 'NONE', ( #697 ), #5058 ) ; +#21179 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28433 ), #14649 ) ; +#21181 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21182 = LINE ( 'NONE', #26027, #17103 ) ; +#21184 = EDGE_CURVE ( 'NONE', #10480, #39273, #26973, .T. ) ; +#21183 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8131 ), #3267 ) ; +#21185 = VERTEX_POINT ( 'NONE', #30203 ) ; +#21186 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#21187 = ORIENTED_EDGE ( 'NONE', *, *, #32802, .F. ) ; +#21189 = VERTEX_POINT ( 'NONE', #7870 ) ; +#21188 = ADVANCED_FACE ( 'NONE', ( #25931 ), #17379, .F. ) ; +#21190 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12464 ), #27647 ) ; +#21191 = SURFACE_SIDE_STYLE ('',( #32103 ) ) ; +#21192 = STYLED_ITEM ( 'NONE', ( #34393 ), #24613 ) ; +#21193 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.080001745296165200, -6.850000000000000500 ) ) ; +#21194 = VERTEX_POINT ( 'NONE', #33736 ) ; +#21195 = DIRECTION ( 'NONE', ( -3.188821734606921400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#21197 = ADVANCED_FACE ( 'NONE', ( #37518 ), #23389, .F. ) ; +#21196 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22412, 'distance_accuracy_value', 'NONE'); +#21198 = VECTOR ( 'NONE', #23366, 1000.000000000000000 ) ; +#21199 = CARTESIAN_POINT ( 'NONE', ( 4.599429204713762200, 0.08000174529616929700, -7.186926638587852500 ) ) ; +#21200 = SURFACE_STYLE_USAGE ( .BOTH. , #40351 ) ; +#21201 = CARTESIAN_POINT ( 'NONE', ( 4.010831726188969900, 0.5300017452961703900, -4.414589803375030800 ) ) ; +#21202 = CIRCLE ( 'NONE', #1428, 0.2000000000000001200 ) ; +#21203 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21204 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#21205 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21206 = ORIENTED_EDGE ( 'NONE', *, *, #38923, .T. ) ; +#21207 = FILL_AREA_STYLE ('',( #1714 ) ) ; +#21208 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#21209 = EDGE_CURVE ( 'NONE', #10468, #11272, #16810, .T. ) ; +#21210 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21211 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#21212 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000001200, 1.480001745296169100, -4.000000000000000000 ) ) ; +#21213 = ORIENTED_EDGE ( 'NONE', *, *, #9946, .F. ) ; +#21214 = CIRCLE ( 'NONE', #34764, 0.2999999999999999300 ) ; +#21215 = SURFACE_STYLE_FILL_AREA ( #16012 ) ; +#21216 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.2800017452961687200, -6.249999999999998200 ) ) ; +#21217 = LINE ( 'NONE', #25831, #2532 ) ; +#21218 = EDGE_CURVE ( 'NONE', #35875, #4700, #35509, .T. ) ; +#21219 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8967 ), #18240 ) ; +#21220 = FACE_OUTER_BOUND ( 'NONE', #40452, .T. ) ; +#21221 = VECTOR ( 'NONE', #15920, 1000.000000000000000 ) ; +#21222 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21223 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.499998254703820600, -5.049999999999993600 ) ) ; +#21224 = ORIENTED_EDGE ( 'NONE', *, *, #6451, .T. ) ; +#21225 = FILL_AREA_STYLE ('',( #30929 ) ) ; +#21226 = EDGE_LOOP ( 'NONE', ( #22048, #6197, #24554, #41823 ) ) ; +#21227 = SURFACE_STYLE_USAGE ( .BOTH. , #17959 ) ; +#21228 = STYLED_ITEM ( 'NONE', ( #7889 ), #15012 ) ; +#21229 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#21230 = CARTESIAN_POINT ( 'NONE', ( 3.095000000000000600, 0.07499999999999999700, -0.3254101966249999800 ) ) ; +#21231 = ORIENTED_EDGE ( 'NONE', *, *, #2252, .T. ) ; +#21232 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23687 ), #24510 ) ; +#21233 = PLANE ( 'NONE', #6482 ) ; +#21234 = ADVANCED_FACE ( 'NONE', ( #4157 ), #5060, .F. ) ; +#21235 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#21236 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19057 ) ) ; +#21239 = AXIS2_PLACEMENT_3D ( 'NONE', #27585, #37189, #8207 ) ; +#21238 = SURFACE_SIDE_STYLE ('',( #29254 ) ) ; +#21237 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31469 ) ) ; +#21240 = SURFACE_STYLE_USAGE ( .BOTH. , #17703 ) ; +#21241 = SURFACE_STYLE_USAGE ( .BOTH. , #27558 ) ; +#21242 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#21243 = EDGE_CURVE ( 'NONE', #14569, #35461, #11736, .T. ) ; +#21244 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#21245 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#21247 = STYLED_ITEM ( 'NONE', ( #23200 ), #1487 ) ; +#21246 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41487 ), #24199 ) ; +#21248 = SURFACE_STYLE_USAGE ( .BOTH. , #33927 ) ; +#21249 = ORIENTED_EDGE ( 'NONE', *, *, #18174, .T. ) ; +#21250 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#21251 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#21252 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.08000174529617017100, -7.500000000000000900 ) ) ; +#21253 = VERTEX_POINT ( 'NONE', #27656 ) ; +#21254 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#21255 = EDGE_LOOP ( 'NONE', ( #14306, #26177, #15779, #11242 ) ) ; +#21256 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#21257 = CYLINDRICAL_SURFACE ( 'NONE', #7935, 0.3600000000000078700 ) ; +#21258 = SURFACE_STYLE_USAGE ( .BOTH. , #8204 ) ; +#21259 = FACE_OUTER_BOUND ( 'NONE', #18472, .T. ) ; +#21260 = EDGE_LOOP ( 'NONE', ( #16824, #7826, #37953, #33230 ) ) ; +#21261 = EDGE_LOOP ( 'NONE', ( #36782, #3588, #40718, #29894 ) ) ; +#21262 = ORIENTED_EDGE ( 'NONE', *, *, #27422, .F. ) ; +#21263 = LINE ( 'NONE', #6715, #16688 ) ; +#21264 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21265 = CARTESIAN_POINT ( 'NONE', ( 3.110901330388214700, -0.5742885118599711000, -1.904244904675832300 ) ) ; +#21266 = SURFACE_SIDE_STYLE ('',( #4374 ) ) ; +#21267 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 0.6800017452961693000, -3.999999999999995600 ) ) ; +#21268 = ORIENTED_EDGE ( 'NONE', *, *, #28227, .F. ) ; +#21269 = FILL_AREA_STYLE_COLOUR ( '', #18038 ) ; +#21270 = EDGE_CURVE ( 'NONE', #27857, #30344, #40541, .T. ) ; +#21271 = VECTOR ( 'NONE', #4137, 1000.000000000000000 ) ; +#21272 = FACE_OUTER_BOUND ( 'NONE', #19420, .T. ) ; +#21273 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.499998254703829500, -6.699999999999994000 ) ) ; +#21274 = EDGE_CURVE ( 'NONE', #29571, #40523, #30957, .T. ) ; +#21275 = CARTESIAN_POINT ( 'NONE', ( -3.315857705770605800, -0.3498818811787547400, -1.622925393101719800 ) ) ; +#21276 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -2.031000000000000600, -3.514459358809383500 ) ) ; +#21277 = CARTESIAN_POINT ( 'NONE', ( 3.030736788327351100, 0.3350270179737014900, -1.285006954730670400 ) ) ; +#21278 = ADVANCED_FACE ( 'NONE', ( #3167 ), #8146, .F. ) ; +#21279 = VECTOR ( 'NONE', #4254, 1000.000000000000000 ) ; +#21280 = DIRECTION ( 'NONE', ( -4.840188270024573500E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#21281 = AXIS2_PLACEMENT_3D ( 'NONE', #36413, #36146, #32865 ) ; +#21282 = VECTOR ( 'NONE', #38915, 1000.000000000000000 ) ; +#21283 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#21284 = ORIENTED_EDGE ( 'NONE', *, *, #809, .T. ) ; +#21285 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#21286 = SURFACE_STYLE_USAGE ( .BOTH. , #27077 ) ; +#21287 = SURFACE_SIDE_STYLE ('',( #26645 ) ) ; +#21288 = ORIENTED_EDGE ( 'NONE', *, *, #40522, .T. ) ; +#21289 = ORIENTED_EDGE ( 'NONE', *, *, #23778, .T. ) ; +#21290 = VECTOR ( 'NONE', #19832, 1000.000000000000000 ) ; +#21292 = STYLED_ITEM ( 'NONE', ( #41774 ), #7213 ) ; +#21291 = CONICAL_SURFACE ( 'NONE', #24427, 0.3000000000000001600, 0.3490658503988666700 ) ; +#21293 = AXIS2_PLACEMENT_3D ( 'NONE', #30955, #41646, #28819 ) ; +#21294 = FILL_AREA_STYLE_COLOUR ( '', #10514 ) ; +#21297 = EDGE_CURVE ( 'NONE', #32434, #38679, #24917, .T. ) ; +#21296 = CARTESIAN_POINT ( 'NONE', ( 3.244999999999999700, -0.2999999999999999900, -1.649999999999999900 ) ) ; +#21295 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9675 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31981, #38472, #383 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21298 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23892, 'distance_accuracy_value', 'NONE'); +#21299 = CARTESIAN_POINT ( 'NONE', ( -1.300000000000000000, 1.630001745296169500, -1.650000000000000800 ) ) ; +#21300 = ORIENTED_EDGE ( 'NONE', *, *, #25375, .T. ) ; +#21301 = CIRCLE ( 'NONE', #12945, 0.1500000000000008300 ) ; +#21302 = ORIENTED_EDGE ( 'NONE', *, *, #27141, .T. ) ; +#21303 = ORIENTED_EDGE ( 'NONE', *, *, #17618, .F. ) ; +#21304 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.5199999999999843600, -4.500000000000000000 ) ) ; +#21306 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8570 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24949, #21416, #21144 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21305 = AXIS2_PLACEMENT_3D ( 'NONE', #22571, #9948, #35562 ) ; +#21307 = SURFACE_SIDE_STYLE ('',( #22076 ) ) ; +#21308 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#21309 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38573 ), #23442 ) ; +#21310 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#21311 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40102 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23289, #19658, #7163 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21312 = VERTEX_POINT ( 'NONE', #40628 ) ; +#21313 = PRESENTATION_STYLE_ASSIGNMENT (( #13497 ) ) ; +#21314 = ORIENTED_EDGE ( 'NONE', *, *, #32692, .T. ) ; +#21315 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#21316 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#21317 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.630001745296169000, -4.100000000000000500 ) ) ; +#21318 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#21319 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.380001745296126600, -6.699999999999994000 ) ) ; +#21320 = SURFACE_STYLE_FILL_AREA ( #41470 ) ; +#21321 = SURFACE_STYLE_USAGE ( .BOTH. , #40762 ) ; +#21322 = ORIENTED_EDGE ( 'NONE', *, *, #4412, .F. ) ; +#21323 = FILL_AREA_STYLE ('',( #17133 ) ) ; +#21324 = FILL_AREA_STYLE ('',( #5321 ) ) ; +#21325 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21326 = ORIENTED_EDGE ( 'NONE', *, *, #13200, .T. ) ; +#21327 = VECTOR ( 'NONE', #14267, 1000.000000000000000 ) ; +#21328 = EDGE_CURVE ( 'NONE', #21946, #5032, #41049, .T. ) ; +#21329 = FILL_AREA_STYLE ('',( #21059 ) ) ; +#21330 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#21331 = EDGE_CURVE ( 'NONE', #19624, #41583, #21346, .T. ) ; +#21332 = SURFACE_STYLE_FILL_AREA ( #10582 ) ; +#21333 = VECTOR ( 'NONE', #32921, 1000.000000000000000 ) ; +#21334 = CARTESIAN_POINT ( 'NONE', ( -4.692207176641545600, -1.300001745296164500, -6.526326723416073800 ) ) ; +#21335 = ORIENTED_EDGE ( 'NONE', *, *, #20084, .F. ) ; +#21336 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.097720492815727200E-016 ) ) ; +#21337 = FACE_OUTER_BOUND ( 'NONE', #26718, .T. ) ; +#21338 = ORIENTED_EDGE ( 'NONE', *, *, #39175, .T. ) ; +#21339 = EDGE_CURVE ( 'NONE', #23693, #24242, #34451, .T. ) ; +#21340 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#21341 = AXIS2_PLACEMENT_3D ( 'NONE', #7280, #997, #26380 ) ; +#21342 = PLANE ( 'NONE', #15924 ) ; +#21343 = CARTESIAN_POINT ( 'NONE', ( 3.095000000000000200, -0.07499999999999999700, -0.3254101966249999800 ) ) ; +#21344 = ORIENTED_EDGE ( 'NONE', *, *, #25429, .F. ) ; +#21345 = PLANE ( 'NONE', #31575 ) ; +#21346 = CIRCLE ( 'NONE', #24041, 0.9999999999999991100 ) ; +#21347 = ORIENTED_EDGE ( 'NONE', *, *, #39150, .T. ) ; +#21348 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14036 ) ) ; +#21349 = SURFACE_SIDE_STYLE ('',( #6166 ) ) ; +#21350 = LINE ( 'NONE', #27223, #18309 ) ; +#21351 = PRESENTATION_STYLE_ASSIGNMENT (( #2014 ) ) ; +#21352 = ADVANCED_FACE ( 'NONE', ( #35996 ), #21880, .T. ) ; +#21353 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9897 ) ) ; +#21354 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11744, 'distance_accuracy_value', 'NONE'); +#21356 = EDGE_CURVE ( 'NONE', #39273, #37630, #19835, .T. ) ; +#21355 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16290 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10889, #30114, #29832 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21357 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#21358 = CARTESIAN_POINT ( 'NONE', ( -4.773991411063333200, -1.009999999999998200, -7.461124800398367000 ) ) ; +#21359 = CIRCLE ( 'NONE', #31418, 0.1999999999999996500 ) ; +#21360 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21362 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10485 ), #32957 ) ; +#21361 = AXIS2_PLACEMENT_3D ( 'NONE', #20251, #26442, #29819 ) ; +#21363 = STYLED_ITEM ( 'NONE', ( #1482 ), #41152 ) ; +#21364 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#21365 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#21366 = ORIENTED_EDGE ( 'NONE', *, *, #16835, .T. ) ; +#21367 = STYLED_ITEM ( 'NONE', ( #19519 ), #33075 ) ; +#21368 = CARTESIAN_POINT ( 'NONE', ( -4.750000000000003600, -1.009999999999999100, -6.861124800398366500 ) ) ; +#21369 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#21370 = STYLED_ITEM ( 'NONE', ( #22523 ), #7764 ) ; +#21371 = VERTEX_POINT ( 'NONE', #25005 ) ; +#21372 = FACE_OUTER_BOUND ( 'NONE', #9658, .T. ) ; +#21373 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.794016668472960600E-015, 0.0000000000000000000 ) ) ; +#21374 = SURFACE_SIDE_STYLE ('',( #30817 ) ) ; +#21375 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#21376 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21377 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#21378 = VECTOR ( 'NONE', #32460, 1000.000000000000000 ) ; +#21379 = CYLINDRICAL_SURFACE ( 'NONE', #29539, 0.09999999999999999200 ) ; +#21380 = ORIENTED_EDGE ( 'NONE', *, *, #2402, .F. ) ; +#21381 = FILL_AREA_STYLE ('',( #27563 ) ) ; +#21382 = VERTEX_POINT ( 'NONE', #6179 ) ; +#21383 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#21384 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#21385 = CARTESIAN_POINT ( 'NONE', ( -3.178333333333019300, 0.07499999999999998300, -0.06128090415826407300 ) ) ; +#21386 = ORIENTED_EDGE ( 'NONE', *, *, #28313, .T. ) ; +#21387 = ORIENTED_EDGE ( 'NONE', *, *, #25880, .T. ) ; +#21388 = ADVANCED_FACE ( 'NONE', ( #9657 ), #12371, .T. ) ; +#21389 = PRESENTATION_STYLE_ASSIGNMENT (( #20646 ) ) ; +#21390 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#21391 = FACE_OUTER_BOUND ( 'NONE', #39927, .T. ) ; +#21392 = VECTOR ( 'NONE', #33670, 1000.000000000000100 ) ; +#21393 = VECTOR ( 'NONE', #9143, 1000.000000000000000 ) ; +#21394 = SURFACE_STYLE_FILL_AREA ( #6224 ) ; +#21395 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13859, 'distance_accuracy_value', 'NONE'); +#21396 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.880000000000130000, -0.5000000000000879300 ) ) ; +#21397 = EDGE_CURVE ( 'NONE', #12511, #14593, #2674, .T. ) ; +#21398 = SURFACE_SIDE_STYLE ('',( #31566 ) ) ; +#21399 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21400 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#21401 = ADVANCED_FACE ( 'NONE', ( #19321 ), #31461, .F. ) ; +#21402 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#21403 = EDGE_CURVE ( 'NONE', #18678, #27458, #6163, .T. ) ; +#21404 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18778, 'distance_accuracy_value', 'NONE'); +#21405 = ORIENTED_EDGE ( 'NONE', *, *, #33146, .F. ) ; +#21406 = FILL_AREA_STYLE ('',( #14876 ) ) ; +#21407 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.480001745296169100, -4.100000000000000500 ) ) ; +#21408 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2727 ), #25182 ) ; +#21409 = ORIENTED_EDGE ( 'NONE', *, *, #13510, .F. ) ; +#21410 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13248 ) ) ; +#21411 = SURFACE_STYLE_USAGE ( .BOTH. , #40855 ) ; +#21413 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1941 ), #4050 ) ; +#21412 = CARTESIAN_POINT ( 'NONE', ( 3.846156164834738400, 0.6165030250713639000, -4.400260404654702000 ) ) ; +#21415 = PRESENTATION_STYLE_ASSIGNMENT (( #8362 ) ) ; +#21414 = CARTESIAN_POINT ( 'NONE', ( 0.2500000000000032800, -2.031000000000001500, -6.749999999999999100 ) ) ; +#21416 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21417 = ORIENTED_EDGE ( 'NONE', *, *, #29956, .T. ) ; +#21418 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21419 = ORIENTED_EDGE ( 'NONE', *, *, #7856, .F. ) ; +#21420 = VERTEX_POINT ( 'NONE', #2692 ) ; +#21421 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#21423 = STYLED_ITEM ( 'NONE', ( #27005 ), #4423 ) ; +#21422 = STYLED_ITEM ( 'NONE', ( #9667 ), #28959 ) ; +#21424 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 2.322941965694886000, -1.250000000000000000 ) ) ; +#21425 = AXIS2_PLACEMENT_3D ( 'NONE', #24089, #1391, #40027 ) ; +#21426 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#21427 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21429 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20063 ), #30044 ) ; +#21428 = AXIS2_PLACEMENT_3D ( 'NONE', #12814, #15256, #19224 ) ; +#21430 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21431 = VECTOR ( 'NONE', #20924, 1000.000000000000000 ) ; +#21432 = LINE ( 'NONE', #10002, #26974 ) ; +#21433 = ORIENTED_EDGE ( 'NONE', *, *, #13619, .T. ) ; +#21434 = PRESENTATION_STYLE_ASSIGNMENT (( #37989 ) ) ; +#21436 = STYLED_ITEM ( 'NONE', ( #36971 ), #9078 ) ; +#21435 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21437 = LINE ( 'NONE', #35341, #18861 ) ; +#21438 = VECTOR ( 'NONE', #29998, 1000.000000000000000 ) ; +#21439 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#21440 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#21441 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21442 = ADVANCED_FACE ( 'NONE', ( #13734 ), #2544, .F. ) ; +#21443 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#21444 = VECTOR ( 'NONE', #4195, 1000.000000000000000 ) ; +#21445 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#21446 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, -0.3000000000000001600, -1.250000000000000000 ) ) ; +#21447 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.056601140521967900E-031 ) ) ; +#21448 = VECTOR ( 'NONE', #24459, 1000.000000000000000 ) ; +#21449 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#21450 = FILL_AREA_STYLE_COLOUR ( '', #33716 ) ; +#21451 = VERTEX_POINT ( 'NONE', #28490 ) ; +#21452 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, 0.2800017452961687200, -6.549999999999999800 ) ) ; +#21453 = VERTEX_POINT ( 'NONE', #3476 ) ; +#21454 = PLANE ( 'NONE', #8868 ) ; +#21455 = VERTEX_POINT ( 'NONE', #3336 ) ; +#21456 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#21457 = EDGE_CURVE ( 'NONE', #28863, #3259, #41058, .T. ) ; +#21458 = ORIENTED_EDGE ( 'NONE', *, *, #2106, .T. ) ; +#21459 = ORIENTED_EDGE ( 'NONE', *, *, #23022, .T. ) ; +#21460 = ORIENTED_EDGE ( 'NONE', *, *, #24160, .F. ) ; +#21461 = LINE ( 'NONE', #6408, #32028 ) ; +#21462 = PLANE ( 'NONE', #8997 ) ; +#21463 = EDGE_CURVE ( 'NONE', #34148, #35784, #4626, .T. ) ; +#21464 = STYLED_ITEM ( 'NONE', ( #33761 ), #10293 ) ; +#21465 = PLANE ( 'NONE', #6223 ) ; +#21466 = VECTOR ( 'NONE', #12554, 1000.000000000000000 ) ; +#21467 = FACE_BOUND ( 'NONE', #24823, .T. ) ; +#21468 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9827, 'distance_accuracy_value', 'NONE'); +#21469 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#21470 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#21471 = AXIS2_PLACEMENT_3D ( 'NONE', #5232, #11980, #18667 ) ; +#21472 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#21473 = PRESENTATION_STYLE_ASSIGNMENT (( #13578 ) ) ; +#21474 = PRESENTATION_STYLE_ASSIGNMENT (( #34351 ) ) ; +#21475 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#21476 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10594 ), #23607 ) ; +#21477 = FILL_AREA_STYLE_COLOUR ( '', #20845 ) ; +#21478 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36058 ) ) ; +#21479 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21480 = FACE_OUTER_BOUND ( 'NONE', #36267, .T. ) ; +#21481 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.380001745296165500, -3.799999999999999800 ) ) ; +#21482 = ORIENTED_EDGE ( 'NONE', *, *, #28811, .T. ) ; +#21483 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34952, 'distance_accuracy_value', 'NONE'); +#21486 = EDGE_CURVE ( 'NONE', #15774, #39156, #1618, .T. ) ; +#21485 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#21484 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17139 ), #38756 ) ; +#21487 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.6500000000000001300, -3.299999999999999800 ) ) ; +#21489 = ADVANCED_FACE ( 'NONE', ( #20835 ), #32905, .T. ) ; +#21488 = LINE ( 'NONE', #33769, #4261 ) ; +#21490 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.380001745296129100, -6.031671842700004200 ) ) ; +#21491 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822400, -2.599999999999999600 ) ) ; +#21492 = FILL_AREA_STYLE ('',( #40369 ) ) ; +#21493 = EDGE_LOOP ( 'NONE', ( #20505, #17320, #7588, #14589 ) ) ; +#21495 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39084 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11931, #11673, #15228 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21494 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14964 ), #22822 ) ; +#21496 = LINE ( 'NONE', #28614, #25996 ) ; +#21497 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#21498 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21499 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21500 = ORIENTED_EDGE ( 'NONE', *, *, #7976, .F. ) ; +#21501 = ORIENTED_EDGE ( 'NONE', *, *, #27738, .T. ) ; +#21502 = SURFACE_STYLE_FILL_AREA ( #15850 ) ; +#21503 = FILL_AREA_STYLE ('',( #34594 ) ) ; +#21504 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21505 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21506 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21507 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#21508 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.2800017452961673900, -7.150000000000001200 ) ) ; +#21509 = FILL_AREA_STYLE_COLOUR ( '', #5143 ) ; +#21510 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#21511 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, 0.3499999999999996400, -1.250000000000000000 ) ) ; +#21512 = ORIENTED_EDGE ( 'NONE', *, *, #7195, .T. ) ; +#21513 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.180001745296166000, -4.675000000000000700 ) ) ; +#21514 = PRESENTATION_STYLE_ASSIGNMENT (( #1484 ) ) ; +#21515 = PLANE ( 'NONE', #23231 ) ; +#21516 = EDGE_CURVE ( 'NONE', #12577, #32396, #30391, .T. ) ; +#21517 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745278514100, -2.904459358809381000 ) ) ; +#21518 = SURFACE_SIDE_STYLE ('',( #5656 ) ) ; +#21519 = VECTOR ( 'NONE', #7892, 1000.000000000000000 ) ; +#21520 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#21521 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21522 = ORIENTED_EDGE ( 'NONE', *, *, #7485, .F. ) ; +#21523 = EDGE_CURVE ( 'NONE', #3198, #34154, #16052, .T. ) ; +#21524 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.279999999999999800, -0.2000017452961698200 ) ) ; +#21525 = ORIENTED_EDGE ( 'NONE', *, *, #26923, .T. ) ; +#21526 = FACE_OUTER_BOUND ( 'NONE', #31874, .T. ) ; +#21527 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -500000.0000000000600, -3.514459358691027100 ) ) ; +#21528 = VERTEX_POINT ( 'NONE', #6316 ) ; +#21529 = STYLED_ITEM ( 'NONE', ( #7738 ), #15617 ) ; +#21530 = VECTOR ( 'NONE', #33007, 1000.000000000000000 ) ; +#21531 = VECTOR ( 'NONE', #22355, 1000.000000000000000 ) ; +#21532 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#21533 = FACE_OUTER_BOUND ( 'NONE', #3004, .T. ) ; +#21534 = PRESENTATION_STYLE_ASSIGNMENT (( #32408 ) ) ; +#21535 = MANIFOLD_SOLID_BREP ( '1-1-solid24', #5487 ) ; +#21536 = STYLED_ITEM ( 'NONE', ( #22692 ), #19715 ) ; +#21537 = ORIENTED_EDGE ( 'NONE', *, *, #21157, .T. ) ; +#21538 = DIRECTION ( 'NONE', ( 6.056601140521967000E-031, 3.502176061030487700E-045, 1.000000000000000000 ) ) ; +#21539 = SURFACE_STYLE_FILL_AREA ( #41220 ) ; +#21540 = EDGE_LOOP ( 'NONE', ( #18955, #27215, #19227, #10053 ) ) ; +#21541 = ORIENTED_EDGE ( 'NONE', *, *, #30772, .T. ) ; +#21542 = VECTOR ( 'NONE', #35595, 1000.000000000000000 ) ; +#21543 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1992 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20540, #1203, #29962 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21544 = LINE ( 'NONE', #18156, #36618 ) ; +#21545 = SURFACE_STYLE_FILL_AREA ( #15624 ) ; +#21546 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, -0.3500000000000000300, -1.300000000000000000 ) ) ; +#21547 = SURFACE_STYLE_FILL_AREA ( #10377 ) ; +#21549 = EDGE_CURVE ( 'NONE', #24188, #16642, #22817, .T. ) ; +#21548 = STYLED_ITEM ( 'NONE', ( #22165 ), #36013 ) ; +#21550 = ORIENTED_EDGE ( 'NONE', *, *, #28263, .T. ) ; +#21551 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#21552 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.4300017452961686900, -6.199999999999999300 ) ) ; +#21553 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.3000000000000001600, -1.250000000000000000 ) ) ; +#21554 = VECTOR ( 'NONE', #35365, 1000.000000000000000 ) ; +#21555 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#21556 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14292 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19236, #41783, #22472 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21557 = VECTOR ( 'NONE', #8651, 999.9999999999998900 ) ; +#21558 = EDGE_LOOP ( 'NONE', ( #10355, #39265, #26098 ) ) ; +#21559 = STYLED_ITEM ( 'NONE', ( #21081 ), #39051 ) ; +#21560 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23978, 'distance_accuracy_value', 'NONE'); +#21561 = SURFACE_STYLE_FILL_AREA ( #8926 ) ; +#21562 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21563 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#21564 = SURFACE_STYLE_USAGE ( .BOTH. , #15177 ) ; +#21565 = EDGE_LOOP ( 'NONE', ( #28276, #18518, #17000, #41550, #7042, #19798 ) ) ; +#21566 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745278514100, -3.204459358809384400 ) ) ; +#21567 = ADVANCED_FACE ( 'NONE', ( #5636 ), #15234, .T. ) ; +#21568 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.3499999999999999800, -1.649999999992750200 ) ) ; +#21569 = DIRECTION ( 'NONE', ( -2.367138801244516300E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#21570 = CARTESIAN_POINT ( 'NONE', ( 3.094999999999943400, -0.07499999999999998300, -1.532287565553075200 ) ) ; +#21571 = FILL_AREA_STYLE ('',( #33968 ) ) ; +#21572 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#21573 = DIRECTION ( 'NONE', ( -0.9961946980917453200, 1.807562417839940100E-016, 0.08715574274766035900 ) ) ; +#21574 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35345, 'distance_accuracy_value', 'NONE'); +#21575 = PLANE ( 'NONE', #12226 ) ; +#21576 = CARTESIAN_POINT ( 'NONE', ( -2.995000000012500300, 0.3499999999999999800, -1.399999999965187500 ) ) ; +#21577 = EDGE_CURVE ( 'NONE', #31629, #20659, #14693, .T. ) ; +#21578 = ORIENTED_EDGE ( 'NONE', *, *, #25850, .F. ) ; +#21579 = VERTEX_POINT ( 'NONE', #29740 ) ; +#21580 = CYLINDRICAL_SURFACE ( 'NONE', #10784, 0.1000000000000002600 ) ; +#21581 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21582 = ORIENTED_EDGE ( 'NONE', *, *, #11171, .F. ) ; +#21583 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, 0.3000000000000000400, -1.250000000000000000 ) ) ; +#21584 = SURFACE_STYLE_USAGE ( .BOTH. , #34265 ) ; +#21585 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21586 = PRESENTATION_STYLE_ASSIGNMENT (( #22400 ) ) ; +#21587 = EDGE_CURVE ( 'NONE', #15820, #20046, #21820, .T. ) ; +#21588 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#21589 = EDGE_LOOP ( 'NONE', ( #2613, #8072, #3533, #9065 ) ) ; +#21590 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#21591 = ORIENTED_EDGE ( 'NONE', *, *, #41223, .T. ) ; +#21592 = EDGE_CURVE ( 'NONE', #4711, #26309, #26326, .T. ) ; +#21593 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, -0.3499999999999996400, -1.250000000000000000 ) ) ; +#21594 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.480001745296165600, -1.649999999999999500 ) ) ; +#21595 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31006 ), #4218 ) ; +#21596 = VECTOR ( 'NONE', #29601, 1000.000000000000000 ) ; +#21597 = CARTESIAN_POINT ( 'NONE', ( 1.486602540378444600, 1.630001745296169500, -1.700000000000002000 ) ) ; +#21598 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, -0.09999999999998480900, -4.250000000000000000 ) ) ; +#21599 = VECTOR ( 'NONE', #6851, 1000.000000000000000 ) ; +#21600 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#21601 = ADVANCED_FACE ( 'NONE', ( #13172 ), #17757, .F. ) ; +#21602 = AXIS2_PLACEMENT_3D ( 'NONE', #2600, #28128, #41391 ) ; +#21603 = STYLED_ITEM ( 'NONE', ( #2369 ), #11765 ) ; +#21604 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#21605 = EDGE_CURVE ( 'NONE', #8952, #12042, #9109, .T. ) ; +#21606 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21607 = VERTEX_POINT ( 'NONE', #23392 ) ; +#21608 = CIRCLE ( 'NONE', #25381, 0.1000000000000002600 ) ; +#21609 = CARTESIAN_POINT ( 'NONE', ( 4.663004880385256200, 0.2799999999999973100, -0.7580972011844128200 ) ) ; +#21610 = FILL_AREA_STYLE ('',( #18220 ) ) ; +#21611 = ADVANCED_FACE ( 'NONE', ( #12159 ), #39603, .T. ) ; +#21613 = AXIS2_PLACEMENT_3D ( 'NONE', #25621, #28293, #15845 ) ; +#21612 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27270 ) ) ; +#21614 = CARTESIAN_POINT ( 'NONE', ( -14.52500000000000900, -0.7099999999999663200, -6.861124800398366500 ) ) ; +#21615 = DIRECTION ( 'NONE', ( 4.130328317307650600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#21616 = AXIS2_PLACEMENT_3D ( 'NONE', #10902, #33657, #39996 ) ; +#21617 = VERTEX_POINT ( 'NONE', #23104 ) ; +#21618 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.879999999999742500, -0.2339555568811695900 ) ) ; +#21619 = PRESENTATION_STYLE_ASSIGNMENT (( #29346 ) ) ; +#21620 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14293 ) ) ; +#21621 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.380001745296132400, -6.031671842700004200 ) ) ; +#21622 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21623 = ORIENTED_EDGE ( 'NONE', *, *, #19229, .T. ) ; +#21624 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4524 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12125, #28260, #18399 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21625 = ORIENTED_EDGE ( 'NONE', *, *, #20556, .F. ) ; +#21626 = VECTOR ( 'NONE', #19375, 1000.000000000000000 ) ; +#21627 = ORIENTED_EDGE ( 'NONE', *, *, #8843, .T. ) ; +#21628 = LINE ( 'NONE', #7940, #35732 ) ; +#21629 = ORIENTED_EDGE ( 'NONE', *, *, #617, .T. ) ; +#21630 = SURFACE_SIDE_STYLE ('',( #19294 ) ) ; +#21631 = PRESENTATION_STYLE_ASSIGNMENT (( #30573 ) ) ; +#21632 = ORIENTED_EDGE ( 'NONE', *, *, #12187, .F. ) ; +#21633 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21634 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21635 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8778, 'distance_accuracy_value', 'NONE'); +#21636 = LINE ( 'NONE', #16463, #6445 ) ; +#21637 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998392100, -1.749999999999999800 ) ) ; +#21638 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21639 = EDGE_CURVE ( 'NONE', #14218, #14966, #28341, .T. ) ; +#21640 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1098, 'distance_accuracy_value', 'NONE'); +#21641 = LINE ( 'NONE', #31563, #39257 ) ; +#21642 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.949998254703820400, -3.500000000000000000 ) ) ; +#21643 = ADVANCED_FACE ( 'NONE', ( #25339 ), #3882, .T. ) ; +#21644 = EDGE_CURVE ( 'NONE', #36470, #11203, #20330, .T. ) ; +#21645 = VERTEX_POINT ( 'NONE', #27461 ) ; +#21646 = VECTOR ( 'NONE', #29129, 1000.000000000000000 ) ; +#21647 = DIRECTION ( 'NONE', ( 2.891205793294679400E-015, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#21648 = AXIS2_PLACEMENT_3D ( 'NONE', #386, #29579, #22944 ) ; +#21649 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000032500, 0.4300017452961685800, -6.850000000000000500 ) ) ; +#21650 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, 1.000000000000000000, -2.344220913482171200E-016 ) ) ; +#21651 = EDGE_CURVE ( 'NONE', #29220, #19142, #16241, .T. ) ; +#21652 = ORIENTED_EDGE ( 'NONE', *, *, #31561, .F. ) ; +#21653 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#21654 = CYLINDRICAL_SURFACE ( 'NONE', #12904, 0.3000000000000007700 ) ; +#21655 = FILL_AREA_STYLE ('',( #2041 ) ) ; +#21656 = VERTEX_POINT ( 'NONE', #24373 ) ; +#21657 = ORIENTED_EDGE ( 'NONE', *, *, #21587, .F. ) ; +#21658 = FACE_OUTER_BOUND ( 'NONE', #30664, .T. ) ; +#21659 = EDGE_LOOP ( 'NONE', ( #9358, #5783, #41363, #29014 ) ) ; +#21660 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#21661 = FACE_OUTER_BOUND ( 'NONE', #35469, .T. ) ; +#21662 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31085 ) ) ; +#21663 = SURFACE_SIDE_STYLE ('',( #6782 ) ) ; +#21664 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#21665 = SURFACE_STYLE_FILL_AREA ( #13587 ) ; +#21666 = VECTOR ( 'NONE', #37127, 1000.000000000000000 ) ; +#21668 = EDGE_CURVE ( 'NONE', #13393, #15157, #5134, .T. ) ; +#21667 = SURFACE_STYLE_USAGE ( .BOTH. , #22196 ) ; +#21669 = VECTOR ( 'NONE', #10208, 1000.000000000000000 ) ; +#21670 = CARTESIAN_POINT ( 'NONE', ( -4.821303021499042900, 0.2800000000000027500, -0.3590461068823621000 ) ) ; +#21671 = VERTEX_POINT ( 'NONE', #27071 ) ; +#21672 = FACE_OUTER_BOUND ( 'NONE', #35837, .T. ) ; +#21673 = ORIENTED_EDGE ( 'NONE', *, *, #22547, .T. ) ; +#21674 = ORIENTED_EDGE ( 'NONE', *, *, #41041, .T. ) ; +#21675 = PRESENTATION_STYLE_ASSIGNMENT (( #25630 ) ) ; +#21677 = STYLED_ITEM ( 'NONE', ( #318 ), #4211 ) ; +#21676 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34626 ), #28924 ) ; +#21678 = AXIS2_PLACEMENT_3D ( 'NONE', #5068, #24426, #33887 ) ; +#21679 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23553 ) ) ; +#21680 = ORIENTED_EDGE ( 'NONE', *, *, #11638, .T. ) ; +#21681 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#21682 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29643, 'distance_accuracy_value', 'NONE'); +#21683 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#21684 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.09999999999998343500, -4.450000000000000200 ) ) ; +#21685 = FILL_AREA_STYLE ('',( #15308 ) ) ; +#21686 = FILL_AREA_STYLE ('',( #8767 ) ) ; +#21687 = VERTEX_POINT ( 'NONE', #14479 ) ; +#21688 = SURFACE_STYLE_FILL_AREA ( #24971 ) ; +#21689 = ORIENTED_EDGE ( 'NONE', *, *, #8476, .T. ) ; +#21690 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -4.099999999999999600 ) ) ; +#21691 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#21692 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, 0.0000000000000000000 ) ) ; +#21693 = ADVANCED_FACE ( 'NONE', ( #25388 ), #27880, .F. ) ; +#21694 = SURFACE_SIDE_STYLE ('',( #870 ) ) ; +#21695 = EDGE_LOOP ( 'NONE', ( #17491, #21735, #23942, #34026, #8177, #33550, #8910, #32395 ) ) ; +#21696 = EDGE_LOOP ( 'NONE', ( #33592, #12091, #7039, #17601 ) ) ; +#21697 = SURFACE_STYLE_FILL_AREA ( #33559 ) ; +#21698 = FACE_OUTER_BOUND ( 'NONE', #36826, .T. ) ; +#21699 = SURFACE_STYLE_USAGE ( .BOTH. , #11895 ) ; +#21700 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21701 = LINE ( 'NONE', #30349, #9529 ) ; +#21702 = SURFACE_STYLE_FILL_AREA ( #26101 ) ; +#21703 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#21704 = CYLINDRICAL_SURFACE ( 'NONE', #27815, 0.7999999999999999300 ) ; +#21705 = ORIENTED_EDGE ( 'NONE', *, *, #26125, .F. ) ; +#21706 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#21707 = ORIENTED_EDGE ( 'NONE', *, *, #3292, .T. ) ; +#21708 = VERTEX_POINT ( 'NONE', #1660 ) ; +#21709 = EDGE_CURVE ( 'NONE', #28469, #21194, #26383, .T. ) ; +#21710 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.845797985667148900, -0.3279248189596167300 ) ) ; +#21711 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -1.499998254703821300, -7.350000000000005900 ) ) ; +#21712 = CARTESIAN_POINT ( 'NONE', ( -4.542777971927784500, 0.08000174529616560500, -6.539400084828217900 ) ) ; +#21713 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21714 = EDGE_CURVE ( 'NONE', #8230, #20229, #24360, .T. ) ; +#21715 = STYLED_ITEM ( 'NONE', ( #11078 ), #23714 ) ; +#21716 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21717 = EDGE_LOOP ( 'NONE', ( #26712, #22202, #10831, #10636 ) ) ; +#21718 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.3300017452961695500, -6.325000000000000200 ) ) ; +#21719 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7417 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7503, #36486, #13740 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21720 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#21721 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#21722 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21723 = SURFACE_SIDE_STYLE ('',( #6300 ) ) ; +#21724 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3359, 'distance_accuracy_value', 'NONE'); +#21725 = STYLED_ITEM ( 'NONE', ( #25765 ), #14194 ) ; +#21726 = VECTOR ( 'NONE', #10057, 1000.000000000000000 ) ; +#21727 = CARTESIAN_POINT ( 'NONE', ( 0.3999999999999999700, 0.3500000000000000300, -1.300000000000000000 ) ) ; +#21728 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#21729 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17381 ), #2801 ) ; +#21730 = AXIS2_PLACEMENT_3D ( 'NONE', #28101, #5509, #15263 ) ; +#21731 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #899, 'distance_accuracy_value', 'NONE'); +#21733 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14650 ) ) ; +#21732 = AXIS2_PLACEMENT_3D ( 'NONE', #17030, #1108, #6976 ) ; +#21734 = VECTOR ( 'NONE', #8380, 1000.000000000000000 ) ; +#21735 = ORIENTED_EDGE ( 'NONE', *, *, #2601, .F. ) ; +#21736 = FACE_OUTER_BOUND ( 'NONE', #17028, .T. ) ; +#21738 = EDGE_CURVE ( 'NONE', #3462, #16530, #31913, .T. ) ; +#21737 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38453 ), #41192 ) ; +#21739 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#21740 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21741 = DIRECTION ( 'NONE', ( 2.224004456380521900E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#21742 = FACE_OUTER_BOUND ( 'NONE', #24559, .T. ) ; +#21743 = EDGE_LOOP ( 'NONE', ( #36747, #36461, #29812, #17097, #12292, #35360 ) ) ; +#21744 = SURFACE_STYLE_FILL_AREA ( #6029 ) ; +#21745 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.180001745296169700, -4.099999999999999600 ) ) ; +#21747 = AXIS2_PLACEMENT_3D ( 'NONE', #30820, #21254, #41267 ) ; +#21746 = STYLED_ITEM ( 'NONE', ( #22659 ), #25003 ) ; +#21748 = SURFACE_STYLE_FILL_AREA ( #40331 ) ; +#21749 = FILL_AREA_STYLE_COLOUR ( '', #5824 ) ; +#21750 = PRESENTATION_STYLE_ASSIGNMENT (( #38382 ) ) ; +#21751 = DIRECTION ( 'NONE', ( -2.367138801244516300E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#21752 = LINE ( 'NONE', #17197, #33838 ) ; +#21753 = ORIENTED_EDGE ( 'NONE', *, *, #25647, .T. ) ; +#21754 = VERTEX_POINT ( 'NONE', #36799 ) ; +#21755 = ORIENTED_EDGE ( 'NONE', *, *, #13708, .T. ) ; +#21756 = LINE ( 'NONE', #24526, #20746 ) ; +#21757 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21758 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, -0.5199999999999848100, -4.599999999999999600 ) ) ; +#21759 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -2.322941965694886000, 0.3499999999999999800 ) ) ; +#21760 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.139998254717365900, -5.049996877890552400 ) ) ; +#21761 = ORIENTED_EDGE ( 'NONE', *, *, #15438, .F. ) ; +#21762 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32495, 'distance_accuracy_value', 'NONE'); +#21763 = CIRCLE ( 'NONE', #38456, 0.09999999999987406500 ) ; +#21764 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244519300E-016 ) ) ; +#21765 = VECTOR ( 'NONE', #21186, 1000.000000000000000 ) ; +#21766 = SURFACE_STYLE_FILL_AREA ( #3454 ) ; +#21767 = SURFACE_STYLE_USAGE ( .BOTH. , #4787 ) ; +#21768 = SURFACE_SIDE_STYLE ('',( #18246 ) ) ; +#21769 = LINE ( 'NONE', #1326, #32338 ) ; +#21770 = EDGE_CURVE ( 'NONE', #11883, #20768, #34966, .T. ) ; +#21771 = CIRCLE ( 'NONE', #8927, 0.3600000000000078700 ) ; +#21772 = ADVANCED_FACE ( 'NONE', ( #21337 ), #30436, .F. ) ; +#21773 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664844900, -1.080001745296171900, -5.000000000000000000 ) ) ; +#21774 = EDGE_CURVE ( 'NONE', #20620, #2353, #2664, .T. ) ; +#21775 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15783 ), #20158 ) ; +#21776 = EDGE_LOOP ( 'NONE', ( #13640, #9717, #9085 ) ) ; +#21777 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.139998254717362600, -5.049996877890552400 ) ) ; +#21778 = SURFACE_STYLE_USAGE ( .BOTH. , #31051 ) ; +#21779 = ORIENTED_EDGE ( 'NONE', *, *, #6455, .T. ) ; +#21780 = SURFACE_STYLE_FILL_AREA ( #28168 ) ; +#21781 = VERTEX_POINT ( 'NONE', #30718 ) ; +#21782 = SURFACE_STYLE_USAGE ( .BOTH. , #6069 ) ; +#21783 = AXIS2_PLACEMENT_3D ( 'NONE', #30508, #10576, #1874 ) ; +#21784 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#21785 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.2800017452961687200, -6.199999999999999300 ) ) ; +#21786 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.499998254703832000, -5.449999999999994000 ) ) ; +#21787 = ORIENTED_EDGE ( 'NONE', *, *, #39159, .T. ) ; +#21788 = CARTESIAN_POINT ( 'NONE', ( 4.524999999999999500, 1.480001745296169100, -4.000000000000000000 ) ) ; +#21789 = EDGE_LOOP ( 'NONE', ( #8262, #15524, #21268, #391, #27882, #8268, #8678, #2101, #2141, #8441 ) ) ; +#21790 = VERTEX_POINT ( 'NONE', #20740 ) ; +#21791 = SURFACE_STYLE_FILL_AREA ( #407 ) ; +#21792 = AXIS2_PLACEMENT_3D ( 'NONE', #31194, #5912, #5772 ) ; +#21793 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#21794 = STYLED_ITEM ( 'NONE', ( #32638 ), #31192 ) ; +#21795 = DIRECTION ( 'NONE', ( 4.840188270024573500E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#21796 = SURFACE_SIDE_STYLE ('',( #20734 ) ) ; +#21797 = FILL_AREA_STYLE_COLOUR ( '', #41593 ) ; +#21798 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21800 = EDGE_CURVE ( 'NONE', #10188, #14569, #40497, .T. ) ; +#21799 = AXIS2_PLACEMENT_3D ( 'NONE', #17825, #40653, #40235 ) ; +#21801 = ORIENTED_EDGE ( 'NONE', *, *, #16295, .F. ) ; +#21802 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#21803 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#21804 = FILL_AREA_STYLE_COLOUR ( '', #32455 ) ; +#21805 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#21806 = SURFACE_STYLE_FILL_AREA ( #12623 ) ; +#21808 = AXIS2_PLACEMENT_3D ( 'NONE', #32998, #16626, #23953 ) ; +#21807 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30428 ) ) ; +#21809 = SURFACE_SIDE_STYLE ('',( #27643 ) ) ; +#21810 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#21811 = ADVANCED_FACE ( 'NONE', ( #14744 ), #34661, .T. ) ; +#21812 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#21813 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37638, 'distance_accuracy_value', 'NONE'); +#21814 = VERTEX_POINT ( 'NONE', #11894 ) ; +#21815 = PRESENTATION_STYLE_ASSIGNMENT (( #5204 ) ) ; +#21816 = SURFACE_STYLE_USAGE ( .BOTH. , #18698 ) ; +#21817 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#21818 = ORIENTED_EDGE ( 'NONE', *, *, #29778, .F. ) ; +#21820 = LINE ( 'NONE', #13340, #23285 ) ; +#21819 = CARTESIAN_POINT ( 'NONE', ( 3.395000000000000000, 0.2000000000000001200, -3.299999999999999800 ) ) ; +#21821 = ORIENTED_EDGE ( 'NONE', *, *, #40968, .F. ) ; +#21822 = VECTOR ( 'NONE', #29691, 1000.000000000000000 ) ; +#21823 = ADVANCED_FACE ( 'NONE', ( #19268 ), #25088, .F. ) ; +#21824 = CIRCLE ( 'NONE', #1435, 0.3600000000000078700 ) ; +#21825 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#21826 = LINE ( 'NONE', #28009, #38428 ) ; +#21827 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16920, 'distance_accuracy_value', 'NONE'); +#21828 = ORIENTED_EDGE ( 'NONE', *, *, #16539, .T. ) ; +#21829 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21830 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21831 = EDGE_CURVE ( 'NONE', #16839, #13040, #19898, .T. ) ; +#21832 = ORIENTED_EDGE ( 'NONE', *, *, #35617, .T. ) ; +#21833 = ORIENTED_EDGE ( 'NONE', *, *, #22663, .T. ) ; +#21834 = PLANE ( 'NONE', #1394 ) ; +#21835 = EDGE_CURVE ( 'NONE', #41621, #19624, #36435, .T. ) ; +#21836 = SURFACE_SIDE_STYLE ('',( #20234 ) ) ; +#21837 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21838 = ORIENTED_EDGE ( 'NONE', *, *, #4213, .T. ) ; +#21839 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#21840 = VECTOR ( 'NONE', #31337, 1000.000000000000000 ) ; +#21841 = VERTEX_POINT ( 'NONE', #41016 ) ; +#21842 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21843 = AXIS2_PLACEMENT_3D ( 'NONE', #15481, #15348, #38189 ) ; +#21845 = SURFACE_STYLE_FILL_AREA ( #13144 ) ; +#21844 = FILL_AREA_STYLE_COLOUR ( '', #31872 ) ; +#21846 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21847 = SURFACE_STYLE_FILL_AREA ( #34760 ) ; +#21848 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.07499999999999999700, -1.450395263067899600 ) ) ; +#21849 = FILL_AREA_STYLE_COLOUR ( '', #22715 ) ; +#21850 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34656 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35646, #6943, #516 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21852 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21851 = CIRCLE ( 'NONE', #39498, 0.9499999999999998400 ) ; +#21853 = AXIS2_PLACEMENT_3D ( 'NONE', #21670, #25057, #24915 ) ; +#21854 = DIRECTION ( 'NONE', ( -2.168404344971012800E-015, 1.837630800822890800E-016, 1.000000000000000000 ) ) ; +#21855 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#21856 = ORIENTED_EDGE ( 'NONE', *, *, #13177, .T. ) ; +#21858 = EDGE_CURVE ( 'NONE', #35875, #38071, #21301, .T. ) ; +#21857 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34008 ), #26148 ) ; +#21859 = SURFACE_STYLE_FILL_AREA ( #4353 ) ; +#21860 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21861 = ADVANCED_FACE ( 'NONE', ( #11642 ), #5565, .F. ) ; +#21862 = PLANE ( 'NONE', #22804 ) ; +#21863 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10702, 'distance_accuracy_value', 'NONE'); +#21864 = ORIENTED_EDGE ( 'NONE', *, *, #31875, .T. ) ; +#21866 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21058 ) ) ; +#21865 = AXIS2_PLACEMENT_3D ( 'NONE', #41307, #18176, #40735 ) ; +#21867 = AXIS2_PLACEMENT_3D ( 'NONE', #39349, #32868, #13512 ) ; +#21868 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#21869 = VECTOR ( 'NONE', #3281, 1000.000000000000000 ) ; +#21870 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.480001745296169800, -0.2000017452961698200 ) ) ; +#21871 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16141 ) ) ; +#21872 = VERTEX_POINT ( 'NONE', #2358 ) ; +#21873 = LINE ( 'NONE', #39288, #10709 ) ; +#21874 = PLANE ( 'NONE', #8434 ) ; +#21875 = ADVANCED_FACE ( 'NONE', ( #39966 ), #31420, .T. ) ; +#21876 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21877 = VERTEX_POINT ( 'NONE', #25491 ) ; +#21878 = FILL_AREA_STYLE ('',( #6161 ) ) ; +#21879 = CARTESIAN_POINT ( 'NONE', ( -3.394999999999999600, -0.2000000000000000100, -3.299999999999999800 ) ) ; +#21880 = CYLINDRICAL_SURFACE ( 'NONE', #4553, 0.1000000000000001200 ) ; +#21881 = VERTEX_POINT ( 'NONE', #19144 ) ; +#21882 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#21883 = LINE ( 'NONE', #27253, #11698 ) ; +#21884 = PRESENTATION_STYLE_ASSIGNMENT (( #28561 ) ) ; +#21885 = SURFACE_SIDE_STYLE ('',( #13380 ) ) ; +#21886 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7527, 'distance_accuracy_value', 'NONE'); +#21887 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000800, -0.2000017452961698200 ) ) ; +#21888 = FILL_AREA_STYLE ('',( #40922 ) ) ; +#21889 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#21890 = EDGE_CURVE ( 'NONE', #39696, #19456, #19792, .T. ) ; +#21891 = EDGE_CURVE ( 'NONE', #9198, #35039, #23294, .T. ) ; +#21892 = CLOSED_SHELL ( 'NONE', ( #7122, #39416, #8873, #33664, #37863, #24883, #41663, #27819, #30523, #24010, #3580, #28197, #32387, #5004, #24613, #25447, #34579, #31268, #1705, #18095, #37347, #22502, #15834, #6756, #30012, #36582, #29424, #37056, #15492, #36796, #6350, #92, #16765, #19089, #17626, #15883, #20457, #2373, #24557, #8831, #21567, #23453, #41098, #21601, #38750, #31112, #34119, #23282, #39366, #25405, #25197, #28553, #5930, #27731, #2837, #31982, #4686, #29253, #5771, #21074, #27495, #36440, #16521, #31379, #32138, #30888, #27069, #27552, #8249, #18583, #29408, #36934, #5347, #31513, #10510, #11139, #39882, #2597, #15635, #31784, #41064, #34336, #20309, #9236, #33545, #40833, #31927, #4598, #19047, #558, #5737, #31093, #2342, #13108, #246, #34063, #12220, #17580, #38371, #28028, #30849, #37617, #34379, #11593, #4730, #15237, #23763, #16554, #39621, #31147, #41462, #12734, #12469, #35221, #6961, #20615, #16883, #18507, #1498, #29859, #21643, #7690, #32807, #14344, #6371, #37137, #12422, #23804, #29897, #16351, #22003, #8584, #880, #8509, #22104, #10983, #28387, #12009, #11024, #16924, #404, #12484, #26219, #38338, #4417, #40941, #17534, #11435, #35853, #2542, #11343, #3478, #8007, #25246, #20348, #16267, #30102, #41716, #34492, #12063, #26641, #20738, #12266, #25208, #19684, #37549, #11964, #20978, #26692, #12517, #12909, #39783, #15434, #3632, #18710, #4211, #20664, #10772 ) ) ; +#21893 = CARTESIAN_POINT ( 'NONE', ( -3.500000000000003100, 0.4300017452961685800, -6.750000000000000000 ) ) ; +#21894 = FACE_OUTER_BOUND ( 'NONE', #36396, .T. ) ; +#21895 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165600, -5.075000000000000200 ) ) ; +#21896 = EDGE_CURVE ( 'NONE', #9130, #36956, #14704, .T. ) ; +#21897 = VERTEX_POINT ( 'NONE', #9059 ) ; +#21898 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30579 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16213, #38783, #16349 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21899 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#21900 = VECTOR ( 'NONE', #3770, 1000.000000000000000 ) ; +#21901 = EDGE_CURVE ( 'NONE', #38162, #13458, #26335, .T. ) ; +#21902 = EDGE_LOOP ( 'NONE', ( #2189, #34879, #36109, #23116 ) ) ; +#21903 = SURFACE_SIDE_STYLE ('',( #28883 ) ) ; +#21904 = VECTOR ( 'NONE', #20472, 1000.000000000000000 ) ; +#21905 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -2.299999999999999400 ) ) ; +#21906 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34307 ) ) ; +#21907 = ADVANCED_FACE ( 'NONE', ( #604 ), #22106, .F. ) ; +#21908 = VERTEX_POINT ( 'NONE', #41828 ) ; +#21909 = FILL_AREA_STYLE ('',( #18509 ) ) ; +#21910 = ORIENTED_EDGE ( 'NONE', *, *, #2106, .F. ) ; +#21911 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.4300017452961691400, -6.899999999999998600 ) ) ; +#21912 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37834 ), #13195 ) ; +#21913 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21915 = EDGE_CURVE ( 'NONE', #3289, #14271, #5832, .T. ) ; +#21914 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26210 ) ) ; +#21916 = FILL_AREA_STYLE ('',( #5505 ) ) ; +#21917 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21918 = VERTEX_POINT ( 'NONE', #5990 ) ; +#21919 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21920 = VERTEX_POINT ( 'NONE', #8929 ) ; +#21921 = VECTOR ( 'NONE', #26107, 1000.000000000000000 ) ; +#21922 = PRESENTATION_STYLE_ASSIGNMENT (( #28955 ) ) ; +#21924 = STYLED_ITEM ( 'NONE', ( #34780 ), #3417 ) ; +#21923 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18810 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32029, #16092, #38246 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21925 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000800, 1.630001745296169500, -1.650000000000000400 ) ) ; +#21926 = FILL_AREA_STYLE_COLOUR ( '', #15809 ) ; +#21927 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3745 ), #37050 ) ; +#21928 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21930 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11061 ) ) ; +#21929 = SURFACE_STYLE_FILL_AREA ( #1838 ) ; +#21931 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#21932 = SURFACE_SIDE_STYLE ('',( #2397 ) ) ; +#21933 = FILL_AREA_STYLE_COLOUR ( '', #8188 ) ; +#21934 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6544, 'distance_accuracy_value', 'NONE'); +#21935 = LINE ( 'NONE', #33909, #16348 ) ; +#21936 = FILL_AREA_STYLE_COLOUR ( '', #2453 ) ; +#21937 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521965300E-031 ) ) ; +#21938 = DIRECTION ( 'NONE', ( 2.891205793294679400E-015, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#21939 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21940 = VECTOR ( 'NONE', #7887, 1000.000000000000000 ) ; +#21941 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -4.099999999999999600 ) ) ; +#21942 = VECTOR ( 'NONE', #19212, 1000.000000000000000 ) ; +#21943 = ORIENTED_EDGE ( 'NONE', *, *, #38917, .F. ) ; +#21944 = VERTEX_POINT ( 'NONE', #28575 ) ; +#21945 = FILL_AREA_STYLE_COLOUR ( '', #18987 ) ; +#21946 = VERTEX_POINT ( 'NONE', #12455 ) ; +#21947 = ORIENTED_EDGE ( 'NONE', *, *, #11415, .T. ) ; +#21948 = EDGE_CURVE ( 'NONE', #9003, #4768, #7512, .T. ) ; +#21949 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21950 = CARTESIAN_POINT ( 'NONE', ( 3.245000000072999900, -0.2999999999999999900, -1.600000000000000100 ) ) ; +#21951 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 0.6800017452961697500, -1.649999999999999500 ) ) ; +#21952 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6137, 'distance_accuracy_value', 'NONE'); +#21953 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#21954 = LINE ( 'NONE', #9656, #40101 ) ; +#21955 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 0.0000000000000000000 ) ) ; +#21956 = SURFACE_SIDE_STYLE ('',( #25798 ) ) ; +#21957 = EDGE_CURVE ( 'NONE', #28709, #22123, #6667, .T. ) ; +#21958 = CARTESIAN_POINT ( 'NONE', ( -4.450000000000001100, 0.08000174529616799200, -7.200000000000001100 ) ) ; +#21959 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#21960 = SURFACE_STYLE_USAGE ( .BOTH. , #9329 ) ; +#21961 = AXIS2_PLACEMENT_3D ( 'NONE', #5852, #6009, #15730 ) ; +#21962 = SURFACE_STYLE_FILL_AREA ( #37692 ) ; +#21963 = AXIS2_PLACEMENT_3D ( 'NONE', #18585, #22235, #41682 ) ; +#21964 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#21965 = VECTOR ( 'NONE', #6655, 1000.000000000000000 ) ; +#21966 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17634 ) ) ; +#21967 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22315 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31536, #38293, #25877 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21968 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#21969 = ORIENTED_EDGE ( 'NONE', *, *, #15388, .T. ) ; +#21971 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34326 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5312, #11803, #15070 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#21970 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29791 ), #31953 ) ; +#21972 = SURFACE_SIDE_STYLE ('',( #14233 ) ) ; +#21973 = PRESENTATION_STYLE_ASSIGNMENT (( #12199 ) ) ; +#21974 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.380001745296165500, -1.749999999999999300 ) ) ; +#21975 = EDGE_LOOP ( 'NONE', ( #17467, #377, #6193, #22477 ) ) ; +#21976 = EDGE_CURVE ( 'NONE', #17831, #34623, #4068, .T. ) ; +#21977 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#21978 = ORIENTED_EDGE ( 'NONE', *, *, #25263, .F. ) ; +#21979 = EDGE_LOOP ( 'NONE', ( #4615, #35627, #15824, #35658, #30058 ) ) ; +#21980 = FILL_AREA_STYLE_COLOUR ( '', #15953 ) ; +#21981 = ORIENTED_EDGE ( 'NONE', *, *, #28596, .F. ) ; +#21982 = ORIENTED_EDGE ( 'NONE', *, *, #35351, .F. ) ; +#21983 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#21984 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17658 ), #30619 ) ; +#21985 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21986 = SURFACE_SIDE_STYLE ('',( #14341 ) ) ; +#21987 = VECTOR ( 'NONE', #13373, 1000.000000000000000 ) ; +#21988 = PRESENTATION_STYLE_ASSIGNMENT (( #41145 ) ) ; +#21989 = SURFACE_STYLE_USAGE ( .BOTH. , #5855 ) ; +#21990 = CARTESIAN_POINT ( 'NONE', ( -2.989883752222071600, -0.2195822254978918600, 1.120626661753162600 ) ) ; +#21991 = VECTOR ( 'NONE', #14439, 1000.000000000000000 ) ; +#21992 = SURFACE_SIDE_STYLE ('',( #11022 ) ) ; +#21993 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000100, -1.499998254703838600, -5.449999999999994000 ) ) ; +#21994 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.765691082212025000E-015, 0.0000000000000000000 ) ) ; +#21995 = ORIENTED_EDGE ( 'NONE', *, *, #39956, .T. ) ; +#21996 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#21997 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#21998 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#21999 = EDGE_LOOP ( 'NONE', ( #19537, #13411, #25091, #39892 ) ) ; +#22000 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6101, 'distance_accuracy_value', 'NONE'); +#22001 = PLANE ( 'NONE', #29234 ) ; +#22002 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22003 = ADVANCED_FACE ( 'NONE', ( #39115 ), #25625, .T. ) ; +#22004 = EDGE_CURVE ( 'NONE', #1063, #14890, #40166, .T. ) ; +#22005 = ORIENTED_EDGE ( 'NONE', *, *, #26317, .T. ) ; +#22006 = DIRECTION ( 'NONE', ( -2.867303258980864400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#22007 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22008 = EDGE_CURVE ( 'NONE', #27374, #35784, #17476, .T. ) ; +#22009 = VECTOR ( 'NONE', #9743, 1000.000000000000000 ) ; +#22010 = AXIS2_PLACEMENT_3D ( 'NONE', #41730, #16193, #25804 ) ; +#22011 = FILL_AREA_STYLE_COLOUR ( '', #14857 ) ; +#22012 = VECTOR ( 'NONE', #15223, 1000.000000000000000 ) ; +#22013 = ORIENTED_EDGE ( 'NONE', *, *, #26064, .F. ) ; +#22014 = DIRECTION ( 'NONE', ( 4.336808689942016900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#22015 = SURFACE_STYLE_FILL_AREA ( #8947 ) ; +#22016 = ADVANCED_FACE ( 'NONE', ( #27082 ), #6662, .T. ) ; +#22017 = AXIS2_PLACEMENT_3D ( 'NONE', #17859, #33666, #17731 ) ; +#22018 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.445602896647293600E-014 ) ) ; +#22019 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169000, -3.814459358809377100 ) ) ; +#22020 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#22021 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4497, 'distance_accuracy_value', 'NONE'); +#22022 = LINE ( 'NONE', #23423, #38154 ) ; +#22023 = ORIENTED_EDGE ( 'NONE', *, *, #33762, .F. ) ; +#22024 = AXIS2_PLACEMENT_3D ( 'NONE', #17049, #20896, #1137 ) ; +#22025 = LINE ( 'NONE', #19153, #13387 ) ; +#22026 = AXIS2_PLACEMENT_3D ( 'NONE', #4093, #4519, #23450 ) ; +#22027 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#22029 = STYLED_ITEM ( 'NONE', ( #32289 ), #5889 ) ; +#22028 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21952 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6137, #6269, #35643 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22030 = VERTEX_POINT ( 'NONE', #3287 ) ; +#22031 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#22032 = VECTOR ( 'NONE', #18997, 1000.000000000000000 ) ; +#22034 = EDGE_CURVE ( 'NONE', #40953, #36606, #15431, .T. ) ; +#22033 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18264 ), #31220 ) ; +#22035 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#22036 = DIRECTION ( 'NONE', ( 0.9961946980917453200, -3.129741034912050000E-016, 0.08715574274766048300 ) ) ; +#22037 = SURFACE_STYLE_FILL_AREA ( #23026 ) ; +#22039 = AXIS2_PLACEMENT_3D ( 'NONE', #28518, #32166, #6205 ) ; +#22038 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10201 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5153, #37082, #40306 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22040 = EDGE_LOOP ( 'NONE', ( #8672, #27760, #23413, #17797 ) ) ; +#22041 = VECTOR ( 'NONE', #3216, 1000.000000000000000 ) ; +#22042 = MANIFOLD_SOLID_BREP ( '1-1-solid19', #29178 ) ; +#22043 = PLANE ( 'NONE', #527 ) ; +#22044 = ADVANCED_FACE ( 'NONE', ( #35123 ), #5283, .T. ) ; +#22045 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22046 = EDGE_LOOP ( 'NONE', ( #36712, #25352, #19445, #15594 ) ) ; +#22047 = ORIENTED_EDGE ( 'NONE', *, *, #10323, .T. ) ; +#22048 = ORIENTED_EDGE ( 'NONE', *, *, #30585, .F. ) ; +#22049 = SURFACE_SIDE_STYLE ('',( #31707 ) ) ; +#22050 = FILL_AREA_STYLE_COLOUR ( '', #8199 ) ; +#22051 = FACE_OUTER_BOUND ( 'NONE', #4566, .T. ) ; +#22052 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#22053 = ORIENTED_EDGE ( 'NONE', *, *, #12825, .F. ) ; +#22054 = EDGE_LOOP ( 'NONE', ( #1026, #25196, #32766, #1249 ) ) ; +#22055 = EDGE_CURVE ( 'NONE', #21174, #9477, #23491, .T. ) ; +#22056 = PLANE ( 'NONE', #37364 ) ; +#22057 = CARTESIAN_POINT ( 'NONE', ( 3.245000000080559200, 0.3499999999999998700, -1.620710678118654400 ) ) ; +#22058 = ADVANCED_FACE ( 'NONE', ( #9808 ), #19974, .F. ) ; +#22059 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#22060 = EDGE_LOOP ( 'NONE', ( #26754, #29466, #32070, #5695 ) ) ; +#22061 = EDGE_CURVE ( 'NONE', #2849, #16327, #5782, .T. ) ; +#22062 = VECTOR ( 'NONE', #11624, 1000.000000000000000 ) ; +#22063 = FILL_AREA_STYLE_COLOUR ( '', #17031 ) ; +#22064 = SURFACE_SIDE_STYLE ('',( #24458 ) ) ; +#22065 = CARTESIAN_POINT ( 'NONE', ( 3.178333333333020600, -0.2999999999999999900, -0.06128090415826747300 ) ) ; +#22066 = CIRCLE ( 'NONE', #41463, 0.09999999999999982500 ) ; +#22067 = TOROIDAL_SURFACE ( 'NONE', #4999, 1.599999999999742300, 0.09999999999987406500 ) ; +#22068 = AXIS2_PLACEMENT_3D ( 'NONE', #13777, #40289, #37065 ) ; +#22069 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#22070 = SURFACE_SIDE_STYLE ('',( #3210 ) ) ; +#22071 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23618, 'distance_accuracy_value', 'NONE'); +#22072 = SURFACE_SIDE_STYLE ('',( #14895 ) ) ; +#22073 = SURFACE_SIDE_STYLE ('',( #23331 ) ) ; +#22074 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19368 ), #21543 ) ; +#22075 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30928 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22478, #18965, #34768 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22076 = SURFACE_STYLE_FILL_AREA ( #28185 ) ; +#22077 = PLANE ( 'NONE', #31202 ) ; +#22078 = FILL_AREA_STYLE_COLOUR ( '', #26822 ) ; +#22080 = EDGE_CURVE ( 'NONE', #38341, #32708, #40656, .T. ) ; +#22079 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21640 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1098, #39583, #4007 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22081 = SURFACE_STYLE_FILL_AREA ( #39510 ) ; +#22082 = CARTESIAN_POINT ( 'NONE', ( -4.620424212713737200, 0.2800000000000027500, -1.049979056049130000 ) ) ; +#22083 = SURFACE_SIDE_STYLE ('',( #30437 ) ) ; +#22084 = FILL_AREA_STYLE_COLOUR ( '', #28557 ) ; +#22085 = VERTEX_POINT ( 'NONE', #32933 ) ; +#22086 = ORIENTED_EDGE ( 'NONE', *, *, #36238, .T. ) ; +#22087 = VERTEX_POINT ( 'NONE', #785 ) ; +#22088 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22089 = FACE_OUTER_BOUND ( 'NONE', #16907, .T. ) ; +#22091 = AXIS2_PLACEMENT_3D ( 'NONE', #3769, #13530, #22865 ) ; +#22090 = STYLED_ITEM ( 'NONE', ( #13735 ), #26744 ) ; +#22092 = CIRCLE ( 'NONE', #33645, 0.2999999999999999300 ) ; +#22094 = LINE ( 'NONE', #20766, #31187 ) ; +#22093 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23256 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3230, #25830, #12393 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22095 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22096 = VECTOR ( 'NONE', #12066, 1000.000000000000000 ) ; +#22097 = PLANE ( 'NONE', #5350 ) ; +#22098 = VECTOR ( 'NONE', #13768, 1000.000000000000000 ) ; +#22099 = ORIENTED_EDGE ( 'NONE', *, *, #34864, .F. ) ; +#22100 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4427 ), #24491 ) ; +#22101 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22102 = PRESENTATION_STYLE_ASSIGNMENT (( #35232 ) ) ; +#22103 = ORIENTED_EDGE ( 'NONE', *, *, #15020, .F. ) ; +#22104 = ADVANCED_FACE ( 'NONE', ( #32563 ), #10463, .F. ) ; +#22105 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.180001745296166000, -4.775000000000000400 ) ) ; +#22106 = PLANE ( 'NONE', #16488 ) ; +#22107 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#22108 = SURFACE_SIDE_STYLE ('',( #21502 ) ) ; +#22109 = FACE_OUTER_BOUND ( 'NONE', #37182, .T. ) ; +#22110 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22111 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, -2.322941965694886000, -1.250000000000000000 ) ) ; +#22112 = SURFACE_STYLE_USAGE ( .BOTH. , #21986 ) ; +#22113 = ORIENTED_EDGE ( 'NONE', *, *, #36463, .T. ) ; +#22114 = DIRECTION ( 'NONE', ( 9.637352644315598700E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#22115 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22116 = ORIENTED_EDGE ( 'NONE', *, *, #21644, .F. ) ; +#22117 = EDGE_CURVE ( 'NONE', #29644, #5582, #31054, .T. ) ; +#22118 = ORIENTED_EDGE ( 'NONE', *, *, #40218, .T. ) ; +#22119 = ORIENTED_EDGE ( 'NONE', *, *, #3489, .T. ) ; +#22120 = EDGE_CURVE ( 'NONE', #1566, #36622, #4271, .T. ) ; +#22121 = ORIENTED_EDGE ( 'NONE', *, *, #12930, .T. ) ; +#22122 = EDGE_LOOP ( 'NONE', ( #23415, #26912 ) ) ; +#22123 = VERTEX_POINT ( 'NONE', #33081 ) ; +#22124 = LINE ( 'NONE', #40964, #4921 ) ; +#22125 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39884 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5438, #31145, #18325 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22126 = VECTOR ( 'NONE', #33110, 1000.000000000000000 ) ; +#22127 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22128 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#22129 = FILL_AREA_STYLE_COLOUR ( '', #25155 ) ; +#22130 = ORIENTED_EDGE ( 'NONE', *, *, #25521, .T. ) ; +#22131 = SURFACE_SIDE_STYLE ('',( #29764 ) ) ; +#22132 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22133 = ORIENTED_EDGE ( 'NONE', *, *, #1536, .T. ) ; +#22134 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14036 ), #25663 ) ; +#22135 = STYLED_ITEM ( 'NONE', ( #3261 ), #12231 ) ; +#22136 = FILL_AREA_STYLE ('',( #38484 ) ) ; +#22137 = SURFACE_SIDE_STYLE ('',( #18531 ) ) ; +#22138 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#22139 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #40539, #5243, #24479, #37451 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 3.141592653589793100, 3.864326901403219800 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956555600, 0.9569428977956555600, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#22141 = EDGE_CURVE ( 'NONE', #18636, #20956, #30548, .T. ) ; +#22140 = STYLED_ITEM ( 'NONE', ( #11266 ), #37347 ) ; +#22142 = VERTEX_POINT ( 'NONE', #10605 ) ; +#22143 = CARTESIAN_POINT ( 'NONE', ( -3.178333333333019300, 0.2999999999999999900, -0.06128090415826408600 ) ) ; +#22144 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22145 = STYLED_ITEM ( 'NONE', ( #39717 ), #27819 ) ; +#22146 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#22147 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#22148 = AXIS2_PLACEMENT_3D ( 'NONE', #2931, #16024, #25786 ) ; +#22149 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19705, 'distance_accuracy_value', 'NONE'); +#22150 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, 0.2000000000000000100, -18.77614000000000500 ) ) ; +#22151 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2848 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8384, #10781, #33406 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22152 = ORIENTED_EDGE ( 'NONE', *, *, #37390, .F. ) ; +#22153 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38092 ) ) ; +#22154 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, 0.7071067811865483500 ) ) ; +#22155 = ORIENTED_EDGE ( 'NONE', *, *, #26096, .T. ) ; +#22156 = PRESENTATION_STYLE_ASSIGNMENT (( #29121 ) ) ; +#22157 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703822500, -3.700000000000000200 ) ) ; +#22158 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#22159 = ORIENTED_EDGE ( 'NONE', *, *, #28665, .F. ) ; +#22160 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22161 = FILL_AREA_STYLE_COLOUR ( '', #38877 ) ; +#22162 = VERTEX_POINT ( 'NONE', #29827 ) ; +#22163 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#22164 = FILL_AREA_STYLE ('',( #38240 ) ) ; +#22165 = PRESENTATION_STYLE_ASSIGNMENT (( #9830 ) ) ; +#22166 = VECTOR ( 'NONE', #4240, 1000.000000000000100 ) ; +#22167 = CARTESIAN_POINT ( 'NONE', ( 2.949999999999999700, -1.499998254703820400, -6.299999999999993600 ) ) ; +#22168 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.07499999999999998300, -0.2498427124746000500 ) ) ; +#22169 = VERTEX_POINT ( 'NONE', #13728 ) ; +#22170 = CARTESIAN_POINT ( 'NONE', ( -2.994999999946547300, 0.3499999999999999200, -1.546446609361922500 ) ) ; +#22171 = PRESENTATION_STYLE_ASSIGNMENT (( #19742 ) ) ; +#22172 = VERTEX_POINT ( 'NONE', #36338 ) ; +#22173 = ORIENTED_EDGE ( 'NONE', *, *, #7139, .T. ) ; +#22174 = LINE ( 'NONE', #40069, #24721 ) ; +#22175 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22176 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22177 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745278514100, -3.214459358809383700 ) ) ; +#22178 = ORIENTED_EDGE ( 'NONE', *, *, #4032, .T. ) ; +#22179 = LINE ( 'NONE', #11217, #7475 ) ; +#22180 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#22181 = FILL_AREA_STYLE ('',( #22729 ) ) ; +#22182 = EDGE_CURVE ( 'NONE', #29238, #14912, #3608, .T. ) ; +#22183 = SURFACE_SIDE_STYLE ('',( #23127 ) ) ; +#22184 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2485 ) ) ; +#22185 = CIRCLE ( 'NONE', #21239, 0.3600000000000078700 ) ; +#22186 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22187 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22188 = EDGE_CURVE ( 'NONE', #21312, #34928, #37628, .T. ) ; +#22189 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.480001745296170000, -0.2339555568811695900 ) ) ; +#22190 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#22191 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.779999999999868600, -0.2339555568811697600 ) ) ; +#22192 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22193 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22194 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.779999999999868600, -0.2339555568811697600 ) ) ; +#22195 = ORIENTED_EDGE ( 'NONE', *, *, #40803, .T. ) ; +#22197 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35733 ), #39491 ) ; +#22196 = SURFACE_SIDE_STYLE ('',( #9417 ) ) ; +#22198 = SURFACE_STYLE_FILL_AREA ( #4600 ) ; +#22199 = DIRECTION ( 'NONE', ( 0.0002094395087002862800, -2.270747703371471400E-020, 0.9999999780675458100 ) ) ; +#22200 = ADVANCED_FACE ( 'NONE', ( #14904 ), #21465, .F. ) ; +#22201 = DIRECTION ( 'NONE', ( -2.168404344971009400E-016, -2.367138801244516800E-016, -1.000000000000000000 ) ) ; +#22202 = ORIENTED_EDGE ( 'NONE', *, *, #29951, .T. ) ; +#22203 = VECTOR ( 'NONE', #27029, 1000.000000000000000 ) ; +#22204 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 1.480001745296168700, -1.650000000000000800 ) ) ; +#22205 = ORIENTED_EDGE ( 'NONE', *, *, #10672, .F. ) ; +#22207 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9168 ) ) ; +#22206 = AXIS2_PLACEMENT_3D ( 'NONE', #11746, #5260, #24652 ) ; +#22208 = CIRCLE ( 'NONE', #29864, 0.3000000000000001000 ) ; +#22209 = CIRCLE ( 'NONE', #24245, 0.1000000000000001200 ) ; +#22211 = AXIS2_PLACEMENT_3D ( 'NONE', #36522, #36652, #20881 ) ; +#22210 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20062 ), #35190 ) ; +#22212 = ORIENTED_EDGE ( 'NONE', *, *, #21153, .T. ) ; +#22213 = ORIENTED_EDGE ( 'NONE', *, *, #16665, .T. ) ; +#22214 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#22215 = FILL_AREA_STYLE_COLOUR ( '', #6808 ) ; +#22216 = FILL_AREA_STYLE ('',( #12427 ) ) ; +#22217 = ADVANCED_FACE ( 'NONE', ( #17437 ), #24990, .T. ) ; +#22218 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 0.6800017452961688600, -1.650000000000001700 ) ) ; +#22219 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22220 = EDGE_LOOP ( 'NONE', ( #22490, #15595, #24058, #38429 ) ) ; +#22221 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#22222 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22223 = CIRCLE ( 'NONE', #1702, 0.2000000000000007300 ) ; +#22224 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#22225 = PRESENTATION_STYLE_ASSIGNMENT (( #38850 ) ) ; +#22226 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22227 = SURFACE_STYLE_USAGE ( .BOTH. , #15572 ) ; +#22228 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#22229 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#22230 = FILL_AREA_STYLE ('',( #34933 ) ) ; +#22231 = VECTOR ( 'NONE', #1188, 1000.000000000000000 ) ; +#22232 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14261, 'distance_accuracy_value', 'NONE'); +#22233 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22234 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.2999999999999850000, -4.249999999999998200 ) ) ; +#22235 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244519300E-016 ) ) ; +#22236 = PRESENTATION_STYLE_ASSIGNMENT (( #36394 ) ) ; +#22237 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.5199999999999849200, -5.200000000000000200 ) ) ; +#22238 = CLOSED_SHELL ( 'NONE', ( #30063, #14999, #40614, #260, #25037, #33706 ) ) ; +#22239 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22240 = DIRECTION ( 'NONE', ( 3.872150616019659000E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#22241 = EDGE_CURVE ( 'NONE', #26001, #36793, #36579, .T. ) ; +#22242 = ORIENTED_EDGE ( 'NONE', *, *, #41814, .T. ) ; +#22243 = ORIENTED_EDGE ( 'NONE', *, *, #40203, .T. ) ; +#22244 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -2.322941965694886000, 0.3499999999999999800 ) ) ; +#22245 = VECTOR ( 'NONE', #28713, 1000.000000000000000 ) ; +#22246 = EDGE_CURVE ( 'NONE', #32704, #41825, #23944, .T. ) ; +#22247 = STYLED_ITEM ( 'NONE', ( #397 ), #10080 ) ; +#22248 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22249 = ORIENTED_EDGE ( 'NONE', *, *, #8219, .F. ) ; +#22250 = AXIS2_PLACEMENT_3D ( 'NONE', #19340, #25683, #562 ) ; +#22251 = ORIENTED_EDGE ( 'NONE', *, *, #13291, .F. ) ; +#22253 = ADVANCED_FACE ( 'NONE', ( #28988 ), #27936, .T. ) ; +#22252 = VERTEX_POINT ( 'NONE', #31315 ) ; +#22254 = PRESENTATION_STYLE_ASSIGNMENT (( #39188 ) ) ; +#22255 = SURFACE_SIDE_STYLE ('',( #11975 ) ) ; +#22256 = SURFACE_SIDE_STYLE ('',( #30184 ) ) ; +#22257 = CARTESIAN_POINT ( 'NONE', ( -4.450000000000001100, -0.01999825470386161800, -7.200000000000001100 ) ) ; +#22258 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.799998254703822000, -3.500000000000000000 ) ) ; +#22259 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22260 = VERTEX_POINT ( 'NONE', #33364 ) ; +#22262 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26013, 'distance_accuracy_value', 'NONE'); +#22261 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17933 ) ) ; +#22263 = PRESENTATION_STYLE_ASSIGNMENT (( #7413 ) ) ; +#22264 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1544 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21037, #33721, #8119 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22265 = CYLINDRICAL_SURFACE ( 'NONE', #18188, 0.3000000000000003800 ) ; +#22266 = VECTOR ( 'NONE', #10692, 1000.000000000000000 ) ; +#22267 = SURFACE_STYLE_USAGE ( .BOTH. , #12767 ) ; +#22268 = ADVANCED_FACE ( 'NONE', ( #35577 ), #40913, .F. ) ; +#22270 = AXIS2_PLACEMENT_3D ( 'NONE', #16543, #19540, #32777 ) ; +#22269 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26025 ), #28198 ) ; +#22271 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#22272 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.773004880385254100, -0.7580972011844128200 ) ) ; +#22274 = EDGE_CURVE ( 'NONE', #3262, #14599, #13844, .T. ) ; +#22273 = AXIS2_PLACEMENT_3D ( 'NONE', #41531, #22221, #19125 ) ; +#22275 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#22276 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, -10.30000000000000100, -1.250000000000000000 ) ) ; +#22277 = CARTESIAN_POINT ( 'NONE', ( 2.945000000000000700, -0.6000000000000003100, -3.250000000000000400 ) ) ; +#22279 = AXIS2_PLACEMENT_3D ( 'NONE', #15298, #24923, #41125 ) ; +#22278 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30924 ), #16328 ) ; +#22280 = ORIENTED_EDGE ( 'NONE', *, *, #40773, .F. ) ; +#22281 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.6800017452961725200, -3.999999999999998200 ) ) ; +#22282 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26474, 'distance_accuracy_value', 'NONE'); +#22283 = FACE_OUTER_BOUND ( 'NONE', #7005, .T. ) ; +#22284 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#22285 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22286 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #23169, #7041, #35610, #29660, #39250, #209, #19948, #29242, #9865, #342 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 2, 2, 4 ), + ( 0.0000000000000000000, 0.4999999999999984500, 0.6249999999999988900, 0.7499999999999994400, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#22287 = VERTEX_POINT ( 'NONE', #28215 ) ; +#22288 = SURFACE_STYLE_FILL_AREA ( #32512 ) ; +#22289 = PRESENTATION_STYLE_ASSIGNMENT (( #20730 ) ) ; +#22290 = SURFACE_STYLE_USAGE ( .BOTH. , #15238 ) ; +#22291 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22292 = LINE ( 'NONE', #11871, #19263 ) ; +#22293 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#22294 = VERTEX_POINT ( 'NONE', #5050 ) ; +#22295 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22296 = ORIENTED_EDGE ( 'NONE', *, *, #12311, .T. ) ; +#22297 = VERTEX_POINT ( 'NONE', #18349 ) ; +#22298 = SURFACE_STYLE_USAGE ( .BOTH. , #41605 ) ; +#22299 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#22300 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#22301 = ORIENTED_EDGE ( 'NONE', *, *, #33487, .F. ) ; +#22302 = LINE ( 'NONE', #29322, #5104 ) ; +#22303 = EDGE_LOOP ( 'NONE', ( #82, #32474, #26246, #22607 ) ) ; +#22304 = EDGE_CURVE ( 'NONE', #33431, #5335, #40085, .T. ) ; +#22305 = ADVANCED_FACE ( 'NONE', ( #25500 ), #2220, .F. ) ; +#22306 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#22307 = SURFACE_STYLE_FILL_AREA ( #11697 ) ; +#22308 = SURFACE_STYLE_USAGE ( .BOTH. , #12521 ) ; +#22309 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#22310 = EDGE_CURVE ( 'NONE', #14064, #18656, #26998, .T. ) ; +#22311 = STYLED_ITEM ( 'NONE', ( #21474 ), #11182 ) ; +#22312 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 1.485063948690956900E-014, -3.099999999999998800 ) ) ; +#22313 = PLANE ( 'NONE', #30420 ) ; +#22314 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22315 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31536, 'distance_accuracy_value', 'NONE'); +#22316 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22317 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36117 ) ) ; +#22318 = FILL_AREA_STYLE_COLOUR ( '', #21953 ) ; +#22319 = EDGE_LOOP ( 'NONE', ( #32978, #39043, #41281, #34015 ) ) ; +#22320 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#22321 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#22322 = SURFACE_SIDE_STYLE ('',( #34645 ) ) ; +#22323 = PLANE ( 'NONE', #9898 ) ; +#22324 = AXIS2_PLACEMENT_3D ( 'NONE', #28506, #41362, #34581 ) ; +#22325 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25643 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14167, #40255, #20832 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22326 = ORIENTED_EDGE ( 'NONE', *, *, #3730, .F. ) ; +#22329 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10914 ) ) ; +#22328 = PRESENTATION_STYLE_ASSIGNMENT (( #22687 ) ) ; +#22327 = AXIS2_PLACEMENT_3D ( 'NONE', #15956, #9445, #15417 ) ; +#22330 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#22331 = CARTESIAN_POINT ( 'NONE', ( -3.946342001231977600, 0.5379816169907025700, -4.411967300749737800 ) ) ; +#22332 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#22334 = EDGE_CURVE ( 'NONE', #9560, #8598, #2740, .T. ) ; +#22333 = STYLED_ITEM ( 'NONE', ( #22643 ), #36022 ) ; +#22335 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#22336 = VERTEX_POINT ( 'NONE', #38621 ) ; +#22337 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#22338 = ORIENTED_EDGE ( 'NONE', *, *, #40973, .F. ) ; +#22340 = SURFACE_SIDE_STYLE ('',( #5166 ) ) ; +#22339 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#22341 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22343 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16380 ) ) ; +#22342 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1510 ), #19380 ) ; +#22344 = DIRECTION ( 'NONE', ( -4.336808689942015400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#22345 = CARTESIAN_POINT ( 'NONE', ( 0.6500000000000000200, -1.499998254703827700, -6.299999999999993600 ) ) ; +#22346 = ORIENTED_EDGE ( 'NONE', *, *, #33493, .T. ) ; +#22347 = CIRCLE ( 'NONE', #5300, 0.1000000000000009100 ) ; +#22348 = ORIENTED_EDGE ( 'NONE', *, *, #27418, .F. ) ; +#22349 = LINE ( 'NONE', #30602, #38967 ) ; +#22350 = SURFACE_STYLE_FILL_AREA ( #10716 ) ; +#22351 = PRESENTATION_STYLE_ASSIGNMENT (( #32210 ) ) ; +#22352 = VECTOR ( 'NONE', #31504, 1000.000000000000000 ) ; +#22353 = VECTOR ( 'NONE', #22401, 1000.000000000000000 ) ; +#22354 = SURFACE_SIDE_STYLE ('',( #33035 ) ) ; +#22355 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#22356 = SURFACE_SIDE_STYLE ('',( #24293 ) ) ; +#22357 = EDGE_LOOP ( 'NONE', ( #7558, #30078 ) ) ; +#22358 = CYLINDRICAL_SURFACE ( 'NONE', #19736, 0.05000000000000012800 ) ; +#22359 = SURFACE_SIDE_STYLE ('',( #3647 ) ) ; +#22360 = EDGE_CURVE ( 'NONE', #7741, #3122, #5748, .T. ) ; +#22361 = VERTEX_POINT ( 'NONE', #31860 ) ; +#22362 = SURFACE_SIDE_STYLE ('',( #35494 ) ) ; +#22363 = EDGE_CURVE ( 'NONE', #3283, #10076, #13294, .T. ) ; +#22364 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#22365 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#22366 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#22367 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#22368 = ORIENTED_EDGE ( 'NONE', *, *, #36298, .T. ) ; +#22369 = EDGE_CURVE ( 'NONE', #38353, #14483, #38068, .T. ) ; +#22370 = SURFACE_SIDE_STYLE ('',( #10888 ) ) ; +#22371 = ORIENTED_EDGE ( 'NONE', *, *, #31502, .T. ) ; +#22372 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33746 ), #21898 ) ; +#22373 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#22374 = DIRECTION ( 'NONE', ( -4.336808689942016200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#22375 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22376 = ORIENTED_EDGE ( 'NONE', *, *, #34504, .F. ) ; +#22377 = PRESENTATION_STYLE_ASSIGNMENT (( #19809 ) ) ; +#22378 = ORIENTED_EDGE ( 'NONE', *, *, #337, .F. ) ; +#22379 = STYLED_ITEM ( 'NONE', ( #8277 ), #20949 ) ; +#22380 = VECTOR ( 'NONE', #32038, 1000.000000000000000 ) ; +#22381 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3677 ) ) ; +#22382 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#22383 = DIRECTION ( 'NONE', ( 0.08715574274766037200, 0.0000000000000000000, 0.9961946980917453200 ) ) ; +#22384 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22385 = LINE ( 'NONE', #6090, #39537 ) ; +#22388 = EDGE_CURVE ( 'NONE', #4602, #14272, #38228, .T. ) ; +#22387 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22386 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2920 ), #28864 ) ; +#22389 = DIRECTION ( 'NONE', ( 3.188821734606921400E-015, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#22390 = FACE_BOUND ( 'NONE', #36780, .T. ) ; +#22391 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#22392 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4504 ), #31294 ) ; +#22393 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22394 = STYLED_ITEM ( 'NONE', ( #5596 ), #40371 ) ; +#22395 = EDGE_LOOP ( 'NONE', ( #5998, #19587, #3991, #2107, #13673, #7729 ) ) ; +#22396 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22397 = VECTOR ( 'NONE', #18660, 1000.000000000000100 ) ; +#22398 = AXIS2_PLACEMENT_3D ( 'NONE', #17560, #17704, #36893 ) ; +#22399 = DIRECTION ( 'NONE', ( -2.224004456380521900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#22400 = SURFACE_STYLE_USAGE ( .BOTH. , #19170 ) ; +#22401 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#22402 = FACE_OUTER_BOUND ( 'NONE', #19173, .T. ) ; +#22403 = LINE ( 'NONE', #431, #5203 ) ; +#22404 = ORIENTED_EDGE ( 'NONE', *, *, #12340, .T. ) ; +#22405 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#22406 = ORIENTED_EDGE ( 'NONE', *, *, #20222, .F. ) ; +#22407 = CLOSED_SHELL ( 'NONE', ( #33756, #17876, #7000, #8640, #16108, #24177 ) ) ; +#22408 = VERTEX_POINT ( 'NONE', #2685 ) ; +#22409 = CARTESIAN_POINT ( 'NONE', ( 3.365710678118654100, -0.1999999999999992300, -3.300000000000000300 ) ) ; +#22410 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#22411 = SURFACE_STYLE_FILL_AREA ( #35671 ) ; +#22412 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22413 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -3.411425195066693000E-015 ) ) ; +#22414 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#22415 = VECTOR ( 'NONE', #33338, 1000.000000000000000 ) ; +#22416 = VERTEX_POINT ( 'NONE', #28339 ) ; +#22417 = LINE ( 'NONE', #31371, #16846 ) ; +#22418 = LINE ( 'NONE', #19532, #29442 ) ; +#22419 = ADVANCED_FACE ( 'NONE', ( #13805 ), #12367, .T. ) ; +#22420 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15609, 'distance_accuracy_value', 'NONE'); +#22421 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22422 = PRESENTATION_STYLE_ASSIGNMENT (( #24319 ) ) ; +#22423 = EDGE_CURVE ( 'NONE', #6625, #15733, #11762, .T. ) ; +#22424 = LINE ( 'NONE', #32049, #28961 ) ; +#22425 = SURFACE_STYLE_USAGE ( .BOTH. , #12502 ) ; +#22426 = EDGE_CURVE ( 'NONE', #4942, #26216, #23414, .T. ) ; +#22427 = STYLED_ITEM ( 'NONE', ( #35780 ), #17377 ) ; +#22428 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.2999999999999999900, -1.399999999999999900 ) ) ; +#22429 = EDGE_CURVE ( 'NONE', #439, #33802, #36077, .T. ) ; +#22430 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.056601140521968800E-031 ) ) ; +#22431 = LINE ( 'NONE', #4680, #21448 ) ; +#22432 = FILL_AREA_STYLE_COLOUR ( '', #5051 ) ; +#22433 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19478 ), #15132 ) ; +#22434 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22435 = DIRECTION ( 'NONE', ( 1.133987551255204500E-030, 1.000000000000000000, -2.367138801244545900E-016 ) ) ; +#22436 = EDGE_LOOP ( 'NONE', ( #39187, #36380, #36172, #39293 ) ) ; +#22437 = STYLED_ITEM ( 'NONE', ( #34505 ), #12678 ) ; +#22438 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#22439 = VECTOR ( 'NONE', #21211, 1000.000000000000000 ) ; +#22441 = EDGE_CURVE ( 'NONE', #12019, #3598, #19386, .T. ) ; +#22440 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4537 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34576, #8709, #18502 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22442 = LINE ( 'NONE', #16458, #13835 ) ; +#22443 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#22444 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#22445 = EDGE_LOOP ( 'NONE', ( #10513, #36275, #23004, #17733 ) ) ; +#22446 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22447 = VERTEX_POINT ( 'NONE', #28172 ) ; +#22448 = ORIENTED_EDGE ( 'NONE', *, *, #33557, .F. ) ; +#22449 = ORIENTED_EDGE ( 'NONE', *, *, #11201, .F. ) ; +#22450 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000001100, 1.167528855492236500, -14.55000000000000100 ) ) ; +#22451 = LINE ( 'NONE', #3699, #23452 ) ; +#22453 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12147 ), #41128 ) ; +#22452 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40546 ), #14345 ) ; +#22454 = STYLED_ITEM ( 'NONE', ( #34765 ), #41310 ) ; +#22455 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#22456 = PRESENTATION_STYLE_ASSIGNMENT (( #18053 ) ) ; +#22457 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34776 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9863, #36323, #16534 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22458 = SURFACE_SIDE_STYLE ('',( #26396 ) ) ; +#22459 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22460 = FACE_BOUND ( 'NONE', #7288, .T. ) ; +#22461 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#22462 = ADVANCED_FACE ( 'NONE', ( #41582 ), #18894, .F. ) ; +#22463 = STYLED_ITEM ( 'NONE', ( #17265 ), #8640 ) ; +#22464 = LINE ( 'NONE', #30234, #6747 ) ; +#22465 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9061, 'distance_accuracy_value', 'NONE'); +#22466 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.999998254703822400, -3.500000000000000000 ) ) ; +#22467 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22468 = SURFACE_STYLE_FILL_AREA ( #14998 ) ; +#22469 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39754, 'distance_accuracy_value', 'NONE'); +#22470 = SURFACE_STYLE_FILL_AREA ( #35712 ) ; +#22472 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22471 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, -2.322941965694886000, -1.250000000000000000 ) ) ; +#22473 = PRESENTATION_STYLE_ASSIGNMENT (( #18238 ) ) ; +#22474 = SURFACE_STYLE_USAGE ( .BOTH. , #13246 ) ; +#22475 = ADVANCED_FACE ( 'NONE', ( #28473 ), #15338, .F. ) ; +#22476 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22477 = ORIENTED_EDGE ( 'NONE', *, *, #10146, .F. ) ; +#22478 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22479 = FACE_OUTER_BOUND ( 'NONE', #17568, .T. ) ; +#22480 = ORIENTED_EDGE ( 'NONE', *, *, #29705, .T. ) ; +#22481 = EDGE_CURVE ( 'NONE', #40345, #12686, #33989, .T. ) ; +#22482 = ORIENTED_EDGE ( 'NONE', *, *, #39683, .T. ) ; +#22483 = PRESENTATION_STYLE_ASSIGNMENT (( #7217 ) ) ; +#22484 = CARTESIAN_POINT ( 'NONE', ( 4.170000000000001700, 0.2799999999999973100, -0.2000017452961698200 ) ) ; +#22485 = VERTEX_POINT ( 'NONE', #12337 ) ; +#22486 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.282530889443167500E-016 ) ) ; +#22487 = EDGE_CURVE ( 'NONE', #32578, #13073, #7179, .T. ) ; +#22488 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31140 ) ) ; +#22489 = SURFACE_STYLE_FILL_AREA ( #16367 ) ; +#22490 = ORIENTED_EDGE ( 'NONE', *, *, #40091, .F. ) ; +#22491 = DIRECTION ( 'NONE', ( -0.08715574274766037200, 0.0000000000000000000, -0.9961946980917453200 ) ) ; +#22492 = FILL_AREA_STYLE_COLOUR ( '', #15257 ) ; +#22493 = PRESENTATION_STYLE_ASSIGNMENT (( #8890 ) ) ; +#22494 = DIRECTION ( 'NONE', ( -6.056601140521965300E-031, 1.987721548152418300E-045, 1.000000000000000000 ) ) ; +#22495 = ORIENTED_EDGE ( 'NONE', *, *, #7478, .F. ) ; +#22496 = FACE_OUTER_BOUND ( 'NONE', #4909, .T. ) ; +#22497 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.966063034915694700, -0.6228541982233617400 ) ) ; +#22498 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10020 ) ) ; +#22499 = FILL_AREA_STYLE_COLOUR ( '', #4145 ) ; +#22500 = ORIENTED_EDGE ( 'NONE', *, *, #14333, .F. ) ; +#22501 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#22502 = ADVANCED_FACE ( 'NONE', ( #6696 ), #28733, .T. ) ; +#22503 = AXIS2_PLACEMENT_3D ( 'NONE', #8032, #27543, #24453 ) ; +#22504 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22506 = STYLED_ITEM ( 'NONE', ( #18829 ), #5191 ) ; +#22505 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8126 ) ) ; +#22507 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#22508 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22509 = ORIENTED_EDGE ( 'NONE', *, *, #8103, .F. ) ; +#22510 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.779999999999868400, 0.0000000000000000000 ) ) ; +#22511 = VERTEX_POINT ( 'NONE', #12602 ) ; +#22512 = FILL_AREA_STYLE ('',( #3568 ) ) ; +#22513 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 2.322941965694886000, -1.250000000000000000 ) ) ; +#22514 = VERTEX_POINT ( 'NONE', #12045 ) ; +#22516 = EDGE_CURVE ( 'NONE', #7164, #38547, #17350, .T. ) ; +#22515 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7857 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17025, #35959, #17166 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22517 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#22518 = ORIENTED_EDGE ( 'NONE', *, *, #1663, .T. ) ; +#22520 = STYLED_ITEM ( 'NONE', ( #25568 ), #210 ) ; +#22519 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27592 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11906, #37632, #37365 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22521 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#22522 = DIRECTION ( 'NONE', ( 2.168401191219097400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#22523 = PRESENTATION_STYLE_ASSIGNMENT (( #1558 ) ) ; +#22524 = ORIENTED_EDGE ( 'NONE', *, *, #17112, .F. ) ; +#22525 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#22526 = EDGE_LOOP ( 'NONE', ( #17977, #10845, #4608, #10905, #37787, #29155, #40268, #13003, #5323, #37711, #41591, #5634, #34489, #26456, #12763, #14930, #34392, #20588, #39547, #33612, #5820, #20569, #26925, #7618, #33692, #13184, #12706, #9769, #31043, #22834, #38468, #39365, #22518, #13283, #9648, #5241, #11174, #37936, #5093, #27795, #21981, #25277, #28194, #4586, #19454 ) ) ; +#22527 = ORIENTED_EDGE ( 'NONE', *, *, #17230, .F. ) ; +#22528 = CIRCLE ( 'NONE', #24182, 0.1000000000000009100 ) ; +#22529 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#22530 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#22531 = FACE_OUTER_BOUND ( 'NONE', #12785, .T. ) ; +#22532 = CIRCLE ( 'NONE', #25201, 0.09999999999999999200 ) ; +#22533 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22534 = EDGE_LOOP ( 'NONE', ( #23934, #21629, #27083, #27091 ) ) ; +#22535 = CIRCLE ( 'NONE', #28303, 0.2818014882866900500 ) ; +#22536 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#22537 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#22538 = VERTEX_POINT ( 'NONE', #9351 ) ; +#22539 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.3499999999999996400, -1.250000000000000000 ) ) ; +#22540 = LINE ( 'NONE', #12453, #5343 ) ; +#22541 = PRESENTATION_STYLE_ASSIGNMENT (( #20321 ) ) ; +#22542 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#22543 = EDGE_CURVE ( 'NONE', #4455, #24845, #40049, .T. ) ; +#22544 = CIRCLE ( 'NONE', #41766, 0.3600000000000078700 ) ; +#22545 = SURFACE_SIDE_STYLE ('',( #16919 ) ) ; +#22546 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.478176394252580200E-017, -6.082356018693180500E-031 ) ) ; +#22547 = EDGE_CURVE ( 'NONE', #3259, #9925, #40533, .T. ) ; +#22548 = AXIS2_PLACEMENT_3D ( 'NONE', #40022, #20598, #1247 ) ; +#22549 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.414176746720224900E-016, 1.000000000000000000 ) ) ; +#22550 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -2.168404344971009400E-016 ) ) ; +#22551 = CARTESIAN_POINT ( 'NONE', ( 3.176452843275133100, -0.07499999999999999700, -0.1332099232685595700 ) ) ; +#22552 = CYLINDRICAL_SURFACE ( 'NONE', #2690, 0.1999999999999996500 ) ; +#22553 = SURFACE_STYLE_USAGE ( .BOTH. , #35276 ) ; +#22554 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22555 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #9121, #37951, #41736, #35284 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#22556 = STYLED_ITEM ( 'NONE', ( #24679 ), #14756 ) ; +#22557 = FILL_AREA_STYLE ('',( #25813 ) ) ; +#22558 = LINE ( 'NONE', #23431, #7367 ) ; +#22559 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22695, 'distance_accuracy_value', 'NONE'); +#22560 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#22561 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8986 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7321, #24013, #33200 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22562 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.9500017452961654300, -5.075000000000000200 ) ) ; +#22563 = EDGE_LOOP ( 'NONE', ( #24904, #20245, #26183, #30009 ) ) ; +#22564 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29950 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12978, #6755, #16663 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22565 = ORIENTED_EDGE ( 'NONE', *, *, #3836, .T. ) ; +#22566 = VERTEX_POINT ( 'NONE', #9204 ) ; +#22567 = SURFACE_STYLE_FILL_AREA ( #33171 ) ; +#22568 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41246 ) ) ; +#22569 = SURFACE_STYLE_FILL_AREA ( #40141 ) ; +#22572 = EDGE_CURVE ( 'NONE', #13136, #21455, #4702, .T. ) ; +#22571 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#22570 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25875 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34037, #24600, #24018 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22573 = ORIENTED_EDGE ( 'NONE', *, *, #12244, .T. ) ; +#22574 = FILL_AREA_STYLE ('',( #22432 ) ) ; +#22575 = CIRCLE ( 'NONE', #21044, 0.9999999999999995600 ) ; +#22576 = EDGE_LOOP ( 'NONE', ( #34324, #28161, #31978, #9036 ) ) ; +#22577 = SURFACE_SIDE_STYLE ('',( #33311 ) ) ; +#22578 = FILL_AREA_STYLE_COLOUR ( '', #39402 ) ; +#22579 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#22580 = LINE ( 'NONE', #10093, #13987 ) ; +#22582 = AXIS2_PLACEMENT_3D ( 'NONE', #11162, #37017, #1609 ) ; +#22581 = AXIS2_PLACEMENT_3D ( 'NONE', #8054, #30395, #17570 ) ; +#22583 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#22584 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22585 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, -0.7071067811865483500 ) ) ; +#22586 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#22587 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#22588 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#22589 = ORIENTED_EDGE ( 'NONE', *, *, #36609, .F. ) ; +#22590 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39236, 'distance_accuracy_value', 'NONE'); +#22591 = FILL_AREA_STYLE ('',( #38403 ) ) ; +#22592 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#22593 = VERTEX_POINT ( 'NONE', #8941 ) ; +#22594 = FACE_OUTER_BOUND ( 'NONE', #39228, .T. ) ; +#22595 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22596 = EDGE_CURVE ( 'NONE', #12491, #14035, #35004, .T. ) ; +#22597 = VERTEX_POINT ( 'NONE', #25239 ) ; +#22598 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22599 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#22600 = VERTEX_POINT ( 'NONE', #12467 ) ; +#22601 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#22602 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#22603 = CARTESIAN_POINT ( 'NONE', ( 0.2500000000000031600, 0.2800017452961687200, -6.749999999999999100 ) ) ; +#22604 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.499998254703840000, -5.049999999999993600 ) ) ; +#22605 = EDGE_CURVE ( 'NONE', #3733, #19904, #39524, .T. ) ; +#22606 = CARTESIAN_POINT ( 'NONE', ( -3.179314575050762300, -0.5999999999999996400, -3.249999999999999600 ) ) ; +#22607 = ORIENTED_EDGE ( 'NONE', *, *, #22426, .F. ) ; +#22608 = ORIENTED_EDGE ( 'NONE', *, *, #3406, .T. ) ; +#22609 = LINE ( 'NONE', #27373, #10965 ) ; +#22610 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37763 ) ) ; +#22611 = AXIS2_PLACEMENT_3D ( 'NONE', #24472, #30952, #27567 ) ; +#22612 = FILL_AREA_STYLE ('',( #12300 ) ) ; +#22613 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#22614 = ADVANCED_FACE ( 'NONE', ( #24397 ), #39142, .F. ) ; +#22615 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31455 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35456, #19092, #28392 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22616 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5288 ) ) ; +#22617 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#22619 = EDGE_CURVE ( 'NONE', #15157, #25421, #9732, .T. ) ; +#22618 = AXIS2_PLACEMENT_3D ( 'NONE', #28143, #15433, #25600 ) ; +#22620 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22621 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.407492542097303100E-015, -1.000000000000000000 ) ) ; +#22622 = ORIENTED_EDGE ( 'NONE', *, *, #23648, .T. ) ; +#22623 = CIRCLE ( 'NONE', #31028, 1.200001745296169800 ) ; +#22624 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.730424212713734600, -1.049979056049130000 ) ) ; +#22626 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#22625 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#22627 = AXIS2_PLACEMENT_3D ( 'NONE', #3208, #9388, #35549 ) ; +#22628 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #223 ) ) ; +#22629 = ORIENTED_EDGE ( 'NONE', *, *, #9265, .F. ) ; +#22630 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#22631 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 10.30000000000000100, -1.250000000000000000 ) ) ; +#22632 = STYLED_ITEM ( 'NONE', ( #8241 ), #32104 ) ; +#22633 = CARTESIAN_POINT ( 'NONE', ( 2.400000000000000400, -1.499998254703822000, -5.049999999999993600 ) ) ; +#22634 = FACE_OUTER_BOUND ( 'NONE', #7679, .T. ) ; +#22635 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22636 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#22637 = ORIENTED_EDGE ( 'NONE', *, *, #33206, .F. ) ; +#22638 = ORIENTED_EDGE ( 'NONE', *, *, #2899, .T. ) ; +#22639 = ORIENTED_EDGE ( 'NONE', *, *, #23349, .T. ) ; +#22640 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22641 = PLANE ( 'NONE', #15204 ) ; +#22642 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22643 = PRESENTATION_STYLE_ASSIGNMENT (( #16912 ) ) ; +#22644 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#22645 = CIRCLE ( 'NONE', #27528, 0.1000000000000001600 ) ; +#22646 = VECTOR ( 'NONE', #40073, 1000.000000000000000 ) ; +#22647 = ORIENTED_EDGE ( 'NONE', *, *, #14801, .T. ) ; +#22648 = CARTESIAN_POINT ( 'NONE', ( 3.044999999995900100, -0.2999999999999999900, -1.517157287555538800 ) ) ; +#22649 = LINE ( 'NONE', #30149, #15554 ) ; +#22650 = EDGE_LOOP ( 'NONE', ( #283, #22806, #35120, #25884, #37399, #20152, #40568, #23293, #18611, #12985, #4186, #33018, #4769, #15630, #11052, #6632, #22955, #36404, #34899, #7756, #20282, #25749, #34840, #24653, #6727, #21380, #13416, #14419, #1116, #40824, #15889, #4370, #17435, #7877, #26502, #4703, #40074, #12889, #13681, #25540, #12873, #19178, #23198, #39600, #33914, #28404, #7332, #27961, #30838, #1879, #17298, #9593, #6077, #23296, #27804, #814, #15074, #327 ) ) ; +#22651 = SURFACE_STYLE_FILL_AREA ( #6261 ) ; +#22652 = VECTOR ( 'NONE', #6984, 1000.000000000000000 ) ; +#22653 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.8400000000000000800 ) ) ; +#22654 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22655 = FILL_AREA_STYLE_COLOUR ( '', #23903 ) ; +#22656 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18840, 'distance_accuracy_value', 'NONE'); +#22657 = FILL_AREA_STYLE_COLOUR ( '', #26698 ) ; +#22658 = ORIENTED_EDGE ( 'NONE', *, *, #31689, .T. ) ; +#22659 = PRESENTATION_STYLE_ASSIGNMENT (( #28037 ) ) ; +#22660 = ADVANCED_FACE ( 'NONE', ( #15317 ), #35372, .F. ) ; +#22661 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, 0.2999999999999999900, 0.03300000000000001500 ) ) ; +#22662 = EDGE_CURVE ( 'NONE', #27123, #18033, #41544, .T. ) ; +#22663 = EDGE_CURVE ( 'NONE', #11113, #16333, #16802, .T. ) ; +#22664 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11903, 'distance_accuracy_value', 'NONE'); +#22665 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.8190279881558656400, 0.5737535661042597600 ) ) ; +#22666 = LINE ( 'NONE', #37091, #25682 ) ; +#22667 = EDGE_CURVE ( 'NONE', #9683, #39493, #13222, .T. ) ; +#22668 = ORIENTED_EDGE ( 'NONE', *, *, #41030, .T. ) ; +#22669 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22670 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22671 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10371 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18871, #3319, #3717 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22672 = ADVANCED_FACE ( 'NONE', ( #16285 ), #29267, .F. ) ; +#22673 = CARTESIAN_POINT ( 'NONE', ( 2.956761104396439700, -0.2083333333333335400, 1.138696624018185300 ) ) ; +#22674 = EDGE_CURVE ( 'NONE', #31236, #32578, #20372, .T. ) ; +#22675 = ORIENTED_EDGE ( 'NONE', *, *, #4275, .T. ) ; +#22676 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22677 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.084202172485504600E-015 ) ) ; +#22678 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31339 ), #12631 ) ; +#22679 = ORIENTED_EDGE ( 'NONE', *, *, #39787, .F. ) ; +#22680 = VERTEX_POINT ( 'NONE', #16016 ) ; +#22681 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#22682 = ORIENTED_EDGE ( 'NONE', *, *, #20638, .T. ) ; +#22683 = PRESENTATION_STYLE_ASSIGNMENT (( #12189 ) ) ; +#22684 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26231 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20252, #33361, #779 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22685 = CIRCLE ( 'NONE', #32884, 1.450380236995678900 ) ; +#22686 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#22688 = EDGE_CURVE ( 'NONE', #23388, #7601, #9691, .T. ) ; +#22687 = SURFACE_STYLE_USAGE ( .BOTH. , #25802 ) ; +#22689 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22690 = FILL_AREA_STYLE_COLOUR ( '', #41357 ) ; +#22691 = ORIENTED_EDGE ( 'NONE', *, *, #19536, .F. ) ; +#22692 = PRESENTATION_STYLE_ASSIGNMENT (( #35856 ) ) ; +#22693 = VERTEX_POINT ( 'NONE', #19288 ) ; +#22694 = FILL_AREA_STYLE_COLOUR ( '', #11009 ) ; +#22695 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22696 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#22698 = AXIS2_PLACEMENT_3D ( 'NONE', #34697, #15354, #18610 ) ; +#22697 = AXIS2_PLACEMENT_3D ( 'NONE', #33627, #40103, #1461 ) ; +#22699 = SURFACE_STYLE_USAGE ( .BOTH. , #9389 ) ; +#22700 = FILL_AREA_STYLE ('',( #32284 ) ) ; +#22701 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27050 ), #38630 ) ; +#22702 = SURFACE_SIDE_STYLE ('',( #27579 ) ) ; +#22703 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7193 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20593, #20442, #27062 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22704 = ORIENTED_EDGE ( 'NONE', *, *, #39902, .T. ) ; +#22705 = CIRCLE ( 'NONE', #4643, 0.8000000000000003800 ) ; +#22706 = DIRECTION ( 'NONE', ( 1.548860246407863600E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#22707 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5368 ), #2988 ) ; +#22708 = CIRCLE ( 'NONE', #37095, 0.1999999999999998400 ) ; +#22709 = SURFACE_STYLE_FILL_AREA ( #124 ) ; +#22710 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, 0.2800000000000027500, -0.2339555568811697600 ) ) ; +#22711 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.3699999999999849000, -5.200000000000000200 ) ) ; +#22712 = ADVANCED_FACE ( 'NONE', ( #12736 ), #3441, .F. ) ; +#22713 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#22714 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.630424214906979400, -1.050000000000000000 ) ) ; +#22715 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#22716 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#22717 = EDGE_LOOP ( 'NONE', ( #30086, #12488, #1019, #18969 ) ) ; +#22718 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#22719 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#22720 = ORIENTED_EDGE ( 'NONE', *, *, #11994, .T. ) ; +#22721 = LINE ( 'NONE', #35924, #27255 ) ; +#22722 = ORIENTED_EDGE ( 'NONE', *, *, #39247, .T. ) ; +#22723 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#22724 = CIRCLE ( 'NONE', #28438, 0.4000000000000000800 ) ; +#22725 = CARTESIAN_POINT ( 'NONE', ( -3.315809924354907100, 0.3499999999999622300, -1.650000000000000100 ) ) ; +#22726 = ORIENTED_EDGE ( 'NONE', *, *, #1003, .F. ) ; +#22727 = CARTESIAN_POINT ( 'NONE', ( -4.425000000000014000, -1.999998254703822400, -2.599999999999999600 ) ) ; +#22728 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875040000E-015, 6.056601140521967000E-031 ) ) ; +#22729 = FILL_AREA_STYLE_COLOUR ( '', #20934 ) ; +#22730 = ORIENTED_EDGE ( 'NONE', *, *, #31329, .T. ) ; +#22731 = ORIENTED_EDGE ( 'NONE', *, *, #22441, .T. ) ; +#22732 = EDGE_CURVE ( 'NONE', #13604, #25185, #17311, .T. ) ; +#22733 = CIRCLE ( 'NONE', #17077, 0.3600000000000078700 ) ; +#22734 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#22735 = EDGE_CURVE ( 'NONE', #38105, #36319, #36509, .T. ) ; +#22736 = ORIENTED_EDGE ( 'NONE', *, *, #26696, .T. ) ; +#22737 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.09999999999998375500, -1.749999999999999800 ) ) ; +#22738 = SURFACE_STYLE_USAGE ( .BOTH. , #9986 ) ; +#22739 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745296168900, -3.514459358809377300 ) ) ; +#22740 = STYLED_ITEM ( 'NONE', ( #34875 ), #13532 ) ; +#22741 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22742 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10530 ), #26524 ) ; +#22743 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24103, 'distance_accuracy_value', 'NONE'); +#22744 = CARTESIAN_POINT ( 'NONE', ( -2.945000000000000300, -0.5999999999999998700, -3.249999999999999600 ) ) ; +#22745 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27632 ), #4625 ) ; +#22746 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.480001745296170200, -4.099999999999999600 ) ) ; +#22747 = AXIS2_PLACEMENT_3D ( 'NONE', #30886, #40612, #5182 ) ; +#22748 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#22749 = ORIENTED_EDGE ( 'NONE', *, *, #743, .F. ) ; +#22750 = LINE ( 'NONE', #286, #19249 ) ; +#22752 = EDGE_CURVE ( 'NONE', #32808, #9560, #19348, .T. ) ; +#22751 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7579 ), #27640 ) ; +#22753 = ORIENTED_EDGE ( 'NONE', *, *, #35745, .T. ) ; +#22754 = STYLED_ITEM ( 'NONE', ( #9629 ), #9091 ) ; +#22755 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, -2.322941965694886000, -1.250000000000000000 ) ) ; +#22756 = EDGE_LOOP ( 'NONE', ( #30564, #41294, #7958, #4224 ) ) ; +#22757 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22758 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#22759 = EDGE_LOOP ( 'NONE', ( #14767, #28181, #36243, #12288 ) ) ; +#22760 = VECTOR ( 'NONE', #5045, 1000.000000000000000 ) ; +#22761 = STYLED_ITEM ( 'NONE', ( #11060 ), #24834 ) ; +#22762 = VECTOR ( 'NONE', #20953, 1000.000000000000000 ) ; +#22763 = PRESENTATION_STYLE_ASSIGNMENT (( #7212 ) ) ; +#22764 = CYLINDRICAL_SURFACE ( 'NONE', #33389, 0.2000000000000000900 ) ; +#22765 = FILL_AREA_STYLE_COLOUR ( '', #40005 ) ; +#22766 = ORIENTED_EDGE ( 'NONE', *, *, #9881, .F. ) ; +#22767 = SURFACE_STYLE_USAGE ( .BOTH. , #16683 ) ; +#22768 = SURFACE_SIDE_STYLE ('',( #31559 ) ) ; +#22769 = CIRCLE ( 'NONE', #34747, 0.3000000000000007700 ) ; +#22770 = VERTEX_POINT ( 'NONE', #32800 ) ; +#22771 = ORIENTED_EDGE ( 'NONE', *, *, #14555, .F. ) ; +#22772 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#22773 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#22774 = CLOSED_SHELL ( 'NONE', ( #5563, #34536, #19296, #6711, #31042, #20558 ) ) ; +#22775 = SURFACE_STYLE_FILL_AREA ( #18779 ) ; +#22776 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000800, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#22777 = FACE_OUTER_BOUND ( 'NONE', #39995, .T. ) ; +#22778 = VECTOR ( 'NONE', #33102, 1000.000000000000000 ) ; +#22780 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#22779 = SURFACE_STYLE_USAGE ( .BOTH. , #13158 ) ; +#22781 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22782 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.730380239188924300, -0.8400209439508702400 ) ) ; +#22783 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -2.031000000000000600, -2.294459358809383800 ) ) ; +#22784 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22785 = EDGE_CURVE ( 'NONE', #41621, #30797, #21873, .T. ) ; +#22786 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.380001745296165500, -6.900000000000000400 ) ) ; +#22787 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -5.475000000000000500 ) ) ; +#22788 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244516300E-016 ) ) ; +#22789 = EDGE_CURVE ( 'NONE', #22162, #39138, #3160, .T. ) ; +#22790 = AXIS2_PLACEMENT_3D ( 'NONE', #30348, #14256, #17088 ) ; +#22791 = ORIENTED_EDGE ( 'NONE', *, *, #35031, .T. ) ; +#22792 = SURFACE_STYLE_USAGE ( .BOTH. , #23203 ) ; +#22793 = MANIFOLD_SOLID_BREP ( '1-1-solid20', #29312 ) ; +#22794 = SURFACE_STYLE_FILL_AREA ( #41209 ) ; +#22795 = VECTOR ( 'NONE', #1716, 1000.000000000000000 ) ; +#22796 = VERTEX_POINT ( 'NONE', #39850 ) ; +#22797 = EDGE_LOOP ( 'NONE', ( #14053, #25912, #6160, #37653 ) ) ; +#22798 = LINE ( 'NONE', #6066, #14220 ) ; +#22799 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17121 ) ) ; +#22800 = LINE ( 'NONE', #39741, #17258 ) ; +#22801 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#22802 = FILL_AREA_STYLE ('',( #32666 ) ) ; +#22803 = ORIENTED_EDGE ( 'NONE', *, *, #1852, .T. ) ; +#22804 = AXIS2_PLACEMENT_3D ( 'NONE', #25247, #18873, #5859 ) ; +#22805 = ORIENTED_EDGE ( 'NONE', *, *, #18114, .F. ) ; +#22806 = ORIENTED_EDGE ( 'NONE', *, *, #37509, .F. ) ; +#22807 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703821100, -6.800000000000001600 ) ) ; +#22808 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#22810 = AXIS2_PLACEMENT_3D ( 'NONE', #32817, #19724, #6431 ) ; +#22809 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19061 ) ) ; +#22811 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#22812 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#22814 = EDGE_CURVE ( 'NONE', #34730, #18824, #19334, .T. ) ; +#22813 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17139 ) ) ; +#22815 = ORIENTED_EDGE ( 'NONE', *, *, #17973, .T. ) ; +#22816 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22817 = LINE ( 'NONE', #16055, #31413 ) ; +#22818 = FACE_OUTER_BOUND ( 'NONE', #38231, .T. ) ; +#22819 = ORIENTED_EDGE ( 'NONE', *, *, #31507, .T. ) ; +#22820 = CIRCLE ( 'NONE', #38945, 1.450424212713734300 ) ; +#22821 = SURFACE_STYLE_USAGE ( .BOTH. , #26631 ) ; +#22823 = STYLED_ITEM ( 'NONE', ( #16673 ), #1285 ) ; +#22822 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22664 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11903, #21852, #22110 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22824 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000027500, -4.099999999999999600 ) ) ; +#22825 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -9.757819552369549400E-015, -1.000000000000000000 ) ) ; +#22826 = SURFACE_STYLE_FILL_AREA ( #17451 ) ; +#22827 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.380001745296134000, -6.031671842700004200 ) ) ; +#22828 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22829 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #262, #38754, #22673, #9787, #38473, #19315 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#22830 = SURFACE_STYLE_FILL_AREA ( #12349 ) ; +#22831 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #34034, #14549, #40800, #30926 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 5.560451059366180900, 6.283185307179586200 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956581100, 0.9569428977956581100, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#22832 = ADVANCED_FACE ( 'NONE', ( #19816 ), #39712, .F. ) ; +#22833 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.367138801244516800E-016, -1.000000000000000000 ) ) ; +#22834 = ORIENTED_EDGE ( 'NONE', *, *, #35319, .T. ) ; +#22835 = FILL_AREA_STYLE_COLOUR ( '', #38401 ) ; +#22836 = PRESENTATION_STYLE_ASSIGNMENT (( #24000 ) ) ; +#22837 = CARTESIAN_POINT ( 'NONE', ( -0.6000000000000000900, -1.499998254703832000, -5.449999999999994000 ) ) ; +#22838 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22839 = SURFACE_STYLE_USAGE ( .BOTH. , #16891 ) ; +#22840 = ORIENTED_EDGE ( 'NONE', *, *, #7075, .T. ) ; +#22841 = LINE ( 'NONE', #23753, #16276 ) ; +#22842 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999988700, -1.400001745296177500, -7.500000000000006200 ) ) ; +#22843 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22844 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#22845 = ORIENTED_EDGE ( 'NONE', *, *, #20605, .F. ) ; +#22846 = EDGE_CURVE ( 'NONE', #34243, #33220, #17291, .T. ) ; +#22847 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22848 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#22849 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22850 = FILL_AREA_STYLE_COLOUR ( '', #35558 ) ; +#22851 = EDGE_CURVE ( 'NONE', #41198, #1102, #36979, .T. ) ; +#22852 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22853 = ORIENTED_EDGE ( 'NONE', *, *, #29294, .F. ) ; +#22854 = FILL_AREA_STYLE ('',( #33016 ) ) ; +#22855 = FACE_OUTER_BOUND ( 'NONE', #3474, .T. ) ; +#22856 = VERTEX_POINT ( 'NONE', #24424 ) ; +#22857 = VECTOR ( 'NONE', #16374, 1000.000000000000000 ) ; +#22858 = VECTOR ( 'NONE', #29362, 1000.000000000000000 ) ; +#22859 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.2800017452961689500, -5.150000000000000400 ) ) ; +#22860 = STYLED_ITEM ( 'NONE', ( #220 ), #15635 ) ; +#22861 = VECTOR ( 'NONE', #17828, 1000.000000000000000 ) ; +#22862 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22863 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 0.3500000000000000300, 0.6999999999999999600 ) ) ; +#22865 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#22864 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#22866 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 1.349831704744453000E-014, -3.999999999999997300 ) ) ; +#22867 = ADVANCED_FACE ( 'NONE', ( #27908 ), #30771, .F. ) ; +#22868 = VECTOR ( 'NONE', #2669, 1000.000000000000000 ) ; +#22869 = FACE_BOUND ( 'NONE', #28789, .T. ) ; +#22870 = ORIENTED_EDGE ( 'NONE', *, *, #39417, .T. ) ; +#22872 = EDGE_CURVE ( 'NONE', #29902, #11129, #24341, .T. ) ; +#22871 = AXIS2_PLACEMENT_3D ( 'NONE', #34968, #34832, #41323 ) ; +#22873 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#22874 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22875 = ORIENTED_EDGE ( 'NONE', *, *, #37873, .F. ) ; +#22876 = ADVANCED_FACE ( 'NONE', ( #152 ), #11707, .F. ) ; +#22877 = AXIS2_PLACEMENT_3D ( 'NONE', #17338, #39483, #26812 ) ; +#22878 = FILL_AREA_STYLE_COLOUR ( '', #22414 ) ; +#22879 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22880 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32900 ) ) ; +#22881 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#22882 = VERTEX_POINT ( 'NONE', #34018 ) ; +#22883 = SURFACE_STYLE_FILL_AREA ( #31539 ) ; +#22884 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999998900, -0.4343145750507615400, -3.279289321881345000 ) ) ; +#22885 = ORIENTED_EDGE ( 'NONE', *, *, #946, .T. ) ; +#22886 = EDGE_LOOP ( 'NONE', ( #13215, #8094, #24588, #30761 ) ) ; +#22887 = EDGE_LOOP ( 'NONE', ( #40335, #8885, #6552, #39451 ) ) ; +#22888 = LINE ( 'NONE', #1614, #24400 ) ; +#22889 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41063, 'distance_accuracy_value', 'NONE'); +#22890 = ORIENTED_EDGE ( 'NONE', *, *, #32325, .F. ) ; +#22891 = EDGE_LOOP ( 'NONE', ( #23904, #33960, #9518, #4539 ) ) ; +#22892 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -0.9500017452961654300, -5.599999999999999600 ) ) ; +#22893 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, -2.322941965694886000, -1.250000000000000000 ) ) ; +#22894 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#22895 = VECTOR ( 'NONE', #40140, 1000.000000000000000 ) ; +#22896 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#22897 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22898 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 2.710505431213761100E-016 ) ) ; +#22899 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#22900 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#22901 = EDGE_CURVE ( 'NONE', #20768, #11883, #1635, .T. ) ; +#22902 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22903 = EDGE_CURVE ( 'NONE', #36543, #14331, #9140, .T. ) ; +#22904 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -0.3500000000000000300, 0.3499999999999999800 ) ) ; +#22905 = SURFACE_SIDE_STYLE ('',( #16864 ) ) ; +#22906 = PRESENTATION_STYLE_ASSIGNMENT (( #37296 ) ) ; +#22907 = DIRECTION ( 'NONE', ( 4.336808689942020900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#22908 = ADVANCED_FACE ( 'NONE', ( #10159 ), #34440, .F. ) ; +#22909 = EDGE_CURVE ( 'NONE', #36673, #29220, #8633, .T. ) ; +#22910 = ORIENTED_EDGE ( 'NONE', *, *, #31811, .F. ) ; +#22911 = AXIS2_PLACEMENT_3D ( 'NONE', #8990, #15648, #22158 ) ; +#22912 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000900, 1.167528855492239800, -14.55000000000000100 ) ) ; +#22913 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.3420201433263654900, -0.9396926207856548500 ) ) ; +#22914 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#22915 = LINE ( 'NONE', #6064, #29472 ) ; +#22916 = EDGE_LOOP ( 'NONE', ( #11554, #39913, #19949, #16936 ) ) ; +#22917 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2319 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23440, #29354, #26271 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22918 = VERTEX_POINT ( 'NONE', #37401 ) ; +#22919 = PLANE ( 'NONE', #6057 ) ; +#22921 = EDGE_LOOP ( 'NONE', ( #20745, #21300, #31062, #16356 ) ) ; +#22920 = VECTOR ( 'NONE', #21854, 1000.000000000000000 ) ; +#22922 = ORIENTED_EDGE ( 'NONE', *, *, #16533, .F. ) ; +#22923 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#22924 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17818 ) ) ; +#22925 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#22926 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22929 = EDGE_CURVE ( 'NONE', #19904, #38828, #36939, .T. ) ; +#22928 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22927 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22140 ) ) ; +#22930 = FACE_BOUND ( 'NONE', #5615, .T. ) ; +#22931 = SURFACE_STYLE_FILL_AREA ( #4549 ) ; +#22932 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#22933 = VECTOR ( 'NONE', #9039, 1000.000000000000000 ) ; +#22934 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26300, 'distance_accuracy_value', 'NONE'); +#22936 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28019 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4815, #24028, #7906 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22935 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5618 ), #31598 ) ; +#22937 = SURFACE_STYLE_FILL_AREA ( #26445 ) ; +#22938 = CARTESIAN_POINT ( 'NONE', ( -4.450000000000001100, -1.400001745296194800, -7.500000000000000900 ) ) ; +#22939 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20816 ), #15089 ) ; +#22940 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.2800017452961687200, -6.200000000000001100 ) ) ; +#22941 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4645 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19040, #137, #6565 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22942 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15645 ), #4819 ) ; +#22943 = SURFACE_SIDE_STYLE ('',( #22709 ) ) ; +#22944 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875040400E-015, 0.0000000000000000000 ) ) ; +#22945 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.168401191219098200E-015, 0.0000000000000000000 ) ) ; +#22946 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#22947 = ORIENTED_EDGE ( 'NONE', *, *, #33319, .T. ) ; +#22948 = VECTOR ( 'NONE', #26910, 1000.000000000000000 ) ; +#22949 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#22950 = FILL_AREA_STYLE_COLOUR ( '', #24586 ) ; +#22951 = FACE_OUTER_BOUND ( 'NONE', #28030, .T. ) ; +#22952 = FILL_AREA_STYLE_COLOUR ( '', #29887 ) ; +#22953 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#22954 = SURFACE_STYLE_USAGE ( .BOTH. , #3070 ) ; +#22955 = ORIENTED_EDGE ( 'NONE', *, *, #38169, .F. ) ; +#22956 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22957 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#22958 = VERTEX_POINT ( 'NONE', #41604 ) ; +#22959 = ORIENTED_EDGE ( 'NONE', *, *, #32930, .T. ) ; +#22960 = VECTOR ( 'NONE', #34662, 1000.000000000000000 ) ; +#22961 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664843100, -1.380001745296171900, -4.400000000000000400 ) ) ; +#22962 = FACE_OUTER_BOUND ( 'NONE', #23913, .T. ) ; +#22963 = EDGE_CURVE ( 'NONE', #2376, #25787, #13703, .T. ) ; +#22964 = FILL_AREA_STYLE ('',( #26375 ) ) ; +#22965 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#22966 = SURFACE_STYLE_FILL_AREA ( #7047 ) ; +#22967 = AXIS2_PLACEMENT_3D ( 'NONE', #12307, #18837, #35348 ) ; +#22968 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22193, 'distance_accuracy_value', 'NONE'); +#22969 = SURFACE_STYLE_FILL_AREA ( #31546 ) ; +#22970 = ORIENTED_EDGE ( 'NONE', *, *, #3713, .T. ) ; +#22971 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#22972 = EDGE_CURVE ( 'NONE', #27046, #2376, #38939, .T. ) ; +#22973 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#22974 = AXIS2_PLACEMENT_3D ( 'NONE', #38449, #3029, #22373 ) ; +#22975 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14076, 'distance_accuracy_value', 'NONE'); +#22976 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#22977 = PRESENTATION_STYLE_ASSIGNMENT (( #18799 ) ) ; +#22978 = FILL_AREA_STYLE ('',( #26102 ) ) ; +#22979 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#22980 = AXIS2_PLACEMENT_3D ( 'NONE', #35554, #28775, #35414 ) ; +#22981 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#22982 = ORIENTED_EDGE ( 'NONE', *, *, #27934, .T. ) ; +#22984 = EDGE_CURVE ( 'NONE', #21617, #32808, #11671, .T. ) ; +#22983 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35099 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5200, #34170, #40637 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22985 = FACE_OUTER_BOUND ( 'NONE', #37500, .T. ) ; +#22986 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.2800017452961690000, -4.750000000000000000 ) ) ; +#22987 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#22988 = CARTESIAN_POINT ( 'NONE', ( 4.520424214906983100, -0.2800000000000025200, -1.149999999999999900 ) ) ; +#22989 = ORIENTED_EDGE ( 'NONE', *, *, #17860, .T. ) ; +#22991 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9970 ) ) ; +#22990 = AXIS2_PLACEMENT_3D ( 'NONE', #21317, #30884, #40608 ) ; +#22992 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #16258, #26483 ) ; +#22993 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#22994 = CYLINDRICAL_SURFACE ( 'NONE', #36728, 0.04999999999999969700 ) ; +#22995 = FACE_OUTER_BOUND ( 'NONE', #11344, .T. ) ; +#22997 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5278 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34387, #27332, #14624 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#22996 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40301 ), #37359 ) ; +#22998 = SURFACE_STYLE_USAGE ( .BOTH. , #3241 ) ; +#22999 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -1.139998254717367300, -5.049996877890552400 ) ) ; +#23000 = SURFACE_SIDE_STYLE ('',( #36024 ) ) ; +#23001 = ORIENTED_EDGE ( 'NONE', *, *, #14631, .F. ) ; +#23002 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31654 ), #7837 ) ; +#23003 = VECTOR ( 'NONE', #99, 1000.000000000000000 ) ; +#23004 = ORIENTED_EDGE ( 'NONE', *, *, #17172, .T. ) ; +#23005 = SURFACE_STYLE_FILL_AREA ( #11627 ) ; +#23006 = VECTOR ( 'NONE', #31944, 1000.000000000000100 ) ; +#23007 = FACE_OUTER_BOUND ( 'NONE', #19706, .T. ) ; +#23008 = FACE_OUTER_BOUND ( 'NONE', #36912, .T. ) ; +#23009 = ORIENTED_EDGE ( 'NONE', *, *, #36957, .F. ) ; +#23010 = DIRECTION ( 'NONE', ( 0.08715574274766037200, 1.761828530288942700E-015, -0.9961946980917453200 ) ) ; +#23011 = SURFACE_STYLE_FILL_AREA ( #16146 ) ; +#23012 = VECTOR ( 'NONE', #13435, 1000.000000000000000 ) ; +#23013 = PLANE ( 'NONE', #38690 ) ; +#23014 = LINE ( 'NONE', #5816, #14432 ) ; +#23015 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.807003620809177100E-016, -1.000000000000000000 ) ) ; +#23016 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23017 = SURFACE_SIDE_STYLE ('',( #10203 ) ) ; +#23018 = EDGE_LOOP ( 'NONE', ( #10318, #41480, #31829, #26045 ) ) ; +#23019 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#23020 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#23021 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23022 = EDGE_CURVE ( 'NONE', #35578, #26001, #22555, .T. ) ; +#23023 = PLANE ( 'NONE', #28382 ) ; +#23024 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703822500, -2.599999999999999600 ) ) ; +#23025 = ADVANCED_FACE ( 'NONE', ( #30891 ), #38364, .F. ) ; +#23026 = FILL_AREA_STYLE ('',( #32628 ) ) ; +#23027 = EDGE_CURVE ( 'NONE', #5585, #11869, #27866, .T. ) ; +#23028 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2226 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #892, #4078, #26699 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23029 = VERTEX_POINT ( 'NONE', #28778 ) ; +#23030 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.9500017452961654300, -5.075000000000000200 ) ) ; +#23031 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#23032 = FILL_AREA_STYLE_COLOUR ( '', #19952 ) ; +#23033 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36047 ), #28179 ) ; +#23034 = ORIENTED_EDGE ( 'NONE', *, *, #15551, .F. ) ; +#23035 = VERTEX_POINT ( 'NONE', #15768 ) ; +#23036 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#23037 = VERTEX_POINT ( 'NONE', #28495 ) ; +#23038 = SURFACE_SIDE_STYLE ('',( #34338 ) ) ; +#23039 = PRESENTATION_STYLE_ASSIGNMENT (( #16107 ) ) ; +#23040 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38359 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6406, #22781, #6663 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23041 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23042 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12547, 'distance_accuracy_value', 'NONE'); +#23043 = PLANE ( 'NONE', #9112 ) ; +#23044 = VECTOR ( 'NONE', #37430, 1000.000000000000000 ) ; +#23045 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.499998254703827100, -5.449999999999994000 ) ) ; +#23046 = VERTEX_POINT ( 'NONE', #21895 ) ; +#23047 = AXIS2_PLACEMENT_3D ( 'NONE', #26439, #13278, #29670 ) ; +#23048 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#23049 = VECTOR ( 'NONE', #9772, 1000.000000000000000 ) ; +#23050 = ORIENTED_EDGE ( 'NONE', *, *, #8044, .F. ) ; +#23051 = STYLED_ITEM ( 'NONE', ( #38075 ), #18407 ) ; +#23052 = VECTOR ( 'NONE', #30692, 1000.000000000000000 ) ; +#23053 = STYLED_ITEM ( 'NONE', ( #23350 ), #29897 ) ; +#23054 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#23055 = FILL_AREA_STYLE_COLOUR ( '', #17093 ) ; +#23056 = PRESENTATION_STYLE_ASSIGNMENT (( #35407 ) ) ; +#23057 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23058 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, 10.30000000000000100, -1.250000000000000000 ) ) ; +#23060 = EDGE_CURVE ( 'NONE', #5131, #4084, #110, .T. ) ; +#23059 = STYLED_ITEM ( 'NONE', ( #33747 ), #34715 ) ; +#23061 = LINE ( 'NONE', #9944, #21599 ) ; +#23062 = CARTESIAN_POINT ( 'NONE', ( 3.245000000091249800, -0.3499999999999999800, -1.649999999999999700 ) ) ; +#23063 = FILL_AREA_STYLE_COLOUR ( '', #21507 ) ; +#23064 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#23066 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41202 ), #10855 ) ; +#23065 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39013 ) ) ; +#23067 = DIRECTION ( 'NONE', ( 2.168401191219098200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23068 = LINE ( 'NONE', #1664, #7405 ) ; +#23069 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#23070 = ADVANCED_FACE ( 'NONE', ( #25835 ), #12653, .F. ) ; +#23071 = VECTOR ( 'NONE', #13882, 1000.000000000000000 ) ; +#23072 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#23073 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23074 = VERTEX_POINT ( 'NONE', #15511 ) ; +#23075 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23076 = FACE_OUTER_BOUND ( 'NONE', #32601, .T. ) ; +#23077 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14654, 'distance_accuracy_value', 'NONE'); +#23078 = ORIENTED_EDGE ( 'NONE', *, *, #35563, .F. ) ; +#23079 = ORIENTED_EDGE ( 'NONE', *, *, #33049, .F. ) ; +#23080 = EDGE_LOOP ( 'NONE', ( #1390, #13732, #28520, #14782 ) ) ; +#23081 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#23082 = SURFACE_STYLE_FILL_AREA ( #29305 ) ; +#23083 = ADVANCED_FACE ( 'NONE', ( #15729 ), #25542, .F. ) ; +#23084 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23085 = SURFACE_SIDE_STYLE ('',( #40830 ) ) ; +#23086 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, 2.322941965694886000, -1.250000000000000000 ) ) ; +#23087 = LINE ( 'NONE', #12360, #12983 ) ; +#23088 = FILL_AREA_STYLE ('',( #23507 ) ) ; +#23089 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23090 = ORIENTED_EDGE ( 'NONE', *, *, #6088, .T. ) ; +#23091 = EDGE_CURVE ( 'NONE', #35739, #28695, #587, .T. ) ; +#23092 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23093 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23094 = EDGE_CURVE ( 'NONE', #8346, #16611, #10118, .T. ) ; +#23095 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2267 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40831, #37732, #2329 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23096 = CIRCLE ( 'NONE', #34981, 0.1000000000000001600 ) ; +#23097 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23098 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -2.294459358809384700 ) ) ; +#23099 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23100 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, 0.0000000000000000000 ) ) ; +#23101 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -5.700000000000000200 ) ) ; +#23102 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #32581, #715, #4321, #30024, #20464, #13932 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#23103 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8729 ), #6342 ) ; +#23104 = CARTESIAN_POINT ( 'NONE', ( -3.100000000000000100, -1.499998254703840000, -5.049999999999993600 ) ) ; +#23105 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.499998254703826200, -6.699999999999994000 ) ) ; +#23106 = CARTESIAN_POINT ( 'NONE', ( 2.149999999999999900, -1.380001745296129100, -6.031671842700004200 ) ) ; +#23107 = ORIENTED_EDGE ( 'NONE', *, *, #6455, .F. ) ; +#23108 = AXIS2_PLACEMENT_3D ( 'NONE', #20187, #23404, #20333 ) ; +#23109 = PLANE ( 'NONE', #25736 ) ; +#23110 = PRESENTATION_STYLE_ASSIGNMENT (( #39439 ) ) ; +#23112 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23111 = STYLED_ITEM ( 'NONE', ( #41135 ), #31921 ) ; +#23113 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23114 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7135 ) ) ; +#23115 = ORIENTED_EDGE ( 'NONE', *, *, #815, .T. ) ; +#23116 = ORIENTED_EDGE ( 'NONE', *, *, #34979, .F. ) ; +#23117 = CIRCLE ( 'NONE', #10835, 0.04999999999999969700 ) ; +#23119 = EDGE_CURVE ( 'NONE', #854, #19187, #13666, .T. ) ; +#23118 = STYLED_ITEM ( 'NONE', ( #2940 ), #36235 ) ; +#23120 = SURFACE_STYLE_FILL_AREA ( #22591 ) ; +#23121 = CARTESIAN_POINT ( 'NONE', ( -4.750000000000003600, -1.009999999999999100, -6.861124800398366500 ) ) ; +#23122 = ADVANCED_FACE ( 'NONE', ( #25799 ), #16623, .F. ) ; +#23123 = ORIENTED_EDGE ( 'NONE', *, *, #5025, .T. ) ; +#23124 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23125 = VERTEX_POINT ( 'NONE', #23106 ) ; +#23126 = EDGE_LOOP ( 'NONE', ( #39413, #29510, #7792, #35721 ) ) ; +#23127 = SURFACE_STYLE_FILL_AREA ( #41498 ) ; +#23128 = LINE ( 'NONE', #36899, #3899 ) ; +#23130 = STYLED_ITEM ( 'NONE', ( #12523 ), #1583 ) ; +#23129 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41259 ), #25328 ) ; +#23131 = FILL_AREA_STYLE ('',( #33154 ) ) ; +#23132 = FACE_OUTER_BOUND ( 'NONE', #31989, .T. ) ; +#23133 = SURFACE_SIDE_STYLE ('',( #34003 ) ) ; +#23134 = ORIENTED_EDGE ( 'NONE', *, *, #15551, .T. ) ; +#23135 = FILL_AREA_STYLE_COLOUR ( '', #29966 ) ; +#23136 = ORIENTED_EDGE ( 'NONE', *, *, #4120, .F. ) ; +#23137 = FACE_OUTER_BOUND ( 'NONE', #23945, .T. ) ; +#23138 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#23139 = PLANE ( 'NONE', #15932 ) ; +#23140 = PRESENTATION_STYLE_ASSIGNMENT (( #5757 ) ) ; +#23141 = PLANE ( 'NONE', #16439 ) ; +#23142 = ORIENTED_EDGE ( 'NONE', *, *, #31533, .T. ) ; +#23143 = VECTOR ( 'NONE', #18129, 1000.000000000000000 ) ; +#23144 = SURFACE_STYLE_USAGE ( .BOTH. , #29634 ) ; +#23145 = CARTESIAN_POINT ( 'NONE', ( 2.000000000000000000, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#23146 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, 0.2800000000000027500, -0.2339555568811697600 ) ) ; +#23147 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23148 = FILL_AREA_STYLE_COLOUR ( '', #22599 ) ; +#23149 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#23150 = EDGE_CURVE ( 'NONE', #14272, #38280, #39435, .T. ) ; +#23151 = ORIENTED_EDGE ( 'NONE', *, *, #4990, .T. ) ; +#23153 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.380001745296136400, -5.000000000000000000 ) ) ; +#23152 = SURFACE_STYLE_USAGE ( .BOTH. , #10557 ) ; +#23154 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23155 = EDGE_CURVE ( 'NONE', #20628, #30331, #33375, .T. ) ; +#23156 = ORIENTED_EDGE ( 'NONE', *, *, #24927, .F. ) ; +#23157 = VECTOR ( 'NONE', #10356, 1000.000000000000000 ) ; +#23158 = VERTEX_POINT ( 'NONE', #6319 ) ; +#23159 = FILL_AREA_STYLE ('',( #38546 ) ) ; +#23160 = ORIENTED_EDGE ( 'NONE', *, *, #5770, .F. ) ; +#23161 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35278 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40599, #21166, #37232 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23162 = SURFACE_SIDE_STYLE ('',( #40199 ) ) ; +#23163 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664843100, -1.380001745296171900, -4.400000000000000400 ) ) ; +#23164 = ORIENTED_EDGE ( 'NONE', *, *, #29212, .T. ) ; +#23165 = PRESENTATION_STYLE_ASSIGNMENT (( #29016 ) ) ; +#23166 = EDGE_LOOP ( 'NONE', ( #20412, #23284, #14447, #1839 ) ) ; +#23167 = ORIENTED_EDGE ( 'NONE', *, *, #12058, .T. ) ; +#23168 = FILL_AREA_STYLE_COLOUR ( '', #1179 ) ; +#23169 = CARTESIAN_POINT ( 'NONE', ( -3.244999999999999700, 0.3499999999999999800, -1.649999999997499900 ) ) ; +#23170 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29320 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28085, #24732, #8975 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23171 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.843143693225520000E-015, 0.0000000000000000000 ) ) ; +#23172 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4725, 'distance_accuracy_value', 'NONE'); +#23173 = ADVANCED_FACE ( 'NONE', ( #7575 ), #29032, .F. ) ; +#23175 = EDGE_CURVE ( 'NONE', #1280, #7548, #7082, .T. ) ; +#23174 = AXIS2_PLACEMENT_3D ( 'NONE', #9457, #38692, #9598 ) ; +#23176 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23177 = ORIENTED_EDGE ( 'NONE', *, *, #28358, .F. ) ; +#23178 = SURFACE_STYLE_USAGE ( .BOTH. , #26298 ) ; +#23179 = PRESENTATION_STYLE_ASSIGNMENT (( #1261 ) ) ; +#23180 = DIRECTION ( 'NONE', ( 3.077917520101935200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23181 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#23182 = VECTOR ( 'NONE', #14454, 1000.000000000000000 ) ; +#23184 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3656 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35496, #19828, #38990 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23183 = AXIS2_PLACEMENT_3D ( 'NONE', #38595, #12339, #18869 ) ; +#23185 = STYLED_ITEM ( 'NONE', ( #27428 ), #39947 ) ; +#23186 = CARTESIAN_POINT ( 'NONE', ( -3.244999999999999700, 0.2999999999999999900, -1.649999999999999900 ) ) ; +#23187 = FILL_AREA_STYLE ('',( #19966 ) ) ; +#23188 = LINE ( 'NONE', #39622, #28744 ) ; +#23189 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.499998254703827700, -6.299999999999993600 ) ) ; +#23190 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, 0.07499999999999999700, -0.008874195005612458100 ) ) ; +#23191 = PLANE ( 'NONE', #20174 ) ; +#23192 = SURFACE_SIDE_STYLE ('',( #22288 ) ) ; +#23193 = ORIENTED_EDGE ( 'NONE', *, *, #35978, .F. ) ; +#23194 = LINE ( 'NONE', #18311, #17670 ) ; +#23195 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23196 = LINE ( 'NONE', #27852, #14614 ) ; +#23197 = FILL_AREA_STYLE ('',( #23063 ) ) ; +#23198 = ORIENTED_EDGE ( 'NONE', *, *, #9716, .F. ) ; +#23199 = ORIENTED_EDGE ( 'NONE', *, *, #27442, .T. ) ; +#23200 = PRESENTATION_STYLE_ASSIGNMENT (( #20750 ) ) ; +#23201 = FACE_OUTER_BOUND ( 'NONE', #552, .T. ) ; +#23202 = VECTOR ( 'NONE', #29190, 1000.000000000000000 ) ; +#23203 = SURFACE_SIDE_STYLE ('',( #20099 ) ) ; +#23204 = VECTOR ( 'NONE', #23402, 999.9999999999998900 ) ; +#23205 = ORIENTED_EDGE ( 'NONE', *, *, #22785, .F. ) ; +#23206 = ORIENTED_EDGE ( 'NONE', *, *, #3571, .T. ) ; +#23207 = ORIENTED_EDGE ( 'NONE', *, *, #12858, .F. ) ; +#23208 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23209 = SURFACE_STYLE_USAGE ( .BOTH. , #669 ) ; +#23210 = SURFACE_STYLE_USAGE ( .BOTH. , #16582 ) ; +#23211 = EDGE_CURVE ( 'NONE', #2452, #2027, #10618, .T. ) ; +#23212 = SURFACE_SIDE_STYLE ('',( #35919 ) ) ; +#23213 = ORIENTED_EDGE ( 'NONE', *, *, #7445, .T. ) ; +#23214 = LINE ( 'NONE', #33142, #18180 ) ; +#23215 = EDGE_CURVE ( 'NONE', #37314, #32356, #6094, .T. ) ; +#23216 = LINE ( 'NONE', #21319, #21765 ) ; +#23217 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#23218 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2171 ) ) ; +#23219 = LINE ( 'NONE', #24488, #537 ) ; +#23220 = CIRCLE ( 'NONE', #26920, 0.1999999999999998700 ) ; +#23221 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23222 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822000, -5.899999999999999500 ) ) ; +#23223 = EDGE_CURVE ( 'NONE', #9503, #11883, #30853, .T. ) ; +#23224 = CARTESIAN_POINT ( 'NONE', ( -3.840836932489093900, 0.6277549230426753300, -4.400000000000001200 ) ) ; +#23225 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#23226 = PRESENTATION_STYLE_ASSIGNMENT (( #39955 ) ) ; +#23227 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#23228 = PRESENTATION_STYLE_ASSIGNMENT (( #21286 ) ) ; +#23229 = ORIENTED_EDGE ( 'NONE', *, *, #16039, .T. ) ; +#23232 = EDGE_CURVE ( 'NONE', #15820, #2017, #20267, .T. ) ; +#23231 = AXIS2_PLACEMENT_3D ( 'NONE', #2179, #31911, #38534 ) ; +#23230 = FILL_AREA_STYLE_COLOUR ( '', #35942 ) ; +#23233 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.2699999999999848600, -5.199999999999999300 ) ) ; +#23234 = FILL_AREA_STYLE_COLOUR ( '', #30209 ) ; +#23235 = VECTOR ( 'NONE', #33127, 1000.000000000000000 ) ; +#23236 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23237 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#23238 = SURFACE_SIDE_STYLE ('',( #23082 ) ) ; +#23239 = LINE ( 'NONE', #37624, #3041 ) ; +#23240 = VERTEX_POINT ( 'NONE', #991 ) ; +#23241 = CIRCLE ( 'NONE', #41488, 0.8000000000000003800 ) ; +#23242 = ADVANCED_FACE ( 'NONE', ( #11626 ), #26946, .T. ) ; +#23243 = LINE ( 'NONE', #11886, #19219 ) ; +#23245 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21120 ), #32697 ) ; +#23244 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18140 ) ) ; +#23246 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23247 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -0.9500017452961654300, -4.775000000000000400 ) ) ; +#23248 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18241 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36450, #26556, #39939 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23249 = SURFACE_STYLE_FILL_AREA ( #11968 ) ; +#23250 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#23251 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18943 ), #13786 ) ; +#23252 = VERTEX_POINT ( 'NONE', #33134 ) ; +#23253 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -2.399999999999999500 ) ) ; +#23254 = ORIENTED_EDGE ( 'NONE', *, *, #23027, .F. ) ; +#23255 = ORIENTED_EDGE ( 'NONE', *, *, #13936, .T. ) ; +#23256 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3230, 'distance_accuracy_value', 'NONE'); +#23257 = VECTOR ( 'NONE', #989, 1000.000000000000000 ) ; +#23258 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23259 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 0.2999999999999999900, 0.6999999999999999600 ) ) ; +#23260 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23261 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#23262 = ORIENTED_EDGE ( 'NONE', *, *, #21800, .F. ) ; +#23263 = PLANE ( 'NONE', #21341 ) ; +#23264 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23265 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#23266 = FILL_AREA_STYLE_COLOUR ( '', #34323 ) ; +#23267 = FILL_AREA_STYLE ('',( #29465 ) ) ; +#23268 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, 0.2000000000000000100, -3.250000000000001300 ) ) ; +#23269 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9133, 'distance_accuracy_value', 'NONE'); +#23270 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23271 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#23272 = SURFACE_STYLE_FILL_AREA ( #17393 ) ; +#23273 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, -0.7071067811865483500 ) ) ; +#23274 = SURFACE_STYLE_FILL_AREA ( #17331 ) ; +#23275 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -1.050000000000000000 ) ) ; +#23276 = ORIENTED_EDGE ( 'NONE', *, *, #10451, .F. ) ; +#23277 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#23278 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23279 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#23280 = FACE_OUTER_BOUND ( 'NONE', #41351, .T. ) ; +#23281 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865475700, 0.7071067811865475700 ) ) ; +#23282 = ADVANCED_FACE ( 'NONE', ( #13130 ), #20604, .T. ) ; +#23283 = EDGE_CURVE ( 'NONE', #23240, #18896, #5566, .T. ) ; +#23284 = ORIENTED_EDGE ( 'NONE', *, *, #16903, .T. ) ; +#23285 = VECTOR ( 'NONE', #36519, 1000.000000000000000 ) ; +#23286 = EDGE_LOOP ( 'NONE', ( #3158, #8399, #19111, #27729 ) ) ; +#23287 = SURFACE_STYLE_USAGE ( .BOTH. , #10131 ) ; +#23288 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36017, 'distance_accuracy_value', 'NONE'); +#23289 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23290 = EDGE_CURVE ( 'NONE', #23348, #14370, #25294, .T. ) ; +#23291 = VECTOR ( 'NONE', #41138, 1000.000000000000000 ) ; +#23292 = LINE ( 'NONE', #23733, #17221 ) ; +#23293 = ORIENTED_EDGE ( 'NONE', *, *, #34535, .F. ) ; +#23294 = CIRCLE ( 'NONE', #38674, 0.05000000000000012800 ) ; +#23295 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10037 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9502, #22926, #38870 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23296 = ORIENTED_EDGE ( 'NONE', *, *, #18603, .F. ) ; +#23297 = EDGE_LOOP ( 'NONE', ( #7420, #3338, #10459, #38685, #12120 ) ) ; +#23298 = CARTESIAN_POINT ( 'NONE', ( 3.840836437790017500, 0.6277559398193054400, -4.549999999999998900 ) ) ; +#23299 = ADVANCED_FACE ( 'NONE', ( #6059 ), #1119, .F. ) ; +#23300 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.3500000000000000300, 0.3499999999999999800 ) ) ; +#23301 = ORIENTED_EDGE ( 'NONE', *, *, #9644, .T. ) ; +#23302 = STYLED_ITEM ( 'NONE', ( #4543 ), #37878 ) ; +#23303 = VERTEX_POINT ( 'NONE', #20171 ) ; +#23304 = STYLED_ITEM ( 'NONE', ( #28994 ), #18161 ) ; +#23305 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.949998254703821700, 0.0000000000000000000 ) ) ; +#23306 = PRESENTATION_STYLE_ASSIGNMENT (( #34580 ) ) ; +#23308 = STYLED_ITEM ( 'NONE', ( #4165 ), #5095 ) ; +#23307 = STYLED_ITEM ( 'NONE', ( #39910 ), #29408 ) ; +#23310 = EDGE_CURVE ( 'NONE', #9676, #28285, #1548, .T. ) ; +#23309 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, -2.322941965694886000, -1.250000000000000000 ) ) ; +#23311 = AXIS2_PLACEMENT_3D ( 'NONE', #26548, #4346, #13967 ) ; +#23312 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23313 = CARTESIAN_POINT ( 'NONE', ( -3.315809924354999900, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#23314 = FILL_AREA_STYLE_COLOUR ( '', #11155 ) ; +#23315 = AXIS2_PLACEMENT_3D ( 'NONE', #13492, #710, #23261 ) ; +#23316 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#23317 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#23318 = ORIENTED_EDGE ( 'NONE', *, *, #36173, .T. ) ; +#23319 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid27', #35217 ) ; +#23320 = VECTOR ( 'NONE', #11126, 1000.000000000000000 ) ; +#23321 = SURFACE_SIDE_STYLE ('',( #2306 ) ) ; +#23322 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, 0.2999999999999999900, -0.009872798070002637700 ) ) ; +#23323 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23324 = ORIENTED_EDGE ( 'NONE', *, *, #19730, .F. ) ; +#23325 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -2.322941965694886000, -1.250000000000000000 ) ) ; +#23326 = SURFACE_STYLE_FILL_AREA ( #23159 ) ; +#23327 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#23328 = FILL_AREA_STYLE ('',( #402 ) ) ; +#23329 = SURFACE_STYLE_USAGE ( .BOTH. , #10871 ) ; +#23330 = FILL_AREA_STYLE_COLOUR ( '', #36097 ) ; +#23331 = SURFACE_STYLE_FILL_AREA ( #32061 ) ; +#23332 = ORIENTED_EDGE ( 'NONE', *, *, #4152, .F. ) ; +#23333 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.380001745296139700, -4.781671842700004200 ) ) ; +#23334 = PRESENTATION_STYLE_ASSIGNMENT (( #40579 ) ) ; +#23336 = ADVANCED_FACE ( 'NONE', ( #32834 ), #8096, .F. ) ; +#23335 = ORIENTED_EDGE ( 'NONE', *, *, #10264, .T. ) ; +#23337 = FILL_AREA_STYLE ('',( #23609 ) ) ; +#23338 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#23339 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23340 = SURFACE_SIDE_STYLE ('',( #13496 ) ) ; +#23341 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -2.399999999999999500 ) ) ; +#23342 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1917, 'distance_accuracy_value', 'NONE'); +#23343 = CARTESIAN_POINT ( 'NONE', ( 2.000000000000000000, 0.3000000000000001600, -1.250000000000000000 ) ) ; +#23344 = FILL_AREA_STYLE_COLOUR ( '', #27338 ) ; +#23345 = VERTEX_POINT ( 'NONE', #39338 ) ; +#23346 = SURFACE_STYLE_USAGE ( .BOTH. , #33089 ) ; +#23347 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#23348 = VERTEX_POINT ( 'NONE', #30311 ) ; +#23349 = EDGE_CURVE ( 'NONE', #21167, #28695, #13091, .T. ) ; +#23350 = PRESENTATION_STYLE_ASSIGNMENT (( #9384 ) ) ; +#23351 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23352 = PLANE ( 'NONE', #20433 ) ; +#23353 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23354 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#23355 = EDGE_CURVE ( 'NONE', #15629, #564, #26784, .T. ) ; +#23356 = FACE_OUTER_BOUND ( 'NONE', #19269, .T. ) ; +#23357 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.07499999999999999700, 0.0000000000000000000 ) ) ; +#23358 = VECTOR ( 'NONE', #5168, 1000.000000000000000 ) ; +#23359 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4094, 'distance_accuracy_value', 'NONE'); +#23360 = AXIS2_PLACEMENT_3D ( 'NONE', #22218, #18977, #22486 ) ; +#23361 = EDGE_LOOP ( 'NONE', ( #12176, #5711, #37113, #15884 ) ) ; +#23362 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#23363 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14923 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7233, #13744, #16714 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23364 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36363 ), #12508 ) ; +#23365 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000100, -1.380001745296144800, -5.449999999999994000 ) ) ; +#23366 = DIRECTION ( 'NONE', ( 3.336029078258395200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23367 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -1.499998254703835300, -5.449999999999994000 ) ) ; +#23368 = ORIENTED_EDGE ( 'NONE', *, *, #2954, .F. ) ; +#23370 = STYLED_ITEM ( 'NONE', ( #30766 ), #5982 ) ; +#23369 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19061 ), #27699 ) ; +#23371 = SURFACE_STYLE_FILL_AREA ( #39088 ) ; +#23372 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23373 = LINE ( 'NONE', #34930, #3627 ) ; +#23375 = EDGE_CURVE ( 'NONE', #35305, #4181, #38861, .T. ) ; +#23374 = AXIS2_PLACEMENT_3D ( 'NONE', #34321, #18515, #15112 ) ; +#23376 = CONICAL_SURFACE ( 'NONE', #9219, 1.651303021499040300, 1.221730476395290800 ) ; +#23377 = SURFACE_STYLE_USAGE ( .BOTH. , #825 ) ; +#23378 = ORIENTED_EDGE ( 'NONE', *, *, #11474, .F. ) ; +#23379 = FILL_AREA_STYLE ('',( #33111 ) ) ; +#23380 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23381 = EDGE_LOOP ( 'NONE', ( #38145, #25837, #17676, #6 ) ) ; +#23382 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30793, 'distance_accuracy_value', 'NONE'); +#23384 = STYLED_ITEM ( 'NONE', ( #8513 ), #1498 ) ; +#23383 = STYLED_ITEM ( 'NONE', ( #1768 ), #26147 ) ; +#23385 = FILL_AREA_STYLE ('',( #22950 ) ) ; +#23386 = FILL_AREA_STYLE_COLOUR ( '', #23327 ) ; +#23387 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.2800017452961687200, -6.249999999999998200 ) ) ; +#23388 = VERTEX_POINT ( 'NONE', #33842 ) ; +#23389 = CYLINDRICAL_SURFACE ( 'NONE', #35109, 0.3000000000000001000 ) ; +#23390 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -5.075000000000000200 ) ) ; +#23391 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #26614, #7089, #36223, #19995 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.506138761591853300E-005 ), + .UNSPECIFIED. ) ; +#23392 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#23393 = FACE_OUTER_BOUND ( 'NONE', #16556, .T. ) ; +#23394 = SURFACE_SIDE_STYLE ('',( #36878 ) ) ; +#23395 = DIRECTION ( 'NONE', ( 6.056601140521966100E-031, 2.020499752019424000E-045, 1.000000000000000000 ) ) ; +#23396 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#23398 = FILL_AREA_STYLE_COLOUR ( '', #34698 ) ; +#23397 = FACE_OUTER_BOUND ( 'NONE', #21261, .T. ) ; +#23399 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#23400 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23401 = ORIENTED_EDGE ( 'NONE', *, *, #16295, .T. ) ; +#23402 = DIRECTION ( 'NONE', ( -0.9396926207859082100, -0.3420201433256694900, -4.188538737677058300E-017 ) ) ; +#23403 = EDGE_CURVE ( 'NONE', #29220, #15253, #16148, .T. ) ; +#23404 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#23405 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, 0.2000000000000000100, -18.77614000000000500 ) ) ; +#23406 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23407 = EDGE_CURVE ( 'NONE', #16611, #8828, #34348, .T. ) ; +#23408 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#23409 = SURFACE_STYLE_FILL_AREA ( #10252 ) ; +#23410 = VERTEX_POINT ( 'NONE', #36943 ) ; +#23411 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.380001745296130600, -6.699999999999994000 ) ) ; +#23412 = CARTESIAN_POINT ( 'NONE', ( -3.500000000000003600, -2.031000000000001500, -6.549999999999999800 ) ) ; +#23413 = ORIENTED_EDGE ( 'NONE', *, *, #19782, .T. ) ; +#23415 = ORIENTED_EDGE ( 'NONE', *, *, #1790, .F. ) ; +#23414 = LINE ( 'NONE', #15628, #4191 ) ; +#23416 = ORIENTED_EDGE ( 'NONE', *, *, #37690, .T. ) ; +#23417 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23418 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39108 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9959, #10396, #1002 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23419 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9991, 'distance_accuracy_value', 'NONE'); +#23420 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.380001745296133300, -4.781671842700004200 ) ) ; +#23421 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#23422 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.2800017452961688400, -5.200000000000001100 ) ) ; +#23423 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#23424 = VECTOR ( 'NONE', #25325, 1000.000000000000000 ) ; +#23425 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -2.367138801244516300E-016 ) ) ; +#23426 = ORIENTED_EDGE ( 'NONE', *, *, #25192, .F. ) ; +#23427 = STYLED_ITEM ( 'NONE', ( #37722 ), #20348 ) ; +#23428 = LINE ( 'NONE', #5396, #29498 ) ; +#23429 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7440 ) ) ; +#23430 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36662 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38413, #19110, #18822 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23431 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000003200, 0.3000000000000149200, -4.249999999999998200 ) ) ; +#23432 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23434 = EDGE_CURVE ( 'NONE', #37013, #29117, #16195, .T. ) ; +#23433 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10414 ), #25605 ) ; +#23435 = FILL_AREA_STYLE ('',( #30059 ) ) ; +#23436 = CARTESIAN_POINT ( 'NONE', ( 3.839743771154402000, 0.6300017452961683700, -4.549999999999999800 ) ) ; +#23437 = SURFACE_STYLE_USAGE ( .BOTH. , #10559 ) ; +#23439 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35624 ) ) ; +#23438 = AXIS2_PLACEMENT_3D ( 'NONE', #17942, #15249, #14810 ) ; +#23440 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23441 = FILL_AREA_STYLE_COLOUR ( '', #41028 ) ; +#23442 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34634 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16082, #19078, #22584 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23443 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22021 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4497, #33452, #20211 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23444 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#23445 = EDGE_LOOP ( 'NONE', ( #14338, #37131, #1020, #2504 ) ) ; +#23446 = ORIENTED_EDGE ( 'NONE', *, *, #34486, .F. ) ; +#23447 = FILL_AREA_STYLE ('',( #4226 ) ) ; +#23448 = ORIENTED_EDGE ( 'NONE', *, *, #30276, .F. ) ; +#23449 = CARTESIAN_POINT ( 'NONE', ( -4.750000000000003600, -0.7099999999999991900, -6.861124800398366500 ) ) ; +#23450 = DIRECTION ( 'NONE', ( 4.336808689942002000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23451 = VERTEX_POINT ( 'NONE', #30724 ) ; +#23453 = ADVANCED_FACE ( 'NONE', ( #26830 ), #20884, .T. ) ; +#23452 = VECTOR ( 'NONE', #3164, 1000.000000000000000 ) ; +#23454 = PRESENTATION_STYLE_ASSIGNMENT (( #27493 ) ) ; +#23455 = FILL_AREA_STYLE_COLOUR ( '', #18461 ) ; +#23456 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.499998254703836900, -5.049999999999993600 ) ) ; +#23457 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000008300, -0.7099999999999995200, -6.861124800398366500 ) ) ; +#23458 = FACE_OUTER_BOUND ( 'NONE', #34523, .T. ) ; +#23459 = CYLINDRICAL_SURFACE ( 'NONE', #38021, 0.05000000000000012800 ) ; +#23460 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#23461 = EDGE_CURVE ( 'NONE', #19746, #31175, #15138, .T. ) ; +#23463 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23462 = FILL_AREA_STYLE_COLOUR ( '', #35984 ) ; +#23464 = CIRCLE ( 'NONE', #98, 0.3000000000000003800 ) ; +#23465 = EDGE_CURVE ( 'NONE', #26190, #19755, #18195, .T. ) ; +#23466 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23467 = SURFACE_SIDE_STYLE ('',( #32486 ) ) ; +#23468 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23469 = EDGE_CURVE ( 'NONE', #3661, #3192, #17216, .T. ) ; +#23470 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35102 ), #26193 ) ; +#23471 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#23472 = CARTESIAN_POINT ( 'NONE', ( -2.956761104396439700, 0.2083333333333335400, 1.138696624018185300 ) ) ; +#23473 = PLANE ( 'NONE', #28968 ) ; +#23474 = ORIENTED_EDGE ( 'NONE', *, *, #11876, .T. ) ; +#23475 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#23476 = FILL_AREA_STYLE ('',( #17136 ) ) ; +#23477 = EDGE_LOOP ( 'NONE', ( #34098, #27499, #9733, #15642 ) ) ; +#23478 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -5.700000000000000200 ) ) ; +#23479 = AXIS2_PLACEMENT_3D ( 'NONE', #2828, #9251, #25537 ) ; +#23480 = LINE ( 'NONE', #1600, #14887 ) ; +#23481 = FILL_AREA_STYLE_COLOUR ( '', #17603 ) ; +#23482 = VERTEX_POINT ( 'NONE', #38035 ) ; +#23483 = AXIS2_PLACEMENT_3D ( 'NONE', #26307, #16694, #11020 ) ; +#23486 = EDGE_CURVE ( 'NONE', #22085, #21790, #36857, .T. ) ; +#23485 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36488 ), #275 ) ; +#23484 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23487 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.280001745296170300, -4.549999999999999800 ) ) ; +#23488 = ADVANCED_FACE ( 'NONE', ( #35409 ), #2501, .T. ) ; +#23489 = ORIENTED_EDGE ( 'NONE', *, *, #21243, .F. ) ; +#23490 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 0.3499999999999996400, -1.250000000000000000 ) ) ; +#23491 = LINE ( 'NONE', #32509, #11310 ) ; +#23492 = ORIENTED_EDGE ( 'NONE', *, *, #13175, .F. ) ; +#23494 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19997 ), #28078 ) ; +#23493 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34883 ), #13205 ) ; +#23495 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14862 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22434, #25693, #6327 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23496 = VERTEX_POINT ( 'NONE', #15463 ) ; +#23497 = AXIS2_PLACEMENT_3D ( 'NONE', #17295, #39581, #20572 ) ; +#23498 = VERTEX_POINT ( 'NONE', #37904 ) ; +#23499 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33775 ) ) ; +#23500 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23501 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23502 = VECTOR ( 'NONE', #30131, 1000.000000000000000 ) ; +#23503 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#23504 = ADVANCED_FACE ( 'NONE', ( #31302 ), #18716, .F. ) ; +#23505 = ORIENTED_EDGE ( 'NONE', *, *, #27808, .T. ) ; +#23506 = SURFACE_SIDE_STYLE ('',( #19331 ) ) ; +#23507 = FILL_AREA_STYLE_COLOUR ( '', #8475 ) ; +#23508 = FILL_AREA_STYLE_COLOUR ( '', #8919 ) ; +#23509 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31506, 'distance_accuracy_value', 'NONE'); +#23510 = SURFACE_STYLE_FILL_AREA ( #24449 ) ; +#23511 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23512 = PLANE ( 'NONE', #29418 ) ; +#23513 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23514 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760845000E-015 ) ) ; +#23515 = VERTEX_POINT ( 'NONE', #21706 ) ; +#23516 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -5.075000000000000200 ) ) ; +#23517 = EDGE_LOOP ( 'NONE', ( #37998, #18592, #12216, #30861, #21134, #11115 ) ) ; +#23518 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23519 = ORIENTED_EDGE ( 'NONE', *, *, #3658, .T. ) ; +#23520 = LINE ( 'NONE', #23842, #31103 ) ; +#23521 = EDGE_CURVE ( 'NONE', #28472, #7908, #36906, .T. ) ; +#23522 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000004700, 0.4300017452961689100, -5.150000000000000400 ) ) ; +#23523 = ORIENTED_EDGE ( 'NONE', *, *, #41099, .F. ) ; +#23524 = CARTESIAN_POINT ( 'NONE', ( -0.2500000000000031600, 0.4300017452961685800, -6.750000000000000000 ) ) ; +#23525 = ORIENTED_EDGE ( 'NONE', *, *, #39664, .F. ) ; +#23526 = LINE ( 'NONE', #9987, #8348 ) ; +#23527 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23528 = LINE ( 'NONE', #21414, #23976 ) ; +#23529 = SURFACE_SIDE_STYLE ('',( #15124 ) ) ; +#23530 = EDGE_CURVE ( 'NONE', #4681, #23348, #20774, .T. ) ; +#23531 = VECTOR ( 'NONE', #16890, 1000.000000000000200 ) ; +#23532 = LINE ( 'NONE', #21642, #38192 ) ; +#23533 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#23534 = ORIENTED_EDGE ( 'NONE', *, *, #38723, .T. ) ; +#23535 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23536 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9750, 'distance_accuracy_value', 'NONE'); +#23537 = LINE ( 'NONE', #25896, #10877 ) ; +#23538 = ADVANCED_FACE ( 'NONE', ( #15656 ), #18587, .F. ) ; +#23539 = DIRECTION ( 'NONE', ( 7.744301232039317900E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#23540 = SURFACE_STYLE_FILL_AREA ( #17981 ) ; +#23541 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23542 = AXIS2_PLACEMENT_3D ( 'NONE', #33688, #26944, #33552 ) ; +#23543 = LINE ( 'NONE', #2855, #40712 ) ; +#23544 = FILL_AREA_STYLE_COLOUR ( '', #21931 ) ; +#23545 = ORIENTED_EDGE ( 'NONE', *, *, #6461, .F. ) ; +#23546 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #328 ), #25727 ) ; +#23547 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#23548 = FILL_AREA_STYLE_COLOUR ( '', #5701 ) ; +#23549 = CARTESIAN_POINT ( 'NONE', ( 2.673205080756886800, 1.630001745296169500, -1.650000000000000800 ) ) ; +#23550 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6237 ), #14892 ) ; +#23551 = FILL_AREA_STYLE ('',( #33443 ) ) ; +#23552 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15347, 'distance_accuracy_value', 'NONE'); +#23554 = AXIS2_PLACEMENT_3D ( 'NONE', #28577, #2774, #15591 ) ; +#23553 = STYLED_ITEM ( 'NONE', ( #12665 ), #34081 ) ; +#23555 = SURFACE_SIDE_STYLE ('',( #945 ) ) ; +#23556 = VECTOR ( 'NONE', #24210, 1000.000000000000000 ) ; +#23557 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822000, -3.549261509947660100 ) ) ; +#23558 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000012400, -1.999998254703822900, -5.899999999999999500 ) ) ; +#23559 = SURFACE_STYLE_USAGE ( .BOTH. , #20911 ) ; +#23560 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23561 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#23562 = SURFACE_STYLE_USAGE ( .BOTH. , #39649 ) ; +#23563 = VERTEX_POINT ( 'NONE', #15038 ) ; +#23564 = CYLINDRICAL_SURFACE ( 'NONE', #33203, 0.3000000000000003800 ) ; +#23565 = VERTEX_POINT ( 'NONE', #15326 ) ; +#23566 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#23568 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23567 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 4.688441826964342300E-016 ) ) ; +#23569 = ORIENTED_EDGE ( 'NONE', *, *, #14866, .T. ) ; +#23570 = FACE_OUTER_BOUND ( 'NONE', #23734, .T. ) ; +#23571 = VERTEX_POINT ( 'NONE', #5280 ) ; +#23572 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.2999999999999999900, -1.399999999999999900 ) ) ; +#23573 = CIRCLE ( 'NONE', #17994, 0.2999999999999999300 ) ; +#23574 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.773004880385254100, -0.7580972011844128200 ) ) ; +#23575 = FILL_AREA_STYLE ('',( #20787 ) ) ; +#23576 = CIRCLE ( 'NONE', #20694, 0.04999999999999969700 ) ; +#23577 = CIRCLE ( 'NONE', #31651, 0.1000000000000002600 ) ; +#23578 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#23579 = ORIENTED_EDGE ( 'NONE', *, *, #26447, .T. ) ; +#23580 = VERTEX_POINT ( 'NONE', #31135 ) ; +#23581 = CARTESIAN_POINT ( 'NONE', ( 14.52500000000000900, -0.7099999999999663200, -6.861124800398366500 ) ) ; +#23582 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#23583 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23584 = FILL_AREA_STYLE_COLOUR ( '', #4649 ) ; +#23585 = VERTEX_POINT ( 'NONE', #40876 ) ; +#23586 = EDGE_CURVE ( 'NONE', #31055, #23303, #23239, .T. ) ; +#23587 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#23588 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6385, 'distance_accuracy_value', 'NONE'); +#23589 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, -0.2999999999999999900, -1.600000000000000100 ) ) ; +#23590 = SURFACE_STYLE_USAGE ( .BOTH. , #39823 ) ; +#23591 = FACE_OUTER_BOUND ( 'NONE', #29025, .T. ) ; +#23592 = EDGE_CURVE ( 'NONE', #31577, #11990, #19215, .T. ) ; +#23593 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22247 ) ) ; +#23594 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#23595 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22469 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39754, #13483, #10515 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23596 = VERTEX_POINT ( 'NONE', #8658 ) ; +#23597 = LINE ( 'NONE', #24622, #26120 ) ; +#23598 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23599 = AXIS2_PLACEMENT_3D ( 'NONE', #25040, #12124, #28116 ) ; +#23600 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#23601 = EDGE_LOOP ( 'NONE', ( #22251, #8759, #18253, #565 ) ) ; +#23602 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.3000000000000001600, -1.250000000000000000 ) ) ; +#23603 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.380001745296165500, -1.749999999999998900 ) ) ; +#23604 = LINE ( 'NONE', #36211, #24139 ) ; +#23605 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3113, 'distance_accuracy_value', 'NONE'); +#23606 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#23607 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39244 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19297, #29277, #247 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23608 = STYLED_ITEM ( 'NONE', ( #20903 ), #18825 ) ; +#23609 = FILL_AREA_STYLE_COLOUR ( '', #27228 ) ; +#23610 = EDGE_LOOP ( 'NONE', ( #30468, #40862, #31316, #32480 ) ) ; +#23611 = ORIENTED_EDGE ( 'NONE', *, *, #9205, .T. ) ; +#23612 = EDGE_LOOP ( 'NONE', ( #26574, #41784, #40959, #12643 ) ) ; +#23613 = LINE ( 'NONE', #4964, #15025 ) ; +#23616 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7067 ), #17938 ) ; +#23615 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23614 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6290 ), #5738 ) ; +#23617 = CARTESIAN_POINT ( 'NONE', ( -3.119636707815099300, 0.2999999999999999300, 1.000000000000057500 ) ) ; +#23618 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23619 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23620 = VECTOR ( 'NONE', #14463, 1000.000000000000000 ) ; +#23621 = VECTOR ( 'NONE', #41044, 1000.000000000000000 ) ; +#23622 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23623 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#23625 = EDGE_CURVE ( 'NONE', #11105, #32808, #17718, .T. ) ; +#23624 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8987 ), #40115 ) ; +#23626 = ORIENTED_EDGE ( 'NONE', *, *, #33253, .F. ) ; +#23627 = LINE ( 'NONE', #21712, #11490 ) ; +#23628 = ORIENTED_EDGE ( 'NONE', *, *, #22572, .F. ) ; +#23630 = AXIS2_PLACEMENT_3D ( 'NONE', #28479, #16345, #15502 ) ; +#23629 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16442 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13647, #16625, #32996 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23631 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.630001745296169000, -4.100000000000000500 ) ) ; +#23632 = CARTESIAN_POINT ( 'NONE', ( -4.465000000000001600, -0.01999825470386167400, -7.499624765331573100 ) ) ; +#23633 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23634 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999000, -0.3064657396751537300, -1.256465739675153500 ) ) ; +#23635 = FILL_AREA_STYLE ('',( #19356 ) ) ; +#23636 = CIRCLE ( 'NONE', #2295, 0.1000000000000000500 ) ; +#23637 = ORIENTED_EDGE ( 'NONE', *, *, #30829, .T. ) ; +#23638 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#23639 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, 0.0000000000000000000 ) ) ; +#23640 = FILL_AREA_STYLE_COLOUR ( '', #14994 ) ; +#23641 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#23642 = SURFACE_SIDE_STYLE ('',( #4092 ) ) ; +#23643 = ORIENTED_EDGE ( 'NONE', *, *, #23469, .F. ) ; +#23644 = FACE_OUTER_BOUND ( 'NONE', #17756, .T. ) ; +#23645 = CARTESIAN_POINT ( 'NONE', ( -3.845111734887290300, 0.6187557029450230200, -4.400173459199348400 ) ) ; +#23646 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23647 = LINE ( 'NONE', #13901, #969 ) ; +#23648 = EDGE_CURVE ( 'NONE', #27370, #38744, #35896, .T. ) ; +#23649 = ORIENTED_EDGE ( 'NONE', *, *, #32515, .T. ) ; +#23650 = EDGE_LOOP ( 'NONE', ( #35639, #11491, #27521, #21417, #15325, #31348, #30994, #6548 ) ) ; +#23651 = ORIENTED_EDGE ( 'NONE', *, *, #22487, .T. ) ; +#23652 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#23653 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521965300E-031 ) ) ; +#23654 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23655 = PRESENTATION_STYLE_ASSIGNMENT (( #16644 ) ) ; +#23656 = EDGE_CURVE ( 'NONE', #11990, #22514, #27293, .T. ) ; +#23657 = VECTOR ( 'NONE', #4256, 1000.000000000000000 ) ; +#23658 = SURFACE_STYLE_USAGE ( .BOTH. , #6839 ) ; +#23659 = PLANE ( 'NONE', #1189 ) ; +#23660 = ORIENTED_EDGE ( 'NONE', *, *, #8351, .F. ) ; +#23661 = EDGE_LOOP ( 'NONE', ( #21262, #39596, #30694, #30126 ) ) ; +#23662 = DIRECTION ( 'NONE', ( 3.872150616019659000E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#23663 = ADVANCED_FACE ( 'NONE', ( #28306 ), #38455, .F. ) ; +#23664 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14061, 'distance_accuracy_value', 'NONE'); +#23665 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23666 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.380001745296131500, -5.449999999999994000 ) ) ; +#23667 = ORIENTED_EDGE ( 'NONE', *, *, #29100, .F. ) ; +#23668 = LINE ( 'NONE', #1665, #33287 ) ; +#23669 = SURFACE_SIDE_STYLE ('',( #38376 ) ) ; +#23670 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37213 ), #25841 ) ; +#23671 = FILL_AREA_STYLE ('',( #27334 ) ) ; +#23672 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23673 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#23674 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40990 ), #25845 ) ; +#23675 = LINE ( 'NONE', #20573, #2989 ) ; +#23678 = EDGE_CURVE ( 'NONE', #13736, #29238, #553, .T. ) ; +#23677 = SURFACE_SIDE_STYLE ('',( #12130 ) ) ; +#23676 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36685 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13665, #26247, #29905 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23679 = FILL_AREA_STYLE_COLOUR ( '', #34846 ) ; +#23680 = EDGE_LOOP ( 'NONE', ( #22133, #735, #40905, #1552 ) ) ; +#23681 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000013100, -1.400001745296163300, -7.500000000000006200 ) ) ; +#23682 = FILL_AREA_STYLE_COLOUR ( '', #29734 ) ; +#23683 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#23685 = STYLED_ITEM ( 'NONE', ( #14534 ), #1872 ) ; +#23684 = AXIS2_PLACEMENT_3D ( 'NONE', #29938, #23021, #1036 ) ; +#23686 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -2.099999999999999600 ) ) ; +#23687 = STYLED_ITEM ( 'NONE', ( #24585 ), #39333 ) ; +#23688 = ORIENTED_EDGE ( 'NONE', *, *, #12989, .F. ) ; +#23689 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#23690 = SURFACE_SIDE_STYLE ('',( #32973 ) ) ; +#23691 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#23692 = ORIENTED_EDGE ( 'NONE', *, *, #21605, .T. ) ; +#23693 = VERTEX_POINT ( 'NONE', #15593 ) ; +#23694 = LINE ( 'NONE', #34668, #9522 ) ; +#23695 = FACE_OUTER_BOUND ( 'NONE', #9062, .T. ) ; +#23696 = SURFACE_SIDE_STYLE ('',( #7240 ) ) ; +#23697 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.499998254703820400, -6.299999999999993600 ) ) ; +#23698 = ORIENTED_EDGE ( 'NONE', *, *, #22241, .T. ) ; +#23699 = CARTESIAN_POINT ( 'NONE', ( 4.663004880385256200, -0.2800000000000024700, -0.7580972011844128200 ) ) ; +#23700 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, 0.5999999999999999800, -3.299999999999999800 ) ) ; +#23701 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -2.031000000000000600, -2.904459358809383700 ) ) ; +#23702 = ORIENTED_EDGE ( 'NONE', *, *, #2100, .T. ) ; +#23704 = ORIENTED_EDGE ( 'NONE', *, *, #32481, .T. ) ; +#23703 = ADVANCED_FACE ( 'NONE', ( #26288 ), #41397, .T. ) ; +#23705 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#23706 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11378, 'distance_accuracy_value', 'NONE'); +#23707 = FILL_AREA_STYLE_COLOUR ( '', #11909 ) ; +#23708 = ORIENTED_EDGE ( 'NONE', *, *, #10210, .F. ) ; +#23709 = EDGE_CURVE ( 'NONE', #34849, #466, #32303, .T. ) ; +#23710 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#23712 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.779999999999868400, 0.0000000000000000000 ) ) ; +#23711 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23713 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#23714 = ADVANCED_FACE ( 'NONE', ( #32796 ), #31794, .T. ) ; +#23715 = LINE ( 'NONE', #16587, #13082 ) ; +#23716 = FILL_AREA_STYLE_COLOUR ( '', #15327 ) ; +#23717 = CARTESIAN_POINT ( 'NONE', ( -3.178333333333019300, -0.07499999999999998300, -0.06128090415826408600 ) ) ; +#23718 = EDGE_CURVE ( 'NONE', #36790, #13612, #34839, .T. ) ; +#23719 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8454, 'distance_accuracy_value', 'NONE'); +#23720 = SURFACE_STYLE_USAGE ( .BOTH. , #12984 ) ; +#23721 = EDGE_CURVE ( 'NONE', #25373, #33220, #4518, .T. ) ; +#23722 = PLANE ( 'NONE', #37596 ) ; +#23723 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23724 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9067 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17672, #7884, #14406 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23725 = ORIENTED_EDGE ( 'NONE', *, *, #36186, .F. ) ; +#23726 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -2.322941965694886000, -1.250000000000000000 ) ) ; +#23727 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23728 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31015 ), #18056 ) ; +#23729 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23730 = ORIENTED_EDGE ( 'NONE', *, *, #34420, .T. ) ; +#23731 = VECTOR ( 'NONE', #32093, 1000.000000000000000 ) ; +#23732 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.279999999999999800, -0.2000017452961698200 ) ) ; +#23733 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.380001745296133300, -4.781671842700004200 ) ) ; +#23734 = EDGE_LOOP ( 'NONE', ( #2736, #27887, #9786, #4930 ) ) ; +#23735 = FACE_OUTER_BOUND ( 'NONE', #31751, .T. ) ; +#23736 = VECTOR ( 'NONE', #41290, 1000.000000000000000 ) ; +#23737 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11190 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6452, #41735, #6043 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23738 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.499998254703826200, -6.299999999999993600 ) ) ; +#23740 = EDGE_CURVE ( 'NONE', #15061, #27665, #24785, .T. ) ; +#23739 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27262 ) ) ; +#23741 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.4300017452961686900, -6.199999999999999300 ) ) ; +#23742 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#23743 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23744 = VERTEX_POINT ( 'NONE', #12595 ) ; +#23745 = PLANE ( 'NONE', #25488 ) ; +#23746 = VECTOR ( 'NONE', #41755, 1000.000000000000000 ) ; +#23747 = ORIENTED_EDGE ( 'NONE', *, *, #16908, .T. ) ; +#23748 = VERTEX_POINT ( 'NONE', #19834 ) ; +#23749 = FACE_OUTER_BOUND ( 'NONE', #23661, .T. ) ; +#23750 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 2.032879073410321300E-016, 1.000000000000000000 ) ) ; +#23751 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #690, 'distance_accuracy_value', 'NONE'); +#23753 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -500000.0000000000600, -3.204459358691023900 ) ) ; +#23752 = FILL_AREA_STYLE_COLOUR ( '', #4670 ) ; +#23755 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11541 ), #12347 ) ; +#23754 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32956 ) ) ; +#23756 = AXIS2_PLACEMENT_3D ( 'NONE', #10487, #26615, #16720 ) ; +#23757 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23758 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23759 = SURFACE_STYLE_USAGE ( .BOTH. , #23467 ) ; +#23760 = EDGE_LOOP ( 'NONE', ( #9148, #11238, #2580, #12594, #17639, #38029 ) ) ; +#23761 = SURFACE_STYLE_FILL_AREA ( #38504 ) ; +#23762 = FILL_AREA_STYLE ('',( #27154 ) ) ; +#23763 = ADVANCED_FACE ( 'NONE', ( #18206 ), #35782, .T. ) ; +#23764 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27661, 'distance_accuracy_value', 'NONE'); +#23765 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, 0.0000000000000000000 ) ) ; +#23766 = FACE_OUTER_BOUND ( 'NONE', #29393, .T. ) ; +#23767 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23768 = PLANE ( 'NONE', #28554 ) ; +#23769 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000005700, -0.2999999999999852800, -2.095470210943120000 ) ) ; +#23770 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#23771 = FILL_AREA_STYLE_COLOUR ( '', #6859 ) ; +#23772 = EDGE_LOOP ( 'NONE', ( #12392, #6099, #20418, #2148 ) ) ; +#23773 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23774 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#23775 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000000004400, -1.499998254703820900, -7.350000000000005900 ) ) ; +#23776 = FILL_AREA_STYLE_COLOUR ( '', #10824 ) ; +#23777 = ORIENTED_EDGE ( 'NONE', *, *, #22188, .T. ) ; +#23778 = EDGE_CURVE ( 'NONE', #18002, #38714, #15620, .T. ) ; +#23779 = VECTOR ( 'NONE', #17416, 1000.000000000000000 ) ; +#23780 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#23781 = ORIENTED_EDGE ( 'NONE', *, *, #25296, .T. ) ; +#23782 = ORIENTED_EDGE ( 'NONE', *, *, #2233, .F. ) ; +#23783 = EDGE_CURVE ( 'NONE', #34623, #4700, #5536, .T. ) ; +#23784 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23785 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -5.475000000000000500 ) ) ; +#23786 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#23787 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000800, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#23788 = EDGE_CURVE ( 'NONE', #17096, #16131, #40367, .T. ) ; +#23789 = ORIENTED_EDGE ( 'NONE', *, *, #14991, .T. ) ; +#23790 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23791 = SURFACE_SIDE_STYLE ('',( #35021 ) ) ; +#23792 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -1.649999999999998600 ) ) ; +#23793 = VECTOR ( 'NONE', #29064, 1000.000000000000000 ) ; +#23794 = AXIS2_PLACEMENT_3D ( 'NONE', #17928, #1851, #30904 ) ; +#23795 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#23796 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23797 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.499998254703823800, -5.449999999999994000 ) ) ; +#23798 = LINE ( 'NONE', #33038, #28330 ) ; +#23801 = EDGE_CURVE ( 'NONE', #20779, #12042, #22721, .T. ) ; +#23800 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36251 ), #2972 ) ; +#23799 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -1.049979056049130000 ) ) ; +#23802 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23803 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( + ( #23062, #29259, #39282, #29394 ), + ( #9764, #32373, #10187, #32792 ), + ( #13289, #6666, #9893, #32516 ), + ( #3835, #36073, #22648, #6535 ) ), + .UNSPECIFIED., .F., .F., .F. ) + B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) + GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( + ( 1.000000000000000000, 0.8047378540300842400, 0.8047378540300842400, 1.000000000000000000), + ( 0.8047378541243661600, 0.6476030137848174400, 0.6476030137848174400, 0.8047378541243661600), + ( 0.8047378541243661600, 0.6476030137848174400, 0.6476030137848174400, 0.8047378541243661600), + ( 1.000000000000000000, 0.8047378540300842400, 0.8047378540300842400, 1.000000000000000000) ) ) + REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); +#23804 = ADVANCED_FACE ( 'NONE', ( #33827 ), #23803, .T. ) ; +#23805 = FACE_OUTER_BOUND ( 'NONE', #30071, .T. ) ; +#23806 = SURFACE_STYLE_USAGE ( .BOTH. , #33683 ) ; +#23807 = PRESENTATION_STYLE_ASSIGNMENT (( #6550 ) ) ; +#23809 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21677 ) ) ; +#23808 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25967 ) ) ; +#23810 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#23811 = SURFACE_STYLE_USAGE ( .BOTH. , #30438 ) ; +#23812 = AXIS2_PLACEMENT_3D ( 'NONE', #38090, #28088, #31467 ) ; +#23813 = ADVANCED_FACE ( 'NONE', ( #5497 ), #36610, .F. ) ; +#23814 = ORIENTED_EDGE ( 'NONE', *, *, #27813, .F. ) ; +#23815 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23816 = FACE_OUTER_BOUND ( 'NONE', #5094, .T. ) ; +#23817 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41728 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4663, #14275, #7610 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23818 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, 0.03300000000000004300 ) ) ; +#23820 = STYLED_ITEM ( 'NONE', ( #6621 ), #8715 ) ; +#23819 = PLANE ( 'NONE', #10615 ) ; +#23821 = ORIENTED_EDGE ( 'NONE', *, *, #16730, .T. ) ; +#23822 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23823 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.5300017452961690600, -3.999999999999997300 ) ) ; +#23824 = SURFACE_STYLE_FILL_AREA ( #39262 ) ; +#23825 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#23826 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23827 = EDGE_LOOP ( 'NONE', ( #2725, #13444, #30461, #5638 ) ) ; +#23828 = ORIENTED_EDGE ( 'NONE', *, *, #26197, .F. ) ; +#23829 = SURFACE_SIDE_STYLE ('',( #32765 ) ) ; +#23830 = DIRECTION ( 'NONE', ( 2.220446049250316000E-016, 2.367138801244466000E-016, 1.000000000000000000 ) ) ; +#23831 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.499998254703829500, -6.299999999999993600 ) ) ; +#23832 = VERTEX_POINT ( 'NONE', #30390 ) ; +#23833 = ORIENTED_EDGE ( 'NONE', *, *, #4278, .F. ) ; +#23834 = SURFACE_STYLE_FILL_AREA ( #33859 ) ; +#23835 = LINE ( 'NONE', #6348, #38968 ) ; +#23836 = SURFACE_STYLE_FILL_AREA ( #6753 ) ; +#23837 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000007100, -0.8500017452961660100, -4.975000000000000500 ) ) ; +#23838 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23839 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#23840 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#23841 = EDGE_CURVE ( 'NONE', #41348, #25314, #28759, .T. ) ; +#23842 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822400, -2.599999999999999600 ) ) ; +#23843 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -7.744301232039317900E-017 ) ) ; +#23844 = EDGE_CURVE ( 'NONE', #9639, #6476, #10534, .T. ) ; +#23845 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28151 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27757, #11631, #21430 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23846 = VERTEX_POINT ( 'NONE', #4551 ) ; +#23847 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid9', #12556 ) ; +#23848 = FACE_OUTER_BOUND ( 'NONE', #24196, .T. ) ; +#23849 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36047 ) ) ; +#23850 = FILL_AREA_STYLE ('',( #39376 ) ) ; +#23851 = ORIENTED_EDGE ( 'NONE', *, *, #21463, .F. ) ; +#23852 = AXIS2_PLACEMENT_3D ( 'NONE', #8179, #40389, #24465 ) ; +#23853 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -1.139998254717365900, -5.049996877890552400 ) ) ; +#23854 = FILL_AREA_STYLE ('',( #460 ) ) ; +#23855 = PRESENTATION_STYLE_ASSIGNMENT (( #23178 ) ) ; +#23856 = PRESENTATION_STYLE_ASSIGNMENT (( #19400 ) ) ; +#23857 = ORIENTED_EDGE ( 'NONE', *, *, #9774, .T. ) ; +#23858 = STYLED_ITEM ( 'NONE', ( #12589 ), #38327 ) ; +#23859 = FILL_AREA_STYLE_COLOUR ( '', #9960 ) ; +#23860 = VECTOR ( 'NONE', #35520, 1000.000000000000000 ) ; +#23862 = STYLED_ITEM ( 'NONE', ( #18863 ), #5038 ) ; +#23861 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23053 ) ) ; +#23863 = DIRECTION ( 'NONE', ( -1.133987551255204500E-030, -1.000000000000000000, 2.367138801244545900E-016 ) ) ; +#23866 = EDGE_CURVE ( 'NONE', #24241, #12030, #37829, .T. ) ; +#23865 = FILL_AREA_STYLE_COLOUR ( '', #36998 ) ; +#23864 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3570 ) ) ; +#23867 = VERTEX_POINT ( 'NONE', #33369 ) ; +#23868 = VERTEX_POINT ( 'NONE', #13733 ) ; +#23869 = LINE ( 'NONE', #3775, #41053 ) ; +#23870 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.2800017452961385800, -5.650000000000000400 ) ) ; +#23871 = LINE ( 'NONE', #30032, #40509 ) ; +#23872 = FACE_OUTER_BOUND ( 'NONE', #7535, .T. ) ; +#23873 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#23874 = ADVANCED_FACE ( 'NONE', ( #13594 ), #20125, .F. ) ; +#23875 = SURFACE_STYLE_FILL_AREA ( #21406 ) ; +#23876 = LINE ( 'NONE', #25707, #8163 ) ; +#23878 = STYLED_ITEM ( 'NONE', ( #8307 ), #846 ) ; +#23877 = AXIS2_PLACEMENT_3D ( 'NONE', #34766, #11862, #2733 ) ; +#23879 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#23880 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23881 = CARTESIAN_POINT ( 'NONE', ( 3.332298852287715700, -0.2999999198035229700, -1.600000000000000300 ) ) ; +#23882 = VECTOR ( 'NONE', #31578, 1000.000000000000000 ) ; +#23883 = LINE ( 'NONE', #19902, #7201 ) ; +#23884 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2437, 'distance_accuracy_value', 'NONE'); +#23886 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23885 = SURFACE_SIDE_STYLE ('',( #1183 ) ) ; +#23887 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23888 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#23889 = VERTEX_POINT ( 'NONE', #4122 ) ; +#23890 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, 0.2799999999999973100, -0.2000017452961698200 ) ) ; +#23891 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005900, -0.2818014882866752300, -3.099999999999998800 ) ) ; +#23892 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23893 = EDGE_LOOP ( 'NONE', ( #986, #7623, #13606, #41 ) ) ; +#23894 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23895 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#23896 = FILL_AREA_STYLE ('',( #7491 ) ) ; +#23897 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23898 = VECTOR ( 'NONE', #15800, 1000.000000000000000 ) ; +#23899 = ORIENTED_EDGE ( 'NONE', *, *, #32618, .T. ) ; +#23900 = SURFACE_STYLE_USAGE ( .BOTH. , #3973 ) ; +#23901 = ORIENTED_EDGE ( 'NONE', *, *, #16595, .T. ) ; +#23902 = EDGE_CURVE ( 'NONE', #25964, #985, #18644, .T. ) ; +#23904 = ORIENTED_EDGE ( 'NONE', *, *, #37777, .T. ) ; +#23903 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#23905 = ORIENTED_EDGE ( 'NONE', *, *, #25, .T. ) ; +#23907 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -2.604459358809381200 ) ) ; +#23906 = VECTOR ( 'NONE', #30671, 1000.000000000000000 ) ; +#23908 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23909 = EDGE_CURVE ( 'NONE', #14652, #38185, #35332, .T. ) ; +#23910 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25145, 'distance_accuracy_value', 'NONE'); +#23911 = FILL_AREA_STYLE_COLOUR ( '', #8896 ) ; +#23912 = VERTEX_POINT ( 'NONE', #14033 ) ; +#23913 = EDGE_LOOP ( 'NONE', ( #38120, #21347, #1442, #40336 ) ) ; +#23914 = ADVANCED_FACE ( 'NONE', ( #34310 ), #15581, .T. ) ; +#23915 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23916 = LINE ( 'NONE', #19352, #6243 ) ; +#23917 = STYLED_ITEM ( 'NONE', ( #22473 ), #15316 ) ; +#23918 = LINE ( 'NONE', #11069, #16815 ) ; +#23919 = LINE ( 'NONE', #12834, #12263 ) ; +#23920 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23921 = AXIS2_PLACEMENT_3D ( 'NONE', #31750, #22036, #12387 ) ; +#23922 = AXIS2_PLACEMENT_3D ( 'NONE', #9586, #32748, #12828 ) ; +#23923 = PLANE ( 'NONE', #38255 ) ; +#23924 = CARTESIAN_POINT ( 'NONE', ( 3.232621167660964200, -0.4785239941555476900, -1.808361834164784900 ) ) ; +#23925 = ADVANCED_FACE ( 'NONE', ( #26755 ), #14437, .T. ) ; +#23926 = STYLED_ITEM ( 'NONE', ( #41742 ), #31112 ) ; +#23927 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#23929 = EDGE_CURVE ( 'NONE', #803, #32179, #5449, .T. ) ; +#23928 = AXIS2_PLACEMENT_3D ( 'NONE', #27832, #28240, #41088 ) ; +#23930 = LINE ( 'NONE', #21785, #30492 ) ; +#23931 = CARTESIAN_POINT ( 'NONE', ( -3.222419591704826400, -0.07500000000000001100, -0.1010820160044723500 ) ) ; +#23932 = PLANE ( 'NONE', #10277 ) ; +#23933 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#23934 = ORIENTED_EDGE ( 'NONE', *, *, #26769, .T. ) ; +#23935 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23937 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36929 ), #25558 ) ; +#23936 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38514 ) ) ; +#23938 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23939 = PLANE ( 'NONE', #17754 ) ; +#23940 = FACE_OUTER_BOUND ( 'NONE', #13098, .T. ) ; +#23941 = ORIENTED_EDGE ( 'NONE', *, *, #28346, .T. ) ; +#23942 = ORIENTED_EDGE ( 'NONE', *, *, #8849, .F. ) ; +#23943 = SURFACE_SIDE_STYLE ('',( #38720 ) ) ; +#23945 = EDGE_LOOP ( 'NONE', ( #38219, #32235, #18741, #22639 ) ) ; +#23944 = LINE ( 'NONE', #8827, #36114 ) ; +#23946 = FILL_AREA_STYLE ('',( #10936 ) ) ; +#23947 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25846, 'distance_accuracy_value', 'NONE'); +#23948 = LINE ( 'NONE', #33356, #40622 ) ; +#23949 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23950 = DIRECTION ( 'NONE', ( -0.5737535661042597600, 0.0000000000000000000, 0.8190279881558656400 ) ) ; +#23951 = LINE ( 'NONE', #16664, #36086 ) ; +#23952 = FACE_OUTER_BOUND ( 'NONE', #22046, .T. ) ; +#23953 = DIRECTION ( 'NONE', ( 5.782411586589354900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#23954 = LINE ( 'NONE', #38760, #251 ) ; +#23955 = PRESENTATION_STYLE_ASSIGNMENT (( #2026 ) ) ; +#23956 = PRESENTATION_STYLE_ASSIGNMENT (( #34488 ) ) ; +#23957 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17390, 'distance_accuracy_value', 'NONE'); +#23958 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#23959 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23960 = EDGE_CURVE ( 'NONE', #25102, #34623, #14576, .T. ) ; +#23961 = ADVANCED_FACE ( 'NONE', ( #31227 ), #24330, .F. ) ; +#23962 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -0.2339555568811697600 ) ) ; +#23963 = LINE ( 'NONE', #23837, #29503 ) ; +#23964 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23965 = SURFACE_STYLE_USAGE ( .BOTH. , #36678 ) ; +#23966 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#23967 = EDGE_CURVE ( 'NONE', #895, #38653, #39314, .T. ) ; +#23968 = FILL_AREA_STYLE ('',( #26819 ) ) ; +#23969 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#23970 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#23971 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.4300017452961689100, -5.200000000000001100 ) ) ; +#23972 = ORIENTED_EDGE ( 'NONE', *, *, #14282, .T. ) ; +#23973 = STYLED_ITEM ( 'NONE', ( #35927 ), #16108 ) ; +#23974 = SURFACE_STYLE_FILL_AREA ( #39769 ) ; +#23975 = FILL_AREA_STYLE ('',( #30190 ) ) ; +#23976 = VECTOR ( 'NONE', #21563, 1000.000000000000000 ) ; +#23977 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#23978 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#23979 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#23980 = STYLED_ITEM ( 'NONE', ( #16486 ), #20558 ) ; +#23981 = ORIENTED_EDGE ( 'NONE', *, *, #14170, .F. ) ; +#23982 = LINE ( 'NONE', #18139, #2292 ) ; +#23983 = ORIENTED_EDGE ( 'NONE', *, *, #24742, .F. ) ; +#23984 = STYLED_ITEM ( 'NONE', ( #29501 ), #11222 ) ; +#23985 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -1.149999999999999900 ) ) ; +#23986 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#23987 = VECTOR ( 'NONE', #38847, 1000.000000000000000 ) ; +#23989 = EDGE_CURVE ( 'NONE', #32610, #12289, #973, .T. ) ; +#23988 = AXIS2_PLACEMENT_3D ( 'NONE', #24348, #8209, #17991 ) ; +#23990 = LINE ( 'NONE', #24336, #15906 ) ; +#23991 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#23992 = ORIENTED_EDGE ( 'NONE', *, *, #35101, .F. ) ; +#23993 = SURFACE_SIDE_STYLE ('',( #6938 ) ) ; +#23994 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.180001745296169700, -4.400000000000000400 ) ) ; +#23995 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#23996 = LINE ( 'NONE', #1096, #15407 ) ; +#23998 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19695 ), #8567 ) ; +#23997 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6856 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1130, #20612, #10803 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#23999 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.499998254703822900, -6.299999999999993600 ) ) ; +#24000 = SURFACE_STYLE_USAGE ( .BOTH. , #36444 ) ; +#24001 = ORIENTED_EDGE ( 'NONE', *, *, #32487, .T. ) ; +#24002 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3152 ) ) ; +#24003 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34828 ) ) ; +#24004 = CARTESIAN_POINT ( 'NONE', ( 3.475000000000000100, 1.630001745296169000, -4.000000000000000000 ) ) ; +#24005 = VECTOR ( 'NONE', #28247, 1000.000000000000000 ) ; +#24006 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24007 = EDGE_LOOP ( 'NONE', ( #22495, #4097, #16282 ) ) ; +#24008 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24009 = SURFACE_STYLE_USAGE ( .BOTH. , #26995 ) ; +#24010 = ADVANCED_FACE ( 'NONE', ( #1976 ), #24192, .T. ) ; +#24011 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.499998254703826200, -6.299999999999993600 ) ) ; +#24012 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24013 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24014 = VERTEX_POINT ( 'NONE', #33921 ) ; +#24015 = VECTOR ( 'NONE', #32439, 1000.000000000000000 ) ; +#24016 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24017 = CARTESIAN_POINT ( 'NONE', ( -3.139648011050120100, -0.3000000000000000400, -0.07495823101768077400 ) ) ; +#24018 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24019 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2974, 'distance_accuracy_value', 'NONE'); +#24020 = ORIENTED_EDGE ( 'NONE', *, *, #13484, .T. ) ; +#24021 = SURFACE_SIDE_STYLE ('',( #27285 ) ) ; +#24022 = EDGE_CURVE ( 'NONE', #12019, #11756, #4961, .T. ) ; +#24023 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#24024 = EDGE_CURVE ( 'NONE', #40008, #28001, #38790, .T. ) ; +#24025 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.380001745296135700, -6.031671842700004200 ) ) ; +#24026 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, -0.2799999999999974200, -4.099999999999999600 ) ) ; +#24027 = ORIENTED_EDGE ( 'NONE', *, *, #7114, .F. ) ; +#24028 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24029 = EDGE_CURVE ( 'NONE', #41862, #3342, #29722, .T. ) ; +#24030 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24031 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35664 ), #259 ) ; +#24032 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29292, 'distance_accuracy_value', 'NONE'); +#24033 = SURFACE_SIDE_STYLE ('',( #37338 ) ) ; +#24034 = PLANE ( 'NONE', #10741 ) ; +#24035 = VERTEX_POINT ( 'NONE', #12412 ) ; +#24036 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#24037 = EDGE_CURVE ( 'NONE', #39241, #22416, #4919, .T. ) ; +#24038 = SURFACE_STYLE_FILL_AREA ( #13009 ) ; +#24039 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6730, 'distance_accuracy_value', 'NONE'); +#24040 = DIRECTION ( 'NONE', ( 1.133987551255204500E-030, 1.000000000000000000, -2.367138801244545900E-016 ) ) ; +#24041 = AXIS2_PLACEMENT_3D ( 'NONE', #41464, #41599, #41067 ) ; +#24042 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24043 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#24044 = AXIS2_PLACEMENT_3D ( 'NONE', #194, #25989, #10425 ) ; +#24045 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#24046 = EDGE_CURVE ( 'NONE', #11129, #41815, #5631, .T. ) ; +#24047 = ORIENTED_EDGE ( 'NONE', *, *, #21774, .T. ) ; +#24048 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#24049 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24051 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19748 ) ) ; +#24050 = STYLED_ITEM ( 'NONE', ( #22977 ), #28249 ) ; +#24052 = AXIS2_PLACEMENT_3D ( 'NONE', #29325, #20048, #13358 ) ; +#24053 = EDGE_LOOP ( 'NONE', ( #20977, #29343, #19150, #7359 ) ) ; +#24054 = PLANE ( 'NONE', #41852 ) ; +#24055 = FACE_OUTER_BOUND ( 'NONE', #8018, .T. ) ; +#24056 = VERTEX_POINT ( 'NONE', #5526 ) ; +#24057 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11061 ), #28389 ) ; +#24058 = ORIENTED_EDGE ( 'NONE', *, *, #34665, .T. ) ; +#24059 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.380001745296165500, -3.700000000000000200 ) ) ; +#24060 = SURFACE_STYLE_FILL_AREA ( #34446 ) ; +#24061 = FILL_AREA_STYLE_COLOUR ( '', #39448 ) ; +#24062 = VERTEX_POINT ( 'NONE', #8884 ) ; +#24063 = SURFACE_SIDE_STYLE ('',( #13940 ) ) ; +#24064 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#24065 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#24066 = CYLINDRICAL_SURFACE ( 'NONE', #36004, 0.1000000000000002600 ) ; +#24067 = CYLINDRICAL_SURFACE ( 'NONE', #25414, 0.2000000000000000100 ) ; +#24068 = ORIENTED_EDGE ( 'NONE', *, *, #35433, .F. ) ; +#24069 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24070 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#24071 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.139998254717364200, -5.049996877890552400 ) ) ; +#24072 = ORIENTED_EDGE ( 'NONE', *, *, #3013, .F. ) ; +#24073 = SURFACE_STYLE_FILL_AREA ( #3859 ) ; +#24074 = SURFACE_STYLE_USAGE ( .BOTH. , #40145 ) ; +#24075 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#24076 = CARTESIAN_POINT ( 'NONE', ( 3.978602593430550900, 0.5300017452961705000, -4.414589803375030800 ) ) ; +#24077 = SURFACE_STYLE_USAGE ( .BOTH. , #1377 ) ; +#24078 = SURFACE_SIDE_STYLE ('',( #38666 ) ) ; +#24079 = VECTOR ( 'NONE', #6720, 1000.000000000000000 ) ; +#24080 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24081 = ADVANCED_FACE ( 'NONE', ( #36781 ), #11856, .T. ) ; +#24082 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, 0.0000000000000000000 ) ) ; +#24083 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24084 = LINE ( 'NONE', #11215, #40761 ) ; +#24085 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.180001745296165300, -7.300000000000000700 ) ) ; +#24086 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid3', #9992 ) ; +#24087 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24088 = EDGE_CURVE ( 'NONE', #21645, #32397, #28675, .T. ) ; +#24089 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169000, -3.514459358809384400 ) ) ; +#24090 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24091 = SURFACE_SIDE_STYLE ('',( #24233 ) ) ; +#24092 = CARTESIAN_POINT ( 'NONE', ( -3.120369891805397300, 0.2799999999999983600, -4.400000000000001200 ) ) ; +#24093 = EDGE_CURVE ( 'NONE', #21451, #8602, #9442, .T. ) ; +#24094 = ORIENTED_EDGE ( 'NONE', *, *, #19741, .T. ) ; +#24095 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#24096 = VECTOR ( 'NONE', #6491, 1000.000000000000000 ) ; +#24097 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.2699999999999847500, -4.599999999999999600 ) ) ; +#24098 = AXIS2_PLACEMENT_3D ( 'NONE', #15863, #13028, #16301 ) ; +#24099 = EDGE_LOOP ( 'NONE', ( #3889, #14147, #12297, #20246 ) ) ; +#24100 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24101 = EDGE_LOOP ( 'NONE', ( #25501, #5315, #13451 ) ) ; +#24102 = SURFACE_STYLE_FILL_AREA ( #16239 ) ; +#24103 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24104 = ORIENTED_EDGE ( 'NONE', *, *, #6566, .F. ) ; +#24105 = AXIS2_PLACEMENT_3D ( 'NONE', #2493, #41298, #15323 ) ; +#24106 = SURFACE_STYLE_USAGE ( .BOTH. , #1541 ) ; +#24107 = FACE_OUTER_BOUND ( 'NONE', #25198, .T. ) ; +#24108 = VECTOR ( 'NONE', #8958, 1000.000000000000000 ) ; +#24109 = LINE ( 'NONE', #6967, #22098 ) ; +#24110 = VERTEX_POINT ( 'NONE', #9153 ) ; +#24111 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24112 = SURFACE_STYLE_FILL_AREA ( #16015 ) ; +#24113 = EDGE_LOOP ( 'NONE', ( #31411, #31209, #9989, #4021 ) ) ; +#24114 = PRESENTATION_STYLE_ASSIGNMENT (( #24858 ) ) ; +#24115 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24117 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38684 ), #26279 ) ; +#24116 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28433 ) ) ; +#24118 = CIRCLE ( 'NONE', #40744, 0.2000017452961698200 ) ; +#24119 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24121 = EDGE_CURVE ( 'NONE', #5418, #3704, #19102, .T. ) ; +#24120 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32202 ), #36548 ) ; +#24122 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.499998254703827100, -5.049999999999993600 ) ) ; +#24123 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#24124 = DIRECTION ( 'NONE', ( 0.9961946980917453200, -1.807562417839940600E-016, -0.08715574274766035900 ) ) ; +#24125 = PLANE ( 'NONE', #40601 ) ; +#24126 = ADVANCED_FACE ( 'NONE', ( #21658 ), #21515, .F. ) ; +#24127 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30051 ), #11114 ) ; +#24128 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6054, 'distance_accuracy_value', 'NONE'); +#24129 = FACE_OUTER_BOUND ( 'NONE', #18806, .T. ) ; +#24130 = STYLED_ITEM ( 'NONE', ( #38363 ), #24646 ) ; +#24131 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 2.710505431213766000E-016, 1.000000000000000000 ) ) ; +#24132 = ORIENTED_EDGE ( 'NONE', *, *, #23656, .T. ) ; +#24133 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#24134 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24135 = ADVANCED_FACE ( 'NONE', ( #9955 ), #25582, .F. ) ; +#24136 = FILL_AREA_STYLE ('',( #8282 ) ) ; +#24137 = ORIENTED_EDGE ( 'NONE', *, *, #31191, .T. ) ; +#24138 = VERTEX_POINT ( 'NONE', #35460 ) ; +#24139 = VECTOR ( 'NONE', #36604, 1000.000000000000000 ) ; +#24140 = SURFACE_STYLE_USAGE ( .BOTH. , #11401 ) ; +#24141 = CIRCLE ( 'NONE', #17272, 0.04999999999999969700 ) ; +#24142 = FILL_AREA_STYLE_COLOUR ( '', #34239 ) ; +#24143 = VERTEX_POINT ( 'NONE', #189 ) ; +#24144 = ORIENTED_EDGE ( 'NONE', *, *, #15372, .F. ) ; +#24145 = SURFACE_STYLE_FILL_AREA ( #28123 ) ; +#24146 = VERTEX_POINT ( 'NONE', #15952 ) ; +#24147 = VECTOR ( 'NONE', #24902, 1000.000000000000000 ) ; +#24148 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 1.480001745296169300, -3.999999999999996400 ) ) ; +#24149 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#24150 = LINE ( 'NONE', #14914, #12486 ) ; +#24151 = ORIENTED_EDGE ( 'NONE', *, *, #12746, .T. ) ; +#24152 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#24153 = VERTEX_POINT ( 'NONE', #32465 ) ; +#24154 = EDGE_CURVE ( 'NONE', #20229, #40345, #15023, .T. ) ; +#24155 = CIRCLE ( 'NONE', #24414, 0.05000000000000012800 ) ; +#24156 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#24157 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.730380239188924900, -0.8400209439508702400 ) ) ; +#24158 = CYLINDRICAL_SURFACE ( 'NONE', #40240, 0.1999999999999998700 ) ; +#24159 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24160 = EDGE_CURVE ( 'NONE', #32260, #3262, #15515, .T. ) ; +#24161 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41519 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32413, #30007, #4019 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24162 = FACE_OUTER_BOUND ( 'NONE', #14626, .T. ) ; +#24163 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#24164 = ORIENTED_EDGE ( 'NONE', *, *, #8407, .T. ) ; +#24165 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24166 = CYLINDRICAL_SURFACE ( 'NONE', #7204, 0.2999999999999999300 ) ; +#24168 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000005700, 1.539567084929416300E-014, 0.0000000000000000000 ) ) ; +#24167 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16669, 'distance_accuracy_value', 'NONE'); +#24169 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24170 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22556 ), #4421 ) ; +#24171 = CARTESIAN_POINT ( 'NONE', ( -3.237718385398000300, -0.2999999999999999900, 0.7155313145785999800 ) ) ; +#24172 = CARTESIAN_POINT ( 'NONE', ( 4.748858409427525000, -0.01999825470383145100, -7.173853277175703100 ) ) ; +#24173 = DIRECTION ( 'NONE', ( -1.355252715606880500E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24175 = LINE ( 'NONE', #40887, #34259 ) ; +#24174 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17340 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28317, #34819, #12612 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24176 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#24177 = ADVANCED_FACE ( 'NONE', ( #40783 ), #25453, .F. ) ; +#24178 = ORIENTED_EDGE ( 'NONE', *, *, #39721, .T. ) ; +#24179 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9514 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17110, #10718, #39821 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24180 = SURFACE_STYLE_FILL_AREA ( #24536 ) ; +#24181 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.139998254717367300, -5.049996877890552400 ) ) ; +#24182 = AXIS2_PLACEMENT_3D ( 'NONE', #26986, #10270, #20217 ) ; +#24185 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22029 ), #16859 ) ; +#24184 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24183 = AXIS2_PLACEMENT_3D ( 'NONE', #16156, #38725, #9771 ) ; +#24186 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24187 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24188 = VERTEX_POINT ( 'NONE', #3253 ) ; +#24189 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#24191 = EDGE_CURVE ( 'NONE', #32758, #14214, #19589, .T. ) ; +#24190 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11724 ) ) ; +#24192 = PLANE ( 'NONE', #40802 ) ; +#24193 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.2999999999999850000, -4.249999999999998200 ) ) ; +#24194 = ORIENTED_EDGE ( 'NONE', *, *, #28471, .T. ) ; +#24195 = VERTEX_POINT ( 'NONE', #6081 ) ; +#24196 = EDGE_LOOP ( 'NONE', ( #14342, #30802, #14591, #35651 ) ) ; +#24197 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.799998254703822000, -2.399999999999999500 ) ) ; +#24198 = CYLINDRICAL_SURFACE ( 'NONE', #16627, 0.1000000000000000500 ) ; +#24200 = AXIS2_PLACEMENT_3D ( 'NONE', #35777, #20122, #19979 ) ; +#24199 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36402 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26179, #4126, #26753 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24201 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#24202 = VECTOR ( 'NONE', #6559, 1000.000000000000000 ) ; +#24203 = PRESENTATION_STYLE_ASSIGNMENT (( #15364 ) ) ; +#24204 = LINE ( 'NONE', #127, #21669 ) ; +#24205 = SURFACE_SIDE_STYLE ('',( #18426 ) ) ; +#24206 = ORIENTED_EDGE ( 'NONE', *, *, #2973, .T. ) ; +#24207 = VECTOR ( 'NONE', #17629, 1000.000000000000000 ) ; +#24208 = VERTEX_POINT ( 'NONE', #41501 ) ; +#24209 = VERTEX_POINT ( 'NONE', #28813 ) ; +#24210 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#24211 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19859, 'distance_accuracy_value', 'NONE'); +#24212 = CARTESIAN_POINT ( 'NONE', ( 2.486602540378443700, 1.630001745296169500, -1.700000000000002000 ) ) ; +#24213 = ORIENTED_EDGE ( 'NONE', *, *, #27707, .T. ) ; +#24214 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.5199999999999842500, -5.299999999999999800 ) ) ; +#24215 = PLANE ( 'NONE', #2310 ) ; +#24216 = SURFACE_SIDE_STYLE ('',( #1958 ) ) ; +#24217 = CARTESIAN_POINT ( 'NONE', ( 2.900000000000000400, -1.380001745296126800, -4.781671842700004200 ) ) ; +#24218 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -2.031000000000000600, -2.904459358809380100 ) ) ; +#24219 = SURFACE_STYLE_USAGE ( .BOTH. , #23791 ) ; +#24220 = SURFACE_SIDE_STYLE ('',( #10873 ) ) ; +#24221 = EDGE_CURVE ( 'NONE', #12505, #38543, #30174, .T. ) ; +#24222 = VECTOR ( 'NONE', #11851, 1000.000000000000000 ) ; +#24223 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24224 = EDGE_CURVE ( 'NONE', #29433, #3589, #17051, .T. ) ; +#24225 = ORIENTED_EDGE ( 'NONE', *, *, #24046, .T. ) ; +#24226 = FILL_AREA_STYLE ('',( #30707 ) ) ; +#24227 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.3500000000000000300, 0.6999999999999999600 ) ) ; +#24228 = SURFACE_STYLE_USAGE ( .BOTH. , #1791 ) ; +#24229 = ADVANCED_FACE ( 'NONE', ( #25149 ), #28668, .F. ) ; +#24230 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24231 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#24232 = VERTEX_POINT ( 'NONE', #32040 ) ; +#24233 = SURFACE_STYLE_FILL_AREA ( #14221 ) ; +#24234 = STYLED_ITEM ( 'NONE', ( #5766 ), #15492 ) ; +#24235 = PRESENTATION_STYLE_ASSIGNMENT (( #41148 ) ) ; +#24236 = PRESENTATION_STYLE_ASSIGNMENT (( #31026 ) ) ; +#24237 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.3500000000000000300, -1.300000000000000000 ) ) ; +#24238 = LINE ( 'NONE', #6997, #40376 ) ; +#24239 = ORIENTED_EDGE ( 'NONE', *, *, #10392, .F. ) ; +#24240 = VECTOR ( 'NONE', #36410, 1000.000000000000000 ) ; +#24241 = VERTEX_POINT ( 'NONE', #14126 ) ; +#24242 = VERTEX_POINT ( 'NONE', #36718 ) ; +#24243 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15748 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22689, #6977, #29590 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24244 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24245 = AXIS2_PLACEMENT_3D ( 'NONE', #17510, #40070, #20784 ) ; +#24246 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27766 ) ) ; +#24247 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21997, 'distance_accuracy_value', 'NONE'); +#24248 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#24251 = EDGE_CURVE ( 'NONE', #41584, #29433, #16028, .T. ) ; +#24250 = DIRECTION ( 'NONE', ( 1.084202172485504700E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#24249 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #447 ) ) ; +#24252 = ORIENTED_EDGE ( 'NONE', *, *, #20968, .F. ) ; +#24253 = SURFACE_SIDE_STYLE ('',( #11000 ) ) ; +#24254 = LINE ( 'NONE', #24212, #33857 ) ; +#24256 = STYLED_ITEM ( 'NONE', ( #12456 ), #2167 ) ; +#24255 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19937 ) ) ; +#24257 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34511 ), #31542 ) ; +#24258 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24259 = AXIS2_PLACEMENT_3D ( 'NONE', #10747, #27704, #14567 ) ; +#24260 = SURFACE_STYLE_FILL_AREA ( #7624 ) ; +#24261 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#24262 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.380001745296126600, -6.031671842700004200 ) ) ; +#24263 = PRESENTATION_STYLE_ASSIGNMENT (( #7272 ) ) ; +#24264 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#24265 = EDGE_LOOP ( 'NONE', ( #33850, #13220, #27963, #14367 ) ) ; +#24266 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24267 = DIRECTION ( 'NONE', ( 2.367138801244516300E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24268 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#24269 = FILL_AREA_STYLE ('',( #34000 ) ) ; +#24270 = EDGE_LOOP ( 'NONE', ( #18891, #713, #19128, #837 ) ) ; +#24271 = VERTEX_POINT ( 'NONE', #19790 ) ; +#24272 = PRESENTATION_STYLE_ASSIGNMENT (( #31408 ) ) ; +#24273 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24274 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#24275 = VERTEX_POINT ( 'NONE', #4513 ) ; +#24276 = ORIENTED_EDGE ( 'NONE', *, *, #20755, .T. ) ; +#24277 = ORIENTED_EDGE ( 'NONE', *, *, #2161, .T. ) ; +#24278 = CYLINDRICAL_SURFACE ( 'NONE', #32203, 0.3000000000000003800 ) ; +#24279 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24280 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29221, 'distance_accuracy_value', 'NONE'); +#24281 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.499998254703827700, -6.699999999999994000 ) ) ; +#24282 = SURFACE_STYLE_USAGE ( .BOTH. , #24731 ) ; +#24283 = EDGE_CURVE ( 'NONE', #33601, #32472, #39766, .T. ) ; +#24284 = CARTESIAN_POINT ( 'NONE', ( 4.769999999999744700, -0.2800000000000026400, -0.2339555568811695900 ) ) ; +#24285 = ORIENTED_EDGE ( 'NONE', *, *, #11985, .T. ) ; +#24286 = EDGE_CURVE ( 'NONE', #27571, #23585, #29141, .T. ) ; +#24287 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000010300, -1.999998254703822400, -6.600000000000000500 ) ) ; +#24288 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#24289 = FACE_OUTER_BOUND ( 'NONE', #17627, .T. ) ; +#24290 = PLANE ( 'NONE', #18817 ) ; +#24291 = PLANE ( 'NONE', #12062 ) ; +#24292 = STYLED_ITEM ( 'NONE', ( #33518 ), #21188 ) ; +#24293 = SURFACE_STYLE_FILL_AREA ( #25476 ) ; +#24294 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24295 = FACE_OUTER_BOUND ( 'NONE', #14716, .T. ) ; +#24296 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24297 = CARTESIAN_POINT ( 'NONE', ( 3.178333333333021500, 0.07499999999999998300, -0.06128090415825945100 ) ) ; +#24298 = ADVANCED_FACE ( 'NONE', ( #10954 ), #21580, .F. ) ; +#24299 = AXIS2_PLACEMENT_3D ( 'NONE', #38987, #13415, #9883 ) ; +#24300 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -1.749999999999998900 ) ) ; +#24301 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37602, 'distance_accuracy_value', 'NONE'); +#24302 = ORIENTED_EDGE ( 'NONE', *, *, #37880, .F. ) ; +#24304 = EDGE_CURVE ( 'NONE', #24911, #17137, #31667, .T. ) ; +#24303 = STYLED_ITEM ( 'NONE', ( #16832 ), #37549 ) ; +#24305 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#24306 = PRESENTATION_STYLE_ASSIGNMENT (( #15917 ) ) ; +#24307 = VERTEX_POINT ( 'NONE', #30219 ) ; +#24308 = SURFACE_STYLE_FILL_AREA ( #17180 ) ; +#24309 = ORIENTED_EDGE ( 'NONE', *, *, #31779, .T. ) ; +#24310 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24311 = FILL_AREA_STYLE_COLOUR ( '', #1939 ) ; +#24313 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37294 ) ) ; +#24312 = AXIS2_PLACEMENT_3D ( 'NONE', #1218, #39714, #7356 ) ; +#24314 = STYLED_ITEM ( 'NONE', ( #4486 ), #41064 ) ; +#24315 = PRESENTATION_STYLE_ASSIGNMENT (( #11282 ) ) ; +#24316 = DIRECTION ( 'NONE', ( -4.336808689942020900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#24317 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24318 = STYLED_ITEM ( 'NONE', ( #38161 ), #33032 ) ; +#24319 = SURFACE_STYLE_USAGE ( .BOTH. , #24460 ) ; +#24320 = ORIENTED_EDGE ( 'NONE', *, *, #6807, .T. ) ; +#24321 = ORIENTED_EDGE ( 'NONE', *, *, #13177, .F. ) ; +#24322 = ORIENTED_EDGE ( 'NONE', *, *, #1364, .F. ) ; +#24323 = SURFACE_STYLE_USAGE ( .BOTH. , #30385 ) ; +#24324 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8321 ) ) ; +#24325 = SURFACE_SIDE_STYLE ('',( #11585 ) ) ; +#24326 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.380001745296144800, -4.781671842700004200 ) ) ; +#24327 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24328 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24329 = ORIENTED_EDGE ( 'NONE', *, *, #24154, .T. ) ; +#24330 = PLANE ( 'NONE', #39174 ) ; +#24331 = VECTOR ( 'NONE', #3222, 1000.000000000000000 ) ; +#24332 = ORIENTED_EDGE ( 'NONE', *, *, #22929, .F. ) ; +#24333 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24334 = FILL_AREA_STYLE ('',( #1907 ) ) ; +#24335 = FACE_OUTER_BOUND ( 'NONE', #27444, .T. ) ; +#24336 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#24337 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24338 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24339 = ADVANCED_FACE ( 'NONE', ( #41283 ), #35208, .T. ) ; +#24340 = PLANE ( 'NONE', #4185 ) ; +#24341 = LINE ( 'NONE', #11947, #30408 ) ; +#24342 = ORIENTED_EDGE ( 'NONE', *, *, #7973, .T. ) ; +#24343 = FILL_AREA_STYLE ('',( #2198 ) ) ; +#24344 = VECTOR ( 'NONE', #14129, 1000.000000000000000 ) ; +#24345 = EDGE_CURVE ( 'NONE', #34774, #35497, #37225, .T. ) ; +#24346 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.3000000000000150900, -4.249999999999998200 ) ) ; +#24347 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24348 = CARTESIAN_POINT ( 'NONE', ( -2.573205080756887100, 1.480001745296169600, -1.650000000000000400 ) ) ; +#24349 = ORIENTED_EDGE ( 'NONE', *, *, #1025, .T. ) ; +#24350 = AXIS2_PLACEMENT_3D ( 'NONE', #6249, #15444, #5968 ) ; +#24351 = CIRCLE ( 'NONE', #10047, 0.1000000000000002600 ) ; +#24352 = ADVANCED_FACE ( 'NONE', ( #17013 ), #29502, .F. ) ; +#24353 = PRESENTATION_STYLE_ASSIGNMENT (( #628 ) ) ; +#24354 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24355 = EDGE_CURVE ( 'NONE', #33001, #14455, #36230, .T. ) ; +#24356 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#24357 = ORIENTED_EDGE ( 'NONE', *, *, #38785, .F. ) ; +#24358 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#24359 = SURFACE_SIDE_STYLE ('',( #16974 ) ) ; +#24360 = LINE ( 'NONE', #30154, #7637 ) ; +#24361 = AXIS2_PLACEMENT_3D ( 'NONE', #20538, #14165, #36749 ) ; +#24362 = AXIS2_PLACEMENT_3D ( 'NONE', #7451, #39660, #20366 ) ; +#24363 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.2999999999999999900, -0.2498427124745999900 ) ) ; +#24364 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22520 ), #12701 ) ; +#24365 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24366 = SURFACE_STYLE_USAGE ( .BOTH. , #34241 ) ; +#24367 = VERTEX_POINT ( 'NONE', #11547 ) ; +#24368 = ORIENTED_EDGE ( 'NONE', *, *, #39153, .F. ) ; +#24369 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24370 = SURFACE_STYLE_FILL_AREA ( #27962 ) ; +#24372 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37944 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37382, #17787, #40332 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24371 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6649 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2065, #18424, #24354 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24373 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, 0.6780706550913999700 ) ) ; +#24374 = FILL_AREA_STYLE_COLOUR ( '', #26244 ) ; +#24375 = STYLED_ITEM ( 'NONE', ( #38191 ), #41663 ) ; +#24376 = FILL_AREA_STYLE_COLOUR ( '', #39111 ) ; +#24377 = FILL_AREA_STYLE ('',( #30721 ) ) ; +#24378 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14109 ), #25739 ) ; +#24380 = STYLED_ITEM ( 'NONE', ( #41037 ), #8509 ) ; +#24379 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.139998254717357500, -5.049996877890552400 ) ) ; +#24381 = PLANE ( 'NONE', #2818 ) ; +#24382 = VERTEX_POINT ( 'NONE', #14400 ) ; +#24383 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11845, 'distance_accuracy_value', 'NONE'); +#24384 = VECTOR ( 'NONE', #35887, 1000.000000000000000 ) ; +#24385 = FILL_AREA_STYLE ('',( #30319 ) ) ; +#24386 = ADVANCED_FACE ( 'NONE', ( #23570 ), #14982, .T. ) ; +#24387 = FILL_AREA_STYLE ('',( #1822 ) ) ; +#24388 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -10.30000000000000100, -1.250000000000000000 ) ) ; +#24389 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#24390 = ORIENTED_EDGE ( 'NONE', *, *, #39373, .T. ) ; +#24391 = ORIENTED_EDGE ( 'NONE', *, *, #33174, .F. ) ; +#24392 = FACE_OUTER_BOUND ( 'NONE', #29805, .T. ) ; +#24393 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24394 = VECTOR ( 'NONE', #17780, 1000.000000000000000 ) ; +#24395 = CLOSED_SHELL ( 'NONE', ( #25858, #9918, #36221, #23663, #26484, #28228 ) ) ; +#24396 = SURFACE_STYLE_USAGE ( .BOTH. , #30604 ) ; +#24397 = FACE_OUTER_BOUND ( 'NONE', #37432, .T. ) ; +#24398 = ORIENTED_EDGE ( 'NONE', *, *, #29664, .T. ) ; +#24399 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#24400 = VECTOR ( 'NONE', #41104, 1000.000000000000000 ) ; +#24401 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#24402 = ORIENTED_EDGE ( 'NONE', *, *, #20157, .F. ) ; +#24403 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, 0.0000000000000000000 ) ) ; +#24404 = DIRECTION ( 'NONE', ( 1.742851110636537900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#24405 = FACE_OUTER_BOUND ( 'NONE', #9952, .T. ) ; +#24406 = FILL_AREA_STYLE ('',( #27234 ) ) ; +#24407 = ORIENTED_EDGE ( 'NONE', *, *, #7351, .F. ) ; +#24408 = EDGE_CURVE ( 'NONE', #40577, #14466, #10909, .T. ) ; +#24409 = VECTOR ( 'NONE', #24358, 1000.000000000000000 ) ; +#24410 = FACE_OUTER_BOUND ( 'NONE', #27450, .T. ) ; +#24411 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.139998254717359000, -5.049996877890552400 ) ) ; +#24412 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.499998254703824400, -6.299999999999993600 ) ) ; +#24413 = EDGE_CURVE ( 'NONE', #12794, #31, #11914, .T. ) ; +#24414 = AXIS2_PLACEMENT_3D ( 'NONE', #30899, #18066, #5056 ) ; +#24415 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#24416 = STYLED_ITEM ( 'NONE', ( #27923 ), #22793 ) ; +#24417 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#24418 = FILL_AREA_STYLE_COLOUR ( '', #33351 ) ; +#24419 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#24420 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27609, 'distance_accuracy_value', 'NONE'); +#24421 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15741 ), #40923 ) ; +#24422 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875040000E-015, 6.056601140521967000E-031 ) ) ; +#24423 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24424 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#24425 = STYLED_ITEM ( 'NONE', ( #7140 ), #18885 ) ; +#24426 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24428 = AXIS2_PLACEMENT_3D ( 'NONE', #36330, #922, #16960 ) ; +#24427 = AXIS2_PLACEMENT_3D ( 'NONE', #33957, #4295, #1374 ) ; +#24429 = FILL_AREA_STYLE_COLOUR ( '', #34196 ) ; +#24430 = ORIENTED_EDGE ( 'NONE', *, *, #18979, .T. ) ; +#24431 = VECTOR ( 'NONE', #37750, 1000.000000000000000 ) ; +#24434 = EDGE_CURVE ( 'NONE', #25729, #24195, #41740, .T. ) ; +#24433 = FILL_AREA_STYLE ('',( #34172 ) ) ; +#24432 = STYLED_ITEM ( 'NONE', ( #23855 ), #35125 ) ; +#24435 = SURFACE_STYLE_FILL_AREA ( #4332 ) ; +#24436 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24437 = EDGE_LOOP ( 'NONE', ( #37723, #12808, #3082, #25730 ) ) ; +#24438 = ADVANCED_FACE ( 'NONE', ( #24618 ), #21342, .F. ) ; +#24439 = VERTEX_POINT ( 'NONE', #24148 ) ; +#24440 = SURFACE_STYLE_USAGE ( .BOTH. , #37280 ) ; +#24442 = EDGE_LOOP ( 'NONE', ( #8959, #18604, #36033, #14314 ) ) ; +#24441 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#24443 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#24444 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.007151087260729500E-015, 0.0000000000000000000 ) ) ; +#24445 = ORIENTED_EDGE ( 'NONE', *, *, #15750, .T. ) ; +#24446 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #12578, #12305, #41808, #9465 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 3.141592653589793100, 3.864326901403197600 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956582200, 0.9569428977956582200, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#24448 = STYLED_ITEM ( 'NONE', ( #28507 ), #676 ) ; +#24447 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25021 ) ) ; +#24449 = FILL_AREA_STYLE ('',( #13995 ) ) ; +#24450 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#24451 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 1.468654402296581600E-014, -3.099999999999998800 ) ) ; +#24452 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#24453 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.710505431213763500E-015, 0.0000000000000000000 ) ) ; +#24454 = ORIENTED_EDGE ( 'NONE', *, *, #40538, .T. ) ; +#24455 = LINE ( 'NONE', #22214, #11248 ) ; +#24456 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24457 = FACE_OUTER_BOUND ( 'NONE', #18642, .T. ) ; +#24458 = SURFACE_STYLE_FILL_AREA ( #25593 ) ; +#24459 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#24460 = SURFACE_SIDE_STYLE ('',( #25940 ) ) ; +#24461 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#24462 = PRESENTATION_STYLE_ASSIGNMENT (( #5372 ) ) ; +#24463 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#24464 = SURFACE_SIDE_STYLE ('',( #19439 ) ) ; +#24465 = DIRECTION ( 'NONE', ( 5.782411586589354100E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#24466 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#24467 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, 0.5999999999999999800, -3.299999999999999800 ) ) ; +#24468 = ORIENTED_EDGE ( 'NONE', *, *, #29585, .F. ) ; +#24469 = SURFACE_STYLE_FILL_AREA ( #36335 ) ; +#24470 = EDGE_CURVE ( 'NONE', #26190, #11596, #2859, .T. ) ; +#24471 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.779999999999868400, -0.2339555568811697600 ) ) ; +#24472 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.6300017452961683700, -4.750000000000000000 ) ) ; +#24473 = EDGE_CURVE ( 'NONE', #36793, #6323, #25806, .T. ) ; +#24474 = LINE ( 'NONE', #23589, #7255 ) ; +#24475 = AXIS2_PLACEMENT_3D ( 'NONE', #41421, #12317, #9058 ) ; +#24476 = ORIENTED_EDGE ( 'NONE', *, *, #8216, .F. ) ; +#24477 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24478 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#24479 = CARTESIAN_POINT ( 'NONE', ( 4.492416573867750200, -1.982581680836082100, -2.504658566907513000 ) ) ; +#24480 = VERTEX_POINT ( 'NONE', #24737 ) ; +#24481 = ORIENTED_EDGE ( 'NONE', *, *, #18599, .T. ) ; +#24482 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#24483 = VERTEX_POINT ( 'NONE', #21071 ) ; +#24484 = ORIENTED_EDGE ( 'NONE', *, *, #38785, .T. ) ; +#24485 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11428 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15651, #31342, #18787 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24486 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #85, 'distance_accuracy_value', 'NONE'); +#24487 = VECTOR ( 'NONE', #24267, 1000.000000000000000 ) ; +#24488 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.779999999999868400, 0.0000000000000000000 ) ) ; +#24489 = SURFACE_STYLE_FILL_AREA ( #41509 ) ; +#24490 = AXIS2_PLACEMENT_3D ( 'NONE', #10679, #17341, #39905 ) ; +#24491 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22465 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9061, #28576, #32090 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24492 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165600, -6.900000000000000400 ) ) ; +#24493 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -7.744301232039317900E-017 ) ) ; +#24494 = PRESENTATION_STYLE_ASSIGNMENT (( #40234 ) ) ; +#24495 = SURFACE_SIDE_STYLE ('',( #5878 ) ) ; +#24497 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20880 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36469, #10739, #14160 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24496 = STYLED_ITEM ( 'NONE', ( #17513 ), #31147 ) ; +#24498 = LINE ( 'NONE', #22633, #1776 ) ; +#24499 = LINE ( 'NONE', #21637, #7277 ) ; +#24500 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24501 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.280001745296167800, -4.200000000000000200 ) ) ; +#24502 = CIRCLE ( 'NONE', #38242, 0.3600000000000078700 ) ; +#24503 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31283, 'distance_accuracy_value', 'NONE'); +#24504 = EDGE_CURVE ( 'NONE', #29238, #18007, #10381, .T. ) ; +#24505 = PLANE ( 'NONE', #30357 ) ; +#24506 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#24507 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24508 = AXIS2_PLACEMENT_3D ( 'NONE', #15536, #38663, #34895 ) ; +#24509 = ORIENTED_EDGE ( 'NONE', *, *, #34735, .F. ) ; +#24510 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21080 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19819, #22897, #26006 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24511 = CARTESIAN_POINT ( 'NONE', ( -3.325012795576618400, -0.3282168317299800600, -1.600000000000000800 ) ) ; +#24512 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#24513 = ORIENTED_EDGE ( 'NONE', *, *, #29455, .T. ) ; +#24514 = DIRECTION ( 'NONE', ( 9.637352644315598700E-016, 1.807003620809174900E-016, 1.000000000000000000 ) ) ; +#24515 = SURFACE_STYLE_FILL_AREA ( #1330 ) ; +#24516 = CARTESIAN_POINT ( 'NONE', ( -4.450000000000001100, 0.08000174529616864400, -7.350000000000000500 ) ) ; +#24517 = ADVANCED_FACE ( 'NONE', ( #37670 ), #17668, .F. ) ; +#24518 = ORIENTED_EDGE ( 'NONE', *, *, #28503, .T. ) ; +#24519 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24520 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 2.322941965694886000, -1.250000000000000000 ) ) ; +#24521 = LINE ( 'NONE', #8252, #31044 ) ; +#24522 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#24523 = TOROIDAL_SURFACE ( 'NONE', #23174, 1.599999999999742300, 0.09999999999987406500 ) ; +#24524 = PRESENTATION_STYLE_ASSIGNMENT (( #24228 ) ) ; +#24525 = EDGE_LOOP ( 'NONE', ( #198, #33046, #27314, #21500 ) ) ; +#24526 = CARTESIAN_POINT ( 'NONE', ( -3.374999999999998700, 0.5300017452961686100, -4.576794919243112300 ) ) ; +#24527 = LINE ( 'NONE', #35675, #38100 ) ; +#24528 = DIRECTION ( 'NONE', ( 4.336808689942020900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#24529 = VERTEX_POINT ( 'NONE', #36993 ) ; +#24530 = SURFACE_STYLE_USAGE ( .BOTH. , #21287 ) ; +#24531 = CYLINDRICAL_SURFACE ( 'NONE', #25271, 0.3000000000000007700 ) ; +#24532 = VERTEX_POINT ( 'NONE', #15377 ) ; +#24533 = FILL_AREA_STYLE_COLOUR ( '', #28564 ) ; +#24534 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#24535 = PRESENTATION_STYLE_ASSIGNMENT (( #31903 ) ) ; +#24536 = FILL_AREA_STYLE ('',( #8246 ) ) ; +#24537 = CLOSED_SHELL ( 'NONE', ( #2085, #38113, #12843, #27004, #33654, #38910 ) ) ; +#24538 = CARTESIAN_POINT ( 'NONE', ( 3.273571428571024500, 0.07499999999999999700, -0.08583148475007257300 ) ) ; +#24539 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#24540 = EDGE_CURVE ( 'NONE', #6923, #38978, #6353, .T. ) ; +#24541 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#24542 = PRESENTATION_STYLE_ASSIGNMENT (( #6913 ) ) ; +#24543 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.499998254703827700, -6.299999999999993600 ) ) ; +#24544 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#24545 = EDGE_LOOP ( 'NONE', ( #40040, #11834, #26176, #17438, #18613, #33913 ) ) ; +#24546 = EDGE_CURVE ( 'NONE', #20229, #36907, #13410, .T. ) ; +#24547 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -5.700000000000000200 ) ) ; +#24548 = SURFACE_STYLE_USAGE ( .BOTH. , #40320 ) ; +#24549 = EDGE_CURVE ( 'NONE', #29555, #35275, #16964, .T. ) ; +#24550 = FILL_AREA_STYLE_COLOUR ( '', #22271 ) ; +#24551 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.380001745296135700, -6.699999999999994000 ) ) ; +#24552 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1307 ) ) ; +#24553 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.07499999999999999700, 0.01000000000000000000 ) ) ; +#24554 = ORIENTED_EDGE ( 'NONE', *, *, #13565, .F. ) ; +#24555 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#24556 = DIRECTION ( 'NONE', ( 4.336808689942016900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#24557 = ADVANCED_FACE ( 'NONE', ( #1847 ), #27584, .T. ) ; +#24558 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13695 ) ) ; +#24559 = EDGE_LOOP ( 'NONE', ( #22704, #23660, #40050, #10995 ) ) ; +#24560 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33735 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5475, #25141, #15509 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24561 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000013700, -1.949998254703824200, -5.767712434446773200 ) ) ; +#24562 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.380001745296129100, -6.699999999999994000 ) ) ; +#24563 = FILL_AREA_STYLE_COLOUR ( '', #12112 ) ; +#24564 = VERTEX_POINT ( 'NONE', #5767 ) ; +#24566 = EDGE_CURVE ( 'NONE', #7340, #16836, #29605, .T. ) ; +#24565 = STYLED_ITEM ( 'NONE', ( #15892 ), #37056 ) ; +#24567 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 6.056601140521966100E-031 ) ) ; +#24568 = ORIENTED_EDGE ( 'NONE', *, *, #37259, .T. ) ; +#24569 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.4300017452961686900, -6.150000000000000400 ) ) ; +#24570 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#24571 = VERTEX_POINT ( 'NONE', #12382 ) ; +#24572 = ADVANCED_FACE ( 'NONE', ( #31108 ), #31613, .F. ) ; +#24574 = STYLED_ITEM ( 'NONE', ( #22422 ), #2952 ) ; +#24573 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26735 ), #1569 ) ; +#24575 = DIRECTION ( 'NONE', ( 5.782411586589413300E-015, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#24576 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24577 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18055 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15054, #8677, #18881 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24578 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#24579 = EDGE_LOOP ( 'NONE', ( #30299, #7928, #8690 ) ) ; +#24580 = AXIS2_PLACEMENT_3D ( 'NONE', #25666, #41726, #22410 ) ; +#24581 = SURFACE_STYLE_USAGE ( .BOTH. , #1855 ) ; +#24582 = VECTOR ( 'NONE', #10193, 1000.000000000000000 ) ; +#24583 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24584 = AXIS2_PLACEMENT_3D ( 'NONE', #4119, #36605, #10608 ) ; +#24585 = PRESENTATION_STYLE_ASSIGNMENT (( #5388 ) ) ; +#24586 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#24587 = PRESENTATION_STYLE_ASSIGNMENT (( #5255 ) ) ; +#24588 = ORIENTED_EDGE ( 'NONE', *, *, #36842, .T. ) ; +#24589 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#24590 = PRESENTATION_STYLE_ASSIGNMENT (( #28163 ) ) ; +#24591 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13088, 'distance_accuracy_value', 'NONE'); +#24592 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#24593 = VERTEX_POINT ( 'NONE', #5486 ) ; +#24594 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -5.599999999999999600 ) ) ; +#24595 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#24596 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, 0.07499999999999998300, 0.03300000000000001500 ) ) ; +#24597 = VECTOR ( 'NONE', #21825, 1000.000000000000000 ) ; +#24598 = FILL_AREA_STYLE ('',( #27970 ) ) ; +#24599 = FILL_AREA_STYLE_COLOUR ( '', #15869 ) ; +#24600 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24601 = SURFACE_SIDE_STYLE ('',( #2797 ) ) ; +#24602 = ORIENTED_EDGE ( 'NONE', *, *, #18914, .T. ) ; +#24603 = FACE_OUTER_BOUND ( 'NONE', #22445, .T. ) ; +#24604 = SURFACE_SIDE_STYLE ('',( #3492 ) ) ; +#24605 = SURFACE_STYLE_FILL_AREA ( #18332 ) ; +#24606 = EDGE_CURVE ( 'NONE', #5976, #16621, #15286, .T. ) ; +#24607 = VERTEX_POINT ( 'NONE', #41075 ) ; +#24608 = FILL_AREA_STYLE_COLOUR ( '', #12881 ) ; +#24609 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -2.031000000000000600, -3.204459358809379900 ) ) ; +#24610 = PRESENTATION_STYLE_ASSIGNMENT (( #14285 ) ) ; +#24611 = FILL_AREA_STYLE ('',( #2030 ) ) ; +#24612 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#24613 = ADVANCED_FACE ( 'NONE', ( #37028 ), #2412, .T. ) ; +#24614 = EDGE_CURVE ( 'NONE', #41815, #29940, #22223, .T. ) ; +#24615 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#24616 = EDGE_LOOP ( 'NONE', ( #31837, #3389, #25932, #28403 ) ) ; +#24617 = ORIENTED_EDGE ( 'NONE', *, *, #38454, .F. ) ; +#24618 = FACE_OUTER_BOUND ( 'NONE', #41701, .T. ) ; +#24619 = ORIENTED_EDGE ( 'NONE', *, *, #31221, .F. ) ; +#24620 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40524 ), #10771 ) ; +#24621 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.4300017452961686900, -6.249999999999998200 ) ) ; +#24622 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, -0.3699982547038309600, -1.649999999999999500 ) ) ; +#24623 = EDGE_CURVE ( 'NONE', #34759, #30951, #39901, .T. ) ; +#24624 = CYLINDRICAL_SURFACE ( 'NONE', #28135, 0.05000000000000012800 ) ; +#24625 = LINE ( 'NONE', #33771, #12940 ) ; +#24626 = LINE ( 'NONE', #11328, #25618 ) ; +#24627 = VERTEX_POINT ( 'NONE', #32428 ) ; +#24628 = SURFACE_SIDE_STYLE ('',( #7459 ) ) ; +#24629 = SURFACE_STYLE_FILL_AREA ( #7081 ) ; +#24630 = ORIENTED_EDGE ( 'NONE', *, *, #5178, .F. ) ; +#24631 = AXIS2_PLACEMENT_3D ( 'NONE', #41155, #37619, #40722 ) ; +#24632 = FILL_AREA_STYLE_COLOUR ( '', #22602 ) ; +#24633 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6699 ) ) ; +#24634 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664848500, 0.2800017452961318700, -5.650000000000000400 ) ) ; +#24635 = VECTOR ( 'NONE', #24230, 1000.000000000000000 ) ; +#24637 = EDGE_CURVE ( 'NONE', #9676, #19794, #4540, .T. ) ; +#24636 = CARTESIAN_POINT ( 'NONE', ( 0.1500000000000000200, -1.499998254703829500, -6.699999999999994000 ) ) ; +#24638 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#24639 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 2.032879073410321300E-016, 1.000000000000000000 ) ) ; +#24640 = FACE_OUTER_BOUND ( 'NONE', #10565, .T. ) ; +#24642 = STYLED_ITEM ( 'NONE', ( #13931 ), #4044 ) ; +#24641 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2195 ) ) ; +#24643 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13785 ), #40550 ) ; +#24644 = VECTOR ( 'NONE', #40028, 1000.000000000000000 ) ; +#24645 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#24646 = MANIFOLD_SOLID_BREP ( '1-1-solid4', #1035 ) ; +#24647 = ORIENTED_EDGE ( 'NONE', *, *, #6991, .T. ) ; +#24648 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#24649 = AXIS2_PLACEMENT_3D ( 'NONE', #21273, #1788, #5412 ) ; +#24650 = PLANE ( 'NONE', #30967 ) ; +#24651 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24652 = DIRECTION ( 'NONE', ( 4.336808689942002000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#24653 = ORIENTED_EDGE ( 'NONE', *, *, #27641, .F. ) ; +#24654 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 2.322941965694886000, -1.250000000000000000 ) ) ; +#24655 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24656 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999987600, -1.400001745296177300, -7.350000000000005900 ) ) ; +#24657 = ORIENTED_EDGE ( 'NONE', *, *, #30112, .T. ) ; +#24658 = ORIENTED_EDGE ( 'NONE', *, *, #3483, .T. ) ; +#24659 = CLOSED_SHELL ( 'NONE', ( #9304, #9041, #35395, #14963 ) ) ; +#24660 = FACE_OUTER_BOUND ( 'NONE', #5575, .T. ) ; +#24661 = SURFACE_STYLE_FILL_AREA ( #8765 ) ; +#24662 = VECTOR ( 'NONE', #14026, 1000.000000000000000 ) ; +#24663 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24664 = SURFACE_STYLE_FILL_AREA ( #29909 ) ; +#24665 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24666 = VERTEX_POINT ( 'NONE', #19473 ) ; +#24667 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24668 = PRESENTATION_STYLE_ASSIGNMENT (( #28583 ) ) ; +#24669 = EDGE_LOOP ( 'NONE', ( #26541, #1637, #5285, #19442 ) ) ; +#24670 = ADVANCED_FACE ( 'NONE', ( #14159 ), #15914, .T. ) ; +#24671 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, 0.0000000000000000000 ) ) ; +#24672 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24673 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24674 = SURFACE_SIDE_STYLE ('',( #23005 ) ) ; +#24675 = SURFACE_STYLE_FILL_AREA ( #16342 ) ; +#24676 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24677 = EDGE_CURVE ( 'NONE', #20512, #14806, #38889, .T. ) ; +#24678 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12864, 'distance_accuracy_value', 'NONE'); +#24679 = PRESENTATION_STYLE_ASSIGNMENT (( #1502 ) ) ; +#24680 = FILL_AREA_STYLE_COLOUR ( '', #32204 ) ; +#24681 = EDGE_CURVE ( 'NONE', #25787, #30703, #21763, .T. ) ; +#24682 = AXIS2_PLACEMENT_3D ( 'NONE', #5011, #41020, #24528 ) ; +#24683 = CARTESIAN_POINT ( 'NONE', ( -4.856063034915695900, 0.2800000000000027500, -0.6228541982233617400 ) ) ; +#24684 = FILL_AREA_STYLE_COLOUR ( '', #37358 ) ; +#24685 = CIRCLE ( 'NONE', #32813, 1.200001745296169300 ) ; +#24686 = STYLED_ITEM ( 'NONE', ( #30502 ), #22475 ) ; +#24687 = ORIENTED_EDGE ( 'NONE', *, *, #36765, .T. ) ; +#24688 = CARTESIAN_POINT ( 'NONE', ( 4.570925237316274100, -1.009999999999999100, -6.861124800398366500 ) ) ; +#24689 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#24690 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33325 ) ) ; +#24691 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24692 = FILL_AREA_STYLE ('',( #27351 ) ) ; +#24693 = EDGE_LOOP ( 'NONE', ( #29440, #1144, #31721, #19419 ) ) ; +#24694 = LINE ( 'NONE', #26595, #13628 ) ; +#24695 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24696 = LINE ( 'NONE', #14566, #5395 ) ; +#24697 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16800 ) ) ; +#24698 = CYLINDRICAL_SURFACE ( 'NONE', #30903, 0.2999999999999999300 ) ; +#24699 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999500, 0.07499999999999998300, -0.2077317414029915800 ) ) ; +#24700 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5172 ) ) ; +#24701 = ORIENTED_EDGE ( 'NONE', *, *, #6750, .F. ) ; +#24702 = EDGE_LOOP ( 'NONE', ( #15475, #39805, #38697 ) ) ; +#24703 = VECTOR ( 'NONE', #11727, 1000.000000000000000 ) ; +#24704 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24705 = ORIENTED_EDGE ( 'NONE', *, *, #5113, .F. ) ; +#24706 = CARTESIAN_POINT ( 'NONE', ( 2.673205080756886800, 1.630001745296169500, -1.650000000000000800 ) ) ; +#24707 = CIRCLE ( 'NONE', #32576, 0.3600000000000078700 ) ; +#24709 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22506 ) ) ; +#24708 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18999 ), #37651 ) ; +#24710 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24711 = SURFACE_STYLE_FILL_AREA ( #32789 ) ; +#24713 = EDGE_CURVE ( 'NONE', #31594, #23037, #2549, .T. ) ; +#24712 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34809 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4146, #20438, #29997 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24714 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000005300, -1.400001745296163700, -7.350000000000005900 ) ) ; +#24715 = ORIENTED_EDGE ( 'NONE', *, *, #19789, .F. ) ; +#24716 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24717 = FILL_AREA_STYLE ('',( #8689 ) ) ; +#24718 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24719 = ORIENTED_EDGE ( 'NONE', *, *, #37448, .F. ) ; +#24720 = EDGE_LOOP ( 'NONE', ( #19025, #2705, #33920, #31579 ) ) ; +#24721 = VECTOR ( 'NONE', #36438, 1000.000000000000000 ) ; +#24722 = SURFACE_SIDE_STYLE ('',( #35118 ) ) ; +#24724 = EDGE_CURVE ( 'NONE', #1091, #29230, #12092, .T. ) ; +#24723 = AXIS2_PLACEMENT_3D ( 'NONE', #18173, #24534, #5155 ) ; +#24725 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24726 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24727 = EDGE_LOOP ( 'NONE', ( #4688, #8511, #8756, #40044 ) ) ; +#24728 = SURFACE_STYLE_USAGE ( .BOTH. , #31459 ) ; +#24729 = LINE ( 'NONE', #1770, #23182 ) ; +#24730 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, 0.2999999999999999900, -1.600000000000000100 ) ) ; +#24731 = SURFACE_SIDE_STYLE ('',( #14730 ) ) ; +#24732 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24733 = SURFACE_STYLE_FILL_AREA ( #39903 ) ; +#24734 = FILL_AREA_STYLE_COLOUR ( '', #12148 ) ; +#24735 = EDGE_LOOP ( 'NONE', ( #5052, #357, #17844, #7264 ) ) ; +#24736 = CARTESIAN_POINT ( 'NONE', ( -4.599429204713762200, 0.08000174529616799200, -7.186926638587852500 ) ) ; +#24737 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000002800, 1.630001745296169000, -4.000000000000000000 ) ) ; +#24738 = ORIENTED_EDGE ( 'NONE', *, *, #4929, .T. ) ; +#24739 = SURFACE_STYLE_USAGE ( .BOTH. , #11958 ) ; +#24740 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.2999999999999999900, 0.3499999999999999800 ) ) ; +#24741 = VECTOR ( 'NONE', #16331, 1000.000000000000000 ) ; +#24742 = EDGE_CURVE ( 'NONE', #24532, #25465, #16659, .T. ) ; +#24743 = ORIENTED_EDGE ( 'NONE', *, *, #25766, .T. ) ; +#24744 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#24745 = ORIENTED_EDGE ( 'NONE', *, *, #20471, .F. ) ; +#24746 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24747 = VERTEX_POINT ( 'NONE', #32579 ) ; +#24748 = ADVANCED_FACE ( 'NONE', ( #33852 ), #20716, .F. ) ; +#24749 = SURFACE_SIDE_STYLE ('',( #23510 ) ) ; +#24750 = VECTOR ( 'NONE', #12809, 1000.000000000000000 ) ; +#24751 = EDGE_CURVE ( 'NONE', #21814, #19551, #23214, .T. ) ; +#24752 = AXIS2_PLACEMENT_3D ( 'NONE', #32987, #13477, #26499 ) ; +#24753 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25229, 'distance_accuracy_value', 'NONE'); +#24754 = LINE ( 'NONE', #11255, #30267 ) ; +#24755 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, 0.07499999999999998300, 0.6780706550913999700 ) ) ; +#24756 = ORIENTED_EDGE ( 'NONE', *, *, #24637, .F. ) ; +#24757 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24758 = ORIENTED_EDGE ( 'NONE', *, *, #4, .F. ) ; +#24759 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.097720492815730200E-015, -1.000000000000000000 ) ) ; +#24760 = STYLED_ITEM ( 'NONE', ( #25165 ), #14798 ) ; +#24761 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24762 = PLANE ( 'NONE', #6178 ) ; +#24763 = ORIENTED_EDGE ( 'NONE', *, *, #22752, .F. ) ; +#24764 = FACE_OUTER_BOUND ( 'NONE', #19466, .T. ) ; +#24765 = SURFACE_SIDE_STYLE ('',( #14987 ) ) ; +#24766 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12766 ), #8979 ) ; +#24768 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24247 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21997, #25389, #5875 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24767 = FILL_AREA_STYLE ('',( #11575 ) ) ; +#24769 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24770 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#24771 = FILL_AREA_STYLE ('',( #2174 ) ) ; +#24772 = CARTESIAN_POINT ( 'NONE', ( 3.680000000000000200, -1.139998254717349300, -6.299996877890552400 ) ) ; +#24774 = EDGE_CURVE ( 'NONE', #727, #28641, #2032, .T. ) ; +#24773 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6591 ), #16069 ) ; +#24775 = LINE ( 'NONE', #40658, #12057 ) ; +#24776 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#24777 = STYLED_ITEM ( 'NONE', ( #15445 ), #26054 ) ; +#24778 = SURFACE_SIDE_STYLE ('',( #18984 ) ) ; +#24779 = ORIENTED_EDGE ( 'NONE', *, *, #24549, .F. ) ; +#24780 = SURFACE_STYLE_FILL_AREA ( #33413 ) ; +#24781 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000012400, -1.949998254703821300, -2.467712434446768500 ) ) ; +#24782 = ADVANCED_FACE ( 'NONE', ( #7523 ), #996, .F. ) ; +#24783 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24784 = VERTEX_POINT ( 'NONE', #32290 ) ; +#24785 = LINE ( 'NONE', #28579, #14616 ) ; +#24786 = SURFACE_SIDE_STYLE ('',( #5616 ) ) ; +#24787 = VERTEX_POINT ( 'NONE', #16210 ) ; +#24788 = LINE ( 'NONE', #10096, #3508 ) ; +#24789 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#24790 = PRESENTATION_STYLE_ASSIGNMENT (( #38807 ) ) ; +#24791 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24792 = SURFACE_STYLE_FILL_AREA ( #13653 ) ; +#24793 = VERTEX_POINT ( 'NONE', #26811 ) ; +#24794 = SURFACE_STYLE_FILL_AREA ( #35148 ) ; +#24795 = EDGE_LOOP ( 'NONE', ( #28838, #35892, #38285, #8564 ) ) ; +#24796 = ORIENTED_EDGE ( 'NONE', *, *, #10479, .T. ) ; +#24797 = CARTESIAN_POINT ( 'NONE', ( -4.700922750916311600, -0.01999825470386246100, -6.625946193225244600 ) ) ; +#24798 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.2999999999999850000, -4.249999999999998200 ) ) ; +#24799 = SURFACE_SIDE_STYLE ('',( #4855 ) ) ; +#24800 = ADVANCED_FACE ( 'NONE', ( #3481 ), #35849, .T. ) ; +#24801 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17715, 'distance_accuracy_value', 'NONE'); +#24802 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#24803 = ORIENTED_EDGE ( 'NONE', *, *, #6629, .T. ) ; +#24804 = SURFACE_SIDE_STYLE ('',( #13976 ) ) ; +#24805 = FILL_AREA_STYLE_COLOUR ( '', #37044 ) ; +#24806 = FILL_AREA_STYLE_COLOUR ( '', #29074 ) ; +#24807 = EDGE_CURVE ( 'NONE', #32918, #30655, #486, .T. ) ; +#24808 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#24809 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24810 = EDGE_CURVE ( 'NONE', #27706, #17394, #26227, .T. ) ; +#24811 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24812 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24813 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16211, 'distance_accuracy_value', 'NONE'); +#24814 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24815 = STYLED_ITEM ( 'NONE', ( #30442 ), #15919 ) ; +#24816 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#24817 = SURFACE_STYLE_FILL_AREA ( #32568 ) ; +#24818 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24819 = ORIENTED_EDGE ( 'NONE', *, *, #14502, .T. ) ; +#24820 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24821 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27165 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23353, #10893, #10617 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24822 = FILL_AREA_STYLE ('',( #12463 ) ) ; +#24823 = EDGE_LOOP ( 'NONE', ( #28826, #1724, #10587, #23207, #29258, #4030, #40998, #2711 ) ) ; +#24824 = LINE ( 'NONE', #37574, #37908 ) ; +#24825 = SURFACE_STYLE_FILL_AREA ( #18576 ) ; +#24826 = AXIS2_PLACEMENT_3D ( 'NONE', #25194, #41264, #12286 ) ; +#24827 = VECTOR ( 'NONE', #16698, 1000.000000000000000 ) ; +#24830 = EDGE_CURVE ( 'NONE', #11160, #12804, #2512, .T. ) ; +#24829 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000800, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#24828 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17507 ), #31834 ) ; +#24831 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, 0.07499999999999999700, 0.01000000000000000400 ) ) ; +#24832 = ORIENTED_EDGE ( 'NONE', *, *, #30765, .T. ) ; +#24833 = ORIENTED_EDGE ( 'NONE', *, *, #3772, .T. ) ; +#24835 = ORIENTED_EDGE ( 'NONE', *, *, #9393, .T. ) ; +#24834 = ADVANCED_FACE ( 'NONE', ( #24764 ), #29610, .F. ) ; +#24836 = FILL_AREA_STYLE ('',( #30735 ) ) ; +#24837 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#24839 = AXIS2_PLACEMENT_3D ( 'NONE', #321, #10416, #4678 ) ; +#24838 = AXIS2_PLACEMENT_3D ( 'NONE', #30869, #24250, #20893 ) ; +#24840 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#24841 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#24842 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26159 ), #6653 ) ; +#24843 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.1000000000000149000, -4.250000000000000000 ) ) ; +#24844 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13152 ), #7456 ) ; +#24845 = VERTEX_POINT ( 'NONE', #16630 ) ; +#24846 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #59, 'distance_accuracy_value', 'NONE'); +#24847 = SURFACE_STYLE_FILL_AREA ( #41318 ) ; +#24848 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#24849 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.380001745296130600, -6.031671842700004200 ) ) ; +#24850 = DIRECTION ( 'NONE', ( -4.336808689942020900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#24851 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026400, 0.0000000000000000000 ) ) ; +#24852 = FILL_AREA_STYLE ('',( #12225 ) ) ; +#24853 = VECTOR ( 'NONE', #38089, 1000.000000000000000 ) ; +#24854 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24855 = ORIENTED_EDGE ( 'NONE', *, *, #17370, .T. ) ; +#24856 = SURFACE_STYLE_USAGE ( .BOTH. , #8412 ) ; +#24857 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#24858 = SURFACE_STYLE_USAGE ( .BOTH. , #15633 ) ; +#24859 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24860 = ORIENTED_EDGE ( 'NONE', *, *, #33894, .F. ) ; +#24861 = VECTOR ( 'NONE', #15929, 1000.000000000000000 ) ; +#24862 = EDGE_CURVE ( 'NONE', #22030, #3084, #16622, .T. ) ; +#24863 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#24864 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24865 = FILL_AREA_STYLE ('',( #34567 ) ) ; +#24866 = EDGE_CURVE ( 'NONE', #9239, #29721, #8532, .T. ) ; +#24867 = LINE ( 'NONE', #10861, #2617 ) ; +#24868 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#24869 = LINE ( 'NONE', #28958, #11686 ) ; +#24870 = VERTEX_POINT ( 'NONE', #33293 ) ; +#24871 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31698, 'distance_accuracy_value', 'NONE'); +#24872 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -2.294459358809381100 ) ) ; +#24873 = ORIENTED_EDGE ( 'NONE', *, *, #33731, .T. ) ; +#24874 = ORIENTED_EDGE ( 'NONE', *, *, #40736, .F. ) ; +#24875 = EDGE_CURVE ( 'NONE', #22297, #16611, #32778, .T. ) ; +#24876 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 0.6800017452961684100, -3.999999999999999100 ) ) ; +#24877 = EDGE_CURVE ( 'NONE', #28390, #31318, #22705, .T. ) ; +#24878 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.2999999999999999900, 0.3499999999999999800 ) ) ; +#24879 = ORIENTED_EDGE ( 'NONE', *, *, #2278, .T. ) ; +#24880 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#24881 = VECTOR ( 'NONE', #35553, 1000.000000000000000 ) ; +#24882 = ORIENTED_EDGE ( 'NONE', *, *, #15051, .T. ) ; +#24883 = ADVANCED_FACE ( 'NONE', ( #6516 ), #7971, .T. ) ; +#24884 = PRESENTATION_STYLE_ASSIGNMENT (( #8396 ) ) ; +#24885 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5110 ), #35674 ) ; +#24886 = LINE ( 'NONE', #41669, #6168 ) ; +#24887 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, 0.2800017452961687200, -6.449999999999999300 ) ) ; +#24889 = EDGE_CURVE ( 'NONE', #29721, #26617, #23668, .T. ) ; +#24888 = STYLED_ITEM ( 'NONE', ( #6970 ), #24010 ) ; +#24890 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29548, 'distance_accuracy_value', 'NONE'); +#24891 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24892 = CARTESIAN_POINT ( 'NONE', ( 2.400000000000000400, -1.139998254717352600, -5.049996877890552400 ) ) ; +#24893 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#24894 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.499998254703827100, -5.049999999999993600 ) ) ; +#24896 = STYLED_ITEM ( 'NONE', ( #3384 ), #3771 ) ; +#24895 = STYLED_ITEM ( 'NONE', ( #15937 ), #28180 ) ; +#24897 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15398 ), #7518 ) ; +#24898 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24899 = SURFACE_SIDE_STYLE ('',( #18357 ) ) ; +#24900 = ORIENTED_EDGE ( 'NONE', *, *, #18376, .F. ) ; +#24901 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10296 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20019, #3726, #35828 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24902 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#24903 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10195 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7532, #7683, #17171 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24904 = ORIENTED_EDGE ( 'NONE', *, *, #6451, .F. ) ; +#24905 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24906 = PLANE ( 'NONE', #23599 ) ; +#24907 = FILL_AREA_STYLE ('',( #37988 ) ) ; +#24908 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000000000, 1.480001745296169600, -1.649999999999999900 ) ) ; +#24909 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24910 = SURFACE_STYLE_FILL_AREA ( #6510 ) ; +#24911 = VERTEX_POINT ( 'NONE', #20609 ) ; +#24912 = SURFACE_SIDE_STYLE ('',( #32529 ) ) ; +#24913 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -10.30000000000000100, -1.250000000000000000 ) ) ; +#24914 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.4300017452961689100, -5.250000000000000000 ) ) ; +#24915 = DIRECTION ( 'NONE', ( -0.9396926207856547400, 0.0000000000000000000, -0.3420201433263653800 ) ) ; +#24916 = VERTEX_POINT ( 'NONE', #30164 ) ; +#24917 = LINE ( 'NONE', #15087, #16293 ) ; +#24918 = VECTOR ( 'NONE', #41077, 1000.000000000000000 ) ; +#24919 = ORIENTED_EDGE ( 'NONE', *, *, #5770, .T. ) ; +#24920 = SURFACE_STYLE_FILL_AREA ( #35878 ) ; +#24921 = SURFACE_SIDE_STYLE ('',( #23540 ) ) ; +#24922 = VECTOR ( 'NONE', #4051, 1000.000000000000000 ) ; +#24923 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#24924 = LINE ( 'NONE', #41279, #15299 ) ; +#24925 = PRESENTATION_STYLE_ASSIGNMENT (( #28655 ) ) ; +#24926 = LINE ( 'NONE', #32042, #19846 ) ; +#24927 = EDGE_CURVE ( 'NONE', #38828, #24666, #15083, .T. ) ; +#24928 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#24929 = CARTESIAN_POINT ( 'NONE', ( 3.458233997336492400, 1.005153670744121500, -4.549999999999999800 ) ) ; +#24930 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244521200E-016 ) ) ; +#24931 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#24932 = EDGE_CURVE ( 'NONE', #37672, #19555, #22179, .T. ) ; +#24933 = VERTEX_POINT ( 'NONE', #23823 ) ; +#24934 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6657, 'distance_accuracy_value', 'NONE'); +#24935 = SURFACE_STYLE_FILL_AREA ( #15265 ) ; +#24936 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24937 = SURFACE_STYLE_USAGE ( .BOTH. , #31400 ) ; +#24938 = FILL_AREA_STYLE ('',( #5406 ) ) ; +#24939 = STYLED_ITEM ( 'NONE', ( #29477 ), #22462 ) ; +#24940 = ORIENTED_EDGE ( 'NONE', *, *, #4799, .F. ) ; +#24941 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30600 ) ) ; +#24942 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2000000000000000400, 1.149999999999999900 ) ) ; +#24943 = ORIENTED_EDGE ( 'NONE', *, *, #34696, .T. ) ; +#24945 = STYLED_ITEM ( 'NONE', ( #38695 ), #47 ) ; +#24944 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24947 = PRESENTATION_STYLE_ASSIGNMENT (( #2627 ) ) ; +#24946 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#24948 = CYLINDRICAL_SURFACE ( 'NONE', #20684, 0.1000000000000001600 ) ; +#24949 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#24950 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23302 ), #28427 ) ; +#24951 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#24952 = ORIENTED_EDGE ( 'NONE', *, *, #17975, .F. ) ; +#24953 = ORIENTED_EDGE ( 'NONE', *, *, #4091, .F. ) ; +#24954 = ADVANCED_FACE ( 'NONE', ( #40839 ), #33848, .F. ) ; +#24955 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12850 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17021, #39025, #540 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#24956 = CARTESIAN_POINT ( 'NONE', ( 4.449999999999999300, -0.01999825470383242600, -7.200000000000001100 ) ) ; +#24957 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24958 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#24959 = EDGE_CURVE ( 'NONE', #14492, #21841, #11537, .T. ) ; +#24960 = EDGE_LOOP ( 'NONE', ( #1985, #10160, #12363, #35036 ) ) ; +#24961 = CIRCLE ( 'NONE', #35925, 0.2999999999999999300 ) ; +#24962 = ORIENTED_EDGE ( 'NONE', *, *, #22735, .T. ) ; +#24963 = SURFACE_STYLE_FILL_AREA ( #18809 ) ; +#24965 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22754 ) ) ; +#24964 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24966 = PRESENTATION_STYLE_ASSIGNMENT (( #12568 ) ) ; +#24967 = DIRECTION ( 'NONE', ( 1.000000000000000000, -4.798681814596972500E-016, 0.0000000000000000000 ) ) ; +#24968 = SURFACE_STYLE_FILL_AREA ( #21685 ) ; +#24969 = AXIS2_PLACEMENT_3D ( 'NONE', #10669, #36401, #20325 ) ; +#24970 = DIRECTION ( 'NONE', ( -7.744301232039317900E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24971 = FILL_AREA_STYLE ('',( #2096 ) ) ; +#24972 = SURFACE_STYLE_USAGE ( .BOTH. , #41029 ) ; +#24973 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#24974 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11543, 'distance_accuracy_value', 'NONE'); +#24975 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#24976 = DIRECTION ( 'NONE', ( -4.336808689942020900E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#24977 = VECTOR ( 'NONE', #21365, 1000.000000000000000 ) ; +#24978 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#24979 = ORIENTED_EDGE ( 'NONE', *, *, #2413, .F. ) ; +#24980 = CARTESIAN_POINT ( 'NONE', ( -0.6000000000000000900, -1.139998254717362600, -5.049996877890552400 ) ) ; +#24981 = CIRCLE ( 'NONE', #16755, 0.1000000000000001600 ) ; +#24982 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#24983 = PRESENTATION_STYLE_ASSIGNMENT (( #20058 ) ) ; +#24984 = DIRECTION ( 'NONE', ( -0.9396926207856547400, 0.0000000000000000000, 0.3420201433263653800 ) ) ; +#24985 = ORIENTED_EDGE ( 'NONE', *, *, #2868, .F. ) ; +#24986 = FILL_AREA_STYLE_COLOUR ( '', #36084 ) ; +#24987 = ADVANCED_FACE ( 'NONE', ( #14600 ), #25709, .F. ) ; +#24988 = EDGE_CURVE ( 'NONE', #10090, #8041, #35309, .T. ) ; +#24989 = ORIENTED_EDGE ( 'NONE', *, *, #4906, .F. ) ; +#24991 = VERTEX_POINT ( 'NONE', #5016 ) ; +#24990 = CYLINDRICAL_SURFACE ( 'NONE', #36534, 0.8000000000000003800 ) ; +#24992 = ORIENTED_EDGE ( 'NONE', *, *, #19317, .F. ) ; +#24993 = PLANE ( 'NONE', #10240 ) ; +#24994 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#24995 = EDGE_CURVE ( 'NONE', #26750, #33011, #37156, .T. ) ; +#24996 = AXIS2_PLACEMENT_3D ( 'NONE', #14796, #17922, #33882 ) ; +#24997 = CIRCLE ( 'NONE', #37353, 1.493004880385253600 ) ; +#24998 = LINE ( 'NONE', #19267, #16364 ) ; +#24999 = PRESENTATION_STYLE_ASSIGNMENT (( #18540 ) ) ; +#25000 = PLANE ( 'NONE', #20235 ) ; +#25001 = SURFACE_SIDE_STYLE ('',( #471 ) ) ; +#25002 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#25003 = ADVANCED_FACE ( 'NONE', ( #9504 ), #21575, .T. ) ; +#25004 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25784 ), #35802 ) ; +#25005 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.380001745296130600, -6.031671842700004200 ) ) ; +#25006 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -5.075000000000000200 ) ) ; +#25007 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#25008 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#25009 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37160 ) ) ; +#25010 = AXIS2_PLACEMENT_3D ( 'NONE', #28651, #12673, #31892 ) ; +#25011 = SURFACE_STYLE_USAGE ( .BOTH. , #5896 ) ; +#25012 = PRESENTATION_STYLE_ASSIGNMENT (( #41489 ) ) ; +#25014 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16065 ), #24768 ) ; +#25013 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16231 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25483, #22095, #5840 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25015 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -1.999999999999999600 ) ) ; +#25018 = EDGE_CURVE ( 'NONE', #3541, #14924, #30723, .T. ) ; +#25017 = PLANE ( 'NONE', #23438 ) ; +#25016 = AXIS2_PLACEMENT_3D ( 'NONE', #9608, #39118, #26151 ) ; +#25019 = PLANE ( 'NONE', #7832 ) ; +#25020 = ORIENTED_EDGE ( 'NONE', *, *, #5659, .F. ) ; +#25022 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31484 ), #40944 ) ; +#25021 = STYLED_ITEM ( 'NONE', ( #35185 ), #25405 ) ; +#25023 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25024 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#25025 = VECTOR ( 'NONE', #24665, 1000.000000000000000 ) ; +#25026 = FILL_AREA_STYLE ('',( #18378 ) ) ; +#25027 = SURFACE_STYLE_USAGE ( .BOTH. , #24601 ) ; +#25028 = ORIENTED_EDGE ( 'NONE', *, *, #14805, .F. ) ; +#25029 = ORIENTED_EDGE ( 'NONE', *, *, #11702, .T. ) ; +#25030 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, 0.6000000000000003100, -3.279289321881345000 ) ) ; +#25031 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13767, 'distance_accuracy_value', 'NONE'); +#25032 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.4300017452961695800, -6.899999999999998600 ) ) ; +#25033 = SURFACE_STYLE_FILL_AREA ( #36834 ) ; +#25034 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25035 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 1.485356976305141100E-014, 0.0000000000000000000 ) ) ; +#25036 = CYLINDRICAL_SURFACE ( 'NONE', #22581, 0.3000000000000003800 ) ; +#25038 = VERTEX_POINT ( 'NONE', #2368 ) ; +#25037 = ADVANCED_FACE ( 'NONE', ( #2950 ), #24381, .F. ) ; +#25039 = VECTOR ( 'NONE', #29947, 1000.000000000000000 ) ; +#25040 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.380001745296131500, -4.781671842700004200 ) ) ; +#25041 = LINE ( 'NONE', #12175, #34605 ) ; +#25042 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.499998254703840000, -5.449999999999994000 ) ) ; +#25043 = EDGE_LOOP ( 'NONE', ( #24763, #36992, #3236, #31238 ) ) ; +#25044 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25045 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25046 = EDGE_CURVE ( 'NONE', #38078, #13841, #7967, .T. ) ; +#25047 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.639746250635450300E-015, 0.0000000000000000000 ) ) ; +#25048 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000030900, 0.2800017452961687200, -6.449999999999999300 ) ) ; +#25049 = TOROIDAL_SURFACE ( 'NONE', #39048, 1.350424214906979400, 0.1000000000000002800 ) ; +#25050 = CARTESIAN_POINT ( 'NONE', ( 3.098553390642141200, 0.3499999999999999200, -1.650000000053452900 ) ) ; +#25051 = ADVANCED_FACE ( 'NONE', ( #5960 ), #28173, .T. ) ; +#25052 = VERTEX_POINT ( 'NONE', #40401 ) ; +#25053 = ORIENTED_EDGE ( 'NONE', *, *, #8966, .F. ) ; +#25054 = EDGE_CURVE ( 'NONE', #27120, #14329, #10481, .T. ) ; +#25055 = SURFACE_STYLE_USAGE ( .BOTH. , #21809 ) ; +#25056 = EDGE_LOOP ( 'NONE', ( #36147, #41645, #13712, #24796 ) ) ; +#25057 = DIRECTION ( 'NONE', ( 0.3420201433263654300, 0.0000000000000000000, -0.9396926207856548500 ) ) ; +#25058 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#25059 = ORIENTED_EDGE ( 'NONE', *, *, #33049, .T. ) ; +#25060 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41516 ), #23418 ) ; +#25061 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37213 ) ) ; +#25062 = ORIENTED_EDGE ( 'NONE', *, *, #17223, .F. ) ; +#25063 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25064 = DIRECTION ( 'NONE', ( -2.224004456380521900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#25066 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16707, 'distance_accuracy_value', 'NONE'); +#25065 = PRESENTATION_STYLE_ASSIGNMENT (( #10834 ) ) ; +#25067 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35868 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34429, #40769, #21757 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25068 = FACE_OUTER_BOUND ( 'NONE', #15115, .T. ) ; +#25069 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25070 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#25072 = EDGE_CURVE ( 'NONE', #18981, #36310, #21152, .T. ) ; +#25071 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #447 ), #21295 ) ; +#25073 = ORIENTED_EDGE ( 'NONE', *, *, #38599, .F. ) ; +#25074 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#25075 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.2800017452961687200, -6.199999999999999300 ) ) ; +#25076 = VECTOR ( 'NONE', #38307, 1000.000000000000000 ) ; +#25077 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13114, 'distance_accuracy_value', 'NONE'); +#25078 = CIRCLE ( 'NONE', #25330, 0.3000000000000003800 ) ; +#25079 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25081 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20189 ) ) ; +#25080 = STYLED_ITEM ( 'NONE', ( #31849 ), #27112 ) ; +#25082 = ORIENTED_EDGE ( 'NONE', *, *, #15258, .F. ) ; +#25083 = AXIS2_PLACEMENT_3D ( 'NONE', #15528, #25562, #25698 ) ; +#25084 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25085 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25086 = ADVANCED_FACE ( 'NONE', ( #34775 ), #40304, .T. ) ; +#25087 = SURFACE_SIDE_STYLE ('',( #13395 ) ) ; +#25088 = PLANE ( 'NONE', #24631 ) ; +#25089 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, -0.7071067811865483500 ) ) ; +#25090 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25091 = ORIENTED_EDGE ( 'NONE', *, *, #32174, .F. ) ; +#25092 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.380001745296129100, -6.031671842700004200 ) ) ; +#25093 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25094 = VECTOR ( 'NONE', #6865, 1000.000000000000000 ) ; +#25095 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#25096 = VECTOR ( 'NONE', #8424, 1000.000000000000000 ) ; +#25097 = PLANE ( 'NONE', #20496 ) ; +#25098 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#25099 = EDGE_CURVE ( 'NONE', #32708, #34849, #31733, .T. ) ; +#25100 = VERTEX_POINT ( 'NONE', #14584 ) ; +#25101 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25102 = VERTEX_POINT ( 'NONE', #1910 ) ; +#25103 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25104 = EDGE_LOOP ( 'NONE', ( #26893, #18972, #5320, #32517 ) ) ; +#25105 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#25106 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25107 = CYLINDRICAL_SURFACE ( 'NONE', #39372, 0.1000000000000000500 ) ; +#25108 = EDGE_CURVE ( 'NONE', #8814, #30235, #18101, .T. ) ; +#25109 = CIRCLE ( 'NONE', #15397, 0.9499999999999999600 ) ; +#25110 = SURFACE_STYLE_USAGE ( .BOTH. , #38194 ) ; +#25111 = ORIENTED_EDGE ( 'NONE', *, *, #9641, .T. ) ; +#25112 = LINE ( 'NONE', #35790, #16978 ) ; +#25113 = ORIENTED_EDGE ( 'NONE', *, *, #38601, .T. ) ; +#25114 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25115 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.5300017452961690600, -4.099999999999997900 ) ) ; +#25116 = STYLED_ITEM ( 'NONE', ( #37983 ), #16341 ) ; +#25117 = PRESENTATION_STYLE_ASSIGNMENT (( #4732 ) ) ; +#25118 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27652, 'distance_accuracy_value', 'NONE'); +#25119 = SURFACE_SIDE_STYLE ('',( #13511 ) ) ; +#25120 = VECTOR ( 'NONE', #32706, 1000.000000000000000 ) ; +#25121 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#25122 = FILL_AREA_STYLE ('',( #24986 ) ) ; +#25123 = ORIENTED_EDGE ( 'NONE', *, *, #33738, .T. ) ; +#25124 = AXIS2_PLACEMENT_3D ( 'NONE', #13541, #3529, #608 ) ; +#25125 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30787 ) ) ; +#25126 = FILL_AREA_STYLE ('',( #41200 ) ) ; +#25128 = EDGE_CURVE ( 'NONE', #21920, #20979, #15560, .T. ) ; +#25127 = STYLED_ITEM ( 'NONE', ( #17345 ), #37468 ) ; +#25129 = CARTESIAN_POINT ( 'NONE', ( -3.500000000000003100, 0.2800017452961687200, -6.749999999999999100 ) ) ; +#25130 = SURFACE_STYLE_FILL_AREA ( #39147 ) ; +#25131 = ORIENTED_EDGE ( 'NONE', *, *, #37585, .F. ) ; +#25132 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#25133 = SURFACE_SIDE_STYLE ('',( #7965 ) ) ; +#25134 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#25136 = AXIS2_PLACEMENT_3D ( 'NONE', #11021, #27275, #30521 ) ; +#25135 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #526 ), #6422 ) ; +#25137 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25138 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18074 ), #31602 ) ; +#25139 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11250, 'distance_accuracy_value', 'NONE'); +#25140 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#25141 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25142 = SURFACE_STYLE_FILL_AREA ( #26262 ) ; +#25143 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9910 ), #18882 ) ; +#25144 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25145 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25146 = ORIENTED_EDGE ( 'NONE', *, *, #9664, .T. ) ; +#25147 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16447 ), #20007 ) ; +#25148 = ORIENTED_EDGE ( 'NONE', *, *, #22141, .T. ) ; +#25149 = FACE_OUTER_BOUND ( 'NONE', #795, .T. ) ; +#25150 = ORIENTED_EDGE ( 'NONE', *, *, #37079, .F. ) ; +#25151 = PRESENTATION_STYLE_ASSIGNMENT (( #32135 ) ) ; +#25152 = LINE ( 'NONE', #40970, #38749 ) ; +#25153 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -2.322941965694886000, -1.250000000000000000 ) ) ; +#25154 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#25155 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#25156 = PRESENTATION_STYLE_ASSIGNMENT (( #39736 ) ) ; +#25157 = VERTEX_POINT ( 'NONE', #40685 ) ; +#25158 = FILL_AREA_STYLE_COLOUR ( '', #14691 ) ; +#25159 = VERTEX_POINT ( 'NONE', #30542 ) ; +#25160 = LINE ( 'NONE', #36439, #16531 ) ; +#25161 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.258751240853227700E-015, 0.0000000000000000000 ) ) ; +#25162 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25163 = PRESENTATION_STYLE_ASSIGNMENT (( #11180 ) ) ; +#25164 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#25165 = PRESENTATION_STYLE_ASSIGNMENT (( #8211 ) ) ; +#25166 = FILL_AREA_STYLE_COLOUR ( '', #15625 ) ; +#25167 = PLANE ( 'NONE', #25792 ) ; +#25168 = MANIFOLD_SOLID_BREP ( '1-1-solid12', #15206 ) ; +#25169 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25170 = VECTOR ( 'NONE', #35238, 1000.000000000000000 ) ; +#25171 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25172 = EDGE_CURVE ( 'NONE', #15061, #19680, #29021, .T. ) ; +#25173 = ORIENTED_EDGE ( 'NONE', *, *, #29895, .F. ) ; +#25174 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0002094395087002862800, -0.9999999780675458100 ) ) ; +#25175 = AXIS2_PLACEMENT_3D ( 'NONE', #2208, #37336, #2070 ) ; +#25176 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.8190279881558656400, 0.5737535661042597600 ) ) ; +#25177 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, -10.30000000000000100, -1.250000000000000000 ) ) ; +#25178 = EDGE_CURVE ( 'NONE', #7393, #1102, #20640, .T. ) ; +#25179 = LINE ( 'NONE', #22912, #40776 ) ; +#25180 = CYLINDRICAL_SURFACE ( 'NONE', #16128, 0.05000000000000056500 ) ; +#25181 = SURFACE_SIDE_STYLE ('',( #27190 ) ) ; +#25182 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25359 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35501, #22640, #9625 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25183 = ORIENTED_EDGE ( 'NONE', *, *, #22667, .F. ) ; +#25184 = VERTEX_POINT ( 'NONE', #4828 ) ; +#25185 = VERTEX_POINT ( 'NONE', #5242 ) ; +#25186 = CARTESIAN_POINT ( 'NONE', ( 3.024289321881345600, 0.3499999999999998100, -1.529289321918762200 ) ) ; +#25187 = AXIS2_PLACEMENT_3D ( 'NONE', #33599, #27657, #27943 ) ; +#25188 = SURFACE_STYLE_USAGE ( .BOTH. , #31231 ) ; +#25189 = LINE ( 'NONE', #10690, #427 ) ; +#25192 = EDGE_CURVE ( 'NONE', #31276, #36115, #14511, .T. ) ; +#25191 = STYLED_ITEM ( 'NONE', ( #15980 ), #24438 ) ; +#25190 = FILL_AREA_STYLE ('',( #31643 ) ) ; +#25193 = LINE ( 'NONE', #27915, #13513 ) ; +#25194 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -3.700000000000000200 ) ) ; +#25195 = ORIENTED_EDGE ( 'NONE', *, *, #10006, .T. ) ; +#25196 = ORIENTED_EDGE ( 'NONE', *, *, #14320, .F. ) ; +#25198 = EDGE_LOOP ( 'NONE', ( #35641, #29697, #39835, #33517 ) ) ; +#25197 = ADVANCED_FACE ( 'NONE', ( #31200 ), #37181, .T. ) ; +#25199 = SURFACE_SIDE_STYLE ('',( #31610 ) ) ; +#25201 = AXIS2_PLACEMENT_3D ( 'NONE', #8730, #2718, #18254 ) ; +#25200 = STYLED_ITEM ( 'NONE', ( #27432 ), #28606 ) ; +#25203 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14109 ) ) ; +#25202 = STYLED_ITEM ( 'NONE', ( #41014 ), #33937 ) ; +#25204 = ORIENTED_EDGE ( 'NONE', *, *, #39653, .T. ) ; +#25205 = STYLED_ITEM ( 'NONE', ( #2214 ), #8368 ) ; +#25206 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9802, 'distance_accuracy_value', 'NONE'); +#25207 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25208 = ADVANCED_FACE ( 'NONE', ( #19610 ), #28544, .F. ) ; +#25209 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999992000, -1.500001745296177600, -6.526326723416074700 ) ) ; +#25210 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 0.6800017452961697500, -1.649999999999999500 ) ) ; +#25211 = FILL_AREA_STYLE_COLOUR ( '', #20385 ) ; +#25212 = LINE ( 'NONE', #21029, #15569 ) ; +#25213 = ORIENTED_EDGE ( 'NONE', *, *, #34672, .T. ) ; +#25214 = ORIENTED_EDGE ( 'NONE', *, *, #22851, .F. ) ; +#25215 = CARTESIAN_POINT ( 'NONE', ( -3.137984242873222300, -0.2999999999999999300, 0.9623819784616983700 ) ) ; +#25216 = ORIENTED_EDGE ( 'NONE', *, *, #5331, .T. ) ; +#25217 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -0.6228541982233617400 ) ) ; +#25218 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.499998254703833500, -5.449999999999994000 ) ) ; +#25219 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25220 = VECTOR ( 'NONE', #35544, 1000.000000000000000 ) ; +#25221 = FILL_AREA_STYLE_COLOUR ( '', #4823 ) ; +#25222 = ORIENTED_EDGE ( 'NONE', *, *, #31325, .T. ) ; +#25223 = ORIENTED_EDGE ( 'NONE', *, *, #24251, .T. ) ; +#25224 = ORIENTED_EDGE ( 'NONE', *, *, #5338, .T. ) ; +#25225 = LINE ( 'NONE', #6296, #40326 ) ; +#25226 = PRESENTATION_STYLE_ASSIGNMENT (( #32305 ) ) ; +#25227 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.139998254717352600, -5.049996877890552400 ) ) ; +#25228 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18777, 'distance_accuracy_value', 'NONE'); +#25229 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25230 = FACE_OUTER_BOUND ( 'NONE', #7593, .T. ) ; +#25231 = VERTEX_POINT ( 'NONE', #24914 ) ; +#25232 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#25233 = ORIENTED_EDGE ( 'NONE', *, *, #35476, .T. ) ; +#25234 = VERTEX_POINT ( 'NONE', #9160 ) ; +#25235 = EDGE_CURVE ( 'NONE', #24153, #727, #37244, .T. ) ; +#25236 = VECTOR ( 'NONE', #35361, 1000.000000000000000 ) ; +#25237 = FILL_AREA_STYLE_COLOUR ( '', #19039 ) ; +#25238 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25239 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.2800017452961688400, -5.200000000000000200 ) ) ; +#25240 = EDGE_CURVE ( 'NONE', #15695, #41461, #29165, .T. ) ; +#25241 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9662 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39655, #1424, #17226 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25242 = CARTESIAN_POINT ( 'NONE', ( -2.573205080756887100, 1.480001745296169600, -1.750000000000000200 ) ) ; +#25243 = VERTEX_POINT ( 'NONE', #41116 ) ; +#25244 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25245 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24416 ) ) ; +#25246 = ADVANCED_FACE ( 'NONE', ( #41302 ), #916, .F. ) ; +#25247 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.5199999999999842500, -5.299999999999999800 ) ) ; +#25248 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, 0.5999999999999998700, -3.249999999999999600 ) ) ; +#25249 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19745 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39870, #14058, #26485 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25250 = LINE ( 'NONE', #34226, #10519 ) ; +#25251 = SURFACE_SIDE_STYLE ('',( #22830 ) ) ; +#25252 = FILL_AREA_STYLE ('',( #41183 ) ) ; +#25253 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26661 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14149, #40805, #31056 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25254 = AXIS2_PLACEMENT_3D ( 'NONE', #36188, #4382, #16819 ) ; +#25255 = SURFACE_STYLE_USAGE ( .BOTH. , #31980 ) ; +#25256 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.830380236995680300, -0.8400000000000000800 ) ) ; +#25257 = ADVANCED_FACE ( 'NONE', ( #11969 ), #34219, .T. ) ; +#25259 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35254 ) ) ; +#25258 = STYLED_ITEM ( 'NONE', ( #24462 ), #29843 ) ; +#25260 = FILL_AREA_STYLE ('',( #28331 ) ) ; +#25261 = ORIENTED_EDGE ( 'NONE', *, *, #1208, .T. ) ; +#25263 = EDGE_CURVE ( 'NONE', #9767, #29937, #26108, .T. ) ; +#25262 = AXIS2_PLACEMENT_3D ( 'NONE', #5403, #34231, #37742 ) ; +#25264 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25265 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25266 = SURFACE_SIDE_STYLE ('',( #26510 ) ) ; +#25267 = PRESENTATION_STYLE_ASSIGNMENT (( #31216 ) ) ; +#25268 = ORIENTED_EDGE ( 'NONE', *, *, #41779, .T. ) ; +#25269 = SURFACE_STYLE_FILL_AREA ( #10384 ) ; +#25271 = AXIS2_PLACEMENT_3D ( 'NONE', #35042, #15691, #38283 ) ; +#25270 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24503 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31283, #21713, #8662 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25272 = LINE ( 'NONE', #20488, #41400 ) ; +#25273 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13620, 'distance_accuracy_value', 'NONE'); +#25274 = LINE ( 'NONE', #10522, #32312 ) ; +#25275 = ORIENTED_EDGE ( 'NONE', *, *, #6861, .F. ) ; +#25276 = LINE ( 'NONE', #6723, #522 ) ; +#25277 = ORIENTED_EDGE ( 'NONE', *, *, #26033, .T. ) ; +#25278 = ORIENTED_EDGE ( 'NONE', *, *, #390, .F. ) ; +#25279 = FILL_AREA_STYLE ('',( #28074 ) ) ; +#25280 = SURFACE_SIDE_STYLE ('',( #14752 ) ) ; +#25281 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1122, 'distance_accuracy_value', 'NONE'); +#25282 = CARTESIAN_POINT ( 'NONE', ( 2.900000000000000400, -1.380001745296126800, -5.449999999999994000 ) ) ; +#25283 = ORIENTED_EDGE ( 'NONE', *, *, #33113, .F. ) ; +#25284 = PRESENTATION_STYLE_ASSIGNMENT (( #28905 ) ) ; +#25285 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#25286 = FILL_AREA_STYLE ('',( #15644 ) ) ; +#25287 = LINE ( 'NONE', #5972, #31809 ) ; +#25288 = FACE_OUTER_BOUND ( 'NONE', #11002, .T. ) ; +#25289 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.279999999999999800, -0.2000017452961698200 ) ) ; +#25290 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#25291 = CYLINDRICAL_SURFACE ( 'NONE', #37647, 0.9999999999999995600 ) ; +#25292 = EDGE_CURVE ( 'NONE', #36606, #31055, #9892, .T. ) ; +#25293 = ADVANCED_FACE ( 'NONE', ( #18052 ), #35227, .F. ) ; +#25294 = LINE ( 'NONE', #32992, #2567 ) ; +#25295 = SURFACE_SIDE_STYLE ('',( #36143 ) ) ; +#25296 = EDGE_CURVE ( 'NONE', #39138, #39776, #40756, .T. ) ; +#25297 = ORIENTED_EDGE ( 'NONE', *, *, #17871, .T. ) ; +#25298 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#25299 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.5199999999999843600, -4.500000000000000000 ) ) ; +#25300 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.9500017452961654300, -5.700000000000000200 ) ) ; +#25301 = ORIENTED_EDGE ( 'NONE', *, *, #20123, .F. ) ; +#25302 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#25303 = ORIENTED_EDGE ( 'NONE', *, *, #27830, .F. ) ; +#25304 = CARTESIAN_POINT ( 'NONE', ( -3.179314575050761900, 0.6000000000000003100, -3.250000000000000400 ) ) ; +#25305 = CYLINDRICAL_SURFACE ( 'NONE', #1216, 0.1000000000000001600 ) ; +#25306 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18976 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40229, #11701, #33760 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25307 = CIRCLE ( 'NONE', #4437, 0.3600000000000078700 ) ; +#25308 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#25309 = CYLINDRICAL_SURFACE ( 'NONE', #17807, 0.3600000000000078700 ) ; +#25310 = ORIENTED_EDGE ( 'NONE', *, *, #9463, .T. ) ; +#25311 = FILL_AREA_STYLE ('',( #2440 ) ) ; +#25312 = PRESENTATION_STYLE_ASSIGNMENT (( #7888 ) ) ; +#25313 = ORIENTED_EDGE ( 'NONE', *, *, #7860, .T. ) ; +#25314 = VERTEX_POINT ( 'NONE', #6993 ) ; +#25315 = VECTOR ( 'NONE', #10662, 1000.000000000000000 ) ; +#25316 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13946 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39624, #23541, #16489 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25317 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23111 ) ) ; +#25318 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6144 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26900, #33649, #30680 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25319 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25320 = SURFACE_SIDE_STYLE ('',( #24963 ) ) ; +#25321 = SURFACE_SIDE_STYLE ('',( #7589 ) ) ; +#25322 = EDGE_CURVE ( 'NONE', #29681, #26083, #33682, .T. ) ; +#25323 = VERTEX_POINT ( 'NONE', #32855 ) ; +#25324 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000013900, -1.999998254703821500, -6.649261509947660200 ) ) ; +#25325 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#25326 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#25327 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#25328 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5828 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36859, #17529, #24008 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25329 = FILL_AREA_STYLE ('',( #31787 ) ) ; +#25330 = AXIS2_PLACEMENT_3D ( 'NONE', #32490, #3401, #29526 ) ; +#25331 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#25332 = SURFACE_SIDE_STYLE ('',( #32005 ) ) ; +#25333 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25334 = VECTOR ( 'NONE', #12574, 1000.000000000000000 ) ; +#25335 = ORIENTED_EDGE ( 'NONE', *, *, #40682, .F. ) ; +#25336 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#25337 = CLOSED_SHELL ( 'NONE', ( #7213, #37503, #21146, #8294 ) ) ; +#25339 = FACE_OUTER_BOUND ( 'NONE', #6798, .T. ) ; +#25338 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25340 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25341 = ORIENTED_EDGE ( 'NONE', *, *, #32866, .F. ) ; +#25342 = SURFACE_STYLE_FILL_AREA ( #10034 ) ; +#25343 = LINE ( 'NONE', #30430, #40955 ) ; +#25344 = TOROIDAL_SURFACE ( 'NONE', #2559, 1.550380236995679600, 0.1000000000000008500 ) ; +#25345 = PLANE ( 'NONE', #17644 ) ; +#25346 = SURFACE_STYLE_FILL_AREA ( #4373 ) ; +#25347 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#25348 = ORIENTED_EDGE ( 'NONE', *, *, #3893, .T. ) ; +#25349 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25350 = EDGE_CURVE ( 'NONE', #129, #33764, #23061, .T. ) ; +#25351 = VERTEX_POINT ( 'NONE', #32424 ) ; +#25352 = ORIENTED_EDGE ( 'NONE', *, *, #27994, .T. ) ; +#25353 = FILL_AREA_STYLE ('',( #4902 ) ) ; +#25354 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4335, 'distance_accuracy_value', 'NONE'); +#25355 = DIRECTION ( 'NONE', ( 0.8190279881558656400, 0.0000000000000000000, 0.5737535661042597600 ) ) ; +#25356 = EDGE_CURVE ( 'NONE', #26617, #23451, #7402, .T. ) ; +#25357 = ORIENTED_EDGE ( 'NONE', *, *, #41453, .F. ) ; +#25358 = ORIENTED_EDGE ( 'NONE', *, *, #19283, .T. ) ; +#25359 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35501, 'distance_accuracy_value', 'NONE'); +#25360 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#25361 = LINE ( 'NONE', #25838, #27357 ) ; +#25362 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27486 ), #18310 ) ; +#25363 = CARTESIAN_POINT ( 'NONE', ( 3.237718385397979400, -0.07499999999999998300, 0.7155313145785915400 ) ) ; +#25364 = SURFACE_SIDE_STYLE ('',( #14860 ) ) ; +#25365 = SURFACE_SIDE_STYLE ('',( #6536 ) ) ; +#25366 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11584 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17429, #23908, #14175 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25368 = FILL_AREA_STYLE_COLOUR ( '', #28601 ) ; +#25367 = FACE_OUTER_BOUND ( 'NONE', #13193, .T. ) ; +#25369 = SURFACE_STYLE_USAGE ( .BOTH. , #2784 ) ; +#25370 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34810 ) ) ; +#25371 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#25372 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25373 = VERTEX_POINT ( 'NONE', #19621 ) ; +#25375 = EDGE_CURVE ( 'NONE', #17837, #13045, #1912, .T. ) ; +#25374 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8001 ) ) ; +#25376 = SURFACE_STYLE_FILL_AREA ( #23575 ) ; +#25377 = LINE ( 'NONE', #21073, #24344 ) ; +#25378 = CARTESIAN_POINT ( 'NONE', ( 3.365710678118654100, 0.4464466094067260900, -3.300000000000000700 ) ) ; +#25379 = ORIENTED_EDGE ( 'NONE', *, *, #40393, .T. ) ; +#25380 = CYLINDRICAL_SURFACE ( 'NONE', #12227, 0.04999999999999991300 ) ; +#25382 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19695 ) ) ; +#25381 = AXIS2_PLACEMENT_3D ( 'NONE', #16843, #19848, #29272 ) ; +#25383 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#25384 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23185 ) ) ; +#25385 = SURFACE_STYLE_FILL_AREA ( #3959 ) ; +#25386 = PRESENTATION_STYLE_ASSIGNMENT (( #12570 ) ) ; +#25387 = AXIS2_PLACEMENT_3D ( 'NONE', #28887, #22546, #36379 ) ; +#25388 = FACE_OUTER_BOUND ( 'NONE', #35535, .T. ) ; +#25389 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25390 = FILL_AREA_STYLE ('',( #38055 ) ) ; +#25391 = FILL_AREA_STYLE ('',( #41447 ) ) ; +#25392 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25393 = ORIENTED_EDGE ( 'NONE', *, *, #30889, .F. ) ; +#25394 = SURFACE_STYLE_USAGE ( .BOTH. , #22131 ) ; +#25395 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#25396 = PRESENTATION_STYLE_ASSIGNMENT (( #27134 ) ) ; +#25397 = EDGE_LOOP ( 'NONE', ( #32476, #14816, #33263, #24719 ) ) ; +#25398 = ADVANCED_FACE ( 'NONE', ( #6410 ), #16473, .T. ) ; +#25399 = VECTOR ( 'NONE', #17242, 1000.000000000000000 ) ; +#25400 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25401 = DIRECTION ( 'NONE', ( 1.133987551255204500E-030, 1.000000000000000000, -2.367138801244545900E-016 ) ) ; +#25402 = CARTESIAN_POINT ( 'NONE', ( -0.6000000000000000900, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#25403 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34541, 'distance_accuracy_value', 'NONE'); +#25404 = LINE ( 'NONE', #20143, #28892 ) ; +#25405 = ADVANCED_FACE ( 'NONE', ( #36720 ), #10400, .T. ) ; +#25406 = DIRECTION ( 'NONE', ( -1.445602896647293600E-014, 1.837630800822890800E-016, 1.000000000000000000 ) ) ; +#25407 = SURFACE_SIDE_STYLE ('',( #12152 ) ) ; +#25408 = EDGE_CURVE ( 'NONE', #22958, #11120, #9377, .T. ) ; +#25409 = EDGE_LOOP ( 'NONE', ( #22013, #16244, #22736, #38711 ) ) ; +#25410 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.499998254703836900, -5.449999999999994000 ) ) ; +#25411 = EDGE_CURVE ( 'NONE', #3673, #12794, #34173, .T. ) ; +#25412 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#25413 = VERTEX_POINT ( 'NONE', #7131 ) ; +#25414 = AXIS2_PLACEMENT_3D ( 'NONE', #3722, #26201, #10361 ) ; +#25415 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 2.032879073410321300E-016 ) ) ; +#25416 = EDGE_CURVE ( 'NONE', #14271, #25924, #33157, .T. ) ; +#25417 = CYLINDRICAL_SURFACE ( 'NONE', #18697, 0.4000000000000000800 ) ; +#25418 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25419 = VECTOR ( 'NONE', #36285, 1000.000000000000100 ) ; +#25420 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745278514100, -2.904459358809384600 ) ) ; +#25421 = VERTEX_POINT ( 'NONE', #23524 ) ; +#25422 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11583 ) ) ; +#25423 = FILL_AREA_STYLE_COLOUR ( '', #9049 ) ; +#25424 = FILL_AREA_STYLE ('',( #22161 ) ) ; +#25425 = ORIENTED_EDGE ( 'NONE', *, *, #32359, .F. ) ; +#25426 = STYLED_ITEM ( 'NONE', ( #12236 ), #12884 ) ; +#25427 = FILL_AREA_STYLE ('',( #18098 ) ) ; +#25429 = EDGE_CURVE ( 'NONE', #22287, #38103, #39706, .T. ) ; +#25428 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17552 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12826, #22595, #19515 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25430 = FILL_AREA_STYLE ('',( #12802 ) ) ; +#25431 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25432 = ORIENTED_EDGE ( 'NONE', *, *, #4605, .T. ) ; +#25433 = SURFACE_SIDE_STYLE ('',( #12287 ) ) ; +#25434 = VERTEX_POINT ( 'NONE', #35846 ) ; +#25435 = PRESENTATION_STYLE_ASSIGNMENT (( #6728 ) ) ; +#25436 = LINE ( 'NONE', #3949, #7693 ) ; +#25437 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37088, 'distance_accuracy_value', 'NONE'); +#25439 = AXIS2_PLACEMENT_3D ( 'NONE', #876, #33586, #10545 ) ; +#25438 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #838 ), #20310 ) ; +#25440 = FACE_OUTER_BOUND ( 'NONE', #32445, .T. ) ; +#25441 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25737 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17383, #14124, #4511 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25442 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25443 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#25445 = FILL_AREA_STYLE ('',( #9145 ) ) ; +#25444 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.799998254703820700, -5.700000000000000200 ) ) ; +#25446 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 2.367138801244516300E-016, -1.000000000000000000 ) ) ; +#25447 = ADVANCED_FACE ( 'NONE', ( #14957 ), #23819, .T. ) ; +#25448 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -5.475000000000000500 ) ) ; +#25449 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#25450 = SURFACE_STYLE_USAGE ( .BOTH. , #3116 ) ; +#25451 = FILL_AREA_STYLE ('',( #41500 ) ) ; +#25452 = ORIENTED_EDGE ( 'NONE', *, *, #6364, .T. ) ; +#25453 = PLANE ( 'NONE', #25955 ) ; +#25454 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25455 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.2800017452961688400, -5.200000000000000200 ) ) ; +#25456 = ORIENTED_EDGE ( 'NONE', *, *, #9820, .T. ) ; +#25457 = ADVANCED_FACE ( 'NONE', ( #12914 ), #36527, .F. ) ; +#25458 = SURFACE_SIDE_STYLE ('',( #24489 ) ) ; +#25459 = SURFACE_STYLE_FILL_AREA ( #44 ) ; +#25460 = EDGE_LOOP ( 'NONE', ( #5341, #17256, #41545, #37268 ) ) ; +#25461 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#25462 = CARTESIAN_POINT ( 'NONE', ( 4.465000000000003400, 0.08000174529616761700, -7.500000000000000900 ) ) ; +#25463 = FILL_AREA_STYLE ('',( #39890 ) ) ; +#25464 = EDGE_LOOP ( 'NONE', ( #12192, #7595, #40129, #10091 ) ) ; +#25465 = VERTEX_POINT ( 'NONE', #36944 ) ; +#25467 = EDGE_LOOP ( 'NONE', ( #26786, #1893, #21164, #4821 ) ) ; +#25466 = PRESENTATION_STYLE_ASSIGNMENT (( #5888 ) ) ; +#25468 = ORIENTED_EDGE ( 'NONE', *, *, #24470, .F. ) ; +#25469 = CIRCLE ( 'NONE', #36546, 0.1000000000000009100 ) ; +#25470 = EDGE_LOOP ( 'NONE', ( #38196, #41569, #31512, #30052 ) ) ; +#25471 = EDGE_CURVE ( 'NONE', #18567, #18636, #12468, .T. ) ; +#25472 = FILL_AREA_STYLE_COLOUR ( '', #13268 ) ; +#25473 = VECTOR ( 'NONE', #41521, 1000.000000000000100 ) ; +#25474 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25475 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.279999999999999800, -3.299999999999999800 ) ) ; +#25476 = FILL_AREA_STYLE ('',( #31929 ) ) ; +#25477 = EDGE_CURVE ( 'NONE', #33470, #18568, #27650, .T. ) ; +#25478 = AXIS2_PLACEMENT_3D ( 'NONE', #31552, #34389, #34251 ) ; +#25479 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25480 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25481 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25482 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25483 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25484 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25485 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25486 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8118 ) ) ; +#25487 = ADVANCED_FACE ( 'NONE', ( #5882 ), #33558, .T. ) ; +#25488 = AXIS2_PLACEMENT_3D ( 'NONE', #11563, #33904, #1593 ) ; +#25490 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23308 ) ) ; +#25489 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23307 ), #333 ) ; +#25491 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#25492 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25493 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#25495 = EDGE_CURVE ( 'NONE', #11907, #33210, #1386, .T. ) ; +#25494 = AXIS2_PLACEMENT_3D ( 'NONE', #37657, #11377, #27791 ) ; +#25496 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25497 = VERTEX_POINT ( 'NONE', #39896 ) ; +#25498 = ORIENTED_EDGE ( 'NONE', *, *, #20725, .T. ) ; +#25499 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3039 ) ) ; +#25501 = ORIENTED_EDGE ( 'NONE', *, *, #5019, .F. ) ; +#25500 = FACE_OUTER_BOUND ( 'NONE', #17142, .T. ) ; +#25502 = EDGE_LOOP ( 'NONE', ( #9565, #16472, #33048, #33490 ) ) ; +#25504 = FILL_AREA_STYLE_COLOUR ( '', #469 ) ; +#25503 = SURFACE_STYLE_FILL_AREA ( #6796 ) ; +#25505 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12549 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6324, #6590, #12658 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25506 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25507 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22160, 'distance_accuracy_value', 'NONE'); +#25508 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25509 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.773004880385254100, -0.7580972011844128200 ) ) ; +#25510 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#25511 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, 0.6207106781186546600, -3.300000000000000700 ) ) ; +#25512 = CARTESIAN_POINT ( 'NONE', ( 3.119636707815099300, 0.2999999999999999300, 1.000000000000057300 ) ) ; +#25513 = PRESENTATION_STYLE_ASSIGNMENT (( #31814 ) ) ; +#25514 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, -2.322941965694886000, -1.250000000000000000 ) ) ; +#25515 = EDGE_LOOP ( 'NONE', ( #36393, #11224, #5862, #37203 ) ) ; +#25516 = VECTOR ( 'NONE', #29484, 1000.000000000000000 ) ; +#25517 = ORIENTED_EDGE ( 'NONE', *, *, #1236, .F. ) ; +#25518 = ORIENTED_EDGE ( 'NONE', *, *, #11025, .T. ) ; +#25519 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#25520 = CARTESIAN_POINT ( 'NONE', ( -4.720380236995682200, -0.2799999999999974200, -0.8400000000000000800 ) ) ; +#25521 = EDGE_CURVE ( 'NONE', #4602, #20974, #370, .T. ) ; +#25522 = LINE ( 'NONE', #23602, #16911 ) ; +#25523 = ORIENTED_EDGE ( 'NONE', *, *, #20353, .T. ) ; +#25524 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25525 = EDGE_CURVE ( 'NONE', #24056, #9494, #36729, .T. ) ; +#25526 = STYLED_ITEM ( 'NONE', ( #37242 ), #10393 ) ; +#25527 = VERTEX_POINT ( 'NONE', #27209 ) ; +#25528 = DIRECTION ( 'NONE', ( -1.751623080406021300E-046, -1.845450506358306100E-016, -1.000000000000000000 ) ) ; +#25529 = ORIENTED_EDGE ( 'NONE', *, *, #7172, .F. ) ; +#25530 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#25531 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25532 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #20155, #20018, #35824, #3600 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#25533 = ORIENTED_EDGE ( 'NONE', *, *, #33245, .F. ) ; +#25534 = PRESENTATION_STYLE_ASSIGNMENT (( #23437 ) ) ; +#25535 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21228 ) ) ; +#25536 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32598, 'distance_accuracy_value', 'NONE'); +#25537 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#25538 = LINE ( 'NONE', #25571, #26048 ) ; +#25539 = SURFACE_STYLE_USAGE ( .BOTH. , #9118 ) ; +#25540 = ORIENTED_EDGE ( 'NONE', *, *, #6394, .F. ) ; +#25541 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15817 ) ) ; +#25542 = PLANE ( 'NONE', #36844 ) ; +#25543 = LINE ( 'NONE', #6940, #39652 ) ; +#25544 = AXIS2_PLACEMENT_3D ( 'NONE', #14547, #11275, #27678 ) ; +#25545 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18068 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37493, #18163, #18445 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25546 = LINE ( 'NONE', #23797, #18462 ) ; +#25548 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35614 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28460, #35394, #6287 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25547 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33078 ), #27951 ) ; +#25549 = ORIENTED_EDGE ( 'NONE', *, *, #1599, .F. ) ; +#25550 = FILL_AREA_STYLE_COLOUR ( '', #533 ) ; +#25551 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32498, 'distance_accuracy_value', 'NONE'); +#25554 = EDGE_CURVE ( 'NONE', #24275, #1213, #23068, .T. ) ; +#25553 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25552 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11601 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5507, #34586, #27973 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25555 = SURFACE_STYLE_USAGE ( .BOTH. , #18781 ) ; +#25556 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, -0.5999999999999999800, -1.930000000000000200 ) ) ; +#25558 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40374 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41337, #22007, #31730 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25557 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19074 ), #35567 ) ; +#25559 = EDGE_LOOP ( 'NONE', ( #17967, #21070, #12241, #30541, #15104, #36468, #28941, #37803, #39200, #28474, #315, #17293, #8748, #4628, #11674, #32857, #20197, #9404, #39930, #29695 ) ) ; +#25560 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#25561 = ORIENTED_EDGE ( 'NONE', *, *, #23740, .T. ) ; +#25562 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#25563 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25564 = CARTESIAN_POINT ( 'NONE', ( -3.044999999957238600, 0.3292893218813454600, -1.517157287489537600 ) ) ; +#25565 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#25566 = CARTESIAN_POINT ( 'NONE', ( 4.599429204713762200, -0.01999825470383194100, -7.186926638587857900 ) ) ; +#25567 = EDGE_LOOP ( 'NONE', ( #30663, #2895, #25341, #11286 ) ) ; +#25568 = PRESENTATION_STYLE_ASSIGNMENT (( #17285 ) ) ; +#25569 = ORIENTED_EDGE ( 'NONE', *, *, #5743, .T. ) ; +#25570 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25571 = CARTESIAN_POINT ( 'NONE', ( -0.6000000000000000900, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#25572 = SURFACE_SIDE_STYLE ('',( #27954 ) ) ; +#25573 = EDGE_LOOP ( 'NONE', ( #24476, #39329, #40962, #31711 ) ) ; +#25574 = VERTEX_POINT ( 'NONE', #34390 ) ; +#25575 = ORIENTED_EDGE ( 'NONE', *, *, #27810, .F. ) ; +#25576 = LINE ( 'NONE', #13120, #29069 ) ; +#25577 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#25578 = FACE_OUTER_BOUND ( 'NONE', #2860, .T. ) ; +#25579 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 0.3500000000000000300, 0.3499999999999999800 ) ) ; +#25580 = SURFACE_STYLE_FILL_AREA ( #19055 ) ; +#25581 = VERTEX_POINT ( 'NONE', #20607 ) ; +#25582 = PLANE ( 'NONE', #18925 ) ; +#25583 = EDGE_CURVE ( 'NONE', #22770, #12577, #1916, .T. ) ; +#25584 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28534, 'distance_accuracy_value', 'NONE'); +#25586 = SURFACE_STYLE_USAGE ( .BOTH. , #2995 ) ; +#25585 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664843100, -1.380001745296171900, -5.000000000000000000 ) ) ; +#25587 = LINE ( 'NONE', #2193, #8358 ) ; +#25588 = PRESENTATION_STYLE_ASSIGNMENT (( #39464 ) ) ; +#25589 = FILL_AREA_STYLE_COLOUR ( '', #30512 ) ; +#25590 = FACE_OUTER_BOUND ( 'NONE', #35391, .T. ) ; +#25591 = ORIENTED_EDGE ( 'NONE', *, *, #18114, .T. ) ; +#25592 = EDGE_CURVE ( 'NONE', #39019, #37102, #24084, .T. ) ; +#25593 = FILL_AREA_STYLE ('',( #2603 ) ) ; +#25594 = VECTOR ( 'NONE', #23112, 1000.000000000000000 ) ; +#25595 = CARTESIAN_POINT ( 'NONE', ( -0.6000000000000000900, -1.499998254703832000, -5.449999999999994000 ) ) ; +#25596 = FACE_OUTER_BOUND ( 'NONE', #15926, .T. ) ; +#25597 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17747 ), #18552 ) ; +#25598 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8206, 'distance_accuracy_value', 'NONE'); +#25599 = AXIS2_PLACEMENT_3D ( 'NONE', #38173, #15599, #41553 ) ; +#25600 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#25601 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25602 = ADVANCED_FACE ( 'NONE', ( #23591 ), #7970, .F. ) ; +#25603 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7440 ), #9602 ) ; +#25604 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.084202172485506400E-015, -1.000000000000000000 ) ) ; +#25606 = EDGE_CURVE ( 'NONE', #12200, #23303, #33689, .T. ) ; +#25605 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21886 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7527, #10492, #4430 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25607 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25608 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25609 = EDGE_LOOP ( 'NONE', ( #30813, #25695, #25781, #6981 ) ) ; +#25610 = VECTOR ( 'NONE', #320, 1000.000000000000000 ) ; +#25611 = VERTEX_POINT ( 'NONE', #11634 ) ; +#25612 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25613 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000010300, -1.999998254703822400, -6.600000000000000500 ) ) ; +#25614 = AXIS2_PLACEMENT_3D ( 'NONE', #21692, #37484, #5001 ) ; +#25615 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26374 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8166, #1728, #21222 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25616 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, 0.6780706550913999700 ) ) ; +#25617 = DIRECTION ( 'NONE', ( 4.336808689942016900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25618 = VECTOR ( 'NONE', #20724, 1000.000000000000000 ) ; +#25619 = ORIENTED_EDGE ( 'NONE', *, *, #21218, .T. ) ; +#25620 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29934 ), #32083 ) ; +#25621 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000001100, 1.167528855492239800, -4.400000000000001200 ) ) ; +#25622 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#25623 = ORIENTED_EDGE ( 'NONE', *, *, #27364, .F. ) ; +#25624 = DIRECTION ( 'NONE', ( -3.061289293739041200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#25625 = PLANE ( 'NONE', #4043 ) ; +#25626 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#25627 = CYLINDRICAL_SURFACE ( 'NONE', #27779, 0.1000000000000002600 ) ; +#25628 = PLANE ( 'NONE', #12268 ) ; +#25629 = CIRCLE ( 'NONE', #35056, 0.2000000000000000900 ) ; +#25630 = SURFACE_STYLE_USAGE ( .BOTH. , #19282 ) ; +#25631 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.2999999999999999900, -0.2498427124746000500 ) ) ; +#25632 = ORIENTED_EDGE ( 'NONE', *, *, #31507, .F. ) ; +#25633 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#25634 = CARTESIAN_POINT ( 'NONE', ( -2.995000000010000600, 0.3500000000000000300, -1.300000000000000000 ) ) ; +#25635 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#25636 = DIRECTION ( 'NONE', ( 3.281909278875040000E-015, 1.000000000000000000, -3.919063683626571500E-045 ) ) ; +#25637 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#25638 = ADVANCED_FACE ( 'NONE', ( #34705 ), #15500, .T. ) ; +#25639 = ORIENTED_EDGE ( 'NONE', *, *, #16719, .T. ) ; +#25640 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25641 = EDGE_CURVE ( 'NONE', #24564, #33974, #28136, .T. ) ; +#25642 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25643 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14167, 'distance_accuracy_value', 'NONE'); +#25644 = EDGE_CURVE ( 'NONE', #27123, #26216, #40230, .T. ) ; +#25645 = ORIENTED_EDGE ( 'NONE', *, *, #29919, .T. ) ; +#25646 = LINE ( 'NONE', #29213, #32667 ) ; +#25647 = EDGE_CURVE ( 'NONE', #21451, #38384, #29128, .T. ) ; +#25648 = ORIENTED_EDGE ( 'NONE', *, *, #33429, .F. ) ; +#25649 = ORIENTED_EDGE ( 'NONE', *, *, #7165, .T. ) ; +#25650 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#25651 = ORIENTED_EDGE ( 'NONE', *, *, #39561, .T. ) ; +#25652 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.3500000000000000300, 0.3499999999999999800 ) ) ; +#25653 = AXIS2_PLACEMENT_3D ( 'NONE', #33705, #27092, #14231 ) ; +#25655 = ADVANCED_FACE ( 'NONE', ( #6871 ), #1808, .T. ) ; +#25654 = FACE_OUTER_BOUND ( 'NONE', #40278, .T. ) ; +#25656 = SURFACE_STYLE_FILL_AREA ( #40219 ) ; +#25657 = LINE ( 'NONE', #24122, #1438 ) ; +#25658 = EDGE_LOOP ( 'NONE', ( #38470, #1821, #21128, #40574 ) ) ; +#25659 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#25660 = SURFACE_SIDE_STYLE ('',( #28013 ) ) ; +#25661 = CIRCLE ( 'NONE', #30726, 0.1000000000000001200 ) ; +#25662 = EDGE_LOOP ( 'NONE', ( #24239, #462, #22622, #29982 ) ) ; +#25663 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17310 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19337, #285, #29172 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25664 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38116 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36882, #23758, #36740 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25665 = CARTESIAN_POINT ( 'NONE', ( 2.945000000000000700, -0.6000000000000003100, -3.279289321881345000 ) ) ; +#25666 = CARTESIAN_POINT ( 'NONE', ( 2.000000000000000000, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#25667 = TOROIDAL_SURFACE ( 'NONE', #32243, 1.200001745296169300, 0.2000017452961698200 ) ; +#25670 = EDGE_CURVE ( 'NONE', #29416, #14912, #32282, .T. ) ; +#25669 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24888 ) ) ; +#25668 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#25671 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, -0.6500000000000001300, -3.299999999999999800 ) ) ; +#25672 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#25673 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25674 = CIRCLE ( 'NONE', #149, 0.05000000000000002400 ) ; +#25676 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8311 ), #11289 ) ; +#25675 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8065 ) ) ; +#25677 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25678 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#25679 = STYLED_ITEM ( 'NONE', ( #10000 ), #41113 ) ; +#25680 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#25681 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2356, 'distance_accuracy_value', 'NONE'); +#25682 = VECTOR ( 'NONE', #8670, 1000.000000000000000 ) ; +#25683 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#25684 = VERTEX_POINT ( 'NONE', #17755 ) ; +#25685 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25686 = AXIS2_PLACEMENT_3D ( 'NONE', #24411, #5042, #33729 ) ; +#25687 = EDGE_LOOP ( 'NONE', ( #15328, #1175, #17908, #7866 ) ) ; +#25688 = SURFACE_STYLE_FILL_AREA ( #363 ) ; +#25689 = SURFACE_STYLE_USAGE ( .BOTH. , #28359 ) ; +#25690 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#25691 = ADVANCED_FACE ( 'NONE', ( #14968 ), #11423, .F. ) ; +#25692 = VERTEX_POINT ( 'NONE', #35079 ) ; +#25693 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25694 = SURFACE_STYLE_FILL_AREA ( #20834 ) ; +#25695 = ORIENTED_EDGE ( 'NONE', *, *, #30953, .F. ) ; +#25696 = LINE ( 'NONE', #22859, #13551 ) ; +#25697 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5080, 'distance_accuracy_value', 'NONE'); +#25698 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25699 = LINE ( 'NONE', #3456, #26716 ) ; +#25700 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875040400E-015, -6.056601140521968800E-031 ) ) ; +#25701 = ORIENTED_EDGE ( 'NONE', *, *, #34546, .F. ) ; +#25702 = ORIENTED_EDGE ( 'NONE', *, *, #12187, .T. ) ; +#25703 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#25704 = ORIENTED_EDGE ( 'NONE', *, *, #16130, .F. ) ; +#25705 = FILL_AREA_STYLE_COLOUR ( '', #4450 ) ; +#25706 = FILL_AREA_STYLE_COLOUR ( '', #40143 ) ; +#25707 = CARTESIAN_POINT ( 'NONE', ( -3.095000000000000200, 0.07499999999999999700, -1.532287565553000200 ) ) ; +#25708 = VERTEX_POINT ( 'NONE', #34528 ) ; +#25709 = CYLINDRICAL_SURFACE ( 'NONE', #33899, 0.1000000000000000500 ) ; +#25710 = SURFACE_STYLE_USAGE ( .BOTH. , #12964 ) ; +#25711 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25712 = EDGE_CURVE ( 'NONE', #16731, #10574, #39212, .T. ) ; +#25713 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20367, 'distance_accuracy_value', 'NONE'); +#25714 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.180001745296169700, -4.099999999999999600 ) ) ; +#25715 = SURFACE_STYLE_USAGE ( .BOTH. , #41634 ) ; +#25716 = EDGE_CURVE ( 'NONE', #16327, #25231, #30646, .T. ) ; +#25717 = CYLINDRICAL_SURFACE ( 'NONE', #39549, 0.4000000000000001900 ) ; +#25718 = STYLED_ITEM ( 'NONE', ( #35609 ), #22104 ) ; +#25719 = ORIENTED_EDGE ( 'NONE', *, *, #4467, .T. ) ; +#25720 = VECTOR ( 'NONE', #1469, 1000.000000000000100 ) ; +#25721 = FILL_AREA_STYLE ('',( #38675 ) ) ; +#25722 = CARTESIAN_POINT ( 'NONE', ( -3.458233997336492400, 1.005153670744119500, -4.400000000000001200 ) ) ; +#25723 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36332 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34100, #24673, #5005 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25724 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25725 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25726 = EDGE_LOOP ( 'NONE', ( #15295, #40738, #28241, #28798 ) ) ; +#25727 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34709 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13224, #40315, #14364 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25728 = LINE ( 'NONE', #39744, #9516 ) ; +#25729 = VERTEX_POINT ( 'NONE', #2364 ) ; +#25730 = ORIENTED_EDGE ( 'NONE', *, *, #41752, .F. ) ; +#25731 = PRESENTATION_STYLE_ASSIGNMENT (( #26752 ) ) ; +#25732 = ORIENTED_EDGE ( 'NONE', *, *, #21549, .F. ) ; +#25733 = SURFACE_STYLE_FILL_AREA ( #11905 ) ; +#25734 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20634 ), #24955 ) ; +#25735 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#25736 = AXIS2_PLACEMENT_3D ( 'NONE', #410, #849, #39476 ) ; +#25737 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17383, 'distance_accuracy_value', 'NONE'); +#25739 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41018 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4308, #10795, #26945 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25738 = STYLED_ITEM ( 'NONE', ( #39358 ), #34492 ) ; +#25740 = ORIENTED_EDGE ( 'NONE', *, *, #23094, .T. ) ; +#25741 = ORIENTED_EDGE ( 'NONE', *, *, #39958, .T. ) ; +#25742 = ORIENTED_EDGE ( 'NONE', *, *, #16071, .T. ) ; +#25743 = STYLED_ITEM ( 'NONE', ( #14280 ), #8873 ) ; +#25744 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.279999999999999800, -3.299999999999999800 ) ) ; +#25745 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25746 = PLANE ( 'NONE', #9540 ) ; +#25747 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25748 = DIRECTION ( 'NONE', ( 4.336808689942002000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25749 = ORIENTED_EDGE ( 'NONE', *, *, #33192, .F. ) ; +#25750 = FILL_AREA_STYLE ('',( #22492 ) ) ; +#25751 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.602085213965213000E-015, 0.0000000000000000000 ) ) ; +#25752 = FACE_OUTER_BOUND ( 'NONE', #29427, .T. ) ; +#25753 = CARTESIAN_POINT ( 'NONE', ( -0.6500000000000000200, -1.139998254717358200, -6.299996877890552400 ) ) ; +#25754 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.674262993431846600E-015, 0.0000000000000000000 ) ) ; +#25755 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000005700, -0.2999999999999852200, -3.099999999999998800 ) ) ; +#25756 = PLANE ( 'NONE', #18070 ) ; +#25757 = VECTOR ( 'NONE', #27688, 1000.000000000000000 ) ; +#25758 = CIRCLE ( 'NONE', #40606, 0.2000000000000000900 ) ; +#25759 = CARTESIAN_POINT ( 'NONE', ( -3.009833609664749300, -0.3498517583412647500, -1.299851758341264800 ) ) ; +#25760 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.499998254703827700, -6.299999999999993600 ) ) ; +#25761 = SURFACE_SIDE_STYLE ('',( #29727 ) ) ; +#25762 = ORIENTED_EDGE ( 'NONE', *, *, #13, .T. ) ; +#25763 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#25764 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25765 = PRESENTATION_STYLE_ASSIGNMENT (( #20964 ) ) ; +#25766 = EDGE_CURVE ( 'NONE', #40967, #7821, #21079, .T. ) ; +#25767 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.499998254703838600, -5.449999999999994000 ) ) ; +#25768 = EDGE_LOOP ( 'NONE', ( #15602, #15855, #13264, #29139 ) ) ; +#25769 = ORIENTED_EDGE ( 'NONE', *, *, #18926, .F. ) ; +#25770 = FILL_AREA_STYLE_COLOUR ( '', #4150 ) ; +#25771 = LINE ( 'NONE', #34413, #39888 ) ; +#25772 = PRESENTATION_STYLE_ASSIGNMENT (( #21778 ) ) ; +#25773 = EDGE_CURVE ( 'NONE', #11050, #35461, #35550, .T. ) ; +#25774 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21464 ) ) ; +#25775 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30477, 'distance_accuracy_value', 'NONE'); +#25776 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.2800017452961690000, -4.750000000000000000 ) ) ; +#25777 = VECTOR ( 'NONE', #3224, 1000.000000000000000 ) ; +#25778 = EDGE_LOOP ( 'NONE', ( #14617, #29602, #18115, #23901 ) ) ; +#25779 = AXIS2_PLACEMENT_3D ( 'NONE', #23253, #23395, #32850 ) ; +#25780 = ORIENTED_EDGE ( 'NONE', *, *, #5803, .F. ) ; +#25781 = ORIENTED_EDGE ( 'NONE', *, *, #13747, .F. ) ; +#25782 = FACE_OUTER_BOUND ( 'NONE', #5010, .T. ) ; +#25783 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.5199999999999843600, -4.500000000000000000 ) ) ; +#25784 = STYLED_ITEM ( 'NONE', ( #13096 ), #14389 ) ; +#25785 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10801, 'distance_accuracy_value', 'NONE'); +#25786 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#25787 = VERTEX_POINT ( 'NONE', #21710 ) ; +#25788 = STYLED_ITEM ( 'NONE', ( #4424 ), #38786 ) ; +#25789 = STYLED_ITEM ( 'NONE', ( #20448 ), #18583 ) ; +#25790 = FACE_OUTER_BOUND ( 'NONE', #6164, .T. ) ; +#25791 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25793 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20933 ) ) ; +#25792 = AXIS2_PLACEMENT_3D ( 'NONE', #19010, #8660, #28582 ) ; +#25795 = EDGE_CURVE ( 'NONE', #34934, #4617, #9381, .T. ) ; +#25794 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7649 ), #19865 ) ; +#25796 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25797 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#25798 = SURFACE_STYLE_FILL_AREA ( #37879 ) ; +#25799 = FACE_OUTER_BOUND ( 'NONE', #8687, .T. ) ; +#25800 = SURFACE_SIDE_STYLE ('',( #15955 ) ) ; +#25801 = VERTEX_POINT ( 'NONE', #34667 ) ; +#25802 = SURFACE_SIDE_STYLE ('',( #6146 ) ) ; +#25803 = FILL_AREA_STYLE_COLOUR ( '', #9005 ) ; +#25804 = DIRECTION ( 'NONE', ( -4.336808689942016200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#25805 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#25806 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #14954, #27668, #18232, #2146 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#25807 = VERTEX_POINT ( 'NONE', #15331 ) ; +#25808 = ADVANCED_FACE ( 'NONE', ( #35189, #26609 ), #37905, .T. ) ; +#25809 = FACE_OUTER_BOUND ( 'NONE', #41864, .T. ) ; +#25810 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.734723475976805600E-016, 1.000000000000000000 ) ) ; +#25811 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998497600, -4.250000000000000000 ) ) ; +#25812 = LINE ( 'NONE', #21223, #18250 ) ; +#25813 = FILL_AREA_STYLE_COLOUR ( '', #12879 ) ; +#25814 = VERTEX_POINT ( 'NONE', #41304 ) ; +#25815 = SURFACE_STYLE_USAGE ( .BOTH. , #10088 ) ; +#25816 = CIRCLE ( 'NONE', #23921, 0.1000000000000001200 ) ; +#25817 = ORIENTED_EDGE ( 'NONE', *, *, #6704, .T. ) ; +#25818 = VERTEX_POINT ( 'NONE', #34807 ) ; +#25819 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998358800, -4.450000000000000200 ) ) ; +#25820 = ORIENTED_EDGE ( 'NONE', *, *, #39475, .T. ) ; +#25821 = SURFACE_STYLE_USAGE ( .BOTH. , #16634 ) ; +#25822 = EDGE_CURVE ( 'NONE', #40751, #2978, #9851, .T. ) ; +#25823 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#25824 = LINE ( 'NONE', #593, #96 ) ; +#25825 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -5.475000000000000500 ) ) ; +#25826 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25827 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#25828 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -5.075000000000000200 ) ) ; +#25829 = EDGE_CURVE ( 'NONE', #38991, #7023, #13935, .T. ) ; +#25830 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25831 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664848500, 0.2800017452961319800, -4.400000000000000400 ) ) ; +#25832 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165400, -6.900000000000000400 ) ) ; +#25833 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#25834 = STYLED_ITEM ( 'NONE', ( #25012 ), #15434 ) ; +#25835 = FACE_OUTER_BOUND ( 'NONE', #25961, .T. ) ; +#25836 = FILL_AREA_STYLE ('',( #22318 ) ) ; +#25837 = ORIENTED_EDGE ( 'NONE', *, *, #1236, .T. ) ; +#25838 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.080001745296136600, -5.000000000000000000 ) ) ; +#25839 = SURFACE_SIDE_STYLE ('',( #25459 ) ) ; +#25840 = ADVANCED_FACE ( 'NONE', ( #29077 ), #6367, .F. ) ; +#25841 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22743 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24103, #4751, #27349 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25842 = SURFACE_STYLE_USAGE ( .BOTH. , #22183 ) ; +#25843 = EDGE_LOOP ( 'NONE', ( #40251, #16240, #38541, #3187 ) ) ; +#25844 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#25845 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12004 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41208, #22642, #504 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25846 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25847 = FILL_AREA_STYLE_COLOUR ( '', #5221 ) ; +#25848 = VECTOR ( 'NONE', #26873, 1000.000000000000000 ) ; +#25850 = EDGE_CURVE ( 'NONE', #22566, #474, #23537, .T. ) ; +#25849 = STYLED_ITEM ( 'NONE', ( #18086 ), #36181 ) ; +#25851 = LINE ( 'NONE', #13400, #8643 ) ; +#25852 = FILL_AREA_STYLE ('',( #29216 ) ) ; +#25853 = ORIENTED_EDGE ( 'NONE', *, *, #17316, .F. ) ; +#25854 = ORIENTED_EDGE ( 'NONE', *, *, #26658, .T. ) ; +#25856 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#25855 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.499998254703829500, -6.699999999999994000 ) ) ; +#25857 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#25858 = ADVANCED_FACE ( 'NONE', ( #26586 ), #39008, .F. ) ; +#25860 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33405 ) ) ; +#25859 = STYLED_ITEM ( 'NONE', ( #18857 ), #26565 ) ; +#25861 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 9.035070666963931600E-017, -1.000000000000000000 ) ) ; +#25862 = SURFACE_STYLE_USAGE ( .BOTH. , #60 ) ; +#25863 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23687 ) ) ; +#25864 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3634, 'distance_accuracy_value', 'NONE'); +#25865 = ORIENTED_EDGE ( 'NONE', *, *, #36901, .T. ) ; +#25866 = PRESENTATION_STYLE_ASSIGNMENT (( #25689 ) ) ; +#25867 = VERTEX_POINT ( 'NONE', #29124 ) ; +#25868 = LINE ( 'NONE', #30459, #17279 ) ; +#25869 = FACE_OUTER_BOUND ( 'NONE', #26587, .T. ) ; +#25870 = LINE ( 'NONE', #12626, #22353 ) ; +#25871 = PLANE ( 'NONE', #14598 ) ; +#25872 = DIRECTION ( 'NONE', ( -4.336808689942015400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25873 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 1.485063948690956900E-014, -3.099999999999998800 ) ) ; +#25874 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#25875 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34037, 'distance_accuracy_value', 'NONE'); +#25876 = ORIENTED_EDGE ( 'NONE', *, *, #24742, .T. ) ; +#25877 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25878 = EDGE_CURVE ( 'NONE', #25708, #36496, #17484, .T. ) ; +#25879 = ORIENTED_EDGE ( 'NONE', *, *, #5839, .F. ) ; +#25880 = EDGE_CURVE ( 'NONE', #8213, #21656, #14948, .T. ) ; +#25882 = CYLINDRICAL_SURFACE ( 'NONE', #16510, 0.04999999999999991300 ) ; +#25881 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.794071060579491900E-015, 0.0000000000000000000 ) ) ; +#25883 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000005300, 1.298332101551391600E-014, -4.400000000000000400 ) ) ; +#25884 = ORIENTED_EDGE ( 'NONE', *, *, #25235, .F. ) ; +#25885 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25886 = ADVANCED_FACE ( 'NONE', ( #8841 ), #19284, .T. ) ; +#25887 = EDGE_CURVE ( 'NONE', #13231, #2905, #40668, .T. ) ; +#25888 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#25889 = STYLED_ITEM ( 'NONE', ( #11187 ), #16351 ) ; +#25890 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3000000000000001600, -1.250000000000000000 ) ) ; +#25891 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#25892 = VERTEX_POINT ( 'NONE', #25767 ) ; +#25893 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.3499999999999999800, 0.6999999999999999600 ) ) ; +#25894 = VERTEX_POINT ( 'NONE', #16297 ) ; +#25895 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26722 ) ) ; +#25896 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#25897 = SURFACE_STYLE_FILL_AREA ( #23447 ) ; +#25898 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25899 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6415 ) ) ; +#25900 = LINE ( 'NONE', #27981, #29445 ) ; +#25901 = DIRECTION ( 'NONE', ( 6.776263578034402700E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#25902 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.08000174529616772800, -7.150000000000001200 ) ) ; +#25905 = EDGE_CURVE ( 'NONE', #20790, #6503, #30057, .T. ) ; +#25904 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#25903 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32951 ) ) ; +#25906 = MANIFOLD_SOLID_BREP ( '1-1-solid22', #28560 ) ; +#25907 = CARTESIAN_POINT ( 'NONE', ( 3.846156164834738400, 0.6165030250713639000, -14.55000000000000100 ) ) ; +#25909 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26736 ) ) ; +#25908 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25551 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32498, #35762, #26160 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#25910 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.3500000000000000300, 0.6999999999999999600 ) ) ; +#25911 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20816 ) ) ; +#25912 = ORIENTED_EDGE ( 'NONE', *, *, #41567, .T. ) ; +#25913 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.380001745296165900, -1.999999999999999600 ) ) ; +#25914 = AXIS2_PLACEMENT_3D ( 'NONE', #28067, #25401, #8695 ) ; +#25915 = AXIS2_PLACEMENT_3D ( 'NONE', #21098, #24466, #30669 ) ; +#25916 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25917 = FILL_AREA_STYLE_COLOUR ( '', #28083 ) ; +#25918 = ORIENTED_EDGE ( 'NONE', *, *, #31398, .F. ) ; +#25919 = SURFACE_STYLE_USAGE ( .BOTH. , #23085 ) ; +#25920 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24716, 'distance_accuracy_value', 'NONE'); +#25921 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25922 = ORIENTED_EDGE ( 'NONE', *, *, #9649, .T. ) ; +#25923 = DIRECTION ( 'NONE', ( -2.628368902995161200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#25924 = VERTEX_POINT ( 'NONE', #3437 ) ; +#25925 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.966063034915694700, -0.6228541982233617400 ) ) ; +#25926 = EDGE_LOOP ( 'NONE', ( #39281, #19544, #2695 ) ) ; +#25927 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25928 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000800, -0.8400000000000000800 ) ) ; +#25929 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.2339555568811697600 ) ) ; +#25930 = VERTEX_POINT ( 'NONE', #659 ) ; +#25931 = FACE_OUTER_BOUND ( 'NONE', #2964, .T. ) ; +#25932 = ORIENTED_EDGE ( 'NONE', *, *, #2040, .F. ) ; +#25933 = FILL_AREA_STYLE ('',( #22694 ) ) ; +#25934 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25935 = SURFACE_STYLE_USAGE ( .BOTH. , #40183 ) ; +#25936 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#25937 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8877, 'distance_accuracy_value', 'NONE'); +#25938 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.830380236995680300, -0.8400000000000000800 ) ) ; +#25940 = SURFACE_STYLE_FILL_AREA ( #4948 ) ; +#25939 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#25941 = EDGE_CURVE ( 'NONE', #35781, #15235, #22025, .T. ) ; +#25942 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#25943 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#25944 = EDGE_CURVE ( 'NONE', #9907, #3977, #28563, .T. ) ; +#25945 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#25946 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26775 ), #15912 ) ; +#25947 = SURFACE_STYLE_USAGE ( .BOTH. , #9400 ) ; +#25948 = EDGE_CURVE ( 'NONE', #40292, #40705, #20005, .T. ) ; +#25949 = CARTESIAN_POINT ( 'NONE', ( -3.864640571092986800, 0.5896839563553734100, -4.552270311146639200 ) ) ; +#25950 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#25951 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#25952 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2184 ) ) ; +#25953 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.380001745296130600, -6.031671842700004200 ) ) ; +#25954 = VECTOR ( 'NONE', #6076, 1000.000000000000000 ) ; +#25956 = EDGE_CURVE ( 'NONE', #22593, #3702, #29034, .T. ) ; +#25955 = AXIS2_PLACEMENT_3D ( 'NONE', #38817, #41636, #22335 ) ; +#25957 = LINE ( 'NONE', #13326, #28983 ) ; +#25958 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#25959 = VERTEX_POINT ( 'NONE', #33232 ) ; +#25960 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#25961 = EDGE_LOOP ( 'NONE', ( #17661, #1406, #25082, #28192 ) ) ; +#25963 = ORIENTED_EDGE ( 'NONE', *, *, #15838, .T. ) ; +#25962 = VECTOR ( 'NONE', #41062, 1000.000000000000200 ) ; +#25964 = VERTEX_POINT ( 'NONE', #32795 ) ; +#25965 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.380001745296143100, -5.449999999999994000 ) ) ; +#25966 = FACE_OUTER_BOUND ( 'NONE', #35015, .T. ) ; +#25968 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21677 ), #15693 ) ; +#25967 = STYLED_ITEM ( 'NONE', ( #41146 ), #28428 ) ; +#25969 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29742 ) ) ; +#25970 = SURFACE_STYLE_USAGE ( .BOTH. , #19497 ) ; +#25971 = FACE_OUTER_BOUND ( 'NONE', #10878, .T. ) ; +#25972 = AXIS2_PLACEMENT_3D ( 'NONE', #22999, #23278, #36157 ) ; +#25973 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#25974 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#25976 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.380001745296143100, -4.781671842700004200 ) ) ; +#25975 = SURFACE_SIDE_STYLE ('',( #40172 ) ) ; +#25977 = FACE_OUTER_BOUND ( 'NONE', #33054, .T. ) ; +#25978 = DIRECTION ( 'NONE', ( 7.228014483236709400E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#25979 = AXIS2_PLACEMENT_3D ( 'NONE', #38707, #6650, #10022 ) ; +#25980 = VECTOR ( 'NONE', #37556, 1000.000000000000000 ) ; +#25981 = PRESENTATION_STYLE_ASSIGNMENT (( #13153 ) ) ; +#25982 = FILL_AREA_STYLE ('',( #16786 ) ) ; +#25983 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.499998254703832000, -5.449999999999994000 ) ) ; +#25984 = VECTOR ( 'NONE', #30685, 1000.000000000000000 ) ; +#25985 = SURFACE_SIDE_STYLE ('',( #26665 ) ) ; +#25986 = LINE ( 'NONE', #3649, #25516 ) ; +#25987 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#25988 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#25989 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#25990 = ORIENTED_EDGE ( 'NONE', *, *, #15051, .F. ) ; +#25991 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, -0.5999999999999994200, -3.279289321881344600 ) ) ; +#25992 = VERTEX_POINT ( 'NONE', #10613 ) ; +#25993 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#25994 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3123, 'distance_accuracy_value', 'NONE'); +#25995 = ORIENTED_EDGE ( 'NONE', *, *, #30892, .T. ) ; +#25996 = VECTOR ( 'NONE', #15890, 1000.000000000000200 ) ; +#25997 = EDGE_CURVE ( 'NONE', #38909, #12406, #11367, .T. ) ; +#25998 = ORIENTED_EDGE ( 'NONE', *, *, #12926, .T. ) ; +#25999 = DIRECTION ( 'NONE', ( 9.268445570935432200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#26000 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26001 = VERTEX_POINT ( 'NONE', #13877 ) ; +#26002 = ADVANCED_FACE ( 'NONE', ( #41671 ), #1820, .T. ) ; +#26003 = EDGE_CURVE ( 'NONE', #33297, #4075, #25543, .T. ) ; +#26004 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21715 ), #9464 ) ; +#26005 = SURFACE_STYLE_FILL_AREA ( #35063 ) ; +#26006 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26007 = PLANE ( 'NONE', #30111 ) ; +#26008 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26009 = CARTESIAN_POINT ( 'NONE', ( -4.620424212713737200, -0.2799999999999974200, -1.049979056049130000 ) ) ; +#26010 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27372 ) ) ; +#26011 = PRESENTATION_STYLE_ASSIGNMENT (( #39824 ) ) ; +#26012 = VECTOR ( 'NONE', #37498, 1000.000000000000000 ) ; +#26013 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26014 = AXIS2_PLACEMENT_3D ( 'NONE', #13159, #26169, #3697 ) ; +#26015 = CARTESIAN_POINT ( 'NONE', ( -3.458233997336492400, 1.005153670744119500, -4.549999999999999800 ) ) ; +#26016 = ORIENTED_EDGE ( 'NONE', *, *, #32890, .T. ) ; +#26017 = FACE_OUTER_BOUND ( 'NONE', #12070, .T. ) ; +#26018 = SURFACE_STYLE_USAGE ( .BOTH. , #224 ) ; +#26019 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.480001745296170000, -0.2339555568811697600 ) ) ; +#26020 = FILL_AREA_STYLE_COLOUR ( '', #13860 ) ; +#26021 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33074 ) ) ; +#26022 = CARTESIAN_POINT ( 'NONE', ( 2.972500000000000100, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#26023 = STYLED_ITEM ( 'NONE', ( #41131 ), #18205 ) ; +#26024 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, -2.322941965694886000, 0.6999999999999999600 ) ) ; +#26026 = AXIS2_PLACEMENT_3D ( 'NONE', #13904, #26926, #542 ) ; +#26025 = STYLED_ITEM ( 'NONE', ( #22289 ), #30272 ) ; +#26027 = CARTESIAN_POINT ( 'NONE', ( -0.1500000000000000200, -1.499998254703829500, -6.699999999999994000 ) ) ; +#26028 = ORIENTED_EDGE ( 'NONE', *, *, #14255, .T. ) ; +#26029 = SURFACE_STYLE_USAGE ( .BOTH. , #29391 ) ; +#26030 = CARTESIAN_POINT ( 'NONE', ( 4.518432039200718000, -1.009999999999999300, -6.261124800398365900 ) ) ; +#26031 = VERTEX_POINT ( 'NONE', #6802 ) ; +#26033 = EDGE_CURVE ( 'NONE', #24933, #32758, #14428, .T. ) ; +#26032 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10038 ), #12214 ) ; +#26034 = FILL_AREA_STYLE_COLOUR ( '', #41866 ) ; +#26035 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.3279248189596167300 ) ) ; +#26036 = ORIENTED_EDGE ( 'NONE', *, *, #134, .F. ) ; +#26038 = AXIS2_PLACEMENT_3D ( 'NONE', #23405, #10528, #11097 ) ; +#26037 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20386 ) ) ; +#26039 = CARTESIAN_POINT ( 'NONE', ( 2.149999999999999900, -1.139998254717353500, -6.299996877890552400 ) ) ; +#26040 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.730424212713734800, -1.049979056049130000 ) ) ; +#26041 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#26042 = ADVANCED_FACE ( 'NONE', ( #36628 ), #22919, .F. ) ; +#26043 = ORIENTED_EDGE ( 'NONE', *, *, #276, .T. ) ; +#26044 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#26045 = ORIENTED_EDGE ( 'NONE', *, *, #21270, .T. ) ; +#26046 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28772, 'distance_accuracy_value', 'NONE'); +#26047 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26048 = VECTOR ( 'NONE', #38248, 1000.000000000000100 ) ; +#26049 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#26050 = ORIENTED_EDGE ( 'NONE', *, *, #27368, .F. ) ; +#26051 = SURFACE_STYLE_USAGE ( .BOTH. , #28999 ) ; +#26052 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#26053 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26054 = ADVANCED_FACE ( 'NONE', ( #16937 ), #26506, .T. ) ; +#26055 = LINE ( 'NONE', #24172, #21557 ) ; +#26056 = ORIENTED_EDGE ( 'NONE', *, *, #37411, .T. ) ; +#26057 = CARTESIAN_POINT ( 'NONE', ( -3.245000000002999900, -0.2999999999999999900, -1.649999999999999900 ) ) ; +#26058 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26059 = FILL_AREA_STYLE ('',( #266 ) ) ; +#26060 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.3500000000000000300, 0.3499999999999999800 ) ) ; +#26061 = EDGE_CURVE ( 'NONE', #23515, #4481, #5793, .T. ) ; +#26062 = SURFACE_STYLE_FILL_AREA ( #16677 ) ; +#26063 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#26064 = EDGE_CURVE ( 'NONE', #41461, #6786, #32570, .T. ) ; +#26065 = AXIS2_PLACEMENT_3D ( 'NONE', #21810, #17978, #30816 ) ; +#26066 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#26067 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#26068 = PLANE ( 'NONE', #34432 ) ; +#26069 = LINE ( 'NONE', #17575, #14974 ) ; +#26070 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.139998254717359000, -5.049996877890552400 ) ) ; +#26071 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #26787, #32837, #13475, #13910 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#26072 = STYLED_ITEM ( 'NONE', ( #20017 ), #15045 ) ; +#26073 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.139998254717350800, -6.299996877890552400 ) ) ; +#26074 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#26075 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#26076 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26077 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#26078 = STYLED_ITEM ( 'NONE', ( #27297 ), #19504 ) ; +#26079 = SURFACE_STYLE_USAGE ( .BOTH. , #567 ) ; +#26080 = ORIENTED_EDGE ( 'NONE', *, *, #12853, .T. ) ; +#26082 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26081 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21794 ), #9542 ) ; +#26083 = VERTEX_POINT ( 'NONE', #7656 ) ; +#26084 = ORIENTED_EDGE ( 'NONE', *, *, #8963, .F. ) ; +#26086 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38153, 'distance_accuracy_value', 'NONE'); +#26085 = SURFACE_STYLE_FILL_AREA ( #18124 ) ; +#26087 = FILL_AREA_STYLE_COLOUR ( '', #26248 ) ; +#26089 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13610 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24347, #40555, #4981 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26088 = AXIS2_PLACEMENT_3D ( 'NONE', #2875, #9303, #15812 ) ; +#26090 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26091 = VECTOR ( 'NONE', #28779, 1000.000000000000000 ) ; +#26092 = VECTOR ( 'NONE', #1889, 1000.000000000000100 ) ; +#26093 = VECTOR ( 'NONE', #17027, 1000.000000000000000 ) ; +#26096 = EDGE_CURVE ( 'NONE', #32225, #19679, #17920, .T. ) ; +#26095 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26094 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38505 ) ) ; +#26097 = ORIENTED_EDGE ( 'NONE', *, *, #33319, .F. ) ; +#26098 = ORIENTED_EDGE ( 'NONE', *, *, #29294, .T. ) ; +#26099 = ADVANCED_FACE ( 'NONE', ( #11316 ), #10303, .F. ) ; +#26100 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10272, 'distance_accuracy_value', 'NONE'); +#26101 = FILL_AREA_STYLE ('',( #35147 ) ) ; +#26102 = FILL_AREA_STYLE_COLOUR ( '', #31799 ) ; +#26103 = FACE_OUTER_BOUND ( 'NONE', #14074, .T. ) ; +#26105 = AXIS2_PLACEMENT_3D ( 'NONE', #32575, #5608, #35848 ) ; +#26104 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36614 ), #30681 ) ; +#26106 = SURFACE_SIDE_STYLE ('',( #1229 ) ) ; +#26107 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#26108 = LINE ( 'NONE', #28270, #5386 ) ; +#26109 = SURFACE_STYLE_USAGE ( .BOTH. , #3505 ) ; +#26110 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#26111 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19605, 'distance_accuracy_value', 'NONE'); +#26112 = VECTOR ( 'NONE', #18317, 1000.000000000000000 ) ; +#26113 = FILL_AREA_STYLE ('',( #6872 ) ) ; +#26114 = DIRECTION ( 'NONE', ( -4.336808689942015400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#26115 = VECTOR ( 'NONE', #19431, 1000.000000000000000 ) ; +#26116 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -0.3590461068823620500 ) ) ; +#26117 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#26118 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#26119 = EDGE_LOOP ( 'NONE', ( #39763, #17930, #27663, #18152 ) ) ; +#26120 = VECTOR ( 'NONE', #11854, 1000.000000000000000 ) ; +#26121 = FILL_AREA_STYLE_COLOUR ( '', #17321 ) ; +#26122 = ORIENTED_EDGE ( 'NONE', *, *, #37562, .F. ) ; +#26123 = LINE ( 'NONE', #1168, #28629 ) ; +#26124 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21360, 'distance_accuracy_value', 'NONE'); +#26125 = EDGE_CURVE ( 'NONE', #27344, #2626, #16889, .T. ) ; +#26126 = ORIENTED_EDGE ( 'NONE', *, *, #39742, .T. ) ; +#26127 = ORIENTED_EDGE ( 'NONE', *, *, #36525, .F. ) ; +#26128 = ORIENTED_EDGE ( 'NONE', *, *, #38379, .T. ) ; +#26129 = VECTOR ( 'NONE', #8617, 999.9999999999998900 ) ; +#26130 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, 0.0000000000000000000 ) ) ; +#26131 = CARTESIAN_POINT ( 'NONE', ( -0.7499999999999997800, -1.499998254703820900, -7.500000000000006200 ) ) ; +#26132 = LINE ( 'NONE', #24706, #17562 ) ; +#26133 = EDGE_CURVE ( 'NONE', #2937, #39019, #34598, .T. ) ; +#26134 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#26135 = EDGE_LOOP ( 'NONE', ( #15894, #19305, #41741, #15197 ) ) ; +#26136 = ORIENTED_EDGE ( 'NONE', *, *, #41686, .F. ) ; +#26137 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#26138 = AXIS2_PLACEMENT_3D ( 'NONE', #34542, #1828, #17901 ) ; +#26139 = PRESENTATION_STYLE_ASSIGNMENT (( #18767 ) ) ; +#26140 = FILL_AREA_STYLE_COLOUR ( '', #18902 ) ; +#26141 = SURFACE_STYLE_FILL_AREA ( #8621 ) ; +#26142 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23980 ), #24821 ) ; +#26143 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#26144 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.168404344971012800E-015, 0.0000000000000000000 ) ) ; +#26145 = STYLED_ITEM ( 'NONE', ( #18910 ), #11271 ) ; +#26146 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.630424214906980300, -1.149999999999999900 ) ) ; +#26147 = ADVANCED_FACE ( 'NONE', ( #2302 ), #25036, .T. ) ; +#26149 = EDGE_CURVE ( 'NONE', #25894, #28469, #16403, .T. ) ; +#26148 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10311 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22757, #36038, #16396 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26150 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26151 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#26152 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26153 = FACE_OUTER_BOUND ( 'NONE', #12080, .T. ) ; +#26154 = FILL_AREA_STYLE ('',( #19396 ) ) ; +#26155 = ORIENTED_EDGE ( 'NONE', *, *, #25712, .T. ) ; +#26156 = LINE ( 'NONE', #18728, #28708 ) ; +#26157 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26158 = STYLED_ITEM ( 'NONE', ( #25981 ), #2791 ) ; +#26159 = STYLED_ITEM ( 'NONE', ( #41013 ), #40197 ) ; +#26160 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26161 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14530 ), #23443 ) ; +#26162 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26163 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26164 = EDGE_LOOP ( 'NONE', ( #40316, #19152, #13762, #38705 ) ) ; +#26165 = ORIENTED_EDGE ( 'NONE', *, *, #7736, .T. ) ; +#26166 = ORIENTED_EDGE ( 'NONE', *, *, #40714, .F. ) ; +#26167 = LINE ( 'NONE', #5366, #21137 ) ; +#26168 = DIRECTION ( 'NONE', ( -2.367138801244516300E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26169 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#26170 = FILL_AREA_STYLE ('',( #26313 ) ) ; +#26171 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.07499999999999998300, -1.399999999999999900 ) ) ; +#26172 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26173 = LINE ( 'NONE', #650, #20658 ) ; +#26174 = ORIENTED_EDGE ( 'NONE', *, *, #39175, .F. ) ; +#26175 = FACE_BOUND ( 'NONE', #29085, .T. ) ; +#26176 = ORIENTED_EDGE ( 'NONE', *, *, #21339, .F. ) ; +#26177 = ORIENTED_EDGE ( 'NONE', *, *, #12930, .F. ) ; +#26178 = LINE ( 'NONE', #33457, #12493 ) ; +#26179 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26180 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28095, 'distance_accuracy_value', 'NONE'); +#26181 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#26182 = LINE ( 'NONE', #16334, #32732 ) ; +#26183 = ORIENTED_EDGE ( 'NONE', *, *, #36318, .T. ) ; +#26184 = EDGE_CURVE ( 'NONE', #19894, #2027, #32562, .T. ) ; +#26185 = VECTOR ( 'NONE', #13811, 1000.000000000000000 ) ; +#26186 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.6199999999999849000, -5.199999999999999300 ) ) ; +#26187 = EDGE_CURVE ( 'NONE', #9178, #1848, #33596, .T. ) ; +#26188 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23886, 'distance_accuracy_value', 'NONE'); +#26189 = EDGE_CURVE ( 'NONE', #19617, #25930, #4774, .T. ) ; +#26190 = VERTEX_POINT ( 'NONE', #24193 ) ; +#26191 = CARTESIAN_POINT ( 'NONE', ( -1.149999999999999900, -1.499998254703826200, -6.299999999999993600 ) ) ; +#26192 = SURFACE_SIDE_STYLE ('',( #30632 ) ) ; +#26193 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3646 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7708, #1670, #14771 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26194 = SURFACE_STYLE_USAGE ( .BOTH. , #17018 ) ; +#26195 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 0.6800017452961684100, -3.999999999999999100 ) ) ; +#26196 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.6228541982233617400 ) ) ; +#26197 = EDGE_CURVE ( 'NONE', #6625, #894, #29529, .T. ) ; +#26198 = VERTEX_POINT ( 'NONE', #11857 ) ; +#26199 = SURFACE_STYLE_FILL_AREA ( #38032 ) ; +#26200 = CARTESIAN_POINT ( 'NONE', ( 0.2500000000000032800, 0.4300017452961685800, -6.750000000000000000 ) ) ; +#26201 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#26202 = ORIENTED_EDGE ( 'NONE', *, *, #11336, .F. ) ; +#26203 = ORIENTED_EDGE ( 'NONE', *, *, #5595, .F. ) ; +#26204 = VERTEX_POINT ( 'NONE', #40258 ) ; +#26205 = STYLED_ITEM ( 'NONE', ( #14770 ), #12843 ) ; +#26206 = SURFACE_SIDE_STYLE ('',( #1281 ) ) ; +#26207 = DIRECTION ( 'NONE', ( 2.478176394252580200E-017, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#26208 = LINE ( 'NONE', #12739, #20159 ) ; +#26211 = EDGE_CURVE ( 'NONE', #18606, #561, #6742, .T. ) ; +#26210 = STYLED_ITEM ( 'NONE', ( #8993 ), #23925 ) ; +#26209 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#26212 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#26213 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#26214 = ORIENTED_EDGE ( 'NONE', *, *, #37222, .T. ) ; +#26215 = ORIENTED_EDGE ( 'NONE', *, *, #35000, .T. ) ; +#26216 = VERTEX_POINT ( 'NONE', #21107 ) ; +#26217 = LINE ( 'NONE', #3165, #15075 ) ; +#26218 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26219 = ADVANCED_FACE ( 'NONE', ( #28483 ), #13857, .T. ) ; +#26220 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19748 ), #34884 ) ; +#26221 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26222 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.499998254703820400, -6.299999999999993600 ) ) ; +#26223 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23342 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1917, #5120, #8340 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26224 = CARTESIAN_POINT ( 'NONE', ( -3.475000000000000100, 1.480001745296169100, -4.000000000000000000 ) ) ; +#26225 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12402 ) ) ; +#26226 = EDGE_LOOP ( 'NONE', ( #8985, #14660, #10380, #26427 ) ) ; +#26227 = LINE ( 'NONE', #3625, #33803 ) ; +#26228 = DIRECTION ( 'NONE', ( -3.281909278875040400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#26230 = AXIS2_PLACEMENT_3D ( 'NONE', #24363, #37480, #2075 ) ; +#26229 = FILL_AREA_STYLE ('',( #13078 ) ) ; +#26231 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20252, 'distance_accuracy_value', 'NONE'); +#26232 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, 0.6500000000000001300, -3.250000000000000400 ) ) ; +#26233 = CYLINDRICAL_SURFACE ( 'NONE', #30667, 0.2500000000000000000 ) ; +#26234 = SURFACE_STYLE_USAGE ( .BOTH. , #30022 ) ; +#26235 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -10.30000000000000100, -1.250000000000000000 ) ) ; +#26236 = SURFACE_STYLE_FILL_AREA ( #11429 ) ; +#26237 = FACE_OUTER_BOUND ( 'NONE', #34994, .T. ) ; +#26238 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26239 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, -0.3499999999999996400, -1.250000000000000000 ) ) ; +#26240 = FILL_AREA_STYLE_COLOUR ( '', #26075 ) ; +#26241 = CARTESIAN_POINT ( 'NONE', ( -1.400000000000000800, 1.480001745296169600, -1.650000000000000400 ) ) ; +#26242 = CARTESIAN_POINT ( 'NONE', ( 3.846156164834738400, 0.6165030250713639000, -4.400260404654702000 ) ) ; +#26243 = ORIENTED_EDGE ( 'NONE', *, *, #32384, .T. ) ; +#26244 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#26245 = EDGE_LOOP ( 'NONE', ( #12652, #8992, #6609, #20315 ) ) ; +#26246 = ORIENTED_EDGE ( 'NONE', *, *, #31957, .T. ) ; +#26247 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26248 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#26249 = CONICAL_SURFACE ( 'NONE', #1747, 0.3000000000000001600, 0.3490658503988666700 ) ; +#26250 = FACE_OUTER_BOUND ( 'NONE', #21975, .T. ) ; +#26251 = LINE ( 'NONE', #18929, #19709 ) ; +#26252 = FILL_AREA_STYLE ('',( #3511 ) ) ; +#26253 = FACE_OUTER_BOUND ( 'NONE', #39450, .T. ) ; +#26254 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26255 = ORIENTED_EDGE ( 'NONE', *, *, #24724, .T. ) ; +#26256 = CARTESIAN_POINT ( 'NONE', ( 4.769999999999744700, -0.2800000000000026400, -0.2339555568811695900 ) ) ; +#26257 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, -0.07499999999999999700, 0.4305619708689000200 ) ) ; +#26258 = PRESENTATION_STYLE_ASSIGNMENT (( #10395 ) ) ; +#26260 = ORIENTED_EDGE ( 'NONE', *, *, #33243, .F. ) ; +#26259 = ADVANCED_FACE ( 'NONE', ( #25977 ), #34481, .F. ) ; +#26261 = EDGE_CURVE ( 'NONE', #23585, #27571, #31520, .T. ) ; +#26262 = FILL_AREA_STYLE ('',( #6749 ) ) ; +#26263 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26264 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#26265 = EDGE_CURVE ( 'NONE', #29002, #3347, #27465, .T. ) ; +#26266 = ORIENTED_EDGE ( 'NONE', *, *, #15498, .F. ) ; +#26267 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#26268 = SURFACE_STYLE_FILL_AREA ( #38706 ) ; +#26269 = ADVANCED_FACE ( 'NONE', ( #22930, #21467, #23458 ), #5528, .F. ) ; +#26270 = AXIS2_PLACEMENT_3D ( 'NONE', #31820, #28720, #38308 ) ; +#26271 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26272 = CARTESIAN_POINT ( 'NONE', ( 3.237718385397870600, -0.2999999999999999900, 0.7155313145785475700 ) ) ; +#26273 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#26274 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16025 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38297, #22088, #3280 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26275 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6763 ) ) ; +#26276 = LINE ( 'NONE', #13727, #21279 ) ; +#26277 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26279 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16197 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28756, #9378, #22132 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26278 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40558 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26889, #41807, #7488 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26280 = ORIENTED_EDGE ( 'NONE', *, *, #5611, .F. ) ; +#26283 = EDGE_CURVE ( 'NONE', #25373, #38956, #20955, .T. ) ; +#26282 = DIRECTION ( 'NONE', ( -4.336808689942002000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#26281 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12460 ), #27901 ) ; +#26284 = FACE_OUTER_BOUND ( 'NONE', #27497, .T. ) ; +#26285 = STYLED_ITEM ( 'NONE', ( #16303 ), #8831 ) ; +#26286 = FILL_AREA_STYLE ('',( #10008 ) ) ; +#26287 = ORIENTED_EDGE ( 'NONE', *, *, #7883, .T. ) ; +#26288 = FACE_OUTER_BOUND ( 'NONE', #11949, .T. ) ; +#26289 = ORIENTED_EDGE ( 'NONE', *, *, #31808, .T. ) ; +#26290 = PRESENTATION_STYLE_ASSIGNMENT (( #12730 ) ) ; +#26291 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #712 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14224, #8102, #40171 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26292 = SURFACE_STYLE_USAGE ( .BOTH. , #29520 ) ; +#26293 = SURFACE_STYLE_FILL_AREA ( #25026 ) ; +#26294 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16512, 'distance_accuracy_value', 'NONE'); +#26295 = LINE ( 'NONE', #36056, #23779 ) ; +#26296 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26297 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#26298 = SURFACE_SIDE_STYLE ('',( #10173 ) ) ; +#26299 = ORIENTED_EDGE ( 'NONE', *, *, #33271, .F. ) ; +#26300 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26301 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.6300017452961683700, -4.400000000000000400 ) ) ; +#26302 = VECTOR ( 'NONE', #20947, 1000.000000000000000 ) ; +#26303 = ORIENTED_EDGE ( 'NONE', *, *, #41588, .T. ) ; +#26304 = EDGE_LOOP ( 'NONE', ( #37397, #7350, #29964, #15024 ) ) ; +#26305 = CIRCLE ( 'NONE', #7580, 1.450380236995678600 ) ; +#26306 = FILL_AREA_STYLE_COLOUR ( '', #9591 ) ; +#26307 = CARTESIAN_POINT ( 'NONE', ( -4.520424214906981300, -0.2799999999999974200, -1.050000000000000000 ) ) ; +#26308 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #19220, #28796, #6345, #41493 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 1.570796326794937600, 4.712388980384730500 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.3333333333333333700, 0.3333333333333333700, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#26309 = VERTEX_POINT ( 'NONE', #5236 ) ; +#26310 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#26311 = ADVANCED_FACE ( 'NONE', ( #3244 ), #40584, .F. ) ; +#26312 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#26313 = FILL_AREA_STYLE_COLOUR ( '', #13054 ) ; +#26314 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#26315 = PLANE ( 'NONE', #8191 ) ; +#26316 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26317 = EDGE_CURVE ( 'NONE', #564, #11272, #21432, .T. ) ; +#26318 = PRESENTATION_STYLE_ASSIGNMENT (( #6680 ) ) ; +#26319 = CARTESIAN_POINT ( 'NONE', ( -1.649999999999999900, -1.139998254717355100, -6.299996877890552400 ) ) ; +#26320 = SURFACE_STYLE_USAGE ( .BOTH. , #13027 ) ; +#26321 = VECTOR ( 'NONE', #16470, 1000.000000000000000 ) ; +#26322 = SURFACE_STYLE_USAGE ( .BOTH. , #32100 ) ; +#26323 = EDGE_CURVE ( 'NONE', #38400, #3587, #41590, .T. ) ; +#26324 = ORIENTED_EDGE ( 'NONE', *, *, #19897, .F. ) ; +#26325 = ORIENTED_EDGE ( 'NONE', *, *, #15503, .T. ) ; +#26326 = CIRCLE ( 'NONE', #14572, 0.2000017452961698200 ) ; +#26327 = EDGE_LOOP ( 'NONE', ( #19542, #3666, #20744, #11404 ) ) ; +#26328 = AXIS2_PLACEMENT_3D ( 'NONE', #8764, #18559, #11874 ) ; +#26329 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#26330 = FACE_OUTER_BOUND ( 'NONE', #7847, .T. ) ; +#26331 = FILL_AREA_STYLE_COLOUR ( '', #25827 ) ; +#26332 = SURFACE_STYLE_FILL_AREA ( #16536 ) ; +#26333 = ORIENTED_EDGE ( 'NONE', *, *, #28729, .T. ) ; +#26334 = STYLED_ITEM ( 'NONE', ( #37817 ), #38529 ) ; +#26335 = LINE ( 'NONE', #22234, #13182 ) ; +#26336 = ORIENTED_EDGE ( 'NONE', *, *, #1057, .F. ) ; +#26337 = ORIENTED_EDGE ( 'NONE', *, *, #17911, .T. ) ; +#26338 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13314 ) ) ; +#26339 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22784, 'distance_accuracy_value', 'NONE'); +#26340 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36363 ) ) ; +#26341 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 9.035070666963931600E-017, -1.000000000000000000 ) ) ; +#26342 = PLANE ( 'NONE', #32889 ) ; +#26344 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23370 ) ) ; +#26343 = STYLED_ITEM ( 'NONE', ( #31753 ), #30733 ) ; +#26345 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.032879073410321300E-016, -1.000000000000000000 ) ) ; +#26346 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#26348 = EDGE_CURVE ( 'NONE', #15829, #15139, #204, .T. ) ; +#26347 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32014 ), #163 ) ; +#26349 = VERTEX_POINT ( 'NONE', #15415 ) ; +#26350 = DIRECTION ( 'NONE', ( -7.899824355898891900E-032, 2.367138801244513800E-016, 1.000000000000000000 ) ) ; +#26351 = SURFACE_STYLE_USAGE ( .BOTH. , #29716 ) ; +#26352 = FILL_AREA_STYLE ('',( #3597 ) ) ; +#26353 = ORIENTED_EDGE ( 'NONE', *, *, #36071, .T. ) ; +#26354 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#26355 = PRESENTATION_STYLE_ASSIGNMENT (( #28230 ) ) ; +#26356 = VECTOR ( 'NONE', #19586, 1000.000000000000000 ) ; +#26358 = AXIS2_PLACEMENT_3D ( 'NONE', #32372, #7073, #29257 ) ; +#26357 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5238 ), #8749 ) ; +#26359 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.480001745296166000, -1.899999999999999700 ) ) ; +#26360 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#26361 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.380001745296126800, -5.449999999999994000 ) ) ; +#26362 = SURFACE_SIDE_STYLE ('',( #34285 ) ) ; +#26363 = FILL_AREA_STYLE_COLOUR ( '', #4477 ) ; +#26364 = CYLINDRICAL_SURFACE ( 'NONE', #30039, 0.09999999999999999200 ) ; +#26365 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.966063034915694700, -0.6228541982233617400 ) ) ; +#26366 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26367 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26368 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#26369 = SURFACE_STYLE_FILL_AREA ( #36351 ) ; +#26370 = ORIENTED_EDGE ( 'NONE', *, *, #6386, .F. ) ; +#26371 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26372 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -2.031000000000000600, -2.594459358809380100 ) ) ; +#26373 = PRESENTATION_STYLE_ASSIGNMENT (( #24009 ) ) ; +#26374 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8166, 'distance_accuracy_value', 'NONE'); +#26375 = FILL_AREA_STYLE_COLOUR ( '', #4364 ) ; +#26376 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#26377 = ORIENTED_EDGE ( 'NONE', *, *, #36414, .T. ) ; +#26378 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000026900, -0.2339555568811697600 ) ) ; +#26379 = VECTOR ( 'NONE', #15969, 1000.000000000000000 ) ; +#26380 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#26381 = EDGE_LOOP ( 'NONE', ( #16487, #35097, #23078, #16422 ) ) ; +#26382 = EDGE_CURVE ( 'NONE', #24529, #13366, #33029, .T. ) ; +#26383 = LINE ( 'NONE', #11347, #26886 ) ; +#26384 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26385 = PLANE ( 'NONE', #1797 ) ; +#26386 = EDGE_CURVE ( 'NONE', #1213, #29337, #11770, .T. ) ; +#26387 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#26388 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18245, 'distance_accuracy_value', 'NONE'); +#26389 = ORIENTED_EDGE ( 'NONE', *, *, #35234, .T. ) ; +#26390 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#26391 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26392 = ORIENTED_EDGE ( 'NONE', *, *, #33000, .F. ) ; +#26393 = LINE ( 'NONE', #17062, #15754 ) ; +#26394 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26395 = PRESENTATION_STYLE_ASSIGNMENT (( #27878 ) ) ; +#26396 = SURFACE_STYLE_FILL_AREA ( #15533 ) ; +#26397 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26398 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#26399 = DIRECTION ( 'NONE', ( 1.445602896647293600E-014, 1.837630800822890800E-016, 1.000000000000000000 ) ) ; +#26400 = PLANE ( 'NONE', #5681 ) ; +#26401 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.168401191219098200E-015, 0.0000000000000000000 ) ) ; +#26402 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2608 ), #10408 ) ; +#26403 = LINE ( 'NONE', #6293, #10693 ) ; +#26404 = STYLED_ITEM ( 'NONE', ( #12562 ), #6756 ) ; +#26405 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41524 ) ) ; +#26406 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 1.480001745296169800, -1.649999999999999900 ) ) ; +#26407 = SURFACE_STYLE_USAGE ( .BOTH. , #9982 ) ; +#26408 = ORIENTED_EDGE ( 'NONE', *, *, #766, .T. ) ; +#26410 = EDGE_CURVE ( 'NONE', #2452, #18341, #38772, .T. ) ; +#26409 = AXIS2_PLACEMENT_3D ( 'NONE', #12356, #38202, #19029 ) ; +#26411 = CARTESIAN_POINT ( 'NONE', ( 4.070001745296171900, -0.2800000000000026400, -4.099999999999999600 ) ) ; +#26412 = FILL_AREA_STYLE ('',( #32611 ) ) ; +#26414 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17414 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23568, #30061, #13684 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26413 = STYLED_ITEM ( 'NONE', ( #27354 ), #26918 ) ; +#26415 = FILL_AREA_STYLE ('',( #13392 ) ) ; +#26416 = AXIS2_PLACEMENT_3D ( 'NONE', #36731, #11010, #30648 ) ; +#26417 = VERTEX_POINT ( 'NONE', #41256 ) ; +#26418 = CARTESIAN_POINT ( 'NONE', ( -3.365710678118654100, -0.2000000000000000100, -3.300000000000000700 ) ) ; +#26419 = STYLED_ITEM ( 'NONE', ( #9240 ), #31815 ) ; +#26420 = ORIENTED_EDGE ( 'NONE', *, *, #7740, .T. ) ; +#26422 = SURFACE_STYLE_FILL_AREA ( #25721 ) ; +#26421 = VECTOR ( 'NONE', #5720, 1000.000000000000000 ) ; +#26423 = VECTOR ( 'NONE', #37308, 1000.000000000000000 ) ; +#26424 = FILL_AREA_STYLE_COLOUR ( '', #37038 ) ; +#26425 = VERTEX_POINT ( 'NONE', #9016 ) ; +#26426 = PRESENTATION_STYLE_ASSIGNMENT (( #20938 ) ) ; +#26427 = ORIENTED_EDGE ( 'NONE', *, *, #17621, .F. ) ; +#26428 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#26429 = VECTOR ( 'NONE', #40084, 1000.000000000000000 ) ; +#26430 = FILL_AREA_STYLE ('',( #759 ) ) ; +#26431 = FILL_AREA_STYLE_COLOUR ( '', #4108 ) ; +#26432 = ADVANCED_FACE ( 'NONE', ( #41090 ), #15543, .F. ) ; +#26433 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26434 = PRESENTATION_STYLE_ASSIGNMENT (( #3386 ) ) ; +#26435 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid32', #8217 ) ; +#26436 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#26437 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.499998254703822900, -6.299999999999993600 ) ) ; +#26438 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#26439 = CARTESIAN_POINT ( 'NONE', ( -4.520424214906981300, 0.2800000000000027500, -1.050000000000000000 ) ) ; +#26440 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.499998254703822000, -5.049999999999993600 ) ) ; +#26441 = EDGE_CURVE ( 'NONE', #32725, #14785, #34526, .T. ) ; +#26442 = DIRECTION ( 'NONE', ( 0.9961946980917453200, 3.269420623233417900E-015, 0.08715574274766037200 ) ) ; +#26443 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#26444 = ORIENTED_EDGE ( 'NONE', *, *, #3571, .F. ) ; +#26445 = FILL_AREA_STYLE ('',( #36467 ) ) ; +#26446 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, 0.2799999999999973100, -1.149999999999999900 ) ) ; +#26447 = EDGE_CURVE ( 'NONE', #21877, #17086, #5219, .T. ) ; +#26448 = ORIENTED_EDGE ( 'NONE', *, *, #34757, .T. ) ; +#26449 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25437 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37088, #37223, #40457 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26450 = CARTESIAN_POINT ( 'NONE', ( -3.218754194991523500, 0.07499999999999999700, -0.04698997146820856800 ) ) ; +#26451 = SURFACE_STYLE_USAGE ( .BOTH. , #29545 ) ; +#26452 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21075, 'distance_accuracy_value', 'NONE'); +#26453 = SURFACE_STYLE_USAGE ( .BOTH. , #4258 ) ; +#26454 = FACE_BOUND ( 'NONE', #41084, .T. ) ; +#26455 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26456 = ORIENTED_EDGE ( 'NONE', *, *, #16835, .F. ) ; +#26457 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22232 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14261, #36849, #40072 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26458 = ORIENTED_EDGE ( 'NONE', *, *, #7236, .F. ) ; +#26459 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26460 = ORIENTED_EDGE ( 'NONE', *, *, #21027, .F. ) ; +#26461 = ORIENTED_EDGE ( 'NONE', *, *, #25670, .T. ) ; +#26462 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#26463 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33211 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #496, #35763, #3557 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26464 = CARTESIAN_POINT ( 'NONE', ( 2.573205080756887100, 1.630001745296169500, -1.650000000000000400 ) ) ; +#26466 = EDGE_CURVE ( 'NONE', #39630, #28666, #35049, .T. ) ; +#26465 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#26467 = FACE_OUTER_BOUND ( 'NONE', #23477, .T. ) ; +#26468 = ORIENTED_EDGE ( 'NONE', *, *, #20913, .T. ) ; +#26469 = ADVANCED_FACE ( 'NONE', ( #26467 ), #41504, .F. ) ; +#26470 = PLANE ( 'NONE', #41793 ) ; +#26471 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#26472 = LINE ( 'NONE', #9173, #9249 ) ; +#26473 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10773, 'distance_accuracy_value', 'NONE'); +#26474 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26475 = STYLED_ITEM ( 'NONE', ( #28620 ), #27731 ) ; +#26476 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33845 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35990, #32584, #22847 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26477 = LINE ( 'NONE', #28545, #742 ) ; +#26478 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, -0.2800000000000026400, -0.2339555568811697600 ) ) ; +#26480 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11546 ), #28635 ) ; +#26479 = FACE_OUTER_BOUND ( 'NONE', #15266, .T. ) ; +#26481 = FILL_AREA_STYLE ('',( #1356 ) ) ; +#26482 = SURFACE_STYLE_USAGE ( .BOTH. , #33105 ) ; +#26483 = PRODUCT_DEFINITION_CONTEXT ( 'detailed design', #39609, 'design' ) ; +#26484 = ADVANCED_FACE ( 'NONE', ( #3672 ), #13398, .F. ) ; +#26485 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26486 = FILL_AREA_STYLE_COLOUR ( '', #2120 ) ; +#26487 = CARTESIAN_POINT ( 'NONE', ( -3.839743771154401100, 0.6300017452961683700, -4.400000000000001200 ) ) ; +#26488 = SURFACE_STYLE_USAGE ( .BOTH. , #35960 ) ; +#26489 = SURFACE_SIDE_STYLE ('',( #35701 ) ) ; +#26490 = VECTOR ( 'NONE', #804, 1000.000000000000000 ) ; +#26491 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.3699999999999850600, -4.599999999999999600 ) ) ; +#26492 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26493 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1858, 'distance_accuracy_value', 'NONE'); +#26494 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26495 = FILL_AREA_STYLE_COLOUR ( '', #35783 ) ; +#26496 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#26497 = ORIENTED_EDGE ( 'NONE', *, *, #24875, .T. ) ; +#26498 = ORIENTED_EDGE ( 'NONE', *, *, #4958, .F. ) ; +#26499 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26500 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26501 = ORIENTED_EDGE ( 'NONE', *, *, #32630, .F. ) ; +#26502 = ORIENTED_EDGE ( 'NONE', *, *, #11695, .F. ) ; +#26503 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#26504 = LINE ( 'NONE', #3279, #8796 ) ; +#26505 = FILL_AREA_STYLE ('',( #32991 ) ) ; +#26506 = CYLINDRICAL_SURFACE ( 'NONE', #2322, 0.1000000000000000500 ) ; +#26507 = EDGE_CURVE ( 'NONE', #14983, #20205, #30958, .T. ) ; +#26508 = STYLED_ITEM ( 'NONE', ( #30591 ), #17948 ) ; +#26509 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26510 = SURFACE_STYLE_FILL_AREA ( #25122 ) ; +#26511 = LINE ( 'NONE', #22367, #776 ) ; +#26512 = VECTOR ( 'NONE', #14418, 1000.000000000000000 ) ; +#26513 = EDGE_LOOP ( 'NONE', ( #13891, #1246, #6151 ) ) ; +#26514 = SURFACE_SIDE_STYLE ('',( #1492 ) ) ; +#26515 = EDGE_CURVE ( 'NONE', #4528, #24607, #14313, .T. ) ; +#26516 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.480001745296170000, -0.2339555568811695900 ) ) ; +#26517 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26518 = AXIS2_PLACEMENT_3D ( 'NONE', #14024, #7344, #7646 ) ; +#26519 = ADVANCED_FACE ( 'NONE', ( #24405 ), #4090, .F. ) ; +#26520 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822900, -6.600000000000000500 ) ) ; +#26521 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, 0.03299999999999998100 ) ) ; +#26522 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27318 ) ) ; +#26523 = ORIENTED_EDGE ( 'NONE', *, *, #15838, .F. ) ; +#26524 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5430 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14244, #33304, #23970 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26525 = ORIENTED_EDGE ( 'NONE', *, *, #16229, .T. ) ; +#26526 = CARTESIAN_POINT ( 'NONE', ( -3.245000000008750000, 0.3499999999999999800, -1.649999999999999900 ) ) ; +#26527 = SURFACE_STYLE_FILL_AREA ( #28380 ) ; +#26528 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#26530 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21423 ) ) ; +#26529 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8369 ) ) ; +#26531 = PRESENTATION_STYLE_ASSIGNMENT (( #35092 ) ) ; +#26532 = AXIS2_PLACEMENT_3D ( 'NONE', #32705, #20606, #20320 ) ; +#26533 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18711, 'distance_accuracy_value', 'NONE'); +#26534 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#26535 = PRESENTATION_STYLE_ASSIGNMENT (( #30847 ) ) ; +#26537 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11354 ) ) ; +#26536 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17076 ), #33839 ) ; +#26538 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#26539 = SURFACE_SIDE_STYLE ('',( #12135 ) ) ; +#26540 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#26541 = ORIENTED_EDGE ( 'NONE', *, *, #2601, .T. ) ; +#26542 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #338 ) ) ; +#26543 = VECTOR ( 'NONE', #18279, 1000.000000000000000 ) ; +#26545 = SURFACE_STYLE_USAGE ( .BOTH. , #33593 ) ; +#26544 = SURFACE_STYLE_FILL_AREA ( #31813 ) ; +#26546 = FILL_AREA_STYLE ('',( #6620 ) ) ; +#26547 = VERTEX_POINT ( 'NONE', #3796 ) ; +#26548 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -0.2339555568811695900 ) ) ; +#26549 = FACE_OUTER_BOUND ( 'NONE', #31612, .T. ) ; +#26550 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, 1.536856579498202500E-014, 0.0000000000000000000 ) ) ; +#26551 = FILL_AREA_STYLE ('',( #6758 ) ) ; +#26552 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.499998254703828600, -5.049999999999993600 ) ) ; +#26553 = ORIENTED_EDGE ( 'NONE', *, *, #7813, .T. ) ; +#26554 = PRESENTATION_STYLE_ASSIGNMENT (( #16145 ) ) ; +#26555 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#26556 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26557 = FACE_OUTER_BOUND ( 'NONE', #4655, .T. ) ; +#26558 = EDGE_LOOP ( 'NONE', ( #2099, #31141, #36903, #8003 ) ) ; +#26559 = EDGE_CURVE ( 'NONE', #14611, #2929, #38037, .T. ) ; +#26560 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#26561 = CARTESIAN_POINT ( 'NONE', ( 4.748858409427525000, -0.01999825470383145100, -7.173853277175708400 ) ) ; +#26562 = SURFACE_STYLE_USAGE ( .BOTH. , #12721 ) ; +#26563 = EDGE_CURVE ( 'NONE', #38648, #19217, #4158, .T. ) ; +#26564 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13566 ), #25241 ) ; +#26565 = ADVANCED_FACE ( 'NONE', ( #20910 ), #26859, .F. ) ; +#26566 = FACE_OUTER_BOUND ( 'NONE', #36577, .T. ) ; +#26567 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26568 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26569 = DIRECTION ( 'NONE', ( 4.336808689942015400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#26570 = FILL_AREA_STYLE ('',( #27008 ) ) ; +#26571 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23764 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27661, #8286, #8426 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26572 = EDGE_LOOP ( 'NONE', ( #196, #755, #21064, #15582 ) ) ; +#26573 = EDGE_LOOP ( 'NONE', ( #2051, #16467, #17556, #22173 ) ) ; +#26574 = ORIENTED_EDGE ( 'NONE', *, *, #33397, .F. ) ; +#26575 = PLANE ( 'NONE', #31708 ) ; +#26576 = STYLED_ITEM ( 'NONE', ( #1973 ), #14592 ) ; +#26577 = SURFACE_SIDE_STYLE ('',( #25385 ) ) ; +#26578 = VECTOR ( 'NONE', #10350, 1000.000000000000000 ) ; +#26579 = VECTOR ( 'NONE', #25412, 1000.000000000000000 ) ; +#26580 = FILL_AREA_STYLE ('',( #13576 ) ) ; +#26581 = CARTESIAN_POINT ( 'NONE', ( 3.273571428571024500, -0.07499999999999999700, -0.08583148475007257300 ) ) ; +#26582 = ORIENTED_EDGE ( 'NONE', *, *, #38874, .F. ) ; +#26583 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26584 = AXIS2_PLACEMENT_3D ( 'NONE', #23962, #36535, #30597 ) ; +#26585 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.139998254717352600, -5.049996877890552400 ) ) ; +#26586 = FACE_OUTER_BOUND ( 'NONE', #4199, .T. ) ; +#26587 = EDGE_LOOP ( 'NONE', ( #21213, #16570, #22573, #36843 ) ) ; +#26588 = DIRECTION ( 'NONE', ( 7.744301232039317900E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#26589 = FACE_OUTER_BOUND ( 'NONE', #34769, .T. ) ; +#26590 = FACE_OUTER_BOUND ( 'NONE', #12998, .T. ) ; +#26593 = STYLED_ITEM ( 'NONE', ( #21884 ), #5212 ) ; +#26592 = FILL_AREA_STYLE_COLOUR ( '', #8053 ) ; +#26591 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15747 ) ) ; +#26594 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#26595 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#26596 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#26597 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26599 = EDGE_CURVE ( 'NONE', #11960, #12842, #9197, .T. ) ; +#26598 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31718 ), #13322 ) ; +#26600 = SURFACE_STYLE_FILL_AREA ( #10517 ) ; +#26601 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.837630800822890800E-016, -1.000000000000000000 ) ) ; +#26602 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26603 = CONICAL_SURFACE ( 'NONE', #37150, 1.493004880385253400, 0.9597148367210005500 ) ; +#26604 = FILL_AREA_STYLE_COLOUR ( '', #23652 ) ; +#26606 = AXIS2_PLACEMENT_3D ( 'NONE', #39719, #7515, #7361 ) ; +#26605 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37415 ), #22038 ) ; +#26607 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.879999999999742500, -0.2339555568811695900 ) ) ; +#26608 = CARTESIAN_POINT ( 'NONE', ( -4.450000000000001100, -0.01886685437028733100, -7.500000000000000900 ) ) ; +#26609 = FACE_OUTER_BOUND ( 'NONE', #27258, .T. ) ; +#26610 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745278514100, -3.204459358809380800 ) ) ; +#26611 = PRESENTATION_STYLE_ASSIGNMENT (( #39990 ) ) ; +#26612 = SURFACE_STYLE_FILL_AREA ( #14178 ) ; +#26613 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.4300017452961689100, -5.250000000000000000 ) ) ; +#26614 = CARTESIAN_POINT ( 'NONE', ( -4.450000000000001100, -0.01886685437028733100, -7.350000000000000500 ) ) ; +#26615 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.548860246407863600E-016 ) ) ; +#26616 = ORIENTED_EDGE ( 'NONE', *, *, #18234, .F. ) ; +#26617 = VERTEX_POINT ( 'NONE', #14128 ) ; +#26618 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26619 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.4300017452961691400, -6.899999999999998600 ) ) ; +#26620 = ORIENTED_EDGE ( 'NONE', *, *, #12308, .T. ) ; +#26621 = FILL_AREA_STYLE ('',( #17297 ) ) ; +#26622 = VECTOR ( 'NONE', #18884, 1000.000000000000000 ) ; +#26623 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -500000.0000000000600, -2.294459358691023800 ) ) ; +#26624 = PRESENTATION_STYLE_ASSIGNMENT (( #22298 ) ) ; +#26625 = ORIENTED_EDGE ( 'NONE', *, *, #18591, .T. ) ; +#26626 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745278514100, -2.904459358809384600 ) ) ; +#26627 = PLANE ( 'NONE', #31071 ) ; +#26628 = CLOSED_SHELL ( 'NONE', ( #18407, #29459, #16727, #36119, #9338, #7585 ) ) ; +#26629 = EDGE_CURVE ( 'NONE', #35330, #29067, #35510, .T. ) ; +#26630 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13918, 'distance_accuracy_value', 'NONE'); +#26631 = SURFACE_SIDE_STYLE ('',( #2288 ) ) ; +#26632 = VECTOR ( 'NONE', #33039, 1000.000000000000000 ) ; +#26633 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26634 = EDGE_CURVE ( 'NONE', #25867, #14093, #13311, .T. ) ; +#26635 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32248 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14043, #20709, #1760 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26636 = PRESENTATION_STYLE_ASSIGNMENT (( #17176 ) ) ; +#26637 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.499998254703820600, -5.049999999999993600 ) ) ; +#26638 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#26639 = VECTOR ( 'NONE', #294, 1000.000000000000000 ) ; +#26640 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.3699999999999855600, -4.500000000000000000 ) ) ; +#26641 = ADVANCED_FACE ( 'NONE', ( #1694 ), #24290, .F. ) ; +#26642 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26072 ), #33933 ) ; +#26643 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#26644 = CARTESIAN_POINT ( 'NONE', ( 4.721498212947777200, -1.009999999999998700, -6.861124800398366500 ) ) ; +#26645 = SURFACE_STYLE_FILL_AREA ( #14764 ) ; +#26646 = PLANE ( 'NONE', #30857 ) ; +#26647 = SURFACE_SIDE_STYLE ('',( #6564 ) ) ; +#26648 = ORIENTED_EDGE ( 'NONE', *, *, #20353, .F. ) ; +#26649 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32571 ), #17188 ) ; +#26650 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26651 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26652 = SURFACE_SIDE_STYLE ('',( #28273 ) ) ; +#26654 = STYLED_ITEM ( 'NONE', ( #3079 ), #6140 ) ; +#26653 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24496 ) ) ; +#26655 = EDGE_LOOP ( 'NONE', ( #788, #430, #5135, #39203 ) ) ; +#26656 = VECTOR ( 'NONE', #16287, 1000.000000000000000 ) ; +#26658 = EDGE_CURVE ( 'NONE', #352, #29274, #16773, .T. ) ; +#26657 = STYLED_ITEM ( 'NONE', ( #23655 ), #36057 ) ; +#26659 = LINE ( 'NONE', #26406, #5894 ) ; +#26660 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26661 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14149, 'distance_accuracy_value', 'NONE'); +#26662 = EDGE_LOOP ( 'NONE', ( #11197, #239, #23814, #18026, #39557, #40460, #40615, #31586 ) ) ; +#26663 = FILL_AREA_STYLE_COLOUR ( '', #41832 ) ; +#26664 = ORIENTED_EDGE ( 'NONE', *, *, #19289, .T. ) ; +#26665 = SURFACE_STYLE_FILL_AREA ( #25852 ) ; +#26666 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#26667 = VERTEX_POINT ( 'NONE', #8020 ) ; +#26668 = FILL_AREA_STYLE ('',( #39069 ) ) ; +#26670 = AXIS2_PLACEMENT_3D ( 'NONE', #6215, #18950, #15671 ) ; +#26669 = AXIS2_PLACEMENT_3D ( 'NONE', #10847, #37273, #37132 ) ; +#26671 = CIRCLE ( 'NONE', #11660, 0.2999999999999999300 ) ; +#26672 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26674 = FACE_OUTER_BOUND ( 'NONE', #36768, .T. ) ; +#26673 = AXIS2_PLACEMENT_3D ( 'NONE', #15424, #35904, #6779 ) ; +#26675 = FACE_OUTER_BOUND ( 'NONE', #15576, .T. ) ; +#26676 = SURFACE_STYLE_FILL_AREA ( #27382 ) ; +#26677 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26678 = SURFACE_STYLE_FILL_AREA ( #37640 ) ; +#26679 = ORIENTED_EDGE ( 'NONE', *, *, #35720, .F. ) ; +#26680 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#26681 = PLANE ( 'NONE', #33574 ) ; +#26682 = ORIENTED_EDGE ( 'NONE', *, *, #13815, .F. ) ; +#26683 = SURFACE_STYLE_FILL_AREA ( #21324 ) ; +#26684 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#26685 = CARTESIAN_POINT ( 'NONE', ( 2.400000000000000400, -1.380001745296128200, -5.449999999999994000 ) ) ; +#26686 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27350, 'distance_accuracy_value', 'NONE'); +#26687 = SURFACE_SIDE_STYLE ('',( #1459 ) ) ; +#26688 = ORIENTED_EDGE ( 'NONE', *, *, #28902, .T. ) ; +#26689 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#26690 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#26691 = SURFACE_SIDE_STYLE ('',( #5070 ) ) ; +#26692 = ADVANCED_FACE ( 'NONE', ( #8157 ), #33752, .T. ) ; +#26693 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#26694 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26695 = FACE_OUTER_BOUND ( 'NONE', #7758, .T. ) ; +#26696 = EDGE_CURVE ( 'NONE', #6503, #4141, #41050, .T. ) ; +#26697 = ORIENTED_EDGE ( 'NONE', *, *, #24889, .F. ) ; +#26698 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#26699 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26701 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26700 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 1.630001745296169700, -1.650000000000000400 ) ) ; +#26702 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26703 = ADVANCED_FACE ( 'NONE', ( #657 ), #4789, .T. ) ; +#26704 = FILL_AREA_STYLE ('',( #16942 ) ) ; +#26705 = CARTESIAN_POINT ( 'NONE', ( -3.105390508846411100, -0.07499999999999998300, -0.1008701867861799300 ) ) ; +#26706 = EDGE_CURVE ( 'NONE', #18568, #25729, #40505, .T. ) ; +#26707 = ORIENTED_EDGE ( 'NONE', *, *, #28535, .F. ) ; +#26708 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664848500, 0.2800017452961318700, -5.650000000000000400 ) ) ; +#26709 = EDGE_CURVE ( 'NONE', #26425, #41292, #31919, .T. ) ; +#26710 = ORIENTED_EDGE ( 'NONE', *, *, #22120, .T. ) ; +#26711 = ORIENTED_EDGE ( 'NONE', *, *, #38454, .T. ) ; +#26712 = ORIENTED_EDGE ( 'NONE', *, *, #32325, .T. ) ; +#26713 = AXIS2_PLACEMENT_3D ( 'NONE', #5492, #24880, #37827 ) ; +#26714 = FACE_OUTER_BOUND ( 'NONE', #24702, .T. ) ; +#26715 = LINE ( 'NONE', #37533, #34278 ) ; +#26716 = VECTOR ( 'NONE', #7381, 1000.000000000000000 ) ; +#26717 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875040400E-015, -6.056601140521968800E-031 ) ) ; +#26718 = EDGE_LOOP ( 'NONE', ( #22730, #31239, #25278, #39977 ) ) ; +#26719 = ORIENTED_EDGE ( 'NONE', *, *, #11695, .T. ) ; +#26720 = ORIENTED_EDGE ( 'NONE', *, *, #16808, .T. ) ; +#26721 = VECTOR ( 'NONE', #20783, 1000.000000000000000 ) ; +#26722 = STYLED_ITEM ( 'NONE', ( #2301 ), #20785 ) ; +#26723 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36331, 'distance_accuracy_value', 'NONE'); +#26724 = CARTESIAN_POINT ( 'NONE', ( -2.486602540378443700, 1.480001745296169600, -1.700000000000002000 ) ) ; +#26725 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19422 ) ) ; +#26727 = EDGE_CURVE ( 'NONE', #38639, #20399, #22347, .T. ) ; +#26726 = AXIS2_PLACEMENT_3D ( 'NONE', #39393, #6639, #32770 ) ; +#26728 = DIRECTION ( 'NONE', ( -0.08715574274766037200, 0.0000000000000000000, -0.9961946980917453200 ) ) ; +#26729 = ORIENTED_EDGE ( 'NONE', *, *, #13622, .F. ) ; +#26730 = SURFACE_SIDE_STYLE ('',( #21332 ) ) ; +#26731 = SURFACE_STYLE_USAGE ( .BOTH. , #20096 ) ; +#26732 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26733 = FACE_OUTER_BOUND ( 'NONE', #13797, .T. ) ; +#26734 = SURFACE_SIDE_STYLE ('',( #23824 ) ) ; +#26736 = STYLED_ITEM ( 'NONE', ( #25513 ), #2650 ) ; +#26735 = STYLED_ITEM ( 'NONE', ( #11978 ), #27392 ) ; +#26737 = STYLED_ITEM ( 'NONE', ( #3060 ), #40719 ) ; +#26738 = SURFACE_STYLE_USAGE ( .BOTH. , #39545 ) ; +#26739 = FILL_AREA_STYLE ('',( #33489 ) ) ; +#26740 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22828, 'distance_accuracy_value', 'NONE'); +#26741 = AXIS2_PLACEMENT_3D ( 'NONE', #13819, #36431, #36841 ) ; +#26742 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 0.3500000000000000300, 0.3499999999999999800 ) ) ; +#26743 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26744 = ADVANCED_FACE ( 'NONE', ( #22855 ), #25017, .T. ) ; +#26745 = EDGE_LOOP ( 'NONE', ( #33440, #30389, #35193, #16962 ) ) ; +#26746 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35393 ), #29912 ) ; +#26747 = FILL_AREA_STYLE ('',( #13729 ) ) ; +#26748 = SURFACE_SIDE_STYLE ('',( #29481 ) ) ; +#26749 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26750 = VERTEX_POINT ( 'NONE', #8290 ) ; +#26751 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#26752 = SURFACE_STYLE_USAGE ( .BOTH. , #14302 ) ; +#26753 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26754 = ORIENTED_EDGE ( 'NONE', *, *, #190, .F. ) ; +#26755 = FACE_OUTER_BOUND ( 'NONE', #34975, .T. ) ; +#26756 = EDGE_LOOP ( 'NONE', ( #13408, #16965, #41243, #21288 ) ) ; +#26757 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#26758 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#26759 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#26760 = SURFACE_SIDE_STYLE ('',( #26369 ) ) ; +#26761 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1048, 'distance_accuracy_value', 'NONE'); +#26762 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#26763 = LINE ( 'NONE', #28646, #6033 ) ; +#26764 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000012400, -1.949998254703821300, -2.467712434446768500 ) ) ; +#26765 = FILL_AREA_STYLE_COLOUR ( '', #21996 ) ; +#26766 = ORIENTED_EDGE ( 'NONE', *, *, #24988, .T. ) ; +#26767 = EDGE_LOOP ( 'NONE', ( #33784, #8197, #6464, #8561 ) ) ; +#26768 = EDGE_LOOP ( 'NONE', ( #5367, #30130, #29642, #611 ) ) ; +#26769 = EDGE_CURVE ( 'NONE', #24911, #5207, #8653, .T. ) ; +#26770 = ORIENTED_EDGE ( 'NONE', *, *, #34174, .F. ) ; +#26771 = EDGE_CURVE ( 'NONE', #16212, #22918, #30392, .T. ) ; +#26772 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26773 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26774 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000001200, 1.480001745296170000, -1.649999999999999900 ) ) ; +#26775 = STYLED_ITEM ( 'NONE', ( #32680 ), #17534 ) ; +#26776 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#26777 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#26778 = EDGE_CURVE ( 'NONE', #8117, #21185, #4124, .T. ) ; +#26779 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#26780 = PLANE ( 'NONE', #1436 ) ; +#26781 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26782 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27010 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8595, #18520, #40957 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26783 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.07499999999999998300, 0.6780706550913999700 ) ) ; +#26784 = CIRCLE ( 'NONE', #29779, 1.651303021499040300 ) ; +#26785 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26786 = ORIENTED_EDGE ( 'NONE', *, *, #29865, .F. ) ; +#26789 = EDGE_CURVE ( 'NONE', #41499, #38639, #132, .T. ) ; +#26788 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1266 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11984, #34612, #18671 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26787 = CARTESIAN_POINT ( 'NONE', ( -3.237718385397935400, -0.07499999999999998300, 0.7155313145785737700 ) ) ; +#26790 = SURFACE_SIDE_STYLE ('',( #5455 ) ) ; +#26791 = SURFACE_SIDE_STYLE ('',( #40321 ) ) ; +#26792 = PRESENTATION_STYLE_ASSIGNMENT (( #20313 ) ) ; +#26793 = ORIENTED_EDGE ( 'NONE', *, *, #16404, .F. ) ; +#26794 = ORIENTED_EDGE ( 'NONE', *, *, #41561, .T. ) ; +#26795 = CIRCLE ( 'NONE', #23630, 0.2999999999999999300 ) ; +#26796 = LINE ( 'NONE', #7859, #1044 ) ; +#26797 = AXIS2_PLACEMENT_3D ( 'NONE', #3362, #12680, #9707 ) ; +#26798 = FILL_AREA_STYLE ('',( #39334 ) ) ; +#26799 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875040400E-015, -6.056601140521968800E-031 ) ) ; +#26800 = AXIS2_PLACEMENT_3D ( 'NONE', #34443, #12506, #3341 ) ; +#26801 = SURFACE_STYLE_FILL_AREA ( #2581 ) ; +#26802 = FILL_AREA_STYLE_COLOUR ( '', #49 ) ; +#26803 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#26804 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1639 ), #8872 ) ; +#26805 = ORIENTED_EDGE ( 'NONE', *, *, #8407, .F. ) ; +#26806 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26807 = VERTEX_POINT ( 'NONE', #34306 ) ; +#26808 = ORIENTED_EDGE ( 'NONE', *, *, #6745, .T. ) ; +#26809 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000100, -1.499998254703838600, -5.449999999999994000 ) ) ; +#26810 = AXIS2_PLACEMENT_3D ( 'NONE', #19546, #29248, #20247 ) ; +#26811 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.2300017452961680700, -5.175000000000000700 ) ) ; +#26812 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#26813 = VERTEX_POINT ( 'NONE', #2009 ) ; +#26814 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26815 = LINE ( 'NONE', #33587, #16172 ) ; +#26816 = SURFACE_SIDE_STYLE ('',( #35836 ) ) ; +#26817 = FACE_OUTER_BOUND ( 'NONE', #17222, .T. ) ; +#26818 = DIRECTION ( 'NONE', ( -0.08715574274765916500, 0.0000000000000000000, -0.9961946980917455500 ) ) ; +#26819 = FILL_AREA_STYLE_COLOUR ( '', #32449 ) ; +#26820 = FACE_OUTER_BOUND ( 'NONE', #34924, .T. ) ; +#26821 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#26822 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#26823 = PLANE ( 'NONE', #34503 ) ; +#26824 = VERTEX_POINT ( 'NONE', #27958 ) ; +#26825 = SURFACE_STYLE_FILL_AREA ( #41600 ) ; +#26826 = SURFACE_STYLE_USAGE ( .BOTH. , #4636 ) ; +#26827 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#26828 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.4300017452961689100, -5.200000000000001100 ) ) ; +#26829 = EDGE_CURVE ( 'NONE', #18527, #32356, #1146, .T. ) ; +#26830 = FACE_OUTER_BOUND ( 'NONE', #36228, .T. ) ; +#26831 = ORIENTED_EDGE ( 'NONE', *, *, #12142, .T. ) ; +#26832 = VECTOR ( 'NONE', #14471, 1000.000000000000000 ) ; +#26833 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18836, 'distance_accuracy_value', 'NONE'); +#26834 = FILL_AREA_STYLE ('',( #1023 ) ) ; +#26835 = FILL_AREA_STYLE_COLOUR ( '', #4662 ) ; +#26836 = FACE_OUTER_BOUND ( 'NONE', #925, .T. ) ; +#26837 = EDGE_CURVE ( 'NONE', #19894, #7549, #14243, .T. ) ; +#26838 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8707 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34664, #11901, #5151 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26839 = CIRCLE ( 'NONE', #3853, 0.1000000000000000500 ) ; +#26840 = ORIENTED_EDGE ( 'NONE', *, *, #9490, .F. ) ; +#26841 = AXIS2_PLACEMENT_3D ( 'NONE', #17573, #34057, #22344 ) ; +#26842 = ORIENTED_EDGE ( 'NONE', *, *, #36226, .T. ) ; +#26843 = ORIENTED_EDGE ( 'NONE', *, *, #16680, .F. ) ; +#26844 = PLANE ( 'NONE', #24996 ) ; +#26845 = CARTESIAN_POINT ( 'NONE', ( 3.429999999999999700, -1.499998254703818900, -6.699999999999994000 ) ) ; +#26846 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#26847 = STYLED_ITEM ( 'NONE', ( #3933 ), #13956 ) ; +#26848 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000013700, -1.949998254703823700, -3.632287565553227600 ) ) ; +#26849 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26850 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20818, 'distance_accuracy_value', 'NONE'); +#26851 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#26852 = ORIENTED_EDGE ( 'NONE', *, *, #37633, .T. ) ; +#26853 = AXIS2_PLACEMENT_3D ( 'NONE', #34284, #14928, #17788 ) ; +#26854 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5172 ), #31159 ) ; +#26855 = CARTESIAN_POINT ( 'NONE', ( 3.094999999999943400, -0.07499999999999998300, -1.532287565553075200 ) ) ; +#26857 = AXIS2_PLACEMENT_3D ( 'NONE', #12435, #6115, #31535 ) ; +#26856 = AXIS2_PLACEMENT_3D ( 'NONE', #10181, #33223, #36061 ) ; +#26860 = EDGE_CURVE ( 'NONE', #13516, #11470, #36480, .T. ) ; +#26859 = PLANE ( 'NONE', #10111 ) ; +#26858 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2979 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30423, #20585, #36924 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26861 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26862 = FILL_AREA_STYLE_COLOUR ( '', #2154 ) ; +#26863 = VECTOR ( 'NONE', #6424, 1000.000000000000000 ) ; +#26864 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#26865 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#26866 = ADVANCED_FACE ( 'NONE', ( #22818 ), #35145, .F. ) ; +#26868 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34376 ) ) ; +#26867 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18292 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31088, #37731, #38275 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26869 = VECTOR ( 'NONE', #31328, 1000.000000000000000 ) ; +#26870 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#26871 = ORIENTED_EDGE ( 'NONE', *, *, #31633, .F. ) ; +#26872 = FILL_AREA_STYLE_COLOUR ( '', #11850 ) ; +#26873 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#26874 = VECTOR ( 'NONE', #27817, 1000.000000000000000 ) ; +#26875 = EDGE_LOOP ( 'NONE', ( #12520, #22500, #14667, #38326 ) ) ; +#26876 = SURFACE_STYLE_USAGE ( .BOTH. , #24021 ) ; +#26877 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#26878 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35968, 'distance_accuracy_value', 'NONE'); +#26879 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#26880 = PRESENTATION_STYLE_ASSIGNMENT (( #14144 ) ) ; +#26882 = LINE ( 'NONE', #33360, #8148 ) ; +#26881 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26883 = FILL_AREA_STYLE_COLOUR ( '', #7734 ) ; +#26884 = ORIENTED_EDGE ( 'NONE', *, *, #21328, .F. ) ; +#26885 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#26886 = VECTOR ( 'NONE', #23810, 1000.000000000000000 ) ; +#26887 = ORIENTED_EDGE ( 'NONE', *, *, #572, .F. ) ; +#26888 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39571, 'distance_accuracy_value', 'NONE'); +#26889 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26890 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -1.180001745296164900, -7.300000000000000700 ) ) ; +#26891 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.5300017452961702800, -4.750000000000000000 ) ) ; +#26892 = PLANE ( 'NONE', #10094 ) ; +#26893 = ORIENTED_EDGE ( 'NONE', *, *, #27245, .T. ) ; +#26894 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26895 = PRESENTATION_STYLE_ASSIGNMENT (( #5890 ) ) ; +#26896 = EDGE_LOOP ( 'NONE', ( #40926, #3107, #11865, #13800 ) ) ; +#26897 = EDGE_CURVE ( 'NONE', #9508, #23846, #5637, .T. ) ; +#26898 = CIRCLE ( 'NONE', #41854, 0.2999999999999999300 ) ; +#26899 = VECTOR ( 'NONE', #27535, 1000.000000000000000 ) ; +#26900 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#26901 = CARTESIAN_POINT ( 'NONE', ( 4.669005014832221100, -1.009999999999998900, -6.261124800398365900 ) ) ; +#26902 = FILL_AREA_STYLE ('',( #25770 ) ) ; +#26903 = EDGE_CURVE ( 'NONE', #41082, #35871, #37964, .T. ) ; +#26904 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11017 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36385, #35970, #22956 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26905 = FILL_AREA_STYLE ('',( #950 ) ) ; +#26906 = FILL_AREA_STYLE ('',( #1081 ) ) ; +#26907 = ADVANCED_FACE ( 'NONE', ( #38965 ), #12384, .F. ) ; +#26908 = CARTESIAN_POINT ( 'NONE', ( -4.551493546202550500, -1.400001745296195000, -6.639019554637396700 ) ) ; +#26909 = PRESENTATION_STYLE_ASSIGNMENT (( #24106 ) ) ; +#26910 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#26911 = AXIS2_PLACEMENT_3D ( 'NONE', #25209, #40991, #12164 ) ; +#26912 = ORIENTED_EDGE ( 'NONE', *, *, #28051, .F. ) ; +#26913 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 9.035070666963931600E-017 ) ) ; +#26914 = LINE ( 'NONE', #10562, #20894 ) ; +#26915 = STYLED_ITEM ( 'NONE', ( #31870 ), #19296 ) ; +#26916 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.799998254703822000, -3.700000000000000200 ) ) ; +#26917 = ORIENTED_EDGE ( 'NONE', *, *, #26789, .T. ) ; +#26918 = ADVANCED_FACE ( 'NONE', ( #7653 ), #38095, .F. ) ; +#26920 = AXIS2_PLACEMENT_3D ( 'NONE', #3314, #29421, #35529 ) ; +#26919 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39261 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37315, #37726, #5109 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26921 = SURFACE_STYLE_FILL_AREA ( #29493 ) ; +#26923 = EDGE_CURVE ( 'NONE', #26309, #18002, #14199, .T. ) ; +#26922 = STYLED_ITEM ( 'NONE', ( #39398 ), #35585 ) ; +#26924 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244513800E-016 ) ) ; +#26925 = ORIENTED_EDGE ( 'NONE', *, *, #6475, .F. ) ; +#26926 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521965300E-031 ) ) ; +#26927 = FILL_AREA_STYLE ('',( #20294 ) ) ; +#26928 = VECTOR ( 'NONE', #22521, 1000.000000000000000 ) ; +#26929 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#26931 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16079 ), #29052 ) ; +#26930 = AXIS2_PLACEMENT_3D ( 'NONE', #8745, #18118, #21245 ) ; +#26932 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#26933 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.4300017452961693600, -4.975000000000000500 ) ) ; +#26934 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26935 = ORIENTED_EDGE ( 'NONE', *, *, #37265, .F. ) ; +#26936 = VECTOR ( 'NONE', #36719, 1000.000000000000000 ) ; +#26937 = ORIENTED_EDGE ( 'NONE', *, *, #40517, .F. ) ; +#26938 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#26939 = SURFACE_SIDE_STYLE ('',( #36249 ) ) ; +#26940 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #5936, #6492, #38532, #22331, #53, #12822 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0009324070515976324200, 0.001029169518065951600, 0.001125931984534269800 ), + .UNSPECIFIED. ) ; +#26941 = FACE_OUTER_BOUND ( 'NONE', #10626, .T. ) ; +#26943 = CYLINDRICAL_SURFACE ( 'NONE', #26857, 0.09999999999999982500 ) ; +#26942 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.139998254717350800, -6.299996877890552400 ) ) ; +#26944 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#26945 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26946 = PLANE ( 'NONE', #25779 ) ; +#26947 = SURFACE_SIDE_STYLE ('',( #19511 ) ) ; +#26948 = FACE_OUTER_BOUND ( 'NONE', #41219, .T. ) ; +#26949 = SURFACE_STYLE_FILL_AREA ( #23131 ) ; +#26950 = PLANE ( 'NONE', #3636 ) ; +#26951 = SURFACE_SIDE_STYLE ('',( #17662 ) ) ; +#26952 = ORIENTED_EDGE ( 'NONE', *, *, #10398, .T. ) ; +#26953 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -2.904459358809384600 ) ) ; +#26954 = EDGE_CURVE ( 'NONE', #28244, #11430, #16734, .T. ) ; +#26955 = ADVANCED_FACE ( 'NONE', ( #32906 ), #18641, .F. ) ; +#26956 = FILL_AREA_STYLE ('',( #7843 ) ) ; +#26957 = FILL_AREA_STYLE_COLOUR ( '', #25993 ) ; +#26958 = VERTEX_POINT ( 'NONE', #12659 ) ; +#26959 = DIRECTION ( 'NONE', ( 2.081668171172168500E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#26960 = EDGE_CURVE ( 'NONE', #40655, #21371, #11650, .T. ) ; +#26961 = VERTEX_POINT ( 'NONE', #5907 ) ; +#26962 = FACE_OUTER_BOUND ( 'NONE', #21255, .T. ) ; +#26963 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#26964 = VECTOR ( 'NONE', #13803, 1000.000000000000000 ) ; +#26965 = ORIENTED_EDGE ( 'NONE', *, *, #6326, .T. ) ; +#26966 = SURFACE_SIDE_STYLE ('',( #8712 ) ) ; +#26967 = FILL_AREA_STYLE_COLOUR ( '', #841 ) ; +#26968 = VERTEX_POINT ( 'NONE', #6857 ) ; +#26969 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 1.387778780781445700E-014, -1.250000000000000200 ) ) ; +#26970 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#26971 = SURFACE_STYLE_USAGE ( .BOTH. , #23555 ) ; +#26972 = SURFACE_STYLE_USAGE ( .BOTH. , #36421 ) ; +#26973 = LINE ( 'NONE', #27243, #8724 ) ; +#26974 = VECTOR ( 'NONE', #9861, 1000.000000000000000 ) ; +#26975 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745296168900, -2.904459358809381000 ) ) ; +#26976 = ORIENTED_EDGE ( 'NONE', *, *, #24434, .T. ) ; +#26977 = STYLED_ITEM ( 'NONE', ( #37682 ), #20670 ) ; +#26978 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#26979 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39370 ) ) ; +#26980 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#26981 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, 2.322941965694886000, -1.250000000000000000 ) ) ; +#26983 = EDGE_CURVE ( 'NONE', #19024, #6697, #3334, .T. ) ; +#26982 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19528 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15833, #38288, #3272 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#26984 = MANIFOLD_SOLID_BREP ( '1-1-solid25', #6268 ) ; +#26985 = CARTESIAN_POINT ( 'NONE', ( -3.237718385397935400, -0.07499999999999998300, 0.7155313145785737700 ) ) ; +#26986 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.830380236995680100, -0.8400000000000000800 ) ) ; +#26987 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29927 ) ) ; +#26988 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26989 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#26990 = AXIS2_PLACEMENT_3D ( 'NONE', #5658, #37716, #41249 ) ; +#26991 = EDGE_LOOP ( 'NONE', ( #36516, #6889, #396, #7088 ) ) ; +#26992 = FACE_OUTER_BOUND ( 'NONE', #28327, .T. ) ; +#26993 = SURFACE_STYLE_USAGE ( .BOTH. , #27532 ) ; +#26994 = LINE ( 'NONE', #9563, #21942 ) ; +#26995 = SURFACE_SIDE_STYLE ('',( #19822 ) ) ; +#26996 = ORIENTED_EDGE ( 'NONE', *, *, #29953, .T. ) ; +#26997 = ORIENTED_EDGE ( 'NONE', *, *, #18300, .T. ) ; +#26999 = ORIENTED_EDGE ( 'NONE', *, *, #17805, .T. ) ; +#26998 = LINE ( 'NONE', #5756, #31516 ) ; +#27000 = SURFACE_STYLE_USAGE ( .BOTH. , #16951 ) ; +#27001 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27002 = ORIENTED_EDGE ( 'NONE', *, *, #37411, .F. ) ; +#27003 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27004 = ADVANCED_FACE ( 'NONE', ( #4588 ), #29186, .F. ) ; +#27005 = PRESENTATION_STYLE_ASSIGNMENT (( #26972 ) ) ; +#27006 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#27007 = CIRCLE ( 'NONE', #7186, 1.499999999999867900 ) ; +#27008 = FILL_AREA_STYLE_COLOUR ( '', #13851 ) ; +#27009 = LINE ( 'NONE', #1454, #25980 ) ; +#27010 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8595, 'distance_accuracy_value', 'NONE'); +#27011 = SURFACE_SIDE_STYLE ('',( #16666 ) ) ; +#27012 = EDGE_CURVE ( 'NONE', #18600, #4455, #22302, .T. ) ; +#27013 = DIRECTION ( 'NONE', ( 1.133987551255204500E-030, 1.000000000000000000, -2.367138801244545900E-016 ) ) ; +#27014 = VECTOR ( 'NONE', #38854, 1000.000000000000000 ) ; +#27015 = EDGE_CURVE ( 'NONE', #13228, #32758, #12662, .T. ) ; +#27016 = FILL_AREA_STYLE_COLOUR ( '', #8820 ) ; +#27017 = CARTESIAN_POINT ( 'NONE', ( -4.551493546202550500, -0.1199982547038619400, -6.639019554637394000 ) ) ; +#27018 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.730424212713734600, -1.049979056049130000 ) ) ; +#27019 = EDGE_CURVE ( 'NONE', #17867, #12609, #38442, .T. ) ; +#27020 = FACE_OUTER_BOUND ( 'NONE', #40530, .T. ) ; +#27021 = LINE ( 'NONE', #18374, #34575 ) ; +#27022 = AXIS2_PLACEMENT_3D ( 'NONE', #261, #16451, #38180 ) ; +#27023 = CARTESIAN_POINT ( 'NONE', ( 4.520424214906981300, 0.2799999999999973100, -1.050000000000000000 ) ) ; +#27024 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -6.056601140521966100E-031 ) ) ; +#27025 = ORIENTED_EDGE ( 'NONE', *, *, #36224, .T. ) ; +#27026 = FILL_AREA_STYLE_COLOUR ( '', #33021 ) ; +#27027 = EDGE_CURVE ( 'NONE', #13228, #692, #37439, .T. ) ; +#27028 = CIRCLE ( 'NONE', #3439, 0.1000000000000004800 ) ; +#27029 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#27030 = VECTOR ( 'NONE', #30520, 1000.000000000000000 ) ; +#27031 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#27032 = ORIENTED_EDGE ( 'NONE', *, *, #38852, .F. ) ; +#27033 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38882 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4946, #11709, #31060 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27034 = FACE_OUTER_BOUND ( 'NONE', #34442, .T. ) ; +#27035 = CARTESIAN_POINT ( 'NONE', ( 4.669005014832221100, -0.4099999999999988700, -6.261124800398365900 ) ) ; +#27036 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18830, 'distance_accuracy_value', 'NONE'); +#27037 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#27038 = ORIENTED_EDGE ( 'NONE', *, *, #34209, .F. ) ; +#27041 = EDGE_CURVE ( 'NONE', #31873, #24110, #3093, .T. ) ; +#27040 = STYLED_ITEM ( 'NONE', ( #10993 ), #24126 ) ; +#27039 = SURFACE_STYLE_USAGE ( .BOTH. , #10477 ) ; +#27042 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#27043 = EDGE_LOOP ( 'NONE', ( #25073, #24819, #11916, #35292 ) ) ; +#27044 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27045 = SURFACE_STYLE_FILL_AREA ( #4419 ) ; +#27046 = VERTEX_POINT ( 'NONE', #573 ) ; +#27047 = LINE ( 'NONE', #8932, #18455 ) ; +#27049 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36257 ), #40547 ) ; +#27048 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5359 ) ) ; +#27050 = STYLED_ITEM ( 'NONE', ( #29288 ), #40833 ) ; +#27051 = PRESENTATION_STYLE_ASSIGNMENT (( #32876 ) ) ; +#27052 = AXIS2_PLACEMENT_3D ( 'NONE', #14330, #30427, #10649 ) ; +#27053 = FILL_AREA_STYLE_COLOUR ( '', #9546 ) ; +#27054 = CIRCLE ( 'NONE', #14239, 0.1000000000000001200 ) ; +#27055 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#27056 = VERTEX_POINT ( 'NONE', #10242 ) ; +#27057 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27058 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#27059 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -500000.0000000000600, -2.294459358691023800 ) ) ; +#27060 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#27061 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#27062 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27063 = ORIENTED_EDGE ( 'NONE', *, *, #23902, .T. ) ; +#27064 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#27065 = PLANE ( 'NONE', #40162 ) ; +#27066 = CARTESIAN_POINT ( 'NONE', ( -3.629999999999999900, -1.499998254703818900, -6.699999999999994000 ) ) ; +#27067 = ORIENTED_EDGE ( 'NONE', *, *, #17805, .F. ) ; +#27068 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27069 = ADVANCED_FACE ( 'NONE', ( #4085 ), #35702, .T. ) ; +#27070 = ORIENTED_EDGE ( 'NONE', *, *, #24037, .F. ) ; +#27071 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.480001745296170200, -4.099999999999999600 ) ) ; +#27072 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27073 = LINE ( 'NONE', #11872, #11866 ) ; +#27074 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36476, 'distance_accuracy_value', 'NONE'); +#27075 = TOROIDAL_SURFACE ( 'NONE', #36493, 1.599999999999742300, 0.09999999999987406500 ) ; +#27076 = PLANE ( 'NONE', #39503 ) ; +#27077 = SURFACE_SIDE_STYLE ('',( #31821 ) ) ; +#27078 = EDGE_CURVE ( 'NONE', #13682, #24787, #23102, .T. ) ; +#27079 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#27080 = VERTEX_POINT ( 'NONE', #20326 ) ; +#27081 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#27082 = FACE_OUTER_BOUND ( 'NONE', #12031, .T. ) ; +#27083 = ORIENTED_EDGE ( 'NONE', *, *, #14628, .F. ) ; +#27084 = FACE_OUTER_BOUND ( 'NONE', #30901, .T. ) ; +#27085 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27086 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#27087 = EDGE_CURVE ( 'NONE', #17225, #12599, #7060, .T. ) ; +#27088 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18171, 'distance_accuracy_value', 'NONE'); +#27089 = VECTOR ( 'NONE', #27737, 1000.000000000000000 ) ; +#27090 = CARTESIAN_POINT ( 'NONE', ( -1.649999999999999900, -1.380001745296130600, -6.031671842700004200 ) ) ; +#27091 = ORIENTED_EDGE ( 'NONE', *, *, #10785, .T. ) ; +#27092 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#27093 = SURFACE_STYLE_FILL_AREA ( #19572 ) ; +#27094 = STYLED_ITEM ( 'NONE', ( #9274 ), #22268 ) ; +#27095 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27096 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.279999999999999800, -3.299999999999999800 ) ) ; +#27097 = AXIS2_PLACEMENT_3D ( 'NONE', #1799, #2359, #40723 ) ; +#27098 = PLANE ( 'NONE', #14507 ) ; +#27099 = EDGE_LOOP ( 'NONE', ( #2946, #14543 ) ) ; +#27100 = STYLED_ITEM ( 'NONE', ( #14412 ), #346 ) ; +#27101 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760845000E-015 ) ) ; +#27102 = VECTOR ( 'NONE', #23317, 1000.000000000000000 ) ; +#27104 = STYLED_ITEM ( 'NONE', ( #9292 ), #4652 ) ; +#27103 = AXIS2_PLACEMENT_3D ( 'NONE', #24980, #5879, #28463 ) ; +#27105 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -1.380001745296130000, -5.449999999999994000 ) ) ; +#27107 = EDGE_CURVE ( 'NONE', #40400, #6731, #40432, .T. ) ; +#27106 = STYLED_ITEM ( 'NONE', ( #39320 ), #34536 ) ; +#27108 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27109 = SURFACE_STYLE_USAGE ( .BOTH. , #20481 ) ; +#27110 = PLANE ( 'NONE', #2492 ) ; +#27111 = FILL_AREA_STYLE_COLOUR ( '', #41537 ) ; +#27112 = ADVANCED_FACE ( 'NONE', ( #8573 ), #10105, .T. ) ; +#27113 = FACE_OUTER_BOUND ( 'NONE', #5141, .T. ) ; +#27114 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30051 ) ) ; +#27115 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27116 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38134 ) ) ; +#27117 = SURFACE_STYLE_USAGE ( .BOTH. , #20352 ) ; +#27118 = EDGE_LOOP ( 'NONE', ( #40693, #10458, #38386, #16771 ) ) ; +#27119 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#27120 = VERTEX_POINT ( 'NONE', #22710 ) ; +#27121 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27122 = EDGE_LOOP ( 'NONE', ( #8978, #36302, #7150, #40690, #18719, #6537 ) ) ; +#27123 = VERTEX_POINT ( 'NONE', #1263 ) ; +#27124 = ADVANCED_FACE ( 'NONE', ( #27312 ), #33145, .F. ) ; +#27125 = FILL_AREA_STYLE ('',( #20650 ) ) ; +#27126 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.07499999999999998300, -0.2498427124746000500 ) ) ; +#27127 = FACE_OUTER_BOUND ( 'NONE', #28686, .T. ) ; +#27128 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#27129 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#27130 = VERTEX_POINT ( 'NONE', #27090 ) ; +#27131 = ORIENTED_EDGE ( 'NONE', *, *, #33563, .F. ) ; +#27132 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875040000E-015, 6.056601140521967000E-031 ) ) ; +#27133 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.1000000000000133800, -4.450000000000000200 ) ) ; +#27134 = SURFACE_STYLE_USAGE ( .BOTH. , #14539 ) ; +#27135 = FILL_AREA_STYLE ('',( #15603 ) ) ; +#27136 = EDGE_CURVE ( 'NONE', #10433, #9477, #32860, .T. ) ; +#27137 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#27138 = SURFACE_SIDE_STYLE ('',( #36103 ) ) ; +#27139 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.6300017452961683700, -4.750000000000000000 ) ) ; +#27140 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#27141 = EDGE_CURVE ( 'NONE', #25992, #39526, #29823, .T. ) ; +#27142 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9775 ) ) ; +#27143 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27144 = FACE_OUTER_BOUND ( 'NONE', #25726, .T. ) ; +#27145 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, 0.2000000000000000100, -3.249999999999999600 ) ) ; +#27146 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17121 ), #25249 ) ; +#27147 = SURFACE_STYLE_USAGE ( .BOTH. , #23885 ) ; +#27148 = ORIENTED_EDGE ( 'NONE', *, *, #38135, .F. ) ; +#27149 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745296169300, -2.294459358809384700 ) ) ; +#27150 = CARTESIAN_POINT ( 'NONE', ( -1.400000000000000800, 1.630001745296169500, -1.650000000000000400 ) ) ; +#27151 = SURFACE_STYLE_FILL_AREA ( #13544 ) ; +#27152 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27153 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37160 ), #24174 ) ; +#27154 = FILL_AREA_STYLE_COLOUR ( '', #17720 ) ; +#27155 = ADVANCED_FACE ( 'NONE', ( #18226 ), #24166, .F. ) ; +#27156 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28746 ) ) ; +#27157 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#27158 = EDGE_LOOP ( 'NONE', ( #9613, #3667, #2454, #15857 ) ) ; +#27159 = ORIENTED_EDGE ( 'NONE', *, *, #9152, .F. ) ; +#27162 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36162 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13457, #20008, #673 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27161 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#27160 = STYLED_ITEM ( 'NONE', ( #33831 ), #30486 ) ; +#27163 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.4300017452961695800, -4.099999999999997900 ) ) ; +#27164 = CIRCLE ( 'NONE', #10846, 1.350424214906980100 ) ; +#27165 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23353, 'distance_accuracy_value', 'NONE'); +#27167 = EDGE_CURVE ( 'NONE', #24991, #15621, #39414, .T. ) ; +#27166 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16322 ), #11170 ) ; +#27168 = VERTEX_POINT ( 'NONE', #1961 ) ; +#27169 = ORIENTED_EDGE ( 'NONE', *, *, #17370, .F. ) ; +#27170 = SURFACE_SIDE_STYLE ('',( #13346 ) ) ; +#27172 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35011 ) ) ; +#27171 = AXIS2_PLACEMENT_3D ( 'NONE', #24379, #19008, #24964 ) ; +#27173 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#27174 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#27175 = PLANE ( 'NONE', #40436 ) ; +#27176 = FACE_OUTER_BOUND ( 'NONE', #4487, .T. ) ; +#27177 = CARTESIAN_POINT ( 'NONE', ( 1.649999999999999900, -1.499998254703824400, -6.699999999999994000 ) ) ; +#27178 = CIRCLE ( 'NONE', #1741, 0.1000000000000002600 ) ; +#27179 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.080001745296136600, -6.850000000000000500 ) ) ; +#27180 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27181 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#27182 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#27183 = ORIENTED_EDGE ( 'NONE', *, *, #36102, .T. ) ; +#27184 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#27185 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27186 = FILL_AREA_STYLE ('',( #4441 ) ) ; +#27187 = EDGE_CURVE ( 'NONE', #27299, #24367, #6082, .T. ) ; +#27188 = EDGE_LOOP ( 'NONE', ( #37839, #36447, #27740, #26794 ) ) ; +#27189 = ORIENTED_EDGE ( 'NONE', *, *, #582, .T. ) ; +#27190 = SURFACE_STYLE_FILL_AREA ( #34758 ) ; +#27191 = ORIENTED_EDGE ( 'NONE', *, *, #15498, .T. ) ; +#27192 = SURFACE_STYLE_FILL_AREA ( #7011 ) ; +#27193 = EDGE_CURVE ( 'NONE', #1535, #28950, #20987, .T. ) ; +#27194 = CIRCLE ( 'NONE', #20314, 0.2000000000000000900 ) ; +#27195 = SURFACE_SIDE_STYLE ('',( #34395 ) ) ; +#27197 = CIRCLE ( 'NONE', #4569, 0.09999999999999982500 ) ; +#27196 = DIRECTION ( 'NONE', ( 0.08715574274766037200, 0.0000000000000000000, -0.9961946980917453200 ) ) ; +#27198 = ORIENTED_EDGE ( 'NONE', *, *, #38241, .T. ) ; +#27199 = ORIENTED_EDGE ( 'NONE', *, *, #24191, .T. ) ; +#27200 = ADVANCED_FACE ( 'NONE', ( #1292 ), #8104, .F. ) ; +#27201 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27202 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16914 ) ) ; +#27203 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#27204 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, -0.6199999999999846700, -5.199999999999999300 ) ) ; +#27205 = FACE_OUTER_BOUND ( 'NONE', #14734, .T. ) ; +#27206 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16716, 'distance_accuracy_value', 'NONE'); +#27207 = ORIENTED_EDGE ( 'NONE', *, *, #5459, .T. ) ; +#27208 = DIRECTION ( 'NONE', ( 0.8190279881558656400, 0.0000000000000000000, 0.5737535661042597600 ) ) ; +#27209 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.480001745296169800, -1.149999999999999900 ) ) ; +#27210 = AXIS2_PLACEMENT_3D ( 'NONE', #35358, #22913, #16001 ) ; +#27213 = EDGE_CURVE ( 'NONE', #9026, #6706, #13036, .T. ) ; +#27212 = DIRECTION ( 'NONE', ( 7.744301232039317900E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27211 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35060 ), #38014 ) ; +#27214 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#27215 = ORIENTED_EDGE ( 'NONE', *, *, #39222, .T. ) ; +#27216 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 0.2999999999999999900, 0.6999999999999999600 ) ) ; +#27217 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#27219 = AXIS2_PLACEMENT_3D ( 'NONE', #35026, #20026, #26366 ) ; +#27218 = AXIS2_PLACEMENT_3D ( 'NONE', #41748, #19202, #22430 ) ; +#27220 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.499998254703825300, -5.049999999999993600 ) ) ; +#27221 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27491, 'distance_accuracy_value', 'NONE'); +#27222 = ORIENTED_EDGE ( 'NONE', *, *, #34784, .F. ) ; +#27223 = CARTESIAN_POINT ( 'NONE', ( -4.663004880385256200, 0.2800000000000027500, -0.7580972011844128200 ) ) ; +#27224 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, -0.07499999999999999700, 0.4305619708689000200 ) ) ; +#27225 = ORIENTED_EDGE ( 'NONE', *, *, #28657, .F. ) ; +#27226 = ORIENTED_EDGE ( 'NONE', *, *, #823, .F. ) ; +#27227 = ORIENTED_EDGE ( 'NONE', *, *, #34104, .F. ) ; +#27228 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#27229 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#27230 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#27231 = ORIENTED_EDGE ( 'NONE', *, *, #18914, .F. ) ; +#27232 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27233 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27234 = FILL_AREA_STYLE_COLOUR ( '', #11620 ) ; +#27235 = VERTEX_POINT ( 'NONE', #37221 ) ; +#27236 = ORIENTED_EDGE ( 'NONE', *, *, #13116, .T. ) ; +#27237 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41758, 'distance_accuracy_value', 'NONE'); +#27238 = FILL_AREA_STYLE ('',( #17791 ) ) ; +#27239 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.180001745296169700, -4.400000000000000400 ) ) ; +#27240 = ORIENTED_EDGE ( 'NONE', *, *, #7492, .T. ) ; +#27241 = EDGE_CURVE ( 'NONE', #14806, #13231, #32254, .T. ) ; +#27242 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#27243 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, -0.5199999999999841400, -4.500000000000000000 ) ) ; +#27244 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27245 = EDGE_CURVE ( 'NONE', #29067, #1867, #36816, .T. ) ; +#27246 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#27247 = EDGE_CURVE ( 'NONE', #41040, #6299, #4470, .T. ) ; +#27248 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9829 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25950, #38641, #41750 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27249 = ORIENTED_EDGE ( 'NONE', *, *, #28907, .T. ) ; +#27250 = VECTOR ( 'NONE', #33834, 1000.000000000000000 ) ; +#27251 = CARTESIAN_POINT ( 'NONE', ( -2.949999999999999700, -1.139998254717350800, -6.299996877890552400 ) ) ; +#27252 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13695 ), #17241 ) ; +#27253 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.4300017452961674100, -7.150000000000001200 ) ) ; +#27254 = EDGE_LOOP ( 'NONE', ( #21249, #18535, #4818, #23255 ) ) ; +#27255 = VECTOR ( 'NONE', #39429, 1000.000000000000000 ) ; +#27256 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#27257 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#27258 = EDGE_LOOP ( 'NONE', ( #6776, #1094, #11364, #15229, #33843, #19791 ) ) ; +#27259 = ADVANCED_FACE ( 'NONE', ( #31742 ), #37366, .F. ) ; +#27260 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1873 ) ) ; +#27261 = CARTESIAN_POINT ( 'NONE', ( -4.700922750916313400, -1.300001745296164500, -6.625946193225248100 ) ) ; +#27263 = EDGE_CURVE ( 'NONE', #5494, #13040, #7487, .T. ) ; +#27262 = STYLED_ITEM ( 'NONE', ( #18404 ), #37452 ) ; +#27264 = SURFACE_STYLE_USAGE ( .BOTH. , #34036 ) ; +#27265 = SURFACE_STYLE_FILL_AREA ( #10949 ) ; +#27266 = SURFACE_SIDE_STYLE ('',( #28828 ) ) ; +#27267 = EDGE_LOOP ( 'NONE', ( #3501, #319, #11607, #2622 ) ) ; +#27268 = ORIENTED_EDGE ( 'NONE', *, *, #32178, .T. ) ; +#27269 = SURFACE_SIDE_STYLE ('',( #13233 ) ) ; +#27270 = STYLED_ITEM ( 'NONE', ( #15464 ), #27891 ) ; +#27271 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22394 ), #24577 ) ; +#27272 = PLANE ( 'NONE', #22697 ) ; +#27273 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27274 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15091 ) ) ; +#27275 = DIRECTION ( 'NONE', ( -6.056601140521967900E-031, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#27276 = ORIENTED_EDGE ( 'NONE', *, *, #881, .F. ) ; +#27277 = PRESENTATION_STYLE_ASSIGNMENT (( #10099 ) ) ; +#27278 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.3300017452961689900, -6.325000000000000200 ) ) ; +#27279 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.2999999999999850000, -4.249999999999998200 ) ) ; +#27280 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3239 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7162, #13818, #36430 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27281 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#27282 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27283 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.949998254703820400, -2.467712434446768000 ) ) ; +#27284 = FILL_AREA_STYLE ('',( #30809 ) ) ; +#27285 = SURFACE_STYLE_FILL_AREA ( #1458 ) ; +#27286 = CARTESIAN_POINT ( 'NONE', ( -4.599429204713762200, -1.400001745296195300, -7.186926638587852500 ) ) ; +#27287 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, -0.5999999999999999800, -1.930000000000000200 ) ) ; +#27288 = VERTEX_POINT ( 'NONE', #30446 ) ; +#27289 = DIRECTION ( 'NONE', ( 0.8190279881558656400, 0.0000000000000000000, 0.5737535661042597600 ) ) ; +#27290 = ADVANCED_FACE ( 'NONE', ( #15095 ), #40591, .F. ) ; +#27291 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#27292 = ORIENTED_EDGE ( 'NONE', *, *, #34009, .T. ) ; +#27293 = LINE ( 'NONE', #35508, #29801 ) ; +#27294 = VERTEX_POINT ( 'NONE', #31143 ) ; +#27295 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000100, -1.139998254717369000, -5.049996877890552400 ) ) ; +#27296 = VERTEX_POINT ( 'NONE', #5292 ) ; +#27297 = PRESENTATION_STYLE_ASSIGNMENT (( #5640 ) ) ; +#27298 = ORIENTED_EDGE ( 'NONE', *, *, #22984, .T. ) ; +#27299 = VERTEX_POINT ( 'NONE', #21576 ) ; +#27300 = EDGE_CURVE ( 'NONE', #40741, #16876, #33773, .T. ) ; +#27301 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27302 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#27303 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27304 = STYLED_ITEM ( 'NONE', ( #21988 ), #17993 ) ; +#27305 = ADVANCED_FACE ( 'NONE', ( #12020 ), #28312, .F. ) ; +#27306 = FILL_AREA_STYLE ('',( #27589 ) ) ; +#27307 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#27308 = EDGE_CURVE ( 'NONE', #15733, #37485, #14561, .T. ) ; +#27309 = EDGE_LOOP ( 'NONE', ( #35134, #19946, #41255, #17879 ) ) ; +#27310 = DIRECTION ( 'NONE', ( 1.926865043770299800E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#27311 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 0.2999999999999999900, 0.3499999999999999800 ) ) ; +#27312 = FACE_OUTER_BOUND ( 'NONE', #38758, .T. ) ; +#27313 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, -0.09999999999998358800, -4.450000000000000200 ) ) ; +#27314 = ORIENTED_EDGE ( 'NONE', *, *, #33585, .F. ) ; +#27315 = STYLED_ITEM ( 'NONE', ( #1809 ), #22042 ) ; +#27316 = VECTOR ( 'NONE', #7291, 1000.000000000000000 ) ; +#27317 = CYLINDRICAL_SURFACE ( 'NONE', #32761, 0.1000000000000000100 ) ; +#27318 = STYLED_ITEM ( 'NONE', ( #39997 ), #13108 ) ; +#27319 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.139998254717356800, -6.299996877890552400 ) ) ; +#27320 = CIRCLE ( 'NONE', #10285, 0.3600000000000078700 ) ; +#27321 = EDGE_CURVE ( 'NONE', #26807, #25574, #29180, .T. ) ; +#27322 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#27323 = FILL_AREA_STYLE ('',( #40016 ) ) ; +#27324 = FACE_OUTER_BOUND ( 'NONE', #5000, .T. ) ; +#27325 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.730424212713734800, -1.049979056049130000 ) ) ; +#27327 = AXIS2_PLACEMENT_3D ( 'NONE', #9144, #28526, #15403 ) ; +#27326 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25200 ) ) ; +#27328 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.499998254703826200, -6.699999999999994000 ) ) ; +#27329 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27330 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33282 ), #36006 ) ; +#27331 = EDGE_LOOP ( 'NONE', ( #29824, #41162, #17099, #2966 ) ) ; +#27332 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27333 = STYLED_ITEM ( 'NONE', ( #12566 ), #9572 ) ; +#27334 = FILL_AREA_STYLE_COLOUR ( '', #15439 ) ; +#27335 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9172 ), #33290 ) ; +#27336 = CLOSED_SHELL ( 'NONE', ( #27259, #31615, #18205, #21861, #10858, #14756 ) ) ; +#27337 = ORIENTED_EDGE ( 'NONE', *, *, #23521, .F. ) ; +#27338 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#27339 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #594, 'distance_accuracy_value', 'NONE'); +#27340 = LINE ( 'NONE', #29666, #14225 ) ; +#27341 = PRESENTATION_STYLE_ASSIGNMENT (( #15432 ) ) ; +#27342 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#27343 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#27344 = VERTEX_POINT ( 'NONE', #28451 ) ; +#27345 = ORIENTED_EDGE ( 'NONE', *, *, #24807, .T. ) ; +#27347 = ADVANCED_FACE ( 'NONE', ( #411 ), #34748, .T. ) ; +#27346 = EDGE_LOOP ( 'NONE', ( #40784, #21053, #34802, #37108 ) ) ; +#27348 = SURFACE_SIDE_STYLE ('',( #32251 ) ) ; +#27349 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27350 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27351 = FILL_AREA_STYLE_COLOUR ( '', #27403 ) ; +#27352 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27353 = VERTEX_POINT ( 'NONE', #40882 ) ; +#27354 = PRESENTATION_STYLE_ASSIGNMENT (( #31614 ) ) ; +#27355 = ORIENTED_EDGE ( 'NONE', *, *, #36714, .T. ) ; +#27356 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#27357 = VECTOR ( 'NONE', #8854, 1000.000000000000000 ) ; +#27358 = FILL_AREA_STYLE_COLOUR ( '', #4924 ) ; +#27359 = FILL_AREA_STYLE_COLOUR ( '', #33529 ) ; +#27360 = SURFACE_SIDE_STYLE ('',( #32723 ) ) ; +#27361 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#27362 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#27363 = DIRECTION ( 'NONE', ( 6.056601140521968800E-031, 1.931342135474151600E-045, 1.000000000000000000 ) ) ; +#27364 = EDGE_CURVE ( 'NONE', #4444, #1102, #26156, .T. ) ; +#27365 = LINE ( 'NONE', #20012, #37976 ) ; +#27366 = VECTOR ( 'NONE', #35096, 1000.000000000000000 ) ; +#27367 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27368 = EDGE_CURVE ( 'NONE', #5838, #6923, #17087, .T. ) ; +#27369 = STYLED_ITEM ( 'NONE', ( #2464 ), #9918 ) ; +#27370 = VERTEX_POINT ( 'NONE', #18457 ) ; +#27371 = LINE ( 'NONE', #14800, #18801 ) ; +#27372 = STYLED_ITEM ( 'NONE', ( #4644 ), #22876 ) ; +#27373 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.499998254703840000, -5.049999999999993600 ) ) ; +#27374 = VERTEX_POINT ( 'NONE', #24829 ) ; +#27375 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17927 ), #3306 ) ; +#27376 = SURFACE_SIDE_STYLE ('',( #29980 ) ) ; +#27377 = SURFACE_SIDE_STYLE ('',( #5121 ) ) ; +#27378 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27379 = ORIENTED_EDGE ( 'NONE', *, *, #31067, .T. ) ; +#27380 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#27381 = STYLED_ITEM ( 'NONE', ( #9730 ), #18625 ) ; +#27382 = FILL_AREA_STYLE ('',( #1577 ) ) ; +#27383 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31271, 'distance_accuracy_value', 'NONE'); +#27384 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27385 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35254 ), #14164 ) ; +#27386 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, 0.0000000000000000000 ) ) ; +#27388 = EDGE_CURVE ( 'NONE', #32097, #5846, #22623, .T. ) ; +#27387 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18750 ), #29549 ) ; +#27389 = VERTEX_POINT ( 'NONE', #25242 ) ; +#27390 = FILL_AREA_STYLE ('',( #10713 ) ) ; +#27391 = ORIENTED_EDGE ( 'NONE', *, *, #15119, .F. ) ; +#27392 = ADVANCED_FACE ( 'NONE', ( #18593 ), #25097, .F. ) ; +#27393 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.5737535661042597600, 0.8190279881558657500 ) ) ; +#27394 = LINE ( 'NONE', #17493, #28406 ) ; +#27395 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#27396 = CARTESIAN_POINT ( 'NONE', ( 3.273571428571024500, -0.07499999999999999700, -0.08583148475007257300 ) ) ; +#27397 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.380001745296134000, -6.031671842700004200 ) ) ; +#27399 = STYLED_ITEM ( 'NONE', ( #16757 ), #897 ) ; +#27398 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4376 ) ) ; +#27400 = CARTESIAN_POINT ( 'NONE', ( 3.315809924354953700, 0.3499999999999811000, -1.649999999994999700 ) ) ; +#27401 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244514300E-016 ) ) ; +#27402 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27403 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#27404 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27405 = DIRECTION ( 'NONE', ( -0.9271838539784911200, 0.0000000000000000000, 0.3746065948719964300 ) ) ; +#27406 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165600, -3.700000000000000200 ) ) ; +#27407 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865475700, 0.7071067811865475700 ) ) ; +#27408 = EDGE_LOOP ( 'NONE', ( #34512, #22053, #2180, #19233 ) ) ; +#27409 = CARTESIAN_POINT ( 'NONE', ( 3.119636707815099300, -0.2999999999999999300, 1.000000000000057500 ) ) ; +#27410 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#27411 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#27412 = ORIENTED_EDGE ( 'NONE', *, *, #12190, .F. ) ; +#27413 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.499998254703820600, -5.049999999999993600 ) ) ; +#27414 = FILL_AREA_STYLE ('',( #40112 ) ) ; +#27415 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#27416 = VECTOR ( 'NONE', #36159, 1000.000000000000000 ) ; +#27417 = SURFACE_STYLE_USAGE ( .BOTH. , #17972 ) ; +#27418 = EDGE_CURVE ( 'NONE', #2353, #1280, #28182, .T. ) ; +#27419 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, 0.2000000000000000100, -1.600000000000000300 ) ) ; +#27420 = PRESENTATION_STYLE_ASSIGNMENT (( #41305 ) ) ; +#27421 = FILL_AREA_STYLE ('',( #21108 ) ) ; +#27422 = EDGE_CURVE ( 'NONE', #31243, #34092, #27696, .T. ) ; +#27423 = STYLED_ITEM ( 'NONE', ( #7776 ), #11075 ) ; +#27424 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.7099999999999995200, -6.861124800398366500 ) ) ; +#27425 = ORIENTED_EDGE ( 'NONE', *, *, #14875, .T. ) ; +#27426 = ORIENTED_EDGE ( 'NONE', *, *, #25829, .F. ) ; +#27427 = DIRECTION ( 'NONE', ( 3.855870243489082900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#27428 = PRESENTATION_STYLE_ASSIGNMENT (( #3904 ) ) ; +#27429 = AXIS2_PLACEMENT_3D ( 'NONE', #17680, #4939, #20952 ) ; +#27430 = VECTOR ( 'NONE', #10273, 1000.000000000000000 ) ; +#27432 = PRESENTATION_STYLE_ASSIGNMENT (( #7988 ) ) ; +#27431 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35070 ) ) ; +#27433 = CARTESIAN_POINT ( 'NONE', ( 4.700922750916311600, -0.01999825470383158700, -6.625946193225244600 ) ) ; +#27434 = CIRCLE ( 'NONE', #20739, 0.1499999999998701800 ) ; +#27435 = PLANE ( 'NONE', #5854 ) ; +#27437 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36918 ), #26089 ) ; +#27436 = STYLED_ITEM ( 'NONE', ( #3941 ), #30780 ) ; +#27438 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27439 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 2.282530889443167500E-016 ) ) ; +#27440 = VERTEX_POINT ( 'NONE', #19428 ) ; +#27442 = EDGE_CURVE ( 'NONE', #15613, #6479, #19129, .T. ) ; +#27441 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31778 ), #23676 ) ; +#27443 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27444 = EDGE_LOOP ( 'NONE', ( #37218, #6321, #6365, #4886 ) ) ; +#27445 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.180001745296166000, -4.775000000000000400 ) ) ; +#27447 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19075 ) ) ; +#27446 = AXIS2_PLACEMENT_3D ( 'NONE', #3670, #13555, #26282 ) ; +#27448 = STYLED_ITEM ( 'NONE', ( #31069 ), #39378 ) ; +#27449 = SURFACE_STYLE_FILL_AREA ( #2853 ) ; +#27450 = EDGE_LOOP ( 'NONE', ( #25062, #29130, #10103, #38346, #10791, #15357 ) ) ; +#27451 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#27452 = FILL_AREA_STYLE_COLOUR ( '', #35738 ) ; +#27453 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27454 = ORIENTED_EDGE ( 'NONE', *, *, #33501, .F. ) ; +#27455 = ORIENTED_EDGE ( 'NONE', *, *, #6679, .F. ) ; +#27456 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27457 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #16541, #41395, #2604, #22065 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#27458 = VERTEX_POINT ( 'NONE', #25776 ) ; +#27459 = ORIENTED_EDGE ( 'NONE', *, *, #35377, .F. ) ; +#27460 = ADVANCED_FACE ( 'NONE', ( #35287 ), #19014, .F. ) ; +#27461 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998386600, -1.749999999999999800 ) ) ; +#27462 = PLANE ( 'NONE', #32190 ) ; +#27463 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#27464 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27465 = LINE ( 'NONE', #37725, #19919 ) ; +#27466 = ORIENTED_EDGE ( 'NONE', *, *, #27388, .T. ) ; +#27467 = FACE_OUTER_BOUND ( 'NONE', #38421, .T. ) ; +#27468 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27469 = PRESENTATION_STYLE_ASSIGNMENT (( #8862 ) ) ; +#27470 = VECTOR ( 'NONE', #8082, 1000.000000000000000 ) ; +#27471 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 2.367138801244516800E-016, 1.000000000000000000 ) ) ; +#27472 = VECTOR ( 'NONE', #9310, 1000.000000000000000 ) ; +#27473 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41575, 'distance_accuracy_value', 'NONE'); +#27474 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.6199999999999849000, -5.199999999999999300 ) ) ; +#27475 = EDGE_CURVE ( 'NONE', #33470, #19662, #6458, .T. ) ; +#27476 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#27477 = CYLINDRICAL_SURFACE ( 'NONE', #36797, 0.09999999999987406500 ) ; +#27478 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -1.049979056049130000 ) ) ; +#27479 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#27480 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27481 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.380001745296165000, -4.400000000000000400 ) ) ; +#27482 = EDGE_CURVE ( 'NONE', #34928, #28728, #31211, .T. ) ; +#27483 = LINE ( 'NONE', #17124, #750 ) ; +#27484 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#27485 = FILL_AREA_STYLE ('',( #27358 ) ) ; +#27486 = STYLED_ITEM ( 'NONE', ( #26318 ), #16144 ) ; +#27487 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#27488 = EDGE_LOOP ( 'NONE', ( #11471, #9512 ) ) ; +#27489 = SURFACE_STYLE_FILL_AREA ( #33818 ) ; +#27490 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.949998254703821000, -5.767712434446769600 ) ) ; +#27491 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27492 = ORIENTED_EDGE ( 'NONE', *, *, #716, .F. ) ; +#27493 = SURFACE_STYLE_USAGE ( .BOTH. , #14789 ) ; +#27494 = PLANE ( 'NONE', #26853 ) ; +#27495 = ADVANCED_FACE ( 'NONE', ( #32214 ), #12606, .T. ) ; +#27496 = STYLED_ITEM ( 'NONE', ( #18537 ), #20511 ) ; +#27497 = EDGE_LOOP ( 'NONE', ( #38835, #20144, #19644, #35103 ) ) ; +#27498 = ORIENTED_EDGE ( 'NONE', *, *, #11381, .T. ) ; +#27499 = ORIENTED_EDGE ( 'NONE', *, *, #33493, .F. ) ; +#27500 = AXIS2_PLACEMENT_3D ( 'NONE', #34857, #5197, #28493 ) ; +#27501 = SURFACE_STYLE_USAGE ( .BOTH. , #11249 ) ; +#27502 = CARTESIAN_POINT ( 'NONE', ( 3.500000000000004000, 0.2800017452961686100, -6.750000000000000000 ) ) ; +#27503 = SURFACE_STYLE_USAGE ( .BOTH. , #8409 ) ; +#27504 = LINE ( 'NONE', #26540, #21987 ) ; +#27505 = VECTOR ( 'NONE', #16134, 1000.000000000000000 ) ; +#27507 = EDGE_CURVE ( 'NONE', #33974, #33261, #21608, .T. ) ; +#27506 = AXIS2_PLACEMENT_3D ( 'NONE', #41406, #3135, #31925 ) ; +#27508 = LINE ( 'NONE', #16109, #18947 ) ; +#27509 = SURFACE_STYLE_USAGE ( .BOTH. , #27938 ) ; +#27510 = DIRECTION ( 'NONE', ( 2.224004456380521900E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27511 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#27512 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #19750, #30013, #7125, #26644 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 1.570796326794937600, 4.712388980384730500 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.3333333333333333700, 0.3333333333333333700, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#27513 = ADVANCED_FACE ( 'NONE', ( #8417 ), #12756, .F. ) ; +#27515 = AXIS2_PLACEMENT_3D ( 'NONE', #930, #33073, #7633 ) ; +#27514 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #221 ) ) ; +#27517 = FACE_OUTER_BOUND ( 'NONE', #34127, .T. ) ; +#27516 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27519 = FACE_OUTER_BOUND ( 'NONE', #23381, .T. ) ; +#27518 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.2800017452961672300, -6.850000000000000500 ) ) ; +#27520 = VECTOR ( 'NONE', #11426, 1000.000000000000000 ) ; +#27521 = ORIENTED_EDGE ( 'NONE', *, *, #2660, .T. ) ; +#27522 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20500 ), #33465 ) ; +#27523 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#27524 = AXIS2_PLACEMENT_3D ( 'NONE', #23561, #17369, #884 ) ; +#27525 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#27526 = SURFACE_STYLE_USAGE ( .BOTH. , #8016 ) ; +#27528 = AXIS2_PLACEMENT_3D ( 'NONE', #36750, #1342, #11167 ) ; +#27527 = SURFACE_STYLE_FILL_AREA ( #26252 ) ; +#27529 = FACE_OUTER_BOUND ( 'NONE', #36858, .T. ) ; +#27530 = SURFACE_STYLE_USAGE ( .BOTH. , #18085 ) ; +#27531 = VERTEX_POINT ( 'NONE', #25509 ) ; +#27532 = SURFACE_SIDE_STYLE ('',( #28919 ) ) ; +#27533 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#27534 = LINE ( 'NONE', #7482, #2815 ) ; +#27535 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27536 = DIRECTION ( 'NONE', ( 0.7071067811865490200, 0.7071067811865460200, -4.282663737405283500E-031 ) ) ; +#27537 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#27538 = ORIENTED_EDGE ( 'NONE', *, *, #11590, .T. ) ; +#27539 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#27540 = LINE ( 'NONE', #28551, #3265 ) ; +#27541 = LINE ( 'NONE', #28211, #37667 ) ; +#27542 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27543 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27544 = ORIENTED_EDGE ( 'NONE', *, *, #32736, .T. ) ; +#27545 = LINE ( 'NONE', #7235, #29023 ) ; +#27546 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.279999999999999800, -0.2000017452961698200 ) ) ; +#27547 = SURFACE_STYLE_FILL_AREA ( #16939 ) ; +#27548 = EDGE_CURVE ( 'NONE', #7802, #27370, #30160, .T. ) ; +#27549 = SURFACE_SIDE_STYLE ('',( #20927 ) ) ; +#27550 = ORIENTED_EDGE ( 'NONE', *, *, #27682, .T. ) ; +#27551 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 6.982962677686265900E-015, -1.000000000000000000 ) ) ; +#27552 = ADVANCED_FACE ( 'NONE', ( #11936 ), #6946, .T. ) ; +#27553 = EDGE_CURVE ( 'NONE', #28990, #15829, #14003, .T. ) ; +#27554 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32427 ) ) ; +#27555 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27556 = FILL_AREA_STYLE_COLOUR ( '', #24268 ) ; +#27557 = TOROIDAL_SURFACE ( 'NONE', #36197, 1.600000000000129100, 0.1499999999998701300 ) ; +#27558 = SURFACE_SIDE_STYLE ('',( #41327 ) ) ; +#27559 = VERTEX_POINT ( 'NONE', #32528 ) ; +#27560 = EDGE_CURVE ( 'NONE', #8471, #31372, #40766, .T. ) ; +#27561 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#27562 = AXIS2_PLACEMENT_3D ( 'NONE', #24082, #33833, #27203 ) ; +#27563 = FILL_AREA_STYLE_COLOUR ( '', #12296 ) ; +#27564 = LINE ( 'NONE', #13705, #36640 ) ; +#27565 = FILL_AREA_STYLE_COLOUR ( '', #6434 ) ; +#27566 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22437 ) ) ; +#27567 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#27570 = EDGE_CURVE ( 'NONE', #39127, #23482, #13487, .T. ) ; +#27569 = STYLED_ITEM ( 'NONE', ( #20618 ), #24298 ) ; +#27568 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, -0.7071067811865483500 ) ) ; +#27571 = VERTEX_POINT ( 'NONE', #26610 ) ; +#27572 = CARTESIAN_POINT ( 'NONE', ( 3.094999999999943400, 0.07499999999999998300, -1.532287565553050300 ) ) ; +#27574 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3998 ) ) ; +#27573 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32288 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7727, #29908, #39501 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27575 = SURFACE_STYLE_USAGE ( .BOTH. , #1915 ) ; +#27576 = AXIS2_PLACEMENT_3D ( 'NONE', #18228, #1430, #8427 ) ; +#27577 = CYLINDRICAL_SURFACE ( 'NONE', #22618, 0.1000000000000002600 ) ; +#27578 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30975, 'distance_accuracy_value', 'NONE'); +#27579 = SURFACE_STYLE_FILL_AREA ( #22557 ) ; +#27580 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27581 = STYLED_ITEM ( 'NONE', ( #15790 ), #33756 ) ; +#27582 = CLOSED_SHELL ( 'NONE', ( #10596, #17162, #38290, #20826, #35108, #13916 ) ) ; +#27583 = ORIENTED_EDGE ( 'NONE', *, *, #31453, .T. ) ; +#27584 = CYLINDRICAL_SURFACE ( 'NONE', #3803, 0.1000000000000000500 ) ; +#27585 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.139998254717355100, -6.299996877890552400 ) ) ; +#27586 = ORIENTED_EDGE ( 'NONE', *, *, #24283, .F. ) ; +#27587 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#27588 = PRESENTATION_STYLE_ASSIGNMENT (( #2122 ) ) ; +#27589 = FILL_AREA_STYLE_COLOUR ( '', #20087 ) ; +#27590 = SURFACE_STYLE_USAGE ( .BOTH. , #37331 ) ; +#27591 = TOROIDAL_SURFACE ( 'NONE', #33832, 1.550380236995680100, 0.1000000000000008500 ) ; +#27592 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11906, 'distance_accuracy_value', 'NONE'); +#27593 = LINE ( 'NONE', #14327, #38195 ) ; +#27594 = ORIENTED_EDGE ( 'NONE', *, *, #21516, .F. ) ; +#27595 = FILL_AREA_STYLE_COLOUR ( '', #30179 ) ; +#27596 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27597 = LINE ( 'NONE', #6805, #40216 ) ; +#27598 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.499998254703836900, -5.049999999999993600 ) ) ; +#27599 = ORIENTED_EDGE ( 'NONE', *, *, #19845, .F. ) ; +#27600 = LINE ( 'NONE', #37733, #29081 ) ; +#27601 = LINE ( 'NONE', #32688, #19028 ) ; +#27602 = FILL_AREA_STYLE ('',( #11753 ) ) ; +#27603 = VECTOR ( 'NONE', #15033, 1000.000000000000000 ) ; +#27604 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#27605 = CARTESIAN_POINT ( 'NONE', ( 3.001425458565978800, 0.3499999999999999800, -1.300000000000000700 ) ) ; +#27606 = ADVANCED_FACE ( 'NONE', ( #21125 ), #3579, .F. ) ; +#27607 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#27608 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#27609 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27610 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#27611 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745278514100, -1.994459358809380600 ) ) ; +#27612 = SURFACE_STYLE_FILL_AREA ( #4833 ) ; +#27613 = FILL_AREA_STYLE_COLOUR ( '', #3074 ) ; +#27614 = EDGE_CURVE ( 'NONE', #20205, #2958, #35717, .T. ) ; +#27615 = CIRCLE ( 'NONE', #35126, 1.200001745296169300 ) ; +#27616 = FILL_AREA_STYLE_COLOUR ( '', #3358 ) ; +#27617 = EDGE_CURVE ( 'NONE', #5409, #8952, #35194, .T. ) ; +#27618 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3545 ), #17372 ) ; +#27619 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -6.800000000000000700 ) ) ; +#27620 = SURFACE_STYLE_FILL_AREA ( #14117 ) ; +#27621 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#27622 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36301 ) ) ; +#27623 = EDGE_LOOP ( 'NONE', ( #29546, #8523, #36779, #21689 ) ) ; +#27624 = DIRECTION ( 'NONE', ( -3.097720492815727200E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#27625 = ORIENTED_EDGE ( 'NONE', *, *, #39150, .F. ) ; +#27626 = VERTEX_POINT ( 'NONE', #6810 ) ; +#27627 = SURFACE_SIDE_STYLE ('',( #1800 ) ) ; +#27628 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27629 = VECTOR ( 'NONE', #40895, 1000.000000000000000 ) ; +#27630 = LINE ( 'NONE', #38778, #19064 ) ; +#27631 = EDGE_LOOP ( 'NONE', ( #12518, #27466, #22890, #6429 ) ) ; +#27632 = STYLED_ITEM ( 'NONE', ( #4143 ), #37659 ) ; +#27633 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026400, -0.2339555568811695900 ) ) ; +#27634 = ORIENTED_EDGE ( 'NONE', *, *, #13815, .T. ) ; +#27635 = FILL_AREA_STYLE ('',( #8400 ) ) ; +#27636 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 2.341948692522932000E-016 ) ) ; +#27637 = AXIS2_PLACEMENT_3D ( 'NONE', #8354, #11617, #34088 ) ; +#27638 = PLANE ( 'NONE', #11598 ) ; +#27639 = VECTOR ( 'NONE', #21280, 1000.000000000000000 ) ; +#27641 = EDGE_CURVE ( 'NONE', #39704, #38908, #34711, .T. ) ; +#27640 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27221 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27491, #11663, #5035 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27642 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 0.3000000000000145900, -1.950000000000001300 ) ) ; +#27643 = SURFACE_STYLE_FILL_AREA ( #25190 ) ; +#27644 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -0.2999999999999999900, 0.3499999999999999800 ) ) ; +#27645 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#27646 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, 0.07499999999999999700, 0.009999999999999995000 ) ) ; +#27647 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17210 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26076, #16469, #35974 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27648 = DIRECTION ( 'NONE', ( 0.08715574274766037200, 3.292971519115804500E-015, -0.9961946980917454300 ) ) ; +#27649 = AXIS2_PLACEMENT_3D ( 'NONE', #6460, #3488, #29042 ) ; +#27650 = LINE ( 'NONE', #7700, #10441 ) ; +#27651 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.9500017452961654300, -5.700000000000000200 ) ) ; +#27652 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27653 = ORIENTED_EDGE ( 'NONE', *, *, #37655, .T. ) ; +#27654 = SURFACE_SIDE_STYLE ('',( #38762 ) ) ; +#27655 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27656 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.4300017452961686900, -6.199999999999999300 ) ) ; +#27657 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#27658 = EDGE_LOOP ( 'NONE', ( #9582, #29282, #11517, #35173 ) ) ; +#27659 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27660 = FACE_OUTER_BOUND ( 'NONE', #11943, .T. ) ; +#27661 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27662 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#27663 = ORIENTED_EDGE ( 'NONE', *, *, #31574, .F. ) ; +#27664 = EDGE_LOOP ( 'NONE', ( #38141, #37741, #6206, #29358 ) ) ; +#27665 = VERTEX_POINT ( 'NONE', #4131 ) ; +#27666 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#27667 = PRESENTATION_STYLE_ASSIGNMENT (( #1622 ) ) ; +#27668 = CARTESIAN_POINT ( 'NONE', ( 3.342385881558931300, 0.07499999999999999700, 0.4559712123764168000 ) ) ; +#27669 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32838, 'distance_accuracy_value', 'NONE'); +#27670 = ORIENTED_EDGE ( 'NONE', *, *, #30481, .T. ) ; +#27671 = FILL_AREA_STYLE_COLOUR ( '', #4102 ) ; +#27672 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#27673 = ORIENTED_EDGE ( 'NONE', *, *, #32763, .T. ) ; +#27674 = EDGE_CURVE ( 'NONE', #41581, #20205, #1880, .T. ) ; +#27675 = LINE ( 'NONE', #40624, #9926 ) ; +#27676 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27677 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.2999999999999999900, 0.3499999999999999800 ) ) ; +#27678 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#27679 = ADVANCED_FACE ( 'NONE', ( #15966 ), #7360, .F. ) ; +#27680 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -3.700000000000000200 ) ) ; +#27681 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998358800, -4.450000000000000200 ) ) ; +#27682 = EDGE_CURVE ( 'NONE', #17719, #3291, #15505, .T. ) ; +#27683 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21635 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8778, #21418, #2083 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27684 = CYLINDRICAL_SURFACE ( 'NONE', #22010, 0.2000000000000000700 ) ; +#27685 = VERTEX_POINT ( 'NONE', #26764 ) ; +#27686 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#27687 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, 0.03000174529616683700, -7.300000000000000700 ) ) ; +#27688 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#27689 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17692 ) ) ; +#27690 = SURFACE_STYLE_USAGE ( .BOTH. , #1738 ) ; +#27691 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27692 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16453 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36222, #16580, #10625 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27693 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -1.180001745296165500, -4.675000000000000700 ) ) ; +#27694 = ORIENTED_EDGE ( 'NONE', *, *, #17765, .F. ) ; +#27695 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1744 ) ) ; +#27696 = LINE ( 'NONE', #41844, #1965 ) ; +#27697 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -2.299999999999999400 ) ) ; +#27698 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20426 ) ) ; +#27701 = AXIS2_PLACEMENT_3D ( 'NONE', #27924, #8539, #31160 ) ; +#27700 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, 2.322941965694886000, -1.250000000000000000 ) ) ; +#27699 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34897 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15029, #24811, #24944 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27702 = FILL_AREA_STYLE ('',( #27556 ) ) ; +#27703 = SURFACE_STYLE_USAGE ( .BOTH. , #27985 ) ; +#27704 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27705 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#27706 = VERTEX_POINT ( 'NONE', #39573 ) ; +#27707 = EDGE_CURVE ( 'NONE', #33959, #13046, #27615, .T. ) ; +#27708 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27709 = ORIENTED_EDGE ( 'NONE', *, *, #28559, .F. ) ; +#27710 = EDGE_LOOP ( 'NONE', ( #37645, #22679, #31158 ) ) ; +#27711 = VECTOR ( 'NONE', #4699, 1000.000000000000000 ) ; +#27712 = ORIENTED_EDGE ( 'NONE', *, *, #7248, .F. ) ; +#27714 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8750 ) ) ; +#27713 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22149 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19705, #16154, #3293 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27715 = SURFACE_STYLE_FILL_AREA ( #19319 ) ; +#27716 = FACE_OUTER_BOUND ( 'NONE', #32252, .T. ) ; +#27717 = FACE_OUTER_BOUND ( 'NONE', #20106, .T. ) ; +#27718 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, 0.7071067811865483500 ) ) ; +#27719 = FILL_AREA_STYLE_COLOUR ( '', #32538 ) ; +#27720 = ORIENTED_EDGE ( 'NONE', *, *, #36576, .T. ) ; +#27721 = ORIENTED_EDGE ( 'NONE', *, *, #22388, .T. ) ; +#27723 = ORIENTED_EDGE ( 'NONE', *, *, #35415, .F. ) ; +#27722 = ADVANCED_FACE ( 'NONE', ( #32134 ), #19580, .F. ) ; +#27724 = LINE ( 'NONE', #1161, #26721 ) ; +#27725 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745278514100, -3.814459358809377100 ) ) ; +#27726 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -0.2999999999999999900, 0.3499999999999999800 ) ) ; +#27727 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid10', #19630 ) ; +#27728 = VERTEX_POINT ( 'NONE', #7789 ) ; +#27729 = ORIENTED_EDGE ( 'NONE', *, *, #254, .T. ) ; +#27730 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#27731 = ADVANCED_FACE ( 'NONE', ( #24603 ), #37698, .T. ) ; +#27732 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#27733 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#27734 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#27735 = SURFACE_STYLE_USAGE ( .BOTH. , #24804 ) ; +#27736 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#27737 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#27738 = EDGE_CURVE ( 'NONE', #22593, #3435, #26069, .T. ) ; +#27739 = EDGE_CURVE ( 'NONE', #32927, #14941, #3332, .T. ) ; +#27740 = ORIENTED_EDGE ( 'NONE', *, *, #40212, .F. ) ; +#27741 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#27742 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, -2.031000000000001500, -6.849999999999999600 ) ) ; +#27743 = FACE_OUTER_BOUND ( 'NONE', #21695, .T. ) ; +#27744 = PLANE ( 'NONE', #32803 ) ; +#27745 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #11809, #2682, #5754, #8824, #5887 ), + .UNSPECIFIED., .F., .F., + ( 4, 1, 4 ), + ( 0.0000000000000000000, 7.412350550084680400E-006, 1.482470110016936100E-005 ), + .UNSPECIFIED. ) ; +#27746 = VERTEX_POINT ( 'NONE', #20409 ) ; +#27747 = SURFACE_STYLE_FILL_AREA ( #792 ) ; +#27748 = ORIENTED_EDGE ( 'NONE', *, *, #14715, .T. ) ; +#27749 = FACE_OUTER_BOUND ( 'NONE', #37559, .T. ) ; +#27750 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21529 ) ) ; +#27751 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#27752 = PRESENTATION_STYLE_ASSIGNMENT (( #34699 ) ) ; +#27753 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27754 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#27755 = CARTESIAN_POINT ( 'NONE', ( -2.149999999999999900, -1.499998254703822900, -6.299999999999993600 ) ) ; +#27756 = ORIENTED_EDGE ( 'NONE', *, *, #30361, .T. ) ; +#27757 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27758 = FACE_OUTER_BOUND ( 'NONE', #25464, .T. ) ; +#27759 = ORIENTED_EDGE ( 'NONE', *, *, #4698, .F. ) ; +#27760 = ORIENTED_EDGE ( 'NONE', *, *, #14130, .F. ) ; +#27761 = CIRCLE ( 'NONE', #591, 1.200001745296169300 ) ; +#27762 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23427 ) ) ; +#27763 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000800, -4.099999999999999600 ) ) ; +#27764 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31702, 'distance_accuracy_value', 'NONE'); +#27765 = SURFACE_STYLE_USAGE ( .BOTH. , #5154 ) ; +#27766 = STYLED_ITEM ( 'NONE', ( #10234 ), #11343 ) ; +#27767 = SURFACE_STYLE_USAGE ( .BOTH. , #37217 ) ; +#27770 = EDGE_CURVE ( 'NONE', #16436, #36622, #8865, .T. ) ; +#27769 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27768 = AXIS2_PLACEMENT_3D ( 'NONE', #20719, #27730, #4983 ) ; +#27771 = VERTEX_POINT ( 'NONE', #30403 ) ; +#27772 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#27773 = ADVANCED_FACE ( 'NONE', ( #27113 ), #22552, .F. ) ; +#27774 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27775 = DIRECTION ( 'NONE', ( -0.0002094395087002862500, 0.0000000000000000000, 0.9999999780675458100 ) ) ; +#27776 = CARTESIAN_POINT ( 'NONE', ( 3.212822421599470500, 0.3500000000000000300, -1.649999999984633500 ) ) ; +#27777 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#27779 = AXIS2_PLACEMENT_3D ( 'NONE', #20360, #17376, #39932 ) ; +#27778 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24813 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16211, #32432, #16483 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27780 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#27781 = DIRECTION ( 'NONE', ( 6.056601140521966100E-031, 1.987721548152419000E-045, -1.000000000000000000 ) ) ; +#27782 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16383 ) ) ; +#27783 = FILL_AREA_STYLE ('',( #1832 ) ) ; +#27784 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22632 ), #39131 ) ; +#27785 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27786 = DIRECTION ( 'NONE', ( -6.056601140521967000E-031, -1.987721548152419000E-045, -1.000000000000000000 ) ) ; +#27787 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27788 = ORIENTED_EDGE ( 'NONE', *, *, #34043, .T. ) ; +#27789 = SURFACE_STYLE_FILL_AREA ( #35841 ) ; +#27790 = FILL_AREA_STYLE_COLOUR ( '', #33751 ) ; +#27791 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#27792 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27793 = ORIENTED_EDGE ( 'NONE', *, *, #17765, .T. ) ; +#27794 = PRESENTATION_STYLE_ASSIGNMENT (( #28301 ) ) ; +#27795 = ORIENTED_EDGE ( 'NONE', *, *, #7736, .F. ) ; +#27796 = TOROIDAL_SURFACE ( 'NONE', #18499, 0.9000017452961695000, 0.3000000000000004900 ) ; +#27797 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27798 = LINE ( 'NONE', #40610, #30822 ) ; +#27799 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27800 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.499998254703838600, -5.449999999999994000 ) ) ; +#27801 = CIRCLE ( 'NONE', #18808, 0.1999999999999998700 ) ; +#27802 = FILL_AREA_STYLE ('',( #11934 ) ) ; +#27803 = ORIENTED_EDGE ( 'NONE', *, *, #15369, .T. ) ; +#27804 = ORIENTED_EDGE ( 'NONE', *, *, #34757, .F. ) ; +#27805 = ORIENTED_EDGE ( 'NONE', *, *, #9825, .F. ) ; +#27806 = CARTESIAN_POINT ( 'NONE', ( -2.486602540378443700, 1.630001745296169500, -1.700000000000002000 ) ) ; +#27807 = DIRECTION ( 'NONE', ( 5.916456789157588500E-031, 1.000000000000000000, -2.367138801244518800E-016 ) ) ; +#27808 = EDGE_CURVE ( 'NONE', #33220, #21687, #4832, .T. ) ; +#27809 = SURFACE_STYLE_USAGE ( .BOTH. , #27942 ) ; +#27810 = EDGE_CURVE ( 'NONE', #21607, #20775, #34666, .T. ) ; +#27811 = ORIENTED_EDGE ( 'NONE', *, *, #1928, .F. ) ; +#27812 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#27813 = EDGE_CURVE ( 'NONE', #39102, #31594, #6574, .T. ) ; +#27814 = PRESENTATION_STYLE_ASSIGNMENT (( #37247 ) ) ; +#27815 = AXIS2_PLACEMENT_3D ( 'NONE', #4465, #36813, #30595 ) ; +#27816 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.5737535661042597600, 0.8190279881558656400 ) ) ; +#27817 = DIRECTION ( 'NONE', ( 5.782411586589410900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#27818 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2419 ), #10216 ) ; +#27819 = ADVANCED_FACE ( 'NONE', ( #38170 ), #23043, .T. ) ; +#27820 = LINE ( 'NONE', #5826, #33372 ) ; +#27821 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, 0.7071067811865483500 ) ) ; +#27822 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#27823 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -1.149999999999999900 ) ) ; +#27824 = AXIS2_PLACEMENT_3D ( 'NONE', #27017, #10872, #16972 ) ; +#27825 = PRESENTATION_STYLE_ASSIGNMENT (( #6717 ) ) ; +#27826 = CARTESIAN_POINT ( 'NONE', ( -4.750000000000003600, -0.7099999999999991900, -6.861124800398366500 ) ) ; +#27827 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19148, 'distance_accuracy_value', 'NONE'); +#27828 = ORIENTED_EDGE ( 'NONE', *, *, #19107, .T. ) ; +#27830 = EDGE_CURVE ( 'NONE', #21067, #7896, #20559, .T. ) ; +#27829 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14824 ) ) ; +#27831 = FILL_AREA_STYLE_COLOUR ( '', #7234 ) ; +#27832 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.279999999999999800, -0.2000017452961698200 ) ) ; +#27833 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27834 = LINE ( 'NONE', #41356, #31861 ) ; +#27835 = ORIENTED_EDGE ( 'NONE', *, *, #24830, .F. ) ; +#27836 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.380001745296143100, -4.781671842700004200 ) ) ; +#27837 = FACE_OUTER_BOUND ( 'NONE', #15988, .T. ) ; +#27839 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37294 ), #35127 ) ; +#27838 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11055 ), #33524 ) ; +#27840 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21363 ) ) ; +#27841 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, 2.322941965694886000, -1.250000000000000000 ) ) ; +#27843 = SURFACE_STYLE_FILL_AREA ( #5686 ) ; +#27842 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.4300017452961674100, -7.150000000000001200 ) ) ; +#27844 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5390 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33247, #29856, #958 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27845 = VERTEX_POINT ( 'NONE', #6396 ) ; +#27846 = PRESENTATION_STYLE_ASSIGNMENT (( #2086 ) ) ; +#27847 = CLOSED_SHELL ( 'NONE', ( #21234, #2389, #39947, #13971, #29365, #18675 ) ) ; +#27848 = ORIENTED_EDGE ( 'NONE', *, *, #31166, .F. ) ; +#27849 = CARTESIAN_POINT ( 'NONE', ( 0.6500000000000000200, -1.380001745296134000, -6.699999999999994000 ) ) ; +#27850 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29629 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14661, #20916, #36978 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27851 = FILL_AREA_STYLE ('',( #1895 ) ) ; +#27852 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#27853 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27854 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27855 = VERTEX_POINT ( 'NONE', #32645 ) ; +#27856 = FILL_AREA_STYLE_COLOUR ( '', #9479 ) ; +#27857 = VERTEX_POINT ( 'NONE', #6522 ) ; +#27858 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000005300, -1.400001745296163700, -7.350000000000005900 ) ) ; +#27859 = SURFACE_STYLE_FILL_AREA ( #6873 ) ; +#27860 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#27861 = VECTOR ( 'NONE', #33355, 1000.000000000000000 ) ; +#27862 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27863 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#27864 = CARTESIAN_POINT ( 'NONE', ( 4.449999999999999300, -0.01886685437025778900, -7.350000000000001400 ) ) ; +#27865 = LINE ( 'NONE', #20435, #3605 ) ; +#27866 = LINE ( 'NONE', #28632, #15226 ) ; +#27867 = VERTEX_POINT ( 'NONE', #16550 ) ; +#27868 = PLANE ( 'NONE', #3215 ) ; +#27869 = EDGE_CURVE ( 'NONE', #24564, #29940, #5357, .T. ) ; +#27870 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27871 = CARTESIAN_POINT ( 'NONE', ( 3.500000000000003600, -2.031000000000001500, -6.549999999999999800 ) ) ; +#27872 = ORIENTED_EDGE ( 'NONE', *, *, #41105, .F. ) ; +#27873 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9108, 'distance_accuracy_value', 'NONE'); +#27874 = SURFACE_STYLE_USAGE ( .BOTH. , #41276 ) ; +#27875 = EDGE_CURVE ( 'NONE', #34577, #8821, #40198, .T. ) ; +#27876 = CARTESIAN_POINT ( 'NONE', ( -4.856063034915695900, -0.2799999999999974200, -0.6228541982233617400 ) ) ; +#27877 = ORIENTED_EDGE ( 'NONE', *, *, #15670, .F. ) ; +#27878 = SURFACE_STYLE_USAGE ( .BOTH. , #5262 ) ; +#27879 = SURFACE_SIDE_STYLE ('',( #7339 ) ) ; +#27880 = CYLINDRICAL_SURFACE ( 'NONE', #27562, 1.200001745296169300 ) ; +#27881 = STYLED_ITEM ( 'NONE', ( #10287 ), #22253 ) ; +#27882 = ORIENTED_EDGE ( 'NONE', *, *, #10672, .T. ) ; +#27883 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998392100, -1.749999999999999800 ) ) ; +#27884 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27100 ) ) ; +#27885 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#27886 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#27887 = ORIENTED_EDGE ( 'NONE', *, *, #37135, .F. ) ; +#27888 = VECTOR ( 'NONE', #6191, 1000.000000000000000 ) ; +#27889 = EDGE_LOOP ( 'NONE', ( #1986, #17015 ) ) ; +#27890 = CARTESIAN_POINT ( 'NONE', ( 4.449999999999999300, -0.01886685437025778900, -7.500000000000000900 ) ) ; +#27891 = ADVANCED_FACE ( 'NONE', ( #11902 ), #5314, .T. ) ; +#27893 = AXIS2_PLACEMENT_3D ( 'NONE', #19320, #6965, #19868 ) ; +#27892 = AXIS2_PLACEMENT_3D ( 'NONE', #28016, #34085, #14874 ) ; +#27895 = PRESENTATION_STYLE_ASSIGNMENT (( #485 ) ) ; +#27894 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27896 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -9.293161478447189900E-016, -1.000000000000000000 ) ) ; +#27897 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4868 ), #33024 ) ; +#27898 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244514300E-016 ) ) ; +#27899 = PRESENTATION_STYLE_ASSIGNMENT (( #5806 ) ) ; +#27900 = SURFACE_STYLE_USAGE ( .BOTH. , #11211 ) ; +#27902 = STYLED_ITEM ( 'NONE', ( #41877 ), #9709 ) ; +#27901 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32901 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18890, #18474, #21740 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27903 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664848500, 0.2800017452961319800, -4.400000000000000400 ) ) ; +#27906 = AXIS2_PLACEMENT_3D ( 'NONE', #35725, #26267, #32329 ) ; +#27905 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#27904 = VECTOR ( 'NONE', #12912, 1000.000000000000000 ) ; +#27907 = CARTESIAN_POINT ( 'NONE', ( -4.692207176641545600, 0.08000174529616560500, -6.526326723416069300 ) ) ; +#27908 = FACE_OUTER_BOUND ( 'NONE', #4300, .T. ) ; +#27909 = FILL_AREA_STYLE_COLOUR ( '', #18146 ) ; +#27910 = ORIENTED_EDGE ( 'NONE', *, *, #21709, .F. ) ; +#27911 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27912 = VECTOR ( 'NONE', #33042, 1000.000000000000000 ) ; +#27913 = SURFACE_STYLE_USAGE ( .BOTH. , #34258 ) ; +#27914 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, 0.03299999999999998800 ) ) ; +#27915 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.2800017452961687200, -6.199999999999999300 ) ) ; +#27916 = DIRECTION ( 'NONE', ( 1.548860246407863600E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#27917 = ORIENTED_EDGE ( 'NONE', *, *, #10767, .T. ) ; +#27918 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22862, 'distance_accuracy_value', 'NONE'); +#27919 = SURFACE_STYLE_USAGE ( .BOTH. , #30874 ) ; +#27920 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#27921 = VECTOR ( 'NONE', #7849, 1000.000000000000000 ) ; +#27922 = ORIENTED_EDGE ( 'NONE', *, *, #29796, .T. ) ; +#27923 = PRESENTATION_STYLE_ASSIGNMENT (( #13600 ) ) ; +#27924 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, 2.322941965694886000, -1.250000000000000000 ) ) ; +#27925 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.2800017452961687200, -6.150000000000000400 ) ) ; +#27926 = DIRECTION ( 'NONE', ( 6.056601140521965300E-031, -1.987721548152418300E-045, -1.000000000000000000 ) ) ; +#27927 = ORIENTED_EDGE ( 'NONE', *, *, #28051, .T. ) ; +#27928 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -3.799999999999999800 ) ) ; +#27929 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.4300017452961689100, -6.424999999999999800 ) ) ; +#27930 = ORIENTED_EDGE ( 'NONE', *, *, #20349, .F. ) ; +#27931 = ADVANCED_FACE ( 'NONE', ( #1842 ), #36334, .F. ) ; +#27932 = EDGE_CURVE ( 'NONE', #24747, #39218, #17980, .T. ) ; +#27933 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000012100, -1.999998254703821500, -5.899999999999999500 ) ) ; +#27934 = EDGE_CURVE ( 'NONE', #27296, #16084, #41196, .T. ) ; +#27935 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21464 ), #40911 ) ; +#27936 = PLANE ( 'NONE', #15446 ) ; +#27937 = STYLED_ITEM ( 'NONE', ( #22236 ), #23299 ) ; +#27938 = SURFACE_SIDE_STYLE ('',( #26683 ) ) ; +#27939 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, 2.322941965694886000, -1.250000000000000000 ) ) ; +#27940 = ADVANCED_FACE ( 'NONE', ( #21526 ), #30075, .T. ) ; +#27941 = AXIS2_PLACEMENT_3D ( 'NONE', #18111, #11577, #8738 ) ; +#27942 = SURFACE_SIDE_STYLE ('',( #17319 ) ) ; +#27943 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#27944 = ORIENTED_EDGE ( 'NONE', *, *, #4409, .T. ) ; +#27945 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#27947 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27774, 'distance_accuracy_value', 'NONE'); +#27946 = AXIS2_PLACEMENT_3D ( 'NONE', #8945, #9210, #25510 ) ; +#27948 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30911 ) ) ; +#27949 = FILL_AREA_STYLE ('',( #5764 ) ) ; +#27950 = ORIENTED_EDGE ( 'NONE', *, *, #4534, .T. ) ; +#27952 = AXIS2_PLACEMENT_3D ( 'NONE', #7198, #29948, #1051 ) ; +#27951 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19893 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34375, #34654, #18301 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#27953 = FILL_AREA_STYLE_COLOUR ( '', #12887 ) ; +#27954 = SURFACE_STYLE_FILL_AREA ( #38809 ) ; +#27955 = ORIENTED_EDGE ( 'NONE', *, *, #41118, .T. ) ; +#27956 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#27959 = EDGE_CURVE ( 'NONE', #14569, #38547, #38651, .T. ) ; +#27958 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#27957 = AXIS2_PLACEMENT_3D ( 'NONE', #7197, #10443, #33062 ) ; +#27960 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 0.2800017452961674500, -5.650000000000000400 ) ) ; +#27961 = ORIENTED_EDGE ( 'NONE', *, *, #31254, .F. ) ; +#27962 = FILL_AREA_STYLE ('',( #40642 ) ) ; +#27963 = ORIENTED_EDGE ( 'NONE', *, *, #29978, .F. ) ; +#27964 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27965 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27966 = ORIENTED_EDGE ( 'NONE', *, *, #23678, .F. ) ; +#27967 = PRESENTATION_STYLE_ASSIGNMENT (( #39705 ) ) ; +#27969 = AXIS2_PLACEMENT_3D ( 'NONE', #24772, #11169, #24909 ) ; +#27968 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13327 ), #31483 ) ; +#27970 = FILL_AREA_STYLE_COLOUR ( '', #29000 ) ; +#27971 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid11', #6354 ) ; +#27972 = PLANE ( 'NONE', #18574 ) ; +#27973 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27974 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27975 = ORIENTED_EDGE ( 'NONE', *, *, #16633, .T. ) ; +#27976 = CYLINDRICAL_SURFACE ( 'NONE', #39937, 0.1000000000000000500 ) ; +#27977 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#27978 = FILL_AREA_STYLE ('',( #8592 ) ) ; +#27979 = PRESENTATION_STYLE_ASSIGNMENT (( #17167 ) ) ; +#27980 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#27981 = CARTESIAN_POINT ( 'NONE', ( -4.170000000000001700, 0.2800000000000027500, -3.299999999999999800 ) ) ; +#27982 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#27983 = ADVANCED_FACE ( 'NONE', ( #40688 ), #10453, .F. ) ; +#27984 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865475700, 0.7071067811865475700 ) ) ; +#27985 = SURFACE_SIDE_STYLE ('',( #17040 ) ) ; +#27986 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27987 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#27988 = FACE_OUTER_BOUND ( 'NONE', #6875, .T. ) ; +#27989 = SURFACE_SIDE_STYLE ('',( #24145 ) ) ; +#27990 = EDGE_CURVE ( 'NONE', #24382, #4031, #13365, .T. ) ; +#27991 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#27992 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#27993 = SURFACE_STYLE_USAGE ( .BOTH. , #21663 ) ; +#27994 = EDGE_CURVE ( 'NONE', #38777, #16836, #25522, .T. ) ; +#27995 = SURFACE_STYLE_FILL_AREA ( #11699 ) ; +#27996 = ORIENTED_EDGE ( 'NONE', *, *, #34257, .T. ) ; +#27997 = SURFACE_SIDE_STYLE ('',( #21116 ) ) ; +#27998 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000012100, -1.999998254703822400, -6.600000000000000500 ) ) ; +#27999 = EDGE_LOOP ( 'NONE', ( #33755, #34062, #691, #32299 ) ) ; +#28000 = VERTEX_POINT ( 'NONE', #7904 ) ; +#28001 = VERTEX_POINT ( 'NONE', #34044 ) ; +#28002 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39121, 'distance_accuracy_value', 'NONE'); +#28003 = ORIENTED_EDGE ( 'NONE', *, *, #38486, .F. ) ; +#28004 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24234 ) ) ; +#28005 = CONICAL_SURFACE ( 'NONE', #32199, 0.3000000000000001000, 0.3490658503988666700 ) ; +#28006 = SURFACE_STYLE_FILL_AREA ( #35328 ) ; +#28007 = SURFACE_STYLE_FILL_AREA ( #21655 ) ; +#28008 = STYLED_ITEM ( 'NONE', ( #22171 ), #19968 ) ; +#28009 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, 0.07499999999999999700, 0.0000000000000000000 ) ) ; +#28010 = VECTOR ( 'NONE', #20805, 1000.000000000000000 ) ; +#28011 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.730380236995679300, -0.8400000000000000800 ) ) ; +#28012 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4173 ) ) ; +#28013 = SURFACE_STYLE_FILL_AREA ( #3325 ) ; +#28014 = SURFACE_STYLE_FILL_AREA ( #40949 ) ; +#28015 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28016 = CARTESIAN_POINT ( 'NONE', ( 4.750000000000003600, -0.7099999999999991900, -6.861124800398366500 ) ) ; +#28018 = EDGE_CURVE ( 'NONE', #38914, #39273, #27534, .T. ) ; +#28017 = AXIS2_PLACEMENT_3D ( 'NONE', #30464, #36545, #40189 ) ; +#28019 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4815, 'distance_accuracy_value', 'NONE'); +#28020 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28021 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#28023 = AXIS2_PLACEMENT_3D ( 'NONE', #2034, #15405, #31068 ) ; +#28022 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37481 ) ) ; +#28024 = ORIENTED_EDGE ( 'NONE', *, *, #23902, .F. ) ; +#28025 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37581 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11281, #30510, #8029 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28026 = FILL_AREA_STYLE_COLOUR ( '', #70 ) ; +#28027 = CARTESIAN_POINT ( 'NONE', ( 3.017749928498632400, 0.3446604813906275500, -1.294513984677853300 ) ) ; +#28028 = ADVANCED_FACE ( 'NONE', ( #21011 ), #11019, .T. ) ; +#28029 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#28030 = EDGE_LOOP ( 'NONE', ( #6466, #24390 ) ) ; +#28031 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.258751240853227700E-015, 0.0000000000000000000 ) ) ; +#28032 = EDGE_LOOP ( 'NONE', ( #18242, #14032, #26887, #2287, #6733, #20860 ) ) ; +#28033 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.4300017452961690200, -4.099999999999998800 ) ) ; +#28034 = VECTOR ( 'NONE', #17002, 1000.000000000000100 ) ; +#28035 = ORIENTED_EDGE ( 'NONE', *, *, #38361, .F. ) ; +#28036 = CARTESIAN_POINT ( 'NONE', ( -3.172450947323321600, -0.5290829170021075200, -1.859072882017430900 ) ) ; +#28037 = SURFACE_STYLE_USAGE ( .BOTH. , #14630 ) ; +#28038 = PRESENTATION_STYLE_ASSIGNMENT (( #20771 ) ) ; +#28039 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#28040 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28041 = LINE ( 'NONE', #24913, #29033 ) ; +#28042 = EDGE_CURVE ( 'NONE', #25465, #27288, #14407, .T. ) ; +#28043 = ORIENTED_EDGE ( 'NONE', *, *, #9456, .T. ) ; +#28044 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#28045 = VECTOR ( 'NONE', #7196, 1000.000000000000000 ) ; +#28046 = LINE ( 'NONE', #1959, #26012 ) ; +#28047 = CYLINDRICAL_SURFACE ( 'NONE', #25614, 1.499999999999867700 ) ; +#28048 = CARTESIAN_POINT ( 'NONE', ( -2.573205080756887100, 1.630001745296169500, -1.650000000000000400 ) ) ; +#28049 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#28050 = ORIENTED_EDGE ( 'NONE', *, *, #3536, .F. ) ; +#28051 = EDGE_CURVE ( 'NONE', #31405, #29204, #35110, .T. ) ; +#28052 = FACE_OUTER_BOUND ( 'NONE', #34479, .T. ) ; +#28053 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28054 = EDGE_CURVE ( 'NONE', #9178, #10551, #37136, .T. ) ; +#28055 = SURFACE_STYLE_FILL_AREA ( #25836 ) ; +#28056 = FILL_AREA_STYLE_COLOUR ( '', #22780 ) ; +#28057 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28058 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5599 ), #4786 ) ; +#28059 = VERTEX_POINT ( 'NONE', #14556 ) ; +#28060 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28061 = EDGE_LOOP ( 'NONE', ( #15487, #1708, #21006, #18266, #6263 ) ) ; +#28062 = STYLED_ITEM ( 'NONE', ( #17919 ), #20826 ) ; +#28063 = ORIENTED_EDGE ( 'NONE', *, *, #21901, .T. ) ; +#28064 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2366 ), #763 ) ; +#28065 = PRESENTATION_STYLE_ASSIGNMENT (( #36411 ) ) ; +#28066 = DIRECTION ( 'NONE', ( 5.916456789157588500E-031, 1.000000000000000000, -2.367138801244514800E-016 ) ) ; +#28067 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -2.904459358809381000 ) ) ; +#28068 = ORIENTED_EDGE ( 'NONE', *, *, #12939, .F. ) ; +#28069 = SURFACE_STYLE_FILL_AREA ( #31868 ) ; +#28071 = EDGE_CURVE ( 'NONE', #40250, #32267, #8293, .T. ) ; +#28070 = STYLED_ITEM ( 'NONE', ( #7718 ), #37503 ) ; +#28072 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#28073 = VERTEX_POINT ( 'NONE', #37011 ) ; +#28074 = FILL_AREA_STYLE_COLOUR ( '', #21105 ) ; +#28075 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28076 = SURFACE_STYLE_FILL_AREA ( #6792 ) ; +#28078 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18703 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27691, #27152, #17415 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28077 = STYLED_ITEM ( 'NONE', ( #32094 ), #27931 ) ; +#28079 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760844200E-015 ) ) ; +#28080 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28081 = SURFACE_STYLE_FILL_AREA ( #8775 ) ; +#28083 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#28082 = AXIS2_PLACEMENT_3D ( 'NONE', #36627, #4276, #26913 ) ; +#28084 = PRESENTATION_STYLE_ASSIGNMENT (( #1235 ) ) ; +#28085 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28086 = ORIENTED_EDGE ( 'NONE', *, *, #32736, .F. ) ; +#28087 = STYLED_ITEM ( 'NONE', ( #21389 ), #32401 ) ; +#28088 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521965300E-031 ) ) ; +#28089 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21292 ), #8575 ) ; +#28090 = LINE ( 'NONE', #8061, #19518 ) ; +#28091 = CIRCLE ( 'NONE', #3217, 0.1000000000000002600 ) ; +#28092 = ORIENTED_EDGE ( 'NONE', *, *, #21184, .T. ) ; +#28093 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28094 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#28095 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28096 = SURFACE_SIDE_STYLE ('',( #12118 ) ) ; +#28097 = ADVANCED_FACE ( 'NONE', ( #41647 ), #27272, .F. ) ; +#28098 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28099 = CARTESIAN_POINT ( 'NONE', ( 3.139648011050119700, -0.2999999999999999300, -0.07495823101768076000 ) ) ; +#28100 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#28101 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.8400000000000000800 ) ) ; +#28102 = CARTESIAN_POINT ( 'NONE', ( -3.191446609406726400, 0.6207106781186548800, -3.300000000000000700 ) ) ; +#28103 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22002, 'distance_accuracy_value', 'NONE'); +#28104 = VECTOR ( 'NONE', #4333, 1000.000000000000000 ) ; +#28105 = EDGE_CURVE ( 'NONE', #3407, #33621, #40641, .T. ) ; +#28106 = ORIENTED_EDGE ( 'NONE', *, *, #18045, .T. ) ; +#28107 = SURFACE_STYLE_USAGE ( .BOTH. , #11973 ) ; +#28108 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#28109 = PRESENTATION_STYLE_ASSIGNMENT (( #36296 ) ) ; +#28110 = EDGE_CURVE ( 'NONE', #853, #22600, #17945, .T. ) ; +#28111 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28112 = EDGE_LOOP ( 'NONE', ( #27345, #20044, #19992, #7500 ) ) ; +#28113 = ORIENTED_EDGE ( 'NONE', *, *, #3629, .T. ) ; +#28114 = ORIENTED_EDGE ( 'NONE', *, *, #5113, .T. ) ; +#28115 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15127 ), #17299 ) ; +#28116 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#28117 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.2699999999999849200, -4.599999999999999600 ) ) ; +#28118 = PRESENTATION_STYLE_ASSIGNMENT (( #34843 ) ) ; +#28119 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#28120 = EDGE_CURVE ( 'NONE', #5585, #5496, #21488, .T. ) ; +#28121 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37701, 'distance_accuracy_value', 'NONE'); +#28122 = ORIENTED_EDGE ( 'NONE', *, *, #19932, .T. ) ; +#28123 = FILL_AREA_STYLE ('',( #21936 ) ) ; +#28124 = ORIENTED_EDGE ( 'NONE', *, *, #31389, .F. ) ; +#28125 = STYLED_ITEM ( 'NONE', ( #17768 ), #21875 ) ; +#28126 = FILL_AREA_STYLE_COLOUR ( '', #30513 ) ; +#28127 = LINE ( 'NONE', #1359, #23052 ) ; +#28128 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#28130 = EDGE_CURVE ( 'NONE', #24232, #40879, #23480, .T. ) ; +#28129 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5112 ), #830 ) ; +#28131 = CARTESIAN_POINT ( 'NONE', ( 4.407583426132272400, -1.982581680836082500, -2.504658566907514300 ) ) ; +#28132 = ADVANCED_FACE ( 'NONE', ( #29007 ), #34887, .F. ) ; +#28133 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#28134 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4303 ) ) ; +#28135 = AXIS2_PLACEMENT_3D ( 'NONE', #31741, #22027, #37821 ) ; +#28136 = LINE ( 'NONE', #21019, #37734 ) ; +#28137 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25202 ), #17889 ) ; +#28138 = PRESENTATION_STYLE_ASSIGNMENT (( #40123 ) ) ; +#28139 = PRESENTATION_STYLE_ASSIGNMENT (( #20965 ) ) ; +#28140 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16956 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39124, #19959, #36051 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28141 = FILL_AREA_STYLE_COLOUR ( '', #32532 ) ; +#28142 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#28143 = CARTESIAN_POINT ( 'NONE', ( 4.520424214906981300, -0.2800000000000026400, -1.050000000000000000 ) ) ; +#28144 = ADVANCED_FACE ( 'NONE', ( #31102 ), #27075, .F. ) ; +#28145 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28146 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, -0.7071067811865483500 ) ) ; +#28147 = EDGE_LOOP ( 'NONE', ( #41564, #17388, #10291, #41662 ) ) ; +#28148 = FILL_AREA_STYLE_COLOUR ( '', #21140 ) ; +#28149 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -1.499998254703828600, -5.449999999999994000 ) ) ; +#28150 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28151 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27757, 'distance_accuracy_value', 'NONE'); +#28152 = ORIENTED_EDGE ( 'NONE', *, *, #27875, .T. ) ; +#28153 = ORIENTED_EDGE ( 'NONE', *, *, #38076, .F. ) ; +#28154 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#28155 = ORIENTED_EDGE ( 'NONE', *, *, #6991, .F. ) ; +#28156 = VECTOR ( 'NONE', #24399, 1000.000000000000000 ) ; +#28157 = CARTESIAN_POINT ( 'NONE', ( -3.332298852287715700, -0.2999999198035229700, -1.600000000000000300 ) ) ; +#28158 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28159 = VECTOR ( 'NONE', #2793, 1000.000000000000000 ) ; +#28160 = ORIENTED_EDGE ( 'NONE', *, *, #29162, .T. ) ; +#28161 = ORIENTED_EDGE ( 'NONE', *, *, #3203, .F. ) ; +#28162 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28163 = SURFACE_STYLE_USAGE ( .BOTH. , #21694 ) ; +#28164 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#28165 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, 0.2799999999999973100, -0.2339555568811695900 ) ) ; +#28166 = FILL_AREA_STYLE_COLOUR ( '', #28552 ) ; +#28167 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#28168 = FILL_AREA_STYLE ('',( #1955 ) ) ; +#28169 = EDGE_CURVE ( 'NONE', #12333, #31259, #17471, .T. ) ; +#28170 = SURFACE_STYLE_USAGE ( .BOTH. , #28444 ) ; +#28171 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#28172 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.499998254703820400, -6.299999999999993600 ) ) ; +#28173 = PLANE ( 'NONE', #20950 ) ; +#28174 = EDGE_CURVE ( 'NONE', #8230, #3705, #41697, .T. ) ; +#28175 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21715 ) ) ; +#28176 = SURFACE_STYLE_USAGE ( .BOTH. , #30592 ) ; +#28177 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#28178 = LINE ( 'NONE', #13170, #35756 ) ; +#28179 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33853 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2550, #31466, #25144 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28180 = ADVANCED_FACE ( 'NONE', ( #21533 ), #32102, .F. ) ; +#28181 = ORIENTED_EDGE ( 'NONE', *, *, #19107, .F. ) ; +#28182 = CIRCLE ( 'NONE', #15345, 0.1000000000000004800 ) ; +#28183 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703822500, -3.500000000000000000 ) ) ; +#28184 = STYLED_ITEM ( 'NONE', ( #35364 ), #14235 ) ; +#28185 = FILL_AREA_STYLE ('',( #8806 ) ) ; +#28186 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28187 = ORIENTED_EDGE ( 'NONE', *, *, #23909, .T. ) ; +#28188 = VECTOR ( 'NONE', #25319, 1000.000000000000000 ) ; +#28189 = AXIS2_PLACEMENT_3D ( 'NONE', #27836, #30931, #1597 ) ; +#28190 = AXIS2_PLACEMENT_3D ( 'NONE', #8305, #17687, #28242 ) ; +#28191 = ORIENTED_EDGE ( 'NONE', *, *, #20490, .F. ) ; +#28192 = ORIENTED_EDGE ( 'NONE', *, *, #25878, .T. ) ; +#28193 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664848500, 0.2800017452961319800, -4.400000000000000400 ) ) ; +#28194 = ORIENTED_EDGE ( 'NONE', *, *, #27015, .F. ) ; +#28195 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#28196 = SURFACE_STYLE_FILL_AREA ( #34471 ) ; +#28197 = ADVANCED_FACE ( 'NONE', ( #26566 ), #31058, .T. ) ; +#28199 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23862 ), #9483 ) ; +#28198 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1773 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23938, #1651, #40438 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28200 = CIRCLE ( 'NONE', #32324, 0.3600000000000078700 ) ; +#28201 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.414176746720224900E-016, -1.000000000000000000 ) ) ; +#28202 = FACE_OUTER_BOUND ( 'NONE', #5053, .T. ) ; +#28203 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30909, 'distance_accuracy_value', 'NONE'); +#28205 = EDGE_CURVE ( 'NONE', #28758, #40360, #12860, .T. ) ; +#28204 = STYLED_ITEM ( 'NONE', ( #33226 ), #34908 ) ; +#28206 = ORIENTED_EDGE ( 'NONE', *, *, #6995, .T. ) ; +#28207 = SURFACE_STYLE_USAGE ( .BOTH. , #5603 ) ; +#28208 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28209 = ORIENTED_EDGE ( 'NONE', *, *, #5152, .T. ) ; +#28210 = CIRCLE ( 'NONE', #16304, 0.1000000000000000500 ) ; +#28211 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.180001745296165300, -7.300000000000000700 ) ) ; +#28213 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24448 ), #34704 ) ; +#28212 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20386 ), #30368 ) ; +#28214 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28215 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.3300017452961694400, -5.075000000000000200 ) ) ; +#28216 = ORIENTED_EDGE ( 'NONE', *, *, #21770, .F. ) ; +#28217 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28218 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#28219 = FILL_AREA_STYLE ('',( #40924 ) ) ; +#28220 = CARTESIAN_POINT ( 'NONE', ( -1.649999999999999900, -1.499998254703824400, -6.299999999999993600 ) ) ; +#28221 = FACE_OUTER_BOUND ( 'NONE', #24727, .T. ) ; +#28222 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.380001745296139700, -4.781671842700004200 ) ) ; +#28223 = VERTEX_POINT ( 'NONE', #18391 ) ; +#28224 = ORIENTED_EDGE ( 'NONE', *, *, #11448, .F. ) ; +#28225 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28226 = FACE_OUTER_BOUND ( 'NONE', #984, .T. ) ; +#28227 = EDGE_CURVE ( 'NONE', #28709, #30794, #7818, .T. ) ; +#28228 = ADVANCED_FACE ( 'NONE', ( #4785 ), #28927, .F. ) ; +#28229 = VERTEX_POINT ( 'NONE', #12961 ) ; +#28230 = SURFACE_STYLE_USAGE ( .BOTH. , #4935 ) ; +#28231 = EDGE_LOOP ( 'NONE', ( #16087, #3233, #40883, #9700 ) ) ; +#28232 = SURFACE_STYLE_USAGE ( .BOTH. , #28096 ) ; +#28233 = VERTEX_POINT ( 'NONE', #12811 ) ; +#28234 = PLANE ( 'NONE', #29906 ) ; +#28235 = SURFACE_STYLE_FILL_AREA ( #35580 ) ; +#28236 = EDGE_CURVE ( 'NONE', #13841, #17337, #26308, .T. ) ; +#28237 = AXIS2_PLACEMENT_3D ( 'NONE', #7357, #3159, #29979 ) ; +#28238 = FACE_OUTER_BOUND ( 'NONE', #10446, .T. ) ; +#28239 = PLANE ( 'NONE', #19133 ) ; +#28240 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#28241 = ORIENTED_EDGE ( 'NONE', *, *, #23530, .T. ) ; +#28242 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28243 = VERTEX_POINT ( 'NONE', #2850 ) ; +#28244 = VERTEX_POINT ( 'NONE', #2983 ) ; +#28245 = CARTESIAN_POINT ( 'NONE', ( -3.365710678118654100, 0.2000000000000000900, -3.300000000000000300 ) ) ; +#28246 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7123 ) ) ; +#28247 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.828353493440455200E-016, 1.000000000000000000 ) ) ; +#28248 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#28249 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid34', #6956 ) ; +#28250 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521965300E-031 ) ) ; +#28251 = ORIENTED_EDGE ( 'NONE', *, *, #37693, .F. ) ; +#28252 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.779999999999867900, -0.2339555568811697600 ) ) ; +#28253 = STYLED_ITEM ( 'NONE', ( #40917 ), #19521 ) ; +#28254 = PLANE ( 'NONE', #38269 ) ; +#28255 = AXIS2_PLACEMENT_3D ( 'NONE', #6895, #10142, #25857 ) ; +#28256 = LINE ( 'NONE', #22497, #1029 ) ; +#28258 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17503 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32647, #7061, #26163 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28257 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16064 ), #18807 ) ; +#28259 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#28260 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28261 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, -0.3499999999999996400, -1.250000000000000000 ) ) ; +#28263 = EDGE_CURVE ( 'NONE', #1954, #35418, #29540, .T. ) ; +#28262 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38505 ), #10357 ) ; +#28264 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165600, -2.399999999999999500 ) ) ; +#28265 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28267 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19075 ), #15291 ) ; +#28266 = STYLED_ITEM ( 'NONE', ( #38160 ), #25906 ) ; +#28268 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28269 = VERTEX_POINT ( 'NONE', #2717 ) ; +#28270 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#28271 = LINE ( 'NONE', #1384, #29758 ) ; +#28272 = VERTEX_POINT ( 'NONE', #19361 ) ; +#28273 = SURFACE_STYLE_FILL_AREA ( #13928 ) ; +#28274 = FACE_OUTER_BOUND ( 'NONE', #25926, .T. ) ; +#28275 = LINE ( 'NONE', #37368, #1525 ) ; +#28276 = ORIENTED_EDGE ( 'NONE', *, *, #11570, .F. ) ; +#28277 = VERTEX_POINT ( 'NONE', #35306 ) ; +#28278 = VERTEX_POINT ( 'NONE', #15795 ) ; +#28279 = VECTOR ( 'NONE', #40446, 1000.000000000000000 ) ; +#28280 = SURFACE_STYLE_USAGE ( .BOTH. , #31109 ) ; +#28281 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11166, 'distance_accuracy_value', 'NONE'); +#28282 = CARTESIAN_POINT ( 'NONE', ( 3.458233997336492400, 1.005153670744121500, -14.55000000000000100 ) ) ; +#28283 = FILL_AREA_STYLE ('',( #31659 ) ) ; +#28284 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28285 = VERTEX_POINT ( 'NONE', #12539 ) ; +#28286 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#28287 = EDGE_CURVE ( 'NONE', #27370, #32314, #14397, .T. ) ; +#28288 = VECTOR ( 'NONE', #17442, 1000.000000000000000 ) ; +#28289 = VECTOR ( 'NONE', #22536, 1000.000000000000000 ) ; +#28290 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000000000, 1.480001745296169600, -1.650000000000000800 ) ) ; +#28291 = EDGE_CURVE ( 'NONE', #36996, #9357, #41140, .T. ) ; +#28292 = FILL_AREA_STYLE_COLOUR ( '', #37621 ) ; +#28293 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#28294 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 7.228014483236709400E-016 ) ) ; +#28295 = ADVANCED_FACE ( 'NONE', ( #16416 ), #10807, .T. ) ; +#28296 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12718 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3054, #31438, #28186 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28297 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.779999999999868400, 0.0000000000000000000 ) ) ; +#28299 = ORIENTED_EDGE ( 'NONE', *, *, #5214, .F. ) ; +#28298 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9813, 'distance_accuracy_value', 'NONE'); +#28300 = FILL_AREA_STYLE_COLOUR ( '', #8526 ) ; +#28301 = SURFACE_STYLE_USAGE ( .BOTH. , #14900 ) ; +#28302 = VECTOR ( 'NONE', #7647, 1000.000000000000000 ) ; +#28303 = AXIS2_PLACEMENT_3D ( 'NONE', #30399, #7502, #39570 ) ; +#28304 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28305 = ORIENTED_EDGE ( 'NONE', *, *, #11959, .F. ) ; +#28306 = FACE_OUTER_BOUND ( 'NONE', #16112, .T. ) ; +#28307 = ORIENTED_EDGE ( 'NONE', *, *, #15808, .F. ) ; +#28308 = CARTESIAN_POINT ( 'NONE', ( -4.450000000000001100, -0.01999825470386161800, -7.200000000000001100 ) ) ; +#28309 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#28310 = CIRCLE ( 'NONE', #15281, 0.3000000000000001000 ) ; +#28313 = EDGE_CURVE ( 'NONE', #41425, #23571, #14878, .T. ) ; +#28312 = PLANE ( 'NONE', #21865 ) ; +#28311 = STYLED_ITEM ( 'NONE', ( #15957 ), #36846 ) ; +#28314 = CARTESIAN_POINT ( 'NONE', ( 4.551493546202548800, -0.01999825470383207600, -6.639019554637394000 ) ) ; +#28315 = ORIENTED_EDGE ( 'NONE', *, *, #20277, .T. ) ; +#28316 = ORIENTED_EDGE ( 'NONE', *, *, #21976, .F. ) ; +#28317 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28318 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, 0.6500000000000003600, -3.300000000000000300 ) ) ; +#28319 = AXIS2_PLACEMENT_3D ( 'NONE', #21296, #8387, #14228 ) ; +#28320 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28321 = CARTESIAN_POINT ( 'NONE', ( -4.520424214906982200, -0.2799999999999974200, -1.149999999999999900 ) ) ; +#28322 = AXIS2_PLACEMENT_3D ( 'NONE', #24547, #5169, #21447 ) ; +#28323 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#28324 = AXIS2_PLACEMENT_3D ( 'NONE', #15949, #35457, #19370 ) ; +#28325 = ORIENTED_EDGE ( 'NONE', *, *, #41752, .T. ) ; +#28326 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28327 = EDGE_LOOP ( 'NONE', ( #2708, #6095, #41837, #16410 ) ) ; +#28328 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#28329 = CARTESIAN_POINT ( 'NONE', ( -3.242385881558933900, 0.07499999999999999700, 0.7034798965988859900 ) ) ; +#28330 = VECTOR ( 'NONE', #7447, 1000.000000000000000 ) ; +#28331 = FILL_AREA_STYLE_COLOUR ( '', #28933 ) ; +#28332 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28333 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28334 = ADVANCED_FACE ( 'NONE', ( #27020 ), #8769, .T. ) ; +#28335 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28336 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28337 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24327, 'distance_accuracy_value', 'NONE'); +#28338 = ORIENTED_EDGE ( 'NONE', *, *, #16354, .T. ) ; +#28339 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.799998254703822000, -2.399999999999999500 ) ) ; +#28340 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#28341 = LINE ( 'NONE', #32698, #19783 ) ; +#28342 = VERTEX_POINT ( 'NONE', #436 ) ; +#28343 = ADVANCED_FACE ( 'NONE', ( #21480 ), #16779, .F. ) ; +#28344 = EDGE_CURVE ( 'NONE', #10788, #28949, #34574, .T. ) ; +#28345 = FILL_AREA_STYLE_COLOUR ( '', #23347 ) ; +#28346 = EDGE_CURVE ( 'NONE', #19662, #25729, #4252, .T. ) ; +#28347 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13837, 'distance_accuracy_value', 'NONE'); +#28348 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.8500017452961660100, -4.975000000000000500 ) ) ; +#28349 = VECTOR ( 'NONE', #35749, 1000.000000000000000 ) ; +#28350 = ORIENTED_EDGE ( 'NONE', *, *, #19687, .F. ) ; +#28351 = SURFACE_SIDE_STYLE ('',( #6607 ) ) ; +#28352 = ORIENTED_EDGE ( 'NONE', *, *, #12798, .F. ) ; +#28353 = ORIENTED_EDGE ( 'NONE', *, *, #41288, .T. ) ; +#28354 = EDGE_CURVE ( 'NONE', #3347, #41354, #3255, .T. ) ; +#28355 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28356 = STYLED_ITEM ( 'NONE', ( #12038 ), #17111 ) ; +#28357 = SURFACE_STYLE_USAGE ( .BOTH. , #40935 ) ; +#28358 = EDGE_CURVE ( 'NONE', #9198, #4602, #782, .T. ) ; +#28359 = SURFACE_SIDE_STYLE ('',( #2150 ) ) ; +#28360 = ORIENTED_EDGE ( 'NONE', *, *, #743, .T. ) ; +#28361 = PLANE ( 'NONE', #22911 ) ; +#28362 = VECTOR ( 'NONE', #18090, 1000.000000000000000 ) ; +#28363 = ORIENTED_EDGE ( 'NONE', *, *, #12391, .F. ) ; +#28364 = AXIS2_PLACEMENT_3D ( 'NONE', #4352, #13826, #17091 ) ; +#28365 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -1.994459358809384200 ) ) ; +#28366 = AXIS2_PLACEMENT_3D ( 'NONE', #39695, #30244, #14290 ) ; +#28367 = FACE_OUTER_BOUND ( 'NONE', #41320, .T. ) ; +#28368 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 2.322941965694886000, -1.250000000000000000 ) ) ; +#28370 = EDGE_CURVE ( 'NONE', #22361, #1286, #25986, .T. ) ; +#28369 = AXIS2_PLACEMENT_3D ( 'NONE', #36756, #16989, #39562 ) ; +#28371 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28372 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -1.139998254717355900, -5.049996877890552400 ) ) ; +#28373 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#28374 = SURFACE_STYLE_FILL_AREA ( #2516 ) ; +#28375 = SURFACE_STYLE_USAGE ( .BOTH. , #15264 ) ; +#28377 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36257 ) ) ; +#28376 = AXIS2_PLACEMENT_3D ( 'NONE', #36464, #39694, #33071 ) ; +#28378 = SURFACE_STYLE_FILL_AREA ( #34573 ) ; +#28379 = AXIS2_PLACEMENT_3D ( 'NONE', #25556, #22306, #25823 ) ; +#28380 = FILL_AREA_STYLE ('',( #2029 ) ) ; +#28381 = ORIENTED_EDGE ( 'NONE', *, *, #28358, .T. ) ; +#28382 = AXIS2_PLACEMENT_3D ( 'NONE', #22755, #35894, #39391 ) ; +#28383 = SURFACE_STYLE_USAGE ( .BOTH. , #11974 ) ; +#28385 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#28384 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760844200E-015 ) ) ; +#28386 = VECTOR ( 'NONE', #24152, 1000.000000000000000 ) ; +#28387 = ADVANCED_FACE ( 'NONE', ( #6286 ), #13523, .T. ) ; +#28388 = CARTESIAN_POINT ( 'NONE', ( 2.995000000000000100, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#28389 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27578 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30975, #37202, #14880 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28390 = VERTEX_POINT ( 'NONE', #39213 ) ; +#28391 = VECTOR ( 'NONE', #4385, 1000.000000000000000 ) ; +#28392 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28393 = SURFACE_STYLE_FILL_AREA ( #12844 ) ; +#28394 = FILL_AREA_STYLE_COLOUR ( '', #29192 ) ; +#28395 = VERTEX_POINT ( 'NONE', #29336 ) ; +#28396 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, -0.1999999999999999800, -1.600000000000000300 ) ) ; +#28397 = SURFACE_SIDE_STYLE ('',( #7661 ) ) ; +#28398 = FILL_AREA_STYLE_COLOUR ( '', #34681 ) ; +#28399 = ADVANCED_FACE ( 'NONE', ( #39580 ), #23139, .F. ) ; +#28400 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#28401 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 10.30000000000000100, -1.250000000000000000 ) ) ; +#28402 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.480001745296166000, -1.649999999999999500 ) ) ; +#28403 = ORIENTED_EDGE ( 'NONE', *, *, #28960, .T. ) ; +#28404 = ORIENTED_EDGE ( 'NONE', *, *, #28370, .F. ) ; +#28405 = SURFACE_STYLE_USAGE ( .BOTH. , #25199 ) ; +#28406 = VECTOR ( 'NONE', #23547, 1000.000000000000000 ) ; +#28407 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28408 = VECTOR ( 'NONE', #9440, 1000.000000000000000 ) ; +#28409 = EDGE_CURVE ( 'NONE', #3199, #32175, #4206, .T. ) ; +#28410 = SURFACE_STYLE_FILL_AREA ( #25391 ) ; +#28411 = FILL_AREA_STYLE_COLOUR ( '', #30514 ) ; +#28412 = FILL_AREA_STYLE ('',( #16126 ) ) ; +#28413 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244519300E-016 ) ) ; +#28414 = EDGE_CURVE ( 'NONE', #13926, #8471, #38091, .T. ) ; +#28415 = ORIENTED_EDGE ( 'NONE', *, *, #31748, .F. ) ; +#28416 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#28417 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#28418 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5969 ), #20357 ) ; +#28419 = VERTEX_POINT ( 'NONE', #17497 ) ; +#28420 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35869, 'distance_accuracy_value', 'NONE'); +#28421 = AXIS2_PLACEMENT_3D ( 'NONE', #29880, #4166, #557 ) ; +#28422 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, -0.3499999999999996400, -1.250000000000000000 ) ) ; +#28423 = FACE_OUTER_BOUND ( 'NONE', #24113, .T. ) ; +#28424 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#28425 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28426 = ORIENTED_EDGE ( 'NONE', *, *, #6420, .F. ) ; +#28427 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29752 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40759, #15071, #30755 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28428 = ADVANCED_FACE ( 'NONE', ( #20427 ), #27477, .F. ) ; +#28429 = STYLED_ITEM ( 'NONE', ( #33595 ), #18095 ) ; +#28430 = PLANE ( 'NONE', #24475 ) ; +#28431 = ORIENTED_EDGE ( 'NONE', *, *, #39475, .F. ) ; +#28432 = VECTOR ( 'NONE', #11579, 1000.000000000000000 ) ; +#28434 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28103 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22002, #31722, #31446 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28433 = STYLED_ITEM ( 'NONE', ( #38898 ), #29459 ) ; +#28435 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#28436 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28437 = FILL_AREA_STYLE ('',( #12740 ) ) ; +#28439 = EDGE_CURVE ( 'NONE', #1135, #8828, #23963, .T. ) ; +#28438 = AXIS2_PLACEMENT_3D ( 'NONE', #11801, #40478, #24556 ) ; +#28440 = VERTEX_POINT ( 'NONE', #14369 ) ; +#28441 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#28442 = SURFACE_STYLE_FILL_AREA ( #7035 ) ; +#28443 = ORIENTED_EDGE ( 'NONE', *, *, #25554, .F. ) ; +#28445 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26285 ), #7586 ) ; +#28444 = SURFACE_SIDE_STYLE ('',( #33161 ) ) ; +#28446 = FACE_OUTER_BOUND ( 'NONE', #41404, .T. ) ; +#28447 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#28448 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17658 ) ) ; +#28449 = FILL_AREA_STYLE ('',( #18723 ) ) ; +#28450 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28214, 'distance_accuracy_value', 'NONE'); +#28451 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005900, -0.2818014882866753400, -2.095470210943120000 ) ) ; +#28452 = FILL_AREA_STYLE_COLOUR ( '', #36814 ) ; +#28453 = LINE ( 'NONE', #1688, #19398 ) ; +#28454 = SURFACE_STYLE_FILL_AREA ( #33010 ) ; +#28455 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.931303021499040300, -0.3590461068823618300 ) ) ; +#28456 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28457 = ORIENTED_EDGE ( 'NONE', *, *, #8623, .F. ) ; +#28458 = SURFACE_SIDE_STYLE ('',( #36451 ) ) ; +#28459 = PRESENTATION_STYLE_ASSIGNMENT (( #10735 ) ) ; +#28460 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28461 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28462 = ORIENTED_EDGE ( 'NONE', *, *, #12515, .F. ) ; +#28463 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28464 = VERTEX_POINT ( 'NONE', #7433 ) ; +#28465 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28466 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#28467 = VECTOR ( 'NONE', #2846, 1000.000000000000000 ) ; +#28468 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28469 = VERTEX_POINT ( 'NONE', #27105 ) ; +#28470 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#28471 = EDGE_CURVE ( 'NONE', #25959, #14718, #5765, .T. ) ; +#28472 = VERTEX_POINT ( 'NONE', #7853 ) ; +#28474 = ORIENTED_EDGE ( 'NONE', *, *, #41632, .T. ) ; +#28473 = FACE_OUTER_BOUND ( 'NONE', #21226, .T. ) ; +#28475 = VERTEX_POINT ( 'NONE', #23420 ) ; +#28476 = LINE ( 'NONE', #36066, #30507 ) ; +#28477 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -5.075000000000000200 ) ) ; +#28478 = FILL_AREA_STYLE ('',( #15501 ) ) ; +#28479 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169000, -3.514459358809377300 ) ) ; +#28480 = EDGE_CURVE ( 'NONE', #32236, #834, #40594, .T. ) ; +#28481 = LINE ( 'NONE', #8725, #15411 ) ; +#28482 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28483 = FACE_OUTER_BOUND ( 'NONE', #37147, .T. ) ; +#28484 = VERTEX_POINT ( 'NONE', #30330 ) ; +#28485 = SURFACE_STYLE_USAGE ( .BOTH. , #18766 ) ; +#28486 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #6485, #29063, #38527, #15797 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#28487 = CIRCLE ( 'NONE', #32079, 1.200001745296169300 ) ; +#28488 = FACE_OUTER_BOUND ( 'NONE', #27331, .T. ) ; +#28489 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6814 ), #10339 ) ; +#28491 = VECTOR ( 'NONE', #7941, 1000.000000000000000 ) ; +#28490 = CARTESIAN_POINT ( 'NONE', ( -3.839743771154401100, 0.6300017452961683700, -4.549999999999999800 ) ) ; +#28492 = FILL_AREA_STYLE ('',( #2401 ) ) ; +#28493 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#28494 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26334 ), #7635 ) ; +#28495 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.2999999999999999900, -1.400000000000000100 ) ) ; +#28496 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26915 ), #24179 ) ; +#28497 = SURFACE_SIDE_STYLE ('',( #32154 ) ) ; +#28498 = STYLED_ITEM ( 'NONE', ( #25065 ), #31358 ) ; +#28500 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23370 ), #32822 ) ; +#28499 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27160 ), #9784 ) ; +#28503 = EDGE_CURVE ( 'NONE', #16115, #4617, #15374, .T. ) ; +#28502 = SURFACE_SIDE_STYLE ('',( #22775 ) ) ; +#28501 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34208 ), #30673 ) ; +#28504 = FACE_OUTER_BOUND ( 'NONE', #23361, .T. ) ; +#28505 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.07499999999999999700, 0.0000000000000000000 ) ) ; +#28506 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#28507 = PRESENTATION_STYLE_ASSIGNMENT (( #13746 ) ) ; +#28509 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34458 ), #1756 ) ; +#28508 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7094 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #943, #3837, #36076 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28510 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28511 = CIRCLE ( 'NONE', #31022, 0.2999999999999999300 ) ; +#28512 = EDGE_LOOP ( 'NONE', ( #5941, #35077, #25357, #4257 ) ) ; +#28513 = VECTOR ( 'NONE', #27061, 1000.000000000000000 ) ; +#28514 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28515 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.478176394252580200E-017, -6.082356018693180500E-031 ) ) ; +#28516 = EDGE_LOOP ( 'NONE', ( #29323, #35050, #24132, #23905 ) ) ; +#28517 = FILL_AREA_STYLE_COLOUR ( '', #1244 ) ; +#28518 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.3300017452961695500, -6.424999999999999800 ) ) ; +#28519 = ORIENTED_EDGE ( 'NONE', *, *, #2177, .T. ) ; +#28520 = ORIENTED_EDGE ( 'NONE', *, *, #15044, .F. ) ; +#28521 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37610, 'distance_accuracy_value', 'NONE'); +#28522 = VERTEX_POINT ( 'NONE', #17074 ) ; +#28523 = FACE_OUTER_BOUND ( 'NONE', #153, .T. ) ; +#28524 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#28525 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999988100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#28526 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.125187526910352900E-031, 1.156482317317871700E-015 ) ) ; +#28527 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#28528 = PRESENTATION_STYLE_ASSIGNMENT (( #32774 ) ) ; +#28529 = FACE_OUTER_BOUND ( 'NONE', #37227, .T. ) ; +#28530 = SURFACE_STYLE_USAGE ( .BOTH. , #15947 ) ; +#28531 = VERTEX_POINT ( 'NONE', #26685 ) ; +#28532 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28533 = CIRCLE ( 'NONE', #17760, 0.3000000000000007700 ) ; +#28534 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28535 = EDGE_CURVE ( 'NONE', #39676, #6822, #30526, .T. ) ; +#28536 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -9.268445570935434200E-016 ) ) ; +#28537 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#28539 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000003200, 0.3000000000000149200, -4.249999999999998200 ) ) ; +#28538 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#28540 = VECTOR ( 'NONE', #8299, 1000.000000000000000 ) ; +#28541 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#28542 = CLOSED_SHELL ( 'NONE', ( #24834, #14376, #11814, #37452, #30049, #25457 ) ) ; +#28543 = EDGE_CURVE ( 'NONE', #4681, #16436, #9257, .T. ) ; +#28544 = PLANE ( 'NONE', #6539 ) ; +#28545 = CARTESIAN_POINT ( 'NONE', ( -4.620424212713737200, 0.2800000000000027500, -1.049979056049130000 ) ) ; +#28546 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#28547 = ADVANCED_FACE ( 'NONE', ( #26479 ), #41606, .F. ) ; +#28548 = ORIENTED_EDGE ( 'NONE', *, *, #7007, .T. ) ; +#28549 = VERTEX_POINT ( 'NONE', #40327 ) ; +#28550 = FACE_OUTER_BOUND ( 'NONE', #7314, .T. ) ; +#28551 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#28553 = ADVANCED_FACE ( 'NONE', ( #38568 ), #7200, .T. ) ; +#28552 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28554 = AXIS2_PLACEMENT_3D ( 'NONE', #4400, #39839, #7071 ) ; +#28555 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40731 ) ) ; +#28556 = FILL_AREA_STYLE_COLOUR ( '', #16992 ) ; +#28557 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28559 = EDGE_CURVE ( 'NONE', #112, #9154, #4717, .T. ) ; +#28558 = AXIS2_PLACEMENT_3D ( 'NONE', #29576, #39022, #19441 ) ; +#28560 = CLOSED_SHELL ( 'NONE', ( #1964, #19885, #4200, #17465, #1136, #34715 ) ) ; +#28561 = SURFACE_STYLE_USAGE ( .BOTH. , #22083 ) ; +#28562 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#28563 = LINE ( 'NONE', #3975, #31608 ) ; +#28564 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#28565 = SURFACE_STYLE_USAGE ( .BOTH. , #28710 ) ; +#28566 = CARTESIAN_POINT ( 'NONE', ( -0.6500000000000000200, -1.139998254717358200, -6.299996877890552400 ) ) ; +#28567 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10423 ), #29352 ) ; +#28568 = FACE_OUTER_BOUND ( 'NONE', #7429, .T. ) ; +#28569 = ORIENTED_EDGE ( 'NONE', *, *, #21915, .T. ) ; +#28570 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28571 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, 0.07499999999999998300, 0.03299999999999998800 ) ) ; +#28572 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29603 ), #34750 ) ; +#28573 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, -2.031000000000001500, -6.749999999999999100 ) ) ; +#28574 = FILL_AREA_STYLE ('',( #25221 ) ) ; +#28575 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000010300, -1.999998254703822000, -2.599999999999999600 ) ) ; +#28576 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28577 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.880000000000130000, -0.5000000000000879300 ) ) ; +#28578 = VERTEX_POINT ( 'NONE', #11520 ) ; +#28579 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, 0.6780706550913999700 ) ) ; +#28580 = VECTOR ( 'NONE', #30731, 1000.000000000000000 ) ; +#28581 = SURFACE_SIDE_STYLE ('',( #28615 ) ) ; +#28582 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#28583 = SURFACE_STYLE_USAGE ( .BOTH. , #32240 ) ; +#28584 = SURFACE_SIDE_STYLE ('',( #33508 ) ) ; +#28585 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1230, 'distance_accuracy_value', 'NONE'); +#28586 = LINE ( 'NONE', #22150, #8339 ) ; +#28587 = ADVANCED_FACE ( 'NONE', ( #32995 ), #8130, .F. ) ; +#28588 = ORIENTED_EDGE ( 'NONE', *, *, #27641, .T. ) ; +#28589 = SURFACE_STYLE_USAGE ( .BOTH. , #21992 ) ; +#28590 = ORIENTED_EDGE ( 'NONE', *, *, #21153, .F. ) ; +#28591 = VERTEX_POINT ( 'NONE', #37515 ) ; +#28592 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#28593 = EDGE_CURVE ( 'NONE', #1076, #35410, #219, .T. ) ; +#28594 = FILL_AREA_STYLE ('',( #34825 ) ) ; +#28595 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28596 = EDGE_CURVE ( 'NONE', #24933, #23868, #8734, .T. ) ; +#28597 = TOROIDAL_SURFACE ( 'NONE', #18444, 1.600000000000129800, 0.1499999999998701300 ) ; +#28598 = CYLINDRICAL_SURFACE ( 'NONE', #32453, 0.1500000000000008300 ) ; +#28599 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#28600 = FACE_OUTER_BOUND ( 'NONE', #1455, .T. ) ; +#28601 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#28602 = ORIENTED_EDGE ( 'NONE', *, *, #8966, .T. ) ; +#28603 = EDGE_CURVE ( 'NONE', #37804, #1554, #37051, .T. ) ; +#28604 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, 0.0000000000000000000 ) ) ; +#28605 = LINE ( 'NONE', #40126, #3826 ) ; +#28606 = ADVANCED_FACE ( 'NONE', ( #40553 ), #40477, .F. ) ; +#28607 = ORIENTED_EDGE ( 'NONE', *, *, #4550, .F. ) ; +#28608 = SURFACE_STYLE_USAGE ( .BOTH. , #6019 ) ; +#28609 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28610 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28611 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28612 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39430 ) ) ; +#28613 = AXIS2_PLACEMENT_3D ( 'NONE', #16279, #36053, #26443 ) ; +#28614 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.730424212713734600, -1.049979056049130000 ) ) ; +#28615 = SURFACE_STYLE_FILL_AREA ( #18588 ) ; +#28616 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.630001745296169000, -4.100000000000000500 ) ) ; +#28618 = EDGE_CURVE ( 'NONE', #36115, #11960, #28453, .T. ) ; +#28617 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19989 ), #2683 ) ; +#28619 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28620 = PRESENTATION_STYLE_ASSIGNMENT (( #39853 ) ) ; +#28621 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#28622 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32399, 'distance_accuracy_value', 'NONE'); +#28624 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39374 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25570, #6211, #9428 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28623 = AXIS2_PLACEMENT_3D ( 'NONE', #16996, #29977, #27174 ) ; +#28625 = CARTESIAN_POINT ( 'NONE', ( 4.551493546202550500, -0.1199982547038320600, -6.639019554637394000 ) ) ; +#28626 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28627 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14049 ) ) ; +#28628 = ORIENTED_EDGE ( 'NONE', *, *, #41510, .F. ) ; +#28629 = VECTOR ( 'NONE', #4355, 1000.000000000000000 ) ; +#28630 = FILL_AREA_STYLE_COLOUR ( '', #33130 ) ; +#28631 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40246 ) ) ; +#28632 = CARTESIAN_POINT ( 'NONE', ( -3.475000000000000100, 1.630001745296169000, -4.000000000000000000 ) ) ; +#28633 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#28634 = ORIENTED_EDGE ( 'NONE', *, *, #30516, .T. ) ; +#28635 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8893 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38813, #19927, #184 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28636 = ORIENTED_EDGE ( 'NONE', *, *, #28902, .F. ) ; +#28637 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#28638 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28639 = VECTOR ( 'NONE', #1979, 1000.000000000000000 ) ; +#28640 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15865, 'distance_accuracy_value', 'NONE'); +#28641 = VERTEX_POINT ( 'NONE', #24401 ) ; +#28642 = SURFACE_SIDE_STYLE ('',( #37421 ) ) ; +#28643 = FACE_OUTER_BOUND ( 'NONE', #16223, .T. ) ; +#28644 = ORIENTED_EDGE ( 'NONE', *, *, #23060, .T. ) ; +#28645 = ADVANCED_FACE ( 'NONE', ( #13277 ), #27638, .T. ) ; +#28646 = CARTESIAN_POINT ( 'NONE', ( -2.949999999999999700, -1.380001745296126600, -6.031671842700004200 ) ) ; +#28647 = FILL_AREA_STYLE ('',( #32159 ) ) ; +#28648 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#28649 = SURFACE_STYLE_USAGE ( .BOTH. , #2841 ) ; +#28650 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.380001745296128200, -4.781671842700004200 ) ) ; +#28651 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.380001745296165500, -1.899999999999999700 ) ) ; +#28652 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7149, 'distance_accuracy_value', 'NONE'); +#28653 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28654 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28655 = SURFACE_STYLE_USAGE ( .BOTH. , #22458 ) ; +#28656 = DIRECTION ( 'NONE', ( -2.465190328815661900E-032, -1.000000000000000000, 2.367138801244519300E-016 ) ) ; +#28657 = EDGE_CURVE ( 'NONE', #41499, #6497, #5192, .T. ) ; +#28658 = VERTEX_POINT ( 'NONE', #40897 ) ; +#28659 = PRESENTATION_STYLE_ASSIGNMENT (( #22792 ) ) ; +#28660 = DIRECTION ( 'NONE', ( -6.056601140521967900E-031, -1.591898209559296700E-045, -1.000000000000000000 ) ) ; +#28661 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20037 ), #3791 ) ; +#28662 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24184, 'distance_accuracy_value', 'NONE'); +#28663 = VERTEX_POINT ( 'NONE', #18471 ) ; +#28664 = SURFACE_STYLE_USAGE ( .BOTH. , #6079 ) ; +#28665 = EDGE_CURVE ( 'NONE', #974, #28758, #3653, .T. ) ; +#28666 = VERTEX_POINT ( 'NONE', #15493 ) ; +#28667 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28668 = PLANE ( 'NONE', #31888 ) ; +#28669 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11329 ) ) ; +#28670 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7266, 'distance_accuracy_value', 'NONE'); +#28671 = FILL_AREA_STYLE ('',( #35744 ) ) ; +#28672 = ORIENTED_EDGE ( 'NONE', *, *, #36463, .F. ) ; +#28673 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, 2.322941965694886000, -1.250000000000000000 ) ) ; +#28674 = ORIENTED_EDGE ( 'NONE', *, *, #40148, .F. ) ; +#28675 = LINE ( 'NONE', #18267, #2935 ) ; +#28676 = ORIENTED_EDGE ( 'NONE', *, *, #27027, .F. ) ; +#28677 = CIRCLE ( 'NONE', #29353, 0.2999999999999999300 ) ; +#28678 = CARTESIAN_POINT ( 'NONE', ( 3.245000000072999900, 0.3292893218813450800, -1.600000000000000300 ) ) ; +#28679 = VECTOR ( 'NONE', #36081, 1000.000000000000000 ) ; +#28680 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24974 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11543, #14669, #34159 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28681 = FILL_AREA_STYLE_COLOUR ( '', #39120 ) ; +#28682 = FACE_OUTER_BOUND ( 'NONE', #22891, .T. ) ; +#28683 = AXIS2_PLACEMENT_3D ( 'NONE', #37372, #24840, #8254 ) ; +#28684 = ORIENTED_EDGE ( 'NONE', *, *, #3412, .T. ) ; +#28685 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#28686 = EDGE_LOOP ( 'NONE', ( #1843, #41798, #1978, #26497 ) ) ; +#28687 = VECTOR ( 'NONE', #17663, 1000.000000000000000 ) ; +#28688 = CARTESIAN_POINT ( 'NONE', ( -3.223156400000000100, -0.2999999999999999900, -1.649999999999999900 ) ) ; +#28690 = STYLED_ITEM ( 'NONE', ( #23454 ), #4517 ) ; +#28689 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21422 ), #36003 ) ; +#28691 = AXIS2_PLACEMENT_3D ( 'NONE', #13788, #293, #35845 ) ; +#28692 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2432, 'distance_accuracy_value', 'NONE'); +#28694 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38144 ), #3268 ) ; +#28693 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36803 ) ) ; +#28695 = VERTEX_POINT ( 'NONE', #34549 ) ; +#28696 = VECTOR ( 'NONE', #21250, 1000.000000000000000 ) ; +#28697 = AXIS2_PLACEMENT_3D ( 'NONE', #8036, #34615, #20678 ) ; +#28698 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#28699 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28700 = SURFACE_STYLE_USAGE ( .BOTH. , #3009 ) ; +#28701 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#28702 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28703 = FILL_AREA_STYLE_COLOUR ( '', #21868 ) ; +#28704 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28705 = CYLINDRICAL_SURFACE ( 'NONE', #10343, 0.2999999999999999300 ) ; +#28706 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#28707 = VERTEX_POINT ( 'NONE', #5741 ) ; +#28708 = VECTOR ( 'NONE', #8666, 1000.000000000000000 ) ; +#28709 = VERTEX_POINT ( 'NONE', #31303 ) ; +#28710 = SURFACE_SIDE_STYLE ('',( #2553 ) ) ; +#28711 = SURFACE_SIDE_STYLE ('',( #22883 ) ) ; +#28712 = ORIENTED_EDGE ( 'NONE', *, *, #35792, .F. ) ; +#28713 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -7.228014483236708400E-016 ) ) ; +#28714 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -5.700000000000000200 ) ) ; +#28715 = ORIENTED_EDGE ( 'NONE', *, *, #20999, .F. ) ; +#28716 = ORIENTED_EDGE ( 'NONE', *, *, #37474, .F. ) ; +#28717 = ORIENTED_EDGE ( 'NONE', *, *, #20868, .T. ) ; +#28718 = PRESENTATION_STYLE_ASSIGNMENT (( #37302 ) ) ; +#28719 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28720 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#28721 = SURFACE_SIDE_STYLE ('',( #17439 ) ) ; +#28722 = PRESENTATION_STYLE_ASSIGNMENT (( #26451 ) ) ; +#28723 = FILL_AREA_STYLE ('',( #35226 ) ) ; +#28724 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#28725 = ORIENTED_EDGE ( 'NONE', *, *, #28729, .F. ) ; +#28726 = DIRECTION ( 'NONE', ( -4.336808689942006700E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#28727 = ORIENTED_EDGE ( 'NONE', *, *, #34009, .F. ) ; +#28728 = VERTEX_POINT ( 'NONE', #15353 ) ; +#28729 = EDGE_CURVE ( 'NONE', #7548, #15113, #32461, .T. ) ; +#28730 = FILL_AREA_STYLE_COLOUR ( '', #38635 ) ; +#28731 = SURFACE_SIDE_STYLE ('',( #21178 ) ) ; +#28732 = FILL_AREA_STYLE ('',( #5851 ) ) ; +#28733 = PLANE ( 'NONE', #34117 ) ; +#28734 = EDGE_CURVE ( 'NONE', #15621, #8471, #10729, .T. ) ; +#28735 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #948 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33733, #27121, #33597 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28736 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#28737 = ORIENTED_EDGE ( 'NONE', *, *, #36670, .F. ) ; +#28738 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24416 ), #21719 ) ; +#28739 = FILL_AREA_STYLE ('',( #28452 ) ) ; +#28740 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#28741 = STYLED_ITEM ( 'NONE', ( #25267 ), #14376 ) ; +#28742 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.3300017452961689900, -6.325000000000000200 ) ) ; +#28743 = SURFACE_STYLE_USAGE ( .BOTH. , #32393 ) ; +#28745 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21762 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32495, #10166, #10305 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28744 = VECTOR ( 'NONE', #40177, 1000.000000000000000 ) ; +#28746 = STYLED_ITEM ( 'NONE', ( #41078 ), #18663 ) ; +#28747 = FILL_AREA_STYLE_COLOUR ( '', #32332 ) ; +#28748 = SURFACE_STYLE_USAGE ( .BOTH. , #6157 ) ; +#28749 = STYLED_ITEM ( 'NONE', ( #2518 ), #29806 ) ; +#28750 = FILL_AREA_STYLE ('',( #6689 ) ) ; +#28751 = EDGE_LOOP ( 'NONE', ( #5749, #32052, #279, #13250 ) ) ; +#28753 = EDGE_CURVE ( 'NONE', #15613, #27130, #7699, .T. ) ; +#28752 = AXIS2_PLACEMENT_3D ( 'NONE', #11748, #18150, #40706 ) ; +#28754 = DIRECTION ( 'NONE', ( -4.336808689942015400E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#28755 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28756 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28757 = LINE ( 'NONE', #8324, #32302 ) ; +#28758 = VERTEX_POINT ( 'NONE', #37796 ) ; +#28759 = CIRCLE ( 'NONE', #12637, 1.200001745296169300 ) ; +#28760 = ORIENTED_EDGE ( 'NONE', *, *, #7037, .T. ) ; +#28761 = VECTOR ( 'NONE', #17477, 1000.000000000000000 ) ; +#28763 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20951 ), #35518 ) ; +#28762 = AXIS2_PLACEMENT_3D ( 'NONE', #27763, #27468, #8382 ) ; +#28764 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28765 = VECTOR ( 'NONE', #31621, 1000.000000000000000 ) ; +#28766 = CONICAL_SURFACE ( 'NONE', #37295, 1.493004880385253400, 0.9597148367210005500 ) ; +#28767 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, -1.399999999999999900 ) ) ; +#28768 = CARTESIAN_POINT ( 'NONE', ( -3.208603896932106900, -0.6500000000000002400, -3.300000000000000300 ) ) ; +#28769 = ORIENTED_EDGE ( 'NONE', *, *, #2684, .T. ) ; +#28770 = SURFACE_STYLE_FILL_AREA ( #13223 ) ; +#28771 = ORIENTED_EDGE ( 'NONE', *, *, #21100, .F. ) ; +#28772 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28773 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #18371, #5498, #37968, #34456 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#28774 = ADVANCED_FACE ( 'NONE', ( #26948 ), #2390, .F. ) ; +#28775 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.548860246407863600E-016 ) ) ; +#28776 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28777 = ORIENTED_EDGE ( 'NONE', *, *, #5085, .F. ) ; +#28778 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, -0.07499999999999999700, 0.4305619708689000200 ) ) ; +#28779 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#28780 = FACE_OUTER_BOUND ( 'NONE', #10953, .T. ) ; +#28781 = DIRECTION ( 'NONE', ( 4.336808689942002000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#28782 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 2.322941965694886000, -1.250000000000000000 ) ) ; +#28783 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28784 = EDGE_CURVE ( 'NONE', #29935, #2658, #29410, .T. ) ; +#28785 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -0.7580972011844129300 ) ) ; +#28786 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#28787 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#28788 = EDGE_CURVE ( 'NONE', #6188, #11596, #9711, .T. ) ; +#28789 = EDGE_LOOP ( 'NONE', ( #17511, #24756 ) ) ; +#28790 = SURFACE_STYLE_USAGE ( .BOTH. , #6200 ) ; +#28791 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 9.035070666963931600E-017, -1.000000000000000000 ) ) ; +#28792 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28793 = ORIENTED_EDGE ( 'NONE', *, *, #9083, .T. ) ; +#28794 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23359 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4094, #4378, #27003 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28795 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28796 = CARTESIAN_POINT ( 'NONE', ( 4.623418435431830200, -0.4099999999999987000, -7.461124800398367000 ) ) ; +#28797 = FACE_OUTER_BOUND ( 'NONE', #35340, .T. ) ; +#28798 = ORIENTED_EDGE ( 'NONE', *, *, #23290, .T. ) ; +#28799 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.845797985667148900, -0.3279248189596167300 ) ) ; +#28800 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28801 = VERTEX_POINT ( 'NONE', #2520 ) ; +#28803 = ADVANCED_FACE ( 'NONE', ( #23397 ), #15066, .F. ) ; +#28802 = VERTEX_POINT ( 'NONE', #9094 ) ; +#28804 = SURFACE_STYLE_FILL_AREA ( #3479 ) ; +#28805 = AXIS2_PLACEMENT_3D ( 'NONE', #32716, #39068, #19765 ) ; +#28806 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4427 ) ) ; +#28807 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31261, 'distance_accuracy_value', 'NONE'); +#28808 = STYLED_ITEM ( 'NONE', ( #18691 ), #6547 ) ; +#28809 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28811 = EDGE_CURVE ( 'NONE', #24666, #20683, #2686, .T. ) ; +#28810 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31778 ) ) ; +#28812 = ORIENTED_EDGE ( 'NONE', *, *, #9716, .T. ) ; +#28813 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#28814 = SURFACE_STYLE_FILL_AREA ( #36269 ) ; +#28815 = CARTESIAN_POINT ( 'NONE', ( 3.115710678161796900, 0.3499999999999998100, -1.620710678165844700 ) ) ; +#28816 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25859 ) ) ; +#28817 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#28818 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9309 ), #30978 ) ; +#28819 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#28820 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28822 = ORIENTED_EDGE ( 'NONE', *, *, #4297, .F. ) ; +#28821 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24583, 'distance_accuracy_value', 'NONE'); +#28823 = SURFACE_STYLE_FILL_AREA ( #38774 ) ; +#28824 = VERTEX_POINT ( 'NONE', #15612 ) ; +#28825 = SURFACE_SIDE_STYLE ('',( #35155 ) ) ; +#28826 = ORIENTED_EDGE ( 'NONE', *, *, #22369, .F. ) ; +#28827 = FILL_AREA_STYLE ('',( #12431 ) ) ; +#28828 = SURFACE_STYLE_FILL_AREA ( #2024 ) ; +#28829 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28830 = SURFACE_STYLE_FILL_AREA ( #18699 ) ; +#28831 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28832 = ORIENTED_EDGE ( 'NONE', *, *, #15282, .F. ) ; +#28833 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.2999999999999999900, -0.2498427124745999900 ) ) ; +#28834 = FILL_AREA_STYLE_COLOUR ( '', #1815 ) ; +#28835 = EDGE_CURVE ( 'NONE', #35378, #9154, #38530, .T. ) ; +#28836 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#28837 = VERTEX_POINT ( 'NONE', #35104 ) ; +#28838 = ORIENTED_EDGE ( 'NONE', *, *, #39653, .F. ) ; +#28839 = SURFACE_SIDE_STYLE ('',( #31331 ) ) ; +#28840 = CARTESIAN_POINT ( 'NONE', ( 3.229623199999999800, 0.2999999999999999900, -1.649999999999999900 ) ) ; +#28841 = EDGE_CURVE ( 'NONE', #22087, #10015, #20886, .T. ) ; +#28842 = SURFACE_SIDE_STYLE ('',( #38136 ) ) ; +#28843 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865475700, 0.7071067811865475700 ) ) ; +#28844 = ORIENTED_EDGE ( 'NONE', *, *, #37933, .F. ) ; +#28845 = EDGE_LOOP ( 'NONE', ( #4492, #18356 ) ) ; +#28846 = ADVANCED_FACE ( 'NONE', ( #12229 ), #38340, .F. ) ; +#28847 = EDGE_CURVE ( 'NONE', #35209, #36866, #21359, .T. ) ; +#28848 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#28849 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11265 ), #30217 ) ; +#28851 = FACE_OUTER_BOUND ( 'NONE', #10992, .T. ) ; +#28850 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28852 = FILL_AREA_STYLE ('',( #32088 ) ) ; +#28853 = SURFACE_SIDE_STYLE ('',( #14381 ) ) ; +#28854 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28855 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#28856 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22379 ) ) ; +#28857 = FACE_OUTER_BOUND ( 'NONE', #11489, .T. ) ; +#28858 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.779999999999868600, -0.2339555568811695400 ) ) ; +#28859 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31832 ), #23170 ) ; +#28860 = SURFACE_SIDE_STYLE ('',( #7391 ) ) ; +#28861 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28862 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #10168, #13714, #492, #36195 ), + .UNSPECIFIED., .F., .T. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.8047378541215365300, 0.8047378541215365300, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#28863 = VERTEX_POINT ( 'NONE', #13039 ) ; +#28866 = EDGE_CURVE ( 'NONE', #23158, #39156, #30930, .T. ) ; +#28865 = SURFACE_SIDE_STYLE ('',( #18108 ) ) ; +#28864 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14741 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24012, #4372, #13993 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28867 = CARTESIAN_POINT ( 'NONE', ( -3.680000000000000200, -1.499998254703818900, -6.699999999999994000 ) ) ; +#28868 = EDGE_LOOP ( 'NONE', ( #13748, #41719, #10120, #761 ) ) ; +#28869 = SURFACE_STYLE_FILL_AREA ( #20373 ) ; +#28870 = AXIS2_PLACEMENT_3D ( 'NONE', #38460, #28736, #25904 ) ; +#28871 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28872 = FILL_AREA_STYLE_COLOUR ( '', #21812 ) ; +#28873 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26737 ), #11292 ) ; +#28874 = LINE ( 'NONE', #13575, #37472 ) ; +#28875 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32156, 'distance_accuracy_value', 'NONE'); +#28876 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31847 ) ) ; +#28877 = ORIENTED_EDGE ( 'NONE', *, *, #26261, .F. ) ; +#28878 = VERTEX_POINT ( 'NONE', #31983 ) ; +#28879 = STYLED_ITEM ( 'NONE', ( #926 ), #7170 ) ; +#28880 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -1.499998254703833500, -5.049999999999993600 ) ) ; +#28881 = ORIENTED_EDGE ( 'NONE', *, *, #32046, .F. ) ; +#28882 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28883 = SURFACE_STYLE_FILL_AREA ( #34999 ) ; +#28884 = ORIENTED_EDGE ( 'NONE', *, *, #31067, .F. ) ; +#28885 = LINE ( 'NONE', #28889, #3128 ) ; +#28886 = CARTESIAN_POINT ( 'NONE', ( 3.365710678118655400, -0.4464466094067257000, -3.300000000000000700 ) ) ; +#28887 = CARTESIAN_POINT ( 'NONE', ( -4.750000000000003600, -0.7099999999999991900, -6.861124800398366500 ) ) ; +#28888 = LINE ( 'NONE', #16378, #3131 ) ; +#28889 = CARTESIAN_POINT ( 'NONE', ( -3.429999999999999700, -1.499998254703818900, -6.699999999999994000 ) ) ; +#28890 = DIRECTION ( 'NONE', ( 0.9961946980917453200, 3.269420623233418300E-015, -0.08715574274766035900 ) ) ; +#28891 = CARTESIAN_POINT ( 'NONE', ( 3.395000000000000000, 0.0000000000000000000, -3.299999999999999800 ) ) ; +#28892 = VECTOR ( 'NONE', #26777, 1000.000000000000000 ) ; +#28893 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.279999999999999600, -0.2000017452961698200 ) ) ; +#28894 = CYLINDRICAL_SURFACE ( 'NONE', #3669, 0.2500000000000000000 ) ; +#28895 = SURFACE_STYLE_USAGE ( .BOTH. , #25280 ) ; +#28896 = PLANE ( 'NONE', #22980 ) ; +#28897 = EDGE_CURVE ( 'NONE', #5853, #24793, #18316, .T. ) ; +#28898 = ORIENTED_EDGE ( 'NONE', *, *, #32069, .F. ) ; +#28899 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.139998254717355900, -5.049996877890552400 ) ) ; +#28900 = VECTOR ( 'NONE', #3787, 1000.000000000000000 ) ; +#28901 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#28902 = EDGE_CURVE ( 'NONE', #18408, #3001, #22829, .T. ) ; +#28903 = ORIENTED_EDGE ( 'NONE', *, *, #30080, .F. ) ; +#28904 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28905 = SURFACE_STYLE_USAGE ( .BOTH. , #298 ) ; +#28906 = VECTOR ( 'NONE', #23840, 1000.000000000000000 ) ; +#28907 = EDGE_CURVE ( 'NONE', #16212, #17640, #26403, .T. ) ; +#28908 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28909 = ORIENTED_EDGE ( 'NONE', *, *, #34864, .T. ) ; +#28910 = AXIS2_PLACEMENT_3D ( 'NONE', #29879, #36258, #26503 ) ; +#28911 = FILL_AREA_STYLE_COLOUR ( '', #15426 ) ; +#28912 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2184 ), #30842 ) ; +#28913 = CARTESIAN_POINT ( 'NONE', ( -2.859829086680000000, 8.593182742395999400, 0.8499999999999999800 ) ) ; +#28914 = EDGE_CURVE ( 'NONE', #27296, #15553, #25870, .T. ) ; +#28915 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#28916 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28917 = VERTEX_POINT ( 'NONE', #19172 ) ; +#28918 = VECTOR ( 'NONE', #28079, 1000.000000000000000 ) ; +#28919 = SURFACE_STYLE_FILL_AREA ( #7751 ) ; +#28920 = ORIENTED_EDGE ( 'NONE', *, *, #16229, .F. ) ; +#28921 = LINE ( 'NONE', #32603, #22857 ) ; +#28922 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#28923 = CARTESIAN_POINT ( 'NONE', ( 2.949999999999999700, -1.380001745296126600, -6.031671842700004200 ) ) ; +#28924 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21724 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3359, #38804, #32871 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28925 = PRESENTATION_STYLE_ASSIGNMENT (( #41380 ) ) ; +#28926 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29742 ), #7268 ) ; +#28927 = PLANE ( 'NONE', #14047 ) ; +#28928 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38393 ), #2438 ) ; +#28929 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28930 = CARTESIAN_POINT ( 'NONE', ( -4.425000000000014000, -1.999998254703822400, -2.550738490052340000 ) ) ; +#28931 = CARTESIAN_POINT ( 'NONE', ( 3.978514051776210100, 0.5300017452961706100, -4.576794919243112300 ) ) ; +#28932 = DIRECTION ( 'NONE', ( -1.548860246407863600E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28934 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22463 ) ) ; +#28933 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#28935 = CIRCLE ( 'NONE', #9027, 0.05000000000000012800 ) ; +#28936 = VERTEX_POINT ( 'NONE', #29003 ) ; +#28937 = FILL_AREA_STYLE_COLOUR ( '', #28154 ) ; +#28939 = SURFACE_STYLE_USAGE ( .BOTH. , #16106 ) ; +#28938 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#28940 = SURFACE_SIDE_STYLE ('',( #40742 ) ) ; +#28941 = ORIENTED_EDGE ( 'NONE', *, *, #2533, .T. ) ; +#28942 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#28943 = FACE_BOUND ( 'NONE', #37746, .T. ) ; +#28944 = VECTOR ( 'NONE', #18299, 1000.000000000000000 ) ; +#28945 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38420, 'distance_accuracy_value', 'NONE'); +#28946 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, -0.6207106781186546600, -3.300000000000000700 ) ) ; +#28947 = VECTOR ( 'NONE', #10115, 1000.000000000000000 ) ; +#28948 = VERTEX_POINT ( 'NONE', #28880 ) ; +#28949 = VERTEX_POINT ( 'NONE', #41861 ) ; +#28950 = VERTEX_POINT ( 'NONE', #22539 ) ; +#28951 = PRESENTATION_STYLE_ASSIGNMENT (( #26453 ) ) ; +#28952 = PRESENTATION_STYLE_ASSIGNMENT (( #11257 ) ) ; +#28953 = ORIENTED_EDGE ( 'NONE', *, *, #9414, .T. ) ; +#28954 = EDGE_CURVE ( 'NONE', #21151, #19142, #12715, .T. ) ; +#28955 = SURFACE_STYLE_USAGE ( .BOTH. , #22354 ) ; +#28956 = LINE ( 'NONE', #2429, #36090 ) ; +#28957 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#28958 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 10.30000000000000100, -1.250000000000000000 ) ) ; +#28959 = ADVANCED_FACE ( 'NONE', ( #17827 ), #29863, .F. ) ; +#28960 = EDGE_CURVE ( 'NONE', #22447, #39846, #40514, .T. ) ; +#28961 = VECTOR ( 'NONE', #12702, 1000.000000000000000 ) ; +#28962 = AXIS2_PLACEMENT_3D ( 'NONE', #40725, #18167, #24820 ) ; +#28963 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28964 = SURFACE_SIDE_STYLE ('',( #21845 ) ) ; +#28965 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, 0.07499999999999998300, -1.399999999963500000 ) ) ; +#28966 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3550 ), #18732 ) ; +#28967 = SURFACE_STYLE_FILL_AREA ( #32297 ) ; +#28968 = AXIS2_PLACEMENT_3D ( 'NONE', #20689, #36892, #30254 ) ; +#28969 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#28970 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.3590461068823618300 ) ) ; +#28971 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165600, -5.075000000000000200 ) ) ; +#28972 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#28973 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#28974 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19557 ), #41185 ) ; +#28976 = STYLED_ITEM ( 'NONE', ( #3247 ), #4794 ) ; +#28975 = STYLED_ITEM ( 'NONE', ( #13128 ), #29424 ) ; +#28977 = SURFACE_SIDE_STYLE ('',( #20485 ) ) ; +#28978 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.730424212713734600, -1.049979056049130000 ) ) ; +#28979 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#28980 = CARTESIAN_POINT ( 'NONE', ( -4.010831726188969900, 0.5300017452961686100, -4.414589803375031700 ) ) ; +#28981 = ORIENTED_EDGE ( 'NONE', *, *, #195, .T. ) ; +#28982 = FILL_AREA_STYLE_COLOUR ( '', #5460 ) ; +#28983 = VECTOR ( 'NONE', #26063, 1000.000000000000000 ) ; +#28985 = EDGE_CURVE ( 'NONE', #35209, #5970, #25404, .T. ) ; +#28984 = AXIS2_PLACEMENT_3D ( 'NONE', #24218, #1367, #8214 ) ; +#28986 = ORIENTED_EDGE ( 'NONE', *, *, #23866, .T. ) ; +#28987 = ORIENTED_EDGE ( 'NONE', *, *, #27364, .T. ) ; +#28989 = ORIENTED_EDGE ( 'NONE', *, *, #1376, .T. ) ; +#28988 = FACE_OUTER_BOUND ( 'NONE', #21717, .T. ) ; +#28990 = VERTEX_POINT ( 'NONE', #16452 ) ; +#28992 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #309 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8856, #15382, #35008 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#28991 = STYLED_ITEM ( 'NONE', ( #17579 ), #25208 ) ; +#28993 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#28994 = PRESENTATION_STYLE_ASSIGNMENT (( #7199 ) ) ; +#28995 = ADVANCED_FACE ( 'NONE', ( #36492 ), #6637, .T. ) ; +#28996 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.779999999999868400, 0.0000000000000000000 ) ) ; +#28997 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#28998 = PRESENTATION_STYLE_ASSIGNMENT (( #36007 ) ) ; +#28999 = SURFACE_SIDE_STYLE ('',( #538 ) ) ; +#29000 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29001 = ADVANCED_FACE ( 'NONE', ( #31427 ), #32823, .F. ) ; +#29002 = VERTEX_POINT ( 'NONE', #23222 ) ; +#29003 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.779999999999868600, -0.2339555568811697600 ) ) ; +#29004 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#29005 = SURFACE_STYLE_USAGE ( .BOTH. , #25660 ) ; +#29006 = EDGE_CURVE ( 'NONE', #31804, #30894, #19811, .T. ) ; +#29007 = FACE_OUTER_BOUND ( 'NONE', #33862, .T. ) ; +#29008 = VERTEX_POINT ( 'NONE', #39305 ) ; +#29009 = CARTESIAN_POINT ( 'NONE', ( 3.179314575050762800, -0.5999999999999997600, -3.250000000000000900 ) ) ; +#29010 = SURFACE_SIDE_STYLE ('',( #15948 ) ) ; +#29011 = EDGE_CURVE ( 'NONE', #34936, #16022, #10656, .T. ) ; +#29012 = FACE_OUTER_BOUND ( 'NONE', #23610, .T. ) ; +#29013 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31994 ) ) ; +#29014 = ORIENTED_EDGE ( 'NONE', *, *, #6885, .T. ) ; +#29015 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29016 = SURFACE_STYLE_USAGE ( .BOTH. , #26362 ) ; +#29018 = PRESENTATION_STYLE_ASSIGNMENT (( #10503 ) ) ; +#29017 = SURFACE_SIDE_STYLE ('',( #32265 ) ) ; +#29019 = ORIENTED_EDGE ( 'NONE', *, *, #19963, .T. ) ; +#29020 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -2.891205793294629500E-014 ) ) ; +#29021 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #11454, #1627, #37032, #2186 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#29023 = VECTOR ( 'NONE', #33100, 1000.000000000000000 ) ; +#29022 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29024 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20997, 'distance_accuracy_value', 'NONE'); +#29025 = EDGE_LOOP ( 'NONE', ( #31490, #26214, #27231, #28712 ) ) ; +#29026 = CIRCLE ( 'NONE', #1746, 0.3600000000000078700 ) ; +#29027 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7362 ) ) ; +#29028 = CARTESIAN_POINT ( 'NONE', ( 3.057233561271454300, 0.2999999999999999900, -0.1687097925925412600 ) ) ; +#29029 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#29030 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#29031 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.499998254703838600, -5.049999999999993600 ) ) ; +#29032 = PLANE ( 'NONE', #36591 ) ; +#29033 = VECTOR ( 'NONE', #28541, 1000.000000000000000 ) ; +#29034 = LINE ( 'NONE', #29553, #21026 ) ; +#29035 = VERTEX_POINT ( 'NONE', #388 ) ; +#29036 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26915 ) ) ; +#29037 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.1000000000000131600, -1.749999999999999800 ) ) ; +#29038 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38499 ) ) ; +#29040 = STYLED_ITEM ( 'NONE', ( #14166 ), #5727 ) ; +#29039 = AXIS2_PLACEMENT_3D ( 'NONE', #34346, #27860, #8473 ) ; +#29041 = VERTEX_POINT ( 'NONE', #13760 ) ; +#29042 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#29043 = LINE ( 'NONE', #22105, #2799 ) ; +#29046 = EDGE_CURVE ( 'NONE', #7821, #532, #8137, .T. ) ; +#29045 = DIRECTION ( 'NONE', ( -3.077917520101935200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#29044 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18264 ) ) ; +#29047 = ADVANCED_FACE ( 'NONE', ( #36976 ), #3865, .F. ) ; +#29048 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -9.035070666963930400E-017 ) ) ; +#29049 = VECTOR ( 'NONE', #11008, 1000.000000000000000 ) ; +#29050 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#29052 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1131 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11027, #20827, #4952 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29051 = AXIS2_PLACEMENT_3D ( 'NONE', #4410, #1211, #37176 ) ; +#29053 = FILL_AREA_STYLE_COLOUR ( '', #37570 ) ; +#29054 = EDGE_LOOP ( 'NONE', ( #24164, #41667, #14297, #41438, #19208, #41182 ) ) ; +#29055 = SURFACE_SIDE_STYLE ('',( #14316 ) ) ; +#29056 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 9.035070666963931600E-017 ) ) ; +#29057 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29058 = PRESENTATION_STYLE_ASSIGNMENT (( #7629 ) ) ; +#29059 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29060 = ORIENTED_EDGE ( 'NONE', *, *, #17564, .T. ) ; +#29061 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#29062 = SURFACE_SIDE_STYLE ('',( #9822 ) ) ; +#29063 = CARTESIAN_POINT ( 'NONE', ( 3.125752552834336000, 0.2999999999999999900, 0.9874606594871943000 ) ) ; +#29064 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29065 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29066 = ORIENTED_EDGE ( 'NONE', *, *, #418, .T. ) ; +#29067 = VERTEX_POINT ( 'NONE', #36634 ) ; +#29068 = EDGE_LOOP ( 'NONE', ( #29780, #14533, #14671, #22205, #1819 ) ) ; +#29069 = VECTOR ( 'NONE', #324, 1000.000000000000000 ) ; +#29071 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29070 = LINE ( 'NONE', #31126, #36663 ) ; +#29072 = PRESENTATION_STYLE_ASSIGNMENT (( #38216 ) ) ; +#29073 = SURFACE_STYLE_FILL_AREA ( #31770 ) ; +#29074 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#29075 = ORIENTED_EDGE ( 'NONE', *, *, #10266, .F. ) ; +#29076 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29077 = FACE_OUTER_BOUND ( 'NONE', #38251, .T. ) ; +#29078 = EDGE_CURVE ( 'NONE', #33744, #16022, #27365, .T. ) ; +#29080 = PLANE ( 'NONE', #38572 ) ; +#29079 = FILL_AREA_STYLE ('',( #35323 ) ) ; +#29081 = VECTOR ( 'NONE', #15145, 1000.000000000000000 ) ; +#29082 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#29083 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29084 = DIRECTION ( 'NONE', ( -1.355252715606880500E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#29085 = EDGE_LOOP ( 'NONE', ( #18306, #11233, #38888, #12733, #25224, #29841, #18812, #19818 ) ) ; +#29086 = EDGE_CURVE ( 'NONE', #24138, #39127, #35438, .T. ) ; +#29087 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29088 = CIRCLE ( 'NONE', #4163, 1.499999999999867700 ) ; +#29089 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37763 ), #23161 ) ; +#29090 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4597, 'distance_accuracy_value', 'NONE'); +#29091 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13957 ), #21850 ) ; +#29092 = VECTOR ( 'NONE', #35629, 1000.000000000000000 ) ; +#29093 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#29094 = CARTESIAN_POINT ( 'NONE', ( -3.127842712478368100, -0.2999999999999999900, -1.600000000004101700 ) ) ; +#29095 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#29096 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5288 ), #13137 ) ; +#29097 = VECTOR ( 'NONE', #5590, 1000.000000000000000 ) ; +#29098 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#29100 = EDGE_CURVE ( 'NONE', #28591, #32397, #18793, .T. ) ; +#29099 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15339 ), #18868 ) ; +#29101 = CARTESIAN_POINT ( 'NONE', ( 2.859829086680000000, 0.2000000000000001500, 1.149999999999999900 ) ) ; +#29102 = ORIENTED_EDGE ( 'NONE', *, *, #3091, .T. ) ; +#29103 = ORIENTED_EDGE ( 'NONE', *, *, #19229, .F. ) ; +#29104 = EDGE_LOOP ( 'NONE', ( #26028, #1778, #30956, #4884 ) ) ; +#29105 = FILL_AREA_STYLE ('',( #22499 ) ) ; +#29107 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #222 ) ) ; +#29106 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35623 ), #30798 ) ; +#29109 = CYLINDRICAL_SURFACE ( 'NONE', #9044, 0.05000000000000056500 ) ; +#29108 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23185 ), #18879 ) ; +#29110 = LINE ( 'NONE', #40107, #20582 ) ; +#29111 = FILL_AREA_STYLE_COLOUR ( '', #265 ) ; +#29112 = ORIENTED_EDGE ( 'NONE', *, *, #165, .F. ) ; +#29113 = AXIS2_PLACEMENT_3D ( 'NONE', #29777, #741, #3367 ) ; +#29114 = SURFACE_STYLE_USAGE ( .BOTH. , #13417 ) ; +#29115 = CARTESIAN_POINT ( 'NONE', ( 2.859829086680000000, 8.593182742395999400, 0.8499999999999999800 ) ) ; +#29116 = SURFACE_STYLE_FILL_AREA ( #6008 ) ; +#29117 = VERTEX_POINT ( 'NONE', #24217 ) ; +#29118 = CIRCLE ( 'NONE', #18633, 1.499999999999868100 ) ; +#29119 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#29120 = SURFACE_SIDE_STYLE ('',( #28076 ) ) ; +#29121 = SURFACE_STYLE_USAGE ( .BOTH. , #38717 ) ; +#29122 = FILL_AREA_STYLE_COLOUR ( '', #33055 ) ; +#29123 = SURFACE_STYLE_USAGE ( .BOTH. , #39139 ) ; +#29124 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.949998254703822800, -3.632287565553229400 ) ) ; +#29125 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#29126 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#29127 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29128 = LINE ( 'NONE', #17893, #11929 ) ; +#29129 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#29130 = ORIENTED_EDGE ( 'NONE', *, *, #25822, .F. ) ; +#29131 = SURFACE_STYLE_FILL_AREA ( #11302 ) ; +#29132 = EDGE_CURVE ( 'NONE', #439, #5272, #21851, .T. ) ; +#29133 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6660, 'distance_accuracy_value', 'NONE'); +#29134 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -0.2000017452961698200 ) ) ; +#29135 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29136 = EDGE_CURVE ( 'NONE', #2503, #1402, #27865, .T. ) ; +#29137 = VECTOR ( 'NONE', #39520, 1000.000000000000000 ) ; +#29138 = EDGE_CURVE ( 'NONE', #3342, #19551, #32908, .T. ) ; +#29139 = ORIENTED_EDGE ( 'NONE', *, *, #18297, .T. ) ; +#29140 = ORIENTED_EDGE ( 'NONE', *, *, #15258, .T. ) ; +#29141 = CIRCLE ( 'NONE', #30294, 0.3000000000000003800 ) ; +#29142 = SURFACE_STYLE_USAGE ( .BOTH. , #22943 ) ; +#29143 = ORIENTED_EDGE ( 'NONE', *, *, #25795, .T. ) ; +#29144 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#29145 = CIRCLE ( 'NONE', #24508, 0.3600000000000078700 ) ; +#29146 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14807 ) ) ; +#29147 = VECTOR ( 'NONE', #17596, 1000.000000000000000 ) ; +#29148 = VECTOR ( 'NONE', #30881, 1000.000000000000000 ) ; +#29149 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.499998254703828600, -5.449999999999994000 ) ) ; +#29150 = EDGE_CURVE ( 'NONE', #8816, #28278, #9138, .T. ) ; +#29151 = VECTOR ( 'NONE', #21340, 1000.000000000000000 ) ; +#29152 = PRESENTATION_STYLE_ASSIGNMENT (( #15751 ) ) ; +#29153 = LINE ( 'NONE', #5861, #28159 ) ; +#29154 = ORIENTED_EDGE ( 'NONE', *, *, #41635, .F. ) ; +#29155 = ORIENTED_EDGE ( 'NONE', *, *, #7860, .F. ) ; +#29156 = STYLED_ITEM ( 'NONE', ( #6203 ), #21278 ) ; +#29157 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9409 ), #30538 ) ; +#29158 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29159 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29162 = EDGE_CURVE ( 'NONE', #41815, #4330, #20843, .T. ) ; +#29161 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35709 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17708, #8328, #18116 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29160 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29163 = CARTESIAN_POINT ( 'NONE', ( 3.087224213888228000, 0.5744544073017029400, -1.904244904675834100 ) ) ; +#29164 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#29165 = CIRCLE ( 'NONE', #15224, 1.499999999999867700 ) ; +#29166 = SURFACE_STYLE_USAGE ( .BOTH. , #6572 ) ; +#29167 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#29168 = VECTOR ( 'NONE', #24064, 1000.000000000000000 ) ; +#29169 = ADVANCED_FACE ( 'NONE', ( #4639 ), #26364, .T. ) ; +#29171 = AXIS2_PLACEMENT_3D ( 'NONE', #5744, #22275, #27886 ) ; +#29170 = STYLED_ITEM ( 'NONE', ( #39133 ), #28228 ) ; +#29172 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29173 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29174 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14049 ), #23495 ) ; +#29175 = CARTESIAN_POINT ( 'NONE', ( 3.002212133807256500, -0.3499279245778491600, -1.299927924577849000 ) ) ; +#29176 = AXIS2_PLACEMENT_3D ( 'NONE', #18172, #39740, #11774 ) ; +#29177 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29178 = CLOSED_SHELL ( 'NONE', ( #23961, #12280, #21907, #19457, #7046, #9505 ) ) ; +#29179 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29180 = LINE ( 'NONE', #21440, #9943 ) ; +#29182 = AXIS2_PLACEMENT_3D ( 'NONE', #30290, #23653, #30144 ) ; +#29181 = SURFACE_STYLE_USAGE ( .BOTH. , #16344 ) ; +#29183 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#29184 = ORIENTED_EDGE ( 'NONE', *, *, #1121, .T. ) ; +#29185 = VECTOR ( 'NONE', #25626, 1000.000000000000000 ) ; +#29186 = PLANE ( 'NONE', #21305 ) ; +#29187 = SURFACE_STYLE_FILL_AREA ( #8607 ) ; +#29188 = FILL_AREA_STYLE ('',( #13219 ) ) ; +#29189 = ORIENTED_EDGE ( 'NONE', *, *, #29377, .F. ) ; +#29190 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#29191 = VERTEX_POINT ( 'NONE', #23787 ) ; +#29192 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29193 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.4300017452961689100, -5.250000000000000000 ) ) ; +#29194 = ORIENTED_EDGE ( 'NONE', *, *, #21115, .T. ) ; +#29195 = FACE_OUTER_BOUND ( 'NONE', #5662, .T. ) ; +#29196 = FACE_OUTER_BOUND ( 'NONE', #34394, .T. ) ; +#29197 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29198 = FACE_OUTER_BOUND ( 'NONE', #40445, .T. ) ; +#29199 = VECTOR ( 'NONE', #908, 1000.000000000000000 ) ; +#29200 = SURFACE_STYLE_USAGE ( .BOTH. , #6604 ) ; +#29201 = ORIENTED_EDGE ( 'NONE', *, *, #28344, .T. ) ; +#29202 = SURFACE_SIDE_STYLE ('',( #38584 ) ) ; +#29203 = FACE_OUTER_BOUND ( 'NONE', #33878, .T. ) ; +#29204 = VERTEX_POINT ( 'NONE', #33667 ) ; +#29205 = EDGE_LOOP ( 'NONE', ( #13847, #7293, #36958 ) ) ; +#29206 = SURFACE_STYLE_USAGE ( .BOTH. , #3912 ) ; +#29207 = FILL_AREA_STYLE ('',( #13371 ) ) ; +#29208 = ORIENTED_EDGE ( 'NONE', *, *, #8059, .F. ) ; +#29209 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29210 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -7.228014483236709400E-016 ) ) ; +#29211 = ADVANCED_FACE ( 'NONE', ( #25367 ), #33895, .T. ) ; +#29212 = EDGE_CURVE ( 'NONE', #27559, #4330, #1584, .T. ) ; +#29213 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.380001745296130600, -6.031671842700004200 ) ) ; +#29214 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#29215 = EDGE_CURVE ( 'NONE', #25684, #27389, #31384, .T. ) ; +#29216 = FILL_AREA_STYLE_COLOUR ( '', #11989 ) ; +#29218 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33315, 'distance_accuracy_value', 'NONE'); +#29217 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29219 = STYLED_ITEM ( 'NONE', ( #30008 ), #22305 ) ; +#29220 = VERTEX_POINT ( 'NONE', #21129 ) ; +#29221 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29222 = ADVANCED_FACE ( 'NONE', ( #18277 ), #40440, .T. ) ; +#29223 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13248 ), #9724 ) ; +#29224 = ORIENTED_EDGE ( 'NONE', *, *, #18265, .F. ) ; +#29225 = STYLED_ITEM ( 'NONE', ( #30462 ), #1 ) ; +#29226 = CARTESIAN_POINT ( 'NONE', ( -4.010831726188969900, 0.7300017452961685700, -14.55000000000000100 ) ) ; +#29227 = AXIS2_PLACEMENT_3D ( 'NONE', #32075, #32358, #41533 ) ; +#29228 = ORIENTED_EDGE ( 'NONE', *, *, #5583, .T. ) ; +#29229 = ORIENTED_EDGE ( 'NONE', *, *, #30449, .T. ) ; +#29230 = VERTEX_POINT ( 'NONE', #11614 ) ; +#29232 = AXIS2_PLACEMENT_3D ( 'NONE', #23558, #27362, #26827 ) ; +#29231 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24032 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29292, #26058, #25921 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29233 = VECTOR ( 'NONE', #3194, 1000.000000000000000 ) ; +#29235 = EDGE_CURVE ( 'NONE', #27845, #24991, #31856, .T. ) ; +#29234 = AXIS2_PLACEMENT_3D ( 'NONE', #12361, #37801, #24984 ) ; +#29236 = ORIENTED_EDGE ( 'NONE', *, *, #35653, .T. ) ; +#29237 = ORIENTED_EDGE ( 'NONE', *, *, #39064, .T. ) ; +#29238 = VERTEX_POINT ( 'NONE', #14606 ) ; +#29239 = LINE ( 'NONE', #2361, #36357 ) ; +#29240 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25743 ) ) ; +#29241 = FILL_AREA_STYLE_COLOUR ( '', #40545 ) ; +#29242 = CARTESIAN_POINT ( 'NONE', ( -3.000850974922843600, 0.3499999999999999800, -1.462852137532129900 ) ) ; +#29243 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7006 ), #29467 ) ; +#29244 = ORIENTED_EDGE ( 'NONE', *, *, #25046, .F. ) ; +#29245 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#29246 = FILL_AREA_STYLE ('',( #10447 ) ) ; +#29247 = SURFACE_STYLE_FILL_AREA ( #17014 ) ; +#29248 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29249 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29250 = PLANE ( 'NONE', #29673 ) ; +#29251 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29252 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29253 = ADVANCED_FACE ( 'NONE', ( #27324 ), #30836, .T. ) ; +#29254 = SURFACE_STYLE_FILL_AREA ( #14710 ) ; +#29255 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.499998254703822000, -5.049999999999993600 ) ) ; +#29256 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#29257 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#29258 = ORIENTED_EDGE ( 'NONE', *, *, #21274, .F. ) ; +#29259 = CARTESIAN_POINT ( 'NONE', ( 3.098553390638077800, -0.3499999999999999200, -1.650000000053452700 ) ) ; +#29260 = CIRCLE ( 'NONE', #35241, 1.499999999999867700 ) ; +#29261 = EDGE_CURVE ( 'NONE', #8814, #7741, #15222, .T. ) ; +#29262 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#29263 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41424, 'distance_accuracy_value', 'NONE'); +#29264 = ORIENTED_EDGE ( 'NONE', *, *, #2836, .F. ) ; +#29265 = SURFACE_SIDE_STYLE ('',( #21215 ) ) ; +#29266 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29267 = PLANE ( 'NONE', #7300 ) ; +#29268 = LINE ( 'NONE', #19489, #15152 ) ; +#29269 = EDGE_CURVE ( 'NONE', #1016, #12635, #32375, .T. ) ; +#29270 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9775 ), #3298 ) ; +#29271 = VECTOR ( 'NONE', #4391, 1000.000000000000000 ) ; +#29272 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#29273 = ORIENTED_EDGE ( 'NONE', *, *, #4234, .F. ) ; +#29274 = VERTEX_POINT ( 'NONE', #21546 ) ; +#29275 = ORIENTED_EDGE ( 'NONE', *, *, #15627, .T. ) ; +#29276 = LINE ( 'NONE', #8377, #38880 ) ; +#29277 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29278 = AXIS2_PLACEMENT_3D ( 'NONE', #20022, #3879, #26638 ) ; +#29279 = FILL_AREA_STYLE ('',( #19582 ) ) ; +#29280 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29281 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16505, 'distance_accuracy_value', 'NONE'); +#29282 = ORIENTED_EDGE ( 'NONE', *, *, #39907, .T. ) ; +#29283 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33632 ) ) ; +#29284 = AXIS2_PLACEMENT_3D ( 'NONE', #7723, #4627, #36542 ) ; +#29285 = LINE ( 'NONE', #14657, #15170 ) ; +#29286 = FILL_AREA_STYLE_COLOUR ( '', #14642 ) ; +#29287 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#29288 = PRESENTATION_STYLE_ASSIGNMENT (( #11602 ) ) ; +#29290 = STYLED_ITEM ( 'NONE', ( #13615 ), #5771 ) ; +#29289 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40109 ) ) ; +#29291 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29292 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29294 = EDGE_CURVE ( 'NONE', #12866, #23515, #39944, .T. ) ; +#29293 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8857 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36045, #16271, #39255 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29295 = PLANE ( 'NONE', #2810 ) ; +#29296 = SURFACE_STYLE_FILL_AREA ( #27978 ) ; +#29298 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32340 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23723, #7746, #17236 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29297 = AXIS2_PLACEMENT_3D ( 'NONE', #5573, #38319, #41022 ) ; +#29299 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29300 = ORIENTED_EDGE ( 'NONE', *, *, #8609, .F. ) ; +#29301 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29302 = CARTESIAN_POINT ( 'NONE', ( 3.222419591704825900, -0.07499999999999998300, -0.1010820160044723900 ) ) ; +#29303 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#29304 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.2999999999999848300, -4.249999999999998200 ) ) ; +#29305 = FILL_AREA_STYLE ('',( #3881 ) ) ; +#29306 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #14090, #7711, #33571, #34122, #33981, #5164, #2104, #14641, #27776, #37228 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 2, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000002200, 0.6250000000000012200, 0.7500000000000021100, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#29307 = ORIENTED_EDGE ( 'NONE', *, *, #32618, .F. ) ; +#29308 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#29309 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#29310 = LINE ( 'NONE', #23189, #559 ) ; +#29311 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29312 = CLOSED_SHELL ( 'NONE', ( #5256, #24517, #41265, #38994, #14798, #499 ) ) ; +#29313 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#29314 = PRESENTATION_STYLE_ASSIGNMENT (( #2422 ) ) ; +#29315 = ORIENTED_EDGE ( 'NONE', *, *, #10012, .T. ) ; +#29316 = EDGE_LOOP ( 'NONE', ( #10217, #37831, #4618, #21801 ) ) ; +#29317 = FACE_OUTER_BOUND ( 'NONE', #25658, .T. ) ; +#29318 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#29319 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29320 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28085, 'distance_accuracy_value', 'NONE'); +#29321 = SURFACE_STYLE_USAGE ( .BOTH. , #8825 ) ; +#29322 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.499998254703826200, -6.699999999999994000 ) ) ; +#29323 = ORIENTED_EDGE ( 'NONE', *, *, #371, .F. ) ; +#29324 = EDGE_CURVE ( 'NONE', #24480, #33802, #18755, .T. ) ; +#29325 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.5199999999999849200, -5.200000000000000200 ) ) ; +#29326 = LINE ( 'NONE', #4064, #9088 ) ; +#29327 = FACE_OUTER_BOUND ( 'NONE', #6221, .T. ) ; +#29328 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -2.031000000000000600, -3.204459358809383500 ) ) ; +#29329 = LINE ( 'NONE', #17007, #18270 ) ; +#29330 = EDGE_CURVE ( 'NONE', #10963, #28802, #14209, .T. ) ; +#29331 = FILL_AREA_STYLE ('',( #3504 ) ) ; +#29332 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29333 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#29334 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9832 ) ) ; +#29335 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16542, 'distance_accuracy_value', 'NONE'); +#29336 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.480001745296170000, -0.2339555568811697600 ) ) ; +#29337 = VERTEX_POINT ( 'NONE', #5129 ) ; +#29338 = DIRECTION ( 'NONE', ( -3.500089107433268500E-011, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#29339 = FILL_AREA_STYLE_COLOUR ( '', #25327 ) ; +#29340 = LINE ( 'NONE', #17944, #11676 ) ; +#29341 = AXIS2_PLACEMENT_3D ( 'NONE', #19451, #38767, #22825 ) ; +#29342 = ORIENTED_EDGE ( 'NONE', *, *, #21085, .F. ) ; +#29343 = ORIENTED_EDGE ( 'NONE', *, *, #6690, .T. ) ; +#29344 = SURFACE_STYLE_FILL_AREA ( #23476 ) ; +#29345 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11216 ), #39369 ) ; +#29346 = SURFACE_STYLE_USAGE ( .BOTH. , #35877 ) ; +#29347 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29348 = EDGE_CURVE ( 'NONE', #546, #24627, #35926, .T. ) ; +#29349 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29350 = ORIENTED_EDGE ( 'NONE', *, *, #3730, .T. ) ; +#29351 = ORIENTED_EDGE ( 'NONE', *, *, #19571, .T. ) ; +#29353 = AXIS2_PLACEMENT_3D ( 'NONE', #34749, #11848, #34192 ) ; +#29352 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19529 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31745, #12514, #38368 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29354 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29355 = AXIS2_PLACEMENT_3D ( 'NONE', #3102, #9136, #41619 ) ; +#29356 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29357 = ORIENTED_EDGE ( 'NONE', *, *, #12127, .T. ) ; +#29358 = ORIENTED_EDGE ( 'NONE', *, *, #32993, .T. ) ; +#29359 = PRESENTATION_STYLE_ASSIGNMENT (( #28743 ) ) ; +#29360 = FILL_AREA_STYLE ('',( #26140 ) ) ; +#29361 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29362 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#29363 = CARTESIAN_POINT ( 'NONE', ( -3.115710678122791700, -0.3500000000000000300, -1.620710678123180600 ) ) ; +#29364 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#29365 = ADVANCED_FACE ( 'NONE', ( #23805 ), #8492, .T. ) ; +#29366 = PRESENTATION_STYLE_ASSIGNMENT (( #15244 ) ) ; +#29367 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29368 = VERTEX_POINT ( 'NONE', #34782 ) ; +#29369 = SURFACE_STYLE_USAGE ( .BOTH. , #482 ) ; +#29370 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998526700, -1.949999999999999500 ) ) ; +#29371 = PLANE ( 'NONE', #13584 ) ; +#29372 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 1.468654402296581600E-014, -2.095470210943120000 ) ) ; +#29373 = EDGE_CURVE ( 'NONE', #2418, #6202, #11135, .T. ) ; +#29374 = ORIENTED_EDGE ( 'NONE', *, *, #29865, .T. ) ; +#29375 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29376 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.3699999999999849000, -5.200000000000000200 ) ) ; +#29377 = EDGE_CURVE ( 'NONE', #7908, #25314, #19242, .T. ) ; +#29378 = SURFACE_SIDE_STYLE ('',( #9862 ) ) ; +#29380 = VECTOR ( 'NONE', #19693, 1000.000000000000000 ) ; +#29379 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.07499999999999998300, 0.6780706550913999700 ) ) ; +#29381 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1077, 'distance_accuracy_value', 'NONE'); +#29382 = VECTOR ( 'NONE', #15563, 1000.000000000000000 ) ; +#29383 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29384 = ORIENTED_EDGE ( 'NONE', *, *, #33672, .F. ) ; +#29385 = PLANE ( 'NONE', #6589 ) ; +#29386 = EDGE_CURVE ( 'NONE', #26961, #11093, #20264, .T. ) ; +#29387 = VECTOR ( 'NONE', #13299, 1000.000000000000000 ) ; +#29388 = AXIS2_PLACEMENT_3D ( 'NONE', #25420, #18917, #8852 ) ; +#29389 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29390 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29391 = SURFACE_SIDE_STYLE ('',( #25503 ) ) ; +#29392 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#29393 = EDGE_LOOP ( 'NONE', ( #14241, #20506, #30677, #29189 ) ) ; +#29394 = CARTESIAN_POINT ( 'NONE', ( 2.995000000000000100, -0.3499999999999999800, -1.399999999991250200 ) ) ; +#29395 = SURFACE_STYLE_FILL_AREA ( #24433 ) ; +#29396 = ORIENTED_EDGE ( 'NONE', *, *, #31258, .T. ) ; +#29397 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2119 ) ) ; +#29398 = TOROIDAL_SURFACE ( 'NONE', #5873, 1.350424214906978700, 0.1000000000000002800 ) ; +#29399 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.380001745296165500, -1.749999999999998900 ) ) ; +#29400 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29401 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22135 ) ) ; +#29402 = VECTOR ( 'NONE', #2069, 1000.000000000000000 ) ; +#29403 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29404 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29407 = EDGE_CURVE ( 'NONE', #38000, #14378, #10612, .T. ) ; +#29406 = SURFACE_SIDE_STYLE ('',( #31697 ) ) ; +#29405 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25127 ), #19427 ) ; +#29408 = ADVANCED_FACE ( 'NONE', ( #3063 ), #19735, .T. ) ; +#29409 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#29410 = LINE ( 'NONE', #31444, #6216 ) ; +#29411 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20400, 'distance_accuracy_value', 'NONE'); +#29413 = AXIS2_PLACEMENT_3D ( 'NONE', #7158, #26398, #13526 ) ; +#29412 = AXIS2_PLACEMENT_3D ( 'NONE', #16711, #16305, #13029 ) ; +#29414 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29415 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12605 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22396, #3184, #35389 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29416 = VERTEX_POINT ( 'NONE', #5690 ) ; +#29417 = CYLINDRICAL_SURFACE ( 'NONE', #41364, 0.09999999999987406500 ) ; +#29418 = AXIS2_PLACEMENT_3D ( 'NONE', #13774, #35967, #26207 ) ; +#29419 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13386, 'distance_accuracy_value', 'NONE'); +#29420 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21370 ) ) ; +#29421 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#29422 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000003200, 0.2800017452961687200, -6.200000000000001100 ) ) ; +#29423 = ORIENTED_EDGE ( 'NONE', *, *, #18364, .F. ) ; +#29424 = ADVANCED_FACE ( 'NONE', ( #5564 ), #25345, .T. ) ; +#29425 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, 2.322941965694886000, -1.250000000000000000 ) ) ; +#29426 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29427 = EDGE_LOOP ( 'NONE', ( #18158, #12172, #29514, #39686, #17401, #31387, #27391, #35576, #10087 ) ) ; +#29428 = VECTOR ( 'NONE', #4052, 1000.000000000000000 ) ; +#29429 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#29430 = EDGE_LOOP ( 'NONE', ( #12610, #32767, #13491, #13063 ) ) ; +#29431 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.480001745296169800, 0.0000000000000000000 ) ) ; +#29432 = CARTESIAN_POINT ( 'NONE', ( 2.400000000000000400, -1.380001745296128200, -4.781671842700004200 ) ) ; +#29433 = VERTEX_POINT ( 'NONE', #12165 ) ; +#29434 = FILL_AREA_STYLE ('',( #13197 ) ) ; +#29435 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29436 = CARTESIAN_POINT ( 'NONE', ( 3.178032631759748000, 0.5251342645287879800, -1.855131874324920800 ) ) ; +#29437 = FILL_AREA_STYLE ('',( #22690 ) ) ; +#29438 = ORIENTED_EDGE ( 'NONE', *, *, #21115, .F. ) ; +#29439 = SURFACE_STYLE_FILL_AREA ( #29648 ) ; +#29440 = ORIENTED_EDGE ( 'NONE', *, *, #12244, .F. ) ; +#29441 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29442 = VECTOR ( 'NONE', #29093, 1000.000000000000000 ) ; +#29443 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.4300017452961684700, -7.500000000000000000 ) ) ; +#29445 = VECTOR ( 'NONE', #8597, 1000.000000000000000 ) ; +#29444 = SURFACE_STYLE_USAGE ( .BOTH. , #6985 ) ; +#29446 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#29447 = CARTESIAN_POINT ( 'NONE', ( 3.045000000000000400, -0.3133029683772801100, -1.263302968377279800 ) ) ; +#29448 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29449 = EDGE_CURVE ( 'NONE', #22882, #20486, #27820, .T. ) ; +#29450 = CARTESIAN_POINT ( 'NONE', ( 4.010831726188969900, 0.5300017452961703900, -14.55000000000000100 ) ) ; +#29451 = CARTESIAN_POINT ( 'NONE', ( -3.178333333333030400, -0.2999999999999999900, -0.06128090415829449300 ) ) ; +#29452 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6763 ), #11101 ) ; +#29453 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#29454 = SURFACE_STYLE_USAGE ( .BOTH. , #23529 ) ; +#29455 = EDGE_CURVE ( 'NONE', #30186, #21151, #21771, .T. ) ; +#29456 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.008560160451628400E-016, 1.000000000000000000 ) ) ; +#29457 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.499998254703829500, -6.299999999999993600 ) ) ; +#29458 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15679 ) ) ; +#29459 = ADVANCED_FACE ( 'NONE', ( #35890 ), #2759, .F. ) ; +#29460 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.5300017452961690600, -4.099999999999998800 ) ) ; +#29461 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.779999999999868600, -0.2339555568811697600 ) ) ; +#29462 = CARTESIAN_POINT ( 'NONE', ( 1.649999999999999900, -1.499998254703824400, -6.299999999999993600 ) ) ; +#29463 = ORIENTED_EDGE ( 'NONE', *, *, #11868, .F. ) ; +#29464 = STYLED_ITEM ( 'NONE', ( #22836 ), #12909 ) ; +#29465 = FILL_AREA_STYLE_COLOUR ( '', #24419 ) ; +#29466 = ORIENTED_EDGE ( 'NONE', *, *, #4635, .T. ) ; +#29468 = EDGE_CURVE ( 'NONE', #24208, #6906, #37412, .T. ) ; +#29467 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38954 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20179, #23400, #7278 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29469 = ORIENTED_EDGE ( 'NONE', *, *, #27422, .T. ) ; +#29470 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#29471 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21077, 'distance_accuracy_value', 'NONE'); +#29472 = VECTOR ( 'NONE', #6338, 1000.000000000000200 ) ; +#29473 = ORIENTED_EDGE ( 'NONE', *, *, #35816, .T. ) ; +#29474 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#29475 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29476 = ORIENTED_EDGE ( 'NONE', *, *, #33948, .T. ) ; +#29478 = ORIENTED_EDGE ( 'NONE', *, *, #5293, .F. ) ; +#29477 = PRESENTATION_STYLE_ASSIGNMENT (( #22699 ) ) ; +#29479 = ORIENTED_EDGE ( 'NONE', *, *, #1818, .F. ) ; +#29480 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29481 = SURFACE_STYLE_FILL_AREA ( #7072 ) ; +#29483 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9970 ), #20311 ) ; +#29482 = STYLED_ITEM ( 'NONE', ( #37455 ), #29169 ) ; +#29484 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29485 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#29487 = AXIS2_PLACEMENT_3D ( 'NONE', #40300, #11499, #33837 ) ; +#29486 = STYLED_ITEM ( 'NONE', ( #18744 ), #34119 ) ; +#29488 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29489 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#29490 = FILL_AREA_STYLE ('',( #6740 ) ) ; +#29491 = SURFACE_STYLE_FILL_AREA ( #16249 ) ; +#29492 = SURFACE_STYLE_FILL_AREA ( #8613 ) ; +#29493 = FILL_AREA_STYLE ('',( #19656 ) ) ; +#29494 = ORIENTED_EDGE ( 'NONE', *, *, #22735, .F. ) ; +#29495 = VECTOR ( 'NONE', #41385, 1000.000000000000000 ) ; +#29496 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -2.299999999999999400 ) ) ; +#29497 = AXIS2_PLACEMENT_3D ( 'NONE', #28566, #9184, #31810 ) ; +#29498 = VECTOR ( 'NONE', #15430, 1000.000000000000000 ) ; +#29499 = VECTOR ( 'NONE', #968, 1000.000000000000000 ) ; +#29500 = CARTESIAN_POINT ( 'NONE', ( 3.680000000000000200, -1.139998254717349300, -6.299996877890552400 ) ) ; +#29501 = PRESENTATION_STYLE_ASSIGNMENT (( #9163 ) ) ; +#29502 = PLANE ( 'NONE', #9961 ) ; +#29503 = VECTOR ( 'NONE', #17353, 1000.000000000000000 ) ; +#29504 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#29505 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29506 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29507 = CYLINDRICAL_SURFACE ( 'NONE', #28366, 0.2000000000000000900 ) ; +#29508 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29509 = FACE_OUTER_BOUND ( 'NONE', #14540, .T. ) ; +#29510 = ORIENTED_EDGE ( 'NONE', *, *, #24566, .T. ) ; +#29511 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29512 = ORIENTED_EDGE ( 'NONE', *, *, #36525, .T. ) ; +#29513 = EDGE_CURVE ( 'NONE', #2503, #19746, #1546, .T. ) ; +#29514 = ORIENTED_EDGE ( 'NONE', *, *, #11815, .F. ) ; +#29516 = ORIENTED_EDGE ( 'NONE', *, *, #16165, .F. ) ; +#29515 = VECTOR ( 'NONE', #26594, 1000.000000000000000 ) ; +#29517 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29518 = ORIENTED_EDGE ( 'NONE', *, *, #21331, .F. ) ; +#29519 = CYLINDRICAL_SURFACE ( 'NONE', #2305, 0.09999999999999999200 ) ; +#29520 = SURFACE_SIDE_STYLE ('',( #22037 ) ) ; +#29521 = EDGE_CURVE ( 'NONE', #11564, #10015, #26276, .T. ) ; +#29522 = STYLED_ITEM ( 'NONE', ( #433 ), #9951 ) ; +#29523 = SURFACE_STYLE_FILL_AREA ( #17357 ) ; +#29524 = LINE ( 'NONE', #26301, #27505 ) ; +#29525 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid25', #17986 ) ; +#29526 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#29527 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#29528 = SURFACE_STYLE_USAGE ( .BOTH. , #9747 ) ; +#29529 = CIRCLE ( 'NONE', #26930, 0.3000000000000007700 ) ; +#29530 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18078 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17934, #34298, #8574 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29531 = LINE ( 'NONE', #20849, #14870 ) ; +#29532 = STYLED_ITEM ( 'NONE', ( #20196 ), #14344 ) ; +#29533 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#29534 = ORIENTED_EDGE ( 'NONE', *, *, #25997, .F. ) ; +#29535 = CARTESIAN_POINT ( 'NONE', ( 3.475000000000000100, 1.630001745296169000, -4.000000000000000000 ) ) ; +#29536 = FILL_AREA_STYLE ('',( #26020 ) ) ; +#29537 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20466 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29375, #22902, #3553 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29538 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29539 = AXIS2_PLACEMENT_3D ( 'NONE', #10813, #23969, #20905 ) ; +#29540 = LINE ( 'NONE', #15662, #38643 ) ; +#29541 = LINE ( 'NONE', #27681, #11330 ) ; +#29544 = STYLED_ITEM ( 'NONE', ( #15755 ), #5246 ) ; +#29543 = FILL_AREA_STYLE ('',( #26592 ) ) ; +#29542 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35253 ), #11408 ) ; +#29545 = SURFACE_SIDE_STYLE ('',( #2496 ) ) ; +#29546 = ORIENTED_EDGE ( 'NONE', *, *, #39536, .F. ) ; +#29547 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29548 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29550 = EDGE_CURVE ( 'NONE', #31839, #34730, #9553, .T. ) ; +#29549 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19527 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14738, #18003, #5554 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29551 = SURFACE_STYLE_FILL_AREA ( #9186 ) ; +#29552 = FILL_AREA_STYLE_COLOUR ( '', #24231 ) ; +#29553 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#29554 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.9500017452961654300, -4.975000000000000500 ) ) ; +#29555 = VERTEX_POINT ( 'NONE', #36209 ) ; +#29557 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36082 ) ) ; +#29556 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17402 ), #19575 ) ; +#29558 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29559 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29560 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#29561 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29562 = ORIENTED_EDGE ( 'NONE', *, *, #29407, .F. ) ; +#29563 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29565 = LINE ( 'NONE', #953, #26490 ) ; +#29564 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29566 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25069, 'distance_accuracy_value', 'NONE'); +#29567 = SURFACE_SIDE_STYLE ('',( #27045 ) ) ; +#29568 = LINE ( 'NONE', #9525, #34641 ) ; +#29569 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29570 = VECTOR ( 'NONE', #31664, 1000.000000000000000 ) ; +#29571 = VERTEX_POINT ( 'NONE', #12722 ) ; +#29572 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#29573 = EDGE_LOOP ( 'NONE', ( #28588, #41371, #10494 ) ) ; +#29574 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29575 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#29576 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.299999999999999800 ) ) ; +#29577 = PRESENTATION_STYLE_ASSIGNMENT (( #21564 ) ) ; +#29578 = EDGE_LOOP ( 'NONE', ( #1854, #41165, #39968, #6118 ) ) ; +#29579 = DIRECTION ( 'NONE', ( -3.281909278875040400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#29580 = SURFACE_STYLE_USAGE ( .BOTH. , #4010 ) ; +#29581 = FACE_OUTER_BOUND ( 'NONE', #18605, .T. ) ; +#29582 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29583 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29584 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#29585 = EDGE_CURVE ( 'NONE', #30774, #24564, #10067, .T. ) ; +#29586 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #77, 'distance_accuracy_value', 'NONE'); +#29587 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000032500, -2.031000000000001500, -6.849999999999999600 ) ) ; +#29588 = EDGE_CURVE ( 'NONE', #5282, #28285, #15133, .T. ) ; +#29589 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29590 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29591 = ORIENTED_EDGE ( 'NONE', *, *, #41168, .T. ) ; +#29592 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#29593 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #36819, #33299, #1672, #20468, #8114, #33712 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#29594 = ADVANCED_FACE ( 'NONE', ( #31816 ), #16826, .T. ) ; +#29595 = AXIS2_PLACEMENT_3D ( 'NONE', #10011, #16399, #22896 ) ; +#29596 = FILL_AREA_STYLE_COLOUR ( '', #35938 ) ; +#29597 = CYLINDRICAL_SURFACE ( 'NONE', #20625, 0.3000000000000003800 ) ; +#29598 = LINE ( 'NONE', #16204, #12400 ) ; +#29599 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29600 = STYLED_ITEM ( 'NONE', ( #5510 ), #19727 ) ; +#29601 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#29602 = ORIENTED_EDGE ( 'NONE', *, *, #32609, .F. ) ; +#29603 = STYLED_ITEM ( 'NONE', ( #35082 ), #31615 ) ; +#29604 = ORIENTED_EDGE ( 'NONE', *, *, #34856, .T. ) ; +#29605 = LINE ( 'NONE', #15519, #34155 ) ; +#29606 = ORIENTED_EDGE ( 'NONE', *, *, #39956, .F. ) ; +#29607 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29609 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38694 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41271, #34778, #5548 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29608 = AXIS2_PLACEMENT_3D ( 'NONE', #14172, #33926, #36760 ) ; +#29610 = PLANE ( 'NONE', #35751 ) ; +#29611 = VECTOR ( 'NONE', #15125, 1000.000000000000000 ) ; +#29612 = LINE ( 'NONE', #10777, #31117 ) ; +#29614 = EDGE_CURVE ( 'NONE', #6318, #20034, #25758, .T. ) ; +#29613 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#29615 = ORIENTED_EDGE ( 'NONE', *, *, #15428, .T. ) ; +#29616 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 0.03000174529616634800, -7.300000000000000700 ) ) ; +#29617 = ORIENTED_EDGE ( 'NONE', *, *, #29449, .F. ) ; +#29618 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#29619 = LINE ( 'NONE', #2050, #34166 ) ; +#29620 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#29621 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21247 ) ) ; +#29622 = CARTESIAN_POINT ( 'NONE', ( -4.748858409427525000, 0.08000174529616799200, -7.173853277175703100 ) ) ; +#29623 = VERTEX_POINT ( 'NONE', #33917 ) ; +#29624 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27448 ) ) ; +#29625 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#29626 = PRESENTATION_STYLE_ASSIGNMENT (( #33289 ) ) ; +#29627 = CARTESIAN_POINT ( 'NONE', ( -3.098553390555577100, 0.3499999999999999200, -1.650000000005126000 ) ) ; +#29628 = FILL_AREA_STYLE_COLOUR ( '', #11993 ) ; +#29629 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14661, 'distance_accuracy_value', 'NONE'); +#29630 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29631 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.380001745296165500, -1.649999999999999000 ) ) ; +#29632 = CIRCLE ( 'NONE', #11484, 0.3600000000000078700 ) ; +#29633 = SURFACE_SIDE_STYLE ('',( #19277 ) ) ; +#29634 = SURFACE_SIDE_STYLE ('',( #22489 ) ) ; +#29635 = SURFACE_STYLE_USAGE ( .BOTH. , #10262 ) ; +#29636 = ADVANCED_FACE ( 'NONE', ( #39876 ), #32294, .F. ) ; +#29637 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 2.322941965694886000, -1.250000000000000000 ) ) ; +#29638 = ORIENTED_EDGE ( 'NONE', *, *, #26769, .F. ) ; +#29639 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6266, 'distance_accuracy_value', 'NONE'); +#29640 = LINE ( 'NONE', #3920, #18522 ) ; +#29641 = EDGE_CURVE ( 'NONE', #38462, #38610, #14647, .T. ) ; +#29642 = ORIENTED_EDGE ( 'NONE', *, *, #25172, .T. ) ; +#29643 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29644 = VERTEX_POINT ( 'NONE', #40388 ) ; +#29645 = FILL_AREA_STYLE_COLOUR ( '', #32063 ) ; +#29647 = ADVANCED_FACE ( 'NONE', ( #20227 ), #41387, .T. ) ; +#29646 = PRESENTATION_STYLE_ASSIGNMENT (( #41111 ) ) ; +#29648 = FILL_AREA_STYLE ('',( #22878 ) ) ; +#29649 = CARTESIAN_POINT ( 'NONE', ( 0.7499999999999993300, -1.499998254703820600, -7.500000000000006200 ) ) ; +#29650 = LINE ( 'NONE', #14920, #28156 ) ; +#29651 = EDGE_CURVE ( 'NONE', #11831, #33254, #35353, .T. ) ; +#29652 = CIRCLE ( 'NONE', #8604, 0.3000000000000003800 ) ; +#29653 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.380001745296131500, -4.781671842700004200 ) ) ; +#29654 = ORIENTED_EDGE ( 'NONE', *, *, #34048, .T. ) ; +#29655 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32137 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29135, #26047, #9905 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29656 = CYLINDRICAL_SURFACE ( 'NONE', #7355, 1.200001745296169300 ) ; +#29657 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29658 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7178 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29975, #39984, #14308 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29659 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.084202172485506400E-015, -1.000000000000000000 ) ) ; +#29660 = CARTESIAN_POINT ( 'NONE', ( -3.056235627762828000, 0.3499999999999999200, -1.564901698718778000 ) ) ; +#29661 = FACE_OUTER_BOUND ( 'NONE', #25056, .T. ) ; +#29662 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29664 = EDGE_CURVE ( 'NONE', #38583, #11564, #18153, .T. ) ; +#29663 = STYLED_ITEM ( 'NONE', ( #30637 ), #36838 ) ; +#29665 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244519300E-016 ) ) ; +#29666 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.949998254703821300, 0.0000000000000000000 ) ) ; +#29667 = CIRCLE ( 'NONE', #3311, 0.2000000000000000900 ) ; +#29668 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 1.468654402296581600E-014, -3.099999999999998800 ) ) ; +#29669 = ORIENTED_EDGE ( 'NONE', *, *, #17508, .F. ) ; +#29670 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29671 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 2.322941965694886000, -1.250000000000000000 ) ) ; +#29673 = AXIS2_PLACEMENT_3D ( 'NONE', #6789, #39698, #4109 ) ; +#29672 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35623 ) ) ; +#29674 = ORIENTED_EDGE ( 'NONE', *, *, #25641, .T. ) ; +#29675 = EDGE_LOOP ( 'NONE', ( #7028, #28350, #33745 ) ) ; +#29676 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29677 = ORIENTED_EDGE ( 'NONE', *, *, #26466, .F. ) ; +#29678 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28087 ), #17266 ) ; +#29679 = CARTESIAN_POINT ( 'NONE', ( -4.599429204713762200, -1.400001745296195300, -7.186926638587857900 ) ) ; +#29680 = ADVANCED_FACE ( 'NONE', ( #3494 ), #4546, .T. ) ; +#29681 = VERTEX_POINT ( 'NONE', #1200 ) ; +#29682 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37144 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33641, #40525, #33778 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29683 = ORIENTED_EDGE ( 'NONE', *, *, #22426, .T. ) ; +#29684 = VERTEX_POINT ( 'NONE', #40110 ) ; +#29685 = FACE_OUTER_BOUND ( 'NONE', #26991, .T. ) ; +#29686 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29687 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#29688 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29689 = LINE ( 'NONE', #14506, #12485 ) ; +#29690 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29691 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29692 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#29693 = LINE ( 'NONE', #17907, #937 ) ; +#29694 = LINE ( 'NONE', #5442, #19643 ) ; +#29695 = ORIENTED_EDGE ( 'NONE', *, *, #36576, .F. ) ; +#29696 = CARTESIAN_POINT ( 'NONE', ( 4.449999999999999300, -1.400001745296165500, -7.200000000000005500 ) ) ; +#29697 = ORIENTED_EDGE ( 'NONE', *, *, #39530, .F. ) ; +#29698 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#29699 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#29700 = CARTESIAN_POINT ( 'NONE', ( -4.692207176641545600, 0.08000174529616560500, -6.526326723416069300 ) ) ; +#29701 = FILL_AREA_STYLE_COLOUR ( '', #24648 ) ; +#29702 = EDGE_LOOP ( 'NONE', ( #9406, #4040, #8026, #24882 ) ) ; +#29703 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#29704 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#29705 = EDGE_CURVE ( 'NONE', #34243, #24483, #4995, .T. ) ; +#29706 = SURFACE_STYLE_USAGE ( .BOTH. , #36092 ) ; +#29707 = EDGE_CURVE ( 'NONE', #30056, #10138, #1000, .T. ) ; +#29708 = ORIENTED_EDGE ( 'NONE', *, *, #13651, .F. ) ; +#29709 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#29710 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29711 = SURFACE_STYLE_USAGE ( .BOTH. , #10205 ) ; +#29712 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20287 ), #34050 ) ; +#29713 = EDGE_CURVE ( 'NONE', #37554, #30940, #9509, .T. ) ; +#29714 = ORIENTED_EDGE ( 'NONE', *, *, #38324, .T. ) ; +#29715 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#29716 = SURFACE_SIDE_STYLE ('',( #6281 ) ) ; +#29717 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#29718 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1785 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22421, #696, #23518 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29719 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20600, 'distance_accuracy_value', 'NONE'); +#29720 = ORIENTED_EDGE ( 'NONE', *, *, #6629, .F. ) ; +#29721 = VERTEX_POINT ( 'NONE', #11717 ) ; +#29722 = LINE ( 'NONE', #14717, #35295 ) ; +#29723 = ORIENTED_EDGE ( 'NONE', *, *, #5961, .T. ) ; +#29724 = FACE_OUTER_BOUND ( 'NONE', #31556, .T. ) ; +#29725 = VECTOR ( 'NONE', #16037, 1000.000000000000000 ) ; +#29726 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#29727 = SURFACE_STYLE_FILL_AREA ( #26170 ) ; +#29729 = EDGE_CURVE ( 'NONE', #2958, #38744, #502, .T. ) ; +#29728 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27569 ) ) ; +#29730 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29731 = DIRECTION ( 'NONE', ( -1.084202172485504700E-016, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#29732 = VECTOR ( 'NONE', #18730, 1000.000000000000000 ) ; +#29733 = ORIENTED_EDGE ( 'NONE', *, *, #1182, .F. ) ; +#29734 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#29735 = ORIENTED_EDGE ( 'NONE', *, *, #37813, .T. ) ; +#29736 = ORIENTED_EDGE ( 'NONE', *, *, #19041, .T. ) ; +#29737 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29739 = AXIS2_PLACEMENT_3D ( 'NONE', #39914, #23838, #40755 ) ; +#29738 = STYLED_ITEM ( 'NONE', ( #16856 ), #28547 ) ; +#29740 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.03000174529616683700, -7.300000000000000700 ) ) ; +#29741 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#29742 = STYLED_ITEM ( 'NONE', ( #37717 ), #41462 ) ; +#29743 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.499998254703820400, -6.299999999999993600 ) ) ; +#29744 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33285 ), #18144 ) ; +#29745 = ORIENTED_EDGE ( 'NONE', *, *, #31023, .F. ) ; +#29746 = FILL_AREA_STYLE_COLOUR ( '', #7033 ) ; +#29747 = STYLED_ITEM ( 'NONE', ( #18927 ), #8198 ) ; +#29748 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#29749 = VECTOR ( 'NONE', #20989, 1000.000000000000000 ) ; +#29750 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29751 = CARTESIAN_POINT ( 'NONE', ( 1.649999999999999900, -1.380001745296130600, -6.699999999999994000 ) ) ; +#29752 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40759, 'distance_accuracy_value', 'NONE'); +#29753 = FILL_AREA_STYLE ('',( #16904 ) ) ; +#29754 = FILL_AREA_STYLE ('',( #16768 ) ) ; +#29755 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#29756 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29757 = ORIENTED_EDGE ( 'NONE', *, *, #16968, .T. ) ; +#29758 = VECTOR ( 'NONE', #4304, 1000.000000000000000 ) ; +#29759 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#29760 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29761 = VERTEX_POINT ( 'NONE', #37167 ) ; +#29762 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#29763 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29764 = SURFACE_STYLE_FILL_AREA ( #12629 ) ; +#29765 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000012400, -1.999998254703822900, -6.600000000000000500 ) ) ; +#29766 = LINE ( 'NONE', #11812, #39360 ) ; +#29767 = MANIFOLD_SOLID_BREP ( '1-1-solid5', #22774 ) ; +#29768 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29769 = ORIENTED_EDGE ( 'NONE', *, *, #34852, .F. ) ; +#29770 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#29771 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -10.30000000000000100, -1.250000000000000000 ) ) ; +#29773 = LINE ( 'NONE', #29461, #39855 ) ; +#29772 = FILL_AREA_STYLE_COLOUR ( '', #22364 ) ; +#29774 = ORIENTED_EDGE ( 'NONE', *, *, #32547, .T. ) ; +#29775 = EDGE_CURVE ( 'NONE', #18064, #12836, #36854, .T. ) ; +#29776 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#29777 = CARTESIAN_POINT ( 'NONE', ( 3.120369891805397300, 0.2800000000000000800, -4.549999999999999800 ) ) ; +#29778 = EDGE_CURVE ( 'NONE', #17689, #26813, #18672, .T. ) ; +#29779 = AXIS2_PLACEMENT_3D ( 'NONE', #30440, #37362, #14354 ) ; +#29780 = ORIENTED_EDGE ( 'NONE', *, *, #30642, .F. ) ; +#29781 = AXIS2_PLACEMENT_3D ( 'NONE', #35931, #3577, #19844 ) ; +#29782 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29783 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#29784 = AXIS2_PLACEMENT_3D ( 'NONE', #4954, #24186, #11442 ) ; +#29785 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29786 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29788 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23302 ) ) ; +#29787 = CIRCLE ( 'NONE', #33885, 0.4000000000000001900 ) ; +#29789 = STYLED_ITEM ( 'NONE', ( #37598 ), #18222 ) ; +#29790 = FILL_AREA_STYLE ('',( #10708 ) ) ; +#29792 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23308 ), #3028 ) ; +#29791 = STYLED_ITEM ( 'NONE', ( #15649 ), #29636 ) ; +#29793 = ORIENTED_EDGE ( 'NONE', *, *, #13, .F. ) ; +#29796 = EDGE_CURVE ( 'NONE', #6139, #10079, #20185, .T. ) ; +#29795 = SURFACE_STYLE_USAGE ( .BOTH. , #914 ) ; +#29794 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35743 ), #13259 ) ; +#29797 = FACE_BOUND ( 'NONE', #30313, .T. ) ; +#29798 = ORIENTED_EDGE ( 'NONE', *, *, #33677, .F. ) ; +#29799 = SURFACE_STYLE_USAGE ( .BOTH. , #13697 ) ; +#29800 = ORIENTED_EDGE ( 'NONE', *, *, #25495, .T. ) ; +#29801 = VECTOR ( 'NONE', #2643, 1000.000000000000000 ) ; +#29802 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21722, 'distance_accuracy_value', 'NONE'); +#29803 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000004400, 1.480001745296170000, -0.2339555568811688700 ) ) ; +#29804 = SURFACE_SIDE_STYLE ('',( #13141 ) ) ; +#29805 = EDGE_LOOP ( 'NONE', ( #27917, #31226, #5971, #38399 ) ) ; +#29806 = ADVANCED_FACE ( 'NONE', ( #26237 ), #18398, .F. ) ; +#29807 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33821 ), #25505 ) ; +#29808 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#29809 = FACE_OUTER_BOUND ( 'NONE', #10035, .T. ) ; +#29810 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29811 = FILL_AREA_STYLE ('',( #20241 ) ) ; +#29812 = ORIENTED_EDGE ( 'NONE', *, *, #21800, .T. ) ; +#29813 = SURFACE_STYLE_USAGE ( .BOTH. , #20095 ) ; +#29814 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29815 = ORIENTED_EDGE ( 'NONE', *, *, #13751, .F. ) ; +#29816 = ORIENTED_EDGE ( 'NONE', *, *, #30295, .T. ) ; +#29817 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.09999999999998480900, -4.250000000000000000 ) ) ; +#29818 = DIRECTION ( 'NONE', ( 0.3746065948736244700, 0.0000000000000000000, 0.9271838539778333200 ) ) ; +#29819 = DIRECTION ( 'NONE', ( 0.08715574274766037200, 0.0000000000000000000, -0.9961946980917453200 ) ) ; +#29820 = CARTESIAN_POINT ( 'NONE', ( -4.070001745296171900, -0.2799999999999974200, -4.099999999999999600 ) ) ; +#29821 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, 0.6780706550913999700 ) ) ; +#29822 = CLOSED_SHELL ( 'NONE', ( #11804, #38327, #34908, #17798, #24800, #9286 ) ) ; +#29823 = LINE ( 'NONE', #7279, #35392 ) ; +#29824 = ORIENTED_EDGE ( 'NONE', *, *, #21274, .T. ) ; +#29825 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29826 = CARTESIAN_POINT ( 'NONE', ( -4.465000000000001600, -0.01999825470386167400, -6.526326723416069300 ) ) ; +#29827 = CARTESIAN_POINT ( 'NONE', ( 2.486602540378443700, 1.630001745296169500, -1.700000000000002000 ) ) ; +#29828 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#29829 = SURFACE_SIDE_STYLE ('',( #21665 ) ) ; +#29830 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#29831 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#29832 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29833 = EDGE_CURVE ( 'NONE', #30737, #25184, #19168, .T. ) ; +#29834 = LINE ( 'NONE', #40365, #9146 ) ; +#29835 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#29836 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#29837 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#29838 = CARTESIAN_POINT ( 'NONE', ( 4.720380236995682200, -0.2800000000000026400, -0.8400000000000000800 ) ) ; +#29839 = EDGE_CURVE ( 'NONE', #22336, #3199, #32746, .T. ) ; +#29840 = AXIS2_PLACEMENT_3D ( 'NONE', #4864, #30434, #30715 ) ; +#29841 = ORIENTED_EDGE ( 'NONE', *, *, #7114, .T. ) ; +#29842 = FILL_AREA_STYLE_COLOUR ( '', #18065 ) ; +#29843 = ADVANCED_FACE ( 'NONE', ( #36336 ), #8323, .F. ) ; +#29844 = FILL_AREA_STYLE_COLOUR ( '', #35192 ) ; +#29845 = CLOSED_SHELL ( 'NONE', ( #27305, #4831, #21489, #3417, #21611, #16306 ) ) ; +#29846 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.480001745296170200, -4.099999999999999600 ) ) ; +#29847 = ORIENTED_EDGE ( 'NONE', *, *, #36489, .T. ) ; +#29848 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21228 ), #11706 ) ; +#29849 = LINE ( 'NONE', #21681, #30379 ) ; +#29850 = ORIENTED_EDGE ( 'NONE', *, *, #12883, .F. ) ; +#29851 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7949 ), #2078 ) ; +#29852 = ORIENTED_EDGE ( 'NONE', *, *, #24862, .T. ) ; +#29853 = ORIENTED_EDGE ( 'NONE', *, *, #16568, .F. ) ; +#29854 = AXIS2_PLACEMENT_3D ( 'NONE', #27823, #40797, #24444 ) ; +#29855 = AXIS2_PLACEMENT_3D ( 'NONE', #15035, #27898, #34385 ) ; +#29856 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29857 = FILL_AREA_STYLE_COLOUR ( '', #2036 ) ; +#29858 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.380001745296178600, -6.250000000000000000 ) ) ; +#29859 = ADVANCED_FACE ( 'NONE', ( #41515 ), #8605, .T. ) ; +#29861 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16065 ) ) ; +#29860 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33078 ) ) ; +#29862 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#29863 = PLANE ( 'NONE', #3263 ) ; +#29865 = EDGE_CURVE ( 'NONE', #3858, #5294, #20339, .T. ) ; +#29864 = AXIS2_PLACEMENT_3D ( 'NONE', #6063, #28515, #38797 ) ; +#29866 = VERTEX_POINT ( 'NONE', #35273 ) ; +#29867 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875040400E-015, -6.056601140521968800E-031 ) ) ; +#29868 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29869 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#29870 = ORIENTED_EDGE ( 'NONE', *, *, #38114, .T. ) ; +#29871 = VECTOR ( 'NONE', #27821, 1000.000000000000000 ) ; +#29872 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29874 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8750 ), #39877 ) ; +#29873 = AXIS2_PLACEMENT_3D ( 'NONE', #26035, #25633, #16991 ) ; +#29875 = SURFACE_SIDE_STYLE ('',( #12163 ) ) ; +#29876 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29877 = SURFACE_STYLE_FILL_AREA ( #7104 ) ; +#29878 = LINE ( 'NONE', #31844, #27366 ) ; +#29879 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, -0.2498427124745999900 ) ) ; +#29880 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -5.599999999999999600 ) ) ; +#29881 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#29882 = ORIENTED_EDGE ( 'NONE', *, *, #20149, .F. ) ; +#29883 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.779999999999868600, -0.2339555568811695400 ) ) ; +#29884 = SURFACE_STYLE_USAGE ( .BOTH. , #26647 ) ; +#29885 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29886 = EDGE_LOOP ( 'NONE', ( #38876, #1529, #36079, #8326 ) ) ; +#29887 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#29888 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#29889 = LINE ( 'NONE', #17253, #20817 ) ; +#29890 = LINE ( 'NONE', #29671, #21333 ) ; +#29891 = FILL_AREA_STYLE_COLOUR ( '', #26310 ) ; +#29892 = CYLINDRICAL_SURFACE ( 'NONE', #16854, 0.1000000000000000100 ) ; +#29893 = DIRECTION ( 'NONE', ( 3.061289293739041200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#29894 = ORIENTED_EDGE ( 'NONE', *, *, #18811, .F. ) ; +#29895 = EDGE_CURVE ( 'NONE', #21790, #41091, #12707, .T. ) ; +#29897 = ADVANCED_FACE ( 'NONE', ( #1148 ), #38481, .F. ) ; +#29896 = ORIENTED_EDGE ( 'NONE', *, *, #16841, .F. ) ; +#29898 = SURFACE_STYLE_USAGE ( .BOTH. , #39488 ) ; +#29899 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.380001745296126600, -6.031671842700004200 ) ) ; +#29900 = EDGE_CURVE ( 'NONE', #15032, #19484, #28885, .T. ) ; +#29901 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 5.460789592991141900E-031 ) ) ; +#29902 = VERTEX_POINT ( 'NONE', #6446 ) ; +#29903 = SURFACE_STYLE_FILL_AREA ( #31865 ) ; +#29904 = ORIENTED_EDGE ( 'NONE', *, *, #13761, .F. ) ; +#29905 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29906 = AXIS2_PLACEMENT_3D ( 'NONE', #21773, #31196, #15107 ) ; +#29907 = PRESENTATION_STYLE_ASSIGNMENT (( #19663 ) ) ; +#29908 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29909 = FILL_AREA_STYLE ('',( #1282 ) ) ; +#29910 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -1.999999999999999600 ) ) ; +#29911 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2081 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23513, #36788, #13911 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29912 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #178 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20831, #33499, #11031 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29913 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40731 ), #16129 ) ; +#29914 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5693, 'distance_accuracy_value', 'NONE'); +#29915 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#29916 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29917 = ORIENTED_EDGE ( 'NONE', *, *, #27813, .T. ) ; +#29919 = EDGE_CURVE ( 'NONE', #13933, #13814, #15255, .T. ) ; +#29918 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16375 ), #33701 ) ; +#29920 = PRESENTATION_STYLE_ASSIGNMENT (( #3530 ) ) ; +#29921 = FILL_AREA_STYLE ('',( #4207 ) ) ; +#29923 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998497600, -4.250000000000000000 ) ) ; +#29922 = PLANE ( 'NONE', #917 ) ; +#29924 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#29925 = ORIENTED_EDGE ( 'NONE', *, *, #15130, .F. ) ; +#29927 = STYLED_ITEM ( 'NONE', ( #23056 ), #2342 ) ; +#29926 = AXIS2_PLACEMENT_3D ( 'NONE', #28782, #9403, #5768 ) ; +#29928 = SURFACE_SIDE_STYLE ('',( #18416 ) ) ; +#29929 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29930 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1272 ), #25615 ) ; +#29931 = PRESENTATION_STYLE_ASSIGNMENT (( #38436 ) ) ; +#29932 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10947, 'distance_accuracy_value', 'NONE'); +#29933 = FILL_AREA_STYLE_COLOUR ( '', #25140 ) ; +#29934 = STYLED_ITEM ( 'NONE', ( #34518 ), #31972 ) ; +#29935 = VERTEX_POINT ( 'NONE', #32271 ) ; +#29936 = CARTESIAN_POINT ( 'NONE', ( -0.1500000000000000200, -1.139998254717359900, -6.299996877890552400 ) ) ; +#29937 = VERTEX_POINT ( 'NONE', #6702 ) ; +#29938 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.499998254703840000, -5.049999999999993600 ) ) ; +#29939 = EDGE_LOOP ( 'NONE', ( #16394, #36284, #29723, #3480 ) ) ; +#29940 = VERTEX_POINT ( 'NONE', #9530 ) ; +#29941 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14365, 'distance_accuracy_value', 'NONE'); +#29942 = LINE ( 'NONE', #38517, #38522 ) ; +#29943 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29944 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#29945 = LINE ( 'NONE', #21001, #22895 ) ; +#29946 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#29947 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#29948 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#29949 = CARTESIAN_POINT ( 'NONE', ( 0.6500000000000000200, -1.499998254703827700, -6.699999999999994000 ) ) ; +#29950 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12978, 'distance_accuracy_value', 'NONE'); +#29951 = EDGE_CURVE ( 'NONE', #5846, #12505, #16775, .T. ) ; +#29952 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29953 = EDGE_CURVE ( 'NONE', #21579, #28758, #40989, .T. ) ; +#29954 = ORIENTED_EDGE ( 'NONE', *, *, #34480, .T. ) ; +#29955 = CARTESIAN_POINT ( 'NONE', ( -3.315809924354906600, 0.3499999999999621700, -1.679999999999999700 ) ) ; +#29956 = EDGE_CURVE ( 'NONE', #4358, #24784, #14222, .T. ) ; +#29957 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29599, 'distance_accuracy_value', 'NONE'); +#29958 = ORIENTED_EDGE ( 'NONE', *, *, #30017, .T. ) ; +#29959 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35102 ) ) ; +#29960 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#29961 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 1.480001745296169800, -1.650000000000000400 ) ) ; +#29962 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29963 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29964 = ORIENTED_EDGE ( 'NONE', *, *, #35422, .T. ) ; +#29965 = LINE ( 'NONE', #14066, #28944 ) ; +#29966 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#29967 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#29968 = ORIENTED_EDGE ( 'NONE', *, *, #8440, .F. ) ; +#29969 = STYLED_ITEM ( 'NONE', ( #28952 ), #21146 ) ; +#29970 = FILL_AREA_STYLE_COLOUR ( '', #24539 ) ; +#29971 = ORIENTED_EDGE ( 'NONE', *, *, #12754, .T. ) ; +#29972 = EDGE_LOOP ( 'NONE', ( #35483, #9947, #1170, #39938 ) ) ; +#29973 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#29974 = STYLED_ITEM ( 'NONE', ( #40117 ), #12429 ) ; +#29975 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#29976 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#29978 = EDGE_CURVE ( 'NONE', #37013, #30056, #21824, .T. ) ; +#29977 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#29979 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#29980 = SURFACE_STYLE_FILL_AREA ( #27125 ) ; +#29981 = PRESENTATION_STYLE_ASSIGNMENT (( #19677 ) ) ; +#29982 = ORIENTED_EDGE ( 'NONE', *, *, #6220, .T. ) ; +#29983 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.309669789692593200E-015, 0.0000000000000000000 ) ) ; +#29984 = CIRCLE ( 'NONE', #25083, 0.1000000000000001600 ) ; +#29985 = FACE_OUTER_BOUND ( 'NONE', #23297, .T. ) ; +#29986 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29987 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8065 ), #17583 ) ; +#29988 = LINE ( 'NONE', #34046, #33037 ) ; +#29989 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21363 ), #32143 ) ; +#29990 = LINE ( 'NONE', #9022, #27472 ) ; +#29991 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#29992 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25775 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30477, #11531, #34144 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#29993 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29994 = VECTOR ( 'NONE', #19350, 1000.000000000000200 ) ; +#29995 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#29996 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.499998254703820400, -6.299999999999993600 ) ) ; +#29997 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#29998 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#29999 = SURFACE_SIDE_STYLE ('',( #33719 ) ) ; +#30000 = ORIENTED_EDGE ( 'NONE', *, *, #16167, .F. ) ; +#30001 = SURFACE_STYLE_USAGE ( .BOTH. , #11070 ) ; +#30002 = LINE ( 'NONE', #30783, #40075 ) ; +#30003 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30004 = LINE ( 'NONE', #12533, #14854 ) ; +#30005 = EDGE_LOOP ( 'NONE', ( #6812, #2325, #20255, #21482 ) ) ; +#30006 = ORIENTED_EDGE ( 'NONE', *, *, #23625, .T. ) ; +#30007 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30009 = ORIENTED_EDGE ( 'NONE', *, *, #32292, .T. ) ; +#30008 = PRESENTATION_STYLE_ASSIGNMENT (( #18763 ) ) ; +#30010 = ORIENTED_EDGE ( 'NONE', *, *, #24251, .F. ) ; +#30012 = ADVANCED_FACE ( 'NONE', ( #12687 ), #3602, .F. ) ; +#30011 = CIRCLE ( 'NONE', #13646, 1.565797985667148700 ) ; +#30013 = CARTESIAN_POINT ( 'NONE', ( 4.773991411063332400, -0.4099999999999982500, -7.461124800398367000 ) ) ; +#30014 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#30015 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#30016 = PRESENTATION_STYLE_ASSIGNMENT (( #31916 ) ) ; +#30017 = EDGE_CURVE ( 'NONE', #37949, #17355, #3053, .T. ) ; +#30018 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30019 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#30020 = PRESENTATION_STYLE_ASSIGNMENT (( #17728 ) ) ; +#30021 = FACE_OUTER_BOUND ( 'NONE', #16546, .T. ) ; +#30022 = SURFACE_SIDE_STYLE ('',( #20213 ) ) ; +#30023 = EDGE_CURVE ( 'NONE', #38908, #5544, #22800, .T. ) ; +#30024 = CARTESIAN_POINT ( 'NONE', ( 3.105390508846411100, -0.07499999999999996900, -0.1008701867861798000 ) ) ; +#30025 = AXIS2_PLACEMENT_3D ( 'NONE', #36603, #39422, #4255 ) ; +#30026 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30027 = STYLED_ITEM ( 'NONE', ( #26792 ), #13357 ) ; +#30028 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.1000000000000147300, -1.949999999999999500 ) ) ; +#30029 = VERTEX_POINT ( 'NONE', #10222 ) ; +#30030 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2481 ) ) ; +#30031 = ORIENTED_EDGE ( 'NONE', *, *, #6031, .F. ) ; +#30032 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.380001745296132400, -6.699999999999994000 ) ) ; +#30033 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#30034 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#30035 = SURFACE_STYLE_USAGE ( .BOTH. , #30328 ) ; +#30036 = PRESENTATION_STYLE_ASSIGNMENT (( #27690 ) ) ; +#30037 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.5199999999999842500, -5.299999999999999800 ) ) ; +#30038 = VERTEX_POINT ( 'NONE', #3728 ) ; +#30040 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15457 ) ) ; +#30039 = AXIS2_PLACEMENT_3D ( 'NONE', #4284, #24065, #27182 ) ; +#30041 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#30042 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, -2.322941965694886000, -1.250000000000000000 ) ) ; +#30043 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#30044 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30402 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28854, #19412, #22239 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30045 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#30046 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -2.031000000000000600, -2.604459358809383800 ) ) ; +#30047 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -0.2339555568811697600 ) ) ; +#30048 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#30049 = ADVANCED_FACE ( 'NONE', ( #9642 ), #20445, .T. ) ; +#30050 = ORIENTED_EDGE ( 'NONE', *, *, #6681, .F. ) ; +#30051 = STYLED_ITEM ( 'NONE', ( #38004 ), #8819 ) ; +#30052 = ORIENTED_EDGE ( 'NONE', *, *, #3922, .F. ) ; +#30053 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000800, 2.322941965694886000, -1.250000000000000000 ) ) ; +#30054 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.5199999999999842500, -5.299999999999999800 ) ) ; +#30055 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6176, 'distance_accuracy_value', 'NONE'); +#30056 = VERTEX_POINT ( 'NONE', #26637 ) ; +#30057 = CIRCLE ( 'NONE', #29873, 1.565797985667148500 ) ; +#30058 = ORIENTED_EDGE ( 'NONE', *, *, #13838, .T. ) ; +#30059 = FILL_AREA_STYLE_COLOUR ( '', #18616 ) ; +#30061 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30060 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#30062 = DIRECTION ( 'NONE', ( 1.293877011362424000E-016, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#30063 = ADVANCED_FACE ( 'NONE', ( #37469 ), #33269, .F. ) ; +#30064 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#30066 = SURFACE_STYLE_FILL_AREA ( #12028 ) ; +#30065 = SURFACE_STYLE_USAGE ( .BOTH. , #1297 ) ; +#30067 = ORIENTED_EDGE ( 'NONE', *, *, #40081, .T. ) ; +#30068 = FILL_AREA_STYLE ('',( #10430 ) ) ; +#30069 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#30070 = FILL_AREA_STYLE ('',( #38969 ) ) ; +#30071 = EDGE_LOOP ( 'NONE', ( #3515, #30506, #34156, #7307 ) ) ; +#30072 = ORIENTED_EDGE ( 'NONE', *, *, #41693, .F. ) ; +#30073 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -4.099999999999999600 ) ) ; +#30074 = EDGE_CURVE ( 'NONE', #36087, #28824, #8641, .T. ) ; +#30075 = CYLINDRICAL_SURFACE ( 'NONE', #21361, 0.1000000000000001200 ) ; +#30076 = DIRECTION ( 'NONE', ( 7.744301232039317900E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30077 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#30078 = ORIENTED_EDGE ( 'NONE', *, *, #24286, .T. ) ; +#30079 = FILL_AREA_STYLE_COLOUR ( '', #27060 ) ; +#30080 = EDGE_CURVE ( 'NONE', #9110, #27665, #26071, .T. ) ; +#30081 = PRESENTATION_STYLE_ASSIGNMENT (( #9040 ) ) ; +#30082 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38415 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8278, #8565, #37532 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30083 = SURFACE_STYLE_FILL_AREA ( #37526 ) ; +#30084 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#30085 = STYLED_ITEM ( 'NONE', ( #24263 ), #23282 ) ; +#30086 = ORIENTED_EDGE ( 'NONE', *, *, #9162, .F. ) ; +#30087 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38912, 'distance_accuracy_value', 'NONE'); +#30088 = ORIENTED_EDGE ( 'NONE', *, *, #34448, .F. ) ; +#30090 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#30089 = FILL_AREA_STYLE ('',( #7056 ) ) ; +#30091 = PRESENTATION_STYLE_ASSIGNMENT (( #38349 ) ) ; +#30092 = LINE ( 'NONE', #23081, #9368 ) ; +#30093 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#30094 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.08000174529617017100, -7.500000000000000900 ) ) ; +#30095 = SURFACE_SIDE_STYLE ('',( #24469 ) ) ; +#30096 = CIRCLE ( 'NONE', #9945, 1.499999999999868100 ) ; +#30097 = VERTEX_POINT ( 'NONE', #26361 ) ; +#30098 = SURFACE_SIDE_STYLE ('',( #26801 ) ) ; +#30099 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39298 ) ) ; +#30100 = SURFACE_STYLE_USAGE ( .BOTH. , #13282 ) ; +#30101 = PRESENTATION_STYLE_ASSIGNMENT (( #11179 ) ) ; +#30102 = ADVANCED_FACE ( 'NONE', ( #33424 ), #32982, .F. ) ; +#30103 = AXIS2_PLACEMENT_3D ( 'NONE', #3641, #22719, #16497 ) ; +#30106 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41805 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31301, #30880, #11516 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30105 = FILL_AREA_STYLE ('',( #4397 ) ) ; +#30104 = AXIS2_PLACEMENT_3D ( 'NONE', #28308, #28447, #8938 ) ; +#30107 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30108 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30109 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#30110 = ORIENTED_EDGE ( 'NONE', *, *, #32668, .F. ) ; +#30112 = EDGE_CURVE ( 'NONE', #14214, #8459, #6105, .T. ) ; +#30111 = AXIS2_PLACEMENT_3D ( 'NONE', #16132, #10016, #29245 ) ; +#30113 = PRESENTATION_STYLE_ASSIGNMENT (( #36399 ) ) ; +#30114 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30115 = FILL_AREA_STYLE_COLOUR ( '', #23991 ) ; +#30116 = PRESENTATION_STYLE_ASSIGNMENT (( #35902 ) ) ; +#30117 = SURFACE_STYLE_USAGE ( .BOTH. , #39982 ) ; +#30119 = AXIS2_PLACEMENT_3D ( 'NONE', #8696, #2123, #8140 ) ; +#30118 = AXIS2_PLACEMENT_3D ( 'NONE', #41430, #37771, #5848 ) ; +#30120 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865475700, 0.7071067811865475700 ) ) ; +#30121 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#30122 = CARTESIAN_POINT ( 'NONE', ( -3.022193658745934400, -0.3443657430191314800, -1.294365743019131500 ) ) ; +#30123 = VECTOR ( 'NONE', #23072, 1000.000000000000000 ) ; +#30124 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30125 = SURFACE_STYLE_USAGE ( .BOTH. , #29567 ) ; +#30126 = ORIENTED_EDGE ( 'NONE', *, *, #13241, .T. ) ; +#30127 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#30128 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#30129 = ORIENTED_EDGE ( 'NONE', *, *, #39032, .T. ) ; +#30130 = ORIENTED_EDGE ( 'NONE', *, *, #23740, .F. ) ; +#30131 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#30132 = SURFACE_STYLE_FILL_AREA ( #33891 ) ; +#30133 = FILL_AREA_STYLE ('',( #15623 ) ) ; +#30134 = VERTEX_POINT ( 'NONE', #13625 ) ; +#30135 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#30136 = LINE ( 'NONE', #35466, #12936 ) ; +#30137 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -1.499998254703828600, -5.049999999999993600 ) ) ; +#30138 = DIRECTION ( 'NONE', ( -6.056601140521967900E-031, 1.591898209559296700E-045, 1.000000000000000000 ) ) ; +#30139 = ORIENTED_EDGE ( 'NONE', *, *, #38122, .T. ) ; +#30140 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664843100, -1.380001745296171900, -5.000000000000000000 ) ) ; +#30141 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.279999999999999800, -0.2000017452961698200 ) ) ; +#30142 = ORIENTED_EDGE ( 'NONE', *, *, #33585, .T. ) ; +#30143 = EDGE_CURVE ( 'NONE', #4059, #36496, #32349, .T. ) ; +#30144 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#30145 = LINE ( 'NONE', #29450, #21596 ) ; +#30146 = VECTOR ( 'NONE', #22696, 1000.000000000000000 ) ; +#30147 = EDGE_CURVE ( 'NONE', #14666, #38000, #30865, .T. ) ; +#30148 = LINE ( 'NONE', #17466, #41760 ) ; +#30149 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#30150 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30151 = SURFACE_STYLE_USAGE ( .BOTH. , #13915 ) ; +#30152 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#30153 = AXIS2_PLACEMENT_3D ( 'NONE', #25828, #16080, #25560 ) ; +#30154 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296170000, -0.2339555568811695900 ) ) ; +#30155 = CARTESIAN_POINT ( 'NONE', ( 2.949999999999999700, -1.139998254717350800, -6.299996877890552400 ) ) ; +#30156 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22949, 'distance_accuracy_value', 'NONE'); +#30157 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30158 = VERTEX_POINT ( 'NONE', #26933 ) ; +#30159 = AXIS2_PLACEMENT_3D ( 'NONE', #10073, #39176, #13476 ) ; +#30160 = LINE ( 'NONE', #3988, #15007 ) ; +#30161 = VECTOR ( 'NONE', #25176, 1000.000000000000100 ) ; +#30162 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#30163 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1812 ) ) ; +#30164 = CARTESIAN_POINT ( 'NONE', ( -4.542777971927784500, -0.1199982547038622000, -6.539400084828218800 ) ) ; +#30165 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2870, 'distance_accuracy_value', 'NONE'); +#30166 = LINE ( 'NONE', #39800, #19051 ) ; +#30169 = EDGE_CURVE ( 'NONE', #36203, #32559, #15189, .T. ) ; +#30168 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#30167 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21548 ), #10100 ) ; +#30170 = VECTOR ( 'NONE', #3774, 1000.000000000000000 ) ; +#30171 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30172 = ORIENTED_EDGE ( 'NONE', *, *, #14517, .F. ) ; +#30173 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#30174 = CIRCLE ( 'NONE', #33270, 1.200001745296169300 ) ; +#30175 = FILL_AREA_STYLE ('',( #30599 ) ) ; +#30176 = ORIENTED_EDGE ( 'NONE', *, *, #20663, .T. ) ; +#30177 = LINE ( 'NONE', #30537, #11951 ) ; +#30178 = AXIS2_PLACEMENT_3D ( 'NONE', #25448, #28660, #50 ) ; +#30179 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#30180 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000005700, -0.2999999999999852800, -2.095470210943120000 ) ) ; +#30181 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40149 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26567, #17115, #13404 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30182 = LINE ( 'NONE', #5311, #24108 ) ; +#30183 = PLANE ( 'NONE', #1573 ) ; +#30184 = SURFACE_STYLE_FILL_AREA ( #2514 ) ; +#30185 = EDGE_LOOP ( 'NONE', ( #39791, #24402 ) ) ; +#30186 = VERTEX_POINT ( 'NONE', #7686 ) ; +#30187 = FACE_OUTER_BOUND ( 'NONE', #32023, .T. ) ; +#30188 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#30189 = PRESENTATION_STYLE_ASSIGNMENT (( #19500 ) ) ; +#30190 = FILL_AREA_STYLE_COLOUR ( '', #20962 ) ; +#30191 = LINE ( 'NONE', #23516, #40261 ) ; +#30192 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30193 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#30194 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30195 = FILL_AREA_STYLE_COLOUR ( '', #6778 ) ; +#30196 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30197 = PRESENTATION_STYLE_ASSIGNMENT (( #10493 ) ) ; +#30198 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30199 = EDGE_CURVE ( 'NONE', #33519, #11411, #4070, .T. ) ; +#30200 = PRESENTATION_STYLE_ASSIGNMENT (( #15601 ) ) ; +#30201 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#30202 = CARTESIAN_POINT ( 'NONE', ( -3.395000000000000000, 0.2000000000000000900, -3.299999999999999800 ) ) ; +#30203 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#30204 = CARTESIAN_POINT ( 'NONE', ( -3.058010858782313600, -0.07499999999999996900, -0.1678751304874323300 ) ) ; +#30205 = EDGE_CURVE ( 'NONE', #3195, #26617, #25343, .T. ) ; +#30206 = ORIENTED_EDGE ( 'NONE', *, *, #28954, .T. ) ; +#30207 = CIRCLE ( 'NONE', #26270, 0.1000000000000002600 ) ; +#30208 = SURFACE_SIDE_STYLE ('',( #36741 ) ) ; +#30209 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#30210 = EDGE_CURVE ( 'NONE', #2017, #24382, #9111, .T. ) ; +#30211 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30212 = EDGE_LOOP ( 'NONE', ( #33797, #39230, #25222, #15059 ) ) ; +#30213 = VERTEX_POINT ( 'NONE', #17742 ) ; +#30214 = VECTOR ( 'NONE', #41106, 1000.000000000000000 ) ; +#30215 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#30216 = EDGE_LOOP ( 'NONE', ( #26697, #40576, #11218, #3387 ) ) ; +#30217 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36795 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14958, #34450, #37547 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30218 = FACE_OUTER_BOUND ( 'NONE', #13642, .T. ) ; +#30219 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745278514100, -2.594459358809380900 ) ) ; +#30220 = LINE ( 'NONE', #13870, #32230 ) ; +#30221 = CARTESIAN_POINT ( 'NONE', ( -4.425000000000014000, -1.999998254703822400, -3.549261509947659700 ) ) ; +#30222 = ORIENTED_EDGE ( 'NONE', *, *, #36344, .F. ) ; +#30223 = FILL_AREA_STYLE ('',( #32663 ) ) ; +#30224 = PRESENTATION_STYLE_ASSIGNMENT (( #33118 ) ) ; +#30225 = ORIENTED_EDGE ( 'NONE', *, *, #4990, .F. ) ; +#30226 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.966063034915694700, -0.6228541982233617400 ) ) ; +#30227 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30228 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -4.975000000000000500 ) ) ; +#30229 = ADVANCED_FACE ( 'NONE', ( #39921 ), #9601, .T. ) ; +#30230 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11940 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12928, #6317, #38775 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30231 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30233 = EDGE_CURVE ( 'NONE', #10788, #4181, #32883, .T. ) ; +#30232 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41843 ) ) ; +#30234 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, -0.07499999999999999700, 0.01000000000000000700 ) ) ; +#30235 = VERTEX_POINT ( 'NONE', #11072 ) ; +#30236 = CARTESIAN_POINT ( 'NONE', ( 3.500000000000003100, -2.031000000000001500, -6.749999999999999100 ) ) ; +#30237 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#30238 = VECTOR ( 'NONE', #30045, 1000.000000000000000 ) ; +#30239 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30241 = STYLED_ITEM ( 'NONE', ( #24925 ), #3189 ) ; +#30240 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28077 ) ) ; +#30242 = STYLED_ITEM ( 'NONE', ( #11178 ), #40462 ) ; +#30243 = FILL_AREA_STYLE ('',( #1060 ) ) ; +#30244 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#30245 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31033 ), #22941 ) ; +#30246 = CARTESIAN_POINT ( 'NONE', ( -3.095000000000000600, -0.07499999999999999700, -0.3254101966249999800 ) ) ; +#30247 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.730380236995679600, -0.8400000000000000800 ) ) ; +#30248 = ORIENTED_EDGE ( 'NONE', *, *, #27041, .F. ) ; +#30249 = VECTOR ( 'NONE', #5580, 1000.000000000000000 ) ; +#30250 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000030900, 0.4300017452961686900, -6.450000000000000200 ) ) ; +#30251 = AXIS2_PLACEMENT_3D ( 'NONE', #4071, #17219, #13676 ) ; +#30252 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23615, 'distance_accuracy_value', 'NONE'); +#30253 = CARTESIAN_POINT ( 'NONE', ( 4.821303021499042900, -0.2800000000000026400, -0.3590461068823621000 ) ) ; +#30254 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#30255 = PLANE ( 'NONE', #16930 ) ; +#30256 = SURFACE_STYLE_USAGE ( .BOTH. , #26748 ) ; +#30257 = VERTEX_POINT ( 'NONE', #17461 ) ; +#30258 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35296, 'distance_accuracy_value', 'NONE'); +#30259 = FACE_OUTER_BOUND ( 'NONE', #36241, .T. ) ; +#30260 = VERTEX_POINT ( 'NONE', #40286 ) ; +#30261 = ORIENTED_EDGE ( 'NONE', *, *, #5025, .F. ) ; +#30262 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#30263 = ORIENTED_EDGE ( 'NONE', *, *, #3776, .F. ) ; +#30264 = LINE ( 'NONE', #21711, #2490 ) ; +#30265 = SURFACE_SIDE_STYLE ('',( #12377 ) ) ; +#30266 = VECTOR ( 'NONE', #32682, 1000.000000000000000 ) ; +#30267 = VECTOR ( 'NONE', #27510, 1000.000000000000000 ) ; +#30268 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.380001745296165500, -1.649999999999998600 ) ) ; +#30269 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30270 = ORIENTED_EDGE ( 'NONE', *, *, #35299, .F. ) ; +#30271 = ORIENTED_EDGE ( 'NONE', *, *, #1065, .T. ) ; +#30273 = ORIENTED_EDGE ( 'NONE', *, *, #7139, .F. ) ; +#30272 = ADVANCED_FACE ( 'NONE', ( #27837 ), #21291, .T. ) ; +#30274 = FILL_AREA_STYLE ('',( #29844 ) ) ; +#30275 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23432, 'distance_accuracy_value', 'NONE'); +#30276 = EDGE_CURVE ( 'NONE', #21918, #37440, #13675, .T. ) ; +#30277 = PLANE ( 'NONE', #34885 ) ; +#30278 = ORIENTED_EDGE ( 'NONE', *, *, #29614, .T. ) ; +#30279 = EDGE_CURVE ( 'NONE', #11615, #2462, #35839, .T. ) ; +#30280 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, -0.2799999999999974200, 0.0000000000000000000 ) ) ; +#30281 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#30282 = ADVANCED_FACE ( 'NONE', ( #36427, #25809 ), #34093, .F. ) ; +#30283 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.180001745296166000, -7.200000000000001100 ) ) ; +#30284 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.949998254703824200, 0.0000000000000000000 ) ) ; +#30285 = EDGE_CURVE ( 'NONE', #12291, #20662, #6071, .T. ) ; +#30286 = CARTESIAN_POINT ( 'NONE', ( -3.112655293855991300, -0.07499999999999999700, -0.2188033176481640200 ) ) ; +#30287 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30288 = CARTESIAN_POINT ( 'NONE', ( -3.340721027416471600, -0.2673789813097241500, -1.600000000000000800 ) ) ; +#30289 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18918 ) ) ; +#30290 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -2.099999999999999600 ) ) ; +#30291 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#30292 = ORIENTED_EDGE ( 'NONE', *, *, #3629, .F. ) ; +#30295 = EDGE_CURVE ( 'NONE', #12686, #6341, #30338, .T. ) ; +#30294 = AXIS2_PLACEMENT_3D ( 'NONE', #1308, #23863, #39942 ) ; +#30293 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#30296 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244513300E-016 ) ) ; +#30297 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30298 = SURFACE_STYLE_FILL_AREA ( #6841 ) ; +#30299 = ORIENTED_EDGE ( 'NONE', *, *, #20725, .F. ) ; +#30300 = VECTOR ( 'NONE', #5755, 1000.000000000000000 ) ; +#30302 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17324 ), #20876 ) ; +#30301 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5680 ), #31896 ) ; +#30303 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#30304 = CARTESIAN_POINT ( 'NONE', ( 3.137984242873239600, 0.2999999999999999300, 0.9623819784616916000 ) ) ; +#30305 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18142 ) ) ; +#30306 = PRESENTATION_STYLE_ASSIGNMENT (( #21782 ) ) ; +#30307 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#30308 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18183, 'distance_accuracy_value', 'NONE'); +#30309 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31652 ) ) ; +#30310 = ORIENTED_EDGE ( 'NONE', *, *, #19718, .F. ) ; +#30311 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.2999999999999999900, 0.3499999999999999800 ) ) ; +#30312 = ORIENTED_EDGE ( 'NONE', *, *, #10707, .T. ) ; +#30313 = EDGE_LOOP ( 'NONE', ( #9275, #1316, #9957, #38315, #13806, #23050, #1240, #26266 ) ) ; +#30314 = SURFACE_STYLE_FILL_AREA ( #5150 ) ; +#30316 = AXIS2_PLACEMENT_3D ( 'NONE', #20392, #927, #16822 ) ; +#30315 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -1.139998254717355900, -5.049996877890552400 ) ) ; +#30317 = FILL_AREA_STYLE_COLOUR ( '', #28326 ) ; +#30318 = ORIENTED_EDGE ( 'NONE', *, *, #38728, .T. ) ; +#30319 = FILL_AREA_STYLE_COLOUR ( '', #2023 ) ; +#30320 = ADVANCED_FACE ( 'NONE', ( #16675 ), #27796, .T. ) ; +#30321 = PLANE ( 'NONE', #22024 ) ; +#30322 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#30323 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.868824021436970800E-015, 0.0000000000000000000 ) ) ; +#30324 = FACE_OUTER_BOUND ( 'NONE', #31801, .T. ) ; +#30325 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.084202172485501700E-015, 0.0000000000000000000 ) ) ; +#30326 = FILL_AREA_STYLE_COLOUR ( '', #35514 ) ; +#30327 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30328 = SURFACE_SIDE_STYLE ('',( #17504 ) ) ; +#30329 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -2.299999999999999400 ) ) ; +#30330 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.080001745296136600, -6.250000000000000000 ) ) ; +#30331 = VERTEX_POINT ( 'NONE', #8220 ) ; +#30332 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#30333 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30334 = EDGE_CURVE ( 'NONE', #15905, #27374, #23243, .T. ) ; +#30335 = ORIENTED_EDGE ( 'NONE', *, *, #34294, .T. ) ; +#30336 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35200, 'distance_accuracy_value', 'NONE'); +#30337 = EDGE_LOOP ( 'NONE', ( #23692, #39404, #28431, #1300 ) ) ; +#30338 = LINE ( 'NONE', #41006, #8064 ) ; +#30339 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000001800, 0.6800017452961719700, -3.999999999999998200 ) ) ; +#30340 = SURFACE_SIDE_STYLE ('',( #19839 ) ) ; +#30341 = LINE ( 'NONE', #39685, #22762 ) ; +#30342 = EDGE_CURVE ( 'NONE', #11648, #27056, #11597, .T. ) ; +#30343 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #74 ) ) ; +#30344 = VERTEX_POINT ( 'NONE', #40569 ) ; +#30345 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#30346 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37479 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22295, #15371, #12376 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30347 = ORIENTED_EDGE ( 'NONE', *, *, #6801, .T. ) ; +#30348 = CARTESIAN_POINT ( 'NONE', ( -4.465000000000001600, 0.08000174529613829400, -7.500000000000006200 ) ) ; +#30349 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#30350 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28184 ), #32496 ) ; +#30351 = SURFACE_STYLE_USAGE ( .BOTH. , #7739 ) ; +#30352 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30353 = ORIENTED_EDGE ( 'NONE', *, *, #37502, .F. ) ; +#30354 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11618 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8169, #5223, #24169 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30355 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, -0.07499999999999999700, 0.0000000000000000000 ) ) ; +#30356 = PLANE ( 'NONE', #32833 ) ; +#30357 = AXIS2_PLACEMENT_3D ( 'NONE', #25075, #37882, #18296 ) ; +#30358 = FILL_AREA_STYLE ('',( #23148 ) ) ; +#30361 = EDGE_CURVE ( 'NONE', #167, #33935, #6844, .T. ) ; +#30360 = SURFACE_SIDE_STYLE ('',( #35018 ) ) ; +#30359 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23664 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14061, #17305, #23790 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30362 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30363 = ADVANCED_FACE ( 'NONE', ( #9071 ), #32844, .T. ) ; +#30364 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.6800017452961725200, -3.999999999999998200 ) ) ; +#30365 = SURFACE_STYLE_FILL_AREA ( #28594 ) ; +#30366 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30367 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30369 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23878 ), #32525 ) ; +#30368 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13863 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31234, #2326, #31382 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30370 = VECTOR ( 'NONE', #19199, 1000.000000000000100 ) ; +#30371 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30372 = EDGE_LOOP ( 'NONE', ( #7638, #27712, #22870, #22480 ) ) ; +#30373 = FILL_AREA_STYLE_COLOUR ( '', #13678 ) ; +#30374 = ORIENTED_EDGE ( 'NONE', *, *, #41223, .F. ) ; +#30375 = ORIENTED_EDGE ( 'NONE', *, *, #34238, .T. ) ; +#30376 = FILL_AREA_STYLE_COLOUR ( '', #40940 ) ; +#30377 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664848500, 0.2800017452961318700, -5.599999999999999600 ) ) ; +#30379 = VECTOR ( 'NONE', #2338, 1000.000000000000000 ) ; +#30378 = PLANE ( 'NONE', #15922 ) ; +#30380 = PLANE ( 'NONE', #25136 ) ; +#30381 = ORIENTED_EDGE ( 'NONE', *, *, #13565, .T. ) ; +#30382 = SURFACE_STYLE_FILL_AREA ( #11494 ) ; +#30383 = ORIENTED_EDGE ( 'NONE', *, *, #7485, .T. ) ; +#30384 = ORIENTED_EDGE ( 'NONE', *, *, #34209, .T. ) ; +#30385 = SURFACE_SIDE_STYLE ('',( #13549 ) ) ; +#30386 = FILL_AREA_STYLE_COLOUR ( '', #30811 ) ; +#30387 = CARTESIAN_POINT ( 'NONE', ( -3.315809924354907100, 0.3499999999999622300, -1.650000000000000100 ) ) ; +#30388 = SURFACE_SIDE_STYLE ('',( #29344 ) ) ; +#30389 = ORIENTED_EDGE ( 'NONE', *, *, #30701, .T. ) ; +#30390 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003900, 0.3000000000000148700, -3.099999999999998800 ) ) ; +#30391 = LINE ( 'NONE', #29443, #612 ) ; +#30392 = LINE ( 'NONE', #12099, #28362 ) ; +#30393 = ORIENTED_EDGE ( 'NONE', *, *, #7556, .T. ) ; +#30394 = EDGE_CURVE ( 'NONE', #41617, #22142, #2576, .T. ) ; +#30395 = DIRECTION ( 'NONE', ( 5.916456789157588500E-031, 1.000000000000000000, -2.367138801244518800E-016 ) ) ; +#30396 = PRESENTATION_STYLE_ASSIGNMENT (( #37374 ) ) ; +#30397 = SURFACE_STYLE_FILL_AREA ( #1585 ) ; +#30398 = VECTOR ( 'NONE', #35245, 1000.000000000000000 ) ; +#30399 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 1.468654402296581600E-014, -2.095470210943120000 ) ) ; +#30400 = EDGE_CURVE ( 'NONE', #15250, #37919, #10082, .T. ) ; +#30401 = AXIS2_PLACEMENT_3D ( 'NONE', #17286, #11049, #23774 ) ; +#30402 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28854, 'distance_accuracy_value', 'NONE'); +#30403 = CARTESIAN_POINT ( 'NONE', ( 2.945000000000000700, -0.5999999999999999800, -1.930000000000000200 ) ) ; +#30404 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#30405 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.499998254703822000, -5.449999999999994000 ) ) ; +#30406 = VECTOR ( 'NONE', #39871, 1000.000000000000000 ) ; +#30407 = STYLED_ITEM ( 'NONE', ( #35149 ), #15237 ) ; +#30408 = VECTOR ( 'NONE', #5198, 1000.000000000000000 ) ; +#30409 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31852, 'distance_accuracy_value', 'NONE'); +#30410 = ORIENTED_EDGE ( 'NONE', *, *, #18546, .F. ) ; +#30411 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.6199999999999849000, -5.199999999999999300 ) ) ; +#30412 = VECTOR ( 'NONE', #13975, 1000.000000000000000 ) ; +#30413 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7370 ) ) ; +#30414 = FILL_AREA_STYLE ('',( #4839 ) ) ; +#30415 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#30416 = ORIENTED_EDGE ( 'NONE', *, *, #41588, .F. ) ; +#30418 = AXIS2_PLACEMENT_3D ( 'NONE', #14295, #20682, #4249 ) ; +#30417 = AXIS2_PLACEMENT_3D ( 'NONE', #16574, #26462, #662 ) ; +#30419 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30421 = EDGE_CURVE ( 'NONE', #35573, #11093, #1556, .T. ) ; +#30420 = AXIS2_PLACEMENT_3D ( 'NONE', #19211, #22443, #9562 ) ; +#30422 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#30423 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30424 = VERTEX_POINT ( 'NONE', #9335 ) ; +#30425 = CARTESIAN_POINT ( 'NONE', ( 0.3999999999999999700, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#30426 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30427 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30429 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39072 ), #32588 ) ; +#30428 = STYLED_ITEM ( 'NONE', ( #11846 ), #26002 ) ; +#30430 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.499998254703820400, -6.699999999999994000 ) ) ; +#30431 = EDGE_LOOP ( 'NONE', ( #33546, #39223, #17397, #30383 ) ) ; +#30432 = VERTEX_POINT ( 'NONE', #31943 ) ; +#30433 = LINE ( 'NONE', #9843, #33476 ) ; +#30434 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.3420201433263654900, -0.9396926207856548500 ) ) ; +#30435 = ADVANCED_FACE ( 'NONE', ( #14185 ), #38022, .F. ) ; +#30437 = SURFACE_STYLE_FILL_AREA ( #2762 ) ; +#30436 = PLANE ( 'NONE', #37577 ) ; +#30438 = SURFACE_SIDE_STYLE ('',( #8019 ) ) ; +#30439 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#30440 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.3590461068823618300 ) ) ; +#30441 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30442 = PRESENTATION_STYLE_ASSIGNMENT (( #11369 ) ) ; +#30443 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36636, 'distance_accuracy_value', 'NONE'); +#30444 = SURFACE_SIDE_STYLE ('',( #40346 ) ) ; +#30445 = ORIENTED_EDGE ( 'NONE', *, *, #38848, .F. ) ; +#30446 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 0.3000000000000149200, -4.249999999999998200 ) ) ; +#30447 = CIRCLE ( 'NONE', #10220, 0.1000000000000001600 ) ; +#30448 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#30449 = EDGE_CURVE ( 'NONE', #10468, #34169, #2529, .T. ) ; +#30450 = PLANE ( 'NONE', #31465 ) ; +#30451 = CARTESIAN_POINT ( 'NONE', ( -4.692207176641545600, -0.1199982547038626900, -6.526326723416070200 ) ) ; +#30452 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -2.031000000000000600, -2.294459358809383800 ) ) ; +#30453 = ORIENTED_EDGE ( 'NONE', *, *, #500, .F. ) ; +#30454 = CARTESIAN_POINT ( 'NONE', ( 2.994999999999999700, 0.2999999999999999900, -1.400000000000000100 ) ) ; +#30455 = EDGE_CURVE ( 'NONE', #13046, #24607, #9569, .T. ) ; +#30456 = PRESENTATION_STYLE_ASSIGNMENT (( #29635 ) ) ; +#30457 = SURFACE_STYLE_FILL_AREA ( #8218 ) ; +#30458 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9009, 'distance_accuracy_value', 'NONE'); +#30459 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998358800, -4.450000000000000200 ) ) ; +#30460 = PRESENTATION_STYLE_ASSIGNMENT (( #21171 ) ) ; +#30461 = ORIENTED_EDGE ( 'NONE', *, *, #36774, .T. ) ; +#30462 = PRESENTATION_STYLE_ASSIGNMENT (( #21584 ) ) ; +#30463 = ORIENTED_EDGE ( 'NONE', *, *, #20728, .T. ) ; +#30464 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.139998254717359900, -6.299996877890552400 ) ) ; +#30465 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39101 ) ) ; +#30466 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30467 = FILL_AREA_STYLE_COLOUR ( '', #32738 ) ; +#30468 = ORIENTED_EDGE ( 'NONE', *, *, #16435, .F. ) ; +#30469 = CARTESIAN_POINT ( 'NONE', ( 4.407583426132272400, -1.982581680836082500, -3.595341433092485800 ) ) ; +#30470 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#30471 = DIRECTION ( 'NONE', ( -2.367138801244516300E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#30472 = ORIENTED_EDGE ( 'NONE', *, *, #33868, .F. ) ; +#30473 = ADVANCED_FACE ( 'NONE', ( #23201 ), #32308, .F. ) ; +#30474 = AXIS2_PLACEMENT_3D ( 'NONE', #26039, #29266, #6672 ) ; +#30475 = FACE_OUTER_BOUND ( 'NONE', #37506, .T. ) ; +#30476 = LINE ( 'NONE', #26742, #10764 ) ; +#30477 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30478 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#30479 = VECTOR ( 'NONE', #31510, 1000.000000000000000 ) ; +#30481 = EDGE_CURVE ( 'NONE', #35578, #36110, #40907, .T. ) ; +#30480 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35616 ) ) ; +#30482 = SURFACE_STYLE_USAGE ( .BOTH. , #23993 ) ; +#30483 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#30484 = FACE_OUTER_BOUND ( 'NONE', #26513, .T. ) ; +#30486 = ADVANCED_FACE ( 'NONE', ( #33 ), #26249, .T. ) ; +#30485 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12553, 'distance_accuracy_value', 'NONE'); +#30487 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40491 ) ) ; +#30488 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#30489 = PLANE ( 'NONE', #39489 ) ; +#30490 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18333 ), #12351 ) ; +#30491 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.2699999999999847000, -5.199999999999999300 ) ) ; +#30492 = VECTOR ( 'NONE', #2577, 1000.000000000000000 ) ; +#30493 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3935 ) ) ; +#30494 = PLANE ( 'NONE', #21678 ) ; +#30495 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4967, 'distance_accuracy_value', 'NONE'); +#30496 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#30497 = LINE ( 'NONE', #34237, #33013 ) ; +#30498 = CARTESIAN_POINT ( 'NONE', ( -4.425000000000014000, -1.999998254703822400, -3.500000000000000000 ) ) ; +#30499 = ORIENTED_EDGE ( 'NONE', *, *, #26003, .T. ) ; +#30500 = ORIENTED_EDGE ( 'NONE', *, *, #10282, .T. ) ; +#30501 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, 0.07499999999999999700, 0.01000000000000000400 ) ) ; +#30503 = ORIENTED_EDGE ( 'NONE', *, *, #19467, .T. ) ; +#30502 = PRESENTATION_STYLE_ASSIGNMENT (( #22112 ) ) ; +#30504 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#30505 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -5.075000000000000200 ) ) ; +#30506 = ORIENTED_EDGE ( 'NONE', *, *, #1472, .T. ) ; +#30507 = VECTOR ( 'NONE', #14028, 1000.000000000000000 ) ; +#30508 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -6.900000000000000400 ) ) ; +#30509 = CIRCLE ( 'NONE', #25254, 1.565797985667148700 ) ; +#30510 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30511 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, 1.000000000000000000 ) ) ; +#30512 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#30513 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#30514 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#30515 = SURFACE_SIDE_STYLE ('',( #24260 ) ) ; +#30516 = EDGE_CURVE ( 'NONE', #27746, #31804, #14138, .T. ) ; +#30517 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 6.056601140521966100E-031 ) ) ; +#30518 = LINE ( 'NONE', #32546, #4242 ) ; +#30519 = EDGE_CURVE ( 'NONE', #24195, #31553, #35866, .T. ) ; +#30520 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#30521 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.056601140521967900E-031 ) ) ; +#30522 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 0.6800017452961684100, -3.999999999999999100 ) ) ; +#30523 = ADVANCED_FACE ( 'NONE', ( #28274 ), #25167, .T. ) ; +#30524 = EDGE_CURVE ( 'NONE', #5335, #3854, #23694, .T. ) ; +#30525 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#30526 = LINE ( 'NONE', #13950, #31537 ) ; +#30527 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#30528 = STYLED_ITEM ( 'NONE', ( #8882 ), #17674 ) ; +#30529 = SURFACE_SIDE_STYLE ('',( #11111 ) ) ; +#30530 = CARTESIAN_POINT ( 'NONE', ( -4.748858409427525000, -0.01999825470386262100, -7.173853277175703100 ) ) ; +#30531 = CARTESIAN_POINT ( 'NONE', ( -3.094999999999999800, 0.07499999999999998300, -0.2704818615127195200 ) ) ; +#30532 = EDGE_CURVE ( 'NONE', #2997, #40176, #10078, .T. ) ; +#30533 = FACE_OUTER_BOUND ( 'NONE', #33415, .T. ) ; +#30534 = CARTESIAN_POINT ( 'NONE', ( 4.449999999999999300, 0.08000174529616994900, -7.350000000000001400 ) ) ; +#30535 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35429 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8973, #12086, #18770 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30536 = CARTESIAN_POINT ( 'NONE', ( 3.340721027416471600, 0.2673789813097241500, -1.600000000000000800 ) ) ; +#30537 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#30538 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20035 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21504, #34465, #25725 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30539 = CYLINDRICAL_SURFACE ( 'NONE', #26606, 0.1000000000000001600 ) ; +#30540 = PLANE ( 'NONE', #19416 ) ; +#30541 = ORIENTED_EDGE ( 'NONE', *, *, #33000, .T. ) ; +#30543 = EDGE_CURVE ( 'NONE', #21067, #240, #9028, .T. ) ; +#30542 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#30544 = FACE_OUTER_BOUND ( 'NONE', #40856, .T. ) ; +#30545 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#30546 = ORIENTED_EDGE ( 'NONE', *, *, #13493, .F. ) ; +#30547 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 1.485063948690956900E-014, -2.095470210943120000 ) ) ; +#30549 = EDGE_LOOP ( 'NONE', ( #30463, #34118, #13385, #11191 ) ) ; +#30548 = LINE ( 'NONE', #36210, #18451 ) ; +#30550 = ORIENTED_EDGE ( 'NONE', *, *, #3292, .F. ) ; +#30551 = FACE_OUTER_BOUND ( 'NONE', #6830, .T. ) ; +#30553 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21120 ) ) ; +#30552 = AXIS2_PLACEMENT_3D ( 'NONE', #14698, #36881, #24316 ) ; +#30554 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35131 ), #20565 ) ; +#30555 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#30556 = FACE_OUTER_BOUND ( 'NONE', #19228, .T. ) ; +#30557 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39 ), #15938 ) ; +#30558 = STYLED_ITEM ( 'NONE', ( #20936 ), #8294 ) ; +#30559 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#30560 = PLANE ( 'NONE', #37713 ) ; +#30561 = LINE ( 'NONE', #30559, #16892 ) ; +#30562 = CARTESIAN_POINT ( 'NONE', ( 2.945000000000000700, -0.5999999999999999800, -1.930000000000000200 ) ) ; +#30563 = CIRCLE ( 'NONE', #21613, 0.2000000000000000900 ) ; +#30564 = ORIENTED_EDGE ( 'NONE', *, *, #5101, .F. ) ; +#30565 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#30566 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.8190279881558656400, 0.5737535661042597600 ) ) ; +#30567 = CYLINDRICAL_SURFACE ( 'NONE', #28237, 0.1000000000000000500 ) ; +#30568 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#30569 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#30570 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30571 = ORIENTED_EDGE ( 'NONE', *, *, #22596, .F. ) ; +#30572 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.8500017452961657900, -5.575000000000001100 ) ) ; +#30573 = SURFACE_STYLE_USAGE ( .BOTH. , #4862 ) ; +#30574 = SURFACE_STYLE_USAGE ( .BOTH. , #24078 ) ; +#30575 = PRESENTATION_STYLE_ASSIGNMENT (( #10175 ) ) ; +#30577 = ADVANCED_FACE ( 'NONE', ( #1011 ), #12465, .F. ) ; +#30576 = VECTOR ( 'NONE', #30656, 1000.000000000000000 ) ; +#30578 = FILL_AREA_STYLE ('',( #10789 ) ) ; +#30579 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16213, 'distance_accuracy_value', 'NONE'); +#30580 = EDGE_LOOP ( 'NONE', ( #16208, #27191, #36629, #7260 ) ) ; +#30581 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#30582 = SURFACE_STYLE_FILL_AREA ( #27323 ) ; +#30583 = SURFACE_SIDE_STYLE ('',( #15632 ) ) ; +#30584 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.630424214906979600, -1.050000000000000000 ) ) ; +#30585 = EDGE_CURVE ( 'NONE', #20729, #34267, #36349, .T. ) ; +#30586 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30587 = EDGE_LOOP ( 'NONE', ( #5082, #24602, #12933, #21289, #35807, #2007, #777, #7546, #4315 ) ) ; +#30588 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#30589 = VECTOR ( 'NONE', #15738, 1000.000000000000100 ) ; +#30590 = EDGE_CURVE ( 'NONE', #39146, #33379, #30264, .T. ) ; +#30591 = PRESENTATION_STYLE_ASSIGNMENT (( #32074 ) ) ; +#30592 = SURFACE_SIDE_STYLE ('',( #1467 ) ) ; +#30593 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #33725, #4899, #11662, #27490 ), + .UNSPECIFIED., .F., .T. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 3.141592653589793100, 3.864326901403209600 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956567800, 0.9569428977956567800, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#30594 = ORIENTED_EDGE ( 'NONE', *, *, #20663, .F. ) ; +#30595 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.252606517456513700E-015, 0.0000000000000000000 ) ) ; +#30596 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5162 ) ) ; +#30597 = DIRECTION ( 'NONE', ( 2.168401191219097800E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#30598 = CYLINDRICAL_SURFACE ( 'NONE', #10113, 0.3000000000000003800 ) ; +#30599 = FILL_AREA_STYLE_COLOUR ( '', #12041 ) ; +#30600 = STYLED_ITEM ( 'NONE', ( #13094 ), #13540 ) ; +#30601 = VERTEX_POINT ( 'NONE', #8792 ) ; +#30602 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, -0.3000000000000001600, -1.250000000000000000 ) ) ; +#30603 = AXIS2_PLACEMENT_3D ( 'NONE', #41674, #3019, #9614 ) ; +#30604 = SURFACE_SIDE_STYLE ('',( #1169 ) ) ; +#30605 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28429 ) ) ; +#30606 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#30607 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7311 ), #37097 ) ; +#30608 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#30610 = EDGE_CURVE ( 'NONE', #16124, #38400, #37833, .T. ) ; +#30609 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8131 ) ) ; +#30611 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30612 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822400, -3.500000000000000000 ) ) ; +#30613 = FILL_AREA_STYLE_COLOUR ( '', #29030 ) ; +#30614 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#30615 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#30616 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18558 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5942, #12133, #38408 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30617 = FACE_OUTER_BOUND ( 'NONE', #12536, .T. ) ; +#30618 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#30619 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25785 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10801, #27085, #7703 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30620 = FILL_AREA_STYLE_COLOUR ( '', #14458 ) ; +#30621 = LINE ( 'NONE', #2138, #25096 ) ; +#30622 = EDGE_LOOP ( 'NONE', ( #10499, #32881, #6979, #8239 ) ) ; +#30623 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#30624 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000000000, -0.3000000000000001600, -1.250000000000000000 ) ) ; +#30625 = ORIENTED_EDGE ( 'NONE', *, *, #40233, .T. ) ; +#30626 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41095, 'distance_accuracy_value', 'NONE'); +#30627 = ORIENTED_EDGE ( 'NONE', *, *, #30532, .F. ) ; +#30628 = FACE_OUTER_BOUND ( 'NONE', #24579, .T. ) ; +#30629 = FILL_AREA_STYLE ('',( #8011 ) ) ; +#30630 = PLANE ( 'NONE', #33265 ) ; +#30631 = VECTOR ( 'NONE', #24725, 1000.000000000000000 ) ; +#30632 = SURFACE_STYLE_FILL_AREA ( #16588 ) ; +#30633 = ORIENTED_EDGE ( 'NONE', *, *, #11932, .T. ) ; +#30634 = ORIENTED_EDGE ( 'NONE', *, *, #39619, .T. ) ; +#30635 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#30636 = PRESENTATION_STYLE_ASSIGNMENT (( #2948 ) ) ; +#30637 = PRESENTATION_STYLE_ASSIGNMENT (( #14603 ) ) ; +#30638 = PRESENTATION_STYLE_ASSIGNMENT (( #7551 ) ) ; +#30639 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#30640 = FILL_AREA_STYLE_COLOUR ( '', #18343 ) ; +#30641 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30642 = EDGE_CURVE ( 'NONE', #3854, #31839, #17145, .T. ) ; +#30643 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.5199999999999842500, -5.299999999999999800 ) ) ; +#30644 = PLANE ( 'NONE', #4687 ) ; +#30645 = ADVANCED_FACE ( 'NONE', ( #35823 ), #18862, .F. ) ; +#30646 = LINE ( 'NONE', #15597, #38215 ) ; +#30647 = EDGE_CURVE ( 'NONE', #36021, #5440, #38347, .T. ) ; +#30648 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30649 = SURFACE_SIDE_STYLE ('',( #15191 ) ) ; +#30650 = SURFACE_SIDE_STYLE ('',( #3707 ) ) ; +#30651 = VERTEX_POINT ( 'NONE', #13024 ) ; +#30652 = VECTOR ( 'NONE', #10332, 1000.000000000000000 ) ; +#30653 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7362 ), #20421 ) ; +#30654 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#30655 = VERTEX_POINT ( 'NONE', #22787 ) ; +#30656 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#30657 = CARTESIAN_POINT ( 'NONE', ( -4.821303021499042900, -0.2799999999999974200, -0.3590461068823621000 ) ) ; +#30658 = FACE_OUTER_BOUND ( 'NONE', #6233, .T. ) ; +#30659 = SURFACE_STYLE_FILL_AREA ( #26834 ) ; +#30660 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.084202172485504700E-016, -9.035070666963931600E-017 ) ) ; +#30661 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33632 ), #17126 ) ; +#30662 = AXIS2_PLACEMENT_3D ( 'NONE', #27139, #26865, #30367 ) ; +#30663 = ORIENTED_EDGE ( 'NONE', *, *, #38535, .T. ) ; +#30664 = EDGE_LOOP ( 'NONE', ( #39239, #7639, #32057, #1721 ) ) ; +#30665 = FACE_OUTER_BOUND ( 'NONE', #21260, .T. ) ; +#30667 = AXIS2_PLACEMENT_3D ( 'NONE', #7526, #23501, #36500 ) ; +#30666 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34995 ) ) ; +#30668 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.499998254703826200, -6.699999999999994000 ) ) ; +#30669 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30670 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#30671 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#30672 = CIRCLE ( 'NONE', #18937, 0.1999999999999998400 ) ; +#30674 = EDGE_CURVE ( 'NONE', #22680, #28801, #3463, .T. ) ; +#30673 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28692 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2432, #22175, #8728 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30675 = ORIENTED_EDGE ( 'NONE', *, *, #18045, .F. ) ; +#30676 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760844200E-015 ) ) ; +#30677 = ORIENTED_EDGE ( 'NONE', *, *, #34945, .F. ) ; +#30678 = SURFACE_STYLE_FILL_AREA ( #38220 ) ; +#30679 = SURFACE_STYLE_USAGE ( .BOTH. , #7786 ) ; +#30680 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30682 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14965 ) ) ; +#30681 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29639 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6266, #16009, #31963 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30683 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30684 = LINE ( 'NONE', #6983, #14509 ) ; +#30685 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#30686 = ADVANCED_FACE ( 'NONE', ( #19673 ), #31270, .F. ) ; +#30687 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.180001745296165300, -7.300000000000000700 ) ) ; +#30688 = PRESENTATION_STYLE_ASSIGNMENT (( #27874 ) ) ; +#30689 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28075, 'distance_accuracy_value', 'NONE'); +#30690 = ORIENTED_EDGE ( 'NONE', *, *, #22310, .F. ) ; +#30691 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.2800017452961685000, -7.500000000000000000 ) ) ; +#30692 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 6.982962677686265900E-015, -1.000000000000000000 ) ) ; +#30693 = ADVANCED_FACE ( 'NONE', ( #21698 ), #4966, .T. ) ; +#30694 = ORIENTED_EDGE ( 'NONE', *, *, #26441, .T. ) ; +#30695 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#30696 = ORIENTED_EDGE ( 'NONE', *, *, #24877, .T. ) ; +#30697 = ORIENTED_EDGE ( 'NONE', *, *, #10703, .T. ) ; +#30698 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37774, 'distance_accuracy_value', 'NONE'); +#30699 = FACE_OUTER_BOUND ( 'NONE', #13332, .T. ) ; +#30700 = FILL_AREA_STYLE_COLOUR ( '', #37525 ) ; +#30701 = EDGE_CURVE ( 'NONE', #24367, #521, #13336, .T. ) ; +#30702 = ORIENTED_EDGE ( 'NONE', *, *, #5214, .T. ) ; +#30703 = VERTEX_POINT ( 'NONE', #28858 ) ; +#30704 = ORIENTED_EDGE ( 'NONE', *, *, #35600, .F. ) ; +#30705 = PRESENTATION_STYLE_ASSIGNMENT (( #7572 ) ) ; +#30706 = EDGE_CURVE ( 'NONE', #25581, #16836, #18125, .T. ) ; +#30707 = FILL_AREA_STYLE_COLOUR ( '', #8593 ) ; +#30708 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30709 = FILL_AREA_STYLE_COLOUR ( '', #9315 ) ; +#30710 = FACE_OUTER_BOUND ( 'NONE', #15245, .T. ) ; +#30711 = ORIENTED_EDGE ( 'NONE', *, *, #2533, .F. ) ; +#30712 = CIRCLE ( 'NONE', #443, 0.09999999999999999200 ) ; +#30713 = ORIENTED_EDGE ( 'NONE', *, *, #23403, .F. ) ; +#30714 = VECTOR ( 'NONE', #36700, 1000.000000000000000 ) ; +#30715 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.9396926207856548500, -0.3420201433263654900 ) ) ; +#30716 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #20691, #30531, #11443, #40391, #8049, #14436 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#30717 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24234 ), #19914 ) ; +#30718 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.499998254703827700, -6.699999999999994000 ) ) ; +#30719 = CARTESIAN_POINT ( 'NONE', ( -2.859829086680000000, -0.2000000000000003200, 1.149999999999999900 ) ) ; +#30720 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#30721 = FILL_AREA_STYLE_COLOUR ( '', #23705 ) ; +#30722 = EDGE_LOOP ( 'NONE', ( #41026, #37618, #10279, #7222 ) ) ; +#30723 = CIRCLE ( 'NONE', #24723, 0.2000000000000000900 ) ; +#30724 = CARTESIAN_POINT ( 'NONE', ( -2.949999999999999700, -1.380001745296126600, -6.699999999999994000 ) ) ; +#30725 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #26520, #33005, #10527, #576 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 0.0000000000000000000, 0.7227342478134135600 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956571100, 0.9569428977956571100, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#30726 = AXIS2_PLACEMENT_3D ( 'NONE', #17608, #40151, #27196 ) ; +#30727 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19368 ) ) ; +#30728 = AXIS2_PLACEMENT_3D ( 'NONE', #29226, #26273, #61 ) ; +#30729 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -3.799999999999999800 ) ) ; +#30732 = EDGE_CURVE ( 'NONE', #21094, #34228, #16600, .T. ) ; +#30731 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#30730 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24211 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19859, #16314, #25791 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30733 = ADVANCED_FACE ( 'NONE', ( #29724 ), #6414, .F. ) ; +#30734 = ORIENTED_EDGE ( 'NONE', *, *, #24724, .F. ) ; +#30735 = FILL_AREA_STYLE_COLOUR ( '', #23149 ) ; +#30736 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#30737 = VERTEX_POINT ( 'NONE', #107 ) ; +#30738 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9326 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13066, #26701, #12965 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30739 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#30740 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3931 ) ) ; +#30741 = ORIENTED_EDGE ( 'NONE', *, *, #25948, .T. ) ; +#30742 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#30743 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#30744 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#30745 = ORIENTED_EDGE ( 'NONE', *, *, #32662, .F. ) ; +#30746 = ORIENTED_EDGE ( 'NONE', *, *, #19606, .F. ) ; +#30747 = FACE_OUTER_BOUND ( 'NONE', #29573, .T. ) ; +#30748 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#30749 = CIRCLE ( 'NONE', #5925, 0.2000000000000000900 ) ; +#30750 = FACE_OUTER_BOUND ( 'NONE', #16558, .T. ) ; +#30751 = SURFACE_STYLE_USAGE ( .BOTH. , #1982 ) ; +#30752 = ORIENTED_EDGE ( 'NONE', *, *, #2526, .F. ) ; +#30753 = FILL_AREA_STYLE_COLOUR ( '', #36 ) ; +#30754 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#30756 = VECTOR ( 'NONE', #4326, 1000.000000000000000 ) ; +#30755 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30757 = ORIENTED_EDGE ( 'NONE', *, *, #32668, .T. ) ; +#30758 = ORIENTED_EDGE ( 'NONE', *, *, #3958, .F. ) ; +#30759 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#30760 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822400, -2.599999999999999600 ) ) ; +#30761 = ORIENTED_EDGE ( 'NONE', *, *, #40770, .F. ) ; +#30762 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5778, 'distance_accuracy_value', 'NONE'); +#30763 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.3500000000000000300, -1.249999999999999800 ) ) ; +#30764 = PLANE ( 'NONE', #7702 ) ; +#30765 = EDGE_CURVE ( 'NONE', #32564, #5512, #38793, .T. ) ; +#30766 = PRESENTATION_STYLE_ASSIGNMENT (( #5124 ) ) ; +#30767 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30768 = SURFACE_STYLE_USAGE ( .BOTH. , #27377 ) ; +#30769 = EDGE_CURVE ( 'NONE', #12842, #31276, #5988, .T. ) ; +#30770 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#30771 = PLANE ( 'NONE', #9209 ) ; +#30772 = EDGE_CURVE ( 'NONE', #27130, #11648, #24707, .T. ) ; +#30773 = STYLED_ITEM ( 'NONE', ( #10001 ), #17114 ) ; +#30774 = VERTEX_POINT ( 'NONE', #32798 ) ; +#30775 = VECTOR ( 'NONE', #17181, 1000.000000000000000 ) ; +#30776 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15650, 'distance_accuracy_value', 'NONE'); +#30777 = FILL_AREA_STYLE ('',( #30640 ) ) ; +#30778 = FILL_AREA_STYLE_COLOUR ( '', #37938 ) ; +#30779 = STYLED_ITEM ( 'NONE', ( #9196 ), #21197 ) ; +#30780 = ADVANCED_FACE ( 'NONE', ( #33788 ), #24198, .F. ) ; +#30781 = ORIENTED_EDGE ( 'NONE', *, *, #37332, .F. ) ; +#30782 = PRESENTATION_STYLE_ASSIGNMENT (( #23346 ) ) ; +#30783 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.5300017452961696100, -3.999999999999997300 ) ) ; +#30784 = ORIENTED_EDGE ( 'NONE', *, *, #25941, .T. ) ; +#30785 = VECTOR ( 'NONE', #20462, 1000.000000000000000 ) ; +#30786 = VECTOR ( 'NONE', #39779, 1000.000000000000000 ) ; +#30787 = STYLED_ITEM ( 'NONE', ( #2829 ), #12101 ) ; +#30788 = SURFACE_STYLE_FILL_AREA ( #6022 ) ; +#30789 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30790 = SURFACE_STYLE_FILL_AREA ( #21610 ) ; +#30792 = EDGE_CURVE ( 'NONE', #8828, #41578, #17100, .T. ) ; +#30791 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24303 ), #34560 ) ; +#30793 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30794 = VERTEX_POINT ( 'NONE', #35928 ) ; +#30795 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30796 = SURFACE_STYLE_FILL_AREA ( #29754 ) ; +#30797 = VERTEX_POINT ( 'NONE', #7352 ) ; +#30799 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38083 ) ) ; +#30798 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2517 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22928, #9899, #39292 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30800 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30801 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38634 ), #14051 ) ; +#30802 = ORIENTED_EDGE ( 'NONE', *, *, #39787, .T. ) ; +#30803 = SURFACE_SIDE_STYLE ('',( #7461 ) ) ; +#30804 = AXIS2_PLACEMENT_3D ( 'NONE', #13379, #19786, #36016 ) ; +#30805 = PRESENTATION_STYLE_ASSIGNMENT (( #21258 ) ) ; +#30806 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30807 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30808 = PLANE ( 'NONE', #25915 ) ; +#30809 = FILL_AREA_STYLE_COLOUR ( '', #10219 ) ; +#30810 = LINE ( 'NONE', #17120, #13127 ) ; +#30811 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#30812 = SURFACE_SIDE_STYLE ('',( #4396 ) ) ; +#30813 = ORIENTED_EDGE ( 'NONE', *, *, #18481, .T. ) ; +#30814 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.380001745296144800, -4.781671842700004200 ) ) ; +#30815 = VECTOR ( 'NONE', #13636, 1000.000000000000000 ) ; +#30816 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30817 = SURFACE_STYLE_FILL_AREA ( #27702 ) ; +#30818 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30819 = PRESENTATION_STYLE_ASSIGNMENT (( #31826 ) ) ; +#30820 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000008300, -0.7099999999999995200, -6.861124800398366500 ) ) ; +#30821 = ORIENTED_EDGE ( 'NONE', *, *, #19723, .F. ) ; +#30822 = VECTOR ( 'NONE', #40757, 1000.000000000000000 ) ; +#30823 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#30824 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid31', #20811 ) ; +#30825 = ORIENTED_EDGE ( 'NONE', *, *, #23788, .T. ) ; +#30826 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#30827 = EDGE_LOOP ( 'NONE', ( #13917, #40080, #28989, #27292 ) ) ; +#30828 = ORIENTED_EDGE ( 'NONE', *, *, #32443, .T. ) ; +#30829 = EDGE_CURVE ( 'NONE', #19388, #38105, #424, .T. ) ; +#30830 = LINE ( 'NONE', #19616, #4580 ) ; +#30831 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#30832 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#30833 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30834 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26508 ) ) ; +#30835 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30836 = PLANE ( 'NONE', #32198 ) ; +#30837 = EDGE_CURVE ( 'NONE', #34508, #21877, #9446, .T. ) ; +#30838 = ORIENTED_EDGE ( 'NONE', *, *, #15915, .F. ) ; +#30839 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30840 = CARTESIAN_POINT ( 'NONE', ( 3.325016342424860700, -0.3282030948164306200, -1.600000000000000800 ) ) ; +#30841 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11329 ), #33004 ) ; +#30842 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14322 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11682, #24423, #12372 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30843 = VECTOR ( 'NONE', #21449, 1000.000000000000000 ) ; +#30844 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30962, 'distance_accuracy_value', 'NONE'); +#30845 = PRESENTATION_STYLE_ASSIGNMENT (( #30100 ) ) ; +#30846 = CARTESIAN_POINT ( 'NONE', ( -1.649999999999999900, -1.499998254703824400, -6.299999999999993600 ) ) ; +#30847 = SURFACE_STYLE_USAGE ( .BOTH. , #11487 ) ; +#30848 = CARTESIAN_POINT ( 'NONE', ( 3.026782044149229900, 0.3387681780191348400, -1.288685093398070900 ) ) ; +#30849 = ADVANCED_FACE ( 'NONE', ( #21661 ), #23352, .T. ) ; +#30850 = STYLED_ITEM ( 'NONE', ( #13696 ), #29211 ) ; +#30851 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30852 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.307718258760844200E-015, -1.000000000000000000 ) ) ; +#30853 = LINE ( 'NONE', #13074, #21282 ) ; +#30854 = AXIS2_PLACEMENT_3D ( 'NONE', #29318, #9942, #703 ) ; +#30855 = ORIENTED_EDGE ( 'NONE', *, *, #19687, .T. ) ; +#30857 = AXIS2_PLACEMENT_3D ( 'NONE', #11083, #20603, #36392 ) ; +#30856 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20062 ) ) ; +#30858 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30860 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35384 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22192, #18541, #18674 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30859 = SURFACE_SIDE_STYLE ('',( #35233 ) ) ; +#30861 = ORIENTED_EDGE ( 'NONE', *, *, #38604, .T. ) ; +#30862 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16048, 'distance_accuracy_value', 'NONE'); +#30863 = EDGE_LOOP ( 'NONE', ( #15393, #15017, #34334, #23981 ) ) ; +#30864 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#30865 = CIRCLE ( 'NONE', #2004, 0.1000000000000002600 ) ; +#30866 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000008500, -1.999998254703822000, -3.549261509947660500 ) ) ; +#30867 = LINE ( 'NONE', #1592, #3078 ) ; +#30868 = FACE_OUTER_BOUND ( 'NONE', #32637, .T. ) ; +#30869 = CARTESIAN_POINT ( 'NONE', ( -4.520424214906981300, 0.2800000000000027500, -1.050000000000000000 ) ) ; +#30870 = VERTEX_POINT ( 'NONE', #1214 ) ; +#30871 = ORIENTED_EDGE ( 'NONE', *, *, #7939, .F. ) ; +#30872 = SURFACE_STYLE_USAGE ( .BOTH. , #18181 ) ; +#30873 = SURFACE_STYLE_USAGE ( .BOTH. , #11915 ) ; +#30874 = SURFACE_SIDE_STYLE ('',( #32954 ) ) ; +#30875 = FILL_AREA_STYLE ('',( #40186 ) ) ; +#30876 = ORIENTED_EDGE ( 'NONE', *, *, #22429, .F. ) ; +#30877 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30878 = ORIENTED_EDGE ( 'NONE', *, *, #13241, .F. ) ; +#30879 = FACE_OUTER_BOUND ( 'NONE', #35030, .T. ) ; +#30880 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#30881 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#30882 = LINE ( 'NONE', #25913, #5111 ) ; +#30883 = VECTOR ( 'NONE', #10444, 1000.000000000000000 ) ; +#30884 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#30885 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#30886 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 2.322941965694886000, 0.3499999999999999800 ) ) ; +#30887 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30888 = ADVANCED_FACE ( 'NONE', ( #25654 ), #37177, .F. ) ; +#30889 = EDGE_CURVE ( 'NONE', #2997, #38280, #17055, .T. ) ; +#30890 = DIRECTION ( 'NONE', ( -0.9961946980917454300, 0.0000000000000000000, -0.08715574274766037200 ) ) ; +#30891 = FACE_OUTER_BOUND ( 'NONE', #39688, .T. ) ; +#30892 = EDGE_CURVE ( 'NONE', #9395, #34508, #23128, .T. ) ; +#30893 = STYLED_ITEM ( 'NONE', ( #16040 ), #10127 ) ; +#30894 = VERTEX_POINT ( 'NONE', #24197 ) ; +#30895 = FILL_AREA_STYLE ('',( #31024 ) ) ; +#30896 = CIRCLE ( 'NONE', #15136, 0.1999999999999996500 ) ; +#30897 = SURFACE_STYLE_FILL_AREA ( #36574 ) ; +#30898 = AXIS2_PLACEMENT_3D ( 'NONE', #14804, #21336, #37681 ) ; +#30899 = CARTESIAN_POINT ( 'NONE', ( -2.995000000000000100, 0.2999999999999999900, -1.399999999984000000 ) ) ; +#30900 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#30901 = EDGE_LOOP ( 'NONE', ( #23318, #4647, #38069, #20711 ) ) ; +#30902 = ADVANCED_FACE ( 'NONE', ( #29195 ), #8055, .F. ) ; +#30903 = AXIS2_PLACEMENT_3D ( 'NONE', #33409, #23514, #10506 ) ; +#30904 = DIRECTION ( 'NONE', ( -4.336808689942002000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#30905 = SURFACE_STYLE_FILL_AREA ( #10163 ) ; +#30906 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30907 = ORIENTED_EDGE ( 'NONE', *, *, #31987, .F. ) ; +#30908 = STYLED_ITEM ( 'NONE', ( #40888 ), #38113 ) ; +#30909 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30910 = ORIENTED_EDGE ( 'NONE', *, *, #7109, .T. ) ; +#30911 = STYLED_ITEM ( 'NONE', ( #19384 ), #18675 ) ; +#30912 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875040400E-015, -6.056601140521968800E-031 ) ) ; +#30914 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34445 ) ) ; +#30913 = STYLED_ITEM ( 'NONE', ( #7626 ), #30102 ) ; +#30915 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.966063034915694700, -0.6228541982233617400 ) ) ; +#30918 = EDGE_CURVE ( 'NONE', #32472, #33601, #18083, .T. ) ; +#30917 = CARTESIAN_POINT ( 'NONE', ( 4.542777971927782800, 0.08000174529616691000, -6.539400084828217900 ) ) ; +#30916 = AXIS2_PLACEMENT_3D ( 'NONE', #25210, #2891, #22898 ) ; +#30919 = ORIENTED_EDGE ( 'NONE', *, *, #32920, .T. ) ; +#30920 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30921 = EDGE_LOOP ( 'NONE', ( #22771, #3869 ) ) ; +#30922 = FILL_AREA_STYLE_COLOUR ( '', #135 ) ; +#30923 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 5.460789592991141900E-031 ) ) ; +#30925 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23878 ) ) ; +#30924 = STYLED_ITEM ( 'NONE', ( #29626 ), #25487 ) ; +#30926 = CARTESIAN_POINT ( 'NONE', ( -4.425000000000014000, -1.999998254703822900, -6.600000000000000500 ) ) ; +#30927 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#30928 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22478, 'distance_accuracy_value', 'NONE'); +#30929 = FILL_AREA_STYLE_COLOUR ( '', #9295 ) ; +#30930 = LINE ( 'NONE', #22272, #33969 ) ; +#30931 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#30932 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#30933 = SURFACE_SIDE_STYLE ('',( #10243 ) ) ; +#30934 = EDGE_LOOP ( 'NONE', ( #6265, #36581, #1619, #22819 ) ) ; +#30935 = VECTOR ( 'NONE', #326, 1000.000000000000000 ) ; +#30936 = CARTESIAN_POINT ( 'NONE', ( 3.220932789484489700, 0.07499999999999998300, -0.1015252947821067800 ) ) ; +#30937 = CARTESIAN_POINT ( 'NONE', ( 2.900000000000000400, -1.380001745296126800, -4.781671842700004200 ) ) ; +#30938 = ADVANCED_FACE ( 'NONE', ( #36277 ), #4826, .T. ) ; +#30939 = SURFACE_SIDE_STYLE ('',( #31752 ) ) ; +#30940 = VERTEX_POINT ( 'NONE', #23907 ) ; +#30941 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30942 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.837630800822890800E-016, -1.000000000000000000 ) ) ; +#30943 = SURFACE_STYLE_USAGE ( .BOTH. , #21099 ) ; +#30944 = CIRCLE ( 'NONE', #19799, 0.3600000000000078700 ) ; +#30945 = SURFACE_STYLE_FILL_AREA ( #29105 ) ; +#30946 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#30947 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#30948 = ORIENTED_EDGE ( 'NONE', *, *, #1059, .F. ) ; +#30949 = EDGE_CURVE ( 'NONE', #1433, #3050, #6896, .T. ) ; +#30950 = VECTOR ( 'NONE', #41554, 1000.000000000000000 ) ; +#30951 = VERTEX_POINT ( 'NONE', #33374 ) ; +#30952 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#30953 = EDGE_CURVE ( 'NONE', #39080, #23125, #39770, .T. ) ; +#30954 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22311 ) ) ; +#30955 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000030900, -2.031000000000001500, -6.549999999999999800 ) ) ; +#30956 = ORIENTED_EDGE ( 'NONE', *, *, #4781, .T. ) ; +#30957 = LINE ( 'NONE', #34158, #7184 ) ; +#30958 = LINE ( 'NONE', #23309, #31961 ) ; +#30959 = EDGE_LOOP ( 'NONE', ( #22726, #1475, #15052, #11987 ) ) ; +#30960 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30961 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12260 ) ) ; +#30962 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30963 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36994 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35006, #8717, #37830 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30964 = AXIS2_PLACEMENT_3D ( 'NONE', #20404, #39277, #16704 ) ; +#30965 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.499998254703823800, -5.049999999999993600 ) ) ; +#30966 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#30967 = AXIS2_PLACEMENT_3D ( 'NONE', #2468, #37603, #37876 ) ; +#30968 = SURFACE_SIDE_STYLE ('',( #6092 ) ) ; +#30969 = ORIENTED_EDGE ( 'NONE', *, *, #30792, .F. ) ; +#30971 = EDGE_CURVE ( 'NONE', #4765, #38982, #30177, .T. ) ; +#30970 = AXIS2_PLACEMENT_3D ( 'NONE', #4897, #11239, #11102 ) ; +#30972 = VECTOR ( 'NONE', #28248, 1000.000000000000000 ) ; +#30973 = FILL_AREA_STYLE ('',( #24806 ) ) ; +#30974 = EDGE_LOOP ( 'NONE', ( #34491, #10283, #18514, #20575 ) ) ; +#30975 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#30977 = STYLED_ITEM ( 'NONE', ( #38984 ), #2118 ) ; +#30976 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14469 ), #39071 ) ; +#30978 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14822 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31647, #15556, #5957 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#30979 = ORIENTED_EDGE ( 'NONE', *, *, #22814, .T. ) ; +#30980 = SURFACE_SIDE_STYLE ('',( #10575 ) ) ; +#30982 = LINE ( 'NONE', #4446, #41119 ) ; +#30981 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#30983 = ORIENTED_EDGE ( 'NONE', *, *, #38324, .F. ) ; +#30984 = ADVANCED_FACE ( 'NONE', ( #30665 ), #31229, .F. ) ; +#30985 = ORIENTED_EDGE ( 'NONE', *, *, #5527, .F. ) ; +#30986 = PRODUCT ( '2305018-2', '2305018-2', '', ( #36656 ) ) ; +#30988 = EDGE_LOOP ( 'NONE', ( #9344, #19354, #3872, #4392 ) ) ; +#30987 = VECTOR ( 'NONE', #16047, 1000.000000000000000 ) ; +#30989 = ORIENTED_EDGE ( 'NONE', *, *, #41161, .T. ) ; +#30990 = CARTESIAN_POINT ( 'NONE', ( 3.098553390606197500, -0.3499999999999999800, -1.649999999970999800 ) ) ; +#30991 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#30992 = FACE_OUTER_BOUND ( 'NONE', #35220, .T. ) ; +#30993 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#30994 = ORIENTED_EDGE ( 'NONE', *, *, #13776, .T. ) ; +#30995 = FACE_OUTER_BOUND ( 'NONE', #31765, .T. ) ; +#30996 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.949998254703820400, -3.632287565553231600 ) ) ; +#30997 = EDGE_CURVE ( 'NONE', #17137, #33306, #5901, .T. ) ; +#30998 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -1.149999999999999900 ) ) ; +#30999 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31000 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31001 = EDGE_CURVE ( 'NONE', #234, #40611, #25152, .T. ) ; +#31002 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#31003 = VECTOR ( 'NONE', #37012, 1000.000000000000000 ) ; +#31004 = EDGE_CURVE ( 'NONE', #12005, #24529, #18570, .T. ) ; +#31005 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21521, 'distance_accuracy_value', 'NONE'); +#31006 = STYLED_ITEM ( 'NONE', ( #20272 ), #16521 ) ; +#31007 = FILL_AREA_STYLE ('',( #1981 ) ) ; +#31008 = ORIENTED_EDGE ( 'NONE', *, *, #36710, .T. ) ; +#31009 = SURFACE_STYLE_FILL_AREA ( #29434 ) ; +#31010 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#31011 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31012 = ORIENTED_EDGE ( 'NONE', *, *, #18838, .F. ) ; +#31013 = CARTESIAN_POINT ( 'NONE', ( -1.149999999999999900, -1.499998254703826200, -6.699999999999994000 ) ) ; +#31014 = FILL_AREA_STYLE_COLOUR ( '', #30322 ) ; +#31015 = STYLED_ITEM ( 'NONE', ( #32073 ), #20773 ) ; +#31016 = ORIENTED_EDGE ( 'NONE', *, *, #7296, .T. ) ; +#31017 = ORIENTED_EDGE ( 'NONE', *, *, #27193, .T. ) ; +#31018 = ORIENTED_EDGE ( 'NONE', *, *, #8559, .T. ) ; +#31019 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21603 ) ) ; +#31020 = SURFACE_SIDE_STYLE ('',( #32631 ) ) ; +#31021 = FILL_AREA_STYLE ('',( #8000 ) ) ; +#31023 = EDGE_CURVE ( 'NONE', #20756, #22796, #31186, .T. ) ; +#31022 = AXIS2_PLACEMENT_3D ( 'NONE', #39820, #39531, #10717 ) ; +#31024 = FILL_AREA_STYLE_COLOUR ( '', #3234 ) ; +#31025 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31026 = SURFACE_STYLE_USAGE ( .BOTH. , #18624 ) ; +#31027 = SURFACE_STYLE_FILL_AREA ( #17592 ) ; +#31029 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18878 ) ) ; +#31028 = AXIS2_PLACEMENT_3D ( 'NONE', #5724, #34814, #22522 ) ; +#31030 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31031 = FILL_AREA_STYLE ('',( #37123 ) ) ; +#31032 = SURFACE_STYLE_FILL_AREA ( #2290 ) ; +#31033 = STYLED_ITEM ( 'NONE', ( #30091 ), #32772 ) ; +#31034 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32172, 'distance_accuracy_value', 'NONE'); +#31035 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#31036 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31038 = STYLED_ITEM ( 'NONE', ( #31232 ), #7046 ) ; +#31037 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#31039 = ORIENTED_EDGE ( 'NONE', *, *, #26003, .F. ) ; +#31040 = DIRECTION ( 'NONE', ( 1.794071060579491900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#31041 = FILL_AREA_STYLE_COLOUR ( '', #24857 ) ; +#31042 = ADVANCED_FACE ( 'NONE', ( #16031 ), #34484, .F. ) ; +#31043 = ORIENTED_EDGE ( 'NONE', *, *, #8002, .F. ) ; +#31044 = VECTOR ( 'NONE', #15048, 1000.000000000000100 ) ; +#31045 = SURFACE_STYLE_USAGE ( .BOTH. , #11140 ) ; +#31046 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#31047 = ORIENTED_EDGE ( 'NONE', *, *, #30233, .F. ) ; +#31048 = VECTOR ( 'NONE', #10363, 1000.000000000000000 ) ; +#31049 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32619, 'distance_accuracy_value', 'NONE'); +#31050 = SURFACE_SIDE_STYLE ('',( #37604 ) ) ; +#31051 = SURFACE_SIDE_STYLE ('',( #26293 ) ) ; +#31052 = SURFACE_STYLE_USAGE ( .BOTH. , #34587 ) ; +#31053 = VERTEX_POINT ( 'NONE', #5237 ) ; +#31054 = LINE ( 'NONE', #10315, #12838 ) ; +#31055 = VERTEX_POINT ( 'NONE', #5529 ) ; +#31056 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31057 = EDGE_CURVE ( 'NONE', #29008, #25787, #14499, .T. ) ; +#31058 = PLANE ( 'NONE', #6177 ) ; +#31059 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#31060 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31061 = VECTOR ( 'NONE', #2624, 1000.000000000000000 ) ; +#31062 = ORIENTED_EDGE ( 'NONE', *, *, #317, .F. ) ; +#31063 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#31064 = CYLINDRICAL_SURFACE ( 'NONE', #21602, 0.04999999999999969700 ) ; +#31065 = SURFACE_STYLE_FILL_AREA ( #39431 ) ; +#31066 = VERTEX_POINT ( 'NONE', #17974 ) ; +#31067 = EDGE_CURVE ( 'NONE', #21382, #39388, #37229, .T. ) ; +#31068 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#31069 = PRESENTATION_STYLE_ASSIGNMENT (( #29369 ) ) ; +#31070 = VECTOR ( 'NONE', #7241, 1000.000000000000000 ) ; +#31071 = AXIS2_PLACEMENT_3D ( 'NONE', #16594, #13470, #26781 ) ; +#31072 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31073 = DIRECTION ( 'NONE', ( 1.548860246407863600E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#31074 = LINE ( 'NONE', #15314, #12380 ) ; +#31075 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, -1.399999999999999900 ) ) ; +#31076 = ORIENTED_EDGE ( 'NONE', *, *, #13362, .T. ) ; +#31077 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33779, 'distance_accuracy_value', 'NONE'); +#31078 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000005700, -0.2999999999999852800, -3.099999999999998800 ) ) ; +#31079 = EDGE_CURVE ( 'NONE', #6642, #26204, #23613, .T. ) ; +#31080 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#31081 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1620 ), #34613 ) ; +#31082 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31083 = VECTOR ( 'NONE', #26870, 1000.000000000000000 ) ; +#31084 = FILL_AREA_STYLE ('',( #24632 ) ) ; +#31085 = STYLED_ITEM ( 'NONE', ( #35975 ), #13068 ) ; +#31086 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31087 = VERTEX_POINT ( 'NONE', #2042 ) ; +#31090 = EDGE_CURVE ( 'NONE', #30794, #22770, #5410, .T. ) ; +#31089 = AXIS2_PLACEMENT_3D ( 'NONE', #21481, #24288, #24589 ) ; +#31088 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31091 = ORIENTED_EDGE ( 'NONE', *, *, #24614, .T. ) ; +#31092 = FILL_AREA_STYLE ('',( #15293 ) ) ; +#31093 = ADVANCED_FACE ( 'NONE', ( #22089 ), #2321, .T. ) ; +#31094 = PLANE ( 'NONE', #5812 ) ; +#31095 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20862, 'distance_accuracy_value', 'NONE'); +#31096 = ORIENTED_EDGE ( 'NONE', *, *, #37960, .F. ) ; +#31098 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15933 ) ) ; +#31097 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29738 ) ) ; +#31099 = AXIS2_PLACEMENT_3D ( 'NONE', #15513, #38227, #18498 ) ; +#31100 = LINE ( 'NONE', #9255, #20514 ) ; +#31101 = FILL_AREA_STYLE ('',( #17984 ) ) ; +#31102 = FACE_OUTER_BOUND ( 'NONE', #3235, .T. ) ; +#31103 = VECTOR ( 'NONE', #8408, 1000.000000000000000 ) ; +#31104 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38393 ) ) ; +#31105 = ORIENTED_EDGE ( 'NONE', *, *, #18591, .F. ) ; +#31106 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22463 ), #28140 ) ; +#31107 = FILL_AREA_STYLE ('',( #33940 ) ) ; +#31108 = FACE_OUTER_BOUND ( 'NONE', #22887, .T. ) ; +#31109 = SURFACE_SIDE_STYLE ('',( #28830 ) ) ; +#31110 = ORIENTED_EDGE ( 'NONE', *, *, #17973, .F. ) ; +#31111 = SURFACE_STYLE_USAGE ( .BOTH. , #5823 ) ; +#31112 = ADVANCED_FACE ( 'NONE', ( #18528 ), #10422, .F. ) ; +#31113 = FILL_AREA_STYLE ('',( #38011 ) ) ; +#31114 = FACE_OUTER_BOUND ( 'NONE', #39899, .T. ) ; +#31115 = SURFACE_STYLE_USAGE ( .BOTH. , #30968 ) ; +#31116 = LINE ( 'NONE', #35024, #36667 ) ; +#31117 = VECTOR ( 'NONE', #20587, 1000.000000000000000 ) ; +#31118 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25485, 'distance_accuracy_value', 'NONE'); +#31119 = ORIENTED_EDGE ( 'NONE', *, *, #2561, .F. ) ; +#31120 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31121 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.499998254703833500, -5.049999999999993600 ) ) ; +#31122 = DIRECTION ( 'NONE', ( -7.228014483236708400E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#31123 = SURFACE_STYLE_FILL_AREA ( #19418 ) ; +#31124 = LINE ( 'NONE', #37454, #34650 ) ; +#31125 = VERTEX_POINT ( 'NONE', #12417 ) ; +#31126 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#31127 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.2800017452961687200, -6.150000000000000400 ) ) ; +#31128 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#31129 = VECTOR ( 'NONE', #32912, 1000.000000000000000 ) ; +#31130 = FILL_AREA_STYLE ('',( #34099 ) ) ; +#31131 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.139998254717370600, -5.049996877890552400 ) ) ; +#31132 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31133 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.3590461068823620500 ) ) ; +#31134 = FACE_OUTER_BOUND ( 'NONE', #6686, .T. ) ; +#31135 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.949998254703823300, -5.767712434446771400 ) ) ; +#31136 = EDGE_CURVE ( 'NONE', #34193, #24209, #34198, .T. ) ; +#31137 = FILL_AREA_STYLE_COLOUR ( '', #27140 ) ; +#31138 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#31139 = EDGE_CURVE ( 'NONE', #3461, #5537, #36704, .T. ) ; +#31140 = STYLED_ITEM ( 'NONE', ( #7533 ), #23453 ) ; +#31141 = ORIENTED_EDGE ( 'NONE', *, *, #35349, .T. ) ; +#31142 = PRESENTATION_STYLE_ASSIGNMENT (( #2403 ) ) ; +#31143 = CARTESIAN_POINT ( 'NONE', ( 4.692207176641545600, -0.1199982547038319100, -6.526326723416070200 ) ) ; +#31144 = FACE_OUTER_BOUND ( 'NONE', #16756, .T. ) ; +#31145 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31146 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2790 ) ) ; +#31147 = ADVANCED_FACE ( 'NONE', ( #17017 ), #7933, .T. ) ; +#31148 = ORIENTED_EDGE ( 'NONE', *, *, #37142, .T. ) ; +#31149 = FILL_AREA_STYLE_COLOUR ( '', #1963 ) ; +#31150 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31151 = ORIENTED_EDGE ( 'NONE', *, *, #31425, .F. ) ; +#31152 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22071 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23618, #10607, #23767 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31153 = DIRECTION ( 'NONE', ( -4.336808689942016900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#31154 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#31155 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.2999999999999853300, -1.950000000000001300 ) ) ; +#31156 = ORIENTED_EDGE ( 'NONE', *, *, #22596, .T. ) ; +#31157 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41710 ), #35246 ) ; +#31158 = ORIENTED_EDGE ( 'NONE', *, *, #31923, .T. ) ; +#31159 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1113 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27974, #18102, #34739 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31160 = DIRECTION ( 'NONE', ( -3.872150616019659000E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31161 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31162 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34853 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18566, #30839, #21829 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31163 = SURFACE_STYLE_FILL_AREA ( #3072 ) ; +#31164 = CARTESIAN_POINT ( 'NONE', ( 3.429999999999999700, -1.499998254703818900, -6.299999999999993600 ) ) ; +#31166 = EDGE_CURVE ( 'NONE', #19746, #38982, #35210, .T. ) ; +#31165 = AXIS2_PLACEMENT_3D ( 'NONE', #4440, #30568, #36635 ) ; +#31167 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#31168 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#31169 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521965300E-031 ) ) ; +#31170 = VECTOR ( 'NONE', #12943, 1000.000000000000000 ) ; +#31171 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -6.056601140521967900E-031 ) ) ; +#31172 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20480 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25106, #41179, #31000 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31173 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.380001745296126600, -6.699999999999994000 ) ) ; +#31174 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31175 = VERTEX_POINT ( 'NONE', #5946 ) ; +#31176 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#31177 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169000, -3.514459358809384400 ) ) ; +#31178 = DIRECTION ( 'NONE', ( -7.228014483236708400E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#31179 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#31180 = LINE ( 'NONE', #4654, #41278 ) ; +#31181 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31182 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#31183 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#31184 = ORIENTED_EDGE ( 'NONE', *, *, #966, .T. ) ; +#31185 = VERTEX_POINT ( 'NONE', #5807 ) ; +#31186 = LINE ( 'NONE', #21660, #33713 ) ; +#31187 = VECTOR ( 'NONE', #1413, 1000.000000000000000 ) ; +#31188 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.380001745296131500, -4.781671842700004200 ) ) ; +#31189 = ORIENTED_EDGE ( 'NONE', *, *, #13356, .T. ) ; +#31190 = ORIENTED_EDGE ( 'NONE', *, *, #12853, .F. ) ; +#31191 = EDGE_CURVE ( 'NONE', #21872, #33844, #23573, .T. ) ; +#31192 = ADVANCED_FACE ( 'NONE', ( #4351 ), #19520, .F. ) ; +#31193 = SURFACE_STYLE_USAGE ( .BOTH. , #32317 ) ; +#31194 = CARTESIAN_POINT ( 'NONE', ( -4.465000000000001600, 0.08000174529613829400, -7.500000000000000900 ) ) ; +#31195 = SURFACE_STYLE_FILL_AREA ( #40057 ) ; +#31196 = DIRECTION ( 'NONE', ( -3.281909278875040400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#31197 = EDGE_CURVE ( 'NONE', #37386, #7943, #30136, .T. ) ; +#31198 = AXIS2_PLACEMENT_3D ( 'NONE', #835, #20167, #26218 ) ; +#31199 = CARTESIAN_POINT ( 'NONE', ( -1.149999999999999900, -1.139998254717356800, -6.299996877890552400 ) ) ; +#31200 = FACE_OUTER_BOUND ( 'NONE', #27118, .T. ) ; +#31201 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31202 = AXIS2_PLACEMENT_3D ( 'NONE', #2758, #3275, #35058 ) ; +#31203 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #38528, #12542, #3109, #180 ), + .UNSPECIFIED., .F., .T. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 6.056601140522110600E-031, 0.7227342478134050100 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956581100, 0.9569428977956581100, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#31204 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31205 = PLANE ( 'NONE', #270 ) ; +#31206 = SURFACE_STYLE_USAGE ( .BOTH. , #30098 ) ; +#31207 = FACE_OUTER_BOUND ( 'NONE', #17633, .T. ) ; +#31208 = FILL_AREA_STYLE_COLOUR ( '', #21062 ) ; +#31209 = ORIENTED_EDGE ( 'NONE', *, *, #31755, .T. ) ; +#31210 = AXIS2_PLACEMENT_3D ( 'NONE', #13700, #11138, #4793 ) ; +#31211 = LINE ( 'NONE', #35376, #21646 ) ; +#31212 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24280 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29221, #35884, #22874 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31215 = AXIS2_PLACEMENT_3D ( 'NONE', #256, #26341, #39021 ) ; +#31214 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.837630800822890800E-016 ) ) ; +#31213 = AXIS2_PLACEMENT_3D ( 'NONE', #15135, #18269, #14993 ) ; +#31216 = SURFACE_STYLE_USAGE ( .BOTH. , #21796 ) ; +#31217 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31218 = ORIENTED_EDGE ( 'NONE', *, *, #34561, .T. ) ; +#31219 = FACE_OUTER_BOUND ( 'NONE', #12564, .T. ) ; +#31221 = EDGE_CURVE ( 'NONE', #3050, #8816, #15480, .T. ) ; +#31220 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38526 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38101, #18652, #25162 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31222 = PRESENTATION_STYLE_ASSIGNMENT (( #25450 ) ) ; +#31223 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000012100, -1.999998254703822400, -6.600000000000000500 ) ) ; +#31224 = SURFACE_STYLE_USAGE ( .BOTH. , #24912 ) ; +#31225 = ORIENTED_EDGE ( 'NONE', *, *, #966, .F. ) ; +#31226 = ORIENTED_EDGE ( 'NONE', *, *, #6861, .T. ) ; +#31227 = FACE_OUTER_BOUND ( 'NONE', #41245, .T. ) ; +#31228 = ORIENTED_EDGE ( 'NONE', *, *, #24413, .F. ) ; +#31229 = PLANE ( 'NONE', #40675 ) ; +#31230 = AXIS2_PLACEMENT_3D ( 'NONE', #21517, #37578, #34345 ) ; +#31231 = SURFACE_SIDE_STYLE ('',( #4277 ) ) ; +#31232 = PRESENTATION_STYLE_ASSIGNMENT (( #21241 ) ) ; +#31233 = LINE ( 'NONE', #33471, #22646 ) ; +#31234 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31235 = PRESENTATION_STYLE_ASSIGNMENT (( #25919 ) ) ; +#31236 = VERTEX_POINT ( 'NONE', #19378 ) ; +#31237 = CIRCLE ( 'NONE', #12567, 0.3000000000000007700 ) ; +#31238 = ORIENTED_EDGE ( 'NONE', *, *, #22334, .F. ) ; +#31239 = ORIENTED_EDGE ( 'NONE', *, *, #40398, .F. ) ; +#31240 = PRESENTATION_STYLE_ASSIGNMENT (( #39179 ) ) ; +#31241 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#31242 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#31243 = VERTEX_POINT ( 'NONE', #3660 ) ; +#31244 = FILL_AREA_STYLE ('',( #28411 ) ) ; +#31245 = CARTESIAN_POINT ( 'NONE', ( -3.045000000000000400, -0.3000000000000000400, -1.249999999999999800 ) ) ; +#31246 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31247 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33085, 'distance_accuracy_value', 'NONE'); +#31248 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31249 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -2.032879073410321300E-016, -1.000000000000000000 ) ) ; +#31250 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31251 = PLANE ( 'NONE', #18194 ) ; +#31252 = VECTOR ( 'NONE', #20617, 1000.000000000000000 ) ; +#31253 = SURFACE_STYLE_USAGE ( .BOTH. , #27879 ) ; +#31254 = EDGE_CURVE ( 'NONE', #5586, #40573, #25576, .T. ) ; +#31255 = EDGE_LOOP ( 'NONE', ( #19143, #40291, #24020, #25963 ) ) ; +#31256 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28482, 'distance_accuracy_value', 'NONE'); +#31257 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31258 = EDGE_CURVE ( 'NONE', #7453, #23515, #4842, .T. ) ; +#31259 = VERTEX_POINT ( 'NONE', #16520 ) ; +#31260 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31261 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31262 = CARTESIAN_POINT ( 'NONE', ( 3.037453582908421700, 0.3276016982734524200, -1.277681951245099400 ) ) ; +#31263 = CARTESIAN_POINT ( 'NONE', ( 4.459990511052882100, -0.01999825470383458800, -7.499875553460265500 ) ) ; +#31264 = CARTESIAN_POINT ( 'NONE', ( 3.500000000000003600, 0.2800017452961687800, -6.549999999999999800 ) ) ; +#31265 = EDGE_LOOP ( 'NONE', ( #33732, #30271, #20368, #626 ) ) ; +#31266 = EDGE_LOOP ( 'NONE', ( #9875, #30072, #40540, #451 ) ) ; +#31267 = ORIENTED_EDGE ( 'NONE', *, *, #39417, .F. ) ; +#31268 = ADVANCED_FACE ( 'NONE', ( #30628 ), #3528, .T. ) ; +#31269 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19672 ) ) ; +#31270 = CYLINDRICAL_SURFACE ( 'NONE', #13319, 0.1000000000000000500 ) ; +#31271 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31272 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.3300017452961688800, -4.975000000000000500 ) ) ; +#31273 = VECTOR ( 'NONE', #4502, 1000.000000000000000 ) ; +#31274 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.3300017452961685500, -6.224999999999999600 ) ) ; +#31275 = VECTOR ( 'NONE', #17623, 1000.000000000000000 ) ; +#31276 = VERTEX_POINT ( 'NONE', #19664 ) ; +#31277 = LINE ( 'NONE', #3496, #14114 ) ; +#31278 = ORIENTED_EDGE ( 'NONE', *, *, #13116, .F. ) ; +#31279 = ORIENTED_EDGE ( 'NONE', *, *, #2188, .T. ) ; +#31280 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26977 ) ) ; +#31281 = FILL_AREA_STYLE_COLOUR ( '', #8514 ) ; +#31282 = AXIS2_PLACEMENT_3D ( 'NONE', #17666, #27129, #17803 ) ; +#31283 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31286 = EDGE_CURVE ( 'NONE', #1054, #20683, #6355, .T. ) ; +#31285 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31284 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34008 ) ) ; +#31287 = ORIENTED_EDGE ( 'NONE', *, *, #9456, .F. ) ; +#31288 = SURFACE_STYLE_USAGE ( .BOTH. , #34399 ) ; +#31289 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31290 = LINE ( 'NONE', #13573, #4503 ) ; +#31291 = SURFACE_STYLE_USAGE ( .BOTH. , #37782 ) ; +#31292 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -5.599999999999999600 ) ) ; +#31293 = LINE ( 'NONE', #6825, #21726 ) ; +#31295 = AXIS2_PLACEMENT_3D ( 'NONE', #29923, #11124, #4777 ) ; +#31294 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1751 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38045, #37912, #21716 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31296 = SURFACE_STYLE_USAGE ( .BOTH. , #5443 ) ; +#31297 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31298 = AXIS2_PLACEMENT_3D ( 'NONE', #6062, #31890, #38381 ) ; +#31299 = DIRECTION ( 'NONE', ( 0.9396926207856547400, -1.018816780924404400E-016, 0.3420201433263653800 ) ) ; +#31300 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10989 ), #8014 ) ; +#31301 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31302 = FACE_OUTER_BOUND ( 'NONE', #25609, .T. ) ; +#31303 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.08000174529616838100, -7.350000000000000500 ) ) ; +#31304 = ORIENTED_EDGE ( 'NONE', *, *, #34112, .F. ) ; +#31305 = LINE ( 'NONE', #27204, #27250 ) ; +#31306 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#31307 = CARTESIAN_POINT ( 'NONE', ( 3.094999999999886100, -0.2999999999999999900, -1.532287565553100500 ) ) ; +#31308 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.499998254703826200, -6.299999999999993600 ) ) ; +#31309 = ADVANCED_FACE ( 'NONE', ( #20520 ), #3305, .T. ) ; +#31310 = EDGE_LOOP ( 'NONE', ( #39599, #12043, #8524, #8265 ) ) ; +#31311 = ORIENTED_EDGE ( 'NONE', *, *, #4473, .T. ) ; +#31312 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.380001745296146200, -4.781671842700004200 ) ) ; +#31313 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31314 = LINE ( 'NONE', #27018, #13638 ) ; +#31315 = CARTESIAN_POINT ( 'NONE', ( -3.337718385397965300, -0.07499999999999999700, 0.4680226303560859300 ) ) ; +#31316 = ORIENTED_EDGE ( 'NONE', *, *, #3489, .F. ) ; +#31317 = SURFACE_STYLE_FILL_AREA ( #28647 ) ; +#31318 = VERTEX_POINT ( 'NONE', #25722 ) ; +#31319 = ORIENTED_EDGE ( 'NONE', *, *, #3185, .F. ) ; +#31320 = VECTOR ( 'NONE', #11629, 1000.000000000000000 ) ; +#31321 = FILL_AREA_STYLE_COLOUR ( '', #20706 ) ; +#31322 = ADVANCED_FACE ( 'NONE', ( #20038 ), #16247, .T. ) ; +#31323 = EDGE_CURVE ( 'NONE', #11507, #16710, #855, .T. ) ; +#31324 = SURFACE_SIDE_STYLE ('',( #8196 ) ) ; +#31325 = EDGE_CURVE ( 'NONE', #26349, #37326, #23526, .T. ) ; +#31326 = FILL_AREA_STYLE ('',( #5762 ) ) ; +#31327 = ORIENTED_EDGE ( 'NONE', *, *, #21091, .F. ) ; +#31328 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31329 = EDGE_CURVE ( 'NONE', #14966, #36746, #33141, .T. ) ; +#31330 = SURFACE_STYLE_USAGE ( .BOTH. , #28497 ) ; +#31331 = SURFACE_STYLE_FILL_AREA ( #41413 ) ; +#31332 = LINE ( 'NONE', #13953, #22266 ) ; +#31333 = AXIS2_PLACEMENT_3D ( 'NONE', #14490, #40309, #4882 ) ; +#31334 = LINE ( 'NONE', #22807, #13123 ) ; +#31335 = FILL_AREA_STYLE_COLOUR ( '', #12408 ) ; +#31336 = EDGE_CURVE ( 'NONE', #36905, #23158, #22528, .T. ) ; +#31337 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#31338 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, -0.5199999999999840300, -5.299999999999999800 ) ) ; +#31339 = STYLED_ITEM ( 'NONE', ( #26895 ), #21401 ) ; +#31340 = VECTOR ( 'NONE', #9177, 1000.000000000000000 ) ; +#31341 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22437 ), #26782 ) ; +#31342 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31343 = ORIENTED_EDGE ( 'NONE', *, *, #19903, .F. ) ; +#31345 = EDGE_CURVE ( 'NONE', #9494, #17177, #32109, .T. ) ; +#31344 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27040 ) ) ; +#31346 = CARTESIAN_POINT ( 'NONE', ( 3.058010858782313600, -0.2999999999999999900, -0.1678751304874322400 ) ) ; +#31347 = PLANE ( 'NONE', #35561 ) ; +#31348 = ORIENTED_EDGE ( 'NONE', *, *, #24224, .T. ) ; +#31349 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#31350 = LINE ( 'NONE', #12548, #22760 ) ; +#31351 = PRESENTATION_STYLE_ASSIGNMENT (( #11334 ) ) ; +#31353 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24896 ) ) ; +#31352 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29170 ) ) ; +#31354 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24314 ), #26476 ) ; +#31355 = LINE ( 'NONE', #8167, #7092 ) ; +#31357 = SURFACE_STYLE_FILL_AREA ( #23762 ) ; +#31356 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026900, -1.149999999999999900 ) ) ; +#31358 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid18', #10853 ) ; +#31359 = FACE_OUTER_BOUND ( 'NONE', #15652, .T. ) ; +#31360 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12878 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26618, #36229, #23500 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31361 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703822500, -3.700000000000000200 ) ) ; +#31362 = EDGE_LOOP ( 'NONE', ( #2943, #28519, #26215, #25029, #14098, #123, #27950, #8309, #4731, #12046, #3506, #41626, #2291, #11645, #11312, #41472, #16243, #28777, #6469, #27594 ) ) ; +#31363 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31364 = ORIENTED_EDGE ( 'NONE', *, *, #15566, .T. ) ; +#31366 = ADVANCED_FACE ( 'NONE', ( #806, #36161, #2341 ), #4080, .F. ) ; +#31365 = CLOSED_SHELL ( 'NONE', ( #7170, #32600, #13757, #26519, #19936, #5095 ) ) ; +#31367 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#31368 = STYLED_ITEM ( 'NONE', ( #7750 ), #8249 ) ; +#31369 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#31370 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#31371 = CARTESIAN_POINT ( 'NONE', ( -3.337718385397999900, 0.07499999999999999700, 0.4680226303561000300 ) ) ; +#31372 = VERTEX_POINT ( 'NONE', #39515 ) ; +#31373 = DIRECTION ( 'NONE', ( 3.336029078258395200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#31374 = VECTOR ( 'NONE', #35423, 1000.000000000000000 ) ; +#31375 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31376 = VECTOR ( 'NONE', #31299, 1000.000000000000100 ) ; +#31377 = FACE_OUTER_BOUND ( 'NONE', #23680, .T. ) ; +#31378 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.380001745296144800, -4.781671842700004200 ) ) ; +#31379 = ADVANCED_FACE ( 'NONE', ( #18488 ), #20361, .T. ) ; +#31380 = CIRCLE ( 'NONE', #15518, 0.3600000000000078700 ) ; +#31381 = PLANE ( 'NONE', #7754 ) ; +#31382 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31383 = DIRECTION ( 'NONE', ( -3.281909278875039200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#31384 = LINE ( 'NONE', #36504, #17744 ) ; +#31385 = VECTOR ( 'NONE', #19435, 1000.000000000000000 ) ; +#31386 = FILL_AREA_STYLE ('',( #40836 ) ) ; +#31387 = ORIENTED_EDGE ( 'NONE', *, *, #7763, .F. ) ; +#31388 = VECTOR ( 'NONE', #21615, 1000.000000000000000 ) ; +#31389 = EDGE_CURVE ( 'NONE', #21189, #6202, #40168, .T. ) ; +#31390 = SURFACE_STYLE_USAGE ( .BOTH. , #31523 ) ; +#31391 = EDGE_LOOP ( 'NONE', ( #24357, #38833, #16326, #22791, #31793, #21143 ) ) ; +#31392 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35133, 'distance_accuracy_value', 'NONE'); +#31393 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703821100, -5.700000000000000200 ) ) ; +#31394 = ORIENTED_EDGE ( 'NONE', *, *, #9517, .F. ) ; +#31395 = LINE ( 'NONE', #9564, #24861 ) ; +#31396 = CARTESIAN_POINT ( 'NONE', ( -3.119636707815099300, 0.2999999999999999300, 1.000000000000057500 ) ) ; +#31397 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31398 = EDGE_CURVE ( 'NONE', #34936, #15629, #9323, .T. ) ; +#31399 = ORIENTED_EDGE ( 'NONE', *, *, #25878, .F. ) ; +#31400 = SURFACE_SIDE_STYLE ('',( #24968 ) ) ; +#31401 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31402 = PRESENTATION_STYLE_ASSIGNMENT (( #37354 ) ) ; +#31403 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5969 ) ) ; +#31404 = ORIENTED_EDGE ( 'NONE', *, *, #14324, .T. ) ; +#31405 = VERTEX_POINT ( 'NONE', #896 ) ; +#31406 = AXIS2_PLACEMENT_3D ( 'NONE', #3030, #19145, #12034 ) ; +#31407 = SURFACE_SIDE_STYLE ('',( #15771 ) ) ; +#31409 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10530 ) ) ; +#31408 = SURFACE_STYLE_USAGE ( .BOTH. , #21836 ) ; +#31410 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31411 = ORIENTED_EDGE ( 'NONE', *, *, #25644, .T. ) ; +#31413 = VECTOR ( 'NONE', #13206, 1000.000000000000000 ) ; +#31412 = STYLED_ITEM ( 'NONE', ( #22225 ), #37927 ) ; +#31414 = ORIENTED_EDGE ( 'NONE', *, *, #38207, .F. ) ; +#31415 = ADVANCED_FACE ( 'NONE', ( #31597 ), #29519, .T. ) ; +#31416 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#31417 = CYLINDRICAL_SURFACE ( 'NONE', #32456, 0.1000000000000000500 ) ; +#31419 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27104 ) ) ; +#31418 = AXIS2_PLACEMENT_3D ( 'NONE', #16033, #3320, #32543 ) ; +#31420 = PLANE ( 'NONE', #13499 ) ; +#31421 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#31422 = FACE_OUTER_BOUND ( 'NONE', #35882, .T. ) ; +#31423 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19619, 'distance_accuracy_value', 'NONE'); +#31425 = EDGE_CURVE ( 'NONE', #15905, #7722, #34640, .T. ) ; +#31424 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27106 ), #19570 ) ; +#31426 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31429 = AXIS2_PLACEMENT_3D ( 'NONE', #7771, #20959, #30517 ) ; +#31428 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#31427 = FACE_OUTER_BOUND ( 'NONE', #6582, .T. ) ; +#31430 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11260 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7412, #17042, #16899 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31431 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31432 = VERTEX_POINT ( 'NONE', #14760 ) ; +#31433 = DIRECTION ( 'NONE', ( 0.8190279881558656400, 0.0000000000000000000, -0.5737535661042596500 ) ) ; +#31434 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31435 = FILL_AREA_STYLE ('',( #15202 ) ) ; +#31436 = VERTEX_POINT ( 'NONE', #8784 ) ; +#31437 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000010300, -1.999998254703822000, -2.599999999999999600 ) ) ; +#31438 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31439 = LINE ( 'NONE', #12444, #31945 ) ; +#31440 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31441 = EDGE_LOOP ( 'NONE', ( #38500, #25379, #28716, #40458 ) ) ; +#31442 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.056601140521967900E-031 ) ) ; +#31443 = FILL_AREA_STYLE ('',( #21450 ) ) ; +#31444 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -1.380001745296134800, -4.781671842700004200 ) ) ; +#31445 = ORIENTED_EDGE ( 'NONE', *, *, #12274, .F. ) ; +#31446 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31447 = VECTOR ( 'NONE', #1440, 1000.000000000000000 ) ; +#31448 = ORIENTED_EDGE ( 'NONE', *, *, #39969, .T. ) ; +#31449 = EDGE_CURVE ( 'NONE', #4227, #10574, #4771, .T. ) ; +#31450 = LINE ( 'NONE', #38247, #38003 ) ; +#31451 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.6199999999999846700, -5.199999999999999300 ) ) ; +#31452 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31453 = EDGE_CURVE ( 'NONE', #24593, #112, #29026, .T. ) ; +#31454 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29522 ), #30082 ) ; +#31455 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35456, 'distance_accuracy_value', 'NONE'); +#31456 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#31457 = SURFACE_STYLE_FILL_AREA ( #25260 ) ; +#31458 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -7.200000000000000200 ) ) ; +#31459 = SURFACE_SIDE_STYLE ('',( #33836 ) ) ; +#31460 = LINE ( 'NONE', #40317, #12760 ) ; +#31461 = PLANE ( 'NONE', #23479 ) ; +#31462 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12132, 'distance_accuracy_value', 'NONE'); +#31463 = EDGE_LOOP ( 'NONE', ( #10911, #3760, #10546, #41739 ) ) ; +#31464 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#31465 = AXIS2_PLACEMENT_3D ( 'NONE', #7562, #36817, #7419 ) ; +#31466 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31467 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#31468 = VERTEX_POINT ( 'NONE', #18023 ) ; +#31470 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11777 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25916, #38746, #22669 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31469 = STYLED_ITEM ( 'NONE', ( #3980 ), #30577 ) ; +#31471 = SURFACE_SIDE_STYLE ('',( #39878 ) ) ; +#31472 = ORIENTED_EDGE ( 'NONE', *, *, #9355, .T. ) ; +#31473 = LINE ( 'NONE', #24942, #38024 ) ; +#31476 = EDGE_CURVE ( 'NONE', #2462, #23496, #11761, .T. ) ; +#31475 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#31474 = STYLED_ITEM ( 'NONE', ( #24353 ), #35221 ) ; +#31477 = FACE_OUTER_BOUND ( 'NONE', #32959, .T. ) ; +#31478 = ORIENTED_EDGE ( 'NONE', *, *, #21774, .F. ) ; +#31479 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#31480 = ORIENTED_EDGE ( 'NONE', *, *, #20918, .T. ) ; +#31481 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, -2.031000000000001500, -6.549999999999999800 ) ) ; +#31482 = ADVANCED_FACE ( 'NONE', ( #28523 ), #5567, .F. ) ; +#31484 = STYLED_ITEM ( 'NONE', ( #35411 ), #1082 ) ; +#31483 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6361 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2780, #6003, #28304 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31485 = SURFACE_SIDE_STYLE ('',( #21962 ) ) ; +#31486 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.8500017452961657900, -5.575000000000001100 ) ) ; +#31487 = ORIENTED_EDGE ( 'NONE', *, *, #30918, .F. ) ; +#31488 = FILL_AREA_STYLE_COLOUR ( '', #25007 ) ; +#31489 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.499998254703824400, -6.699999999999994000 ) ) ; +#31490 = ORIENTED_EDGE ( 'NONE', *, *, #4836, .T. ) ; +#31491 = PRESENTATION_STYLE_ASSIGNMENT (( #26407 ) ) ; +#31492 = SURFACE_STYLE_FILL_AREA ( #19769 ) ; +#31493 = CARTESIAN_POINT ( 'NONE', ( -3.395000000000000000, 0.2000000000000000900, -3.300000000000000300 ) ) ; +#31494 = VECTOR ( 'NONE', #33910, 1000.000000000000000 ) ; +#31495 = LINE ( 'NONE', #38277, #30479 ) ; +#31496 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000800, -0.2339555568811695900 ) ) ; +#31497 = CARTESIAN_POINT ( 'NONE', ( -4.769999999999744700, 0.2800000000000027500, -0.2339555568811695900 ) ) ; +#31498 = CARTESIAN_POINT ( 'NONE', ( 3.208603896932106900, 0.6500000000000002400, -3.300000000000000300 ) ) ; +#31499 = PLANE ( 'NONE', #16500 ) ; +#31500 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31501 = CARTESIAN_POINT ( 'NONE', ( -3.120369891805397300, 0.2799999999999983600, -4.549999999999999800 ) ) ; +#31502 = EDGE_CURVE ( 'NONE', #4042, #7908, #39647, .T. ) ; +#31503 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 2.032879073410321300E-016, 1.000000000000000000 ) ) ; +#31504 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -7.228014483236708400E-016 ) ) ; +#31505 = ORIENTED_EDGE ( 'NONE', *, *, #26323, .T. ) ; +#31506 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31507 = EDGE_CURVE ( 'NONE', #24916, #19776, #13339, .T. ) ; +#31508 = LINE ( 'NONE', #5210, #5740 ) ; +#31509 = VERTEX_POINT ( 'NONE', #8235 ) ; +#31510 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#31511 = CYLINDRICAL_SURFACE ( 'NONE', #13582, 0.2000000000000001200 ) ; +#31512 = ORIENTED_EDGE ( 'NONE', *, *, #41530, .T. ) ; +#31513 = ADVANCED_FACE ( 'NONE', ( #16398 ), #41548, .T. ) ; +#31514 = ORIENTED_EDGE ( 'NONE', *, *, #8410, .F. ) ; +#31515 = SURFACE_SIDE_STYLE ('',( #38638 ) ) ; +#31517 = ORIENTED_EDGE ( 'NONE', *, *, #25350, .T. ) ; +#31516 = VECTOR ( 'NONE', #34845, 1000.000000000000000 ) ; +#31518 = ORIENTED_EDGE ( 'NONE', *, *, #17508, .T. ) ; +#31519 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9832 ), #33686 ) ; +#31520 = CIRCLE ( 'NONE', #31230, 0.3000000000000003800 ) ; +#31521 = STYLED_ITEM ( 'NONE', ( #23165 ), #19936 ) ; +#31522 = VECTOR ( 'NONE', #36894, 1000.000000000000000 ) ; +#31523 = SURFACE_SIDE_STYLE ('',( #35054 ) ) ; +#31524 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31525 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#31526 = FILL_AREA_STYLE_COLOUR ( '', #13423 ) ; +#31527 = ADVANCED_FACE ( 'NONE', ( #13889 ), #12457, .T. ) ; +#31528 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40990 ) ) ; +#31529 = VECTOR ( 'NONE', #19699, 1000.000000000000000 ) ; +#31530 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 0.1000000000000131600, -1.749999999999999800 ) ) ; +#31531 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, 1.000000000000000000, -2.344220913482171200E-016 ) ) ; +#31533 = EDGE_CURVE ( 'NONE', #15473, #2418, #27047, .T. ) ; +#31532 = STYLED_ITEM ( 'NONE', ( #21586 ), #36471 ) ; +#31534 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000800, -0.2339555568811695900 ) ) ; +#31535 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31536 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31537 = VECTOR ( 'NONE', #39636, 1000.000000000000000 ) ; +#31538 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8815, 'distance_accuracy_value', 'NONE'); +#31539 = FILL_AREA_STYLE ('',( #34509 ) ) ; +#31541 = AXIS2_PLACEMENT_3D ( 'NONE', #37850, #40672, #21369 ) ; +#31540 = AXIS2_PLACEMENT_3D ( 'NONE', #16347, #13650, #33002 ) ; +#31542 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25697 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5080, #17684, #36872 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31543 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 0.2999999999999999900, -1.249999999999999800 ) ) ; +#31544 = SURFACE_SIDE_STYLE ('',( #10817 ) ) ; +#31545 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41803, 'distance_accuracy_value', 'NONE'); +#31546 = FILL_AREA_STYLE ('',( #3022 ) ) ; +#31547 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31548 = ORIENTED_EDGE ( 'NONE', *, *, #41563, .F. ) ; +#31549 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#31550 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31551 = VECTOR ( 'NONE', #20666, 1000.000000000000000 ) ; +#31552 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, 0.0000000000000000000 ) ) ; +#31553 = VERTEX_POINT ( 'NONE', #9342 ) ; +#31554 = DIRECTION ( 'NONE', ( -0.08715574274765916500, 0.0000000000000000000, -0.9961946980917455500 ) ) ; +#31555 = ORIENTED_EDGE ( 'NONE', *, *, #21523, .F. ) ; +#31556 = EDGE_LOOP ( 'NONE', ( #8231, #202, #37304, #39825 ) ) ; +#31557 = DIRECTION ( 'NONE', ( 1.734723475976959500E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#31558 = FILL_AREA_STYLE_COLOUR ( '', #16325 ) ; +#31559 = SURFACE_STYLE_FILL_AREA ( #9610 ) ; +#31560 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31561 = EDGE_CURVE ( 'NONE', #18964, #26961, #7798, .T. ) ; +#31562 = ADVANCED_FACE ( 'NONE', ( #30551 ), #25628, .F. ) ; +#31563 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#31564 = FACE_OUTER_BOUND ( 'NONE', #14858, .T. ) ; +#31565 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999998900, 0.2000000000000000100, -3.279289321881344600 ) ) ; +#31566 = SURFACE_STYLE_FILL_AREA ( #30414 ) ; +#31567 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31568 = FILL_AREA_STYLE_COLOUR ( '', #20068 ) ; +#31569 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#31570 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31571 = ORIENTED_EDGE ( 'NONE', *, *, #6926, .F. ) ; +#31572 = EDGE_CURVE ( 'NONE', #37869, #34722, #35581, .T. ) ; +#31573 = FILL_AREA_STYLE ('',( #5306 ) ) ; +#31574 = EDGE_CURVE ( 'NONE', #29337, #1213, #5250, .T. ) ; +#31575 = AXIS2_PLACEMENT_3D ( 'NONE', #2835, #15773, #12661 ) ; +#31576 = ADVANCED_FACE ( 'NONE', ( #25966 ), #39601, .F. ) ; +#31577 = VERTEX_POINT ( 'NONE', #3290 ) ; +#31578 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#31579 = ORIENTED_EDGE ( 'NONE', *, *, #8159, .T. ) ; +#31580 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31581 = VECTOR ( 'NONE', #38710, 1000.000000000000000 ) ; +#31582 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31583 = PLANE ( 'NONE', #40867 ) ; +#31584 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2119 ), #9346 ) ; +#31585 = VECTOR ( 'NONE', #39410, 1000.000000000000000 ) ; +#31586 = ORIENTED_EDGE ( 'NONE', *, *, #6154, .F. ) ; +#31587 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12999 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35630, #19965, #39264 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31588 = VECTOR ( 'NONE', #22579, 1000.000000000000000 ) ; +#31589 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31590 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#31592 = EDGE_CURVE ( 'NONE', #16731, #4444, #762, .T. ) ; +#31591 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32859 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25711, #28800, #9431 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31593 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.2999999999999999900, -1.399999999927000300 ) ) ; +#31594 = VERTEX_POINT ( 'NONE', #26171 ) ; +#31595 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#31596 = ORIENTED_EDGE ( 'NONE', *, *, #39843, .F. ) ; +#31597 = FACE_OUTER_BOUND ( 'NONE', #4387, .T. ) ; +#31599 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20815 ) ) ; +#31598 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18041 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10592, #36739, #20525 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31600 = FILL_AREA_STYLE ('',( #34566 ) ) ; +#31601 = LINE ( 'NONE', #25755, #23006 ) ; +#31602 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4033 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23075, #9908, #7095 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31603 = VECTOR ( 'NONE', #15977, 1000.000000000000000 ) ; +#31604 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31605 = VERTEX_POINT ( 'NONE', #10033 ) ; +#31606 = STYLED_ITEM ( 'NONE', ( #13895 ), #33250 ) ; +#31607 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#31608 = VECTOR ( 'NONE', #16837, 1000.000000000000000 ) ; +#31609 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#31610 = SURFACE_STYLE_FILL_AREA ( #19688 ) ; +#31611 = VECTOR ( 'NONE', #6613, 1000.000000000000000 ) ; +#31612 = EDGE_LOOP ( 'NONE', ( #35539, #35716, #29066 ) ) ; +#31613 = PLANE ( 'NONE', #2734 ) ; +#31614 = SURFACE_STYLE_USAGE ( .BOTH. , #21903 ) ; +#31615 = ADVANCED_FACE ( 'NONE', ( #16882 ), #101, .F. ) ; +#31616 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31617 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#31618 = FILL_AREA_STYLE_COLOUR ( '', #15660 ) ; +#31619 = FILL_AREA_STYLE_COLOUR ( '', #31569 ) ; +#31620 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39312, 'distance_accuracy_value', 'NONE'); +#31621 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31622 = ORIENTED_EDGE ( 'NONE', *, *, #38662, .F. ) ; +#31623 = SURFACE_STYLE_USAGE ( .BOTH. , #2162 ) ; +#31624 = SURFACE_STYLE_USAGE ( .BOTH. , #24765 ) ; +#31625 = EDGE_CURVE ( 'NONE', #25157, #24035, #22451, .T. ) ; +#31626 = PLANE ( 'NONE', #26670 ) ; +#31627 = ORIENTED_EDGE ( 'NONE', *, *, #624, .T. ) ; +#31628 = VERTEX_POINT ( 'NONE', #28980 ) ; +#31629 = VERTEX_POINT ( 'NONE', #26314 ) ; +#31630 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#31631 = SURFACE_STYLE_USAGE ( .BOTH. , #15413 ) ; +#31632 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31633 = EDGE_CURVE ( 'NONE', #4273, #15113, #3238, .T. ) ; +#31634 = ORIENTED_EDGE ( 'NONE', *, *, #41036, .T. ) ; +#31635 = ORIENTED_EDGE ( 'NONE', *, *, #40780, .F. ) ; +#31636 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27315 ) ) ; +#31637 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31638 = CARTESIAN_POINT ( 'NONE', ( 1.149999999999999900, -1.380001745296132400, -6.031671842700004200 ) ) ; +#31639 = SURFACE_STYLE_FILL_AREA ( #17593 ) ; +#31640 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33008 ) ) ; +#31641 = FACE_OUTER_BOUND ( 'NONE', #10737, .T. ) ; +#31642 = VECTOR ( 'NONE', #21968, 1000.000000000000000 ) ; +#31645 = EDGE_CURVE ( 'NONE', #25692, #17689, #21461, .T. ) ; +#31644 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38134 ), #6007 ) ; +#31643 = FILL_AREA_STYLE_COLOUR ( '', #38769 ) ; +#31646 = CARTESIAN_POINT ( 'NONE', ( 3.395000000000000000, -0.1999999999999998700, -3.299999999999999800 ) ) ; +#31647 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31648 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31649 = SURFACE_STYLE_FILL_AREA ( #3011 ) ; +#31651 = AXIS2_PLACEMENT_3D ( 'NONE', #27693, #8318, #34335 ) ; +#31650 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20432 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10062, #23372, #7247 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31653 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11900 ) ) ; +#31652 = STYLED_ITEM ( 'NONE', ( #17737 ), #34063 ) ; +#31654 = STYLED_ITEM ( 'NONE', ( #1206 ), #8406 ) ; +#31655 = CARTESIAN_POINT ( 'NONE', ( -4.620424212713737200, -0.2799999999999974200, -1.049979056049130000 ) ) ; +#31656 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#31657 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.4300017452961689100, -5.200000000000001100 ) ) ; +#31658 = LINE ( 'NONE', #34405, #33169 ) ; +#31659 = FILL_AREA_STYLE_COLOUR ( '', #30152 ) ; +#31660 = FILL_AREA_STYLE_COLOUR ( '', #8580 ) ; +#31661 = ORIENTED_EDGE ( 'NONE', *, *, #34546, .T. ) ; +#31662 = SURFACE_STYLE_USAGE ( .BOTH. , #34923 ) ; +#31663 = CARTESIAN_POINT ( 'NONE', ( -4.450000000000001100, -1.400001745296194800, -7.350000000000005900 ) ) ; +#31664 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, -0.7071067811865483500 ) ) ; +#31665 = ORIENTED_EDGE ( 'NONE', *, *, #15378, .F. ) ; +#31666 = EDGE_LOOP ( 'NONE', ( #28068, #34625, #6927, #8336 ) ) ; +#31667 = CIRCLE ( 'NONE', #34621, 0.1000000000000001200 ) ; +#31668 = ORIENTED_EDGE ( 'NONE', *, *, #13125, .F. ) ; +#31669 = CIRCLE ( 'NONE', #27219, 0.3600000000000078700 ) ; +#31670 = SURFACE_STYLE_FILL_AREA ( #24334 ) ; +#31671 = FILL_AREA_STYLE_COLOUR ( '', #20857 ) ; +#31672 = VECTOR ( 'NONE', #30912, 1000.000000000000000 ) ; +#31673 = LINE ( 'NONE', #9359, #19597 ) ; +#31674 = ORIENTED_EDGE ( 'NONE', *, *, #7075, .F. ) ; +#31675 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#31676 = ORIENTED_EDGE ( 'NONE', *, *, #11751, .F. ) ; +#31677 = SURFACE_STYLE_USAGE ( .BOTH. , #25087 ) ; +#31678 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31679 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31680 = FACE_OUTER_BOUND ( 'NONE', #19390, .T. ) ; +#31681 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#31682 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#31683 = DIRECTION ( 'NONE', ( 1.355252715606880500E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31684 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703821100, -5.899999999999999500 ) ) ; +#31685 = EDGE_CURVE ( 'NONE', #19098, #3221, #10292, .T. ) ; +#31686 = DIRECTION ( 'NONE', ( 6.056601140521966100E-031, 1.987721548152419000E-045, -1.000000000000000000 ) ) ; +#31687 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -3.700000000000000200 ) ) ; +#31688 = CARTESIAN_POINT ( 'NONE', ( 2.949999999999999700, -1.139998254717350800, -6.299996877890552400 ) ) ; +#31689 = EDGE_CURVE ( 'NONE', #4141, #24483, #30011, .T. ) ; +#31690 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3455, 'distance_accuracy_value', 'NONE'); +#31691 = AXIS2_PLACEMENT_3D ( 'NONE', #12498, #37811, #22014 ) ; +#31692 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000800, -4.099999999999999600 ) ) ; +#31693 = PLANE ( 'NONE', #21648 ) ; +#31694 = VECTOR ( 'NONE', #16307, 1000.000000000000000 ) ; +#31695 = STYLED_ITEM ( 'NONE', ( #33414 ), #23025 ) ; +#31696 = VERTEX_POINT ( 'NONE', #32371 ) ; +#31697 = SURFACE_STYLE_FILL_AREA ( #13304 ) ; +#31698 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31699 = SURFACE_STYLE_USAGE ( .BOTH. , #22256 ) ; +#31700 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#31701 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28741 ) ) ; +#31702 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31703 = ORIENTED_EDGE ( 'NONE', *, *, #19231, .F. ) ; +#31704 = ORIENTED_EDGE ( 'NONE', *, *, #21356, .T. ) ; +#31705 = VECTOR ( 'NONE', #17134, 1000.000000000000000 ) ; +#31706 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31707 = SURFACE_STYLE_FILL_AREA ( #15805 ) ; +#31708 = AXIS2_PLACEMENT_3D ( 'NONE', #22772, #16547, #3409 ) ; +#31709 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41394 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13095, #19490, #26391 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31710 = ORIENTED_EDGE ( 'NONE', *, *, #27570, .T. ) ; +#31711 = ORIENTED_EDGE ( 'NONE', *, *, #22901, .F. ) ; +#31712 = ORIENTED_EDGE ( 'NONE', *, *, #32016, .F. ) ; +#31713 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, 0.07499999999999998300, 0.6780706550913999700 ) ) ; +#31714 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#31716 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39219 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2892, #25349, #35204 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31715 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23053 ), #17130 ) ; +#31717 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31719 = EDGE_CURVE ( 'NONE', #16838, #20974, #18413, .T. ) ; +#31718 = STYLED_ITEM ( 'NONE', ( #38232 ), #34969 ) ; +#31720 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31721 = ORIENTED_EDGE ( 'NONE', *, *, #11015, .T. ) ; +#31722 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31724 = EDGE_LOOP ( 'NONE', ( #68, #11479, #18218, #31676 ) ) ; +#31723 = ADVANCED_FACE ( 'NONE', ( #37593 ), #9735, .T. ) ; +#31725 = VECTOR ( 'NONE', #34010, 1000.000000000000000 ) ; +#31726 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#31728 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15225 ), #2819 ) ; +#31727 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34703 ), #15527 ) ; +#31729 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521965300E-031 ) ) ; +#31730 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31731 = SURFACE_STYLE_FILL_AREA ( #25933 ) ; +#31732 = ORIENTED_EDGE ( 'NONE', *, *, #36472, .F. ) ; +#31733 = LINE ( 'NONE', #21524, #23143 ) ; +#31734 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31735 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #35755, #217, #38700, #10017 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#31736 = ADVANCED_FACE ( 'NONE', ( #38072 ), #23191, .F. ) ; +#31737 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18191, 'distance_accuracy_value', 'NONE'); +#31738 = FILL_AREA_STYLE_COLOUR ( '', #26390 ) ; +#31739 = SURFACE_STYLE_USAGE ( .BOTH. , #12504 ) ; +#31740 = ORIENTED_EDGE ( 'NONE', *, *, #31502, .F. ) ; +#31741 = CARTESIAN_POINT ( 'NONE', ( 2.995000000000000100, -0.2999999999999999900, -1.421843600000000100 ) ) ; +#31742 = FACE_OUTER_BOUND ( 'NONE', #28231, .T. ) ; +#31743 = ORIENTED_EDGE ( 'NONE', *, *, #28018, .F. ) ; +#31744 = ORIENTED_EDGE ( 'NONE', *, *, #30233, .T. ) ; +#31745 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31746 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 0.3499999999999996400, -1.250000000000000000 ) ) ; +#31747 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#31748 = EDGE_CURVE ( 'NONE', #38978, #38777, #28476, .T. ) ; +#31749 = ORIENTED_EDGE ( 'NONE', *, *, #4032, .F. ) ; +#31750 = CARTESIAN_POINT ( 'NONE', ( 4.700922750916311600, -0.1199982547038315700, -6.625946193225244600 ) ) ; +#31751 = EDGE_LOOP ( 'NONE', ( #3460, #7173, #20116, #35379 ) ) ; +#31752 = SURFACE_STYLE_FILL_AREA ( #39970 ) ; +#31753 = PRESENTATION_STYLE_ASSIGNMENT (( #19421 ) ) ; +#31754 = CIRCLE ( 'NONE', #36138, 0.2999999999999999300 ) ; +#31755 = EDGE_CURVE ( 'NONE', #26216, #11747, #8232, .T. ) ; +#31756 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34736 ), #13623 ) ; +#31757 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#31758 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31759 = VECTOR ( 'NONE', #213, 1000.000000000000000 ) ; +#31760 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#31761 = VERTEX_POINT ( 'NONE', #10319 ) ; +#31762 = FILL_AREA_STYLE ('',( #28517 ) ) ; +#31763 = CIRCLE ( 'NONE', #15801, 0.9999999999999995600 ) ; +#31764 = ORIENTED_EDGE ( 'NONE', *, *, #24637, .T. ) ; +#31765 = EDGE_LOOP ( 'NONE', ( #27653, #2046, #31404, #39023 ) ) ; +#31766 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20984 ), #13069 ) ; +#31767 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31768 = PLANE ( 'NONE', #32391 ) ; +#31769 = ORIENTED_EDGE ( 'NONE', *, *, #11325, .F. ) ; +#31770 = FILL_AREA_STYLE ('',( #31208 ) ) ; +#31771 = ADVANCED_FACE ( 'NONE', ( #15825 ), #789, .F. ) ; +#31772 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5794 ) ) ; +#31773 = STYLED_ITEM ( 'NONE', ( #9277 ), #31576 ) ; +#31774 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28265, 'distance_accuracy_value', 'NONE'); +#31775 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7378 ), #13897 ) ; +#31776 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31777 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31779 = EDGE_CURVE ( 'NONE', #34928, #28878, #37555, .T. ) ; +#31778 = STYLED_ITEM ( 'NONE', ( #17059 ), #36119 ) ; +#31780 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 9.268445570935434200E-016, 1.000000000000000000 ) ) ; +#31782 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31781 = DIRECTION ( 'NONE', ( 6.056601140521968800E-031, 1.751088030515227300E-045, 1.000000000000000000 ) ) ; +#31783 = SURFACE_STYLE_USAGE ( .BOTH. , #5666 ) ; +#31784 = ADVANCED_FACE ( 'NONE', ( #4193 ), #10467, .T. ) ; +#31786 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23685 ), #9306 ) ; +#31785 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15027 ) ) ; +#31787 = FILL_AREA_STYLE_COLOUR ( '', #32569 ) ; +#31788 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18016 ), #32006 ) ; +#31789 = ORIENTED_EDGE ( 'NONE', *, *, #25471, .F. ) ; +#31790 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.2339555568811695400 ) ) ; +#31791 = LINE ( 'NONE', #20741, #30775 ) ; +#31792 = SURFACE_STYLE_USAGE ( .BOTH. , #25332 ) ; +#31793 = ORIENTED_EDGE ( 'NONE', *, *, #64, .T. ) ; +#31794 = CYLINDRICAL_SURFACE ( 'NONE', #20355, 0.2000000000000005100 ) ; +#31795 = ORIENTED_EDGE ( 'NONE', *, *, #33948, .F. ) ; +#31796 = FACE_OUTER_BOUND ( 'NONE', #40485, .T. ) ; +#31797 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2201, 'distance_accuracy_value', 'NONE'); +#31798 = VERTEX_POINT ( 'NONE', #39840 ) ; +#31799 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#31800 = ORIENTED_EDGE ( 'NONE', *, *, #17037, .F. ) ; +#31801 = EDGE_LOOP ( 'NONE', ( #41749, #16361, #9102, #9375 ) ) ; +#31802 = DIRECTION ( 'NONE', ( 2.891205793294677400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#31803 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#31804 = VERTEX_POINT ( 'NONE', #36341 ) ; +#31805 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#31806 = FILL_AREA_STYLE ('',( #5967 ) ) ; +#31807 = PLANE ( 'NONE', #33808 ) ; +#31808 = EDGE_CURVE ( 'NONE', #39077, #27344, #18897, .T. ) ; +#31809 = VECTOR ( 'NONE', #35489, 1000.000000000000000 ) ; +#31810 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31811 = EDGE_CURVE ( 'NONE', #20974, #38280, #36080, .T. ) ; +#31812 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003000, 0.6800017452961720800, -1.649999999999999500 ) ) ; +#31813 = FILL_AREA_STYLE ('',( #12313 ) ) ; +#31814 = SURFACE_STYLE_USAGE ( .BOTH. , #9187 ) ; +#31815 = ADVANCED_FACE ( 'NONE', ( #1725 ), #26892, .F. ) ; +#31816 = FACE_OUTER_BOUND ( 'NONE', #19870, .T. ) ; +#31817 = CARTESIAN_POINT ( 'NONE', ( 4.465000000000003400, -0.01999825470383237400, -7.499624765331574000 ) ) ; +#31818 = AXIS2_PLACEMENT_3D ( 'NONE', #38736, #3448, #39152 ) ; +#31819 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31820 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.180001745296166000, -4.675000000000000700 ) ) ; +#31821 = SURFACE_STYLE_FILL_AREA ( #8237 ) ; +#31822 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31823 = VERTEX_POINT ( 'NONE', #23475 ) ; +#31824 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#31825 = LINE ( 'NONE', #10373, #30815 ) ; +#31826 = SURFACE_STYLE_USAGE ( .BOTH. , #9631 ) ; +#31827 = LINE ( 'NONE', #4692, #39390 ) ; +#31828 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31829 = ORIENTED_EDGE ( 'NONE', *, *, #2044, .T. ) ; +#31830 = FACE_OUTER_BOUND ( 'NONE', #20781, .T. ) ; +#31831 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000004700, -1.400001745296161500, -7.500000000000006200 ) ) ; +#31832 = STYLED_ITEM ( 'NONE', ( #39723 ), #11696 ) ; +#31833 = PLANE ( 'NONE', #5281 ) ; +#31836 = EDGE_CURVE ( 'NONE', #4031, #15199, #9190, .T. ) ; +#31835 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#31834 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12902 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29517, #208, #9864 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31837 = ORIENTED_EDGE ( 'NONE', *, *, #37568, .T. ) ; +#31838 = EDGE_LOOP ( 'NONE', ( #3887, #5266, #19837, #35895 ) ) ; +#31839 = VERTEX_POINT ( 'NONE', #36752 ) ; +#31840 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.2800017452961687200, -6.150000000000000400 ) ) ; +#31841 = PLANE ( 'NONE', #34603 ) ; +#31843 = AXIS2_PLACEMENT_3D ( 'NONE', #38164, #28843, #19137 ) ; +#31842 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2926 ) ) ; +#31844 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, 0.03300000000000004300 ) ) ; +#31845 = STYLED_ITEM ( 'NONE', ( #16776 ), #40082 ) ; +#31846 = SURFACE_STYLE_USAGE ( .BOTH. , #41565 ) ; +#31847 = STYLED_ITEM ( 'NONE', ( #10385 ), #32565 ) ; +#31848 = ORIENTED_EDGE ( 'NONE', *, *, #32662, .T. ) ; +#31849 = PRESENTATION_STYLE_ASSIGNMENT (( #4464 ) ) ; +#31850 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3137 ), #36207 ) ; +#31851 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#31852 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31853 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31854 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 10.30000000000000100, -1.250000000000000000 ) ) ; +#31855 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#31856 = LINE ( 'NONE', #37608, #14683 ) ; +#31857 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31858 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.3500000000000000300, 0.3499999999999999800 ) ) ; +#31859 = ORIENTED_EDGE ( 'NONE', *, *, #7258, .T. ) ; +#31860 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.3499999999999996400, -1.250000000000000000 ) ) ; +#31861 = VECTOR ( 'NONE', #9405, 1000.000000000000000 ) ; +#31862 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.380001745296130600, -6.031671842700004200 ) ) ; +#31863 = ORIENTED_EDGE ( 'NONE', *, *, #16471, .F. ) ; +#31864 = ORIENTED_EDGE ( 'NONE', *, *, #5152, .F. ) ; +#31865 = FILL_AREA_STYLE ('',( #28345 ) ) ; +#31866 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.630424214906979400, -1.050000000000000000 ) ) ; +#31867 = EDGE_CURVE ( 'NONE', #16597, #20775, #18849, .T. ) ; +#31868 = FILL_AREA_STYLE ('',( #28630 ) ) ; +#31869 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14558, 'distance_accuracy_value', 'NONE'); +#31870 = PRESENTATION_STYLE_ASSIGNMENT (( #20232 ) ) ; +#31871 = EDGE_LOOP ( 'NONE', ( #32745, #21838, #24398, #15555 ) ) ; +#31872 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#31873 = VERTEX_POINT ( 'NONE', #17424 ) ; +#31874 = EDGE_LOOP ( 'NONE', ( #2779, #15665, #22406, #15539 ) ) ; +#31875 = EDGE_CURVE ( 'NONE', #21057, #1076, #30716, .T. ) ; +#31876 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29802 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21722, #11787, #21581 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31877 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 2.032879073410321300E-016, 1.000000000000000000 ) ) ; +#31878 = EDGE_CURVE ( 'NONE', #3147, #895, #17845, .T. ) ; +#31879 = FILL_AREA_STYLE ('',( #19067 ) ) ; +#31880 = EDGE_LOOP ( 'NONE', ( #39136, #29224, #17361, #25569 ) ) ; +#31881 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#31882 = PRESENTATION_STYLE_ASSIGNMENT (( #9127 ) ) ; +#31883 = ORIENTED_EDGE ( 'NONE', *, *, #1480, .F. ) ; +#31884 = AXIS2_PLACEMENT_3D ( 'NONE', #26942, #23665, #39469 ) ; +#31885 = SURFACE_STYLE_FILL_AREA ( #3361 ) ; +#31886 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25426 ), #36245 ) ; +#31887 = VECTOR ( 'NONE', #15743, 1000.000000000000000 ) ; +#31889 = EDGE_CURVE ( 'NONE', #14191, #1491, #11240, .T. ) ; +#31888 = AXIS2_PLACEMENT_3D ( 'NONE', #14269, #22873, #32606 ) ; +#31890 = DIRECTION ( 'NONE', ( -6.056601140521967900E-031, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#31891 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#31892 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#31893 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -1.380001745296141500, -5.449999999999994000 ) ) ; +#31894 = VECTOR ( 'NONE', #11068, 1000.000000000000000 ) ; +#31895 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31897 = STYLED_ITEM ( 'NONE', ( #16035 ), #3542 ) ; +#31896 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14193 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14922, #14651, #34136 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31898 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26493 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1858, #17667, #11263 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31899 = ORIENTED_EDGE ( 'NONE', *, *, #23060, .F. ) ; +#31900 = LINE ( 'NONE', #1166, #30412 ) ; +#31901 = AXIS2_PLACEMENT_3D ( 'NONE', #12156, #34777, #18973 ) ; +#31902 = CARTESIAN_POINT ( 'NONE', ( 4.465000000000003400, -0.01999825470383237400, -7.499624765331574000 ) ) ; +#31903 = SURFACE_STYLE_USAGE ( .BOTH. , #22322 ) ; +#31904 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31905 = AXIS2_PLACEMENT_3D ( 'NONE', #21745, #8823, #136 ) ; +#31906 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4458, 'distance_accuracy_value', 'NONE'); +#31907 = ORIENTED_EDGE ( 'NONE', *, *, #8603, .F. ) ; +#31908 = FACE_OUTER_BOUND ( 'NONE', #4951, .T. ) ; +#31909 = FILL_AREA_STYLE_COLOUR ( '', #27184 ) ; +#31910 = LINE ( 'NONE', #16127, #20858 ) ; +#31911 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#31912 = VERTEX_POINT ( 'NONE', #1344 ) ; +#31913 = LINE ( 'NONE', #1383, #19307 ) ; +#31914 = ORIENTED_EDGE ( 'NONE', *, *, #2044, .F. ) ; +#31915 = CARTESIAN_POINT ( 'NONE', ( 3.127842712513713200, 0.3292893218813450800, -1.600000000042763000 ) ) ; +#31916 = SURFACE_STYLE_USAGE ( .BOTH. , #32469 ) ; +#31917 = SURFACE_STYLE_USAGE ( .BOTH. , #5814 ) ; +#31918 = VERTEX_POINT ( 'NONE', #1750 ) ; +#31919 = LINE ( 'NONE', #21343, #40019 ) ; +#31920 = ORIENTED_EDGE ( 'NONE', *, *, #16323, .T. ) ; +#31921 = ADVANCED_FACE ( 'NONE', ( #40097 ), #41085, .T. ) ; +#31922 = VECTOR ( 'NONE', #35485, 1000.000000000000000 ) ; +#31923 = EDGE_CURVE ( 'NONE', #1050, #14188, #35009, .T. ) ; +#31924 = FILL_AREA_STYLE_COLOUR ( '', #2754 ) ; +#31925 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.5547001962252291500, 0.8320502943378437200 ) ) ; +#31926 = SURFACE_STYLE_USAGE ( .BOTH. , #22073 ) ; +#31927 = ADVANCED_FACE ( 'NONE', ( #23952 ), #40526, .T. ) ; +#31928 = CARTESIAN_POINT ( 'NONE', ( 3.137984242872999800, -0.2999999999999999900, 0.9623819784616000100 ) ) ; +#31929 = FILL_AREA_STYLE_COLOUR ( '', #10116 ) ; +#31930 = EDGE_CURVE ( 'NONE', #31761, #35573, #15362, .T. ) ; +#31931 = AXIS2_PLACEMENT_3D ( 'NONE', #848, #10237, #36654 ) ; +#31932 = ORIENTED_EDGE ( 'NONE', *, *, #6394, .T. ) ; +#31933 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31934 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#31935 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31936 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36301 ), #9467 ) ; +#31937 = ORIENTED_EDGE ( 'NONE', *, *, #13559, .F. ) ; +#31938 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#31939 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26847 ) ) ; +#31940 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31941 = SURFACE_STYLE_FILL_AREA ( #20642 ) ; +#31942 = ORIENTED_EDGE ( 'NONE', *, *, #14030, .T. ) ; +#31943 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#31945 = VECTOR ( 'NONE', #35064, 1000.000000000000000 ) ; +#31944 = DIRECTION ( 'NONE', ( -0.9396926207859093200, -0.3420201433256663300, -4.188538737677058300E-017 ) ) ; +#31946 = FILL_AREA_STYLE ('',( #2634 ) ) ; +#31947 = ORIENTED_EDGE ( 'NONE', *, *, #39165, .F. ) ; +#31948 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18995 ) ) ; +#31949 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8551 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24757, #8864, #5356 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31950 = SURFACE_STYLE_USAGE ( .BOTH. , #19140 ) ; +#31951 = VECTOR ( 'NONE', #25636, 1000.000000000000000 ) ; +#31952 = ORIENTED_EDGE ( 'NONE', *, *, #30532, .T. ) ; +#31953 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18596 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33638, #23894, #21096 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#31954 = PLANE ( 'NONE', #31406 ) ; +#31955 = FILL_AREA_STYLE ('',( #2772 ) ) ; +#31957 = EDGE_CURVE ( 'NONE', #1102, #26216, #22888, .T. ) ; +#31956 = AXIS2_PLACEMENT_3D ( 'NONE', #8264, #37381, #37245 ) ; +#31958 = ORIENTED_EDGE ( 'NONE', *, *, #24862, .F. ) ; +#31959 = FILL_AREA_STYLE ('',( #18856 ) ) ; +#31960 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#31961 = VECTOR ( 'NONE', #36031, 1000.000000000000000 ) ; +#31962 = EDGE_LOOP ( 'NONE', ( #7142, #23276, #17348, #31942 ) ) ; +#31964 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41431 ), #1699 ) ; +#31963 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31965 = PRESENTATION_STYLE_ASSIGNMENT (( #29799 ) ) ; +#31966 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#31967 = LINE ( 'NONE', #40276, #24409 ) ; +#31968 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22761 ) ) ; +#31969 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31970 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #32639, #9879, #6392, #25613 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 2.418858405776376700, 3.141592653589793100 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956567800, 0.9569428977956567800, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#31971 = FILL_AREA_STYLE ('',( #41170 ) ) ; +#31972 = ADVANCED_FACE ( 'NONE', ( #6746 ), #2038, .F. ) ; +#31973 = FILL_AREA_STYLE_COLOUR ( '', #3885 ) ; +#31974 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -7.744301232039317900E-017 ) ) ; +#31975 = PRESENTATION_STYLE_ASSIGNMENT (( #17205 ) ) ; +#31976 = SURFACE_STYLE_USAGE ( .BOTH. , #25251 ) ; +#31977 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14303, 'distance_accuracy_value', 'NONE'); +#31978 = ORIENTED_EDGE ( 'NONE', *, *, #7354, .F. ) ; +#31979 = PRESENTATION_STYLE_ASSIGNMENT (( #28107 ) ) ; +#31980 = SURFACE_SIDE_STYLE ('',( #2557 ) ) ; +#31981 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31982 = ADVANCED_FACE ( 'NONE', ( #27467 ), #27976, .T. ) ; +#31983 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#31984 = VERTEX_POINT ( 'NONE', #28261 ) ; +#31985 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#31986 = EDGE_LOOP ( 'NONE', ( #39798, #9194, #37537, #4740 ) ) ; +#31987 = EDGE_CURVE ( 'NONE', #41089, #20411, #12786, .T. ) ; +#31988 = ORIENTED_EDGE ( 'NONE', *, *, #36922, .T. ) ; +#31989 = EDGE_LOOP ( 'NONE', ( #36792, #38407, #29735, #12366 ) ) ; +#31990 = VERTEX_POINT ( 'NONE', #8880 ) ; +#31991 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703822500, -3.500000000000000000 ) ) ; +#31992 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#31993 = EDGE_CURVE ( 'NONE', #13495, #9215, #34039, .T. ) ; +#31994 = STYLED_ITEM ( 'NONE', ( #25117 ), #10550 ) ; +#31995 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#31996 = FILL_AREA_STYLE_COLOUR ( '', #38544 ) ; +#31997 = PRESENTATION_STYLE_ASSIGNMENT (( #38961 ) ) ; +#31998 = ORIENTED_EDGE ( 'NONE', *, *, #37199, .T. ) ; +#31999 = SURFACE_STYLE_FILL_AREA ( #24771 ) ; +#32000 = CARTESIAN_POINT ( 'NONE', ( 3.242385881558931700, 0.2999999999999999900, 0.7034798965989087500 ) ) ; +#32001 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #35832, #16330, #6840, #29163, #36106, #32412, #9665, #13057, #9932, #29436, #3204, #32272, #38902 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 2, 1, 2, 2, 4 ), + ( 0.0000000000000000000, 0.2500000000000011700, 0.3750000000000028900, 0.4375000000000043300, 0.4687500000000052700, 0.5000000000000063300, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#32002 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22556 ) ) ; +#32003 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#32004 = SURFACE_SIDE_STYLE ('',( #26825 ) ) ; +#32005 = SURFACE_STYLE_FILL_AREA ( #41795 ) ; +#32006 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35059 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23915, #33932, #39859 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32007 = FILL_AREA_STYLE_COLOUR ( '', #29881 ) ; +#32008 = AXIS2_PLACEMENT_3D ( 'NONE', #30505, #14410, #1586 ) ; +#32009 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.499998254703829500, -6.699999999999994000 ) ) ; +#32010 = SURFACE_STYLE_FILL_AREA ( #23975 ) ; +#32011 = VECTOR ( 'NONE', #31617, 1000.000000000000000 ) ; +#32012 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32821 ) ) ; +#32013 = FILL_AREA_STYLE_COLOUR ( '', #40928 ) ; +#32016 = EDGE_CURVE ( 'NONE', #15022, #8814, #38553, .T. ) ; +#32015 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#32014 = STYLED_ITEM ( 'NONE', ( #30306 ), #35799 ) ; +#32017 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32018 = ADVANCED_FACE ( 'NONE', ( #35547 ), #18384, .T. ) ; +#32019 = SURFACE_SIDE_STYLE ('',( #32820 ) ) ; +#32020 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19074 ) ) ; +#32021 = LINE ( 'NONE', #20300, #28513 ) ; +#32022 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#32023 = EDGE_LOOP ( 'NONE', ( #24647, #20449, #25053, #37724 ) ) ; +#32024 = CARTESIAN_POINT ( 'NONE', ( -3.024289321834155300, 0.3500000000000002600, -1.529289321841790700 ) ) ; +#32025 = EDGE_LOOP ( 'NONE', ( #39030, #35334, #35998, #37072 ) ) ; +#32026 = ORIENTED_EDGE ( 'NONE', *, *, #26696, .F. ) ; +#32027 = ORIENTED_EDGE ( 'NONE', *, *, #36643, .T. ) ; +#32028 = VECTOR ( 'NONE', #9628, 1000.000000000000000 ) ; +#32029 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32030 = SURFACE_STYLE_FILL_AREA ( #11664 ) ; +#32031 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#32032 = CARTESIAN_POINT ( 'NONE', ( 3.846156164834738400, 0.6165030250713639000, -4.550456058592868800 ) ) ; +#32033 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 1.485063948690956900E-014, -3.099999999999998800 ) ) ; +#32034 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#32035 = SURFACE_STYLE_FILL_AREA ( #33618 ) ; +#32036 = LINE ( 'NONE', #25925, #32534 ) ; +#32037 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, 2.322941965694886000, -1.250000000000000000 ) ) ; +#32038 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#32039 = SURFACE_STYLE_FILL_AREA ( #34061 ) ; +#32040 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#32041 = EDGE_CURVE ( 'NONE', #24870, #35275, #22417, .T. ) ; +#32042 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -3.700000000000000200 ) ) ; +#32043 = CARTESIAN_POINT ( 'NONE', ( 3.024289321881345100, 0.3499999999999998700, -1.400000000000000100 ) ) ; +#32044 = DIRECTION ( 'NONE', ( -4.336808689942015400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#32045 = EDGE_LOOP ( 'NONE', ( #19487, #34676, #15570 ) ) ; +#32046 = EDGE_CURVE ( 'NONE', #12599, #17225, #37081, .T. ) ; +#32047 = EDGE_LOOP ( 'NONE', ( #29518, #2015, #34441, #21231 ) ) ; +#32048 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30708, 'distance_accuracy_value', 'NONE'); +#32049 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 2.322941965694886000, 0.3499999999999999800 ) ) ; +#32050 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#32051 = SURFACE_SIDE_STYLE ('',( #34107 ) ) ; +#32052 = ORIENTED_EDGE ( 'NONE', *, *, #35909, .F. ) ; +#32053 = FACE_OUTER_BOUND ( 'NONE', #22357, .T. ) ; +#32054 = VECTOR ( 'NONE', #8089, 1000.000000000000000 ) ; +#32055 = ORIENTED_EDGE ( 'NONE', *, *, #27442, .F. ) ; +#32056 = AXIS2_PLACEMENT_3D ( 'NONE', #23098, #142, #6571 ) ; +#32057 = ORIENTED_EDGE ( 'NONE', *, *, #36710, .F. ) ; +#32058 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#32059 = CIRCLE ( 'NONE', #22279, 0.1000000000000002600 ) ; +#32060 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, 0.4300017452961685800, -6.850000000000000500 ) ) ; +#32061 = FILL_AREA_STYLE ('',( #35198 ) ) ; +#32062 = ORIENTED_EDGE ( 'NONE', *, *, #4799, .T. ) ; +#32063 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#32064 = AXIS2_PLACEMENT_3D ( 'NONE', #15410, #8462, #11981 ) ; +#32065 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1022 ) ) ; +#32066 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165600, -6.900000000000000400 ) ) ; +#32067 = SURFACE_STYLE_USAGE ( .BOTH. , #19262 ) ; +#32069 = EDGE_CURVE ( 'NONE', #32078, #31628, #26940, .T. ) ; +#32068 = AXIS2_PLACEMENT_3D ( 'NONE', #26774, #7672, #10639 ) ; +#32070 = ORIENTED_EDGE ( 'NONE', *, *, #35537, .T. ) ; +#32071 = FILL_AREA_STYLE ('',( #18835 ) ) ; +#32072 = CARTESIAN_POINT ( 'NONE', ( 4.620424212713737200, -0.2800000000000026400, -1.049979056049130000 ) ) ; +#32073 = PRESENTATION_STYLE_ASSIGNMENT (( #27993 ) ) ; +#32074 = SURFACE_STYLE_USAGE ( .BOTH. , #9466 ) ; +#32075 = CARTESIAN_POINT ( 'NONE', ( -4.920000000000004400, -1.400001745296196400, -6.526326723416074700 ) ) ; +#32077 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35624 ), #34264 ) ; +#32076 = STYLED_ITEM ( 'NONE', ( #21313 ), #26984 ) ; +#32078 = VERTEX_POINT ( 'NONE', #18532 ) ; +#32079 = AXIS2_PLACEMENT_3D ( 'NONE', #37973, #2022, #25161 ) ; +#32080 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#32081 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -5.952072798849889700E-031 ) ) ; +#32082 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32083 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36773 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21376, #31217, #31500 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32084 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -1.380001745296134800, -4.781671842700004200 ) ) ; +#32085 = CARTESIAN_POINT ( 'NONE', ( -2.995000000000000100, -0.3500000000000000300, -1.300000000000000300 ) ) ; +#32086 = FACE_OUTER_BOUND ( 'NONE', #34322, .T. ) ; +#32087 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#32088 = FILL_AREA_STYLE_COLOUR ( '', #21653 ) ; +#32089 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -2.299999999999999400 ) ) ; +#32090 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#32091 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, 2.322941965694886000, -1.250000000000000000 ) ) ; +#32092 = ORIENTED_EDGE ( 'NONE', *, *, #7236, .T. ) ; +#32093 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#32094 = PRESENTATION_STYLE_ASSIGNMENT (( #26738 ) ) ; +#32095 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, -0.07499999999999999700, 0.0000000000000000000 ) ) ; +#32096 = CARTESIAN_POINT ( 'NONE', ( -3.008908212981180600, 0.3485203830362403900, -1.298520383036240000 ) ) ; +#32097 = VERTEX_POINT ( 'NONE', #9297 ) ; +#32098 = VECTOR ( 'NONE', #19, 1000.000000000000000 ) ; +#32099 = SURFACE_SIDE_STYLE ('',( #29116 ) ) ; +#32100 = SURFACE_SIDE_STYLE ('',( #2706 ) ) ; +#32101 = ORIENTED_EDGE ( 'NONE', *, *, #25495, .F. ) ; +#32102 = CYLINDRICAL_SURFACE ( 'NONE', #3211, 0.1000000000000004800 ) ; +#32103 = SURFACE_STYLE_FILL_AREA ( #5185 ) ; +#32104 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid15', #18986 ) ; +#32105 = VERTEX_POINT ( 'NONE', #34609 ) ; +#32106 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, 0.2800017452961687200, -6.849999999999999600 ) ) ; +#32107 = VECTOR ( 'NONE', #22154, 1000.000000000000000 ) ; +#32108 = ORIENTED_EDGE ( 'NONE', *, *, #7508, .F. ) ; +#32109 = LINE ( 'NONE', #26846, #16967 ) ; +#32110 = EDGE_CURVE ( 'NONE', #33379, #17831, #13816, .T. ) ; +#32111 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#32112 = LINE ( 'NONE', #29422, #12897 ) ; +#32113 = EDGE_CURVE ( 'NONE', #35573, #14064, #1222, .T. ) ; +#32114 = LINE ( 'NONE', #34470, #11400 ) ; +#32115 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.032879073410321300E-016, -1.000000000000000000 ) ) ; +#32116 = ORIENTED_EDGE ( 'NONE', *, *, #6566, .T. ) ; +#32117 = EDGE_CURVE ( 'NONE', #38280, #10696, #20957, .T. ) ; +#32118 = PLANE ( 'NONE', #22810 ) ; +#32119 = PRESENTATION_STYLE_ASSIGNMENT (( #18138 ) ) ; +#32120 = LINE ( 'NONE', #31393, #18010 ) ; +#32121 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11028 ), #26449 ) ; +#32122 = ORIENTED_EDGE ( 'NONE', *, *, #28205, .F. ) ; +#32123 = LINE ( 'NONE', #18437, #11413 ) ; +#32124 = VECTOR ( 'NONE', #26376, 1000.000000000000000 ) ; +#32125 = PLANE ( 'NONE', #20937 ) ; +#32126 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#32127 = ORIENTED_EDGE ( 'NONE', *, *, #15866, .T. ) ; +#32128 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24292 ), #26457 ) ; +#32129 = CARTESIAN_POINT ( 'NONE', ( 2.945000000000000700, -0.6207106781186549900, -3.300000000000000300 ) ) ; +#32130 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -0.2339555568811697600 ) ) ; +#32132 = EDGE_CURVE ( 'NONE', #3376, #39676, #36088, .T. ) ; +#32131 = AXIS2_PLACEMENT_3D ( 'NONE', #1754, #37310, #40529 ) ; +#32133 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#32134 = FACE_OUTER_BOUND ( 'NONE', #2528, .T. ) ; +#32135 = SURFACE_STYLE_USAGE ( .BOTH. , #16464 ) ; +#32136 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32137 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29135, 'distance_accuracy_value', 'NONE'); +#32138 = ADVANCED_FACE ( 'NONE', ( #38039 ), #9715, .T. ) ; +#32140 = STYLED_ITEM ( 'NONE', ( #39012 ), #3225 ) ; +#32139 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4568 ) ) ; +#32141 = SURFACE_SIDE_STYLE ('',( #16733 ) ) ; +#32142 = CIRCLE ( 'NONE', #14094, 0.9999999999999995600 ) ; +#32143 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20840 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26238, #27095, #17486 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32144 = VECTOR ( 'NONE', #31604, 1000.000000000000000 ) ; +#32145 = CARTESIAN_POINT ( 'NONE', ( -0.6000000000000000900, -1.380001745296138200, -4.781671842700004200 ) ) ; +#32146 = VECTOR ( 'NONE', #34289, 1000.000000000000000 ) ; +#32147 = AXIS2_PLACEMENT_3D ( 'NONE', #20156, #39172, #26492 ) ; +#32148 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#32149 = ORIENTED_EDGE ( 'NONE', *, *, #9527, .F. ) ; +#32150 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7782 ) ) ; +#32151 = ORIENTED_EDGE ( 'NONE', *, *, #9019, .T. ) ; +#32152 = EDGE_LOOP ( 'NONE', ( #21707, #38737, #10549, #39816, #15305, #18579, #33229, #22720 ) ) ; +#32153 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#32154 = SURFACE_STYLE_FILL_AREA ( #25286 ) ; +#32155 = PRESENTATION_STYLE_ASSIGNMENT (( #31624 ) ) ; +#32156 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32157 = VERTEX_POINT ( 'NONE', #35029 ) ; +#32158 = ORIENTED_EDGE ( 'NONE', *, *, #4750, .F. ) ; +#32159 = FILL_AREA_STYLE_COLOUR ( '', #30826 ) ; +#32160 = FILL_AREA_STYLE ('',( #28911 ) ) ; +#32161 = LINE ( 'NONE', #29858, #33674 ) ; +#32162 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#32163 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#32164 = VECTOR ( 'NONE', #5145, 1000.000000000000000 ) ; +#32165 = VECTOR ( 'NONE', #29319, 1000.000000000000000 ) ; +#32166 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#32167 = FILL_AREA_STYLE_COLOUR ( '', #30748 ) ; +#32168 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#32169 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#32170 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32171 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#32172 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32173 = ADVANCED_FACE ( 'NONE', ( #39044 ), #34898, .F. ) ; +#32174 = EDGE_CURVE ( 'NONE', #16436, #14652, #15330, .T. ) ; +#32175 = VERTEX_POINT ( 'NONE', #3921 ) ; +#32176 = PLANE ( 'NONE', #30178 ) ; +#32177 = CARTESIAN_POINT ( 'NONE', ( 0.2500000000000030500, 0.4300017452961686900, -6.550000000000000700 ) ) ; +#32178 = EDGE_CURVE ( 'NONE', #6260, #38384, #5713, .T. ) ; +#32179 = VERTEX_POINT ( 'NONE', #38257 ) ; +#32180 = LINE ( 'NONE', #16828, #6427 ) ; +#32181 = PRESENTATION_STYLE_ASSIGNMENT (( #12970 ) ) ; +#32182 = SURFACE_SIDE_STYLE ('',( #14021 ) ) ; +#32183 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27881 ) ) ; +#32184 = EDGE_LOOP ( 'NONE', ( #32506, #6117, #30546, #34761 ) ) ; +#32185 = FILL_AREA_STYLE_COLOUR ( '', #35474 ) ; +#32186 = ORIENTED_EDGE ( 'NONE', *, *, #9355, .F. ) ; +#32187 = EDGE_LOOP ( 'NONE', ( #27207, #36306 ) ) ; +#32188 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.139998254717355100, -6.299996877890552400 ) ) ; +#32189 = ADVANCED_FACE ( 'NONE', ( #4712 ), #16513, .T. ) ; +#32190 = AXIS2_PLACEMENT_3D ( 'NONE', #37075, #36650, #33281 ) ; +#32191 = SURFACE_STYLE_USAGE ( .BOTH. , #24899 ) ; +#32192 = VECTOR ( 'NONE', #20907, 1000.000000000000000 ) ; +#32193 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35733 ) ) ; +#32194 = CARTESIAN_POINT ( 'NONE', ( -2.945000000000000300, -0.6500000000000003600, -3.300000000000000300 ) ) ; +#32195 = ORIENTED_EDGE ( 'NONE', *, *, #37285, .T. ) ; +#32196 = CIRCLE ( 'NONE', #22068, 0.2181066972901060100 ) ; +#32197 = EDGE_LOOP ( 'NONE', ( #27067, #1412, #8549, #38664 ) ) ; +#32199 = AXIS2_PLACEMENT_3D ( 'NONE', #14927, #40902, #37517 ) ; +#32198 = AXIS2_PLACEMENT_3D ( 'NONE', #40560, #40993, #2203 ) ; +#32200 = CIRCLE ( 'NONE', #29413, 0.1000000000000000500 ) ; +#32201 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17887, 'distance_accuracy_value', 'NONE'); +#32203 = AXIS2_PLACEMENT_3D ( 'NONE', #39052, #13343, #23250 ) ; +#32202 = STYLED_ITEM ( 'NONE', ( #3509 ), #34293 ) ; +#32204 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#32205 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1157 ) ) ; +#32206 = SURFACE_STYLE_USAGE ( .BOTH. , #22070 ) ; +#32207 = DIRECTION ( 'NONE', ( -3.097720492815727200E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#32208 = FILL_AREA_STYLE_COLOUR ( '', #16498 ) ; +#32209 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32210 = SURFACE_STYLE_USAGE ( .BOTH. , #16133 ) ; +#32211 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#32212 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.279999999999999800, -3.299999999999999800 ) ) ; +#32213 = ORIENTED_EDGE ( 'NONE', *, *, #39530, .T. ) ; +#32214 = FACE_OUTER_BOUND ( 'NONE', #1219, .T. ) ; +#32215 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32216 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#32217 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32218 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#32219 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#32220 = LINE ( 'NONE', #17020, #23157 ) ; +#32221 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32222 = ADVANCED_FACE ( 'NONE', ( #38521 ), #29398, .T. ) ; +#32223 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#32224 = ORIENTED_EDGE ( 'NONE', *, *, #40175, .T. ) ; +#32225 = VERTEX_POINT ( 'NONE', #6882 ) ; +#32226 = EDGE_LOOP ( 'NONE', ( #483, #17506, #15739, #36192 ) ) ; +#32227 = SURFACE_STYLE_USAGE ( .BOTH. , #10031 ) ; +#32228 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -5.075000000000000200 ) ) ; +#32229 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.286487835346677000E-015, -2.891205793294671100E-015 ) ) ; +#32230 = VECTOR ( 'NONE', #787, 1000.000000000000100 ) ; +#32231 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998392100, -1.749999999999999800 ) ) ; +#32232 = FACE_OUTER_BOUND ( 'NONE', #28516, .T. ) ; +#32233 = ORIENTED_EDGE ( 'NONE', *, *, #33371, .F. ) ; +#32234 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#32235 = ORIENTED_EDGE ( 'NONE', *, *, #36638, .F. ) ; +#32236 = VERTEX_POINT ( 'NONE', #601 ) ; +#32237 = EDGE_CURVE ( 'NONE', #32756, #28578, #12221, .T. ) ; +#32238 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#32239 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#32240 = SURFACE_SIDE_STYLE ('',( #6441 ) ) ; +#32241 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32242 = EDGE_CURVE ( 'NONE', #21607, #26824, #23869, .T. ) ; +#32243 = AXIS2_PLACEMENT_3D ( 'NONE', #21887, #2951, #9386 ) ; +#32244 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703822500, -3.700000000000000200 ) ) ; +#32245 = ORIENTED_EDGE ( 'NONE', *, *, #13820, .T. ) ; +#32246 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13179, 'distance_accuracy_value', 'NONE'); +#32247 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17927 ) ) ; +#32248 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14043, 'distance_accuracy_value', 'NONE'); +#32249 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#32250 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#32251 = SURFACE_STYLE_FILL_AREA ( #26956 ) ; +#32252 = EDGE_LOOP ( 'NONE', ( #39270, #10228, #11339, #14917 ) ) ; +#32253 = AXIS2_PLACEMENT_3D ( 'NONE', #38650, #32301, #28 ) ; +#32254 = LINE ( 'NONE', #27619, #33298 ) ; +#32255 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -6.800000000000000700 ) ) ; +#32256 = SURFACE_SIDE_STYLE ('',( #36665 ) ) ; +#32258 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7067 ) ) ; +#32257 = AXIS2_PLACEMENT_3D ( 'NONE', #6006, #5717, #34531 ) ; +#32259 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -1.499998254703835300, -5.049999999999993600 ) ) ; +#32260 = VERTEX_POINT ( 'NONE', #29214 ) ; +#32261 = PRESENTATION_STYLE_ASSIGNMENT (( #37212 ) ) ; +#32263 = EDGE_CURVE ( 'NONE', #25351, #11525, #1177, .T. ) ; +#32262 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24432 ) ) ; +#32264 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.380001745296128200, -5.449999999999994000 ) ) ; +#32265 = SURFACE_STYLE_FILL_AREA ( #143 ) ; +#32266 = EDGE_LOOP ( 'NONE', ( #16571, #28881 ) ) ; +#32267 = VERTEX_POINT ( 'NONE', #25983 ) ; +#32268 = ORIENTED_EDGE ( 'NONE', *, *, #23783, .F. ) ; +#32269 = CARTESIAN_POINT ( 'NONE', ( 3.208603896932108700, -0.6499999999999999100, -3.300000000000000300 ) ) ; +#32270 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19326 ) ) ; +#32271 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -1.380001745296134800, -5.449999999999994000 ) ) ; +#32272 = CARTESIAN_POINT ( 'NONE', ( 3.284742021549850000, 0.4268019112597709600, -1.756801911259586100 ) ) ; +#32273 = SURFACE_STYLE_USAGE ( .BOTH. , #13058 ) ; +#32274 = ORIENTED_EDGE ( 'NONE', *, *, #24029, .F. ) ; +#32275 = VECTOR ( 'NONE', #32585, 1000.000000000000000 ) ; +#32276 = ORIENTED_EDGE ( 'NONE', *, *, #28535, .T. ) ; +#32277 = ORIENTED_EDGE ( 'NONE', *, *, #16998, .T. ) ; +#32278 = VECTOR ( 'NONE', #8657, 1000.000000000000000 ) ; +#32279 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#32280 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#32281 = SURFACE_SIDE_STYLE ('',( #31163 ) ) ; +#32282 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #34948, #18718, #15727, #2506 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#32283 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000000000, 1.630001745296169500, -1.650000000000000800 ) ) ; +#32284 = FILL_AREA_STYLE_COLOUR ( '', #23277 ) ; +#32285 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 2.322941965694886000, 0.3499999999999999800 ) ) ; +#32286 = VERTEX_POINT ( 'NONE', #35719 ) ; +#32287 = VECTOR ( 'NONE', #35982, 1000.000000000000000 ) ; +#32288 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7727, 'distance_accuracy_value', 'NONE'); +#32289 = PRESENTATION_STYLE_ASSIGNMENT (( #26482 ) ) ; +#32290 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003000, 0.3000000000000147500, -1.950000000000001300 ) ) ; +#32291 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.07499999999999998300, -1.399999999999999900 ) ) ; +#32292 = EDGE_CURVE ( 'NONE', #26958, #17232, #30433, .T. ) ; +#32293 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21939, 'distance_accuracy_value', 'NONE'); +#32294 = CYLINDRICAL_SURFACE ( 'NONE', #34939, 0.9999999999999991100 ) ; +#32295 = PLANE ( 'NONE', #28379 ) ; +#32296 = CARTESIAN_POINT ( 'NONE', ( -3.237718385397935400, -0.2999999999999999900, 0.7155313145785737700 ) ) ; +#32297 = FILL_AREA_STYLE ('',( #29053 ) ) ; +#32298 = EDGE_CURVE ( 'NONE', #8542, #23303, #35999, .T. ) ; +#32299 = ORIENTED_EDGE ( 'NONE', *, *, #27241, .T. ) ; +#32300 = FILL_AREA_STYLE_COLOUR ( '', #18724 ) ; +#32301 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865475700, 0.7071067811865475700 ) ) ; +#32302 = VECTOR ( 'NONE', #8461, 1000.000000000000000 ) ; +#32303 = LINE ( 'NONE', #34946, #14133 ) ; +#32304 = ORIENTED_EDGE ( 'NONE', *, *, #2109, .F. ) ; +#32305 = SURFACE_STYLE_USAGE ( .BOTH. , #6207 ) ; +#32306 = VECTOR ( 'NONE', #19622, 1000.000000000000000 ) ; +#32307 = AXIS2_PLACEMENT_3D ( 'NONE', #2283, #12389, #12249 ) ; +#32308 = CYLINDRICAL_SURFACE ( 'NONE', #14709, 0.1000000000000002600 ) ; +#32309 = SURFACE_STYLE_FILL_AREA ( #34141 ) ; +#32310 = CARTESIAN_POINT ( 'NONE', ( -3.680000000000000200, -1.139998254717349300, -6.299996877890552400 ) ) ; +#32311 = PRESENTATION_STYLE_ASSIGNMENT (( #7636 ) ) ; +#32312 = VECTOR ( 'NONE', #26660, 1000.000000000000000 ) ; +#32313 = FILL_AREA_STYLE_COLOUR ( '', #4667 ) ; +#32314 = VERTEX_POINT ( 'NONE', #38952 ) ; +#32315 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#32316 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#32317 = SURFACE_SIDE_STYLE ('',( #27449 ) ) ; +#32318 = EDGE_LOOP ( 'NONE', ( #40821, #23628 ) ) ; +#32319 = ORIENTED_EDGE ( 'NONE', *, *, #40233, .F. ) ; +#32320 = CONICAL_SURFACE ( 'NONE', #33026, 1.651303021499040300, 1.221730476395290800 ) ; +#32321 = STYLED_ITEM ( 'NONE', ( #24668 ), #20309 ) ; +#32322 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1812 ), #3366 ) ; +#32323 = PLANE ( 'NONE', #40815 ) ; +#32325 = EDGE_CURVE ( 'NONE', #1444, #5846, #28921, .T. ) ; +#32324 = AXIS2_PLACEMENT_3D ( 'NONE', #17209, #7851, #11374 ) ; +#32326 = VERTEX_POINT ( 'NONE', #13112 ) ; +#32327 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -2.322941965694886000, -1.250000000000000000 ) ) ; +#32328 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15201, 'distance_accuracy_value', 'NONE'); +#32329 = DIRECTION ( 'NONE', ( -2.891205793294933000E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#32330 = FILL_AREA_STYLE_COLOUR ( '', #10383 ) ; +#32331 = PRESENTATION_STYLE_ASSIGNMENT (( #11057 ) ) ; +#32332 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#32334 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36145 ), #33955 ) ; +#32333 = AXIS2_PLACEMENT_3D ( 'NONE', #2873, #38125, #5664 ) ; +#32335 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000004700, -1.400001745296161900, -7.350000000000005900 ) ) ; +#32336 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12024 ), #19939 ) ; +#32337 = FILL_AREA_STYLE ('',( #35601 ) ) ; +#32338 = VECTOR ( 'NONE', #14421, 1000.000000000000000 ) ; +#32339 = EDGE_LOOP ( 'NONE', ( #30983, #2204, #2956, #38476 ) ) ; +#32340 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23723, 'distance_accuracy_value', 'NONE'); +#32341 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#32342 = VECTOR ( 'NONE', #40305, 1000.000000000000000 ) ; +#32343 = DIRECTION ( 'NONE', ( 5.916456789157588500E-031, 1.000000000000000000, -2.367138801244518800E-016 ) ) ; +#32344 = PLANE ( 'NONE', #6584 ) ; +#32345 = EDGE_LOOP ( 'NONE', ( #40506, #17546, #38199, #40236 ) ) ; +#32347 = FILL_AREA_STYLE ('',( #26967 ) ) ; +#32346 = SURFACE_STYLE_FILL_AREA ( #19929 ) ; +#32348 = ADVANCED_FACE ( 'NONE', ( #1656 ), #19787, .F. ) ; +#32349 = LINE ( 'NONE', #33407, #10630 ) ; +#32350 = FILL_AREA_STYLE ('',( #32208 ) ) ; +#32351 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#32352 = FACE_OUTER_BOUND ( 'NONE', #3779, .T. ) ; +#32353 = EDGE_LOOP ( 'NONE', ( #23160, #34114, #20846, #1576 ) ) ; +#32354 = PLANE ( 'NONE', #647 ) ; +#32355 = EDGE_CURVE ( 'NONE', #23345, #29935, #3645, .T. ) ; +#32356 = VERTEX_POINT ( 'NONE', #39924 ) ; +#32357 = ORIENTED_EDGE ( 'NONE', *, *, #12684, .F. ) ; +#32358 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#32359 = EDGE_CURVE ( 'NONE', #4942, #27123, #18826, .T. ) ; +#32360 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32361 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32362 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#32363 = EDGE_LOOP ( 'NONE', ( #32426, #20072, #34195, #7052 ) ) ; +#32364 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#32365 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32366 = LINE ( 'NONE', #31155, #6128 ) ; +#32367 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12956 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18367, #14811, #40504 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32369 = CIRCLE ( 'NONE', #7879, 0.2000000000000000900 ) ; +#32368 = SURFACE_SIDE_STYLE ('',( #1325 ) ) ; +#32370 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -1.499998254703836900, -5.049999999999993600 ) ) ; +#32371 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, 0.2999999999999999900, 0.03299999999999998800 ) ) ; +#32372 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -4.400000000000000400 ) ) ; +#32373 = CARTESIAN_POINT ( 'NONE', ( 3.115710678158208700, -0.3499999999999999200, -1.620710678165844900 ) ) ; +#32374 = AXIS2_PLACEMENT_3D ( 'NONE', #6628, #12699, #6228 ) ; +#32376 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#32375 = CIRCLE ( 'NONE', #27892, 0.3000000000000001000 ) ; +#32377 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #166, 'distance_accuracy_value', 'NONE'); +#32378 = CARTESIAN_POINT ( 'NONE', ( -3.045000000000000400, 0.3133029683772801100, -1.263302968377279800 ) ) ; +#32379 = AXIS2_PLACEMENT_3D ( 'NONE', #25410, #9538, #154 ) ; +#32380 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.380001745296139700, -4.781671842700004200 ) ) ; +#32381 = ORIENTED_EDGE ( 'NONE', *, *, #4152, .T. ) ; +#32384 = EDGE_CURVE ( 'NONE', #17679, #13605, #16296, .T. ) ; +#32383 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#32382 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28070 ) ) ; +#32385 = VECTOR ( 'NONE', #18907, 1000.000000000000000 ) ; +#32386 = SURFACE_STYLE_FILL_AREA ( #18092 ) ; +#32387 = ADVANCED_FACE ( 'NONE', ( #37523 ), #1024, .T. ) ; +#32388 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, 0.2999999999999999900, -0.008874195005688128400 ) ) ; +#32389 = ORIENTED_EDGE ( 'NONE', *, *, #36238, .F. ) ; +#32391 = AXIS2_PLACEMENT_3D ( 'NONE', #18944, #19362, #32168 ) ; +#32390 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26475 ), #37293 ) ; +#32392 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #529 ), #11544 ) ; +#32393 = SURFACE_SIDE_STYLE ('',( #19278 ) ) ; +#32394 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18525, 'distance_accuracy_value', 'NONE'); +#32395 = ORIENTED_EDGE ( 'NONE', *, *, #18001, .F. ) ; +#32396 = VERTEX_POINT ( 'NONE', #17220 ) ; +#32397 = VERTEX_POINT ( 'NONE', #39786 ) ; +#32398 = AXIS2_PLACEMENT_3D ( 'NONE', #40200, #30759, #27797 ) ; +#32399 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32400 = SURFACE_SIDE_STYLE ('',( #16969 ) ) ; +#32401 = ADVANCED_FACE ( 'NONE', ( #15296 ), #13677, .F. ) ; +#32402 = CARTESIAN_POINT ( 'NONE', ( -3.003095853128626900, -0.2241242376727724000, 1.113813643490841200 ) ) ; +#32403 = CARTESIAN_POINT ( 'NONE', ( 3.629999999999999900, -1.499998254703818900, -6.699999999999994000 ) ) ; +#32404 = VERTEX_POINT ( 'NONE', #20777 ) ; +#32405 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#32406 = EDGE_LOOP ( 'NONE', ( #12703, #41333, #29184 ) ) ; +#32407 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#32408 = SURFACE_STYLE_USAGE ( .BOTH. , #9794 ) ; +#32409 = FILL_AREA_STYLE_COLOUR ( '', #39207 ) ; +#32410 = FACE_OUTER_BOUND ( 'NONE', #23517, .T. ) ; +#32411 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865475700, 0.7071067811865475700 ) ) ; +#32412 = CARTESIAN_POINT ( 'NONE', ( 3.135637157808740300, 0.5518130592519178100, -1.881709196267186400 ) ) ; +#32413 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32414 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#32415 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#32416 = VECTOR ( 'NONE', #27781, 1000.000000000000000 ) ; +#32417 = PLANE ( 'NONE', #38677 ) ; +#32418 = EDGE_CURVE ( 'NONE', #2031, #29623, #26898, .T. ) ; +#32419 = ORIENTED_EDGE ( 'NONE', *, *, #31197, .T. ) ; +#32420 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32421 = LINE ( 'NONE', #4653, #23320 ) ; +#32422 = EDGE_CURVE ( 'NONE', #28475, #35821, #1125, .T. ) ; +#32423 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#32424 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, 0.3500000000000000300, -1.300000000000000000 ) ) ; +#32425 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37538, 'distance_accuracy_value', 'NONE'); +#32426 = ORIENTED_EDGE ( 'NONE', *, *, #23215, .F. ) ; +#32427 = STYLED_ITEM ( 'NONE', ( #8479 ), #17323 ) ; +#32428 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#32429 = CIRCLE ( 'NONE', #30916, 0.7999999999999999300 ) ; +#32430 = EDGE_CURVE ( 'NONE', #18082, #15199, #26796, .T. ) ; +#32431 = LINE ( 'NONE', #22625, #11723 ) ; +#32432 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32433 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#32434 = VERTEX_POINT ( 'NONE', #27239 ) ; +#32435 = STYLED_ITEM ( 'NONE', ( #1595 ), #21601 ) ; +#32436 = ADVANCED_FACE ( 'NONE', ( #18307 ), #8272, .F. ) ; +#32437 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#32438 = PLANE ( 'NONE', #12267 ) ; +#32439 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.828353493440455200E-016, 1.000000000000000000 ) ) ; +#32440 = AXIS2_PLACEMENT_3D ( 'NONE', #18630, #34855, #5621 ) ; +#32441 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#32443 = EDGE_CURVE ( 'NONE', #32179, #803, #353, .T. ) ; +#32442 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17315 ), #25428 ) ; +#32444 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32445 = EDGE_LOOP ( 'NONE', ( #3413, #23941, #17038, #16926 ) ) ; +#32446 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.779999999999867900, -0.2339555568811697600 ) ) ; +#32447 = VECTOR ( 'NONE', #1581, 1000.000000000000000 ) ; +#32448 = SURFACE_STYLE_FILL_AREA ( #7443 ) ; +#32449 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#32450 = LINE ( 'NONE', #36178, #22858 ) ; +#32451 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#32453 = AXIS2_PLACEMENT_3D ( 'NONE', #18524, #28384, #34597 ) ; +#32452 = AXIS2_PLACEMENT_3D ( 'NONE', #7577, #1151, #16916 ) ; +#32454 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20303 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18637, #12238, #40931 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32455 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#32456 = AXIS2_PLACEMENT_3D ( 'NONE', #24594, #5208, #11553 ) ; +#32457 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.799998254703822000, -2.599999999999999600 ) ) ; +#32458 = FILL_AREA_STYLE_COLOUR ( '', #40473 ) ; +#32459 = PLANE ( 'NONE', #17882 ) ; +#32460 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 7.228014483236709400E-016 ) ) ; +#32462 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31654 ) ) ; +#32461 = LINE ( 'NONE', #21597, #22868 ) ; +#32463 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#32464 = ORIENTED_EDGE ( 'NONE', *, *, #17736, .T. ) ; +#32465 = CARTESIAN_POINT ( 'NONE', ( -2.995000000010875400, -0.3499999999999999800, -1.399999999999999900 ) ) ; +#32466 = FILL_AREA_STYLE_COLOUR ( '', #20302 ) ; +#32467 = SURFACE_STYLE_USAGE ( .BOTH. , #28940 ) ; +#32468 = VERTEX_POINT ( 'NONE', #30760 ) ; +#32469 = SURFACE_SIDE_STYLE ('',( #28006 ) ) ; +#32470 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#32471 = FACE_BOUND ( 'NONE', #32318, .T. ) ; +#32472 = VERTEX_POINT ( 'NONE', #34290 ) ; +#32473 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#32474 = ORIENTED_EDGE ( 'NONE', *, *, #22851, .T. ) ; +#32476 = ORIENTED_EDGE ( 'NONE', *, *, #3841, .T. ) ; +#32475 = VECTOR ( 'NONE', #3173, 1000.000000000000000 ) ; +#32477 = EDGE_LOOP ( 'NONE', ( #17278, #16067, #4408, #14981 ) ) ; +#32478 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#32479 = ORIENTED_EDGE ( 'NONE', *, *, #1003, .T. ) ; +#32480 = ORIENTED_EDGE ( 'NONE', *, *, #11386, .F. ) ; +#32481 = EDGE_CURVE ( 'NONE', #8542, #13255, #38188, .T. ) ; +#32482 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#32483 = VECTOR ( 'NONE', #26428, 1000.000000000000000 ) ; +#32484 = CARTESIAN_POINT ( 'NONE', ( -3.245000000007724600, -0.3500000000000000300, -1.620710678118655300 ) ) ; +#32485 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22635, 'distance_accuracy_value', 'NONE'); +#32486 = SURFACE_STYLE_FILL_AREA ( #23187 ) ; +#32487 = EDGE_CURVE ( 'NONE', #7977, #974, #36198, .T. ) ; +#32488 = PRESENTATION_STYLE_ASSIGNMENT (( #33043 ) ) ; +#32489 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #74 ), #34673 ) ; +#32490 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745278514100, -2.294459358809384700 ) ) ; +#32491 = CARTESIAN_POINT ( 'NONE', ( 4.415000000000002700, 0.2800017452961687200, -6.199999999999999300 ) ) ; +#32492 = DIRECTION ( 'NONE', ( 6.056601140521965300E-031, -1.987721548152418300E-045, -1.000000000000000000 ) ) ; +#32493 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#32494 = AXIS2_PLACEMENT_3D ( 'NONE', #7228, #4265, #30121 ) ; +#32495 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32496 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9597 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30807, #33639, #40253 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32497 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#32498 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32499 = FILL_AREA_STYLE ('',( #29111 ) ) ; +#32500 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3708, 'distance_accuracy_value', 'NONE'); +#32501 = FACE_OUTER_BOUND ( 'NONE', #8363, .T. ) ; +#32502 = SURFACE_SIDE_STYLE ('',( #1260 ) ) ; +#32503 = STYLED_ITEM ( 'NONE', ( #17168 ), #38338 ) ; +#32504 = AXIS2_PLACEMENT_3D ( 'NONE', #35486, #19821, #9872 ) ; +#32505 = FILL_AREA_STYLE ('',( #26765 ) ) ; +#32506 = ORIENTED_EDGE ( 'NONE', *, *, #18788, .T. ) ; +#32508 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21180 ) ) ; +#32507 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28749 ), #18747 ) ; +#32509 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.499998254703822900, -6.299999999999993600 ) ) ; +#32510 = SURFACE_SIDE_STYLE ('',( #21168 ) ) ; +#32511 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#32512 = FILL_AREA_STYLE ('',( #9891 ) ) ; +#32513 = CIRCLE ( 'NONE', #27052, 0.9000017452961695000 ) ; +#32515 = EDGE_CURVE ( 'NONE', #985, #4084, #19020, .T. ) ; +#32514 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18750 ) ) ; +#32516 = CARTESIAN_POINT ( 'NONE', ( 3.045000000000000400, -0.3292893218813450800, -1.399999999993000400 ) ) ; +#32517 = ORIENTED_EDGE ( 'NONE', *, *, #26629, .T. ) ; +#32518 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31440, 'distance_accuracy_value', 'NONE'); +#32519 = ORIENTED_EDGE ( 'NONE', *, *, #30023, .T. ) ; +#32520 = SURFACE_SIDE_STYLE ('',( #31123 ) ) ; +#32521 = ORIENTED_EDGE ( 'NONE', *, *, #22732, .T. ) ; +#32522 = ORIENTED_EDGE ( 'NONE', *, *, #14384, .F. ) ; +#32523 = CARTESIAN_POINT ( 'NONE', ( -3.021268262062366100, 0.3430343677141071700, -1.293034367714107200 ) ) ; +#32525 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19712 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35333, #19243, #15823 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32524 = AXIS2_PLACEMENT_3D ( 'NONE', #21941, #5951, #8752 ) ; +#32526 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.9999999780675459200, -0.0002094395087002863100 ) ) ; +#32527 = CIRCLE ( 'NONE', #34382, 0.3000000000000003800 ) ; +#32528 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.799998254703820700, -5.700000000000000200 ) ) ; +#32529 = SURFACE_STYLE_FILL_AREA ( #40683 ) ; +#32530 = FILL_AREA_STYLE_COLOUR ( '', #10940 ) ; +#32531 = CIRCLE ( 'NONE', #34266, 0.1000000000000001600 ) ; +#32532 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#32533 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15843, 'distance_accuracy_value', 'NONE'); +#32534 = VECTOR ( 'NONE', #32126, 1000.000000000000000 ) ; +#32535 = LINE ( 'NONE', #25883, #31529 ) ; +#32536 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#32537 = CARTESIAN_POINT ( 'NONE', ( 3.629999999999999900, -1.380001745296125100, -6.031671842700004200 ) ) ; +#32538 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#32539 = SURFACE_STYLE_USAGE ( .BOTH. , #23212 ) ; +#32540 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3482, 'distance_accuracy_value', 'NONE'); +#32541 = FILL_AREA_STYLE ('',( #41664 ) ) ; +#32542 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.380001745296138200, -4.781671842700004200 ) ) ; +#32543 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.602085213965215100E-014, -1.000000000000000000 ) ) ; +#32544 = PRESENTATION_STYLE_ASSIGNMENT (( #4389 ) ) ; +#32545 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.843143693225520000E-015, 0.0000000000000000000 ) ) ; +#32546 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000800, 1.630001745296169500, -1.750000000000000900 ) ) ; +#32547 = EDGE_CURVE ( 'NONE', #12478, #25159, #9365, .T. ) ; +#32548 = VERTEX_POINT ( 'NONE', #24412 ) ; +#32549 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#32550 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#32551 = EDGE_CURVE ( 'NONE', #34591, #7388, #857, .T. ) ; +#32552 = LINE ( 'NONE', #22893, #4761 ) ; +#32553 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #689 ), #35300 ) ; +#32554 = LINE ( 'NONE', #7823, #9799 ) ; +#32555 = VERTEX_POINT ( 'NONE', #27502 ) ; +#32556 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#32558 = FACE_OUTER_BOUND ( 'NONE', #37195, .T. ) ; +#32557 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#32559 = VERTEX_POINT ( 'NONE', #11385 ) ; +#32560 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#32561 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.499998254703820400, -6.299999999999993600 ) ) ; +#32562 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #4825, #30536, #11175, #27419 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#32563 = FACE_OUTER_BOUND ( 'NONE', #18581, .T. ) ; +#32564 = VERTEX_POINT ( 'NONE', #11117 ) ; +#32565 = ADVANCED_FACE ( 'NONE', ( #41248 ), #20039, .F. ) ; +#32566 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8729 ) ) ; +#32567 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#32568 = FILL_AREA_STYLE ('',( #35417 ) ) ; +#32569 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#32570 = LINE ( 'NONE', #36759, #36123 ) ; +#32571 = STYLED_ITEM ( 'NONE', ( #4029 ), #19556 ) ; +#32572 = FILL_AREA_STYLE ('',( #13486 ) ) ; +#32573 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26419 ) ) ; +#32574 = CIRCLE ( 'NONE', #9859, 0.3600000000000078700 ) ; +#32575 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.279999999999999800, -3.299999999999999800 ) ) ; +#32577 = STYLED_ITEM ( 'NONE', ( #32311 ), #6511 ) ; +#32576 = AXIS2_PLACEMENT_3D ( 'NONE', #26319, #36348, #13437 ) ; +#32578 = VERTEX_POINT ( 'NONE', #21193 ) ; +#32579 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.08000174529616892200, -7.500000000000000900 ) ) ; +#32582 = EDGE_CURVE ( 'NONE', #39681, #31243, #32642, .T. ) ; +#32581 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.07499999999999998300, -0.2498427124746000500 ) ) ; +#32580 = AXIS2_PLACEMENT_3D ( 'NONE', #24892, #28100, #8722 ) ; +#32583 = CARTESIAN_POINT ( 'NONE', ( 3.629999999999999900, -1.139998254717349300, -6.299996877890552400 ) ) ; +#32584 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32585 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#32586 = VECTOR ( 'NONE', #36326, 1000.000000000000000 ) ; +#32588 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17888 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23527, #13490, #23113 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32587 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38514 ), #27713 ) ; +#32589 = SURFACE_STYLE_USAGE ( .BOTH. , #13507 ) ; +#32590 = ORIENTED_EDGE ( 'NONE', *, *, #8989, .F. ) ; +#32591 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32592 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26455, 'distance_accuracy_value', 'NONE'); +#32593 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -0.3500000000000000300, -1.300000000000000000 ) ) ; +#32594 = ORIENTED_EDGE ( 'NONE', *, *, #10136, .T. ) ; +#32595 = FACE_OUTER_BOUND ( 'NONE', #39516, .T. ) ; +#32596 = SURFACE_STYLE_USAGE ( .BOTH. , #35713 ) ; +#32597 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32598 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32599 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#32600 = ADVANCED_FACE ( 'NONE', ( #8349 ), #33874, .F. ) ; +#32601 = EDGE_LOOP ( 'NONE', ( #14851, #41614, #18846, #40657 ) ) ; +#32602 = VECTOR ( 'NONE', #37663, 999.9999999999998900 ) ; +#32603 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000027500, -0.2339555568811697600 ) ) ; +#32604 = VECTOR ( 'NONE', #992, 1000.000000000000000 ) ; +#32605 = SURFACE_STYLE_FILL_AREA ( #12726 ) ; +#32606 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#32607 = SURFACE_STYLE_FILL_AREA ( #34347 ) ; +#32608 = SURFACE_STYLE_FILL_AREA ( #10041 ) ; +#32609 = EDGE_CURVE ( 'NONE', #41173, #31918, #10915, .T. ) ; +#32610 = VERTEX_POINT ( 'NONE', #31173 ) ; +#32612 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#32611 = FILL_AREA_STYLE_COLOUR ( '', #26360 ) ; +#32613 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32614 = ADVANCED_FACE ( 'NONE', ( #27127 ), #37153, .F. ) ; +#32615 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -10.30000000000000100, -1.250000000000000000 ) ) ; +#32616 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#32617 = EDGE_LOOP ( 'NONE', ( #5953, #10052, #30878, #23523 ) ) ; +#32618 = EDGE_CURVE ( 'NONE', #15318, #33354, #10869, .T. ) ; +#32619 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32620 = STYLED_ITEM ( 'NONE', ( #26373 ), #16306 ) ; +#32621 = ORIENTED_EDGE ( 'NONE', *, *, #16130, .T. ) ; +#32622 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32623 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5847 ), #11772 ) ; +#32624 = VECTOR ( 'NONE', #22501, 1000.000000000000000 ) ; +#32625 = SURFACE_SIDE_STYLE ('',( #13367 ) ) ; +#32626 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#32627 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3677 ), #2121 ) ; +#32628 = FILL_AREA_STYLE_COLOUR ( '', #35673 ) ; +#32629 = ORIENTED_EDGE ( 'NONE', *, *, #32443, .F. ) ; +#32630 = EDGE_CURVE ( 'NONE', #21420, #17428, #12894, .T. ) ; +#32631 = SURFACE_STYLE_FILL_AREA ( #27238 ) ; +#32632 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid7', #15440 ) ; +#32633 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#32634 = FILL_AREA_STYLE ('',( #13274 ) ) ; +#32635 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32636 = ORIENTED_EDGE ( 'NONE', *, *, #40393, .F. ) ; +#32637 = EDGE_LOOP ( 'NONE', ( #4962, #27131, #37321, #17841 ) ) ; +#32638 = PRESENTATION_STYLE_ASSIGNMENT (( #32467 ) ) ; +#32639 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.949998254703821000, -6.732287565553231300 ) ) ; +#32641 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40491 ), #34824 ) ; +#32640 = AXIS2_PLACEMENT_3D ( 'NONE', #40174, #21023, #23958 ) ; +#32642 = LINE ( 'NONE', #11672, #19547 ) ; +#32643 = AXIS2_PLACEMENT_3D ( 'NONE', #14240, #29901, #29759 ) ; +#32644 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#32645 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003900, 0.3000000000000149200, -2.095470210943120000 ) ) ; +#32646 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13176 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22467, #2991, #6219 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32647 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32648 = FACE_OUTER_BOUND ( 'NONE', #20530, .T. ) ; +#32649 = EDGE_LOOP ( 'NONE', ( #5511, #1667, #31472, #16988 ) ) ; +#32650 = ADVANCED_FACE ( 'NONE', ( #27084 ), #9842, .T. ) ; +#32651 = LINE ( 'NONE', #819, #1371 ) ; +#32652 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#32653 = FILL_AREA_STYLE ('',( #23055 ) ) ; +#32654 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32655 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7991, 'distance_accuracy_value', 'NONE'); +#32656 = SURFACE_STYLE_USAGE ( .BOTH. , #505 ) ; +#32657 = SURFACE_SIDE_STYLE ('',( #5833 ) ) ; +#32658 = CIRCLE ( 'NONE', #13308, 0.1000000000000004800 ) ; +#32659 = SURFACE_STYLE_FILL_AREA ( #40587 ) ; +#32660 = SURFACE_STYLE_FILL_AREA ( #4270 ) ; +#32661 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36514, 'distance_accuracy_value', 'NONE'); +#32662 = EDGE_CURVE ( 'NONE', #21451, #19024, #27745, .T. ) ; +#32663 = FILL_AREA_STYLE_COLOUR ( '', #8092 ) ; +#32664 = EDGE_CURVE ( 'NONE', #17137, #35875, #38667, .T. ) ; +#32665 = ORIENTED_EDGE ( 'NONE', *, *, #2720, .F. ) ; +#32666 = FILL_AREA_STYLE_COLOUR ( '', #18746 ) ; +#32667 = VECTOR ( 'NONE', #19657, 1000.000000000000000 ) ; +#32668 = EDGE_CURVE ( 'NONE', #13393, #7458, #1328, .T. ) ; +#32669 = ORIENTED_EDGE ( 'NONE', *, *, #28734, .T. ) ; +#32670 = VECTOR ( 'NONE', #6222, 1000.000000000000000 ) ; +#32671 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.499998254703825300, -5.049999999999993600 ) ) ; +#32672 = ORIENTED_EDGE ( 'NONE', *, *, #34053, .T. ) ; +#32673 = DIRECTION ( 'NONE', ( 2.220446049250316000E-016, 2.367138801244466000E-016, 1.000000000000000000 ) ) ; +#32674 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30528 ) ) ; +#32675 = VECTOR ( 'NONE', #11859, 1000.000000000000000 ) ; +#32676 = CARTESIAN_POINT ( 'NONE', ( -2.927059326385671200, -0.2035604046359803500, 1.144659393046029400 ) ) ; +#32677 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 2.322941965694886000, 0.6999999999999999600 ) ) ; +#32678 = EDGE_CURVE ( 'NONE', #24367, #11687, #19509, .T. ) ; +#32679 = LINE ( 'NONE', #37266, #17060 ) ; +#32680 = PRESENTATION_STYLE_ASSIGNMENT (( #31699 ) ) ; +#32681 = EDGE_LOOP ( 'NONE', ( #21833, #36968, #21322, #5781 ) ) ; +#32682 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#32683 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#32684 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.4300017452961691400, -6.900000000000000400 ) ) ; +#32685 = ORIENTED_EDGE ( 'NONE', *, *, #6112, .F. ) ; +#32686 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8052 ), #36778 ) ; +#32687 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26205 ) ) ; +#32688 = CARTESIAN_POINT ( 'NONE', ( -2.149999999999999900, -1.499998254703822900, -6.299999999999993600 ) ) ; +#32689 = CIRCLE ( 'NONE', #31198, 0.3600000000000078700 ) ; +#32692 = EDGE_CURVE ( 'NONE', #6299, #14483, #20523, .T. ) ; +#32691 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1875 ), #9663 ) ; +#32690 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 10.30000000000000100, -1.250000000000000000 ) ) ; +#32693 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#32694 = VECTOR ( 'NONE', #27718, 1000.000000000000000 ) ; +#32695 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32697 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27473 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41575, #19033, #6159 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32696 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37844 ), #38937 ) ; +#32698 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.499998254703826200, -6.699999999999994000 ) ) ; +#32699 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#32700 = AXIS2_PLACEMENT_3D ( 'NONE', #9408, #9554, #29048 ) ; +#32701 = PLANE ( 'NONE', #7018 ) ; +#32702 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4575 ), #2984 ) ; +#32703 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, -0.2999999999999999900, -1.600000000000000100 ) ) ; +#32704 = VERTEX_POINT ( 'NONE', #9244 ) ; +#32705 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000800, -0.8400000000000000800 ) ) ; +#32707 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30558 ) ) ; +#32706 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#32708 = VERTEX_POINT ( 'NONE', #9661 ) ; +#32709 = FILL_AREA_STYLE_COLOUR ( '', #29869 ) ; +#32710 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#32711 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#32712 = ORIENTED_EDGE ( 'NONE', *, *, #7239, .T. ) ; +#32713 = SURFACE_SIDE_STYLE ('',( #11522 ) ) ; +#32714 = ORIENTED_EDGE ( 'NONE', *, *, #28593, .T. ) ; +#32715 = SURFACE_STYLE_FILL_AREA ( #37856 ) ; +#32716 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.8500017452961659000, -5.575000000000001100 ) ) ; +#32717 = ORIENTED_EDGE ( 'NONE', *, *, #4560, .F. ) ; +#32718 = VECTOR ( 'NONE', #21647, 1000.000000000000000 ) ; +#32719 = VECTOR ( 'NONE', #29867, 1000.000000000000000 ) ; +#32720 = CARTESIAN_POINT ( 'NONE', ( 2.944999999999999800, 0.6500000000000001300, -3.250000000000000400 ) ) ; +#32721 = VECTOR ( 'NONE', #3762, 1000.000000000000000 ) ; +#32722 = LINE ( 'NONE', #39523, #15552 ) ; +#32723 = SURFACE_STYLE_FILL_AREA ( #4763 ) ; +#32724 = DIRECTION ( 'NONE', ( 6.056601140521967000E-031, 1.987721548152419000E-045, 1.000000000000000000 ) ) ; +#32725 = VERTEX_POINT ( 'NONE', #35541 ) ; +#32726 = FILL_AREA_STYLE_COLOUR ( '', #22444 ) ; +#32727 = EDGE_LOOP ( 'NONE', ( #37546, #37063, #19157, #8297 ) ) ; +#32728 = VERTEX_POINT ( 'NONE', #31858 ) ; +#32729 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.008560160451628400E-016, 1.000000000000000000 ) ) ; +#32730 = SURFACE_STYLE_FILL_AREA ( #29207 ) ; +#32731 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1196, 'distance_accuracy_value', 'NONE'); +#32732 = VECTOR ( 'NONE', #25673, 1000.000000000000000 ) ; +#32733 = ORIENTED_EDGE ( 'NONE', *, *, #35852, .T. ) ; +#32734 = FILL_AREA_STYLE ('',( #39215 ) ) ; +#32735 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32736 = EDGE_CURVE ( 'NONE', #27353, #35649, #29118, .T. ) ; +#32737 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.280001745296169200, -4.400000000000000400 ) ) ; +#32738 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#32739 = SURFACE_SIDE_STYLE ('',( #40778 ) ) ; +#32740 = SURFACE_STYLE_USAGE ( .BOTH. , #35590 ) ; +#32741 = EDGE_CURVE ( 'NONE', #18769, #15613, #29568, .T. ) ; +#32742 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12421, 'distance_accuracy_value', 'NONE'); +#32743 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32744 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24939 ) ) ; +#32745 = ORIENTED_EDGE ( 'NONE', *, *, #24408, .T. ) ; +#32746 = LINE ( 'NONE', #41102, #20504 ) ; +#32747 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#32748 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#32749 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39405 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10660, #1252, #40297 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32750 = SURFACE_STYLE_USAGE ( .BOTH. , #32898 ) ; +#32751 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -5.700000000000000200 ) ) ; +#32752 = ORIENTED_EDGE ( 'NONE', *, *, #37105, .T. ) ; +#32753 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999300, -0.1999999999999999600, -3.249999999999999600 ) ) ; +#32754 = AXIS2_PLACEMENT_3D ( 'NONE', #38434, #6519, #6391 ) ; +#32755 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28429 ), #38117 ) ; +#32756 = VERTEX_POINT ( 'NONE', #13050 ) ; +#32757 = VECTOR ( 'NONE', #4957, 1000.000000000000000 ) ; +#32758 = VERTEX_POINT ( 'NONE', #9797 ) ; +#32759 = STYLED_ITEM ( 'NONE', ( #20796 ), #29365 ) ; +#32760 = CIRCLE ( 'NONE', #11056, 0.1000000000000000500 ) ; +#32763 = EDGE_CURVE ( 'NONE', #32225, #11507, #11873, .T. ) ; +#32762 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#32761 = AXIS2_PLACEMENT_3D ( 'NONE', #16781, #13372, #3767 ) ; +#32764 = ORIENTED_EDGE ( 'NONE', *, *, #22055, .F. ) ; +#32765 = SURFACE_STYLE_FILL_AREA ( #30175 ) ; +#32766 = ORIENTED_EDGE ( 'NONE', *, *, #27932, .F. ) ; +#32767 = ORIENTED_EDGE ( 'NONE', *, *, #18103, .F. ) ; +#32768 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1157 ), #30860 ) ; +#32769 = FILL_AREA_STYLE ('',( #29241 ) ) ; +#32770 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#32771 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#32772 = ADVANCED_FACE ( 'NONE', ( #8835 ), #6170, .F. ) ; +#32773 = CARTESIAN_POINT ( 'NONE', ( -2.573205080756887100, 1.630001745296169500, -1.650000000000000400 ) ) ; +#32774 = SURFACE_STYLE_USAGE ( .BOTH. , #10580 ) ; +#32775 = ORIENTED_EDGE ( 'NONE', *, *, #24546, .F. ) ; +#32776 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.342956698496972700E-015, -1.000000000000000000 ) ) ; +#32777 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#32778 = LINE ( 'NONE', #17193, #7 ) ; +#32779 = CARTESIAN_POINT ( 'NONE', ( -3.061666666666666500, 0.07499999999999999700, -1.494491118252165000 ) ) ; +#32780 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.2300017452961684900, -5.175000000000000700 ) ) ; +#32781 = CIRCLE ( 'NONE', #3862, 0.3000000000000007700 ) ; +#32782 = FILL_AREA_STYLE ('',( #6654 ) ) ; +#32783 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.480001745296170000, -0.2339555568811697600 ) ) ; +#32784 = FACE_OUTER_BOUND ( 'NONE', #37548, .T. ) ; +#32785 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32786 = VECTOR ( 'NONE', #11164, 1000.000000000000000 ) ; +#32787 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#32788 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32789 = FILL_AREA_STYLE ('',( #17275 ) ) ; +#32790 = CARTESIAN_POINT ( 'NONE', ( 4.518432039200718000, -0.4099999999999992500, -6.261124800398365900 ) ) ; +#32791 = ORIENTED_EDGE ( 'NONE', *, *, #24304, .F. ) ; +#32792 = CARTESIAN_POINT ( 'NONE', ( 3.024289321881345100, -0.3499999999999999200, -1.399999999992275400 ) ) ; +#32793 = VECTOR ( 'NONE', #34753, 1000.000000000000000 ) ; +#32794 = EDGE_CURVE ( 'NONE', #4770, #21194, #10924, .T. ) ; +#32795 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -5.700000000000000200 ) ) ; +#32796 = FACE_OUTER_BOUND ( 'NONE', #35248, .T. ) ; +#32797 = EDGE_LOOP ( 'NONE', ( #13722, #20444, #9419, #20661 ) ) ; +#32798 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.949998254703823300, -6.732287565553229500 ) ) ; +#32799 = FILL_AREA_STYLE_COLOUR ( '', #7876 ) ; +#32800 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.2800017452961673900, -7.150000000000001200 ) ) ; +#32801 = LINE ( 'NONE', #11971, #14140 ) ; +#32802 = EDGE_CURVE ( 'NONE', #32728, #3376, #33150, .T. ) ; +#32803 = AXIS2_PLACEMENT_3D ( 'NONE', #34245, #24951, #14889 ) ; +#32804 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#32805 = SURFACE_STYLE_FILL_AREA ( #17482 ) ; +#32806 = VERTEX_POINT ( 'NONE', #28616 ) ; +#32808 = VERTEX_POINT ( 'NONE', #38485 ) ; +#32807 = ADVANCED_FACE ( 'NONE', ( #36715 ), #15891, .T. ) ; +#32809 = LINE ( 'NONE', #24085, #31320 ) ; +#32810 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11151 ), #19048 ) ; +#32811 = CARTESIAN_POINT ( 'NONE', ( -1.486602540378444200, 1.630001745296169500, -1.700000000000001500 ) ) ; +#32812 = ORIENTED_EDGE ( 'NONE', *, *, #17707, .T. ) ; +#32813 = AXIS2_PLACEMENT_3D ( 'NONE', #30998, #34120, #14772 ) ; +#32814 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39862 ) ) ; +#32815 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28498 ), #15272 ) ; +#32816 = FACE_OUTER_BOUND ( 'NONE', #39574, .T. ) ; +#32817 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#32818 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.07499999999999998300, 0.03300000000000001500 ) ) ; +#32819 = ADVANCED_FACE ( 'NONE', ( #865 ), #35706, .T. ) ; +#32820 = SURFACE_STYLE_FILL_AREA ( #41612 ) ; +#32822 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4274 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21264, #11611, #8076 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32821 = STYLED_ITEM ( 'NONE', ( #12113 ), #30363 ) ; +#32823 = PLANE ( 'NONE', #7573 ) ; +#32825 = EDGE_CURVE ( 'NONE', #40017, #7208, #1859, .T. ) ; +#32824 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2317 ), #22570 ) ; +#32826 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#32827 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#32828 = PRESENTATION_STYLE_ASSIGNMENT (( #33484 ) ) ; +#32829 = SURFACE_SIDE_STYLE ('',( #3385 ) ) ; +#32830 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5844, 'distance_accuracy_value', 'NONE'); +#32831 = DIRECTION ( 'NONE', ( -3.281909278875040400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#32833 = AXIS2_PLACEMENT_3D ( 'NONE', #13986, #4512, #4361 ) ; +#32832 = STYLED_ITEM ( 'NONE', ( #37683 ), #25858 ) ; +#32834 = FACE_OUTER_BOUND ( 'NONE', #17650, .T. ) ; +#32835 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#32836 = ORIENTED_EDGE ( 'NONE', *, *, #1666, .F. ) ; +#32837 = CARTESIAN_POINT ( 'NONE', ( -3.242513005636281000, -0.07499999999999998300, 0.7036642131129723400 ) ) ; +#32838 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32839 = PRESENTATION_STYLE_ASSIGNMENT (( #29444 ) ) ; +#32840 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #13721, #10875, #3962, #36598, #10310, #14156, #39548, #20254, #16825, #29955 ), + .UNSPECIFIED., .F., .F., + ( 4, 1, 1, 2, 2, 4 ), + ( 0.0000000000000000000, 0.2499999999999970000, 0.3749999999999955000, 0.4374999999999957800, 0.4999999999999961100, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#32841 = ORIENTED_EDGE ( 'NONE', *, *, #36730, .F. ) ; +#32842 = ORIENTED_EDGE ( 'NONE', *, *, #12746, .F. ) ; +#32843 = CIRCLE ( 'NONE', #27969, 0.3600000000000078700 ) ; +#32844 = CYLINDRICAL_SURFACE ( 'NONE', #3861, 0.3600000000000078700 ) ; +#32845 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32846 = SURFACE_STYLE_FILL_AREA ( #13580 ) ; +#32847 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32848 = LINE ( 'NONE', #35703, #25777 ) ; +#32849 = ORIENTED_EDGE ( 'NONE', *, *, #1353, .T. ) ; +#32850 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.056601140521966100E-031 ) ) ; +#32851 = ORIENTED_EDGE ( 'NONE', *, *, #2010, .T. ) ; +#32852 = ORIENTED_EDGE ( 'NONE', *, *, #33184, .F. ) ; +#32853 = VECTOR ( 'NONE', #1253, 1000.000000000000000 ) ; +#32854 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.730424212713734800, -1.049979056049130000 ) ) ; +#32855 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000012400, -1.949998254703821700, -5.767712434446769600 ) ) ; +#32856 = FILL_AREA_STYLE_COLOUR ( '', #8004 ) ; +#32857 = ORIENTED_EDGE ( 'NONE', *, *, #6920, .F. ) ; +#32858 = FILL_AREA_STYLE ('',( #4323 ) ) ; +#32859 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25711, 'distance_accuracy_value', 'NONE'); +#32860 = CIRCLE ( 'NONE', #39934, 0.3600000000000078700 ) ; +#32861 = EDGE_CURVE ( 'NONE', #33754, #27559, #34690, .T. ) ; +#32862 = ADVANCED_FACE ( 'NONE', ( #16490 ), #16870, .F. ) ; +#32863 = LINE ( 'NONE', #20772, #12622 ) ; +#32864 = PLANE ( 'NONE', #28805 ) ; +#32865 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#32866 = EDGE_CURVE ( 'NONE', #21754, #22597, #6864, .T. ) ; +#32867 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#32868 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#32869 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#32870 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27237 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41758, #6199, #16216 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32871 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#32872 = ORIENTED_EDGE ( 'NONE', *, *, #14081, .T. ) ; +#32873 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3749, 'distance_accuracy_value', 'NONE'); +#32874 = CIRCLE ( 'NONE', #3498, 0.09999999999999999200 ) ; +#32875 = CARTESIAN_POINT ( 'NONE', ( 2.995000000000000100, -0.2999999999999999900, -1.399999999991250200 ) ) ; +#32876 = SURFACE_STYLE_USAGE ( .BOTH. , #7290 ) ; +#32877 = CARTESIAN_POINT ( 'NONE', ( -3.315809924354906600, 0.3499999999999621700, -1.679999999999999700 ) ) ; +#32878 = AXIS2_PLACEMENT_3D ( 'NONE', #18722, #8940, #7953 ) ; +#32879 = EDGE_LOOP ( 'NONE', ( #20362, #26128, #3582, #37516 ) ) ; +#32880 = VECTOR ( 'NONE', #39182, 1000.000000000000000 ) ; +#32881 = ORIENTED_EDGE ( 'NONE', *, *, #15964, .T. ) ; +#32882 = FACE_OUTER_BOUND ( 'NONE', #25662, .T. ) ; +#32884 = AXIS2_PLACEMENT_3D ( 'NONE', #14257, #37255, #10982 ) ; +#32883 = LINE ( 'NONE', #30572, #35412 ) ; +#32885 = AXIS2_PLACEMENT_3D ( 'NONE', #749, #10563, #26851 ) ; +#32886 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#32887 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32888 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#32890 = EDGE_CURVE ( 'NONE', #1848, #25581, #8359, .T. ) ; +#32889 = AXIS2_PLACEMENT_3D ( 'NONE', #6959, #6555, #29144 ) ; +#32891 = CIRCLE ( 'NONE', #156, 0.9999999999999991100 ) ; +#32892 = ORIENTED_EDGE ( 'NONE', *, *, #39973, .F. ) ; +#32893 = ORIENTED_EDGE ( 'NONE', *, *, #10950, .T. ) ; +#32894 = SURFACE_STYLE_USAGE ( .BOTH. , #39656 ) ; +#32895 = SURFACE_SIDE_STYLE ('',( #41704 ) ) ; +#32897 = STYLED_ITEM ( 'NONE', ( #4328 ), #2489 ) ; +#32896 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32076 ), #35065 ) ; +#32898 = SURFACE_SIDE_STYLE ('',( #15827 ) ) ; +#32899 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.5199999999999848100, -4.599999999999999600 ) ) ; +#32900 = STYLED_ITEM ( 'NONE', ( #27469 ), #39796 ) ; +#32901 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18890, 'distance_accuracy_value', 'NONE'); +#32902 = DIRECTION ( 'NONE', ( -6.056601140521967900E-031, -1.898766160908952300E-045, -1.000000000000000000 ) ) ; +#32903 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11463 ) ) ; +#32904 = ORIENTED_EDGE ( 'NONE', *, *, #9846, .T. ) ; +#32905 = CYLINDRICAL_SURFACE ( 'NONE', #2963, 0.3600000000000078700 ) ; +#32906 = FACE_OUTER_BOUND ( 'NONE', #3925, .T. ) ; +#32907 = ORIENTED_EDGE ( 'NONE', *, *, #2735, .T. ) ; +#32908 = LINE ( 'NONE', #20721, #31894 ) ; +#32909 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36721, 'distance_accuracy_value', 'NONE'); +#32910 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#32911 = SURFACE_STYLE_USAGE ( .BOTH. , #10290 ) ; +#32912 = DIRECTION ( 'NONE', ( -2.628368902995161200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#32913 = ORIENTED_EDGE ( 'NONE', *, *, #15217, .T. ) ; +#32914 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#32915 = CARTESIAN_POINT ( 'NONE', ( -3.178333333333019300, 0.2999999999999999900, -0.06128090415826408600 ) ) ; +#32916 = SURFACE_SIDE_STYLE ('',( #12669 ) ) ; +#32917 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#32918 = VERTEX_POINT ( 'NONE', #7113 ) ; +#32919 = FILL_AREA_STYLE ('',( #26306 ) ) ; +#32920 = EDGE_CURVE ( 'NONE', #9477, #3040, #27601, .T. ) ; +#32921 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#32922 = EDGE_CURVE ( 'NONE', #11037, #37476, #11407, .T. ) ; +#32923 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#32924 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32925 = LINE ( 'NONE', #29095, #29382 ) ; +#32926 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 0.2800017452961674500, -5.650000000000000400 ) ) ; +#32927 = VERTEX_POINT ( 'NONE', #29726 ) ; +#32928 = DIRECTION ( 'NONE', ( -4.336808689942015400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#32929 = PRESENTATION_STYLE_ASSIGNMENT (( #11081 ) ) ; +#32930 = EDGE_CURVE ( 'NONE', #5838, #33459, #7845, .T. ) ; +#32931 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17557 ), #6158 ) ; +#32932 = SURFACE_SIDE_STYLE ('',( #40893 ) ) ; +#32933 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000026900, -0.2339555568811695900 ) ) ; +#32934 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#32935 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32936 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -0.3499999999999996400, -1.250000000000000000 ) ) ; +#32937 = ORIENTED_EDGE ( 'NONE', *, *, #33615, .T. ) ; +#32938 = PRESENTATION_STYLE_ASSIGNMENT (( #24739 ) ) ; +#32939 = ORIENTED_EDGE ( 'NONE', *, *, #5178, .T. ) ; +#32940 = AXIS2_PLACEMENT_3D ( 'NONE', #1032, #13974, #14391 ) ; +#32941 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#32942 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 5.706431195920516700E-031 ) ) ; +#32943 = FACE_OUTER_BOUND ( 'NONE', #11651, .T. ) ; +#32944 = LINE ( 'NONE', #21490, #26899 ) ; +#32945 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#32946 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22135 ), #34314 ) ; +#32947 = VECTOR ( 'NONE', #18004, 1000.000000000000000 ) ; +#32948 = FILL_AREA_STYLE_COLOUR ( '', #25622 ) ; +#32949 = SURFACE_SIDE_STYLE ('',( #13770 ) ) ; +#32950 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34909, 'distance_accuracy_value', 'NONE'); +#32953 = EDGE_CURVE ( 'NONE', #2583, #26031, #16448, .T. ) ; +#32952 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#32951 = STYLED_ITEM ( 'NONE', ( #35075 ), #37256 ) ; +#32954 = SURFACE_STYLE_FILL_AREA ( #34126 ) ; +#32955 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.966063034915694700, -0.6228541982233617400 ) ) ; +#32957 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10633 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5651, #15267, #21505 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32956 = STYLED_ITEM ( 'NONE', ( #13445 ), #27722 ) ; +#32958 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37061 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33936, #14863, #18143 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#32959 = EDGE_LOOP ( 'NONE', ( #24468, #27803, #32479, #24225, #31091, #40726 ) ) ; +#32960 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32961 = VECTOR ( 'NONE', #6759, 1000.000000000000000 ) ; +#32962 = AXIS2_PLACEMENT_3D ( 'NONE', #37898, #3428, #29830 ) ; +#32963 = AXIS2_PLACEMENT_3D ( 'NONE', #29500, #600, #29776 ) ; +#32964 = SURFACE_SIDE_STYLE ('',( #15911 ) ) ; +#32965 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#32966 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.499998254703835300, -5.049999999999993600 ) ) ; +#32967 = ORIENTED_EDGE ( 'NONE', *, *, #8164, .T. ) ; +#32968 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#32969 = PRESENTATION_STYLE_ASSIGNMENT (( #10126 ) ) ; +#32970 = FILL_AREA_STYLE_COLOUR ( '', #9171 ) ; +#32971 = ORIENTED_EDGE ( 'NONE', *, *, #13619, .F. ) ; +#32972 = LINE ( 'NONE', #17868, #8710 ) ; +#32973 = SURFACE_STYLE_FILL_AREA ( #20630 ) ; +#32974 = CARTESIAN_POINT ( 'NONE', ( -4.465000000000001600, -0.01999825470386167400, -7.499624765331573100 ) ) ; +#32975 = ORIENTED_EDGE ( 'NONE', *, *, #28753, .T. ) ; +#32976 = FILL_AREA_STYLE_COLOUR ( '', #12790 ) ; +#32977 = FILL_AREA_STYLE_COLOUR ( '', #13980 ) ; +#32978 = ORIENTED_EDGE ( 'NONE', *, *, #22785, .T. ) ; +#32979 = SURFACE_STYLE_FILL_AREA ( #27284 ) ; +#32980 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#32981 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -0.9500017452961654300, -5.700000000000000200 ) ) ; +#32982 = PLANE ( 'NONE', #7065 ) ; +#32983 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.837630800822890800E-016 ) ) ; +#32984 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#32985 = ORIENTED_EDGE ( 'NONE', *, *, #36765, .F. ) ; +#32986 = ORIENTED_EDGE ( 'NONE', *, *, #32178, .F. ) ; +#32987 = CARTESIAN_POINT ( 'NONE', ( -0.6000000000000000900, -1.139998254717362600, -5.049996877890552400 ) ) ; +#32988 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#32989 = ADVANCED_FACE ( 'NONE', ( #13389 ), #23512, .T. ) ; +#32990 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#32991 = FILL_AREA_STYLE_COLOUR ( '', #13160 ) ; +#32992 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.2999999999999999900, 0.3499999999999999800 ) ) ; +#32993 = EDGE_CURVE ( 'NONE', #29067, #11831, #40711, .T. ) ; +#32994 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#32996 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#32995 = FACE_OUTER_BOUND ( 'NONE', #3048, .T. ) ; +#32997 = FACE_OUTER_BOUND ( 'NONE', #3343, .T. ) ; +#32998 = CARTESIAN_POINT ( 'NONE', ( -14.52500000000000900, -0.7099999999999663200, -6.861124800398366500 ) ) ; +#32999 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33000 = EDGE_CURVE ( 'NONE', #27626, #35263, #8845, .T. ) ; +#33001 = VERTEX_POINT ( 'NONE', #26359 ) ; +#33002 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33003 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33004 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25118 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27652, #21606, #41205 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33005 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822000, -6.649261509947661100 ) ) ; +#33006 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33007 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#33008 = STYLED_ITEM ( 'NONE', ( #17752 ), #13156 ) ; +#33009 = FILL_AREA_STYLE_COLOUR ( '', #866 ) ; +#33010 = FILL_AREA_STYLE ('',( #23544 ) ) ; +#33011 = VERTEX_POINT ( 'NONE', #687 ) ; +#33012 = STYLED_ITEM ( 'NONE', ( #12875 ), #300 ) ; +#33013 = VECTOR ( 'NONE', #14610, 1000.000000000000000 ) ; +#33014 = FACE_OUTER_BOUND ( 'NONE', #18858, .T. ) ; +#33015 = ORIENTED_EDGE ( 'NONE', *, *, #17543, .T. ) ; +#33016 = FILL_AREA_STYLE_COLOUR ( '', #10250 ) ; +#33017 = ORIENTED_EDGE ( 'NONE', *, *, #2318, .F. ) ; +#33018 = ORIENTED_EDGE ( 'NONE', *, *, #1784, .F. ) ; +#33019 = VERTEX_POINT ( 'NONE', #4293 ) ; +#33020 = SURFACE_STYLE_USAGE ( .BOTH. , #20340 ) ; +#33021 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#33023 = AXIS2_PLACEMENT_3D ( 'NONE', #27928, #8266, #27645 ) ; +#33022 = STYLED_ITEM ( 'NONE', ( #34416 ), #29253 ) ; +#33024 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31423 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19619, #26650, #23258 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33025 = VECTOR ( 'NONE', #13042, 999.9999999999998900 ) ; +#33026 = AXIS2_PLACEMENT_3D ( 'NONE', #31133, #21285, #14481 ) ; +#33027 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#33028 = CARTESIAN_POINT ( 'NONE', ( 4.856063034915696800, -0.2800000000000025800, -0.6228541982233617400 ) ) ; +#33029 = LINE ( 'NONE', #32478, #23424 ) ; +#33030 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33031 = ORIENTED_EDGE ( 'NONE', *, *, #37204, .T. ) ; +#33032 = ADVANCED_FACE ( 'NONE', ( #39160 ), #1107, .F. ) ; +#33033 = AXIS2_PLACEMENT_3D ( 'NONE', #39408, #29533, #10306 ) ; +#33034 = CIRCLE ( 'NONE', #461, 0.3600000000000078700 ) ; +#33035 = SURFACE_STYLE_FILL_AREA ( #6242 ) ; +#33036 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28611, 'distance_accuracy_value', 'NONE'); +#33037 = VECTOR ( 'NONE', #27551, 1000.000000000000000 ) ; +#33039 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -9.035070666963931600E-017 ) ) ; +#33038 = CARTESIAN_POINT ( 'NONE', ( 3.429999999999999700, -1.499998254703818900, -6.699999999999994000 ) ) ; +#33040 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33041 = ADVANCED_FACE ( 'NONE', ( #37166 ), #6827, .F. ) ; +#33042 = DIRECTION ( 'NONE', ( 1.355252715606880500E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33043 = SURFACE_STYLE_USAGE ( .BOTH. , #20223 ) ; +#33044 = CIRCLE ( 'NONE', #828, 0.3000000000000007700 ) ; +#33045 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#33046 = ORIENTED_EDGE ( 'NONE', *, *, #41693, .T. ) ; +#33047 = FACE_OUTER_BOUND ( 'NONE', #3820, .T. ) ; +#33048 = ORIENTED_EDGE ( 'NONE', *, *, #34860, .T. ) ; +#33049 = EDGE_CURVE ( 'NONE', #25323, #29002, #11600, .T. ) ; +#33050 = VERTEX_POINT ( 'NONE', #1238 ) ; +#33051 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.380001745296134000, -6.031671842700004200 ) ) ; +#33052 = ORIENTED_EDGE ( 'NONE', *, *, #11815, .T. ) ; +#33053 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#33054 = EDGE_LOOP ( 'NONE', ( #33437, #34358, #20036, #39456 ) ) ; +#33055 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#33056 = SURFACE_SIDE_STYLE ('',( #35635 ) ) ; +#33057 = EDGE_CURVE ( 'NONE', #32806, #5585, #28091, .T. ) ; +#33058 = AXIS2_PLACEMENT_3D ( 'NONE', #31862, #41207, #28217 ) ; +#33059 = SURFACE_STYLE_FILL_AREA ( #24717 ) ; +#33060 = CIRCLE ( 'NONE', #39803, 0.2818014882866899400 ) ; +#33061 = FILL_AREA_STYLE ('',( #23455 ) ) ; +#33062 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33063 = SURFACE_SIDE_STYLE ('',( #13303 ) ) ; +#33064 = VECTOR ( 'NONE', #1346, 1000.000000000000000 ) ; +#33065 = AXIS2_PLACEMENT_3D ( 'NONE', #28222, #5763, #31607 ) ; +#33066 = LINE ( 'NONE', #14731, #18952 ) ; +#33067 = AXIS2_PLACEMENT_3D ( 'NONE', #24621, #11852, #30942 ) ; +#33068 = SURFACE_STYLE_USAGE ( .BOTH. , #26577 ) ; +#33069 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#33070 = FACE_OUTER_BOUND ( 'NONE', #36481, .T. ) ; +#33071 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#33072 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#33073 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33074 = STYLED_ITEM ( 'NONE', ( #32828 ), #38279 ) ; +#33075 = ADVANCED_FACE ( 'NONE', ( #40178 ), #17314, .F. ) ; +#33076 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23608 ) ) ; +#33077 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37438, 'distance_accuracy_value', 'NONE'); +#33080 = AXIS2_PLACEMENT_3D ( 'NONE', #629, #19820, #35618 ) ; +#33079 = FILL_AREA_STYLE ('',( #7343 ) ) ; +#33078 = STYLED_ITEM ( 'NONE', ( #33384 ), #30282 ) ; +#33081 = CARTESIAN_POINT ( 'NONE', ( -4.450000000000001100, -0.01886685437028733100, -7.350000000000000500 ) ) ; +#33082 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.6800017452961709700, -3.999999999999999100 ) ) ; +#33083 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33084 = EDGE_LOOP ( 'NONE', ( #31267, #37269, #29229, #10823 ) ) ; +#33085 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33086 = SURFACE_STYLE_USAGE ( .BOTH. , #30388 ) ; +#33088 = EDGE_CURVE ( 'NONE', #4075, #28073, #25546, .T. ) ; +#33087 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24432 ), #35260 ) ; +#33089 = SURFACE_SIDE_STYLE ('',( #11038 ) ) ; +#33090 = SURFACE_STYLE_USAGE ( .BOTH. , #19840 ) ; +#33091 = FILL_AREA_STYLE ('',( #23481 ) ) ; +#33092 = ORIENTED_EDGE ( 'NONE', *, *, #22441, .F. ) ; +#33093 = PRESENTATION_STYLE_ASSIGNMENT (( #14915 ) ) ; +#33095 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2481 ), #35270 ) ; +#33094 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2760 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24244, #4877, #14486 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33096 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#33097 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33098 = EDGE_LOOP ( 'NONE', ( #28812, #14577, #41396, #31712 ) ) ; +#33099 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#33100 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33101 = CLOSED_SHELL ( 'NONE', ( #15472, #32772, #27513, #29843, #40155, #38065 ) ) ; +#33102 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 2.168404344971009400E-016 ) ) ; +#33103 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#33104 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521965300E-031 ) ) ; +#33105 = SURFACE_SIDE_STYLE ('',( #29247 ) ) ; +#33106 = VECTOR ( 'NONE', #2739, 1000.000000000000000 ) ; +#33107 = FILL_AREA_STYLE ('',( #33392 ) ) ; +#33108 = EDGE_LOOP ( 'NONE', ( #26770, #32967, #15159, #35538 ) ) ; +#33109 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.499998254703827700, -6.299999999999993600 ) ) ; +#33110 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#33111 = FILL_AREA_STYLE_COLOUR ( '', #11816 ) ; +#33112 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33113 = EDGE_CURVE ( 'NONE', #12005, #34067, #28046, .T. ) ; +#33114 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875040400E-015, 0.0000000000000000000 ) ) ; +#33115 = EDGE_CURVE ( 'NONE', #3055, #33001, #16406, .T. ) ; +#33116 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15783 ) ) ; +#33117 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#33118 = SURFACE_STYLE_USAGE ( .BOTH. , #26790 ) ; +#33119 = SURFACE_SIDE_STYLE ('',( #8508 ) ) ; +#33120 = VECTOR ( 'NONE', #20394, 1000.000000000000000 ) ; +#33121 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.3699999999999849000, -4.599999999999999600 ) ) ; +#33122 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#33123 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #2938, #28329, #8954, #31713 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#33124 = ORIENTED_EDGE ( 'NONE', *, *, #26709, .F. ) ; +#33125 = AXIS2_PLACEMENT_3D ( 'NONE', #37835, #34583, #8998 ) ; +#33126 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33127 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#33128 = VECTOR ( 'NONE', #3637, 1000.000000000000000 ) ; +#33129 = ORIENTED_EDGE ( 'NONE', *, *, #35319, .F. ) ; +#33130 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#33131 = VECTOR ( 'NONE', #11972, 1000.000000000000000 ) ; +#33132 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.480001745296169800, -0.2000017452961698200 ) ) ; +#33133 = FACE_OUTER_BOUND ( 'NONE', #19756, .T. ) ; +#33134 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, 0.2999999999999999900, 0.03300000000000001500 ) ) ; +#33135 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19364 ), #19618 ) ; +#33136 = FILL_AREA_STYLE ('',( #19891 ) ) ; +#33137 = ORIENTED_EDGE ( 'NONE', *, *, #22487, .F. ) ; +#33139 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33138 = AXIS2_PLACEMENT_3D ( 'NONE', #16149, #10184, #22644 ) ; +#33140 = ORIENTED_EDGE ( 'NONE', *, *, #5267, .F. ) ; +#33141 = LINE ( 'NONE', #33458, #15946 ) ; +#33142 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, -2.322941965694886000, -1.250000000000000000 ) ) ; +#33143 = VECTOR ( 'NONE', #15534, 1000.000000000000000 ) ; +#33146 = EDGE_CURVE ( 'NONE', #25234, #12491, #34602, .T. ) ; +#33145 = PLANE ( 'NONE', #36987 ) ; +#33144 = AXIS2_PLACEMENT_3D ( 'NONE', #7984, #30606, #10814 ) ; +#33147 = ORIENTED_EDGE ( 'NONE', *, *, #39284, .F. ) ; +#33148 = SURFACE_STYLE_USAGE ( .BOTH. , #38928 ) ; +#33149 = SURFACE_STYLE_FILL_AREA ( #37589 ) ; +#33150 = LINE ( 'NONE', #19446, #13422 ) ; +#33151 = SURFACE_SIDE_STYLE ('',( #7324 ) ) ; +#33153 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26188 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23886, #23463, #29952 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33152 = STYLED_ITEM ( 'NONE', ( #29981 ), #26432 ) ; +#33154 = FILL_AREA_STYLE_COLOUR ( '', #26438 ) ; +#33155 = EDGE_LOOP ( 'NONE', ( #29882, #1398, #17952, #5557, #21018, #28832, #5209, #27032 ) ) ; +#33156 = FACE_OUTER_BOUND ( 'NONE', #1692, .T. ) ; +#33157 = LINE ( 'NONE', #23259, #32124 ) ; +#33158 = FILL_AREA_STYLE_COLOUR ( '', #35001 ) ; +#33159 = VECTOR ( 'NONE', #6381, 1000.000000000000000 ) ; +#33160 = DIRECTION ( 'NONE', ( 2.341948692522932000E-016, -2.367138801244516800E-016, -1.000000000000000000 ) ) ; +#33161 = SURFACE_STYLE_FILL_AREA ( #24822 ) ; +#33162 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.879999999999742500, -0.2339555568811695900 ) ) ; +#33163 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 10.30000000000000100, -1.250000000000000000 ) ) ; +#33164 = LINE ( 'NONE', #20273, #18025 ) ; +#33165 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33166 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#33167 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33168 = EDGE_LOOP ( 'NONE', ( #18643, #6143, #36232, #24658 ) ) ; +#33169 = VECTOR ( 'NONE', #18597, 1000.000000000000000 ) ; +#33170 = PLANE ( 'NONE', #17011 ) ; +#33171 = FILL_AREA_STYLE ('',( #10554 ) ) ; +#33172 = LINE ( 'NONE', #24868, #17006 ) ; +#33173 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6225, 'distance_accuracy_value', 'NONE'); +#33174 = EDGE_CURVE ( 'NONE', #33050, #21094, #37641, .T. ) ; +#33175 = ORIENTED_EDGE ( 'NONE', *, *, #30543, .F. ) ; +#33176 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#33177 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#33178 = VECTOR ( 'NONE', #2006, 1000.000000000000000 ) ; +#33179 = ORIENTED_EDGE ( 'NONE', *, *, #30210, .T. ) ; +#33180 = FILL_AREA_STYLE_COLOUR ( '', #13927 ) ; +#33181 = CARTESIAN_POINT ( 'NONE', ( -1.149999999999999900, -1.499998254703826200, -6.299999999999993600 ) ) ; +#33182 = SURFACE_STYLE_USAGE ( .BOTH. , #7871 ) ; +#33183 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#33184 = EDGE_CURVE ( 'NONE', #37326, #29555, #36936, .T. ) ; +#33185 = PRESENTATION_STYLE_ASSIGNMENT (( #37684 ) ) ; +#33186 = VECTOR ( 'NONE', #7907, 1000.000000000000000 ) ; +#33187 = VECTOR ( 'NONE', #22946, 1000.000000000000000 ) ; +#33188 = SURFACE_STYLE_USAGE ( .BOTH. , #30208 ) ; +#33189 = ORIENTED_EDGE ( 'NONE', *, *, #20544, .F. ) ; +#33190 = VECTOR ( 'NONE', #29126, 1000.000000000000000 ) ; +#33191 = ORIENTED_EDGE ( 'NONE', *, *, #31572, .T. ) ; +#33192 = EDGE_CURVE ( 'NONE', #5544, #31798, #41673, .T. ) ; +#33193 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33194 = CARTESIAN_POINT ( 'NONE', ( -4.070001745296171900, 0.2800000000000027500, -4.400000000000000400 ) ) ; +#33195 = AXIS2_PLACEMENT_3D ( 'NONE', #28505, #22035, #31881 ) ; +#33196 = VECTOR ( 'NONE', #38409, 1000.000000000000000 ) ; +#33197 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23509 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31506, #9018, #12139 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33198 = FILL_AREA_STYLE_COLOUR ( '', #35473 ) ; +#33199 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.478176394252580200E-017, -6.082356018693180500E-031 ) ) ; +#33200 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33201 = CYLINDRICAL_SURFACE ( 'NONE', #26911, 0.1000000000000000500 ) ; +#33202 = ADVANCED_FACE ( 'NONE', ( #8802 ), #13613, .F. ) ; +#33203 = AXIS2_PLACEMENT_3D ( 'NONE', #36990, #37263, #34016 ) ; +#33204 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33206 = EDGE_CURVE ( 'NONE', #31984, #7741, #35140, .T. ) ; +#33205 = AXIS2_PLACEMENT_3D ( 'NONE', #596, #25978, #29210 ) ; +#33207 = SURFACE_STYLE_USAGE ( .BOTH. , #26730 ) ; +#33208 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#33209 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33210 = VERTEX_POINT ( 'NONE', #17443 ) ; +#33211 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #496, 'distance_accuracy_value', 'NONE'); +#33212 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33213 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24574 ), #35386 ) ; +#33214 = AXIS2_PLACEMENT_3D ( 'NONE', #39579, #26049, #4000 ) ; +#33215 = ORIENTED_EDGE ( 'NONE', *, *, #10848, .T. ) ; +#33216 = FILL_AREA_STYLE_COLOUR ( '', #13914 ) ; +#33217 = SURFACE_SIDE_STYLE ('',( #14844 ) ) ; +#33218 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34017 ), #2932 ) ; +#33219 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33220 = VERTEX_POINT ( 'NONE', #36499 ) ; +#33221 = VERTEX_POINT ( 'NONE', #10768 ) ; +#33222 = ORIENTED_EDGE ( 'NONE', *, *, #40398, .T. ) ; +#33223 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#33224 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#33225 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33226 = PRESENTATION_STYLE_ASSIGNMENT (( #40430 ) ) ; +#33227 = VECTOR ( 'NONE', #33742, 1000.000000000000100 ) ; +#33228 = VECTOR ( 'NONE', #36550, 1000.000000000000000 ) ; +#33229 = ORIENTED_EDGE ( 'NONE', *, *, #9941, .T. ) ; +#33230 = ORIENTED_EDGE ( 'NONE', *, *, #33876, .T. ) ; +#33231 = FACE_OUTER_BOUND ( 'NONE', #19223, .T. ) ; +#33232 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#33233 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.180001745296165300, -7.300000000000000700 ) ) ; +#33234 = SURFACE_SIDE_STYLE ('',( #3823 ) ) ; +#33235 = FACE_OUTER_BOUND ( 'NONE', #8654, .T. ) ; +#33236 = SURFACE_STYLE_USAGE ( .BOTH. , #36083 ) ; +#33237 = SURFACE_STYLE_FILL_AREA ( #6175 ) ; +#33238 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33239 = SURFACE_STYLE_FILL_AREA ( #40262 ) ; +#33240 = ADVANCED_FACE ( 'NONE', ( #19470 ), #16857, .F. ) ; +#33241 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#33242 = CIRCLE ( 'NONE', #22017, 0.1000000000000000500 ) ; +#33243 = EDGE_CURVE ( 'NONE', #3858, #41617, #39658, .T. ) ; +#33244 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33245 = EDGE_CURVE ( 'NONE', #23240, #15701, #23996, .T. ) ; +#33246 = VERTEX_POINT ( 'NONE', #23365 ) ; +#33247 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33248 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000026900, -4.099999999999999600 ) ) ; +#33249 = STYLED_ITEM ( 'NONE', ( #13466 ), #17465 ) ; +#33250 = ADVANCED_FACE ( 'NONE', ( #22496 ), #36129, .F. ) ; +#33251 = SURFACE_SIDE_STYLE ('',( #38784 ) ) ; +#33252 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 0.6800017452961697500, -1.649999999999999500 ) ) ; +#33253 = EDGE_CURVE ( 'NONE', #38105, #15701, #19432, .T. ) ; +#33254 = VERTEX_POINT ( 'NONE', #37328 ) ; +#33255 = PRESENTATION_STYLE_ASSIGNMENT (( #6793 ) ) ; +#33256 = SURFACE_STYLE_USAGE ( .BOTH. , #16732 ) ; +#33257 = CARTESIAN_POINT ( 'NONE', ( -0.6500000000000000200, -1.499998254703827700, -6.299999999999993600 ) ) ; +#33258 = CIRCLE ( 'NONE', #18489, 0.1000000000000009100 ) ; +#33259 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.5199999999999849200, -5.200000000000000200 ) ) ; +#33260 = AXIS2_PLACEMENT_3D ( 'NONE', #4457, #33551, #33964 ) ; +#33261 = VERTEX_POINT ( 'NONE', #24492 ) ; +#33262 = ORIENTED_EDGE ( 'NONE', *, *, #24623, .T. ) ; +#33263 = ORIENTED_EDGE ( 'NONE', *, *, #3350, .F. ) ; +#33264 = PRESENTATION_STYLE_ASSIGNMENT (( #8045 ) ) ; +#33265 = AXIS2_PLACEMENT_3D ( 'NONE', #14392, #4779, #24576 ) ; +#33266 = FILL_AREA_STYLE_COLOUR ( '', #37067 ) ; +#33267 = SURFACE_SIDE_STYLE ('',( #12907 ) ) ; +#33268 = PRESENTATION_STYLE_ASSIGNMENT (( #420 ) ) ; +#33271 = EDGE_CURVE ( 'NONE', #8814, #3704, #20990, .T. ) ; +#33270 = AXIS2_PLACEMENT_3D ( 'NONE', #9300, #35320, #6493 ) ; +#33269 = PLANE ( 'NONE', #21732 ) ; +#33272 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822400, -3.500000000000000000 ) ) ; +#33273 = SURFACE_STYLE_USAGE ( .BOTH. , #39466 ) ; +#33274 = ORIENTED_EDGE ( 'NONE', *, *, #9230, .T. ) ; +#33275 = ORIENTED_EDGE ( 'NONE', *, *, #30361, .F. ) ; +#33276 = VECTOR ( 'NONE', #13823, 1000.000000000000000 ) ; +#33277 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#33279 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38938 ) ) ; +#33278 = AXIS2_PLACEMENT_3D ( 'NONE', #23275, #22993, #39082 ) ; +#33280 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33281 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#33282 = STYLED_ITEM ( 'NONE', ( #26624 ), #41508 ) ; +#33283 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33083, 'distance_accuracy_value', 'NONE'); +#33284 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.8400000000000000800 ) ) ; +#33285 = STYLED_ITEM ( 'NONE', ( #249 ), #33446 ) ; +#33286 = ORIENTED_EDGE ( 'NONE', *, *, #34784, .T. ) ; +#33287 = VECTOR ( 'NONE', #7555, 1000.000000000000000 ) ; +#33288 = FILL_AREA_STYLE_COLOUR ( '', #14176 ) ; +#33290 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5046 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12021, #31940, #12583 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33289 = SURFACE_STYLE_USAGE ( .BOTH. , #33419 ) ; +#33291 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.380001745296134000, -6.031671842700004200 ) ) ; +#33292 = LINE ( 'NONE', #17857, #38812 ) ; +#33293 = CARTESIAN_POINT ( 'NONE', ( -3.337718385397965300, 0.07499999999999999700, 0.4680226303560859300 ) ) ; +#33294 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26090, 'distance_accuracy_value', 'NONE'); +#33295 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, 0.3500000000000000300, 0.6999999999999999600 ) ) ; +#33296 = ADVANCED_FACE ( 'NONE', ( #38598 ), #34225, .F. ) ; +#33297 = VERTEX_POINT ( 'NONE', #30965 ) ; +#33298 = VECTOR ( 'NONE', #24095, 1000.000000000000000 ) ; +#33299 = CARTESIAN_POINT ( 'NONE', ( 3.090769194355483600, 0.2666666666666667700, 1.050000000000572300 ) ) ; +#33300 = ORIENTED_EDGE ( 'NONE', *, *, #7044, .T. ) ; +#33301 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33302 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33303 = LINE ( 'NONE', #28891, #24741 ) ; +#33304 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33305 = ORIENTED_EDGE ( 'NONE', *, *, #104, .T. ) ; +#33306 = VERTEX_POINT ( 'NONE', #27433 ) ; +#33307 = ORIENTED_EDGE ( 'NONE', *, *, #9015, .T. ) ; +#33308 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33309 = LINE ( 'NONE', #9702, #24750 ) ; +#33310 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33311 = SURFACE_STYLE_FILL_AREA ( #3095 ) ; +#33312 = EDGE_LOOP ( 'NONE', ( #38034, #21591, #12025, #2480 ) ) ; +#33313 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33314 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33315 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33316 = ORIENTED_EDGE ( 'NONE', *, *, #13875, .T. ) ; +#33317 = EDGE_CURVE ( 'NONE', #41040, #38353, #19958, .T. ) ; +#33318 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33319 = EDGE_CURVE ( 'NONE', #3221, #38071, #15871, .T. ) ; +#33320 = ORIENTED_EDGE ( 'NONE', *, *, #7976, .T. ) ; +#33321 = AXIS2_PLACEMENT_3D ( 'NONE', #26464, #17283, #33096 ) ; +#33322 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#33323 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.7580972011844128200 ) ) ; +#33324 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33325 = STYLED_ITEM ( 'NONE', ( #6924 ), #14078 ) ; +#33326 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33327 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.499998254703827700, -6.299999999999993600 ) ) ; +#33328 = CARTESIAN_POINT ( 'NONE', ( -2.673205080756886800, 1.480001745296169600, -1.650000000000000800 ) ) ; +#33329 = AXIS2_PLACEMENT_3D ( 'NONE', #17541, #23750, #4675 ) ; +#33330 = AXIS2_PLACEMENT_3D ( 'NONE', #630, #29814, #10728 ) ; +#33331 = SURFACE_STYLE_USAGE ( .BOTH. , #20226 ) ; +#33333 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3010 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23646, #29583, #32683 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33332 = STYLED_ITEM ( 'NONE', ( #35854 ), #29680 ) ; +#33334 = CARTESIAN_POINT ( 'NONE', ( 3.429999999999999700, -1.499998254703818900, -6.299999999999993600 ) ) ; +#33335 = VERTEX_POINT ( 'NONE', #8075 ) ; +#33336 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#33339 = EDGE_CURVE ( 'NONE', #6852, #9333, #30561, .T. ) ; +#33338 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#33337 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40362 ) ) ; +#33340 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33341 = SURFACE_STYLE_FILL_AREA ( #26747 ) ; +#33342 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#33343 = ORIENTED_EDGE ( 'NONE', *, *, #6947, .T. ) ; +#33344 = SURFACE_SIDE_STYLE ('',( #2285 ) ) ; +#33345 = ORIENTED_EDGE ( 'NONE', *, *, #2665, .T. ) ; +#33347 = AXIS2_PLACEMENT_3D ( 'NONE', #25462, #40975, #2327 ) ; +#33346 = STYLED_ITEM ( 'NONE', ( #9976 ), #25051 ) ; +#33348 = PRESENTATION_STYLE_ASSIGNMENT (( #5454 ) ) ; +#33349 = SURFACE_SIDE_STYLE ('',( #6329 ) ) ; +#33350 = VECTOR ( 'NONE', #38649, 1000.000000000000000 ) ; +#33351 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#33352 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#33353 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, 0.2999999999999999900, 0.03299999999999998800 ) ) ; +#33354 = VERTEX_POINT ( 'NONE', #24059 ) ; +#33355 = DIRECTION ( 'NONE', ( -3.281909278875040000E-015, -1.000000000000000000, 3.886487709061371600E-045 ) ) ; +#33356 = CARTESIAN_POINT ( 'NONE', ( -3.237718385397870600, -0.2999999999999999900, 0.7155313145785474600 ) ) ; +#33357 = VERTEX_POINT ( 'NONE', #34079 ) ; +#33358 = VERTEX_POINT ( 'NONE', #24346 ) ; +#33359 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.2999999999999853300, -1.950000000000001300 ) ) ; +#33360 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.499998254703838600, -5.049999999999993600 ) ) ; +#33361 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33362 = ORIENTED_EDGE ( 'NONE', *, *, #34361, .T. ) ; +#33363 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000012100, -1.999998254703822000, -2.599999999999999600 ) ) ; +#33364 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000030900, 0.2800017452961687200, -6.449999999999999300 ) ) ; +#33365 = SURFACE_STYLE_USAGE ( .BOTH. , #17274 ) ; +#33366 = FILL_AREA_STYLE_COLOUR ( '', #29692 ) ; +#33367 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, 0.7071067811865483500 ) ) ; +#33368 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( + ( #5920, #12805, #12395, #35436 ), + ( #16085, #25564, #35017, #15654 ), + ( #38243, #32024, #6204, #18931 ), + ( #41491, #22170, #29627, #26526 ) ), + .UNSPECIFIED., .F., .F., .F. ) + B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) + GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( + ( 1.000000000000000000, 0.8047378540300842400, 0.8047378540300842400, 1.000000000000000000), + ( 0.8047378541243628300, 0.6476030137848147700, 0.6476030137848147700, 0.8047378541243628300), + ( 0.8047378541243628300, 0.6476030137848147700, 0.6476030137848147700, 0.8047378541243628300), + ( 1.000000000000000000, 0.8047378540300842400, 0.8047378540300842400, 1.000000000000000000) ) ) + REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); +#33369 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000900, 1.167528855492239800, -4.549999999999999800 ) ) ; +#33370 = LINE ( 'NONE', #14284, #22231 ) ; +#33371 = EDGE_CURVE ( 'NONE', #28837, #24208, #33066, .T. ) ; +#33373 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#33372 = VECTOR ( 'NONE', #18702, 1000.000000000000000 ) ; +#33374 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000300, 0.3500000000000000300, -1.300000000000000000 ) ) ; +#33375 = LINE ( 'NONE', #16059, #19246 ) ; +#33376 = CARTESIAN_POINT ( 'NONE', ( -4.459990511052883000, -0.01999825470386167400, -7.499875553460263700 ) ) ; +#33377 = EDGE_CURVE ( 'NONE', #7259, #1488, #29531, .T. ) ; +#33378 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16842 ) ) ; +#33379 = VERTEX_POINT ( 'NONE', #37462 ) ; +#33380 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33381 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#33382 = VERTEX_POINT ( 'NONE', #40697 ) ; +#33383 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2159 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7103, #23221, #14196 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33384 = PRESENTATION_STYLE_ASSIGNMENT (( #11486 ) ) ; +#33385 = LINE ( 'NONE', #23873, #6579 ) ; +#33386 = ORIENTED_EDGE ( 'NONE', *, *, #37530, .F. ) ; +#33387 = VERTEX_POINT ( 'NONE', #27179 ) ; +#33388 = ORIENTED_EDGE ( 'NONE', *, *, #7685, .F. ) ; +#33389 = AXIS2_PLACEMENT_3D ( 'NONE', #23024, #621, #36726 ) ; +#33390 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19057 ), #39301 ) ; +#33391 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33392 = FILL_AREA_STYLE_COLOUR ( '', #28595 ) ; +#33394 = AXIS2_PLACEMENT_3D ( 'NONE', #498, #6790, #35765 ) ; +#33393 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26343 ) ) ; +#33395 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000003200, 0.2800017452961687200, -6.200000000000001100 ) ) ; +#33396 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#33397 = EDGE_CURVE ( 'NONE', #22770, #27626, #38115, .T. ) ; +#33398 = ORIENTED_EDGE ( 'NONE', *, *, #38816, .T. ) ; +#33399 = SURFACE_SIDE_STYLE ('',( #3382 ) ) ; +#33400 = CARTESIAN_POINT ( 'NONE', ( -4.623418435431829300, -0.4099999999999988700, -7.461124800398367000 ) ) ; +#33401 = PRESENTATION_STYLE_ASSIGNMENT (( #13812 ) ) ; +#33402 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#33403 = SURFACE_STYLE_USAGE ( .BOTH. , #17604 ) ; +#33405 = STYLED_ITEM ( 'NONE', ( #3897 ), #1743 ) ; +#33404 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19584 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6413, #238, #35788 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33406 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33407 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -1.499998254703833500, -5.449999999999994000 ) ) ; +#33408 = SURFACE_STYLE_USAGE ( .BOTH. , #36253 ) ; +#33409 = CARTESIAN_POINT ( 'NONE', ( -4.450000000000001100, 0.08000174529616778400, -7.200000000000001100 ) ) ; +#33410 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33411 = VECTOR ( 'NONE', #13032, 1000.000000000000000 ) ; +#33412 = ADVANCED_FACE ( 'NONE', ( #12343 ), #7930, .F. ) ; +#33413 = FILL_AREA_STYLE ('',( #11210 ) ) ; +#33414 = PRESENTATION_STYLE_ASSIGNMENT (( #31739 ) ) ; +#33415 = EDGE_LOOP ( 'NONE', ( #22103, #16953, #237, #14181 ) ) ; +#33416 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid14', #34582 ) ; +#33417 = CIRCLE ( 'NONE', #23794, 0.2000000000000007300 ) ; +#33418 = FILL_AREA_STYLE ('',( #29746 ) ) ; +#33419 = SURFACE_SIDE_STYLE ('',( #38209 ) ) ; +#33420 = ORIENTED_EDGE ( 'NONE', *, *, #5206, .F. ) ; +#33421 = ORIENTED_EDGE ( 'NONE', *, *, #22388, .F. ) ; +#33422 = LINE ( 'NONE', #9420, #20323 ) ; +#33423 = SURFACE_STYLE_USAGE ( .BOTH. , #20890 ) ; +#33424 = FACE_OUTER_BOUND ( 'NONE', #22303, .T. ) ; +#33425 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#33426 = SURFACE_STYLE_FILL_AREA ( #30089 ) ; +#33427 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 2.367138801244516800E-016, 1.000000000000000000 ) ) ; +#33428 = ORIENTED_EDGE ( 'NONE', *, *, #37441, .F. ) ; +#33429 = EDGE_CURVE ( 'NONE', #18064, #36543, #7275, .T. ) ; +#33430 = ORIENTED_EDGE ( 'NONE', *, *, #26382, .F. ) ; +#33431 = VERTEX_POINT ( 'NONE', #24797 ) ; +#33432 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026900, -0.2339555568811697600 ) ) ; +#33433 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#33434 = FILL_AREA_STYLE ('',( #26957 ) ) ; +#33435 = EDGE_CURVE ( 'NONE', #21872, #13136, #23428, .T. ) ; +#33436 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33437 = ORIENTED_EDGE ( 'NONE', *, *, #1753, .F. ) ; +#33438 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33439 = VECTOR ( 'NONE', #40937, 1000.000000000000000 ) ; +#33440 = ORIENTED_EDGE ( 'NONE', *, *, #32678, .F. ) ; +#33441 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33442 = SURFACE_STYLE_FILL_AREA ( #25750 ) ; +#33443 = FILL_AREA_STYLE_COLOUR ( '', #17898 ) ; +#33444 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33445 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#33446 = ADVANCED_FACE ( 'NONE', ( #28488 ), #37875, .F. ) ; +#33447 = AXIS2_PLACEMENT_3D ( 'NONE', #12601, #41691, #12752 ) ; +#33448 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33944, 'distance_accuracy_value', 'NONE'); +#33449 = AXIS2_PLACEMENT_3D ( 'NONE', #24284, #14264, #27659 ) ; +#33450 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#33451 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#33452 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33453 = ORIENTED_EDGE ( 'NONE', *, *, #9152, .T. ) ; +#33455 = EDGE_CURVE ( 'NONE', #27665, #19217, #7769, .T. ) ; +#33454 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17469 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18700, #38009, #31246 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33456 = CIRCLE ( 'NONE', #33817, 1.651303021499040300 ) ; +#33457 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.380001745296134000, -6.699999999999994000 ) ) ; +#33458 = CARTESIAN_POINT ( 'NONE', ( 1.149999999999999900, -1.499998254703826200, -6.699999999999994000 ) ) ; +#33459 = VERTEX_POINT ( 'NONE', #11742 ) ; +#33460 = ADVANCED_FACE ( 'NONE', ( #4746 ), #2609, .T. ) ; +#33462 = AXIS2_PLACEMENT_3D ( 'NONE', #12788, #6449, #35122 ) ; +#33461 = STYLED_ITEM ( 'NONE', ( #5932 ), #27495 ) ; +#33463 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33464 = CARTESIAN_POINT ( 'NONE', ( 1.149999999999999900, -1.499998254703826200, -6.299999999999993600 ) ) ; +#33465 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28652 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7149, #7285, #10810 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33466 = FACE_OUTER_BOUND ( 'NONE', #5784, .T. ) ; +#33467 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33468 = CYLINDRICAL_SURFACE ( 'NONE', #2002, 0.2000000000000000900 ) ; +#33469 = STYLED_ITEM ( 'NONE', ( #4201 ), #32018 ) ; +#33470 = VERTEX_POINT ( 'NONE', #8897 ) ; +#33471 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#33472 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33473 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33474 = ORIENTED_EDGE ( 'NONE', *, *, #2922, .F. ) ; +#33475 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003900, 0.3000000000000149200, -3.099999999999998800 ) ) ; +#33476 = VECTOR ( 'NONE', #32463, 1000.000000000000000 ) ; +#33477 = CARTESIAN_POINT ( 'NONE', ( 4.720380236995682200, 0.2799999999999973100, -0.8400000000000000800 ) ) ; +#33478 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.07499999999999998300, 0.03299999999999998800 ) ) ; +#33479 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33480 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33481 = CARTESIAN_POINT ( 'NONE', ( -3.273571428571023100, -0.07499999999999999700, -0.08583148475006677200 ) ) ; +#33482 = FILL_AREA_STYLE_COLOUR ( '', #27006 ) ; +#33483 = VECTOR ( 'NONE', #9949, 1000.000000000000000 ) ; +#33484 = SURFACE_STYLE_USAGE ( .BOTH. , #27011 ) ; +#33485 = EDGE_CURVE ( 'NONE', #35666, #8482, #19923, .T. ) ; +#33486 = SURFACE_STYLE_USAGE ( .BOTH. , #27269 ) ; +#33487 = EDGE_CURVE ( 'NONE', #11564, #40577, #6748, .T. ) ; +#33488 = SURFACE_SIDE_STYLE ('',( #16424 ) ) ; +#33489 = FILL_AREA_STYLE_COLOUR ( '', #18916 ) ; +#33490 = ORIENTED_EDGE ( 'NONE', *, *, #27213, .T. ) ; +#33491 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33492 = ADVANCED_FACE ( 'NONE', ( #40098 ), #5547, .T. ) ; +#33493 = EDGE_CURVE ( 'NONE', #41360, #38462, #26472, .T. ) ; +#33494 = ORIENTED_EDGE ( 'NONE', *, *, #34696, .F. ) ; +#33495 = AXIS2_PLACEMENT_3D ( 'NONE', #8531, #6962, #35813 ) ; +#33496 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#33497 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33498 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33499 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33500 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33501 = EDGE_CURVE ( 'NONE', #28522, #30601, #737, .T. ) ; +#33502 = VERTEX_POINT ( 'NONE', #25744 ) ; +#33503 = LINE ( 'NONE', #26680, #17874 ) ; +#33504 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33505 = EDGE_LOOP ( 'NONE', ( #37748, #3578, #13504, #24027 ) ) ; +#33506 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2838 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36443, #36706, #33326 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33507 = FILL_AREA_STYLE ('',( #30115 ) ) ; +#33509 = ORIENTED_EDGE ( 'NONE', *, *, #17943, .F. ) ; +#33508 = SURFACE_STYLE_FILL_AREA ( #18866 ) ; +#33510 = EDGE_LOOP ( 'NONE', ( #36874, #7284, #39259 ) ) ; +#33511 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11042 ), #11586 ) ; +#33512 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2497, 'distance_accuracy_value', 'NONE'); +#33515 = EDGE_CURVE ( 'NONE', #6923, #10551, #24455, .T. ) ; +#33514 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27040 ), #26788 ) ; +#33513 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33516 = SURFACE_STYLE_USAGE ( .BOTH. , #24205 ) ; +#33517 = ORIENTED_EDGE ( 'NONE', *, *, #941, .T. ) ; +#33518 = PRESENTATION_STYLE_ASSIGNMENT (( #30351 ) ) ; +#33519 = VERTEX_POINT ( 'NONE', #12426 ) ; +#33520 = PRESENTATION_STYLE_ASSIGNMENT (( #28664 ) ) ; +#33521 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33522 = FACE_OUTER_BOUND ( 'NONE', #9391, .T. ) ; +#33523 = FACE_OUTER_BOUND ( 'NONE', #5745, .T. ) ; +#33525 = STYLED_ITEM ( 'NONE', ( #19641 ), #3478 ) ; +#33524 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34343 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3961, #23466, #637 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33526 = FACE_OUTER_BOUND ( 'NONE', #38304, .T. ) ; +#33527 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35119 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39343, #6722, #6862 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33528 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#33530 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31368 ) ) ; +#33529 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#33531 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33532 = SURFACE_STYLE_USAGE ( .BOTH. , #24495 ) ; +#33533 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.279999999999999800, -0.2000017452961698200 ) ) ; +#33534 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33535 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33536 = ORIENTED_EDGE ( 'NONE', *, *, #14555, .T. ) ; +#33537 = SURFACE_STYLE_USAGE ( .BOTH. , #33267 ) ; +#33538 = ORIENTED_EDGE ( 'NONE', *, *, #21668, .T. ) ; +#33539 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#33540 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33541 = FACE_OUTER_BOUND ( 'NONE', #14560, .T. ) ; +#33542 = EDGE_LOOP ( 'NONE', ( #9954, #20852, #2124, #5835 ) ) ; +#33543 = VECTOR ( 'NONE', #13515, 1000.000000000000000 ) ; +#33544 = ORIENTED_EDGE ( 'NONE', *, *, #9900, .F. ) ; +#33545 = ADVANCED_FACE ( 'NONE', ( #33523 ), #25871, .T. ) ; +#33546 = ORIENTED_EDGE ( 'NONE', *, *, #14805, .T. ) ; +#33547 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.07499999999999998300, -0.2498427124745999900 ) ) ; +#33549 = ORIENTED_EDGE ( 'NONE', *, *, #15462, .F. ) ; +#33548 = SURFACE_STYLE_FILL_AREA ( #30895 ) ; +#33550 = ORIENTED_EDGE ( 'NONE', *, *, #13044, .F. ) ; +#33551 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33552 = DIRECTION ( 'NONE', ( -4.336808689942020900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#33553 = ADVANCED_FACE ( 'NONE', ( #29985 ), #38287, .T. ) ; +#33554 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#33555 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#33556 = FILL_AREA_STYLE ('',( #27613 ) ) ; +#33557 = EDGE_CURVE ( 'NONE', #28917, #6388, #35551, .T. ) ; +#33558 = PLANE ( 'NONE', #20129 ) ; +#33559 = FILL_AREA_STYLE ('',( #570 ) ) ; +#33560 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23711, 'distance_accuracy_value', 'NONE'); +#33561 = LINE ( 'NONE', #19552, #18908 ) ; +#33562 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#33563 = EDGE_CURVE ( 'NONE', #13458, #10288, #22418, .T. ) ; +#33564 = CYLINDRICAL_SURFACE ( 'NONE', #15260, 0.4000000000000001900 ) ; +#33565 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33566 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33567 = AXIS2_PLACEMENT_3D ( 'NONE', #37808, #15896, #22413 ) ; +#33568 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33569 = CARTESIAN_POINT ( 'NONE', ( -3.680000000000000200, -1.380001745296125100, -6.699999999999994000 ) ) ; +#33570 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#33571 = CARTESIAN_POINT ( 'NONE', ( 3.020723318420237600, 0.3499999999999999800, -1.528825987533514000 ) ) ; +#33572 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2478 ), #12698 ) ; +#33573 = PLANE ( 'NONE', #26138 ) ; +#33574 = AXIS2_PLACEMENT_3D ( 'NONE', #36416, #17067, #39632 ) ; +#33575 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, 0.2799999999999973100, 0.0000000000000000000 ) ) ; +#33576 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31412 ) ) ; +#33577 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33578 = EDGE_LOOP ( 'NONE', ( #26260, #29374, #16579, #11087 ) ) ; +#33580 = AXIS2_PLACEMENT_3D ( 'NONE', #35397, #393, #22945 ) ; +#33579 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34381 ), #40053 ) ; +#33581 = CARTESIAN_POINT ( 'NONE', ( -1.486602540378444200, 1.630001745296169500, -1.700000000000001500 ) ) ; +#33582 = PRESENTATION_STYLE_ASSIGNMENT (( #18302 ) ) ; +#33583 = ORIENTED_EDGE ( 'NONE', *, *, #38507, .T. ) ; +#33585 = EDGE_CURVE ( 'NONE', #6860, #15774, #21437, .T. ) ; +#33584 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1613 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34972, #28755, #12067 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33586 = DIRECTION ( 'NONE', ( 6.056601140521967900E-031, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33587 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#33588 = FILL_AREA_STYLE ('',( #14113 ) ) ; +#33589 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33590 = ORIENTED_EDGE ( 'NONE', *, *, #39117, .T. ) ; +#33591 = PRESENTATION_STYLE_ASSIGNMENT (( #24856 ) ) ; +#33592 = ORIENTED_EDGE ( 'NONE', *, *, #3680, .F. ) ; +#33593 = SURFACE_SIDE_STYLE ('',( #27620 ) ) ; +#33594 = AXIS2_PLACEMENT_3D ( 'NONE', #33699, #20752, #1533 ) ; +#33595 = PRESENTATION_STYLE_ASSIGNMENT (( #3405 ) ) ; +#33596 = LINE ( 'NONE', #14573, #7801 ) ; +#33597 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33598 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#33600 = CIRCLE ( 'NONE', #2133, 0.1999999999999998700 ) ; +#33599 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -2.904459358809381000 ) ) ; +#33601 = VERTEX_POINT ( 'NONE', #15830 ) ; +#33602 = SURFACE_STYLE_USAGE ( .BOTH. , #2000 ) ; +#33603 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25677, 'distance_accuracy_value', 'NONE'); +#33604 = EDGE_LOOP ( 'NONE', ( #3051, #23992, #603, #21314 ) ) ; +#33605 = FILL_AREA_STYLE_COLOUR ( '', #7373 ) ; +#33606 = ORIENTED_EDGE ( 'NONE', *, *, #17551, .T. ) ; +#33607 = ORIENTED_EDGE ( 'NONE', *, *, #16863, .F. ) ; +#33608 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33609 = SURFACE_SIDE_STYLE ('',( #7463 ) ) ; +#33610 = EDGE_CURVE ( 'NONE', #14483, #37158, #5716, .T. ) ; +#33611 = ADVANCED_FACE ( 'NONE', ( #11773 ), #3133, .F. ) ; +#33612 = ORIENTED_EDGE ( 'NONE', *, *, #11985, .F. ) ; +#33613 = SURFACE_STYLE_FILL_AREA ( #169 ) ; +#33614 = SURFACE_STYLE_USAGE ( .BOTH. , #33056 ) ; +#33615 = EDGE_CURVE ( 'NONE', #33210, #38479, #9742, .T. ) ; +#33616 = VECTOR ( 'NONE', #9320, 1000.000000000000000 ) ; +#33617 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27369 ) ) ; +#33618 = FILL_AREA_STYLE ('',( #14143 ) ) ; +#33619 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#33620 = FILL_AREA_STYLE ('',( #17408 ) ) ; +#33621 = VERTEX_POINT ( 'NONE', #12990 ) ; +#33622 = SURFACE_STYLE_FILL_AREA ( #35771 ) ; +#33623 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#33624 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40952 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16462, #35969, #39040 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33625 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33626 = SHAPE_DEFINITION_REPRESENTATION ( #13704, #15110 ) ; +#33627 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.2699999999999848600, -5.199999999999999300 ) ) ; +#33628 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.480001745296169800, 0.0000000000000000000 ) ) ; +#33629 = LINE ( 'NONE', #9048, #29570 ) ; +#33630 = ORIENTED_EDGE ( 'NONE', *, *, #38076, .T. ) ; +#33631 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, -0.5999999999999999800, -1.930000000000000600 ) ) ; +#33632 = STYLED_ITEM ( 'NONE', ( #16102 ), #38492 ) ; +#33633 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#33634 = VECTOR ( 'NONE', #31686, 1000.000000000000000 ) ; +#33635 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23608 ), #35808 ) ; +#33636 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33638 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33637 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31469 ), #16858 ) ; +#33639 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33640 = LINE ( 'NONE', #18303, #39702 ) ; +#33641 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33642 = ORIENTED_EDGE ( 'NONE', *, *, #24224, .F. ) ; +#33643 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, -2.031000000000001500, -6.449999999999999300 ) ) ; +#33644 = FACE_OUTER_BOUND ( 'NONE', #37709, .T. ) ; +#33646 = EDGE_CURVE ( 'NONE', #12852, #33754, #34530, .T. ) ; +#33645 = AXIS2_PLACEMENT_3D ( 'NONE', #34369, #18294, #37333 ) ; +#33647 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 1.468654402296581600E-014, -3.099999999999998800 ) ) ; +#33648 = FILL_AREA_STYLE ('',( #20697 ) ) ; +#33649 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33651 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34458 ) ) ; +#33650 = AXIS2_PLACEMENT_3D ( 'NONE', #11996, #20033, #10095 ) ; +#33652 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 3.307718258760844200E-015 ) ) ; +#33653 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#33654 = ADVANCED_FACE ( 'NONE', ( #30475 ), #23023, .F. ) ; +#33655 = FILL_AREA_STYLE ('',( #14445 ) ) ; +#33656 = LINE ( 'NONE', #2568, #25094 ) ; +#33657 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#33658 = ORIENTED_EDGE ( 'NONE', *, *, #26386, .F. ) ; +#33659 = VERTEX_POINT ( 'NONE', #16812 ) ; +#33660 = SURFACE_STYLE_FILL_AREA ( #10134 ) ; +#33661 = DIRECTION ( 'NONE', ( -7.744301232039317900E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#33662 = EDGE_LOOP ( 'NONE', ( #36940, #12279, #34210, #25233 ) ) ; +#33663 = PLANE ( 'NONE', #6643 ) ; +#33664 = ADVANCED_FACE ( 'NONE', ( #21391 ), #7187, .T. ) ; +#33665 = VECTOR ( 'NONE', #24131, 1000.000000000000000 ) ; +#33666 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#33667 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745296169300, -1.994459358809384600 ) ) ; +#33668 = FACE_OUTER_BOUND ( 'NONE', #23166, .T. ) ; +#33669 = ORIENTED_EDGE ( 'NONE', *, *, #7492, .F. ) ; +#33670 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#33671 = ORIENTED_EDGE ( 'NONE', *, *, #8184, .T. ) ; +#33672 = EDGE_CURVE ( 'NONE', #8951, #33754, #11738, .T. ) ; +#33673 = PRESENTATION_STYLE_ASSIGNMENT (( #6444 ) ) ; +#33674 = VECTOR ( 'NONE', #17161, 1000.000000000000000 ) ; +#33675 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#33676 = VECTOR ( 'NONE', #126, 1000.000000000000000 ) ; +#33677 = EDGE_CURVE ( 'NONE', #6127, #36790, #32450, .T. ) ; +#33678 = LINE ( 'NONE', #17615, #14997 ) ; +#33679 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#33680 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33681 = SURFACE_SIDE_STYLE ('',( #4319 ) ) ; +#33682 = LINE ( 'NONE', #568, #25120 ) ; +#33683 = SURFACE_SIDE_STYLE ('',( #18050 ) ) ; +#33684 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19070, 'distance_accuracy_value', 'NONE'); +#33685 = PRESENTATION_STYLE_ASSIGNMENT (( #9604 ) ) ; +#33686 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35801 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #867, #23406, #26672 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33687 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865475700, 0.7071067811865475700 ) ) ; +#33688 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998497600, -4.250000000000000000 ) ) ; +#33689 = LINE ( 'NONE', #40728, #17536 ) ; +#33690 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#33691 = CARTESIAN_POINT ( 'NONE', ( 4.856063034915695900, -0.2800000000000026400, -0.6228541982233617400 ) ) ; +#33692 = ORIENTED_EDGE ( 'NONE', *, *, #13880, .F. ) ; +#33693 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31521 ) ) ; +#33694 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.4300017452961693600, -5.075000000000000200 ) ) ; +#33695 = SURFACE_STYLE_FILL_AREA ( #36620 ) ; +#33696 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#33697 = CARTESIAN_POINT ( 'NONE', ( 3.178333333333036100, -0.2999999999999999900, -0.06128090415831143800 ) ) ; +#33698 = STYLED_ITEM ( 'NONE', ( #28722 ), #6950 ) ; +#33699 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000000200, -1.139998254717357500, -5.049996877890552400 ) ) ; +#33700 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#33703 = EDGE_CURVE ( 'NONE', #15473, #27706, #9701, .T. ) ; +#33702 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33701 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20354 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18339, #18469, #15746 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33704 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8544, 'distance_accuracy_value', 'NONE'); +#33705 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.879999999999742500, -0.2339555568811695900 ) ) ; +#33706 = ADVANCED_FACE ( 'NONE', ( #16298 ), #6772, .F. ) ; +#33707 = ORIENTED_EDGE ( 'NONE', *, *, #23175, .F. ) ; +#33708 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#33709 = ORIENTED_EDGE ( 'NONE', *, *, #16903, .F. ) ; +#33710 = SURFACE_STYLE_USAGE ( .BOTH. , #23829 ) ; +#33711 = ORIENTED_EDGE ( 'NONE', *, *, #26983, .F. ) ; +#33712 = CARTESIAN_POINT ( 'NONE', ( 2.859829086680000000, 0.2000000000000001500, 1.149999999999999900 ) ) ; +#33713 = VECTOR ( 'NONE', #21520, 1000.000000000000000 ) ; +#33714 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22559 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22695, #25934, #35406 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33716 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#33715 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37233 ), #28025 ) ; +#33717 = FACE_OUTER_BOUND ( 'NONE', #14947, .T. ) ; +#33718 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#33719 = SURFACE_STYLE_FILL_AREA ( #10065 ) ; +#33720 = ORIENTED_EDGE ( 'NONE', *, *, #38540, .T. ) ; +#33721 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33722 = ORIENTED_EDGE ( 'NONE', *, *, #11825, .T. ) ; +#33723 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33724 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#33725 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000010300, -1.999998254703821500, -5.899999999999999500 ) ) ; +#33726 = SURFACE_STYLE_USAGE ( .BOTH. , #36692 ) ; +#33727 = CARTESIAN_POINT ( 'NONE', ( 1.850000000000000100, -1.499998254703824400, -6.699999999999994000 ) ) ; +#33728 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#33729 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#33730 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.08000174529616772800, -7.150000000000001200 ) ) ; +#33731 = EDGE_CURVE ( 'NONE', #8821, #18600, #39009, .T. ) ; +#33732 = ORIENTED_EDGE ( 'NONE', *, *, #38052, .T. ) ; +#33733 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33734 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#33735 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5475, 'distance_accuracy_value', 'NONE'); +#33736 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -1.380001745296130000, -4.781671842700004200 ) ) ; +#33737 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33738 = EDGE_CURVE ( 'NONE', #39313, #10759, #25436, .T. ) ; +#33739 = ORIENTED_EDGE ( 'NONE', *, *, #16660, .F. ) ; +#33740 = LINE ( 'NONE', #29961, #31705 ) ; +#33741 = EDGE_CURVE ( 'NONE', #37025, #18567, #17852, .T. ) ; +#33742 = DIRECTION ( 'NONE', ( -0.8190279881558656400, 0.0000000000000000000, 0.5737535661042597600 ) ) ; +#33743 = ORIENTED_EDGE ( 'NONE', *, *, #39987, .T. ) ; +#33744 = VERTEX_POINT ( 'NONE', #39673 ) ; +#33745 = ORIENTED_EDGE ( 'NONE', *, *, #24623, .F. ) ; +#33746 = STYLED_ITEM ( 'NONE', ( #18729 ), #16727 ) ; +#33747 = PRESENTATION_STYLE_ASSIGNMENT (( #33256 ) ) ; +#33748 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#33749 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#33750 = CIRCLE ( 'NONE', #12960, 0.3600000000000078700 ) ; +#33751 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#33752 = PLANE ( 'NONE', #4997 ) ; +#33753 = VERTEX_POINT ( 'NONE', #11005 ) ; +#33754 = VERTEX_POINT ( 'NONE', #17396 ) ; +#33755 = ORIENTED_EDGE ( 'NONE', *, *, #14568, .F. ) ; +#33756 = ADVANCED_FACE ( 'NONE', ( #23872 ), #7886, .F. ) ; +#33757 = SURFACE_SIDE_STYLE ('',( #12709 ) ) ; +#33758 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33759 = STYLED_ITEM ( 'NONE', ( #20522 ), #12050 ) ; +#33760 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33761 = PRESENTATION_STYLE_ASSIGNMENT (( #3207 ) ) ; +#33762 = EDGE_CURVE ( 'NONE', #22538, #26425, #661, .T. ) ; +#33763 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -2.294459358809381100 ) ) ; +#33764 = VERTEX_POINT ( 'NONE', #36578 ) ; +#33765 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.1000000000000135900, -4.450000000000000200 ) ) ; +#33766 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#33767 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33768 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 0.6800017452961693000, -3.999999999999997300 ) ) ; +#33769 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000001200, 1.630001745296169000, -4.000000000000000000 ) ) ; +#33770 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31606 ) ) ; +#33771 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -5.475000000000000500 ) ) ; +#33772 = ORIENTED_EDGE ( 'NONE', *, *, #16414, .F. ) ; +#33773 = LINE ( 'NONE', #11783, #30249 ) ; +#33774 = CARTESIAN_POINT ( 'NONE', ( -3.458233997336492400, 1.005153670744119500, -14.55000000000000100 ) ) ; +#33775 = STYLED_ITEM ( 'NONE', ( #845 ), #7791 ) ; +#33776 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33777 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33778 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33779 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33780 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#33781 = ORIENTED_EDGE ( 'NONE', *, *, #39662, .T. ) ; +#33782 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33783 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.380001745296130000, -5.449999999999994000 ) ) ; +#33784 = ORIENTED_EDGE ( 'NONE', *, *, #748, .F. ) ; +#33785 = ORIENTED_EDGE ( 'NONE', *, *, #3182, .F. ) ; +#33786 = VERTEX_POINT ( 'NONE', #30501 ) ; +#33787 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#33788 = FACE_OUTER_BOUND ( 'NONE', #476, .T. ) ; +#33789 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875040400E-015, 0.0000000000000000000 ) ) ; +#33790 = LINE ( 'NONE', #35396, #29725 ) ; +#33791 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#33792 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33793 = SURFACE_STYLE_FILL_AREA ( #8943 ) ; +#33794 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.614007241618338900E-015, 0.0000000000000000000 ) ) ; +#33795 = VERTEX_POINT ( 'NONE', #20665 ) ; +#33796 = ORIENTED_EDGE ( 'NONE', *, *, #14083, .F. ) ; +#33797 = ORIENTED_EDGE ( 'NONE', *, *, #19782, .F. ) ; +#33798 = LINE ( 'NONE', #12742, #25236 ) ; +#33799 = SURFACE_SIDE_STYLE ('',( #38218 ) ) ; +#33800 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38531, 'distance_accuracy_value', 'NONE'); +#33801 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#33802 = VERTEX_POINT ( 'NONE', #1038 ) ; +#33803 = VECTOR ( 'NONE', #13216, 1000.000000000000000 ) ; +#33804 = EDGE_CURVE ( 'NONE', #23868, #33802, #33963, .T. ) ; +#33805 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#33806 = FILL_AREA_STYLE ('',( #14732 ) ) ; +#33807 = CARTESIAN_POINT ( 'NONE', ( 3.026273438365154200, -0.5999999999999999800, -1.929999999999999500 ) ) ; +#33808 = AXIS2_PLACEMENT_3D ( 'NONE', #6916, #80, #22900 ) ; +#33809 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.5300017452961696100, -4.099999999999998800 ) ) ; +#33810 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -5.475000000000000500 ) ) ; +#33811 = EDGE_CURVE ( 'NONE', #13073, #31912, #38482, .T. ) ; +#33812 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22176, 'distance_accuracy_value', 'NONE'); +#33813 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#33814 = PRESENTATION_STYLE_ASSIGNMENT (( #2028 ) ) ; +#33815 = SURFACE_SIDE_STYLE ('',( #8397 ) ) ; +#33816 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#33817 = AXIS2_PLACEMENT_3D ( 'NONE', #37535, #11258, #11396 ) ; +#33818 = FILL_AREA_STYLE ('',( #36784 ) ) ; +#33819 = ORIENTED_EDGE ( 'NONE', *, *, #35169, .T. ) ; +#33822 = EDGE_CURVE ( 'NONE', #12577, #15553, #21883, .T. ) ; +#33821 = STYLED_ITEM ( 'NONE', ( #25284 ), #24670 ) ; +#33820 = SURFACE_SIDE_STYLE ('',( #599 ) ) ; +#33823 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#33824 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#33825 = VECTOR ( 'NONE', #25690, 1000.000000000000000 ) ; +#33826 = PLANE ( 'NONE', #29840 ) ; +#33827 = FACE_OUTER_BOUND ( 'NONE', #2500, .T. ) ; +#33828 = ORIENTED_EDGE ( 'NONE', *, *, #9087, .F. ) ; +#33829 = LINE ( 'NONE', #22842, #14136 ) ; +#33830 = ADVANCED_FACE ( 'NONE', ( #12223 ), #39819, .T. ) ; +#33831 = PRESENTATION_STYLE_ASSIGNMENT (( #19135 ) ) ; +#33832 = AXIS2_PLACEMENT_3D ( 'NONE', #21090, #5791, #5929 ) ; +#33833 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#33834 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.807003620809177100E-016, -1.000000000000000000 ) ) ; +#33835 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#33836 = SURFACE_STYLE_FILL_AREA ( #14940 ) ; +#33837 = DIRECTION ( 'NONE', ( -1.548860246407863600E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33838 = VECTOR ( 'NONE', #17046, 1000.000000000000000 ) ; +#33840 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16261 ) ) ; +#33839 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39447 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40508, #11829, #33896 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33841 = ORIENTED_EDGE ( 'NONE', *, *, #27241, .F. ) ; +#33842 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, 0.07499999999999999700, 0.009999999999999995000 ) ) ; +#33843 = ORIENTED_EDGE ( 'NONE', *, *, #30524, .F. ) ; +#33844 = VERTEX_POINT ( 'NONE', #918 ) ; +#33845 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35990, 'distance_accuracy_value', 'NONE'); +#33846 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33847 = CARTESIAN_POINT ( 'NONE', ( -3.394999999999999600, -0.2000000000000000100, -3.250000000000000400 ) ) ; +#33848 = PLANE ( 'NONE', #16013 ) ; +#33849 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#33850 = ORIENTED_EDGE ( 'NONE', *, *, #9550, .T. ) ; +#33851 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.3499999999999996400, -1.250000000000000000 ) ) ; +#33852 = FACE_OUTER_BOUND ( 'NONE', #7910, .T. ) ; +#33853 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2550, 'distance_accuracy_value', 'NONE'); +#33854 = SURFACE_SIDE_STYLE ('',( #24733 ) ) ; +#33855 = DIRECTION ( 'NONE', ( -3.469446951953615800E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#33856 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000004800, 1.480001745296170000, -0.2339555568811658400 ) ) ; +#33857 = VECTOR ( 'NONE', #31242, 1000.000000000000000 ) ; +#33858 = CARTESIAN_POINT ( 'NONE', ( -4.542777971927784500, -1.300001745296164500, -6.539400084828222300 ) ) ; +#33859 = FILL_AREA_STYLE ('',( #7848 ) ) ; +#33860 = SURFACE_SIDE_STYLE ('',( #40788 ) ) ; +#33861 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33862 = EDGE_LOOP ( 'NONE', ( #30270, #8610, #40503, #18207 ) ) ; +#33863 = VECTOR ( 'NONE', #13207, 1000.000000000000000 ) ; +#33864 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#33865 = PLANE ( 'NONE', #41427 ) ; +#33866 = SURFACE_SIDE_STYLE ('',( #40130 ) ) ; +#33867 = ADVANCED_FACE ( 'NONE', ( #16777 ), #37001, .F. ) ; +#33868 = EDGE_CURVE ( 'NONE', #35781, #3668, #32944, .T. ) ; +#33869 = ORIENTED_EDGE ( 'NONE', *, *, #26983, .T. ) ; +#33870 = VECTOR ( 'NONE', #9492, 1000.000000000000000 ) ; +#33871 = ORIENTED_EDGE ( 'NONE', *, *, #7387, .F. ) ; +#33872 = VECTOR ( 'NONE', #26264, 1000.000000000000000 ) ; +#33873 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33874 = PLANE ( 'NONE', #780 ) ; +#33875 = PRESENTATION_STYLE_ASSIGNMENT (( #2975 ) ) ; +#33876 = EDGE_CURVE ( 'NONE', #21920, #33246, #34455, .T. ) ; +#33877 = AXIS2_PLACEMENT_3D ( 'NONE', #34983, #28621, #31595 ) ; +#33878 = EDGE_LOOP ( 'NONE', ( #16654, #12620, #35607, #14881 ) ) ; +#33879 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11389 ) ) ; +#33880 = ORIENTED_EDGE ( 'NONE', *, *, #15217, .F. ) ; +#33881 = ORIENTED_EDGE ( 'NONE', *, *, #38795, .T. ) ; +#33882 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33883 = ADVANCED_FACE ( 'NONE', ( #25869 ), #10190, .T. ) ; +#33884 = ORIENTED_EDGE ( 'NONE', *, *, #29046, .T. ) ; +#33885 = AXIS2_PLACEMENT_3D ( 'NONE', #4533, #30237, #39542 ) ; +#33886 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4623 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23270, #29760, #35997 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33887 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#33889 = AXIS2_PLACEMENT_3D ( 'NONE', #23457, #4100, #34409 ) ; +#33888 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25258 ) ) ; +#33890 = VECTOR ( 'NONE', #38471, 1000.000000000000000 ) ; +#33891 = FILL_AREA_STYLE ('',( #37271 ) ) ; +#33892 = VECTOR ( 'NONE', #7648, 1000.000000000000000 ) ; +#33893 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10532, 'distance_accuracy_value', 'NONE'); +#33894 = EDGE_CURVE ( 'NONE', #21656, #16038, #5147, .T. ) ; +#33895 = CYLINDRICAL_SURFACE ( 'NONE', #9167, 0.1000000000000002600 ) ; +#33896 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33897 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#33898 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, 0.07499999999999999700, -0.009872798070157522500 ) ) ; +#33899 = AXIS2_PLACEMENT_3D ( 'NONE', #30729, #8794, #41025 ) ; +#33900 = CARTESIAN_POINT ( 'NONE', ( 3.332298852287715700, 0.2999999198035229700, -1.600000000000000300 ) ) ; +#33901 = ORIENTED_EDGE ( 'NONE', *, *, #29707, .T. ) ; +#33902 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.949998254703821000, -6.732287565553231300 ) ) ; +#33903 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#33904 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.3420201433263654300, -0.9396926207856548500 ) ) ; +#33905 = VECTOR ( 'NONE', #11552, 1000.000000000000000 ) ; +#33906 = ORIENTED_EDGE ( 'NONE', *, *, #2620, .F. ) ; +#33907 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33908 = FILL_AREA_STYLE ('',( #1735 ) ) ; +#33909 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.279999999999999800, -3.299999999999999800 ) ) ; +#33910 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244516300E-016 ) ) ; +#33911 = ORIENTED_EDGE ( 'NONE', *, *, #21577, .F. ) ; +#33912 = SURFACE_STYLE_USAGE ( .BOTH. , #37299 ) ; +#33913 = ORIENTED_EDGE ( 'NONE', *, *, #18476, .F. ) ; +#33915 = ADVANCED_FACE ( 'NONE', ( #38001 ), #31417, .F. ) ; +#33914 = ORIENTED_EDGE ( 'NONE', *, *, #15503, .F. ) ; +#33916 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 1.485063948690956900E-014, -3.099999999999998800 ) ) ; +#33917 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745296168900, -2.604459358809384300 ) ) ; +#33918 = FILL_AREA_STYLE ('',( #20830 ) ) ; +#33919 = SURFACE_STYLE_USAGE ( .BOTH. , #11032 ) ; +#33920 = ORIENTED_EDGE ( 'NONE', *, *, #8341, .T. ) ; +#33921 = CARTESIAN_POINT ( 'NONE', ( -4.425000000000014000, -1.999998254703822400, -2.599999999999999600 ) ) ; +#33922 = PRESENTATION_STYLE_ASSIGNMENT (( #35840 ) ) ; +#33923 = VERTEX_POINT ( 'NONE', #30643 ) ; +#33924 = EDGE_CURVE ( 'NONE', #4227, #30029, #10152, .T. ) ; +#33925 = VECTOR ( 'NONE', #2382, 1000.000000000000000 ) ; +#33926 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#33927 = SURFACE_SIDE_STYLE ('',( #7800 ) ) ; +#33928 = EDGE_CURVE ( 'NONE', #28695, #6706, #22820, .T. ) ; +#33929 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13053 ) ) ; +#33930 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703822500, -3.500000000000000000 ) ) ; +#33931 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000001100, 1.167528855492239800, -4.549999999999999800 ) ) ; +#33932 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#33933 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10128 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3679, #39397, #29367 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33934 = VECTOR ( 'NONE', #27525, 1000.000000000000000 ) ; +#33935 = VERTEX_POINT ( 'NONE', #8295 ) ; +#33936 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33937 = MANIFOLD_SOLID_BREP ( '1-1-solid10', #27336 ) ; +#33938 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29600 ) ) ; +#33939 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11463 ), #9289 ) ; +#33940 = FILL_AREA_STYLE_COLOUR ( '', #2266 ) ; +#33941 = SURFACE_STYLE_USAGE ( .BOTH. , #11189 ) ; +#33942 = CARTESIAN_POINT ( 'NONE', ( 3.213706318177089300, -0.4964326271237138300, -1.826352212105553500 ) ) ; +#33943 = ORIENTED_EDGE ( 'NONE', *, *, #37903, .F. ) ; +#33944 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#33945 = SURFACE_STYLE_FILL_AREA ( #32634 ) ; +#33946 = FACE_OUTER_BOUND ( 'NONE', #39197, .T. ) ; +#33948 = EDGE_CURVE ( 'NONE', #35410, #14855, #40154, .T. ) ; +#33947 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22333 ) ) ; +#33949 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, 0.07499999999999999700, 0.0000000000000000000 ) ) ; +#33950 = ORIENTED_EDGE ( 'NONE', *, *, #7763, .T. ) ; +#33951 = FILL_AREA_STYLE ('',( #21132 ) ) ; +#33952 = SURFACE_STYLE_FILL_AREA ( #23946 ) ; +#33953 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#33955 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23605 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3113, #22045, #2721 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33954 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1999 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29657, #17104, #17239 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#33956 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27448 ), #38271 ) ; +#33957 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 1.485063948690956900E-014, -2.095470210943120000 ) ) ; +#33958 = PLANE ( 'NONE', #14515 ) ; +#33959 = VERTEX_POINT ( 'NONE', #14545 ) ; +#33960 = ORIENTED_EDGE ( 'NONE', *, *, #12494, .T. ) ; +#33961 = ADVANCED_FACE ( 'NONE', ( #14719 ), #34454, .F. ) ; +#33962 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #22661, #32388, #3711, #1083 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#33963 = LINE ( 'NONE', #30364, #2678 ) ; +#33964 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33965 = FILL_AREA_STYLE_COLOUR ( '', #17138 ) ; +#33966 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#33967 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000012400, -1.999998254703822400, -2.599999999999999600 ) ) ; +#33968 = FILL_AREA_STYLE_COLOUR ( '', #28268 ) ; +#33970 = SURFACE_SIDE_STYLE ('',( #32659 ) ) ; +#33969 = VECTOR ( 'NONE', #35668, 1000.000000000000000 ) ; +#33971 = LINE ( 'NONE', #17775, #2688 ) ; +#33972 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16147, 'distance_accuracy_value', 'NONE'); +#33973 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#33974 = VERTEX_POINT ( 'NONE', #8581 ) ; +#33975 = SURFACE_SIDE_STYLE ('',( #19836 ) ) ; +#33976 = LINE ( 'NONE', #39097, #32961 ) ; +#33977 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#33978 = EDGE_CURVE ( 'NONE', #24014, #20034, #38339, .T. ) ; +#33979 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#33980 = FILL_AREA_STYLE ('',( #34261 ) ) ; +#33981 = CARTESIAN_POINT ( 'NONE', ( 3.093098551059990900, 0.3499999999999999800, -1.599397409037625700 ) ) ; +#33982 = ORIENTED_EDGE ( 'NONE', *, *, #24413, .T. ) ; +#33983 = SURFACE_SIDE_STYLE ('',( #35477 ) ) ; +#33984 = EDGE_CURVE ( 'NONE', #28948, #4059, #23835, .T. ) ; +#33985 = FACE_OUTER_BOUND ( 'NONE', #18081, .T. ) ; +#33986 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#33987 = ORIENTED_EDGE ( 'NONE', *, *, #35351, .T. ) ; +#33988 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.730424212713734400, -1.049979056049130000 ) ) ; +#33990 = VECTOR ( 'NONE', #18037, 1000.000000000000000 ) ; +#33989 = CIRCLE ( 'NONE', #39227, 1.200001745296169300 ) ; +#33991 = EDGE_LOOP ( 'NONE', ( #39271, #9578, #18934, #14190 ) ) ; +#33992 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.2800017452961687200, -6.249999999999998200 ) ) ; +#33993 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2907 ) ) ; +#33994 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -2.322941965694886000, -1.250000000000000000 ) ) ; +#33995 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8706, 'distance_accuracy_value', 'NONE'); +#33996 = FILL_AREA_STYLE ('',( #11376 ) ) ; +#33997 = ORIENTED_EDGE ( 'NONE', *, *, #25887, .T. ) ; +#33998 = FILL_AREA_STYLE_COLOUR ( '', #24789 ) ; +#33999 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -0.7580972011844128200 ) ) ; +#34000 = FILL_AREA_STYLE_COLOUR ( '', #2072 ) ; +#34001 = ORIENTED_EDGE ( 'NONE', *, *, #4903, .F. ) ; +#34002 = AXIS2_PLACEMENT_3D ( 'NONE', #39434, #36350, #33652 ) ; +#34003 = SURFACE_STYLE_FILL_AREA ( #19642 ) ; +#34004 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21046 ) ) ; +#34005 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#34006 = PLANE ( 'NONE', #38890 ) ; +#34007 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34009 = EDGE_CURVE ( 'NONE', #13351, #29684, #25361, .T. ) ; +#34008 = STYLED_ITEM ( 'NONE', ( #4798 ), #37137 ) ; +#34010 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#34011 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21058 ), #16691 ) ; +#34012 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -2.322941965694886000, -1.250000000000000000 ) ) ; +#34013 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026400, -0.2000017452961698200 ) ) ; +#34014 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #223 ), #5062 ) ; +#34015 = ORIENTED_EDGE ( 'NONE', *, *, #73, .T. ) ; +#34016 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#34017 = STYLED_ITEM ( 'NONE', ( #9362 ), #32436 ) ; +#34018 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#34019 = CARTESIAN_POINT ( 'NONE', ( 4.769999999999744700, 0.2799999999999973100, -0.2339555568811695900 ) ) ; +#34020 = AXIS2_PLACEMENT_3D ( 'NONE', #40817, #18263, #14985 ) ; +#34021 = EDGE_LOOP ( 'NONE', ( #2059, #24104, #23505, #19058 ) ) ; +#34022 = FACE_OUTER_BOUND ( 'NONE', #1133, .T. ) ; +#34023 = SURFACE_STYLE_FILL_AREA ( #13905 ) ; +#34024 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34025 = ORIENTED_EDGE ( 'NONE', *, *, #3353, .T. ) ; +#34026 = ORIENTED_EDGE ( 'NONE', *, *, #1919, .F. ) ; +#34027 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34029 = ORIENTED_EDGE ( 'NONE', *, *, #29212, .F. ) ; +#34028 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#34030 = PLANE ( 'NONE', #35933 ) ; +#34031 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 2.322941965694886000, -1.250000000000000000 ) ) ; +#34032 = EDGE_LOOP ( 'NONE', ( #13514, #31883 ) ) ; +#34033 = ADVANCED_FACE ( 'NONE', ( #8125 ), #17235, .F. ) ; +#34034 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.949998254703823300, -6.732287565553229500 ) ) ; +#34035 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1516, 'distance_accuracy_value', 'NONE'); +#34036 = SURFACE_SIDE_STYLE ('',( #32035 ) ) ; +#34037 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34038 = ORIENTED_EDGE ( 'NONE', *, *, #19963, .F. ) ; +#34039 = CIRCLE ( 'NONE', #34270, 0.1000000000000001600 ) ; +#34040 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#34041 = LINE ( 'NONE', #7106, #29499 ) ; +#34042 = PRESENTATION_STYLE_ASSIGNMENT (( #23759 ) ) ; +#34043 = EDGE_CURVE ( 'NONE', #39388, #10637, #8616, .T. ) ; +#34044 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#34045 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34046 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.08000174529617017100, -7.499999999999994700 ) ) ; +#34047 = FILL_AREA_STYLE_COLOUR ( '', #19549 ) ; +#34048 = EDGE_CURVE ( 'NONE', #1135, #34286, #1579, .T. ) ; +#34049 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34050 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14276 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31150, #34403, #18327 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34051 = PLANE ( 'NONE', #38985 ) ; +#34052 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34053 = EDGE_CURVE ( 'NONE', #28395, #38433, #4591, .T. ) ; +#34054 = SURFACE_STYLE_USAGE ( .BOTH. , #24628 ) ; +#34055 = DIRECTION ( 'NONE', ( 0.9999999780675459200, 0.0000000000000000000, -0.0002094395087002863100 ) ) ; +#34056 = CARTESIAN_POINT ( 'NONE', ( -4.838268912962555600, -0.01999825470386289500, -7.460517323015663400 ) ) ; +#34057 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#34060 = EDGE_CURVE ( 'NONE', #21881, #26083, #37444, .T. ) ; +#34059 = AXIS2_PLACEMENT_3D ( 'NONE', #7748, #20657, #16377 ) ; +#34058 = FILL_AREA_STYLE_COLOUR ( '', #12497 ) ; +#34061 = FILL_AREA_STYLE ('',( #41120 ) ) ; +#34062 = ORIENTED_EDGE ( 'NONE', *, *, #5721, .F. ) ; +#34063 = ADVANCED_FACE ( 'NONE', ( #29327 ), #25019, .T. ) ; +#34064 = ORIENTED_EDGE ( 'NONE', *, *, #3412, .F. ) ; +#34065 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.380001745296165500, -2.399999999999999500 ) ) ; +#34067 = VERTEX_POINT ( 'NONE', #2421 ) ; +#34066 = VECTOR ( 'NONE', #28890, 1000.000000000000100 ) ; +#34068 = ORIENTED_EDGE ( 'NONE', *, *, #41635, .T. ) ; +#34069 = VECTOR ( 'NONE', #35503, 1000.000000000000000 ) ; +#34071 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23077 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14654, #14372, #18051 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34070 = AXIS2_PLACEMENT_3D ( 'NONE', #33994, #4762, #24264 ) ; +#34072 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22454 ) ) ; +#34073 = LINE ( 'NONE', #37658, #24487 ) ; +#34074 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#34075 = CIRCLE ( 'NONE', #13830, 0.3600000000000078700 ) ; +#34076 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39190 ), #22457 ) ; +#34077 = VECTOR ( 'NONE', #20969, 1000.000000000000000 ) ; +#34078 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21126 ), #15406 ) ; +#34079 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.3699999999999854500, -5.299999999999999800 ) ) ; +#34080 = LINE ( 'NONE', #36187, #35620 ) ; +#34081 = ADVANCED_FACE ( 'NONE', ( #11652 ), #878, .T. ) ; +#34082 = PRESENTATION_STYLE_ASSIGNMENT (( #5980 ) ) ; +#34083 = ORIENTED_EDGE ( 'NONE', *, *, #28287, .T. ) ; +#34084 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34085 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.478176394252580200E-017, -6.082356018693180500E-031 ) ) ; +#34086 = CYLINDRICAL_SURFACE ( 'NONE', #17431, 0.2000017452961698200 ) ; +#34087 = FILL_AREA_STYLE_COLOUR ( '', #33183 ) ; +#34088 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#34089 = SURFACE_STYLE_USAGE ( .BOTH. , #24359 ) ; +#34090 = VECTOR ( 'NONE', #13368, 1000.000000000000000 ) ; +#34091 = SURFACE_SIDE_STYLE ('',( #30457 ) ) ; +#34092 = VERTEX_POINT ( 'NONE', #39086 ) ; +#34093 = PLANE ( 'NONE', #16317 ) ; +#34094 = FILL_AREA_STYLE ('',( #30709 ) ) ; +#34095 = CARTESIAN_POINT ( 'NONE', ( 2.995000000000000100, 0.3500000000000000300, -1.300000000000000300 ) ) ; +#34096 = VECTOR ( 'NONE', #40383, 1000.000000000000000 ) ; +#34097 = FILL_AREA_STYLE_COLOUR ( '', #36686 ) ; +#34098 = ORIENTED_EDGE ( 'NONE', *, *, #29641, .F. ) ; +#34099 = FILL_AREA_STYLE_COLOUR ( '', #27380 ) ; +#34100 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34101 = CARTESIAN_POINT ( 'NONE', ( -4.770000000000131900, -0.2799999999999974200, -0.5000000000000879300 ) ) ; +#34102 = LINE ( 'NONE', #35342, #11351 ) ; +#34103 = SURFACE_SIDE_STYLE ('',( #13064 ) ) ; +#34104 = EDGE_CURVE ( 'NONE', #33795, #6948, #3564, .T. ) ; +#34105 = EDGE_LOOP ( 'NONE', ( #12888, #32764, #5858, #38702 ) ) ; +#34106 = SURFACE_STYLE_USAGE ( .BOTH. , #33970 ) ; +#34107 = SURFACE_STYLE_FILL_AREA ( #35186 ) ; +#34108 = ORIENTED_EDGE ( 'NONE', *, *, #3601, .F. ) ; +#34109 = PRESENTATION_STYLE_ASSIGNMENT (( #20495 ) ) ; +#34110 = PRESENTATION_STYLE_ASSIGNMENT (( #6397 ) ) ; +#34111 = CARTESIAN_POINT ( 'NONE', ( 4.492416573867750200, -1.982581680836082100, -3.595341433092486700 ) ) ; +#34112 = EDGE_CURVE ( 'NONE', #24483, #9995, #14203, .T. ) ; +#34113 = AXIS2_PLACEMENT_3D ( 'NONE', #30584, #4603, #17473 ) ; +#34114 = ORIENTED_EDGE ( 'NONE', *, *, #35229, .F. ) ; +#34115 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, 0.5999999999999999800, -1.930000000000000200 ) ) ; +#34116 = FACE_OUTER_BOUND ( 'NONE', #39140, .T. ) ; +#34117 = AXIS2_PLACEMENT_3D ( 'NONE', #6271, #34953, #21855 ) ; +#34119 = ADVANCED_FACE ( 'NONE', ( #31377 ), #27317, .T. ) ; +#34118 = ORIENTED_EDGE ( 'NONE', *, *, #40091, .T. ) ; +#34120 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#34121 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#34122 = CARTESIAN_POINT ( 'NONE', ( 3.080098301281216000, 0.3500000000000000300, -1.588764372237166500 ) ) ; +#34123 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8673 ) ) ; +#34124 = FACE_OUTER_BOUND ( 'NONE', #5393, .T. ) ; +#34125 = FILL_AREA_STYLE ('',( #40598 ) ) ; +#34126 = FILL_AREA_STYLE ('',( #40042 ) ) ; +#34127 = EDGE_LOOP ( 'NONE', ( #15429, #15384, #17869, #33901 ) ) ; +#34128 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165600, -1.999999999999999600 ) ) ; +#34129 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23536 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9750, #32215, #19399 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34130 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -3.799999999999999800 ) ) ; +#34131 = STYLED_ITEM ( 'NONE', ( #17405 ), #18257 ) ; +#34132 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37258, 'distance_accuracy_value', 'NONE'); +#34133 = DIRECTION ( 'NONE', ( -6.056601140521967900E-031, -1.898766160908952300E-045, -1.000000000000000000 ) ) ; +#34135 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28976 ), #33333 ) ; +#34134 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33332 ) ) ; +#34136 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34137 = ORIENTED_EDGE ( 'NONE', *, *, #4438, .F. ) ; +#34139 = EDGE_CURVE ( 'NONE', #31605, #27458, #20297, .T. ) ; +#34138 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6767 ), #33584 ) ; +#34140 = DIRECTION ( 'NONE', ( -0.08715574274766049700, -2.860372408307929200E-016, 0.9961946980917454300 ) ) ; +#34141 = FILL_AREA_STYLE ('',( #33998 ) ) ; +#34142 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #33560 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23711, #20216, #893 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34143 = VERTEX_POINT ( 'NONE', #733 ) ; +#34144 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34145 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40066 ), #31430 ) ; +#34146 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#34147 = LINE ( 'NONE', #8638, #37185 ) ; +#34148 = VERTEX_POINT ( 'NONE', #19918 ) ; +#34149 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34150 = PRESENTATION_STYLE_ASSIGNMENT (( #40619 ) ) ; +#34151 = ORIENTED_EDGE ( 'NONE', *, *, #3990, .T. ) ; +#34152 = FILL_AREA_STYLE ('',( #5193 ) ) ; +#34153 = FILL_AREA_STYLE_COLOUR ( '', #26762 ) ; +#34154 = VERTEX_POINT ( 'NONE', #39363 ) ; +#34155 = VECTOR ( 'NONE', #9258, 1000.000000000000000 ) ; +#34156 = ORIENTED_EDGE ( 'NONE', *, *, #11141, .T. ) ; +#34157 = VECTOR ( 'NONE', #13970, 1000.000000000000000 ) ; +#34158 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.5199999999999841400, -4.500000000000000000 ) ) ; +#34159 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34160 = SURFACE_STYLE_FILL_AREA ( #33107 ) ; +#34161 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#34162 = VERTEX_POINT ( 'NONE', #16651 ) ; +#34163 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40099, 'distance_accuracy_value', 'NONE'); +#34164 = VECTOR ( 'NONE', #32376, 1000.000000000000000 ) ; +#34165 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34166 = VECTOR ( 'NONE', #24482, 1000.000000000000100 ) ; +#34167 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#34168 = VECTOR ( 'NONE', #13334, 1000.000000000000000 ) ; +#34169 = VERTEX_POINT ( 'NONE', #33028 ) ; +#34170 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34171 = SURFACE_STYLE_FILL_AREA ( #14754 ) ; +#34172 = FILL_AREA_STYLE_COLOUR ( '', #5675 ) ; +#34173 = LINE ( 'NONE', #13348, #25594 ) ; +#34174 = EDGE_CURVE ( 'NONE', #22918, #14599, #25824, .T. ) ; +#34175 = ADVANCED_FACE ( 'NONE', ( #10107 ), #4046, .T. ) ; +#34176 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.8190279881558656400, -0.5737535661042596500 ) ) ; +#34177 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34178 = FILL_AREA_STYLE_COLOUR ( '', #22979 ) ; +#34179 = EDGE_CURVE ( 'NONE', #1969, #36459, #26815, .T. ) ; +#34180 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36353 ) ) ; +#34181 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1532, 'distance_accuracy_value', 'NONE'); +#34182 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34183 = SURFACE_STYLE_USAGE ( .BOTH. , #30649 ) ; +#34184 = FACE_OUTER_BOUND ( 'NONE', #37828, .T. ) ; +#34185 = VECTOR ( 'NONE', #20841, 1000.000000000000000 ) ; +#34186 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296169600, 0.0000000000000000000 ) ) ; +#34187 = SURFACE_SIDE_STYLE ('',( #5270 ) ) ; +#34188 = CARTESIAN_POINT ( 'NONE', ( 3.337718385397870200, -0.07499999999999999700, 0.4680226303560475800 ) ) ; +#34189 = SURFACE_STYLE_USAGE ( .BOTH. , #37159 ) ; +#34190 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34191 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1744 ), #39300 ) ; +#34192 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#34193 = VERTEX_POINT ( 'NONE', #27361 ) ; +#34194 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16758 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23154, #7167, #20073 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34195 = ORIENTED_EDGE ( 'NONE', *, *, #31867, .F. ) ; +#34196 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#34197 = ORIENTED_EDGE ( 'NONE', *, *, #4848, .F. ) ; +#34198 = LINE ( 'NONE', #21805, #11440 ) ; +#34200 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29290 ) ) ; +#34199 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 2.322941965694886000, -1.250000000000000000 ) ) ; +#34201 = FILL_AREA_STYLE ('',( #8606 ) ) ; +#34202 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34203 = LINE ( 'NONE', #18427, #38709 ) ; +#34204 = FACE_OUTER_BOUND ( 'NONE', #21540, .T. ) ; +#34205 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865475700, 0.7071067811865475700 ) ) ; +#34206 = VECTOR ( 'NONE', #17834, 1000.000000000000000 ) ; +#34207 = CYLINDRICAL_SURFACE ( 'NONE', #9398, 0.1000000000000001600 ) ; +#34209 = EDGE_CURVE ( 'NONE', #29623, #17225, #20258, .T. ) ; +#34208 = STYLED_ITEM ( 'NONE', ( #19181 ), #35810 ) ; +#34210 = ORIENTED_EDGE ( 'NONE', *, *, #29978, .T. ) ; +#34211 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#34212 = VERTEX_POINT ( 'NONE', #9977 ) ; +#34213 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#34214 = SURFACE_STYLE_USAGE ( .BOTH. , #30812 ) ; +#34216 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21298 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23892, #34049, #14296 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34215 = AXIS2_PLACEMENT_3D ( 'NONE', #40532, #5380, #31375 ) ; +#34217 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#34218 = FILL_AREA_STYLE ('',( #5385 ) ) ; +#34219 = TOROIDAL_SURFACE ( 'NONE', #32524, 0.9000017452961695000, 0.3000000000000004900 ) ; +#34220 = FILL_AREA_STYLE_COLOUR ( '', #20535 ) ; +#34221 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #924, 'distance_accuracy_value', 'NONE'); +#34222 = SURFACE_STYLE_FILL_AREA ( #12797 ) ; +#34223 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#34224 = ORIENTED_EDGE ( 'NONE', *, *, #41563, .T. ) ; +#34225 = PLANE ( 'NONE', #10488 ) ; +#34226 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.2699999999999848600, -5.199999999999999300 ) ) ; +#34227 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#34228 = VERTEX_POINT ( 'NONE', #23699 ) ; +#34229 = LINE ( 'NONE', #29637, #24096 ) ; +#34230 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15714, 'distance_accuracy_value', 'NONE'); +#34231 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#34232 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#34233 = PLANE ( 'NONE', #25175 ) ; +#34234 = EDGE_CURVE ( 'NONE', #20166, #33382, #40147, .T. ) ; +#34235 = ORIENTED_EDGE ( 'NONE', *, *, #13708, .F. ) ; +#34236 = ORIENTED_EDGE ( 'NONE', *, *, #28054, .F. ) ; +#34237 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 10.30000000000000100, -1.250000000000000000 ) ) ; +#34238 = EDGE_CURVE ( 'NONE', #5970, #32806, #31332, .T. ) ; +#34239 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#34240 = VERTEX_POINT ( 'NONE', #39640 ) ; +#34241 = SURFACE_SIDE_STYLE ('',( #12910 ) ) ; +#34242 = FACE_OUTER_BOUND ( 'NONE', #39306, .T. ) ; +#34243 = VERTEX_POINT ( 'NONE', #20770 ) ; +#34244 = CYLINDRICAL_SURFACE ( 'NONE', #22790, 0.1000000000000002600 ) ; +#34245 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.380001745296128200, -4.781671842700004200 ) ) ; +#34246 = ADVANCED_FACE ( 'NONE', ( #34372 ), #33865, .F. ) ; +#34247 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2907 ), #29655 ) ; +#34248 = SURFACE_SIDE_STYLE ('',( #18813 ) ) ; +#34249 = CARTESIAN_POINT ( 'NONE', ( 3.846156164834738400, 0.6165030250713639000, -4.550456058592868800 ) ) ; +#34250 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34251 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.843143693225520000E-015, 0.0000000000000000000 ) ) ; +#34252 = AXIS2_PLACEMENT_3D ( 'NONE', #5719, #28309, #31557 ) ; +#34253 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#34254 = AXIS2_PLACEMENT_3D ( 'NONE', #2312, #18668, #27853 ) ; +#34255 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1022 ), #16931 ) ; +#34257 = EDGE_CURVE ( 'NONE', #40250, #28658, #18229, .T. ) ; +#34256 = STYLED_ITEM ( 'NONE', ( #34643 ), #36796 ) ; +#34258 = SURFACE_SIDE_STYLE ('',( #7509 ) ) ; +#34259 = VECTOR ( 'NONE', #27624, 1000.000000000000000 ) ; +#34260 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.180001745296169700, -4.400000000000000400 ) ) ; +#34261 = FILL_AREA_STYLE_COLOUR ( '', #19109 ) ; +#34262 = PLANE ( 'NONE', #108 ) ; +#34264 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25681 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2356, #34657, #31410 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34263 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32076 ) ) ; +#34265 = SURFACE_SIDE_STYLE ('',( #4192 ) ) ; +#34266 = AXIS2_PLACEMENT_3D ( 'NONE', #37145, #17824, #4941 ) ; +#34267 = VERTEX_POINT ( 'NONE', #4197 ) ; +#34268 = SURFACE_STYLE_FILL_AREA ( #9341 ) ; +#34269 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#34270 = AXIS2_PLACEMENT_3D ( 'NONE', #34341, #14986, #8740 ) ; +#34271 = FACE_OUTER_BOUND ( 'NONE', #32184, .T. ) ; +#34272 = ORIENTED_EDGE ( 'NONE', *, *, #32292, .F. ) ; +#34273 = FILL_AREA_STYLE ('',( #24550 ) ) ; +#34274 = ORIENTED_EDGE ( 'NONE', *, *, #30971, .T. ) ; +#34275 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.2800017452961688400, -5.200000000000001100 ) ) ; +#34276 = SURFACE_STYLE_FILL_AREA ( #10614 ) ; +#34277 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34278 = VECTOR ( 'NONE', #34564, 1000.000000000000000 ) ; +#34279 = LINE ( 'NONE', #29618, #981 ) ; +#34280 = LINE ( 'NONE', #35667, #29732 ) ; +#34281 = ORIENTED_EDGE ( 'NONE', *, *, #21714, .T. ) ; +#34282 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#34283 = FILL_AREA_STYLE_COLOUR ( '', #7269 ) ; +#34285 = SURFACE_STYLE_FILL_AREA ( #16608 ) ; +#34284 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#34286 = VERTEX_POINT ( 'NONE', #4488 ) ; +#34288 = ORIENTED_EDGE ( 'NONE', *, *, #28370, .T. ) ; +#34287 = ADVANCED_FACE ( 'NONE', ( #15171 ), #1155, .F. ) ; +#34289 = DIRECTION ( 'NONE', ( 1.751623080406021300E-046, 1.845450506358306100E-016, 1.000000000000000000 ) ) ; +#34290 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000005700, -0.2999999999999853300, -2.095470210943120000 ) ) ; +#34291 = ORIENTED_EDGE ( 'NONE', *, *, #39117, .F. ) ; +#34292 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#34293 = ADVANCED_FACE ( 'NONE', ( #39419 ), #4024, .F. ) ; +#34294 = EDGE_CURVE ( 'NONE', #6642, #16327, #27798, .T. ) ; +#34295 = SURFACE_STYLE_USAGE ( .BOTH. , #1850 ) ; +#34296 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34297 = EDGE_CURVE ( 'NONE', #6906, #41348, #13099, .T. ) ; +#34298 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34299 = EDGE_CURVE ( 'NONE', #15485, #17567, #22724, .T. ) ; +#34300 = ORIENTED_EDGE ( 'NONE', *, *, #5491, .F. ) ; +#34301 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34302 = AXIS2_PLACEMENT_3D ( 'NONE', #18458, #5161, #27772 ) ; +#34303 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.2999999999999850000, -4.249999999999998200 ) ) ; +#34304 = EDGE_LOOP ( 'NONE', ( #32274, #26468, #36342, #23611 ) ) ; +#34305 = VECTOR ( 'NONE', #34383, 1000.000000000000000 ) ; +#34306 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#34307 = STYLED_ITEM ( 'NONE', ( #41551 ), #21234 ) ; +#34308 = ORIENTED_EDGE ( 'NONE', *, *, #22516, .T. ) ; +#34309 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -1.049979056049130000 ) ) ; +#34310 = FACE_OUTER_BOUND ( 'NONE', #35962, .T. ) ; +#34311 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, 0.6500000000000001300, -3.299999999999999800 ) ) ; +#34312 = ORIENTED_EDGE ( 'NONE', *, *, #40586, .F. ) ; +#34313 = PRESENTATION_STYLE_ASSIGNMENT (( #33423 ) ) ; +#34314 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20574 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32082, #2901, #38302 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34315 = SURFACE_SIDE_STYLE ('',( #39625 ) ) ; +#34316 = PRESENTATION_STYLE_ASSIGNMENT (( #24728 ) ) ; +#34317 = VECTOR ( 'NONE', #6195, 1000.000000000000000 ) ; +#34319 = EDGE_CURVE ( 'NONE', #2675, #32097, #36869, .T. ) ; +#34318 = STYLED_ITEM ( 'NONE', ( #25731 ), #23847 ) ; +#34320 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#34321 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 1.485063948690956900E-014, -2.095470210943120000 ) ) ; +#34322 = EDGE_LOOP ( 'NONE', ( #40585, #33841, #3971, #20698 ) ) ; +#34323 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#34324 = ORIENTED_EDGE ( 'NONE', *, *, #38972, .T. ) ; +#34325 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#34326 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5312, 'distance_accuracy_value', 'NONE'); +#34328 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15637 ) ) ; +#34327 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4568 ), #18386 ) ; +#34329 = STYLED_ITEM ( 'NONE', ( #15646 ), #40941 ) ; +#34330 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#34331 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, -0.3499999999999999800, -1.680000000000000200 ) ) ; +#34332 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8316 ) ) ; +#34333 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#34334 = ORIENTED_EDGE ( 'NONE', *, *, #1562, .T. ) ; +#34335 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#34336 = ADVANCED_FACE ( 'NONE', ( #8555 ), #18202, .T. ) ; +#34337 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3742 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21048, #24273, #4904 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34338 = SURFACE_STYLE_FILL_AREA ( #32919 ) ; +#34339 = FACE_OUTER_BOUND ( 'NONE', #7824, .T. ) ; +#34340 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34341 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -0.9500017452961654300, -4.875000000000000900 ) ) ; +#34342 = FILL_AREA_STYLE_COLOUR ( '', #34881 ) ; +#34343 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3961, 'distance_accuracy_value', 'NONE'); +#34345 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#34344 = VECTOR ( 'NONE', #27281, 1000.000000000000000 ) ; +#34346 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.08000174529616772800, -7.150000000000001200 ) ) ; +#34347 = FILL_AREA_STYLE ('',( #8474 ) ) ; +#34348 = LINE ( 'NONE', #7697, #32342 ) ; +#34349 = ORIENTED_EDGE ( 'NONE', *, *, #22901, .T. ) ; +#34350 = VECTOR ( 'NONE', #7267, 1000.000000000000000 ) ; +#34351 = SURFACE_STYLE_USAGE ( .BOTH. , #18275 ) ; +#34352 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, -0.5199999999999841400, -4.500000000000000000 ) ) ; +#34353 = ORIENTED_EDGE ( 'NONE', *, *, #38923, .F. ) ; +#34354 = VECTOR ( 'NONE', #34419, 1000.000000000000000 ) ; +#34355 = PRESENTATION_STYLE_ASSIGNMENT (( #18707 ) ) ; +#34356 = VECTOR ( 'NONE', #30885, 1000.000000000000000 ) ; +#34357 = PRESENTATION_STYLE_ASSIGNMENT (( #9551 ) ) ; +#34358 = ORIENTED_EDGE ( 'NONE', *, *, #11262, .F. ) ; +#34359 = ORIENTED_EDGE ( 'NONE', *, *, #31449, .F. ) ; +#34360 = ORIENTED_EDGE ( 'NONE', *, *, #22481, .T. ) ; +#34361 = EDGE_CURVE ( 'NONE', #31761, #15546, #35867, .T. ) ; +#34362 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34363 = PLANE ( 'NONE', #4985 ) ; +#34364 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34365 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13429, 'distance_accuracy_value', 'NONE'); +#34366 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#34367 = EDGE_CURVE ( 'NONE', #21881, #5838, #12603, .T. ) ; +#34368 = ORIENTED_EDGE ( 'NONE', *, *, #26629, .F. ) ; +#34369 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745296169300, -2.294459358809381100 ) ) ; +#34370 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 4.818676322157808200E-016, 1.000000000000000000 ) ) ; +#34371 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25718 ), #9156 ) ; +#34372 = FACE_OUTER_BOUND ( 'NONE', #29316, .T. ) ; +#34373 = STYLED_ITEM ( 'NONE', ( #15577 ), #13757 ) ; +#34374 = PLANE ( 'NONE', #24649 ) ; +#34376 = STYLED_ITEM ( 'NONE', ( #3802 ), #260 ) ; +#34375 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34377 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, 0.3499999999999996400, -1.250000000000000000 ) ) ; +#34378 = FACE_OUTER_BOUND ( 'NONE', #18043, .T. ) ; +#34379 = ADVANCED_FACE ( 'NONE', ( #5043 ), #8134, .T. ) ; +#34380 = SURFACE_STYLE_FILL_AREA ( #15837 ) ; +#34382 = AXIS2_PLACEMENT_3D ( 'NONE', #15616, #34837, #31855 ) ; +#34381 = STYLED_ITEM ( 'NONE', ( #20307 ), #29047 ) ; +#34383 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#34384 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28298 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9813, #12791, #35420 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34385 = DIRECTION ( 'NONE', ( 1.387778780781437500E-017, 2.367138801244514300E-016, 1.000000000000000000 ) ) ; +#34386 = ORIENTED_EDGE ( 'NONE', *, *, #17043, .F. ) ; +#34387 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34388 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37104 ) ) ; +#34389 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#34391 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3466 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9017, #12277, #38126 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34390 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#34392 = ORIENTED_EDGE ( 'NONE', *, *, #3323, .F. ) ; +#34393 = PRESENTATION_STYLE_ASSIGNMENT (( #34997 ) ) ; +#34394 = EDGE_LOOP ( 'NONE', ( #15116, #17971, #19101, #36825 ) ) ; +#34395 = SURFACE_STYLE_FILL_AREA ( #40014 ) ; +#34396 = FILL_AREA_STYLE ('',( #27909 ) ) ; +#34397 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34398 = LINE ( 'NONE', #19534, #8105 ) ; +#34399 = SURFACE_SIDE_STYLE ('',( #37798 ) ) ; +#34400 = ORIENTED_EDGE ( 'NONE', *, *, #37813, .F. ) ; +#34401 = ORIENTED_EDGE ( 'NONE', *, *, #12754, .F. ) ; +#34402 = ORIENTED_EDGE ( 'NONE', *, *, #35679, .F. ) ; +#34403 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34404 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#34405 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000800, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#34406 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 0.03000174529616905800, -6.900000000000000400 ) ) ; +#34407 = SURFACE_SIDE_STYLE ('',( #24847 ) ) ; +#34408 = EDGE_LOOP ( 'NONE', ( #29112, #31287, #16387, #6569 ) ) ; +#34409 = DIRECTION ( 'NONE', ( -3.976777186418611300E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#34410 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34411 = FACE_OUTER_BOUND ( 'NONE', #681, .T. ) ; +#34412 = FILL_AREA_STYLE ('',( #27359 ) ) ; +#34413 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 0.3500000000000000300, 0.6999999999999999600 ) ) ; +#34414 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#34415 = EDGE_CURVE ( 'NONE', #40879, #240, #35373, .T. ) ; +#34416 = PRESENTATION_STYLE_ASSIGNMENT (( #27590 ) ) ; +#34417 = SURFACE_STYLE_FILL_AREA ( #29279 ) ; +#34418 = CARTESIAN_POINT ( 'NONE', ( 0.2500000000000032800, 0.2800017452961687800, -6.549999999999999800 ) ) ; +#34419 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#34420 = EDGE_CURVE ( 'NONE', #41292, #39102, #1045, .T. ) ; +#34421 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11933 ), #28735 ) ; +#34422 = ORIENTED_EDGE ( 'NONE', *, *, #26189, .T. ) ; +#34423 = SURFACE_STYLE_USAGE ( .BOTH. , #11810 ) ; +#34424 = VECTOR ( 'NONE', #12233, 1000.000000000000000 ) ; +#34425 = PLANE ( 'NONE', #24839 ) ; +#34426 = PRESENTATION_STYLE_ASSIGNMENT (( #8442 ) ) ; +#34427 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40077 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35844, #39053, #12929 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34428 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, 0.2999999999999999900, -1.399999999999999900 ) ) ; +#34429 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34430 = ORIENTED_EDGE ( 'NONE', *, *, #40709, .F. ) ; +#34431 = PRESENTATION_STYLE_ASSIGNMENT (( #39941 ) ) ; +#34432 = AXIS2_PLACEMENT_3D ( 'NONE', #3604, #32557, #39177 ) ; +#34433 = VECTOR ( 'NONE', #22549, 1000.000000000000000 ) ; +#34434 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34435 = PLANE ( 'NONE', #7003 ) ; +#34436 = CIRCLE ( 'NONE', #36608, 0.3000000000000007700 ) ; +#34437 = SURFACE_SIDE_STYLE ('',( #38698 ) ) ; +#34438 = ORIENTED_EDGE ( 'NONE', *, *, #12684, .T. ) ; +#34439 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20681 ), #1195 ) ; +#34440 = PLANE ( 'NONE', #30898 ) ; +#34441 = ORIENTED_EDGE ( 'NONE', *, *, #23841, .T. ) ; +#34442 = EDGE_LOOP ( 'NONE', ( #19186, #27927, #21674, #26255 ) ) ; +#34443 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000800, -0.8400000000000000800 ) ) ; +#34445 = STYLED_ITEM ( 'NONE', ( #22351 ), #5256 ) ; +#34444 = STYLED_ITEM ( 'NONE', ( #22683 ), #30645 ) ; +#34446 = FILL_AREA_STYLE ('',( #27953 ) ) ; +#34448 = EDGE_CURVE ( 'NONE', #3289, #3661, #25771, .T. ) ; +#34447 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29586 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #77, #35754, #22620 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34449 = ORIENTED_EDGE ( 'NONE', *, *, #34874, .T. ) ; +#34450 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34451 = LINE ( 'NONE', #6041, #18305 ) ; +#34452 = VECTOR ( 'NONE', #28094, 1000.000000000000000 ) ; +#34453 = ORIENTED_EDGE ( 'NONE', *, *, #24927, .T. ) ; +#34454 = PLANE ( 'NONE', #21428 ) ; +#34455 = LINE ( 'NONE', #18096, #11207 ) ; +#34456 = CARTESIAN_POINT ( 'NONE', ( -3.178333333333019300, -0.07499999999999998300, -0.06128090415826408600 ) ) ; +#34457 = ADVANCED_FACE ( 'NONE', ( #2054 ), #41399, .T. ) ; +#34458 = STYLED_ITEM ( 'NONE', ( #39396 ), #1250 ) ; +#34459 = FILL_AREA_STYLE ('',( #40945 ) ) ; +#34460 = FILL_AREA_STYLE ('',( #24599 ) ) ; +#34461 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#34462 = CARTESIAN_POINT ( 'NONE', ( -4.721498212947778900, -1.009999999999998700, -6.861124800398366500 ) ) ; +#34463 = VECTOR ( 'NONE', #2242, 1000.000000000000000 ) ; +#34464 = FILL_AREA_STYLE ('',( #15118 ) ) ; +#34465 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34466 = EDGE_LOOP ( 'NONE', ( #23136, #36804, #3710, #36671 ) ) ; +#34467 = MANIFOLD_SOLID_BREP ( '1-1-solid1', #21892 ) ; +#34468 = SURFACE_STYLE_FILL_AREA ( #23854 ) ; +#34469 = FILL_AREA_STYLE ('',( #34743 ) ) ; +#34470 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000000000, 1.630001745296169500, -1.650000000000000800 ) ) ; +#34471 = FILL_AREA_STYLE ('',( #37708 ) ) ; +#34472 = EDGE_LOOP ( 'NONE', ( #30206, #4312, #17423, #35367 ) ) ; +#34473 = FACE_OUTER_BOUND ( 'NONE', #116, .T. ) ; +#34474 = FILL_AREA_STYLE ('',( #5230 ) ) ; +#34475 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.2999999999999999900, 0.3499999999999999800 ) ) ; +#34476 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#34477 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#34478 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#34479 = EDGE_LOOP ( 'NONE', ( #41702, #35761, #8552, #15058, #24985, #2057, #31448 ) ) ; +#34480 = EDGE_CURVE ( 'NONE', #24014, #17105, #2018, .T. ) ; +#34481 = PLANE ( 'NONE', #6601 ) ; +#34482 = VECTOR ( 'NONE', #29976, 1000.000000000000000 ) ; +#34483 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34484 = PLANE ( 'NONE', #31213 ) ; +#34485 = FILL_AREA_STYLE_COLOUR ( '', #28527 ) ; +#34486 = EDGE_CURVE ( 'NONE', #16474, #35285, #1012, .T. ) ; +#34487 = FILL_AREA_STYLE ('',( #22063 ) ) ; +#34488 = SURFACE_STYLE_USAGE ( .BOTH. , #11998 ) ; +#34489 = ORIENTED_EDGE ( 'NONE', *, *, #17140, .F. ) ; +#34490 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#34491 = ORIENTED_EDGE ( 'NONE', *, *, #23709, .T. ) ; +#34492 = ADVANCED_FACE ( 'NONE', ( #26250 ), #38343, .F. ) ; +#34493 = VECTOR ( 'NONE', #36695, 1000.000000000000000 ) ; +#34494 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17747 ) ) ; +#34495 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34496 = SURFACE_STYLE_FILL_AREA ( #28750 ) ; +#34497 = FILL_AREA_STYLE_COLOUR ( '', #2618 ) ; +#34498 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#34499 = ADVANCED_FACE ( 'NONE', ( #16646 ), #22001, .F. ) ; +#34500 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17759 ), #12572 ) ; +#34501 = SURFACE_STYLE_USAGE ( .BOTH. , #15015 ) ; +#34502 = ORIENTED_EDGE ( 'NONE', *, *, #25235, .T. ) ; +#34504 = EDGE_CURVE ( 'NONE', #29555, #29416, #3464, .T. ) ; +#34503 = AXIS2_PLACEMENT_3D ( 'NONE', #39634, #36151, #23138 ) ; +#34505 = PRESENTATION_STYLE_ASSIGNMENT (( #32191 ) ) ; +#34506 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#34507 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#34508 = VERTEX_POINT ( 'NONE', #25121 ) ; +#34509 = FILL_AREA_STYLE_COLOUR ( '', #10211 ) ; +#34510 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23685 ) ) ; +#34511 = STYLED_ITEM ( 'NONE', ( #17925 ), #39584 ) ; +#34512 = ORIENTED_EDGE ( 'NONE', *, *, #22846, .F. ) ; +#34513 = DIRECTION ( 'NONE', ( 0.08715574274766049700, 0.0000000000000000000, -0.9961946980917454300 ) ) ; +#34514 = SURFACE_SIDE_STYLE ('',( #39151 ) ) ; +#34515 = FILL_AREA_STYLE_COLOUR ( '', #18990 ) ; +#34516 = ORIENTED_EDGE ( 'NONE', *, *, #6750, .T. ) ; +#34517 = CLOSED_SHELL ( 'NONE', ( #9078, #2281, #36181, #41310, #25003, #8669 ) ) ; +#34518 = PRESENTATION_STYLE_ASSIGNMENT (( #37573 ) ) ; +#34519 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34520 = CARTESIAN_POINT ( 'NONE', ( 3.839743771154402000, 0.6300017452961683700, -4.400000000000001200 ) ) ; +#34521 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38235, 'distance_accuracy_value', 'NONE'); +#34522 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#34523 = EDGE_LOOP ( 'NONE', ( #17178, #31184, #40916, #1423, #25719, #173, #597, #24657, #26852, #30876, #35899, #20209, #8062, #22195, #27025, #10003, #38183, #2671, #34025, #5458, #38647, #36478, #26976, #34721, #22565, #39661, #25740, #37361, #19678, #14830, #26831, #36135, #205, #24738, #33300, #23649, #27236, #23519, #41812, #2930, #33997, #40249, #4932, #18615, #26996 ) ) ; +#34524 = SURFACE_STYLE_USAGE ( .BOTH. , #5570 ) ; +#34525 = VECTOR ( 'NONE', #4212, 1000.000000000000000 ) ; +#34526 = LINE ( 'NONE', #15680, #17359 ) ; +#34527 = VERTEX_POINT ( 'NONE', #8817 ) ; +#34528 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.380001745296139700, -5.449999999999994000 ) ) ; +#34529 = LINE ( 'NONE', #2844, #38555 ) ; +#34530 = LINE ( 'NONE', #38554, #32483 ) ; +#34531 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#34532 = LINE ( 'NONE', #1104, #11290 ) ; +#34533 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#34534 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34535 = EDGE_CURVE ( 'NONE', #33659, #40176, #7986, .T. ) ; +#34536 = ADVANCED_FACE ( 'NONE', ( #9997 ), #34836, .F. ) ; +#34537 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -6.056601140521967000E-031 ) ) ; +#34538 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34539 = CIRCLE ( 'NONE', #14757, 0.1000000000000002600 ) ; +#34540 = FILL_AREA_STYLE_COLOUR ( '', #30041 ) ; +#34541 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34542 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#34543 = EDGE_CURVE ( 'NONE', #34550, #36996, #16602, .T. ) ; +#34544 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.480001745296169800, -1.149999999999999900 ) ) ; +#34545 = VECTOR ( 'NONE', #40104, 1000.000000000000100 ) ; +#34546 = EDGE_CURVE ( 'NONE', #2209, #2929, #25225, .T. ) ; +#34547 = FILL_AREA_STYLE ('',( #5308 ) ) ; +#34548 = AXIS2_PLACEMENT_3D ( 'NONE', #2704, #34729, #2417 ) ; +#34549 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.730424212713734600, -1.049979056049130000 ) ) ; +#34550 = VERTEX_POINT ( 'NONE', #13041 ) ; +#34551 = ORIENTED_EDGE ( 'NONE', *, *, #2893, .F. ) ; +#34552 = STYLED_ITEM ( 'NONE', ( #30016 ), #20873 ) ; +#34553 = ORIENTED_EDGE ( 'NONE', *, *, #20856, .F. ) ; +#34554 = ORIENTED_EDGE ( 'NONE', *, *, #24093, .F. ) ; +#34555 = ORIENTED_EDGE ( 'NONE', *, *, #5234, .T. ) ; +#34556 = SURFACE_STYLE_FILL_AREA ( #22512 ) ; +#34557 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.3500000000000000300, 0.3499999999999999800 ) ) ; +#34558 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34202, 'distance_accuracy_value', 'NONE'); +#34559 = SURFACE_STYLE_FILL_AREA ( #26570 ) ; +#34561 = EDGE_CURVE ( 'NONE', #11148, #28531, #2494, .T. ) ; +#34560 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13418 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29065, #9708, #9838 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34562 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34563 = PLANE ( 'NONE', #33058 ) ; +#34564 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#34565 = AXIS2_PLACEMENT_3D ( 'NONE', #9882, #22630, #7337 ) ; +#34566 = FILL_AREA_STYLE_COLOUR ( '', #12704 ) ; +#34568 = FACE_OUTER_BOUND ( 'NONE', #306, .T. ) ; +#34567 = FILL_AREA_STYLE_COLOUR ( '', #38904 ) ; +#34569 = STYLED_ITEM ( 'NONE', ( #40472 ), #40404 ) ; +#34570 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7182, 'distance_accuracy_value', 'NONE'); +#34571 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#34572 = AXIS2_PLACEMENT_3D ( 'NONE', #33730, #30478, #40621 ) ; +#34573 = FILL_AREA_STYLE ('',( #21477 ) ) ; +#34574 = LINE ( 'NONE', #19775, #1786 ) ; +#34575 = VECTOR ( 'NONE', #38098, 1000.000000000000000 ) ; +#34576 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34577 = VERTEX_POINT ( 'NONE', #392 ) ; +#34578 = DIRECTION ( 'NONE', ( -1.084202172485504700E-016, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#34579 = ADVANCED_FACE ( 'NONE', ( #26714 ), #32125, .T. ) ; +#34580 = SURFACE_STYLE_USAGE ( .BOTH. , #18369 ) ; +#34581 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#34582 = CLOSED_SHELL ( 'NONE', ( #4468, #1697, #16098, #3189 ) ) ; +#34583 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#34584 = CYLINDRICAL_SURFACE ( 'NONE', #31905, 0.3000000000000003800 ) ; +#34585 = SURFACE_STYLE_USAGE ( .BOTH. , #15261 ) ; +#34586 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34587 = SURFACE_SIDE_STYLE ('',( #28014 ) ) ; +#34588 = ORIENTED_EDGE ( 'NONE', *, *, #8132, .F. ) ; +#34590 = LINE ( 'NONE', #29846, #9319 ) ; +#34589 = PRESENTATION_STYLE_ASSIGNMENT (( #34708 ) ) ; +#34591 = VERTEX_POINT ( 'NONE', #26200 ) ; +#34592 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, 0.2000000000000000900, -3.250000000000000400 ) ) ; +#34593 = EDGE_CURVE ( 'NONE', #19794, #5282, #13049, .T. ) ; +#34594 = FILL_AREA_STYLE_COLOUR ( '', #5319 ) ; +#34595 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#34596 = CARTESIAN_POINT ( 'NONE', ( -3.057233561271454300, 0.07499999999999999700, -0.1687097925925636600 ) ) ; +#34597 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.342956698496953700E-015, -1.000000000000000000 ) ) ; +#34598 = LINE ( 'NONE', #27286, #10829 ) ; +#34599 = EDGE_CURVE ( 'NONE', #16475, #3040, #470, .T. ) ; +#34600 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#34601 = LINE ( 'NONE', #4379, #28045 ) ; +#34602 = LINE ( 'NONE', #20727, #8322 ) ; +#34603 = AXIS2_PLACEMENT_3D ( 'NONE', #12472, #31974, #34679 ) ; +#34604 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.380001745296133300, -4.781671842700004200 ) ) ; +#34605 = VECTOR ( 'NONE', #6255, 1000.000000000000100 ) ; +#34606 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34607 = PRESENTATION_STYLE_ASSIGNMENT (( #8589 ) ) ; +#34608 = EDGE_LOOP ( 'NONE', ( #37422, #40898, #13802 ) ) ; +#34609 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#34610 = EDGE_CURVE ( 'NONE', #19904, #19484, #33790, .T. ) ; +#34611 = SURFACE_STYLE_FILL_AREA ( #37035 ) ; +#34612 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34613 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26630 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13918, #1114, #23246 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34614 = FILL_AREA_STYLE_COLOUR ( '', #41134 ) ; +#34615 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.5737535661042598700, 0.8190279881558656400 ) ) ; +#34616 = PRESENTATION_STYLE_ASSIGNMENT (( #39948 ) ) ; +#34617 = SURFACE_SIDE_STYLE ('',( #31670 ) ) ; +#34618 = STYLED_ITEM ( 'NONE', ( #19777 ), #13209 ) ; +#34619 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#34620 = EDGE_LOOP ( 'NONE', ( #41410, #31047, #29201, #40128 ) ) ; +#34622 = EDGE_CURVE ( 'NONE', #2058, #34527, #3942, .T. ) ; +#34621 = AXIS2_PLACEMENT_3D ( 'NONE', #17528, #13243, #23010 ) ; +#34623 = VERTEX_POINT ( 'NONE', #41863 ) ; +#34624 = FILL_AREA_STYLE ('',( #1630 ) ) ; +#34625 = ORIENTED_EDGE ( 'NONE', *, *, #26265, .T. ) ; +#34627 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4303 ), #36798 ) ; +#34626 = STYLED_ITEM ( 'NONE', ( #28998 ), #28334 ) ; +#34628 = FACE_OUTER_BOUND ( 'NONE', #13689, .T. ) ; +#34629 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18142 ), #32454 ) ; +#34630 = LINE ( 'NONE', #19118, #21531 ) ; +#34631 = LINE ( 'NONE', #29031, #22041 ) ; +#34632 = LINE ( 'NONE', #18757, #17953 ) ; +#34633 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27581 ), #8378 ) ; +#34634 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16082, 'distance_accuracy_value', 'NONE'); +#34635 = ORIENTED_EDGE ( 'NONE', *, *, #14404, .T. ) ; +#34636 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34637 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000007100, -0.8500017452961660100, -4.875000000000000900 ) ) ; +#34638 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#34639 = ORIENTED_EDGE ( 'NONE', *, *, #2354, .F. ) ; +#34640 = LINE ( 'NONE', #11897, #19950 ) ; +#34641 = VECTOR ( 'NONE', #12780, 1000.000000000000000 ) ; +#34642 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#34643 = PRESENTATION_STYLE_ASSIGNMENT (( #40557 ) ) ; +#34644 = DIRECTION ( 'NONE', ( -2.990027780788267900E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#34645 = SURFACE_STYLE_FILL_AREA ( #41631 ) ; +#34646 = ORIENTED_EDGE ( 'NONE', *, *, #4467, .F. ) ; +#34647 = SURFACE_STYLE_USAGE ( .BOTH. , #8644 ) ; +#34648 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34649 = ORIENTED_EDGE ( 'NONE', *, *, #16788, .T. ) ; +#34650 = VECTOR ( 'NONE', #8891, 1000.000000000000000 ) ; +#34651 = CARTESIAN_POINT ( 'NONE', ( -3.119636707815099300, -0.2999999999999999300, 1.000000000000057500 ) ) ; +#34652 = LINE ( 'NONE', #25565, #10884 ) ; +#34653 = ORIENTED_EDGE ( 'NONE', *, *, #22846, .T. ) ; +#34654 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34655 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#34656 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35646, 'distance_accuracy_value', 'NONE'); +#34657 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34658 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.8500017452961657900, -5.575000000000001100 ) ) ; +#34659 = CIRCLE ( 'NONE', #5787, 0.09999999999999982500 ) ; +#34660 = ADVANCED_FACE ( 'NONE', ( #35827 ), #29295, .F. ) ; +#34661 = PLANE ( 'NONE', #40531 ) ; +#34662 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -9.268445570935432200E-016, 1.000000000000000000 ) ) ; +#34663 = SURFACE_SIDE_STYLE ('',( #2505 ) ) ; +#34664 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34665 = EDGE_CURVE ( 'NONE', #22796, #9003, #17605, .T. ) ; +#34666 = LINE ( 'NONE', #86, #17502 ) ; +#34667 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000000000, 1.480001745296169600, -1.650000000000000800 ) ) ; +#34668 = CARTESIAN_POINT ( 'NONE', ( -4.599429204713762200, -0.01999825470386210800, -7.186926638587852500 ) ) ; +#34669 = LINE ( 'NONE', #27680, #33128 ) ; +#34670 = FILL_AREA_STYLE_COLOUR ( '', #28685 ) ; +#34671 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34672 = EDGE_CURVE ( 'NONE', #6514, #17679, #17101, .T. ) ; +#34673 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32592 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26455, #13592, #38865 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34674 = ORIENTED_EDGE ( 'NONE', *, *, #31139, .F. ) ; +#34675 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37395 ), #4908 ) ; +#34676 = ORIENTED_EDGE ( 'NONE', *, *, #18784, .F. ) ; +#34677 = ORIENTED_EDGE ( 'NONE', *, *, #27674, .F. ) ; +#34678 = SURFACE_STYLE_FILL_AREA ( #10843 ) ; +#34679 = DIRECTION ( 'NONE', ( -7.744301232039317900E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#34680 = EDGE_LOOP ( 'NONE', ( #33881, #13295, #5091 ) ) ; +#34681 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#34682 = LINE ( 'NONE', #6289, #13978 ) ; +#34683 = SURFACE_STYLE_FILL_AREA ( #4685 ) ; +#34684 = FILL_AREA_STYLE ('',( #37923 ) ) ; +#34685 = ORIENTED_EDGE ( 'NONE', *, *, #14030, .F. ) ; +#34686 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30908 ) ) ; +#34687 = ORIENTED_EDGE ( 'NONE', *, *, #2400, .F. ) ; +#34688 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13008 ) ) ; +#34689 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#34690 = LINE ( 'NONE', #32981, #37200 ) ; +#34691 = FILL_AREA_STYLE ('',( #38337 ) ) ; +#34693 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16718 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36925, #1648, #17863 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34692 = AXIS2_PLACEMENT_3D ( 'NONE', #34604, #18529, #15275 ) ; +#34694 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.830380236995680300, -0.8400000000000000800 ) ) ; +#34696 = EDGE_CURVE ( 'NONE', #19647, #6388, #16564, .T. ) ; +#34695 = AXIS2_PLACEMENT_3D ( 'NONE', #38896, #38477, #15887 ) ; +#34697 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.830380236995680100, -0.8400000000000000800 ) ) ; +#34698 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#34699 = SURFACE_STYLE_USAGE ( .BOTH. , #15615 ) ; +#34700 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.499998254703820600, -5.049999999999993600 ) ) ; +#34701 = ADVANCED_FACE ( 'NONE', ( #8956 ), #4448, .T. ) ; +#34702 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000013900, -1.999998254703821500, -5.850738490052340700 ) ) ; +#34704 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1080 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1225, #14046, #10628 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34703 = STYLED_ITEM ( 'NONE', ( #15496 ), #25293 ) ; +#34705 = FACE_OUTER_BOUND ( 'NONE', #4837, .T. ) ; +#34706 = CARTESIAN_POINT ( 'NONE', ( 4.599429204713762200, -0.01999825470383194100, -7.186926638587852500 ) ) ; +#34707 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34708 = SURFACE_STYLE_USAGE ( .BOTH. , #5190 ) ; +#34709 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13224, 'distance_accuracy_value', 'NONE'); +#34710 = ORIENTED_EDGE ( 'NONE', *, *, #6402, .T. ) ; +#34711 = LINE ( 'NONE', #13603, #34185 ) ; +#34712 = VECTOR ( 'NONE', #8325, 1000.000000000000100 ) ; +#34713 = FILL_AREA_STYLE_COLOUR ( '', #437 ) ; +#34714 = FILL_AREA_STYLE ('',( #31321 ) ) ; +#34715 = ADVANCED_FACE ( 'NONE', ( #29196 ), #10643, .F. ) ; +#34716 = SURFACE_SIDE_STYLE ('',( #29903 ) ) ; +#34717 = EDGE_LOOP ( 'NONE', ( #39733, #35769, #15677, #13338 ) ) ; +#34718 = LINE ( 'NONE', #1034, #29137 ) ; +#34719 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34720 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.931303021499040500, -0.3590461068823621000 ) ) ; +#34721 = ORIENTED_EDGE ( 'NONE', *, *, #30519, .T. ) ; +#34722 = VERTEX_POINT ( 'NONE', #680 ) ; +#34723 = VECTOR ( 'NONE', #12692, 1000.000000000000000 ) ; +#34724 = ORIENTED_EDGE ( 'NONE', *, *, #29324, .T. ) ; +#34725 = VECTOR ( 'NONE', #41879, 1000.000000000000000 ) ; +#34726 = SURFACE_SIDE_STYLE ('',( #35164 ) ) ; +#34727 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#34728 = EDGE_LOOP ( 'NONE', ( #2089, #35533, #12769, #20824 ) ) ; +#34729 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865475700, 0.7071067811865475700 ) ) ; +#34730 = VERTEX_POINT ( 'NONE', #32974 ) ; +#34731 = EDGE_CURVE ( 'NONE', #971, #2209, #41326, .T. ) ; +#34732 = CIRCLE ( 'NONE', #31691, 0.4000000000000000800 ) ; +#34733 = SURFACE_SIDE_STYLE ('',( #37916 ) ) ; +#34734 = SURFACE_STYLE_USAGE ( .BOTH. , #9135 ) ; +#34735 = EDGE_CURVE ( 'NONE', #28390, #32078, #7960, .T. ) ; +#34736 = STYLED_ITEM ( 'NONE', ( #35144 ), #10858 ) ; +#34737 = CARTESIAN_POINT ( 'NONE', ( -4.750000000000003600, -0.7099999999999991900, -6.861124800398366500 ) ) ; +#34738 = SURFACE_STYLE_FILL_AREA ( #8193 ) ; +#34739 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34740 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35921, 'distance_accuracy_value', 'NONE'); +#34741 = CARTESIAN_POINT ( 'NONE', ( -3.208603896932107300, 0.6500000000000003600, -3.300000000000000300 ) ) ; +#34742 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30407 ) ) ; +#34743 = FILL_AREA_STYLE_COLOUR ( '', #40549 ) ; +#34744 = VECTOR ( 'NONE', #22389, 1000.000000000000000 ) ; +#34745 = ADVANCED_FACE ( 'NONE', ( #37795 ), #3720, .F. ) ; +#34746 = ORIENTED_EDGE ( 'NONE', *, *, #337, .T. ) ; +#34747 = AXIS2_PLACEMENT_3D ( 'NONE', #8994, #2280, #8855 ) ; +#34748 = TOROIDAL_SURFACE ( 'NONE', #11540, 0.9000017452961695000, 0.3000000000000004900 ) ; +#34749 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745296169300, -2.294459358809384700 ) ) ; +#34750 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41848 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19280, #19411, #16565 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34752 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32577 ) ) ; +#34751 = AXIS2_PLACEMENT_3D ( 'NONE', #29554, #10325, #32945 ) ; +#34753 = DIRECTION ( 'NONE', ( 1.548860246407863600E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#34754 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34755 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#34757 = EDGE_CURVE ( 'NONE', #4481, #5874, #10998, .T. ) ; +#34756 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7137 ), #19372 ) ; +#34758 = FILL_AREA_STYLE ('',( #28394 ) ) ; +#34759 = VERTEX_POINT ( 'NONE', #7529 ) ; +#34760 = FILL_AREA_STYLE ('',( #2994 ) ) ; +#34761 = ORIENTED_EDGE ( 'NONE', *, *, #37903, .T. ) ; +#34762 = ADVANCED_FACE ( 'NONE', ( #30218 ), #16865, .F. ) ; +#34764 = AXIS2_PLACEMENT_3D ( 'NONE', #16894, #4036, #10943 ) ; +#34763 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30428 ), #28508 ) ; +#34765 = PRESENTATION_STYLE_ASSIGNMENT (( #5199 ) ) ; +#34766 = CARTESIAN_POINT ( 'NONE', ( 3.395000000000000000, -7.994648820536000700, -3.250000000000000400 ) ) ; +#34767 = LINE ( 'NONE', #24388, #8437 ) ; +#34768 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34769 = EDGE_LOOP ( 'NONE', ( #8106, #4959, #32733, #934 ) ) ; +#34770 = SURFACE_STYLE_FILL_AREA ( #10932 ) ; +#34771 = ORIENTED_EDGE ( 'NONE', *, *, #39091, .F. ) ; +#34772 = VERTEX_POINT ( 'NONE', #10359 ) ; +#34773 = FILL_AREA_STYLE ('',( #3546 ) ) ; +#34774 = VERTEX_POINT ( 'NONE', #1781 ) ; +#34775 = FACE_OUTER_BOUND ( 'NONE', #31391, .T. ) ; +#34776 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9863, 'distance_accuracy_value', 'NONE'); +#34777 = DIRECTION ( 'NONE', ( -6.056601140521966100E-031, -2.501575119733568800E-045, -1.000000000000000000 ) ) ; +#34778 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34779 = CARTESIAN_POINT ( 'NONE', ( 3.229623199999999800, 0.3499999999999999800, -1.649999999999999900 ) ) ; +#34780 = PRESENTATION_STYLE_ASSIGNMENT (( #14110 ) ) ; +#34781 = SURFACE_STYLE_USAGE ( .BOTH. , #12303 ) ; +#34782 = CARTESIAN_POINT ( 'NONE', ( -3.375000000000000400, 1.280001745296166700, -4.549999999999999800 ) ) ; +#34783 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#34784 = EDGE_CURVE ( 'NONE', #2886, #35410, #37209, .T. ) ; +#34785 = ORIENTED_EDGE ( 'NONE', *, *, #12576, .T. ) ; +#34786 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#34787 = EDGE_CURVE ( 'NONE', #33502, #18002, #10957, .T. ) ; +#34788 = VERTEX_POINT ( 'NONE', #1506 ) ; +#34789 = FILL_AREA_STYLE ('',( #2900 ) ) ; +#34790 = SURFACE_SIDE_STYLE ('',( #28081 ) ) ; +#34791 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34792 = ADVANCED_FACE ( 'NONE', ( #28682 ), #35255, .F. ) ; +#34793 = FILL_AREA_STYLE_COLOUR ( '', #32080 ) ; +#34794 = EDGE_LOOP ( 'NONE', ( #16928, #41398, #10508, #41625 ) ) ; +#34795 = ORIENTED_EDGE ( 'NONE', *, *, #27012, .T. ) ; +#34796 = VECTOR ( 'NONE', #1345, 1000.000000000000000 ) ; +#34797 = ORIENTED_EDGE ( 'NONE', *, *, #14438, .T. ) ; +#34798 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32620 ) ) ; +#34799 = FILL_AREA_STYLE_COLOUR ( '', #8108 ) ; +#34800 = SURFACE_STYLE_FILL_AREA ( #26059 ) ; +#34801 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#34802 = ORIENTED_EDGE ( 'NONE', *, *, #6512, .T. ) ; +#34803 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#34804 = ORIENTED_EDGE ( 'NONE', *, *, #40538, .F. ) ; +#34805 = ORIENTED_EDGE ( 'NONE', *, *, #13300, .T. ) ; +#34806 = AXIS2_PLACEMENT_3D ( 'NONE', #39849, #29836, #10475 ) ; +#34807 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#34808 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34809 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4146, 'distance_accuracy_value', 'NONE'); +#34810 = STYLED_ITEM ( 'NONE', ( #843 ), #11814 ) ; +#34811 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -1.499998254703823800, -5.049999999999993600 ) ) ; +#34812 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33441, 'distance_accuracy_value', 'NONE'); +#34815 = EDGE_CURVE ( 'NONE', #18526, #10178, #8916, .T. ) ; +#34814 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#34813 = AXIS2_PLACEMENT_3D ( 'NONE', #11064, #30281, #27587 ) ; +#34816 = ORIENTED_EDGE ( 'NONE', *, *, #1301, .T. ) ; +#34817 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.7580972011844128200 ) ) ; +#34818 = PRESENTATION_STYLE_ASSIGNMENT (( #26234 ) ) ; +#34819 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34820 = CARTESIAN_POINT ( 'NONE', ( 3.179314575050761900, 0.5999999999999998700, -3.249999999999999600 ) ) ; +#34821 = DIRECTION ( 'NONE', ( -4.336808689942002000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#34822 = LINE ( 'NONE', #26619, #36333 ) ; +#34824 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35527 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39830, #33491, #17125 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34823 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19694 ) ) ; +#34825 = FILL_AREA_STYLE_COLOUR ( '', #40978 ) ; +#34826 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3152 ), #36989 ) ; +#34827 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.380001745296132400, -6.699999999999994000 ) ) ; +#34828 = STYLED_ITEM ( 'NONE', ( #31491 ), #32222 ) ; +#34829 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#34830 = VECTOR ( 'NONE', #17969, 1000.000000000000000 ) ; +#34831 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#34832 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#34833 = DIRECTION ( 'NONE', ( -6.056601140521965300E-031, 1.987721548152418300E-045, 1.000000000000000000 ) ) ; +#34834 = ORIENTED_EDGE ( 'NONE', *, *, #8476, .F. ) ; +#34835 = VECTOR ( 'NONE', #30991, 1000.000000000000000 ) ; +#34836 = PLANE ( 'NONE', #34695 ) ; +#34837 = DIRECTION ( 'NONE', ( -3.944304526105059000E-031, -1.000000000000000000, 2.367138801244521200E-016 ) ) ; +#34838 = LINE ( 'NONE', #28259, #32793 ) ; +#34839 = LINE ( 'NONE', #25631, #23731 ) ; +#34840 = ORIENTED_EDGE ( 'NONE', *, *, #30023, .F. ) ; +#34841 = PRESENTATION_STYLE_ASSIGNMENT (( #29321 ) ) ; +#34842 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -0.3500000000000000300, 0.3499999999999999800 ) ) ; +#34843 = SURFACE_STYLE_USAGE ( .BOTH. , #22137 ) ; +#34844 = LINE ( 'NONE', #28650, #12077 ) ; +#34845 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, -1.000000000000000000, 4.688441826964342300E-016 ) ) ; +#34846 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#34847 = ORIENTED_EDGE ( 'NONE', *, *, #3323, .T. ) ; +#34848 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#34849 = VERTEX_POINT ( 'NONE', #33533 ) ; +#34850 = ORIENTED_EDGE ( 'NONE', *, *, #24681, .T. ) ; +#34851 = LINE ( 'NONE', #33967, #28279 ) ; +#34852 = EDGE_CURVE ( 'NONE', #34527, #25184, #26671, .T. ) ; +#34853 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18566, 'distance_accuracy_value', 'NONE'); +#34854 = SURFACE_SIDE_STYLE ('',( #37999 ) ) ; +#34855 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.548860246407863600E-016 ) ) ; +#34856 = EDGE_CURVE ( 'NONE', #28878, #30432, #21628, .T. ) ; +#34857 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -500000.0000000000600, -2.294459358691027400 ) ) ; +#34858 = ORIENTED_EDGE ( 'NONE', *, *, #33184, .T. ) ; +#34859 = FILL_AREA_STYLE ('',( #32007 ) ) ; +#34860 = EDGE_CURVE ( 'NONE', #21167, #9026, #27164, .T. ) ; +#34861 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#34862 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40524 ) ) ; +#34863 = CARTESIAN_POINT ( 'NONE', ( -3.237718385398000300, -0.2999999999999999900, 0.7155313145785999800 ) ) ; +#34864 = EDGE_CURVE ( 'NONE', #14688, #4829, #16032, .T. ) ; +#34865 = FILL_AREA_STYLE_COLOUR ( '', #39976 ) ; +#34866 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.931303021499040300, -0.3590461068823621000 ) ) ; +#34867 = FACE_OUTER_BOUND ( 'NONE', #12254, .T. ) ; +#34868 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12386 ) ) ; +#34869 = VECTOR ( 'NONE', #16700, 1000.000000000000000 ) ; +#34870 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9409 ) ) ; +#34871 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#34872 = VERTEX_POINT ( 'NONE', #33813 ) ; +#34874 = EDGE_CURVE ( 'NONE', #6323, #33786, #12981, .T. ) ; +#34873 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5466 ) ) ; +#34875 = PRESENTATION_STYLE_ASSIGNMENT (( #20601 ) ) ; +#34876 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.6199999999999849000, -5.199999999999999300 ) ) ; +#34877 = SURFACE_STYLE_USAGE ( .BOTH. , #41231 ) ; +#34878 = ORIENTED_EDGE ( 'NONE', *, *, #20283, .F. ) ; +#34879 = ORIENTED_EDGE ( 'NONE', *, *, #39724, .T. ) ; +#34880 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.380001745296138200, -4.781671842700004200 ) ) ; +#34881 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#34882 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#34884 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4947 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17698, #8457, #37015 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34883 = STYLED_ITEM ( 'NONE', ( #1792 ), #28028 ) ; +#34885 = AXIS2_PLACEMENT_3D ( 'NONE', #30411, #7519, #11185 ) ; +#34886 = FACE_OUTER_BOUND ( 'NONE', #30974, .T. ) ; +#34887 = PLANE ( 'NONE', #41376 ) ; +#34888 = CARTESIAN_POINT ( 'NONE', ( 3.395000000000000000, 0.2000000000000001200, -3.299999999999999800 ) ) ; +#34889 = ORIENTED_EDGE ( 'NONE', *, *, #25944, .F. ) ; +#34890 = PLANE ( 'NONE', #27327 ) ; +#34891 = VECTOR ( 'NONE', #8448, 1000.000000000000000 ) ; +#34892 = ORIENTED_EDGE ( 'NONE', *, *, #9710, .T. ) ; +#34893 = ORIENTED_EDGE ( 'NONE', *, *, #33057, .F. ) ; +#34894 = LINE ( 'NONE', #14079, #18735 ) ; +#34895 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#34896 = AXIS2_PLACEMENT_3D ( 'NONE', #19603, #9241, #29158 ) ; +#34897 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15029, 'distance_accuracy_value', 'NONE'); +#34898 = PLANE ( 'NONE', #8258 ) ; +#34899 = ORIENTED_EDGE ( 'NONE', *, *, #17303, .F. ) ; +#34900 = SURFACE_STYLE_USAGE ( .BOTH. , #12275 ) ; +#34901 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34902 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.6800017452961710800, -3.999999999999999100 ) ) ; +#34903 = VECTOR ( 'NONE', #11665, 1000.000000000000000 ) ; +#34904 = CARTESIAN_POINT ( 'NONE', ( 2.995000000000000600, 0.3499999999999999200, -1.546446609449108700 ) ) ; +#34905 = SURFACE_STYLE_FILL_AREA ( #37376 ) ; +#34906 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#34907 = FILL_AREA_STYLE_COLOUR ( '', #2234 ) ; +#34908 = ADVANCED_FACE ( 'NONE', ( #20623 ), #17561, .T. ) ; +#34909 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34910 = VECTOR ( 'NONE', #22706, 1000.000000000000000 ) ; +#34911 = VERTEX_POINT ( 'NONE', #5130 ) ; +#34912 = VECTOR ( 'NONE', #41079, 1000.000000000000000 ) ; +#34913 = EDGE_CURVE ( 'NONE', #31873, #32564, #17057, .T. ) ; +#34914 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34915 = SURFACE_SIDE_STYLE ('',( #41694 ) ) ; +#34916 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34917 = ORIENTED_EDGE ( 'NONE', *, *, #18539, .F. ) ; +#34918 = ADVANCED_FACE ( 'NONE', ( #41792 ), #7912, .F. ) ; +#34919 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34920 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34921 = EDGE_CURVE ( 'NONE', #40495, #7259, #34203, .T. ) ; +#34922 = LINE ( 'NONE', #34637, #5624 ) ; +#34923 = SURFACE_SIDE_STYLE ('',( #12937 ) ) ; +#34924 = EDGE_LOOP ( 'NONE', ( #34555, #10815, #25358, #13885 ) ) ; +#34925 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34926 = SURFACE_SIDE_STYLE ('',( #37157 ) ) ; +#34927 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3057 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6308, #35403, #34982 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34928 = VERTEX_POINT ( 'NONE', #25074 ) ; +#34929 = STYLED_ITEM ( 'NONE', ( #18243 ), #13318 ) ; +#34930 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.480001745296167600, -4.200000000000000200 ) ) ; +#34931 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34932 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34933 = FILL_AREA_STYLE_COLOUR ( '', #36171 ) ; +#34934 = VERTEX_POINT ( 'NONE', #2206 ) ; +#34935 = AXIS2_PLACEMENT_3D ( 'NONE', #41813, #31938, #15840 ) ; +#34936 = VERTEX_POINT ( 'NONE', #27876 ) ; +#34937 = AXIS2_PLACEMENT_3D ( 'NONE', #27598, #8356, #5133 ) ; +#34938 = LINE ( 'NONE', #38467, #31887 ) ; +#34940 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15457 ), #4632 ) ; +#34939 = AXIS2_PLACEMENT_3D ( 'NONE', #1748, #7644, #37020 ) ; +#34942 = SURFACE_STYLE_FILL_AREA ( #20389 ) ; +#34941 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34943 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#34944 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34945 = EDGE_CURVE ( 'NONE', #25314, #12406, #901, .T. ) ; +#34946 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.279999999999999800, -0.2000017452961698200 ) ) ; +#34949 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21395 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13859, #3816, #33212 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#34948 = CARTESIAN_POINT ( 'NONE', ( -3.137984242873222300, 0.2999999999999999300, 0.9623819784616983700 ) ) ; +#34947 = VECTOR ( 'NONE', #30695, 1000.000000000000000 ) ; +#34950 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34951 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4860 ) ) ; +#34952 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34953 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#34954 = ORIENTED_EDGE ( 'NONE', *, *, #35655, .T. ) ; +#34955 = FILL_AREA_STYLE_COLOUR ( '', #23638 ) ; +#34956 = PRESENTATION_STYLE_ASSIGNMENT (( #30065 ) ) ; +#34957 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.2999999999999999900, 0.6999999999999999600 ) ) ; +#34958 = ADVANCED_FACE ( 'NONE', ( #17019 ), #41743, .T. ) ; +#34959 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#34960 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, 0.6500000000000001300, -3.299999999999999800 ) ) ; +#34961 = EDGE_LOOP ( 'NONE', ( #26166, #14379, #34771, #7289 ) ) ; +#34962 = VECTOR ( 'NONE', #10867, 1000.000000000000000 ) ; +#34963 = SURFACE_SIDE_STYLE ('',( #18794 ) ) ; +#34964 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34965 = ORIENTED_EDGE ( 'NONE', *, *, #9962, .T. ) ; +#34966 = CIRCLE ( 'NONE', #2181, 0.3000000000000003800 ) ; +#34967 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#34968 = CARTESIAN_POINT ( 'NONE', ( 2.573205080756887100, 1.480001745296169600, -1.650000000000000400 ) ) ; +#34969 = ADVANCED_FACE ( 'NONE', ( #2897 ), #37609, .T. ) ; +#34970 = DIRECTION ( 'NONE', ( 0.7071067811865368000, -0.7071067811865583400, 4.282663737405208200E-031 ) ) ; +#34971 = EDGE_LOOP ( 'NONE', ( #9122, #37881, #17346, #36506 ) ) ; +#34972 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34973 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#34974 = VECTOR ( 'NONE', #5194, 1000.000000000000000 ) ; +#34975 = EDGE_LOOP ( 'NONE', ( #18099, #37654, #9020, #37820 ) ) ; +#34976 = EDGE_CURVE ( 'NONE', #19794, #9676, #22092, .T. ) ; +#34977 = FILL_AREA_STYLE_COLOUR ( '', #22529 ) ; +#34978 = SURFACE_STYLE_USAGE ( .BOTH. , #16478 ) ; +#34979 = EDGE_CURVE ( 'NONE', #3127, #37919, #12445, .T. ) ; +#34980 = CIRCLE ( 'NONE', #15465, 0.7999999999999999300 ) ; +#34981 = AXIS2_PLACEMENT_3D ( 'NONE', #33121, #17032, #39597 ) ; +#34982 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#34983 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -1.999999999999999600 ) ) ; +#34984 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#34985 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #13086, #19477, #35425, #32291 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#34986 = STYLED_ITEM ( 'NONE', ( #17033 ), #14838 ) ; +#34987 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.630001745296169000, -4.100000000000000500 ) ) ; +#34988 = ORIENTED_EDGE ( 'NONE', *, *, #39217, .F. ) ; +#34989 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31720, 'distance_accuracy_value', 'NONE'); +#34990 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9780 ) ) ; +#34991 = SURFACE_STYLE_USAGE ( .BOTH. , #2699 ) ; +#34992 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13314 ), #37162 ) ; +#34993 = AXIS2_PLACEMENT_3D ( 'NONE', #34101, #5007, #11497 ) ; +#34994 = EDGE_LOOP ( 'NONE', ( #19387, #7468, #19744, #30312 ) ) ; +#34996 = STYLED_ITEM ( 'NONE', ( #2599 ), #5641 ) ; +#34995 = STYLED_ITEM ( 'NONE', ( #26290 ), #30435 ) ; +#34997 = SURFACE_STYLE_USAGE ( .BOTH. , #31471 ) ; +#35000 = EDGE_CURVE ( 'NONE', #9621, #39493, #23576, .T. ) ; +#34999 = FILL_AREA_STYLE ('',( #34865 ) ) ; +#34998 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40681 ) ) ; +#35001 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#35002 = EDGE_LOOP ( 'NONE', ( #3640, #3751, #39670, #19977 ) ) ; +#35003 = ADVANCED_FACE ( 'NONE', ( #19063 ), #3863, .F. ) ; +#35005 = EDGE_LOOP ( 'NONE', ( #8289, #17509, #14493, #11004, #24687, #33772, #13010 ) ) ; +#35004 = CIRCLE ( 'NONE', #24098, 0.1000000000000000500 ) ; +#35006 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35007 = ORIENTED_EDGE ( 'NONE', *, *, #22872, .F. ) ; +#35008 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35009 = LINE ( 'NONE', #21242, #23906 ) ; +#35011 = STYLED_ITEM ( 'NONE', ( #19785 ), #1099 ) ; +#35010 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28266 ), #37178 ) ; +#35012 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.380001745296126800, -4.781671842700004200 ) ) ; +#35013 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#35014 = PLANE ( 'NONE', #7386 ) ; +#35015 = EDGE_LOOP ( 'NONE', ( #24743, #12117, #9189, #8111 ) ) ; +#35016 = LINE ( 'NONE', #20498, #21431 ) ; +#35017 = CARTESIAN_POINT ( 'NONE', ( -3.127842712444462300, 0.3292893218813454600, -1.600000000004099700 ) ) ; +#35018 = SURFACE_STYLE_FILL_AREA ( #30777 ) ; +#35019 = EDGE_LOOP ( 'NONE', ( #19188, #6060, #24001, #15273 ) ) ; +#35020 = VECTOR ( 'NONE', #20069, 1000.000000000000000 ) ; +#35021 = SURFACE_STYLE_FILL_AREA ( #14198 ) ; +#35022 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35023 = CARTESIAN_POINT ( 'NONE', ( -2.972500000000000100, -0.3000000000000001600, -1.250000000000000000 ) ) ; +#35025 = SURFACE_SIDE_STYLE ('',( #36681 ) ) ; +#35024 = CARTESIAN_POINT ( 'NONE', ( 3.629999999999999900, -1.380001745296125100, -6.699999999999994000 ) ) ; +#35026 = CARTESIAN_POINT ( 'NONE', ( -3.100000000000000100, -1.139998254717370600, -5.049996877890552400 ) ) ; +#35027 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17873, 'distance_accuracy_value', 'NONE'); +#35028 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.380001745296165000, -5.650000000000000400 ) ) ; +#35029 = CARTESIAN_POINT ( 'NONE', ( 1.649999999999999900, -1.499998254703824400, -6.299999999999993600 ) ) ; +#35030 = EDGE_LOOP ( 'NONE', ( #14990, #3845, #26392, #17589 ) ) ; +#35031 = EDGE_CURVE ( 'NONE', #36833, #21135, #24446, .T. ) ; +#35032 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#35033 = CARTESIAN_POINT ( 'NONE', ( 3.245000000073000400, 0.2999999999999999900, -1.600000000000000100 ) ) ; +#35034 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#35035 = EDGE_CURVE ( 'NONE', #6706, #18064, #10426, .T. ) ; +#35036 = ORIENTED_EDGE ( 'NONE', *, *, #10646, .T. ) ; +#35037 = CIRCLE ( 'NONE', #29182, 0.1000000000000000500 ) ; +#35038 = ORIENTED_EDGE ( 'NONE', *, *, #8742, .T. ) ; +#35039 = VERTEX_POINT ( 'NONE', #38157 ) ; +#35040 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#35041 = ORIENTED_EDGE ( 'NONE', *, *, #255, .F. ) ; +#35042 = CARTESIAN_POINT ( 'NONE', ( -4.070001745296171900, 0.2800000000000027500, -4.099999999999999600 ) ) ; +#35043 = ORIENTED_EDGE ( 'NONE', *, *, #16968, .F. ) ; +#35044 = SURFACE_STYLE_FILL_AREA ( #19978 ) ; +#35045 = AXIS2_PLACEMENT_3D ( 'NONE', #11226, #10682, #14092 ) ; +#35046 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41668, 'distance_accuracy_value', 'NONE'); +#35047 = VECTOR ( 'NONE', #21741, 1000.000000000000000 ) ; +#35048 = FACE_OUTER_BOUND ( 'NONE', #4301, .T. ) ; +#35049 = CIRCLE ( 'NONE', #27446, 0.2000000000000007300 ) ; +#35050 = ORIENTED_EDGE ( 'NONE', *, *, #23592, .T. ) ; +#35051 = STYLED_ITEM ( 'NONE', ( #21631 ), #20240 ) ; +#35052 = SURFACE_STYLE_FILL_AREA ( #2447 ) ; +#35053 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35054 = SURFACE_STYLE_FILL_AREA ( #8760 ) ; +#35055 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16371 ), #5550 ) ; +#35056 = AXIS2_PLACEMENT_3D ( 'NONE', #7175, #13981, #39385 ) ; +#35057 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35058 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#35059 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23915, 'distance_accuracy_value', 'NONE'); +#35061 = EDGE_CURVE ( 'NONE', #31259, #15473, #9399, .T. ) ; +#35060 = STYLED_ITEM ( 'NONE', ( #5330 ), #36582 ) ; +#35062 = DIRECTION ( 'NONE', ( -1.156482317317871700E-015, 1.445602896647339700E-016, 1.000000000000000000 ) ) ; +#35063 = FILL_AREA_STYLE ('',( #12436 ) ) ; +#35064 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#35066 = STYLED_ITEM ( 'NONE', ( #19030 ), #2389 ) ; +#35065 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10248 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10101, #19476, #9687 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35067 = STYLED_ITEM ( 'NONE', ( #28528 ), #39575 ) ; +#35068 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35069 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#35070 = STYLED_ITEM ( 'NONE', ( #241 ), #31723 ) ; +#35071 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35072 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35073 = CIRCLE ( 'NONE', #4938, 0.2999999999999999300 ) ; +#35074 = FILL_AREA_STYLE_COLOUR ( '', #10826 ) ; +#35075 = PRESENTATION_STYLE_ASSIGNMENT (( #1315 ) ) ; +#35076 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.2800017452961687200, -6.199999999999999300 ) ) ; +#35077 = ORIENTED_EDGE ( 'NONE', *, *, #30169, .F. ) ; +#35078 = ORIENTED_EDGE ( 'NONE', *, *, #24022, .F. ) ; +#35079 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000800, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#35080 = ORIENTED_EDGE ( 'NONE', *, *, #4542, .F. ) ; +#35081 = VERTEX_POINT ( 'NONE', #21684 ) ; +#35083 = CARTESIAN_POINT ( 'NONE', ( -3.178032631759736900, -0.5251342645287964100, -1.855131874324933600 ) ) ; +#35082 = PRESENTATION_STYLE_ASSIGNMENT (( #26029 ) ) ; +#35084 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35085 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.080001745296178500, -6.850000000000000500 ) ) ; +#35086 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20591, 'distance_accuracy_value', 'NONE'); +#35087 = VECTOR ( 'NONE', #30470, 1000.000000000000000 ) ; +#35088 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35089 = VECTOR ( 'NONE', #34619, 1000.000000000000000 ) ; +#35090 = CARTESIAN_POINT ( 'NONE', ( -1.400000000000000800, 1.630001745296169500, -1.650000000000000400 ) ) ; +#35091 = SURFACE_STYLE_FILL_AREA ( #31107 ) ; +#35092 = SURFACE_STYLE_USAGE ( .BOTH. , #27627 ) ; +#35093 = EDGE_CURVE ( 'NONE', #5544, #36632, #1771, .T. ) ; +#35094 = VECTOR ( 'NONE', #358, 1000.000000000000000 ) ; +#35095 = LINE ( 'NONE', #4944, #1777 ) ; +#35096 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#35097 = ORIENTED_EDGE ( 'NONE', *, *, #6534, .F. ) ; +#35098 = EDGE_CURVE ( 'NONE', #37102, #11635, #8200, .T. ) ; +#35099 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5200, 'distance_accuracy_value', 'NONE'); +#35100 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.2699999999999848600, -5.199999999999999300 ) ) ; +#35101 = EDGE_CURVE ( 'NONE', #20114, #37158, #20383, .T. ) ; +#35102 = STYLED_ITEM ( 'NONE', ( #11084 ), #16924 ) ; +#35103 = ORIENTED_EDGE ( 'NONE', *, *, #28734, .F. ) ; +#35104 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.779999999999868400, 0.0000000000000000000 ) ) ; +#35105 = SURFACE_SIDE_STYLE ('',( #2414 ) ) ; +#35106 = LINE ( 'NONE', #32218, #31581 ) ; +#35107 = SURFACE_STYLE_USAGE ( .BOTH. , #18612 ) ; +#35108 = ADVANCED_FACE ( 'NONE', ( #18988 ), #5966, .F. ) ; +#35109 = AXIS2_PLACEMENT_3D ( 'NONE', #21614, #24422, #14525 ) ; +#35110 = CIRCLE ( 'NONE', #6712, 0.2999999999999999300 ) ; +#35111 = ORIENTED_EDGE ( 'NONE', *, *, #5776, .F. ) ; +#35112 = FILL_AREA_STYLE_COLOUR ( '', #38622 ) ; +#35113 = DIRECTION ( 'NONE', ( -2.891205793294932600E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#35114 = PRESENTATION_STYLE_ASSIGNMENT (( #23720 ) ) ; +#35116 = EDGE_CURVE ( 'NONE', #28549, #5032, #32429, .T. ) ; +#35115 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6945 ) ) ; +#35117 = DIRECTION ( 'NONE', ( -9.637352644315598700E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35118 = SURFACE_STYLE_FILL_AREA ( #24852 ) ; +#35119 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39343, 'distance_accuracy_value', 'NONE'); +#35120 = ORIENTED_EDGE ( 'NONE', *, *, #24774, .F. ) ; +#35121 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.630424214906979600, -1.050000000000000000 ) ) ; +#35122 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#35123 = FACE_OUTER_BOUND ( 'NONE', #39395, .T. ) ; +#35124 = ORIENTED_EDGE ( 'NONE', *, *, #30590, .F. ) ; +#35125 = ADVANCED_FACE ( 'NONE', ( #18334 ), #1167, .F. ) ; +#35127 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2405 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41630, #6347, #41768 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35126 = AXIS2_PLACEMENT_3D ( 'NONE', #39985, #7925, #20270 ) ; +#35128 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35129 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.830380236995680100, -0.8400000000000000800 ) ) ; +#35130 = CYLINDRICAL_SURFACE ( 'NONE', #12073, 0.1000000000000000500 ) ; +#35131 = STYLED_ITEM ( 'NONE', ( #17149 ), #41015 ) ; +#35132 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35133 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35134 = ORIENTED_EDGE ( 'NONE', *, *, #41720, .T. ) ; +#35135 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41603 ), #31360 ) ; +#35136 = FILL_AREA_STYLE_COLOUR ( '', #23316 ) ; +#35137 = PRESENTATION_STYLE_ASSIGNMENT (( #39708 ) ) ; +#35138 = VERTEX_POINT ( 'NONE', #3808 ) ; +#35139 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14840 ), #27280 ) ; +#35140 = LINE ( 'NONE', #39726, #31070 ) ; +#35141 = SURFACE_STYLE_FILL_AREA ( #22230 ) ; +#35142 = ORIENTED_EDGE ( 'NONE', *, *, #16411, .F. ) ; +#35143 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.799998254703820700, -6.600000000000000500 ) ) ; +#35144 = PRESENTATION_STYLE_ASSIGNMENT (( #31950 ) ) ; +#35145 = PLANE ( 'NONE', #27218 ) ; +#35146 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#35147 = FILL_AREA_STYLE_COLOUR ( '', #22686 ) ; +#35148 = FILL_AREA_STYLE ('',( #22578 ) ) ; +#35149 = PRESENTATION_STYLE_ASSIGNMENT (( #23590 ) ) ; +#35150 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000032500, 0.4300017452961685800, -6.750000000000000000 ) ) ; +#35151 = EDGE_LOOP ( 'NONE', ( #5468, #40670, #35910, #26333 ) ) ; +#35152 = FILL_AREA_STYLE_COLOUR ( '', #26471 ) ; +#35153 = FILL_AREA_STYLE ('',( #25166 ) ) ; +#35154 = LINE ( 'NONE', #2048, #16954 ) ; +#35155 = SURFACE_STYLE_FILL_AREA ( #28412 ) ; +#35156 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.139998254717359900, -6.299996877890552400 ) ) ; +#35157 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35158 = CARTESIAN_POINT ( 'NONE', ( 4.010831726188969900, 0.5300017452961703900, -4.576794919243110500 ) ) ; +#35159 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#35160 = ADVANCED_FACE ( 'NONE', ( #16278 ), #13405, .T. ) ; +#35161 = EDGE_CURVE ( 'NONE', #41578, #23046, #3626, .T. ) ; +#35162 = ORIENTED_EDGE ( 'NONE', *, *, #29588, .T. ) ; +#35163 = EDGE_LOOP ( 'NONE', ( #27748, #17554, #33739, #31218 ) ) ; +#35164 = SURFACE_STYLE_FILL_AREA ( #37823 ) ; +#35165 = ORIENTED_EDGE ( 'NONE', *, *, #15964, .F. ) ; +#35166 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37324 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35205, #25481, #12580 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35167 = FILL_AREA_STYLE_COLOUR ( '', #32710 ) ; +#35168 = CIRCLE ( 'NONE', #14227, 0.1000000000000002600 ) ; +#35169 = EDGE_CURVE ( 'NONE', #23571, #14191, #13217, .T. ) ; +#35170 = ORIENTED_EDGE ( 'NONE', *, *, #19405, .F. ) ; +#35171 = SURFACE_STYLE_USAGE ( .BOTH. , #38672 ) ; +#35172 = SURFACE_STYLE_FILL_AREA ( #109 ) ; +#35173 = ORIENTED_EDGE ( 'NONE', *, *, #31645, .T. ) ; +#35174 = PLANE ( 'NONE', #9741 ) ; +#35175 = LINE ( 'NONE', #8335, #864 ) ; +#35176 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999500, 0.3292893218813450800, -1.400000000000000800 ) ) ; +#35177 = CIRCLE ( 'NONE', #23988, 0.09999999999999982500 ) ; +#35178 = ADVANCED_FACE ( 'NONE', ( #14736 ), #19954, .F. ) ; +#35179 = AXIS2_PLACEMENT_3D ( 'NONE', #33327, #36566, #4507 ) ; +#35180 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#35181 = ORIENTED_EDGE ( 'NONE', *, *, #40589, .T. ) ; +#35182 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#35183 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33012 ) ) ; +#35184 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35185 = PRESENTATION_STYLE_ASSIGNMENT (( #22839 ) ) ; +#35186 = FILL_AREA_STYLE ('',( #9311 ) ) ; +#35188 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16257 ), #8928 ) ; +#35187 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33022 ) ) ; +#35189 = FACE_BOUND ( 'NONE', #30921, .T. ) ; +#35191 = AXIS2_PLACEMENT_3D ( 'NONE', #12325, #5569, #37768 ) ; +#35190 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4451 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13104, #42, #25974 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35192 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#35193 = ORIENTED_EDGE ( 'NONE', *, *, #39973, .T. ) ; +#35194 = LINE ( 'NONE', #3843, #7897 ) ; +#35195 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8937 ) ) ; +#35196 = CARTESIAN_POINT ( 'NONE', ( -4.856063034915695900, 0.2800000000000028000, -0.6228541982233617400 ) ) ; +#35197 = SURFACE_STYLE_USAGE ( .BOTH. , #34915 ) ; +#35198 = FILL_AREA_STYLE_COLOUR ( '', #24356 ) ; +#35199 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35200 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35201 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35202 = CIRCLE ( 'NONE', #35613, 0.1000000000000002600 ) ; +#35203 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35204 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35205 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35206 = ORIENTED_EDGE ( 'NONE', *, *, #26125, .T. ) ; +#35207 = EDGE_LOOP ( 'NONE', ( #34988, #15717, #31008, #13012 ) ) ; +#35208 = CYLINDRICAL_SURFACE ( 'NONE', #38378, 0.3000000000000003800 ) ; +#35209 = VERTEX_POINT ( 'NONE', #9871 ) ; +#35210 = LINE ( 'NONE', #35325, #1894 ) ; +#35211 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#35212 = VECTOR ( 'NONE', #28286, 1000.000000000000000 ) ; +#35213 = SURFACE_STYLE_FILL_AREA ( #2957 ) ; +#35214 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#35215 = PRESENTATION_STYLE_ASSIGNMENT (( #33912 ) ) ; +#35216 = LINE ( 'NONE', #10498, #26093 ) ; +#35217 = CLOSED_SHELL ( 'NONE', ( #15045, #23874, #5885, #4638, #21875, #33961 ) ) ; +#35218 = SURFACE_STYLE_USAGE ( .BOTH. , #5702 ) ; +#35219 = CIRCLE ( 'NONE', #33447, 0.1000000000000001600 ) ; +#35220 = EDGE_LOOP ( 'NONE', ( #13047, #36959, #40605 ) ) ; +#35221 = ADVANCED_FACE ( 'NONE', ( #16761 ), #26007, .T. ) ; +#35222 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#35223 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#35224 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35225 = VECTOR ( 'NONE', #37616, 1000.000000000000000 ) ; +#35226 = FILL_AREA_STYLE_COLOUR ( '', #40338 ) ; +#35227 = CYLINDRICAL_SURFACE ( 'NONE', #33650, 0.1000000000000009100 ) ; +#35228 = CARTESIAN_POINT ( 'NONE', ( -3.629999999999999900, -1.499998254703818900, -6.299999999999993600 ) ) ; +#35229 = EDGE_CURVE ( 'NONE', #10138, #35688, #35458, .T. ) ; +#35230 = SURFACE_SIDE_STYLE ('',( #27093 ) ) ; +#35231 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35232 = SURFACE_STYLE_USAGE ( .BOTH. , #28860 ) ; +#35233 = SURFACE_STYLE_FILL_AREA ( #14902 ) ; +#35234 = EDGE_CURVE ( 'NONE', #129, #41360, #12688, .T. ) ; +#35235 = STYLED_ITEM ( 'NONE', ( #23140 ), #10180 ) ; +#35236 = MANIFOLD_SOLID_BREP ( '1-1-solid11', #17686 ) ; +#35237 = ORIENTED_EDGE ( 'NONE', *, *, #33371, .T. ) ; +#35238 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#35239 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#35240 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.3500000000000000300, -1.300000000000000000 ) ) ; +#35241 = AXIS2_PLACEMENT_3D ( 'NONE', #25929, #29164, #3469 ) ; +#35242 = ORIENTED_EDGE ( 'NONE', *, *, #41041, .F. ) ; +#35243 = FILL_AREA_STYLE_COLOUR ( '', #148 ) ; +#35244 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35245 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35246 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34163 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40099, #36592, #36734 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35247 = STYLED_ITEM ( 'NONE', ( #30460 ), #18832 ) ; +#35248 = EDGE_LOOP ( 'NONE', ( #22338, #40137, #29103, #15098, #23164, #26553 ) ) ; +#35249 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#35250 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -2.224004456380521900E-016 ) ) ; +#35251 = ORIENTED_EDGE ( 'NONE', *, *, #28593, .F. ) ; +#35252 = PRESENTATION_STYLE_ASSIGNMENT (( #9288 ) ) ; +#35254 = STYLED_ITEM ( 'NONE', ( #4089 ), #5423 ) ; +#35253 = STYLED_ITEM ( 'NONE', ( #35455 ), #30063 ) ; +#35255 = CYLINDRICAL_SURFACE ( 'NONE', #28984, 0.2999999999999999300 ) ; +#35256 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35257 = LINE ( 'NONE', #30530, #18087 ) ; +#35258 = PRESENTATION_STYLE_ASSIGNMENT (( #37930 ) ) ; +#35259 = FACE_OUTER_BOUND ( 'NONE', #17696, .T. ) ; +#35261 = EDGE_CURVE ( 'NONE', #25959, #37025, #24867, .T. ) ; +#35260 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29335 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16542, #32209, #9745 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35262 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998526700, -1.949999999999999500 ) ) ; +#35263 = VERTEX_POINT ( 'NONE', #32491 ) ; +#35264 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35265 = SURFACE_STYLE_FILL_AREA ( #20869 ) ; +#35266 = ORIENTED_EDGE ( 'NONE', *, *, #8849, .T. ) ; +#35267 = PRESENTATION_STYLE_ASSIGNMENT (( #11122 ) ) ; +#35268 = FILL_AREA_STYLE ('',( #3064 ) ) ; +#35270 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8521 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17772, #27480, #1408 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35269 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10736 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6587, #38920, #26082 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35271 = FACE_OUTER_BOUND ( 'NONE', #15945, .T. ) ; +#35272 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.380001745296130000, -4.781671842700004200 ) ) ; +#35273 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#35274 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#35275 = VERTEX_POINT ( 'NONE', #10726 ) ; +#35276 = SURFACE_SIDE_STYLE ('',( #8431 ) ) ; +#35277 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #26257, #16922, #35873, #4063 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#35278 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40599, 'distance_accuracy_value', 'NONE'); +#35279 = PRESENTATION_STYLE_ASSIGNMENT (( #8078 ) ) ; +#35280 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -4.675000000000000700 ) ) ; +#35281 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35282 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35283 = LINE ( 'NONE', #4885, #41809 ) ; +#35284 = CARTESIAN_POINT ( 'NONE', ( 3.237718385397935400, 0.07499999999999998300, 0.7155313145785738800 ) ) ; +#35285 = VERTEX_POINT ( 'NONE', #7474 ) ; +#35286 = FILL_AREA_STYLE_COLOUR ( '', #10428 ) ; +#35287 = FACE_OUTER_BOUND ( 'NONE', #24616, .T. ) ; +#35288 = EDGE_LOOP ( 'NONE', ( #37260, #26523, #25113, #10226 ) ) ; +#35289 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35290 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35291 = EDGE_CURVE ( 'NONE', #22958, #31696, #1517, .T. ) ; +#35292 = ORIENTED_EDGE ( 'NONE', *, *, #2284, .F. ) ; +#35293 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.949998254703822800, -3.500000000000000000 ) ) ; +#35294 = ORIENTED_EDGE ( 'NONE', *, *, #40175, .F. ) ; +#35295 = VECTOR ( 'NONE', #14570, 1000.000000000000000 ) ; +#35296 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35297 = EDGE_LOOP ( 'NONE', ( #21982, #27148, #15106, #10661 ) ) ; +#35298 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#35299 = EDGE_CURVE ( 'NONE', #17689, #12478, #29889, .T. ) ; +#35300 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24801 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17715, #40263, #30269 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35301 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35302 = ORIENTED_EDGE ( 'NONE', *, *, #1264, .T. ) ; +#35303 = SURFACE_STYLE_USAGE ( .BOTH. , #15787 ) ; +#35304 = EDGE_LOOP ( 'NONE', ( #21525, #38787, #13535, #29714 ) ) ; +#35305 = VERTEX_POINT ( 'NONE', #16817 ) ; +#35306 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.480001745296169600, -1.149999999999999900 ) ) ; +#35307 = CARTESIAN_POINT ( 'NONE', ( -1.649999999999999900, -1.380001745296130600, -6.031671842700004200 ) ) ; +#35308 = VERTEX_POINT ( 'NONE', #768 ) ; +#35309 = LINE ( 'NONE', #31138, #1994 ) ; +#35310 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35311 = FILL_AREA_STYLE_COLOUR ( '', #5201 ) ; +#35312 = STYLED_ITEM ( 'NONE', ( #36836 ), #19885 ) ; +#35313 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31773 ) ) ; +#35314 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32577 ), #24497 ) ; +#35315 = FACE_OUTER_BOUND ( 'NONE', #27099, .T. ) ; +#35316 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35317 = DIRECTION ( 'NONE', ( -9.926251142388974600E-031, 4.688441826964342300E-016, 1.000000000000000000 ) ) ; +#35319 = EDGE_CURVE ( 'NONE', #33382, #27685, #27340, .T. ) ; +#35318 = STYLED_ITEM ( 'NONE', ( #38753 ), #36271 ) ; +#35320 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35321 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#35322 = ORIENTED_EDGE ( 'NONE', *, *, #1542, .F. ) ; +#35324 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35323 = FILL_AREA_STYLE_COLOUR ( '', #13693 ) ; +#35325 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#35327 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16380 ), #33714 ) ; +#35326 = AXIS2_PLACEMENT_3D ( 'NONE', #11729, #21803, #25047 ) ; +#35328 = FILL_AREA_STYLE ('',( #28681 ) ) ; +#35329 = AXIS2_PLACEMENT_3D ( 'NONE', #3807, #13709, #7329 ) ; +#35330 = VERTEX_POINT ( 'NONE', #23456 ) ; +#35331 = LINE ( 'NONE', #36644, #6966 ) ; +#35332 = LINE ( 'NONE', #7349, #1008 ) ; +#35333 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35334 = ORIENTED_EDGE ( 'NONE', *, *, #24088, .F. ) ; +#35335 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35336 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38958, 'distance_accuracy_value', 'NONE'); +#35337 = LINE ( 'NONE', #38373, #13602 ) ; +#35338 = CYLINDRICAL_SURFACE ( 'NONE', #41570, 0.2000017452961698200 ) ; +#35339 = ORIENTED_EDGE ( 'NONE', *, *, #25240, .T. ) ; +#35340 = EDGE_LOOP ( 'NONE', ( #40875, #5309, #6421, #29236 ) ) ; +#35341 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.730380239188924900, -0.8400209439508702400 ) ) ; +#35342 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.499998254703827100, -5.449999999999994000 ) ) ; +#35343 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000007500, -0.4918933027098934500, -6.861124800398366500 ) ) ; +#35344 = ADVANCED_FACE ( 'NONE', ( #2137 ), #36329, .F. ) ; +#35345 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35346 = EDGE_LOOP ( 'NONE', ( #4913, #34649, #16881, #35242 ) ) ; +#35347 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, -0.5999999999999999800, -1.930000000000000200 ) ) ; +#35348 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.252606517456518800E-015, -1.000000000000000000 ) ) ; +#35349 = EDGE_CURVE ( 'NONE', #28549, #439, #1127, .T. ) ; +#35350 = LINE ( 'NONE', #40413, #17163 ) ; +#35351 = EDGE_CURVE ( 'NONE', #14378, #23240, #17761, .T. ) ; +#35352 = EDGE_CURVE ( 'NONE', #20150, #5846, #34436, .T. ) ; +#35353 = LINE ( 'NONE', #4953, #12552 ) ; +#35354 = SURFACE_STYLE_USAGE ( .BOTH. , #12735 ) ; +#35355 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41045 ), #15611 ) ; +#35356 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244521200E-016 ) ) ; +#35357 = CARTESIAN_POINT ( 'NONE', ( 1.649999999999999900, -1.139998254717355100, -6.299996877890552400 ) ) ; +#35358 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.931303021499040500, -0.3590461068823621000 ) ) ; +#35359 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#35360 = ORIENTED_EDGE ( 'NONE', *, *, #2471, .T. ) ; +#35361 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#35362 = VECTOR ( 'NONE', #1661, 1000.000000000000000 ) ; +#35363 = SURFACE_SIDE_STYLE ('',( #24675 ) ) ; +#35364 = PRESENTATION_STYLE_ASSIGNMENT (( #10883 ) ) ; +#35365 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#35366 = PRESENTATION_STYLE_ASSIGNMENT (( #29123 ) ) ; +#35367 = ORIENTED_EDGE ( 'NONE', *, *, #39165, .T. ) ; +#35368 = CYLINDRICAL_SURFACE ( 'NONE', #13090, 1.200001745296169300 ) ; +#35369 = CARTESIAN_POINT ( 'NONE', ( -3.027773529658075000, 0.3380711211894935600, -1.288071121189493300 ) ) ; +#35370 = STYLED_ITEM ( 'NONE', ( #31142 ), #11646 ) ; +#35371 = SURFACE_STYLE_USAGE ( .BOTH. , #32099 ) ; +#35372 = PLANE ( 'NONE', #29781 ) ; +#35373 = LINE ( 'NONE', #27644, #9570 ) ; +#35374 = LINE ( 'NONE', #36885, #14142 ) ; +#35377 = EDGE_CURVE ( 'NONE', #32555, #5676, #3585, .T. ) ; +#35376 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -2.322941965694886000, -1.250000000000000000 ) ) ; +#35375 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24303 ) ) ; +#35378 = VERTEX_POINT ( 'NONE', #36460 ) ; +#35379 = ORIENTED_EDGE ( 'NONE', *, *, #27707, .F. ) ; +#35381 = ORIENTED_EDGE ( 'NONE', *, *, #11221, .F. ) ; +#35380 = ADVANCED_FACE ( 'NONE', ( #5128 ), #25344, .F. ) ; +#35382 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35383 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35384 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22192, 'distance_accuracy_value', 'NONE'); +#35386 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16100 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4538, #39963, #5090 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35385 = STYLED_ITEM ( 'NONE', ( #14521 ), #27552 ) ; +#35387 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.499998254703840000, -5.049999999999993600 ) ) ; +#35388 = AXIS2_PLACEMENT_3D ( 'NONE', #24843, #21728, #24976 ) ; +#35389 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35390 = AXIS2_PLACEMENT_3D ( 'NONE', #40201, #20917, #27367 ) ; +#35391 = EDGE_LOOP ( 'NONE', ( #33538, #19860, #33189, #30110 ) ) ; +#35392 = VECTOR ( 'NONE', #30168, 1000.000000000000000 ) ; +#35393 = STYLED_ITEM ( 'NONE', ( #28139 ), #7160 ) ; +#35394 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35395 = ADVANCED_FACE ( 'NONE', ( #26836 ), #17685, .T. ) ; +#35396 = CARTESIAN_POINT ( 'NONE', ( -3.629999999999999900, -1.380001745296125100, -6.699999999999994000 ) ) ; +#35397 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.2339555568811695900 ) ) ; +#35398 = SURFACE_STYLE_FILL_AREA ( #10603 ) ; +#35399 = SURFACE_STYLE_USAGE ( .BOTH. , #22545 ) ; +#35400 = FILL_AREA_STYLE_COLOUR ( '', #20589 ) ; +#35401 = ORIENTED_EDGE ( 'NONE', *, *, #4958, .T. ) ; +#35402 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.03000174529616954700, -6.900000000000000400 ) ) ; +#35403 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35404 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, 10.30000000000000100, -1.250000000000000000 ) ) ; +#35405 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#35406 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35407 = SURFACE_STYLE_USAGE ( .BOTH. , #32281 ) ; +#35408 = ORIENTED_EDGE ( 'NONE', *, *, #6272, .F. ) ; +#35409 = FACE_OUTER_BOUND ( 'NONE', #23612, .T. ) ; +#35410 = VERTEX_POINT ( 'NONE', #33481 ) ; +#35411 = PRESENTATION_STYLE_ASSIGNMENT (( #3832 ) ) ; +#35412 = VECTOR ( 'NONE', #21008, 1000.000000000000000 ) ; +#35413 = FILL_AREA_STYLE ('',( #9536 ) ) ; +#35414 = DIRECTION ( 'NONE', ( -1.548860246407863600E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#35415 = EDGE_CURVE ( 'NONE', #29035, #31259, #31355, .T. ) ; +#35416 = ORIENTED_EDGE ( 'NONE', *, *, #21738, .F. ) ; +#35417 = FILL_AREA_STYLE_COLOUR ( '', #35930 ) ; +#35418 = VERTEX_POINT ( 'NONE', #27686 ) ; +#35419 = EDGE_CURVE ( 'NONE', #31823, #22796, #30341, .T. ) ; +#35420 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35421 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33249 ) ) ; +#35422 = EDGE_CURVE ( 'NONE', #35859, #24529, #40454, .T. ) ; +#35423 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#35424 = EDGE_LOOP ( 'NONE', ( #3824, #2374, #40045, #19308 ) ) ; +#35425 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.07499999999999999700, -1.450395263067831600 ) ) ; +#35426 = PRESENTATION_STYLE_ASSIGNMENT (( #3346 ) ) ; +#35427 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29719 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20600, #36937, #11209 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35428 = ADVANCED_FACE ( 'NONE', ( #14697 ), #40095, .F. ) ; +#35429 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8973, 'distance_accuracy_value', 'NONE'); +#35430 = SURFACE_STYLE_USAGE ( .BOTH. , #12800 ) ; +#35431 = PRESENTATION_STYLE_ASSIGNMENT (( #29813 ) ) ; +#35433 = EDGE_CURVE ( 'NONE', #36502, #37630, #30867, .T. ) ; +#35432 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36251 ) ) ; +#35434 = SURFACE_SIDE_STYLE ('',( #37560 ) ) ; +#35435 = FILL_AREA_STYLE ('',( #32300 ) ) ; +#35436 = CARTESIAN_POINT ( 'NONE', ( -3.245000000007000300, 0.2999999999999999900, -1.599999999999999400 ) ) ; +#35437 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.380001745296165000, -5.000000000000000000 ) ) ; +#35438 = CIRCLE ( 'NONE', #7012, 0.1000000000000002600 ) ; +#35439 = LINE ( 'NONE', #3584, #26863 ) ; +#35440 = SURFACE_SIDE_STYLE ('',( #38794 ) ) ; +#35442 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38938 ), #37595 ) ; +#35441 = AXIS2_PLACEMENT_3D ( 'NONE', #16648, #13100, #308 ) ; +#35443 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33282 ) ) ; +#35444 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37631, 'distance_accuracy_value', 'NONE'); +#35445 = SURFACE_SIDE_STYLE ('',( #5805 ) ) ; +#35446 = ORIENTED_EDGE ( 'NONE', *, *, #14866, .F. ) ; +#35447 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35448 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#35449 = CARTESIAN_POINT ( 'NONE', ( 3.946125812055461000, 0.5380431759455454000, -4.571654027601914200 ) ) ; +#35450 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#35451 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35452 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20092 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24223, #5136, #31257 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35453 = ORIENTED_EDGE ( 'NONE', *, *, #10822, .T. ) ; +#35454 = VECTOR ( 'NONE', #15655, 1000.000000000000000 ) ; +#35455 = PRESENTATION_STYLE_ASSIGNMENT (( #23658 ) ) ; +#35456 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35457 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#35458 = LINE ( 'NONE', #19690, #36951 ) ; +#35459 = VECTOR ( 'NONE', #26879, 1000.000000000000000 ) ; +#35460 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -7.200000000000000200 ) ) ; +#35461 = VERTEX_POINT ( 'NONE', #37289 ) ; +#35462 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5037, 'distance_accuracy_value', 'NONE'); +#35463 = VECTOR ( 'NONE', #37896, 1000.000000000000000 ) ; +#35464 = VERTEX_POINT ( 'NONE', #17955 ) ; +#35465 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35466 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.6199999999999846700, -5.199999999999999300 ) ) ; +#35467 = CARTESIAN_POINT ( 'NONE', ( -2.995000000000000100, -0.2999999999999999900, 12.42614000000000000 ) ) ; +#35468 = CARTESIAN_POINT ( 'NONE', ( 4.721498212947777200, -1.009999999999998700, -6.861124800398366500 ) ) ; +#35469 = EDGE_LOOP ( 'NONE', ( #29683, #16596, #25425 ) ) ; +#35470 = VECTOR ( 'NONE', #5490, 1000.000000000000000 ) ; +#35471 = ORIENTED_EDGE ( 'NONE', *, *, #32515, .F. ) ; +#35472 = VECTOR ( 'NONE', #16046, 1000.000000000000000 ) ; +#35473 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#35474 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#35475 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid6', #24659 ) ; +#35476 = EDGE_CURVE ( 'NONE', #30056, #41785, #25812, .T. ) ; +#35477 = SURFACE_STYLE_FILL_AREA ( #8116 ) ; +#35478 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#35479 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35480 = PLANE ( 'NONE', #29595 ) ; +#35481 = EDGE_CURVE ( 'NONE', #32314, #14983, #19261, .T. ) ; +#35482 = AXIS2_PLACEMENT_3D ( 'NONE', #27903, #5709, #12040 ) ; +#35483 = ORIENTED_EDGE ( 'NONE', *, *, #37385, .T. ) ; +#35484 = DIRECTION ( 'NONE', ( 2.628368902995161200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#35485 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#35486 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#35487 = AXIS2_PLACEMENT_3D ( 'NONE', #10476, #16840, #23354 ) ; +#35488 = ORIENTED_EDGE ( 'NONE', *, *, #9873, .F. ) ; +#35489 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#35490 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14553 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1340, #27282, #14299 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35491 = CARTESIAN_POINT ( 'NONE', ( -3.095000000000000200, -0.07499999999999999700, 0.0000000000000000000 ) ) ; +#35492 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#35494 = SURFACE_STYLE_FILL_AREA ( #13002 ) ; +#35493 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.1000000000000147300, -1.949999999999999500 ) ) ; +#35495 = LINE ( 'NONE', #1411, #21904 ) ; +#35496 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35497 = VERTEX_POINT ( 'NONE', #33765 ) ; +#35498 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23051 ), #31949 ) ; +#35499 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#35500 = STYLED_ITEM ( 'NONE', ( #27979 ), #4844 ) ; +#35501 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35502 = FILL_AREA_STYLE ('',( #12865 ) ) ; +#35503 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#35504 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.056601140521967900E-031 ) ) ; +#35506 = EDGE_CURVE ( 'NONE', #27855, #2626, #1088, .T. ) ; +#35505 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10038 ) ) ; +#35507 = ORIENTED_EDGE ( 'NONE', *, *, #37753, .T. ) ; +#35508 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000800, -2.322941965694886000, -1.250000000000000000 ) ) ; +#35509 = LINE ( 'NONE', #21199, #28918 ) ; +#35510 = LINE ( 'NONE', #4928, #26936 ) ; +#35511 = ORIENTED_EDGE ( 'NONE', *, *, #15725, .T. ) ; +#35512 = PRESENTATION_STYLE_ASSIGNMENT (( #27117 ) ) ; +#35513 = CARTESIAN_POINT ( 'NONE', ( -3.629999999999999900, -1.499998254703818900, -6.699999999999994000 ) ) ; +#35514 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#35515 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18381, 'distance_accuracy_value', 'NONE'); +#35516 = VECTOR ( 'NONE', #8906, 1000.000000000000200 ) ; +#35518 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30308 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18183, #40465, #1824 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35517 = AXIS2_PLACEMENT_3D ( 'NONE', #5813, #15420, #34906 ) ; +#35519 = FILL_AREA_STYLE ('',( #34670 ) ) ; +#35520 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#35521 = VECTOR ( 'NONE', #9157, 1000.000000000000000 ) ; +#35522 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35523 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#35524 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -500000.0000000000600, -2.594459358691027600 ) ) ; +#35525 = ORIENTED_EDGE ( 'NONE', *, *, #13019, .F. ) ; +#35526 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.2999999999999999900, -0.2498427124746000500 ) ) ; +#35527 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39830, 'distance_accuracy_value', 'NONE'); +#35528 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#35529 = DIRECTION ( 'NONE', ( -4.336808689942020900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#35530 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#35531 = ORIENTED_EDGE ( 'NONE', *, *, #22547, .F. ) ; +#35532 = FACE_OUTER_BOUND ( 'NONE', #7981, .T. ) ; +#35533 = ORIENTED_EDGE ( 'NONE', *, *, #36787, .T. ) ; +#35534 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -2.322941965694886000, -1.250000000000000000 ) ) ; +#35535 = EDGE_LOOP ( 'NONE', ( #36059, #5017, #8033, #34710 ) ) ; +#35536 = PLANE ( 'NONE', #37098 ) ; +#35537 = EDGE_CURVE ( 'NONE', #32105, #350, #72, .T. ) ; +#35538 = ORIENTED_EDGE ( 'NONE', *, *, #22274, .T. ) ; +#35539 = ORIENTED_EDGE ( 'NONE', *, *, #39247, .F. ) ; +#35540 = CARTESIAN_POINT ( 'NONE', ( 2.945000000000000700, -0.6500000000000003600, -3.300000000000000300 ) ) ; +#35541 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#35542 = EDGE_CURVE ( 'NONE', #7298, #3001, #20237, .T. ) ; +#35543 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40092 ), #39852 ) ; +#35544 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#35545 = SURFACE_STYLE_FILL_AREA ( #7599 ) ; +#35546 = ORIENTED_EDGE ( 'NONE', *, *, #25429, .T. ) ; +#35547 = FACE_OUTER_BOUND ( 'NONE', #18107, .T. ) ; +#35548 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35549 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35550 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #12330, #38171, #5433, #15186 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#35551 = LINE ( 'NONE', #28698, #40063 ) ; +#35552 = ADVANCED_FACE ( 'NONE', ( #34886 ), #14971, .F. ) ; +#35553 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#35554 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, 2.322941965694886000, -1.250000000000000000 ) ) ; +#35555 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -1.499998254703836900, -5.449999999999994000 ) ) ; +#35556 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19054 ), #10345 ) ; +#35557 = SURFACE_STYLE_USAGE ( .BOTH. , #6585 ) ; +#35558 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#35560 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37470 ), #29609 ) ; +#35559 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27436 ), #37712 ) ; +#35563 = EDGE_CURVE ( 'NONE', #18780, #4960, #25307, .T. ) ; +#35562 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#35561 = AXIS2_PLACEMENT_3D ( 'NONE', #41230, #18792, #12253 ) ; +#35564 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#35565 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35566 = ORIENTED_EDGE ( 'NONE', *, *, #19405, .T. ) ; +#35568 = AXIS2_PLACEMENT_3D ( 'NONE', #17700, #27411, #2442 ) ; +#35567 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15167 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15285, #15134, #2182 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35569 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#35570 = SURFACE_STYLE_FILL_AREA ( #22181 ) ; +#35571 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35572 = VECTOR ( 'NONE', #22585, 1000.000000000000000 ) ; +#35573 = VERTEX_POINT ( 'NONE', #2430 ) ; +#35574 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.5300017452961689500, -3.999999999999998200 ) ) ; +#35575 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.4300017452961691400, -6.900000000000000400 ) ) ; +#35576 = ORIENTED_EDGE ( 'NONE', *, *, #6264, .F. ) ; +#35578 = VERTEX_POINT ( 'NONE', #24755 ) ; +#35577 = FACE_OUTER_BOUND ( 'NONE', #39895, .T. ) ; +#35579 = ORIENTED_EDGE ( 'NONE', *, *, #23434, .F. ) ; +#35580 = FILL_AREA_STYLE ('',( #15791 ) ) ; +#35581 = CIRCLE ( 'NONE', #9056, 0.3600000000000078700 ) ; +#35582 = CIRCLE ( 'NONE', #5734, 0.4000000000000001900 ) ; +#35583 = FILL_AREA_STYLE ('',( #38808 ) ) ; +#35584 = PRESENTATION_STYLE_ASSIGNMENT (( #32750 ) ) ; +#35585 = ADVANCED_FACE ( 'NONE', ( #29809 ), #15262, .F. ) ; +#35586 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#35587 = PRESENTATION_STYLE_ASSIGNMENT (( #31390 ) ) ; +#35588 = LINE ( 'NONE', #3416, #27014 ) ; +#35589 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -9.268445570935432200E-016 ) ) ; +#35590 = SURFACE_SIDE_STYLE ('',( #9200 ) ) ; +#35591 = LINE ( 'NONE', #24048, #17931 ) ; +#35592 = EDGE_CURVE ( 'NONE', #2782, #3042, #28310, .T. ) ; +#35593 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35594 = PRESENTATION_STYLE_ASSIGNMENT (( #28649 ) ) ; +#35595 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#35596 = ADVANCED_FACE ( 'NONE', ( #8557 ), #31347, .F. ) ; +#35597 = PLANE ( 'NONE', #3436 ) ; +#35598 = FILL_AREA_STYLE_COLOUR ( '', #5692 ) ; +#35599 = ORIENTED_EDGE ( 'NONE', *, *, #15020, .T. ) ; +#35600 = EDGE_CURVE ( 'NONE', #36502, #21382, #12604, .T. ) ; +#35601 = FILL_AREA_STYLE_COLOUR ( '', #40551 ) ; +#35602 = LINE ( 'NONE', #26019, #21965 ) ; +#35603 = ORIENTED_EDGE ( 'NONE', *, *, #11580, .T. ) ; +#35604 = AXIS2_PLACEMENT_3D ( 'NONE', #18739, #38330, #21994 ) ; +#35605 = LINE ( 'NONE', #5022, #10327 ) ; +#35606 = EDGE_LOOP ( 'NONE', ( #13900, #4342, #20103, #20906 ) ) ; +#35607 = ORIENTED_EDGE ( 'NONE', *, *, #28105, .T. ) ; +#35608 = CARTESIAN_POINT ( 'NONE', ( -2.149999999999999900, -1.139998254717353500, -6.299996877890552400 ) ) ; +#35609 = PRESENTATION_STYLE_ASSIGNMENT (( #10882 ) ) ; +#35610 = CARTESIAN_POINT ( 'NONE', ( -3.116174012466512700, 0.3499999999999999800, -1.624276681579788200 ) ) ; +#35611 = ORIENTED_EDGE ( 'NONE', *, *, #28414, .T. ) ; +#35612 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#35613 = AXIS2_PLACEMENT_3D ( 'NONE', #14670, #14803, #27523 ) ; +#35614 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28460, 'distance_accuracy_value', 'NONE'); +#35615 = CARTESIAN_POINT ( 'NONE', ( -0.2500000000000036600, 0.4300017452961686900, -6.549999999999999800 ) ) ; +#35617 = EDGE_CURVE ( 'NONE', #30870, #40523, #40411, .T. ) ; +#35616 = STYLED_ITEM ( 'NONE', ( #24587 ), #36886 ) ; +#35618 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#35619 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.08000174529616772800, -7.150000000000001200 ) ) ; +#35620 = VECTOR ( 'NONE', #16816, 1000.000000000000000 ) ; +#35621 = FILL_AREA_STYLE_COLOUR ( '', #17201 ) ; +#35622 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#35624 = STYLED_ITEM ( 'NONE', ( #35625 ), #2525 ) ; +#35623 = STYLED_ITEM ( 'NONE', ( #23110 ), #27513 ) ; +#35625 = PRESENTATION_STYLE_ASSIGNMENT (( #40572 ) ) ; +#35626 = VECTOR ( 'NONE', #17826, 1000.000000000000000 ) ; +#35627 = ORIENTED_EDGE ( 'NONE', *, *, #21486, .F. ) ; +#35628 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31845 ), #7452 ) ; +#35629 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#35630 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35631 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32360, 'distance_accuracy_value', 'NONE'); +#35632 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244513800E-016 ) ) ; +#35633 = ADVANCED_FACE ( 'NONE', ( #35903 ), #35014, .F. ) ; +#35634 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#35635 = SURFACE_STYLE_FILL_AREA ( #36870 ) ; +#35636 = FILL_AREA_STYLE_COLOUR ( '', #9318 ) ; +#35637 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35638 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35639 = ORIENTED_EDGE ( 'NONE', *, *, #38047, .T. ) ; +#35640 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -1.994459358809384600 ) ) ; +#35641 = ORIENTED_EDGE ( 'NONE', *, *, #27300, .T. ) ; +#35642 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#35643 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35644 = ORIENTED_EDGE ( 'NONE', *, *, #1321, .T. ) ; +#35645 = LINE ( 'NONE', #38375, #32098 ) ; +#35646 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35647 = SURFACE_STYLE_USAGE ( .BOTH. , #38593 ) ; +#35648 = VECTOR ( 'NONE', #34498, 1000.000000000000000 ) ; +#35649 = VERTEX_POINT ( 'NONE', #3231 ) ; +#35650 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35651 = ORIENTED_EDGE ( 'NONE', *, *, #26778, .F. ) ; +#35652 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3979, 'distance_accuracy_value', 'NONE'); +#35653 = EDGE_CURVE ( 'NONE', #37869, #17598, #34844, .T. ) ; +#35654 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#35655 = EDGE_CURVE ( 'NONE', #32548, #32157, #6543, .T. ) ; +#35656 = CIRCLE ( 'NONE', #21425, 0.2999999999999999300 ) ; +#35657 = ORIENTED_EDGE ( 'NONE', *, *, #12551, .F. ) ; +#35658 = ORIENTED_EDGE ( 'NONE', *, *, #28657, .T. ) ; +#35659 = EDGE_CURVE ( 'NONE', #27353, #28837, #37867, .T. ) ; +#35660 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #701, 'distance_accuracy_value', 'NONE'); +#35661 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#35662 = SURFACE_STYLE_FILL_AREA ( #8528 ) ; +#35663 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169000, -3.214459358809377500 ) ) ; +#35664 = STYLED_ITEM ( 'NONE', ( #38875 ), #16940 ) ; +#35665 = PRESENTATION_STYLE_ASSIGNMENT (( #26194 ) ) ; +#35666 = VERTEX_POINT ( 'NONE', #6201 ) ; +#35667 = CARTESIAN_POINT ( 'NONE', ( 14.52500000000000900, -1.009999999999966500, -6.861124800398366500 ) ) ; +#35668 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#35669 = EDGE_CURVE ( 'NONE', #17958, #16811, #26251, .T. ) ; +#35670 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35671 = FILL_AREA_STYLE ('',( #12630 ) ) ; +#35672 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37240 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17799, #11542, #30767 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35673 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35674 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16370 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14012, #5088, #24317 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35675 = CARTESIAN_POINT ( 'NONE', ( -14.52500000000000900, -1.009999999999966500, -6.861124800398366500 ) ) ; +#35676 = FILL_AREA_STYLE ('',( #32409 ) ) ; +#35679 = EDGE_CURVE ( 'NONE', #34162, #38950, #21217, .T. ) ; +#35678 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36488 ) ) ; +#35677 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35680 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#35681 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35682 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#35683 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35684 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6751 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20769, #39504, #27108 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35685 = FILL_AREA_STYLE ('',( #41732 ) ) ; +#35686 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35687 = AXIS2_PLACEMENT_3D ( 'NONE', #36407, #23264, #22976 ) ; +#35688 = VERTEX_POINT ( 'NONE', #19353 ) ; +#35689 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#35690 = VECTOR ( 'NONE', #29915, 1000.000000000000000 ) ; +#35691 = AXIS2_PLACEMENT_3D ( 'NONE', #18318, #26932, #11636 ) ; +#35692 = FILL_AREA_STYLE_COLOUR ( '', #15694 ) ; +#35693 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, -0.07499999999999999700, 0.4433610521025209700 ) ) ; +#35694 = ORIENTED_EDGE ( 'NONE', *, *, #34979, .T. ) ; +#35696 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41382 ) ) ; +#35695 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 0.6800017452961693000, -3.999999999999997300 ) ) ; +#35697 = ORIENTED_EDGE ( 'NONE', *, *, #19571, .F. ) ; +#35698 = EDGE_LOOP ( 'NONE', ( #13109, #28315, #27249, #2486 ) ) ; +#35699 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35700 = SURFACE_STYLE_FILL_AREA ( #5227 ) ; +#35701 = SURFACE_STYLE_FILL_AREA ( #20016 ) ; +#35702 = PLANE ( 'NONE', #31540 ) ; +#35703 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.2999999999999999900, -0.2498427124745999900 ) ) ; +#35704 = ORIENTED_EDGE ( 'NONE', *, *, #1303, .T. ) ; +#35705 = DIRECTION ( 'NONE', ( -6.056601140521967900E-031, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#35706 = CONICAL_SURFACE ( 'NONE', #25387, 0.3000000000000001000, 0.3490658503988666700 ) ; +#35707 = VECTOR ( 'NONE', #27079, 1000.000000000000000 ) ; +#35708 = SURFACE_STYLE_FILL_AREA ( #14195 ) ; +#35709 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17708, 'distance_accuracy_value', 'NONE'); +#35710 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#35711 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.380001745296141500, -5.449999999999994000 ) ) ; +#35712 = FILL_AREA_STYLE ('',( #16502 ) ) ; +#35713 = SURFACE_SIDE_STYLE ('',( #40298 ) ) ; +#35714 = PRESENTATION_STYLE_ASSIGNMENT (( #6951 ) ) ; +#35715 = EDGE_CURVE ( 'NONE', #12635, #1016, #22208, .T. ) ; +#35716 = ORIENTED_EDGE ( 'NONE', *, *, #1421, .F. ) ; +#35717 = LINE ( 'NONE', #32383, #30652 ) ; +#35718 = CARTESIAN_POINT ( 'NONE', ( 1.486602540378444600, 1.630001745296169500, -1.700000000000002000 ) ) ; +#35719 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.630424214906980300, -1.149999999999999900 ) ) ; +#35720 = EDGE_CURVE ( 'NONE', #1007, #30186, #29268, .T. ) ; +#35721 = ORIENTED_EDGE ( 'NONE', *, *, #35917, .F. ) ; +#35722 = SURFACE_STYLE_USAGE ( .BOTH. , #32182 ) ; +#35723 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24939 ), #3018 ) ; +#35724 = VERTEX_POINT ( 'NONE', #15653 ) ; +#35725 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, 0.0000000000000000000 ) ) ; +#35726 = ORIENTED_EDGE ( 'NONE', *, *, #25606, .T. ) ; +#35727 = ORIENTED_EDGE ( 'NONE', *, *, #17618, .T. ) ; +#35728 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35729 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15448 ), #19237 ) ; +#35730 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#35731 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#35732 = VECTOR ( 'NONE', #14326, 1000.000000000000000 ) ; +#35733 = STYLED_ITEM ( 'NONE', ( #12430 ), #76 ) ; +#35734 = CYLINDRICAL_SURFACE ( 'NONE', #29171, 0.1000000000000001600 ) ; +#35735 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.3500000000000000300, -1.249999999999999800 ) ) ; +#35736 = VERTEX_POINT ( 'NONE', #22168 ) ; +#35737 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5940 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22226, #12442, #25612 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35738 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#35739 = VERTEX_POINT ( 'NONE', #9416 ) ; +#35741 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1150 ), #10537 ) ; +#35740 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15692 ), #29231 ) ; +#35742 = SURFACE_STYLE_FILL_AREA ( #10229 ) ; +#35745 = EDGE_CURVE ( 'NONE', #25814, #28277, #1524, .T. ) ; +#35744 = FILL_AREA_STYLE_COLOUR ( '', #19389 ) ; +#35743 = STYLED_ITEM ( 'NONE', ( #37404 ), #34287 ) ; +#35746 = STYLED_ITEM ( 'NONE', ( #24610 ), #8779 ) ; +#35747 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35748 = FILL_AREA_STYLE ('',( #22215 ) ) ; +#35749 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#35750 = ADVANCED_FACE ( 'NONE', ( #17681 ), #22313, .T. ) ; +#35751 = AXIS2_PLACEMENT_3D ( 'NONE', #4463, #10944, #33425 ) ; +#35752 = FILL_AREA_STYLE_COLOUR ( '', #36689 ) ; +#35753 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid26', #37587 ) ; +#35754 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35755 = CARTESIAN_POINT ( 'NONE', ( 3.237718385397979400, -0.2999999999999999900, 0.7155313145785915400 ) ) ; +#35756 = VECTOR ( 'NONE', #16437, 1000.000000000000000 ) ; +#35757 = FILL_AREA_STYLE_COLOUR ( '', #15864 ) ; +#35758 = EDGE_LOOP ( 'NONE', ( #7712, #29075, #36356, #19716 ) ) ; +#35759 = DIRECTION ( 'NONE', ( 4.336808689942020900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#35760 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#35761 = ORIENTED_EDGE ( 'NONE', *, *, #25773, .T. ) ; +#35762 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35763 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35764 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35765 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.926865043770300100E-015, 0.0000000000000000000 ) ) ; +#35766 = SURFACE_STYLE_USAGE ( .BOTH. , #17151 ) ; +#35767 = ORIENTED_EDGE ( 'NONE', *, *, #31139, .T. ) ; +#35768 = VECTOR ( 'NONE', #8744, 1000.000000000000000 ) ; +#35769 = ORIENTED_EDGE ( 'NONE', *, *, #36767, .T. ) ; +#35770 = FACE_OUTER_BOUND ( 'NONE', #24525, .T. ) ; +#35771 = FILL_AREA_STYLE ('',( #35636 ) ) ; +#35772 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35773 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#35774 = PRESENTATION_STYLE_ASSIGNMENT (( #23377 ) ) ; +#35775 = VECTOR ( 'NONE', #23273, 1000.000000000000000 ) ; +#35776 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#35777 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, 0.4300017452961686900, -6.550000000000000700 ) ) ; +#35778 = SURFACE_STYLE_FILL_AREA ( #4917 ) ; +#35779 = CYLINDRICAL_SURFACE ( 'NONE', #29739, 0.05000000000000012800 ) ; +#35780 = PRESENTATION_STYLE_ASSIGNMENT (( #31291 ) ) ; +#35781 = VERTEX_POINT ( 'NONE', #24562 ) ; +#35782 = PLANE ( 'NONE', #38977 ) ; +#35783 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35784 = VERTEX_POINT ( 'NONE', #38016 ) ; +#35785 = ORIENTED_EDGE ( 'NONE', *, *, #19037, .F. ) ; +#35786 = EDGE_CURVE ( 'NONE', #23498, #24232, #25272, .T. ) ; +#35787 = FACE_OUTER_BOUND ( 'NONE', #8428, .T. ) ; +#35788 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35789 = CARTESIAN_POINT ( 'NONE', ( -3.040693382414519300, 0.3244836197218135500, -1.274483619721813700 ) ) ; +#35790 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, 0.4300017452961686900, -6.450000000000000200 ) ) ; +#35791 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0002094395087002862800, 0.9999999780675458100 ) ) ; +#35792 = EDGE_CURVE ( 'NONE', #41583, #4189, #32801, .T. ) ; +#35793 = STYLED_ITEM ( 'NONE', ( #24590 ), #10719 ) ; +#35794 = LINE ( 'NONE', #15232, #38284 ) ; +#35795 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35796 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#35797 = ORIENTED_EDGE ( 'NONE', *, *, #10569, .F. ) ; +#35798 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35799 = ADVANCED_FACE ( 'NONE', ( #6030 ), #9526, .T. ) ; +#35800 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35801 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #867, 'distance_accuracy_value', 'NONE'); +#35802 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30862 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16048, #35681, #38903 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35803 = LINE ( 'NONE', #33163, #26185 ) ; +#35804 = PLANE ( 'NONE', #12896 ) ; +#35806 = LINE ( 'NONE', #15736, #8977 ) ; +#35805 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9779 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31434, #25640, #35383 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35807 = ORIENTED_EDGE ( 'NONE', *, *, #3066, .T. ) ; +#35808 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10811 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33438, #30327, #17494 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35809 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35810 = ADVANCED_FACE ( 'NONE', ( #23695 ), #13051, .T. ) ; +#35811 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, -0.07499999999999999700, 0.01000000000000000000 ) ) ; +#35812 = AXIS2_PLACEMENT_3D ( 'NONE', #35661, #16313, #19590 ) ; +#35813 = DIRECTION ( 'NONE', ( -3.872150616019659000E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35814 = ORIENTED_EDGE ( 'NONE', *, *, #31685, .F. ) ; +#35816 = EDGE_CURVE ( 'NONE', #28802, #5970, #37356, .T. ) ; +#35815 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31474 ), #34447 ) ; +#35817 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.139998254717364200, -5.049996877890552400 ) ) ; +#35818 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35819 = ORIENTED_EDGE ( 'NONE', *, *, #36295, .F. ) ; +#35820 = ORIENTED_EDGE ( 'NONE', *, *, #3418, .T. ) ; +#35821 = VERTEX_POINT ( 'NONE', #24894 ) ; +#35822 = CIRCLE ( 'NONE', #22582, 0.09999999999999982500 ) ; +#35823 = FACE_OUTER_BOUND ( 'NONE', #2408, .T. ) ; +#35824 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.07499999999999998300, -0.008031980578130919200 ) ) ; +#35826 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4672 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32887, #13534, #36297 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35825 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17146 ) ) ; +#35827 = FACE_OUTER_BOUND ( 'NONE', #25843, .T. ) ; +#35828 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35829 = LINE ( 'NONE', #5513, #1479 ) ; +#35830 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10990, 'distance_accuracy_value', 'NONE'); +#35831 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.3300017452961689900, -6.325000000000000200 ) ) ; +#35832 = CARTESIAN_POINT ( 'NONE', ( 2.945000000000000700, 0.5999999999999999800, -1.930000000000000600 ) ) ; +#35833 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.480001745296165600, -1.899999999999999700 ) ) ; +#35834 = LINE ( 'NONE', #21299, #19676 ) ; +#35835 = ORIENTED_EDGE ( 'NONE', *, *, #2922, .T. ) ; +#35836 = SURFACE_STYLE_FILL_AREA ( #14363 ) ; +#35837 = EDGE_LOOP ( 'NONE', ( #37907, #20710, #23637, #24962 ) ) ; +#35838 = EDGE_LOOP ( 'NONE', ( #32419, #19646, #7755, #752 ) ) ; +#35839 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #10783, #24076, #5414, #37342, #5268, #21412 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.001125931984534281500, 0.001222656043408068100, 0.001319380102281854600 ), + .UNSPECIFIED. ) ; +#35840 = SURFACE_STYLE_USAGE ( .BOTH. , #19615 ) ; +#35841 = FILL_AREA_STYLE ('',( #406 ) ) ; +#35842 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#35843 = ORIENTED_EDGE ( 'NONE', *, *, #23967, .T. ) ; +#35844 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35845 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#35846 = CARTESIAN_POINT ( 'NONE', ( 3.429999999999999700, -1.380001745296125100, -6.699999999999994000 ) ) ; +#35847 = FACE_OUTER_BOUND ( 'NONE', #36116, .T. ) ; +#35848 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#35849 = PLANE ( 'NONE', #9161 ) ; +#35850 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#35851 = FACE_OUTER_BOUND ( 'NONE', #35005, .T. ) ; +#35852 = EDGE_CURVE ( 'NONE', #3147, #24143, #35829, .T. ) ; +#35853 = ADVANCED_FACE ( 'NONE', ( #11560 ), #36453, .F. ) ; +#35854 = PRESENTATION_STYLE_ASSIGNMENT (( #10881 ) ) ; +#35855 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35856 = SURFACE_STYLE_USAGE ( .BOTH. , #39344 ) ; +#35857 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.499998254703826200, -6.699999999999994000 ) ) ; +#35858 = EDGE_CURVE ( 'NONE', #1867, #33254, #41868, .T. ) ; +#35859 = VERTEX_POINT ( 'NONE', #18385 ) ; +#35860 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.499998254703826200, -6.699999999999994000 ) ) ; +#35861 = ORIENTED_EDGE ( 'NONE', *, *, #572, .T. ) ; +#35862 = ORIENTED_EDGE ( 'NONE', *, *, #28439, .F. ) ; +#35863 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.949998254703821000, -5.767712434446769600 ) ) ; +#35864 = LINE ( 'NONE', #41057, #30300 ) ; +#35865 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3910 ) ) ; +#35866 = LINE ( 'NONE', #27406, #30786 ) ; +#35867 = CIRCLE ( 'NONE', #25494, 0.1000000000000000500 ) ; +#35868 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34429, 'distance_accuracy_value', 'NONE'); +#35869 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35870 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35871 = VERTEX_POINT ( 'NONE', #34880 ) ; +#35872 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.445602896647293600E-014 ) ) ; +#35873 = CARTESIAN_POINT ( 'NONE', ( -3.342513005636280600, -0.07499999999999999700, 0.4561555288904723900 ) ) ; +#35874 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.2800017452961688400, -5.250000000000000000 ) ) ; +#35875 = VERTEX_POINT ( 'NONE', #25566 ) ; +#35876 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19922 ) ) ; +#35877 = SURFACE_SIDE_STYLE ('',( #25142 ) ) ; +#35878 = FILL_AREA_STYLE ('',( #26121 ) ) ; +#35879 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4313, 'distance_accuracy_value', 'NONE'); +#35881 = EDGE_CURVE ( 'NONE', #11687, #4020, #9998, .T. ) ; +#35880 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31532 ) ) ; +#35882 = EDGE_LOOP ( 'NONE', ( #19739, #13568, #13538, #3394 ) ) ; +#35883 = VECTOR ( 'NONE', #27212, 1000.000000000000000 ) ; +#35884 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35885 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40245 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5344, #15099, #37688 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#35886 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35887 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#35888 = CARTESIAN_POINT ( 'NONE', ( -3.179314575050761900, -0.5999999999999992000, -3.279289321881345000 ) ) ; +#35889 = VECTOR ( 'NONE', #1056, 1000.000000000000000 ) ; +#35890 = FACE_OUTER_BOUND ( 'NONE', #9739, .T. ) ; +#35891 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#35892 = ORIENTED_EDGE ( 'NONE', *, *, #33377, .F. ) ; +#35893 = CARTESIAN_POINT ( 'NONE', ( 3.332298852287715700, -0.2999999198035229700, -1.600000000000000300 ) ) ; +#35894 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.097720492815727200E-016 ) ) ; +#35895 = ORIENTED_EDGE ( 'NONE', *, *, #22909, .T. ) ; +#35896 = LINE ( 'NONE', #25232, #38385 ) ; +#35897 = CARTESIAN_POINT ( 'NONE', ( -4.669999999999870300, -0.2799999999999974200, -0.2339555568811697600 ) ) ; +#35898 = SURFACE_SIDE_STYLE ('',( #10673 ) ) ; +#35899 = ORIENTED_EDGE ( 'NONE', *, *, #13236, .T. ) ; +#35900 = LINE ( 'NONE', #18480, #34354 ) ; +#35901 = VECTOR ( 'NONE', #32081, 1000.000000000000000 ) ; +#35902 = SURFACE_STYLE_USAGE ( .BOTH. , #38975 ) ; +#35903 = FACE_OUTER_BOUND ( 'NONE', #2463, .T. ) ; +#35904 = DIRECTION ( 'NONE', ( 0.9271838539784911200, -0.0000000000000000000, 0.3746065948719964300 ) ) ; +#35905 = FILL_AREA_STYLE ('',( #28703 ) ) ; +#35906 = ORIENTED_EDGE ( 'NONE', *, *, #13261, .F. ) ; +#35907 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35908 = CARTESIAN_POINT ( 'NONE', ( -0.1500000000000000200, -1.380001745296135700, -6.699999999999994000 ) ) ; +#35909 = EDGE_CURVE ( 'NONE', #11480, #6906, #33309, .T. ) ; +#35910 = ORIENTED_EDGE ( 'NONE', *, *, #9589, .F. ) ; +#35911 = ORIENTED_EDGE ( 'NONE', *, *, #428, .F. ) ; +#35912 = CARTESIAN_POINT ( 'NONE', ( 0.2500000000000030500, -2.031000000000001500, -6.549999999999999800 ) ) ; +#35913 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#35914 = EDGE_CURVE ( 'NONE', #41617, #34911, #36830, .T. ) ; +#35915 = ORIENTED_EDGE ( 'NONE', *, *, #19346, .F. ) ; +#35916 = SURFACE_STYLE_USAGE ( .BOTH. , #39415 ) ; +#35917 = EDGE_CURVE ( 'NONE', #34759, #1063, #16119, .T. ) ; +#35918 = SURFACE_STYLE_FILL_AREA ( #24406 ) ; +#35919 = SURFACE_STYLE_FILL_AREA ( #22802 ) ; +#35920 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#35921 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35922 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521965300E-031 ) ) ; +#35923 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35924 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.499998254703826200, -6.299999999999993600 ) ) ; +#35925 = AXIS2_PLACEMENT_3D ( 'NONE', #3786, #39096, #19797 ) ; +#35926 = LINE ( 'NONE', #11875, #25334 ) ; +#35927 = PRESENTATION_STYLE_ASSIGNMENT (( #2659 ) ) ; +#35928 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.08000174529616838100, -7.350000000000000500 ) ) ; +#35929 = AXIS2_PLACEMENT_3D ( 'NONE', #11888, #28158, #21691 ) ; +#35930 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35931 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.380001745296130000, -4.781671842700004200 ) ) ; +#35932 = EDGE_LOOP ( 'NONE', ( #13035, #10712 ) ) ; +#35935 = EDGE_CURVE ( 'NONE', #24208, #34849, #10539, .T. ) ; +#35934 = SURFACE_STYLE_USAGE ( .BOTH. , #29406 ) ; +#35933 = AXIS2_PLACEMENT_3D ( 'NONE', #14961, #24595, #24296 ) ; +#35936 = SURFACE_STYLE_USAGE ( .BOTH. , #3846 ) ; +#35937 = VERTEX_POINT ( 'NONE', #15930 ) ; +#35938 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35939 = FILL_AREA_STYLE ('',( #15478 ) ) ; +#35940 = ORIENTED_EDGE ( 'NONE', *, *, #37023, .F. ) ; +#35941 = FACE_OUTER_BOUND ( 'NONE', #2275, .T. ) ; +#35942 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35944 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32140 ) ) ; +#35943 = AXIS2_PLACEMENT_3D ( 'NONE', #7057, #1191, #14011 ) ; +#35945 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35946 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20250 ), #40241 ) ; +#35947 = VECTOR ( 'NONE', #4099, 1000.000000000000000 ) ; +#35948 = FACE_OUTER_BOUND ( 'NONE', #36544, .T. ) ; +#35949 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31606 ), #27844 ) ; +#35950 = ORIENTED_EDGE ( 'NONE', *, *, #41061, .F. ) ; +#35951 = ORIENTED_EDGE ( 'NONE', *, *, #26317, .F. ) ; +#35952 = ORIENTED_EDGE ( 'NONE', *, *, #7923, .T. ) ; +#35953 = STYLED_ITEM ( 'NONE', ( #28109 ), #7640 ) ; +#35954 = SURFACE_STYLE_USAGE ( .BOTH. , #13316 ) ; +#35955 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169300, -2.904459358809381000 ) ) ; +#35956 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.3300017452961694400, -4.975000000000000500 ) ) ; +#35957 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.543290588833364800E-015, 0.0000000000000000000 ) ) ; +#35958 = ORIENTED_EDGE ( 'NONE', *, *, #27418, .T. ) ; +#35959 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35960 = SURFACE_SIDE_STYLE ('',( #2268 ) ) ; +#35961 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#35962 = EDGE_LOOP ( 'NONE', ( #13982, #28877, #18282, #14496 ) ) ; +#35963 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#35964 = LINE ( 'NONE', #35526, #20838 ) ; +#35965 = CIRCLE ( 'NONE', #33080, 0.1000000000000002600 ) ; +#35966 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -1.499998254703827100, -5.049999999999993600 ) ) ; +#35967 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.478176394252580200E-017, -6.082356018693180500E-031 ) ) ; +#35968 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35969 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35970 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#35971 = ADVANCED_FACE ( 'NONE', ( #38834 ), #38523, .F. ) ; +#35972 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#35973 = VERTEX_POINT ( 'NONE', #32593 ) ; +#35974 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35975 = PRESENTATION_STYLE_ASSIGNMENT (( #24282 ) ) ; +#35976 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.499998254703822900, -6.699999999999994000 ) ) ; +#35977 = LINE ( 'NONE', #33475, #5074 ) ; +#35978 = EDGE_CURVE ( 'NONE', #15253, #1007, #39322, .T. ) ; +#35979 = FILL_AREA_STYLE_COLOUR ( '', #15961 ) ; +#35980 = ORIENTED_EDGE ( 'NONE', *, *, #26064, .T. ) ; +#35981 = AXIS2_PLACEMENT_3D ( 'NONE', #35619, #6517, #22621 ) ; +#35982 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#35983 = EDGE_CURVE ( 'NONE', #31605, #37424, #25696, .T. ) ; +#35984 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#35985 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35986 = FILL_AREA_STYLE_COLOUR ( '', #27607 ) ; +#35987 = ORIENTED_EDGE ( 'NONE', *, *, #35422, .F. ) ; +#35988 = PRESENTATION_STYLE_ASSIGNMENT (( #4867 ) ) ; +#35989 = AXIS2_PLACEMENT_3D ( 'NONE', #38716, #19562, #26168 ) ; +#35990 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#35991 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20052 ), #38130 ) ; +#35993 = EDGE_CURVE ( 'NONE', #24793, #3977, #15065, .T. ) ; +#35992 = AXIS2_PLACEMENT_3D ( 'NONE', #858, #29888, #4174 ) ; +#35994 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#35995 = ORIENTED_EDGE ( 'NONE', *, *, #30701, .F. ) ; +#35996 = FACE_OUTER_BOUND ( 'NONE', #40429, .T. ) ; +#35997 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#35998 = ORIENTED_EDGE ( 'NONE', *, *, #18418, .F. ) ; +#35999 = LINE ( 'NONE', #13240, #36517 ) ; +#36000 = SURFACE_STYLE_FILL_AREA ( #1005 ) ; +#36001 = PRESENTATION_STYLE_ASSIGNMENT (( #36724 ) ) ; +#36002 = SURFACE_SIDE_STYLE ('',( #3427 ) ) ; +#36004 = AXIS2_PLACEMENT_3D ( 'NONE', #1605, #1465, #11296 ) ; +#36003 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17300 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3718, #29426, #36370 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36005 = FACE_OUTER_BOUND ( 'NONE', #30722, .T. ) ; +#36006 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38899 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9541, #3218, #10 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36007 = SURFACE_STYLE_USAGE ( .BOTH. , #6737 ) ; +#36008 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2742, 'distance_accuracy_value', 'NONE'); +#36009 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37360 ) ) ; +#36010 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000004700, 0.2800017452961689500, -5.150000000000000400 ) ) ; +#36011 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.380001745296165500, -6.900000000000000400 ) ) ; +#36012 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, 0.0000000000000000000 ) ) ; +#36013 = ADVANCED_FACE ( 'NONE', ( #14582 ), #18128, .F. ) ; +#36015 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20888 ), #5684 ) ; +#36014 = VECTOR ( 'NONE', #16321, 1000.000000000000000 ) ; +#36016 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#36017 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36018 = ORIENTED_EDGE ( 'NONE', *, *, #31808, .F. ) ; +#36019 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36020 = FILL_AREA_STYLE ('',( #32330 ) ) ; +#36021 = VERTEX_POINT ( 'NONE', #3357 ) ; +#36022 = ADVANCED_FACE ( 'NONE', ( #29198 ), #305, .F. ) ; +#36023 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#36024 = SURFACE_STYLE_FILL_AREA ( #20208 ) ; +#36025 = VECTOR ( 'NONE', #25355, 1000.000000000000100 ) ; +#36026 = CARTESIAN_POINT ( 'NONE', ( -3.365710678118654100, -0.4464466094067262000, -3.300000000000000700 ) ) ; +#36027 = CIRCLE ( 'NONE', #17935, 0.1000000000000000500 ) ; +#36028 = VERTEX_POINT ( 'NONE', #35863 ) ; +#36029 = ORIENTED_EDGE ( 'NONE', *, *, #2899, .F. ) ; +#36030 = VERTEX_POINT ( 'NONE', #28923 ) ; +#36031 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#36032 = ORIENTED_EDGE ( 'NONE', *, *, #34234, .F. ) ; +#36033 = ORIENTED_EDGE ( 'NONE', *, *, #12373, .F. ) ; +#36034 = EDGE_CURVE ( 'NONE', #25574, #31125, #5451, .T. ) ; +#36035 = SURFACE_STYLE_USAGE ( .BOTH. , #20085 ) ; +#36036 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36037 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11478, 'distance_accuracy_value', 'NONE'); +#36038 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36039 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 7.228014483236708400E-016 ) ) ; +#36040 = LINE ( 'NONE', #8456, #12262 ) ; +#36041 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, 2.322941965694886000, 0.6999999999999999600 ) ) ; +#36042 = EDGE_CURVE ( 'NONE', #33844, #21872, #31754, .T. ) ; +#36043 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22247 ), #7045 ) ; +#36044 = PLANE ( 'NONE', #14776 ) ; +#36045 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36046 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 1.630001745296169700, -1.649999999999999900 ) ) ; +#36047 = STYLED_ITEM ( 'NONE', ( #12676 ), #23070 ) ; +#36048 = CYLINDRICAL_SURFACE ( 'NONE', #16362, 0.3000000000000000400 ) ; +#36049 = SURFACE_STYLE_USAGE ( .BOTH. , #7054 ) ; +#36050 = AXIS2_PLACEMENT_3D ( 'NONE', #19878, #25672, #32693 ) ; +#36051 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36052 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.07499999999999998300, -1.399999999999999900 ) ) ; +#36053 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#36054 = ORIENTED_EDGE ( 'NONE', *, *, #29006, .T. ) ; +#36055 = STYLED_ITEM ( 'NONE', ( #33814 ), #38290 ) ; +#36056 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#36057 = ADVANCED_FACE ( 'NONE', ( #40828 ), #10117, .T. ) ; +#36058 = STYLED_ITEM ( 'NONE', ( #8224 ), #18710 ) ; +#36059 = ORIENTED_EDGE ( 'NONE', *, *, #22481, .F. ) ; +#36062 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22934 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26300, #3403, #26008 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36061 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36060 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5617 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31072, #5098, #30941 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36063 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000000000, 0.3000000000000001600, -1.250000000000000000 ) ) ; +#36064 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -5.075000000000000200 ) ) ; +#36065 = DIRECTION ( 'NONE', ( 6.056601140521966100E-031, -2.020499752019424000E-045, -1.000000000000000000 ) ) ; +#36066 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#36067 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#36068 = LINE ( 'NONE', #1040, #20443 ) ; +#36069 = LINE ( 'NONE', #15174, #9228 ) ; +#36071 = EDGE_CURVE ( 'NONE', #39080, #129, #36315, .T. ) ; +#36070 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39720 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24936, #1930, #31120 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36072 = LINE ( 'NONE', #9828, #5244 ) ; +#36073 = CARTESIAN_POINT ( 'NONE', ( 3.127842712510462000, -0.2999999999999999900, -1.600000000042763000 ) ) ; +#36074 = ORIENTED_EDGE ( 'NONE', *, *, #16998, .F. ) ; +#36075 = ORIENTED_EDGE ( 'NONE', *, *, #39373, .F. ) ; +#36076 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36078 = ORIENTED_EDGE ( 'NONE', *, *, #32582, .T. ) ; +#36077 = LINE ( 'NONE', #22281, #40575 ) ; +#36079 = ORIENTED_EDGE ( 'NONE', *, *, #29373, .F. ) ; +#36081 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#36080 = CIRCLE ( 'NONE', #24259, 0.4000000000000001900 ) ; +#36082 = STYLED_ITEM ( 'NONE', ( #7252 ), #666 ) ; +#36083 = SURFACE_SIDE_STYLE ('',( #5665 ) ) ; +#36084 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36085 = VECTOR ( 'NONE', #21082, 1000.000000000000000 ) ; +#36086 = VECTOR ( 'NONE', #3662, 1000.000000000000000 ) ; +#36087 = VERTEX_POINT ( 'NONE', #22988 ) ; +#36088 = LINE ( 'NONE', #25579, #22380 ) ; +#36089 = DIRECTION ( 'NONE', ( -2.367138801244516300E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#36090 = VECTOR ( 'NONE', #8303, 1000.000000000000000 ) ; +#36091 = LINE ( 'NONE', #1368, #28491 ) ; +#36092 = SURFACE_SIDE_STYLE ('',( #4592 ) ) ; +#36093 = VECTOR ( 'NONE', #36418, 1000.000000000000000 ) ; +#36094 = SURFACE_STYLE_USAGE ( .BOTH. , #7243 ) ; +#36095 = FILL_AREA_STYLE ('',( #41309 ) ) ; +#36096 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -4.818676322157808200E-016, -1.000000000000000000 ) ) ; +#36097 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#36098 = CARTESIAN_POINT ( 'NONE', ( 2.400000000000000400, -1.499998254703822000, -5.449999999999994000 ) ) ; +#36099 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#36100 = EDGE_CURVE ( 'NONE', #30158, #14214, #10504, .T. ) ; +#36101 = VERTEX_POINT ( 'NONE', #13518 ) ; +#36102 = EDGE_CURVE ( 'NONE', #11557, #28641, #980, .T. ) ; +#36103 = SURFACE_STYLE_FILL_AREA ( #10438 ) ; +#36104 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9266 ) ) ; +#36105 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#36106 = CARTESIAN_POINT ( 'NONE', ( 3.106956640297534400, 0.5663739415595553400, -1.896196437387030600 ) ) ; +#36108 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#36107 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.799998254703820700, -6.800000000000000700 ) ) ; +#36109 = ORIENTED_EDGE ( 'NONE', *, *, #30400, .T. ) ; +#36110 = VERTEX_POINT ( 'NONE', #17069 ) ; +#36111 = SURFACE_SIDE_STYLE ('',( #3392 ) ) ; +#36112 = DIRECTION ( 'NONE', ( 6.056601140521967900E-031, -1.854100822792756000E-045, -1.000000000000000000 ) ) ; +#36113 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #36121, #29175, #9812, #3884, #6848, #13211, #29447, #32567 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 2, 4 ), + ( 0.0000000000000000000, 0.2499999999999983300, 0.4999999999999966700, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#36115 = VERTEX_POINT ( 'NONE', #10402 ) ; +#36114 = VECTOR ( 'NONE', #2396, 1000.000000000000000 ) ; +#36116 = EDGE_LOOP ( 'NONE', ( #12944, #18930, #36945, #5420 ) ) ; +#36117 = STYLED_ITEM ( 'NONE', ( #1787 ), #15383 ) ; +#36118 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.949998254703821000, 0.0000000000000000000 ) ) ; +#36119 = ADVANCED_FACE ( 'NONE', ( #27716 ), #26823, .F. ) ; +#36120 = VECTOR ( 'NONE', #22494, 1000.000000000000000 ) ; +#36121 = CARTESIAN_POINT ( 'NONE', ( 2.995000000000000100, -0.3500000000000000300, -1.300000000000000000 ) ) ; +#36122 = LINE ( 'NONE', #38825, #21466 ) ; +#36123 = VECTOR ( 'NONE', #20548, 1000.000000000000000 ) ; +#36124 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25864 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3634, #17052, #719 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36125 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36127 = SURFACE_STYLE_USAGE ( .BOTH. , #39477 ) ; +#36126 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26419 ), #22325 ) ; +#36128 = SURFACE_STYLE_FILL_AREA ( #14416 ) ; +#36129 = CYLINDRICAL_SURFACE ( 'NONE', #6955, 1.200001745296169300 ) ; +#36131 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41247 ) ) ; +#36130 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5795 ) ) ; +#36132 = SURFACE_STYLE_FILL_AREA ( #18475 ) ; +#36133 = PRESENTATION_STYLE_ASSIGNMENT (( #35218 ) ) ; +#36134 = FACE_OUTER_BOUND ( 'NONE', #30185, .T. ) ; +#36135 = ORIENTED_EDGE ( 'NONE', *, *, #15126, .T. ) ; +#36136 = FILL_AREA_STYLE ('',( #39061 ) ) ; +#36137 = LINE ( 'NONE', #26024, #1780 ) ; +#36140 = EDGE_CURVE ( 'NONE', #16836, #1063, #10466, .T. ) ; +#36139 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#36138 = AXIS2_PLACEMENT_3D ( 'NONE', #20198, #6869, #20060 ) ; +#36141 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, 0.03300000000000000200 ) ) ; +#36142 = FILL_AREA_STYLE ('',( #13501 ) ) ; +#36143 = SURFACE_STYLE_FILL_AREA ( #25427 ) ; +#36145 = STYLED_ITEM ( 'NONE', ( #35252 ), #1913 ) ; +#36144 = AXIS2_PLACEMENT_3D ( 'NONE', #22191, #28536, #31780 ) ; +#36146 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#36147 = ORIENTED_EDGE ( 'NONE', *, *, #23530, .F. ) ; +#36148 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1960 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40977, #8484, #1914 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36149 = ORIENTED_EDGE ( 'NONE', *, *, #35506, .F. ) ; +#36150 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36151 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#36152 = VERTEX_POINT ( 'NONE', #24262 ) ; +#36153 = VECTOR ( 'NONE', #25999, 1000.000000000000000 ) ; +#36154 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36155 = PRESENTATION_STYLE_ASSIGNMENT (( #8554 ) ) ; +#36156 = PLANE ( 'NONE', #25439 ) ; +#36157 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36158 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, -2.322941965694886000, -1.250000000000000000 ) ) ; +#36159 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36160 = ORIENTED_EDGE ( 'NONE', *, *, #11325, .T. ) ; +#36161 = FACE_OUTER_BOUND ( 'NONE', #13793, .T. ) ; +#36162 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13457, 'distance_accuracy_value', 'NONE'); +#36163 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#36164 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000000200, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#36165 = EDGE_LOOP ( 'NONE', ( #35322, #17849 ) ) ; +#36166 = EDGE_CURVE ( 'NONE', #14599, #17640, #25189, .T. ) ; +#36168 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.4300017452961684700, -7.500000000000000000 ) ) ; +#36167 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36169 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36171 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36170 = SURFACE_STYLE_USAGE ( .BOTH. , #23017 ) ; +#36172 = ORIENTED_EDGE ( 'NONE', *, *, #21948, .T. ) ; +#36173 = EDGE_CURVE ( 'NONE', #8634, #19588, #28200, .T. ) ; +#36174 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34397, 'distance_accuracy_value', 'NONE'); +#36175 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36176 = ORIENTED_EDGE ( 'NONE', *, *, #25, .F. ) ; +#36177 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2915 ), #29658 ) ; +#36178 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.2999999999999999900, -1.399999999999999900 ) ) ; +#36179 = CARTESIAN_POINT ( 'NONE', ( -3.245000000008750400, -0.3499999999999999800, -1.650000000000000800 ) ) ; +#36180 = FILL_AREA_STYLE ('',( #23314 ) ) ; +#36181 = ADVANCED_FACE ( 'NONE', ( #26674 ), #15550, .T. ) ; +#36182 = AXIS2_PLACEMENT_3D ( 'NONE', #12922, #39331, #951 ) ; +#36183 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36184 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#36185 = ORIENTED_EDGE ( 'NONE', *, *, #9414, .F. ) ; +#36186 = EDGE_CURVE ( 'NONE', #19647, #40645, #14536, .T. ) ; +#36187 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#36188 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -0.3279248189596167300 ) ) ; +#36189 = ORIENTED_EDGE ( 'NONE', *, *, #17112, .T. ) ; +#36190 = EDGE_LOOP ( 'NONE', ( #19823, #27709, #5898, #19754 ) ) ; +#36191 = VECTOR ( 'NONE', #21899, 1000.000000000000000 ) ; +#36192 = ORIENTED_EDGE ( 'NONE', *, *, #6505, .T. ) ; +#36193 = SURFACE_SIDE_STYLE ('',( #12052 ) ) ; +#36194 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33324, 'distance_accuracy_value', 'NONE'); +#36195 = CARTESIAN_POINT ( 'NONE', ( -2.995000000010875400, -0.3499999999999999800, -1.399999999999999900 ) ) ; +#36197 = AXIS2_PLACEMENT_3D ( 'NONE', #14886, #5562, #2216 ) ; +#36196 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8676 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11504, #33702, #27769 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36198 = CIRCLE ( 'NONE', #11545, 0.4000000000000000800 ) ; +#36199 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11792 ) ) ; +#36200 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36201 = FACE_OUTER_BOUND ( 'NONE', #23601, .T. ) ; +#36202 = FILL_AREA_STYLE ('',( #10309 ) ) ; +#36203 = VERTEX_POINT ( 'NONE', #30329 ) ; +#36204 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25139 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11250, #18212, #5044 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36205 = FILL_AREA_STYLE ('',( #228 ) ) ; +#36206 = ORIENTED_EDGE ( 'NONE', *, *, #5803, .T. ) ; +#36207 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38941 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5797, #22186, #12271 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36208 = SURFACE_STYLE_FILL_AREA ( #23385 ) ; +#36209 = CARTESIAN_POINT ( 'NONE', ( -3.237718385397967900, 0.2999999999999999900, 0.7155313145785868700 ) ) ; +#36210 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#36211 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.3000000000000150900, -4.249999999999998200 ) ) ; +#36212 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#36213 = PRESENTATION_STYLE_ASSIGNMENT (( #12179 ) ) ; +#36214 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#36215 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#36216 = FACE_OUTER_BOUND ( 'NONE', #1123, .T. ) ; +#36217 = FILL_AREA_STYLE ('',( #13297 ) ) ; +#36218 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36219 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36220 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36221 = ADVANCED_FACE ( 'NONE', ( #7950 ), #21141, .T. ) ; +#36222 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36223 = CARTESIAN_POINT ( 'NONE', ( -4.460004702845591100, -0.01999825470386397800, -7.349750161819863500 ) ) ; +#36224 = EDGE_CURVE ( 'NONE', #23565, #12807, #38272, .T. ) ; +#36225 = FACE_OUTER_BOUND ( 'NONE', #16073, .T. ) ; +#36226 = EDGE_CURVE ( 'NONE', #4765, #3702, #29689, .T. ) ; +#36227 = ORIENTED_EDGE ( 'NONE', *, *, #22055, .T. ) ; +#36228 = EDGE_LOOP ( 'NONE', ( #25561, #19882, #40257, #12607 ) ) ; +#36229 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36230 = LINE ( 'NONE', #17939, #1357 ) ; +#36231 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36232 = ORIENTED_EDGE ( 'NONE', *, *, #40903, .T. ) ; +#36233 = CARTESIAN_POINT ( 'NONE', ( 3.300279184756105700, -0.3883930158384222300, -1.718393015838366700 ) ) ; +#36234 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22427 ) ) ; +#36235 = ADVANCED_FACE ( 'NONE', ( #13508 ), #4334, .T. ) ; +#36236 = SURFACE_STYLE_FILL_AREA ( #34547 ) ; +#36237 = SURFACE_SIDE_STYLE ('',( #29877 ) ) ; +#36238 = EDGE_CURVE ( 'NONE', #14652, #1566, #22094, .T. ) ; +#36239 = CIRCLE ( 'NONE', #31099, 0.1000000000000002600 ) ; +#36240 = FACE_OUTER_BOUND ( 'NONE', #19670, .T. ) ; +#36241 = EDGE_LOOP ( 'NONE', ( #26370, #35861, #30979, #4219, #24568 ) ) ; +#36242 = FACE_OUTER_BOUND ( 'NONE', #36923, .T. ) ; +#36243 = ORIENTED_EDGE ( 'NONE', *, *, #27959, .F. ) ; +#36244 = STYLED_ITEM ( 'NONE', ( #23334 ), #21811 ) ; +#36245 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8077 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14122, #36850, #27244 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36246 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36247 = VECTOR ( 'NONE', #32612, 1000.000000000000000 ) ; +#36248 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.445602896647293600E-014 ) ) ; +#36249 = SURFACE_STYLE_FILL_AREA ( #30578 ) ; +#36252 = EDGE_CURVE ( 'NONE', #3587, #39146, #14027, .T. ) ; +#36251 = STYLED_ITEM ( 'NONE', ( #351 ), #24339 ) ; +#36250 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#36253 = SURFACE_SIDE_STYLE ('',( #8481 ) ) ; +#36254 = SURFACE_STYLE_USAGE ( .BOTH. , #26791 ) ; +#36255 = PLANE ( 'NONE', #947 ) ; +#36257 = STYLED_ITEM ( 'NONE', ( #35258 ), #3592 ) ; +#36256 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39024 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24119, #21181, #36972 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36258 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#36259 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36260 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38940 ), #39750 ) ; +#36261 = PLANE ( 'NONE', #14658 ) ; +#36262 = AXIS2_PLACEMENT_3D ( 'NONE', #619, #10286, #13561 ) ; +#36263 = FILL_AREA_STYLE_COLOUR ( '', #4056 ) ; +#36264 = VERTEX_POINT ( 'NONE', #23971 ) ; +#36265 = SURFACE_SIDE_STYLE ('',( #39693 ) ) ; +#36266 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36267 = EDGE_LOOP ( 'NONE', ( #30172, #23777, #40385, #10874 ) ) ; +#36268 = ORIENTED_EDGE ( 'NONE', *, *, #25850, .T. ) ; +#36269 = FILL_AREA_STYLE ('',( #30317 ) ) ; +#36270 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36271 = ADVANCED_FACE ( 'NONE', ( #13463 ), #1276, .T. ) ; +#36272 = ORIENTED_EDGE ( 'NONE', *, *, #7415, .F. ) ; +#36273 = VERTEX_POINT ( 'NONE', #24848 ) ; +#36274 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#36275 = ORIENTED_EDGE ( 'NONE', *, *, #19351, .F. ) ; +#36276 = FACE_OUTER_BOUND ( 'NONE', #40076, .T. ) ; +#36277 = FACE_OUTER_BOUND ( 'NONE', #16030, .T. ) ; +#36278 = FILL_AREA_STYLE ('',( #33009 ) ) ; +#36279 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#36280 = PLANE ( 'NONE', #21281 ) ; +#36281 = CYLINDRICAL_SURFACE ( 'NONE', #4306, 0.3000000000000001600 ) ; +#36282 = SURFACE_STYLE_FILL_AREA ( #33996 ) ; +#36283 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#36284 = ORIENTED_EDGE ( 'NONE', *, *, #26960, .T. ) ; +#36285 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#36286 = LINE ( 'NONE', #39593, #394 ) ; +#36287 = EDGE_LOOP ( 'NONE', ( #23426, #5568, #9441, #37810 ) ) ; +#36288 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#36289 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36290 = VECTOR ( 'NONE', #1015, 1000.000000000000000 ) ; +#36291 = FILL_AREA_STYLE_COLOUR ( '', #28537 ) ; +#36292 = FILL_AREA_STYLE ('',( #4061 ) ) ; +#36293 = ORIENTED_EDGE ( 'NONE', *, *, #15185, .T. ) ; +#36294 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36295 = EDGE_CURVE ( 'NONE', #24382, #18082, #37752, .T. ) ; +#36296 = SURFACE_STYLE_USAGE ( .BOTH. , #7295 ) ; +#36297 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36298 = EDGE_CURVE ( 'NONE', #31798, #546, #20077, .T. ) ; +#36299 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17119 ) ) ; +#36300 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7245, 'distance_accuracy_value', 'NONE'); +#36301 = STYLED_ITEM ( 'NONE', ( #12209 ), #22672 ) ; +#36302 = ORIENTED_EDGE ( 'NONE', *, *, #11108, .T. ) ; +#36303 = CARTESIAN_POINT ( 'NONE', ( -2.949999999999999700, -1.139998254717350800, -6.299996877890552400 ) ) ; +#36304 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36305 = AXIS2_PLACEMENT_3D ( 'NONE', #19701, #39135, #41829 ) ; +#36306 = ORIENTED_EDGE ( 'NONE', *, *, #748, .T. ) ; +#36307 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37264 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14252, #33589, #13813 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36308 = SURFACE_STYLE_USAGE ( .BOTH. , #17234 ) ; +#36309 = ORIENTED_EDGE ( 'NONE', *, *, #19486, .T. ) ; +#36310 = VERTEX_POINT ( 'NONE', #37241 ) ; +#36311 = ORIENTED_EDGE ( 'NONE', *, *, #21027, .T. ) ; +#36312 = VECTOR ( 'NONE', #24030, 1000.000000000000000 ) ; +#36314 = AXIS2_PLACEMENT_3D ( 'NONE', #39166, #29868, #16593 ) ; +#36313 = AXIS2_PLACEMENT_3D ( 'NONE', #23338, #3965, #10462 ) ; +#36315 = CIRCLE ( 'NONE', #38260, 0.3600000000000078700 ) ; +#36318 = EDGE_CURVE ( 'NONE', #28272, #26958, #29650, .T. ) ; +#36317 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36316 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8934 ) ) ; +#36319 = VERTEX_POINT ( 'NONE', #39911 ) ; +#36320 = ORIENTED_EDGE ( 'NONE', *, *, #15973, .T. ) ; +#36321 = EDGE_LOOP ( 'NONE', ( #28325, #30757, #7704, #28360, #9237, #22731, #10469, #17211 ) ) ; +#36322 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22754 ), #34142 ) ; +#36323 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36324 = DIRECTION ( 'NONE', ( 7.744301232039317900E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36325 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22761 ), #11335 ) ; +#36326 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#36327 = SURFACE_SIDE_STYLE ('',( #22966 ) ) ; +#36328 = ORIENTED_EDGE ( 'NONE', *, *, #17292, .T. ) ; +#36329 = PLANE ( 'NONE', #27957 ) ; +#36330 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#36331 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36332 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34100, 'distance_accuracy_value', 'NONE'); +#36333 = VECTOR ( 'NONE', #10491, 1000.000000000000000 ) ; +#36334 = PLANE ( 'NONE', #35943 ) ; +#36335 = FILL_AREA_STYLE ('',( #23330 ) ) ; +#36336 = FACE_OUTER_BOUND ( 'NONE', #5747, .T. ) ; +#36337 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36338 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -1.380001745296131500, -5.449999999999994000 ) ) ; +#36339 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.499998254703820400, -6.699999999999994000 ) ) ; +#36340 = FILL_AREA_STYLE_COLOUR ( '', #33749 ) ; +#36341 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.380001745296165500, -2.399999999999999500 ) ) ; +#36342 = ORIENTED_EDGE ( 'NONE', *, *, #371, .T. ) ; +#36343 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#36344 = EDGE_CURVE ( 'NONE', #40292, #14455, #14501, .T. ) ; +#36345 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.779999999999868400, 0.0000000000000000000 ) ) ; +#36346 = EDGE_LOOP ( 'NONE', ( #18136, #31304, #8227, #1093 ) ) ; +#36347 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36348 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#36349 = LINE ( 'NONE', #5849, #14101 ) ; +#36350 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.307718258760844200E-015, -1.000000000000000000 ) ) ; +#36351 = FILL_AREA_STYLE ('',( #16709 ) ) ; +#36352 = EDGE_CURVE ( 'NONE', #19484, #1054, #9920, .T. ) ; +#36353 = STYLED_ITEM ( 'NONE', ( #12988 ), #10351 ) ; +#36354 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -5.706431195920516700E-031 ) ) ; +#36355 = ORIENTED_EDGE ( 'NONE', *, *, #19991, .F. ) ; +#36356 = ORIENTED_EDGE ( 'NONE', *, *, #1472, .F. ) ; +#36357 = VECTOR ( 'NONE', #34522, 1000.000000000000000 ) ; +#36358 = SURFACE_STYLE_USAGE ( .BOTH. , #7087 ) ; +#36359 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17690 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24651, #8900, #9042 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36360 = ORIENTED_EDGE ( 'NONE', *, *, #28236, .F. ) ; +#36361 = VECTOR ( 'NONE', #10241, 1000.000000000000000 ) ; +#36362 = AXIS2_PLACEMENT_3D ( 'NONE', #6910, #29364, #26144 ) ; +#36363 = STYLED_ITEM ( 'NONE', ( #25534 ), #31379 ) ; +#36364 = PRESENTATION_STYLE_ASSIGNMENT (( #36049 ) ) ; +#36365 = SURFACE_STYLE_USAGE ( .BOTH. , #32964 ) ; +#36366 = FILL_AREA_STYLE_COLOUR ( '', #994 ) ; +#36367 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36368 = VECTOR ( 'NONE', #3590, 1000.000000000000000 ) ; +#36369 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.5000000000000879300 ) ) ; +#36370 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36372 = EDGE_CURVE ( 'NONE', #27626, #32396, #387, .T. ) ; +#36371 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26922 ) ) ; +#36373 = SURFACE_SIDE_STYLE ('',( #425 ) ) ; +#36374 = FILL_AREA_STYLE ('',( #20439 ) ) ; +#36375 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36377 = AXIS2_PLACEMENT_3D ( 'NONE', #27697, #21235, #27157 ) ; +#36376 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41487 ) ) ; +#36378 = VECTOR ( 'NONE', #16752, 1000.000000000000000 ) ; +#36379 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#36380 = ORIENTED_EDGE ( 'NONE', *, *, #40428, .T. ) ; +#36381 = CARTESIAN_POINT ( 'NONE', ( -4.721498212947778900, -0.4099999999999984200, -6.861124800398366500 ) ) ; +#36382 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36383 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36384 = SURFACE_STYLE_FILL_AREA ( #3740 ) ; +#36385 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36386 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#36387 = EDGE_LOOP ( 'NONE', ( #18322, #24855, #28981, #19901 ) ) ; +#36388 = PRESENTATION_STYLE_ASSIGNMENT (( #856 ) ) ; +#36389 = ADVANCED_FACE ( 'NONE', ( #41287 ), #5029, .F. ) ; +#36390 = FILL_AREA_STYLE_COLOUR ( '', #20147 ) ; +#36391 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23041, 'distance_accuracy_value', 'NONE'); +#36392 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36393 = ORIENTED_EDGE ( 'NONE', *, *, #37633, .F. ) ; +#36394 = SURFACE_STYLE_USAGE ( .BOTH. , #23669 ) ; +#36395 = LINE ( 'NONE', #38096, #9577 ) ; +#36396 = EDGE_LOOP ( 'NONE', ( #18775, #19652, #41824, #33982 ) ) ; +#36397 = ORIENTED_EDGE ( 'NONE', *, *, #14262, .T. ) ; +#36398 = PLANE ( 'NONE', #7014 ) ; +#36399 = SURFACE_STYLE_USAGE ( .BOTH. , #36807 ) ; +#36400 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.3300017452961679900, -5.175000000000000700 ) ) ; +#36401 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36402 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26179, 'distance_accuracy_value', 'NONE'); +#36403 = SURFACE_SIDE_STYLE ('',( #12619 ) ) ; +#36404 = ORIENTED_EDGE ( 'NONE', *, *, #26658, .F. ) ; +#36405 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000800, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#36406 = EDGE_CURVE ( 'NONE', #118, #5272, #26132, .T. ) ; +#36407 = CARTESIAN_POINT ( 'NONE', ( -3.145000000000000000, -0.2999999999999999900, 0.03300000000000000200 ) ) ; +#36408 = PRESENTATION_STYLE_ASSIGNMENT (( #1695 ) ) ; +#36409 = VECTOR ( 'NONE', #11243, 1000.000000000000000 ) ; +#36410 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#36411 = SURFACE_STYLE_USAGE ( .BOTH. , #33151 ) ; +#36412 = SURFACE_STYLE_FILL_AREA ( #37049 ) ; +#36413 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#36414 = EDGE_CURVE ( 'NONE', #8269, #3461, #39237, .T. ) ; +#36415 = SURFACE_SIDE_STYLE ('',( #17815 ) ) ; +#36416 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#36417 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32620 ), #3129 ) ; +#36418 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#36419 = EDGE_LOOP ( 'NONE', ( #24617, #31749, #31958, #12247 ) ) ; +#36420 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36421 = SURFACE_SIDE_STYLE ('',( #11314 ) ) ; +#36422 = ADVANCED_FACE ( 'NONE', ( #2898 ), #29109, .T. ) ; +#36423 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18315 ), #20483 ) ; +#36424 = VECTOR ( 'NONE', #40448, 1000.000000000000000 ) ; +#36425 = ORIENTED_EDGE ( 'NONE', *, *, #22667, .T. ) ; +#36426 = CIRCLE ( 'NONE', #24200, 0.1000000000000002600 ) ; +#36428 = STYLED_ITEM ( 'NONE', ( #11475 ), #7322 ) ; +#36427 = FACE_BOUND ( 'NONE', #18623, .T. ) ; +#36429 = STYLED_ITEM ( 'NONE', ( #1399 ), #11492 ) ; +#36430 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36431 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#36433 = EDGE_CURVE ( 'NONE', #14426, #21067, #17518, .T. ) ; +#36432 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34256 ) ) ; +#36434 = ORIENTED_EDGE ( 'NONE', *, *, #25411, .F. ) ; +#36435 = LINE ( 'NONE', #18584, #6624 ) ; +#36436 = VERTEX_POINT ( 'NONE', #12624 ) ; +#36437 = ORIENTED_EDGE ( 'NONE', *, *, #7973, .F. ) ; +#36438 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#36439 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664843100, -1.380001745296171900, -5.650000000000000400 ) ) ; +#36440 = ADVANCED_FACE ( 'NONE', ( #34204 ), #12061, .T. ) ; +#36442 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39898 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32136, #9806, #281 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36441 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7448 ), #27778 ) ; +#36443 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36444 = SURFACE_SIDE_STYLE ('',( #25376 ) ) ; +#36445 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30762 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5778, #34182, #14826 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36446 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.799998254703822000, -3.700000000000000200 ) ) ; +#36447 = ORIENTED_EDGE ( 'NONE', *, *, #7609, .T. ) ; +#36448 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36449 = VERTEX_POINT ( 'NONE', #18745 ) ; +#36450 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36451 = SURFACE_STYLE_FILL_AREA ( #25252 ) ; +#36452 = SURFACE_STYLE_FILL_AREA ( #26412 ) ; +#36453 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( + ( #34592, #37699, #25304, #41092 ), + ( #15531, #41492, #38245, #25030 ), + ( #28245, #2294, #28102, #8866 ), + ( #31493, #12111, #34741, #37978 ) ), + .UNSPECIFIED., .F., .F., .F. ) + B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) + GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( + ( 1.000000000000000000, 0.8047378541243649400, 0.8047378541243649400, 1.000000000000000000), + ( 0.8047378541243649400, 0.6476030138606876400, 0.6476030138606876400, 0.8047378541243649400), + ( 0.8047378541243649400, 0.6476030138606876400, 0.6476030138606876400, 0.8047378541243649400), + ( 1.000000000000000000, 0.8047378541243649400, 0.8047378541243649400, 1.000000000000000000) ) ) + REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); +#36454 = FILL_AREA_STYLE ('',( #2450 ) ) ; +#36455 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36456 = FILL_AREA_STYLE_COLOUR ( '', #15195 ) ; +#36457 = SURFACE_STYLE_FILL_AREA ( #40496 ) ; +#36458 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#36459 = VERTEX_POINT ( 'NONE', #3059 ) ; +#36460 = CARTESIAN_POINT ( 'NONE', ( 3.680000000000000200, -1.499998254703818900, -6.699999999999994000 ) ) ; +#36461 = ORIENTED_EDGE ( 'NONE', *, *, #37257, .T. ) ; +#36462 = EDGE_CURVE ( 'NONE', #19388, #33050, #8395, .T. ) ; +#36463 = EDGE_CURVE ( 'NONE', #3040, #15235, #34682, .T. ) ; +#36464 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#36465 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, -0.07499999999999999700, -0.03270148751209844100 ) ) ; +#36466 = VECTOR ( 'NONE', #36039, 1000.000000000000000 ) ; +#36467 = FILL_AREA_STYLE_COLOUR ( '', #13309 ) ; +#36468 = ORIENTED_EDGE ( 'NONE', *, *, #37996, .T. ) ; +#36469 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36471 = ADVANCED_FACE ( 'NONE', ( #5375 ), #25107, .F. ) ; +#36470 = VERTEX_POINT ( 'NONE', #15610 ) ; +#36472 = EDGE_CURVE ( 'NONE', #35275, #26349, #33123, .T. ) ; +#36473 = AXIS2_PLACEMENT_3D ( 'NONE', #8388, #8667, #14910 ) ; +#36474 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#36475 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.2800017452961689500, -5.150000000000000400 ) ) ; +#36476 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36477 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36478 = ORIENTED_EDGE ( 'NONE', *, *, #26706, .T. ) ; +#36479 = FILL_AREA_STYLE_COLOUR ( '', #16598 ) ; +#36480 = LINE ( 'NONE', #31188, #34452 ) ; +#36481 = EDGE_LOOP ( 'NONE', ( #29853, #7594, #9647, #6622 ) ) ; +#36482 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29156 ), #7496 ) ; +#36483 = FILL_AREA_STYLE_COLOUR ( '', #39158 ) ; +#36484 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -2.099999999999999600 ) ) ; +#36485 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33759 ), #40799 ) ; +#36486 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36489 = EDGE_CURVE ( 'NONE', #39776, #21946, #36709, .T. ) ; +#36488 = STYLED_ITEM ( 'NONE', ( #18121 ), #23961 ) ; +#36487 = SURFACE_SIDE_STYLE ('',( #14485 ) ) ; +#36490 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36491 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36492 = FACE_OUTER_BOUND ( 'NONE', #25573, .T. ) ; +#36494 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38083 ), #41066 ) ; +#36493 = AXIS2_PLACEMENT_3D ( 'NONE', #31496, #21364, #11842 ) ; +#36495 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24314 ) ) ; +#36496 = VERTEX_POINT ( 'NONE', #5736 ) ; +#36497 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.080001745296136600, -5.000000000000000000 ) ) ; +#36498 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#36499 = CARTESIAN_POINT ( 'NONE', ( 4.821303021499042900, 0.2799999999999973100, -0.3590461068823618300 ) ) ; +#36500 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#36501 = DIRECTION ( 'NONE', ( -1.156482317317871700E-015, 1.445602896647339700E-016, 1.000000000000000000 ) ) ; +#36502 = VERTEX_POINT ( 'NONE', #9374 ) ; +#36503 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#36504 = CARTESIAN_POINT ( 'NONE', ( -2.573205080756887100, 1.630001745296169500, -1.750000000000000200 ) ) ; +#36505 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#36506 = ORIENTED_EDGE ( 'NONE', *, *, #26954, .T. ) ; +#36507 = FILL_AREA_STYLE ('',( #13325 ) ) ; +#36508 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36509 = CIRCLE ( 'NONE', #7862, 0.1000000000000009100 ) ; +#36510 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.2800017452961688400, -5.200000000000001100 ) ) ; +#36511 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36512 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#36513 = DIRECTION ( 'NONE', ( 6.056601140521968800E-031, 1.931342135474151600E-045, 1.000000000000000000 ) ) ; +#36514 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36515 = ORIENTED_EDGE ( 'NONE', *, *, #428, .T. ) ; +#36516 = ORIENTED_EDGE ( 'NONE', *, *, #26789, .F. ) ; +#36517 = VECTOR ( 'NONE', #22734, 1000.000000000000000 ) ; +#36518 = LINE ( 'NONE', #12953, #21921 ) ; +#36519 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#36520 = DIRECTION ( 'NONE', ( -5.782411586589413300E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#36521 = FACE_OUTER_BOUND ( 'NONE', #21558, .T. ) ; +#36522 = CARTESIAN_POINT ( 'NONE', ( -4.770000000000131900, 0.2800000000000028000, -0.5000000000000879300 ) ) ; +#36523 = MANIFOLD_SOLID_BREP ( '1-1-solid14', #22407 ) ; +#36524 = SURFACE_SIDE_STYLE ('',( #23274 ) ) ; +#36525 = EDGE_CURVE ( 'NONE', #25100, #34143, #40747, .T. ) ; +#36526 = SURFACE_SIDE_STYLE ('',( #21547 ) ) ; +#36527 = PLANE ( 'NONE', #9795 ) ; +#36528 = FACE_BOUND ( 'NONE', #34032, .T. ) ; +#36529 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36530 = EDGE_CURVE ( 'NONE', #40008, #32225, #30092, .T. ) ; +#36531 = ORIENTED_EDGE ( 'NONE', *, *, #21034, .F. ) ; +#36532 = FILL_AREA_STYLE_COLOUR ( '', #575 ) ; +#36533 = LINE ( 'NONE', #5515, #22397 ) ; +#36534 = AXIS2_PLACEMENT_3D ( 'NONE', #8275, #8697, #11675 ) ; +#36535 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#36536 = VERTEX_POINT ( 'NONE', #35663 ) ; +#36537 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30600 ), #32749 ) ; +#36538 = CARTESIAN_POINT ( 'NONE', ( 4.070001745296171900, -0.2800000000000000300, -4.400000000000000400 ) ) ; +#36539 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24945 ) ) ; +#36540 = FACE_OUTER_BOUND ( 'NONE', #37984, .T. ) ; +#36541 = ORIENTED_EDGE ( 'NONE', *, *, #37815, .F. ) ; +#36542 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36543 = VERTEX_POINT ( 'NONE', #19311 ) ; +#36544 = EDGE_LOOP ( 'NONE', ( #38149, #36078, #29469, #22803 ) ) ; +#36545 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#36546 = AXIS2_PLACEMENT_3D ( 'NONE', #25520, #41195, #12490 ) ; +#36547 = AXIS2_PLACEMENT_3D ( 'NONE', #20031, #23396, #3888 ) ; +#36549 = STYLED_ITEM ( 'NONE', ( #21675 ), #9758 ) ; +#36548 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21560 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23978, #30194, #14112 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36550 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#36551 = FILL_AREA_STYLE_COLOUR ( '', #6554 ) ; +#36552 = FILL_AREA_STYLE_COLOUR ( '', #37119 ) ; +#36553 = CONICAL_SURFACE ( 'NONE', #32940, 0.3000000000000001000, 0.3490658503988666700 ) ; +#36554 = FILL_AREA_STYLE_COLOUR ( '', #9585 ) ; +#36555 = ORIENTED_EDGE ( 'NONE', *, *, #14404, .F. ) ; +#36556 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25743 ), #30616 ) ; +#36557 = SURFACE_STYLE_FILL_AREA ( #12252 ) ; +#36558 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1362, 'distance_accuracy_value', 'NONE'); +#36559 = PLANE ( 'NONE', #13456 ) ; +#36560 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36561 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36562 = SURFACE_STYLE_USAGE ( .BOTH. , #4345 ) ; +#36563 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#36564 = VECTOR ( 'NONE', #13092, 1000.000000000000000 ) ; +#36565 = SURFACE_SIDE_STYLE ('',( #11360 ) ) ; +#36566 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#36567 = FILL_AREA_STYLE_COLOUR ( '', #33700 ) ; +#36568 = VECTOR ( 'NONE', #8172, 1000.000000000000000 ) ; +#36569 = SURFACE_SIDE_STYLE ('',( #37797 ) ) ; +#36570 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000030900, 0.2800017452961687200, -6.549999999999999800 ) ) ; +#36571 = ORIENTED_EDGE ( 'NONE', *, *, #10707, .F. ) ; +#36572 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.258751240853227700E-015, 0.0000000000000000000 ) ) ; +#36573 = LINE ( 'NONE', #15928, #28467 ) ; +#36574 = FILL_AREA_STYLE ('',( #23584 ) ) ; +#36575 = ORIENTED_EDGE ( 'NONE', *, *, #5267, .T. ) ; +#36576 = EDGE_CURVE ( 'NONE', #16084, #9683, #38668, .T. ) ; +#36577 = EDGE_LOOP ( 'NONE', ( #6292, #5220, #23704 ) ) ; +#36578 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.499998254703822900, -6.699999999999994000 ) ) ; +#36580 = ORIENTED_EDGE ( 'NONE', *, *, #32113, .F. ) ; +#36579 = LINE ( 'NONE', #14937, #25962 ) ; +#36581 = ORIENTED_EDGE ( 'NONE', *, *, #4339, .T. ) ; +#36582 = ADVANCED_FACE ( 'NONE', ( #6358 ), #6433, .F. ) ; +#36583 = EDGE_CURVE ( 'NONE', #40951, #33459, #38190, .T. ) ; +#36584 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27369 ), #23028 ) ; +#36585 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.2999999999999999900, -0.2498427124746000500 ) ) ; +#36586 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36587 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.799998254703822000, -2.599999999999999600 ) ) ; +#36588 = VECTOR ( 'NONE', #18273, 1000.000000000000000 ) ; +#36589 = FILL_AREA_STYLE ('',( #14001 ) ) ; +#36590 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36591 = AXIS2_PLACEMENT_3D ( 'NONE', #22961, #26228, #292 ) ; +#36592 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36593 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9777 ) ) ; +#36595 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#36594 = SURFACE_STYLE_USAGE ( .BOTH. , #7900 ) ; +#36596 = PRESENTATION_STYLE_ASSIGNMENT (( #34877 ) ) ; +#36597 = CARTESIAN_POINT ( 'NONE', ( 3.314492898064261600, -0.07499999999999999700, -0.07363105974681950800 ) ) ; +#36598 = CARTESIAN_POINT ( 'NONE', ( -3.117541378981579100, 0.5621722037426913900, -1.892172203742691600 ) ) ; +#36599 = AXIS2_PLACEMENT_3D ( 'NONE', #6549, #3445, #26044 ) ; +#36600 = SURFACE_STYLE_USAGE ( .BOTH. , #10740 ) ; +#36602 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18027 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12845, #3278, #13275 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36601 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9980 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14882, #24663, #21562 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36603 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296169600, -0.2000017452961698200 ) ) ; +#36604 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.414176746720224900E-016, 1.000000000000000000 ) ) ; +#36605 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019659000E-017 ) ) ; +#36606 = VERTEX_POINT ( 'NONE', #19725 ) ; +#36607 = FILL_AREA_STYLE ('',( #3969 ) ) ; +#36609 = EDGE_CURVE ( 'NONE', #14625, #2849, #32112, .T. ) ; +#36608 = AXIS2_PLACEMENT_3D ( 'NONE', #1049, #13998, #4236 ) ; +#36610 = PLANE ( 'NONE', #19182 ) ; +#36611 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36612 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#36613 = ORIENTED_EDGE ( 'NONE', *, *, #7478, .T. ) ; +#36615 = AXIS2_PLACEMENT_3D ( 'NONE', #31489, #41623, #25833 ) ; +#36614 = STYLED_ITEM ( 'NONE', ( #19516 ), #25840 ) ; +#36616 = CIRCLE ( 'NONE', #518, 0.1000000000000009100 ) ; +#36617 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11342, 'distance_accuracy_value', 'NONE'); +#36618 = VECTOR ( 'NONE', #24512, 1000.000000000000000 ) ; +#36619 = VERTEX_POINT ( 'NONE', #38892 ) ; +#36620 = FILL_AREA_STYLE ('',( #20707 ) ) ; +#36621 = ADVANCED_FACE ( 'NONE', ( #31114 ), #3315, .T. ) ; +#36622 = VERTEX_POINT ( 'NONE', #29287 ) ; +#36623 = SURFACE_STYLE_USAGE ( .BOTH. , #33799 ) ; +#36624 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, -2.031000000000001500, -6.449999999999999300 ) ) ; +#36625 = ORIENTED_EDGE ( 'NONE', *, *, #35093, .T. ) ; +#36626 = VECTOR ( 'NONE', #40059, 1000.000000000000200 ) ; +#36627 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.779999999999868600, -0.2339555568811695400 ) ) ; +#36628 = FACE_OUTER_BOUND ( 'NONE', #27158, .T. ) ; +#36629 = ORIENTED_EDGE ( 'NONE', *, *, #32825, .F. ) ; +#36630 = CYLINDRICAL_SURFACE ( 'NONE', #39384, 0.1000000000000002600 ) ; +#36631 = ADVANCED_FACE ( 'NONE', ( #22531 ), #26342, .T. ) ; +#36632 = VERTEX_POINT ( 'NONE', #536 ) ; +#36633 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#36634 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.499998254703836900, -5.449999999999994000 ) ) ; +#36635 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36636 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36637 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36638 = EDGE_CURVE ( 'NONE', #32286, #35739, #35168, .T. ) ; +#36639 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36640 = VECTOR ( 'NONE', #10856, 999.9999999999998900 ) ; +#36641 = FILL_AREA_STYLE ('',( #40013 ) ) ; +#36642 = ORIENTED_EDGE ( 'NONE', *, *, #2499, .F. ) ; +#36643 = EDGE_CURVE ( 'NONE', #30655, #5574, #20040, .T. ) ; +#36644 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#36645 = ORIENTED_EDGE ( 'NONE', *, *, #35978, .T. ) ; +#36646 = PLANE ( 'NONE', #22548 ) ; +#36647 = ORIENTED_EDGE ( 'NONE', *, *, #11506, .F. ) ; +#36648 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12188 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29197, #9264, #16906 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36649 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#36650 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#36651 = LINE ( 'NONE', #16215, #2334 ) ; +#36652 = DIRECTION ( 'NONE', ( 1.084202172485504700E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#36653 = PRESENTATION_STYLE_ASSIGNMENT (( #18346 ) ) ; +#36654 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 9.035070666963930400E-017 ) ) ; +#36655 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35051 ), #3915 ) ; +#36656 = PRODUCT_CONTEXT ( 'NONE', #7969, 'mechanical' ) ; +#36657 = ORIENTED_EDGE ( 'NONE', *, *, #6807, .F. ) ; +#36658 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36659 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36660 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36661 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15153 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14668, #11123, #24279 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36662 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38413, 'distance_accuracy_value', 'NONE'); +#36663 = VECTOR ( 'NONE', #24946, 1000.000000000000000 ) ; +#36664 = CARTESIAN_POINT ( 'NONE', ( -3.680000000000000200, -1.499998254703818900, -6.699999999999994000 ) ) ; +#36665 = SURFACE_STYLE_FILL_AREA ( #38748 ) ; +#36666 = FACE_OUTER_BOUND ( 'NONE', #5629, .T. ) ; +#36667 = VECTOR ( 'NONE', #38111, 1000.000000000000000 ) ; +#36670 = EDGE_CURVE ( 'NONE', #9925, #13495, #2864, .T. ) ; +#36669 = SURFACE_STYLE_USAGE ( .BOTH. , #23677 ) ; +#36668 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14169 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17641, #33577, #1685 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36671 = ORIENTED_EDGE ( 'NONE', *, *, #6148, .F. ) ; +#36672 = DIRECTION ( 'NONE', ( 0.9396926207859082100, -0.3420201433256694900, 4.188538737676943700E-017 ) ) ; +#36674 = ADVANCED_FACE ( 'NONE', ( #25578 ), #13459, .F. ) ; +#36673 = VERTEX_POINT ( 'NONE', #32966 ) ; +#36675 = LINE ( 'NONE', #11054, #12906 ) ; +#36676 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36677 = SURFACE_STYLE_FILL_AREA ( #36641 ) ; +#36678 = SURFACE_SIDE_STYLE ('',( #23974 ) ) ; +#36680 = STYLED_ITEM ( 'NONE', ( #41786 ), #1964 ) ; +#36679 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15813 ) ) ; +#36681 = SURFACE_STYLE_FILL_AREA ( #25445 ) ; +#36682 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -1.180001745296165500, -4.775000000000000400 ) ) ; +#36683 = ORIENTED_EDGE ( 'NONE', *, *, #27187, .T. ) ; +#36684 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35067 ) ) ; +#36686 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36685 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13665, 'distance_accuracy_value', 'NONE'); +#36687 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36688 = CARTESIAN_POINT ( 'NONE', ( -4.450000000000001100, -0.01886685437028733100, -7.500000000000000900 ) ) ; +#36689 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36690 = SURFACE_STYLE_USAGE ( .BOTH. , #23696 ) ; +#36691 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.2800017452961672300, -5.599999999999999600 ) ) ; +#36692 = SURFACE_SIDE_STYLE ('',( #7564 ) ) ; +#36693 = CARTESIAN_POINT ( 'NONE', ( -3.245000000002999900, -0.3499999999999999800, -1.649999999985500400 ) ) ; +#36694 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865475700, 0.7071067811865475700 ) ) ; +#36695 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#36696 = EDGE_LOOP ( 'NONE', ( #10452, #17850, #9166, #23123 ) ) ; +#36697 = VECTOR ( 'NONE', #12089, 1000.000000000000000 ) ; +#36698 = EDGE_CURVE ( 'NONE', #29035, #18678, #8402, .T. ) ; +#36699 = ORIENTED_EDGE ( 'NONE', *, *, #37585, .T. ) ; +#36700 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#36701 = PLANE ( 'NONE', #38811 ) ; +#36702 = ORIENTED_EDGE ( 'NONE', *, *, #35542, .F. ) ; +#36703 = ORIENTED_EDGE ( 'NONE', *, *, #30953, .T. ) ; +#36705 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40272, 'distance_accuracy_value', 'NONE'); +#36704 = LINE ( 'NONE', #25455, #16477 ) ; +#36706 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36707 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36708 = VECTOR ( 'NONE', #18059, 1000.000000000000000 ) ; +#36709 = CIRCLE ( 'NONE', #22871, 0.09999999999999982500 ) ; +#36710 = EDGE_CURVE ( 'NONE', #8482, #22856, #14467, .T. ) ; +#36711 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#36712 = ORIENTED_EDGE ( 'NONE', *, *, #4095, .T. ) ; +#36713 = VERTEX_POINT ( 'NONE', #32818 ) ; +#36714 = EDGE_CURVE ( 'NONE', #38067, #31236, #32161, .T. ) ; +#36715 = FACE_OUTER_BOUND ( 'NONE', #12219, .T. ) ; +#36716 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5030 ), #41827 ) ; +#36717 = FACE_OUTER_BOUND ( 'NONE', #1164, .T. ) ; +#36718 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.380001745296136400, -5.650000000000000400 ) ) ; +#36719 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36720 = FACE_OUTER_BOUND ( 'NONE', #22797, .T. ) ; +#36721 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36722 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34552 ), #6939 ) ; +#36723 = ADVANCED_FACE ( 'NONE', ( #26103 ), #39730, .T. ) ; +#36724 = SURFACE_STYLE_USAGE ( .BOTH. , #33757 ) ; +#36725 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.614007241618349200E-015, 0.0000000000000000000 ) ) ; +#36726 = DIRECTION ( 'NONE', ( -4.336808689942015400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#36727 = CIRCLE ( 'NONE', #23360, 0.9499999999999999600 ) ; +#36728 = AXIS2_PLACEMENT_3D ( 'NONE', #15766, #6182, #35282 ) ; +#36729 = LINE ( 'NONE', #33696, #41767 ) ; +#36730 = EDGE_CURVE ( 'NONE', #19142, #1007, #20590, .T. ) ; +#36731 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000003200, 0.2800017452961687200, -6.150000000000000400 ) ) ; +#36732 = SURFACE_SIDE_STYLE ('',( #16235 ) ) ; +#36733 = FACE_OUTER_BOUND ( 'NONE', #6698, .T. ) ; +#36734 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36736 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30241 ), #17004 ) ; +#36735 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28077 ), #38883 ) ; +#36737 = AXIS2_PLACEMENT_3D ( 'NONE', #21870, #8811, #28323 ) ; +#36738 = ORIENTED_EDGE ( 'NONE', *, *, #520, .T. ) ; +#36739 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36740 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36741 = SURFACE_STYLE_FILL_AREA ( #903 ) ; +#36742 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36743 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -2.322941965694886000, -1.249999999999999800 ) ) ; +#36744 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27964, 'distance_accuracy_value', 'NONE'); +#36745 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#36746 = VERTEX_POINT ( 'NONE', #14057 ) ; +#36747 = ORIENTED_EDGE ( 'NONE', *, *, #17736, .F. ) ; +#36748 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36749 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36750 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.9500017452961654300, -5.599999999999999600 ) ) ; +#36751 = SURFACE_STYLE_FILL_AREA ( #11654 ) ; +#36752 = CARTESIAN_POINT ( 'NONE', ( -4.465000000000001600, -0.01999825470386167400, -7.349248115565993400 ) ) ; +#36753 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#36754 = CIRCLE ( 'NONE', #14048, 0.3000000000000001600 ) ; +#36755 = ORIENTED_EDGE ( 'NONE', *, *, #23407, .F. ) ; +#36756 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.380001745296126800, -4.781671842700004200 ) ) ; +#36757 = EDGE_LOOP ( 'NONE', ( #26126, #24701, #16650, #6616 ) ) ; +#36758 = SURFACE_STYLE_FILL_AREA ( #25279 ) ; +#36759 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.779999999999868600, -0.2339555568811695400 ) ) ; +#36760 = DIRECTION ( 'NONE', ( -2.891205793294677000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#36761 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#36762 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid28', #11641 ) ; +#36763 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000027500, -0.2000017452961698200 ) ) ; +#36764 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36765 = EDGE_CURVE ( 'NONE', #33659, #27771, #2084, .T. ) ; +#36766 = FILL_AREA_STYLE ('',( #13312 ) ) ; +#36767 = EDGE_CURVE ( 'NONE', #30737, #2058, #5381, .T. ) ; +#36768 = EDGE_LOOP ( 'NONE', ( #17725, #1432, #8639, #11885 ) ) ; +#36769 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36770 = SURFACE_STYLE_USAGE ( .BOTH. , #39582 ) ; +#36771 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.5547001962252291500, -0.8320502943378437200 ) ) ; +#36772 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#36773 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21376, 'distance_accuracy_value', 'NONE'); +#36774 = EDGE_CURVE ( 'NONE', #31372, #24991, #32651, .T. ) ; +#36775 = VECTOR ( 'NONE', #2909, 1000.000000000000000 ) ; +#36776 = PRESENTATION_STYLE_ASSIGNMENT (( #5935 ) ) ; +#36777 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -1.149999999999999900 ) ) ; +#36778 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22975 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14076, #17325, #20877 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36779 = ORIENTED_EDGE ( 'NONE', *, *, #5101, .T. ) ; +#36780 = EDGE_LOOP ( 'NONE', ( #13485, #6153 ) ) ; +#36781 = FACE_OUTER_BOUND ( 'NONE', #34620, .T. ) ; +#36782 = ORIENTED_EDGE ( 'NONE', *, *, #4775, .F. ) ; +#36783 = VECTOR ( 'NONE', #27031, 1000.000000000000000 ) ; +#36784 = FILL_AREA_STYLE_COLOUR ( '', #36108 ) ; +#36787 = EDGE_CURVE ( 'NONE', #30794, #39218, #28127, .T. ) ; +#36786 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41117 ) ) ; +#36785 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, 2.322941965694886000, -1.250000000000000000 ) ) ; +#36788 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36789 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#36790 = VERTEX_POINT ( 'NONE', #14456 ) ; +#36791 = FACE_OUTER_BOUND ( 'NONE', #25559, .T. ) ; +#36792 = ORIENTED_EDGE ( 'NONE', *, *, #32117, .F. ) ; +#36793 = VERTEX_POINT ( 'NONE', #37191 ) ; +#36794 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, -0.5199999999999840300, -5.299999999999999800 ) ) ; +#36795 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14958, 'distance_accuracy_value', 'NONE'); +#36796 = ADVANCED_FACE ( 'NONE', ( #15996 ), #33663, .T. ) ; +#36798 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #444 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14374, #4766, #1283 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36797 = AXIS2_PLACEMENT_3D ( 'NONE', #33162, #1279, #40054 ) ; +#36799 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.2800017452961688400, -5.200000000000001100 ) ) ; +#36800 = FILL_AREA_STYLE_COLOUR ( '', #11074 ) ; +#36801 = AXIS2_PLACEMENT_3D ( 'NONE', #20186, #3633, #24638 ) ; +#36802 = LINE ( 'NONE', #19332, #19650 ) ; +#36803 = STYLED_ITEM ( 'NONE', ( #36001 ), #33830 ) ; +#36804 = ORIENTED_EDGE ( 'NONE', *, *, #14933, .F. ) ; +#36805 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36806 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#36807 = SURFACE_SIDE_STYLE ('',( #26600 ) ) ; +#36808 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, 2.322941965694886000, -1.250000000000000000 ) ) ; +#36809 = CIRCLE ( 'NONE', #5924, 0.1499999999998701800 ) ; +#36810 = FILL_AREA_STYLE_COLOUR ( '', #5518 ) ; +#36811 = FILL_AREA_STYLE_COLOUR ( '', #40312 ) ; +#36812 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26500, 'distance_accuracy_value', 'NONE'); +#36813 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.032879073410321300E-016, -1.000000000000000000 ) ) ; +#36814 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36815 = ORIENTED_EDGE ( 'NONE', *, *, #31719, .F. ) ; +#36816 = LINE ( 'NONE', #17622, #13536 ) ; +#36817 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865475700, 0.7071067811865475700 ) ) ; +#36818 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#36819 = CARTESIAN_POINT ( 'NONE', ( 3.119636707815099300, 0.2999999999999999300, 1.000000000000057300 ) ) ; +#36820 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#36821 = EDGE_LOOP ( 'NONE', ( #40414, #29793, #16686, #3782 ) ) ; +#36822 = VECTOR ( 'NONE', #25089, 1000.000000000000000 ) ; +#36823 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36824 = PRESENTATION_STYLE_ASSIGNMENT (( #36254 ) ) ; +#36825 = ORIENTED_EDGE ( 'NONE', *, *, #27548, .F. ) ; +#36826 = EDGE_LOOP ( 'NONE', ( #36075, #18731, #8883, #8270 ) ) ; +#36827 = FILL_AREA_STYLE_COLOUR ( '', #5949 ) ; +#36828 = SURFACE_STYLE_FILL_AREA ( #6671 ) ; +#36829 = SURFACE_STYLE_FILL_AREA ( #38062 ) ; +#36830 = LINE ( 'NONE', #9421, #8517 ) ; +#36831 = PRESENTATION_STYLE_ASSIGNMENT (( #4614 ) ) ; +#36832 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36833 = VERTEX_POINT ( 'NONE', #17730 ) ; +#36834 = FILL_AREA_STYLE ('',( #30613 ) ) ; +#36836 = PRESENTATION_STYLE_ASSIGNMENT (( #7710 ) ) ; +#36835 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#36837 = EDGE_LOOP ( 'NONE', ( #17810, #32108, #36946, #36645 ) ) ; +#36839 = VERTEX_POINT ( 'NONE', #11321 ) ; +#36838 = ADVANCED_FACE ( 'NONE', ( #38676 ), #1860, .T. ) ; +#36840 = EDGE_CURVE ( 'NONE', #11203, #13690, #4327, .T. ) ; +#36841 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#36842 = EDGE_CURVE ( 'NONE', #27389, #37267, #35177, .T. ) ; +#36843 = ORIENTED_EDGE ( 'NONE', *, *, #40840, .T. ) ; +#36844 = AXIS2_PLACEMENT_3D ( 'NONE', #9392, #29313, #28901 ) ; +#36845 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5061, 'distance_accuracy_value', 'NONE'); +#36846 = ADVANCED_FACE ( 'NONE', ( #26590 ), #27435, .T. ) ; +#36847 = STYLED_ITEM ( 'NONE', ( #12596 ), #14274 ) ; +#36848 = FACE_OUTER_BOUND ( 'NONE', #24265, .T. ) ; +#36849 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36850 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36851 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36852 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22262 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26013, #6918, #26157 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36853 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13008 ), #38995 ) ; +#36854 = CIRCLE ( 'NONE', #10842, 1.450424212713734300 ) ; +#36856 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35500 ), #39243 ) ; +#36855 = AXIS2_PLACEMENT_3D ( 'NONE', #35402, #38619, #41870 ) ; +#36857 = LINE ( 'NONE', #14482, #21734 ) ; +#36858 = EDGE_LOOP ( 'NONE', ( #41241, #22982, #19072, #13331 ) ) ; +#36860 = EDGE_CURVE ( 'NONE', #10245, #27559, #32120, .T. ) ; +#36859 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36861 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#36862 = SURFACE_STYLE_FILL_AREA ( #34201 ) ; +#36863 = CARTESIAN_POINT ( 'NONE', ( 3.095000000000000200, -0.07499999999999999700, -0.3254101966249999800 ) ) ; +#36864 = CARTESIAN_POINT ( 'NONE', ( -4.663004880385256200, -0.2799999999999974200, -0.7580972011844128200 ) ) ; +#36865 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -1.499998254703835300, -5.449999999999994000 ) ) ; +#36866 = VERTEX_POINT ( 'NONE', #15164 ) ; +#36868 = STYLED_ITEM ( 'NONE', ( #634 ), #880 ) ; +#36867 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34703 ) ) ; +#36869 = LINE ( 'NONE', #8545, #37388 ) ; +#36870 = FILL_AREA_STYLE ('',( #4668 ) ) ; +#36871 = VECTOR ( 'NONE', #39833, 1000.000000000000000 ) ; +#36872 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36873 = FILL_AREA_STYLE_COLOUR ( '', #14186 ) ; +#36874 = ORIENTED_EDGE ( 'NONE', *, *, #22034, .T. ) ; +#36875 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.380001745296141500, -4.781671842700004200 ) ) ; +#36876 = ORIENTED_EDGE ( 'NONE', *, *, #6593, .T. ) ; +#36877 = ORIENTED_EDGE ( 'NONE', *, *, #6926, .T. ) ; +#36878 = SURFACE_STYLE_FILL_AREA ( #39751 ) ; +#36879 = CARTESIAN_POINT ( 'NONE', ( 4.520424214906981300, -0.2800000000000026400, -1.050000000000000000 ) ) ; +#36880 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36881 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#36882 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36883 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.4300017452961691400, -6.899999999999998600 ) ) ; +#36884 = ORIENTED_EDGE ( 'NONE', *, *, #5096, .F. ) ; +#36885 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026400, -0.2339555568811695900 ) ) ; +#36886 = ADVANCED_FACE ( 'NONE', ( #16981 ), #8899, .F. ) ; +#36887 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36888 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36889 = LINE ( 'NONE', #7799, #28288 ) ; +#36890 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -2.031000000000000600, -2.604459358809380300 ) ) ; +#36891 = PRESENTATION_STYLE_ASSIGNMENT (( #25255 ) ) ; +#36892 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#36893 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#36894 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#36895 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.4300017452961695800, -6.899999999999998600 ) ) ; +#36896 = FACE_OUTER_BOUND ( 'NONE', #1370, .T. ) ; +#36897 = EDGE_CURVE ( 'NONE', #4770, #33297, #8338, .T. ) ; +#36898 = SURFACE_SIDE_STYLE ('',( #19956 ) ) ; +#36899 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000500, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#36900 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000030900, -2.031000000000001500, -6.449999999999999300 ) ) ; +#36901 = EDGE_CURVE ( 'NONE', #6260, #36839, #19013, .T. ) ; +#36902 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12251 ) ) ; +#36903 = ORIENTED_EDGE ( 'NONE', *, *, #29132, .T. ) ; +#36904 = SURFACE_SIDE_STYLE ('',( #34611 ) ) ; +#36905 = VERTEX_POINT ( 'NONE', #28011 ) ; +#36906 = CIRCLE ( 'NONE', #25478, 1.499999999999867700 ) ; +#36907 = VERTEX_POINT ( 'NONE', #40701 ) ; +#36908 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30407 ), #17983 ) ; +#36909 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36910 = ORIENTED_EDGE ( 'NONE', *, *, #38976, .F. ) ; +#36911 = EDGE_LOOP ( 'NONE', ( #41440, #29140, #29228, #6486 ) ) ; +#36912 = EDGE_LOOP ( 'NONE', ( #7982, #31399, #9273, #31859 ) ) ; +#36913 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #32571 ) ) ; +#36914 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13397 ) ) ; +#36915 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, -0.09999999999998497600, -4.250000000000000000 ) ) ; +#36916 = FILL_AREA_STYLE_COLOUR ( '', #29119 ) ; +#36918 = STYLED_ITEM ( 'NONE', ( #12545 ), #6091 ) ; +#36917 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #961 ) ) ; +#36919 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#36920 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1348, 'distance_accuracy_value', 'NONE'); +#36922 = EDGE_CURVE ( 'NONE', #1554, #12476, #9352, .T. ) ; +#36921 = AXIS2_PLACEMENT_3D ( 'NONE', #1836, #37377, #18192 ) ; +#36923 = EDGE_LOOP ( 'NONE', ( #5125, #6532, #11855, #30292 ) ) ; +#36924 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36925 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#36926 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.2000017452961698200 ) ) ; +#36927 = LINE ( 'NONE', #17360, #1578 ) ; +#36929 = STYLED_ITEM ( 'NONE', ( #4521 ), #1352 ) ; +#36928 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14469 ) ) ; +#36930 = AXIS2_PLACEMENT_3D ( 'NONE', #18550, #40543, #11456 ) ; +#36931 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#36932 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36933 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9084, 'distance_accuracy_value', 'NONE'); +#36934 = ADVANCED_FACE ( 'NONE', ( #37664 ), #14871, .T. ) ; +#36935 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36936 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #3856, #39865, #39453, #7525 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#36937 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#36938 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -4.975000000000000500 ) ) ; +#36939 = LINE ( 'NONE', #18358, #18280 ) ; +#36940 = ORIENTED_EDGE ( 'NONE', *, *, #1182, .T. ) ; +#36941 = SURFACE_SIDE_STYLE ('',( #11608 ) ) ; +#36942 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#36943 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000008300, -0.8500017452961654600, -4.975000000000000500 ) ) ; +#36944 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 0.1000000000000133800, -4.450000000000000200 ) ) ; +#36945 = ORIENTED_EDGE ( 'NONE', *, *, #38241, .F. ) ; +#36946 = ORIENTED_EDGE ( 'NONE', *, *, #18324, .F. ) ; +#36947 = LINE ( 'NONE', #7914, #4609 ) ; +#36948 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28570, 'distance_accuracy_value', 'NONE'); +#36949 = SURFACE_SIDE_STYLE ('',( #21697 ) ) ; +#36950 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#36951 = VECTOR ( 'NONE', #3547, 1000.000000000000000 ) ; +#36952 = VECTOR ( 'NONE', #38713, 1000.000000000000000 ) ; +#36953 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#36954 = VECTOR ( 'NONE', #38840, 1000.000000000000200 ) ; +#36955 = PLANE ( 'NONE', #13187 ) ; +#36956 = VERTEX_POINT ( 'NONE', #21819 ) ; +#36957 = EDGE_CURVE ( 'NONE', #598, #7393, #27073, .T. ) ; +#36958 = ORIENTED_EDGE ( 'NONE', *, *, #3350, .T. ) ; +#36959 = ORIENTED_EDGE ( 'NONE', *, *, #3772, .F. ) ; +#36960 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34671, 'distance_accuracy_value', 'NONE'); +#36961 = CARTESIAN_POINT ( 'NONE', ( 3.839743771154402000, 0.6300017452961683700, -4.549999999999999800 ) ) ; +#36962 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#36963 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.730380239188924900, -0.8400209439508702400 ) ) ; +#36964 = EDGE_CURVE ( 'NONE', #4734, #33659, #7831, .T. ) ; +#36965 = CARTESIAN_POINT ( 'NONE', ( 0.6500000000000000200, -1.380001745296134000, -6.031671842700004200 ) ) ; +#36966 = ORIENTED_EDGE ( 'NONE', *, *, #41567, .F. ) ; +#36967 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664843100, -1.380001745296171900, -6.250000000000000000 ) ) ; +#36968 = ORIENTED_EDGE ( 'NONE', *, *, #1421, .T. ) ; +#36969 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16117 ), #40474 ) ; +#36970 = SURFACE_STYLE_FILL_AREA ( #9778 ) ; +#36971 = PRESENTATION_STYLE_ASSIGNMENT (( #22738 ) ) ; +#36972 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36973 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 7.228014483236709400E-016 ) ) ; +#36974 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36975 = STYLED_ITEM ( 'NONE', ( #39202 ), #20577 ) ; +#36976 = FACE_OUTER_BOUND ( 'NONE', #3923, .T. ) ; +#36977 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35370 ) ) ; +#36978 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#36979 = LINE ( 'NONE', #40929, #33934 ) ; +#36980 = ORIENTED_EDGE ( 'NONE', *, *, #34238, .F. ) ; +#36982 = EDGE_CURVE ( 'NONE', #39566, #3262, #34147, .T. ) ; +#36981 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #21354 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11744, #40987, #34364 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36983 = LINE ( 'NONE', #1313, #28386 ) ; +#36984 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#36985 = CLOSED_SHELL ( 'NONE', ( #11613, #34745, #2737, #20511 ) ) ; +#36986 = VECTOR ( 'NONE', #22626, 1000.000000000000000 ) ; +#36987 = AXIS2_PLACEMENT_3D ( 'NONE', #26516, #36139, #33427 ) ; +#36988 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#36989 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29941 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14365, #18042, #1971 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#36990 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -500000.0000000000600, -3.514459358691020000 ) ) ; +#36991 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3935 ), #10432 ) ; +#36992 = ORIENTED_EDGE ( 'NONE', *, *, #22984, .F. ) ; +#36993 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#36994 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35006, 'distance_accuracy_value', 'NONE'); +#36995 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#36996 = VERTEX_POINT ( 'NONE', #2339 ) ; +#36997 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.3499999999999996400, -1.249999999999999800 ) ) ; +#36998 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#36999 = ORIENTED_EDGE ( 'NONE', *, *, #18297, .F. ) ; +#37000 = VECTOR ( 'NONE', #29916, 1000.000000000000000 ) ; +#37001 = PLANE ( 'NONE', #14898 ) ; +#37002 = LINE ( 'NONE', #33575, #24922 ) ; +#37003 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37004 = ADVANCED_FACE ( 'NONE', ( #18482 ), #27577, .T. ) ; +#37005 = FILL_AREA_STYLE ('',( #34178 ) ) ; +#37006 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#37007 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37008 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#37009 = EDGE_CURVE ( 'NONE', #28578, #22169, #3297, .T. ) ; +#37010 = EDGE_CURVE ( 'NONE', #41459, #37036, #10374, .T. ) ; +#37011 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -1.499998254703823800, -5.449999999999994000 ) ) ; +#37012 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37013 = VERTEX_POINT ( 'NONE', #41660 ) ; +#37014 = DIRECTION ( 'NONE', ( -3.281909278875039200E-015, -1.000000000000000000, -2.828353493440455200E-016 ) ) ; +#37015 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37016 = EDGE_CURVE ( 'NONE', #31185, #27685, #38656, .T. ) ; +#37017 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#37018 = ORIENTED_EDGE ( 'NONE', *, *, #41409, .T. ) ; +#37019 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38366 ), #31876 ) ; +#37020 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37021 = PLANE ( 'NONE', #22398 ) ; +#37022 = CARTESIAN_POINT ( 'NONE', ( 4.750000000000003600, -0.7099999999999991900, -6.861124800398366500 ) ) ; +#37023 = EDGE_CURVE ( 'NONE', #12406, #4711, #34630, .T. ) ; +#37024 = FILL_AREA_STYLE ('',( #5103 ) ) ; +#37025 = VERTEX_POINT ( 'NONE', #28957 ) ; +#37026 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16766 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #150, #9672, #9937 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37027 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37029 = EDGE_LOOP ( 'NONE', ( #24276, #41282, #25335, #22922 ) ) ; +#37028 = FACE_OUTER_BOUND ( 'NONE', #21776, .T. ) ; +#37030 = ORIENTED_EDGE ( 'NONE', *, *, #34179, .T. ) ; +#37031 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.931303021499040500, -0.3590461068823618300 ) ) ; +#37034 = EDGE_CURVE ( 'NONE', #19624, #36436, #10857, .T. ) ; +#37033 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8860 ) ) ; +#37032 = CARTESIAN_POINT ( 'NONE', ( -3.242513005636281000, -0.2999999999999999900, 0.7036642131129723400 ) ) ; +#37035 = FILL_AREA_STYLE ('',( #14310 ) ) ; +#37036 = VERTEX_POINT ( 'NONE', #5963 ) ; +#37037 = VECTOR ( 'NONE', #35730, 1000.000000000000000 ) ; +#37038 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#37039 = ORIENTED_EDGE ( 'NONE', *, *, #6148, .T. ) ; +#37040 = ADVANCED_FACE ( 'NONE', ( #20028 ), #24523, .F. ) ; +#37041 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#37043 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31897 ), #34071 ) ; +#37042 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24050 ), #21923 ) ; +#37044 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#37045 = SURFACE_STYLE_FILL_AREA ( #34469 ) ; +#37046 = FILL_AREA_STYLE ('',( #31568 ) ) ; +#37047 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2982 ), #1636 ) ; +#37048 = SURFACE_STYLE_FILL_AREA ( #9729 ) ; +#37049 = FILL_AREA_STYLE ('',( #14050 ) ) ; +#37050 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4501 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23312, #38973, #3395 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37052 = STYLED_ITEM ( 'NONE', ( #21534 ), #7961 ) ; +#37051 = CIRCLE ( 'NONE', #38389, 0.1000000000000002600 ) ; +#37053 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37054 = FILL_AREA_STYLE_COLOUR ( '', #27732 ) ; +#37055 = SURFACE_SIDE_STYLE ('',( #31639 ) ) ; +#37056 = ADVANCED_FACE ( 'NONE', ( #40159 ), #12719, .T. ) ; +#37057 = ORIENTED_EDGE ( 'NONE', *, *, #22246, .F. ) ; +#37058 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -1.499998254703825300, -5.049999999999993600 ) ) ; +#37059 = CARTESIAN_POINT ( 'NONE', ( -3.332298852287715700, -0.2999999198035229700, -1.600000000000000300 ) ) ; +#37060 = ORIENTED_EDGE ( 'NONE', *, *, #9653, .T. ) ; +#37061 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33936, 'distance_accuracy_value', 'NONE'); +#37062 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17212, 'distance_accuracy_value', 'NONE'); +#37063 = ORIENTED_EDGE ( 'NONE', *, *, #15141, .T. ) ; +#37064 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.499998254703829500, -6.699999999999994000 ) ) ; +#37065 = DIRECTION ( 'NONE', ( 3.976777186418611300E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#37067 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#37066 = PLANE ( 'NONE', #3981 ) ; +#37068 = ORIENTED_EDGE ( 'NONE', *, *, #3536, .T. ) ; +#37069 = ORIENTED_EDGE ( 'NONE', *, *, #24191, .F. ) ; +#37070 = VERTEX_POINT ( 'NONE', #32060 ) ; +#37072 = ORIENTED_EDGE ( 'NONE', *, *, #19373, .T. ) ; +#37071 = SURFACE_STYLE_FILL_AREA ( #8421 ) ; +#37073 = ORIENTED_EDGE ( 'NONE', *, *, #33924, .T. ) ; +#37074 = CARTESIAN_POINT ( 'NONE', ( -3.245000000007000300, -0.2999999999999999900, -1.600000000000000100 ) ) ; +#37075 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.280001745296167800, -4.200000000000000200 ) ) ; +#37076 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#37077 = FACE_OUTER_BOUND ( 'NONE', #16764, .T. ) ; +#37078 = ORIENTED_EDGE ( 'NONE', *, *, #15340, .T. ) ; +#37079 = EDGE_CURVE ( 'NONE', #12368, #26547, #34102, .T. ) ; +#37080 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37081 = CIRCLE ( 'NONE', #28324, 0.2999999999999999300 ) ; +#37082 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37083 = VECTOR ( 'NONE', #12007, 1000.000000000000200 ) ; +#37084 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4523, 'distance_accuracy_value', 'NONE'); +#37085 = SURFACE_STYLE_FILL_AREA ( #33951 ) ; +#37086 = FILL_AREA_STYLE ('',( #40031 ) ) ; +#37087 = EDGE_CURVE ( 'NONE', #13062, #8117, #27540, .T. ) ; +#37088 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37089 = AXIS2_PLACEMENT_3D ( 'NONE', #31688, #2510, #28861 ) ; +#37090 = ADVANCED_FACE ( 'NONE', ( #29012 ), #15968, .F. ) ; +#37091 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.4300017452961689100, -5.200000000000001100 ) ) ; +#37092 = CARTESIAN_POINT ( 'NONE', ( -1.486602540378444200, 1.630001745296169500, -1.700000000000001500 ) ) ; +#37093 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4982 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20878, #13919, #24083 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37094 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37095 = AXIS2_PLACEMENT_3D ( 'NONE', #29817, #38983, #35759 ) ; +#37096 = AXIS2_PLACEMENT_3D ( 'NONE', #27059, #7816, #30426 ) ; +#37098 = AXIS2_PLACEMENT_3D ( 'NONE', #9515, #19444, #19176 ) ; +#37097 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20675 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24905, #11979, #5523 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37099 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#37100 = CIRCLE ( 'NONE', #2125, 0.2999999999999999300 ) ; +#37101 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#37102 = VERTEX_POINT ( 'NONE', #2888 ) ; +#37103 = PRESENTATION_STYLE_ASSIGNMENT (( #33403 ) ) ; +#37105 = EDGE_CURVE ( 'NONE', #6969, #29416, #40648, .T. ) ; +#37104 = STYLED_ITEM ( 'NONE', ( #18211 ), #34336 ) ; +#37106 = SURFACE_STYLE_USAGE ( .BOTH. , #1691 ) ; +#37107 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37108 = ORIENTED_EDGE ( 'NONE', *, *, #5595, .T. ) ; +#37109 = SURFACE_SIDE_STYLE ('',( #32030 ) ) ; +#37110 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37111 = ORIENTED_EDGE ( 'NONE', *, *, #13185, .F. ) ; +#37112 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20643 ), #12716 ) ; +#37113 = ORIENTED_EDGE ( 'NONE', *, *, #24774, .T. ) ; +#37114 = EDGE_LOOP ( 'NONE', ( #18410, #2816, #4125, #40696 ) ) ; +#37115 = VECTOR ( 'NONE', #40581, 1000.000000000000000 ) ; +#37116 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000005300, -1.500001745296163400, -7.500000000000006200 ) ) ; +#37117 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21192 ), #15687 ) ; +#37118 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37119 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#37120 = FACE_OUTER_BOUND ( 'NONE', #22054, .T. ) ; +#37121 = CARTESIAN_POINT ( 'NONE', ( -4.769999999999744700, -0.2799999999999974200, -0.2339555568811695900 ) ) ; +#37122 = SURFACE_STYLE_USAGE ( .BOTH. , #31324 ) ; +#37124 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#37123 = FILL_AREA_STYLE_COLOUR ( '', #28340 ) ; +#37125 = ORIENTED_EDGE ( 'NONE', *, *, #34448, .T. ) ; +#37126 = CARTESIAN_POINT ( 'NONE', ( -0.1500000000000000200, -1.499998254703829500, -6.299999999999993600 ) ) ; +#37127 = DIRECTION ( 'NONE', ( 6.056601140521967000E-031, 1.987721548152419000E-045, 1.000000000000000000 ) ) ; +#37128 = LINE ( 'NONE', #21216, #28540 ) ; +#37129 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521965300E-031 ) ) ; +#37130 = ORIENTED_EDGE ( 'NONE', *, *, #13680, .F. ) ; +#37131 = ORIENTED_EDGE ( 'NONE', *, *, #35786, .F. ) ; +#37132 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#37133 = VECTOR ( 'NONE', #7058, 1000.000000000000000 ) ; +#37134 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37135 = EDGE_CURVE ( 'NONE', #14329, #16898, #5277, .T. ) ; +#37137 = ADVANCED_FACE ( 'NONE', ( #799 ), #2347, .T. ) ; +#37136 = LINE ( 'NONE', #40243, #30576 ) ; +#37138 = CARTESIAN_POINT ( 'NONE', ( -3.395000000000000000, 0.2000000000000000900, -3.299999999999999800 ) ) ; +#37139 = ORIENTED_EDGE ( 'NONE', *, *, #23656, .F. ) ; +#37140 = VECTOR ( 'NONE', #20051, 1000.000000000000000 ) ; +#37141 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.180001745296166000, -4.675000000000000700 ) ) ; +#37142 = EDGE_CURVE ( 'NONE', #40176, #167, #6305, .T. ) ; +#37143 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19847 ) ) ; +#37144 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33641, 'distance_accuracy_value', 'NONE'); +#37145 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.3699999999999849000, -4.599999999999999600 ) ) ; +#37146 = SURFACE_STYLE_USAGE ( .BOTH. , #20954 ) ; +#37147 = EDGE_LOOP ( 'NONE', ( #31952, #31148, #27756, #32464, #955, #12327, #25393 ) ) ; +#37148 = VECTOR ( 'NONE', #12863, 1000.000000000000000 ) ; +#37149 = SURFACE_STYLE_USAGE ( .BOTH. , #40381 ) ; +#37150 = AXIS2_PLACEMENT_3D ( 'NONE', #38423, #6109, #19121 ) ; +#37151 = DIRECTION ( 'NONE', ( -3.135035834215943800E-015, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#37152 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#37153 = CYLINDRICAL_SURFACE ( 'NONE', #1334, 0.1000000000000000500 ) ; +#37154 = VECTOR ( 'NONE', #26117, 1000.000000000000000 ) ; +#37155 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865475700, 0.7071067811865475700 ) ) ; +#37156 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #30996, #34111, #30866, #2095 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 2.418858405776366500, 3.141592653589793100 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956555600, 0.9569428977956555600, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#37157 = SURFACE_STYLE_FILL_AREA ( #41411 ) ; +#37158 = VERTEX_POINT ( 'NONE', #13135 ) ; +#37159 = SURFACE_SIDE_STYLE ('',( #6713 ) ) ; +#37160 = STYLED_ITEM ( 'NONE', ( #37251 ), #38750 ) ; +#37161 = SURFACE_STYLE_USAGE ( .BOTH. , #14427 ) ; +#37162 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38276 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37003, #40226, #8025 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37163 = DIRECTION ( 'NONE', ( 9.637352644315598700E-016, 1.807003620809174900E-016, 1.000000000000000000 ) ) ; +#37164 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #38499 ), #25545 ) ; +#37165 = FACE_OUTER_BOUND ( 'NONE', #35151, .T. ) ; +#37166 = FACE_OUTER_BOUND ( 'NONE', #21979, .T. ) ; +#37167 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.1000000000000135900, -4.450000000000000200 ) ) ; +#37168 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37169 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37170 = ORIENTED_EDGE ( 'NONE', *, *, #14083, .T. ) ; +#37171 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.380001745296135700, -6.031671842700004200 ) ) ; +#37172 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37174 = EDGE_CURVE ( 'NONE', #24143, #38653, #10278, .T. ) ; +#37173 = STYLED_ITEM ( 'NONE', ( #38424 ), #35428 ) ; +#37175 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37176 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#37177 = PLANE ( 'NONE', #8735 ) ; +#37179 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7231 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3429, #506, #3970 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37178 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14633 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26602, #23351, #39565 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37180 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37181 = PLANE ( 'NONE', #35517 ) ; +#37182 = EDGE_LOOP ( 'NONE', ( #41483, #20899, #1410, #4230 ) ) ; +#37183 = SURFACE_SIDE_STYLE ('',( #2885 ) ) ; +#37184 = VECTOR ( 'NONE', #35612, 1000.000000000000000 ) ; +#37185 = VECTOR ( 'NONE', #25064, 1000.000000000000000 ) ; +#37186 = VECTOR ( 'NONE', #33873, 1000.000000000000000 ) ; +#37187 = ORIENTED_EDGE ( 'NONE', *, *, #11570, .T. ) ; +#37188 = ORIENTED_EDGE ( 'NONE', *, *, #29775, .T. ) ; +#37189 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37190 = ORIENTED_EDGE ( 'NONE', *, *, #36767, .F. ) ; +#37191 = CARTESIAN_POINT ( 'NONE', ( 3.337718385397934600, 0.07499999999999999700, 0.4680226303560737800 ) ) ; +#37192 = SURFACE_STYLE_USAGE ( .BOTH. , #15013 ) ; +#37193 = FILL_AREA_STYLE ('',( #5127 ) ) ; +#37194 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#37195 = EDGE_LOOP ( 'NONE', ( #31414, #6311, #10254, #14119 ) ) ; +#37196 = FACE_OUTER_BOUND ( 'NONE', #13181, .T. ) ; +#37197 = SURFACE_STYLE_FILL_AREA ( #41839 ) ; +#37198 = ORIENTED_EDGE ( 'NONE', *, *, #20939, .F. ) ; +#37199 = EDGE_CURVE ( 'NONE', #37025, #16721, #32552, .T. ) ; +#37200 = VECTOR ( 'NONE', #10366, 1000.000000000000000 ) ; +#37201 = VECTOR ( 'NONE', #1924, 1000.000000000000000 ) ; +#37202 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37203 = ORIENTED_EDGE ( 'NONE', *, *, #33804, .T. ) ; +#37204 = EDGE_CURVE ( 'NONE', #5970, #29368, #1758, .T. ) ; +#37205 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -9.035070666963931600E-017 ) ) ; +#37206 = FILL_AREA_STYLE ('',( #1513 ) ) ; +#37207 = SURFACE_STYLE_FILL_AREA ( #4035 ) ; +#37208 = FILL_AREA_STYLE ('',( #8228 ) ) ; +#37209 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #17862, #20859, #30286, #17454, #23931, #40007 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#37210 = ADVANCED_FACE ( 'NONE', ( #29509 ), #7040, .F. ) ; +#37211 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8830 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20624, #23966, #4329 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37212 = SURFACE_STYLE_USAGE ( .BOTH. , #18022 ) ; +#37213 = STYLED_ITEM ( 'NONE', ( #38314 ), #19921 ) ; +#37214 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.279999999999999800, -0.2000017452961698200 ) ) ; +#37215 = AXIS2_PLACEMENT_3D ( 'NONE', #23341, #36065, #27024 ) ; +#37216 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41524 ), #23430 ) ; +#37217 = SURFACE_SIDE_STYLE ('',( #38286 ) ) ; +#37218 = ORIENTED_EDGE ( 'NONE', *, *, #36042, .T. ) ; +#37219 = SURFACE_STYLE_FILL_AREA ( #7742 ) ; +#37222 = EDGE_CURVE ( 'NONE', #32404, #33502, #19447, .T. ) ; +#37221 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 0.2999999999999999900, 0.3499999999999999800 ) ) ; +#37220 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18563 ) ) ; +#37223 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37224 = ORIENTED_EDGE ( 'NONE', *, *, #20030, .F. ) ; +#37225 = LINE ( 'NONE', #27133, #25610 ) ; +#37226 = CARTESIAN_POINT ( 'NONE', ( 4.010831726188969900, 0.5300017452961703900, -4.576794919243110500 ) ) ; +#37227 = EDGE_LOOP ( 'NONE', ( #38377, #11606, #5013, #9396, #13643, #18255, #38059, #8601, #29815, #12927 ) ) ; +#37228 = CARTESIAN_POINT ( 'NONE', ( 3.245000000016000200, 0.3499999999999999800, -1.649999999990000100 ) ) ; +#37229 = LINE ( 'NONE', #8747, #1409 ) ; +#37231 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32897 ), #21306 ) ; +#37230 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25080 ) ) ; +#37232 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37233 = STYLED_ITEM ( 'NONE', ( #24494 ), #39606 ) ; +#37234 = FACE_OUTER_BOUND ( 'NONE', #33098, .T. ) ; +#37235 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37236 = FACE_OUTER_BOUND ( 'NONE', #32879, .T. ) ; +#37237 = AXIS2_PLACEMENT_3D ( 'NONE', #2641, #31681, #39000 ) ; +#37238 = FILL_AREA_STYLE ('',( #23548 ) ) ; +#37239 = ORIENTED_EDGE ( 'NONE', *, *, #1418, .F. ) ; +#37240 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17799, 'distance_accuracy_value', 'NONE'); +#37241 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000009200, -0.9281066972901055300, -6.861124800398366500 ) ) ; +#37242 = PRESENTATION_STYLE_ASSIGNMENT (( #401 ) ) ; +#37243 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37244 = LINE ( 'NONE', #38133, #40264 ) ; +#37245 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37246 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37247 = SURFACE_STYLE_USAGE ( .BOTH. , #14513 ) ; +#37248 = ADVANCED_FACE ( 'NONE', ( #19943 ), #12323, .T. ) ; +#37249 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.3500000000000000300, -1.300000000000000000 ) ) ; +#37250 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21498, 'distance_accuracy_value', 'NONE'); +#37251 = PRESENTATION_STYLE_ASSIGNMENT (( #12341 ) ) ; +#37252 = ORIENTED_EDGE ( 'NONE', *, *, #4216, .T. ) ; +#37253 = VECTOR ( 'NONE', #16577, 1000.000000000000000 ) ; +#37254 = PLANE ( 'NONE', #33877 ) ; +#37255 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37256 = ADVANCED_FACE ( 'NONE', ( #22951 ), #7471, .F. ) ; +#37257 = EDGE_CURVE ( 'NONE', #33935, #10188, #24474, .T. ) ; +#37258 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37259 = EDGE_CURVE ( 'NONE', #16124, #24146, #37100, .T. ) ; +#37260 = ORIENTED_EDGE ( 'NONE', *, *, #11590, .F. ) ; +#37261 = ORIENTED_EDGE ( 'NONE', *, *, #216, .T. ) ; +#37262 = VECTOR ( 'NONE', #16702, 1000.000000000000000 ) ; +#37263 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244516300E-016 ) ) ; +#37264 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14252, 'distance_accuracy_value', 'NONE'); +#37265 = EDGE_CURVE ( 'NONE', #15701, #4344, #36616, .T. ) ; +#37266 = CARTESIAN_POINT ( 'NONE', ( 3.273571428571044000, -0.07499999999999999700, -0.08583148475013729900 ) ) ; +#37267 = VERTEX_POINT ( 'NONE', #26724 ) ; +#37268 = ORIENTED_EDGE ( 'NONE', *, *, #12847, .F. ) ; +#37269 = ORIENTED_EDGE ( 'NONE', *, *, #21209, .F. ) ; +#37270 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28356 ) ) ; +#37271 = FILL_AREA_STYLE_COLOUR ( '', #6389 ) ; +#37272 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#37273 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37274 = ORIENTED_EDGE ( 'NONE', *, *, #3922, .T. ) ; +#37275 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37276 = PRESENTATION_STYLE_ASSIGNMENT (( #24077 ) ) ; +#37277 = EDGE_LOOP ( 'NONE', ( #6964, #188, #11034, #36703 ) ) ; +#37278 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#37279 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24292 ) ) ; +#37280 = SURFACE_SIDE_STYLE ('',( #24370 ) ) ; +#37281 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.4300017452961689100, -5.150000000000000400 ) ) ; +#37282 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2679 ) ) ; +#37283 = VECTOR ( 'NONE', #10122, 1000.000000000000000 ) ; +#37285 = EDGE_CURVE ( 'NONE', #39643, #36536, #28511, .T. ) ; +#37284 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28070 ), #31591 ) ; +#37286 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1305, 'distance_accuracy_value', 'NONE'); +#37287 = CARTESIAN_POINT ( 'NONE', ( -3.178333333333019300, -0.2999999999999999900, -0.06128090415826408600 ) ) ; +#37288 = ORIENTED_EDGE ( 'NONE', *, *, #13943, .F. ) ; +#37289 = CARTESIAN_POINT ( 'NONE', ( -3.332298852287715700, 0.2999999198035229700, -1.600000000000000300 ) ) ; +#37290 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37291 = FACE_OUTER_BOUND ( 'NONE', #31871, .T. ) ; +#37292 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#37294 = STYLED_ITEM ( 'NONE', ( #28925 ), #3175 ) ; +#37293 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11793 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20554, #23773, #4709 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37295 = AXIS2_PLACEMENT_3D ( 'NONE', #28785, #3226, #9262 ) ; +#37296 = SURFACE_STYLE_USAGE ( .BOTH. , #27549 ) ; +#37297 = CARTESIAN_POINT ( 'NONE', ( 3.177590114275937100, 0.07499999999999999700, -0.1320321080526413200 ) ) ; +#37298 = VECTOR ( 'NONE', #40313, 1000.000000000000000 ) ; +#37299 = SURFACE_SIDE_STYLE ('',( #34683 ) ) ; +#37300 = ADVANCED_FACE ( 'NONE', ( #33047 ), #1180, .F. ) ; +#37301 = ORIENTED_EDGE ( 'NONE', *, *, #13384, .T. ) ; +#37302 = SURFACE_STYLE_USAGE ( .BOTH. , #30939 ) ; +#37303 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35953 ) ) ; +#37304 = ORIENTED_EDGE ( 'NONE', *, *, #31023, .T. ) ; +#37305 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#37306 = DIRECTION ( 'NONE', ( -0.08715574274765916500, -2.860372408307886300E-016, -0.9961946980917455500 ) ) ; +#37307 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38210, 'distance_accuracy_value', 'NONE'); +#37308 = DIRECTION ( 'NONE', ( -1.548860246407863600E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#37309 = ORIENTED_EDGE ( 'NONE', *, *, #35715, .F. ) ; +#37310 = DIRECTION ( 'NONE', ( 1.000000000000000000, 2.125187526910352900E-031, 1.156482317317871700E-015 ) ) ; +#37311 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 1.536856579498202500E-014, 0.0000000000000000000 ) ) ; +#37312 = VERTEX_POINT ( 'NONE', #36864 ) ; +#37313 = ORIENTED_EDGE ( 'NONE', *, *, #5653, .F. ) ; +#37314 = VERTEX_POINT ( 'NONE', #33897 ) ; +#37315 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37316 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37317 = VECTOR ( 'NONE', #175, 1000.000000000000000 ) ; +#37318 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#37319 = ORIENTED_EDGE ( 'NONE', *, *, #3121, .F. ) ; +#37320 = VECTOR ( 'NONE', #1405, 1000.000000000000000 ) ; +#37321 = ORIENTED_EDGE ( 'NONE', *, *, #21901, .F. ) ; +#37322 = ORIENTED_EDGE ( 'NONE', *, *, #20868, .F. ) ; +#37323 = CARTESIAN_POINT ( 'NONE', ( 4.460004702845592900, -0.01999825470383237400, -7.349750161819857300 ) ) ; +#37324 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35205, 'distance_accuracy_value', 'NONE'); +#37325 = FILL_AREA_STYLE ('',( #20986 ) ) ; +#37326 = VERTEX_POINT ( 'NONE', #8024 ) ; +#37327 = EDGE_CURVE ( 'NONE', #15473, #18678, #36068, .T. ) ; +#37328 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -1.380001745296143100, -5.449999999999994000 ) ) ; +#37329 = CARTESIAN_POINT ( 'NONE', ( 3.194372470608958000, -0.5127785921331337000, -1.842766950722031900 ) ) ; +#37330 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37331 = SURFACE_SIDE_STYLE ('',( #13163 ) ) ; +#37332 = EDGE_CURVE ( 'NONE', #32578, #33387, #31508, .T. ) ; +#37333 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37334 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#37335 = VECTOR ( 'NONE', #33568, 1000.000000000000000 ) ; +#37336 = DIRECTION ( 'NONE', ( 5.916456789157588500E-031, 1.000000000000000000, -2.367138801244514800E-016 ) ) ; +#37337 = STYLED_ITEM ( 'NONE', ( #33591 ), #22217 ) ; +#37338 = SURFACE_STYLE_FILL_AREA ( #30105 ) ; +#37339 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31085 ), #9958 ) ; +#37340 = SURFACE_STYLE_USAGE ( .BOTH. , #34091 ) ; +#37341 = ORIENTED_EDGE ( 'NONE', *, *, #2868, .T. ) ; +#37343 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #27100 ), #16251 ) ; +#37342 = CARTESIAN_POINT ( 'NONE', ( 3.889218268258672200, 0.5679960902790086600, -4.405193821063696700 ) ) ; +#37344 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -10.30000000000000100, -1.250000000000000000 ) ) ; +#37345 = PRESENTATION_STYLE_ASSIGNMENT (( #17327 ) ) ; +#37346 = CARTESIAN_POINT ( 'NONE', ( 3.045000000000000400, 0.3165012999008123300, -1.266501299900580500 ) ) ; +#37347 = ADVANCED_FACE ( 'NONE', ( #39075 ), #34030, .T. ) ; +#37348 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37349 = VERTEX_POINT ( 'NONE', #27396 ) ; +#37350 = ORIENTED_EDGE ( 'NONE', *, *, #27560, .T. ) ; +#37351 = LINE ( 'NONE', #36808, #28761 ) ; +#37353 = AXIS2_PLACEMENT_3D ( 'NONE', #33999, #21318, #24404 ) ; +#37352 = AXIS2_PLACEMENT_3D ( 'NONE', #4988, #34366, #15016 ) ; +#37354 = SURFACE_STYLE_USAGE ( .BOTH. , #5273 ) ; +#37355 = SURFACE_SIDE_STYLE ('',( #9513 ) ) ; +#37356 = LINE ( 'NONE', #12537, #28765 ) ; +#37357 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.2999999999999999900, 0.3499999999999999800 ) ) ; +#37358 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#37360 = STYLED_ITEM ( 'NONE', ( #22254 ), #9304 ) ; +#37359 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38862 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16366, #21633, #6612 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37361 = ORIENTED_EDGE ( 'NONE', *, *, #23407, .T. ) ; +#37362 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37363 = VERTEX_POINT ( 'NONE', #40796 ) ; +#37364 = AXIS2_PLACEMENT_3D ( 'NONE', #25585, #31781, #41110 ) ; +#37365 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37366 = PLANE ( 'NONE', #32640 ) ; +#37367 = VERTEX_POINT ( 'NONE', #27822 ) ; +#37368 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -1.180001745296165500, -4.775000000000000400 ) ) ; +#37369 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#37370 = PLANE ( 'NONE', #14564 ) ; +#37371 = LINE ( 'NONE', #32255, #11066 ) ; +#37372 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.139998254717354400, -5.049996877890552400 ) ) ; +#37373 = CARTESIAN_POINT ( 'NONE', ( -3.374999999999998700, 0.5300017452961686100, -4.414589803375031700 ) ) ; +#37374 = SURFACE_STYLE_USAGE ( .BOTH. , #21169 ) ; +#37375 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37376 = FILL_AREA_STYLE ('',( #28056 ) ) ; +#37377 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.307718258760844200E-015, -1.000000000000000000 ) ) ; +#37378 = EDGE_LOOP ( 'NONE', ( #9922, #39755 ) ) ; +#37379 = VECTOR ( 'NONE', #17034, 1000.000000000000000 ) ; +#37380 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37381 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37382 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37383 = LINE ( 'NONE', #936, #10568 ) ; +#37384 = PLANE ( 'NONE', #29227 ) ; +#37385 = EDGE_CURVE ( 'NONE', #6502, #27845, #6259, .T. ) ; +#37386 = VERTEX_POINT ( 'NONE', #8447 ) ; +#37387 = ORIENTED_EDGE ( 'NONE', *, *, #9490, .T. ) ; +#37388 = VECTOR ( 'NONE', #2116, 1000.000000000000000 ) ; +#37389 = VECTOR ( 'NONE', #37974, 1000.000000000000000 ) ; +#37390 = EDGE_CURVE ( 'NONE', #8459, #24933, #30002, .T. ) ; +#37391 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35235 ) ) ; +#37392 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000027500, -0.2339555568811697600 ) ) ; +#37393 = VERTEX_POINT ( 'NONE', #27677 ) ; +#37394 = FACE_OUTER_BOUND ( 'NONE', #20475, .T. ) ; +#37395 = STYLED_ITEM ( 'NONE', ( #19287 ), #23083 ) ; +#37396 = EDGE_LOOP ( 'NONE', ( #8755, #4175, #9654, #7446 ) ) ; +#37397 = ORIENTED_EDGE ( 'NONE', *, *, #19283, .F. ) ; +#37398 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37399 = ORIENTED_EDGE ( 'NONE', *, *, #8714, .F. ) ; +#37400 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36055 ), #14395 ) ; +#37401 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#37402 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24425 ) ) ; +#37403 = LINE ( 'NONE', #5313, #3058 ) ; +#37404 = PRESENTATION_STYLE_ASSIGNMENT (( #26826 ) ) ; +#37405 = CIRCLE ( 'NONE', #21616, 0.1000000000000000500 ) ; +#37406 = AXIS2_PLACEMENT_3D ( 'NONE', #40752, #34689, #24978 ) ; +#37407 = SURFACE_STYLE_FILL_AREA ( #34273 ) ; +#37408 = CARTESIAN_POINT ( 'NONE', ( 4.669999999999870300, -0.2800000000000026400, -0.2339555568811695400 ) ) ; +#37409 = SURFACE_STYLE_USAGE ( .BOTH. , #4923 ) ; +#37411 = EDGE_CURVE ( 'NONE', #31125, #3673, #11798, .T. ) ; +#37410 = AXIS2_PLACEMENT_3D ( 'NONE', #21958, #2621, #32776 ) ; +#37412 = CIRCLE ( 'NONE', #41422, 1.200001745296169300 ) ; +#37413 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, 0.0000000000000000000 ) ) ; +#37414 = ADVANCED_FACE ( 'NONE', ( #13287 ), #18236, .F. ) ; +#37416 = AXIS2_PLACEMENT_3D ( 'NONE', #33856, #14498, #23830 ) ; +#37415 = STYLED_ITEM ( 'NONE', ( #5886 ), #25638 ) ; +#37417 = PRESENTATION_STYLE_ASSIGNMENT (( #3746 ) ) ; +#37418 = ORIENTED_EDGE ( 'NONE', *, *, #15141, .F. ) ; +#37419 = CARTESIAN_POINT ( 'NONE', ( 3.105390508846411100, -0.2999999999999999900, -0.1008701867861798900 ) ) ; +#37420 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37421 = SURFACE_STYLE_FILL_AREA ( #37689 ) ; +#37422 = ORIENTED_EDGE ( 'NONE', *, *, #31254, .T. ) ; +#37423 = SURFACE_STYLE_FILL_AREA ( #4023 ) ; +#37424 = VERTEX_POINT ( 'NONE', #37281 ) ; +#37425 = DIRECTION ( 'NONE', ( 4.336808689942015400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#37426 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6297, 'distance_accuracy_value', 'NONE'); +#37427 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.480001745296166000, -1.899999999999999700 ) ) ; +#37428 = CARTESIAN_POINT ( 'NONE', ( -3.178333333333019300, 0.07499999999999998300, -0.06128090415826407300 ) ) ; +#37429 = ORIENTED_EDGE ( 'NONE', *, *, #15750, .F. ) ; +#37430 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#37431 = PRESENTATION_STYLE_ASSIGNMENT (( #41423 ) ) ; +#37432 = EDGE_LOOP ( 'NONE', ( #40713, #4696, #34291, #38843 ) ) ; +#37433 = ORIENTED_EDGE ( 'NONE', *, *, #27263, .F. ) ; +#37434 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000007500, -0.4918933027098934500, -6.861124800398366500 ) ) ; +#37435 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#37436 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23887, 'distance_accuracy_value', 'NONE'); +#37437 = ORIENTED_EDGE ( 'NONE', *, *, #7508, .T. ) ; +#37438 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37439 = CIRCLE ( 'NONE', #12584, 0.09999999999999999200 ) ; +#37440 = VERTEX_POINT ( 'NONE', #17946 ) ; +#37441 = EDGE_CURVE ( 'NONE', #31055, #29191, #10782, .T. ) ; +#37442 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760844200E-015 ) ) ; +#37443 = VECTOR ( 'NONE', #31002, 1000.000000000000000 ) ; +#37444 = LINE ( 'NONE', #11963, #23793 ) ; +#37445 = FILL_AREA_STYLE_COLOUR ( '', #25105 ) ; +#37446 = CYLINDRICAL_SURFACE ( 'NONE', #27952, 0.1000000000000002600 ) ; +#37447 = FILL_AREA_STYLE_COLOUR ( '', #19464 ) ; +#37448 = EDGE_CURVE ( 'NONE', #9770, #29681, #2249, .T. ) ; +#37449 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29133 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6660, #32365, #36490 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37450 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37451 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.949998254703820400, -2.467712434446768000 ) ) ; +#37452 = ADVANCED_FACE ( 'NONE', ( #16355 ), #8582, .F. ) ; +#37453 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18187, 'distance_accuracy_value', 'NONE'); +#37454 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026400, -4.099999999999999600 ) ) ; +#37455 = PRESENTATION_STYLE_ASSIGNMENT (( #1503 ) ) ; +#37456 = AXIS2_PLACEMENT_3D ( 'NONE', #27261, #1319, #1451 ) ; +#37457 = ORIENTED_EDGE ( 'NONE', *, *, #32110, .F. ) ; +#37458 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#37459 = VECTOR ( 'NONE', #38223, 1000.000000000000000 ) ; +#37460 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35312 ) ) ; +#37461 = AXIS2_PLACEMENT_3D ( 'NONE', #365, #6664, #29547 ) ; +#37462 = CARTESIAN_POINT ( 'NONE', ( 0.7499999999999993300, -1.499998254703821300, -7.350000000000005900 ) ) ; +#37463 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#37464 = CARTESIAN_POINT ( 'NONE', ( -2.972500000000000100, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#37465 = VERTEX_POINT ( 'NONE', #4665 ) ; +#37466 = FACE_OUTER_BOUND ( 'NONE', #35346, .T. ) ; +#37468 = ADVANCED_FACE ( 'NONE', ( #6688, #41571, #40043, #28943, #32471, #26454, #10748 ), #12544, .T. ) ; +#37467 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31550, 'distance_accuracy_value', 'NONE'); +#37470 = STYLED_ITEM ( 'NONE', ( #7276 ), #6104 ) ; +#37469 = FACE_OUTER_BOUND ( 'NONE', #31724, .T. ) ; +#37471 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#37472 = VECTOR ( 'NONE', #773, 999.9999999999998900 ) ; +#37474 = EDGE_CURVE ( 'NONE', #28395, #894, #3190, .T. ) ; +#37473 = AXIS2_PLACEMENT_3D ( 'NONE', #22450, #32451, #22723 ) ; +#37475 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.480001745296169800, 0.0000000000000000000 ) ) ; +#37476 = VERTEX_POINT ( 'NONE', #35159 ) ; +#37477 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 2.322941965694886000, -1.249999999999999800 ) ) ; +#37478 = VERTEX_POINT ( 'NONE', #19226 ) ; +#37479 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22295, 'distance_accuracy_value', 'NONE'); +#37480 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37481 = STYLED_ITEM ( 'NONE', ( #18417 ), #26311 ) ; +#37482 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7949 ) ) ; +#37483 = CARTESIAN_POINT ( 'NONE', ( 1.149999999999999900, -1.499998254703826200, -6.299999999999993600 ) ) ; +#37484 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37485 = VERTEX_POINT ( 'NONE', #12405 ) ; +#37486 = SURFACE_STYLE_FILL_AREA ( #38222 ) ; +#37487 = ORIENTED_EDGE ( 'NONE', *, *, #11725, .F. ) ; +#37488 = SURFACE_STYLE_USAGE ( .BOTH. , #40441 ) ; +#37489 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #8627, #37323, #5114, #27864 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.506138761592225100E-005 ), + .UNSPECIFIED. ) ; +#37490 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#37491 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37492 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34914, 'distance_accuracy_value', 'NONE'); +#37493 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37494 = LINE ( 'NONE', #34902, #19327 ) ; +#37495 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37497 = SURFACE_STYLE_USAGE ( .BOTH. , #30859 ) ; +#37496 = PRESENTATION_STYLE_ASSIGNMENT (( #6963 ) ) ; +#37498 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#37499 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875040000E-015, 6.056601140521967000E-031 ) ) ; +#37500 = EDGE_LOOP ( 'NONE', ( #16599, #12448, #13168, #1212 ) ) ; +#37501 = FILL_AREA_STYLE_COLOUR ( '', #28724 ) ; +#37502 = EDGE_CURVE ( 'NONE', #7836, #4020, #2211, .T. ) ; +#37503 = ADVANCED_FACE ( 'NONE', ( #35532 ), #22323, .T. ) ; +#37504 = CARTESIAN_POINT ( 'NONE', ( -3.244999999999999700, 0.3499999999999999800, -1.649999999997499900 ) ) ; +#37505 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -1.999999999999999600 ) ) ; +#37506 = EDGE_LOOP ( 'NONE', ( #27002, #16405, #21550, #5750 ) ) ; +#37507 = LINE ( 'NONE', #16137, #36986 ) ; +#37508 = PLANE ( 'NONE', #41644 ) ; +#37509 = EDGE_CURVE ( 'NONE', #28641, #11113, #1712, .T. ) ; +#37510 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, -1.499998254703832000, -5.049999999999993600 ) ) ; +#37511 = VECTOR ( 'NONE', #40470, 1000.000000000000000 ) ; +#37512 = ORIENTED_EDGE ( 'NONE', *, *, #16411, .T. ) ; +#37513 = SURFACE_SIDE_STYLE ('',( #37407 ) ) ; +#37514 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37515 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.1000000000000133800, -1.749999999999999800 ) ) ; +#37516 = ORIENTED_EDGE ( 'NONE', *, *, #27674, .T. ) ; +#37517 = DIRECTION ( 'NONE', ( 2.891205793294677400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#37518 = FACE_OUTER_BOUND ( 'NONE', #13679, .T. ) ; +#37519 = VECTOR ( 'NONE', #26717, 1000.000000000000000 ) ; +#37520 = SURFACE_SIDE_STYLE ('',( #18706 ) ) ; +#37521 = ORIENTED_EDGE ( 'NONE', *, *, #25356, .F. ) ; +#37522 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11270 ), #1314 ) ; +#37523 = FACE_OUTER_BOUND ( 'NONE', #33510, .T. ) ; +#37524 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41055 ), #18057 ) ; +#37525 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#37526 = FILL_AREA_STYLE ('',( #14382 ) ) ; +#37527 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#37528 = FILL_AREA_STYLE ('',( #24563 ) ) ; +#37530 = EDGE_CURVE ( 'NONE', #27168, #21607, #10246, .T. ) ; +#37529 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38872 ) ) ; +#37531 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.799998254703822500, -3.700000000000000200 ) ) ; +#37532 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37533 = CARTESIAN_POINT ( 'NONE', ( -4.010831726188969900, 0.5300017452961686100, -14.55000000000000100 ) ) ; +#37534 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37535 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -0.3590461068823618300 ) ) ; +#37536 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22394 ) ) ; +#37537 = ORIENTED_EDGE ( 'NONE', *, *, #30543, .T. ) ; +#37538 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37539 = SURFACE_STYLE_FILL_AREA ( #38678 ) ; +#37540 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #808 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36560, #1290, #14118 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37541 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.499998254703835300, -5.049999999999993600 ) ) ; +#37542 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#37543 = AXIS2_PLACEMENT_3D ( 'NONE', #5525, #11578, #5374 ) ; +#37544 = VERTEX_POINT ( 'NONE', #3245 ) ; +#37545 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#37546 = ORIENTED_EDGE ( 'NONE', *, *, #998, .F. ) ; +#37547 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37548 = EDGE_LOOP ( 'NONE', ( #27189, #28987, #2896, #23009 ) ) ; +#37549 = ADVANCED_FACE ( 'NONE', ( #34022 ), #181, .F. ) ; +#37550 = SURFACE_SIDE_STYLE ('',( #22307 ) ) ; +#37551 = VECTOR ( 'NONE', #41871, 1000.000000000000000 ) ; +#37552 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875040400E-015, -6.056601140521968800E-031 ) ) ; +#37553 = FILL_AREA_STYLE_COLOUR ( '', #5584 ) ; +#37554 = VERTEX_POINT ( 'NONE', #19503 ) ; +#37555 = LINE ( 'NONE', #3831, #10755 ) ; +#37556 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#37557 = LINE ( 'NONE', #33181, #37037 ) ; +#37558 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37559 = EDGE_LOOP ( 'NONE', ( #3906, #24342, #38013, #23332 ) ) ; +#37560 = SURFACE_STYLE_FILL_AREA ( #25430 ) ; +#37561 = PLANE ( 'NONE', #641 ) ; +#37562 = EDGE_CURVE ( 'NONE', #25052, #33795, #2176, .T. ) ; +#37563 = FACE_OUTER_BOUND ( 'NONE', #36387, .T. ) ; +#37564 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.776263578034402700E-017 ) ) ; +#37565 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19365, 'distance_accuracy_value', 'NONE'); +#37566 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37567 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#37568 = EDGE_CURVE ( 'NONE', #39846, #20729, #20901, .T. ) ; +#37569 = VECTOR ( 'NONE', #20344, 1000.000000000000000 ) ; +#37570 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#37571 = AXIS2_PLACEMENT_3D ( 'NONE', #41031, #1967, #27775 ) ; +#37572 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37573 = SURFACE_STYLE_USAGE ( .BOTH. , #37855 ) ; +#37574 = CARTESIAN_POINT ( 'NONE', ( -2.000000000000000000, 0.3000000000000001600, -1.250000000000000000 ) ) ; +#37575 = EDGE_CURVE ( 'NONE', #38459, #1402, #14777, .T. ) ; +#37576 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#37577 = AXIS2_PLACEMENT_3D ( 'NONE', #27328, #40296, #7962 ) ; +#37578 = DIRECTION ( 'NONE', ( -1.133987551255204500E-030, -1.000000000000000000, 2.367138801244545900E-016 ) ) ; +#37579 = FILL_AREA_STYLE ('',( #14152 ) ) ; +#37580 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29464 ) ) ; +#37581 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11281, 'distance_accuracy_value', 'NONE'); +#37582 = ORIENTED_EDGE ( 'NONE', *, *, #28120, .F. ) ; +#37585 = EDGE_CURVE ( 'NONE', #5908, #38341, #6190, .T. ) ; +#37584 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25191 ), #16742 ) ; +#37583 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37586 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.499998254703840000, -5.449999999999994000 ) ) ; +#37587 = CLOSED_SHELL ( 'NONE', ( #39145, #10719, #6511, #15718, #35750, #35585 ) ) ; +#37588 = ORIENTED_EDGE ( 'NONE', *, *, #9390, .T. ) ; +#37589 = FILL_AREA_STYLE ('',( #5678 ) ) ; +#37590 = VERTEX_POINT ( 'NONE', #734 ) ; +#37591 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#37592 = EDGE_LOOP ( 'NONE', ( #13543, #29774, #34746, #34878 ) ) ; +#37593 = FACE_OUTER_BOUND ( 'NONE', #34408, .T. ) ; +#37595 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2508 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39216, #9978, #13234 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37594 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5680 ) ) ; +#37596 = AXIS2_PLACEMENT_3D ( 'NONE', #33045, #4360, #17095 ) ; +#37597 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37598 = PRESENTATION_STYLE_ASSIGNMENT (( #20244 ) ) ; +#37599 = AXIS2_PLACEMENT_3D ( 'NONE', #15162, #21538, #41270 ) ; +#37600 = LINE ( 'NONE', #5668, #13345 ) ; +#37601 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37665 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24809, #8087, #37611 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37602 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37603 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37604 = SURFACE_STYLE_FILL_AREA ( #21916 ) ; +#37605 = PRESENTATION_STYLE_ASSIGNMENT (( #40133 ) ) ; +#37606 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41465, 'distance_accuracy_value', 'NONE'); +#37607 = PRESENTATION_STYLE_ASSIGNMENT (( #29005 ) ) ; +#37608 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, 2.322941965694886000, -1.250000000000000000 ) ) ; +#37609 = PLANE ( 'NONE', #28752 ) ; +#37610 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37611 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37612 = EDGE_LOOP ( 'NONE', ( #38416, #17949, #523, #23489 ) ) ; +#37613 = FILL_AREA_STYLE_COLOUR ( '', #555 ) ; +#37614 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37615 = FILL_AREA_STYLE_COLOUR ( '', #9332 ) ; +#37616 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37617 = ADVANCED_FACE ( 'NONE', ( #28423 ), #39507, .T. ) ; +#37618 = ORIENTED_EDGE ( 'NONE', *, *, #9766, .F. ) ; +#37619 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -9.268445570935432200E-016 ) ) ; +#37620 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20851, 'distance_accuracy_value', 'NONE'); +#37621 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#37622 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9953, 'distance_accuracy_value', 'NONE'); +#37623 = FILL_AREA_STYLE ('',( #18024 ) ) ; +#37624 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3000000000000001600, -1.250000000000000000 ) ) ; +#37625 = EDGE_CURVE ( 'NONE', #33923, #10637, #5697, .T. ) ; +#37626 = VERTEX_POINT ( 'NONE', #32877 ) ; +#37627 = DIRECTION ( 'NONE', ( 0.9396926207859093200, -0.3420201433256663300, 4.188538737676944300E-017 ) ) ; +#37629 = VECTOR ( 'NONE', #18411, 1000.000000000000000 ) ; +#37628 = LINE ( 'NONE', #13868, #7794 ) ; +#37630 = VERTEX_POINT ( 'NONE', #13106 ) ; +#37631 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37632 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37633 = EDGE_CURVE ( 'NONE', #8459, #33802, #9185, .T. ) ; +#37634 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5157 ), #16789 ) ; +#37635 = VECTOR ( 'NONE', #36973, 1000.000000000000000 ) ; +#37636 = LINE ( 'NONE', #3684, #23987 ) ; +#37637 = SURFACE_STYLE_USAGE ( .BOTH. , #18590 ) ; +#37638 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37639 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37640 = FILL_AREA_STYLE ('',( #4888 ) ) ; +#37641 = CIRCLE ( 'NONE', #15641, 0.1000000000000009100 ) ; +#37642 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21725 ) ) ; +#37643 = SURFACE_STYLE_FILL_AREA ( #5140 ) ; +#37644 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37645 = ORIENTED_EDGE ( 'NONE', *, *, #6995, .F. ) ; +#37646 = SURFACE_SIDE_STYLE ('',( #10647 ) ) ; +#37647 = AXIS2_PLACEMENT_3D ( 'NONE', #7770, #33623, #33767 ) ; +#37648 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2244 ) ) ; +#37649 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#37650 = FACE_OUTER_BOUND ( 'NONE', #25502, .T. ) ; +#37652 = STYLED_ITEM ( 'NONE', ( #10763 ), #4883 ) ; +#37651 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #29411 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20400, #17131, #29686 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37653 = ORIENTED_EDGE ( 'NONE', *, *, #24473, .F. ) ; +#37654 = ORIENTED_EDGE ( 'NONE', *, *, #36698, .F. ) ; +#37655 = EDGE_CURVE ( 'NONE', #25892, #21920, #8182, .T. ) ; +#37656 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.3500000000000000300, 0.3499999999999999800 ) ) ; +#37657 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -1.749999999999999300 ) ) ; +#37658 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, -0.2799999999999974200, -0.2339555568811695900 ) ) ; +#37659 = ADVANCED_FACE ( 'NONE', ( #33985 ), #7159, .F. ) ; +#37660 = ORIENTED_EDGE ( 'NONE', *, *, #19351, .T. ) ; +#37662 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #27206 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16716, #4135, #13609 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37661 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9242 ) ) ; +#37663 = DIRECTION ( 'NONE', ( 0.08715574274766049700, 2.860372408307929200E-016, -0.9961946980917454300 ) ) ; +#37664 = FACE_OUTER_BOUND ( 'NONE', #26745, .T. ) ; +#37665 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24809, 'distance_accuracy_value', 'NONE'); +#37666 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#37667 = VECTOR ( 'NONE', #22006, 1000.000000000000000 ) ; +#37668 = EDGE_LOOP ( 'NONE', ( #14184, #414, #26136, #4474 ) ) ; +#37669 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -7.200000000000000200 ) ) ; +#37670 = FACE_OUTER_BOUND ( 'NONE', #3452, .T. ) ; +#37671 = ORIENTED_EDGE ( 'NONE', *, *, #34543, .T. ) ; +#37672 = VERTEX_POINT ( 'NONE', #35874 ) ; +#37674 = ADVANCED_FACE ( 'NONE', ( #10209 ), #19781, .F. ) ; +#37673 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#37675 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 7.228014483236708400E-016 ) ) ; +#37676 = PRESENTATION_STYLE_ASSIGNMENT (( #18347 ) ) ; +#37677 = LINE ( 'NONE', #33694, #3308 ) ; +#37678 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16479, 'distance_accuracy_value', 'NONE'); +#37679 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#37680 = ORIENTED_EDGE ( 'NONE', *, *, #654, .F. ) ; +#37681 = DIRECTION ( 'NONE', ( 3.097720492815727200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37682 = PRESENTATION_STYLE_ASSIGNMENT (( #1757 ) ) ; +#37683 = PRESENTATION_STYLE_ASSIGNMENT (( #9496 ) ) ; +#37684 = SURFACE_STYLE_USAGE ( .BOTH. , #37955 ) ; +#37685 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#37686 = CLOSED_SHELL ( 'NONE', ( #32436, #29806, #12316, #24135, #25655, #6140 ) ) ; +#37687 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37688 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37689 = FILL_AREA_STYLE ('',( #2011 ) ) ; +#37690 = EDGE_CURVE ( 'NONE', #4031, #15820, #30944, .T. ) ; +#37691 = FILL_AREA_STYLE ('',( #14684 ) ) ; +#37692 = FILL_AREA_STYLE ('',( #5502 ) ) ; +#37693 = EDGE_CURVE ( 'NONE', #10551, #38978, #13759, .T. ) ; +#37694 = STYLED_ITEM ( 'NONE', ( #21149 ), #10335 ) ; +#37695 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37696 = FILL_AREA_STYLE_COLOUR ( '', #38392 ) ; +#37697 = SURFACE_SIDE_STYLE ('',( #31032 ) ) ; +#37698 = CYLINDRICAL_SURFACE ( 'NONE', #19433, 0.1000000000000000100 ) ; +#37699 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, 0.4343145750507622100, -3.250000000000000400 ) ) ; +#37700 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34986 ), #36359 ) ; +#37701 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37702 = DIRECTION ( 'NONE', ( -1.000000000000000000, 4.798681814596971500E-016, 1.636817471423336900E-030 ) ) ; +#37703 = SURFACE_STYLE_FILL_AREA ( #5334 ) ; +#37704 = VECTOR ( 'NONE', #7442, 1000.000000000000000 ) ; +#37705 = PLANE ( 'NONE', #4808 ) ; +#37706 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 0.2300017452961684900, -5.175000000000000700 ) ) ; +#37707 = ADVANCED_FACE ( 'NONE', ( #33466 ), #22265, .T. ) ; +#37708 = FILL_AREA_STYLE_COLOUR ( '', #12482 ) ; +#37709 = EDGE_LOOP ( 'NONE', ( #6883, #37387, #28124, #2191 ) ) ; +#37710 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #158 ) ) ; +#37711 = ORIENTED_EDGE ( 'NONE', *, *, #24677, .F. ) ; +#37713 = AXIS2_PLACEMENT_3D ( 'NONE', #28142, #2610, #11743 ) ; +#37712 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25066 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16707, #6941, #3838 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37714 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37715 = CARTESIAN_POINT ( 'NONE', ( 1.350000000000000100, -1.380001745296132400, -6.031671842700004200 ) ) ; +#37716 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37717 = PRESENTATION_STYLE_ASSIGNMENT (( #25011 ) ) ; +#37719 = EDGE_CURVE ( 'NONE', #18991, #5537, #6085, .T. ) ; +#37718 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2317 ) ) ; +#37720 = ORIENTED_EDGE ( 'NONE', *, *, #17943, .T. ) ; +#37721 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#37722 = PRESENTATION_STYLE_ASSIGNMENT (( #35371 ) ) ; +#37723 = ORIENTED_EDGE ( 'NONE', *, *, #317, .T. ) ; +#37724 = ORIENTED_EDGE ( 'NONE', *, *, #27553, .T. ) ; +#37725 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822900, -5.899999999999999500 ) ) ; +#37726 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37728 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39072 ) ) ; +#37727 = AXIS2_PLACEMENT_3D ( 'NONE', #22786, #29262, #6136 ) ; +#37729 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.280001745296165800, -5.475000000000000500 ) ) ; +#37730 = VECTOR ( 'NONE', #18019, 1000.000000000000000 ) ; +#37731 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37732 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37733 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 0.3000000000000149200, -4.249999999999998200 ) ) ; +#37734 = VECTOR ( 'NONE', #8099, 1000.000000000000000 ) ; +#37735 = FACE_OUTER_BOUND ( 'NONE', #26119, .T. ) ; +#37736 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#37737 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.5300017452961686100, -4.576794919243112300 ) ) ; +#37738 = FILL_AREA_STYLE ('',( #31526 ) ) ; +#37739 = FILL_AREA_STYLE ('',( #5259 ) ) ; +#37740 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37741 = ORIENTED_EDGE ( 'NONE', *, *, #35858, .F. ) ; +#37742 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37743 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#37744 = EDGE_CURVE ( 'NONE', #12289, #14393, #3563, .T. ) ; +#37745 = ORIENTED_EDGE ( 'NONE', *, *, #3680, .T. ) ; +#37746 = EDGE_LOOP ( 'NONE', ( #20871, #23688 ) ) ; +#37747 = PRESENTATION_STYLE_ASSIGNMENT (( #35722 ) ) ; +#37748 = ORIENTED_EDGE ( 'NONE', *, *, #12055, .T. ) ; +#37749 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #22219, 'distance_accuracy_value', 'NONE'); +#37750 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#37751 = VECTOR ( 'NONE', #39874, 1000.000000000000000 ) ; +#37752 = LINE ( 'NONE', #24551, #29148 ) ; +#37753 = EDGE_CURVE ( 'NONE', #28936, #34240, #29326, .T. ) ; +#37754 = PRESENTATION_STYLE_ASSIGNMENT (( #27526 ) ) ; +#37755 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#37756 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.380001745296165900, -3.799999999999999800 ) ) ; +#37757 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26000, 'distance_accuracy_value', 'NONE'); +#37758 = ORIENTED_EDGE ( 'NONE', *, *, #1418, .T. ) ; +#37759 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37760 = ORIENTED_EDGE ( 'NONE', *, *, #4698, .T. ) ; +#37761 = ADVANCED_FACE ( 'NONE', ( #12134 ), #15681, .F. ) ; +#37762 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#37763 = STYLED_ITEM ( 'NONE', ( #39509 ), #15867 ) ; +#37764 = CARTESIAN_POINT ( 'NONE', ( 2.995000000023874300, -0.3499999999999999800, -1.546446609385052900 ) ) ; +#37765 = FILL_AREA_STYLE ('',( #24374 ) ) ; +#37766 = PRESENTATION_STYLE_ASSIGNMENT (( #32596 ) ) ; +#37767 = FILL_AREA_STYLE ('',( #8375 ) ) ; +#37768 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37769 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -2.322941965694886000, 0.3499999999999999800 ) ) ; +#37770 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10276 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30683, #14581, #14724 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37771 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37772 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#37773 = STYLED_ITEM ( 'NONE', ( #38738 ), #11593 ) ; +#37774 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37775 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28532, 'distance_accuracy_value', 'NONE'); +#37777 = EDGE_CURVE ( 'NONE', #37554, #30257, #14674, .T. ) ; +#37776 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#37778 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, 0.07499999999999999700, -0.03369359964516261500 ) ) ; +#37779 = EDGE_LOOP ( 'NONE', ( #33175, #11246, #40782, #14087 ) ) ; +#37780 = PRESENTATION_STYLE_ASSIGNMENT (( #37637 ) ) ; +#37781 = FILL_AREA_STYLE ('',( #19016 ) ) ; +#37782 = SURFACE_SIDE_STYLE ('',( #26678 ) ) ; +#37783 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.779999999999867900, 0.0000000000000000000 ) ) ; +#37784 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9052 ) ) ; +#37785 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#37786 = STYLED_ITEM ( 'NONE', ( #207 ), #39889 ) ; +#37787 = ORIENTED_EDGE ( 'NONE', *, *, #32487, .F. ) ; +#37788 = FACE_OUTER_BOUND ( 'NONE', #2777, .T. ) ; +#37789 = SURFACE_STYLE_USAGE ( .BOTH. , #34407 ) ; +#37790 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29934 ) ) ; +#37791 = ORIENTED_EDGE ( 'NONE', *, *, #5491, .T. ) ; +#37792 = ORIENTED_EDGE ( 'NONE', *, *, #20638, .F. ) ; +#37793 = ORIENTED_EDGE ( 'NONE', *, *, #8533, .T. ) ; +#37794 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37795 = FACE_OUTER_BOUND ( 'NONE', #574, .T. ) ; +#37796 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000003000, 0.4300017452961695800, -6.900000000000000400 ) ) ; +#37797 = SURFACE_STYLE_FILL_AREA ( #39665 ) ; +#37798 = SURFACE_STYLE_FILL_AREA ( #11785 ) ; +#37799 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296169600, -1.149999999999999900 ) ) ; +#37800 = ORIENTED_EDGE ( 'NONE', *, *, #4275, .F. ) ; +#37801 = DIRECTION ( 'NONE', ( -0.3420201433263654300, 0.0000000000000000000, -0.9396926207856548500 ) ) ; +#37802 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.4300017452961690200, -4.099999999999998800 ) ) ; +#37803 = ORIENTED_EDGE ( 'NONE', *, *, #7354, .T. ) ; +#37804 = VERTEX_POINT ( 'NONE', #39916 ) ; +#37805 = FACE_OUTER_BOUND ( 'NONE', #13093, .T. ) ; +#37806 = CARTESIAN_POINT ( 'NONE', ( 0.7499999999999993300, -1.499998254703846400, 0.001000000000001867500 ) ) ; +#37807 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#37808 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000005300, -1.500001745296188900, 0.001000000000001867500 ) ) ; +#37809 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6470, 'distance_accuracy_value', 'NONE'); +#37810 = ORIENTED_EDGE ( 'NONE', *, *, #28618, .F. ) ; +#37811 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#37812 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37813 = EDGE_CURVE ( 'NONE', #14272, #13558, #36927, .T. ) ; +#37814 = FILL_AREA_STYLE_COLOUR ( '', #36942 ) ; +#37815 = EDGE_CURVE ( 'NONE', #18769, #31468, #32863, .T. ) ; +#37816 = FILL_AREA_STYLE_COLOUR ( '', #18029 ) ; +#37817 = PRESENTATION_STYLE_ASSIGNMENT (( #5441 ) ) ; +#37818 = SURFACE_SIDE_STYLE ('',( #2646 ) ) ; +#37819 = EDGE_CURVE ( 'NONE', #1076, #23388, #14211, .T. ) ; +#37820 = ORIENTED_EDGE ( 'NONE', *, *, #35061, .T. ) ; +#37821 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37822 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11028 ) ) ; +#37823 = FILL_AREA_STYLE ('',( #41477 ) ) ; +#37824 = EDGE_CURVE ( 'NONE', #15774, #41499, #37403, .T. ) ; +#37825 = VERTEX_POINT ( 'NONE', #17500 ) ; +#37826 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760844200E-015 ) ) ; +#37827 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#37828 = EDGE_LOOP ( 'NONE', ( #16697, #38518, #28920, #18032 ) ) ; +#37829 = LINE ( 'NONE', #36895, #34796 ) ; +#37830 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37831 = ORIENTED_EDGE ( 'NONE', *, *, #11452, .T. ) ; +#37832 = ADVANCED_FACE ( 'NONE', ( #7063 ), #24125, .F. ) ; +#37833 = LINE ( 'NONE', #31831, #20701 ) ; +#37834 = STYLED_ITEM ( 'NONE', ( #22906 ), #12517 ) ; +#37835 = CARTESIAN_POINT ( 'NONE', ( -4.365000000000002900, 0.2800017452961685000, -7.500000000000000000 ) ) ; +#37837 = EDGE_CURVE ( 'NONE', #8073, #38543, #2595, .T. ) ; +#37836 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19376 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33782, #21102, #8051 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37838 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#37839 = ORIENTED_EDGE ( 'NONE', *, *, #24606, .T. ) ; +#37840 = EDGE_LOOP ( 'NONE', ( #15886, #21386, #33819, #9968 ) ) ; +#37841 = ORIENTED_EDGE ( 'NONE', *, *, #14631, .T. ) ; +#37842 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15129, 'distance_accuracy_value', 'NONE'); +#37843 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37844 = STYLED_ITEM ( 'NONE', ( #10840 ), #28295 ) ; +#37845 = SURFACE_STYLE_USAGE ( .BOTH. , #2296 ) ; +#37846 = CARTESIAN_POINT ( 'NONE', ( 4.750000000000003600, -1.009999999999999100, -6.861124800398366500 ) ) ; +#37847 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38634 ) ) ; +#37848 = CARTESIAN_POINT ( 'NONE', ( 3.395000000000000000, 0.4636038969321074100, -3.300000000000000300 ) ) ; +#37849 = EDGE_LOOP ( 'NONE', ( #32590, #7513, #29494, #3948, #16253, #29757 ) ) ; +#37850 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, -1.049979056049130000 ) ) ; +#37851 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31368 ), #2443 ) ; +#37852 = SURFACE_STYLE_USAGE ( .BOTH. , #40676 ) ; +#37853 = FILL_AREA_STYLE ('',( #15277 ) ) ; +#37854 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#37855 = SURFACE_SIDE_STYLE ('',( #41546 ) ) ; +#37856 = FILL_AREA_STYLE ('',( #5661 ) ) ; +#37857 = VECTOR ( 'NONE', #34325, 1000.000000000000000 ) ; +#37858 = SURFACE_SIDE_STYLE ('',( #29492 ) ) ; +#37859 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.380001745296136400, -6.250000000000000000 ) ) ; +#37860 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#37861 = ORIENTED_EDGE ( 'NONE', *, *, #34913, .T. ) ; +#37862 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#37863 = ADVANCED_FACE ( 'NONE', ( #20257 ), #27494, .T. ) ; +#37864 = SURFACE_SIDE_STYLE ('',( #40710 ) ) ; +#37865 = ORIENTED_EDGE ( 'NONE', *, *, #12952, .F. ) ; +#37866 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#37867 = LINE ( 'NONE', #2845, #33350 ) ; +#37868 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#37869 = VERTEX_POINT ( 'NONE', #40479 ) ; +#37870 = CIRCLE ( 'NONE', #10904, 0.2000017452961698200 ) ; +#37871 = ORIENTED_EDGE ( 'NONE', *, *, #41811, .T. ) ; +#37872 = VERTEX_POINT ( 'NONE', #11526 ) ; +#37873 = EDGE_CURVE ( 'NONE', #18288, #40360, #8084, .T. ) ; +#37874 = PRESENTATION_STYLE_ASSIGNMENT (( #27900 ) ) ; +#37875 = PLANE ( 'NONE', #37599 ) ; +#37876 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#37877 = FILL_AREA_STYLE_COLOUR ( '', #36184 ) ; +#37878 = ADVANCED_FACE ( 'NONE', ( #32816 ), #18054, .F. ) ; +#37879 = FILL_AREA_STYLE ('',( #31660 ) ) ; +#37880 = EDGE_CURVE ( 'NONE', #32236, #13516, #29285, .T. ) ; +#37881 = ORIENTED_EDGE ( 'NONE', *, *, #20349, .T. ) ; +#37882 = DIRECTION ( 'NONE', ( -2.891205793294629500E-014, -1.837630800822891000E-016, -1.000000000000000000 ) ) ; +#37883 = VECTOR ( 'NONE', #3220, 1000.000000000000000 ) ; +#37884 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24686 ) ) ; +#37885 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#37886 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37888 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37809 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6470, #41756, #22849 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37887 = CARTESIAN_POINT ( 'NONE', ( 4.599429204713762200, 0.08000174529616929700, -7.186926638587852500 ) ) ; +#37889 = CARTESIAN_POINT ( 'NONE', ( -3.217018655616160800, -0.2999999999999999900, -0.04760357729905644000 ) ) ; +#37890 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37892 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16800 ), #8921 ) ; +#37891 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#37893 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40408 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #38430, #21830, #41670 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37894 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37895 = AXIS2_PLACEMENT_3D ( 'NONE', #6440, #38897, #6560 ) ; +#37896 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#37897 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.09999999999998511500, -1.949999999999999500 ) ) ; +#37898 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.380001745296165900, -1.899999999999999700 ) ) ; +#37899 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32847, 'distance_accuracy_value', 'NONE'); +#37900 = ORIENTED_EDGE ( 'NONE', *, *, #7165, .F. ) ; +#37901 = SURFACE_STYLE_USAGE ( .BOTH. , #34663 ) ; +#37902 = FACE_OUTER_BOUND ( 'NONE', #3067, .T. ) ; +#37903 = EDGE_CURVE ( 'NONE', #28707, #34267, #23216, .T. ) ; +#37904 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#37905 = PLANE ( 'NONE', #40943 ) ; +#37906 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#37907 = ORIENTED_EDGE ( 'NONE', *, *, #40589, .F. ) ; +#37908 = VECTOR ( 'NONE', #8181, 1000.000000000000000 ) ; +#37909 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24130 ) ) ; +#37910 = PLANE ( 'NONE', #25599 ) ; +#37911 = LINE ( 'NONE', #13155, #24827 ) ; +#37912 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37913 = LINE ( 'NONE', #29457, #4027 ) ; +#37914 = FILL_AREA_STYLE_COLOUR ( '', #27229 ) ; +#37915 = VERTEX_POINT ( 'NONE', #11379 ) ; +#37916 = SURFACE_STYLE_FILL_AREA ( #37691 ) ; +#37917 = ORIENTED_EDGE ( 'NONE', *, *, #40609, .F. ) ; +#37919 = VERTEX_POINT ( 'NONE', #3148 ) ; +#37918 = ADVANCED_FACE ( 'NONE', ( #5021 ), #37384, .F. ) ; +#37920 = FILL_AREA_STYLE ('',( #31149 ) ) ; +#37921 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#37922 = SURFACE_STYLE_USAGE ( .BOTH. , #21307 ) ; +#37923 = FILL_AREA_STYLE_COLOUR ( '', #14202 ) ; +#37924 = ORIENTED_EDGE ( 'NONE', *, *, #33563, .T. ) ; +#37925 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 1.630001745296168100, -3.999999999999999100 ) ) ; +#37926 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -5.460789592991141900E-031 ) ) ; +#37927 = ADVANCED_FACE ( 'NONE', ( #20759 ), #8576, .F. ) ; +#37928 = PRESENTATION_STYLE_ASSIGNMENT (( #29706 ) ) ; +#37929 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#37930 = SURFACE_STYLE_USAGE ( .BOTH. , #25119 ) ; +#37931 = SURFACE_STYLE_USAGE ( .BOTH. , #5181 ) ; +#37932 = FILL_AREA_STYLE_COLOUR ( '', #13810 ) ; +#37933 = EDGE_CURVE ( 'NONE', #34286, #41578, #25287, .T. ) ; +#37934 = EDGE_CURVE ( 'NONE', #27120, #32326, #16662, .T. ) ; +#37935 = AXIS2_PLACEMENT_3D ( 'NONE', #11891, #31128, #37762 ) ; +#37936 = ORIENTED_EDGE ( 'NONE', *, *, #15309, .T. ) ; +#37937 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#37938 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#37939 = CARTESIAN_POINT ( 'NONE', ( -3.057483030973119100, 0.2999999999999999900, -0.1688861943104070800 ) ) ; +#37940 = CARTESIAN_POINT ( 'NONE', ( 4.551493546202548800, -1.400001745296165300, -6.639019554637397600 ) ) ; +#37941 = VERTEX_POINT ( 'NONE', #15711 ) ; +#37942 = EDGE_LOOP ( 'NONE', ( #15319, #22668, #24194, #40051 ) ) ; +#37943 = STYLED_ITEM ( 'NONE', ( #35279 ), #14791 ) ; +#37944 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37382, 'distance_accuracy_value', 'NONE'); +#37945 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#37946 = SURFACE_SIDE_STYLE ('',( #22794 ) ) ; +#37947 = LINE ( 'NONE', #21950, #23291 ) ; +#37948 = FILL_AREA_STYLE_COLOUR ( '', #28108 ) ; +#37949 = VERTEX_POINT ( 'NONE', #13000 ) ; +#37950 = STYLED_ITEM ( 'NONE', ( #6453 ), #38842 ) ; +#37951 = CARTESIAN_POINT ( 'NONE', ( 3.244813086426265000, 0.07499999999999999700, 0.6909930101031753800 ) ) ; +#37952 = ORIENTED_EDGE ( 'NONE', *, *, #16350, .F. ) ; +#37953 = ORIENTED_EDGE ( 'NONE', *, *, #25128, .F. ) ; +#37954 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35247 ) ) ; +#37955 = SURFACE_SIDE_STYLE ('',( #41746 ) ) ; +#37957 = AXIS2_PLACEMENT_3D ( 'NONE', #19858, #535, #10769 ) ; +#37956 = AXIS2_PLACEMENT_3D ( 'NONE', #25217, #22365, #2631 ) ; +#37958 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37960 = EDGE_CURVE ( 'NONE', #12511, #32708, #14640, .T. ) ; +#37959 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40936 ), #5489 ) ; +#37961 = ORIENTED_EDGE ( 'NONE', *, *, #19041, .F. ) ; +#37962 = SURFACE_STYLE_USAGE ( .BOTH. , #28642 ) ; +#37963 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#37964 = LINE ( 'NONE', #15916, #27888 ) ; +#37965 = ORIENTED_EDGE ( 'NONE', *, *, #26211, .F. ) ; +#37966 = ADVANCED_FACE ( 'NONE', ( #25790 ), #13079, .T. ) ; +#37967 = FILL_AREA_STYLE ('',( #15380 ) ) ; +#37968 = CARTESIAN_POINT ( 'NONE', ( -3.217018655616160800, -0.07499999999999998300, -0.04760357729905644000 ) ) ; +#37969 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#37970 = LINE ( 'NONE', #6150, #18786 ) ; +#37971 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8903 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36658, #7273, #30018 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#37972 = VECTOR ( 'NONE', #21938, 1000.000000000000000 ) ; +#37973 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.2339555568811695900 ) ) ; +#37974 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#37975 = CARTESIAN_POINT ( 'NONE', ( -4.773991411063333200, -0.4099999999999985300, -7.461124800398367000 ) ) ; +#37976 = VECTOR ( 'NONE', #30566, 1000.000000000000100 ) ; +#37977 = CIRCLE ( 'NONE', #751, 1.200001745296169800 ) ; +#37978 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, 0.6500000000000003600, -3.300000000000000300 ) ) ; +#37979 = DIRECTION ( 'NONE', ( -6.776263578034402700E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#37980 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.355252715606880500E-016 ) ) ; +#37981 = ORIENTED_EDGE ( 'NONE', *, *, #1057, .T. ) ; +#37982 = SURFACE_STYLE_USAGE ( .BOTH. , #18803 ) ; +#37983 = PRESENTATION_STYLE_ASSIGNMENT (( #4659 ) ) ; +#37984 = EDGE_LOOP ( 'NONE', ( #29669, #8342, #4876, #2985 ) ) ; +#37985 = PRESENTATION_STYLE_ASSIGNMENT (( #928 ) ) ; +#37986 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10756, 'distance_accuracy_value', 'NONE'); +#37987 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37988 = FILL_AREA_STYLE_COLOUR ( '', #15055 ) ; +#37989 = SURFACE_STYLE_USAGE ( .BOTH. , #5799 ) ; +#37990 = ORIENTED_EDGE ( 'NONE', *, *, #25592, .T. ) ; +#37991 = EDGE_CURVE ( 'NONE', #25801, #4273, #38849, .T. ) ; +#37992 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.252606517456513700E-015, 0.0000000000000000000 ) ) ; +#37993 = SURFACE_SIDE_STYLE ('',( #21394 ) ) ; +#37994 = SURFACE_STYLE_USAGE ( .BOTH. , #41507 ) ; +#37995 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#37996 = EDGE_CURVE ( 'NONE', #17460, #28243, #6518, .T. ) ; +#37997 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#37998 = ORIENTED_EDGE ( 'NONE', *, *, #34480, .F. ) ; +#37999 = SURFACE_STYLE_FILL_AREA ( #28219 ) ; +#38000 = VERTEX_POINT ( 'NONE', #22624 ) ; +#38001 = FACE_OUTER_BOUND ( 'NONE', #8923, .T. ) ; +#38002 = AXIS2_PLACEMENT_3D ( 'NONE', #29622, #426, #26818 ) ; +#38003 = VECTOR ( 'NONE', #25443, 1000.000000000000000 ) ; +#38004 = PRESENTATION_STYLE_ASSIGNMENT (( #36594 ) ) ; +#38005 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28008 ) ) ; +#38006 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#38007 = FILL_AREA_STYLE_COLOUR ( '', #31525 ) ; +#38008 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38009 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38010 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26404 ) ) ; +#38011 = FILL_AREA_STYLE_COLOUR ( '', #9895 ) ; +#38012 = SURFACE_STYLE_USAGE ( .BOTH. , #22356 ) ; +#38013 = ORIENTED_EDGE ( 'NONE', *, *, #17682, .T. ) ; +#38015 = EDGE_CURVE ( 'NONE', #21094, #10468, #28256, .T. ) ; +#38014 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39186 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #258, #35809, #16449 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38016 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999998700, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#38017 = CARTESIAN_POINT ( 'NONE', ( -3.120369891805397300, 0.2799999999999983600, -14.55000000000000100 ) ) ; +#38018 = ORIENTED_EDGE ( 'NONE', *, *, #12858, .T. ) ; +#38019 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#38020 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5559 ), #33153 ) ; +#38021 = AXIS2_PLACEMENT_3D ( 'NONE', #1591, #33480, #4800 ) ; +#38022 = PLANE ( 'NONE', #39302 ) ; +#38024 = VECTOR ( 'NONE', #35211, 1000.000000000000000 ) ; +#38023 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#38025 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38026 = VERTEX_POINT ( 'NONE', #12849 ) ; +#38027 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#38028 = FACE_OUTER_BOUND ( 'NONE', #41074, .T. ) ; +#38029 = ORIENTED_EDGE ( 'NONE', *, *, #4550, .T. ) ; +#38030 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#38031 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#38032 = FILL_AREA_STYLE ('',( #15849 ) ) ; +#38033 = FILL_AREA_STYLE ('',( #35074 ) ) ; +#38034 = ORIENTED_EDGE ( 'NONE', *, *, #39481, .T. ) ; +#38035 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.180001745296164900, -7.300000000000000700 ) ) ; +#38036 = FACE_OUTER_BOUND ( 'NONE', #39041, .T. ) ; +#38037 = LINE ( 'NONE', #23163, #37519 ) ; +#38038 = EDGE_LOOP ( 'NONE', ( #31627, #35603, #6067, #7010 ) ) ; +#38039 = FACE_OUTER_BOUND ( 'NONE', #38513, .T. ) ; +#38040 = CARTESIAN_POINT ( 'NONE', ( -4.599429204713762200, 0.08000174529616799200, -7.186926638587852500 ) ) ; +#38041 = FACE_OUTER_BOUND ( 'NONE', #36821, .T. ) ; +#38042 = CARTESIAN_POINT ( 'NONE', ( -3.149747613015514000, -0.5439237163914229000, -1.873861940660602100 ) ) ; +#38043 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#38044 = VECTOR ( 'NONE', #32473, 1000.000000000000000 ) ; +#38045 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38046 = CARTESIAN_POINT ( 'NONE', ( -0.6000000000000000900, -1.380001745296138200, -4.781671842700004200 ) ) ; +#38047 = EDGE_CURVE ( 'NONE', #11596, #35081, #22708, .T. ) ; +#38048 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#38049 = CARTESIAN_POINT ( 'NONE', ( 3.191446609406725500, 0.6207106781186545500, -3.300000000000000700 ) ) ; +#38050 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -4.840188270024573500E-017 ) ) ; +#38051 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #27986, 'distance_accuracy_value', 'NONE'); +#38052 = EDGE_CURVE ( 'NONE', #29866, #21908, #4004, .T. ) ; +#38053 = EDGE_CURVE ( 'NONE', #25434, #24593, #31290, .T. ) ; +#38054 = SURFACE_SIDE_STYLE ('',( #15173 ) ) ; +#38055 = FILL_AREA_STYLE_COLOUR ( '', #15985 ) ; +#38056 = ORIENTED_EDGE ( 'NONE', *, *, #4836, .F. ) ; +#38057 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1307 ), #32367 ) ; +#38058 = SURFACE_SIDE_STYLE ('',( #31457 ) ) ; +#38059 = ORIENTED_EDGE ( 'NONE', *, *, #32069, .T. ) ; +#38060 = SURFACE_SIDE_STYLE ('',( #4404 ) ) ; +#38061 = LINE ( 'NONE', #3907, #15355 ) ; +#38062 = FILL_AREA_STYLE ('',( #15497 ) ) ; +#38063 = ORIENTED_EDGE ( 'NONE', *, *, #28439, .T. ) ; +#38064 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38065 = ADVANCED_FACE ( 'NONE', ( #26820 ), #26575, .T. ) ; +#38066 = AXIS2_PLACEMENT_3D ( 'NONE', #16522, #20074, #23016 ) ; +#38067 = VERTEX_POINT ( 'NONE', #772 ) ; +#38069 = ORIENTED_EDGE ( 'NONE', *, *, #14324, .F. ) ; +#38068 = LINE ( 'NONE', #12783, #37551 ) ; +#38070 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23380, 'distance_accuracy_value', 'NONE'); +#38071 = VERTEX_POINT ( 'NONE', #39406 ) ; +#38072 = FACE_OUTER_BOUND ( 'NONE', #40125, .T. ) ; +#38073 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5605 ) ) ; +#38074 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38075 = PRESENTATION_STYLE_ASSIGNMENT (( #25027 ) ) ; +#38076 = EDGE_CURVE ( 'NONE', #21135, #19017, #11062, .T. ) ; +#38077 = CARTESIAN_POINT ( 'NONE', ( -3.395000000000000000, -0.4636038969321074100, -3.300000000000000300 ) ) ; +#38078 = VERTEX_POINT ( 'NONE', #7202 ) ; +#38079 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, 0.2999999999999999300, -0.2077317414029751500 ) ) ; +#38080 = LINE ( 'NONE', #40375, #28010 ) ; +#38081 = ADVANCED_FACE ( 'NONE', ( #34378 ), #11572, .T. ) ; +#38083 = STYLED_ITEM ( 'NONE', ( #30189 ), #3335 ) ; +#38082 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #526 ) ) ; +#38085 = CIRCLE ( 'NONE', #37895, 0.3600000000000078700 ) ; +#38084 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#38086 = CARTESIAN_POINT ( 'NONE', ( 4.748858409427525000, -1.400001745296164800, -7.173853277175708400 ) ) ; +#38087 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34791, 'distance_accuracy_value', 'NONE'); +#38088 = STYLED_ITEM ( 'NONE', ( #30020 ), #33296 ) ; +#38089 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#38090 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.380001745296165500, -2.299999999999999400 ) ) ; +#38092 = STYLED_ITEM ( 'NONE', ( #21619 ), #7585 ) ; +#38091 = LINE ( 'NONE', #875, #19934 ) ; +#38093 = SURFACE_STYLE_FILL_AREA ( #9411 ) ; +#38094 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38095 = PLANE ( 'NONE', #29926 ) ; +#38096 = CARTESIAN_POINT ( 'NONE', ( -2.350000000000000100, -1.499998254703822900, -6.299999999999993600 ) ) ; +#38097 = FACE_OUTER_BOUND ( 'NONE', #40919, .T. ) ; +#38098 = DIRECTION ( 'NONE', ( 6.056601140521965300E-031, -1.987721548152418300E-045, -1.000000000000000000 ) ) ; +#38099 = PRESENTATION_STYLE_ASSIGNMENT (( #27000 ) ) ; +#38100 = VECTOR ( 'NONE', #13048, 1000.000000000000000 ) ; +#38101 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38102 = EDGE_LOOP ( 'NONE', ( #8500, #39669, #31740, #2575, #35507 ) ) ; +#38103 = VERTEX_POINT ( 'NONE', #32780 ) ; +#38104 = EDGE_LOOP ( 'NONE', ( #11370, #33129, #36032, #13296 ) ) ; +#38105 = VERTEX_POINT ( 'NONE', #13713 ) ; +#38106 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38107 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#38108 = VECTOR ( 'NONE', #39781, 1000.000000000000000 ) ; +#38109 = PRESENTATION_STYLE_ASSIGNMENT (( #29528 ) ) ; +#38110 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.056601140521966100E-031 ) ) ; +#38111 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#38112 = VECTOR ( 'NONE', #37442, 1000.000000000000000 ) ; +#38113 = ADVANCED_FACE ( 'NONE', ( #28780 ), #16689, .F. ) ; +#38114 = EDGE_CURVE ( 'NONE', #7867, #7388, #4552, .T. ) ; +#38115 = LINE ( 'NONE', #30691, #6277 ) ; +#38116 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #36882, 'distance_accuracy_value', 'NONE'); +#38117 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28002 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39121, #10164, #16544 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38118 = LINE ( 'NONE', #22276, #10258 ) ; +#38119 = LINE ( 'NONE', #40096, #35626 ) ; +#38120 = ORIENTED_EDGE ( 'NONE', *, *, #24751, .F. ) ; +#38121 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000003600, 0.6800017452961715200, -1.649999999999999500 ) ) ; +#38122 = EDGE_CURVE ( 'NONE', #853, #35573, #12100, .T. ) ; +#38123 = FACE_OUTER_BOUND ( 'NONE', #25687, .T. ) ; +#38124 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25718 ) ) ; +#38125 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#38127 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38126 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38128 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#38129 = ADVANCED_FACE ( 'NONE', ( #35847 ), #489, .F. ) ; +#38130 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7553 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35281, #35686, #29173 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38131 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38132 = ORIENTED_EDGE ( 'NONE', *, *, #28313, .F. ) ; +#38135 = EDGE_CURVE ( 'NONE', #36087, #14378, #10064, .T. ) ; +#38134 = STYLED_ITEM ( 'NONE', ( #3813 ), #24572 ) ; +#38133 = CARTESIAN_POINT ( 'NONE', ( -2.995000000000000100, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#38136 = SURFACE_STYLE_FILL_AREA ( #5841 ) ; +#38137 = ORIENTED_EDGE ( 'NONE', *, *, #18911, .T. ) ; +#38138 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8353, 'distance_accuracy_value', 'NONE'); +#38139 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24642 ) ) ; +#38140 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5427 ), #34384 ) ; +#38141 = ORIENTED_EDGE ( 'NONE', *, *, #29651, .T. ) ; +#38142 = SURFACE_STYLE_FILL_AREA ( #25126 ) ; +#38144 = STYLED_ITEM ( 'NONE', ( #12611 ), #9338 ) ; +#38143 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29486 ) ) ; +#38145 = ORIENTED_EDGE ( 'NONE', *, *, #25956, .T. ) ; +#38146 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41136 ) ) ; +#38147 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38148 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#38149 = ORIENTED_EDGE ( 'NONE', *, *, #9019, .F. ) ; +#38150 = CARTESIAN_POINT ( 'NONE', ( 3.344999999999999800, -0.1999999999999999800, -1.600000000000000300 ) ) ; +#38151 = CYLINDRICAL_SURFACE ( 'NONE', #515, 0.1000000000000000500 ) ; +#38152 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38153 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38154 = VECTOR ( 'NONE', #16782, 1000.000000000000000 ) ; +#38155 = LINE ( 'NONE', #38567, #3778 ) ; +#38156 = ORIENTED_EDGE ( 'NONE', *, *, #19097, .T. ) ; +#38157 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, 0.2000000000000001200, -3.250000000000000900 ) ) ; +#38158 = DIRECTION ( 'NONE', ( -2.168404344971012800E-015, 2.710505431213766000E-016, 1.000000000000000000 ) ) ; +#38159 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38160 = PRESENTATION_STYLE_ASSIGNMENT (( #33090 ) ) ; +#38161 = PRESENTATION_STYLE_ASSIGNMENT (( #33537 ) ) ; +#38162 = VERTEX_POINT ( 'NONE', #33359 ) ; +#38163 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#38164 = CARTESIAN_POINT ( 'NONE', ( -2.000000000000000000, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#38165 = ADVANCED_FACE ( 'NONE', ( #39387 ), #25291, .F. ) ; +#38166 = PLANE ( 'NONE', #8477 ) ; +#38167 = ORIENTED_EDGE ( 'NONE', *, *, #2230, .T. ) ; +#38168 = SURFACE_STYLE_USAGE ( .BOTH. , #6262 ) ; +#38169 = EDGE_CURVE ( 'NONE', #29274, #34508, #33370, .T. ) ; +#38170 = FACE_OUTER_BOUND ( 'NONE', #13527, .T. ) ; +#38171 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, 0.2336906316634773100, -1.600000000000000800 ) ) ; +#38172 = LINE ( 'NONE', #23412, #37184 ) ; +#38173 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -0.3499999999999999800, 0.3499999999999999800 ) ) ; +#38174 = EDGE_CURVE ( 'NONE', #4852, #8969, #21769, .T. ) ; +#38175 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30893 ) ) ; +#38176 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6027, 'distance_accuracy_value', 'NONE'); +#38177 = FACE_OUTER_BOUND ( 'NONE', #17599, .T. ) ; +#38178 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38179 = SURFACE_STYLE_FILL_AREA ( #18058 ) ; +#38180 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#38181 = ORIENTED_EDGE ( 'NONE', *, *, #28954, .F. ) ; +#38182 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38183 = ORIENTED_EDGE ( 'NONE', *, *, #14747, .T. ) ; +#38184 = CARTESIAN_POINT ( 'NONE', ( 3.119636707815099300, -0.2999999999999999300, 1.000000000000057500 ) ) ; +#38185 = VERTEX_POINT ( 'NONE', #7334 ) ; +#38186 = SURFACE_STYLE_FILL_AREA ( #9721 ) ; +#38187 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2689 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29876, #16874, #20597 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38188 = LINE ( 'NONE', #14516, #30631 ) ; +#38189 = DIRECTION ( 'NONE', ( 0.08715574274766049700, 0.0000000000000000000, -0.9961946980917454300 ) ) ; +#38190 = LINE ( 'NONE', #19592, #10870 ) ; +#38191 = PRESENTATION_STYLE_ASSIGNMENT (( #26079 ) ) ; +#38192 = VECTOR ( 'NONE', #9011, 1000.000000000000000 ) ; +#38193 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #17809, 'distance_accuracy_value', 'NONE'); +#38194 = SURFACE_SIDE_STYLE ('',( #95 ) ) ; +#38195 = VECTOR ( 'NONE', #17597, 1000.000000000000000 ) ; +#38196 = ORIENTED_EDGE ( 'NONE', *, *, #1065, .F. ) ; +#38197 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36055 ) ) ; +#38198 = LINE ( 'NONE', #16429, #23049 ) ; +#38199 = ORIENTED_EDGE ( 'NONE', *, *, #11566, .F. ) ; +#38200 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8223 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29057, #41622, #22314 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38201 = FILL_AREA_STYLE ('',( #28747 ) ) ; +#38202 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#38204 = STYLED_ITEM ( 'NONE', ( #8128 ), #5472 ) ; +#38203 = AXIS2_PLACEMENT_3D ( 'NONE', #28767, #16461, #39038 ) ; +#38205 = ORIENTED_EDGE ( 'NONE', *, *, #25054, .F. ) ; +#38207 = EDGE_CURVE ( 'NONE', #10696, #5440, #29787, .T. ) ; +#38206 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31718 ) ) ; +#38208 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#38209 = SURFACE_STYLE_FILL_AREA ( #20461 ) ; +#38210 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38211 = SURFACE_STYLE_USAGE ( .BOTH. , #8961 ) ; +#38212 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -0.9500017452961654300, -5.075000000000000200 ) ) ; +#38214 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24448 ) ) ; +#38213 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7890 ) ) ; +#38215 = VECTOR ( 'NONE', #18860, 1000.000000000000000 ) ; +#38216 = SURFACE_STYLE_USAGE ( .BOTH. , #21885 ) ; +#38217 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#38218 = SURFACE_STYLE_FILL_AREA ( #30274 ) ; +#38219 = ORIENTED_EDGE ( 'NONE', *, *, #23091, .F. ) ; +#38220 = FILL_AREA_STYLE ('',( #15506 ) ) ; +#38221 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #9074, #13462, #32676, #539, #21990, #32402, #2652, #39163, #10061 ), + .UNSPECIFIED., .F., .F., + ( 4, 1, 2, 2, 4 ), + ( 0.0000000000000000000, 0.2499999999999990600, 0.3749999999999983900, 0.4999999999999976700, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#38222 = FILL_AREA_STYLE ('',( #31738 ) ) ; +#38223 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#38224 = FACE_OUTER_BOUND ( 'NONE', #932, .T. ) ; +#38225 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -2.031000000000000600, -3.214459358809376600 ) ) ; +#38226 = CARTESIAN_POINT ( 'NONE', ( -3.100000000000000100, -1.499998254703840000, -5.049999999999993600 ) ) ; +#38227 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#38228 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #2822, #38077, #28768, #25671 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.8047378541243649400, 0.8047378541243649400, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#38229 = ORIENTED_EDGE ( 'NONE', *, *, #7044, .F. ) ; +#38230 = EDGE_LOOP ( 'NONE', ( #9276, #30871, #18122, #25456 ) ) ; +#38231 = EDGE_LOOP ( 'NONE', ( #16749, #27355, #31189, #8150 ) ) ; +#38232 = PRESENTATION_STYLE_ASSIGNMENT (( #27735 ) ) ; +#38233 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#38234 = PRESENTATION_STYLE_ASSIGNMENT (( #2246 ) ) ; +#38235 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38236 = FILL_AREA_STYLE ('',( #25158 ) ) ; +#38237 = ORIENTED_EDGE ( 'NONE', *, *, #24713, .T. ) ; +#38238 = EDGE_CURVE ( 'NONE', #24275, #23563, #16182, .T. ) ; +#38239 = PLANE ( 'NONE', #16624 ) ; +#38240 = FILL_AREA_STYLE_COLOUR ( '', #24463 ) ; +#38241 = EDGE_CURVE ( 'NONE', #4075, #25894, #30810, .T. ) ; +#38242 = AXIS2_PLACEMENT_3D ( 'NONE', #14853, #15143, #8333 ) ; +#38243 = CARTESIAN_POINT ( 'NONE', ( -3.024289321881345600, 0.3500000000000002600, -1.399999999919440600 ) ) ; +#38244 = SURFACE_STYLE_FILL_AREA ( #28283 ) ; +#38245 = CARTESIAN_POINT ( 'NONE', ( -3.179314575050761900, 0.6000000000000003100, -3.279289321881345500 ) ) ; +#38246 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38247 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.2800017452961688400, -5.200000000000001100 ) ) ; +#38249 = SURFACE_STYLE_USAGE ( .BOTH. , #35025 ) ; +#38248 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#38250 = SURFACE_STYLE_USAGE ( .BOTH. , #9285 ) ; +#38251 = EDGE_LOOP ( 'NONE', ( #35043, #24835, #19910, #34386 ) ) ; +#38252 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29600 ), #36124 ) ; +#38253 = AXIS2_PLACEMENT_3D ( 'NONE', #232, #32511, #35776 ) ; +#38255 = AXIS2_PLACEMENT_3D ( 'NONE', #30415, #24493, #33661 ) ; +#38254 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27436 ) ) ; +#38256 = DIRECTION ( 'NONE', ( 6.056601140521966100E-031, 1.987721548152419000E-045, -1.000000000000000000 ) ) ; +#38257 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745278514100, -3.214459358809377500 ) ) ; +#38258 = ORIENTED_EDGE ( 'NONE', *, *, #9589, .T. ) ; +#38259 = ORIENTED_EDGE ( 'NONE', *, *, #21639, .F. ) ; +#38261 = EDGE_CURVE ( 'NONE', #13690, #1846, #18709, .T. ) ; +#38260 = AXIS2_PLACEMENT_3D ( 'NONE', #434, #26528, #26394 ) ; +#38262 = FILL_AREA_STYLE_COLOUR ( '', #4887 ) ; +#38263 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38264 = ORIENTED_EDGE ( 'NONE', *, *, #21549, .T. ) ; +#38265 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000005300, 1.298332101551391600E-014, -4.400000000000000400 ) ) ; +#38266 = ORIENTED_EDGE ( 'NONE', *, *, #11259, .F. ) ; +#38267 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#38269 = AXIS2_PLACEMENT_3D ( 'NONE', #11571, #18259, #25174 ) ; +#38268 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15813 ), #8502 ) ; +#38270 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38272 = CIRCLE ( 'NONE', #33144, 0.1000000000000000500 ) ; +#38271 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32950 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34909, #26296, #6645 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38273 = VECTOR ( 'NONE', #16829, 1000.000000000000000 ) ; +#38274 = PRESENTATION_STYLE_ASSIGNMENT (( #36308 ) ) ; +#38275 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38276 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37003, 'distance_accuracy_value', 'NONE'); +#38277 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#38278 = ORIENTED_EDGE ( 'NONE', *, *, #9015, .F. ) ; +#38280 = VERTEX_POINT ( 'NONE', #4804 ) ; +#38279 = ADVANCED_FACE ( 'NONE', ( #36896 ), #16635, .T. ) ; +#38281 = CIRCLE ( 'NONE', #19290, 0.09999999999987406500 ) ; +#38282 = CARTESIAN_POINT ( 'NONE', ( 3.137984242873479400, -0.2999999999999999900, 0.9623819784617937400 ) ) ; +#38283 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#38284 = VECTOR ( 'NONE', #2398, 1000.000000000000000 ) ; +#38285 = ORIENTED_EDGE ( 'NONE', *, *, #8103, .T. ) ; +#38286 = SURFACE_STYLE_FILL_AREA ( #5436 ) ; +#38287 = PLANE ( 'NONE', #291 ) ; +#38288 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38289 = PLANE ( 'NONE', #7368 ) ; +#38290 = ADVANCED_FACE ( 'NONE', ( #34867 ), #37561, .F. ) ; +#38291 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38292 = VECTOR ( 'NONE', #8112, 1000.000000000000000 ) ; +#38293 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38294 = EDGE_CURVE ( 'NONE', #18155, #31990, #1508, .T. ) ; +#38295 = ORIENTED_EDGE ( 'NONE', *, *, #21605, .F. ) ; +#38296 = VECTOR ( 'NONE', #8797, 1000.000000000000000 ) ; +#38297 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38298 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#38299 = EDGE_CURVE ( 'NONE', #18656, #16722, #24775, .T. ) ; +#38300 = ORIENTED_EDGE ( 'NONE', *, *, #17043, .T. ) ; +#38301 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.2300017452961684900, -6.224999999999999600 ) ) ; +#38302 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38303 = VECTOR ( 'NONE', #10655, 1000.000000000000000 ) ; +#38304 = EDGE_LOOP ( 'NONE', ( #17522, #16188, #34892, #41284 ) ) ; +#38305 = ORIENTED_EDGE ( 'NONE', *, *, #13190, .F. ) ; +#38306 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5758 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18186, #27628, #21585 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38307 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#38308 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#38309 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -0.3499999999999999800, 0.6999999999999999600 ) ) ; +#38310 = VECTOR ( 'NONE', #25891, 1000.000000000000000 ) ; +#38311 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#38312 = SURFACE_STYLE_USAGE ( .BOTH. , #15183 ) ; +#38313 = EDGE_LOOP ( 'NONE', ( #27337, #14111, #11562, #22371 ) ) ; +#38314 = PRESENTATION_STYLE_ASSIGNMENT (( #33710 ) ) ; +#38315 = ORIENTED_EDGE ( 'NONE', *, *, #1079, .F. ) ; +#38316 = ORIENTED_EDGE ( 'NONE', *, *, #11091, .T. ) ; +#38317 = PRESENTATION_STYLE_ASSIGNMENT (( #36562 ) ) ; +#38318 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5847 ) ) ; +#38319 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#38320 = CARTESIAN_POINT ( 'NONE', ( -3.135637157808815400, -0.5518130592518756300, -1.881709196267185700 ) ) ; +#38321 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#38322 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38324 = EDGE_CURVE ( 'NONE', #32404, #26309, #11582, .T. ) ; +#38323 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.499998254703820400, -6.299999999999993600 ) ) ; +#38325 = MANIFOLD_SOLID_BREP ( '1-1-solid17', #17318 ) ; +#38326 = ORIENTED_EDGE ( 'NONE', *, *, #15566, .F. ) ; +#38327 = ADVANCED_FACE ( 'NONE', ( #19204 ), #40237, .F. ) ; +#38328 = PRESENTATION_STYLE_ASSIGNMENT (( #36770 ) ) ; +#38329 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4504 ) ) ; +#38330 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#38331 = AXIS2_PLACEMENT_3D ( 'NONE', #25298, #32022, #28514 ) ; +#38332 = PLANE ( 'NONE', #23756 ) ; +#38333 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2616 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37118, #17792, #2531 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38334 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#38335 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39700 ) ) ; +#38336 = PLANE ( 'NONE', #8178 ) ; +#38337 = FILL_AREA_STYLE_COLOUR ( '', #15482 ) ; +#38338 = ADVANCED_FACE ( 'NONE', ( #35851 ), #25717, .T. ) ; +#38339 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #22727, #28930, #5495, #16095 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 6.056601140522115900E-031, 0.7227342478134140000 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956571100, 0.9569428977956571100, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#38340 = PLANE ( 'NONE', #9736 ) ; +#38341 = VERTEX_POINT ( 'NONE', #34186 ) ; +#38342 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#38343 = PLANE ( 'NONE', #15461 ) ; +#38344 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#38345 = PRESENTATION_STYLE_ASSIGNMENT (( #1209 ) ) ; +#38346 = ORIENTED_EDGE ( 'NONE', *, *, #15973, .F. ) ; +#38347 = CIRCLE ( 'NONE', #11952, 0.05000000000000012800 ) ; +#38348 = SURFACE_STYLE_FILL_AREA ( #21878 ) ; +#38349 = SURFACE_STYLE_USAGE ( .BOTH. , #29010 ) ; +#38350 = VECTOR ( 'NONE', #4776, 1000.000000000000000 ) ; +#38351 = FACE_OUTER_BOUND ( 'NONE', #28751, .T. ) ; +#38352 = FILL_AREA_STYLE ('',( #22011 ) ) ; +#38353 = VERTEX_POINT ( 'NONE', #30037 ) ; +#38354 = EDGE_LOOP ( 'NONE', ( #10251, #22152, #10307, #37069 ) ) ; +#38355 = ORIENTED_EDGE ( 'NONE', *, *, #30949, .T. ) ; +#38356 = CYLINDRICAL_SURFACE ( 'NONE', #35191, 0.2999999999999999300 ) ; +#38357 = SURFACE_SIDE_STYLE ('',( #33237 ) ) ; +#38358 = SURFACE_SIDE_STYLE ('',( #6407 ) ) ; +#38359 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6406, 'distance_accuracy_value', 'NONE'); +#38360 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.380001745296134000, -6.031671842700004200 ) ) ; +#38361 = EDGE_CURVE ( 'NONE', #21645, #38162, #21202, .T. ) ; +#38362 = ORIENTED_EDGE ( 'NONE', *, *, #16171, .F. ) ; +#38363 = PRESENTATION_STYLE_ASSIGNMENT (( #25947 ) ) ; +#38364 = PLANE ( 'NONE', #15735 ) ; +#38365 = EDGE_CURVE ( 'NONE', #6960, #28000, #6998, .T. ) ; +#38366 = STYLED_ITEM ( 'NONE', ( #17611 ), #17417 ) ; +#38367 = EDGE_CURVE ( 'NONE', #23482, #18344, #39832, .T. ) ; +#38368 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38369 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#38370 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12386 ), #29718 ) ; +#38371 = ADVANCED_FACE ( 'NONE', ( #32784 ), #30450, .T. ) ; +#38372 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#38373 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.380001745296129100, -6.699999999999994000 ) ) ; +#38374 = CARTESIAN_POINT ( 'NONE', ( 0.09999999999999990800, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#38375 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, 0.3499999999999999800, -1.300000000000000300 ) ) ; +#38376 = SURFACE_STYLE_FILL_AREA ( #6990 ) ; +#38377 = ORIENTED_EDGE ( 'NONE', *, *, #20668, .T. ) ; +#38379 = EDGE_CURVE ( 'NONE', #14983, #7802, #41855, .T. ) ; +#38378 = AXIS2_PLACEMENT_3D ( 'NONE', #26411, #30496, #19659 ) ; +#38380 = CYLINDRICAL_SURFACE ( 'NONE', #28421, 0.1000000000000001600 ) ; +#38381 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 6.056601140521967900E-031 ) ) ; +#38382 = SURFACE_STYLE_USAGE ( .BOTH. , #15785 ) ; +#38383 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38384 = VERTEX_POINT ( 'NONE', #36961 ) ; +#38385 = VECTOR ( 'NONE', #9345, 1000.000000000000000 ) ; +#38386 = ORIENTED_EDGE ( 'NONE', *, *, #39683, .F. ) ; +#38387 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, 10.30000000000000100, -1.250000000000000000 ) ) ; +#38388 = LINE ( 'NONE', #16514, #33872 ) ; +#38390 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3998 ), #35684 ) ; +#38389 = AXIS2_PLACEMENT_3D ( 'NONE', #21452, #2114, #8541 ) ; +#38391 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2710 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20930, #4784, #34301 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38392 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#38393 = STYLED_ITEM ( 'NONE', ( #38556 ), #33611 ) ; +#38394 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.499998254703820400, -6.699999999999994000 ) ) ; +#38395 = ORIENTED_EDGE ( 'NONE', *, *, #23232, .T. ) ; +#38396 = CARTESIAN_POINT ( 'NONE', ( -14.52500000000000700, -0.4099999999999662200, -6.861124800398366500 ) ) ; +#38398 = LINE ( 'NONE', #19349, #18217 ) ; +#38397 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.380001745296143100, -4.781671842700004200 ) ) ; +#38399 = ORIENTED_EDGE ( 'NONE', *, *, #13185, .T. ) ; +#38400 = VERTEX_POINT ( 'NONE', #23681 ) ; +#38401 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#38402 = AXIS2_PLACEMENT_3D ( 'NONE', #398, #23092, #32980 ) ; +#38403 = FILL_AREA_STYLE_COLOUR ( '', #28667 ) ; +#38404 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.2999999999999999900, -0.2498427124745999900 ) ) ; +#38405 = ORIENTED_EDGE ( 'NONE', *, *, #3143, .F. ) ; +#38406 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38407 = ORIENTED_EDGE ( 'NONE', *, *, #23150, .F. ) ; +#38409 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#38408 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38410 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38411 = LINE ( 'NONE', #41568, #4593 ) ; +#38412 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 2.322941965694886000, -1.250000000000000000 ) ) ; +#38413 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38414 = PRESENTATION_STYLE_ASSIGNMENT (( #7752 ) ) ; +#38415 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8278, 'distance_accuracy_value', 'NONE'); +#38416 = ORIENTED_EDGE ( 'NONE', *, *, #27959, .T. ) ; +#38417 = EDGE_CURVE ( 'NONE', #37267, #14492, #38818, .T. ) ; +#38418 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38419 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703822500, -2.599999999999999600 ) ) ; +#38420 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38421 = EDGE_LOOP ( 'NONE', ( #24151, #39460, #27670, #11838 ) ) ; +#38422 = CYLINDRICAL_SURFACE ( 'NONE', #38764, 0.2999999999999999300 ) ; +#38423 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -0.7580972011844129300 ) ) ; +#38424 = PRESENTATION_STYLE_ASSIGNMENT (( #34183 ) ) ; +#38425 = CARTESIAN_POINT ( 'NONE', ( -2.995000000000000100, 0.2999999999999999900, -1.415376800000000000 ) ) ; +#38426 = EDGE_CURVE ( 'NONE', #2675, #1444, #10523, .T. ) ; +#38427 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21158 ), #26838 ) ; +#38428 = VECTOR ( 'NONE', #18420, 1000.000000000000000 ) ; +#38429 = ORIENTED_EDGE ( 'NONE', *, *, #40428, .F. ) ; +#38430 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38431 = AXIS2_PLACEMENT_3D ( 'NONE', #19184, #3069, #35117 ) ; +#38432 = ORIENTED_EDGE ( 'NONE', *, *, #7615, .F. ) ; +#38433 = VERTEX_POINT ( 'NONE', #33432 ) ; +#38434 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.2800017452961687200, -6.150000000000000400 ) ) ; +#38435 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24678 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12864, #35772, #19409 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38436 = SURFACE_STYLE_USAGE ( .BOTH. , #22362 ) ; +#38437 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#38438 = SURFACE_SIDE_STYLE ('',( #26544 ) ) ; +#38439 = SURFACE_SIDE_STYLE ('',( #3750 ) ) ; +#38440 = ORIENTED_EDGE ( 'NONE', *, *, #1628, .T. ) ; +#38441 = STYLED_ITEM ( 'NONE', ( #32969 ), #37674 ) ; +#38442 = CIRCLE ( 'NONE', #20762, 0.2818014882866900500 ) ; +#38443 = ORIENTED_EDGE ( 'NONE', *, *, #8533, .F. ) ; +#38444 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38589 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39952, #17956, #7767 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38445 = PLANE ( 'NONE', #2045 ) ; +#38446 = VECTOR ( 'NONE', #16168, 1000.000000000000000 ) ; +#38448 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23862 ) ) ; +#38447 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32759 ), #6527 ) ; +#38450 = CIRCLE ( 'NONE', #37406, 0.3600000000000078700 ) ; +#38449 = CARTESIAN_POINT ( 'NONE', ( -4.465000000000001600, 0.08000174529613829400, -7.350000000000000500 ) ) ; +#38451 = SURFACE_STYLE_USAGE ( .BOTH. , #8930 ) ; +#38452 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#38454 = EDGE_CURVE ( 'NONE', #26547, #26667, #40353, .T. ) ; +#38453 = STYLED_ITEM ( 'NONE', ( #12527 ), #34579 ) ; +#38455 = PLANE ( 'NONE', #10267 ) ; +#38456 = AXIS2_PLACEMENT_3D ( 'NONE', #162, #9547, #12 ) ; +#38457 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38458 = DIRECTION ( 'NONE', ( -3.252601786828647500E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#38459 = VERTEX_POINT ( 'NONE', #11096 ) ; +#38460 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.139998254717355100, -6.299996877890552400 ) ) ; +#38461 = SURFACE_SIDE_STYLE ('',( #22015 ) ) ; +#38462 = VERTEX_POINT ( 'NONE', #17628 ) ; +#38463 = SURFACE_STYLE_FILL_AREA ( #7117 ) ; +#38464 = FILL_AREA_STYLE_COLOUR ( '', #39991 ) ; +#38465 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#38466 = VECTOR ( 'NONE', #7480, 1000.000000000000000 ) ; +#38467 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.8500017452961659000, -5.575000000000001100 ) ) ; +#38468 = ORIENTED_EDGE ( 'NONE', *, *, #37016, .F. ) ; +#38469 = SURFACE_STYLE_FILL_AREA ( #7829 ) ; +#38470 = ORIENTED_EDGE ( 'NONE', *, *, #16539, .F. ) ; +#38471 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#38472 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38473 = CARTESIAN_POINT ( 'NONE', ( 3.090769194355483600, -0.2666666666666668300, 1.050000000000572500 ) ) ; +#38474 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16091, 'distance_accuracy_value', 'NONE'); +#38475 = FILL_AREA_STYLE_COLOUR ( '', #4892 ) ; +#38476 = ORIENTED_EDGE ( 'NONE', *, *, #21592, .T. ) ; +#38477 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#38478 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#38479 = VERTEX_POINT ( 'NONE', #39764 ) ; +#38480 = EDGE_CURVE ( 'NONE', #32555, #35308, #5478, .T. ) ; +#38481 = CYLINDRICAL_SURFACE ( 'NONE', #38203, 0.2000000000000000900 ) ; +#38482 = LINE ( 'NONE', #23870, #25399 ) ; +#38483 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#38484 = FILL_AREA_STYLE_COLOUR ( '', #3266 ) ; +#38485 = CARTESIAN_POINT ( 'NONE', ( -3.100000000000000100, -1.499998254703840000, -5.449999999999994000 ) ) ; +#38486 = EDGE_CURVE ( 'NONE', #16876, #18653, #23188, .T. ) ; +#38487 = LINE ( 'NONE', #13245, #16259 ) ; +#38488 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36617 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11342, #33410, #7538 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38489 = VECTOR ( 'NONE', #35256, 1000.000000000000000 ) ; +#38490 = FILL_AREA_STYLE ('',( #41880 ) ) ; +#38491 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #37059, #30288, #4442, #17308 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#38492 = ADVANCED_FACE ( 'NONE', ( #6016 ), #30321, .F. ) ; +#38493 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36558 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1362, #30835, #11469 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38494 = SURFACE_STYLE_USAGE ( .BOTH. , #15764 ) ; +#38495 = ORIENTED_EDGE ( 'NONE', *, *, #8773, .T. ) ; +#38496 = SURFACE_STYLE_USAGE ( .BOTH. , #28351 ) ; +#38497 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22000 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6101, #34916, #25340 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38498 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#38499 = STYLED_ITEM ( 'NONE', ( #11313 ), #31482 ) ; +#38500 = ORIENTED_EDGE ( 'NONE', *, *, #37837, .T. ) ; +#38501 = PRESENTATION_STYLE_ASSIGNMENT (( #18960 ) ) ; +#38503 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28622 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32399, #29574, #16725 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38502 = STYLED_ITEM ( 'NONE', ( #29646 ), #31042 ) ; +#38504 = FILL_AREA_STYLE ('',( #25550 ) ) ; +#38507 = EDGE_CURVE ( 'NONE', #28801, #32927, #13034, .T. ) ; +#38506 = SURFACE_SIDE_STYLE ('',( #20337 ) ) ; +#38505 = STYLED_ITEM ( 'NONE', ( #33875 ), #35633 ) ; +#38508 = LINE ( 'NONE', #27224, #17840 ) ; +#38509 = FILL_AREA_STYLE_COLOUR ( '', #4563 ) ; +#38510 = ORIENTED_EDGE ( 'NONE', *, *, #9766, .T. ) ; +#38511 = FILL_AREA_STYLE ('',( #13087 ) ) ; +#38512 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#38513 = EDGE_LOOP ( 'NONE', ( #30702, #8080, #10629, #3432, #34516 ) ) ; +#38515 = AXIS2_PLACEMENT_3D ( 'NONE', #26232, #29453, #23260 ) ; +#38514 = STYLED_ITEM ( 'NONE', ( #11403 ), #25886 ) ; +#38516 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#38517 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000008300, -0.8500017452961654600, -4.875000000000000900 ) ) ; +#38518 = ORIENTED_EDGE ( 'NONE', *, *, #34561, .F. ) ; +#38519 = VECTOR ( 'NONE', #8703, 1000.000000000000000 ) ; +#38520 = ORIENTED_EDGE ( 'NONE', *, *, #32174, .T. ) ; +#38521 = FACE_OUTER_BOUND ( 'NONE', #21493, .T. ) ; +#38522 = VECTOR ( 'NONE', #19210, 1000.000000000000000 ) ; +#38523 = PLANE ( 'NONE', #714 ) ; +#38524 = LINE ( 'NONE', #35307, #21393 ) ; +#38525 = SURFACE_SIDE_STYLE ('',( #28055 ) ) ; +#38526 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38101, 'distance_accuracy_value', 'NONE'); +#38527 = CARTESIAN_POINT ( 'NONE', ( 3.131868397853672100, 0.2999999999999999900, 0.9749213189743888300 ) ) ; +#38528 = CARTESIAN_POINT ( 'NONE', ( -4.425000000000014000, -1.999998254703822000, -5.899999999999999500 ) ) ; +#38529 = ADVANCED_FACE ( 'NONE', ( #20183 ), #28705, .F. ) ; +#38530 = LINE ( 'NONE', #32403, #36014 ) ; +#38531 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38532 = CARTESIAN_POINT ( 'NONE', ( -3.889484572997103900, 0.5678119715380604000, -4.405230161099193100 ) ) ; +#38533 = SURFACE_STYLE_FILL_AREA ( #11843 ) ; +#38534 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#38535 = EDGE_CURVE ( 'NONE', #36264, #12333, #22666, .T. ) ; +#38536 = DIRECTION ( 'NONE', ( -5.695189303027880500E-032, 2.367138801244514300E-016, 1.000000000000000000 ) ) ; +#38537 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.3292893218813450800, -1.517157287559287800 ) ) ; +#38538 = ORIENTED_EDGE ( 'NONE', *, *, #41451, .T. ) ; +#38539 = SURFACE_STYLE_USAGE ( .BOTH. , #15958 ) ; +#38540 = EDGE_CURVE ( 'NONE', #17086, #9494, #20137, .T. ) ; +#38541 = ORIENTED_EDGE ( 'NONE', *, *, #34174, .T. ) ; +#38542 = CARTESIAN_POINT ( 'NONE', ( 3.395000000000000000, -0.4636038969321073000, -3.300000000000000300 ) ) ; +#38543 = VERTEX_POINT ( 'NONE', #8534 ) ; +#38545 = ORIENTED_EDGE ( 'NONE', *, *, #23960, .T. ) ; +#38544 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#38546 = FILL_AREA_STYLE_COLOUR ( '', #25844 ) ; +#38547 = VERTEX_POINT ( 'NONE', #37504 ) ; +#38548 = AXIS2_PLACEMENT_3D ( 'NONE', #16309, #29414, #10054 ) ; +#38549 = PRESENTATION_STYLE_ASSIGNMENT (( #28207 ) ) ; +#38550 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25826, 'distance_accuracy_value', 'NONE'); +#38551 = ORIENTED_EDGE ( 'NONE', *, *, #8164, .F. ) ; +#38552 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26977 ), #37770 ) ; +#38553 = LINE ( 'NONE', #25177, #2231 ) ; +#38554 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -5.700000000000000200 ) ) ; +#38555 = VECTOR ( 'NONE', #41369, 1000.000000000000000 ) ; +#38556 = PRESENTATION_STYLE_ASSIGNMENT (( #32206 ) ) ; +#38557 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.480001745296165600, -1.749999999999999300 ) ) ; +#38558 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35393 ) ) ; +#38559 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36429 ) ) ; +#38560 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.139998254717350800, -6.299996877890552400 ) ) ; +#38561 = FILL_AREA_STYLE_COLOUR ( '', #28820 ) ; +#38562 = VECTOR ( 'NONE', #6377, 1000.000000000000000 ) ; +#38564 = EDGE_CURVE ( 'NONE', #10050, #34148, #2474, .T. ) ; +#38563 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34256 ), #21050 ) ; +#38565 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.837630800822890800E-016 ) ) ; +#38566 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38567 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.966063034915694700, -0.6228541982233617400 ) ) ; +#38568 = FACE_OUTER_BOUND ( 'NONE', #7732, .T. ) ; +#38569 = FACE_OUTER_BOUND ( 'NONE', #28112, .T. ) ; +#38570 = SURFACE_SIDE_STYLE ('',( #30945 ) ) ; +#38572 = AXIS2_PLACEMENT_3D ( 'NONE', #28673, #12416, #3124 ) ; +#38571 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9051 ), #8253 ) ; +#38573 = STYLED_ITEM ( 'NONE', ( #3209 ), #39834 ) ; +#38574 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.630001745296169000, -4.100000000000000500 ) ) ; +#38575 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.9500017452961659900, -4.875000000000000900 ) ) ; +#38576 = AXIS2_PLACEMENT_3D ( 'NONE', #34755, #34205, #28119 ) ; +#38577 = SURFACE_STYLE_USAGE ( .BOTH. , #41418 ) ; +#38578 = ADVANCED_FACE ( 'NONE', ( #28221 ), #40463, .T. ) ; +#38579 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#38580 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38581 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#38582 = SURFACE_STYLE_FILL_AREA ( #18097 ) ; +#38583 = VERTEX_POINT ( 'NONE', #24541 ) ; +#38584 = SURFACE_STYLE_FILL_AREA ( #16219 ) ; +#38585 = ORIENTED_EDGE ( 'NONE', *, *, #3719, .T. ) ; +#38586 = EDGE_LOOP ( 'NONE', ( #10991, #14531, #39954, #10809 ) ) ; +#38587 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.380001745296139700, -5.449999999999994000 ) ) ; +#38588 = ORIENTED_EDGE ( 'NONE', *, *, #12939, .T. ) ; +#38589 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39952, 'distance_accuracy_value', 'NONE'); +#38590 = ORIENTED_EDGE ( 'NONE', *, *, #24807, .F. ) ; +#38592 = SURFACE_SIDE_STYLE ('',( #36828 ) ) ; +#38591 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#38593 = SURFACE_SIDE_STYLE ('',( #11236 ) ) ; +#38594 = CIRCLE ( 'NONE', #33023, 0.1000000000000000500 ) ; +#38595 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.07499999999999999700, 0.0000000000000000000 ) ) ; +#38596 = VECTOR ( 'NONE', #9307, 1000.000000000000000 ) ; +#38597 = SURFACE_STYLE_USAGE ( .BOTH. , #38881 ) ; +#38598 = FACE_OUTER_BOUND ( 'NONE', #1193, .T. ) ; +#38599 = EDGE_CURVE ( 'NONE', #26031, #24271, #24175, .T. ) ; +#38600 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -0.8500017452961659000, -5.599999999999999600 ) ) ; +#38601 = EDGE_CURVE ( 'NONE', #1811, #18769, #25212, .T. ) ; +#38602 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38603 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28111, 'distance_accuracy_value', 'NONE'); +#38604 = EDGE_CURVE ( 'NONE', #6318, #30894, #1464, .T. ) ; +#38605 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, -10.30000000000000100, -1.250000000000000000 ) ) ; +#38606 = CIRCLE ( 'NONE', #16617, 0.1000000000000002600 ) ; +#38607 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10461 ) ) ; +#38608 = ORIENTED_EDGE ( 'NONE', *, *, #2168, .T. ) ; +#38609 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#38610 = VERTEX_POINT ( 'NONE', #8250 ) ; +#38611 = PRESENTATION_STYLE_ASSIGNMENT (( #3819 ) ) ; +#38612 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -2.031000000000000600, -3.214459358809383300 ) ) ; +#38613 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -1.380001745296130000, -4.781671842700004200 ) ) ; +#38614 = AXIS2_PLACEMENT_3D ( 'NONE', #24281, #4911, #40771 ) ; +#38615 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30787 ), #10474 ) ; +#38616 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38617 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#38618 = VECTOR ( 'NONE', #19533, 1000.000000000000000 ) ; +#38620 = EDGE_CURVE ( 'NONE', #41091, #3705, #24685, .T. ) ; +#38619 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#38621 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000100, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#38622 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#38623 = EDGE_LOOP ( 'NONE', ( #7725, #26808 ) ) ; +#38624 = CARTESIAN_POINT ( 'NONE', ( 3.244813086426265000, 0.2999999999999999900, 0.6909930101031753800 ) ) ; +#38625 = ORIENTED_EDGE ( 'NONE', *, *, #32113, .T. ) ; +#38626 = PRESENTATION_STYLE_ASSIGNMENT (( #6132 ) ) ; +#38628 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32140 ), #28624 ) ; +#38627 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #24895 ) ) ; +#38629 = SURFACE_STYLE_USAGE ( .BOTH. , #12925 ) ; +#38630 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15816 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11461, #37597, #34495 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38631 = LINE ( 'NONE', #20482, #19951 ) ; +#38632 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#38633 = ORIENTED_EDGE ( 'NONE', *, *, #40342, .F. ) ; +#38634 = STYLED_ITEM ( 'NONE', ( #20009 ), #33041 ) ; +#38635 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#38636 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#38637 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26294 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16512, #39090, #445 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38638 = SURFACE_STYLE_FILL_AREA ( #34773 ) ; +#38639 = VERTEX_POINT ( 'NONE', #21162 ) ; +#38640 = SURFACE_SIDE_STYLE ('',( #8120 ) ) ; +#38641 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38642 = CARTESIAN_POINT ( 'NONE', ( 3.475000000000000100, 1.480001745296169100, -4.000000000000000000 ) ) ; +#38643 = VECTOR ( 'NONE', #41379, 1000.000000000000000 ) ; +#38644 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#38645 = FILL_AREA_STYLE_COLOUR ( '', #40691 ) ; +#38646 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.880000000000129800, -0.5000000000000879300 ) ) ; +#38647 = ORIENTED_EDGE ( 'NONE', *, *, #11474, .T. ) ; +#38648 = VERTEX_POINT ( 'NONE', #27914 ) ; +#38649 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 9.268445570935432200E-016, 1.000000000000000000 ) ) ; +#38650 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, -0.3250000000000000700, -1.274999999999999900 ) ) ; +#38651 = CIRCLE ( 'NONE', #12646, 0.04999999999999991300 ) ; +#38652 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38653 = VERTEX_POINT ( 'NONE', #14913 ) ; +#38654 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #967, 'distance_accuracy_value', 'NONE'); +#38655 = LINE ( 'NONE', #19481, #4305 ) ; +#38656 = CIRCLE ( 'NONE', #20489, 0.2000000000000000900 ) ; +#38657 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#38658 = CIRCLE ( 'NONE', #41607, 0.1000000000000000500 ) ; +#38659 = DIRECTION ( 'NONE', ( -4.336808689942020900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#38660 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -1.499998254703833500, -5.449999999999994000 ) ) ; +#38661 = CARTESIAN_POINT ( 'NONE', ( 9.035018104045870900E-016, 0.3499999999999999800, -1.249999999999997800 ) ) ; +#38662 = EDGE_CURVE ( 'NONE', #1491, #41425, #35283, .T. ) ; +#38663 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#38664 = ORIENTED_EDGE ( 'NONE', *, *, #33501, .T. ) ; +#38665 = ORIENTED_EDGE ( 'NONE', *, *, #3958, .T. ) ; +#38666 = SURFACE_STYLE_FILL_AREA ( #14335 ) ; +#38667 = LINE ( 'NONE', #34706, #32602 ) ; +#38668 = CIRCLE ( 'NONE', #5291, 0.04999999999999969700 ) ; +#38669 = EDGE_CURVE ( 'NONE', #24188, #36632, #16058, .T. ) ; +#38670 = CIRCLE ( 'NONE', #28691, 0.04999999999999969700 ) ; +#38671 = EDGE_LOOP ( 'NONE', ( #30697, #26664, #20269, #37068 ) ) ; +#38672 = SURFACE_SIDE_STYLE ('',( #24102 ) ) ; +#38673 = VECTOR ( 'NONE', #21383, 1000.000000000000000 ) ; +#38674 = AXIS2_PLACEMENT_3D ( 'NONE', #15585, #28435, #31678 ) ; +#38675 = FILL_AREA_STYLE_COLOUR ( '', #4395 ) ; +#38676 = FACE_OUTER_BOUND ( 'NONE', #5499, .T. ) ; +#38677 = AXIS2_PLACEMENT_3D ( 'NONE', #38360, #19459, #13072 ) ; +#38678 = FILL_AREA_STYLE ('',( #2298 ) ) ; +#38679 = VERTEX_POINT ( 'NONE', #34260 ) ; +#38680 = LINE ( 'NONE', #15454, #31642 ) ; +#38681 = AXIS2_PLACEMENT_3D ( 'NONE', #22258, #32536, #670 ) ; +#38682 = FACE_OUTER_BOUND ( 'NONE', #5798, .T. ) ; +#38684 = STYLED_ITEM ( 'NONE', ( #12294 ), #4598 ) ; +#38683 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4865 ) ) ; +#38685 = ORIENTED_EDGE ( 'NONE', *, *, #716, .T. ) ; +#38686 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24375 ), #10538 ) ; +#38688 = AXIS2_PLACEMENT_3D ( 'NONE', #32231, #2912, #35504 ) ; +#38687 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25738 ) ) ; +#38689 = SURFACE_STYLE_FILL_AREA ( #12854 ) ; +#38690 = AXIS2_PLACEMENT_3D ( 'NONE', #41782, #191, #38536 ) ; +#38691 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.3699999999999847900, -5.200000000000000200 ) ) ; +#38692 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#38693 = ADVANCED_FACE ( 'NONE', ( #26695 ), #21862, .T. ) ; +#38694 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41271, 'distance_accuracy_value', 'NONE'); +#38695 = PRESENTATION_STYLE_ASSIGNMENT (( #37922 ) ) ; +#38696 = CARTESIAN_POINT ( 'NONE', ( -1.400000000000000800, 1.630001745296169500, -1.650000000000000400 ) ) ; +#38697 = ORIENTED_EDGE ( 'NONE', *, *, #11201, .T. ) ; +#38698 = SURFACE_STYLE_FILL_AREA ( #31326 ) ; +#38699 = SURFACE_SIDE_STYLE ('',( #30905 ) ) ; +#38700 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, 0.6908697363250209100 ) ) ; +#38701 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#38702 = ORIENTED_EDGE ( 'NONE', *, *, #34599, .T. ) ; +#38703 = EDGE_LOOP ( 'NONE', ( #13667, #32717, #25854 ) ) ; +#38704 = SURFACE_STYLE_FILL_AREA ( #1580 ) ; +#38705 = ORIENTED_EDGE ( 'NONE', *, *, #40770, .T. ) ; +#38706 = FILL_AREA_STYLE ('',( #2764 ) ) ; +#38708 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, 0.2800000000000000300, 0.0000000000000000000 ) ) ; +#38707 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, -0.2999999999999999900, -1.600000000000000100 ) ) ; +#38709 = VECTOR ( 'NONE', #5261, 1000.000000000000000 ) ; +#38710 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#38711 = ORIENTED_EDGE ( 'NONE', *, *, #20556, .T. ) ; +#38712 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#38713 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#38714 = VERTEX_POINT ( 'NONE', #6141 ) ; +#38715 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38716 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026400, -0.2339555568811697600 ) ) ; +#38717 = SURFACE_SIDE_STYLE ('',( #25688 ) ) ; +#38718 = LINE ( 'NONE', #23522, #18544 ) ; +#38719 = CARTESIAN_POINT ( 'NONE', ( -0.6500000000000000200, -1.380001745296134000, -6.031671842700004200 ) ) ; +#38720 = SURFACE_STYLE_FILL_AREA ( #39746 ) ; +#38721 = PLANE ( 'NONE', #9207 ) ; +#38722 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38723 = EDGE_CURVE ( 'NONE', #30134, #2658, #35806, .T. ) ; +#38724 = VECTOR ( 'NONE', #36772, 1000.000000000000000 ) ; +#38725 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#38726 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38727 = SURFACE_STYLE_USAGE ( .BOTH. , #6417 ) ; +#38728 = EDGE_CURVE ( 'NONE', #7943, #38353, #39297, .T. ) ; +#38729 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#38730 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #40918 ) ) ; +#38731 = ADVANCED_FACE ( 'NONE', ( #40310 ), #41443, .T. ) ; +#38732 = ORIENTED_EDGE ( 'NONE', *, *, #1441, .F. ) ; +#38733 = FILL_AREA_STYLE ('',( #3581 ) ) ; +#38734 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32935, 'distance_accuracy_value', 'NONE'); +#38735 = STYLED_ITEM ( 'NONE', ( #36824 ), #14518 ) ; +#38736 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 2.322941965694886000, -1.250000000000000000 ) ) ; +#38737 = ORIENTED_EDGE ( 'NONE', *, *, #27247, .T. ) ; +#38738 = PRESENTATION_STYLE_ASSIGNMENT (( #33602 ) ) ; +#38739 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.480001745296170000, -0.2339555568811695900 ) ) ; +#38740 = LINE ( 'NONE', #316, #30170 ) ; +#38741 = AXIS2_PLACEMENT_3D ( 'NONE', #12758, #41847, #35523 ) ; +#38742 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25789 ) ) ; +#38743 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #229, 'distance_accuracy_value', 'NONE'); +#38744 = VERTEX_POINT ( 'NONE', #2924 ) ; +#38745 = EDGE_LOOP ( 'NONE', ( #8472, #20981, #2824, #41643 ) ) ; +#38746 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38747 = ORIENTED_EDGE ( 'NONE', *, *, #5583, .F. ) ; +#38748 = FILL_AREA_STYLE ('',( #25917 ) ) ; +#38750 = ADVANCED_FACE ( 'NONE', ( #2439 ), #3404, .T. ) ; +#38749 = VECTOR ( 'NONE', #8189, 1000.000000000000000 ) ; +#38752 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22506 ), #2005 ) ; +#38751 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34444 ), #40932 ) ; +#38753 = PRESENTATION_STYLE_ASSIGNMENT (( #18047 ) ) ; +#38754 = CARTESIAN_POINT ( 'NONE', ( 2.906813814880127900, -0.2000000000000005100, 1.149999999999999900 ) ) ; +#38755 = VECTOR ( 'NONE', #24982, 1000.000000000000000 ) ; +#38757 = EDGE_CURVE ( 'NONE', #12866, #10090, #21641, .T. ) ; +#38756 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #18998 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27143, #37007, #1729 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38758 = EDGE_LOOP ( 'NONE', ( #36515, #41076, #12848, #9722 ) ) ; +#38759 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38760 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000003300, 1.480001745296169300, -3.999999999999996400 ) ) ; +#38761 = EDGE_LOOP ( 'NONE', ( #41124, #18477, #39522, #39591 ) ) ; +#38762 = SURFACE_STYLE_FILL_AREA ( #34152 ) ; +#38764 = AXIS2_PLACEMENT_3D ( 'NONE', #22783, #29392, #13589 ) ; +#38763 = STYLED_ITEM ( 'NONE', ( #30113 ), #25457 ) ; +#38765 = FILL_AREA_STYLE ('',( #35400 ) ) ; +#38766 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.139998254717351100, -5.049996877890552400 ) ) ; +#38767 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#38768 = PLANE ( 'NONE', #1997 ) ; +#38769 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#38770 = CARTESIAN_POINT ( 'NONE', ( 3.237718385397935400, 0.2999999999999999900, 0.7155313145785737700 ) ) ; +#38771 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#38772 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #28396, #18814, #3534, #35893 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#38773 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38774 = FILL_AREA_STYLE ('',( #16056 ) ) ; +#38775 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38776 = SURFACE_SIDE_STYLE ('',( #15181 ) ) ; +#38777 = VERTEX_POINT ( 'NONE', #12051 ) ; +#38778 = CARTESIAN_POINT ( 'NONE', ( -3.223156400000000100, -0.3499999999999999800, -1.649999999999999900 ) ) ; +#38779 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#38780 = ORIENTED_EDGE ( 'NONE', *, *, #250, .T. ) ; +#38781 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.3300017452961688800, -4.975000000000000500 ) ) ; +#38782 = FACE_OUTER_BOUND ( 'NONE', #37114, .T. ) ; +#38783 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38784 = SURFACE_STYLE_FILL_AREA ( #10916 ) ; +#38785 = EDGE_CURVE ( 'NONE', #25867, #28244, #29667, .T. ) ; +#38786 = ADVANCED_FACE ( 'NONE', ( #31207 ), #40811, .F. ) ; +#38787 = ORIENTED_EDGE ( 'NONE', *, *, #34787, .F. ) ; +#38788 = SURFACE_STYLE_USAGE ( .BOTH. , #32019 ) ; +#38789 = ORIENTED_EDGE ( 'NONE', *, *, #7550, .F. ) ; +#38790 = LINE ( 'NONE', #12129, #30214 ) ; +#38791 = ORIENTED_EDGE ( 'NONE', *, *, #26283, .T. ) ; +#38792 = VECTOR ( 'NONE', #34600, 1000.000000000000000 ) ; +#38793 = LINE ( 'NONE', #33233, #14579 ) ; +#38794 = SURFACE_STYLE_FILL_AREA ( #38802 ) ; +#38795 = EDGE_CURVE ( 'NONE', #7836, #1402, #28178, .T. ) ; +#38796 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#38797 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#38798 = ORIENTED_EDGE ( 'NONE', *, *, #17426, .F. ) ; +#38799 = CIRCLE ( 'NONE', #32056, 0.2999999999999999300 ) ; +#38800 = CLOSED_SHELL ( 'NONE', ( #1487, #14194, #2585, #12050, #9669, #34792, #40462, #1043, #58, #22876, #9709, #12429, #31366, #16053, #5889, #20577, #13743, #4008, #30282, #7809, #37918, #26955, #20141, #14274, #23488, #21811, #4652, #25691, #14476, #6744, #19258, #3994, #2330, #21388, #7759, #22419, #7322, #29680, #40248, #15383, #9131, #37468, #15668, #30435, #28587, #24954, #34246, #36022, #28803, #38786, #21442, #28180, #39378, #5144, #31576, #2218, #9866, #28399, #25398, #36886, #38948, #26311, #9250, #32173, #26269, #10351, #34969, #24572, #40507, #16940, #36674, #26744, #36631, #39204, #33460, #15919, #15102, #34958, #6791, #15289, #33492, #622, #4375, #23703, #40209, #13357, #24081, #666, #1872, #13209, #19347, #13540, #3592, #32614, #19556, #3785, #36723, #3136, #20949, #7598, #19138, #23242, #17417, #1913, #35160, #13581, #38279, #17979, #11271, #10080, #6950, #8889, #37210, #25086, #22200, #11222, #32018, #2952, #12181, #14389, #30686, #7842, #15526, #29047, #5058, #19715, #33915, #2013, #23714, #2756, #18663, #10935, #39575, #27931, #14682, #8779, #8406, #2996, #1099, #33296, #23925, #11847, #34081, #20773, #38731, #36422, #5038, #40424, #27773, #22217, #18872, #31322, #11380, #36013, #17948, #10850, #19504, #5520, #11193, #2805, #30473, #23813, #24298, #35596, #8715, #31815, #9023, #38492, #2637, #16316, #5423, #2420, #25051, #27392, #18031, #32565, #897, #39162, #25808, #35125, #14548, #15617, #33075, #5641, #15221, #20398, #27940, #21352, #28645, #3542, #39834, #5296, #36389, #13480, #37414, #39989, #29169, #26099, #37966, #1448, #18825, #300, #10335, #31415, #40082, #36471, #12101, #10972, #26002, #30780, #40844, #24987, #1925, #36838, #19727, #26054, #442, #37927, #34918, #27155, #38529, #37761, #41273, #21197, #9901, #676, #22305, #14838, #17594, #27200, #1250, #33446, #24748, #28097, #16674, #32348, #31527, #13532, #6194, #6315, #9723, #22462, #346, #3225, #2987, #25886, #41113, #38693, #18625, #2791, #3738, #38578, #27679, #40798, #40004, #1296, #39889, #40404, #14888, #10293, #3363, #18459, #1659, #13318 ) ) ; +#38801 = SURFACE_STYLE_FILL_AREA ( #28723 ) ; +#38802 = FILL_AREA_STYLE ('',( #32167 ) ) ; +#38803 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22860 ) ) ; +#38804 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38805 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.5199999999999849200, -5.200000000000000200 ) ) ; +#38806 = ORIENTED_EDGE ( 'NONE', *, *, #26187, .T. ) ; +#38807 = SURFACE_STYLE_USAGE ( .BOTH. , #14960 ) ; +#38808 = FILL_AREA_STYLE_COLOUR ( '', #31059 ) ; +#38809 = FILL_AREA_STYLE ('',( #16228 ) ) ; +#38810 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15248 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #33540, #29730, #16873 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38811 = AXIS2_PLACEMENT_3D ( 'NONE', #17375, #7864, #39931 ) ; +#38812 = VECTOR ( 'NONE', #11465, 1000.000000000000000 ) ; +#38813 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38814 = FILL_AREA_STYLE_COLOUR ( '', #32482 ) ; +#38816 = EDGE_CURVE ( 'NONE', #3541, #1655, #9940, .T. ) ; +#38815 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41778 ) ) ; +#38817 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#38818 = LINE ( 'NONE', #4325, #8015 ) ; +#38819 = ORIENTED_EDGE ( 'NONE', *, *, #20695, .T. ) ; +#38820 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#38821 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38822 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#38824 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36680 ) ) ; +#38823 = STYLED_ITEM ( 'NONE', ( #18382 ), #26435 ) ; +#38825 = CARTESIAN_POINT ( 'NONE', ( 4.856063034915695900, -0.2800000000000026400, -0.6228541982233617400 ) ) ; +#38826 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000010100, -1.280001745296165600, -2.099999999999999600 ) ) ; +#38827 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12024 ) ) ; +#38828 = VERTEX_POINT ( 'NONE', #28867 ) ; +#38829 = PRESENTATION_STYLE_ASSIGNMENT (( #38451 ) ) ; +#38830 = SURFACE_SIDE_STYLE ('',( #5722 ) ) ; +#38831 = EDGE_LOOP ( 'NONE', ( #6546, #15580, #31228, #36434 ) ) ; +#38832 = SURFACE_STYLE_USAGE ( .BOTH. , #12987 ) ; +#38833 = ORIENTED_EDGE ( 'NONE', *, *, #26634, .T. ) ; +#38834 = FACE_OUTER_BOUND ( 'NONE', #11999, .T. ) ; +#38835 = ORIENTED_EDGE ( 'NONE', *, *, #27167, .F. ) ; +#38836 = CYLINDRICAL_SURFACE ( 'NONE', #2854, 0.1000000000000000500 ) ; +#38837 = ORIENTED_EDGE ( 'NONE', *, *, #21051, .F. ) ; +#38838 = ORIENTED_EDGE ( 'NONE', *, *, #6220, .F. ) ; +#38839 = FILL_AREA_STYLE ('',( #9596 ) ) ; +#38840 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0002094395087002862800, 0.9999999780675458100 ) ) ; +#38841 = PLANE ( 'NONE', #20168 ) ; +#38842 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid8', #36985 ) ; +#38843 = ORIENTED_EDGE ( 'NONE', *, *, #28784, .F. ) ; +#38844 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38845 = FILL_AREA_STYLE_COLOUR ( '', #3130 ) ; +#38846 = PRESENTATION_STYLE_ASSIGNMENT (( #13930 ) ) ; +#38847 = DIRECTION ( 'NONE', ( -2.628368902995161200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#38848 = EDGE_CURVE ( 'NONE', #33621, #13351, #14519, .T. ) ; +#38849 = CIRCLE ( 'NONE', #30603, 0.1000000000000004800 ) ; +#38850 = SURFACE_STYLE_USAGE ( .BOTH. , #9183 ) ; +#38851 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000100, -1.380001745296144800, -4.781671842700004200 ) ) ; +#38852 = EDGE_CURVE ( 'NONE', #5676, #20274, #27178, .T. ) ; +#38853 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38854 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#38855 = CYLINDRICAL_SURFACE ( 'NONE', #35388, 0.1999999999999998700 ) ; +#38856 = EDGE_CURVE ( 'NONE', #14115, #30870, #8944, .T. ) ; +#38857 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 6.056601140521966100E-031 ) ) ; +#38858 = STYLED_ITEM ( 'NONE', ( #34357 ), #16713 ) ; +#38859 = FILL_AREA_STYLE_COLOUR ( '', #29564 ) ; +#38860 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38861 = CIRCLE ( 'NONE', #887, 0.1000000000000001600 ) ; +#38862 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16366, 'distance_accuracy_value', 'NONE'); +#38863 = SURFACE_STYLE_USAGE ( .BOTH. , #233 ) ; +#38864 = ORIENTED_EDGE ( 'NONE', *, *, #3370, .T. ) ; +#38865 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38866 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11270 ) ) ; +#38867 = ORIENTED_EDGE ( 'NONE', *, *, #8050, .F. ) ; +#38868 = FILL_AREA_STYLE_COLOUR ( '', #29763 ) ; +#38869 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6415 ), #5850 ) ; +#38870 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38871 = SURFACE_STYLE_FILL_AREA ( #35153 ) ; +#38874 = EDGE_CURVE ( 'NONE', #35308, #25992, #17588, .T. ) ; +#38873 = FILL_AREA_STYLE ('',( #29842 ) ) ; +#38872 = STYLED_ITEM ( 'NONE', ( #30456 ), #37617 ) ; +#38875 = PRESENTATION_STYLE_ASSIGNMENT (( #1265 ) ) ; +#38876 = ORIENTED_EDGE ( 'NONE', *, *, #13751, .T. ) ; +#38877 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#38878 = EDGE_LOOP ( 'NONE', ( #20712, #25183, #2093, #2976 ) ) ; +#38879 = EDGE_LOOP ( 'NONE', ( #39472, #28884, #9839, #3229 ) ) ; +#38880 = VECTOR ( 'NONE', #15037, 1000.000000000000000 ) ; +#38881 = SURFACE_SIDE_STYLE ('',( #10978 ) ) ; +#38882 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4946, 'distance_accuracy_value', 'NONE'); +#38884 = AXIS2_PLACEMENT_3D ( 'NONE', #32875, #29338, #9974 ) ; +#38883 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41317 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #929, #14154, #36200 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38885 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30242 ) ) ; +#38886 = FILL_AREA_STYLE ('',( #19303 ) ) ; +#38887 = STYLED_ITEM ( 'NONE', ( #30636 ), #32807 ) ; +#38888 = ORIENTED_EDGE ( 'NONE', *, *, #38480, .T. ) ; +#38889 = LINE ( 'NONE', #41744, #11094 ) ; +#38890 = AXIS2_PLACEMENT_3D ( 'NONE', #40482, #27648, #30890 ) ; +#38891 = FILL_AREA_STYLE ('',( #6958 ) ) ; +#38892 = CARTESIAN_POINT ( 'NONE', ( 0.8500000000000000900, -1.380001745296134000, -6.031671842700004200 ) ) ; +#38893 = VECTOR ( 'NONE', #30127, 1000.000000000000000 ) ; +#38894 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.2699999999999849200, -4.599999999999999600 ) ) ; +#38895 = SURFACE_SIDE_STYLE ('',( #34496 ) ) ; +#38896 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#38897 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#38898 = PRESENTATION_STYLE_ASSIGNMENT (( #20259 ) ) ; +#38900 = VERTEX_POINT ( 'NONE', #6813 ) ; +#38899 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9541, 'distance_accuracy_value', 'NONE'); +#38901 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#38902 = CARTESIAN_POINT ( 'NONE', ( 3.315809924354955500, 0.3499999999999811000, -1.680000000000000400 ) ) ; +#38903 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38904 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#38905 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#38906 = FILL_AREA_STYLE_COLOUR ( '', #7424 ) ; +#38907 = FILL_AREA_STYLE_COLOUR ( '', #11410 ) ; +#38908 = VERTEX_POINT ( 'NONE', #29409 ) ; +#38909 = VERTEX_POINT ( 'NONE', #28996 ) ; +#38910 = ADVANCED_FACE ( 'NONE', ( #11935 ), #374, .F. ) ; +#38911 = FILL_AREA_STYLE_COLOUR ( '', #16254 ) ; +#38912 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38913 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#38914 = VERTEX_POINT ( 'NONE', #39018 ) ; +#38915 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244519300E-016 ) ) ; +#38916 = ORIENTED_EDGE ( 'NONE', *, *, #14743, .T. ) ; +#38917 = EDGE_CURVE ( 'NONE', #13754, #2462, #17537, .T. ) ; +#38918 = PRESENTATION_STYLE_ASSIGNMENT (( #16886 ) ) ; +#38919 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -0.8500017452961653500, -5.599999999999999600 ) ) ; +#38920 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38921 = STYLED_ITEM ( 'NONE', ( #9402 ), #17660 ) ; +#38922 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#38923 = EDGE_CURVE ( 'NONE', #4971, #22287, #923, .T. ) ; +#38924 = FILL_AREA_STYLE ('',( #13084 ) ) ; +#38925 = EDGE_LOOP ( 'NONE', ( #36074, #2843, #14060, #33606 ) ) ; +#38926 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#38927 = AXIS2_PLACEMENT_3D ( 'NONE', #26643, #33687, #1251 ) ; +#38928 = SURFACE_SIDE_STYLE ('',( #21702 ) ) ; +#38929 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, -0.2799999999999974200, -0.2000017452961698200 ) ) ; +#38930 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4856 ), #41114 ) ; +#38931 = VECTOR ( 'NONE', #11922, 1000.000000000000000 ) ; +#38932 = CARTESIAN_POINT ( 'NONE', ( -3.400000000000003500, -2.031000000000001500, -6.449999999999999300 ) ) ; +#38934 = EDGE_CURVE ( 'NONE', #23252, #3198, #33962, .T. ) ; +#38933 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41117 ), #14332 ) ; +#38935 = FILL_AREA_STYLE_COLOUR ( '', #36036 ) ; +#38936 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000010700, -1.280001745296165800, -3.700000000000000200 ) ) ; +#38938 = STYLED_ITEM ( 'NONE', ( #27051 ), #4250 ) ; +#38937 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7169 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35022, #25442, #28654 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38939 = LINE ( 'NONE', #34720, #30370 ) ; +#38940 = STYLED_ITEM ( 'NONE', ( #5950 ), #41265 ) ; +#38941 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5797, 'distance_accuracy_value', 'NONE'); +#38942 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#38943 = ORIENTED_EDGE ( 'NONE', *, *, #34297, .T. ) ; +#38944 = FACE_OUTER_BOUND ( 'NONE', #13173, .T. ) ; +#38945 = AXIS2_PLACEMENT_3D ( 'NONE', #34309, #40224, #8160 ) ; +#38946 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#38947 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -1.139998254717364200, -5.049996877890552400 ) ) ; +#38948 = ADVANCED_FACE ( 'NONE', ( #26153 ), #39753, .T. ) ; +#38949 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23820 ) ) ; +#38950 = VERTEX_POINT ( 'NONE', #17001 ) ; +#38951 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 10.30000000000000100, -1.250000000000000000 ) ) ; +#38952 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#38953 = VECTOR ( 'NONE', #1185, 1000.000000000000000 ) ; +#38954 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20179, 'distance_accuracy_value', 'NONE'); +#38955 = SURFACE_SIDE_STYLE ('',( #33660 ) ) ; +#38956 = VERTEX_POINT ( 'NONE', #13608 ) ; +#38957 = EDGE_LOOP ( 'NONE', ( #1713, #6580, #34653, #32116 ) ) ; +#38958 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38959 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#38960 = ADVANCED_FACE ( 'NONE', ( #14000 ), #26470, .F. ) ; +#38961 = SURFACE_STYLE_USAGE ( .BOTH. , #29928 ) ; +#38962 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#38963 = FILL_AREA_STYLE_COLOUR ( '', #29446 ) ; +#38964 = EDGE_LOOP ( 'NONE', ( #11536, #382, #35911, #9182, #17053, #32775, #41361, #17750 ) ) ; +#38965 = FACE_OUTER_BOUND ( 'NONE', #4077, .T. ) ; +#38966 = ORIENTED_EDGE ( 'NONE', *, *, #16980, .T. ) ; +#38967 = VECTOR ( 'NONE', #4622, 1000.000000000000000 ) ; +#38968 = VECTOR ( 'NONE', #9706, 1000.000000000000000 ) ; +#38969 = FILL_AREA_STYLE_COLOUR ( '', #6617 ) ; +#38970 = LINE ( 'NONE', #12764, #30398 ) ; +#38971 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#38972 = EDGE_CURVE ( 'NONE', #19555, #36264, #18553, .T. ) ; +#38973 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#38974 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999000, -0.3292893218813453000, -1.400000000000000100 ) ) ; +#38975 = SURFACE_SIDE_STYLE ('',( #26062 ) ) ; +#38976 = EDGE_CURVE ( 'NONE', #33959, #4528, #18063, .T. ) ; +#38977 = AXIS2_PLACEMENT_3D ( 'NONE', #25893, #23195, #13433 ) ; +#38978 = VERTEX_POINT ( 'NONE', #29703 ) ; +#38979 = LINE ( 'NONE', #20221, #4648 ) ; +#38980 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#38981 = AXIS2_PLACEMENT_3D ( 'NONE', #8151, #18227, #14672 ) ; +#38982 = VERTEX_POINT ( 'NONE', #23490 ) ; +#38983 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#38984 = PRESENTATION_STYLE_ASSIGNMENT (( #2183 ) ) ; +#38985 = AXIS2_PLACEMENT_3D ( 'NONE', #11030, #17559, #11301 ) ; +#38986 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38988 = LINE ( 'NONE', #15984, #21869 ) ; +#38987 = CARTESIAN_POINT ( 'NONE', ( -4.450000000000001100, -1.400001745296194800, -7.200000000000005500 ) ) ; +#38989 = LINE ( 'NONE', #12720, #638 ) ; +#38990 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#38991 = VERTEX_POINT ( 'NONE', #39294 ) ; +#38992 = AXIS2_PLACEMENT_3D ( 'NONE', #14005, #17411, #24759 ) ; +#38993 = FILL_AREA_STYLE_COLOUR ( '', #32351 ) ; +#38994 = ADVANCED_FACE ( 'NONE', ( #27144 ), #13886, .F. ) ; +#38995 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26388 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18245, #21499, #28792 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#38996 = PRESENTATION_STYLE_ASSIGNMENT (( #33236 ) ) ; +#38998 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37652 ), #15213 ) ; +#38997 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17385 ) ) ; +#38999 = SURFACE_STYLE_USAGE ( .BOTH. , #16418 ) ; +#39000 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39001 = DIRECTION ( 'NONE', ( -3.281909278875039200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#39003 = EDGE_CURVE ( 'NONE', #28244, #30651, #41727, .T. ) ; +#39002 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23059 ), #22515 ) ; +#39004 = ORIENTED_EDGE ( 'NONE', *, *, #13052, .T. ) ; +#39005 = DIRECTION ( 'NONE', ( 3.281909278875039600E-015, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#39006 = SURFACE_STYLE_FILL_AREA ( #4515 ) ; +#39007 = ORIENTED_EDGE ( 'NONE', *, *, #1615, .T. ) ; +#39008 = PLANE ( 'NONE', #15290 ) ; +#39009 = LINE ( 'NONE', #24011, #26429 ) ; +#39010 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, 2.322941965694886000, 0.6999999999999999600 ) ) ; +#39011 = VECTOR ( 'NONE', #6384, 1000.000000000000000 ) ; +#39012 = PRESENTATION_STYLE_ASSIGNMENT (( #9281 ) ) ; +#39013 = STYLED_ITEM ( 'NONE', ( #8970 ), #25086 ) ; +#39014 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003000, 0.6800017452961720800, -1.649999999999999500 ) ) ; +#39015 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39016 = FILL_AREA_STYLE ('',( #2789 ) ) ; +#39017 = CARTESIAN_POINT ( 'NONE', ( 2.673205080756886800, 1.630001745296169500, -1.650000000000000800 ) ) ; +#39018 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.5199999999999843600, -4.500000000000000000 ) ) ; +#39019 = VERTEX_POINT ( 'NONE', #26908 ) ; +#39020 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -9.268445570935432200E-016 ) ) ; +#39021 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 9.035070666963931600E-017 ) ) ; +#39022 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#39023 = ORIENTED_EDGE ( 'NONE', *, *, #11784, .T. ) ; +#39024 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24119, 'distance_accuracy_value', 'NONE'); +#39025 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39026 = ORIENTED_EDGE ( 'NONE', *, *, #22188, .F. ) ; +#39027 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#39028 = SURFACE_STYLE_FILL_AREA ( #37238 ) ; +#39029 = SURFACE_STYLE_USAGE ( .BOTH. , #6834 ) ; +#39030 = ORIENTED_EDGE ( 'NONE', *, *, #29100, .T. ) ; +#39031 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#39032 = EDGE_CURVE ( 'NONE', #20166, #33011, #16018, .T. ) ; +#39033 = ORIENTED_EDGE ( 'NONE', *, *, #31748, .T. ) ; +#39034 = ORIENTED_EDGE ( 'NONE', *, *, #14042, .F. ) ; +#39035 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.499998254703836900, -5.449999999999994000 ) ) ; +#39036 = EDGE_CURVE ( 'NONE', #41354, #23074, #33164, .T. ) ; +#39037 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #17260 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10897, #4830, #24338 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39038 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#39039 = FILL_AREA_STYLE_COLOUR ( '', #7466 ) ; +#39040 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39041 = EDGE_LOOP ( 'NONE', ( #14969, #1466, #1474, #28715, #17669 ) ) ; +#39042 = SURFACE_STYLE_FILL_AREA ( #36454 ) ; +#39043 = ORIENTED_EDGE ( 'NONE', *, *, #19810, .F. ) ; +#39044 = FACE_OUTER_BOUND ( 'NONE', #25515, .T. ) ; +#39045 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#39046 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745296168900, -3.204459358809384400 ) ) ; +#39047 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #18189, #24699, #40188, #7980, #11235, #8121 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#39048 = AXIS2_PLACEMENT_3D ( 'NONE', #20513, #30371, #20667 ) ; +#39050 = LINE ( 'NONE', #36743, #15835 ) ; +#39049 = SURFACE_SIDE_STYLE ('',( #27789 ) ) ; +#39051 = ADVANCED_FACE ( 'NONE', ( #16999 ), #22067, .F. ) ; +#39052 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, -500000.0000000000600, -2.904459358691027200 ) ) ; +#39053 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39054 = AXIS2_PLACEMENT_3D ( 'NONE', #2967, #3227, #9263 ) ; +#39055 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39057 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#39056 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13397 ), #41242 ) ; +#39058 = FACE_OUTER_BOUND ( 'NONE', #9372, .T. ) ; +#39060 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1226 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #40842, #31524, #38008 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39059 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #39867 ), #6588 ) ; +#39061 = FILL_AREA_STYLE_COLOUR ( '', #12047 ) ; +#39064 = EDGE_CURVE ( 'NONE', #35330, #6948, #14972, .T. ) ; +#39063 = SURFACE_SIDE_STYLE ('',( #2108 ) ) ; +#39062 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35318 ), #8493 ) ; +#39065 = LINE ( 'NONE', #26890, #40899 ) ; +#39066 = CARTESIAN_POINT ( 'NONE', ( -3.045000000000000400, 0.2999999999999999900, -1.415376800000000000 ) ) ; +#39067 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#39068 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#39069 = FILL_AREA_STYLE_COLOUR ( '', #3764 ) ; +#39070 = ORIENTED_EDGE ( 'NONE', *, *, #23783, .T. ) ; +#39072 = STYLED_ITEM ( 'NONE', ( #9568 ), #1448 ) ; +#39071 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38193 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17809, #33608, #11414 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39073 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39074 = STYLED_ITEM ( 'NONE', ( #32119 ), #39204 ) ; +#39075 = FACE_OUTER_BOUND ( 'NONE', #2611, .T. ) ; +#39076 = ORIENTED_EDGE ( 'NONE', *, *, #31930, .T. ) ; +#39077 = VERTEX_POINT ( 'NONE', #17436 ) ; +#39078 = DIRECTION ( 'NONE', ( -4.336808689942006700E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#39079 = ORIENTED_EDGE ( 'NONE', *, *, #831, .F. ) ; +#39080 = VERTEX_POINT ( 'NONE', #7664 ) ; +#39081 = EDGE_LOOP ( 'NONE', ( #14291, #16036, #32055, #3368 ) ) ; +#39082 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39083 = FACE_OUTER_BOUND ( 'NONE', #28845, .T. ) ; +#39084 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11931, 'distance_accuracy_value', 'NONE'); +#39085 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39086 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#39087 = LINE ( 'NONE', #13124, #3709 ) ; +#39088 = FILL_AREA_STYLE ('',( #16783 ) ) ; +#39089 = CIRCLE ( 'NONE', #15575, 0.2818014882866899400 ) ; +#39090 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39091 = EDGE_CURVE ( 'NONE', #3199, #17215, #3844, .T. ) ; +#39093 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#39092 = CARTESIAN_POINT ( 'NONE', ( -4.520424214906983100, 0.2800000000000027500, -1.149999999999999900 ) ) ; +#39094 = FACE_OUTER_BOUND ( 'NONE', #29054, .T. ) ; +#39095 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#39096 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#39097 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#39098 = EDGE_CURVE ( 'NONE', #9178, #38777, #39716, .T. ) ; +#39099 = SURFACE_SIDE_STYLE ('',( #37048 ) ) ; +#39100 = CYLINDRICAL_SURFACE ( 'NONE', #20298, 0.1000000000000004800 ) ; +#39101 = STYLED_ITEM ( 'NONE', ( #17790 ), #16049 ) ; +#39102 = VERTEX_POINT ( 'NONE', #27572 ) ; +#39103 = PRESENTATION_STYLE_ASSIGNMENT (( #22821 ) ) ; +#39104 = ORIENTED_EDGE ( 'NONE', *, *, #9087, .T. ) ; +#39105 = FILL_AREA_STYLE ('',( #23168 ) ) ; +#39107 = ORIENTED_EDGE ( 'NONE', *, *, #1264, .F. ) ; +#39106 = SURFACE_STYLE_FILL_AREA ( #21323 ) ; +#39108 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9959, 'distance_accuracy_value', 'NONE'); +#39109 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169000, -3.514459358809384400 ) ) ; +#39110 = ORIENTED_EDGE ( 'NONE', *, *, #33731, .F. ) ; +#39112 = ADVANCED_FACE ( 'NONE', ( #31134 ), #27175, .T. ) ; +#39111 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#39113 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #31832 ) ) ; +#39114 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39115 = FACE_OUTER_BOUND ( 'NONE', #5508, .T. ) ; +#39117 = EDGE_CURVE ( 'NONE', #2658, #11715, #29632, .T. ) ; +#39116 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15339 ) ) ; +#39118 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39119 = FILL_AREA_STYLE ('',( #12995 ) ) ; +#39120 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#39121 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39122 = LINE ( 'NONE', #20093, #25039 ) ; +#39123 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.8190279881558656400, 0.5737535661042597600 ) ) ; +#39124 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39126 = STYLED_ITEM ( 'NONE', ( #34042 ), #2837 ) ; +#39125 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #774 ), #20248 ) ; +#39127 = VERTEX_POINT ( 'NONE', #30687 ) ; +#39128 = STYLED_ITEM ( 'NONE', ( #15209 ), #40293 ) ; +#39129 = FILL_AREA_STYLE_COLOUR ( '', #20024 ) ; +#39130 = FILL_AREA_STYLE_COLOUR ( '', #5815 ) ; +#39131 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #23042 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12547, #12272, #22187 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39132 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.380001745296132400, -6.031671842700004200 ) ) ; +#39133 = PRESENTATION_STYLE_ASSIGNMENT (( #41628 ) ) ; +#39134 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39135 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#39136 = ORIENTED_EDGE ( 'NONE', *, *, #4278, .T. ) ; +#39137 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, -0.1999999999999999600, -18.77614000000000500 ) ) ; +#39138 = VERTEX_POINT ( 'NONE', #10898 ) ; +#39139 = SURFACE_SIDE_STYLE ('',( #39353 ) ) ; +#39140 = EDGE_LOOP ( 'NONE', ( #18438, #8751, #39033, #2547 ) ) ; +#39141 = SURFACE_STYLE_USAGE ( .BOTH. , #13439 ) ; +#39142 = PLANE ( 'NONE', #8109 ) ; +#39143 = VECTOR ( 'NONE', #23802, 1000.000000000000000 ) ; +#39144 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000008900, -1.180001745296165300, -7.300000000000000700 ) ) ; +#39145 = ADVANCED_FACE ( 'NONE', ( #34184 ), #24340, .F. ) ; +#39146 = VERTEX_POINT ( 'NONE', #23775 ) ; +#39147 = FILL_AREA_STYLE ('',( #32530 ) ) ; +#39148 = VECTOR ( 'NONE', #5730, 999.9999999999998900 ) ; +#39149 = VECTOR ( 'NONE', #24818, 1000.000000000000000 ) ; +#39150 = EDGE_CURVE ( 'NONE', #21814, #41862, #28605, .T. ) ; +#39151 = SURFACE_STYLE_FILL_AREA ( #41149 ) ; +#39152 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#39153 = EDGE_CURVE ( 'NONE', #17958, #29368, #36675, .T. ) ; +#39154 = PLANE ( 'NONE', #28082 ) ; +#39155 = VECTOR ( 'NONE', #24506, 1000.000000000000000 ) ; +#39156 = VERTEX_POINT ( 'NONE', #4418 ) ; +#39157 = VECTOR ( 'NONE', #11304, 1000.000000000000000 ) ; +#39158 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#39159 = EDGE_CURVE ( 'NONE', #12804, #15695, #28090, .T. ) ; +#39160 = FACE_OUTER_BOUND ( 'NONE', #17688, .T. ) ; +#39161 = AXIS2_PLACEMENT_3D ( 'NONE', #3871, #29584, #36099 ) ; +#39162 = ADVANCED_FACE ( 'NONE', ( #19027 ), #15000, .F. ) ; +#39163 = CARTESIAN_POINT ( 'NONE', ( -3.093446502410122500, -0.2697581557188431500, 1.045362766421735300 ) ) ; +#39164 = FILL_AREA_STYLE ('',( #3191 ) ) ; +#39165 = EDGE_CURVE ( 'NONE', #36673, #21151, #35175, .T. ) ; +#39166 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -1.139998254717350800, -6.299996877890552400 ) ) ; +#39167 = CARTESIAN_POINT ( 'NONE', ( 2.899999999999999900, -0.2999999999999999900, 0.6999999999999999600 ) ) ; +#39168 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1620 ) ) ; +#39169 = VECTOR ( 'NONE', #9461, 1000.000000000000000 ) ; +#39170 = AXIS2_PLACEMENT_3D ( 'NONE', #41235, #37980, #29084 ) ; +#39171 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.3500000000000000300, -1.300000000000000000 ) ) ; +#39172 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39175 = EDGE_CURVE ( 'NONE', #27288, #3541, #27600, .T. ) ; +#39174 = AXIS2_PLACEMENT_3D ( 'NONE', #30947, #34211, #27561 ) ; +#39173 = FILL_AREA_STYLE ('',( #17174 ) ) ; +#39176 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39177 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#39178 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39179 = SURFACE_STYLE_USAGE ( .BOTH. , #23238 ) ; +#39181 = STYLED_ITEM ( 'NONE', ( #39280 ), #3580 ) ; +#39180 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28121 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37701, #40660, #31204 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39182 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39183 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -3.204459358809384400 ) ) ; +#39184 = LINE ( 'NONE', #30744, #19535 ) ; +#39185 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11599 ), #23248 ) ; +#39186 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #258, 'distance_accuracy_value', 'NONE'); +#39187 = ORIENTED_EDGE ( 'NONE', *, *, #32953, .F. ) ; +#39188 = SURFACE_STYLE_USAGE ( .BOTH. , #16620 ) ; +#39189 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#39190 = STYLED_ITEM ( 'NONE', ( #31965 ), #33664 ) ; +#39191 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#39192 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -3.307718258760844200E-015, 1.000000000000000000 ) ) ; +#39193 = ORIENTED_EDGE ( 'NONE', *, *, #29951, .F. ) ; +#39195 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21126 ) ) ; +#39194 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39196 = ORIENTED_EDGE ( 'NONE', *, *, #18265, .T. ) ; +#39197 = EDGE_LOOP ( 'NONE', ( #640, #16913, #12677, #3303 ) ) ; +#39198 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39199 = SURFACE_STYLE_FILL_AREA ( #25311 ) ; +#39200 = ORIENTED_EDGE ( 'NONE', *, *, #32866, .T. ) ; +#39201 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39202 = PRESENTATION_STYLE_ASSIGNMENT (( #13879 ) ) ; +#39203 = ORIENTED_EDGE ( 'NONE', *, *, #39843, .T. ) ; +#39204 = ADVANCED_FACE ( 'NONE', ( #10394 ), #31094, .T. ) ; +#39205 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521965300E-031 ) ) ; +#39206 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39207 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#39208 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000005000, 0.3000000000000149200, -4.249999999999998200 ) ) ; +#39209 = CARTESIAN_POINT ( 'NONE', ( 4.620380239188926400, 0.2799999999999973100, -0.8400209439508702400 ) ) ; +#39210 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39211 = FILL_AREA_STYLE ('',( #29628 ) ) ; +#39212 = LINE ( 'NONE', #31428, #4870 ) ; +#39213 = CARTESIAN_POINT ( 'NONE', ( -3.839743771154401100, 0.6300017452961683700, -4.400000000000001200 ) ) ; +#39214 = FILL_AREA_STYLE ('',( #9836 ) ) ; +#39215 = FILL_AREA_STYLE_COLOUR ( '', #3097 ) ; +#39216 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39217 = EDGE_CURVE ( 'NONE', #24035, #29866, #17487, .T. ) ; +#39218 = VERTEX_POINT ( 'NONE', #21252 ) ; +#39219 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2892, 'distance_accuracy_value', 'NONE'); +#39220 = PRESENTATION_STYLE_ASSIGNMENT (( #27575 ) ) ; +#39221 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39222 = EDGE_CURVE ( 'NONE', #28269, #14097, #13938, .T. ) ; +#39223 = ORIENTED_EDGE ( 'NONE', *, *, #35655, .F. ) ; +#39224 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#39225 = LINE ( 'NONE', #38951, #6886 ) ; +#39226 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39227 = AXIS2_PLACEMENT_3D ( 'NONE', #2919, #15600, #38458 ) ; +#39228 = EDGE_LOOP ( 'NONE', ( #26127, #39856, #6352, #10825 ) ) ; +#39229 = DIRECTION ( 'NONE', ( 3.336029078258395200E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#39230 = ORIENTED_EDGE ( 'NONE', *, *, #20788, .F. ) ; +#39231 = ORIENTED_EDGE ( 'NONE', *, *, #10210, .T. ) ; +#39232 = VECTOR ( 'NONE', #13335, 1000.000000000000000 ) ; +#39233 = VECTOR ( 'NONE', #11991, 1000.000000000000000 ) ; +#39234 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6757 ) ) ; +#39235 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39236 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39237 = LINE ( 'NONE', #34275, #5903 ) ; +#39238 = FACE_OUTER_BOUND ( 'NONE', #18159, .T. ) ; +#39239 = ORIENTED_EDGE ( 'NONE', *, *, #41530, .F. ) ; +#39240 = STYLED_ITEM ( 'NONE', ( #2082 ), #38065 ) ; +#39241 = VERTEX_POINT ( 'NONE', #34065 ) ; +#39243 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40516 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39735, #4012, #20293 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39242 = AXIS2_PLACEMENT_3D ( 'NONE', #21267, #31249, #24931 ) ; +#39244 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19297, 'distance_accuracy_value', 'NONE'); +#39247 = EDGE_CURVE ( 'NONE', #41856, #7453, #29619, .T. ) ; +#39246 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39245 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25738 ), #40873 ) ; +#39248 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9497 ), #16010 ) ; +#39249 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39250 = CARTESIAN_POINT ( 'NONE', ( -3.045602590962364100, 0.3499999999999999200, -1.551901448939999400 ) ) ; +#39251 = VECTOR ( 'NONE', #2615, 1000.000000000000000 ) ; +#39252 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #33821 ) ) ; +#39253 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39254 = FILL_AREA_STYLE_COLOUR ( '', #11320 ) ; +#39255 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39256 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#39257 = VECTOR ( 'NONE', #18460, 1000.000000000000000 ) ; +#39258 = CARTESIAN_POINT ( 'NONE', ( -4.750000000000003600, -0.7099999999999991900, -6.861124800398366500 ) ) ; +#39259 = ORIENTED_EDGE ( 'NONE', *, *, #16171, .T. ) ; +#39260 = FILL_AREA_STYLE_COLOUR ( '', #21721 ) ; +#39261 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37315, 'distance_accuracy_value', 'NONE'); +#39262 = FILL_AREA_STYLE ('',( #23462 ) ) ; +#39263 = ORIENTED_EDGE ( 'NONE', *, *, #2278, .F. ) ; +#39264 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39265 = ORIENTED_EDGE ( 'NONE', *, *, #17485, .T. ) ; +#39266 = SURFACE_SIDE_STYLE ('',( #22937 ) ) ; +#39267 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#39268 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8330, 'distance_accuracy_value', 'NONE'); +#39269 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.4300017452961689100, -5.150000000000000400 ) ) ; +#39270 = ORIENTED_EDGE ( 'NONE', *, *, #28559, .T. ) ; +#39271 = ORIENTED_EDGE ( 'NONE', *, *, #41193, .F. ) ; +#39272 = PRESENTATION_STYLE_ASSIGNMENT (( #2449 ) ) ; +#39273 = VERTEX_POINT ( 'NONE', #34352 ) ; +#39274 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39275 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39276 = FILL_AREA_STYLE ('',( #10745 ) ) ; +#39277 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39278 = CARTESIAN_POINT ( 'NONE', ( -3.273571428571022700, 0.07499999999999999700, -0.08583148475006674400 ) ) ; +#39279 = PRESENTATION_STYLE_ASSIGNMENT (( #13730 ) ) ; +#39280 = PRESENTATION_STYLE_ASSIGNMENT (( #18201 ) ) ; +#39281 = ORIENTED_EDGE ( 'NONE', *, *, #11317, .T. ) ; +#39282 = CARTESIAN_POINT ( 'NONE', ( 2.994999999994874400, -0.3499999999999999200, -1.546446609444422700 ) ) ; +#39283 = EDGE_LOOP ( 'NONE', ( #37288, #30248, #37861, #24832 ) ) ; +#39284 = EDGE_CURVE ( 'NONE', #13366, #25497, #25587, .T. ) ; +#39285 = LINE ( 'NONE', #39513, #30714 ) ; +#39286 = FILL_AREA_STYLE_COLOUR ( '', #38267 ) ; +#39287 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#39288 = CARTESIAN_POINT ( 'NONE', ( 4.170000000000001700, -0.2800000000000026400, -0.2000017452961698200 ) ) ; +#39289 = EDGE_CURVE ( 'NONE', #6114, #4528, #31124, .T. ) ; +#39290 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19847 ), #41454 ) ; +#39291 = LINE ( 'NONE', #28893, #4940 ) ; +#39292 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39293 = ORIENTED_EDGE ( 'NONE', *, *, #14502, .F. ) ; +#39294 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, -0.07499999999999999700, 0.4305619708689000200 ) ) ; +#39295 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16849 ), #33383 ) ; +#39296 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.480001745296166000, -1.749999999999998900 ) ) ; +#39298 = STYLED_ITEM ( 'NONE', ( #450 ), #38578 ) ; +#39297 = CIRCLE ( 'NONE', #19855, 0.1000000000000001600 ) ; +#39299 = ORIENTED_EDGE ( 'NONE', *, *, #25941, .F. ) ; +#39300 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #37757 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26000, #3951, #32771 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39301 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13648 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27753, #21700, #2360 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39303 = AXIS2_PLACEMENT_3D ( 'NONE', #40422, #14868, #1496 ) ; +#39302 = AXIS2_PLACEMENT_3D ( 'NONE', #38574, #38437, #35068 ) ; +#39304 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#39305 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.931303021499040500, -0.3590461068823618300 ) ) ; +#39306 = EDGE_LOOP ( 'NONE', ( #35820, #2902, #4920 ) ) ; +#39307 = VECTOR ( 'NONE', #41156, 1000.000000000000000 ) ; +#39309 = EDGE_CURVE ( 'NONE', #38071, #25102, #37489, .T. ) ; +#39308 = AXIS2_PLACEMENT_3D ( 'NONE', #15395, #31349, #41375 ) ; +#39310 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#39311 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39312 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39313 = VERTEX_POINT ( 'NONE', #2332 ) ; +#39314 = LINE ( 'NONE', #7918, #24703 ) ; +#39315 = ORIENTED_EDGE ( 'NONE', *, *, #30017, .F. ) ; +#39316 = VECTOR ( 'NONE', #9347, 1000.000000000000000 ) ; +#39317 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#39319 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5958 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #26749, #7348, #29963 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39318 = AXIS2_PLACEMENT_3D ( 'NONE', #10324, #36215, #793 ) ; +#39320 = PRESENTATION_STYLE_ASSIGNMENT (( #2672 ) ) ; +#39321 = FILL_AREA_STYLE_COLOUR ( '', #323 ) ; +#39322 = LINE ( 'NONE', #35711, #41831 ) ; +#39323 = SURFACE_SIDE_STYLE ('',( #16232 ) ) ; +#39324 = CARTESIAN_POINT ( 'NONE', ( 1.486602540378444200, 1.480001745296169600, -1.700000000000001500 ) ) ; +#39325 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#39326 = CIRCLE ( 'NONE', #27022, 0.2000000000000000900 ) ; +#39327 = ORIENTED_EDGE ( 'NONE', *, *, #24549, .T. ) ; +#39328 = FACE_OUTER_BOUND ( 'NONE', #12350, .T. ) ; +#39329 = ORIENTED_EDGE ( 'NONE', *, *, #566, .F. ) ; +#39330 = ORIENTED_EDGE ( 'NONE', *, *, #26507, .T. ) ; +#39331 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39332 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #27890, #8510, #31263, #31817 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.504728772142490000E-005 ), + .UNSPECIFIED. ) ; +#39333 = ADVANCED_FACE ( 'NONE', ( #26589 ), #30598, .T. ) ; +#39334 = FILL_AREA_STYLE_COLOUR ( '', #6615 ) ; +#39335 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39336 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39337 = ORIENTED_EDGE ( 'NONE', *, *, #26903, .T. ) ; +#39338 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.380001745296134800, -5.449999999999994000 ) ) ; +#39339 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.07499999999999999700, 0.4305619708689000200 ) ) ; +#39340 = LINE ( 'NONE', #30832, #16629 ) ; +#39341 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39342 = EDGE_CURVE ( 'NONE', #13604, #9006, #7303, .T. ) ; +#39343 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39344 = SURFACE_SIDE_STYLE ('',( #28770 ) ) ; +#39345 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#39346 = EDGE_CURVE ( 'NONE', #11470, #18780, #3784, .T. ) ; +#39347 = EDGE_LOOP ( 'NONE', ( #22647, #26122, #34687, #7937 ) ) ; +#39348 = CYLINDRICAL_SURFACE ( 'NONE', #11098, 0.1000000000000000500 ) ; +#39349 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, 0.0000000000000000000 ) ) ; +#39350 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39351 = CIRCLE ( 'NONE', #21471, 0.3499999999999996400 ) ; +#39352 = ORIENTED_EDGE ( 'NONE', *, *, #15372, .T. ) ; +#39353 = SURFACE_STYLE_FILL_AREA ( #105 ) ; +#39354 = ORIENTED_EDGE ( 'NONE', *, *, #38669, .T. ) ; +#39355 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#39356 = CYLINDRICAL_SURFACE ( 'NONE', #12282, 0.09999999999999999200 ) ; +#39357 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #41516 ) ) ; +#39358 = PRESENTATION_STYLE_ASSIGNMENT (( #25394 ) ) ; +#39359 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39360 = VECTOR ( 'NONE', #24570, 1000.000000000000000 ) ; +#39361 = CARTESIAN_POINT ( 'NONE', ( -3.332298852287715700, 0.2999999198035229700, -1.600000000000000300 ) ) ; +#39362 = ORIENTED_EDGE ( 'NONE', *, *, #15725, .F. ) ; +#39363 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, 0.2999999999999999900, -0.2498427124746000500 ) ) ; +#39364 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39365 = ORIENTED_EDGE ( 'NONE', *, *, #2168, .F. ) ; +#39367 = ORIENTED_EDGE ( 'NONE', *, *, #23215, .T. ) ; +#39366 = ADVANCED_FACE ( 'NONE', ( #40674 ), #3681, .T. ) ; +#39368 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19922 ), #38810 ) ; +#39369 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30689 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28075, #24859, #21325 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39370 = STYLED_ITEM ( 'NONE', ( #14318 ), #11393 ) ; +#39371 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.139998254717359000, -5.049996877890552400 ) ) ; +#39373 = EDGE_CURVE ( 'NONE', #28233, #20115, #25078, .T. ) ; +#39372 = AXIS2_PLACEMENT_3D ( 'NONE', #25115, #37926, #9222 ) ; +#39374 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25570, 'distance_accuracy_value', 'NONE'); +#39375 = ORIENTED_EDGE ( 'NONE', *, *, #10724, .T. ) ; +#39376 = FILL_AREA_STYLE_COLOUR ( '', #9928 ) ; +#39377 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#39378 = ADVANCED_FACE ( 'NONE', ( #37165 ), #10014, .F. ) ; +#39379 = SURFACE_STYLE_FILL_AREA ( #37325 ) ; +#39381 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #41535 ), #26414 ) ; +#39380 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13972 ) ) ; +#39382 = SURFACE_SIDE_STYLE ('',( #14828 ) ) ; +#39383 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039200E-015, 6.056601140521966100E-031 ) ) ; +#39384 = AXIS2_PLACEMENT_3D ( 'NONE', #10725, #33352, #39684 ) ; +#39385 = DIRECTION ( 'NONE', ( -4.336808689942015400E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#39386 = STYLED_ITEM ( 'NONE', ( #2223 ), #31736 ) ; +#39387 = FACE_OUTER_BOUND ( 'NONE', #9792, .T. ) ; +#39388 = VERTEX_POINT ( 'NONE', #18684 ) ; +#39389 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39390 = VECTOR ( 'NONE', #14434, 1000.000000000000000 ) ; +#39391 = DIRECTION ( 'NONE', ( 3.097720492815727200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#39392 = SURFACE_STYLE_FILL_AREA ( #19414 ) ; +#39393 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#39394 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#39395 = EDGE_LOOP ( 'NONE', ( #15525, #29968, #38300, #12832 ) ) ; +#39396 = PRESENTATION_STYLE_ASSIGNMENT (( #11983 ) ) ; +#39397 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39398 = PRESENTATION_STYLE_ASSIGNMENT (( #5355 ) ) ; +#39399 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39400 = EDGE_LOOP ( 'NONE', ( #19254, #35995, #4425, #25195 ) ) ; +#39401 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#39402 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#39403 = ORIENTED_EDGE ( 'NONE', *, *, #488, .T. ) ; +#39404 = ORIENTED_EDGE ( 'NONE', *, *, #23801, .F. ) ; +#39405 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10660, 'distance_accuracy_value', 'NONE'); +#39406 = CARTESIAN_POINT ( 'NONE', ( 4.465000000000003400, -0.01999825470383237400, -7.349248115565993400 ) ) ; +#39407 = EDGE_CURVE ( 'NONE', #16038, #34788, #27457, .T. ) ; +#39408 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000030900, -2.031000000000001500, -6.549999999999999800 ) ) ; +#39409 = EDGE_CURVE ( 'NONE', #19871, #5959, #23014, .T. ) ; +#39410 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39411 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#39412 = PLANE ( 'NONE', #18628 ) ; +#39413 = ORIENTED_EDGE ( 'NONE', *, *, #823, .T. ) ; +#39414 = LINE ( 'NONE', #36953, #35883 ) ; +#39415 = SURFACE_SIDE_STYLE ('',( #32846 ) ) ; +#39416 = ADVANCED_FACE ( 'NONE', ( #26549 ), #12144, .T. ) ; +#39417 = EDGE_CURVE ( 'NONE', #11272, #34243, #19469, .T. ) ; +#39418 = PLANE ( 'NONE', #171 ) ; +#39419 = FACE_OUTER_BOUND ( 'NONE', #16833, .T. ) ; +#39420 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20509 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21860, #8800, #2098 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39421 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -1.139998254717365900, -5.049996877890552400 ) ) ; +#39423 = LINE ( 'NONE', #18046, #6600 ) ; +#39422 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39424 = DIRECTION ( 'NONE', ( 5.782411586589410900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#39425 = FILL_AREA_STYLE_COLOUR ( '', #31757 ) ; +#39426 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39427 = FACE_OUTER_BOUND ( 'NONE', #30, .T. ) ; +#39428 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 0.0000000000000000000 ) ) ; +#39429 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#39430 = STYLED_ITEM ( 'NONE', ( #10686 ), #21352 ) ; +#39431 = FILL_AREA_STYLE ('',( #36483 ) ) ; +#39432 = DIRECTION ( 'NONE', ( -2.990118434299153100E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#39433 = AXIS2_PLACEMENT_3D ( 'NONE', #23603, #39829, #20527 ) ; +#39434 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.08000174529617017100, -7.500000000000000900 ) ) ; +#39435 = CIRCLE ( 'NONE', #22250, 0.05000000000000012800 ) ; +#39436 = FILL_AREA_STYLE_COLOUR ( '', #25888 ) ; +#39437 = ORIENTED_EDGE ( 'NONE', *, *, #4781, .F. ) ; +#39440 = EDGE_CURVE ( 'NONE', #24571, #30260, #13349, .T. ) ; +#39439 = SURFACE_STYLE_USAGE ( .BOTH. , #245 ) ; +#39438 = AXIS2_PLACEMENT_3D ( 'NONE', #36012, #16923, #26401 ) ; +#39441 = SURFACE_STYLE_FILL_AREA ( #22700 ) ; +#39442 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.3300017452961688800, -5.075000000000000200 ) ) ; +#39443 = ORIENTED_EDGE ( 'NONE', *, *, #35481, .T. ) ; +#39445 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8311 ) ) ; +#39444 = STYLED_ITEM ( 'NONE', ( #19531 ), #27773 ) ; +#39446 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#39447 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #40508, 'distance_accuracy_value', 'NONE'); +#39448 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#39449 = AXIS2_PLACEMENT_3D ( 'NONE', #13908, #23654, #30291 ) ; +#39450 = EDGE_LOOP ( 'NONE', ( #25990, #9566, #25701, #4113, #28727, #30445 ) ) ; +#39451 = ORIENTED_EDGE ( 'NONE', *, *, #7037, .F. ) ; +#39452 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8321 ), #6957 ) ; +#39453 = CARTESIAN_POINT ( 'NONE', ( -3.242385881558933900, 0.2999999999999999900, 0.7034798965988859900 ) ) ; +#39454 = FILL_AREA_STYLE ('',( #17301 ) ) ; +#39455 = FILL_AREA_STYLE ('',( #32970 ) ) ; +#39456 = ORIENTED_EDGE ( 'NONE', *, *, #33429, .T. ) ; +#39457 = CARTESIAN_POINT ( 'NONE', ( -3.846156164834738400, 0.6165030250713622300, -4.400260404654702000 ) ) ; +#39458 = SURFACE_STYLE_FILL_AREA ( #3755 ) ; +#39459 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.2999999999999999900, -0.2498427124745999900 ) ) ; +#39460 = ORIENTED_EDGE ( 'NONE', *, *, #23022, .F. ) ; +#39461 = CYLINDRICAL_SURFACE ( 'NONE', #7775, 0.1499999999998701800 ) ; +#39462 = SURFACE_STYLE_FILL_AREA ( #2800 ) ; +#39463 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000002600, -0.2800000000000000300, -0.7580972011844129300 ) ) ; +#39464 = SURFACE_STYLE_USAGE ( .BOTH. , #16603 ) ; +#39465 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39466 = SURFACE_SIDE_STYLE ('',( #39802 ) ) ; +#39467 = CARTESIAN_POINT ( 'NONE', ( -2.149999999999999900, -1.380001745296129100, -6.031671842700004200 ) ) ; +#39468 = VECTOR ( 'NONE', #24544, 1000.000000000000000 ) ; +#39469 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39470 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.499998254703824400, -6.299999999999993600 ) ) ; +#39471 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6252, 'distance_accuracy_value', 'NONE'); +#39472 = ORIENTED_EDGE ( 'NONE', *, *, #34043, .F. ) ; +#39473 = SURFACE_SIDE_STYLE ('',( #40437 ) ) ; +#39474 = CIRCLE ( 'NONE', #25187, 0.2999999999999999300 ) ; +#39475 = EDGE_CURVE ( 'NONE', #5409, #20779, #32574, .T. ) ; +#39476 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39477 = SURFACE_SIDE_STYLE ('',( #17530 ) ) ; +#39478 = ORIENTED_EDGE ( 'NONE', *, *, #12883, .T. ) ; +#39479 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.380001745296135700, -6.031671842700004200 ) ) ; +#39480 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.280001745296165600, -5.075000000000000200 ) ) ; +#39481 = EDGE_CURVE ( 'NONE', #23388, #14855, #34601, .T. ) ; +#39482 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18963, 'distance_accuracy_value', 'NONE'); +#39483 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#39484 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -5.700000000000000200 ) ) ; +#39485 = EDGE_LOOP ( 'NONE', ( #27788, #14145, #31518, #2170, #25204, #28092, #31704, #21433 ) ) ; +#39486 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13162 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39134, #19831, #13425 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39487 = CLOSED_SHELL ( 'NONE', ( #931, #10143, #31309, #14592, #17993, #11890 ) ) ; +#39488 = SURFACE_SIDE_STYLE ('',( #15590 ) ) ; +#39489 = AXIS2_PLACEMENT_3D ( 'NONE', #7306, #1427, #29929 ) ; +#39490 = SURFACE_STYLE_USAGE ( .BOTH. , #13225 ) ; +#39491 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1590 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23073, #3712, #39578 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39492 = CARTESIAN_POINT ( 'NONE', ( 3.680000000000000200, -1.380001745296125100, -6.699999999999994000 ) ) ; +#39493 = VERTEX_POINT ( 'NONE', #23741 ) ; +#39494 = VECTOR ( 'NONE', #15763, 1000.000000000000000 ) ; +#39495 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#39496 = ORIENTED_EDGE ( 'NONE', *, *, #41405, .F. ) ; +#39497 = SURFACE_SIDE_STYLE ('',( #17102 ) ) ; +#39499 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #28690 ), #21971 ) ; +#39498 = AXIS2_PLACEMENT_3D ( 'NONE', #33252, #4847, #27439 ) ; +#39500 = LINE ( 'NONE', #19099, #22352 ) ; +#39501 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39503 = AXIS2_PLACEMENT_3D ( 'NONE', #13921, #30439, #30307 ) ; +#39502 = AXIS2_PLACEMENT_3D ( 'NONE', #40942, #31479, #35448 ) ; +#39504 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39505 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39506 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -0.3499999999999999800, 0.0000000000000000000 ) ) ; +#39507 = PLANE ( 'NONE', #3024 ) ; +#39508 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8937 ), #41658 ) ; +#39509 = PRESENTATION_STYLE_ASSIGNMENT (( #27919 ) ) ; +#39510 = FILL_AREA_STYLE ('',( #23707 ) ) ; +#39511 = SURFACE_STYLE_USAGE ( .BOTH. , #446 ) ; +#39512 = ORIENTED_EDGE ( 'NONE', *, *, #16680, .T. ) ; +#39513 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, 0.3499999999999998700, -1.680000000000000200 ) ) ; +#39514 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#39515 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#39516 = EDGE_LOOP ( 'NONE', ( #17525, #19198, #26174, #38510 ) ) ; +#39517 = SURFACE_STYLE_USAGE ( .BOTH. , #39382 ) ; +#39518 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#39519 = VECTOR ( 'NONE', #41675, 999.9999999999998900 ) ; +#39520 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39521 = LINE ( 'NONE', #26821, #25419 ) ; +#39522 = ORIENTED_EDGE ( 'NONE', *, *, #21034, .T. ) ; +#39523 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000000200, -1.499998254703833500, -5.449999999999994000 ) ) ; +#39524 = LINE ( 'NONE', #19012, #30950 ) ; +#39525 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745278514100, -3.814459358809384200 ) ) ; +#39526 = VERTEX_POINT ( 'NONE', #13997 ) ; +#39527 = FILL_AREA_STYLE_COLOUR ( '', #19881 ) ; +#39528 = ORIENTED_EDGE ( 'NONE', *, *, #11506, .T. ) ; +#39529 = EDGE_LOOP ( 'NONE', ( #5180, #17154, #26444, #11528, #13030, #36309 ) ) ; +#39530 = EDGE_CURVE ( 'NONE', #40655, #16876, #39122, .T. ) ; +#39531 = DIRECTION ( 'NONE', ( 2.465190328815661900E-032, 1.000000000000000000, -2.367138801244516300E-016 ) ) ; +#39532 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#39533 = ADVANCED_FACE ( 'NONE', ( #10833 ), #1184, .F. ) ; +#39534 = SURFACE_STYLE_FILL_AREA ( #19222 ) ; +#39535 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -500000.0000000000600, -3.814459358691020700 ) ) ; +#39536 = EDGE_CURVE ( 'NONE', #11507, #6499, #34080, .T. ) ; +#39537 = VECTOR ( 'NONE', #26134, 1000.000000000000000 ) ; +#39538 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #36549 ), #20669 ) ; +#39539 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39540 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000001800, 0.6800017452961724100, -1.649999999999999900 ) ) ; +#39541 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4324 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36219, #29559, #20553 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39542 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39543 = AXIS2_PLACEMENT_3D ( 'NONE', #21510, #27984, #5373 ) ; +#39544 = FILL_AREA_STYLE_COLOUR ( '', #39961 ) ; +#39545 = SURFACE_SIDE_STYLE ('',( #39672 ) ) ; +#39546 = SURFACE_SIDE_STYLE ('',( #9790 ) ) ; +#39547 = ORIENTED_EDGE ( 'NONE', *, *, #10398, .F. ) ; +#39548 = CARTESIAN_POINT ( 'NONE', ( -3.173683442811345000, 0.5282742683453112200, -1.858274268345311500 ) ) ; +#39549 = AXIS2_PLACEMENT_3D ( 'NONE', #1733, #11565, #5358 ) ; +#39550 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.879999999999742300, -0.2339555568811695900 ) ) ; +#39551 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #17129 ), #22264 ) ; +#39552 = VERTEX_POINT ( 'NONE', #767 ) ; +#39554 = STYLED_ITEM ( 'NONE', ( #20260 ), #5563 ) ; +#39553 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39555 = CARTESIAN_POINT ( 'NONE', ( -2.906813814880127900, 0.2000000000000005100, 1.149999999999999900 ) ) ; +#39556 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39557 = ORIENTED_EDGE ( 'NONE', *, *, #9664, .F. ) ; +#39558 = CYLINDRICAL_SURFACE ( 'NONE', #3748, 1.200001745296169300 ) ; +#39559 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4728, 'distance_accuracy_value', 'NONE'); +#39561 = EDGE_CURVE ( 'NONE', #19776, #33431, #27054, .T. ) ; +#39560 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3322 ) ) ; +#39562 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#39563 = ORIENTED_EDGE ( 'NONE', *, *, #2973, .F. ) ; +#39564 = CLOSED_SHELL ( 'NONE', ( #8368, #40037, #28295, #12001, #18222, #18614 ) ) ; +#39565 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39566 = VERTEX_POINT ( 'NONE', #16958 ) ; +#39567 = ORIENTED_EDGE ( 'NONE', *, *, #13236, .F. ) ; +#39569 = AXIS2_PLACEMENT_3D ( 'NONE', #12344, #12474, #31700 ) ; +#39568 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20702 ) ) ; +#39570 = DIRECTION ( 'NONE', ( -3.077917520101935200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#39571 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39572 = LINE ( 'NONE', #10063, #33025 ) ; +#39573 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.5300017452961702800, -4.576794919243111400 ) ) ; +#39574 = EDGE_LOOP ( 'NONE', ( #30781, #23651, #39104, #4416 ) ) ; +#39575 = ADVANCED_FACE ( 'NONE', ( #10304 ), #36630, .F. ) ; +#39576 = FILL_AREA_STYLE_COLOUR ( '', #32169 ) ; +#39577 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39578 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39579 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000800, -0.8400000000000000800 ) ) ; +#39580 = FACE_OUTER_BOUND ( 'NONE', #26164, .T. ) ; +#39581 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39582 = SURFACE_SIDE_STYLE ('',( #40350 ) ) ; +#39583 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39584 = ADVANCED_FACE ( 'NONE', ( #31564 ), #36044, .T. ) ; +#39585 = ORIENTED_EDGE ( 'NONE', *, *, #29011, .F. ) ; +#39586 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#39587 = EDGE_CURVE ( 'NONE', #36790, #13290, #40442, .T. ) ; +#39588 = EDGE_CURVE ( 'NONE', #5418, #5586, #19957, .T. ) ; +#39589 = PRESENTATION_STYLE_ASSIGNMENT (( #40368 ) ) ; +#39590 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8376 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15995, #6403, #22504 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39591 = ORIENTED_EDGE ( 'NONE', *, *, #34593, .F. ) ; +#39592 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.139998254717355900, -5.049996877890552400 ) ) ; +#39593 = CARTESIAN_POINT ( 'NONE', ( 3.500000000000003100, 0.4300017452961685800, -6.750000000000000000 ) ) ; +#39594 = FILL_AREA_STYLE ('',( #26363 ) ) ; +#39595 = ORIENTED_EDGE ( 'NONE', *, *, #15192, .T. ) ; +#39596 = ORIENTED_EDGE ( 'NONE', *, *, #14333, .T. ) ; +#39597 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#39599 = ORIENTED_EDGE ( 'NONE', *, *, #4542, .T. ) ; +#39598 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#39600 = ORIENTED_EDGE ( 'NONE', *, *, #11317, .F. ) ; +#39601 = CYLINDRICAL_SURFACE ( 'NONE', #37237, 0.1000000000000002600 ) ; +#39602 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10081 ), #41233 ) ; +#39603 = PLANE ( 'NONE', #31884 ) ; +#39604 = FILL_AREA_STYLE_COLOUR ( '', #11106 ) ; +#39605 = VECTOR ( 'NONE', #7051, 1000.000000000000000 ) ; +#39606 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid35', #26628 ) ; +#39607 = FILL_AREA_STYLE ('',( #33288 ) ) ; +#39608 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35312 ), #41773 ) ; +#39609 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#39611 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.3300017452961685500, -5.175000000000000700 ) ) ; +#39610 = AXIS2_PLACEMENT_3D ( 'NONE', #22237, #35359, #12593 ) ; +#39612 = VECTOR ( 'NONE', #11561, 1000.000000000000000 ) ; +#39613 = VECTOR ( 'NONE', #34783, 1000.000000000000000 ) ; +#39614 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28808 ) ) ; +#39615 = PRESENTATION_STYLE_ASSIGNMENT (( #26351 ) ) ; +#39616 = FACE_OUTER_BOUND ( 'NONE', #7225, .T. ) ; +#39617 = LINE ( 'NONE', #17578, #14361 ) ; +#39619 = EDGE_CURVE ( 'NONE', #6476, #9639, #39089, .T. ) ; +#39618 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21548 ) ) ; +#39620 = CARTESIAN_POINT ( 'NONE', ( -3.342385881558933600, 0.07499999999999999700, 0.4559712123763899900 ) ) ; +#39621 = ADVANCED_FACE ( 'NONE', ( #40626 ), #23459, .T. ) ; +#39622 = CARTESIAN_POINT ( 'NONE', ( 1.649999999999999900, -1.380001745296130600, -6.031671842700004200 ) ) ; +#39623 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#39624 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39625 = SURFACE_STYLE_FILL_AREA ( #37005 ) ; +#39626 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 0.0000000000000000000 ) ) ; +#39628 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38603 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28111, #21928, #18109 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39627 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #31462 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12132, #25454, #16393 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39629 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#39630 = VERTEX_POINT ( 'NONE', #33902 ) ; +#39631 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#39632 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39633 = VECTOR ( 'NONE', #17694, 1000.000000000000000 ) ; +#39634 = CARTESIAN_POINT ( 'NONE', ( 3.629999999999999900, -1.499998254703818900, -6.299999999999993600 ) ) ; +#39635 = ORIENTED_EDGE ( 'NONE', *, *, #5465, .F. ) ; +#39636 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39637 = EDGE_LOOP ( 'NONE', ( #13556, #12359, #21652, #32304 ) ) ; +#39638 = CIRCLE ( 'NONE', #18951, 0.1000000000000002600 ) ; +#39639 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39640 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999000, 1.779999999999868400, 0.0000000000000000000 ) ) ; +#39641 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.730424212713734600, -1.049979056049130000 ) ) ; +#39642 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39643 = VERTEX_POINT ( 'NONE', #17406 ) ; +#39644 = PRESENTATION_STYLE_ASSIGNMENT (( #28939 ) ) ; +#39645 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25642, 'distance_accuracy_value', 'NONE'); +#39646 = ORIENTED_EDGE ( 'NONE', *, *, #27087, .T. ) ; +#39647 = LINE ( 'NONE', #12035, #22960 ) ; +#39648 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.056601140521967000E-031 ) ) ; +#39649 = SURFACE_SIDE_STYLE ('',( #32346 ) ) ; +#39650 = LINE ( 'NONE', #39506, #10340 ) ; +#39651 = VERTEX_POINT ( 'NONE', #40511 ) ; +#39652 = VECTOR ( 'NONE', #26459, 1000.000000000000000 ) ; +#39653 = EDGE_CURVE ( 'NONE', #1488, #10480, #32531, .T. ) ; +#39654 = ORIENTED_EDGE ( 'NONE', *, *, #25192, .T. ) ; +#39655 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39656 = SURFACE_SIDE_STYLE ('',( #19281 ) ) ; +#39657 = SURFACE_STYLE_FILL_AREA ( #18966 ) ; +#39658 = CIRCLE ( 'NONE', #39998, 0.09999999999999999200 ) ; +#39659 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39660 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#39661 = ORIENTED_EDGE ( 'NONE', *, *, #16935, .T. ) ; +#39662 = EDGE_CURVE ( 'NONE', #14625, #6642, #41139, .T. ) ; +#39663 = SURFACE_STYLE_FILL_AREA ( #7790 ) ; +#39664 = EDGE_CURVE ( 'NONE', #7896, #40879, #38080, .T. ) ; +#39665 = FILL_AREA_STYLE ('',( #23859 ) ) ; +#39666 = FILL_AREA_STYLE_COLOUR ( '', #7133 ) ; +#39667 = LINE ( 'NONE', #39535, #21519 ) ; +#39668 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32377 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #166, #16072, #39201 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39669 = ORIENTED_EDGE ( 'NONE', *, *, #40847, .F. ) ; +#39670 = ORIENTED_EDGE ( 'NONE', *, *, #5206, .T. ) ; +#39671 = AXIS2_PLACEMENT_3D ( 'NONE', #6087, #35180, #32044 ) ; +#39672 = SURFACE_STYLE_FILL_AREA ( #30243 ) ; +#39673 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.773004880385253600, -0.7580972011844128200 ) ) ; +#39674 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#39675 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.280001745296170300, -4.549999999999999800 ) ) ; +#39676 = VERTEX_POINT ( 'NONE', #7765 ) ; +#39677 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6278 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14123, #34719, #36246 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39678 = SURFACE_STYLE_FILL_AREA ( #32160 ) ; +#39679 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 0.2999999999999999900, -1.249999999999999800 ) ) ; +#39680 = PRESENTATION_STYLE_ASSIGNMENT (( #31111 ) ) ; +#39681 = VERTEX_POINT ( 'NONE', #40094 ) ; +#39683 = EDGE_CURVE ( 'NONE', #33786, #7023, #22464, .T. ) ; +#39682 = AXIS2_PLACEMENT_3D ( 'NONE', #29803, #20384, #14277 ) ; +#39684 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#39685 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 2.322941965694886000, -1.250000000000000000 ) ) ; +#39686 = ORIENTED_EDGE ( 'NONE', *, *, #19397, .F. ) ; +#39687 = VECTOR ( 'NONE', #37545, 1000.000000000000000 ) ; +#39688 = EDGE_LOOP ( 'NONE', ( #6583, #33943, #10675, #8319 ) ) ; +#39689 = PLANE ( 'NONE', #12969 ) ; +#39691 = AXIS2_PLACEMENT_3D ( 'NONE', #23890, #1740, #11433 ) ; +#39690 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #18627 ) ) ; +#39692 = AXIS2_PLACEMENT_3D ( 'NONE', #1227, #33801, #23780 ) ; +#39693 = SURFACE_STYLE_FILL_AREA ( #33136 ) ; +#39694 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39695 = CARTESIAN_POINT ( 'NONE', ( -3.245000000000000100, -0.2999999999999999900, -1.399999999999999900 ) ) ; +#39696 = VERTEX_POINT ( 'NONE', #11424 ) ; +#39697 = AXIS2_PLACEMENT_3D ( 'NONE', #26981, #23843, #4646 ) ; +#39698 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, -1.000000000000000000, -2.710505431213766000E-016 ) ) ; +#39699 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#39700 = STYLED_ITEM ( 'NONE', ( #36776 ), #7416 ) ; +#39701 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#39702 = VECTOR ( 'NONE', #14750, 1000.000000000000000 ) ; +#39703 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39704 = VERTEX_POINT ( 'NONE', #2571 ) ; +#39705 = SURFACE_STYLE_USAGE ( .BOTH. , #20262 ) ; +#39706 = CIRCLE ( 'NONE', #3327, 0.09999999999999999200 ) ; +#39707 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39708 = SURFACE_STYLE_USAGE ( .BOTH. , #20265 ) ; +#39709 = LINE ( 'NONE', #10295, #31129 ) ; +#39710 = CARTESIAN_POINT ( 'NONE', ( 0.1500000000000000200, -1.499998254703829500, -6.299999999999993600 ) ) ; +#39711 = FILL_AREA_STYLE ('',( #20131 ) ) ; +#39712 = PLANE ( 'NONE', #32494 ) ; +#39713 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23815, 'distance_accuracy_value', 'NONE'); +#39714 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#39715 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39716 = LINE ( 'NONE', #4975, #13443 ) ; +#39717 = PRESENTATION_STYLE_ASSIGNMENT (( #19825 ) ) ; +#39718 = DIRECTION ( 'NONE', ( 3.336029078258395200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#39719 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -0.9500017452961659900, -5.575000000000001100 ) ) ; +#39720 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24936, 'distance_accuracy_value', 'NONE'); +#39721 = EDGE_CURVE ( 'NONE', #26198, #23037, #27009, .T. ) ; +#39722 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12481, 'distance_accuracy_value', 'NONE'); +#39723 = PRESENTATION_STYLE_ASSIGNMENT (( #8569 ) ) ; +#39724 = EDGE_CURVE ( 'NONE', #3192, #15250, #6276, .T. ) ; +#39725 = VERTEX_POINT ( 'NONE', #31486 ) ; +#39726 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999998700, -10.30000000000000100, -1.250000000000000000 ) ) ; +#39727 = VECTOR ( 'NONE', #5342, 1000.000000000000000 ) ; +#39728 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#39729 = CLOSED_SHELL ( 'NONE', ( #23122, #23504, #14791, #6597, #7995, #26469 ) ) ; +#39730 = PLANE ( 'NONE', #12575 ) ; +#39731 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22427 ), #12935 ) ; +#39732 = EDGE_CURVE ( 'NONE', #35464, #25814, #28487, .T. ) ; +#39733 = ORIENTED_EDGE ( 'NONE', *, *, #29833, .F. ) ; +#39734 = SURFACE_SIDE_STYLE ('',( #15549 ) ) ; +#39735 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39736 = SURFACE_STYLE_USAGE ( .BOTH. , #29999 ) ; +#39737 = EDGE_LOOP ( 'NONE', ( #12660, #31571, #27634 ) ) ; +#39738 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36244 ) ) ; +#39739 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40282 ), #577 ) ; +#39740 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#39742 = EDGE_CURVE ( 'NONE', #34788, #20982, #1795, .T. ) ; +#39741 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#39743 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39744 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, 2.322941965694886000, 0.1499999999999999900 ) ) ; +#39745 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#39746 = FILL_AREA_STYLE ('',( #20735 ) ) ; +#39747 = LINE ( 'NONE', #5769, #31170 ) ; +#39748 = ADVANCED_FACE ( 'NONE', ( #12817 ), #4745, .T. ) ; +#39749 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #25200 ), #16745 ) ; +#39750 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35830 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10990, #13985, #17526 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39751 = FILL_AREA_STYLE ('',( #26802 ) ) ; +#39752 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4575 ) ) ; +#39753 = CYLINDRICAL_SURFACE ( 'NONE', #379, 0.9499999999999998400 ) ; +#39754 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39755 = ORIENTED_EDGE ( 'NONE', *, *, #19007, .F. ) ; +#39756 = CIRCLE ( 'NONE', #37543, 0.3600000000000078700 ) ; +#39758 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #24380 ), #12155 ) ; +#39757 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#39759 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39715, 'distance_accuracy_value', 'NONE'); +#39760 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39761 = ORIENTED_EDGE ( 'NONE', *, *, #14929, .F. ) ; +#39762 = FILL_AREA_STYLE ('',( #29891 ) ) ; +#39763 = ORIENTED_EDGE ( 'NONE', *, *, #38238, .F. ) ; +#39764 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000000900, -1.380001745296134000, -6.031671842700004200 ) ) ; +#39765 = ORIENTED_EDGE ( 'NONE', *, *, #40364, .F. ) ; +#39766 = CIRCLE ( 'NONE', #34059, 0.3000000000000001600 ) ; +#39767 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#39768 = ORIENTED_EDGE ( 'NONE', *, *, #17492, .T. ) ; +#39769 = FILL_AREA_STYLE ('',( #1139 ) ) ; +#39770 = LINE ( 'NONE', #20700, #39233 ) ; +#39771 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#39772 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3909, 'distance_accuracy_value', 'NONE'); +#39773 = LINE ( 'NONE', #5601, #22096 ) ; +#39774 = ORIENTED_EDGE ( 'NONE', *, *, #2467, .T. ) ; +#39775 = VECTOR ( 'NONE', #2367, 1000.000000000000000 ) ; +#39776 = VERTEX_POINT ( 'NONE', #2289 ) ; +#39777 = FILL_AREA_STYLE_COLOUR ( '', #24149 ) ; +#39778 = PRESENTATION_STYLE_ASSIGNMENT (( #26971 ) ) ; +#39779 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39780 = PRESENTATION_STYLE_ASSIGNMENT (( #30151 ) ) ; +#39781 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#39782 = FILL_AREA_STYLE ('',( #36554 ) ) ; +#39783 = ADVANCED_FACE ( 'NONE', ( #248 ), #27972, .T. ) ; +#39784 = EDGE_CURVE ( 'NONE', #25243, #5698, #33034, .T. ) ; +#39785 = VECTOR ( 'NONE', #40559, 1000.000000000000000 ) ; +#39786 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, -0.09999999999998369900, -1.749999999999999800 ) ) ; +#39787 = EDGE_CURVE ( 'NONE', #1050, #16530, #28956, .T. ) ; +#39788 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21158 ) ) ; +#39789 = SURFACE_STYLE_FILL_AREA ( #37781 ) ; +#39790 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11389 ), #13572 ) ; +#39791 = ORIENTED_EDGE ( 'NONE', *, *, #25072, .F. ) ; +#39792 = VECTOR ( 'NONE', #15734, 1000.000000000000000 ) ; +#39793 = DIRECTION ( 'NONE', ( -3.281909278875040000E-015, -1.000000000000000000, 3.886487709061371600E-045 ) ) ; +#39794 = SURFACE_STYLE_USAGE ( .BOTH. , #14258 ) ; +#39795 = SURFACE_STYLE_USAGE ( .BOTH. , #32895 ) ; +#39796 = ADVANCED_FACE ( 'NONE', ( #30995 ), #28239, .T. ) ; +#39797 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28281 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11166, #37168, #33777 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39798 = ORIENTED_EDGE ( 'NONE', *, *, #2592, .F. ) ; +#39799 = CIRCLE ( 'NONE', #21963, 0.3000000000000003800 ) ; +#39800 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.380001745296135700, -6.699999999999994000 ) ) ; +#39801 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13579 ), #28745 ) ; +#39802 = SURFACE_STYLE_FILL_AREA ( #7401 ) ; +#39803 = AXIS2_PLACEMENT_3D ( 'NONE', #29668, #11284, #14690 ) ; +#39804 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39805 = ORIENTED_EDGE ( 'NONE', *, *, #9, .T. ) ; +#39806 = ORIENTED_EDGE ( 'NONE', *, *, #16302, .F. ) ; +#39808 = AXIS2_PLACEMENT_3D ( 'NONE', #17455, #1782, #7815 ) ; +#39807 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23307 ) ) ; +#39809 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#39810 = LINE ( 'NONE', #23305, #21666 ) ; +#39811 = CIRCLE ( 'NONE', #19726, 0.8000000000000000400 ) ; +#39813 = EDGE_CURVE ( 'NONE', #6299, #20114, #29984, .T. ) ; +#39812 = STYLED_ITEM ( 'NONE', ( #11954 ), #34792 ) ; +#39814 = ORIENTED_EDGE ( 'NONE', *, *, #41345, .F. ) ; +#39815 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39816 = ORIENTED_EDGE ( 'NONE', *, *, #15688, .T. ) ; +#39817 = ORIENTED_EDGE ( 'NONE', *, *, #18131, .F. ) ; +#39818 = FACE_OUTER_BOUND ( 'NONE', #32025, .T. ) ; +#39819 = PLANE ( 'NONE', #3513 ) ; +#39820 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.630001745296169000, -3.514459358809377300 ) ) ; +#39821 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39822 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15225 ) ) ; +#39823 = SURFACE_SIDE_STYLE ('',( #10362 ) ) ; +#39824 = SURFACE_STYLE_USAGE ( .BOTH. , #23321 ) ; +#39825 = ORIENTED_EDGE ( 'NONE', *, *, #35419, .F. ) ; +#39826 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39827 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39828 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39829 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#39830 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39832 = LINE ( 'NONE', #20758, #14085 ) ; +#39831 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14362, 'distance_accuracy_value', 'NONE'); +#39833 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39834 = ADVANCED_FACE ( 'NONE', ( #1732 ), #12671, .T. ) ; +#39835 = ORIENTED_EDGE ( 'NONE', *, *, #4340, .F. ) ; +#39836 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.2800017452961687200, -6.199999999999999300 ) ) ; +#39837 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39838 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#39839 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865475700, 0.7071067811865475700 ) ) ; +#39840 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, -0.3500000000000000300, -1.300000000000000000 ) ) ; +#39841 = ORIENTED_EDGE ( 'NONE', *, *, #10415, .T. ) ; +#39842 = CIRCLE ( 'NONE', #11884, 0.3499999999999996400 ) ; +#39843 = EDGE_CURVE ( 'NONE', #20683, #15032, #34529, .T. ) ; +#39844 = DIRECTION ( 'NONE', ( 0.08715574274765916500, 2.860372408307886300E-016, 0.9961946980917455500 ) ) ; +#39845 = EDGE_LOOP ( 'NONE', ( #8780, #30634, #31920, #409 ) ) ; +#39846 = VERTEX_POINT ( 'NONE', #22167 ) ; +#39847 = FILL_AREA_STYLE_COLOUR ( '', #8432 ) ; +#39848 = PRESENTATION_STYLE_ASSIGNMENT (( #16299 ) ) ; +#39849 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#39850 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#39851 = EDGE_CURVE ( 'NONE', #23832, #22408, #15332, .T. ) ; +#39852 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34035 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1516, #7959, #27068 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39853 = SURFACE_STYLE_USAGE ( .BOTH. , #17284 ) ; +#39854 = ORIENTED_EDGE ( 'NONE', *, *, #12994, .T. ) ; +#39855 = VECTOR ( 'NONE', #19900, 1000.000000000000000 ) ; +#39856 = ORIENTED_EDGE ( 'NONE', *, *, #1239, .F. ) ; +#39857 = ORIENTED_EDGE ( 'NONE', *, *, #11836, .F. ) ; +#39858 = PRESENTATION_STYLE_ASSIGNMENT (( #38312 ) ) ; +#39859 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39860 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #16849 ) ) ; +#39861 = ORIENTED_EDGE ( 'NONE', *, *, #35098, .T. ) ; +#39862 = STYLED_ITEM ( 'NONE', ( #5625 ), #19138 ) ; +#39863 = STYLED_ITEM ( 'NONE', ( #5324 ), #31268 ) ; +#39864 = VECTOR ( 'NONE', #633, 1000.000000000000000 ) ; +#39865 = CARTESIAN_POINT ( 'NONE', ( -3.244813086426267200, 0.2999999999999999900, 0.6909930101031527300 ) ) ; +#39866 = FILL_AREA_STYLE ('',( #36366 ) ) ; +#39868 = AXIS2_PLACEMENT_3D ( 'NONE', #359, #39267, #32928 ) ; +#39867 = STYLED_ITEM ( 'NONE', ( #5947 ), #30888 ) ; +#39869 = LINE ( 'NONE', #381, #36368 ) ; +#39870 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39871 = DIRECTION ( 'NONE', ( -6.056601140521965300E-031, 1.987721548152418300E-045, 1.000000000000000000 ) ) ; +#39873 = EDGE_CURVE ( 'NONE', #41785, #35688, #23916, .T. ) ; +#39872 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4871 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19079, #41620, #25563 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39874 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#39875 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#39876 = FACE_OUTER_BOUND ( 'NONE', #22319, .T. ) ; +#39877 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34181 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1532, #10320, #23897 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#39878 = SURFACE_STYLE_FILL_AREA ( #8848 ) ; +#39879 = DIRECTION ( 'NONE', ( -0.9961946980917453200, 0.0000000000000000000, 0.08715574274766035900 ) ) ; +#39880 = EDGE_LOOP ( 'NONE', ( #23115, #30139, #38625, #728 ) ) ; +#39881 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#39882 = ADVANCED_FACE ( 'NONE', ( #2753 ), #9561, .T. ) ; +#39883 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, 0.3499999999999996400, -1.250000000000000000 ) ) ; +#39884 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5438, 'distance_accuracy_value', 'NONE'); +#39885 = ORIENTED_EDGE ( 'NONE', *, *, #16568, .T. ) ; +#39886 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#39887 = FILL_AREA_STYLE_COLOUR ( '', #22337 ) ; +#39888 = VECTOR ( 'NONE', #8404, 1000.000000000000000 ) ; +#39889 = ADVANCED_FACE ( 'NONE', ( #33522 ), #18928, .T. ) ; +#39890 = FILL_AREA_STYLE_COLOUR ( '', #15427 ) ; +#39891 = LINE ( 'NONE', #29616, #9033 ) ; +#39892 = ORIENTED_EDGE ( 'NONE', *, *, #28543, .F. ) ; +#39893 = CIRCLE ( 'NONE', #18804, 0.1000000000000002600 ) ; +#39894 = ORIENTED_EDGE ( 'NONE', *, *, #41227, .T. ) ; +#39895 = EDGE_LOOP ( 'NONE', ( #5944, #17187, #20943, #10072 ) ) ; +#39896 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#39897 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39898 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32136, 'distance_accuracy_value', 'NONE'); +#39899 = EDGE_LOOP ( 'NONE', ( #17050, #24349 ) ) ; +#39900 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#39901 = LINE ( 'NONE', #15770, #7560 ) ; +#39902 = EDGE_CURVE ( 'NONE', #9215, #23410, #29942, .T. ) ; +#39903 = FILL_AREA_STYLE ('',( #14088 ) ) ; +#39904 = VECTOR ( 'NONE', #1017, 1000.000000000000000 ) ; +#39905 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39906 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#39907 = EDGE_CURVE ( 'NONE', #12478, #14132, #4713, .T. ) ; +#39908 = CARTESIAN_POINT ( 'NONE', ( -0.3500000000000000300, -1.380001745296135700, -6.031671842700004200 ) ) ; +#39909 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#39910 = PRESENTATION_STYLE_ASSIGNMENT (( #3012 ) ) ; +#39911 = CARTESIAN_POINT ( 'NONE', ( 4.620380236995680800, -0.2800000000000026400, -0.8400000000000000800 ) ) ; +#39912 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#39913 = ORIENTED_EDGE ( 'NONE', *, *, #24681, .F. ) ; +#39914 = CARTESIAN_POINT ( 'NONE', ( -17.14169132166999900, -0.6500000000000001300, -3.250000000000000400 ) ) ; +#39915 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39916 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, 0.2800017452961687200, -6.449999999999999300 ) ) ; +#39917 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23427 ), #12328 ) ; +#39918 = VECTOR ( 'NONE', #22240, 1000.000000000000000 ) ; +#39919 = ORIENTED_EDGE ( 'NONE', *, *, #12215, .T. ) ; +#39920 = PRESENTATION_STYLE_ASSIGNMENT (( #27503 ) ) ; +#39921 = FACE_OUTER_BOUND ( 'NONE', #4002, .T. ) ; +#39922 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37773 ), #211 ) ; +#39923 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#39924 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#39926 = EDGE_CURVE ( 'NONE', #16710, #40008, #11247, .T. ) ; +#39925 = AXIS2_PLACEMENT_3D ( 'NONE', #21951, #11612, #12158 ) ; +#39927 = EDGE_LOOP ( 'NONE', ( #20291, #29438, #12745 ) ) ; +#39928 = LINE ( 'NONE', #5349, #26302 ) ; +#39929 = ORIENTED_EDGE ( 'NONE', *, *, #9083, .F. ) ; +#39930 = ORIENTED_EDGE ( 'NONE', *, *, #17363, .F. ) ; +#39932 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39931 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#39933 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29356, 'distance_accuracy_value', 'NONE'); +#39934 = AXIS2_PLACEMENT_3D ( 'NONE', #7138, #20043, #23825 ) ; +#39935 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39936 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #20500 ) ) ; +#39937 = AXIS2_PLACEMENT_3D ( 'NONE', #2589, #11721, #18112 ) ; +#39938 = ORIENTED_EDGE ( 'NONE', *, *, #19167, .T. ) ; +#39939 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39940 = LINE ( 'NONE', #5445, #33925 ) ; +#39941 = SURFACE_STYLE_USAGE ( .BOTH. , #1172 ) ; +#39942 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#39943 = PLANE ( 'NONE', #8540 ) ; +#39944 = LINE ( 'NONE', #1927, #584 ) ; +#39945 = SURFACE_STYLE_USAGE ( .BOTH. , #33344 ) ; +#39946 = SURFACE_SIDE_STYLE ('',( #18252 ) ) ; +#39947 = ADVANCED_FACE ( 'NONE', ( #38041 ), #12748, .T. ) ; +#39948 = SURFACE_STYLE_USAGE ( .BOTH. , #33349 ) ; +#39949 = ORIENTED_EDGE ( 'NONE', *, *, #17740, .T. ) ; +#39950 = LINE ( 'NONE', #21759, #34424 ) ; +#39951 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#39952 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39953 = ORIENTED_EDGE ( 'NONE', *, *, #4473, .F. ) ; +#39954 = ORIENTED_EDGE ( 'NONE', *, *, #20972, .T. ) ; +#39955 = SURFACE_STYLE_USAGE ( .BOTH. , #30515 ) ; +#39956 = EDGE_CURVE ( 'NONE', #28878, #9333, #4159, .T. ) ; +#39957 = PLANE ( 'NONE', #28697 ) ; +#39958 = EDGE_CURVE ( 'NONE', #16898, #561, #3170, .T. ) ; +#39959 = FILL_AREA_STYLE ('',( #33216 ) ) ; +#39961 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#39960 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#39962 = SURFACE_STYLE_FILL_AREA ( #3540 ) ; +#39963 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39964 = ORIENTED_EDGE ( 'NONE', *, *, #8059, .T. ) ; +#39965 = CARTESIAN_POINT ( 'NONE', ( -1.850000000000000100, -1.499998254703824400, -6.299999999999993600 ) ) ; +#39966 = FACE_OUTER_BOUND ( 'NONE', #33662, .T. ) ; +#39967 = ORIENTED_EDGE ( 'NONE', *, *, #15254, .T. ) ; +#39968 = ORIENTED_EDGE ( 'NONE', *, *, #2233, .T. ) ; +#39969 = EDGE_CURVE ( 'NONE', #14191, #35039, #3675, .T. ) ; +#39970 = FILL_AREA_STYLE ('',( #40387 ) ) ; +#39971 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #30773 ) ) ; +#39972 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#39973 = EDGE_CURVE ( 'NONE', #521, #38459, #36518, .T. ) ; +#39974 = ORIENTED_EDGE ( 'NONE', *, *, #33057, .T. ) ; +#39975 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#39976 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#39977 = ORIENTED_EDGE ( 'NONE', *, *, #21639, .T. ) ; +#39978 = ORIENTED_EDGE ( 'NONE', *, *, #13362, .F. ) ; +#39979 = AXIS2_PLACEMENT_3D ( 'NONE', #32283, #22833, #3611 ) ; +#39980 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#39981 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#39982 = SURFACE_SIDE_STYLE ('',( #41788 ) ) ; +#39983 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13772 ) ) ; +#39984 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#39987 = EDGE_CURVE ( 'NONE', #24209, #37825, #9201, .T. ) ; +#39986 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #34318 ), #12390 ) ; +#39985 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.2339555568811697600 ) ) ; +#39988 = FILL_AREA_STYLE_COLOUR ( '', #5801 ) ; +#39989 = ADVANCED_FACE ( 'NONE', ( #1700 ), #10114, .T. ) ; +#39990 = SURFACE_STYLE_USAGE ( .BOTH. , #37183 ) ; +#39991 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#39992 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9430, 'distance_accuracy_value', 'NONE'); +#39993 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #19191 ), #12396 ) ; +#39994 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27050 ) ) ; +#39995 = EDGE_LOOP ( 'NONE', ( #35951, #34064, #422, #2143 ) ) ; +#39996 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#39997 = PRESENTATION_STYLE_ASSIGNMENT (( #30768 ) ) ; +#39998 = AXIS2_PLACEMENT_3D ( 'NONE', #4005, #33104, #10908 ) ; +#39999 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #30156 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #22949, #19872, #6973 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40000 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40001 = SURFACE_STYLE_USAGE ( .BOTH. , #10910 ) ; +#40002 = ORIENTED_EDGE ( 'NONE', *, *, #36840, .F. ) ; +#40003 = LINE ( 'NONE', #10169, #28391 ) ; +#40004 = ADVANCED_FACE ( 'NONE', ( #28446 ), #13363, .T. ) ; +#40005 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#40006 = LINE ( 'NONE', #41147, #16280 ) ; +#40007 = CARTESIAN_POINT ( 'NONE', ( -3.273571428571023100, -0.07499999999999999700, -0.08583148475006677200 ) ) ; +#40008 = VERTEX_POINT ( 'NONE', #22718 ) ; +#40009 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40010 = CARTESIAN_POINT ( 'NONE', ( -4.623418435431829300, -1.009999999999998700, -7.461124800398367000 ) ) ; +#40011 = SURFACE_STYLE_FILL_AREA ( #41842 ) ; +#40012 = FILL_AREA_STYLE ('',( #4292 ) ) ; +#40013 = FILL_AREA_STYLE_COLOUR ( '', #15447 ) ; +#40014 = FILL_AREA_STYLE ('',( #10931 ) ) ; +#40015 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.837630800822890800E-016, -1.000000000000000000 ) ) ; +#40016 = FILL_AREA_STYLE_COLOUR ( '', #41651 ) ; +#40017 = VERTEX_POINT ( 'NONE', #4475 ) ; +#40018 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#40019 = VECTOR ( 'NONE', #11826, 1000.000000000000000 ) ; +#40020 = ORIENTED_EDGE ( 'NONE', *, *, #494, .T. ) ; +#40021 = PRESENTATION_STYLE_ASSIGNMENT (( #39511 ) ) ; +#40022 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#40023 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40024 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40025 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, 0.3500000000000000300, 0.6999999999999999600 ) ) ; +#40026 = EDGE_CURVE ( 'NONE', #28472, #41348, #37002, .T. ) ; +#40027 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40028 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#40029 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #25927, 'distance_accuracy_value', 'NONE'); +#40030 = FILL_AREA_STYLE_COLOUR ( '', #26757 ) ; +#40031 = FILL_AREA_STYLE_COLOUR ( '', #29209 ) ; +#40032 = EDGE_CURVE ( 'NONE', #24483, #28229, #26393, .T. ) ; +#40033 = EDGE_LOOP ( 'NONE', ( #15200, #31505, #3120, #22296, #62, #37990, #2663, #20006 ) ) ; +#40034 = DIRECTION ( 'NONE', ( -5.782411586589410900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#40035 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000800, 10.30000000000000100, -1.250000000000000000 ) ) ; +#40036 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #36960 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34671, #41692, #22384 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40037 = ADVANCED_FACE ( 'NONE', ( #26941 ), #30183, .F. ) ; +#40038 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15810, 'distance_accuracy_value', 'NONE'); +#40039 = SURFACE_STYLE_USAGE ( .BOTH. , #33854 ) ; +#40040 = ORIENTED_EDGE ( 'NONE', *, *, #2842, .F. ) ; +#40041 = AXIS2_PLACEMENT_3D ( 'NONE', #37897, #22107, #22374 ) ; +#40042 = FILL_AREA_STYLE_COLOUR ( '', #21889 ) ; +#40043 = FACE_BOUND ( 'NONE', #159, .T. ) ; +#40044 = ORIENTED_EDGE ( 'NONE', *, *, #28018, .T. ) ; +#40045 = ORIENTED_EDGE ( 'NONE', *, *, #10329, .F. ) ; +#40046 = AXIS2_PLACEMENT_3D ( 'NONE', #16275, #6119, #25751 ) ; +#40047 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -10.30000000000000100, -1.250000000000000000 ) ) ; +#40048 = STYLED_ITEM ( 'NONE', ( #28084 ), #17746 ) ; +#40050 = ORIENTED_EDGE ( 'NONE', *, *, #10577, .F. ) ; +#40049 = LINE ( 'NONE', #41167, #26421 ) ; +#40051 = ORIENTED_EDGE ( 'NONE', *, *, #263, .T. ) ; +#40052 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40053 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5371 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17165, #11195, #7528 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40054 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40056 = EDGE_CURVE ( 'NONE', #39651, #24845, #23871, .T. ) ; +#40055 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25920 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24716, #14788, #31011 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40057 = FILL_AREA_STYLE ('',( #13102 ) ) ; +#40058 = ORIENTED_EDGE ( 'NONE', *, *, #16189, .F. ) ; +#40059 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0002094395087002862800, 0.9999999780675458100 ) ) ; +#40060 = ORIENTED_EDGE ( 'NONE', *, *, #16808, .F. ) ; +#40061 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35746 ) ) ; +#40062 = VECTOR ( 'NONE', #19906, 1000.000000000000000 ) ; +#40063 = VECTOR ( 'NONE', #12837, 1000.000000000000000 ) ; +#40064 = VECTOR ( 'NONE', #27736, 1000.000000000000000 ) ; +#40065 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40066 = STYLED_ITEM ( 'NONE', ( #34818 ), #24782 ) ; +#40067 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.380001745296134800, -5.449999999999994000 ) ) ; +#40068 = VECTOR ( 'NONE', #23020, 1000.000000000000000 ) ; +#40069 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, 2.322941965694886000, 0.3499999999999999800 ) ) ; +#40071 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#40070 = DIRECTION ( 'NONE', ( 0.9961946980917454300, 2.635991797933898700E-016, -0.08715574274765916500 ) ) ; +#40072 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40073 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40074 = ORIENTED_EDGE ( 'NONE', *, *, #14282, .F. ) ; +#40075 = VECTOR ( 'NONE', #30923, 1000.000000000000000 ) ; +#40076 = EDGE_LOOP ( 'NONE', ( #41009, #27694, #3538, #9128 ) ) ; +#40077 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #35844, 'distance_accuracy_value', 'NONE'); +#40078 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 10.30000000000000100, -1.250000000000000000 ) ) ; +#40079 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40080 = ORIENTED_EDGE ( 'NONE', *, *, #25822, .T. ) ; +#40081 = EDGE_CURVE ( 'NONE', #34143, #35378, #7692, .T. ) ; +#40082 = ADVANCED_FACE ( 'NONE', ( #32943 ), #2194, .F. ) ; +#40083 = ORIENTED_EDGE ( 'NONE', *, *, #7550, .T. ) ; +#40084 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#40086 = EDGE_LOOP ( 'NONE', ( #18933, #3976, #14411, #18485 ) ) ; +#40085 = LINE ( 'NONE', #11535, #34066 ) ; +#40087 = FILL_AREA_STYLE_COLOUR ( '', #25024 ) ; +#40088 = SURFACE_STYLE_USAGE ( .BOTH. , #39946 ) ; +#40089 = ORIENTED_EDGE ( 'NONE', *, *, #13936, .F. ) ; +#40090 = VECTOR ( 'NONE', #29256, 1000.000000000000000 ) ; +#40091 = EDGE_CURVE ( 'NONE', #31823, #2583, #41054, .T. ) ; +#40092 = STYLED_ITEM ( 'NONE', ( #3354 ), #10560 ) ; +#40093 = CIRCLE ( 'NONE', #334, 0.09999999999999999200 ) ; +#40094 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#40095 = PLANE ( 'NONE', #17452 ) ; +#40096 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.2300017452961680700, -5.175000000000000700 ) ) ; +#40097 = FACE_OUTER_BOUND ( 'NONE', #19338, .T. ) ; +#40098 = FACE_OUTER_BOUND ( 'NONE', #27999, .T. ) ; +#40099 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40100 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37943 ) ) ; +#40101 = VECTOR ( 'NONE', #39031, 1000.000000000000000 ) ; +#40102 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #23289, 'distance_accuracy_value', 'NONE'); +#40103 = DIRECTION ( 'NONE', ( -3.281909278875039600E-015, 1.000000000000000000, 2.710505431213766000E-016 ) ) ; +#40104 = DIRECTION ( 'NONE', ( 0.9396926207856547400, 0.0000000000000000000, 0.3420201433263653800 ) ) ; +#40105 = SURFACE_STYLE_USAGE ( .BOTH. , #1603 ) ; +#40106 = STYLED_ITEM ( 'NONE', ( #35714 ), #38960 ) ; +#40107 = CARTESIAN_POINT ( 'NONE', ( -0.4000000000000000200, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#40108 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.480001745278514100, -3.514459358809384400 ) ) ; +#40111 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8983 ) ) ; +#40110 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.080001745296136600, -5.000000000000000000 ) ) ; +#40109 = STYLED_ITEM ( 'NONE', ( #24235 ), #30523 ) ; +#40112 = FILL_AREA_STYLE_COLOUR ( '', #13629 ) ; +#40113 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.380001745296129100, -6.699999999999994000 ) ) ; +#40114 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40116 = EDGE_CURVE ( 'NONE', #18824, #16124, #17322, .T. ) ; +#40115 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35046 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41668, #15441, #25607 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40117 = PRESENTATION_STYLE_ASSIGNMENT (( #4246 ) ) ; +#40118 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40119 = CYLINDRICAL_SURFACE ( 'NONE', #20130, 0.2000000000000007300 ) ; +#40121 = AXIS2_PLACEMENT_3D ( 'NONE', #17276, #1204, #37172 ) ; +#40120 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #35879 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4313, #4171, #33139 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40122 = FILL_AREA_STYLE_COLOUR ( '', #15404 ) ; +#40123 = SURFACE_STYLE_USAGE ( .BOTH. , #13742 ) ; +#40124 = PRESENTATION_STYLE_ASSIGNMENT (( #2817 ) ) ; +#40125 = EDGE_LOOP ( 'NONE', ( #19702, #11912, #23205, #6892 ) ) ; +#40126 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000100, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#40128 = ORIENTED_EDGE ( 'NONE', *, *, #3121, .T. ) ; +#40127 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#40129 = ORIENTED_EDGE ( 'NONE', *, *, #13085, .T. ) ; +#40130 = SURFACE_STYLE_FILL_AREA ( #10820 ) ; +#40131 = VECTOR ( 'NONE', #218, 1000.000000000000000 ) ; +#40132 = VECTOR ( 'NONE', #15137, 1000.000000000000000 ) ; +#40133 = SURFACE_STYLE_USAGE ( .BOTH. , #14453 ) ; +#40134 = FILL_AREA_STYLE_COLOUR ( '', #8360 ) ; +#40135 = LINE ( 'NONE', #3157, #35094 ) ; +#40136 = CYLINDRICAL_SURFACE ( 'NONE', #28190, 0.1000000000000009100 ) ; +#40137 = ORIENTED_EDGE ( 'NONE', *, *, #4120, .T. ) ; +#40138 = SURFACE_SIDE_STYLE ('',( #9459 ) ) ; +#40139 = CARTESIAN_POINT ( 'NONE', ( 0.3500000000000000300, -1.499998254703829500, -6.699999999999994000 ) ) ; +#40140 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#40141 = FILL_AREA_STYLE ('',( #16866 ) ) ; +#40142 = EDGE_CURVE ( 'NONE', #35378, #10489, #27394, .T. ) ; +#40143 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#40144 = CIRCLE ( 'NONE', #19614, 0.3000000000000001000 ) ; +#40145 = SURFACE_SIDE_STYLE ('',( #27489 ) ) ; +#40146 = ORIENTED_EDGE ( 'NONE', *, *, #24283, .T. ) ; +#40147 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #30612, #23557, #30469, #20641 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 0.0000000000000000000, 0.7227342478134225500 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.9569428977956560000, 0.9569428977956560000, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#40148 = EDGE_CURVE ( 'NONE', #7722, #34148, #2677, .T. ) ; +#40149 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26567, 'distance_accuracy_value', 'NONE'); +#40150 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#40151 = DIRECTION ( 'NONE', ( 0.9961946980917453200, -3.129741034912050000E-016, 0.08715574274766048300 ) ) ; +#40152 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40153 = SURFACE_STYLE_FILL_AREA ( #39959 ) ; +#40154 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #17814, #5073, #8446, #20944 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#40155 = ADVANCED_FACE ( 'NONE', ( #10189 ), #10962, .F. ) ; +#40156 = EDGE_LOOP ( 'NONE', ( #40083, #34685, #18412, #7797 ) ) ; +#40157 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7796 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21913, #21634, #15386 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40158 = SURFACE_SIDE_STYLE ('',( #33952 ) ) ; +#40159 = FACE_OUTER_BOUND ( 'NONE', #24099, .T. ) ; +#40160 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#40161 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#40162 = AXIS2_PLACEMENT_3D ( 'NONE', #20596, #30296, #1109 ) ; +#40163 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000013700, -1.949998254703824200, -6.732287565553227700 ) ) ; +#40164 = ORIENTED_EDGE ( 'NONE', *, *, #35852, .F. ) ; +#40165 = FILL_AREA_STYLE_COLOUR ( '', #28653 ) ; +#40166 = LINE ( 'NONE', #25890, #23003 ) ; +#40167 =( BOUNDED_CURVE ( ) B_SPLINE_CURVE ( 3, ( #3732, #4155, #20447, #6978 ), + .UNSPECIFIED., .F., .F. ) + B_SPLINE_CURVE_WITH_KNOTS ( ( 4, 4 ), + ( 4.712388980384648800, 7.853981633974441900 ), + .UNSPECIFIED. ) + CURVE ( ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_CURVE ( ( 1.000000000000000000, 0.3333333333333333700, 0.3333333333333333700, 1.000000000000000000 ) ) + REPRESENTATION_ITEM ( '' ) ); +#40168 = LINE ( 'NONE', #2088, #39149 ) ; +#40169 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#40170 = AXIS2_PLACEMENT_3D ( 'NONE', #2265, #28218, #2399 ) ; +#40171 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40172 = SURFACE_STYLE_FILL_AREA ( #35583 ) ; +#40173 = CIRCLE ( 'NONE', #7808, 1.200001745296169300 ) ; +#40175 = EDGE_CURVE ( 'NONE', #9907, #5853, #1621, .T. ) ; +#40174 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, 2.322941965694886000, -1.250000000000000000 ) ) ; +#40176 = VERTEX_POINT ( 'NONE', #4188 ) ; +#40177 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#40178 = FACE_OUTER_BOUND ( 'NONE', #30934, .T. ) ; +#40179 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40181 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20189 ), #39628 ) ; +#40180 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26413 ), #40743 ) ; +#40182 = FACE_OUTER_BOUND ( 'NONE', #35758, .T. ) ; +#40183 = SURFACE_SIDE_STYLE ('',( #8846 ) ) ; +#40184 = SURFACE_SIDE_STYLE ('',( #6678 ) ) ; +#40185 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16383 ), #7717 ) ; +#40186 = FILL_AREA_STYLE_COLOUR ( '', #35963 ) ; +#40187 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40188 = CARTESIAN_POINT ( 'NONE', ( 3.057483030973136500, 0.07499999999999999700, -0.1688861943103988100 ) ) ; +#40189 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40190 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10299, 'distance_accuracy_value', 'NONE'); +#40191 = SURFACE_SIDE_STYLE ('',( #21929 ) ) ; +#40192 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1530, 'distance_accuracy_value', 'NONE'); +#40193 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40194 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40195 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000013700, -1.949998254703824200, -5.767712434446773200 ) ) ; +#40196 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026400, -0.2339555568811695900 ) ) ; +#40197 = ADVANCED_FACE ( 'NONE', ( #11176 ), #1676, .F. ) ; +#40198 = CIRCLE ( 'NONE', #16438, 0.3600000000000078700 ) ; +#40199 = SURFACE_STYLE_FILL_AREA ( #20900 ) ; +#40200 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.2800017452961688400, -5.250000000000000000 ) ) ; +#40201 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745278514100, -3.514459358809377300 ) ) ; +#40202 = LINE ( 'NONE', #37126, #32144 ) ; +#40203 = EDGE_CURVE ( 'NONE', #28950, #20484, #5639, .T. ) ; +#40204 = ORIENTED_EDGE ( 'NONE', *, *, #21915, .F. ) ; +#40205 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#40206 = VERTEX_POINT ( 'NONE', #11371 ) ; +#40207 = VECTOR ( 'NONE', #8577, 1000.000000000000000 ) ; +#40208 = ORIENTED_EDGE ( 'NONE', *, *, #31323, .F. ) ; +#40209 = ADVANCED_FACE ( 'NONE', ( #12180 ), #40468, .T. ) ; +#40210 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#40211 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#40212 = EDGE_CURVE ( 'NONE', #12807, #41528, #12708, .T. ) ; +#40213 = VECTOR ( 'NONE', #38636, 1000.000000000000000 ) ; +#40214 = FILL_AREA_STYLE_COLOUR ( '', #39224 ) ; +#40215 = ORIENTED_EDGE ( 'NONE', *, *, #3035, .T. ) ; +#40216 = VECTOR ( 'NONE', #25901, 1000.000000000000000 ) ; +#40217 = ORIENTED_EDGE ( 'NONE', *, *, #30199, .F. ) ; +#40218 = EDGE_CURVE ( 'NONE', #28522, #37312, #21350, .T. ) ; +#40219 = FILL_AREA_STYLE ('',( #24142 ) ) ; +#40220 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5461 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #37134, #30362, #14541 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40221 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#40222 = FACE_OUTER_BOUND ( 'NONE', #5456, .T. ) ; +#40223 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.845797985667148900, -0.3279248189596167300 ) ) ; +#40224 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40225 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40226 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40227 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9876 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12731, #12855, #12587 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40228 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#40229 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40230 = LINE ( 'NONE', #40450, #20602 ) ; +#40231 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( + ( #16041, #6443, #29009, #22277 ), + ( #2947, #15756, #6169, #25665 ), + ( #22409, #28886, #9523, #32129 ), + ( #19324, #16186, #32269, #35540 ) ), + .UNSPECIFIED., .F., .F., .T. ) + B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) + GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( + ( 1.000000000000000000, 0.8047378541243648300, 0.8047378541243648300, 1.000000000000000000), + ( 0.8047378541243649400, 0.6476030138606875300, 0.6476030138606875300, 0.8047378541243649400), + ( 0.8047378541243649400, 0.6476030138606875300, 0.6476030138606875300, 0.8047378541243649400), + ( 1.000000000000000000, 0.8047378541243648300, 0.8047378541243648300, 1.000000000000000000) ) ) + REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); +#40233 = EDGE_CURVE ( 'NONE', #12200, #7741, #22349, .T. ) ; +#40232 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32951 ), #20803 ) ; +#40234 = SURFACE_STYLE_USAGE ( .BOTH. , #4526 ) ; +#40235 = DIRECTION ( 'NONE', ( -5.695189303027880500E-032, 2.367138801244514300E-016, 1.000000000000000000 ) ) ; +#40236 = ORIENTED_EDGE ( 'NONE', *, *, #19606, .T. ) ; +#40237 = PLANE ( 'NONE', #28189 ) ; +#40238 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000005300, 0.2800017452961674500, -4.400000000000000400 ) ) ; +#40240 = AXIS2_PLACEMENT_3D ( 'NONE', #19085, #22321, #38659 ) ; +#40239 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #18627 ), #15636 ) ; +#40241 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15941 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10341, #32960, #13611 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40242 = ORIENTED_EDGE ( 'NONE', *, *, #36352, .F. ) ; +#40243 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.3499999999999999800, -1.250000000000000000 ) ) ; +#40244 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40245 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5344, 'distance_accuracy_value', 'NONE'); +#40246 = STYLED_ITEM ( 'NONE', ( #25588 ), #32862 ) ; +#40247 = FILL_AREA_STYLE_COLOUR ( '', #21439 ) ; +#40248 = ADVANCED_FACE ( 'NONE', ( #19802 ), #8655, .F. ) ; +#40249 = ORIENTED_EDGE ( 'NONE', *, *, #14996, .T. ) ; +#40250 = VERTEX_POINT ( 'NONE', #37510 ) ; +#40251 = ORIENTED_EDGE ( 'NONE', *, *, #28907, .F. ) ; +#40252 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40253 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40254 = VECTOR ( 'NONE', #28195, 1000.000000000000000 ) ; +#40255 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40256 = PRESENTATION_STYLE_ASSIGNMENT (( #14950 ) ) ; +#40257 = ORIENTED_EDGE ( 'NONE', *, *, #26563, .F. ) ; +#40258 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.2800017452961688400, -5.250000000000000000 ) ) ; +#40259 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, -0.7071067811865483500 ) ) ; +#40260 = FILL_AREA_STYLE ('',( #37447 ) ) ; +#40261 = VECTOR ( 'NONE', #3880, 1000.000000000000000 ) ; +#40262 = FILL_AREA_STYLE ('',( #34058 ) ) ; +#40263 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40264 = VECTOR ( 'NONE', #5534, 1000.000000000000000 ) ; +#40265 = CIRCLE ( 'NONE', #8170, 0.3000000000000003800 ) ; +#40266 = CARTESIAN_POINT ( 'NONE', ( -2.486602540378443700, 1.630001745296169500, -1.700000000000002000 ) ) ; +#40267 = EDGE_CURVE ( 'NONE', #24532, #17767, #25868, .T. ) ; +#40268 = ORIENTED_EDGE ( 'NONE', *, *, #34913, .F. ) ; +#40269 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40270 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#40271 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 10.30000000000000100, -1.250000000000000000 ) ) ; +#40272 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40273 = EDGE_CURVE ( 'NONE', #27845, #26417, #4087, .T. ) ; +#40274 = ORIENTED_EDGE ( 'NONE', *, *, #14799, .T. ) ; +#40275 = FILL_AREA_STYLE_COLOUR ( '', #36279 ) ; +#40276 = CARTESIAN_POINT ( 'NONE', ( -4.920000000000004400, -1.400001745296196400, -7.500000000000000900 ) ) ; +#40277 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40278 = EDGE_LOOP ( 'NONE', ( #16358, #12451, #19357, #25146, #33124, #36555, #8705, #27426, #36966, #2256, #41772, #37487 ) ) ; +#40279 = ORIENTED_EDGE ( 'NONE', *, *, #15282, .T. ) ; +#40280 = ORIENTED_EDGE ( 'NONE', *, *, #1849, .T. ) ; +#40281 = LINE ( 'NONE', #21793, #8955 ) ; +#40282 = STYLED_ITEM ( 'NONE', ( #34956 ), #12946 ) ; +#40283 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#40284 = PRESENTATION_STYLE_ASSIGNMENT (( #7389 ) ) ; +#40285 = SURFACE_STYLE_FILL_AREA ( #13831 ) ; +#40288 = EDGE_CURVE ( 'NONE', #1846, #36470, #8615, .T. ) ; +#40287 = AXIS2_PLACEMENT_3D ( 'NONE', #3090, #38779, #41609 ) ; +#40286 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -2.604459358809383800 ) ) ; +#40289 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#40290 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40291 = ORIENTED_EDGE ( 'NONE', *, *, #13413, .F. ) ; +#40292 = VERTEX_POINT ( 'NONE', #15205 ) ; +#40293 = ADVANCED_FACE ( 'NONE', ( #6598 ), #5108, .T. ) ; +#40295 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39992 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9430, #18945, #22459 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40294 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9751 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20580, #1232, #27057 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40296 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40297 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40298 = SURFACE_STYLE_FILL_AREA ( #39214 ) ; +#40299 = AXIS2_PLACEMENT_3D ( 'NONE', #41473, #41737, #25685 ) ; +#40300 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#40302 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #24753 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25229, #34944, #24958 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40301 = STYLED_ITEM ( 'NONE', ( #23306 ), #34033 ) ; +#40303 = ORIENTED_EDGE ( 'NONE', *, *, #10200, .T. ) ; +#40304 = CYLINDRICAL_SURFACE ( 'NONE', #919, 0.2000000000000000900 ) ; +#40305 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#40307 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #25205 ) ) ; +#40306 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40308 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, 0.0000000000000000000 ) ) ; +#40309 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40310 = FACE_OUTER_BOUND ( 'NONE', #14520, .T. ) ; +#40311 = ORIENTED_EDGE ( 'NONE', *, *, #26563, .T. ) ; +#40312 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#40313 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#40314 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.2999999999999999900, -1.399999999994000000 ) ) ; +#40316 = ORIENTED_EDGE ( 'NONE', *, *, #38417, .T. ) ; +#40315 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40317 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000006800, -0.2999999999999853300, -1.950000000000001300 ) ) ; +#40318 = CIRCLE ( 'NONE', #19545, 0.1000000000000002600 ) ; +#40319 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.2300017452961680700, -6.224999999999999600 ) ) ; +#40320 = SURFACE_SIDE_STYLE ('',( #15772 ) ) ; +#40321 = SURFACE_STYLE_FILL_AREA ( #13778 ) ; +#40322 = CLOSED_SHELL ( 'NONE', ( #2131, #33202, #17323, #4044, #34287, #36057 ) ) ; +#40323 = ORIENTED_EDGE ( 'NONE', *, *, #2188, .F. ) ; +#40324 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#40325 = LINE ( 'NONE', #33774, #36312 ) ; +#40326 = VECTOR ( 'NONE', #29429, 1000.000000000000000 ) ; +#40327 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000001800, 0.6800017452961724100, -1.649999999999999500 ) ) ; +#40328 = VECTOR ( 'NONE', #6687, 1000.000000000000000 ) ; +#40329 = FILL_AREA_STYLE ('',( #17785 ) ) ; +#40330 = ORIENTED_EDGE ( 'NONE', *, *, #29386, .T. ) ; +#40331 = FILL_AREA_STYLE ('',( #14655 ) ) ; +#40332 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40334 = SURFACE_STYLE_FILL_AREA ( #16190 ) ; +#40333 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664844900, -1.080001745296171900, -6.850000000000000500 ) ) ; +#40335 = ORIENTED_EDGE ( 'NONE', *, *, #17195, .F. ) ; +#40336 = ORIENTED_EDGE ( 'NONE', *, *, #29138, .T. ) ; +#40337 = EDGE_CURVE ( 'NONE', #41672, #11160, #7604, .T. ) ; +#40338 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#40339 = FILL_AREA_STYLE_COLOUR ( '', #16957 ) ; +#40340 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #29159, 'distance_accuracy_value', 'NONE'); +#40341 = SURFACE_SIDE_STYLE ('',( #22567 ) ) ; +#40342 = EDGE_CURVE ( 'NONE', #35937, #6188, #32366, .T. ) ; +#40343 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #22889 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41063, #18904, #8971 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40344 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #37420, 'distance_accuracy_value', 'NONE'); +#40345 = VERTEX_POINT ( 'NONE', #34544 ) ; +#40346 = SURFACE_STYLE_FILL_AREA ( #37086 ) ; +#40347 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37395 ) ) ; +#40348 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.931303021499040500, -0.3590461068823618300 ) ) ; +#40349 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #29532 ), #12761 ) ; +#40350 = SURFACE_STYLE_FILL_AREA ( #39866 ) ; +#40351 = SURFACE_SIDE_STYLE ('',( #18764 ) ) ; +#40352 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, -500000.0000000000600, -2.604459358691023400 ) ) ; +#40355 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4792, 'distance_accuracy_value', 'NONE'); +#40354 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #33074 ), #25253 ) ; +#40353 = LINE ( 'NONE', #17200, #8497 ) ; +#40356 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #30911 ), #11405 ) ; +#40357 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 1.480001745296170200, -4.099999999999999600 ) ) ; +#40359 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38204 ) ) ; +#40358 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40029 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25927, #35677, #9931 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40360 = VERTEX_POINT ( 'NONE', #5593 ) ; +#40361 = FACE_OUTER_BOUND ( 'NONE', #17512, .T. ) ; +#40364 = EDGE_CURVE ( 'NONE', #22142, #38103, #39940, .T. ) ; +#40363 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#40362 = STYLED_ITEM ( 'NONE', ( #40284 ), #34745 ) ; +#40365 = CARTESIAN_POINT ( 'NONE', ( -2.673205080756886800, 1.630001745296169500, -1.650000000000000800 ) ) ; +#40366 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40367 = LINE ( 'NONE', #3433, #10043 ) ; +#40368 = SURFACE_STYLE_USAGE ( .BOTH. , #17816 ) ; +#40369 = FILL_AREA_STYLE_COLOUR ( '', #30345 ) ; +#40370 = ORIENTED_EDGE ( 'NONE', *, *, #22117, .F. ) ; +#40371 = ADVANCED_FACE ( 'NONE', ( #22777 ), #39461, .T. ) ; +#40372 = AXIS2_PLACEMENT_3D ( 'NONE', #30452, #23683, #40179 ) ; +#40373 = FACE_OUTER_BOUND ( 'NONE', #21136, .T. ) ; +#40374 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #41337, 'distance_accuracy_value', 'NONE'); +#40375 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, -2.322941965694886000, 0.3499999999999999800 ) ) ; +#40376 = VECTOR ( 'NONE', #36672, 999.9999999999998900 ) ; +#40377 = EDGE_LOOP ( 'NONE', ( #27538, #41154, #21541, #12663 ) ) ; +#40378 = FACE_OUTER_BOUND ( 'NONE', #26756, .T. ) ; +#40379 = ORIENTED_EDGE ( 'NONE', *, *, #11661, .F. ) ; +#40380 = ORIENTED_EDGE ( 'NONE', *, *, #16111, .F. ) ; +#40381 = SURFACE_SIDE_STYLE ('',( #26236 ) ) ; +#40382 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000002400, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#40383 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40384 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 6.056601140521967900E-031 ) ) ; +#40385 = ORIENTED_EDGE ( 'NONE', *, *, #27482, .T. ) ; +#40386 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#40387 = FILL_AREA_STYLE_COLOUR ( '', #468 ) ; +#40388 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, -0.07499999999999998300, -1.399999999999999900 ) ) ; +#40389 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875040000E-015, 6.056601140521967000E-031 ) ) ; +#40390 = CARTESIAN_POINT ( 'NONE', ( 0.2500000000000032800, 0.2800017452961687200, -6.749999999999999100 ) ) ; +#40391 = CARTESIAN_POINT ( 'NONE', ( -3.177256626512261900, 0.07499999999999999700, -0.1317835409497332400 ) ) ; +#40392 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40393 = EDGE_CURVE ( 'NONE', #38543, #894, #17782, .T. ) ; +#40394 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#40395 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40396 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40397 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#40398 = EDGE_CURVE ( 'NONE', #13500, #36746, #7110, .T. ) ; +#40399 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #39759 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39715, #16415, #19275 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40400 = VERTEX_POINT ( 'NONE', #12205 ) ; +#40401 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, -1.380001745296143100, -4.781671842700004200 ) ) ; +#40402 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, 0.2000000000000000100, -1.600000000000000300 ) ) ; +#40403 = FACE_OUTER_BOUND ( 'NONE', #31362, .T. ) ; +#40404 = ADVANCED_FACE ( 'NONE', ( #19276 ), #38855, .F. ) ; +#40405 = ORIENTED_EDGE ( 'NONE', *, *, #38723, .F. ) ; +#40406 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.2339555568811695900 ) ) ; +#40407 = ORIENTED_EDGE ( 'NONE', *, *, #22605, .F. ) ; +#40408 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38430, 'distance_accuracy_value', 'NONE'); +#40409 = ORIENTED_EDGE ( 'NONE', *, *, #8537, .F. ) ; +#40410 = SURFACE_STYLE_FILL_AREA ( #37528 ) ; +#40411 = LINE ( 'NONE', #25299, #37389 ) ; +#40412 = FACE_OUTER_BOUND ( 'NONE', #19019, .T. ) ; +#40413 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, 10.30000000000000100, -1.250000000000000000 ) ) ; +#40414 = ORIENTED_EDGE ( 'NONE', *, *, #21644, .T. ) ; +#40415 = LINE ( 'NONE', #21212, #34891 ) ; +#40416 = CLOSED_SHELL ( 'NONE', ( #13795, #13305, #16713, #12946, #24670, #8458 ) ) ; +#40417 = ORIENTED_EDGE ( 'NONE', *, *, #8538, .T. ) ; +#40418 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#40419 = STYLED_ITEM ( 'NONE', ( #26258 ), #19763 ) ; +#40420 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #23111 ), #704 ) ; +#40421 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019659000E-017 ) ) ; +#40422 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000006800, -0.5199999999999849200, -5.200000000000000200 ) ) ; +#40423 = CARTESIAN_POINT ( 'NONE', ( 0.6500000000000000200, -1.499998254703827700, -6.299999999999993600 ) ) ; +#40424 = ADVANCED_FACE ( 'NONE', ( #30879 ), #10648, .F. ) ; +#40425 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8661 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21399, #32221, #12857 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40426 = CARTESIAN_POINT ( 'NONE', ( -1.100000000000000100, -2.322941965694886000, -1.250000000000000000 ) ) ; +#40428 = EDGE_CURVE ( 'NONE', #2583, #9003, #5642, .T. ) ; +#40427 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7137 ) ) ; +#40429 = EDGE_LOOP ( 'NONE', ( #7232, #16519, #32791, #9076 ) ) ; +#40430 = SURFACE_STYLE_USAGE ( .BOTH. , #33399 ) ; +#40431 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#40432 = LINE ( 'NONE', #17194, #2591 ) ; +#40433 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -0.2339555568811695400 ) ) ; +#40435 = STYLED_ITEM ( 'NONE', ( #31240 ), #2013 ) ; +#40434 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #37481 ), #39627 ) ; +#40436 = AXIS2_PLACEMENT_3D ( 'NONE', #30547, #17581, #37041 ) ; +#40437 = SURFACE_STYLE_FILL_AREA ( #26505 ) ; +#40438 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40439 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#40440 = CYLINDRICAL_SURFACE ( 'NONE', #37352, 0.1499999999998701300 ) ; +#40441 = SURFACE_SIDE_STYLE ('',( #34171 ) ) ; +#40442 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #36585, #14689, #20671, #17954, #24017, #37287 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#40443 = SURFACE_STYLE_FILL_AREA ( #27390 ) ; +#40444 = CARTESIAN_POINT ( 'NONE', ( -4.692207176641545600, -0.1199982547038627400, -6.526326723416070200 ) ) ; +#40445 = EDGE_LOOP ( 'NONE', ( #23213, #10004, #29019, #16569 ) ) ; +#40446 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#40447 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#40448 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865468000, 0.7071067811865483500 ) ) ; +#40449 = VECTOR ( 'NONE', #19203, 1000.000000000000000 ) ; +#40450 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999900, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#40451 = EDGE_LOOP ( 'NONE', ( #33137, #9539, #3938, #14339, #41253, #3737 ) ) ; +#40452 = EDGE_LOOP ( 'NONE', ( #19379, #12835, #33720 ) ) ; +#40453 = SURFACE_SIDE_STYLE ('',( #6989 ) ) ; +#40454 = LINE ( 'NONE', #24452, #5086 ) ; +#40455 = VECTOR ( 'NONE', #19404, 1000.000000000000100 ) ; +#40456 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#40457 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40458 = ORIENTED_EDGE ( 'NONE', *, *, #5671, .F. ) ; +#40459 = EDGE_CURVE ( 'NONE', #28001, #25807, #38970, .T. ) ; +#40460 = ORIENTED_EDGE ( 'NONE', *, *, #39409, .F. ) ; +#40462 = ADVANCED_FACE ( 'NONE', ( #24335 ), #2113, .F. ) ; +#40461 = ORIENTED_EDGE ( 'NONE', *, *, #13776, .F. ) ; +#40463 = PLANE ( 'NONE', #2001 ) ; +#40464 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40465 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40466 = SURFACE_STYLE_USAGE ( .BOTH. , #2381 ) ; +#40467 = EDGE_CURVE ( 'NONE', #27531, #13925, #37970, .T. ) ; +#40468 = PLANE ( 'NONE', #28322 ) ; +#40469 = ORIENTED_EDGE ( 'NONE', *, *, #36897, .T. ) ; +#40470 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#40471 = ORIENTED_EDGE ( 'NONE', *, *, #22972, .F. ) ; +#40472 = PRESENTATION_STYLE_ASSIGNMENT (( #40891 ) ) ; +#40473 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#40474 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1395 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41035, #31297, #15050 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40475 = VECTOR ( 'NONE', #9646, 1000.000000000000000 ) ; +#40476 = FACE_OUTER_BOUND ( 'NONE', #9689, .T. ) ; +#40477 = PLANE ( 'NONE', #34070 ) ; +#40478 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#40479 = CARTESIAN_POINT ( 'NONE', ( 2.600000000000000100, -1.380001745296128200, -4.781671842700004200 ) ) ; +#40480 = AXIS2_PLACEMENT_3D ( 'NONE', #243, #22788, #22925 ) ; +#40481 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10158 ), #39677 ) ; +#40482 = CARTESIAN_POINT ( 'NONE', ( 4.542777971927782800, 0.08000174529616691000, -6.539400084828217900 ) ) ; +#40483 = VECTOR ( 'NONE', #41215, 1000.000000000000000 ) ; +#40484 = FILL_AREA_STYLE ('',( #30620 ) ) ; +#40485 = EDGE_LOOP ( 'NONE', ( #4530, #37588, #34646, #729 ) ) ; +#40486 = EDGE_CURVE ( 'NONE', #28223, #25413, #35964, .T. ) ; +#40487 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#40488 = DIRECTION ( 'NONE', ( -0.9396926207856547400, 0.0000000000000000000, 0.3420201433263653800 ) ) ; +#40489 = ORIENTED_EDGE ( 'NONE', *, *, #10146, .T. ) ; +#40491 = STYLED_ITEM ( 'NONE', ( #21473 ), #2805 ) ; +#40490 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #774 ) ) ; +#40492 = AXIS2_PLACEMENT_3D ( 'NONE', #13801, #1143, #5026 ) ; +#40493 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#40494 = CYLINDRICAL_SURFACE ( 'NONE', #3086, 0.3600000000000078700 ) ; +#40495 = VERTEX_POINT ( 'NONE', #35100 ) ; +#40496 = FILL_AREA_STYLE ('',( #24734 ) ) ; +#40497 = LINE ( 'NONE', #37074, #35463 ) ; +#40498 = ORIENTED_EDGE ( 'NONE', *, *, #8832, .T. ) ; +#40499 = PLANE ( 'NONE', #3510 ) ; +#40500 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21292 ) ) ; +#40501 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#40502 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, 0.2999999999999999900, -1.600000000000000100 ) ) ; +#40503 = ORIENTED_EDGE ( 'NONE', *, *, #20471, .T. ) ; +#40504 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40505 = LINE ( 'NONE', #1865, #24918 ) ; +#40506 = ORIENTED_EDGE ( 'NONE', *, *, #7615, .T. ) ; +#40507 = ADVANCED_FACE ( 'NONE', ( #20299 ), #12668, .T. ) ; +#40508 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40509 = VECTOR ( 'NONE', #36283, 1000.000000000000000 ) ; +#40510 = VECTOR ( 'NONE', #39256, 1000.000000000000000 ) ; +#40511 = CARTESIAN_POINT ( 'NONE', ( -1.350000000000000100, -1.380001745296132400, -6.699999999999994000 ) ) ; +#40512 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40513 = PLANE ( 'NONE', #3026 ) ; +#40514 = LINE ( 'NONE', #29996, #17288 ) ; +#40515 = FILL_AREA_STYLE ('',( #14975 ) ) ; +#40516 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39735, 'distance_accuracy_value', 'NONE'); +#40517 = EDGE_CURVE ( 'NONE', #11920, #25527, #7111, .T. ) ; +#40518 = CARTESIAN_POINT ( 'NONE', ( -1.400000000000000800, 1.630001745296169500, -1.650000000000000400 ) ) ; +#40519 = ORIENTED_EDGE ( 'NONE', *, *, #19627, .T. ) ; +#40520 = CARTESIAN_POINT ( 'NONE', ( 3.095000000000000200, 0.07500000000000001100, -0.2697823249193472300 ) ) ; +#40521 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -0.2999999999999999900, 0.3499999999999999800 ) ) ; +#40522 = EDGE_CURVE ( 'NONE', #23565, #3055, #30882, .T. ) ; +#40523 = VERTEX_POINT ( 'NONE', #13033 ) ; +#40524 = STYLED_ITEM ( 'NONE', ( #7916 ), #17580 ) ; +#40525 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40526 = PLANE ( 'NONE', #38576 ) ; +#40527 = EDGE_CURVE ( 'NONE', #20628, #16591, #11655, .T. ) ; +#40528 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20133, 'distance_accuracy_value', 'NONE'); +#40529 = DIRECTION ( 'NONE', ( -1.156482317317871700E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40530 = EDGE_LOOP ( 'NONE', ( #19671, #18370, #10863, #40878 ) ) ; +#40531 = AXIS2_PLACEMENT_3D ( 'NONE', #15034, #8515, #18441 ) ; +#40532 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, -0.2000000000000000100, -18.77614000000000500 ) ) ; +#40533 = CIRCLE ( 'NONE', #19793, 0.1000000000000002600 ) ; +#40534 = ORIENTED_EDGE ( 'NONE', *, *, #18106, .T. ) ; +#40535 = AXIS2_PLACEMENT_3D ( 'NONE', #40518, #14699, #27273 ) ; +#40536 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999500, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#40538 = EDGE_CURVE ( 'NONE', #39725, #37465, #34938, .T. ) ; +#40537 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#40539 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000010300, -1.999998254703822000, -2.599999999999999600 ) ) ; +#40540 = ORIENTED_EDGE ( 'NONE', *, *, #23091, .T. ) ; +#40541 = CIRCLE ( 'NONE', #10471, 0.2000017452961698200 ) ; +#40542 = ORIENTED_EDGE ( 'NONE', *, *, #18170, .F. ) ; +#40543 = DIRECTION ( 'NONE', ( 4.798681814596971500E-016, 1.000000000000000000, 3.410973126920707600E-015 ) ) ; +#40544 = VECTOR ( 'NONE', #3639, 1000.000000000000000 ) ; +#40545 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#40547 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #34989 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31720, #9231, #28332 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40546 = STYLED_ITEM ( 'NONE', ( #18958 ), #28343 ) ; +#40548 = VECTOR ( 'NONE', #2207, 1000.000000000000000 ) ; +#40549 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#40550 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28821 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #24583, #31036, #34165 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40551 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#40552 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2719 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19253, #6507, #35053 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40553 = FACE_OUTER_BOUND ( 'NONE', #24053, .T. ) ; +#40554 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -9.035070666963931600E-017 ) ) ; +#40555 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40556 = VECTOR ( 'NONE', #7975, 1000.000000000000000 ) ; +#40557 = SURFACE_STYLE_USAGE ( .BOTH. , #37055 ) ; +#40558 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #26889, 'distance_accuracy_value', 'NONE'); +#40559 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#40560 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2999999999999999900, 0.0000000000000000000 ) ) ; +#40561 = ORIENTED_EDGE ( 'NONE', *, *, #28841, .F. ) ; +#40562 = FACE_OUTER_BOUND ( 'NONE', #21012, .T. ) ; +#40563 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#40564 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40565 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40566 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33504, 'distance_accuracy_value', 'NONE'); +#40567 = PLANE ( 'NONE', #13533 ) ; +#40568 = ORIENTED_EDGE ( 'NONE', *, *, #37142, .F. ) ; +#40569 = CARTESIAN_POINT ( 'NONE', ( -4.170000000000001700, 0.2800000000000026900, -0.2000017452961698200 ) ) ; +#40571 = LINE ( 'NONE', #27445, #14809 ) ; +#40570 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#40572 = SURFACE_STYLE_USAGE ( .BOTH. , #15031 ) ; +#40573 = VERTEX_POINT ( 'NONE', #41853 ) ; +#40574 = ORIENTED_EDGE ( 'NONE', *, *, #39440, .F. ) ; +#40576 = ORIENTED_EDGE ( 'NONE', *, *, #24866, .F. ) ; +#40575 = VECTOR ( 'NONE', #25528, 1000.000000000000000 ) ; +#40577 = VERTEX_POINT ( 'NONE', #28599 ) ; +#40578 = ADVANCED_FACE ( 'NONE', ( #1624 ), #38332, .F. ) ; +#40579 = SURFACE_STYLE_USAGE ( .BOTH. , #34248 ) ; +#40580 = CARTESIAN_POINT ( 'NONE', ( 2.350000000000000100, -1.380001745296129100, -6.031671842700004200 ) ) ; +#40581 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#40582 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#40583 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#40584 = CYLINDRICAL_SURFACE ( 'NONE', #13658, 0.7999999999999999300 ) ; +#40585 = ORIENTED_EDGE ( 'NONE', *, *, #25887, .F. ) ; +#40586 = EDGE_CURVE ( 'NONE', #1402, #31175, #29329, .T. ) ; +#40587 = FILL_AREA_STYLE ('',( #31137 ) ) ; +#40588 = PRESENTATION_STYLE_ASSIGNMENT (( #34189 ) ) ; +#40589 = EDGE_CURVE ( 'NONE', #33050, #36319, #8086, .T. ) ; +#40590 = STYLED_ITEM ( 'NONE', ( #1553 ), #23663 ) ; +#40591 = PLANE ( 'NONE', #10984 ) ; +#40592 = CARTESIAN_POINT ( 'NONE', ( 3.316450459800341900, 0.07499999999999999700, -0.07304742759850627000 ) ) ; +#40593 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40594 = LINE ( 'NONE', #10816, #15839 ) ; +#40595 = LINE ( 'NONE', #2709, #32011 ) ; +#40596 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.480001745296167600, -4.200000000000000200 ) ) ; +#40597 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #16548 ), #5167 ) ; +#40598 = FILL_AREA_STYLE_COLOUR ( '', #2707 ) ; +#40599 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40600 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.2800017452961687200, -6.249999999999998200 ) ) ; +#40601 = AXIS2_PLACEMENT_3D ( 'NONE', #8547, #1841, #17910 ) ; +#40602 = CARTESIAN_POINT ( 'NONE', ( 3.575000000000001100, 1.167528855492239800, -14.55000000000000100 ) ) ; +#40603 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #23051 ) ) ; +#40604 = CARTESIAN_POINT ( 'NONE', ( 2.100000000000000100, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#40605 = ORIENTED_EDGE ( 'NONE', *, *, #30706, .T. ) ; +#40607 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21180 ), #31162 ) ; +#40606 = AXIS2_PLACEMENT_3D ( 'NONE', #17838, #27161, #17419 ) ; +#40608 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#40609 = EDGE_CURVE ( 'NONE', #30158, #13228, #12137, .T. ) ; +#40610 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000003000, 0.2800017452961687200, -6.150000000000000400 ) ) ; +#40611 = VERTEX_POINT ( 'NONE', #20278 ) ; +#40612 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40613 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40614 = ADVANCED_FACE ( 'NONE', ( #10109 ), #13453, .F. ) ; +#40615 = ORIENTED_EDGE ( 'NONE', *, *, #7292, .F. ) ; +#40616 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9497 ) ) ; +#40617 = EDGE_LOOP ( 'NONE', ( #31110, #30625, #9439, #39919 ) ) ; +#40618 = ORIENTED_EDGE ( 'NONE', *, *, #41811, .F. ) ; +#40619 = SURFACE_STYLE_USAGE ( .BOTH. , #1988 ) ; +#40620 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9242 ), #7325 ) ; +#40621 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.388131789017207300E-015, -1.000000000000000000 ) ) ; +#40622 = VECTOR ( 'NONE', #1186, 1000.000000000000000 ) ; +#40623 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -2.367138801244516300E-016 ) ) ; +#40624 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000100, -1.380001745296144800, -4.781671842700004200 ) ) ; +#40625 = PLANE ( 'NONE', #13377 ) ; +#40626 = FACE_OUTER_BOUND ( 'NONE', #41512, .T. ) ; +#40627 = ADVANCED_FACE ( 'NONE', ( #34411 ), #35804, .F. ) ; +#40629 = FACE_OUTER_BOUND ( 'NONE', #4973, .T. ) ; +#40628 = CARTESIAN_POINT ( 'NONE', ( -2.100000000000000100, -0.3500000000000000300, 0.1499999999999999900 ) ) ; +#40631 = CYLINDRICAL_SURFACE ( 'NONE', #41850, 0.1000000000000002600 ) ; +#40630 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#40632 = VECTOR ( 'NONE', #37862, 1000.000000000000000 ) ; +#40633 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40634 = SURFACE_STYLE_USAGE ( .BOTH. , #5336 ) ; +#40635 = SURFACE_SIDE_STYLE ('',( #26676 ) ) ; +#40636 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#40637 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40638 = ORIENTED_EDGE ( 'NONE', *, *, #20408, .F. ) ; +#40639 = ORIENTED_EDGE ( 'NONE', *, *, #15057, .T. ) ; +#40640 = EDGE_CURVE ( 'NONE', #17460, #6139, #7606, .T. ) ; +#40641 = LINE ( 'NONE', #30377, #13876 ) ; +#40642 = FILL_AREA_STYLE_COLOUR ( '', #27395 ) ; +#40643 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40644 = SURFACE_SIDE_STYLE ('',( #41439 ) ) ; +#40645 = VERTEX_POINT ( 'NONE', #13749 ) ; +#40646 = VECTOR ( 'NONE', #4752, 1000.000000000000000 ) ; +#40647 = EDGE_CURVE ( 'NONE', #9975, #19867, #15684, .T. ) ; +#40648 = LINE ( 'NONE', #41522, #22009 ) ; +#40649 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #20393 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #23236, #32695, #6842 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40650 = SURFACE_STYLE_FILL_AREA ( #25463 ) ; +#40651 = FACE_OUTER_BOUND ( 'NONE', #6988, .T. ) ; +#40652 = FILL_AREA_STYLE ('',( #27831 ) ) ; +#40653 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244514300E-016 ) ) ; +#40654 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#40655 = VERTEX_POINT ( 'NONE', #16851 ) ; +#40656 = CIRCLE ( 'NONE', #30025, 0.2000017452961698200 ) ; +#40657 = ORIENTED_EDGE ( 'NONE', *, *, #37135, .T. ) ; +#40658 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, 0.5300017452961696100, -3.999999999999998200 ) ) ; +#40659 = AXIS2_PLACEMENT_3D ( 'NONE', #40426, #27733, #27438 ) ; +#40660 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40661 = CYLINDRICAL_SURFACE ( 'NONE', #26797, 0.3600000000000078700 ) ; +#40662 = FILL_AREA_STYLE ('',( #7207 ) ) ; +#40663 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #34483, 'distance_accuracy_value', 'NONE'); +#40664 = ORIENTED_EDGE ( 'NONE', *, *, #2010, .F. ) ; +#40665 = CARTESIAN_POINT ( 'NONE', ( -3.138630729056917100, 0.07499999999999998300, -0.07531789451543242900 ) ) ; +#40666 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 0.3250000000000000700, -1.274999999999999900 ) ) ; +#40667 = FACE_OUTER_BOUND ( 'NONE', #22576, .T. ) ; +#40668 = CIRCLE ( 'NONE', #37727, 0.1000000000000002600 ) ; +#40670 = ORIENTED_EDGE ( 'NONE', *, *, #40903, .F. ) ; +#40669 = ADVANCED_FACE ( 'NONE', ( #8619, #5600 ), #39154, .F. ) ; +#40671 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6048 ), #38497 ) ; +#40672 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#40673 = AXIS2_PLACEMENT_3D ( 'NONE', #29082, #22601, #455 ) ; +#40674 = FACE_OUTER_BOUND ( 'NONE', #20692, .T. ) ; +#40677 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #19862 ) ) ; +#40676 = SURFACE_SIDE_STYLE ('',( #2993 ) ) ; +#40675 = AXIS2_PLACEMENT_3D ( 'NONE', #31378, #11450, #15288 ) ; +#40678 = CARTESIAN_POINT ( 'NONE', ( -4.620380236995680800, -0.2799999999999974200, -0.8400000000000000800 ) ) ; +#40679 = CARTESIAN_POINT ( 'NONE', ( -3.119636707815099300, -0.2999999999999999300, 1.000000000000057500 ) ) ; +#40680 = EDGE_LOOP ( 'NONE', ( #41126, #31364, #32151, #990 ) ) ; +#40682 = EDGE_CURVE ( 'NONE', #6398, #2376, #17738, .T. ) ; +#40681 = STYLED_ITEM ( 'NONE', ( #21750 ), #35750 ) ; +#40683 = FILL_AREA_STYLE ('',( #34614 ) ) ; +#40684 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36929 ) ) ; +#40685 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#40686 = ORIENTED_EDGE ( 'NONE', *, *, #28354, .F. ) ; +#40687 = CARTESIAN_POINT ( 'NONE', ( 4.425000000000012300, -1.999998254703822400, -2.599999999999999600 ) ) ; +#40688 = FACE_OUTER_BOUND ( 'NONE', #37592, .T. ) ; +#40689 = SURFACE_STYLE_USAGE ( .BOTH. , #37864 ) ; +#40690 = ORIENTED_EDGE ( 'NONE', *, *, #11171, .T. ) ; +#40691 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#40692 = VECTOR ( 'NONE', #28699, 1000.000000000000000 ) ; +#40693 = ORIENTED_EDGE ( 'NONE', *, *, #18725, .T. ) ; +#40694 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.480001745296169800, -1.149999999999999900 ) ) ; +#40695 = PRESENTATION_STYLE_ASSIGNMENT (( #31623 ) ) ; +#40696 = ORIENTED_EDGE ( 'NONE', *, *, #6593, .F. ) ; +#40697 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000012400, -1.949998254703821300, -3.632287565553231200 ) ) ; +#40698 = SURFACE_SIDE_STYLE ('',( #19162 ) ) ; +#40699 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14208, 'distance_accuracy_value', 'NONE'); +#40700 = ORIENTED_EDGE ( 'NONE', *, *, #11088, .T. ) ; +#40701 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026900, -0.2339555568811695900 ) ) ; +#40702 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, -0.07499999999999999700, 0.009999999999999995000 ) ) ; +#40703 = SURFACE_STYLE_FILL_AREA ( #32572 ) ; +#40704 = CIRCLE ( 'NONE', #13489, 1.686063034915694000 ) ; +#40705 = VERTEX_POINT ( 'NONE', #39296 ) ; +#40706 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 2.032879073410321300E-016 ) ) ; +#40707 = PLANE ( 'NONE', #34937 ) ; +#40708 = VECTOR ( 'NONE', #14489, 1000.000000000000000 ) ; +#40709 = EDGE_CURVE ( 'NONE', #1969, #12039, #16176, .T. ) ; +#40710 = SURFACE_STYLE_FILL_AREA ( #34624 ) ; +#40711 = LINE ( 'NONE', #39035, #5837 ) ; +#40712 = VECTOR ( 'NONE', #4965, 1000.000000000000000 ) ; +#40713 = ORIENTED_EDGE ( 'NONE', *, *, #5049, .F. ) ; +#40714 = EDGE_CURVE ( 'NONE', #36273, #22336, #11099, .T. ) ; +#40715 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865474600 ) ) ; +#40716 = SURFACE_STYLE_USAGE ( .BOTH. , #34790 ) ; +#40717 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#40718 = ORIENTED_EDGE ( 'NONE', *, *, #41347, .F. ) ; +#40719 = ADVANCED_FACE ( 'NONE', ( #30324 ), #24054, .F. ) ; +#40720 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40721 = AXIS2_PLACEMENT_3D ( 'NONE', #8394, #11917, #30739 ) ; +#40722 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 9.268445570935432200E-016, -1.000000000000000000 ) ) ; +#40723 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40724 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#40725 = CARTESIAN_POINT ( 'NONE', ( 4.365000000000002900, 0.2800017452961685000, -7.500000000000000000 ) ) ; +#40726 = ORIENTED_EDGE ( 'NONE', *, *, #27869, .F. ) ; +#40727 = AXIS2_PLACEMENT_3D ( 'NONE', #26607, #7227, #27173 ) ; +#40728 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.2999999999999999900, -1.250000000000000000 ) ) ; +#40729 = SURFACE_SIDE_STYLE ('',( #35662 ) ) ; +#40730 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #36428 ) ) ; +#40731 = STYLED_ITEM ( 'NONE', ( #26434 ), #11380 ) ; +#40732 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40733 = ORIENTED_EDGE ( 'NONE', *, *, #24504, .F. ) ; +#40736 = EDGE_CURVE ( 'NONE', #6502, #31372, #6556, .T. ) ; +#40735 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40734 = STYLED_ITEM ( 'NONE', ( #20579 ), #36440 ) ; +#40737 = LINE ( 'NONE', #30339, #32146 ) ; +#40738 = ORIENTED_EDGE ( 'NONE', *, *, #7920, .T. ) ; +#40739 = ORIENTED_EDGE ( 'NONE', *, *, #9230, .F. ) ; +#40740 = FILL_AREA_STYLE_COLOUR ( '', #7955 ) ; +#40741 = VERTEX_POINT ( 'NONE', #27177 ) ; +#40742 = SURFACE_STYLE_FILL_AREA ( #192 ) ; +#40744 = AXIS2_PLACEMENT_3D ( 'NONE', #1028, #4079, #4347 ) ; +#40743 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8859 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #25553, #8988, #15522 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40745 = CARTESIAN_POINT ( 'NONE', ( -1.149999999999999900, -1.139998254717356800, -6.299996877890552400 ) ) ; +#40747 = LINE ( 'NONE', #12210, #9880 ) ; +#40746 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11792 ), #19696 ) ; +#40748 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#40749 = EDGE_LOOP ( 'NONE', ( #22910, #16643, #27721, #6729 ) ) ; +#40750 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11795 ), #32646 ) ; +#40751 = VERTEX_POINT ( 'NONE', #36497 ) ; +#40752 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -1.139998254717365900, -5.049996877890552400 ) ) ; +#40753 = VECTOR ( 'NONE', #23217, 1000.000000000000000 ) ; +#40754 = CIRCLE ( 'NONE', #6641, 0.09999999999999999200 ) ; +#40755 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#40756 = LINE ( 'NONE', #13488, #24079 ) ; +#40757 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.837630800822890800E-016 ) ) ; +#40758 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.4300017452961689100, -5.250000000000000000 ) ) ; +#40759 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40760 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#40761 = VECTOR ( 'NONE', #21573, 1000.000000000000100 ) ; +#40762 = SURFACE_SIDE_STYLE ('',( #3817 ) ) ; +#40763 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #24507, 'distance_accuracy_value', 'NONE'); +#40764 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40765 = ORIENTED_EDGE ( 'NONE', *, *, #4861, .T. ) ; +#40766 = LINE ( 'NONE', #19711, #37253 ) ; +#40767 = CIRCLE ( 'NONE', #34254, 0.09999999999999982500 ) ; +#40768 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.380001745296134800, -4.781671842700004200 ) ) ; +#40769 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40770 = EDGE_CURVE ( 'NONE', #9975, #37267, #7568, .T. ) ; +#40771 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#40772 = CARTESIAN_POINT ( 'NONE', ( -3.169999999999999900, 1.180001745296169700, -4.099999999999999600 ) ) ; +#40773 = EDGE_CURVE ( 'NONE', #4765, #22593, #36889, .T. ) ; +#40774 = EDGE_LOOP ( 'NONE', ( #32158, #7990, #37187, #13779 ) ) ; +#40775 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33472, 'distance_accuracy_value', 'NONE'); +#40776 = VECTOR ( 'NONE', #35637, 1000.000000000000000 ) ; +#40777 = SURFACE_SIDE_STYLE ('',( #37703 ) ) ; +#40778 = SURFACE_STYLE_FILL_AREA ( #6619 ) ; +#40779 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.845797985667148900, -0.3279248189596167300 ) ) ; +#40780 = EDGE_CURVE ( 'NONE', #37485, #4528, #20761, .T. ) ; +#40781 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.09999999999998497600, -4.250000000000000000 ) ) ; +#40782 = ORIENTED_EDGE ( 'NONE', *, *, #39664, .T. ) ; +#40783 = FACE_OUTER_BOUND ( 'NONE', #34961, .T. ) ; +#40784 = ORIENTED_EDGE ( 'NONE', *, *, #37880, .T. ) ; +#40785 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35664 ) ) ; +#40786 = SURFACE_STYLE_FILL_AREA ( #31084 ) ; +#40787 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40788 = SURFACE_STYLE_FILL_AREA ( #4630 ) ; +#40789 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#40790 = ORIENTED_EDGE ( 'NONE', *, *, #41779, .F. ) ; +#40791 = PLANE ( 'NONE', #26713 ) ; +#40792 = ORIENTED_EDGE ( 'NONE', *, *, #5743, .F. ) ; +#40793 = FACE_OUTER_BOUND ( 'NONE', #19911, .T. ) ; +#40794 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #29156 ) ) ; +#40795 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40796 = CARTESIAN_POINT ( 'NONE', ( 3.400000000000003500, 0.4300017452961686900, -6.450000000000000200 ) ) ; +#40797 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40798 = ADVANCED_FACE ( 'NONE', ( #10059 ), #30277, .T. ) ; +#40799 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3686 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #41007, #21837, #15451 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40800 = CARTESIAN_POINT ( 'NONE', ( -4.425000000000014000, -1.999998254703821500, -6.649261509947660200 ) ) ; +#40801 = CYLINDRICAL_SURFACE ( 'NONE', #11142, 0.09999999999999999200 ) ; +#40803 = EDGE_CURVE ( 'NONE', #14455, #23565, #37405, .T. ) ; +#40802 = AXIS2_PLACEMENT_3D ( 'NONE', #37576, #21244, #14845 ) ; +#40804 = SURFACE_STYLE_FILL_AREA ( #39454 ) ; +#40805 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40806 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6714 ) ) ; +#40807 = FILL_AREA_STYLE ('',( #15532 ) ) ; +#40808 = SURFACE_STYLE_USAGE ( .BOTH. , #5363 ) ; +#40809 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21367 ) ) ; +#40810 = CARTESIAN_POINT ( 'NONE', ( -3.044999999999999900, 0.07499999999999998300, -0.2498427124745999900 ) ) ; +#40811 = CYLINDRICAL_SURFACE ( 'NONE', #8976, 0.1000000000000004800 ) ; +#40812 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40813 = ORIENTED_EDGE ( 'NONE', *, *, #5965, .T. ) ; +#40814 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, 0.3500000000000000300, -1.300000000000000000 ) ) ; +#40815 = AXIS2_PLACEMENT_3D ( 'NONE', #23146, #35589, #16233 ) ; +#40816 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.4300017452961686900, -6.150000000000000400 ) ) ; +#40817 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000004800, 1.485063948690956900E-014, -3.099999999999998800 ) ) ; +#40818 = ORIENTED_EDGE ( 'NONE', *, *, #3963, .F. ) ; +#40819 = VECTOR ( 'NONE', #37169, 1000.000000000000000 ) ; +#40820 = SURFACE_STYLE_USAGE ( .BOTH. , #35363 ) ; +#40821 = ORIENTED_EDGE ( 'NONE', *, *, #1303, .F. ) ; +#40822 = PLANE ( 'NONE', #4183 ) ; +#40823 = ORIENTED_EDGE ( 'NONE', *, *, #31878, .T. ) ; +#40824 = ORIENTED_EDGE ( 'NONE', *, *, #31923, .F. ) ; +#40825 = PRESENTATION_STYLE_ASSIGNMENT (( #15271 ) ) ; +#40826 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40827 = CARTESIAN_POINT ( 'NONE', ( 1.899999999999999700, 0.2999999999999999900, -1.250000000000000000 ) ) ; +#40828 = FACE_OUTER_BOUND ( 'NONE', #2071, .T. ) ; +#40829 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#40830 = SURFACE_STYLE_FILL_AREA ( #36095 ) ; +#40831 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40832 = ORIENTED_EDGE ( 'NONE', *, *, #33243, .T. ) ; +#40834 = EDGE_LOOP ( 'NONE', ( #25131, #8306, #25741, #17940 ) ) ; +#40833 = ADVANCED_FACE ( 'NONE', ( #13122 ), #20847, .T. ) ; +#40835 = SURFACE_SIDE_STYLE ('',( #33149 ) ) ; +#40836 = FILL_AREA_STYLE_COLOUR ( '', #8789 ) ; +#40837 = CARTESIAN_POINT ( 'NONE', ( -0.5999999999999999800, -0.3499999999999999800, 0.1499999999999999900 ) ) ; +#40838 = EDGE_LOOP ( 'NONE', ( #41069, #40813, #19598, #41121 ) ) ; +#40839 = FACE_OUTER_BOUND ( 'NONE', #10165, .T. ) ; +#40840 = EDGE_CURVE ( 'NONE', #13925, #29008, #2074, .T. ) ; +#40841 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000001300, 0.2999999999999999900, 0.1499999999999999900 ) ) ; +#40842 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40843 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865475700, 0.7071067811865475700 ) ) ; +#40844 = ADVANCED_FACE ( 'NONE', ( #18230 ), #18185, .T. ) ; +#40845 = SURFACE_STYLE_FILL_AREA ( #4583 ) ; +#40846 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40847 = EDGE_CURVE ( 'NONE', #7908, #38909, #23219, .T. ) ; +#40848 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000008900, -1.180001745296166000, -7.200000000000001100 ) ) ; +#40849 = FILL_AREA_STYLE ('',( #24805 ) ) ; +#40850 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000100, -1.499998254703838600, -5.049999999999993600 ) ) ; +#40851 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38743 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #229, #3424, #39275 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40852 = EDGE_LOOP ( 'NONE', ( #38837, #720, #24873, #34795 ) ) ; +#40853 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#40854 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6227 ) ) ; +#40855 = SURFACE_SIDE_STYLE ('',( #14336 ) ) ; +#40856 = EDGE_LOOP ( 'NONE', ( #12522, #12986, #26353, #31517 ) ) ; +#40858 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25403 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34541, #41034, #28871 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40857 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 2.367138801244516800E-016 ) ) ; +#40859 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#40860 = CARTESIAN_POINT ( 'NONE', ( 3.008137729702070800, 0.3487429116612575400, -1.298628496169463400 ) ) ; +#40861 = VECTOR ( 'NONE', #26213, 1000.000000000000000 ) ; +#40862 = ORIENTED_EDGE ( 'NONE', *, *, #14875, .F. ) ; +#40863 = ORIENTED_EDGE ( 'NONE', *, *, #2318, .T. ) ; +#40864 = ORIENTED_EDGE ( 'NONE', *, *, #16354, .F. ) ; +#40865 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#40867 = AXIS2_PLACEMENT_3D ( 'NONE', #28470, #38344, #9096 ) ; +#40866 = AXIS2_PLACEMENT_3D ( 'NONE', #33810, #30138, #14059 ) ; +#40868 = CARTESIAN_POINT ( 'NONE', ( 2.995000000025375400, -0.3499999999999999800, -1.399999999994125100 ) ) ; +#40869 = CARTESIAN_POINT ( 'NONE', ( 3.044999999999999900, -0.07499999999999998300, -0.2498427124746000500 ) ) ; +#40870 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9383 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6992, #6718, #39055 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40871 = LINE ( 'NONE', #6465, #23202 ) ; +#40872 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#40874 = AXIS2_PLACEMENT_3D ( 'NONE', #31274, #31824, #21703 ) ; +#40873 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5975 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #31582, #2944, #5883 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40875 = ORIENTED_EDGE ( 'NONE', *, *, #1876, .T. ) ; +#40876 = CARTESIAN_POINT ( 'NONE', ( 2.792733470810905500, 1.480001745278514100, -2.604459358809380700 ) ) ; +#40877 = LINE ( 'NONE', #26521, #24207 ) ; +#40878 = ORIENTED_EDGE ( 'NONE', *, *, #13190, .T. ) ; +#40879 = VERTEX_POINT ( 'NONE', #27726 ) ; +#40880 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #21436 ) ) ; +#40881 = DIRECTION ( 'NONE', ( -0.08715574274766035900, 3.297291265201820700E-015, -0.9961946980917453200 ) ) ; +#40882 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.779999999999868600, -0.2339555568811697600 ) ) ; +#40883 = ORIENTED_EDGE ( 'NONE', *, *, #5353, .T. ) ; +#40884 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40885 = VECTOR ( 'NONE', #33562, 1000.000000000000000 ) ; +#40886 = ADVANCED_FACE ( 'NONE', ( #25752, #20218 ), #27868, .F. ) ; +#40887 = CARTESIAN_POINT ( 'NONE', ( 2.399999999999999900, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#40888 = PRESENTATION_STYLE_ASSIGNMENT (( #16407 ) ) ; +#40889 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#40890 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.300000000000000300 ) ) ; +#40891 = SURFACE_STYLE_USAGE ( .BOTH. , #37646 ) ; +#40892 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#40893 = SURFACE_STYLE_FILL_AREA ( #29543 ) ; +#40894 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000008300, -1.180001745296164900, -7.300000000000000700 ) ) ; +#40895 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40896 = SURFACE_STYLE_FILL_AREA ( #21571 ) ; +#40897 = CARTESIAN_POINT ( 'NONE', ( -0.6000000000000000900, -1.499998254703832000, -5.049999999999993600 ) ) ; +#40898 = ORIENTED_EDGE ( 'NONE', *, *, #20780, .T. ) ; +#40899 = VECTOR ( 'NONE', #10464, 1000.000000000000000 ) ; +#40900 = CARTESIAN_POINT ( 'NONE', ( 3.345000000000000200, 0.0000000000000000000, -3.250000000000000400 ) ) ; +#40901 = SURFACE_STYLE_USAGE ( .BOTH. , #21041 ) ; +#40902 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#40903 = EDGE_CURVE ( 'NONE', #22162, #23912, #24254, .T. ) ; +#40904 = PRESENTATION_STYLE_ASSIGNMENT (( #16292 ) ) ; +#40905 = ORIENTED_EDGE ( 'NONE', *, *, #16071, .F. ) ; +#40906 = VECTOR ( 'NONE', #3487, 1000.000000000000000 ) ; +#40907 = LINE ( 'NONE', #25616, #16645 ) ; +#40908 = CARTESIAN_POINT ( 'NONE', ( -4.492416573867751900, -1.982581680836083000, -5.804658566907518100 ) ) ; +#40909 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.837630800822890800E-016, -1.000000000000000000 ) ) ; +#40910 = EDGE_CURVE ( 'NONE', #36319, #34228, #16135, .T. ) ; +#40911 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26046 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28772, #12640, #35548 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40912 = FACE_OUTER_BOUND ( 'NONE', #5083, .T. ) ; +#40913 = PLANE ( 'NONE', #322 ) ; +#40914 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid24', #28542 ) ; +#40915 = LINE ( 'NONE', #23121, #23204 ) ; +#40916 = ORIENTED_EDGE ( 'NONE', *, *, #9607, .T. ) ; +#40917 = PRESENTATION_STYLE_ASSIGNMENT (( #2564 ) ) ; +#40918 = STYLED_ITEM ( 'NONE', ( #37417 ), #23242 ) ; +#40919 = EDGE_LOOP ( 'NONE', ( #10139, #26097, #14245, #26036, #10247, #21335 ) ) ; +#40920 = ORIENTED_EDGE ( 'NONE', *, *, #3370, .F. ) ; +#40921 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40922 = FILL_AREA_STYLE_COLOUR ( '', #3986 ) ; +#40923 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #32661 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #36514, #23099, #36383 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40924 = FILL_AREA_STYLE_COLOUR ( '', #9165 ) ; +#40925 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000011900, -1.799998254703820700, -6.800000000000000700 ) ) ; +#40926 = ORIENTED_EDGE ( 'NONE', *, *, #25240, .F. ) ; +#40927 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26334 ) ) ; +#40928 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#40929 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, 10.30000000000000100, -1.250000000000000000 ) ) ; +#40930 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1429 ), #38200 ) ; +#40931 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40933 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #26833 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18836, #25480, #34925 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40932 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2541 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #34808, #21983, #15598 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40934 = FACE_OUTER_BOUND ( 'NONE', #26875, .T. ) ; +#40935 = SURFACE_SIDE_STYLE ('',( #21539 ) ) ; +#40938 = EDGE_CURVE ( 'NONE', #12039, #22882, #35350, .T. ) ; +#40937 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40936 = STYLED_ITEM ( 'NONE', ( #24315 ), #35395 ) ; +#40939 = CARTESIAN_POINT ( 'NONE', ( -1.899999999999999900, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#40940 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#40941 = ADVANCED_FACE ( 'NONE', ( #8535 ), #32295, .T. ) ; +#40942 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000006600, -0.5199999999999847000, -5.200000000000000200 ) ) ; +#40944 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13442 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #16831, #3569, #26172 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#40943 = AXIS2_PLACEMENT_3D ( 'NONE', #38040, #5714, #31554 ) ; +#40945 = FILL_AREA_STYLE_COLOUR ( '', #27479 ) ; +#40946 = ORIENTED_EDGE ( 'NONE', *, *, #31001, .T. ) ; +#40947 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40948 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40949 = FILL_AREA_STYLE ('',( #15392 ) ) ; +#40950 = SURFACE_STYLE_FILL_AREA ( #38236 ) ; +#40951 = VERTEX_POINT ( 'NONE', #14597 ) ; +#40952 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16462, 'distance_accuracy_value', 'NONE'); +#40953 = VERTEX_POINT ( 'NONE', #32437 ) ; +#40954 = FILL_AREA_STYLE ('',( #5922 ) ) ; +#40955 = VECTOR ( 'NONE', #7952, 1000.000000000000000 ) ; +#40956 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40957 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40958 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40959 = ORIENTED_EDGE ( 'NONE', *, *, #21516, .T. ) ; +#40960 = CARTESIAN_POINT ( 'NONE', ( -2.899999999999999900, 0.3499999999999996400, -1.250000000000000000 ) ) ; +#40961 = FACE_OUTER_BOUND ( 'NONE', #38038, .T. ) ; +#40962 = ORIENTED_EDGE ( 'NONE', *, *, #23223, .T. ) ; +#40963 = ORIENTED_EDGE ( 'NONE', *, *, #11259, .T. ) ; +#40964 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.931303021499040300, -0.3590461068823621000 ) ) ; +#40965 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40966 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40967 = VERTEX_POINT ( 'NONE', #38642 ) ; +#40968 = EDGE_CURVE ( 'NONE', #7127, #38610, #35337, .T. ) ; +#40969 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40970 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.499998254703828600, -5.449999999999994000 ) ) ; +#40971 = VECTOR ( 'NONE', #10055, 1000.000000000000000 ) ; +#40972 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40973 = EDGE_CURVE ( 'NONE', #35138, #29902, #7506, .T. ) ; +#40974 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.734723475976960100E-015, 0.0000000000000000000 ) ) ; +#40975 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -3.307718258760844200E-015, 1.000000000000000000 ) ) ; +#40976 = PLANE ( 'NONE', #26065 ) ; +#40977 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40978 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#40979 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2847 ) ) ; +#40980 = ORIENTED_EDGE ( 'NONE', *, *, #6333, .T. ) ; +#40981 = LINE ( 'NONE', #15639, #32385 ) ; +#40982 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38418, 'distance_accuracy_value', 'NONE'); +#40983 = LINE ( 'NONE', #11692, #33905 ) ; +#40984 = AXIS2_PLACEMENT_3D ( 'NONE', #1538, #23964, #39767 ) ; +#40985 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#40986 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, 0.0000000000000000000 ) ) ; +#40987 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#40988 = ORIENTED_EDGE ( 'NONE', *, *, #36730, .T. ) ; +#40990 = STYLED_ITEM ( 'NONE', ( #24203 ), #6791 ) ; +#40989 = CIRCLE ( 'NONE', #36855, 0.4000000000000000800 ) ; +#40991 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#40992 = PRESENTATION_STYLE_ASSIGNMENT (( #20673 ) ) ; +#40993 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#40995 = EDGE_CURVE ( 'NONE', #23451, #14393, #26763, .T. ) ; +#40994 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #26657 ) ) ; +#40996 = PRESENTATION_STYLE_ASSIGNMENT (( #10010 ) ) ; +#40997 = FILL_AREA_STYLE ('',( #34087 ) ) ; +#40998 = ORIENTED_EDGE ( 'NONE', *, *, #11633, .F. ) ; +#40999 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000004100, 0.2818014882867047000, -2.095470210943120000 ) ) ; +#41000 = VECTOR ( 'NONE', #27608, 1000.000000000000000 ) ; +#41001 = EDGE_LOOP ( 'NONE', ( #19060, #27225, #26917, #19591 ) ) ; +#41002 = ORIENTED_EDGE ( 'NONE', *, *, #14586, .F. ) ; +#41003 = DIRECTION ( 'NONE', ( -4.336808689942016900E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#41005 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #40435 ), #1270 ) ; +#41004 = AXIS2_PLACEMENT_3D ( 'NONE', #18673, #21937, #2728 ) ; +#41006 = CARTESIAN_POINT ( 'NONE', ( 4.370001745296171700, -0.2800000000000026400, -1.149999999999999900 ) ) ; +#41007 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41008 = FILL_AREA_STYLE ('',( #8777 ) ) ; +#41009 = ORIENTED_EDGE ( 'NONE', *, *, #1663, .F. ) ; +#41010 = VECTOR ( 'NONE', #34727, 1000.000000000000000 ) ; +#41011 = ORIENTED_EDGE ( 'NONE', *, *, #24355, .F. ) ; +#41012 = CARTESIAN_POINT ( 'NONE', ( 3.315809924354999900, 0.3499999999999999800, 0.0000000000000000000 ) ) ; +#41013 = PRESENTATION_STYLE_ASSIGNMENT (( #11511 ) ) ; +#41014 = PRESENTATION_STYLE_ASSIGNMENT (( #18235 ) ) ; +#41015 = ADVANCED_FACE ( 'NONE', ( #8519 ), #28766, .T. ) ; +#41016 = CARTESIAN_POINT ( 'NONE', ( -1.400000000000000800, 1.480001745296169600, -1.750000000000000900 ) ) ; +#41017 = DIRECTION ( 'NONE', ( 1.355252715606880500E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#41018 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4308, 'distance_accuracy_value', 'NONE'); +#41019 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000800, 1.630001745296169500, -1.650000000000000400 ) ) ; +#41020 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039600E-015, 6.056601140521967000E-031 ) ) ; +#41022 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#41021 = SURFACE_STYLE_FILL_AREA ( #13464 ) ; +#41023 = CARTESIAN_POINT ( 'NONE', ( -3.087224213888350600, -0.5744544073016564200, -1.904244904675833600 ) ) ; +#41024 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#41025 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#41026 = ORIENTED_EDGE ( 'NONE', *, *, #5712, .T. ) ; +#41027 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41028 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#41029 = SURFACE_SIDE_STYLE ('',( #20708 ) ) ; +#41030 = EDGE_CURVE ( 'NONE', #18636, #25959, #18164, .T. ) ; +#41031 = CARTESIAN_POINT ( 'NONE', ( 4.620424212713737200, -0.2800000000000026400, -1.049979056049130000 ) ) ; +#41032 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#41033 = ORIENTED_EDGE ( 'NONE', *, *, #10358, .T. ) ; +#41034 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41035 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41036 = EDGE_CURVE ( 'NONE', #20034, #25867, #2021, .T. ) ; +#41037 = PRESENTATION_STYLE_ASSIGNMENT (( #22227 ) ) ; +#41038 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296170200, -4.099999999999999600 ) ) ; +#41039 = LINE ( 'NONE', #6380, #20327 ) ; +#41040 = VERTEX_POINT ( 'NONE', #2839 ) ; +#41041 = EDGE_CURVE ( 'NONE', #29204, #1091, #40871, .T. ) ; +#41042 = VECTOR ( 'NONE', #19424, 1000.000000000000000 ) ; +#41043 = SURFACE_STYLE_USAGE ( .BOTH. , #37513 ) ; +#41044 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#41045 = STYLED_ITEM ( 'NONE', ( #24306 ), #16554 ) ; +#41046 = SURFACE_STYLE_USAGE ( .BOTH. , #38058 ) ; +#41047 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000003200, 0.3000000000000149200, -4.249999999999998200 ) ) ; +#41048 = ORIENTED_EDGE ( 'NONE', *, *, #34610, .T. ) ; +#41049 = LINE ( 'NONE', #18071, #34974 ) ; +#41050 = LINE ( 'NONE', #40223, #32447 ) ; +#41051 = ADVANCED_FACE ( 'NONE', ( #38351 ), #17, .F. ) ; +#41052 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12870 ), #13434 ) ; +#41053 = VECTOR ( 'NONE', #185, 1000.000000000000000 ) ; +#41054 = LINE ( 'NONE', #10531, #660 ) ; +#41055 = STYLED_ITEM ( 'NONE', ( #19498 ), #11847 ) ; +#41056 = DIRECTION ( 'NONE', ( 3.944304526105059000E-031, 1.000000000000000000, -2.367138801244521200E-016 ) ) ; +#41057 = CARTESIAN_POINT ( 'NONE', ( 3.375000000000000400, 1.630001745296169000, -4.100000000000000500 ) ) ; +#41058 = LINE ( 'NONE', #35280, #24881 ) ; +#41059 = LINE ( 'NONE', #38265, #35521 ) ; +#41061 = EDGE_CURVE ( 'NONE', #234, #23345, #14107, .T. ) ; +#41060 = AXIS2_PLACEMENT_3D ( 'NONE', #13699, #20231, #30077 ) ; +#41062 = DIRECTION ( 'NONE', ( 0.3746065948720311300, 0.0000000000000000000, -0.9271838539784770200 ) ) ; +#41063 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41064 = ADVANCED_FACE ( 'NONE', ( #13055 ), #19631, .T. ) ; +#41065 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18350, 'distance_accuracy_value', 'NONE'); +#41066 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3144 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10405, #6611, #29768 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41067 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.710505431213763500E-015, 0.0000000000000000000 ) ) ; +#41068 = AXIS2_PLACEMENT_3D ( 'NONE', #2662, #5870, #19022 ) ; +#41069 = ORIENTED_EDGE ( 'NONE', *, *, #31136, .F. ) ; +#41070 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#41071 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#41072 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #34017 ) ) ; +#41073 = DIRECTION ( 'NONE', ( -2.478176394252580200E-017, -1.000000000000000000, -3.307718258760845000E-015 ) ) ; +#41074 = EDGE_LOOP ( 'NONE', ( #32712, #36642, #15931, #8591 ) ) ; +#41075 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.480001745296169600, -4.099999999999999600 ) ) ; +#41076 = ORIENTED_EDGE ( 'NONE', *, *, #40517, .T. ) ; +#41077 = DIRECTION ( 'NONE', ( -3.336029078258395200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#41078 = PRESENTATION_STYLE_ASSIGNMENT (( #26109 ) ) ; +#41079 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#41080 = ORIENTED_EDGE ( 'NONE', *, *, #27012, .F. ) ; +#41081 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -0.2339555568811697600 ) ) ; +#41082 = VERTEX_POINT ( 'NONE', #13655 ) ; +#41083 = SURFACE_SIDE_STYLE ('',( #15158 ) ) ; +#41084 = EDGE_LOOP ( 'NONE', ( #30734, #37224 ) ) ; +#41085 = CONICAL_SURFACE ( 'NONE', #14781, 0.3000000000000001000, 0.3490658503988666700 ) ; +#41086 = PLANE ( 'NONE', #435 ) ; +#41087 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#41088 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#41089 = VERTEX_POINT ( 'NONE', #19764 ) ; +#41090 = FACE_OUTER_BOUND ( 'NONE', #19015, .T. ) ; +#41091 = VERTEX_POINT ( 'NONE', #3757 ) ; +#41092 = CARTESIAN_POINT ( 'NONE', ( -2.944999999999999800, 0.6000000000000003100, -3.250000000000000400 ) ) ; +#41093 = SURFACE_STYLE_FILL_AREA ( #30068 ) ; +#41094 = SURFACE_SIDE_STYLE ('',( #18483 ) ) ; +#41095 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41096 = DIRECTION ( 'NONE', ( -6.056601140521966100E-031, -2.020499752019424000E-045, -1.000000000000000000 ) ) ; +#41097 = CARTESIAN_POINT ( 'NONE', ( 0.9000000000000000200, -1.499998254703827100, -5.049999999999993600 ) ) ; +#41098 = ADVANCED_FACE ( 'NONE', ( #27717 ), #9000, .T. ) ; +#41099 = EDGE_CURVE ( 'NONE', #21708, #14785, #34279, .T. ) ; +#41100 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41101 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18291, 'distance_accuracy_value', 'NONE'); +#41102 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999993600, -0.3500000000000000300, -1.250000000000000000 ) ) ; +#41103 = PLANE ( 'NONE', #39543 ) ; +#41104 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#41105 = EDGE_CURVE ( 'NONE', #3347, #2092, #30725, .T. ) ; +#41106 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#41107 = AXIS2_PLACEMENT_3D ( 'NONE', #6450, #13071, #20027 ) ; +#41108 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18490, 'distance_accuracy_value', 'NONE'); +#41109 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#41110 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.056601140521968800E-031 ) ) ; +#41111 = SURFACE_STYLE_USAGE ( .BOTH. , #34617 ) ; +#41112 = ORIENTED_EDGE ( 'NONE', *, *, #40840, .F. ) ; +#41113 = ADVANCED_FACE ( 'NONE', ( #16081 ), #20160, .F. ) ; +#41114 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6783 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12087, #18491, #2545 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41115 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41118 = EDGE_CURVE ( 'NONE', #4617, #18656, #32760, .T. ) ; +#41117 = STYLED_ITEM ( 'NONE', ( #12440 ), #24352 ) ; +#41116 = CARTESIAN_POINT ( 'NONE', ( -1.149999999999999900, -1.380001745296132400, -6.031671842700004200 ) ) ; +#41119 = VECTOR ( 'NONE', #20865, 1000.000000000000000 ) ; +#41120 = FILL_AREA_STYLE_COLOUR ( '', #15877 ) ; +#41121 = ORIENTED_EDGE ( 'NONE', *, *, #39987, .F. ) ; +#41122 = ORIENTED_EDGE ( 'NONE', *, *, #35537, .F. ) ; +#41123 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#41124 = ORIENTED_EDGE ( 'NONE', *, *, #34976, .T. ) ; +#41125 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#41126 = ORIENTED_EDGE ( 'NONE', *, *, #9710, .F. ) ; +#41128 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6108 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18662, #25171, #41238 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41127 = AXIS2_PLACEMENT_3D ( 'NONE', #24553, #5176, #24710 ) ; +#41129 = STYLED_ITEM ( 'NONE', ( #1437 ), #41273 ) ; +#41130 = CIRCLE ( 'NONE', #20635, 0.04999999999999969700 ) ; +#41131 = PRESENTATION_STYLE_ASSIGNMENT (( #26731 ) ) ; +#41132 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2749 ) ) ; +#41133 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#41134 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#41135 = PRESENTATION_STYLE_ASSIGNMENT (( #30943 ) ) ; +#41136 = STYLED_ITEM ( 'NONE', ( #24947 ), #8420 ) ; +#41137 = SURFACE_SIDE_STYLE ('',( #35091 ) ) ; +#41138 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#41139 = CIRCLE ( 'NONE', #26416, 0.05000000000000056500 ) ; +#41140 = LINE ( 'NONE', #15936, #11858 ) ; +#41141 = CARTESIAN_POINT ( 'NONE', ( -4.425000000000014000, -1.999998254703822900, -5.899999999999999500 ) ) ; +#41142 = SURFACE_STYLE_USAGE ( .BOTH. , #2068 ) ; +#41143 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#41144 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #20946, 'distance_accuracy_value', 'NONE'); +#41145 = SURFACE_STYLE_USAGE ( .BOTH. , #15708 ) ; +#41146 = PRESENTATION_STYLE_ASSIGNMENT (( #4633 ) ) ; +#41147 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, -0.2999999999999999900, 0.1499999999999999900 ) ) ; +#41148 = SURFACE_STYLE_USAGE ( .BOTH. , #8506 ) ; +#41149 = FILL_AREA_STYLE ('',( #5700 ) ) ; +#41150 = FACE_OUTER_BOUND ( 'NONE', #2738, .T. ) ; +#41151 = CARTESIAN_POINT ( 'NONE', ( 1.100000000000000100, -2.322941965694886000, -1.250000000000000000 ) ) ; +#41152 = ADVANCED_FACE ( 'NONE', ( #15067 ), #13553, .T. ) ; +#41153 = SURFACE_SIDE_STYLE ('',( #21561 ) ) ; +#41154 = ORIENTED_EDGE ( 'NONE', *, *, #3143, .T. ) ; +#41155 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.779999999999868600, -0.2339555568811697600 ) ) ; +#41156 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#41157 = SURFACE_STYLE_FILL_AREA ( #33434 ) ; +#41158 = SURFACE_STYLE_FILL_AREA ( #1446 ) ; +#41159 = ORIENTED_EDGE ( 'NONE', *, *, #19665, .F. ) ; +#41160 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.2999999999999999900, 0.3499999999999999800 ) ) ; +#41161 = EDGE_CURVE ( 'NONE', #6037, #41584, #30749, .T. ) ; +#41162 = ORIENTED_EDGE ( 'NONE', *, *, #35617, .F. ) ; +#41163 = SURFACE_STYLE_USAGE ( .BOTH. , #28581 ) ; +#41164 = LINE ( 'NONE', #17982, #26543 ) ; +#41165 = ORIENTED_EDGE ( 'NONE', *, *, #5399, .T. ) ; +#41166 = CARTESIAN_POINT ( 'NONE', ( -2.600000000000000500, -2.322941965694886000, 0.6999999999999999600 ) ) ; +#41167 = CARTESIAN_POINT ( 'NONE', ( -1.149999999999999900, -1.499998254703826200, -6.699999999999994000 ) ) ; +#41168 = EDGE_CURVE ( 'NONE', #23563, #29337, #3943, .T. ) ; +#41169 = AXIS2_PLACEMENT_3D ( 'NONE', #10322, #13021, #7076 ) ; +#41170 = FILL_AREA_STYLE_COLOUR ( '', #20138 ) ; +#41171 = LINE ( 'NONE', #14849, #16402 ) ; +#41172 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17921 ) ) ; +#41173 = VERTEX_POINT ( 'NONE', #9216 ) ; +#41174 = SURFACE_STYLE_USAGE ( .BOTH. , #41312 ) ; +#41175 = CARTESIAN_POINT ( 'NONE', ( 4.475000000000003200, 0.2800017452961687200, -6.200000000000001100 ) ) ; +#41176 = SURFACE_STYLE_FILL_AREA ( #26481 ) ; +#41177 = AXIS2_PLACEMENT_3D ( 'NONE', #31549, #15722, #41547 ) ; +#41178 = VECTOR ( 'NONE', #41293, 1000.000000000000000 ) ; +#41179 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41180 = CIRCLE ( 'NONE', #22503, 0.9999999999999991100 ) ; +#41181 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#41182 = ORIENTED_EDGE ( 'NONE', *, *, #37105, .F. ) ; +#41183 = FILL_AREA_STYLE_COLOUR ( '', #3096 ) ; +#41184 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #32503 ), #9218 ) ; +#41185 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16090 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #21919, #24893, #9004 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41186 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41187 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41189 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4806 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30287, #33534, #27443 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41188 = AXIS2_PLACEMENT_3D ( 'NONE', #39592, #36512, #547 ) ; +#41190 = ORIENTED_EDGE ( 'NONE', *, *, #28471, .F. ) ; +#41191 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41193 = EDGE_CURVE ( 'NONE', #23596, #1488, #12530, .T. ) ; +#41192 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12700 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #19731, #25796, #28882 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41194 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000011900, -1.949998254703820800, -6.600000000000000500 ) ) ; +#41195 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#41196 = LINE ( 'NONE', #10308, #33120 ) ; +#41197 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30999, 'distance_accuracy_value', 'NONE'); +#41198 = VERTEX_POINT ( 'NONE', #1304 ) ; +#41199 = FACE_OUTER_BOUND ( 'NONE', #33578, .T. ) ; +#41200 = FILL_AREA_STYLE_COLOUR ( '', #6811 ) ; +#41202 = STYLED_ITEM ( 'NONE', ( #10337 ), #836 ) ; +#41201 = STYLED_ITEM ( 'NONE', ( #6949 ), #25037 ) ; +#41203 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41204 = LINE ( 'NONE', #1243, #8300 ) ; +#41205 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41206 = ORIENTED_EDGE ( 'NONE', *, *, #30279, .F. ) ; +#41207 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#41208 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41209 = FILL_AREA_STYLE ('',( #37814 ) ) ; +#41210 = LINE ( 'NONE', #27742, #1813 ) ; +#41211 = VECTOR ( 'NONE', #35062, 1000.000000000000000 ) ; +#41212 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#41213 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #30192, 'distance_accuracy_value', 'NONE'); +#41214 = ORIENTED_EDGE ( 'NONE', *, *, #16970, .F. ) ; +#41215 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#41216 = LINE ( 'NONE', #24201, #39157 ) ; +#41217 = FILL_AREA_STYLE ('',( #41349 ) ) ; +#41218 = VECTOR ( 'NONE', #32835, 1000.000000000000100 ) ; +#41219 = EDGE_LOOP ( 'NONE', ( #17481, #39806, #6735, #29463 ) ) ; +#41220 = FILL_AREA_STYLE ('',( #31335 ) ) ; +#41221 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41222 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.9396926207856547400, 0.3420201433263653800 ) ) ; +#41223 = EDGE_CURVE ( 'NONE', #14855, #23029, #41328, .T. ) ; +#41224 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#41225 = ADVANCED_FACE ( 'NONE', ( #6934 ), #23722, .T. ) ; +#41226 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41227 = EDGE_CURVE ( 'NONE', #15199, #20046, #33750, .T. ) ; +#41228 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #22311 ), #23095 ) ; +#41229 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41230 = CARTESIAN_POINT ( 'NONE', ( 3.500000000000003100, -2.031000000000001500, -6.749999999999999100 ) ) ; +#41231 = SURFACE_SIDE_STYLE ('',( #5258 ) ) ; +#41232 = SURFACE_STYLE_USAGE ( .BOTH. , #18935 ) ; +#41233 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6508 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #17535, #10721, #33479 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41234 = FACE_OUTER_BOUND ( 'NONE', #14183, .T. ) ; +#41235 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 2.322941965694886000, 0.3499999999999999800 ) ) ; +#41236 = CYLINDRICAL_SURFACE ( 'NONE', #13702, 0.09999999999987406500 ) ; +#41237 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#41238 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41239 = AXIS2_PLACEMENT_3D ( 'NONE', #19479, #16353, #28786 ) ; +#41240 = SURFACE_STYLE_USAGE ( .BOTH. , #2304 ) ; +#41241 = ORIENTED_EDGE ( 'NONE', *, *, #28914, .F. ) ; +#41242 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #38734 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #32935, #23622, #39426 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41243 = ORIENTED_EDGE ( 'NONE', *, *, #36224, .F. ) ; +#41244 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38962, 'distance_accuracy_value', 'NONE'); +#41245 = EDGE_LOOP ( 'NONE', ( #7587, #29273, #23324, #34834 ) ) ; +#41247 = STYLED_ITEM ( 'NONE', ( #4572 ), #6371 ) ; +#41246 = STYLED_ITEM ( 'NONE', ( #27667 ), #30902 ) ; +#41248 = FACE_OUTER_BOUND ( 'NONE', #26572, .T. ) ; +#41249 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#41250 = VECTOR ( 'NONE', #32423, 1000.000000000000000 ) ; +#41252 = EDGE_CURVE ( 'NONE', #14569, #3283, #27194, .T. ) ; +#41251 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12824 ) ) ; +#41253 = ORIENTED_EDGE ( 'NONE', *, *, #5399, .F. ) ; +#41254 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#41255 = ORIENTED_EDGE ( 'NONE', *, *, #24121, .F. ) ; +#41256 = CARTESIAN_POINT ( 'NONE', ( -0.9000000000000001300, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#41257 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#41258 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41260 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #21247 ), #17458 ) ; +#41259 = STYLED_ITEM ( 'NONE', ( #25396 ), #26692 ) ; +#41261 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.09999999999998343500, -4.450000000000000200 ) ) ; +#41262 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #19301 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #27044, #20980, #36764 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41263 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#41264 = DIRECTION ( 'NONE', ( 3.281909278875039200E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#41265 = ADVANCED_FACE ( 'NONE', ( #3431 ), #10839, .F. ) ; +#41266 = FILL_AREA_STYLE_COLOUR ( '', #6826 ) ; +#41267 = DIRECTION ( 'NONE', ( -3.976777186418611300E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#41268 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#41269 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#41270 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.056601140521967000E-031 ) ) ; +#41271 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41272 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#41273 = ADVANCED_FACE ( 'NONE', ( #4452 ), #36281, .F. ) ; +#41274 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41275 = FACE_OUTER_BOUND ( 'NONE', #22886, .T. ) ; +#41276 = SURFACE_SIDE_STYLE ('',( #11457 ) ) ; +#41277 = EDGE_LOOP ( 'NONE', ( #22853, #8389, #22722, #29396 ) ) ; +#41278 = VECTOR ( 'NONE', #27246, 1000.000000000000000 ) ; +#41279 = CARTESIAN_POINT ( 'NONE', ( -4.170000000000001700, 0.2800000000000027500, -0.2000017452961698200 ) ) ; +#41280 = EDGE_CURVE ( 'NONE', #12128, #25708, #32722, .T. ) ; +#41281 = ORIENTED_EDGE ( 'NONE', *, *, #23709, .F. ) ; +#41282 = ORIENTED_EDGE ( 'NONE', *, *, #22972, .T. ) ; +#41283 = FACE_OUTER_BOUND ( 'NONE', #28147, .T. ) ; +#41284 = ORIENTED_EDGE ( 'NONE', *, *, #41099, .T. ) ; +#41285 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41286 = SURFACE_STYLE_FILL_AREA ( #40997 ) ; +#41287 = FACE_OUTER_BOUND ( 'NONE', #8790, .T. ) ; +#41288 = EDGE_CURVE ( 'NONE', #25497, #35859, #31233, .T. ) ; +#41289 = LINE ( 'NONE', #11130, #33227 ) ; +#41290 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -2.367138801244516300E-016, -1.000000000000000000 ) ) ; +#41291 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#41292 = VERTEX_POINT ( 'NONE', #26855 ) ; +#41293 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875040400E-015, -6.056601140521968800E-031 ) ) ; +#41294 = ORIENTED_EDGE ( 'NONE', *, *, #39926, .T. ) ; +#41295 = CARTESIAN_POINT ( 'NONE', ( 0.6000000000000000900, -1.380001745296134800, -4.781671842700004200 ) ) ; +#41296 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5222 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28456, #9214, #18598 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41297 = CARTESIAN_POINT ( 'NONE', ( -2.792733470810905500, 1.630001745296169300, -2.294459358809384700 ) ) ; +#41298 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#41299 = CIRCLE ( 'NONE', #31295, 0.1999999999999998400 ) ; +#41300 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41301 = FILL_AREA_STYLE ('',( #5994 ) ) ; +#41302 = FACE_OUTER_BOUND ( 'NONE', #21696, .T. ) ; +#41303 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27496 ) ) ; +#41304 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.480001745296169600, -0.2339555568811695900 ) ) ; +#41305 = SURFACE_STYLE_USAGE ( .BOTH. , #28584 ) ; +#41308 = EDGE_CURVE ( 'NONE', #2092, #25323, #39810, .T. ) ; +#41307 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, -1.499998254703820400, -6.699999999999994000 ) ) ; +#41306 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35616 ), #36981 ) ; +#41309 = FILL_AREA_STYLE_COLOUR ( '', #19149 ) ; +#41310 = ADVANCED_FACE ( 'NONE', ( #18609 ), #17806, .F. ) ; +#41311 = ORIENTED_EDGE ( 'NONE', *, *, #22543, .F. ) ; +#41312 = SURFACE_SIDE_STYLE ('',( #19660 ) ) ; +#41313 = CARTESIAN_POINT ( 'NONE', ( 3.132753748148134700, -0.2999999999999999300, 0.9753279071347694700 ) ) ; +#41314 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6651 ), #23997 ) ; +#41315 = SURFACE_SIDE_STYLE ('',( #30365 ) ) ; +#41316 = AXIS2_PLACEMENT_3D ( 'NONE', #40600, #34269, #20902 ) ; +#41317 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #929, 'distance_accuracy_value', 'NONE'); +#41318 = FILL_AREA_STYLE ('',( #18466 ) ) ; +#41319 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11795 ) ) ; +#41320 = EDGE_LOOP ( 'NONE', ( #9697, #5811, #31863, #1041 ) ) ; +#41321 = PLANE ( 'NONE', #13898 ) ; +#41322 = ORIENTED_EDGE ( 'NONE', *, *, #4635, .F. ) ; +#41323 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#41324 = CIRCLE ( 'NONE', #28023, 0.2999999999999999300 ) ; +#41325 = ADVANCED_FACE ( 'NONE', ( #33717 ), #40499, .F. ) ; +#41326 = LINE ( 'NONE', #30140, #32719 ) ; +#41327 = SURFACE_STYLE_FILL_AREA ( #17422 ) ; +#41328 = LINE ( 'NONE', #30355, #29199 ) ; +#41329 = LINE ( 'NONE', #1840, #4925 ) ; +#41330 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000004800, -0.09999999999998369900, -1.749999999999999800 ) ) ; +#41331 = ORIENTED_EDGE ( 'NONE', *, *, #16323, .F. ) ; +#41332 = FILL_AREA_STYLE_COLOUR ( '', #25735 ) ; +#41333 = ORIENTED_EDGE ( 'NONE', *, *, #6704, .F. ) ; +#41334 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.480001745296170000, -0.2339555568811675900 ) ) ; +#41335 = PRESENTATION_STYLE_ASSIGNMENT (( #4336 ) ) ; +#41336 = CARTESIAN_POINT ( 'NONE', ( -2.900000000000000400, -1.380001745296146200, -4.781671842700004200 ) ) ; +#41337 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41338 = LINE ( 'NONE', #41594, #1453 ) ; +#41339 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, -0.7071067811865474600 ) ) ; +#41340 = ORIENTED_EDGE ( 'NONE', *, *, #39587, .F. ) ; +#41341 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41342 = LINE ( 'NONE', #7434, #30238 ) ; +#41343 = CARTESIAN_POINT ( 'NONE', ( -3.374999999999998700, 0.2800017452961687800, -4.750000000000000000 ) ) ; +#41344 = SURFACE_STYLE_USAGE ( .BOTH. , #37946 ) ; +#41345 = EDGE_CURVE ( 'NONE', #24607, #21671, #10960, .T. ) ; +#41346 = FILL_AREA_STYLE ('',( #12237 ) ) ; +#41347 = EDGE_CURVE ( 'NONE', #12291, #40967, #12982, .T. ) ; +#41348 = VERTEX_POINT ( 'NONE', #1711 ) ; +#41349 = FILL_AREA_STYLE_COLOUR ( '', #40789 ) ; +#41350 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9636, 'distance_accuracy_value', 'NONE'); +#41351 = EDGE_LOOP ( 'NONE', ( #36029, #13807, #12693, #38266 ) ) ; +#41352 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, -0.2800000000000000300, -0.2339555568811695900 ) ) ; +#41353 = EDGE_CURVE ( 'NONE', #31912, #26968, #9921, .T. ) ; +#41354 = VERTEX_POINT ( 'NONE', #24287 ) ; +#41355 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#41356 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, -0.3699999999999857300, -4.500000000000000000 ) ) ; +#41357 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#41358 = STYLED_ITEM ( 'NONE', ( #15700 ), #21643 ) ; +#41359 = ADVANCED_FACE ( 'NONE', ( #18088 ), #30494, .F. ) ; +#41360 = VERTEX_POINT ( 'NONE', #14673 ) ; +#41361 = ORIENTED_EDGE ( 'NONE', *, *, #21714, .F. ) ; +#41362 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#41363 = ORIENTED_EDGE ( 'NONE', *, *, #29713, .T. ) ; +#41364 = AXIS2_PLACEMENT_3D ( 'NONE', #31497, #34595, #12115 ) ; +#41365 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#41366 = CIRCLE ( 'NONE', #17192, 0.04999999999999969700 ) ; +#41368 = EDGE_CURVE ( 'NONE', #28229, #34550, #7915, .T. ) ; +#41367 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8860 ), #21355 ) ; +#41369 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#41370 = FILL_AREA_STYLE ('',( #37696 ) ) ; +#41371 = ORIENTED_EDGE ( 'NONE', *, *, #5653, .T. ) ; +#41372 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, 0.3500000000000000300, 0.1499999999999999900 ) ) ; +#41373 = ORIENTED_EDGE ( 'NONE', *, *, #35669, .F. ) ; +#41374 = EDGE_LOOP ( 'NONE', ( #675, #39110, #12332, #12655 ) ) ; +#41375 = DIRECTION ( 'NONE', ( 2.891205793294677000E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#41377 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39181 ) ) ; +#41376 = AXIS2_PLACEMENT_3D ( 'NONE', #27841, #37564, #37979 ) ; +#41378 = STYLED_ITEM ( 'NONE', ( #37754 ), #41325 ) ; +#41379 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#41380 = SURFACE_STYLE_USAGE ( .BOTH. , #41495 ) ; +#41381 = EDGE_LOOP ( 'NONE', ( #20908, #26202, #26377, #35767 ) ) ; +#41382 = STYLED_ITEM ( 'NONE', ( #39103 ), #8043 ) ; +#41383 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#41384 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#41385 = DIRECTION ( 'NONE', ( -3.941151930913548000E-045, -1.845450506358318100E-016, -1.000000000000000000 ) ) ; +#41386 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000007100, -0.8500017452961659000, -5.575000000000001100 ) ) ; +#41387 = CYLINDRICAL_SURFACE ( 'NONE', #18193, 1.499999999999868100 ) ; +#41389 = CARTESIAN_POINT ( 'NONE', ( -2.399999999999999900, -2.322941965694886000, -1.250000000000000000 ) ) ; +#41388 = CARTESIAN_POINT ( 'NONE', ( 3.273571428571024500, 0.07499999999999999700, -0.08583148475007257300 ) ) ; +#41390 = CARTESIAN_POINT ( 'NONE', ( 3.245000000091249800, 0.3499999999999999200, -1.649999999999999700 ) ) ; +#41391 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#41392 = ORIENTED_EDGE ( 'NONE', *, *, #39342, .F. ) ; +#41393 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#41394 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13095, 'distance_accuracy_value', 'NONE'); +#41395 = CARTESIAN_POINT ( 'NONE', ( 3.245000000000000100, -0.2999999999999999900, -0.008031980578130919200 ) ) ; +#41396 = ORIENTED_EDGE ( 'NONE', *, *, #29261, .F. ) ; +#41397 = CYLINDRICAL_SURFACE ( 'NONE', #18980, 0.2000000000000007300 ) ; +#41398 = ORIENTED_EDGE ( 'NONE', *, *, #33876, .F. ) ; +#41399 = CYLINDRICAL_SURFACE ( 'NONE', #2498, 1.200001745296169300 ) ; +#41400 = VECTOR ( 'NONE', #3556, 1000.000000000000000 ) ; +#41401 = VECTOR ( 'NONE', #10804, 1000.000000000000000 ) ; +#41402 = VERTEX_POINT ( 'NONE', #21204 ) ; +#41403 = EDGE_LOOP ( 'NONE', ( #33671, #34797, #33453, #31800 ) ) ; +#41404 = EDGE_LOOP ( 'NONE', ( #2607, #30704, #5705, #26729, #22509, #19031, #29300, #6928 ) ) ; +#41405 = EDGE_CURVE ( 'NONE', #37312, #34936, #41289, .T. ) ; +#41406 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.2500000000000000000, 1.075000000000000000 ) ) ; +#41407 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41408 = SURFACE_SIDE_STYLE ('',( #20599 ) ) ; +#41409 = EDGE_CURVE ( 'NONE', #37349, #8874, #32679, .T. ) ; +#41410 = ORIENTED_EDGE ( 'NONE', *, *, #4929, .F. ) ; +#41411 = FILL_AREA_STYLE ('',( #22084 ) ) ; +#41412 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5672 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #29404, #29127, #6673 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41413 = FILL_AREA_STYLE ('',( #35621 ) ) ; +#41414 = AXIS2_PLACEMENT_3D ( 'NONE', #36118, #16747, #698 ) ; +#41415 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41416 = SURFACE_SIDE_STYLE ('',( #7543 ) ) ; +#41417 = FILL_AREA_STYLE_COLOUR ( '', #4259 ) ; +#41418 = SURFACE_SIDE_STYLE ('',( #35141 ) ) ; +#41419 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #31412 ), #35737 ) ; +#41420 = AXIS2_PLACEMENT_3D ( 'NONE', #37477, #31122, #11881 ) ; +#41421 = CARTESIAN_POINT ( 'NONE', ( -4.010831726188969900, 0.5300017452961685000, -14.55000000000000100 ) ) ; +#41422 = AXIS2_PLACEMENT_3D ( 'NONE', #7216, #23471, #1067 ) ; +#41423 = SURFACE_STYLE_USAGE ( .BOTH. , #18712 ) ; +#41424 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41425 = VERTEX_POINT ( 'NONE', #8980 ) ; +#41426 = FACE_OUTER_BOUND ( 'NONE', #14234, .T. ) ; +#41428 = EDGE_CURVE ( 'NONE', #3854, #2937, #18575, .T. ) ; +#41427 = AXIS2_PLACEMENT_3D ( 'NONE', #14373, #17356, #23839 ) ; +#41429 = FILL_AREA_STYLE_COLOUR ( '', #37906 ) ; +#41431 = STYLED_ITEM ( 'NONE', ( #30845 ), #9236 ) ; +#41430 = CARTESIAN_POINT ( 'NONE', ( -3.374999999999998700, 0.6300017452961683700, -4.750000000000000000 ) ) ; +#41432 = VECTOR ( 'NONE', #8936, 1000.000000000000000 ) ; +#41433 = ORIENTED_EDGE ( 'NONE', *, *, #21651, .T. ) ; +#41434 = CARTESIAN_POINT ( 'NONE', ( -3.027042081088616500, -0.5937568000502657700, -1.923561226168959000 ) ) ; +#41435 = CARTESIAN_POINT ( 'NONE', ( -4.370001745296171700, 0.2800000000000027500, 0.0000000000000000000 ) ) ; +#41436 = MANIFOLD_SOLID_BREP ( '2305018-2-1-solid17', #13262 ) ; +#41437 = SURFACE_STYLE_FILL_AREA ( #22574 ) ; +#41438 = ORIENTED_EDGE ( 'NONE', *, *, #22182, .T. ) ; +#41439 = SURFACE_STYLE_FILL_AREA ( #21492 ) ; +#41440 = ORIENTED_EDGE ( 'NONE', *, *, #41280, .T. ) ; +#41441 = ORIENTED_EDGE ( 'NONE', *, *, #40148, .T. ) ; +#41442 = LINE ( 'NONE', #1117, #5055 ) ; +#41443 = PLANE ( 'NONE', #6823 ) ; +#41444 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#41445 = EDGE_LOOP ( 'NONE', ( #13288, #25922, #1486, #20945 ) ) ; +#41446 = VECTOR ( 'NONE', #31169, 1000.000000000000000 ) ; +#41447 = FILL_AREA_STYLE_COLOUR ( '', #37008 ) ; +#41448 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000012400, -1.999998254703822400, -2.599999999999999600 ) ) ; +#41449 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#41450 = ADVANCED_FACE ( 'NONE', ( #24107 ), #5482, .F. ) ; +#41451 = EDGE_CURVE ( 'NONE', #23303, #13255, #4354, .T. ) ; +#41452 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664844900, -1.080001745296171900, -5.599999999999999600 ) ) ; +#41453 = EDGE_CURVE ( 'NONE', #31804, #36203, #13979, .T. ) ; +#41454 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15387 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #35072, #37894, #3027 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41455 = ORIENTED_EDGE ( 'NONE', *, *, #3182, .T. ) ; +#41456 = DIRECTION ( 'NONE', ( -3.854933582169777600E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#41457 = FACE_OUTER_BOUND ( 'NONE', #7465, .T. ) ; +#41458 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #12459, #21848, #12037, #21570 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#41459 = VERTEX_POINT ( 'NONE', #15094 ) ; +#41460 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #28436, 'distance_accuracy_value', 'NONE'); +#41461 = VERTEX_POINT ( 'NONE', #15247 ) ; +#41462 = ADVANCED_FACE ( 'NONE', ( #4891 ), #24624, .T. ) ; +#41463 = AXIS2_PLACEMENT_3D ( 'NONE', #8642, #2469, #31248 ) ; +#41464 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000002600, 0.2800000000000000300, -0.2000017452961698200 ) ) ; +#41465 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41466 = CIRCLE ( 'NONE', #33394, 1.350424214906979600 ) ; +#41467 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#41468 = VECTOR ( 'NONE', #1447, 1000.000000000000000 ) ; +#41469 = EDGE_LOOP ( 'NONE', ( #35080, #19722, #13252, #41624, #33796, #26884, #17905, #14905, #13467, #26871, #1476, #15073, #28363, #19345, #4500, #41648, #9369, #11837, #15818, #35170, #13420, #11427 ) ) ; +#41470 = FILL_AREA_STYLE ('',( #35136 ) ) ; +#41471 = ORIENTED_EDGE ( 'NONE', *, *, #2660, .F. ) ; +#41472 = ORIENTED_EDGE ( 'NONE', *, *, #1690, .F. ) ; +#41473 = CARTESIAN_POINT ( 'NONE', ( 4.750000000000003600, -0.7099999999999991900, -6.861124800398366500 ) ) ; +#41474 = AXIS2_PLACEMENT_3D ( 'NONE', #26550, #17090, #29783 ) ; +#41476 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #22029 ) ) ; +#41475 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27160 ) ) ; +#41477 = FILL_AREA_STYLE_COLOUR ( '', #23036 ) ; +#41479 = EDGE_CURVE ( 'NONE', #3598, #4852, #36239, .T. ) ; +#41478 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6591 ) ) ; +#41480 = ORIENTED_EDGE ( 'NONE', *, *, #21592, .F. ) ; +#41481 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#41482 = PRESENTATION_STYLE_ASSIGNMENT (( #2 ) ) ; +#41483 = ORIENTED_EDGE ( 'NONE', *, *, #29136, .T. ) ; +#41484 = VECTOR ( 'NONE', #11230, 1000.000000000000000 ) ; +#41485 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.281909278875039200E-015, 5.952072798849889700E-031 ) ) ; +#41486 = SURFACE_STYLE_FILL_AREA ( #27635 ) ; +#41488 = AXIS2_PLACEMENT_3D ( 'NONE', #5100, #8463, #21377 ) ; +#41487 = STYLED_ITEM ( 'NONE', ( #35137 ), #26042 ) ; +#41489 = SURFACE_STYLE_USAGE ( .BOTH. , #31485 ) ; +#41490 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#41491 = CARTESIAN_POINT ( 'NONE', ( -2.995000000000000100, 0.3499999999999999800, -1.399999999908749800 ) ) ; +#41492 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, 0.4343145750507622100, -3.279289321881345500 ) ) ; +#41493 = CARTESIAN_POINT ( 'NONE', ( 4.570925237316274100, -1.009999999999999100, -6.861124800398366500 ) ) ; +#41494 = ORIENTED_EDGE ( 'NONE', *, *, #1727, .F. ) ; +#41495 = SURFACE_SIDE_STYLE ('',( #39534 ) ) ; +#41496 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999996800, -1.480001745296170000, -0.2339555568811697600 ) ) ; +#41497 = ADVANCED_FACE ( 'NONE', ( #5376 ), #1365, .F. ) ; +#41498 = FILL_AREA_STYLE ('',( #9433 ) ) ; +#41499 = VERTEX_POINT ( 'NONE', #15373 ) ; +#41500 = FILL_AREA_STYLE_COLOUR ( '', #29441 ) ; +#41501 = CARTESIAN_POINT ( 'NONE', ( 3.169999999999995000, -1.480001745296169800, 0.0000000000000000000 ) ) ; +#41502 = ORIENTED_EDGE ( 'NONE', *, *, #30837, .T. ) ; +#41503 = EDGE_CURVE ( 'NONE', #167, #4316, #27630, .T. ) ; +#41504 = PLANE ( 'NONE', #12829 ) ; +#41506 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#41505 = SURFACE_SIDE_STYLE ('',( #21847 ) ) ; +#41507 = SURFACE_SIDE_STYLE ('',( #1361 ) ) ; +#41508 = ADVANCED_FACE ( 'NONE', ( #39238 ), #28597, .T. ) ; +#41509 = FILL_AREA_STYLE ('',( #9855 ) ) ; +#41510 = EDGE_CURVE ( 'NONE', #17232, #37476, #17519, .T. ) ; +#41511 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41512 = EDGE_LOOP ( 'NONE', ( #37057, #2933, #24178, #28307 ) ) ; +#41513 = SURFACE_STYLE_FILL_AREA ( #21207 ) ; +#41514 = ORIENTED_EDGE ( 'NONE', *, *, #24614, .F. ) ; +#41515 = FACE_OUTER_BOUND ( 'NONE', #15146, .T. ) ; +#41516 = STYLED_ITEM ( 'NONE', ( #7701 ), #15668 ) ; +#41517 = LINE ( 'NONE', #32072, #35516 ) ; +#41518 = CYLINDRICAL_SURFACE ( 'NONE', #4066, 0.2000000000000000900 ) ; +#41519 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32413, 'distance_accuracy_value', 'NONE'); +#41520 = AXIS2_PLACEMENT_3D ( 'NONE', #20731, #15337, #14334 ) ; +#41521 = DIRECTION ( 'NONE', ( -0.8190279881558656400, 8.879919240850217400E-017, 0.5737535661042597600 ) ) ; +#41522 = CARTESIAN_POINT ( 'NONE', ( -3.137984242873433200, -0.2999999999999999900, 0.9623819784617750900 ) ) ; +#41523 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #17759 ) ) ; +#41524 = STYLED_ITEM ( 'NONE', ( #7237 ), #11193 ) ; +#41525 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41526 = SURFACE_SIDE_STYLE ('',( #34380 ) ) ; +#41527 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #32622, 'distance_accuracy_value', 'NONE'); +#41528 = VERTEX_POINT ( 'NONE', #6049 ) ; +#41530 = EDGE_CURVE ( 'NONE', #19795, #35666, #8881, .T. ) ; +#41529 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #28585 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1230, #20286, #4140 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41531 = CARTESIAN_POINT ( 'NONE', ( 0.4000000000000000200, -2.322941965694886000, 0.1499999999999999900 ) ) ; +#41532 = EDGE_LOOP ( 'NONE', ( #33642, #30010, #7096, #5165 ) ) ; +#41533 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.281909278875039600E-015, 0.0000000000000000000 ) ) ; +#41534 = FILL_AREA_STYLE ('',( #31671 ) ) ; +#41535 = STYLED_ITEM ( 'NONE', ( #10435 ), #2218 ) ; +#41536 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #37233 ) ) ; +#41537 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#41538 = FILL_AREA_STYLE_COLOUR ( '', #34882 ) ; +#41539 = PLANE ( 'NONE', #13438 ) ; +#41540 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41541 = ORIENTED_EDGE ( 'NONE', *, *, #40773, .T. ) ; +#41542 = ADVANCED_FACE ( 'NONE', ( #33668 ), #7872, .T. ) ; +#41543 = FILL_AREA_STYLE_COLOUR ( '', #13944 ) ; +#41544 = LINE ( 'NONE', #26181, #15777 ) ; +#41545 = ORIENTED_EDGE ( 'NONE', *, *, #38507, .F. ) ; +#41546 = SURFACE_STYLE_FILL_AREA ( #14843 ) ; +#41547 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#41548 = PLANE ( 'NONE', #6586 ) ; +#41549 = SURFACE_SIDE_STYLE ('',( #22651 ) ) ; +#41550 = ORIENTED_EDGE ( 'NONE', *, *, #13591, .T. ) ; +#41551 = PRESENTATION_STYLE_ASSIGNMENT (( #37122 ) ) ; +#41552 = ORIENTED_EDGE ( 'NONE', *, *, #28174, .F. ) ; +#41553 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#41554 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 6.489040814115169100E-016, -1.000000000000000000 ) ) ; +#41555 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#41556 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41557 = FILL_AREA_STYLE ('',( #31973 ) ) ; +#41558 = CARTESIAN_POINT ( 'NONE', ( 3.395000000000000000, 0.2000000000000000100, -3.300000000000000300 ) ) ; +#41559 = SURFACE_STYLE_FILL_AREA ( #23267 ) ; +#41560 = CARTESIAN_POINT ( 'NONE', ( 4.542777971927788100, -1.300001745296165900, -6.539400084828222300 ) ) ; +#41561 = EDGE_CURVE ( 'NONE', #12807, #5976, #16481, .T. ) ; +#41562 = DIRECTION ( 'NONE', ( -3.252601786828646300E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#41563 = EDGE_CURVE ( 'NONE', #10907, #26813, #859, .T. ) ; +#41564 = ORIENTED_EDGE ( 'NONE', *, *, #39289, .F. ) ; +#41565 = SURFACE_SIDE_STYLE ('',( #36970 ) ) ; +#41566 = PRESENTATION_STYLE_ASSIGNMENT (( #40808 ) ) ; +#41567 = EDGE_CURVE ( 'NONE', #13814, #38991, #18020, .T. ) ; +#41568 = CARTESIAN_POINT ( 'NONE', ( 1.600000000000000100, -1.499998254703825300, -5.049999999999993600 ) ) ; +#41569 = ORIENTED_EDGE ( 'NONE', *, *, #14170, .T. ) ; +#41570 = AXIS2_PLACEMENT_3D ( 'NONE', #14636, #27214, #11505 ) ; +#41571 = FACE_BOUND ( 'NONE', #1719, .T. ) ; +#41572 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#41573 = VERTEX_POINT ( 'NONE', #38919 ) ; +#41574 = LINE ( 'NONE', #27883, #24431 ) ; +#41575 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41576 = CYLINDRICAL_SURFACE ( 'NONE', #9781, 0.2000000000000005100 ) ; +#41577 = SURFACE_SIDE_STYLE ('',( #36829 ) ) ; +#41578 = VERTEX_POINT ( 'NONE', #22562 ) ; +#41579 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#41580 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #41611 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2134, #31030, #37534 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41581 = VERTEX_POINT ( 'NONE', #6322 ) ; +#41583 = VERTEX_POINT ( 'NONE', #19468 ) ; +#41582 = FACE_OUTER_BOUND ( 'NONE', #9010, .T. ) ; +#41584 = VERTEX_POINT ( 'NONE', #29037 ) ; +#41585 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41586 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#41588 = EDGE_CURVE ( 'NONE', #2017, #23744, #41707, .T. ) ; +#41587 = AXIS2_PLACEMENT_3D ( 'NONE', #23449, #33199, #39674 ) ; +#41589 = SURFACE_SIDE_STYLE ('',( #3197 ) ) ; +#41590 = LINE ( 'NONE', #27858, #2228 ) ; +#41591 = ORIENTED_EDGE ( 'NONE', *, *, #7195, .F. ) ; +#41592 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #33436, 'distance_accuracy_value', 'NONE'); +#41593 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#41594 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#41595 = FILL_AREA_STYLE ('',( #38906 ) ) ; +#41596 = PRESENTATION_STYLE_ASSIGNMENT (( #18419 ) ) ; +#41598 = STYLED_ITEM ( 'NONE', ( #41335 ), #3363 ) ; +#41597 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #39444 ) ) ; +#41599 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#41601 = LINE ( 'NONE', #17695, #31494 ) ; +#41600 = FILL_AREA_STYLE ('',( #19049 ) ) ; +#41602 = LINE ( 'NONE', #33328, #27430 ) ; +#41603 = STYLED_ITEM ( 'NONE', ( #10349 ), #33240 ) ; +#41604 = CARTESIAN_POINT ( 'NONE', ( -3.178333333333019300, 0.2999999999999999900, -0.06128090415826408600 ) ) ; +#41605 = SURFACE_SIDE_STYLE ('',( #35213 ) ) ; +#41607 = AXIS2_PLACEMENT_3D ( 'NONE', #37116, #8271, #17915 ) ; +#41606 = TOROIDAL_SURFACE ( 'NONE', #32452, 1.550380236995679600, 0.1000000000000008500 ) ; +#41608 = FACE_OUTER_BOUND ( 'NONE', #30827, .T. ) ; +#41609 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#41610 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41611 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2134, 'distance_accuracy_value', 'NONE'); +#41612 = FILL_AREA_STYLE ('',( #25423 ) ) ; +#41613 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41614 = ORIENTED_EDGE ( 'NONE', *, *, #37934, .F. ) ; +#41615 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#41616 = PRESENTATION_STYLE_ASSIGNMENT (( #17399 ) ) ; +#41617 = VERTEX_POINT ( 'NONE', #157 ) ; +#41618 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#41619 = DIRECTION ( 'NONE', ( -6.056601140521965300E-031, 1.987721548152418300E-045, 1.000000000000000000 ) ) ; +#41620 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41621 = VERTEX_POINT ( 'NONE', #9681 ) ; +#41622 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41623 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#41624 = ORIENTED_EDGE ( 'NONE', *, *, #3960, .F. ) ; +#41625 = ORIENTED_EDGE ( 'NONE', *, *, #19068, .T. ) ; +#41626 = ORIENTED_EDGE ( 'NONE', *, *, #35061, .F. ) ; +#41627 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#41628 = SURFACE_STYLE_USAGE ( .BOTH. , #29062 ) ; +#41629 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#41630 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41631 = FILL_AREA_STYLE ('',( #15940 ) ) ; +#41632 = EDGE_CURVE ( 'NONE', #22597, #29035, #38670, .T. ) ; +#41633 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -7.744301232039317900E-017 ) ) ; +#41634 = SURFACE_SIDE_STYLE ('',( #4743 ) ) ; +#41635 = EDGE_CURVE ( 'NONE', #23748, #12885, #16971, .T. ) ; +#41636 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#41637 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #21076, 'distance_accuracy_value', 'NONE'); +#41638 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #28125 ) ) ; +#41639 = FILL_AREA_STYLE ('',( #19100 ) ) ; +#41640 = FILL_AREA_STYLE ('',( #2456 ) ) ; +#41641 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #16893 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8516, #37491, #18162 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41642 = CARTESIAN_POINT ( 'NONE', ( -3.344999999999999800, -0.1999999999999999800, -3.250000000000000000 ) ) ; +#41643 = ORIENTED_EDGE ( 'NONE', *, *, #33317, .T. ) ; +#41644 = AXIS2_PLACEMENT_3D ( 'NONE', #40745, #21445, #24691 ) ; +#41645 = ORIENTED_EDGE ( 'NONE', *, *, #28543, .T. ) ; +#41646 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#41647 = FACE_OUTER_BOUND ( 'NONE', #28868, .T. ) ; +#41648 = ORIENTED_EDGE ( 'NONE', *, *, #36842, .F. ) ; +#41650 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #38684 ) ) ; +#41649 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15692 ) ) ; +#41651 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#41652 = ORIENTED_EDGE ( 'NONE', *, *, #31755, .F. ) ; +#41653 = FACE_OUTER_BOUND ( 'NONE', #10509, .T. ) ; +#41654 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1258, 'distance_accuracy_value', 'NONE'); +#41656 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #27902 ) ) ; +#41655 = AXIS2_PLACEMENT_3D ( 'NONE', #41081, #2279, #16226 ) ; +#41657 = ORIENTED_EDGE ( 'NONE', *, *, #10822, .F. ) ; +#41658 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7852 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12975, #35465, #19377 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41659 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 2.367138801244516800E-016, 1.000000000000000000 ) ) ; +#41660 = CARTESIAN_POINT ( 'NONE', ( 3.100000000000000100, -1.380001745296126800, -4.781671842700004200 ) ) ; +#41661 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41662 = ORIENTED_EDGE ( 'NONE', *, *, #40780, .T. ) ; +#41663 = ADVANCED_FACE ( 'NONE', ( #14945 ), #16062, .T. ) ; +#41664 = FILL_AREA_STYLE_COLOUR ( '', #1862 ) ; +#41665 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41666 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#41667 = ORIENTED_EDGE ( 'NONE', *, *, #17169, .F. ) ; +#41668 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41669 = CARTESIAN_POINT ( 'NONE', ( -1.600000000000000100, 0.3500000000000000300, -1.250000000000000000 ) ) ; +#41670 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41671 = FACE_OUTER_BOUND ( 'NONE', #14197, .T. ) ; +#41672 = VERTEX_POINT ( 'NONE', #19757 ) ; +#41673 = LINE ( 'NONE', #29709, #23502 ) ; +#41674 = CARTESIAN_POINT ( 'NONE', ( 1.400000000000000800, 1.480001745296169600, -1.650000000000000400 ) ) ; +#41675 = DIRECTION ( 'NONE', ( -0.08715574274766049700, -2.860372408307929200E-016, 0.9961946980917454300 ) ) ; +#41676 = EDGE_LOOP ( 'NONE', ( #20192, #31665, #27720, #36425 ) ) ; +#41677 = PRESENTATION_STYLE_ASSIGNMENT (( #31677 ) ) ; +#41678 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000005300, 1.480001745296169800, -0.2339555568811697600 ) ) ; +#41679 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.837630800822891000E-016 ) ) ; +#41680 = FILL_AREA_STYLE_COLOUR ( '', #23019 ) ; +#41681 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#41682 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#41683 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#41684 = ORIENTED_EDGE ( 'NONE', *, *, #18564, .F. ) ; +#41685 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41686 = EDGE_CURVE ( 'NONE', #15546, #12491, #11399, .T. ) ; +#41687 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #16961, 'distance_accuracy_value', 'NONE'); +#41688 = FILL_AREA_STYLE_COLOUR ( '', #40865 ) ; +#41689 = ORIENTED_EDGE ( 'NONE', *, *, #10646, .F. ) ; +#41690 = PRESENTATION_STYLE_ASSIGNMENT (( #30035 ) ) ; +#41691 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.281909278875039600E-015, -6.056601140521967000E-031 ) ) ; +#41692 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41693 = EDGE_CURVE ( 'NONE', #35739, #15774, #20042, .T. ) ; +#41694 = SURFACE_STYLE_FILL_AREA ( #66 ) ; +#41695 = AXIS2_PLACEMENT_3D ( 'NONE', #20492, #30201, #10981 ) ; +#41696 = FACE_OUTER_BOUND ( 'NONE', #11510, .T. ) ; +#41698 = SURFACE_STYLE_USAGE ( .BOTH. , #2921 ) ; +#41697 = LINE ( 'NONE', #11708, #33131 ) ; +#41699 = AXIS2_PLACEMENT_3D ( 'NONE', #9680, #32148, #19463 ) ; +#41700 = ADVANCED_FACE ( 'NONE', ( #22051 ), #23109, .F. ) ; +#41701 = EDGE_LOOP ( 'NONE', ( #6387, #26408, #24952, #25529 ) ) ; +#41702 = ORIENTED_EDGE ( 'NONE', *, *, #2836, .T. ) ; +#41703 = FILL_AREA_STYLE_COLOUR ( '', #14848 ) ; +#41704 = SURFACE_STYLE_FILL_AREA ( #10699 ) ; +#41705 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41706 = PRESENTATION_STYLE_ASSIGNMENT (( #674 ) ) ; +#41707 = LINE ( 'NONE', #32009, #41250 ) ; +#41708 = CARTESIAN_POINT ( 'NONE', ( -3.575000000000003300, 0.6800017452961684100, -3.999999999999998200 ) ) ; +#41709 = ORIENTED_EDGE ( 'NONE', *, *, #14559, .T. ) ; +#41710 = STYLED_ITEM ( 'NONE', ( #2563 ), #38129 ) ; +#41711 = VECTOR ( 'NONE', #106, 1000.000000000000000 ) ; +#41712 = AXIS2_PLACEMENT_3D ( 'NONE', #40047, #20195, #39909 ) ; +#41713 = PLANE ( 'NONE', #17702 ) ; +#41714 = SURFACE_STYLE_FILL_AREA ( #35676 ) ; +#41715 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41716 = ADVANCED_FACE ( 'NONE', ( #36666 ), #36398, .F. ) ; +#41718 = AXIS2_PLACEMENT_3D ( 'NONE', #28193, #34133, #31442 ) ; +#41717 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #35253 ) ) ; +#41719 = ORIENTED_EDGE ( 'NONE', *, *, #12774, .F. ) ; +#41720 = EDGE_CURVE ( 'NONE', #40573, #22361, #22580, .T. ) ; +#41721 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41722 = SURFACE_STYLE_FILL_AREA ( #19260 ) ; +#41723 = FILL_AREA_STYLE_COLOUR ( '', #30043 ) ; +#41725 = STYLED_ITEM ( 'NONE', ( #21973 ), #622 ) ; +#41724 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #20702 ), #4127 ) ; +#41726 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865475700, 0.7071067811865475700 ) ) ; +#41727 = LINE ( 'NONE', #19993, #12921 ) ; +#41728 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4663, 'distance_accuracy_value', 'NONE'); +#41729 = ORIENTED_EDGE ( 'NONE', *, *, #8768, .T. ) ; +#41730 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.1000000000000145800, -1.949999999999999500 ) ) ; +#41731 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #5556, #30840, #8646, #11619 ), + .UNSPECIFIED., .F., .F., + ( 4, 4 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#41732 = FILL_AREA_STYLE_COLOUR ( '', #21839 ) ; +#41733 = CARTESIAN_POINT ( 'NONE', ( 4.525000000000006600, -0.2999999999999851700, -1.950000000000001300 ) ) ; +#41734 = LINE ( 'NONE', #40352, #889 ) ; +#41735 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41736 = CARTESIAN_POINT ( 'NONE', ( 3.242385881558931700, 0.07499999999999999700, 0.7034798965989087500 ) ) ; +#41737 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.478176394252580200E-017, -6.082356018693180500E-031 ) ) ; +#41738 = ORIENTED_EDGE ( 'NONE', *, *, #18670, .F. ) ; +#41739 = ORIENTED_EDGE ( 'NONE', *, *, #35592, .T. ) ; +#41740 = CIRCLE ( 'NONE', #31089, 0.1000000000000000500 ) ; +#41741 = ORIENTED_EDGE ( 'NONE', *, *, #23355, .T. ) ; +#41742 = PRESENTATION_STYLE_ASSIGNMENT (( #31783 ) ) ; +#41743 = CYLINDRICAL_SURFACE ( 'NONE', #4927, 0.1000000000000002600 ) ; +#41744 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000010700, -1.799998254703821100, -6.800000000000000700 ) ) ; +#41745 = PRESENTATION_STYLE_ASSIGNMENT (( #28748 ) ) ; +#41746 = SURFACE_STYLE_FILL_AREA ( #2144 ) ; +#41747 = LINE ( 'NONE', #2033, #33186 ) ; +#41748 = CARTESIAN_POINT ( 'NONE', ( -6.423319210664843100, -1.380001745296171900, -6.250000000000000000 ) ) ; +#41749 = ORIENTED_EDGE ( 'NONE', *, *, #17545, .F. ) ; +#41750 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41751 = EDGE_LOOP ( 'NONE', ( #16420, #11737, #14488, #2960 ) ) ; +#41752 = EDGE_CURVE ( 'NONE', #8969, #13393, #17478, .T. ) ; +#41753 = ADVANCED_FACE ( 'NONE', ( #23007 ), #19564, .F. ) ; +#41754 = SURFACE_STYLE_USAGE ( .BOTH. , #19205 ) ; +#41755 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#41756 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41757 = LINE ( 'NONE', #28539, #33196 ) ; +#41758 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41759 = EDGE_CURVE ( 'NONE', #25184, #34527, #35656, .T. ) ; +#41760 = VECTOR ( 'NONE', #14340, 1000.000000000000000 ) ; +#41761 = CARTESIAN_POINT ( 'NONE', ( -2.400000000000000400, -1.139998254717369000, -5.049996877890552400 ) ) ; +#41762 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#41763 = FILL_AREA_STYLE ('',( #15530 ) ) ; +#41764 = CIRCLE ( 'NONE', #26328, 0.3600000000000078700 ) ; +#41765 = CARTESIAN_POINT ( 'NONE', ( -3.170000000000005300, -1.480001745296170000, -0.2339555568811695900 ) ) ; +#41766 = AXIS2_PLACEMENT_3D ( 'NONE', #38560, #31803, #41806 ) ; +#41767 = VECTOR ( 'NONE', #1393, 1000.000000000000100 ) ; +#41768 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41769 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#41770 = SURFACE_SIDE_STYLE ('',( #12898 ) ) ; +#41771 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#41772 = ORIENTED_EDGE ( 'NONE', *, *, #12378, .F. ) ; +#41773 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #791 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #30026, #14089, #36676 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41774 = PRESENTATION_STYLE_ASSIGNMENT (( #27703 ) ) ; +#41775 = STYLED_ITEM ( 'NONE', ( #27341 ), #6194 ) ; +#41776 = CARTESIAN_POINT ( 'NONE', ( -3.345000000000000200, 0.0000000000000000000, -3.250000000000000400 ) ) ; +#41777 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999992000, -1.500001745296177600, -7.350000000000005900 ) ) ; +#41779 = EDGE_CURVE ( 'NONE', #17394, #11615, #30145, .T. ) ; +#41778 = STYLED_ITEM ( 'NONE', ( #30705 ), #36221 ) ; +#41780 = SURFACE_STYLE_FILL_AREA ( #25982 ) ; +#41781 = ORIENTED_EDGE ( 'NONE', *, *, #18751, .T. ) ; +#41783 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41782 = CARTESIAN_POINT ( 'NONE', ( 3.170000000000007900, 1.480001745296170000, -0.2339555568811680100 ) ) ; +#41784 = ORIENTED_EDGE ( 'NONE', *, *, #25583, .T. ) ; +#41785 = VERTEX_POINT ( 'NONE', #4311 ) ; +#41786 = PRESENTATION_STYLE_ASSIGNMENT (( #22553 ) ) ; +#41787 = FILL_AREA_STYLE_COLOUR ( '', #36659 ) ; +#41788 = SURFACE_STYLE_FILL_AREA ( #20970 ) ; +#41790 = AXIS2_PLACEMENT_3D ( 'NONE', #2730, #6369, #5943 ) ; +#41789 = AXIS2_PLACEMENT_3D ( 'NONE', #37311, #1906, #34213 ) ; +#41791 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41792 = FACE_OUTER_BOUND ( 'NONE', #21659, .T. ) ; +#41793 = AXIS2_PLACEMENT_3D ( 'NONE', #33099, #36491, #33241 ) ; +#41794 = LINE ( 'NONE', #40390, #8435 ) ; +#41795 = FILL_AREA_STYLE ('',( #34907 ) ) ; +#41796 = VERTEX_POINT ( 'NONE', #26809 ) ; +#41797 = VECTOR ( 'NONE', #37205, 1000.000000000000000 ) ; +#41798 = ORIENTED_EDGE ( 'NONE', *, *, #8159, .F. ) ; +#41799 = SURFACE_STYLE_USAGE ( .BOTH. , #24786 ) ; +#41800 = LINE ( 'NONE', #179, #37283 ) ; +#41801 = LINE ( 'NONE', #22827, #20132 ) ; +#41802 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -2.367138801244516800E-016 ) ) ; +#41803 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#41804 = CYLINDRICAL_SURFACE ( 'NONE', #19851, 0.1000000000000002600 ) ; +#41805 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #31301, 'distance_accuracy_value', 'NONE'); +#41806 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#41807 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41808 = CARTESIAN_POINT ( 'NONE', ( -4.492416573867751900, -1.982581680836083000, -3.595341433092483600 ) ) ; +#41809 = VECTOR ( 'NONE', #37369, 1000.000000000000000 ) ; +#41810 = PLANE ( 'NONE', #32504 ) ; +#41811 = EDGE_CURVE ( 'NONE', #3462, #10759, #10926, .T. ) ; +#41812 = ORIENTED_EDGE ( 'NONE', *, *, #26466, .T. ) ; +#41813 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000003600, 0.3300017452961688800, -4.975000000000000500 ) ) ; +#41814 = EDGE_CURVE ( 'NONE', #39552, #23252, #11877, .T. ) ; +#41815 = VERTEX_POINT ( 'NONE', #40163 ) ; +#41816 = CARTESIAN_POINT ( 'NONE', ( -4.525000000000010100, -1.380001745296165500, -2.399999999999999500 ) ) ; +#41817 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#41818 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #38178, 'distance_accuracy_value', 'NONE'); +#41819 = VECTOR ( 'NONE', #31421, 1000.000000000000000 ) ; +#41820 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#41821 = EDGE_CURVE ( 'NONE', #37424, #2418, #38718, .T. ) ; +#41822 = CARTESIAN_POINT ( 'NONE', ( -3.045000000000000400, -0.3000000000000000400, -1.249999999999999800 ) ) ; +#41823 = ORIENTED_EDGE ( 'NONE', *, *, #18788, .F. ) ; +#41824 = ORIENTED_EDGE ( 'NONE', *, *, #5527, .T. ) ; +#41825 = VERTEX_POINT ( 'NONE', #11089 ) ; +#41826 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#41827 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11137 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #28783, #32017, #35290 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41828 = CARTESIAN_POINT ( 'NONE', ( 0.5999999999999999800, 0.3500000000000000300, 0.1499999999999999700 ) ) ; +#41829 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#41830 = CARTESIAN_POINT ( 'NONE', ( -4.475000000000005000, 0.2800017452961688400, -5.250000000000000000 ) ) ; +#41831 = VECTOR ( 'NONE', #12957, 1000.000000000000000 ) ; +#41832 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#41833 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#41834 = ORIENTED_EDGE ( 'NONE', *, *, #19167, .F. ) ; +#41835 = VECTOR ( 'NONE', #32556, 1000.000000000000000 ) ; +#41836 = ORIENTED_EDGE ( 'NONE', *, *, #35093, .F. ) ; +#41837 = ORIENTED_EDGE ( 'NONE', *, *, #37837, .F. ) ; +#41838 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #26722 ), #15076 ) ; +#41839 = FILL_AREA_STYLE ('',( #21980 ) ) ; +#41840 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #35370 ), #24560 ) ; +#41841 = CARTESIAN_POINT ( 'NONE', ( -4.620380236995680800, 0.2800000000000028000, -0.8400000000000000800 ) ) ; +#41842 = FILL_AREA_STYLE ('',( #9773 ) ) ; +#41845 = EDGE_CURVE ( 'NONE', #4971, #34934, #37677, .T. ) ; +#41844 = CARTESIAN_POINT ( 'NONE', ( 1.599999999999999900, -2.322941965694886000, -1.250000000000000000 ) ) ; +#41843 = STYLED_ITEM ( 'NONE', ( #41616 ), #37248 ) ; +#41846 = ORIENTED_EDGE ( 'NONE', *, *, #39036, .F. ) ; +#41847 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#41848 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #19280, 'distance_accuracy_value', 'NONE'); +#41850 = AXIS2_PLACEMENT_3D ( 'NONE', #28573, #41679, #18994 ) ; +#41849 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40528 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #20133, #801, #36220 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#41851 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.281909278875039200E-015, -6.056601140521966100E-031 ) ) ; +#41852 = AXIS2_PLACEMENT_3D ( 'NONE', #27295, #17157, #30555 ) ; +#41853 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, -0.3499999999999999800, -1.250000000000000000 ) ) ; +#41854 = AXIS2_PLACEMENT_3D ( 'NONE', #1420, #14253, #30198 ) ; +#41855 = LINE ( 'NONE', #33708, #4993 ) ; +#41856 = VERTEX_POINT ( 'NONE', #20460 ) ; +#41857 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5999, 'distance_accuracy_value', 'NONE'); +#41858 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11546 ) ) ; +#41859 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#41860 = CARTESIAN_POINT ( 'NONE', ( -4.415000000000002700, 0.2800017452961687200, -6.249999999999998200 ) ) ; +#41861 = CARTESIAN_POINT ( 'NONE', ( 4.375000000000007100, -0.8500017452961659000, -5.599999999999999600 ) ) ; +#41862 = VERTEX_POINT ( 'NONE', #1256 ) ; +#41863 = CARTESIAN_POINT ( 'NONE', ( 4.449999999999999300, -1.400001745296165500, -7.350000000000006800 ) ) ; +#41864 = EDGE_LOOP ( 'NONE', ( #37793, #6770, #29638, #18686, #2856, #25619 ) ) ; +#41865 = ORIENTED_EDGE ( 'NONE', *, *, #19161, .T. ) ; +#41866 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#41867 = ORIENTED_EDGE ( 'NONE', *, *, #31329, .F. ) ; +#41868 = LINE ( 'NONE', #25965, #16604 ) ; +#41869 = PRESENTATION_STYLE_ASSIGNMENT (( #41754 ) ) ; +#41870 = DIRECTION ( 'NONE', ( -4.336808689942016900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#41871 = DIRECTION ( 'NONE', ( -5.782411586589410900E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#41872 = CIRCLE ( 'NONE', #36473, 0.2000000000000007300 ) ; +#41873 = ORIENTED_EDGE ( 'NONE', *, *, #3006, .T. ) ; +#41874 = LINE ( 'NONE', #4047, #32275 ) ; +#41875 = ORIENTED_EDGE ( 'NONE', *, *, #1353, .F. ) ; +#41876 = ORIENTED_EDGE ( 'NONE', *, *, #29729, .F. ) ; +#41877 = PRESENTATION_STYLE_ASSIGNMENT (( #37901 ) ) ; +#41878 = CARTESIAN_POINT ( 'NONE', ( -4.375000000000005300, 0.3300017452961679900, -5.175000000000000700 ) ) ; +#41879 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#41880 = FILL_AREA_STYLE_COLOUR ( '', #32162 ) ; +ENDSEC; +END-ISO-10303-21; diff --git a/Hardware/FabReader2/Library/2305018-2/License.txt b/Hardware/FabReader2/Library/2305018-2/License.txt new file mode 100644 index 0000000..9cb6384 --- /dev/null +++ b/Hardware/FabReader2/Library/2305018-2/License.txt @@ -0,0 +1,24 @@ +BY ACCESSING OR USING THESE SYMBOLS & FOOTPRINTS ("MODELS"), YOU ARE ACKNOWLEDGING THAT YOU HAVE READ, FULLY UNDERSTAND AND AGREE TO THESE TERMS AND CONDITIONS (the "Agreement"), WHICH CONSTITUTE A BINDING AGREEMENT BETWEEN YOU AND SNAPEDA, INC., ENTERED INTO ON THE DATE OF SUCH OCCURRENCE (the "Effective Date"). IF YOU ARE ACCESSING OR USING THESE FILES ON BEHALF OF AN ENTITY, YOU REPRESENT THAT YOU HAVE THE RIGHT, AUTHORITY, AND CAPACITY TO BIND SUCH ENTITY TO THIS AGREEMENT AND HEREBY DO SO. IF YOU DO NOT AGREE WITH ANY OF THE TERMS OR CONDITIONS OF THIS AGREEMENT, YOU MUST NOT USE ANY PART OF THESE MODELS. + +1. Design License + +You and your sub-licensees are hereby licensed to design, manufacture, use and distribute, circuit board designs and circuit boards formed by combining Models provided by SnapEDA with other circuit elements of your choosing. You may then convey such combinations under licensing terms of your choice.  + +Individual Models remain the intellectual property of SnapEDA, Inc. You shall not (and shall not permit or encourage any third party to) to do any of the following : + +(a) sell, assign, lease, lend, rent, issue, sublicense, make available, or otherwise distribute to any third party, or publicly perform, display or communicate, the Models (for example, by uploading Models to another website or software application);
 +(b) remove, alter, or conceal, any copyright, trademark, or other proprietary rights notice or legend displayed or contained in the individual Models. + +For further clarity, once integrated into a schematic design or PCB layout, Models may be modified freely for the purpose of designing a circuit board.  + + +2. Limitation of Liability + +IN NO EVENT WILL SNAPEDA OR OUR SUBSIDIARIES, AGENTS, SUCCESSORS, THIRD PARTY PROVIDERS, AND/OR ANY OF THE FOREGOING ENTITIES' RESPECTIVE DIRECTORS, OFFICERS, EMPLOYEES, AGENTS, REPRESENTATIVES, CUSTOMERS, SUPPLIERS, OR LICENSORS BE RESPONSIBLE OR LIABLE UNDER, OR OTHERWISE IN CONNECTION WITH THIS AGREEMENT, FOR: + +(a) ANY CONSEQUENTIAL, INDIRECT, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES; +(b) ANY LOSS OF PROFITS, LOSS OF BUSINESS, LOSS OF REVENUE, OR LOSS OF ANTICIPATED SAVINGS; +(c) ANY LOSS OF, OR DAMAGE TO, DATA, REPUTATION, OR GOODWILL; AND/OR +(d) THE COST OF PROCURING ANY SUBSTITUTE GOODS OR SERVICES. + +THE COMBINED AGGREGATE LIABILITY OF SNAPEDA AND ALL SNAPEDA CONTENT AFFILIATES UNDER, OR OTHERWISE IN CONNECTION WITH, THIS AGREEMENT SHALL NOT EXCEED THE TOTAL AMOUNT OF FEES RECEIVED BY SNAPEDA FROM YOU IN THE PREVIOUS TWELVE (12) MONTHS. THE FOREGOING EXCLUSIONS AND LIMITATIONS SHALL APPLY: (a) EVEN IF SNAPEDA OR ANY SNAPEDA CONTENT AFFILIATE HAS BEEN ADVISED, OR SHOULD HAVE BEEN AWARE, OF THE POSSIBILITY OF LOSSES, DAMAGES, OR COSTS; (b) EVEN IF ANY REMEDY IN THIS AGREEMENT FAILS OF ITS ESSENTIAL PURPOSE; AND (c) REGARDLESS OF THE THEORY OR BASIS OF LIABILITY (INCLUDING WITHOUT LIMITATION BREACH OF CONTRACT, TORT, NEGLIGENCE, AND STRICT LIABILITY). \ No newline at end of file diff --git a/Hardware/FabReader2/Library/2305018-2/TE_2305018-2.kicad_mod b/Hardware/FabReader2/Library/2305018-2/TE_2305018-2.kicad_mod new file mode 100644 index 0000000..151f1a8 --- /dev/null +++ b/Hardware/FabReader2/Library/2305018-2/TE_2305018-2.kicad_mod @@ -0,0 +1,57 @@ + +(module TE_2305018-2 (layer F.Cu) (tedit 6269D74F) + (descr "") + (fp_text reference REF** (at -2.973105 -5.666129 0) (layer F.SilkS) + (effects (font (size 0.641100787402 0.641100787402) (thickness 0.15))) + ) + (fp_text value TE_2305018-2 (at -0.123382 4.8507135 0) (layer F.Fab) + (effects (font (size 0.640939370079 0.640939370079) (thickness 0.15))) + ) + (pad S1 thru_hole oval (at -4.45 0.0) (size 1.025 2.05) (drill oval 0.45 1.65) (layers *.Cu *.Mask)) + (pad S2 thru_hole oval (at 4.45 0.0) (size 1.025 2.05) (drill oval 0.45 1.65) (layers *.Cu *.Mask)) + (pad S3 thru_hole oval (at -4.45 -3.2) (size 0.925 1.85) (drill oval 0.45 1.45) (layers *.Cu *.Mask)) + (pad S4 thru_hole oval (at 4.45 -3.2) (size 0.925 1.85) (drill oval 0.45 1.45) (layers *.Cu *.Mask)) + (pad G1 smd rect (at -3.55 -3.375) (size 0.3 0.75) (layers F.Cu F.Mask F.Paste)) + (pad G2 smd rect (at 3.55 -3.375) (size 0.3 0.75) (layers F.Cu F.Mask F.Paste)) + (pad A1 smd rect (at -3.05 -3.375) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad A2 smd rect (at -2.25 -3.375) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad A3 smd rect (at -1.75 -3.375) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad A4 smd rect (at -1.25 -3.375) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad A5 smd rect (at -0.75 -3.375) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad A6 smd rect (at -0.25 -3.375) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad A7 smd rect (at 0.25 -3.375) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad A8 smd rect (at 0.75 -3.375) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad A9 smd rect (at 1.25 -3.375) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad A10 smd rect (at 1.75 -3.375) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad A11 smd rect (at 2.25 -3.375) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad A12 smd rect (at 3.05 -3.375) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad B1 smd rect (at 3.0 -2.125) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad B2 smd rect (at 2.5 -2.125) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad B3 smd rect (at 2.0 -2.125) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad B4 smd rect (at 1.5 -2.125) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad B5 smd rect (at 1.0 -2.125) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad B6 smd rect (at 0.5 -2.125) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad B7 smd rect (at -0.5 -2.125) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad B8 smd rect (at -1.0 -2.125) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad B9 smd rect (at -1.5 -2.125) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad B10 smd rect (at -2.0 -2.125) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad B11 smd rect (at -2.5 -2.125) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (pad B12 smd rect (at -3.0 -2.125) (size 0.25 0.75) (layers F.Cu F.Mask F.Paste)) + (fp_line (start -4.925 4.2) (end -4.925 -4.45) (layer F.Fab) (width 0.127)) + (fp_line (start -4.925 -4.45) (end 4.925 -4.45) (layer F.Fab) (width 0.127)) + (fp_line (start 4.925 -4.45) (end 4.925 4.2) (layer F.Fab) (width 0.127)) + (fp_line (start -4.925 4.2) (end 4.925 4.2) (layer F.Fab) (width 0.127)) + (fp_line (start -4.925 -4.45) (end 4.925 -4.45) (layer F.SilkS) (width 0.127)) + (fp_line (start 4.925 1.4) (end -4.925 1.4) (layer F.SilkS) (width 0.127)) + (fp_line (start 4.925 1.4) (end 4.925 1.23125) (layer F.SilkS) (width 0.127)) + (fp_line (start 4.925 -1.23125) (end 4.925 -2.15469) (layer F.SilkS) (width 0.127)) + (fp_line (start 4.925 -4.30938) (end 4.925 -4.45) (layer F.SilkS) (width 0.127)) + (fp_line (start -4.925 1.4) (end -4.925 1.23125) (layer F.SilkS) (width 0.127)) + (fp_line (start -4.925 -1.23125) (end -4.925 -2.15469) (layer F.SilkS) (width 0.127)) + (fp_line (start -4.925 -4.30938) (end -4.925 -4.45) (layer F.SilkS) (width 0.127)) + (fp_line (start -5.175 4.45) (end -5.175 -4.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.175 -4.7) (end 5.175 -4.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.175 -4.7) (end 5.175 4.45) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.175 4.45) (end -5.175 4.45) (layer F.CrtYd) (width 0.05)) + (fp_circle (center -3.085 -4.907) (end -2.985 -4.907) (layer F.SilkS) (width 0.2)) +) \ No newline at end of file diff --git a/Hardware/FabReader2/Library/2305018-2/how-to-import.htm b/Hardware/FabReader2/Library/2305018-2/how-to-import.htm new file mode 100644 index 0000000..19e484d --- /dev/null +++ b/Hardware/FabReader2/Library/2305018-2/how-to-import.htm @@ -0,0 +1 @@ + Page Redirection If you are not redirected automatically, follow this link to the import guide. \ No newline at end of file diff --git a/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/CMI-9705-0380-SMT-TR.kicad_sym b/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/CMI-9705-0380-SMT-TR.kicad_sym new file mode 100644 index 0000000..7a3cd7a --- /dev/null +++ b/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/CMI-9705-0380-SMT-TR.kicad_sym @@ -0,0 +1,135 @@ +(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor) + (symbol "CMI-9705-0380-SMT-TR" (pin_numbers hide) (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "LS" (id 0) (at -1.27 6.35 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Value" "CMI-9705-0380-SMT-TR" (id 1) (at -1.27 -8.255 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Footprint" "CUI_CMI-9705-0380-SMT-TR" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "Datasheet" "" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "PARTREV" "1.0" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "MANUFACTURER" "CUI Inc." (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "MAXIMUM_PACKAGE_HEIGHT" "5.2mm" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "STANDARD" "Manufacturer Recommendations" (id 7) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "ki_locked" "" (id 8) (at 0 0 0) + (effects (font (size 1.27 1.27))) + ) + (symbol "CMI-9705-0380-SMT-TR_0_0" + (polyline + (pts + (xy -3.175 -1.905) + (xy -2.54 -1.905) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -3.175 1.905) + (xy -3.175 -1.905) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -3.175 1.905) + (xy -2.54 1.905) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -2.54 -2.54) + (xy -2.54 -1.905) + ) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -2.54 -1.905) + (xy 0 -1.905) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -2.54 1.905) + (xy 0 1.905) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -2.54 2.54) + (xy -2.54 1.905) + ) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 -1.905) + (xy 0 1.905) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 -1.905) + (xy 2.54 -5.08) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 1.905) + (xy 2.54 5.08) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 2.54 -5.08) + (xy 2.54 5.08) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (text "+" (at -4.318 3.302 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (text "-" (at -4.318 -3.556 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (pin passive line (at -2.54 -5.08 90) (length 2.54) + (name "~" (effects (font (size 1.016 1.016)))) + (number "N" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -2.54 5.08 270) (length 2.54) + (name "~" (effects (font (size 1.016 1.016)))) + (number "P" (effects (font (size 1.016 1.016)))) + ) + ) + ) +) diff --git a/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/CMI-9705-0380-SMT-TR.lib b/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/CMI-9705-0380-SMT-TR.lib new file mode 100644 index 0000000..ee7fd64 --- /dev/null +++ b/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/CMI-9705-0380-SMT-TR.lib @@ -0,0 +1,36 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +#(c) SnapEDA 2016 (snapeda.com) +#This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Design Exception 1.0 +# +# CMI-9705-0380-SMT-TR +# +DEF CMI-9705-0380-SMT-TR LS 0 40 N N 1 L N +F0 "LS" -50 250 50 H V L BNN +F1 "CMI-9705-0380-SMT-TR" -50 -325 50 H V L BNN +F2 "CUI_CMI-9705-0380-SMT-TR" 0 0 50 H I L BNN +F3 "" 0 0 50 H I L BNN +F4 "1.0" 0 0 50 H I L BNN "PARTREV" +F5 "CUI Inc." 0 0 50 H I L BNN "MANUFACTURER" +F6 "5.2mm" 0 0 50 H I L BNN "MAXIMUM_PACKAGE_HEIGHT" +F7 "Manufacturer Recommendations" 0 0 50 H I L BNN "STANDARD" +DRAW +P 2 0 0 10 -125 75 -125 -75 N +P 2 0 0 10 -125 -75 -100 -75 N +P 2 0 0 10 0 -75 0 75 N +P 2 0 0 10 -125 75 -100 75 N +P 2 0 0 10 0 -75 100 -200 N +P 2 0 0 10 100 -200 100 200 N +P 2 0 0 10 0 75 100 200 N +P 2 0 0 6 -100 -100 -100 -75 N +P 2 0 0 10 -100 -75 0 -75 N +P 2 0 0 6 -100 100 -100 75 N +P 2 0 0 10 -100 75 0 75 N +T 0 -170 130 50 0 0 0 + Normal 0 L B +T 0 -170 -140 50 0 0 0 - Normal 0 L B +X ~ N -100 -200 100 U 40 40 0 0 P +X ~ P -100 200 100 D 40 40 0 0 P +ENDDRAW +ENDDEF +# +# End Library \ No newline at end of file diff --git a/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/CUI_CMI-9705-0380-SMT-TR.kicad_mod b/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/CUI_CMI-9705-0380-SMT-TR.kicad_mod new file mode 100644 index 0000000..cabd14b --- /dev/null +++ b/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/CUI_CMI-9705-0380-SMT-TR.kicad_mod @@ -0,0 +1,40 @@ + +(module CUI_CMI-9705-0380-SMT-TR (layer F.Cu) (tedit 6269D69C) + (descr "") + (fp_text reference REF** (at -1.925 -6.935 0) (layer F.SilkS) + (effects (font (size 1.0 1.0) (thickness 0.15))) + ) + (fp_text value CUI_CMI-9705-0380-SMT-TR (at 10.14 6.865 0) (layer F.Fab) + (effects (font (size 1.0 1.0) (thickness 0.15))) + ) + (pad N smd rect (at 0.0 4.95) (size 1.7 1.5) (layers F.Cu F.Mask F.Paste)) + (pad P smd rect (at 0.0 -4.95) (size 1.7 1.5) (layers F.Cu F.Mask F.Paste)) + (fp_line (start -4.85 -4.85) (end 4.85 -4.85) (layer F.Fab) (width 0.127)) + (fp_line (start 4.85 -4.85) (end 4.85 4.85) (layer F.Fab) (width 0.127)) + (fp_line (start 4.85 4.85) (end -2.65 4.85) (layer F.Fab) (width 0.127)) + (fp_line (start -4.85 -4.85) (end -4.85 2.65) (layer F.Fab) (width 0.127)) + (fp_line (start -4.85 2.65) (end -2.65 4.85) (layer F.Fab) (width 0.127)) + (fp_line (start -1.35 -4.85) (end -4.85 -4.85) (layer F.SilkS) (width 0.127)) + (fp_line (start -4.85 -4.85) (end -4.85 2.65) (layer F.SilkS) (width 0.127)) + (fp_line (start -4.85 2.65) (end -2.65 4.85) (layer F.SilkS) (width 0.127)) + (fp_line (start -2.65 4.85) (end -1.35 4.85) (layer F.SilkS) (width 0.127)) + (fp_line (start 1.35 4.85) (end 4.85 4.85) (layer F.SilkS) (width 0.127)) + (fp_line (start 4.85 4.85) (end 4.85 -4.85) (layer F.SilkS) (width 0.127)) + (fp_line (start 4.85 -4.85) (end 1.34 -4.85) (layer F.SilkS) (width 0.127)) + (fp_line (start -5.1 -5.95) (end 5.1 -5.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.1 -5.95) (end 5.1 5.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.1 5.95) (end -5.1 5.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.1 5.95) (end -5.1 -5.95) (layer F.CrtYd) (width 0.05)) + (fp_text user + (at 1.8 -5.8) (layer F.SilkS) + (effects (font (size 1.0 1.0) (thickness 0.15))) + ) + (fp_text user + (at 1.8 -5.8) (layer F.Fab) + (effects (font (size 1.0 1.0) (thickness 0.15))) + ) + (fp_text user - (at 2.0 6.3) (layer F.Fab) + (effects (font (size 1.0 1.0) (thickness 0.15))) + ) + (fp_text user - (at 2.0 6.3) (layer F.SilkS) + (effects (font (size 1.0 1.0) (thickness 0.15))) + ) +) \ No newline at end of file diff --git a/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/License.txt b/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/License.txt new file mode 100644 index 0000000..9cb6384 --- /dev/null +++ b/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/License.txt @@ -0,0 +1,24 @@ +BY ACCESSING OR USING THESE SYMBOLS & FOOTPRINTS ("MODELS"), YOU ARE ACKNOWLEDGING THAT YOU HAVE READ, FULLY UNDERSTAND AND AGREE TO THESE TERMS AND CONDITIONS (the "Agreement"), WHICH CONSTITUTE A BINDING AGREEMENT BETWEEN YOU AND SNAPEDA, INC., ENTERED INTO ON THE DATE OF SUCH OCCURRENCE (the "Effective Date"). IF YOU ARE ACCESSING OR USING THESE FILES ON BEHALF OF AN ENTITY, YOU REPRESENT THAT YOU HAVE THE RIGHT, AUTHORITY, AND CAPACITY TO BIND SUCH ENTITY TO THIS AGREEMENT AND HEREBY DO SO. IF YOU DO NOT AGREE WITH ANY OF THE TERMS OR CONDITIONS OF THIS AGREEMENT, YOU MUST NOT USE ANY PART OF THESE MODELS. + +1. Design License + +You and your sub-licensees are hereby licensed to design, manufacture, use and distribute, circuit board designs and circuit boards formed by combining Models provided by SnapEDA with other circuit elements of your choosing. You may then convey such combinations under licensing terms of your choice.  + +Individual Models remain the intellectual property of SnapEDA, Inc. You shall not (and shall not permit or encourage any third party to) to do any of the following : + +(a) sell, assign, lease, lend, rent, issue, sublicense, make available, or otherwise distribute to any third party, or publicly perform, display or communicate, the Models (for example, by uploading Models to another website or software application);
 +(b) remove, alter, or conceal, any copyright, trademark, or other proprietary rights notice or legend displayed or contained in the individual Models. + +For further clarity, once integrated into a schematic design or PCB layout, Models may be modified freely for the purpose of designing a circuit board.  + + +2. Limitation of Liability + +IN NO EVENT WILL SNAPEDA OR OUR SUBSIDIARIES, AGENTS, SUCCESSORS, THIRD PARTY PROVIDERS, AND/OR ANY OF THE FOREGOING ENTITIES' RESPECTIVE DIRECTORS, OFFICERS, EMPLOYEES, AGENTS, REPRESENTATIVES, CUSTOMERS, SUPPLIERS, OR LICENSORS BE RESPONSIBLE OR LIABLE UNDER, OR OTHERWISE IN CONNECTION WITH THIS AGREEMENT, FOR: + +(a) ANY CONSEQUENTIAL, INDIRECT, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES; +(b) ANY LOSS OF PROFITS, LOSS OF BUSINESS, LOSS OF REVENUE, OR LOSS OF ANTICIPATED SAVINGS; +(c) ANY LOSS OF, OR DAMAGE TO, DATA, REPUTATION, OR GOODWILL; AND/OR +(d) THE COST OF PROCURING ANY SUBSTITUTE GOODS OR SERVICES. + +THE COMBINED AGGREGATE LIABILITY OF SNAPEDA AND ALL SNAPEDA CONTENT AFFILIATES UNDER, OR OTHERWISE IN CONNECTION WITH, THIS AGREEMENT SHALL NOT EXCEED THE TOTAL AMOUNT OF FEES RECEIVED BY SNAPEDA FROM YOU IN THE PREVIOUS TWELVE (12) MONTHS. THE FOREGOING EXCLUSIONS AND LIMITATIONS SHALL APPLY: (a) EVEN IF SNAPEDA OR ANY SNAPEDA CONTENT AFFILIATE HAS BEEN ADVISED, OR SHOULD HAVE BEEN AWARE, OF THE POSSIBILITY OF LOSSES, DAMAGES, OR COSTS; (b) EVEN IF ANY REMEDY IN THIS AGREEMENT FAILS OF ITS ESSENTIAL PURPOSE; AND (c) REGARDLESS OF THE THEORY OR BASIS OF LIABILITY (INCLUDING WITHOUT LIMITATION BREACH OF CONTRACT, TORT, NEGLIGENCE, AND STRICT LIABILITY). \ No newline at end of file diff --git a/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/how-to-import.htm b/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/how-to-import.htm new file mode 100644 index 0000000..19e484d --- /dev/null +++ b/Hardware/FabReader2/Library/CMI-9705-0380-SMT-TR/how-to-import.htm @@ -0,0 +1 @@ + Page Redirection If you are not redirected automatically, follow this link to the import guide. \ No newline at end of file diff --git a/Hardware/FabReader2/Library/DW01A/DW01A.kicad_sym b/Hardware/FabReader2/Library/DW01A/DW01A.kicad_sym new file mode 100644 index 0000000..ee5f139 --- /dev/null +++ b/Hardware/FabReader2/Library/DW01A/DW01A.kicad_sym @@ -0,0 +1,61 @@ +(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor) + (symbol "DW01A" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) + (property "Reference" "IC" (id 0) (at -5.08 11.43 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Value" "DW01A" (id 1) (at -5.08 -12.7 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Footprint" "SOT23-6" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "Datasheet" "" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "VALUE" "DW01A" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "LCSC" "C351410" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "MPN" "DW01A" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "ki_locked" "" (id 7) (at 0 0 0) + (effects (font (size 1.27 1.27))) + ) + (symbol "DW01A_0_0" + (rectangle (start -10.16 -10.16) (end 10.16 10.16) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type background)) + ) + (text "Lithium Protection" (at -7.112 2.54 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (pin bidirectional line (at 15.24 -7.62 180) (length 5.08) + (name "OD" (effects (font (size 1.016 1.016)))) + (number "1" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 15.24 7.62 180) (length 5.08) + (name "CS" (effects (font (size 1.016 1.016)))) + (number "2" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 15.24 0 180) (length 5.08) + (name "OC" (effects (font (size 1.016 1.016)))) + (number "3" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at -15.24 0 0) (length 5.08) + (name "TD" (effects (font (size 1.016 1.016)))) + (number "4" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at -15.24 7.62 0) (length 5.08) + (name "VCC" (effects (font (size 1.016 1.016)))) + (number "5" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at -15.24 -7.62 0) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "6" (effects (font (size 1.016 1.016)))) + ) + ) + ) +) diff --git a/Hardware/FabReader2/Library/DW01A/DW01A.lib b/Hardware/FabReader2/Library/DW01A/DW01A.lib new file mode 100644 index 0000000..e235fcf --- /dev/null +++ b/Hardware/FabReader2/Library/DW01A/DW01A.lib @@ -0,0 +1,28 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +#(c) SnapEDA 2016 (snapeda.com) +#This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Design Exception 1.0 +# +# DW01A +# +DEF DW01A IC 0 40 Y Y 1 L N +F0 "IC" -200 450 50 H V L BNN +F1 "DW01A" -200 -500 50 H V L BNN +F2 "SOT23-6" 0 0 50 H I L BNN +F3 "" 0 0 50 H I L BNN +F4 "DW01A" 0 0 50 H I L BNN "VALUE" +F5 "C351410" 0 0 50 H I L BNN "LCSC" +F6 "DW01A" 0 0 50 H I L BNN "MPN" +DRAW +T 0 -280 100 50 0 0 0 Lithium~Protection Normal 0 L B +S -400 -400 400 400 0 0 10 f +X VCC 5 -600 300 200 R 40 40 0 0 W +X GND 6 -600 -300 200 R 40 40 0 0 W +X TD 4 -600 0 200 R 40 40 0 0 B +X OD 1 600 -300 200 L 40 40 0 0 B +X OC 3 600 0 200 L 40 40 0 0 B +X CS 2 600 300 200 L 40 40 0 0 B +ENDDRAW +ENDDEF +# +# End Library \ No newline at end of file diff --git a/Hardware/FabReader2/Library/DW01A/DW01A.step b/Hardware/FabReader2/Library/DW01A/DW01A.step new file mode 100644 index 0000000..9ee8677 --- /dev/null +++ b/Hardware/FabReader2/Library/DW01A/DW01A.step @@ -0,0 +1,3216 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP214' ), + '1' ); +FILE_NAME ('DW01A.STEP', + '2021-10-25T14:08:49', + ( '' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2017', + '' ); +FILE_SCHEMA (( 'AUTOMOTIVE_DESIGN' )); +ENDSEC; + +DATA; +#1 = EDGE_LOOP ( 'NONE', ( #2223, #49, #2661, #655 ) ) ; +#2 = EDGE_LOOP ( 'NONE', ( #2543, #560, #1683, #1489 ) ) ; +#3 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, 0.2000000000000002100 ) ) ; +#5 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6 = ORIENTED_EDGE ( 'NONE', *, *, #1667, .T. ) ; +#7 = EDGE_CURVE ( 'NONE', #2640, #2500, #1410, .T. ) ; +#8 = EDGE_CURVE ( 'NONE', #1174, #1294, #2296, .T. ) ; +#9 = ORIENTED_EDGE ( 'NONE', *, *, #243, .F. ) ; +#10 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293221800, 0.8401167978121472100, 0.2000000000000002100 ) ) ; +#11 = EDGE_LOOP ( 'NONE', ( #1058, #46, #1196, #921 ) ) ; +#12 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13 = EDGE_CURVE ( 'NONE', #1266, #1843, #762, .T. ) ; +#14 = ADVANCED_FACE ( 'NONE', ( #463 ), #2357, .T. ) ; +#15 = VERTEX_POINT ( 'NONE', #1859 ) ; +#16 = DIRECTION ( 'NONE', ( -0.9975640502598243100, 0.06975647374412523300, 0.0000000000000000000 ) ) ; +#17 = CIRCLE ( 'NONE', #1268, 0.1599999999999999800 ) ; +#18 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#19 = ORIENTED_EDGE ( 'NONE', *, *, #2973, .T. ) ; +#20 = EDGE_CURVE ( 'NONE', #1336, #867, #2495, .T. ) ; +#21 = LINE ( 'NONE', #2468, #1148 ) ; +#22 = FACE_OUTER_BOUND ( 'NONE', #2695, .T. ) ; +#23 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, -0.7499999999999997800 ) ) ; +#24 = FACE_OUTER_BOUND ( 'NONE', #2700, .T. ) ; +#25 = DIRECTION ( 'NONE', ( 0.06975647374412528900, -0.9975640502598242000, -0.0000000000000000000 ) ) ; +#26 = EDGE_CURVE ( 'NONE', #469, #1299, #2456, .T. ) ; +#27 = LINE ( 'NONE', #2489, #2321 ) ; +#28 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #1274 ) ; +#29 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#30 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#31 = ADVANCED_FACE ( 'NONE', ( #1649 ), #1354, .F. ) ; +#32 = LINE ( 'NONE', #1854, #2176 ) ; +#33 = LINE ( 'NONE', #1064, #411 ) ; +#34 = PLANE ( 'NONE', #268 ) ; +#35 = VECTOR ( 'NONE', #957, 999.9999999999998900 ) ; +#36 = VERTEX_POINT ( 'NONE', #652 ) ; +#37 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#38 = SURFACE_STYLE_FILL_AREA ( #2050 ) ; +#39 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#40 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, 0.2000000000000002100 ) ) ; +#41 = ORIENTED_EDGE ( 'NONE', *, *, #2995, .T. ) ; +#42 = ORIENTED_EDGE ( 'NONE', *, *, #410, .T. ) ; +#43 = AXIS2_PLACEMENT_3D ( 'NONE', #1265, #2516, #1275 ) ; +#44 = ORIENTED_EDGE ( 'NONE', *, *, #1987, .F. ) ; +#45 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133572400, -0.1999999999999997600 ) ) ; +#46 = ORIENTED_EDGE ( 'NONE', *, *, #2708, .F. ) ; +#47 = ADVANCED_FACE ( 'NONE', ( #2889 ), #1722, .T. ) ; +#48 = ORIENTED_EDGE ( 'NONE', *, *, #331, .T. ) ; +#49 = ORIENTED_EDGE ( 'NONE', *, *, #1034, .F. ) ; +#50 = CARTESIAN_POINT ( 'NONE', ( -0.6699588517275068000, 0.1499999999999999700, -1.319958851727506500 ) ) ; +#51 = AXIS2_PLACEMENT_3D ( 'NONE', #264, #2980, #1226 ) ; +#52 = VERTEX_POINT ( 'NONE', #124 ) ; +#53 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#54 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#55 = DIRECTION ( 'NONE', ( 0.9975640502598243100, 0.06975647374412513600, 0.0000000000000000000 ) ) ; +#56 = VERTEX_POINT ( 'NONE', #2627 ) ; +#57 = ORIENTED_EDGE ( 'NONE', *, *, #1996, .F. ) ; +#58 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 1.037500000000000100, 0.7500000000000002200 ) ) ; +#59 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.880642008201783800E-015, 0.0000000000000000000 ) ) ; +#60 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#61 = VECTOR ( 'NONE', #2633, 999.9999999999998900 ) ; +#62 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 1.449999999999999300 ) ) ; +#63 = EDGE_CURVE ( 'NONE', #2265, #2230, #2224, .T. ) ; +#64 = CARTESIAN_POINT ( 'NONE', ( -0.9425915291627476900, 0.1720974328940367000, 0.2000000000000002100 ) ) ; +#65 = VECTOR ( 'NONE', #1237, 1000.000000000000000 ) ; +#66 = VECTOR ( 'NONE', #1803, 1000.000000000000000 ) ; +#67 = CARTESIAN_POINT ( 'NONE', ( 0.7999999999999999300, 1.037500000000000100, -1.449999999999999700 ) ) ; +#68 = LINE ( 'NONE', #2168, #2604 ) ; +#69 = AXIS2_PLACEMENT_3D ( 'NONE', #2059, #2549, #809 ) ; +#70 = VERTEX_POINT ( 'NONE', #2606 ) ; +#71 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 1.449999999999999300 ) ) ; +#72 = EDGE_CURVE ( 'NONE', #688, #1762, #3161, .T. ) ; +#73 = VECTOR ( 'NONE', #1664, 1000.000000000000000 ) ; +#74 = DIRECTION ( 'NONE', ( -0.06975647374412524700, 0.9975640502598243100, 0.0000000000000000000 ) ) ; +#75 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#76 = FACE_OUTER_BOUND ( 'NONE', #278, .T. ) ; +#77 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#78 = EDGE_CURVE ( 'NONE', #1141, #1357, #2657, .T. ) ; +#79 = CIRCLE ( 'NONE', #2290, 0.01000000000000002600 ) ; +#80 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#81 = VERTEX_POINT ( 'NONE', #2085 ) ; +#82 = CARTESIAN_POINT ( 'NONE', ( 0.6699588517275066900, 0.1499999999999999700, -1.449999999999999700 ) ) ; +#83 = MANIFOLD_SOLID_BREP ( 'Mirror1[2]', #607 ) ; +#84 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, -1.149999999999999700 ) ) ; +#85 = VERTEX_POINT ( 'NONE', #2833 ) ; +#86 = VECTOR ( 'NONE', #849, 1000.000000000000000 ) ; +#87 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293220700, 0.8401167978121472100, -0.1999999999999997600 ) ) ; +#88 = ORIENTED_EDGE ( 'NONE', *, *, #63, .T. ) ; +#89 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, -0.7499999999999997800 ) ) ; +#90 = VERTEX_POINT ( 'NONE', #1592 ) ; +#91 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#92 = EDGE_CURVE ( 'NONE', #1802, #305, #1956, .T. ) ; +#93 = ORIENTED_EDGE ( 'NONE', *, *, #443, .T. ) ; +#94 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8875000000000000700, -0.7499999999999997800 ) ) ; +#95 = AXIS2_PLACEMENT_3D ( 'NONE', #2717, #2421, #941 ) ; +#96 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#97 = ORIENTED_EDGE ( 'NONE', *, *, #2029, .F. ) ; +#98 = FACE_OUTER_BOUND ( 'NONE', #434, .T. ) ; +#99 = LINE ( 'NONE', #1386, #2981 ) ; +#100 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, -0.7499999999999997800 ) ) ; +#101 = AXIS2_PLACEMENT_3D ( 'NONE', #2077, #2055, #3078 ) ; +#102 = VECTOR ( 'NONE', #346, 999.9999999999998900 ) ; +#103 = CIRCLE ( 'NONE', #1702, 0.1599999999999999800 ) ; +#104 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, -0.1999999999999997600 ) ) ; +#105 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#106 = ADVANCED_FACE ( 'NONE', ( #1565 ), #378, .F. ) ; +#107 = EDGE_CURVE ( 'NONE', #1297, #111, #2061, .T. ) ; +#108 = EDGE_CURVE ( 'NONE', #909, #2884, #2926, .T. ) ; +#109 = VECTOR ( 'NONE', #1478, 999.9999999999998900 ) ; +#110 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#111 = VERTEX_POINT ( 'NONE', #428 ) ; +#112 = CIRCLE ( 'NONE', #1189, 0.01000000000000002600 ) ; +#113 = ORIENTED_EDGE ( 'NONE', *, *, #1540, .T. ) ; +#114 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#115 = SURFACE_STYLE_FILL_AREA ( #859 ) ; +#116 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#117 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'DW01A', ( #2704, #221, #912, #2116, #83, #1240, #179, #512, #1098 ), #259 ) ; +#118 = ORIENTED_EDGE ( 'NONE', *, *, #497, .F. ) ; +#119 = AXIS2_PLACEMENT_3D ( 'NONE', #880, #2337, #3110 ) ; +#120 = CARTESIAN_POINT ( 'NONE', ( -0.6699588517275069100, 0.1499999999999999700, 1.449999999999999700 ) ) ; +#121 = ORIENTED_EDGE ( 'NONE', *, *, #2786, .T. ) ; +#122 = VERTEX_POINT ( 'NONE', #3133 ) ; +#123 = EDGE_LOOP ( 'NONE', ( #2262, #2140, #732, #3132 ) ) ; +#124 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, 0.2000000000000002100 ) ) ; +#125 = VERTEX_POINT ( 'NONE', #1892 ) ; +#126 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#127 = ORIENTED_EDGE ( 'NONE', *, *, #2786, .F. ) ; +#128 = PLANE ( 'NONE', #167 ) ; +#129 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8875000000000000700, -0.1999999999999997600 ) ) ; +#130 = EDGE_CURVE ( 'NONE', #538, #1174, #2851, .T. ) ; +#131 = ORIENTED_EDGE ( 'NONE', *, *, #1110, .F. ) ; +#132 = DIRECTION ( 'NONE', ( -0.1710878697460358500, -0.9702875252478137000, 0.1710878697460359000 ) ) ; +#133 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #2264, #445 ) ; +#134 = CYLINDRICAL_SURFACE ( 'NONE', #1604, 0.01000000000000002600 ) ; +#135 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, -0.1999999999999997600 ) ) ; +#136 = EDGE_CURVE ( 'NONE', #1757, #867, #1952, .T. ) ; +#137 = LINE ( 'NONE', #1114, #811 ) ; +#138 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, 0.2000000000000002100 ) ) ; +#139 = LINE ( 'NONE', #2315, #2793 ) ; +#140 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, -0.7499999999999997800 ) ) ; +#141 = FACE_OUTER_BOUND ( 'NONE', #123, .T. ) ; +#142 = ORIENTED_EDGE ( 'NONE', *, *, #1437, .F. ) ; +#143 = DIRECTION ( 'NONE', ( 0.06975647374412524700, 0.9975640502598243100, 0.0000000000000000000 ) ) ; +#144 = ADVANCED_FACE ( 'NONE', ( #2220 ), #2659, .F. ) ; +#145 = CYLINDRICAL_SURFACE ( 'NONE', #551, 0.1599999999999999800 ) ; +#146 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#147 = AXIS2_PLACEMENT_3D ( 'NONE', #138, #1845, #2112 ) ; +#148 = FACE_OUTER_BOUND ( 'NONE', #2308, .T. ) ; +#149 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 1.449999999999999300 ) ) ; +#150 = DIRECTION ( 'NONE', ( 0.9975640502598243100, 0.06975647374412530200, -0.0000000000000000000 ) ) ; +#151 = EDGE_CURVE ( 'NONE', #687, #85, #2617, .T. ) ; +#152 = LINE ( 'NONE', #1805, #825 ) ; +#153 = DIRECTION ( 'NONE', ( -1.880642008201783800E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#154 = VECTOR ( 'NONE', #1008, 1000.000000000000100 ) ; +#155 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.880642008201783800E-015, 0.0000000000000000000 ) ) ; +#156 = ORIENTED_EDGE ( 'NONE', *, *, #1768, .F. ) ; +#157 = PRESENTATION_STYLE_ASSIGNMENT (( #653 ) ) ; +#158 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#159 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8875000000000000700, 1.150000000000000100 ) ) ; +#160 = ORIENTED_EDGE ( 'NONE', *, *, #623, .T. ) ; +#161 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, 1.150000000000000100 ) ) ; +#162 = ADVANCED_FACE ( 'NONE', ( #1606 ), #1406, .F. ) ; +#163 = ORIENTED_EDGE ( 'NONE', *, *, #2364, .T. ) ; +#164 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.880642008201783800E-015, -0.0000000000000000000 ) ) ; +#165 = ORIENTED_EDGE ( 'NONE', *, *, #782, .F. ) ; +#166 = EDGE_LOOP ( 'NONE', ( #3187, #2193, #1961, #1999 ) ) ; +#167 = AXIS2_PLACEMENT_3D ( 'NONE', #3083, #1559, #338 ) ; +#168 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8875000000000000700, -0.7499999999999997800 ) ) ; +#169 = EDGE_LOOP ( 'NONE', ( #2785, #48, #646, #1912, #313, #2348, #654, #3176, #1219, #1581, #2647, #1408 ) ) ; +#170 = SURFACE_SIDE_STYLE ('',( #1292 ) ) ; +#171 = DIRECTION ( 'NONE', ( -0.9975640502598242000, -0.06975647374412523300, 0.0000000000000000000 ) ) ; +#172 = ORIENTED_EDGE ( 'NONE', *, *, #1812, .T. ) ; +#173 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 1.449999999999999300 ) ) ; +#174 = SHAPE_DEFINITION_REPRESENTATION ( #847, #117 ) ; +#175 = EDGE_CURVE ( 'NONE', #2933, #276, #1870, .T. ) ; +#176 = VECTOR ( 'NONE', #1781, 1000.000000000000100 ) ; +#177 = LINE ( 'NONE', #187, #665 ) ; +#178 = EDGE_CURVE ( 'NONE', #111, #2117, #112, .T. ) ; +#179 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude1', #2270 ) ; +#180 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#181 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 1.449999999999999700 ) ) ; +#182 = DIRECTION ( 'NONE', ( 0.9848077530122080200, -0.1736481776669307200, -3.681830018263464000E-017 ) ) ; +#183 = VECTOR ( 'NONE', #2992, 1000.000000000000000 ) ; +#184 = ORIENTED_EDGE ( 'NONE', *, *, #1886, .T. ) ; +#185 = EDGE_CURVE ( 'NONE', #36, #1833, #868, .T. ) ; +#186 = LINE ( 'NONE', #2940, #1517 ) ; +#187 = CARTESIAN_POINT ( 'NONE', ( 0.9425915291627476900, 0.1720974328940367000, -0.7499999999999997800 ) ) ; +#188 = CYLINDRICAL_SURFACE ( 'NONE', #1633, 0.1999999999999998700 ) ; +#189 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#190 = LINE ( 'NONE', #1920, #3082 ) ; +#191 = CARTESIAN_POINT ( 'NONE', ( -0.9425915291627476900, 0.1720974328940367000, -0.7499999999999997800 ) ) ; +#192 = EDGE_CURVE ( 'NONE', #2276, #1319, #1524, .T. ) ; +#193 = ORIENTED_EDGE ( 'NONE', *, *, #2944, .T. ) ; +#194 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, 0.7500000000000002200 ) ) ; +#195 = PRESENTATION_STYLE_ASSIGNMENT (( #1101 ) ) ; +#196 = AXIS2_PLACEMENT_3D ( 'NONE', #1417, #3188, #1697 ) ; +#197 = DIRECTION ( 'NONE', ( -0.9975640502598243100, 0.06975647374412530200, 0.0000000000000000000 ) ) ; +#198 = ORIENTED_EDGE ( 'NONE', *, *, #637, .F. ) ; +#199 = DIRECTION ( 'NONE', ( 1.880642008201783800E-015, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#200 = ORIENTED_EDGE ( 'NONE', *, *, #973, .T. ) ; +#201 = ORIENTED_EDGE ( 'NONE', *, *, #2550, .F. ) ; +#202 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#203 = ORIENTED_EDGE ( 'NONE', *, *, #659, .T. ) ; +#204 = ORIENTED_EDGE ( 'NONE', *, *, #979, .F. ) ; +#205 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#206 = ORIENTED_EDGE ( 'NONE', *, *, #1203, .F. ) ; +#207 = ORIENTED_EDGE ( 'NONE', *, *, #2834, .T. ) ; +#208 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, 1.150000000000000100 ) ) ; +#209 = ORIENTED_EDGE ( 'NONE', *, *, #1662, .F. ) ; +#210 = AXIS2_PLACEMENT_3D ( 'NONE', #2611, #2569, #3080 ) ; +#211 = DIRECTION ( 'NONE', ( 0.06975647374412524700, 0.9975640502598243100, 0.0000000000000000000 ) ) ; +#212 = ORIENTED_EDGE ( 'NONE', *, *, #3036, .T. ) ; +#213 = EDGE_LOOP ( 'NONE', ( #918, #547, #1612, #1416 ) ) ; +#214 = FACE_OUTER_BOUND ( 'NONE', #2813, .T. ) ; +#215 = CARTESIAN_POINT ( 'NONE', ( 0.9425915291627476900, 0.1720974328940367000, -0.7499999999999997800 ) ) ; +#216 = VECTOR ( 'NONE', #2831, 1000.000000000000000 ) ; +#217 = SURFACE_STYLE_FILL_AREA ( #1431 ) ; +#218 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, -1.149999999999999700 ) ) ; +#219 = ADVANCED_FACE ( 'NONE', ( #3198 ), #3128, .T. ) ; +#220 = LINE ( 'NONE', #2791, #3184 ) ; +#221 = MANIFOLD_SOLID_BREP ( 'LPattern1[1]', #1577 ) ; +#222 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293221800, 0.8401167978121472100, -0.7499999999999997800 ) ) ; +#223 = VECTOR ( 'NONE', #1737, 1000.000000000000000 ) ; +#224 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#225 = ORIENTED_EDGE ( 'NONE', *, *, #1442, .T. ) ; +#226 = LINE ( 'NONE', #2609, #2686 ) ; +#227 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293220700, 0.8401167978121472100, 1.150000000000000100 ) ) ; +#228 = EDGE_CURVE ( 'NONE', #2818, #1568, #1486, .T. ) ; +#229 = CIRCLE ( 'NONE', #364, 0.1999999999999999800 ) ; +#230 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#231 = FACE_OUTER_BOUND ( 'NONE', #2773, .T. ) ; +#232 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293220700, 0.8401167978121472100, 0.2000000000000002100 ) ) ; +#233 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#234 = AXIS2_PLACEMENT_3D ( 'NONE', #2351, #126, #613 ) ; +#235 = ORIENTED_EDGE ( 'NONE', *, *, #2620, .F. ) ; +#236 = VECTOR ( 'NONE', #2109, 1000.000000000000000 ) ; +#237 = EDGE_CURVE ( 'NONE', #1573, #1266, #532, .T. ) ; +#238 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#239 = ORIENTED_EDGE ( 'NONE', *, *, #3168, .T. ) ; +#240 = ORIENTED_EDGE ( 'NONE', *, *, #2364, .F. ) ; +#241 = VERTEX_POINT ( 'NONE', #1782 ) ; +#242 = DIRECTION ( 'NONE', ( -0.06975647374412528900, -0.9975640502598242000, 0.0000000000000000000 ) ) ; +#243 = EDGE_CURVE ( 'NONE', #1016, #900, #2408, .T. ) ; +#244 = ADVANCED_FACE ( 'NONE', ( #231 ), #1760, .F. ) ; +#245 = ORIENTED_EDGE ( 'NONE', *, *, #608, .T. ) ; +#246 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, -0.7499999999999997800 ) ) ; +#247 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, -0.7499999999999997800 ) ) ; +#248 = ORIENTED_EDGE ( 'NONE', *, *, #1264, .T. ) ; +#249 = DIRECTION ( 'NONE', ( -3.738628180984499500E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#250 = DIRECTION ( 'NONE', ( -0.06975647374412513600, -0.9975640502598243100, 0.0000000000000000000 ) ) ; +#251 = ORIENTED_EDGE ( 'NONE', *, *, #293, .T. ) ; +#252 = VECTOR ( 'NONE', #1006, 1000.000000000000000 ) ; +#253 = PLANE ( 'NONE', #3195 ) ; +#254 = LINE ( 'NONE', #947, #2515 ) ; +#255 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293221800, 0.8401167978121472100, -0.7499999999999997800 ) ) ; +#256 = EDGE_CURVE ( 'NONE', #1394, #625, #2102, .T. ) ; +#257 = DIRECTION ( 'NONE', ( -0.06975647374412528900, 0.9975640502598242000, 0.0000000000000000000 ) ) ; +#258 = VECTOR ( 'NONE', #1428, 1000.000000000000000 ) ; +#259 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1138 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1756, #1516, #60 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#260 = ADVANCED_FACE ( 'NONE', ( #2333 ), #2527, .F. ) ; +#261 = LINE ( 'NONE', #907, #482 ) ; +#262 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#263 = FACE_OUTER_BOUND ( 'NONE', #1659, .T. ) ; +#264 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, -0.7499999999999997800 ) ) ; +#265 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, -0.1999999999999997600 ) ) ; +#266 = VECTOR ( 'NONE', #1998, 1000.000000000000000 ) ; +#267 = DIRECTION ( 'NONE', ( 0.06975647374412513600, -0.9975640502598243100, 0.0000000000000000000 ) ) ; +#268 = AXIS2_PLACEMENT_3D ( 'NONE', #2723, #949, #3199 ) ; +#269 = VECTOR ( 'NONE', #919, 1000.000000000000000 ) ; +#270 = EDGE_LOOP ( 'NONE', ( #1019, #838, #427, #2147 ) ) ; +#271 = ADVANCED_FACE ( 'NONE', ( #2767 ), #2004, .F. ) ; +#272 = ORIENTED_EDGE ( 'NONE', *, *, #3111, .F. ) ; +#273 = ORIENTED_EDGE ( 'NONE', *, *, #2369, .T. ) ; +#274 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#275 = AXIS2_PLACEMENT_3D ( 'NONE', #1242, #294, #2001 ) ; +#276 = VERTEX_POINT ( 'NONE', #1010 ) ; +#277 = ORIENTED_EDGE ( 'NONE', *, *, #564, .T. ) ; +#278 = EDGE_LOOP ( 'NONE', ( #3007, #685, #650, #1137 ) ) ; +#279 = VERTEX_POINT ( 'NONE', #2508 ) ; +#280 = DIRECTION ( 'NONE', ( 0.06975647374412528900, -0.9975640502598242000, -0.0000000000000000000 ) ) ; +#281 = ORIENTED_EDGE ( 'NONE', *, *, #2820, .T. ) ; +#282 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#283 = EDGE_LOOP ( 'NONE', ( #2815, #2158, #131, #1913, #3101, #2150, #2107, #1686, #1613, #2536, #2142, #1404 ) ) ; +#284 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1589 ), #2882 ) ; +#285 = CARTESIAN_POINT ( 'NONE', ( 1.092385959375934000, 0.1799478263304782100, 1.150000000000000100 ) ) ; +#286 = ADVANCED_FACE ( 'NONE', ( #787 ), #2800, .F. ) ; +#287 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#288 = VECTOR ( 'NONE', #426, 1000.000000000000100 ) ; +#289 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#290 = LINE ( 'NONE', #474, #706 ) ; +#291 = PLANE ( 'NONE', #1537 ) ; +#292 = VECTOR ( 'NONE', #1817, 999.9999999999998900 ) ; +#293 = EDGE_CURVE ( 'NONE', #393, #2184, #1680, .T. ) ; +#294 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#295 = AXIS2_PLACEMENT_3D ( 'NONE', #1937, #2691, #1449 ) ; +#296 = CYLINDRICAL_SURFACE ( 'NONE', #1905, 0.1000000000000000500 ) ; +#297 = EDGE_CURVE ( 'NONE', #2184, #373, #1090, .T. ) ; +#298 = VECTOR ( 'NONE', #110, 1000.000000000000000 ) ; +#299 = ORIENTED_EDGE ( 'NONE', *, *, #2279, .T. ) ; +#300 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#301 = ORIENTED_EDGE ( 'NONE', *, *, #2599, .F. ) ; +#302 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133569600, -1.149999999999999700 ) ) ; +#303 = LINE ( 'NONE', #1444, #1640 ) ; +#304 = DIRECTION ( 'NONE', ( 0.05233595624294376500, 0.9986295347545739400, -0.0000000000000000000 ) ) ; +#305 = VERTEX_POINT ( 'NONE', #3053 ) ; +#306 = ORIENTED_EDGE ( 'NONE', *, *, #2890, .T. ) ; +#307 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 1.037500000000000100, 1.150000000000000100 ) ) ; +#308 = ORIENTED_EDGE ( 'NONE', *, *, #3126, .T. ) ; +#309 = EDGE_CURVE ( 'NONE', #125, #319, #1866, .T. ) ; +#310 = ORIENTED_EDGE ( 'NONE', *, *, #1773, .T. ) ; +#311 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, 1.150000000000000100 ) ) ; +#312 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#313 = ORIENTED_EDGE ( 'NONE', *, *, #2643, .T. ) ; +#314 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#315 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, 0.7500000000000002200 ) ) ; +#316 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#317 = ORIENTED_EDGE ( 'NONE', *, *, #994, .F. ) ; +#318 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, 0.2000000000000002100 ) ) ; +#319 = VERTEX_POINT ( 'NONE', #2339 ) ; +#320 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, -1.149999999999999700 ) ) ; +#321 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, -0.7499999999999997800 ) ) ; +#322 = LINE ( 'NONE', #713, #923 ) ; +#323 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, 0.2000000000000002100 ) ) ; +#324 = AXIS2_PLACEMENT_3D ( 'NONE', #3045, #2295, #844 ) ; +#325 = DIRECTION ( 'NONE', ( -0.9986295347545739400, -0.05233595624294376500, 0.0000000000000000000 ) ) ; +#326 = DIRECTION ( 'NONE', ( -0.9975640502598243100, 0.06975647374412513600, 0.0000000000000000000 ) ) ; +#327 = VECTOR ( 'NONE', #3019, 1000.000000000000000 ) ; +#328 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, 1.150000000000000100 ) ) ; +#329 = VECTOR ( 'NONE', #3125, 1000.000000000000100 ) ; +#330 = AXIS2_PLACEMENT_3D ( 'NONE', #2602, #649, #1867 ) ; +#331 = EDGE_CURVE ( 'NONE', #610, #1910, #459, .T. ) ; +#332 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, 1.150000000000000100 ) ) ; +#333 = ORIENTED_EDGE ( 'NONE', *, *, #1139, .F. ) ; +#334 = FACE_OUTER_BOUND ( 'NONE', #1766, .T. ) ; +#335 = DIRECTION ( 'NONE', ( -0.9975640502598243100, -0.06975647374412515000, 0.0000000000000000000 ) ) ; +#336 = EDGE_CURVE ( 'NONE', #2665, #2498, #722, .T. ) ; +#337 = FACE_OUTER_BOUND ( 'NONE', #2891, .T. ) ; +#338 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#339 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, -1.149999999999999700 ) ) ; +#340 = ORIENTED_EDGE ( 'NONE', *, *, #1949, .F. ) ; +#341 = EDGE_CURVE ( 'NONE', #1985, #2905, #1204, .T. ) ; +#342 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#343 = ORIENTED_EDGE ( 'NONE', *, *, #3153, .F. ) ; +#344 = ORIENTED_EDGE ( 'NONE', *, *, #243, .T. ) ; +#345 = ORIENTED_EDGE ( 'NONE', *, *, #1972, .F. ) ; +#346 = DIRECTION ( 'NONE', ( 0.9975640502598243100, 0.06975647374412523300, -0.0000000000000000000 ) ) ; +#347 = ADVANCED_FACE ( 'NONE', ( #1327 ), #1832, .T. ) ; +#348 = EDGE_LOOP ( 'NONE', ( #207, #2418, #2226, #1169 ) ) ; +#349 = ORIENTED_EDGE ( 'NONE', *, *, #952, .F. ) ; +#350 = DIRECTION ( 'NONE', ( 0.9975640502598243100, -0.06975647374412515000, 0.0000000000000000000 ) ) ; +#351 = EDGE_CURVE ( 'NONE', #2884, #3041, #3124, .T. ) ; +#352 = DIRECTION ( 'NONE', ( 3.738628180984498900E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#353 = ORIENTED_EDGE ( 'NONE', *, *, #396, .T. ) ; +#354 = AXIS2_PLACEMENT_3D ( 'NONE', #429, #2166, #171 ) ; +#355 = VERTEX_POINT ( 'NONE', #2221 ) ; +#356 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, 1.150000000000000100 ) ) ; +#357 = EDGE_LOOP ( 'NONE', ( #1117, #379, #2804, #1082 ) ) ; +#358 = DIRECTION ( 'NONE', ( -0.05233595624294376500, 0.9986295347545739400, 0.0000000000000000000 ) ) ; +#359 = VECTOR ( 'NONE', #1917, 1000.000000000000000 ) ; +#360 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#361 = LINE ( 'NONE', #394, #1430 ) ; +#362 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.450000000000000000, 0.0000000000000000000 ) ) ; +#363 = LINE ( 'NONE', #2250, #2084 ) ; +#364 = AXIS2_PLACEMENT_3D ( 'NONE', #1947, #735, #2714 ) ; +#365 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#366 = AXIS2_PLACEMENT_3D ( 'NONE', #1187, #1197, #2435 ) ; +#367 = VECTOR ( 'NONE', #2317, 1000.000000000000200 ) ; +#368 = VECTOR ( 'NONE', #1641, 1000.000000000000100 ) ; +#369 = ORIENTED_EDGE ( 'NONE', *, *, #2049, .T. ) ; +#370 = LINE ( 'NONE', #1578, #1561 ) ; +#371 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#372 = CARTESIAN_POINT ( 'NONE', ( -0.7999999999999999300, 1.037500000000000100, -1.449999999999999700 ) ) ; +#373 = VERTEX_POINT ( 'NONE', #2461 ) ; +#374 = FACE_OUTER_BOUND ( 'NONE', #283, .T. ) ; +#375 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.349999999999999900, -1.249999999999999800 ) ) ; +#376 = ADVANCED_FACE ( 'NONE', ( #374 ), #2993, .F. ) ; +#377 = ORIENTED_EDGE ( 'NONE', *, *, #2764, .F. ) ; +#378 = CYLINDRICAL_SURFACE ( 'NONE', #2544, 0.01000000000000002600 ) ; +#379 = ORIENTED_EDGE ( 'NONE', *, *, #497, .T. ) ; +#380 = STYLED_ITEM ( 'NONE', ( #2696 ), #179 ) ; +#381 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#382 = ORIENTED_EDGE ( 'NONE', *, *, #2685, .T. ) ; +#383 = ORIENTED_EDGE ( 'NONE', *, *, #1542, .F. ) ; +#384 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, -1.149999999999999700 ) ) ; +#385 = VERTEX_POINT ( 'NONE', #285 ) ; +#386 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#387 = PLANE ( 'NONE', #2318 ) ; +#388 = AXIS2_PLACEMENT_3D ( 'NONE', #485, #1473, #2199 ) ; +#389 = VERTEX_POINT ( 'NONE', #1499 ) ; +#390 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#391 = EDGE_CURVE ( 'NONE', #1802, #2605, #2847, .T. ) ; +#392 = EDGE_CURVE ( 'NONE', #2921, #470, #1246, .T. ) ; +#393 = VERTEX_POINT ( 'NONE', #64 ) ; +#394 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, -1.149999999999999700 ) ) ; +#395 = ADVANCED_FACE ( 'NONE', ( #1167 ), #2255, .T. ) ; +#396 = EDGE_CURVE ( 'NONE', #385, #2811, #79, .T. ) ; +#397 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, 0.2000000000000002100 ) ) ; +#398 = VECTOR ( 'NONE', #2768, 1000.000000000000100 ) ; +#399 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, -0.1999999999999997600 ) ) ; +#400 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 0.2000000000000002100 ) ) ; +#401 = CIRCLE ( 'NONE', #1472, 0.01000000000000002600 ) ; +#402 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.880642008201783800E-015, 0.0000000000000000000 ) ) ; +#403 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, 1.150000000000000100 ) ) ; +#404 = VECTOR ( 'NONE', #249, 1000.000000000000000 ) ; +#405 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#406 = LINE ( 'NONE', #412, #2523 ) ; +#407 = PLANE ( 'NONE', #460 ) ; +#408 = ORIENTED_EDGE ( 'NONE', *, *, #336, .F. ) ; +#409 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#410 = EDGE_CURVE ( 'NONE', #90, #276, #1126, .T. ) ; +#411 = VECTOR ( 'NONE', #2840, 999.9999999999998900 ) ; +#412 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, -1.149999999999999700 ) ) ; +#413 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #621 ) ) ; +#414 = VECTOR ( 'NONE', #1795, 1000.000000000000000 ) ; +#415 = PLANE ( 'NONE', #1056 ) ; +#416 = VERTEX_POINT ( 'NONE', #2958 ) ; +#417 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, -0.7499999999999997800 ) ) ; +#418 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#419 = ORIENTED_EDGE ( 'NONE', *, *, #1139, .T. ) ; +#420 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, -0.7499999999999997800 ) ) ; +#421 = ORIENTED_EDGE ( 'NONE', *, *, #2533, .F. ) ; +#422 = DIRECTION ( 'NONE', ( -0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#423 = ORIENTED_EDGE ( 'NONE', *, *, #1645, .F. ) ; +#424 = ORIENTED_EDGE ( 'NONE', *, *, #1454, .T. ) ; +#425 = VERTEX_POINT ( 'NONE', #2491 ) ; +#426 = DIRECTION ( 'NONE', ( -0.1710878697460358500, -0.9702875252478138100, -0.1710878697460358800 ) ) ; +#427 = ORIENTED_EDGE ( 'NONE', *, *, #2415, .F. ) ; +#428 = CARTESIAN_POINT ( 'NONE', ( -1.092385959375934000, 0.1799478263304782100, -0.1999999999999997600 ) ) ; +#429 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133569600, -0.7499999999999997800 ) ) ; +#430 = VERTEX_POINT ( 'NONE', #1243 ) ; +#431 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, 0.2000000000000002100 ) ) ; +#432 = AXIS2_PLACEMENT_3D ( 'NONE', #323, #1779, #3003 ) ; +#433 = PLANE ( 'NONE', #1596 ) ; +#434 = EDGE_LOOP ( 'NONE', ( #419, #2377, #9, #2060 ) ) ; +#435 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#436 = FACE_OUTER_BOUND ( 'NONE', #997, .T. ) ; +#437 = PLANE ( 'NONE', #1344 ) ; +#438 = VECTOR ( 'NONE', #1837, 1000.000000000000000 ) ; +#439 = LINE ( 'NONE', #2420, #1936 ) ; +#440 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293220700, 0.8401167978121472100, 0.2000000000000002100 ) ) ; +#441 = LINE ( 'NONE', #528, #2247 ) ; +#442 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#443 = EDGE_CURVE ( 'NONE', #2502, #1157, #2997, .T. ) ; +#444 = LINE ( 'NONE', #925, #2945 ) ; +#445 = PRODUCT_DEFINITION_CONTEXT ( 'detailed design', #2778, 'design' ) ; +#446 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8875000000000000700, 0.2000000000000002100 ) ) ; +#447 = VECTOR ( 'NONE', #1350, 1000.000000000000000 ) ; +#448 = VERTEX_POINT ( 'NONE', #1221 ) ; +#449 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.1496346075389737300, -0.7499999999999997800 ) ) ; +#450 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, 0.2000000000000002100 ) ) ; +#451 = AXIS2_PLACEMENT_3D ( 'NONE', #2210, #1704, #18 ) ; +#452 = VECTOR ( 'NONE', #280, 1000.000000000000200 ) ; +#453 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, -1.149999999999999700 ) ) ; +#454 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#455 = ADVANCED_FACE ( 'NONE', ( #2451 ), #3039, .F. ) ; +#456 = EDGE_CURVE ( 'NONE', #984, #1879, #1794, .T. ) ; +#457 = ORIENTED_EDGE ( 'NONE', *, *, #1026, .T. ) ; +#458 = PLANE ( 'NONE', #2762 ) ; +#459 = LINE ( 'NONE', #3064, #3196 ) ; +#460 = AXIS2_PLACEMENT_3D ( 'NONE', #924, #1902, #894 ) ; +#461 = ORIENTED_EDGE ( 'NONE', *, *, #151, .T. ) ; +#462 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133572400, 1.150000000000000100 ) ) ; +#463 = FACE_OUTER_BOUND ( 'NONE', #1692, .T. ) ; +#464 = EDGE_CURVE ( 'NONE', #1457, #2665, #2693, .T. ) ; +#465 = ADVANCED_FACE ( 'NONE', ( #2490 ), #2526, .F. ) ; +#466 = ORIENTED_EDGE ( 'NONE', *, *, #396, .F. ) ; +#467 = ORIENTED_EDGE ( 'NONE', *, *, #1551, .T. ) ; +#468 = SURFACE_SIDE_STYLE ('',( #217 ) ) ; +#469 = VERTEX_POINT ( 'NONE', #2984 ) ; +#470 = VERTEX_POINT ( 'NONE', #1780 ) ; +#471 = CARTESIAN_POINT ( 'NONE', ( -0.9425915291627476900, 0.1720974328940367000, -0.7499999999999997800 ) ) ; +#472 = ORIENTED_EDGE ( 'NONE', *, *, #3181, .F. ) ; +#473 = EDGE_LOOP ( 'NONE', ( #1223, #1761, #2559, #2274 ) ) ; +#474 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133569600, 0.7500000000000002200 ) ) ; +#475 = EDGE_CURVE ( 'NONE', #797, #1027, #1367, .T. ) ; +#476 = FACE_OUTER_BOUND ( 'NONE', #495, .T. ) ; +#477 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#478 = ADVANCED_FACE ( 'NONE', ( #2371 ), #3024, .F. ) ; +#479 = FACE_OUTER_BOUND ( 'NONE', #1291, .T. ) ; +#480 = PLANE ( 'NONE', #933 ) ; +#481 = FACE_OUTER_BOUND ( 'NONE', #2076, .T. ) ; +#482 = VECTOR ( 'NONE', #1930, 1000.000000000000000 ) ; +#483 = DIRECTION ( 'NONE', ( 2.669326763241010000E-016, 0.1736481776669307200, 0.9848077530122080200 ) ) ; +#484 = ORIENTED_EDGE ( 'NONE', *, *, #1786, .F. ) ; +#485 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, 0.7500000000000002200 ) ) ; +#486 = ORIENTED_EDGE ( 'NONE', *, *, #1513, .T. ) ; +#487 = CYLINDRICAL_SURFACE ( 'NONE', #2153, 0.1999999999999998700 ) ; +#488 = FILL_AREA_STYLE_COLOUR ( '', #2366 ) ; +#489 = ORIENTED_EDGE ( 'NONE', *, *, #1705, .F. ) ; +#490 = CIRCLE ( 'NONE', #1011, 0.01000000000000002600 ) ; +#491 = ADVANCED_FACE ( 'NONE', ( #2924 ), #2275, .T. ) ; +#492 = VECTOR ( 'NONE', #2020, 1000.000000000000000 ) ; +#493 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#494 = AXIS2_PLACEMENT_3D ( 'NONE', #2467, #1515, #767 ) ; +#495 = EDGE_LOOP ( 'NONE', ( #2325, #1341, #2674, #2936, #2182, #2343, #2037, #946, #466, #1769, #377, #716 ) ) ; +#496 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, 1.150000000000000100 ) ) ; +#497 = EDGE_CURVE ( 'NONE', #1412, #2347, #3157, .T. ) ; +#498 = DIRECTION ( 'NONE', ( 0.1736481776669307200, -0.9848077530122080200, 0.0000000000000000000 ) ) ; +#499 = ORIENTED_EDGE ( 'NONE', *, *, #2765, .F. ) ; +#500 = VECTOR ( 'NONE', #3121, 1000.000000000000000 ) ; +#501 = VERTEX_POINT ( 'NONE', #606 ) ; +#502 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, -1.149999999999999700 ) ) ; +#503 = EDGE_CURVE ( 'NONE', #3061, #3136, #1602, .T. ) ; +#504 = ORIENTED_EDGE ( 'NONE', *, *, #2641, .F. ) ; +#505 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.1499999999999999700, 0.0000000000000000000 ) ) ; +#506 = PLANE ( 'NONE', #1935 ) ; +#507 = ORIENTED_EDGE ( 'NONE', *, *, #228, .T. ) ; +#508 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, 0.2000000000000002100 ) ) ; +#509 = EDGE_CURVE ( 'NONE', #2292, #279, #1719, .T. ) ; +#510 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, 0.7500000000000002200 ) ) ; +#511 = ADVANCED_FACE ( 'NONE', ( #2954 ), #2297, .F. ) ; +#512 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude5', #1638 ) ; +#513 = EDGE_LOOP ( 'NONE', ( #2002, #2736, #1256, #908 ) ) ; +#514 = VERTEX_POINT ( 'NONE', #2071 ) ; +#515 = CYLINDRICAL_SURFACE ( 'NONE', #2222, 0.1599999999999999800 ) ; +#516 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, -1.149999999999999700 ) ) ; +#517 = EDGE_CURVE ( 'NONE', #2065, #1655, #1521, .T. ) ; +#518 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, -0.1999999999999997600 ) ) ; +#519 = CIRCLE ( 'NONE', #810, 0.04999999999999991300 ) ; +#520 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#521 = AXIS2_PLACEMENT_3D ( 'NONE', #883, #325, #1595 ) ; +#522 = FACE_OUTER_BOUND ( 'NONE', #2225, .T. ) ; +#523 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, 1.150000000000000100 ) ) ; +#524 = ADVANCED_FACE ( 'NONE', ( #2258 ), #2040, .F. ) ; +#525 = LINE ( 'NONE', #707, #368 ) ; +#526 = ORIENTED_EDGE ( 'NONE', *, *, #1872, .T. ) ; +#527 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, 0.2000000000000002100 ) ) ; +#528 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, 0.2000000000000002100 ) ) ; +#529 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#530 = CIRCLE ( 'NONE', #210, 0.01000000000000002600 ) ; +#531 = ORIENTED_EDGE ( 'NONE', *, *, #657, .F. ) ; +#532 = LINE ( 'NONE', #2493, #2528 ) ; +#533 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#534 = EDGE_LOOP ( 'NONE', ( #911, #209, #618, #526 ) ) ; +#535 = ORIENTED_EDGE ( 'NONE', *, *, #1551, .F. ) ; +#536 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#537 = AXIS2_PLACEMENT_3D ( 'NONE', #332, #3038, #2798 ) ; +#538 = VERTEX_POINT ( 'NONE', #1338 ) ; +#539 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#540 = VERTEX_POINT ( 'NONE', #1053 ) ; +#541 = ORIENTED_EDGE ( 'NONE', *, *, #1496, .T. ) ; +#542 = ORIENTED_EDGE ( 'NONE', *, *, #1540, .F. ) ; +#543 = VERTEX_POINT ( 'NONE', #1787 ) ; +#544 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, 1.150000000000000100 ) ) ; +#545 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#546 = DIRECTION ( 'NONE', ( 0.06975647374412528900, -0.9975640502598242000, -0.0000000000000000000 ) ) ; +#547 = ORIENTED_EDGE ( 'NONE', *, *, #2685, .F. ) ; +#548 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #380 ) ) ; +#549 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293220700, 0.8401167978121472100, -0.7499999999999997800 ) ) ; +#550 = CIRCLE ( 'NONE', #2730, 0.1999999999999999800 ) ; +#551 = AXIS2_PLACEMENT_3D ( 'NONE', #508, #29, #3192 ) ; +#552 = LINE ( 'NONE', #544, #1190 ) ; +#553 = DIRECTION ( 'NONE', ( 0.05233595624294376500, 0.9986295347545739400, 0.0000000000000000000 ) ) ; +#554 = VECTOR ( 'NONE', #1793, 1000.000000000000000 ) ; +#555 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#556 = EDGE_CURVE ( 'NONE', #1157, #1734, #152, .T. ) ; +#557 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.1496346075389737300, 1.150000000000000100 ) ) ; +#558 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#559 = CIRCLE ( 'NONE', #388, 0.04999999999999991300 ) ; +#560 = ORIENTED_EDGE ( 'NONE', *, *, #1308, .F. ) ; +#561 = EDGE_CURVE ( 'NONE', #1958, #870, #2215, .T. ) ; +#562 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#563 = LINE ( 'NONE', #2025, #1752 ) ; +#564 = EDGE_CURVE ( 'NONE', #1103, #884, #2097, .T. ) ; +#565 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, 1.150000000000000100 ) ) ; +#566 = PRODUCT_CONTEXT ( 'NONE', #1274, 'mechanical' ) ; +#567 = DIRECTION ( 'NONE', ( 0.05233595624294376500, 0.9986295347545739400, -0.0000000000000000000 ) ) ; +#568 = VECTOR ( 'NONE', #3040, 1000.000000000000000 ) ; +#569 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#570 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, 0.2000000000000002100 ) ) ; +#571 = ORIENTED_EDGE ( 'NONE', *, *, #897, .T. ) ; +#572 = CARTESIAN_POINT ( 'NONE', ( -1.092385959375934000, 0.1799478263304782100, 1.150000000000000100 ) ) ; +#573 = VERTEX_POINT ( 'NONE', #435 ) ; +#574 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293220700, 0.8401167978121472100, 1.150000000000000100 ) ) ; +#575 = ORIENTED_EDGE ( 'NONE', *, *, #1154, .F. ) ; +#576 = EDGE_CURVE ( 'NONE', #2305, #1531, #1903, .T. ) ; +#577 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#578 = VERTEX_POINT ( 'NONE', #129 ) ; +#579 = VERTEX_POINT ( 'NONE', #2893 ) ; +#580 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133572400, -1.149999999999999700 ) ) ; +#581 = DIRECTION ( 'NONE', ( -0.06975647374412528900, 0.9975640502598242000, 0.0000000000000000000 ) ) ; +#582 = ORIENTED_EDGE ( 'NONE', *, *, #1707, .T. ) ; +#583 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#584 = ORIENTED_EDGE ( 'NONE', *, *, #2029, .T. ) ; +#585 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#586 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#587 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1609, 'distance_accuracy_value', 'NONE'); +#588 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#589 = ADVANCED_FACE ( 'NONE', ( #1324 ), #686, .F. ) ; +#590 = VECTOR ( 'NONE', #795, 1000.000000000000000 ) ; +#591 = AXIS2_PLACEMENT_3D ( 'NONE', #771, #1267, #1519 ) ; +#592 = PRESENTATION_STYLE_ASSIGNMENT (( #1676 ) ) ; +#593 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#594 = ORIENTED_EDGE ( 'NONE', *, *, #2876, .T. ) ; +#595 = FACE_OUTER_BOUND ( 'NONE', #2068, .T. ) ; +#596 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.349999999999999900, -1.149999999999999700 ) ) ; +#597 = LINE ( 'NONE', #2035, #367 ) ; +#598 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, -0.7499999999999997800 ) ) ; +#599 = LINE ( 'NONE', #1466, #298 ) ; +#600 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293220700, 0.8401167978121472100, 0.7500000000000002200 ) ) ; +#601 = LINE ( 'NONE', #1587, #3120 ) ; +#602 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.738628180984499500E-017 ) ) ; +#603 = ADVANCED_FACE ( 'NONE', ( #678 ), #1143, .T. ) ; +#604 = FACE_OUTER_BOUND ( 'NONE', #2816, .T. ) ; +#605 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, 0.2000000000000002100 ) ) ; +#606 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, 0.7500000000000002200 ) ) ; +#607 = CLOSED_SHELL ( 'NONE', ( #31, #1981, #2978, #2063, #244, #144, #745, #2591, #1693, #1436, #2724, #1106, #395, #2554 ) ) ; +#608 = EDGE_CURVE ( 'NONE', #2970, #1206, #754, .T. ) ; +#609 = VECTOR ( 'NONE', #1739, 1000.000000000000000 ) ; +#610 = VERTEX_POINT ( 'NONE', #1147 ) ; +#611 = VECTOR ( 'NONE', #1332, 999.9999999999998900 ) ; +#612 = ORIENTED_EDGE ( 'NONE', *, *, #2872, .T. ) ; +#613 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#614 = ORIENTED_EDGE ( 'NONE', *, *, #1759, .F. ) ; +#615 = ORIENTED_EDGE ( 'NONE', *, *, #443, .F. ) ; +#616 = AXIS2_PLACEMENT_3D ( 'NONE', #1446, #3185, #2679 ) ; +#617 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#618 = ORIENTED_EDGE ( 'NONE', *, *, #3168, .F. ) ; +#619 = EDGE_CURVE ( 'NONE', #1689, #2265, #2731, .T. ) ; +#620 = ORIENTED_EDGE ( 'NONE', *, *, #1425, .F. ) ; +#621 = STYLED_ITEM ( 'NONE', ( #2630 ), #117 ) ; +#622 = ORIENTED_EDGE ( 'NONE', *, *, #2383, .F. ) ; +#623 = EDGE_CURVE ( 'NONE', #2655, #839, #2612, .T. ) ; +#624 = DIRECTION ( 'NONE', ( 0.05233595624294376500, 0.9986295347545739400, -0.0000000000000000000 ) ) ; +#625 = VERTEX_POINT ( 'NONE', #1414 ) ; +#626 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#627 = LINE ( 'NONE', #2938, #1031 ) ; +#628 = CARTESIAN_POINT ( 'NONE', ( 0.7272651204577579300, 1.450000000000000000, -1.377265120457757700 ) ) ; +#629 = LINE ( 'NONE', #3015, #2790 ) ; +#630 = PLANE ( 'NONE', #3034 ) ; +#631 = LINE ( 'NONE', #802, #3068 ) ; +#632 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 1.150000000000000100 ) ) ; +#633 = LINE ( 'NONE', #1527, #1273 ) ; +#634 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, -0.1999999999999997600 ) ) ; +#635 = PLANE ( 'NONE', #3077 ) ; +#636 = ADVANCED_FACE ( 'NONE', ( #604 ), #2642, .F. ) ; +#637 = EDGE_CURVE ( 'NONE', #540, #2970, #530, .T. ) ; +#638 = VECTOR ( 'NONE', #409, 1000.000000000000000 ) ; +#639 = ORIENTED_EDGE ( 'NONE', *, *, #1269, .F. ) ; +#640 = VECTOR ( 'NONE', #422, 1000.000000000000100 ) ; +#641 = EDGE_LOOP ( 'NONE', ( #2900, #1721, #1061, #3006 ) ) ; +#642 = CIRCLE ( 'NONE', #324, 0.1599999999999999800 ) ; +#643 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#644 = VECTOR ( 'NONE', #624, 1000.000000000000100 ) ; +#645 = PLANE ( 'NONE', #2682 ) ; +#646 = ORIENTED_EDGE ( 'NONE', *, *, #1348, .T. ) ; +#647 = ORIENTED_EDGE ( 'NONE', *, *, #178, .T. ) ; +#648 = AXIS2_PLACEMENT_3D ( 'NONE', #2729, #30, #1508 ) ; +#649 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.1736481776669307200, -0.9848077530122080200 ) ) ; +#650 = ORIENTED_EDGE ( 'NONE', *, *, #1809, .T. ) ; +#651 = ORIENTED_EDGE ( 'NONE', *, *, #1159, .T. ) ; +#652 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 1.449999999999999300 ) ) ; +#653 = SURFACE_STYLE_USAGE ( .BOTH. , #2864 ) ; +#654 = ORIENTED_EDGE ( 'NONE', *, *, #2599, .T. ) ; +#655 = ORIENTED_EDGE ( 'NONE', *, *, #78, .T. ) ; +#656 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#657 = EDGE_CURVE ( 'NONE', #305, #954, #1597, .T. ) ; +#658 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 1.449999999999999700 ) ) ; +#659 = EDGE_CURVE ( 'NONE', #579, #538, #3154, .T. ) ; +#660 = ORIENTED_EDGE ( 'NONE', *, *, #2607, .F. ) ; +#661 = FACE_OUTER_BOUND ( 'NONE', #804, .T. ) ; +#662 = EDGE_CURVE ( 'NONE', #2265, #2104, #190, .T. ) ; +#663 = FACE_OUTER_BOUND ( 'NONE', #683, .T. ) ; +#664 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#665 = VECTOR ( 'NONE', #2671, 1000.000000000000000 ) ; +#666 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1589 ) ) ; +#667 = ORIENTED_EDGE ( 'NONE', *, *, #1102, .F. ) ; +#668 = CYLINDRICAL_SURFACE ( 'NONE', #494, 0.01000000000000002600 ) ; +#669 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.880642008201783800E-015, 0.0000000000000000000 ) ) ; +#670 = VECTOR ( 'NONE', #37, 1000.000000000000000 ) ; +#671 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, 0.2000000000000002100 ) ) ; +#672 = CIRCLE ( 'NONE', #2422, 0.1000000000000000500 ) ; +#673 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#674 = AXIS2_PLACEMENT_3D ( 'NONE', #2720, #1960, #2950 ) ; +#675 = EDGE_CURVE ( 'NONE', #3000, #764, #2256, .T. ) ; +#676 = FACE_OUTER_BOUND ( 'NONE', #11, .T. ) ; +#677 = DIRECTION ( 'NONE', ( 0.05233595624294376500, 0.9986295347545739400, -0.0000000000000000000 ) ) ; +#678 = FACE_OUTER_BOUND ( 'NONE', #763, .T. ) ; +#679 = CLOSED_SHELL ( 'NONE', ( #1501, #958, #991, #760, #106, #1317, #2930, #2437, #835, #1071, #2821, #1481, #2709, #2095 ) ) ; +#680 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1940, 'distance_accuracy_value', 'NONE'); +#681 = VECTOR ( 'NONE', #759, 999.9999999999998900 ) ; +#682 = ORIENTED_EDGE ( 'NONE', *, *, #1264, .F. ) ; +#683 = EDGE_LOOP ( 'NONE', ( #2350, #1617, #156, #1713 ) ) ; +#684 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#685 = ORIENTED_EDGE ( 'NONE', *, *, #2114, .F. ) ; +#686 = PLANE ( 'NONE', #1402 ) ; +#687 = VERTEX_POINT ( 'NONE', #2934 ) ; +#688 = VERTEX_POINT ( 'NONE', #1964 ) ; +#689 = AXIS2_PLACEMENT_3D ( 'NONE', #1276, #3014, #1530 ) ; +#690 = ORIENTED_EDGE ( 'NONE', *, *, #881, .T. ) ; +#691 = AXIS2_PLACEMENT_3D ( 'NONE', #875, #1144, #2869 ) ; +#692 = EDGE_LOOP ( 'NONE', ( #1804, #2380, #667, #1839 ) ) ; +#693 = PLANE ( 'NONE', #2469 ) ; +#694 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, 0.7500000000000002200 ) ) ; +#695 = ORIENTED_EDGE ( 'NONE', *, *, #1711, .T. ) ; +#696 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#697 = ADVANCED_FACE ( 'NONE', ( #337 ), #1285, .F. ) ; +#698 = STYLED_ITEM ( 'NONE', ( #3018 ), #2116 ) ; +#699 = DIRECTION ( 'NONE', ( -0.1710878697460358500, 0.9702875252478137000, 0.1710878697460359000 ) ) ; +#700 = ORIENTED_EDGE ( 'NONE', *, *, #2267, .T. ) ; +#701 = LINE ( 'NONE', #1928, #1544 ) ; +#702 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 0.7500000000000002200 ) ) ; +#703 = LINE ( 'NONE', #1340, #2124 ) ; +#704 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#705 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133572400, -0.1999999999999997600 ) ) ; +#706 = VECTOR ( 'NONE', #717, 999.9999999999998900 ) ; +#707 = CARTESIAN_POINT ( 'NONE', ( -0.7999999999999999300, 0.8874999999999999600, -1.449999999999999700 ) ) ; +#708 = ORIENTED_EDGE ( 'NONE', *, *, #2075, .F. ) ; +#709 = LINE ( 'NONE', #232, #1706 ) ; +#710 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#711 = AXIS2_PLACEMENT_3D ( 'NONE', #570, #806, #2045 ) ; +#712 = VECTOR ( 'NONE', #3114, 1000.000000000000000 ) ; +#713 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, -1.149999999999999700 ) ) ; +#714 = ADVANCED_FACE ( 'NONE', ( #2650 ), #863, .F. ) ; +#715 = LINE ( 'NONE', #1112, #640 ) ; +#716 = ORIENTED_EDGE ( 'NONE', *, *, #1808, .F. ) ; +#717 = DIRECTION ( 'NONE', ( 0.9975640502598243100, 0.06975647374412523300, -0.0000000000000000000 ) ) ; +#718 = AXIS2_PLACEMENT_3D ( 'NONE', #769, #1252, #2780 ) ; +#719 = FACE_OUTER_BOUND ( 'NONE', #270, .T. ) ; +#720 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133572400, 1.150000000000000100 ) ) ; +#721 = EDGE_CURVE ( 'NONE', #2511, #1054, #229, .T. ) ; +#722 = LINE ( 'NONE', #600, #2019 ) ; +#723 = ORIENTED_EDGE ( 'NONE', *, *, #556, .F. ) ; +#724 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#725 = EDGE_CURVE ( 'NONE', #241, #15, #1244, .T. ) ; +#726 = ORIENTED_EDGE ( 'NONE', *, *, #778, .T. ) ; +#727 = ORIENTED_EDGE ( 'NONE', *, *, #1723, .F. ) ; +#728 = DIRECTION ( 'NONE', ( 0.1710878697460358800, -0.9702875252478138100, 0.1710878697460358200 ) ) ; +#729 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#730 = ORIENTED_EDGE ( 'NONE', *, *, #1600, .F. ) ; +#731 = ADVANCED_FACE ( 'NONE', ( #719 ), #2567, .F. ) ; +#732 = ORIENTED_EDGE ( 'NONE', *, *, #341, .T. ) ; +#733 = DIRECTION ( 'NONE', ( 0.9986295347545739400, -0.05233595624294376500, 0.0000000000000000000 ) ) ; +#734 = ORIENTED_EDGE ( 'NONE', *, *, #2201, .F. ) ; +#735 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#736 = ORIENTED_EDGE ( 'NONE', *, *, #1041, .F. ) ; +#737 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#738 = EDGE_CURVE ( 'NONE', #425, #1655, #2180, .T. ) ; +#739 = FACE_OUTER_BOUND ( 'NONE', #1259, .T. ) ; +#740 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1484 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2018, #555, #3021 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#741 = VECTOR ( 'NONE', #2370, 1000.000000000000200 ) ; +#742 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133572400, 0.2000000000000002100 ) ) ; +#743 = FACE_OUTER_BOUND ( 'NONE', #1945, .T. ) ; +#744 = DIRECTION ( 'NONE', ( 0.06975647374412528900, 0.9975640502598242000, 0.0000000000000000000 ) ) ; +#745 = ADVANCED_FACE ( 'NONE', ( #76 ), #253, .F. ) ; +#746 = ORIENTED_EDGE ( 'NONE', *, *, #576, .T. ) ; +#747 = LINE ( 'NONE', #302, #102 ) ; +#748 = CARTESIAN_POINT ( 'NONE', ( 0.9425915291627476900, 0.1720974328940367000, 0.7500000000000002200 ) ) ; +#749 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#750 = ORIENTED_EDGE ( 'NONE', *, *, #564, .F. ) ; +#751 = VECTOR ( 'NONE', #699, 1000.000000000000100 ) ; +#752 = CIRCLE ( 'NONE', #691, 0.04999999999999991300 ) ; +#753 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133569600, -1.149999999999999700 ) ) ; +#754 = LINE ( 'NONE', #2192, #35 ) ; +#755 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#756 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, 0.2000000000000002100 ) ) ; +#757 = ORIENTED_EDGE ( 'NONE', *, *, #1560, .T. ) ; +#758 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 1.150000000000000100 ) ) ; +#759 = DIRECTION ( 'NONE', ( -0.9975640502598243100, -0.06975647374412515000, 0.0000000000000000000 ) ) ; +#760 = ADVANCED_FACE ( 'NONE', ( #2763 ), #34, .F. ) ; +#761 = EDGE_LOOP ( 'NONE', ( #2372, #2466 ) ) ; +#762 = LINE ( 'NONE', #2823, #86 ) ; +#763 = EDGE_LOOP ( 'NONE', ( #1806, #2108, #1458, #1029 ) ) ; +#764 = VERTEX_POINT ( 'NONE', #523 ) ; +#765 = VERTEX_POINT ( 'NONE', #2734 ) ; +#766 = ORIENTED_EDGE ( 'NONE', *, *, #561, .F. ) ; +#767 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#768 = ORIENTED_EDGE ( 'NONE', *, *, #934, .T. ) ; +#769 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293220700, 0.8401167978121472100, 1.150000000000000100 ) ) ; +#770 = AXIS2_PLACEMENT_3D ( 'NONE', #671, #1150, #2390 ) ; +#771 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, 0.7500000000000002200 ) ) ; +#772 = ORIENTED_EDGE ( 'NONE', *, *, #309, .F. ) ; +#773 = ORIENTED_EDGE ( 'NONE', *, *, #1217, .F. ) ; +#774 = LINE ( 'NONE', #1251, #252 ) ; +#775 = AXIS2_PLACEMENT_3D ( 'NONE', #3105, #3116, #402 ) ; +#776 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, -0.7499999999999997800 ) ) ; +#777 = DIRECTION ( 'NONE', ( 2.669326763241010000E-016, -0.1736481776669307200, 0.9848077530122080200 ) ) ; +#778 = EDGE_CURVE ( 'NONE', #2811, #1765, #2486, .T. ) ; +#779 = LINE ( 'NONE', #1403, #2678 ) ; +#780 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#781 = CIRCLE ( 'NONE', #856, 0.1000000000000000500 ) ; +#782 = EDGE_CURVE ( 'NONE', #1750, #1843, #1087, .T. ) ; +#783 = CIRCLE ( 'NONE', #1307, 0.01000000000000002600 ) ; +#784 = PLANE ( 'NONE', #848 ) ; +#785 = VECTOR ( 'NONE', #2707, 1000.000000000000000 ) ; +#786 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#787 = FACE_OUTER_BOUND ( 'NONE', #1092, .T. ) ; +#788 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#789 = EDGE_CURVE ( 'NONE', #52, #1394, #2883, .T. ) ; +#790 = ORIENTED_EDGE ( 'NONE', *, *, #1546, .T. ) ; +#791 = VECTOR ( 'NONE', #882, 1000.000000000000000 ) ; +#792 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#793 = ORIENTED_EDGE ( 'NONE', *, *, #1372, .F. ) ; +#794 = EDGE_LOOP ( 'NONE', ( #1796, #1601, #1906, #382 ) ) ; +#795 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#796 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#797 = VERTEX_POINT ( 'NONE', #23 ) ; +#798 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293220700, 0.8401167978121472100, 0.7500000000000002200 ) ) ; +#799 = EDGE_LOOP ( 'NONE', ( #2419, #2855, #113, #3138 ) ) ; +#800 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#801 = VERTEX_POINT ( 'NONE', #1742 ) ; +#802 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293220700, 0.8401167978121472100, 0.2000000000000002100 ) ) ; +#803 = PLANE ( 'NONE', #537 ) ; +#804 = EDGE_LOOP ( 'NONE', ( #1647, #1059, #2154, #1533 ) ) ; +#805 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2556 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #116, #1824, #2575 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#806 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#807 = VECTOR ( 'NONE', #1218, 1000.000000000000000 ) ; +#808 = FACE_OUTER_BOUND ( 'NONE', #1880, .T. ) ; +#809 = DIRECTION ( 'NONE', ( 0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#810 = AXIS2_PLACEMENT_3D ( 'NONE', #403, #1109, #2118 ) ; +#811 = VECTOR ( 'NONE', #371, 1000.000000000000000 ) ; +#812 = PRODUCT ( 'DW01A', 'DW01A', '', ( #566 ) ) ; +#813 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#814 = EDGE_CURVE ( 'NONE', #2770, #610, #1675, .T. ) ; +#815 = EDGE_CURVE ( 'NONE', #276, #1183, #2406, .T. ) ; +#816 = ORIENTED_EDGE ( 'NONE', *, *, #623, .F. ) ; +#817 = VECTOR ( 'NONE', #996, 1000.000000000000000 ) ; +#818 = ORIENTED_EDGE ( 'NONE', *, *, #556, .T. ) ; +#819 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#820 = EDGE_CURVE ( 'NONE', #1765, #2423, #2994, .T. ) ; +#821 = CIRCLE ( 'NONE', #1820, 0.1999999999999999800 ) ; +#822 = VERTEX_POINT ( 'NONE', #1013 ) ; +#823 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.349999999999999900, -1.149999999999999700 ) ) ; +#824 = EDGE_LOOP ( 'NONE', ( #2744, #2622, #2501, #306 ) ) ; +#825 = VECTOR ( 'NONE', #889, 1000.000000000000000 ) ; +#826 = ORIENTED_EDGE ( 'NONE', *, *, #1095, .F. ) ; +#827 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1648, 'distance_accuracy_value', 'NONE'); +#828 = AXIS2_PLACEMENT_3D ( 'NONE', #1210, #733, #2450 ) ; +#829 = ORIENTED_EDGE ( 'NONE', *, *, #1886, .F. ) ; +#830 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#831 = VERTEX_POINT ( 'NONE', #1235 ) ; +#832 = EDGE_CURVE ( 'NONE', #1456, #3010, #2017, .T. ) ; +#833 = ORIENTED_EDGE ( 'NONE', *, *, #92, .T. ) ; +#834 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, -0.1999999999999997600 ) ) ; +#835 = ADVANCED_FACE ( 'NONE', ( #1163 ), #1716, .T. ) ; +#836 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #827 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1648, #1666, #1184 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#837 = ORIENTED_EDGE ( 'NONE', *, *, #1682, .T. ) ; +#838 = ORIENTED_EDGE ( 'NONE', *, *, #1583, .F. ) ; +#839 = VERTEX_POINT ( 'NONE', #2016 ) ; +#840 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#841 = EDGE_LOOP ( 'NONE', ( #2064, #2335, #1916, #2387 ) ) ; +#842 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#843 = ORIENTED_EDGE ( 'NONE', *, *, #63, .F. ) ; +#844 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#845 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133572400, -0.7499999999999997800 ) ) ; +#846 = VERTEX_POINT ( 'NONE', #67 ) ; +#847 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #133 ) ; +#848 = AXIS2_PLACEMENT_3D ( 'NONE', #574, #1753, #1775 ) ; +#849 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#850 = LINE ( 'NONE', #218, #61 ) ; +#851 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#852 = ADVANCED_FACE ( 'NONE', ( #1977 ), #2998, .F. ) ; +#853 = FACE_OUTER_BOUND ( 'NONE', #2284, .T. ) ; +#854 = PLANE ( 'NONE', #69 ) ; +#855 = VECTOR ( 'NONE', #3055, 1000.000000000000000 ) ; +#856 = AXIS2_PLACEMENT_3D ( 'NONE', #823, #2553, #2042 ) ; +#857 = DIRECTION ( 'NONE', ( 0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#858 = VECTOR ( 'NONE', #1164, 1000.000000000000000 ) ; +#859 = FILL_AREA_STYLE ('',( #1829 ) ) ; +#860 = LINE ( 'NONE', #851, #638 ) ; +#861 = PLANE ( 'NONE', #2603 ) ; +#862 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#863 = CYLINDRICAL_SURFACE ( 'NONE', #2397, 0.04999999999999991300 ) ; +#864 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, -0.7499999999999997800 ) ) ; +#865 = AXIS2_PLACEMENT_3D ( 'NONE', #2021, #2792, #581 ) ; +#866 = ADVANCED_FACE ( 'NONE', ( #1084 ), #1512, .F. ) ; +#867 = VERTEX_POINT ( 'NONE', #45 ) ; +#868 = LINE ( 'NONE', #2121, #236 ) ; +#869 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, -0.1999999999999997600 ) ) ; +#870 = VERTEX_POINT ( 'NONE', #1002 ) ; +#871 = DIRECTION ( 'NONE', ( -0.9975640502598243100, 0.06975647374412523300, 0.0000000000000000000 ) ) ; +#872 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#873 = EDGE_LOOP ( 'NONE', ( #772, #2375 ) ) ; +#874 = AXIS2_PLACEMENT_3D ( 'NONE', #842, #1302, #2047 ) ; +#875 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, -0.1999999999999997600 ) ) ; +#876 = ORIENTED_EDGE ( 'NONE', *, *, #2374, .T. ) ; +#877 = EDGE_CURVE ( 'NONE', #1734, #1357, #903, .T. ) ; +#878 = ORIENTED_EDGE ( 'NONE', *, *, #2601, .T. ) ; +#879 = ORIENTED_EDGE ( 'NONE', *, *, #1705, .T. ) ; +#880 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, -0.7499999999999997800 ) ) ; +#881 = EDGE_CURVE ( 'NONE', #2414, #1157, #2134, .T. ) ; +#882 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#883 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, 1.150000000000000100 ) ) ; +#884 = VERTEX_POINT ( 'NONE', #320 ) ; +#885 = PLANE ( 'NONE', #2844 ) ; +#886 = ADVANCED_FACE ( 'NONE', ( #1825 ), #784, .F. ) ; +#887 = CIRCLE ( 'NONE', #2669, 0.04999999999999991300 ) ; +#888 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2760 ) ) ; +#889 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.880642008201783800E-015, 0.0000000000000000000 ) ) ; +#890 = FACE_OUTER_BOUND ( 'NONE', #1882, .T. ) ; +#891 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#892 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#893 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.067157287525380700, -1.149999999999999700 ) ) ; +#894 = DIRECTION ( 'NONE', ( -0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#895 = ORIENTED_EDGE ( 'NONE', *, *, #2715, .F. ) ; +#896 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8875000000000000700, -0.7499999999999997800 ) ) ; +#897 = EDGE_CURVE ( 'NONE', #2895, #2498, #1321, .T. ) ; +#898 = CIRCLE ( 'NONE', #366, 0.01000000000000002600 ) ; +#899 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, 1.150000000000000100 ) ) ; +#900 = VERTEX_POINT ( 'NONE', #2774 ) ; +#901 = CIRCLE ( 'NONE', #234, 0.1999999999999999800 ) ; +#902 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, -0.7499999999999997800 ) ) ; +#903 = LINE ( 'NONE', #2987, #1202 ) ; +#904 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#905 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.1496346075389737300, 1.150000000000000100 ) ) ; +#906 = LINE ( 'NONE', #255, #2880 ) ; +#907 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, -0.1999999999999997600 ) ) ; +#908 = ORIENTED_EDGE ( 'NONE', *, *, #1475, .T. ) ; +#909 = VERTEX_POINT ( 'NONE', #1764 ) ; +#910 = AXIS2_PLACEMENT_3D ( 'NONE', #2309, #1622, #1868 ) ; +#911 = ORIENTED_EDGE ( 'NONE', *, *, #1110, .T. ) ; +#912 = MANIFOLD_SOLID_BREP ( 'LPattern1[2]', #1245 ) ; +#913 = VERTEX_POINT ( 'NONE', #2248 ) ; +#914 = ORIENTED_EDGE ( 'NONE', *, *, #2446, .F. ) ; +#915 = ORIENTED_EDGE ( 'NONE', *, *, #2369, .F. ) ; +#916 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, 0.2000000000000002100 ) ) ; +#917 = AXIS2_PLACEMENT_3D ( 'NONE', #1925, #1658, #1911 ) ; +#918 = ORIENTED_EDGE ( 'NONE', *, *, #1504, .F. ) ; +#919 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#920 = ORIENTED_EDGE ( 'NONE', *, *, #2425, .T. ) ; +#921 = ORIENTED_EDGE ( 'NONE', *, *, #657, .T. ) ; +#922 = DIRECTION ( 'NONE', ( -0.9975640502598243100, 0.06975647374412523300, 0.0000000000000000000 ) ) ; +#923 = VECTOR ( 'NONE', #936, 1000.000000000000100 ) ; +#924 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293220700, 0.8401167978121472100, -0.7499999999999997800 ) ) ; +#925 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, -0.1999999999999997600 ) ) ; +#926 = LINE ( 'NONE', #1076, #1310 ) ; +#927 = EDGE_CURVE ( 'NONE', #543, #1568, #1241, .T. ) ; +#928 = CYLINDRICAL_SURFACE ( 'NONE', #51, 0.01000000000000002600 ) ; +#929 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#930 = FACE_OUTER_BOUND ( 'NONE', #3048, .T. ) ; +#931 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, -1.149999999999999700 ) ) ; +#932 = FACE_OUTER_BOUND ( 'NONE', #1503, .T. ) ; +#933 = AXIS2_PLACEMENT_3D ( 'NONE', #1182, #2668, #2191 ) ; +#934 = EDGE_CURVE ( 'NONE', #1294, #425, #490, .T. ) ; +#935 = VECTOR ( 'NONE', #350, 999.9999999999998900 ) ; +#936 = DIRECTION ( 'NONE', ( -0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#937 = EDGE_CURVE ( 'NONE', #1127, #1183, #563, .T. ) ; +#938 = ORIENTED_EDGE ( 'NONE', *, *, #1682, .F. ) ; +#939 = VECTOR ( 'NONE', #1258, 1000.000000000000000 ) ; +#940 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.349999999999999900, -1.149999999999999700 ) ) ; +#941 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#942 = ORIENTED_EDGE ( 'NONE', *, *, #1134, .T. ) ; +#943 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8875000000000000700, 0.2000000000000002100 ) ) ; +#944 = VECTOR ( 'NONE', #2875, 999.9999999999998900 ) ; +#945 = ORIENTED_EDGE ( 'NONE', *, *, #2082, .F. ) ; +#946 = ORIENTED_EDGE ( 'NONE', *, *, #778, .F. ) ; +#947 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, 0.2000000000000002100 ) ) ; +#948 = ORIENTED_EDGE ( 'NONE', *, *, #2314, .F. ) ; +#949 = DIRECTION ( 'NONE', ( -0.9986295347545739400, -0.05233595624294376500, 0.0000000000000000000 ) ) ; +#950 = ORIENTED_EDGE ( 'NONE', *, *, #1312, .T. ) ; +#951 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133569600, 1.150000000000000100 ) ) ; +#952 = EDGE_CURVE ( 'NONE', #1487, #2502, #970, .T. ) ; +#953 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#954 = VERTEX_POINT ( 'NONE', #58 ) ; +#955 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -2.710505431213761100E-016 ) ) ; +#956 = VERTEX_POINT ( 'NONE', #3095 ) ; +#957 = DIRECTION ( 'NONE', ( 0.9975640502598243100, -0.06975647374412515000, 0.0000000000000000000 ) ) ; +#958 = ADVANCED_FACE ( 'NONE', ( #1863 ), #128, .F. ) ; +#959 = CIRCLE ( 'NONE', #2323, 0.1999999999999999800 ) ; +#960 = DIRECTION ( 'NONE', ( 0.05233595624294376500, 0.9986295347545739400, -0.0000000000000000000 ) ) ; +#961 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#962 = LINE ( 'NONE', #2388, #2204 ) ; +#963 = ORIENTED_EDGE ( 'NONE', *, *, #336, .T. ) ; +#964 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1800 ), #2005 ) ; +#965 = LINE ( 'NONE', #1122, #329 ) ; +#966 = ORIENTED_EDGE ( 'NONE', *, *, #3060, .F. ) ; +#967 = FACE_OUTER_BOUND ( 'NONE', #1799, .T. ) ; +#968 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#969 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 1.150000000000000100 ) ) ; +#970 = LINE ( 'NONE', #2748, #2288 ) ; +#971 = CARTESIAN_POINT ( 'NONE', ( 1.092385959375934000, 0.1799478263304782100, -0.7499999999999997800 ) ) ; +#972 = ADVANCED_FACE ( 'NONE', ( #3191 ), #3069, .F. ) ; +#973 = EDGE_CURVE ( 'NONE', #1181, #2951, #601, .T. ) ; +#974 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, 1.449999999999999700 ) ) ; +#975 = VECTOR ( 'NONE', #1192, 999.9999999999998900 ) ; +#976 = ORIENTED_EDGE ( 'NONE', *, *, #937, .F. ) ; +#977 = VECTOR ( 'NONE', #904, 1000.000000000000000 ) ; +#978 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#979 = EDGE_CURVE ( 'NONE', #797, #2292, #33, .T. ) ; +#980 = VERTEX_POINT ( 'NONE', #1598 ) ; +#981 = EDGE_LOOP ( 'NONE', ( #1418, #1248, #826, #1679 ) ) ; +#982 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.880642008201783800E-015, 0.0000000000000000000 ) ) ; +#983 = PLANE ( 'NONE', #1842 ) ; +#984 = VERTEX_POINT ( 'NONE', #2320 ) ; +#985 = AXIS2_PLACEMENT_3D ( 'NONE', #40, #287, #796 ) ; +#986 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#987 = VERTEX_POINT ( 'NONE', #1822 ) ; +#988 = VERTEX_POINT ( 'NONE', #1093 ) ; +#989 = EDGE_LOOP ( 'NONE', ( #1492, #1249, #1396, #2579 ) ) ; +#990 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, 1.150000000000000100 ) ) ; +#991 = ADVANCED_FACE ( 'NONE', ( #1123 ), #188, .T. ) ; +#992 = ORIENTED_EDGE ( 'NONE', *, *, #1041, .T. ) ; +#993 = CARTESIAN_POINT ( 'NONE', ( 1.092385959375934000, 0.1799478263304782100, 0.2000000000000002100 ) ) ; +#994 = EDGE_CURVE ( 'NONE', #2332, #2305, #2564, .T. ) ; +#995 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.349999999999999900, -1.249999999999999800 ) ) ; +#996 = DIRECTION ( 'NONE', ( -3.738628180984498900E-017, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#997 = EDGE_LOOP ( 'NONE', ( #184, #2189, #204, #1165 ) ) ; +#998 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#999 = AXIS2_PLACEMENT_3D ( 'NONE', #1701, #1432, #961 ) ; +#1000 = VECTOR ( 'NONE', #3113, 1000.000000000000100 ) ; +#1001 = LINE ( 'NONE', #1797, #2046 ) ; +#1002 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, 1.449999999999999700 ) ) ; +#1003 = LINE ( 'NONE', #82, #2906 ) ; +#1004 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1005 = FACE_OUTER_BOUND ( 'NONE', #1943, .T. ) ; +#1006 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1007 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1008 = DIRECTION ( 'NONE', ( -0.05233595624294376500, 0.9986295347545739400, 0.0000000000000000000 ) ) ; +#1009 = CIRCLE ( 'NONE', #2663, 0.1999999999999999800 ) ; +#1010 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.1496346075389737300, 0.7500000000000002200 ) ) ; +#1011 = AXIS2_PLACEMENT_3D ( 'NONE', #2278, #1548, #91 ) ; +#1012 = AXIS2_PLACEMENT_3D ( 'NONE', #2449, #2424, #1717 ) ; +#1013 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 0.2000000000000002100 ) ) ; +#1014 = VECTOR ( 'NONE', #242, 1000.000000000000200 ) ; +#1015 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #680 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1940, #2177, #704 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1016 = VERTEX_POINT ( 'NONE', #628 ) ; +#1017 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1018 = EDGE_LOOP ( 'NONE', ( #3164, #1995, #1383, #3054 ) ) ; +#1019 = ORIENTED_EDGE ( 'NONE', *, *, #1135, .T. ) ; +#1020 = EDGE_LOOP ( 'NONE', ( #750, #1107, #1982, #3127, #1339, #829, #206, #2967, #1070, #895, #1642, #343 ) ) ; +#1021 = VERTEX_POINT ( 'NONE', #1814 ) ; +#1022 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1023 = FILL_AREA_STYLE ('',( #2514 ) ) ; +#1024 = ORIENTED_EDGE ( 'NONE', *, *, #3043, .F. ) ; +#1025 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, -0.1999999999999997600 ) ) ; +#1026 = EDGE_CURVE ( 'NONE', #1100, #15, #3035, .T. ) ; +#1027 = VERTEX_POINT ( 'NONE', #1073 ) ; +#1028 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#1029 = ORIENTED_EDGE ( 'NONE', *, *, #7, .T. ) ; +#1030 = SURFACE_STYLE_USAGE ( .BOTH. , #3017 ) ; +#1031 = VECTOR ( 'NONE', #2433, 1000.000000000000000 ) ; +#1032 = AXIS2_PLACEMENT_3D ( 'NONE', #318, #2306, #1311 ) ; +#1033 = EDGE_CURVE ( 'NONE', #1985, #416, #2952, .T. ) ; +#1034 = EDGE_CURVE ( 'NONE', #1231, #1734, #2056, .T. ) ; +#1035 = LINE ( 'NONE', #1121, #1966 ) ; +#1036 = CARTESIAN_POINT ( 'NONE', ( 0.7272651204577580400, 1.450000000000000000, 1.377265120457757500 ) ) ; +#1037 = DIRECTION ( 'NONE', ( -0.9975640502598242000, -0.06975647374412523300, 0.0000000000000000000 ) ) ; +#1038 = PLANE ( 'NONE', #1728 ) ; +#1039 = LINE ( 'NONE', #516, #2434 ) ; +#1040 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.450000000000000000, 1.377265120457757700 ) ) ; +#1041 = EDGE_CURVE ( 'NONE', #2658, #1457, #642, .T. ) ; +#1042 = FILL_AREA_STYLE_COLOUR ( '', #1900 ) ; +#1043 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1044 = FACE_OUTER_BOUND ( 'NONE', #1557, .T. ) ; +#1045 = EDGE_CURVE ( 'NONE', #1369, #2861, #370, .T. ) ; +#1046 = DIRECTION ( 'NONE', ( 3.738628180984499500E-017, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1047 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1048 = VECTOR ( 'NONE', #442, 1000.000000000000000 ) ; +#1049 = VECTOR ( 'NONE', #2090, 1000.000000000000200 ) ; +#1050 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -2.710505431213761100E-016 ) ) ; +#1051 = VECTOR ( 'NONE', #586, 1000.000000000000000 ) ; +#1052 = EDGE_CURVE ( 'NONE', #1181, #81, #2252, .T. ) ; +#1053 = CARTESIAN_POINT ( 'NONE', ( 1.092385959375934000, 0.1799478263304782100, 0.7500000000000002200 ) ) ; +#1054 = VERTEX_POINT ( 'NONE', #2310 ) ; +#1055 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#1056 = AXIS2_PLACEMENT_3D ( 'NONE', #2645, #1158, #2127 ) ; +#1057 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1058 = ORIENTED_EDGE ( 'NONE', *, *, #2923, .T. ) ; +#1059 = ORIENTED_EDGE ( 'NONE', *, *, #475, .F. ) ; +#1060 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1061 = ORIENTED_EDGE ( 'NONE', *, *, #3106, .T. ) ; +#1062 = EDGE_LOOP ( 'NONE', ( #2932, #383, #1672, #2629 ) ) ; +#1063 = ORIENTED_EDGE ( 'NONE', *, *, #2009, .T. ) ; +#1064 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133569600, -0.7499999999999997800 ) ) ; +#1065 = ORIENTED_EDGE ( 'NONE', *, *, #814, .T. ) ; +#1066 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.880642008201783800E-015, -0.0000000000000000000 ) ) ; +#1067 = ORIENTED_EDGE ( 'NONE', *, *, #659, .F. ) ; +#1068 = AXIS2_PLACEMENT_3D ( 'NONE', #208, #197, #2132 ) ; +#1069 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293220700, 0.8401167978121472100, -0.1999999999999997600 ) ) ; +#1070 = ORIENTED_EDGE ( 'NONE', *, *, #934, .F. ) ; +#1071 = ADVANCED_FACE ( 'NONE', ( #1636 ), #854, .F. ) ; +#1072 = FACE_OUTER_BOUND ( 'NONE', #1330, .T. ) ; +#1073 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, -1.149999999999999700 ) ) ; +#1074 = AXIS2_PLACEMENT_3D ( 'NONE', #1735, #1986, #1976 ) ; +#1075 = LINE ( 'NONE', #1562, #327 ) ; +#1076 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, -0.1999999999999997600 ) ) ; +#1077 = LINE ( 'NONE', #311, #2319 ) ; +#1078 = LINE ( 'NONE', #572, #66 ) ; +#1079 = DIRECTION ( 'NONE', ( 0.05233595624294376500, 0.9986295347545739400, -0.0000000000000000000 ) ) ; +#1080 = ORIENTED_EDGE ( 'NONE', *, *, #1102, .T. ) ; +#1081 = LINE ( 'NONE', #1229, #223 ) ; +#1082 = ORIENTED_EDGE ( 'NONE', *, *, #2244, .F. ) ; +#1083 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, -0.7499999999999997800 ) ) ; +#1084 = FACE_OUTER_BOUND ( 'NONE', #2999, .T. ) ; +#1085 = DIRECTION ( 'NONE', ( 0.9975640502598242000, -0.06975647374412523300, 0.0000000000000000000 ) ) ; +#1086 = ADVANCED_FACE ( 'NONE', ( #2448 ), #3059, .T. ) ; +#1087 = LINE ( 'NONE', #753, #1828 ) ; +#1088 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1089 = ORIENTED_EDGE ( 'NONE', *, *, #2474, .T. ) ; +#1090 = LINE ( 'NONE', #1069, #644 ) ; +#1091 = DIRECTION ( 'NONE', ( 0.9848077530122080200, 0.1736481776669307200, -3.681830018263464000E-017 ) ) ; +#1092 = EDGE_LOOP ( 'NONE', ( #42, #1424, #1688, #2989 ) ) ; +#1093 = CARTESIAN_POINT ( 'NONE', ( -0.6699588517275068000, 0.1499999999999999700, 1.319958851727506500 ) ) ; +#1094 = FACE_OUTER_BOUND ( 'NONE', #169, .T. ) ; +#1095 = EDGE_CURVE ( 'NONE', #3129, #2640, #2214, .T. ) ; +#1096 = ORIENTED_EDGE ( 'NONE', *, *, #2653, .T. ) ; +#1097 = PLANE ( 'NONE', #1131 ) ; +#1098 = AXIS2_PLACEMENT_3D ( 'NONE', #3002, #1047, #1541 ) ; +#1099 = ORIENTED_EDGE ( 'NONE', *, *, #2983, .T. ) ; +#1100 = VERTEX_POINT ( 'NONE', #1888 ) ; +#1101 = SURFACE_STYLE_USAGE ( .BOTH. , #2593 ) ; +#1102 = EDGE_CURVE ( 'NONE', #85, #1297, #2801, .T. ) ; +#1103 = VERTEX_POINT ( 'NONE', #2639 ) ; +#1104 = PLANE ( 'NONE', #521 ) ; +#1105 = DIRECTION ( 'NONE', ( -0.1736481776669307200, 0.9848077530122080200, 0.0000000000000000000 ) ) ; +#1106 = ADVANCED_FACE ( 'NONE', ( #334 ), #433, .F. ) ; +#1107 = ORIENTED_EDGE ( 'NONE', *, *, #1146, .F. ) ; +#1108 = ORIENTED_EDGE ( 'NONE', *, *, #293, .F. ) ; +#1109 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1110 = EDGE_CURVE ( 'NONE', #373, #2818, #752, .T. ) ; +#1111 = VECTOR ( 'NONE', #2955, 1000.000000000000000 ) ; +#1112 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, 0.7500000000000002200 ) ) ; +#1113 = VECTOR ( 'NONE', #1714, 1000.000000000000000 ) ; +#1114 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#1115 = ADVANCED_FACE ( 'NONE', ( #676 ), #487, .T. ) ; +#1116 = LINE ( 'NONE', #1904, #858 ) ; +#1117 = ORIENTED_EDGE ( 'NONE', *, *, #2872, .F. ) ; +#1118 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#1119 = FILL_AREA_STYLE_COLOUR ( '', #2532 ) ; +#1120 = VECTOR ( 'NONE', #1954, 1000.000000000000000 ) ; +#1121 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, -0.7499999999999997800 ) ) ; +#1122 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, -0.1999999999999997600 ) ) ; +#1123 = FACE_OUTER_BOUND ( 'NONE', #824, .T. ) ; +#1124 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, -1.149999999999999700 ) ) ; +#1125 = AXIS2_PLACEMENT_3D ( 'NONE', #3033, #788, #2038 ) ; +#1126 = LINE ( 'NONE', #2263, #681 ) ; +#1127 = VERTEX_POINT ( 'NONE', #899 ) ; +#1128 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133569600, 0.7500000000000002200 ) ) ; +#1129 = ORIENTED_EDGE ( 'NONE', *, *, #2540, .T. ) ; +#1130 = VECTOR ( 'NONE', #1628, 1000.000000000000100 ) ; +#1131 = AXIS2_PLACEMENT_3D ( 'NONE', #1850, #381, #2615 ) ; +#1132 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.880642008201783800E-015, 0.0000000000000000000 ) ) ; +#1133 = ORIENTED_EDGE ( 'NONE', *, *, #13, .T. ) ; +#1134 = EDGE_CURVE ( 'NONE', #538, #70, #2648, .T. ) ; +#1135 = EDGE_CURVE ( 'NONE', #1879, #1260, #1476, .T. ) ; +#1136 = ORIENTED_EDGE ( 'NONE', *, *, #2314, .T. ) ; +#1137 = ORIENTED_EDGE ( 'NONE', *, *, #725, .T. ) ; +#1138 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1756, 'distance_accuracy_value', 'NONE'); +#1139 = EDGE_CURVE ( 'NONE', #846, #469, #2562, .T. ) ; +#1140 = CARTESIAN_POINT ( 'NONE', ( 0.9425915291627476900, 0.1720974328940367000, 1.150000000000000100 ) ) ; +#1141 = VERTEX_POINT ( 'NONE', #2373 ) ; +#1142 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1143 = PLANE ( 'NONE', #2126 ) ; +#1144 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1145 = ORIENTED_EDGE ( 'NONE', *, *, #2206, .F. ) ; +#1146 = EDGE_CURVE ( 'NONE', #1260, #1103, #406, .T. ) ; +#1147 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, -1.149999999999999700 ) ) ; +#1148 = VECTOR ( 'NONE', #953, 1000.000000000000000 ) ; +#1149 = DIRECTION ( 'NONE', ( -2.710505431213760600E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1150 = DIRECTION ( 'NONE', ( -0.06975647374412513600, -0.9975640502598243100, 0.0000000000000000000 ) ) ; +#1151 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.1499999999999999700, 1.319958851727506000 ) ) ; +#1152 = ORIENTED_EDGE ( 'NONE', *, *, #2643, .F. ) ; +#1153 = VECTOR ( 'NONE', #25, 1000.000000000000200 ) ; +#1154 = EDGE_CURVE ( 'NONE', #987, #1412, #672, .T. ) ; +#1155 = FACE_OUTER_BOUND ( 'NONE', #534, .T. ) ; +#1156 = FACE_OUTER_BOUND ( 'NONE', #3005, .T. ) ; +#1157 = VERTEX_POINT ( 'NONE', #1631 ) ; +#1158 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1159 = EDGE_CURVE ( 'NONE', #1624, #831, #715, .T. ) ; +#1160 = SURFACE_STYLE_FILL_AREA ( #2008 ) ; +#1161 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.1496346075389737300, 1.150000000000000100 ) ) ; +#1162 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.349999999999999900, -1.149999999999999700 ) ) ; +#1163 = FACE_OUTER_BOUND ( 'NONE', #794, .T. ) ; +#1164 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.880642008201783800E-015, -0.0000000000000000000 ) ) ; +#1165 = ORIENTED_EDGE ( 'NONE', *, *, #475, .T. ) ; +#1166 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133572400, 0.2000000000000002100 ) ) ; +#1167 = FACE_OUTER_BOUND ( 'NONE', #2856, .T. ) ; +#1168 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, -0.7499999999999997800 ) ) ; +#1169 = ORIENTED_EDGE ( 'NONE', *, *, #1325, .T. ) ; +#1170 = PLANE ( 'NONE', #1222 ) ; +#1171 = VECTOR ( 'NONE', #2098, 1000.000000000000100 ) ; +#1172 = AXIS2_PLACEMENT_3D ( 'NONE', #2910, #710, #2697 ) ; +#1173 = ORIENTED_EDGE ( 'NONE', *, *, #108, .F. ) ; +#1174 = VERTEX_POINT ( 'NONE', #1401 ) ; +#1175 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1176 = EDGE_LOOP ( 'NONE', ( #1570, #1491, #1067, #163 ) ) ; +#1177 = PLANE ( 'NONE', #2623 ) ; +#1178 = CARTESIAN_POINT ( 'NONE', ( 0.6699588517275068000, 0.1499999999999999700, 1.319958851727506000 ) ) ; +#1179 = ORIENTED_EDGE ( 'NONE', *, *, #1442, .F. ) ; +#1180 = AXIS2_PLACEMENT_3D ( 'NONE', #362, #1375, #3085 ) ; +#1181 = VERTEX_POINT ( 'NONE', #2621 ) ; +#1182 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133569600, 1.150000000000000100 ) ) ; +#1183 = VERTEX_POINT ( 'NONE', #194 ) ; +#1184 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1185 = ORIENTED_EDGE ( 'NONE', *, *, #2211, .F. ) ; +#1186 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1187 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, -0.1999999999999997600 ) ) ; +#1188 = VECTOR ( 'NONE', #230, 1000.000000000000000 ) ; +#1189 = AXIS2_PLACEMENT_3D ( 'NONE', #135, #158, #1851 ) ; +#1190 = VECTOR ( 'NONE', #2477, 1000.000000000000000 ) ; +#1191 = DIRECTION ( 'NONE', ( 0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#1192 = DIRECTION ( 'NONE', ( -0.9975640502598243100, -0.06975647374412515000, 0.0000000000000000000 ) ) ; +#1193 = VECTOR ( 'NONE', #1007, 1000.000000000000000 ) ; +#1194 = FACE_OUTER_BOUND ( 'NONE', #1020, .T. ) ; +#1195 = AXIS2_PLACEMENT_3D ( 'NONE', #2705, #2165, #3 ) ; +#1196 = ORIENTED_EDGE ( 'NONE', *, *, #1496, .F. ) ; +#1197 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1198 = EDGE_CURVE ( 'NONE', #2651, #2884, #1443, .T. ) ; +#1199 = ADVANCED_FACE ( 'NONE', ( #967 ), #1361, .F. ) ; +#1200 = EDGE_CURVE ( 'NONE', #765, #70, #821, .T. ) ; +#1201 = SURFACE_SIDE_STYLE ('',( #3117 ) ) ; +#1202 = VECTOR ( 'NONE', #2286, 1000.000000000000000 ) ; +#1203 = EDGE_CURVE ( 'NONE', #1655, #1027, #2797, .T. ) ; +#1204 = LINE ( 'NONE', #840, #1288 ) ; +#1205 = DIRECTION ( 'NONE', ( 0.9975640502598243100, 0.06975647374412530200, -0.0000000000000000000 ) ) ; +#1206 = VERTEX_POINT ( 'NONE', #2363 ) ; +#1207 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.1496346075389737300, -1.149999999999999700 ) ) ; +#1208 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2760 ), #1384 ) ; +#1209 = LINE ( 'NONE', #2207, #1400 ) ; +#1210 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, 0.2000000000000002100 ) ) ; +#1211 = ORIENTED_EDGE ( 'NONE', *, *, #1583, .T. ) ; +#1212 = ORIENTED_EDGE ( 'NONE', *, *, #392, .F. ) ; +#1213 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1214 = ORIENTED_EDGE ( 'NONE', *, *, #1996, .T. ) ; +#1215 = ADVANCED_FACE ( 'NONE', ( #1397 ), #2689, .T. ) ; +#1216 = ORIENTED_EDGE ( 'NONE', *, *, #1909, .F. ) ; +#1217 = EDGE_CURVE ( 'NONE', #2605, #954, #2213, .T. ) ; +#1218 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1219 = ORIENTED_EDGE ( 'NONE', *, *, #2261, .T. ) ; +#1220 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#1221 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133572400, 0.2000000000000002100 ) ) ; +#1222 = AXIS2_PLACEMENT_3D ( 'NONE', #1890, #1149, #2913 ) ; +#1223 = ORIENTED_EDGE ( 'NONE', *, *, #1646, .T. ) ; +#1224 = LINE ( 'NONE', #2751, #2862 ) ; +#1225 = LINE ( 'NONE', #729, #1660 ) ; +#1226 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1227 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, 0.7500000000000002200 ) ) ; +#1228 = FACE_OUTER_BOUND ( 'NONE', #1810, .T. ) ; +#1229 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.1496346075389737300, 1.150000000000000100 ) ) ; +#1230 = ADVANCED_FACE ( 'NONE', ( #1558 ), #3190, .F. ) ; +#1231 = VERTEX_POINT ( 'NONE', #3152 ) ; +#1232 = VECTOR ( 'NONE', #1022, 1000.000000000000000 ) ; +#1233 = AXIS2_PLACEMENT_3D ( 'NONE', #2234, #986, #1970 ) ; +#1234 = VECTOR ( 'NONE', #3066, 1000.000000000000000 ) ; +#1235 = CARTESIAN_POINT ( 'NONE', ( -1.092385959375934000, 0.1799478263304782100, 0.7500000000000002200 ) ) ; +#1236 = FACE_OUTER_BOUND ( 'NONE', #692, .T. ) ; +#1237 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1238 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1239 = AXIS2_PLACEMENT_3D ( 'NONE', #84, #53, #1758 ) ; +#1240 = MANIFOLD_SOLID_BREP ( 'Mirror1[3]', #1320 ) ; +#1241 = LINE ( 'NONE', #2529, #266 ) ; +#1242 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.067157287525380700, -1.149999999999999700 ) ) ; +#1243 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.1496346075389737300, -1.149999999999999700 ) ) ; +#1244 = LINE ( 'NONE', #3189, #1563 ) ; +#1245 = CLOSED_SHELL ( 'NONE', ( #866, #2838, #1115, #1855, #455, #286, #1450, #589, #347, #886, #714, #1199, #1464, #478 ) ) ; +#1246 = LINE ( 'NONE', #549, #154 ) ; +#1247 = ADVANCED_FACE ( 'NONE', ( #148 ), #480, .F. ) ; +#1248 = ORIENTED_EDGE ( 'NONE', *, *, #7, .F. ) ; +#1249 = ORIENTED_EDGE ( 'NONE', *, *, #78, .F. ) ; +#1250 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1251 = CARTESIAN_POINT ( 'NONE', ( 1.092385959375934000, 0.1799478263304782100, -0.7499999999999997800 ) ) ; +#1252 = DIRECTION ( 'NONE', ( 0.9986295347545739400, 0.05233595624294376500, 0.0000000000000000000 ) ) ; +#1253 = EDGE_LOOP ( 'NONE', ( #1990, #1108, #2026, #2583 ) ) ; +#1254 = AXIS2_PLACEMENT_3D ( 'NONE', #3027, #1279, #326 ) ; +#1255 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, 1.150000000000000100 ) ) ; +#1256 = ORIENTED_EDGE ( 'NONE', *, *, #2217, .T. ) ; +#1257 = EDGE_LOOP ( 'NONE', ( #507, #2505, #535, #2416 ) ) ; +#1258 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.880642008201783800E-015, -0.0000000000000000000 ) ) ; +#1259 = EDGE_LOOP ( 'NONE', ( #3094, #708, #1614, #1572 ) ) ; +#1260 = VERTEX_POINT ( 'NONE', #1934 ) ; +#1261 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1262 = ORIENTED_EDGE ( 'NONE', *, *, #1513, .F. ) ; +#1263 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 1.150000000000000100 ) ) ; +#1264 = EDGE_CURVE ( 'NONE', #1415, #2909, #2015, .T. ) ; +#1265 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, 1.150000000000000100 ) ) ; +#1266 = VERTEX_POINT ( 'NONE', #3194 ) ; +#1267 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1268 = AXIS2_PLACEMENT_3D ( 'NONE', #518, #2231, #536 ) ; +#1269 = EDGE_CURVE ( 'NONE', #448, #3088, #2093, .T. ) ; +#1270 = LINE ( 'NONE', #3148, #258 ) ; +#1271 = LINE ( 'NONE', #951, #2941 ) ; +#1272 = CARTESIAN_POINT ( 'NONE', ( 0.7999999999999999300, 1.037500000000000100, -1.449999999999999700 ) ) ; +#1273 = VECTOR ( 'NONE', #567, 1000.000000000000100 ) ; +#1274 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#1275 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1276 = CARTESIAN_POINT ( 'NONE', ( -0.7999999999999999300, 1.037500000000000100, -1.449999999999999700 ) ) ; +#1277 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1278 = LINE ( 'NONE', #181, #1360 ) ; +#1279 = DIRECTION ( 'NONE', ( -0.06975647374412513600, -0.9975640502598243100, 0.0000000000000000000 ) ) ; +#1280 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 1.449999999999999300 ) ) ; +#1281 = LINE ( 'NONE', #1438, #751 ) ; +#1282 = ORIENTED_EDGE ( 'NONE', *, *, #1373, .T. ) ; +#1283 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1284 = EDGE_CURVE ( 'NONE', #1357, #3010, #186, .T. ) ; +#1285 = CYLINDRICAL_SURFACE ( 'NONE', #1574, 0.1000000000000000500 ) ; +#1286 = DIRECTION ( 'NONE', ( 0.9986295347545739400, -0.05233595624294376500, 0.0000000000000000000 ) ) ; +#1287 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #2778 ) ; +#1288 = VECTOR ( 'NONE', #2824, 1000.000000000000000 ) ; +#1289 = CARTESIAN_POINT ( 'NONE', ( 0.7999999999999999300, 1.037500000000000100, -1.449999999999999700 ) ) ; +#1290 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1291 = EDGE_LOOP ( 'NONE', ( #1179, #317, #1216, #1212, #2775, #2706, #97, #843, #2925, #499, #1469, #2577 ) ) ; +#1292 = SURFACE_STYLE_FILL_AREA ( #1860 ) ; +#1293 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, 0.7500000000000002200 ) ) ; +#1294 = VERTEX_POINT ( 'NONE', #1694 ) ; +#1295 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, -0.7499999999999997800 ) ) ; +#1296 = ORIENTED_EDGE ( 'NONE', *, *, #1284, .T. ) ; +#1297 = VERTEX_POINT ( 'NONE', #2899 ) ; +#1298 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.349999999999999900, -1.149999999999999700 ) ) ; +#1299 = VERTEX_POINT ( 'NONE', #2171 ) ; +#1300 = AXIS2_PLACEMENT_3D ( 'NONE', #1255, #529, #520 ) ; +#1301 = ORIENTED_EDGE ( 'NONE', *, *, #2178, .T. ) ; +#1302 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1303 = ORIENTED_EDGE ( 'NONE', *, *, #3162, .F. ) ; +#1304 = CARTESIAN_POINT ( 'NONE', ( -0.7999999999999999300, 0.1499999999999999700, -1.319958851727506500 ) ) ; +#1305 = VECTOR ( 'NONE', #1942, 1000.000000000000200 ) ; +#1306 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1307 = AXIS2_PLACEMENT_3D ( 'NONE', #3052, #96, #2534 ) ; +#1308 = EDGE_CURVE ( 'NONE', #988, #870, #1281, .T. ) ; +#1309 = VECTOR ( 'NONE', #3091, 999.9999999999998900 ) ; +#1310 = VECTOR ( 'NONE', #857, 1000.000000000000100 ) ; +#1311 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1312 = EDGE_CURVE ( 'NONE', #319, #125, #2608, .T. ) ; +#1313 = VECTOR ( 'NONE', #2758, 1000.000000000000000 ) ; +#1314 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#1315 = LINE ( 'NONE', #1040, #2759 ) ; +#1316 = CARTESIAN_POINT ( 'NONE', ( 0.9425915291627476900, 0.1720974328940367000, 1.150000000000000100 ) ) ; +#1317 = ADVANCED_FACE ( 'NONE', ( #2442 ), #1922, .F. ) ; +#1318 = VECTOR ( 'NONE', #3145, 1000.000000000000000 ) ; +#1319 = VERTEX_POINT ( 'NONE', #2413 ) ; +#1320 = CLOSED_SHELL ( 'NONE', ( #852, #972, #1807, #2802, #2212, #260, #636, #1247, #2743, #1818, #1230, #2227, #3193, #2673 ) ) ; +#1321 = LINE ( 'NONE', #2512, #2367 ) ; +#1322 = PLANE ( 'NONE', #874 ) ; +#1323 = AXIS2_PLACEMENT_3D ( 'NONE', #205, #1142, #1399 ) ; +#1324 = FACE_OUTER_BOUND ( 'NONE', #1884, .T. ) ; +#1325 = EDGE_CURVE ( 'NONE', #52, #2117, #1632, .T. ) ; +#1326 = EDGE_LOOP ( 'NONE', ( #301, #2048, #584, #2304 ) ) ; +#1327 = FACE_OUTER_BOUND ( 'NONE', #1959, .T. ) ; +#1328 = AXIS2_PLACEMENT_3D ( 'NONE', #1162, #2897, #2628 ) ; +#1329 = ORIENTED_EDGE ( 'NONE', *, *, #738, .T. ) ; +#1330 = EDGE_LOOP ( 'NONE', ( #2022, #235, #3032, #1451 ) ) ; +#1331 = ORIENTED_EDGE ( 'NONE', *, *, #897, .F. ) ; +#1332 = DIRECTION ( 'NONE', ( 0.9975640502598243100, -0.06975647374412515000, 0.0000000000000000000 ) ) ; +#1333 = EDGE_CURVE ( 'NONE', #1457, #2895, #1790, .T. ) ; +#1334 = ORIENTED_EDGE ( 'NONE', *, *, #1972, .T. ) ; +#1335 = ORIENTED_EDGE ( 'NONE', *, *, #1872, .F. ) ; +#1336 = VERTEX_POINT ( 'NONE', #742 ) ; +#1337 = ORIENTED_EDGE ( 'NONE', *, *, #130, .F. ) ; +#1338 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, -0.7499999999999997800 ) ) ; +#1339 = ORIENTED_EDGE ( 'NONE', *, *, #1846, .F. ) ; +#1340 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 1.449999999999999700 ) ) ; +#1341 = ORIENTED_EDGE ( 'NONE', *, *, #3126, .F. ) ; +#1342 = AXIS2_PLACEMENT_3D ( 'NONE', #315, #786, #2517 ) ; +#1343 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1344 = AXIS2_PLACEMENT_3D ( 'NONE', #1881, #199, #669 ) ; +#1345 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8875000000000000700, -0.1999999999999997600 ) ) ; +#1346 = ORIENTED_EDGE ( 'NONE', *, *, #151, .F. ) ; +#1347 = DIRECTION ( 'NONE', ( -0.06975647374412528900, 0.9975640502598242000, 0.0000000000000000000 ) ) ; +#1348 = EDGE_CURVE ( 'NONE', #1910, #688, #2842, .T. ) ; +#1349 = LINE ( 'NONE', #2240, #3103 ) ; +#1350 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1351 = AXIS2_PLACEMENT_3D ( 'NONE', #2480, #2253, #1770 ) ; +#1352 = FACE_BOUND ( 'NONE', #873, .T. ) ; +#1353 = ADVANCED_FACE ( 'NONE', ( #2053 ), #458, .T. ) ; +#1354 = PLANE ( 'NONE', #1815 ) ; +#1355 = LINE ( 'NONE', #2023, #2478 ) ; +#1356 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1357 = VERTEX_POINT ( 'NONE', #2711 ) ; +#1358 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1359 = DIRECTION ( 'NONE', ( 0.9986295347545739400, 0.05233595624294376500, 0.0000000000000000000 ) ) ; +#1360 = VECTOR ( 'NONE', #1918, 1000.000000000000000 ) ; +#1361 = PLANE ( 'NONE', #775 ) ; +#1362 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2497 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2845, #3122, #643 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1363 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, -0.7499999999999997800 ) ) ; +#1364 = VECTOR ( 'NONE', #1060, 1000.000000000000000 ) ; +#1365 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1366 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1367 = LINE ( 'NONE', #1980, #492 ) ; +#1368 = ADVANCED_FACE ( 'NONE', ( #1236 ), #2203, .F. ) ; +#1369 = VERTEX_POINT ( 'NONE', #10 ) ; +#1370 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133572400, 1.150000000000000100 ) ) ; +#1371 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1372 = EDGE_CURVE ( 'NONE', #2911, #1802, #2949, .T. ) ; +#1373 = EDGE_CURVE ( 'NONE', #2500, #1299, #599, .T. ) ; +#1374 = ORIENTED_EDGE ( 'NONE', *, *, #1437, .T. ) ; +#1375 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1376 = EDGE_LOOP ( 'NONE', ( #201, #421, #1726, #746 ) ) ; +#1377 = ORIENTED_EDGE ( 'NONE', *, *, #2145, .T. ) ; +#1378 = EDGE_CURVE ( 'NONE', #2977, #3013, #901, .T. ) ; +#1379 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1380 = ORIENTED_EDGE ( 'NONE', *, *, #175, .T. ) ; +#1381 = PLANE ( 'NONE', #2159 ) ; +#1382 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, 1.150000000000000100 ) ) ; +#1383 = ORIENTED_EDGE ( 'NONE', *, *, #1718, .T. ) ; +#1384 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #587 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1609, #1379, #1356 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1385 = ORIENTED_EDGE ( 'NONE', *, *, #1325, .F. ) ; +#1386 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, -0.1999999999999997600 ) ) ; +#1387 = LINE ( 'NONE', #1724, #2080 ) ; +#1388 = LINE ( 'NONE', #149, #2202 ) ; +#1389 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1390 = EDGE_CURVE ( 'NONE', #15, #3088, #32, .T. ) ; +#1391 = LINE ( 'NONE', #834, #2007 ) ; +#1392 = CARTESIAN_POINT ( 'NONE', ( 0.7999999999999999300, 1.037500000000000100, -1.449999999999999700 ) ) ; +#1393 = AXIS2_PLACEMENT_3D ( 'NONE', #2596, #558, #75 ) ; +#1394 = VERTEX_POINT ( 'NONE', #3081 ) ; +#1395 = CIRCLE ( 'NONE', #2072, 0.1599999999999999800 ) ; +#1396 = ORIENTED_EDGE ( 'NONE', *, *, #1808, .T. ) ; +#1397 = FACE_OUTER_BOUND ( 'NONE', #761, .T. ) ; +#1398 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1399 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1400 = VECTOR ( 'NONE', #1915, 1000.000000000000000 ) ; +#1401 = CARTESIAN_POINT ( 'NONE', ( -1.092385959375934000, 0.1799478263304782100, -0.7499999999999997800 ) ) ; +#1402 = AXIS2_PLACEMENT_3D ( 'NONE', #2654, #2405, #1426 ) ; +#1403 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, -1.149999999999999700 ) ) ; +#1404 = ORIENTED_EDGE ( 'NONE', *, *, #2653, .F. ) ; +#1405 = VECTOR ( 'NONE', #2129, 1000.000000000000000 ) ; +#1406 = PLANE ( 'NONE', #865 ) ; +#1407 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133572400, 0.7500000000000002200 ) ) ; +#1408 = ORIENTED_EDGE ( 'NONE', *, *, #2550, .T. ) ; +#1409 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1410 = LINE ( 'NONE', #3090, #1130 ) ; +#1411 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1412 = VERTEX_POINT ( 'NONE', #375 ) ; +#1413 = EDGE_CURVE ( 'NONE', #1958, #36, #226, .T. ) ; +#1414 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.1496346075389737300, -0.1999999999999997600 ) ) ; +#1415 = VERTEX_POINT ( 'NONE', #2597 ) ; +#1416 = ORIENTED_EDGE ( 'NONE', *, *, #2620, .T. ) ; +#1417 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, 0.2000000000000002100 ) ) ; +#1418 = ORIENTED_EDGE ( 'NONE', *, *, #1373, .F. ) ; +#1419 = ORIENTED_EDGE ( 'NONE', *, *, #820, .T. ) ; +#1420 = DIRECTION ( 'NONE', ( -0.05233595624294376500, 0.9986295347545739400, 0.0000000000000000000 ) ) ; +#1421 = PLANE ( 'NONE', #354 ) ; +#1422 = ORIENTED_EDGE ( 'NONE', *, *, #1645, .T. ) ; +#1423 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1424 = ORIENTED_EDGE ( 'NONE', *, *, #175, .F. ) ; +#1425 = EDGE_CURVE ( 'NONE', #573, #884, #860, .T. ) ; +#1426 = DIRECTION ( 'NONE', ( -0.9975640502598242000, -0.06975647374412523300, 0.0000000000000000000 ) ) ; +#1427 = CYLINDRICAL_SURFACE ( 'NONE', #95, 0.1999999999999998700 ) ; +#1428 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1429 = ADVANCED_FACE ( 'NONE', ( #263 ), #635, .T. ) ; +#1430 = VECTOR ( 'NONE', #2843, 1000.000000000000000 ) ; +#1431 = FILL_AREA_STYLE ('',( #3158 ) ) ; +#1432 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1433 = AXIS2_PLACEMENT_3D ( 'NONE', #1969, #477, #1725 ) ; +#1434 = LINE ( 'NONE', #1055, #3147 ) ; +#1435 = CIRCLE ( 'NONE', #1239, 0.04999999999999991300 ) ; +#1436 = ADVANCED_FACE ( 'NONE', ( #1156 ), #387, .F. ) ; +#1437 = EDGE_CURVE ( 'NONE', #822, #56, #2014, .T. ) ; +#1438 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, 1.449999999999999700 ) ) ; +#1439 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1991 ), #836 ) ; +#1440 = LINE ( 'NONE', #943, #785 ) ; +#1441 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, 1.150000000000000100 ) ) ; +#1442 = EDGE_CURVE ( 'NONE', #2305, #2770, #1941, .T. ) ; +#1443 = LINE ( 'NONE', #1370, #2877 ) ; +#1444 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, 0.7500000000000002200 ) ) ; +#1445 = VECTOR ( 'NONE', #1698, 1000.000000000000000 ) ; +#1446 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, 1.150000000000000100 ) ) ; +#1447 = VECTOR ( 'NONE', #1290, 1000.000000000000000 ) ; +#1448 = ORIENTED_EDGE ( 'NONE', *, *, #297, .T. ) ; +#1449 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1450 = ADVANCED_FACE ( 'NONE', ( #2089 ), #2585, .F. ) ; +#1451 = ORIENTED_EDGE ( 'NONE', *, *, #2533, .T. ) ; +#1452 = EDGE_LOOP ( 'NONE', ( #615, #349, #1089, #690 ) ) ; +#1453 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1454 = EDGE_CURVE ( 'NONE', #1369, #3167, #2208, .T. ) ; +#1455 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, 0.7500000000000002200 ) ) ; +#1456 = VERTEX_POINT ( 'NONE', #2123 ) ; +#1457 = VERTEX_POINT ( 'NONE', #3093 ) ; +#1458 = ORIENTED_EDGE ( 'NONE', *, *, #2365, .F. ) ; +#1459 = ORIENTED_EDGE ( 'NONE', *, *, #2327, .F. ) ; +#1460 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, -1.149999999999999700 ) ) ; +#1461 = CIRCLE ( 'NONE', #2555, 0.1000000000000000500 ) ; +#1462 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, 0.7500000000000002200 ) ) ; +#1463 = DIRECTION ( 'NONE', ( 0.9975640502598243100, 0.06975647374412513600, 0.0000000000000000000 ) ) ; +#1464 = ADVANCED_FACE ( 'NONE', ( #1044 ), #645, .T. ) ; +#1465 = LINE ( 'NONE', #1140, #2475 ) ; +#1466 = CARTESIAN_POINT ( 'NONE', ( 0.7999999999999999300, 0.8874999999999999600, -1.449999999999999700 ) ) ; +#1467 = FACE_OUTER_BOUND ( 'NONE', #1634, .T. ) ; +#1468 = DIRECTION ( 'NONE', ( -0.9975640502598243100, 0.06975647374412523300, 0.0000000000000000000 ) ) ; +#1469 = ORIENTED_EDGE ( 'NONE', *, *, #721, .F. ) ; +#1470 = LINE ( 'NONE', #2982, #670 ) ; +#1471 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1472 = AXIS2_PLACEMENT_3D ( 'NONE', #2239, #755, #1250 ) ; +#1473 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1474 = CARTESIAN_POINT ( 'NONE', ( -0.9425915291627476900, 0.1720974328940367000, 1.150000000000000100 ) ) ; +#1475 = EDGE_CURVE ( 'NONE', #2511, #1910, #1858, .T. ) ; +#1476 = CIRCLE ( 'NONE', #2510, 0.04999999999999991300 ) ; +#1477 = VECTOR ( 'NONE', #1623, 1000.000000000000100 ) ; +#1478 = DIRECTION ( 'NONE', ( 0.9975640502598243100, -0.06975647374412515000, 0.0000000000000000000 ) ) ; +#1479 = ORIENTED_EDGE ( 'NONE', *, *, #1372, .T. ) ; +#1480 = EDGE_CURVE ( 'NONE', #3013, #111, #965, .T. ) ; +#1481 = ADVANCED_FACE ( 'NONE', ( #2483 ), #885, .F. ) ; +#1482 = VECTOR ( 'NONE', #2871, 1000.000000000000000 ) ; +#1483 = ORIENTED_EDGE ( 'NONE', *, *, #3162, .T. ) ; +#1484 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2018, 'distance_accuracy_value', 'NONE'); +#1485 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 0.2000000000000002100 ) ) ; +#1486 = LINE ( 'NONE', #634, #939 ) ; +#1487 = VERTEX_POINT ( 'NONE', #1629 ) ; +#1488 = ORIENTED_EDGE ( 'NONE', *, *, #1812, .F. ) ; +#1489 = ORIENTED_EDGE ( 'NONE', *, *, #3049, .T. ) ; +#1490 = DIRECTION ( 'NONE', ( -0.9975640502598243100, -0.06975647374412515000, 0.0000000000000000000 ) ) ; +#1491 = ORIENTED_EDGE ( 'NONE', *, *, #1134, .F. ) ; +#1492 = ORIENTED_EDGE ( 'NONE', *, *, #1284, .F. ) ; +#1493 = AXIS2_PLACEMENT_3D ( 'NONE', #440, #1684, #3173 ) ; +#1494 = ORIENTED_EDGE ( 'NONE', *, *, #92, .F. ) ; +#1495 = DIRECTION ( 'NONE', ( -1.880642008201783800E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1496 = EDGE_CURVE ( 'NONE', #305, #1831, #1009, .T. ) ; +#1497 = ORIENTED_EDGE ( 'NONE', *, *, #1425, .T. ) ; +#1498 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, 1.449999999999999700 ) ) ; +#1499 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, 1.150000000000000100 ) ) ; +#1500 = AXIS2_PLACEMENT_3D ( 'NONE', #1227, #282, #1526 ) ; +#1501 = ADVANCED_FACE ( 'NONE', ( #1630 ), #2181, .F. ) ; +#1502 = CARTESIAN_POINT ( 'NONE', ( 0.7999999999999999300, 1.450000000000000000, -1.377265120457757700 ) ) ; +#1503 = EDGE_LOOP ( 'NONE', ( #1627, #639, #1334, #160 ) ) ; +#1504 = EDGE_CURVE ( 'NONE', #2444, #913, #1819, .T. ) ; +#1505 = ORIENTED_EDGE ( 'NONE', *, *, #1651, .F. ) ; +#1506 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1507 = LINE ( 'NONE', #120, #216 ) ; +#1508 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1509 = FACE_OUTER_BOUND ( 'NONE', #1957, .T. ) ; +#1510 = AXIS2_PLACEMENT_3D ( 'NONE', #800, #1043, #577 ) ; +#1511 = LINE ( 'NONE', #1518, #183 ) ; +#1512 = PLANE ( 'NONE', #2745 ) ; +#1513 = EDGE_CURVE ( 'NONE', #469, #1958, #1278, .T. ) ; +#1514 = CIRCLE ( 'NONE', #43, 0.1599999999999999800 ) ; +#1515 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1516 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1517 = VECTOR ( 'NONE', #2922, 1000.000000000000000 ) ; +#1518 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, 0.2000000000000002100 ) ) ; +#1519 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1520 = DIRECTION ( 'NONE', ( -0.9975640502598243100, 0.06975647374412523300, 0.0000000000000000000 ) ) ; +#1521 = LINE ( 'NONE', #2280, #2137 ) ; +#1522 = ORIENTED_EDGE ( 'NONE', *, *, #2810, .T. ) ; +#1523 = ORIENTED_EDGE ( 'NONE', *, *, #2267, .F. ) ; +#1524 = LINE ( 'NONE', #397, #791 ) ; +#1525 = DIRECTION ( 'NONE', ( -0.05233595624294376500, 0.9986295347545739400, 0.0000000000000000000 ) ) ; +#1526 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1527 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293220700, 0.8401167978121472100, -0.7499999999999997800 ) ) ; +#1528 = ORIENTED_EDGE ( 'NONE', *, *, #2303, .T. ) ; +#1529 = AXIS2_PLACEMENT_3D ( 'NONE', #2781, #74, #1037 ) ; +#1530 = DIRECTION ( 'NONE', ( -0.1736481776669307200, -0.9848077530122080200, 0.0000000000000000000 ) ) ; +#1531 = VERTEX_POINT ( 'NONE', #453 ) ; +#1532 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1533 = ORIENTED_EDGE ( 'NONE', *, *, #517, .T. ) ; +#1534 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1535 = VERTEX_POINT ( 'NONE', #191 ) ; +#1536 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1537 = AXIS2_PLACEMENT_3D ( 'NONE', #1263, #1495, #59 ) ; +#1538 = CLOSED_SHELL ( 'NONE', ( #524, #1567, #3102, #2356, #2245, #271, #3067, #2943, #47, #2867, #731, #2473, #14, #1616 ) ) ; +#1539 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1540 = EDGE_CURVE ( 'NONE', #2905, #2276, #2282, .T. ) ; +#1541 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1542 = EDGE_CURVE ( 'NONE', #3129, #1299, #525, .T. ) ; +#1543 = VERTEX_POINT ( 'NONE', #1178 ) ; +#1544 = VECTOR ( 'NONE', #2728, 1000.000000000000000 ) ; +#1545 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, 0.7500000000000002200 ) ) ; +#1546 = EDGE_CURVE ( 'NONE', #801, #1319, #3150, .T. ) ; +#1547 = LINE ( 'NONE', #1151, #359 ) ; +#1548 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1549 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.067157287525380700, -1.249999999999999800 ) ) ; +#1550 = LINE ( 'NONE', #902, #2634 ) ; +#1551 = EDGE_CURVE ( 'NONE', #2616, #543, #1116, .T. ) ; +#1552 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, -0.7499999999999997800 ) ) ; +#1553 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 1.037500000000000100, -1.149999999999999700 ) ) ; +#1554 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 1.037500000000000100, 1.150000000000000100 ) ) ; +#1555 = LINE ( 'NONE', #896, #3073 ) ; +#1556 = DIRECTION ( 'NONE', ( 3.738628180984499500E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1557 = EDGE_LOOP ( 'NONE', ( #1479, #833, #541, #2624, #2852, #2812, #1652, #2618, #992, #3046, #6, #876 ) ) ; +#1558 = FACE_OUTER_BOUND ( 'NONE', #1452, .T. ) ; +#1559 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1560 = EDGE_CURVE ( 'NONE', #2196, #2894, #68, .T. ) ; +#1561 = VECTOR ( 'NONE', #2573, 1000.000000000000000 ) ; +#1562 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#1563 = VECTOR ( 'NONE', #2238, 1000.000000000000000 ) ; +#1564 = EDGE_LOOP ( 'NONE', ( #198, #1459, #353, #1214 ) ) ; +#1565 = FACE_OUTER_BOUND ( 'NONE', #2219, .T. ) ; +#1566 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#1567 = ADVANCED_FACE ( 'NONE', ( #1749 ), #2677, .F. ) ; +#1568 = VERTEX_POINT ( 'NONE', #3160 ) ; +#1569 = ORIENTED_EDGE ( 'NONE', *, *, #2049, .F. ) ; +#1570 = ORIENTED_EDGE ( 'NONE', *, *, #1200, .T. ) ; +#1571 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1572 = ORIENTED_EDGE ( 'NONE', *, *, #2513, .T. ) ; +#1573 = VERTEX_POINT ( 'NONE', #420 ) ; +#1574 = AXIS2_PLACEMENT_3D ( 'NONE', #2942, #2205, #2453 ) ; +#1575 = ORIENTED_EDGE ( 'NONE', *, *, #1621, .T. ) ; +#1576 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, -0.7499999999999997800 ) ) ; +#1577 = CLOSED_SHELL ( 'NONE', ( #1953, #1730, #1712, #1368, #3119, #1678, #162, #465, #2959, #1582, #1743, #2610, #2079, #376 ) ) ; +#1578 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293221800, 0.8401167978121472100, 0.2000000000000002100 ) ) ; +#1579 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1580 = AXIS2_PLACEMENT_3D ( 'NONE', #3170, #1681, #1420 ) ; +#1581 = ORIENTED_EDGE ( 'NONE', *, *, #1504, .T. ) ; +#1582 = ADVANCED_FACE ( 'NONE', ( #1709 ), #2636, .F. ) ; +#1583 = EDGE_CURVE ( 'NONE', #122, #1260, #1555, .T. ) ; +#1584 = CYLINDRICAL_SURFACE ( 'NONE', #1393, 0.04999999999999991300 ) ; +#1585 = LINE ( 'NONE', #168, #438 ) ; +#1586 = LINE ( 'NONE', #1745, #2985 ) ; +#1587 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, 0.2000000000000002100 ) ) ; +#1588 = LINE ( 'NONE', #2814, #292 ) ; +#1589 = STYLED_ITEM ( 'NONE', ( #195 ), #83 ) ; +#1590 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#1591 = VECTOR ( 'NONE', #2939, 1000.000000000000000 ) ; +#1592 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, 0.7500000000000002200 ) ) ; +#1593 = DIRECTION ( 'NONE', ( 0.9975640502598243100, 0.06975647374412513600, 0.0000000000000000000 ) ) ; +#1594 = VECTOR ( 'NONE', #2269, 1000.000000000000000 ) ; +#1595 = DIRECTION ( 'NONE', ( -0.05233595624294376500, 0.9986295347545739400, 0.0000000000000000000 ) ) ; +#1596 = AXIS2_PLACEMENT_3D ( 'NONE', #2353, #153, #1132 ) ; +#1597 = LINE ( 'NONE', #1554, #1946 ) ; +#1598 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8875000000000000700, -1.149999999999999700 ) ) ; +#1599 = EDGE_CURVE ( 'NONE', #416, #801, #444, .T. ) ; +#1600 = EDGE_CURVE ( 'NONE', #1297, #52, #2249, .T. ) ; +#1601 = ORIENTED_EDGE ( 'NONE', *, *, #13, .F. ) ; +#1602 = CIRCLE ( 'NONE', #1741, 0.1000000000000000500 ) ; +#1603 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.880642008201783800E-015, 0.0000000000000000000 ) ) ; +#1604 = AXIS2_PLACEMENT_3D ( 'NONE', #756, #2000, #792 ) ; +#1605 = ORIENTED_EDGE ( 'NONE', *, *, #1095, .T. ) ; +#1606 = FACE_OUTER_BOUND ( 'NONE', #841, .T. ) ; +#1607 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1608 = EDGE_CURVE ( 'NONE', #1568, #2909, #261, .T. ) ; +#1609 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1610 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, 1.150000000000000100 ) ) ; +#1611 = ORIENTED_EDGE ( 'NONE', *, *, #2513, .F. ) ; +#1612 = ORIENTED_EDGE ( 'NONE', *, *, #392, .T. ) ; +#1613 = ORIENTED_EDGE ( 'NONE', *, *, #178, .F. ) ; +#1614 = ORIENTED_EDGE ( 'NONE', *, *, #1938, .F. ) ; +#1615 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, -0.1999999999999997600 ) ) ; +#1616 = ADVANCED_FACE ( 'NONE', ( #1194 ), #2957, .F. ) ; +#1617 = ORIENTED_EDGE ( 'NONE', *, *, #2091, .F. ) ; +#1618 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1619 = ORIENTED_EDGE ( 'NONE', *, *, #877, .T. ) ; +#1620 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1621 = EDGE_CURVE ( 'NONE', #870, #1833, #2761, .T. ) ; +#1622 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1623 = DIRECTION ( 'NONE', ( -0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#1624 = VERTEX_POINT ( 'NONE', #3183 ) ; +#1625 = CARTESIAN_POINT ( 'NONE', ( 0.7999999999999999300, 1.037500000000000100, -1.449999999999999700 ) ) ; +#1626 = FACE_OUTER_BOUND ( 'NONE', #1564, .T. ) ; +#1627 = ORIENTED_EDGE ( 'NONE', *, *, #2820, .F. ) ; +#1628 = DIRECTION ( 'NONE', ( 0.1710878697460358500, 0.9702875252478138100, -0.1710878697460358800 ) ) ; +#1629 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293221800, 0.8401167978121472100, 1.150000000000000100 ) ) ; +#1630 = FACE_OUTER_BOUND ( 'NONE', #2034, .T. ) ; +#1631 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8875000000000000700, 0.7500000000000002200 ) ) ; +#1632 = LINE ( 'NONE', #1673, #1120 ) ; +#1633 = AXIS2_PLACEMENT_3D ( 'NONE', #1083, #585, #2805 ) ; +#1634 = EDGE_LOOP ( 'NONE', ( #1619, #1296, #1921, #3131, #3084, #245, #41, #2849, #1984, #2732, #93, #818 ) ) ; +#1635 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293221800, 0.8401167978121472100, -0.7499999999999997800 ) ) ; +#1636 = FACE_OUTER_BOUND ( 'NONE', #213, .T. ) ; +#1637 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133569600, -0.1999999999999997600 ) ) ; +#1638 = CLOSED_SHELL ( 'NONE', ( #1838, #219, #1215, #2307 ) ) ; +#1639 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293221800, 0.8401167978121472100, 1.150000000000000100 ) ) ; +#1640 = VECTOR ( 'NONE', #1690, 1000.000000000000100 ) ; +#1641 = DIRECTION ( 'NONE', ( -0.1710878697460358500, 0.9702875252478138100, -0.1710878697460358800 ) ) ; +#1642 = ORIENTED_EDGE ( 'NONE', *, *, #1200, .F. ) ; +#1643 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1644 = SURFACE_STYLE_FILL_AREA ( #1873 ) ; +#1645 = EDGE_CURVE ( 'NONE', #2894, #2951, #898, .T. ) ; +#1646 = EDGE_CURVE ( 'NONE', #1833, #2500, #3026, .T. ) ; +#1647 = ORIENTED_EDGE ( 'NONE', *, *, #1203, .T. ) ; +#1648 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1649 = FACE_OUTER_BOUND ( 'NONE', #1914, .T. ) ; +#1650 = ORIENTED_EDGE ( 'NONE', *, *, #2301, .T. ) ; +#1651 = EDGE_CURVE ( 'NONE', #1765, #1206, #1081, .T. ) ; +#1652 = ORIENTED_EDGE ( 'NONE', *, *, #1786, .T. ) ; +#1653 = ORIENTED_EDGE ( 'NONE', *, *, #1711, .F. ) ; +#1654 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#1655 = VERTEX_POINT ( 'NONE', #1207 ) ; +#1656 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1657 = ORIENTED_EDGE ( 'NONE', *, *, #130, .T. ) ; +#1658 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1659 = EDGE_LOOP ( 'NONE', ( #2538, #914, #948, #2825 ) ) ; +#1660 = VECTOR ( 'NONE', #233, 1000.000000000000000 ) ; +#1661 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2796 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #238, #1944, #2156 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1662 = EDGE_CURVE ( 'NONE', #2616, #2818, #1440, .T. ) ; +#1663 = LINE ( 'NONE', #2590, #288 ) ; +#1664 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1665 = AXIS2_PLACEMENT_3D ( 'NONE', #2381, #418, #180 ) ; +#1666 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1667 = EDGE_CURVE ( 'NONE', #2895, #2822, #2400, .T. ) ; +#1668 = FACE_OUTER_BOUND ( 'NONE', #2929, .T. ) ; +#1669 = PLANE ( 'NONE', #1195 ) ; +#1670 = LINE ( 'NONE', #720, #2439 ) ; +#1671 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1672 = ORIENTED_EDGE ( 'NONE', *, *, #2481, .F. ) ; +#1673 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, 0.2000000000000002100 ) ) ; +#1674 = AXIS2_PLACEMENT_3D ( 'NONE', #3058, #872, #1213 ) ; +#1675 = LINE ( 'NONE', #724, #1445 ) ; +#1676 = SURFACE_STYLE_USAGE ( .BOTH. , #3155 ) ; +#1677 = AXIS2_PLACEMENT_3D ( 'NONE', #1654, #1389, #696 ) ; +#1678 = ADVANCED_FACE ( 'NONE', ( #2988 ), #2688, .F. ) ; +#1679 = ORIENTED_EDGE ( 'NONE', *, *, #1542, .T. ) ; +#1680 = LINE ( 'NONE', #2558, #568 ) ; +#1681 = DIRECTION ( 'NONE', ( -0.9986295347545739400, -0.05233595624294376500, 0.0000000000000000000 ) ) ; +#1682 = EDGE_CURVE ( 'NONE', #3167, #822, #2912, .T. ) ; +#1683 = ORIENTED_EDGE ( 'NONE', *, *, #2870, .F. ) ; +#1684 = DIRECTION ( 'NONE', ( -0.9986295347545739400, 0.05233595624294376500, 0.0000000000000000000 ) ) ; +#1685 = SURFACE_STYLE_USAGE ( .BOTH. , #1201 ) ; +#1686 = ORIENTED_EDGE ( 'NONE', *, *, #2834, .F. ) ; +#1687 = ORIENTED_EDGE ( 'NONE', *, *, #3106, .F. ) ; +#1688 = ORIENTED_EDGE ( 'NONE', *, *, #2344, .F. ) ; +#1689 = VERTEX_POINT ( 'NONE', #971 ) ; +#1690 = DIRECTION ( 'NONE', ( 0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#1691 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 1.037500000000000100, 0.7500000000000002200 ) ) ; +#1692 = EDGE_LOOP ( 'NONE', ( #1522, #879, #203, #1657, #700, #1063, #2667, #2660, #299, #2509, #3056, #212 ) ) ; +#1693 = ADVANCED_FACE ( 'NONE', ( #932 ), #145, .T. ) ; +#1694 = CARTESIAN_POINT ( 'NONE', ( -1.092385959375934000, 0.1799478263304782100, -1.149999999999999700 ) ) ; +#1695 = EDGE_LOOP ( 'NONE', ( #2024, #240, #489, #1497 ) ) ; +#1696 = LINE ( 'NONE', #4, #1963 ) ; +#1697 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1698 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1699 = LINE ( 'NONE', #2429, #1188 ) ; +#1700 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293221800, 0.8401167978121472100, 0.2000000000000002100 ) ) ; +#1701 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, -0.1999999999999997600 ) ) ; +#1702 = AXIS2_PLACEMENT_3D ( 'NONE', #2937, #968, #737 ) ; +#1703 = LINE ( 'NONE', #246, #1153 ) ; +#1704 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1705 = EDGE_CURVE ( 'NONE', #573, #579, #2520, .T. ) ; +#1706 = VECTOR ( 'NONE', #960, 1000.000000000000100 ) ; +#1707 = EDGE_CURVE ( 'NONE', #2658, #956, #1670, .T. ) ; +#1708 = DIRECTION ( 'NONE', ( -0.9975640502598243100, 0.06975647374412513600, 0.0000000000000000000 ) ) ; +#1709 = FACE_OUTER_BOUND ( 'NONE', #1894, .T. ) ; +#1710 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1711 = EDGE_CURVE ( 'NONE', #2498, #1772, #559, .T. ) ; +#1712 = ADVANCED_FACE ( 'NONE', ( #3115 ), #1746, .T. ) ; +#1713 = ORIENTED_EDGE ( 'NONE', *, *, #2036, .T. ) ; +#1714 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1715 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, -0.7499999999999997800 ) ) ; +#1716 = CYLINDRICAL_SURFACE ( 'NONE', #1899, 0.1599999999999999800 ) ; +#1717 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1718 = EDGE_CURVE ( 'NONE', #2651, #2346, #1514, .T. ) ; +#1719 = LINE ( 'NONE', #845, #414 ) ; +#1720 = ORIENTED_EDGE ( 'NONE', *, *, #2810, .F. ) ; +#1721 = ORIENTED_EDGE ( 'NONE', *, *, #725, .F. ) ; +#1722 = CYLINDRICAL_SURFACE ( 'NONE', #3098, 0.1599999999999999800 ) ; +#1723 = EDGE_CURVE ( 'NONE', #389, #1021, #2172, .T. ) ; +#1724 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133569600, 1.150000000000000100 ) ) ; +#1725 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1726 = ORIENTED_EDGE ( 'NONE', *, *, #994, .T. ) ; +#1727 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1728 = AXIS2_PLACEMENT_3D ( 'NONE', #2329, #1358, #2032 ) ; +#1729 = ORIENTED_EDGE ( 'NONE', *, *, #881, .F. ) ; +#1730 = ADVANCED_FACE ( 'NONE', ( #3149 ), #983, .F. ) ; +#1731 = ORIENTED_EDGE ( 'NONE', *, *, #8, .F. ) ; +#1732 = ORIENTED_EDGE ( 'NONE', *, *, #2983, .F. ) ; +#1733 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, 0.2000000000000002100 ) ) ; +#1734 = VERTEX_POINT ( 'NONE', #1989 ) ; +#1735 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, -1.149999999999999700 ) ) ; +#1736 = PLANE ( 'NONE', #2832 ) ; +#1737 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1738 = ORIENTED_EDGE ( 'NONE', *, *, #1865, .F. ) ; +#1739 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1740 = CIRCLE ( 'NONE', #999, 0.04999999999999991300 ) ; +#1741 = AXIS2_PLACEMENT_3D ( 'NONE', #2311, #1579, #1306 ) ; +#1742 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 1.037500000000000100, -0.1999999999999997600 ) ) ; +#1743 = ADVANCED_FACE ( 'NONE', ( #1155 ), #2128, .F. ) ; +#1744 = LINE ( 'NONE', #2522, #1895 ) ; +#1745 = CARTESIAN_POINT ( 'NONE', ( 1.092385959375934000, 0.1799478263304782100, 1.150000000000000100 ) ) ; +#1746 = CYLINDRICAL_SURFACE ( 'NONE', #1012, 0.1999999999999998700 ) ; +#1747 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 1.150000000000000100 ) ) ; +#1748 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1749 = FACE_OUTER_BOUND ( 'NONE', #1695, .T. ) ; +#1750 = VERTEX_POINT ( 'NONE', #2013 ) ; +#1751 = ORIENTED_EDGE ( 'NONE', *, *, #2036, .F. ) ; +#1752 = VECTOR ( 'NONE', #562, 1000.000000000000000 ) ; +#1753 = DIRECTION ( 'NONE', ( -0.9986295347545739400, 0.05233595624294376500, 0.0000000000000000000 ) ) ; +#1754 = ORIENTED_EDGE ( 'NONE', *, *, #2430, .F. ) ; +#1755 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133572400, -0.7499999999999997800 ) ) ; +#1756 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1757 = VERTEX_POINT ( 'NONE', #2031 ) ; +#1758 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1759 = EDGE_CURVE ( 'NONE', #56, #416, #1896, .T. ) ; +#1760 = CYLINDRICAL_SURFACE ( 'NONE', #985, 0.01000000000000002600 ) ; +#1761 = ORIENTED_EDGE ( 'NONE', *, *, #2301, .F. ) ; +#1762 = VERTEX_POINT ( 'NONE', #2766 ) ; +#1763 = ORIENTED_EDGE ( 'NONE', *, *, #2995, .F. ) ; +#1764 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, 0.7500000000000002200 ) ) ; +#1765 = VERTEX_POINT ( 'NONE', #557 ) ; +#1766 = EDGE_LOOP ( 'NONE', ( #1754, #1145, #837, #1374 ) ) ; +#1767 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.1496346075389737300, -0.7499999999999997800 ) ) ; +#1768 = EDGE_CURVE ( 'NONE', #1535, #2115, #633, .T. ) ; +#1769 = ORIENTED_EDGE ( 'NONE', *, *, #2719, .F. ) ; +#1770 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1771 = AXIS2_PLACEMENT_3D ( 'NONE', #1893, #1398, #1671 ) ; +#1772 = VERTEX_POINT ( 'NONE', #2273 ) ; +#1773 = EDGE_CURVE ( 'NONE', #1299, #870, #2399, .T. ) ; +#1774 = ORIENTED_EDGE ( 'NONE', *, *, #26, .F. ) ; +#1775 = DIRECTION ( 'NONE', ( -0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#1776 = PLANE ( 'NONE', #1862 ) ; +#1777 = SURFACE_STYLE_USAGE ( .BOTH. , #3012 ) ; +#1778 = LINE ( 'NONE', #916, #741 ) ; +#1779 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1780 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293221800, 0.8401167978121472100, -0.7499999999999997800 ) ) ; +#1781 = DIRECTION ( 'NONE', ( 0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#1782 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, 0.2000000000000002100 ) ) ; +#1783 = LINE ( 'NONE', #2726, #1111 ) ; +#1784 = PLANE ( 'NONE', #2362 ) ; +#1785 = FACE_OUTER_BOUND ( 'NONE', #2574, .T. ) ; +#1786 = EDGE_CURVE ( 'NONE', #2933, #1127, #2051, .T. ) ; +#1787 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, 0.2000000000000002100 ) ) ; +#1788 = ORIENTED_EDGE ( 'NONE', *, *, #1217, .T. ) ; +#1789 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8875000000000000700, 1.150000000000000100 ) ) ; +#1790 = LINE ( 'NONE', #227, #2725 ) ; +#1791 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#1792 = PRESENTATION_STYLE_ASSIGNMENT (( #1030 ) ) ; +#1793 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1794 = LINE ( 'NONE', #2972, #1948 ) ; +#1795 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1796 = ORIENTED_EDGE ( 'NONE', *, *, #2261, .F. ) ; +#1797 = CARTESIAN_POINT ( 'NONE', ( -0.7272651204577579300, 1.450000000000000000, -1.449999999999999700 ) ) ; +#1798 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1799 = EDGE_LOOP ( 'NONE', ( #2974, #2698, #2186, #2110 ) ) ; +#1800 = STYLED_ITEM ( 'NONE', ( #1792 ), #912 ) ; +#1801 = VERTEX_POINT ( 'NONE', #1036 ) ; +#1802 = VERTEX_POINT ( 'NONE', #758 ) ; +#1803 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1804 = ORIENTED_EDGE ( 'NONE', *, *, #1480, .T. ) ; +#1805 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 0.7500000000000002200 ) ) ; +#1806 = ORIENTED_EDGE ( 'NONE', *, *, #1646, .F. ) ; +#1807 = ADVANCED_FACE ( 'NONE', ( #2170 ), #2600, .T. ) ; +#1808 = EDGE_CURVE ( 'NONE', #1141, #1456, #1470, .T. ) ; +#1809 = EDGE_CURVE ( 'NONE', #81, #241, #441, .T. ) ; +#1810 = EDGE_LOOP ( 'NONE', ( #1575, #2646, #1875, #2846 ) ) ; +#1811 = ORIENTED_EDGE ( 'NONE', *, *, #2765, .T. ) ; +#1812 = EDGE_CURVE ( 'NONE', #3136, #319, #27, .T. ) ; +#1813 = LINE ( 'NONE', #87, #398 ) ; +#1814 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, 0.7500000000000002200 ) ) ; +#1815 = AXIS2_PLACEMENT_3D ( 'NONE', #1118, #2120, #365 ) ; +#1816 = VECTOR ( 'NONE', #2459, 1000.000000000000000 ) ; +#1817 = DIRECTION ( 'NONE', ( 0.9975640502598243100, 0.06975647374412523300, -0.0000000000000000000 ) ) ; +#1818 = ADVANCED_FACE ( 'NONE', ( #1668 ), #2241, .F. ) ; +#1819 = LINE ( 'NONE', #2155, #2874 ) ; +#1820 = AXIS2_PLACEMENT_3D ( 'NONE', #1124, #1878, #684 ) ; +#1821 = ORIENTED_EDGE ( 'NONE', *, *, #107, .T. ) ; +#1822 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.349999999999999900, -1.049999999999999800 ) ) ; +#1823 = EDGE_CURVE ( 'NONE', #514, #1757, #1511, .T. ) ; +#1824 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1825 = FACE_OUTER_BOUND ( 'NONE', #1840, .T. ) ; +#1826 = PLANE ( 'NONE', #1180 ) ; +#1827 = AXIS2_PLACEMENT_3D ( 'NONE', #694, #2152, #189 ) ; +#1828 = VECTOR ( 'NONE', #1468, 999.9999999999998900 ) ; +#1829 = FILL_AREA_STYLE_COLOUR ( '', #1371 ) ; +#1830 = EDGE_CURVE ( 'NONE', #913, #980, #1435, .T. ) ; +#1831 = VERTEX_POINT ( 'NONE', #2739 ) ; +#1832 = CYLINDRICAL_SURFACE ( 'NONE', #1300, 0.1599999999999999800 ) ; +#1833 = VERTEX_POINT ( 'NONE', #62 ) ; +#1834 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1835 = VECTOR ( 'NONE', #405, 1000.000000000000000 ) ; +#1836 = EDGE_LOOP ( 'NONE', ( #1488, #3165, #3044, #2135 ) ) ; +#1837 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1838 = ADVANCED_FACE ( 'NONE', ( #2012 ), #2721, .T. ) ; +#1839 = ORIENTED_EDGE ( 'NONE', *, *, #3037, .T. ) ; +#1840 = EDGE_LOOP ( 'NONE', ( #963, #1331, #2713, #2747 ) ) ; +#1841 = EDGE_LOOP ( 'NONE', ( #2376, #273 ) ) ; +#1842 = AXIS2_PLACEMENT_3D ( 'NONE', #780, #314, #1748 ) ; +#1843 = VERTEX_POINT ( 'NONE', #580 ) ; +#1844 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, 1.150000000000000100 ) ) ; +#1845 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1846 = EDGE_CURVE ( 'NONE', #279, #984, #1395, .T. ) ; +#1847 = ORIENTED_EDGE ( 'NONE', *, *, #815, .F. ) ; +#1848 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 1.150000000000000100 ) ) ; +#1849 = ORIENTED_EDGE ( 'NONE', *, *, #1600, .T. ) ; +#1850 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, -0.1999999999999997600 ) ) ; +#1851 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1852 = CIRCLE ( 'NONE', #1827, 0.1599999999999999800 ) ; +#1853 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1854 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133569600, -0.1999999999999997600 ) ) ; +#1855 = ADVANCED_FACE ( 'NONE', ( #1005 ), #803, .F. ) ; +#1856 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1857 = VECTOR ( 'NONE', #358, 1000.000000000000100 ) ; +#1858 = LINE ( 'NONE', #2360, #2324 ) ; +#1859 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, -0.1999999999999997600 ) ) ; +#1860 = FILL_AREA_STYLE ('',( #2100 ) ) ; +#1861 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1862 = AXIS2_PLACEMENT_3D ( 'NONE', #1298, #3050, #1539 ) ; +#1863 = FACE_OUTER_BOUND ( 'NONE', #513, .T. ) ; +#1864 = DIRECTION ( 'NONE', ( 0.06975647374412528900, -0.9975640502598242000, -0.0000000000000000000 ) ) ; +#1865 = EDGE_CURVE ( 'NONE', #2196, #1181, #783, .T. ) ; +#1866 = CIRCLE ( 'NONE', #101, 0.1000000000000000500 ) ; +#1867 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.9848077530122080200, -0.1736481776669307200 ) ) ; +#1868 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1869 = EDGE_LOOP ( 'NONE', ( #1329, #2312, #3169, #2896 ) ) ; +#1870 = LINE ( 'NONE', #1161, #1405 ) ; +#1871 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133572400, 0.2000000000000002100 ) ) ; +#1872 = EDGE_CURVE ( 'NONE', #2146, #373, #220, .T. ) ; +#1873 = FILL_AREA_STYLE ('',( #1119 ) ) ; +#1874 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, -0.1999999999999997600 ) ) ; +#1875 = ORIENTED_EDGE ( 'NONE', *, *, #1413, .F. ) ; +#1876 = DIRECTION ( 'NONE', ( -1.880642008201783800E-015, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1877 = ORIENTED_EDGE ( 'NONE', *, *, #1931, .T. ) ; +#1878 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1879 = VERTEX_POINT ( 'NONE', #2539 ) ; +#1880 = EDGE_LOOP ( 'NONE', ( #2471, #2928, #424, #3159 ) ) ; +#1881 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, 0.2000000000000002100 ) ) ; +#1882 = EDGE_LOOP ( 'NONE', ( #1788, #531, #1494, #2302 ) ) ; +#1883 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, -0.7499999999999997800 ) ) ; +#1884 = EDGE_LOOP ( 'NONE', ( #1377, #1951, #1024, #2753 ) ) ; +#1885 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1886 = EDGE_CURVE ( 'NONE', #1027, #279, #747, .T. ) ; +#1887 = DIRECTION ( 'NONE', ( 0.1736481776669307200, 0.9848077530122080200, 0.0000000000000000000 ) ) ; +#1888 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.1496346075389737300, -0.1999999999999997600 ) ) ; +#1889 = LINE ( 'NONE', #1791, #2316 ) ; +#1890 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 1.449999999999999300 ) ) ; +#1891 = LINE ( 'NONE', #1615, #2595 ) ; +#1892 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.450000000000000000, -1.049999999999999800 ) ) ; +#1893 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.450000000000000000, -1.149999999999999700 ) ) ; +#1894 = EDGE_LOOP ( 'NONE', ( #1448, #1335, #2860, #251 ) ) ; +#1895 = VECTOR ( 'NONE', #2052, 1000.000000000000000 ) ; +#1896 = LINE ( 'NONE', #1025, #1193 ) ; +#1897 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1898 = VECTOR ( 'NONE', #1897, 1000.000000000000000 ) ; +#1899 = AXIS2_PLACEMENT_3D ( 'NONE', #1295, #3008, #1261 ) ; +#1900 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1901 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1902 = DIRECTION ( 'NONE', ( -0.9986295347545739400, 0.05233595624294376500, 0.0000000000000000000 ) ) ; +#1903 = LINE ( 'NONE', #1168, #2058 ) ; +#1904 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, 0.2000000000000002100 ) ) ; +#1905 = AXIS2_PLACEMENT_3D ( 'NONE', #940, #1175, #2917 ) ; +#1906 = ORIENTED_EDGE ( 'NONE', *, *, #1923, .T. ) ; +#1907 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, -0.7499999999999997800 ) ) ; +#1908 = VECTOR ( 'NONE', #2769, 1000.000000000000000 ) ; +#1909 = EDGE_CURVE ( 'NONE', #470, #2332, #2637, .T. ) ; +#1910 = VERTEX_POINT ( 'NONE', #1553 ) ; +#1911 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1912 = ORIENTED_EDGE ( 'NONE', *, *, #72, .T. ) ; +#1913 = ORIENTED_EDGE ( 'NONE', *, *, #297, .F. ) ; +#1914 = EDGE_LOOP ( 'NONE', ( #614, #142, #920, #3057 ) ) ; +#1915 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1916 = ORIENTED_EDGE ( 'NONE', *, *, #2944, .F. ) ; +#1917 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 2.710505431213761100E-016 ) ) ; +#1918 = DIRECTION ( 'NONE', ( -3.738628180984498900E-017, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1919 = ORIENTED_EDGE ( 'NONE', *, *, #1198, .T. ) ; +#1920 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, -0.7499999999999997800 ) ) ; +#1921 = ORIENTED_EDGE ( 'NONE', *, *, #2727, .T. ) ; +#1922 = PLANE ( 'NONE', #2598 ) ; +#1923 = EDGE_CURVE ( 'NONE', #1266, #2921, #2795, .T. ) ; +#1924 = ORIENTED_EDGE ( 'NONE', *, *, #2719, .T. ) ; +#1925 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, -1.149999999999999700 ) ) ; +#1926 = EDGE_LOOP ( 'NONE', ( #660, #2535, #88, #3089 ) ) ; +#1927 = FACE_OUTER_BOUND ( 'NONE', #1176, .T. ) ; +#1928 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.349999999999999900, -1.049999999999999800 ) ) ; +#1929 = AXIS2_PLACEMENT_3D ( 'NONE', #2438, #1411, #2652 ) ; +#1930 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1931 = EDGE_CURVE ( 'NONE', #514, #1336, #1588, .T. ) ; +#1932 = EDGE_CURVE ( 'NONE', #2951, #1100, #2557, .T. ) ; +#1933 = CIRCLE ( 'NONE', #917, 0.01000000000000002600 ) ; +#1934 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8875000000000000700, -1.149999999999999700 ) ) ; +#1935 = AXIS2_PLACEMENT_3D ( 'NONE', #2918, #483, #3171 ) ; +#1936 = VECTOR ( 'NONE', #2432, 1000.000000000000000 ) ; +#1937 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, -0.7499999999999997800 ) ) ; +#1938 = EDGE_CURVE ( 'NONE', #2190, #1801, #1315, .T. ) ; +#1939 = VECTOR ( 'NONE', #2771, 999.9999999999998900 ) ; +#1940 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1941 = LINE ( 'NONE', #2837, #2839 ) ; +#1942 = DIRECTION ( 'NONE', ( -0.06975647374412528900, -0.9975640502598242000, 0.0000000000000000000 ) ) ; +#1943 = EDGE_LOOP ( 'NONE', ( #651, #3087, #504, #2964 ) ) ; +#1944 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1945 = EDGE_LOOP ( 'NONE', ( #2531, #3004, #790, #2257, #1422, #2701, #457, #1993, #281, #121, #19, #1997 ) ) ; +#1946 = VECTOR ( 'NONE', #569, 1000.000000000000000 ) ; +#1947 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, -0.7499999999999997800 ) ) ; +#1948 = VECTOR ( 'NONE', #304, 1000.000000000000100 ) ; +#1949 = EDGE_CURVE ( 'NONE', #501, #2605, #3071, .T. ) ; +#1950 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.880642008201783800E-015, -0.0000000000000000000 ) ) ; +#1951 = ORIENTED_EDGE ( 'NONE', *, *, #1707, .F. ) ; +#1952 = LINE ( 'NONE', #1637, #944 ) ; +#1953 = ADVANCED_FACE ( 'NONE', ( #930 ), #1322, .F. ) ; +#1954 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1955 = ORIENTED_EDGE ( 'NONE', *, *, #2041, .T. ) ; +#1956 = LINE ( 'NONE', #632, #2293 ) ; +#1957 = EDGE_LOOP ( 'NONE', ( #768, #2898, #1523, #2996 ) ) ; +#1958 = VERTEX_POINT ( 'NONE', #2057 ) ; +#1959 = EDGE_LOOP ( 'NONE', ( #594, #2776, #736, #582 ) ) ; +#1960 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1961 = ORIENTED_EDGE ( 'NONE', *, *, #1052, .T. ) ; +#1962 = AXIS2_PLACEMENT_3D ( 'NONE', #2563, #2587, #1834 ) ; +#1963 = VECTOR ( 'NONE', #2218, 1000.000000000000000 ) ; +#1964 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, -1.149999999999999700 ) ) ; +#1965 = ADVANCED_FACE ( 'NONE', ( #2683 ), #2067, .F. ) ; +#1966 = VECTOR ( 'NONE', #2131, 1000.000000000000000 ) ; +#1967 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1968 = FACE_OUTER_BOUND ( 'NONE', #981, .T. ) ; +#1969 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, 1.150000000000000100 ) ) ; +#1970 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1971 = EDGE_CURVE ( 'NONE', #1772, #501, #2086, .T. ) ; +#1972 = EDGE_CURVE ( 'NONE', #448, #2655, #2986, .T. ) ; +#1973 = LINE ( 'NONE', #328, #2835 ) ; +#1974 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1975 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1283, 'distance_accuracy_value', 'NONE'); +#1976 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1977 = FACE_OUTER_BOUND ( 'NONE', #1, .T. ) ; +#1978 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1979 = AXIS2_PLACEMENT_3D ( 'NONE', #1994, #2033, #55 ) ; +#1980 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, -0.7499999999999997800 ) ) ; +#1981 = ADVANCED_FACE ( 'NONE', ( #141 ), #1784, .F. ) ; +#1982 = ORIENTED_EDGE ( 'NONE', *, *, #1135, .F. ) ; +#1983 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, 1.150000000000000100 ) ) ; +#1984 = ORIENTED_EDGE ( 'NONE', *, *, #351, .T. ) ; +#1985 = VERTEX_POINT ( 'NONE', #1028 ) ; +#1986 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1987 = EDGE_CURVE ( 'NONE', #3041, #2502, #3112, .T. ) ; +#1988 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1989 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 0.7500000000000002200 ) ) ; +#1990 = ORIENTED_EDGE ( 'NONE', *, *, #3146, .T. ) ; +#1991 = STYLED_ITEM ( 'NONE', ( #592 ), #2704 ) ; +#1992 = EDGE_LOOP ( 'NONE', ( #1483, #734, #2452, #1955 ) ) ; +#1993 = ORIENTED_EDGE ( 'NONE', *, *, #1390, .T. ) ; +#1994 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, -0.7499999999999997800 ) ) ; +#1995 = ORIENTED_EDGE ( 'NONE', *, *, #1198, .F. ) ; +#1996 = EDGE_CURVE ( 'NONE', #2811, #2970, #1973, .T. ) ; +#1997 = ORIENTED_EDGE ( 'NONE', *, *, #2430, .T. ) ; +#1998 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1999 = ORIENTED_EDGE ( 'NONE', *, *, #2114, .T. ) ; +#2000 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2001 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2002 = ORIENTED_EDGE ( 'NONE', *, *, #331, .F. ) ; +#2003 = LINE ( 'NONE', #1747, #2827 ) ; +#2004 = PLANE ( 'NONE', #1979 ) ; +#2005 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1975 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1283, #1536, #80 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2006 = STYLED_ITEM ( 'NONE', ( #2285 ), #1240 ) ; +#2007 = VECTOR ( 'NONE', #1603, 1000.000000000000000 ) ; +#2008 = FILL_AREA_STYLE ('',( #1042 ) ) ; +#2009 = EDGE_CURVE ( 'NONE', #2914, #2065, #1355, .T. ) ; +#2010 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#2011 = CARTESIAN_POINT ( 'NONE', ( -0.9425915291627476900, 0.1720974328940367000, -0.1999999999999997600 ) ) ; +#2012 = FACE_OUTER_BOUND ( 'NONE', #357, .T. ) ; +#2013 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, -1.149999999999999700 ) ) ; +#2014 = LINE ( 'NONE', #400, #712 ) ; +#2015 = LINE ( 'NONE', #2183, #1048 ) ; +#2016 = CARTESIAN_POINT ( 'NONE', ( 0.9425915291627476900, 0.1720974328940367000, -0.1999999999999997600 ) ) ; +#2017 = LINE ( 'NONE', #307, #2919 ) ; +#2018 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2019 = VECTOR ( 'NONE', #1079, 1000.000000000000100 ) ; +#2020 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2021 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, 0.2000000000000002100 ) ) ; +#2022 = ORIENTED_EDGE ( 'NONE', *, *, #1830, .F. ) ; +#2023 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, -0.7499999999999997800 ) ) ; +#2024 = ORIENTED_EDGE ( 'NONE', *, *, #3153, .T. ) ; +#2025 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, 1.150000000000000100 ) ) ; +#2026 = ORIENTED_EDGE ( 'NONE', *, *, #2092, .F. ) ; +#2027 = AXIS2_PLACEMENT_3D ( 'NONE', #1272, #105, #813 ) ; +#2028 = EDGE_LOOP ( 'NONE', ( #2858, #3140, #1811, #2572 ) ) ; +#2029 = EDGE_CURVE ( 'NONE', #2230, #1573, #597, .T. ) ; +#2030 = ORIENTED_EDGE ( 'NONE', *, *, #26, .T. ) ; +#2031 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, -0.1999999999999997600 ) ) ; +#2032 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2033 = DIRECTION ( 'NONE', ( 0.06975647374412513600, -0.9975640502598243100, 0.0000000000000000000 ) ) ; +#2034 = EDGE_LOOP ( 'NONE', ( #1185, #2494, #225, #1065 ) ) ; +#2035 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, -0.7499999999999997800 ) ) ; +#2036 = EDGE_CURVE ( 'NONE', #1535, #984, #2518, .T. ) ; +#2037 = ORIENTED_EDGE ( 'NONE', *, *, #820, .F. ) ; +#2038 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2039 = CYLINDRICAL_SURFACE ( 'NONE', #2492, 0.1999999999999998700 ) ; +#2040 = PLANE ( 'NONE', #1510 ) ; +#2041 = EDGE_CURVE ( 'NONE', #3000, #831, #1078, .T. ) ; +#2042 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2043 = CIRCLE ( 'NONE', #1665, 0.1999999999999999800 ) ; +#2044 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2045 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2046 = VECTOR ( 'NONE', #2289, 1000.000000000000000 ) ; +#2047 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2048 = ORIENTED_EDGE ( 'NONE', *, *, #2200, .F. ) ; +#2049 = EDGE_CURVE ( 'NONE', #2423, #909, #2358, .T. ) ; +#2050 = FILL_AREA_STYLE ('',( #2542 ) ) ; +#2051 = LINE ( 'NONE', #2506, #2907 ) ; +#2052 = DIRECTION ( 'NONE', ( -3.738628180984499500E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2053 = FACE_OUTER_BOUND ( 'NONE', #1062, .T. ) ; +#2054 = EDGE_LOOP ( 'NONE', ( #2961, #57, #726, #2174 ) ) ; +#2055 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2056 = LINE ( 'NONE', #1848, #447 ) ; +#2057 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 1.449999999999999700 ) ) ; +#2058 = VECTOR ( 'NONE', #2160, 1000.000000000000000 ) ; +#2059 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293220700, 0.8401167978121472100, -0.7499999999999997800 ) ) ; +#2060 = ORIENTED_EDGE ( 'NONE', *, *, #2446, .T. ) ; +#2061 = LINE ( 'NONE', #2635, #977 ) ; +#2062 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2063 = ADVANCED_FACE ( 'NONE', ( #1785 ), #2188, .F. ) ; +#2064 = ORIENTED_EDGE ( 'NONE', *, *, #2472, .T. ) ; +#2065 = VERTEX_POINT ( 'NONE', #449 ) ; +#2066 = ORIENTED_EDGE ( 'NONE', *, *, #952, .T. ) ; +#2067 = PLANE ( 'NONE', #2806 ) ; +#2068 = EDGE_LOOP ( 'NONE', ( #723, #1729, #308, #2568 ) ) ; +#2069 = ORIENTED_EDGE ( 'NONE', *, *, #2829, .F. ) ; +#2070 = ORIENTED_EDGE ( 'NONE', *, *, #2848, .T. ) ; +#2071 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, 0.2000000000000002100 ) ) ; +#2072 = AXIS2_PLACEMENT_3D ( 'NONE', #2545, #1798, #1057 ) ; +#2073 = ORIENTED_EDGE ( 'NONE', *, *, #1949, .T. ) ; +#2074 = DIRECTION ( 'NONE', ( 0.1710878697460358500, -0.9702875252478138100, -0.1710878697460358800 ) ) ; +#2075 = EDGE_CURVE ( 'NONE', #1801, #36, #3020, .T. ) ; +#2076 = EDGE_LOOP ( 'NONE', ( #1099, #1129, #461, #1080, #1849, #2232, #193, #1877, #2299, #2976, #239, #467 ) ) ; +#2077 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.450000000000000000, -1.149999999999999700 ) ) ; +#2078 = ORIENTED_EDGE ( 'NONE', *, *, #2715, .T. ) ; +#2079 = ADVANCED_FACE ( 'NONE', ( #481 ), #1669, .T. ) ; +#2080 = VECTOR ( 'NONE', #3182, 999.9999999999998900 ) ; +#2081 = CIRCLE ( 'NONE', #3143, 0.04999999999999991300 ) ; +#2082 = EDGE_CURVE ( 'NONE', #1021, #540, #303, .T. ) ; +#2083 = PLANE ( 'NONE', #2576 ) ; +#2084 = VECTOR ( 'NONE', #2300, 1000.000000000000000 ) ; +#2085 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.1496346075389737300, 0.2000000000000002100 ) ) ; +#2086 = LINE ( 'NONE', #1293, #1234 ) ; +#2087 = DIRECTION ( 'NONE', ( 0.06975647374412513600, -0.9975640502598243100, 0.0000000000000000000 ) ) ; +#2088 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293220700, 0.8401167978121472100, 1.150000000000000100 ) ) ; +#2089 = FACE_OUTER_BOUND ( 'NONE', #2389, .T. ) ; +#2090 = DIRECTION ( 'NONE', ( -0.06975647374412528900, -0.9975640502598242000, 0.0000000000000000000 ) ) ; +#2091 = EDGE_CURVE ( 'NONE', #2115, #1879, #906, .T. ) ; +#2092 = EDGE_CURVE ( 'NONE', #1336, #393, #103, .T. ) ; +#2093 = LINE ( 'NONE', #1166, #2644 ) ; +#2094 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133569600, -0.7499999999999997800 ) ) ; +#2095 = ADVANCED_FACE ( 'NONE', ( #1094 ), #693, .F. ) ; +#2096 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #621 ), #740 ) ; +#2097 = LINE ( 'NONE', #339, #269 ) ; +#2098 = DIRECTION ( 'NONE', ( 0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#2099 = EDGE_CURVE ( 'NONE', #393, #2146, #709, .T. ) ; +#2100 = FILL_AREA_STYLE_COLOUR ( '', #342 ) ; +#2101 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, -0.7499999999999997800 ) ) ; +#2102 = LINE ( 'NONE', #2755, #1447 ) ; +#2103 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293220700, 0.8401167978121472100, 0.2000000000000002100 ) ) ; +#2104 = VERTEX_POINT ( 'NONE', #1460 ) ; +#2105 = ORIENTED_EDGE ( 'NONE', *, *, #2870, .T. ) ; +#2106 = CARTESIAN_POINT ( 'NONE', ( 0.9425915291627476900, 0.1720974328940367000, -1.149999999999999700 ) ) ; +#2107 = ORIENTED_EDGE ( 'NONE', *, *, #2472, .F. ) ; +#2108 = ORIENTED_EDGE ( 'NONE', *, *, #3049, .F. ) ; +#2109 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2110 = ORIENTED_EDGE ( 'NONE', *, *, #2829, .T. ) ; +#2111 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293221800, 0.8401167978121472100, -0.1999999999999997600 ) ) ; +#2112 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2113 = ADVANCED_FACE ( 'NONE', ( #2808 ), #296, .F. ) ; +#2114 = EDGE_CURVE ( 'NONE', #81, #1100, #1209, .T. ) ; +#2115 = VERTEX_POINT ( 'NONE', #222 ) ; +#2116 = MANIFOLD_SOLID_BREP ( 'Mirror1[1]', #679 ) ; +#2117 = VERTEX_POINT ( 'NONE', #2684 ) ; +#2118 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2119 = LINE ( 'NONE', #969, #807 ) ; +#2120 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2121 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 1.449999999999999300 ) ) ; +#2122 = LINE ( 'NONE', #2349, #590 ) ; +#2123 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 1.037500000000000100, 1.150000000000000100 ) ) ; +#2124 = VECTOR ( 'NONE', #132, 1000.000000000000100 ) ; +#2125 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, 0.2000000000000002100 ) ) ; +#2126 = AXIS2_PLACEMENT_3D ( 'NONE', #2169, #182, #1887 ) ; +#2127 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2128 = CYLINDRICAL_SURFACE ( 'NONE', #432, 0.04999999999999991300 ) ; +#2129 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2130 = VECTOR ( 'NONE', #1864, 1000.000000000000200 ) ; +#2131 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2132 = DIRECTION ( 'NONE', ( 0.06975647374412528900, 0.9975640502598242000, 0.0000000000000000000 ) ) ; +#2133 = AXIS2_PLACEMENT_3D ( 'NONE', #1576, #3042, #2560 ) ; +#2134 = LINE ( 'NONE', #2519, #1594 ) ; +#2135 = ORIENTED_EDGE ( 'NONE', *, *, #309, .T. ) ; +#2136 = EDGE_CURVE ( 'NONE', #2914, #425, #439, .T. ) ; +#2137 = VECTOR ( 'NONE', #2287, 1000.000000000000000 ) ; +#2138 = ORIENTED_EDGE ( 'NONE', *, *, #1865, .T. ) ; +#2139 = DIRECTION ( 'NONE', ( -0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#2140 = ORIENTED_EDGE ( 'NONE', *, *, #1033, .F. ) ; +#2141 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, 0.2000000000000002100 ) ) ; +#2142 = ORIENTED_EDGE ( 'NONE', *, *, #1378, .F. ) ; +#2143 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2144 = ORIENTED_EDGE ( 'NONE', *, *, #1931, .F. ) ; +#2145 = EDGE_CURVE ( 'NONE', #1183, #956, #290, .T. ) ; +#2146 = VERTEX_POINT ( 'NONE', #1700 ) ; +#2147 = ORIENTED_EDGE ( 'NONE', *, *, #2091, .T. ) ; +#2148 = FILL_AREA_STYLE_COLOUR ( '', #891 ) ; +#2149 = EDGE_LOOP ( 'NONE', ( #695, #2069, #2228, #571 ) ) ; +#2150 = ORIENTED_EDGE ( 'NONE', *, *, #136, .F. ) ; +#2151 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2152 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2153 = AXIS2_PLACEMENT_3D ( 'NONE', #2385, #656, #390 ) ; +#2154 = ORIENTED_EDGE ( 'NONE', *, *, #2163, .F. ) ; +#2155 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293220700, 0.8401167978121472100, -1.149999999999999700 ) ) ; +#2156 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2157 = ORIENTED_EDGE ( 'NONE', *, *, #341, .F. ) ; +#2158 = ORIENTED_EDGE ( 'NONE', *, *, #228, .F. ) ; +#2159 = AXIS2_PLACEMENT_3D ( 'NONE', #2401, #2878, #2662 ) ; +#2160 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2161 = CIRCLE ( 'NONE', #1500, 0.01000000000000002600 ) ; +#2162 = CARTESIAN_POINT ( 'NONE', ( -0.9425915291627476900, 0.1720974328940367000, 0.7500000000000002200 ) ) ; +#2163 = EDGE_CURVE ( 'NONE', #2065, #797, #1703, .T. ) ; +#2164 = VECTOR ( 'NONE', #2074, 1000.000000000000100 ) ; +#2165 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2166 = DIRECTION ( 'NONE', ( -0.06975647374412524700, 0.9975640502598243100, 0.0000000000000000000 ) ) ; +#2167 = LINE ( 'NONE', #2750, #1232 ) ; +#2168 = CARTESIAN_POINT ( 'NONE', ( 1.092385959375934000, 0.1799478263304782100, 0.2000000000000002100 ) ) ; +#2169 = CARTESIAN_POINT ( 'NONE', ( 0.7999999999999999300, 0.8874999999999999600, -1.449999999999999700 ) ) ; +#2170 = FACE_OUTER_BOUND ( 'NONE', #2460, .T. ) ; +#2171 = CARTESIAN_POINT ( 'NONE', ( -0.7999999999999999300, 0.8874999999999999600, -1.449999999999999700 ) ) ; +#2172 = LINE ( 'NONE', #496, #1816 ) ; +#2173 = DIRECTION ( 'NONE', ( -0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#2174 = ORIENTED_EDGE ( 'NONE', *, *, #1651, .T. ) ; +#2175 = AXIS2_PLACEMENT_3D ( 'NONE', #431, #2393, #1978 ) ; +#2176 = VECTOR ( 'NONE', #871, 999.9999999999998900 ) ; +#2177 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2178 = EDGE_CURVE ( 'NONE', #2423, #2651, #1271, .T. ) ; +#2179 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2180 = LINE ( 'NONE', #502, #975 ) ; +#2181 = PLANE ( 'NONE', #1323 ) ; +#2182 = ORIENTED_EDGE ( 'NONE', *, *, #1718, .F. ) ; +#2183 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#2184 = VERTEX_POINT ( 'NONE', #2011 ) ; +#2185 = PLANE ( 'NONE', #295 ) ; +#2186 = ORIENTED_EDGE ( 'NONE', *, *, #2374, .F. ) ; +#2187 = ORIENTED_EDGE ( 'NONE', *, *, #2145, .F. ) ; +#2188 = PLANE ( 'NONE', #1580 ) ; +#2189 = ORIENTED_EDGE ( 'NONE', *, *, #509, .F. ) ; +#2190 = VERTEX_POINT ( 'NONE', #2737 ) ; +#2191 = DIRECTION ( 'NONE', ( 0.9975640502598242000, -0.06975647374412523300, 0.0000000000000000000 ) ) ; +#2192 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, 0.7500000000000002200 ) ) ; +#2193 = ORIENTED_EDGE ( 'NONE', *, *, #973, .F. ) ; +#2194 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, -0.7499999999999997800 ) ) ; +#2195 = ADVANCED_FACE ( 'NONE', ( #24 ), #2216, .T. ) ; +#2196 = VERTEX_POINT ( 'NONE', #993 ) ; +#2197 = LINE ( 'NONE', #1715, #2675 ) ; +#2198 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.349999999999999900, -1.049999999999999800 ) ) ; +#2199 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2200 = EDGE_CURVE ( 'NONE', #2230, #430, #3109, .T. ) ; +#2201 = EDGE_CURVE ( 'NONE', #764, #90, #552, .T. ) ; +#2202 = VECTOR ( 'NONE', #3025, 1000.000000000000000 ) ; +#2203 = PLANE ( 'NONE', #828 ) ; +#2204 = VECTOR ( 'NONE', #2173, 1000.000000000000100 ) ; +#2205 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2206 = EDGE_CURVE ( 'NONE', #3167, #578, #1783, .T. ) ; +#2207 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.1496346075389737300, 0.2000000000000002100 ) ) ; +#2208 = CIRCLE ( 'NONE', #147, 0.04999999999999991300 ) ; +#2209 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2210 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, -1.149999999999999700 ) ) ; +#2211 = EDGE_CURVE ( 'NONE', #1531, #610, #1039, .T. ) ; +#2212 = ADVANCED_FACE ( 'NONE', ( #1626 ), #668, .F. ) ; +#2213 = LINE ( 'NONE', #2404, #73 ) ; +#2214 = LINE ( 'NONE', #1304, #2328 ) ; +#2215 = LINE ( 'NONE', #658, #1482 ) ; +#2216 = PLANE ( 'NONE', #2530 ) ; +#2217 = EDGE_CURVE ( 'NONE', #2770, #2511, #2281, .T. ) ; +#2218 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2219 = EDGE_LOOP ( 'NONE', ( #1152, #472, #3051, #2783 ) ) ; +#2220 = FACE_OUTER_BOUND ( 'NONE', #166, .T. ) ; +#2221 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.450000000000000000, -1.049999999999999800 ) ) ; +#2222 = AXIS2_PLACEMENT_3D ( 'NONE', #450, #3142, #673 ) ; +#2223 = ORIENTED_EDGE ( 'NONE', *, *, #877, .F. ) ; +#2224 = LINE ( 'NONE', #2582, #611 ) ; +#2225 = EDGE_LOOP ( 'NONE', ( #2464, #612 ) ) ; +#2226 = ORIENTED_EDGE ( 'NONE', *, *, #789, .F. ) ; +#2227 = ADVANCED_FACE ( 'NONE', ( #595 ), #291, .F. ) ; +#2228 = ORIENTED_EDGE ( 'NONE', *, *, #1667, .F. ) ; +#2229 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.1496346075389737300, -0.7499999999999997800 ) ) ; +#2230 = VERTEX_POINT ( 'NONE', #1767 ) ; +#2231 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2232 = ORIENTED_EDGE ( 'NONE', *, *, #789, .T. ) ; +#2233 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, 0.2000000000000002100 ) ) ; +#2234 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, 1.150000000000000100 ) ) ; +#2235 = ORIENTED_EDGE ( 'NONE', *, *, #2666, .F. ) ; +#2236 = STYLED_ITEM ( 'NONE', ( #2570 ), #512 ) ; +#2237 = ORIENTED_EDGE ( 'NONE', *, *, #2764, .T. ) ; +#2238 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2239 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, -0.7499999999999997800 ) ) ; +#2240 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133569600, 0.2000000000000002100 ) ) ; +#2241 = PLANE ( 'NONE', #718 ) ; +#2242 = ORIENTED_EDGE ( 'NONE', *, *, #1560, .F. ) ; +#2243 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2244 = EDGE_CURVE ( 'NONE', #987, #355, #2167, .T. ) ; +#2245 = ADVANCED_FACE ( 'NONE', ( #1509 ), #928, .F. ) ; +#2246 = CIRCLE ( 'NONE', #2403, 0.1599999999999999800 ) ; +#2247 = VECTOR ( 'NONE', #3022, 1000.000000000000200 ) ; +#2248 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293221800, 0.8401167978121472100, -1.149999999999999700 ) ) ; +#2249 = CIRCLE ( 'NONE', #2175, 0.01000000000000002600 ) ; +#2250 = CARTESIAN_POINT ( 'NONE', ( 0.7999999999999999300, 1.037500000000000100, -1.449999999999999700 ) ) ; +#2251 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8875000000000000700, 0.2000000000000002100 ) ) ; +#2252 = LINE ( 'NONE', #605, #935 ) ; +#2253 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2254 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #380 ), #1362 ) ; +#2255 = PLANE ( 'NONE', #2525 ) ; +#2256 = CIRCLE ( 'NONE', #2566, 0.01000000000000002600 ) ; +#2257 = ORIENTED_EDGE ( 'NONE', *, *, #2496, .T. ) ; +#2258 = FACE_OUTER_BOUND ( 'NONE', #2336, .T. ) ; +#2259 = AXIS2_PLACEMENT_3D ( 'NONE', #2233, #267, #1463 ) ; +#2260 = ORIENTED_EDGE ( 'NONE', *, *, #410, .F. ) ; +#2261 = EDGE_CURVE ( 'NONE', #1843, #2444, #2396, .T. ) ; +#2262 = ORIENTED_EDGE ( 'NONE', *, *, #1599, .F. ) ; +#2263 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, 0.7500000000000002200 ) ) ; +#2264 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #812, .NOT_KNOWN. ) ; +#2265 = VERTEX_POINT ( 'NONE', #2990 ) ; +#2266 = ORIENTED_EDGE ( 'NONE', *, *, #2975, .F. ) ; +#2267 = EDGE_CURVE ( 'NONE', #1174, #2914, #401, .T. ) ; +#2268 = ORIENTED_EDGE ( 'NONE', *, *, #3060, .T. ) ; +#2269 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2270 = CLOSED_SHELL ( 'NONE', ( #697, #511, #2692, #1965, #2342, #2854, #491, #3086, #1429, #2484, #3174, #1353, #2454, #603, #2195, #2113, #1086 ) ) ; +#2271 = DIRECTION ( 'NONE', ( -0.9975640502598243100, -0.06975647374412515000, 0.0000000000000000000 ) ) ; +#2272 = DIRECTION ( 'NONE', ( -0.9975640502598243100, 0.06975647374412523300, 0.0000000000000000000 ) ) ; +#2273 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8875000000000000700, 0.7500000000000002200 ) ) ; +#2274 = ORIENTED_EDGE ( 'NONE', *, *, #185, .T. ) ; +#2275 = PLANE ( 'NONE', #689 ) ; +#2276 = VERTEX_POINT ( 'NONE', #527 ) ; +#2277 = FACE_OUTER_BOUND ( 'NONE', #1018, .T. ) ; +#2278 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, -1.149999999999999700 ) ) ; +#2279 = EDGE_CURVE ( 'NONE', #2292, #1535, #2246, .T. ) ; +#2280 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.1496346075389737300, -0.7499999999999997800 ) ) ; +#2281 = LINE ( 'NONE', #3001, #1313 ) ; +#2282 = CIRCLE ( 'NONE', #2828, 0.1999999999999999800 ) ; +#2283 = CARTESIAN_POINT ( 'NONE', ( 0.9425915291627476900, 0.1720974328940367000, 0.2000000000000002100 ) ) ; +#2284 = EDGE_LOOP ( 'NONE', ( #2078, #1731, #1337, #942 ) ) ; +#2285 = PRESENTATION_STYLE_ASSIGNMENT (( #1685 ) ) ; +#2286 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2287 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2288 = VECTOR ( 'NONE', #533, 1000.000000000000000 ) ; +#2289 = DIRECTION ( 'NONE', ( -3.738628180984498900E-017, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2290 = AXIS2_PLACEMENT_3D ( 'NONE', #2507, #1017, #39 ) ; +#2291 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#2292 = VERTEX_POINT ( 'NONE', #1755 ) ; +#2293 = VECTOR ( 'NONE', #2151, 1000.000000000000000 ) ; +#2294 = ORIENTED_EDGE ( 'NONE', *, *, #2365, .T. ) ; +#2295 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2296 = LINE ( 'NONE', #2863, #500 ) ; +#2297 = PLANE ( 'NONE', #3074 ) ; +#2298 = AXIS2_PLACEMENT_3D ( 'NONE', #3108, #211, #3130 ) ; +#2299 = ORIENTED_EDGE ( 'NONE', *, *, #2092, .T. ) ; +#2300 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2301 = EDGE_CURVE ( 'NONE', #846, #2500, #363, .T. ) ; +#2302 = ORIENTED_EDGE ( 'NONE', *, *, #391, .T. ) ; +#2303 = EDGE_CURVE ( 'NONE', #2655, #1369, #631, .T. ) ; +#2304 = ORIENTED_EDGE ( 'NONE', *, *, #2666, .T. ) ; +#2305 = VERTEX_POINT ( 'NONE', #1552 ) ; +#2306 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2307 = ADVANCED_FACE ( 'NONE', ( #522 ), #1776, .F. ) ; +#2308 = EDGE_LOOP ( 'NONE', ( #1173, #1569, #1301, #1919 ) ) ; +#2309 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, -0.7499999999999997800 ) ) ; +#2310 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, -0.7499999999999997800 ) ) ; +#2311 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.349999999999999900, -1.149999999999999700 ) ) ; +#2312 = ORIENTED_EDGE ( 'NONE', *, *, #517, .F. ) ; +#2313 = ORIENTED_EDGE ( 'NONE', *, *, #1846, .T. ) ; +#2314 = EDGE_CURVE ( 'NONE', #1801, #1016, #1744, .T. ) ; +#2315 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, 1.150000000000000100 ) ) ; +#2316 = VECTOR ( 'NONE', #1853, 1000.000000000000000 ) ; +#2317 = DIRECTION ( 'NONE', ( -0.06975647374412528900, -0.9975640502598242000, 0.0000000000000000000 ) ) ; +#2318 = AXIS2_PLACEMENT_3D ( 'NONE', #2103, #1359, #2859 ) ; +#2319 = VECTOR ( 'NONE', #2271, 999.9999999999998900 ) ; +#2320 = CARTESIAN_POINT ( 'NONE', ( -0.9425915291627476900, 0.1720974328940367000, -1.149999999999999700 ) ) ; +#2321 = VECTOR ( 'NONE', #2524, 1000.000000000000000 ) ; +#2322 = CARTESIAN_POINT ( 'NONE', ( 0.7999999999999999300, 0.8874999999999999600, -1.449999999999999700 ) ) ; +#2323 = AXIS2_PLACEMENT_3D ( 'NONE', #1545, #1618, #1277 ) ; +#2324 = VECTOR ( 'NONE', #862, 1000.000000000000000 ) ; +#2325 = ORIENTED_EDGE ( 'NONE', *, *, #3009, .F. ) ; +#2326 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, -0.7499999999999997800 ) ) ; +#2327 = EDGE_CURVE ( 'NONE', #385, #540, #1586, .T. ) ; +#2328 = VECTOR ( 'NONE', #360, 1000.000000000000000 ) ; +#2329 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 1.150000000000000100 ) ) ; +#2330 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -2.710505431213761100E-016 ) ) ; +#2331 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.880642008201783800E-015, 0.0000000000000000000 ) ) ; +#2332 = VERTEX_POINT ( 'NONE', #94 ) ; +#2333 = FACE_OUTER_BOUND ( 'NONE', #2054, .T. ) ; +#2334 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293221800, 0.8401167978121472100, 0.7500000000000002200 ) ) ; +#2335 = ORIENTED_EDGE ( 'NONE', *, *, #1823, .F. ) ; +#2336 = EDGE_LOOP ( 'NONE', ( #277, #620, #1720, #2268 ) ) ; +#2337 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2338 = AXIS2_PLACEMENT_3D ( 'NONE', #596, #830, #2817 ) ; +#2339 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.450000000000000000, -1.249999999999999800 ) ) ; +#2340 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2341 = ORIENTED_EDGE ( 'NONE', *, *, #1378, .T. ) ; +#2342 = ADVANCED_FACE ( 'NONE', ( #2680 ), #2565, .F. ) ; +#2343 = ORIENTED_EDGE ( 'NONE', *, *, #2178, .F. ) ; +#2344 = EDGE_CURVE ( 'NONE', #764, #2933, #1077, .T. ) ; +#2345 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2346 = VERTEX_POINT ( 'NONE', #1316 ) ; +#2347 = VERTEX_POINT ( 'NONE', #2788 ) ; +#2348 = ORIENTED_EDGE ( 'NONE', *, *, #2607, .T. ) ; +#2349 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8875000000000000700, 1.150000000000000100 ) ) ; +#2350 = ORIENTED_EDGE ( 'NONE', *, *, #456, .T. ) ; +#2351 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, -0.1999999999999997600 ) ) ; +#2352 = LINE ( 'NONE', #247, #2592 ) ; +#2353 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 0.2000000000000002100 ) ) ; +#2354 = LINE ( 'NONE', #2088, #1000 ) ; +#2355 = DIRECTION ( 'NONE', ( 1.880642008201783800E-015, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2356 = ADVANCED_FACE ( 'NONE', ( #853 ), #2777, .F. ) ; +#2357 = PLANE ( 'NONE', #119 ) ; +#2358 = LINE ( 'NONE', #2409, #1113 ) ; +#2359 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2360 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#2361 = VECTOR ( 'NONE', #5, 1000.000000000000000 ) ; +#2362 = AXIS2_PLACEMENT_3D ( 'NONE', #1566, #593, #583 ) ; +#2363 = CARTESIAN_POINT ( 'NONE', ( 1.399999999999999900, 0.1496346075389737300, 0.7500000000000002200 ) ) ; +#2364 = EDGE_CURVE ( 'NONE', #579, #765, #1434, .T. ) ; +#2365 = EDGE_CURVE ( 'NONE', #2640, #1543, #1003, .T. ) ; +#2366 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#2367 = VECTOR ( 'NONE', #289, 1000.000000000000000 ) ; +#2368 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 1.150000000000000100 ) ) ; +#2369 = EDGE_CURVE ( 'NONE', #3136, #3061, #781, .T. ) ; +#2370 = DIRECTION ( 'NONE', ( 0.06975647374412528900, -0.9975640502598242000, -0.0000000000000000000 ) ) ; +#2371 = FACE_OUTER_BOUND ( 'NONE', #2581, .T. ) ; +#2372 = ORIENTED_EDGE ( 'NONE', *, *, #2935, .T. ) ; +#2373 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 1.150000000000000100 ) ) ; +#2374 = EDGE_CURVE ( 'NONE', #2822, #2911, #139, .T. ) ; +#2375 = ORIENTED_EDGE ( 'NONE', *, *, #1312, .F. ) ; +#2376 = ORIENTED_EDGE ( 'NONE', *, *, #503, .T. ) ; +#2377 = ORIENTED_EDGE ( 'NONE', *, *, #2601, .F. ) ; +#2378 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, -0.7499999999999997800 ) ) ; +#2379 = ORIENTED_EDGE ( 'NONE', *, *, #20, .F. ) ; +#2380 = ORIENTED_EDGE ( 'NONE', *, *, #107, .F. ) ; +#2381 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, 0.7500000000000002200 ) ) ; +#2382 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2383 = EDGE_CURVE ( 'NONE', #900, #2190, #1001, .T. ) ; +#2384 = ORIENTED_EDGE ( 'NONE', *, *, #2876, .F. ) ; +#2385 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, 1.150000000000000100 ) ) ; +#2386 = ORIENTED_EDGE ( 'NONE', *, *, #2710, .F. ) ; +#2387 = ORIENTED_EDGE ( 'NONE', *, *, #256, .T. ) ; +#2388 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, 1.150000000000000100 ) ) ; +#2389 = EDGE_LOOP ( 'NONE', ( #2703, #976, #484, #1380 ) ) ; +#2390 = DIRECTION ( 'NONE', ( -0.9975640502598243100, 0.06975647374412513600, 0.0000000000000000000 ) ) ; +#2391 = LINE ( 'NONE', #399, #1309 ) ; +#2392 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2393 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2394 = VECTOR ( 'NONE', #2417, 1000.000000000000000 ) ; +#2395 = FILL_AREA_STYLE ('',( #488 ) ) ; +#2396 = CIRCLE ( 'NONE', #1074, 0.1599999999999999800 ) ; +#2397 = AXIS2_PLACEMENT_3D ( 'NONE', #2465, #1710, #12 ) ; +#2398 = CARTESIAN_POINT ( 'NONE', ( 0.9425915291627476900, 0.1720974328940367000, 0.2000000000000002100 ) ) ; +#2399 = LINE ( 'NONE', #1498, #817 ) ; +#2400 = CIRCLE ( 'NONE', #1433, 0.04999999999999991300 ) ; +#2401 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, -0.7499999999999997800 ) ) ; +#2402 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2403 = AXIS2_PLACEMENT_3D ( 'NONE', #776, #2503, #588 ) ; +#2404 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 0.7500000000000002200 ) ) ; +#2405 = DIRECTION ( 'NONE', ( -0.06975647374412524700, 0.9975640502598243100, 0.0000000000000000000 ) ) ; +#2406 = LINE ( 'NONE', #2702, #452 ) ; +#2407 = ORIENTED_EDGE ( 'NONE', *, *, #2923, .F. ) ; +#2408 = LINE ( 'NONE', #1502, #1908 ) ; +#2409 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, 1.150000000000000100 ) ) ; +#2410 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.9848077530122080200, 0.1736481776669307200 ) ) ; +#2411 = ORIENTED_EDGE ( 'NONE', *, *, #2481, .T. ) ; +#2412 = VECTOR ( 'NONE', #1088, 1000.000000000000000 ) ; +#2413 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, -0.1999999999999997600 ) ) ; +#2414 = VERTEX_POINT ( 'NONE', #1789 ) ; +#2415 = EDGE_CURVE ( 'NONE', #2115, #122, #2081, .T. ) ; +#2416 = ORIENTED_EDGE ( 'NONE', *, *, #1662, .T. ) ; +#2417 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2418 = ORIENTED_EDGE ( 'NONE', *, *, #256, .F. ) ; +#2419 = ORIENTED_EDGE ( 'NONE', *, *, #1546, .F. ) ; +#2420 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, -0.7499999999999997800 ) ) ; +#2421 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2422 = AXIS2_PLACEMENT_3D ( 'NONE', #3137, #1656, #2850 ) ; +#2423 = VERTEX_POINT ( 'NONE', #565 ) ; +#2424 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2425 = EDGE_CURVE ( 'NONE', #822, #1985, #1075, .T. ) ; +#2426 = VERTEX_POINT ( 'NONE', #321 ) ; +#2427 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'part', '', ( #812 ) ) ; +#2428 = SURFACE_STYLE_FILL_AREA ( #1023 ) ; +#2429 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, 1.150000000000000100 ) ) ; +#2430 = EDGE_CURVE ( 'NONE', #578, #56, #1391, .T. ) ; +#2431 = FACE_OUTER_BOUND ( 'NONE', #1326, .T. ) ; +#2432 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2433 = DIRECTION ( 'NONE', ( 0.1710878697460358800, 0.9702875252478138100, 0.1710878697460358200 ) ) ; +#2434 = VECTOR ( 'NONE', #274, 1000.000000000000000 ) ; +#2435 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2436 = VECTOR ( 'NONE', #728, 1000.000000000000000 ) ; +#2437 = ADVANCED_FACE ( 'NONE', ( #22 ), #630, .F. ) ; +#2438 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.450000000000000000, -1.149999999999999700 ) ) ; +#2439 = VECTOR ( 'NONE', #749, 1000.000000000000000 ) ; +#2440 = ORIENTED_EDGE ( 'NONE', *, *, #2710, .T. ) ; +#2441 = DIRECTION ( 'NONE', ( -0.9975640502598243100, 0.06975647374412530200, 0.0000000000000000000 ) ) ; +#2442 = FACE_OUTER_BOUND ( 'NONE', #1926, .T. ) ; +#2443 = ORIENTED_EDGE ( 'NONE', *, *, #2540, .F. ) ; +#2444 = VERTEX_POINT ( 'NONE', #2106 ) ; +#2445 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2446 = EDGE_CURVE ( 'NONE', #1016, #846, #3144, .T. ) ; +#2447 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, -0.7499999999999997800 ) ) ; +#2448 = FACE_OUTER_BOUND ( 'NONE', #1841, .T. ) ; +#2449 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, 0.2000000000000002100 ) ) ; +#2450 = DIRECTION ( 'NONE', ( 0.05233595624294376500, 0.9986295347545739400, 0.0000000000000000000 ) ) ; +#2451 = FACE_OUTER_BOUND ( 'NONE', #1992, .T. ) ; +#2452 = ORIENTED_EDGE ( 'NONE', *, *, #675, .F. ) ; +#2453 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2454 = ADVANCED_FACE ( 'NONE', ( #1968 ), #3118, .T. ) ; +#2455 = ORIENTED_EDGE ( 'NONE', *, *, #391, .F. ) ; +#2456 = LINE ( 'NONE', #372, #2619 ) ; +#2457 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 1.449999999999999300 ) ) ; +#2458 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 1.037500000000000100, -0.1999999999999997600 ) ) ; +#2459 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2460 = EDGE_LOOP ( 'NONE', ( #2626, #3028, #2237, #2956 ) ) ; +#2461 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293221800, 0.8401167978121472100, -0.1999999999999997600 ) ) ; +#2462 = EDGE_LOOP ( 'NONE', ( #2341, #2735, #1346, #2740 ) ) ; +#2463 = DIRECTION ( 'NONE', ( -0.9848077530122080200, -0.1736481776669307200, -3.681830018263463400E-017 ) ) ; +#2464 = ORIENTED_EDGE ( 'NONE', *, *, #1154, .T. ) ; +#2465 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, 1.150000000000000100 ) ) ; +#2466 = ORIENTED_EDGE ( 'NONE', *, *, #2991, .T. ) ; +#2467 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, 1.150000000000000100 ) ) ; +#2468 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#2469 = AXIS2_PLACEMENT_3D ( 'NONE', #931, #1453, #2445 ) ; +#2470 = EDGE_LOOP ( 'NONE', ( #2313, #1751, #2916, #2779 ) ) ; +#2471 = ORIENTED_EDGE ( 'NONE', *, *, #2973, .F. ) ; +#2472 = EDGE_CURVE ( 'NONE', #625, #1757, #1891, .T. ) ; +#2473 = ADVANCED_FACE ( 'NONE', ( #2718 ), #2083, .F. ) ; +#2474 = EDGE_CURVE ( 'NONE', #1487, #2414, #519, .T. ) ; +#2475 = VECTOR ( 'NONE', #2392, 1000.000000000000000 ) ; +#2476 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, 0.2000000000000002100 ) ) ; +#2477 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2478 = VECTOR ( 'NONE', #335, 999.9999999999998900 ) ; +#2479 = PLANE ( 'NONE', #2892 ) ; +#2480 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, 1.150000000000000100 ) ) ; +#2481 = EDGE_CURVE ( 'NONE', #988, #3129, #1507, .T. ) ; +#2482 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, 0.2000000000000002100 ) ) ; +#2483 = FACE_OUTER_BOUND ( 'NONE', #1376, .T. ) ; +#2484 = ADVANCED_FACE ( 'NONE', ( #1352, #3065 ), #1826, .T. ) ; +#2485 = AXIS2_PLACEMENT_3D ( 'NONE', #1382, #150, #1347 ) ; +#2486 = LINE ( 'NONE', #2965, #109 ) ; +#2487 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.9848077530122080200, -0.1736481776669307200 ) ) ; +#2488 = ORIENTED_EDGE ( 'NONE', *, *, #2303, .F. ) ; +#2489 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.349999999999999900, -1.249999999999999800 ) ) ; +#2490 = FACE_OUTER_BOUND ( 'NONE', #3097, .T. ) ; +#2491 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, -1.149999999999999700 ) ) ; +#2492 = AXIS2_PLACEMENT_3D ( 'NONE', #2694, #2687, #1471 ) ; +#2493 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133569600, -0.7499999999999997800 ) ) ; +#2494 = ORIENTED_EDGE ( 'NONE', *, *, #576, .F. ) ; +#2495 = LINE ( 'NONE', #1871, #1835 ) ; +#2496 = EDGE_CURVE ( 'NONE', #1319, #2894, #926, .T. ) ; +#2497 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2845, 'distance_accuracy_value', 'NONE'); +#2498 = VERTEX_POINT ( 'NONE', #2334 ) ; +#2499 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 1.150000000000000100 ) ) ; +#2500 = VERTEX_POINT ( 'NONE', #2322 ) ; +#2501 = ORIENTED_EDGE ( 'NONE', *, *, #721, .T. ) ; +#2502 = VERTEX_POINT ( 'NONE', #2578 ) ; +#2503 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2504 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2505 = ORIENTED_EDGE ( 'NONE', *, *, #927, .F. ) ; +#2506 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, 1.150000000000000100 ) ) ; +#2507 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, 1.150000000000000100 ) ) ; +#2508 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133572400, -1.149999999999999700 ) ) ; +#2509 = ORIENTED_EDGE ( 'NONE', *, *, #1768, .T. ) ; +#2510 = AXIS2_PLACEMENT_3D ( 'NONE', #2881, #2143, #1856 ) ; +#2511 = VERTEX_POINT ( 'NONE', #1590 ) ; +#2512 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293221800, 0.8401167978121472100, 1.150000000000000100 ) ) ; +#2513 = EDGE_CURVE ( 'NONE', #2190, #1958, #703, .T. ) ; +#2514 = FILL_AREA_STYLE_COLOUR ( '', #2547 ) ; +#2515 = VECTOR ( 'NONE', #2681, 1000.000000000000100 ) ; +#2516 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2517 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2518 = LINE ( 'NONE', #471, #554 ) ; +#2519 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8875000000000000700, 1.150000000000000100 ) ) ; +#2520 = LINE ( 'NONE', #1220, #2361 ) ; +#2521 = ORIENTED_EDGE ( 'NONE', *, *, #1159, .F. ) ; +#2522 = CARTESIAN_POINT ( 'NONE', ( 0.7272651204577580400, 1.450000000000000000, 1.449999999999999300 ) ) ; +#2523 = VECTOR ( 'NONE', #164, 1000.000000000000000 ) ; +#2524 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2525 = AXIS2_PLACEMENT_3D ( 'NONE', #2482, #2243, #1727 ) ; +#2526 = PLANE ( 'NONE', #1529 ) ; +#2527 = PLANE ( 'NONE', #1254 ) ; +#2528 = VECTOR ( 'NONE', #1520, 999.9999999999998900 ) ; +#2529 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, 0.2000000000000002100 ) ) ; +#2530 = AXIS2_PLACEMENT_3D ( 'NONE', #505, #1004, #1967 ) ; +#2531 = ORIENTED_EDGE ( 'NONE', *, *, #1759, .T. ) ; +#2532 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#2533 = EDGE_CURVE ( 'NONE', #2332, #980, #1585, .T. ) ; +#2534 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2535 = ORIENTED_EDGE ( 'NONE', *, *, #662, .F. ) ; +#2536 = ORIENTED_EDGE ( 'NONE', *, *, #1480, .F. ) ; +#2537 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2538 = ORIENTED_EDGE ( 'NONE', *, *, #2772, .T. ) ; +#2539 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293221800, 0.8401167978121472100, -1.149999999999999700 ) ) ; +#2540 = EDGE_CURVE ( 'NONE', #1415, #687, #137, .T. ) ; +#2541 = EDGE_LOOP ( 'NONE', ( #945, #727, #1924, #3134 ) ) ; +#2542 = FILL_AREA_STYLE_COLOUR ( '', #2291 ) ; +#2543 = ORIENTED_EDGE ( 'NONE', *, *, #1621, .F. ) ; +#2544 = AXIS2_PLACEMENT_3D ( 'NONE', #417, #202, #1901 ) ; +#2545 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, -1.149999999999999700 ) ) ; +#2546 = ORIENTED_EDGE ( 'NONE', *, *, #1045, .T. ) ; +#2547 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#2548 = LINE ( 'NONE', #1441, #3016 ) ; +#2549 = DIRECTION ( 'NONE', ( 0.9986295347545739400, 0.05233595624294376500, 0.0000000000000000000 ) ) ; +#2550 = EDGE_CURVE ( 'NONE', #980, #1531, #361, .T. ) ; +#2551 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.738628180984498900E-017 ) ) ; +#2552 = SURFACE_STYLE_FILL_AREA ( #3166 ) ; +#2553 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2554 = ADVANCED_FACE ( 'NONE', ( #743 ), #1097, .F. ) ; +#2555 = AXIS2_PLACEMENT_3D ( 'NONE', #2946, #1186, #2209 ) ; +#2556 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #116, 'distance_accuracy_value', 'NONE'); +#2557 = LINE ( 'NONE', #3029, #1939 ) ; +#2558 = CARTESIAN_POINT ( 'NONE', ( -0.9425915291627476900, 0.1720974328940367000, 0.2000000000000002100 ) ) ; +#2559 = ORIENTED_EDGE ( 'NONE', *, *, #2772, .F. ) ; +#2560 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2561 = EDGE_LOOP ( 'NONE', ( #3197, #966, #3096, #1211 ) ) ; +#2562 = LINE ( 'NONE', #1392, #3031 ) ; +#2563 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 1.150000000000000100 ) ) ; +#2564 = LINE ( 'NONE', #140, #3079 ) ; +#2565 = PLANE ( 'NONE', #2027 ) ; +#2566 = AXIS2_PLACEMENT_3D ( 'NONE', #990, #262, #2953 ) ; +#2567 = CYLINDRICAL_SURFACE ( 'NONE', #2799, 0.04999999999999991300 ) ; +#2568 = ORIENTED_EDGE ( 'NONE', *, *, #1034, .T. ) ; +#2569 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2570 = PRESENTATION_STYLE_ASSIGNMENT (( #3070 ) ) ; +#2571 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2572 = ORIENTED_EDGE ( 'NONE', *, *, #3181, .T. ) ; +#2573 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2574 = EDGE_LOOP ( 'NONE', ( #2782, #2927, #2440, #757 ) ) ; +#2575 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2576 = AXIS2_PLACEMENT_3D ( 'NONE', #1363, #2355, #155 ) ; +#2577 = ORIENTED_EDGE ( 'NONE', *, *, #2217, .F. ) ; +#2578 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293221800, 0.8401167978121472100, 0.7500000000000002200 ) ) ; +#2579 = ORIENTED_EDGE ( 'NONE', *, *, #832, .T. ) ; +#2580 = EDGE_LOOP ( 'NONE', ( #310, #766, #1262, #2030 ) ) ; +#2581 = EDGE_LOOP ( 'NONE', ( #340, #2746, #1653, #408, #2384, #2187, #1847, #2260, #1303, #2521, #2407, #773 ) ) ; +#2582 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, -0.7499999999999997800 ) ) ; +#2583 = ORIENTED_EDGE ( 'NONE', *, *, #20, .T. ) ; +#2584 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#2585 = PLANE ( 'NONE', #2485 ) ; +#2586 = EDGE_LOOP ( 'NONE', ( #1096, #2266, #2443, #248 ) ) ; +#2587 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2588 = ORIENTED_EDGE ( 'NONE', *, *, #1938, .T. ) ; +#2589 = AXIS2_PLACEMENT_3D ( 'NONE', #893, #1365, #2594 ) ; +#2590 = CARTESIAN_POINT ( 'NONE', ( -0.7999999999999999300, 1.037500000000000100, -1.449999999999999700 ) ) ; +#2591 = ADVANCED_FACE ( 'NONE', ( #2830 ), #2853, .F. ) ; +#2592 = VECTOR ( 'NONE', #1950, 1000.000000000000000 ) ; +#2593 = SURFACE_SIDE_STYLE ('',( #115 ) ) ; +#2594 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2595 = VECTOR ( 'NONE', #3072, 1000.000000000000200 ) ; +#2596 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, -0.7499999999999997800 ) ) ; +#2597 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#2598 = AXIS2_PLACEMENT_3D ( 'NONE', #1907, #250, #1708 ) ; +#2599 = EDGE_CURVE ( 'NONE', #430, #1750, #779, .T. ) ; +#2600 = CYLINDRICAL_SURFACE ( 'NONE', #1351, 0.1999999999999998700 ) ; +#2601 = EDGE_CURVE ( 'NONE', #900, #469, #1663, .T. ) ; +#2602 = CARTESIAN_POINT ( 'NONE', ( -0.7999999999999999300, 0.8874999999999999600, -1.449999999999999700 ) ) ; +#2603 = AXIS2_PLACEMENT_3D ( 'NONE', #1289, #2649, #2410 ) ; +#2604 = VECTOR ( 'NONE', #1423, 1000.000000000000000 ) ; +#2605 = VERTEX_POINT ( 'NONE', #702 ) ; +#2606 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, -1.149999999999999700 ) ) ; +#2607 = EDGE_CURVE ( 'NONE', #2104, #430, #850, .T. ) ; +#2608 = CIRCLE ( 'NONE', #1172, 0.1000000000000000500 ) ; +#2609 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 1.449999999999999300 ) ) ; +#2610 = ADVANCED_FACE ( 'NONE', ( #2756 ), #437, .F. ) ; +#2611 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, 0.7500000000000002200 ) ) ; +#2612 = LINE ( 'NONE', #2283, #1364 ) ; +#2613 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, -1.149999999999999700 ) ) ; +#2614 = VECTOR ( 'NONE', #539, 1000.000000000000000 ) ; +#2615 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2616 = VERTEX_POINT ( 'NONE', #446 ) ; +#2617 = CIRCLE ( 'NONE', #711, 0.1999999999999999800 ) ; +#2618 = ORIENTED_EDGE ( 'NONE', *, *, #3043, .T. ) ; +#2619 = VECTOR ( 'NONE', #892, 1000.000000000000000 ) ; +#2620 = EDGE_CURVE ( 'NONE', #470, #913, #2868, .T. ) ; +#2621 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, 0.2000000000000002100 ) ) ; +#2622 = ORIENTED_EDGE ( 'NONE', *, *, #1475, .F. ) ; +#2623 = AXIS2_PLACEMENT_3D ( 'NONE', #2447, #1205, #257 ) ; +#2624 = ORIENTED_EDGE ( 'NONE', *, *, #2641, .T. ) ; +#2625 = CARTESIAN_POINT ( 'NONE', ( 0.6699588517275068000, 0.1499999999999999700, -1.319958851727506500 ) ) ; +#2626 = ORIENTED_EDGE ( 'NONE', *, *, #2727, .F. ) ; +#2627 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, -0.1999999999999997600 ) ) ; +#2628 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2629 = ORIENTED_EDGE ( 'NONE', *, *, #1308, .T. ) ; +#2630 = PRESENTATION_STYLE_ASSIGNMENT (( #1777 ) ) ; +#2631 = FACE_OUTER_BOUND ( 'NONE', #1253, .T. ) ; +#2632 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2236 ) ) ; +#2633 = DIRECTION ( 'NONE', ( 0.9975640502598243100, -0.06975647374412515000, 0.0000000000000000000 ) ) ; +#2634 = VECTOR ( 'NONE', #929, 1000.000000000000000 ) ; +#2635 = CARTESIAN_POINT ( 'NONE', ( -1.092385959375934000, 0.1799478263304782100, 0.2000000000000002100 ) ) ; +#2636 = PLANE ( 'NONE', #1493 ) ; +#2637 = CIRCLE ( 'NONE', #2133, 0.04999999999999991300 ) ; +#2638 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #698 ), #1015 ) ; +#2639 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, -1.149999999999999700 ) ) ; +#2640 = VERTEX_POINT ( 'NONE', #2625 ) ; +#2641 = EDGE_CURVE ( 'NONE', #1831, #3000, #962, .T. ) ; +#2642 = PLANE ( 'NONE', #1068 ) ; +#2643 = EDGE_CURVE ( 'NONE', #1762, #2104, #1933, .T. ) ; +#2644 = VECTOR ( 'NONE', #3175, 1000.000000000000000 ) ; +#2645 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, 0.7500000000000002200 ) ) ; +#2646 = ORIENTED_EDGE ( 'NONE', *, *, #185, .F. ) ; +#2647 = ORIENTED_EDGE ( 'NONE', *, *, #1830, .T. ) ; +#2648 = LINE ( 'NONE', #864, #1898 ) ; +#2649 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.1736481776669307200, -0.9848077530122080200 ) ) ; +#2650 = FACE_OUTER_BOUND ( 'NONE', #2149, .T. ) ; +#2651 = VERTEX_POINT ( 'NONE', #462 ) ; +#2652 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2653 = EDGE_CURVE ( 'NONE', #2909, #2977, #99, .T. ) ; +#2654 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133569600, 1.150000000000000100 ) ) ; +#2655 = VERTEX_POINT ( 'NONE', #2398 ) ; +#2656 = DIRECTION ( 'NONE', ( -0.06975647374412528900, -0.9975640502598242000, 0.0000000000000000000 ) ) ; +#2657 = LINE ( 'NONE', #2368, #2412 ) ; +#2658 = VERTEX_POINT ( 'NONE', #3139 ) ; +#2659 = PLANE ( 'NONE', #770 ) ; +#2660 = ORIENTED_EDGE ( 'NONE', *, *, #979, .T. ) ; +#2661 = ORIENTED_EDGE ( 'NONE', *, *, #3009, .T. ) ; +#2662 = DIRECTION ( 'NONE', ( 0.06975647374412528900, 0.9975640502598242000, 0.0000000000000000000 ) ) ; +#2663 = AXIS2_PLACEMENT_3D ( 'NONE', #2920, #1409, #2888 ) ; +#2664 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2665 = VERTEX_POINT ( 'NONE', #2162 ) ; +#2666 = EDGE_CURVE ( 'NONE', #1573, #1750, #1550, .T. ) ; +#2667 = ORIENTED_EDGE ( 'NONE', *, *, #2163, .T. ) ; +#2668 = DIRECTION ( 'NONE', ( 0.06975647374412524700, 0.9975640502598243100, 0.0000000000000000000 ) ) ; +#2669 = AXIS2_PLACEMENT_3D ( 'NONE', #2968, #1988, #545 ) ; +#2670 = ORIENTED_EDGE ( 'NONE', *, *, #1809, .F. ) ; +#2671 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2672 = EDGE_CURVE ( 'NONE', #2911, #501, #1270, .T. ) ; +#2673 = ADVANCED_FACE ( 'NONE', ( #1467 ), #415, .F. ) ; +#2674 = ORIENTED_EDGE ( 'NONE', *, *, #2474, .F. ) ; +#2675 = VECTOR ( 'NONE', #2179, 1000.000000000000000 ) ; +#2676 = CARTESIAN_POINT ( 'NONE', ( -1.092385959375934000, 0.1799478263304782100, 1.150000000000000100 ) ) ; +#2677 = PLANE ( 'NONE', #1677 ) ; +#2678 = VECTOR ( 'NONE', #2656, 1000.000000000000200 ) ; +#2679 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2680 = FACE_OUTER_BOUND ( 'NONE', #2712, .T. ) ; +#2681 = DIRECTION ( 'NONE', ( 0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#2682 = AXIS2_PLACEMENT_3D ( 'NONE', #161, #2571, #626 ) ; +#2683 = FACE_OUTER_BOUND ( 'NONE', #473, .T. ) ; +#2684 = CARTESIAN_POINT ( 'NONE', ( -1.101674689986038300, 0.1704955453903094200, -0.1999999999999997600 ) ) ; +#2685 = EDGE_CURVE ( 'NONE', #2921, #2444, #177, .T. ) ; +#2686 = VECTOR ( 'NONE', #2330, 1000.000000000000000 ) ; +#2687 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2688 = PLANE ( 'NONE', #2259 ) ; +#2689 = PLANE ( 'NONE', #1929 ) ; +#2690 = VECTOR ( 'NONE', #1490, 999.9999999999998900 ) ; +#2691 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2692 = ADVANCED_FACE ( 'NONE', ( #1228 ), #1170, .F. ) ; +#2693 = LINE ( 'NONE', #1474, #609 ) ; +#2694 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, 0.2000000000000002100 ) ) ; +#2695 = EDGE_LOOP ( 'NONE', ( #165, #2235, #2887, #1133 ) ) ; +#2696 = PRESENTATION_STYLE_ASSIGNMENT (( #2857 ) ) ; +#2697 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2698 = ORIENTED_EDGE ( 'NONE', *, *, #2672, .F. ) ; +#2699 = AXIS2_PLACEMENT_3D ( 'NONE', #510, #54, #998 ) ; +#2700 = EDGE_LOOP ( 'NONE', ( #2105, #2411, #1605, #2294 ) ) ; +#2701 = ORIENTED_EDGE ( 'NONE', *, *, #1932, .T. ) ; +#2702 = CARTESIAN_POINT ( 'NONE', ( -1.389536528938381200, -2.681463464988489800E-017, 0.7500000000000002200 ) ) ; +#2703 = ORIENTED_EDGE ( 'NONE', *, *, #815, .T. ) ; +#2704 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude4', #1538 ) ; +#2705 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, 0.2000000000000002100 ) ) ; +#2706 = ORIENTED_EDGE ( 'NONE', *, *, #237, .F. ) ; +#2707 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2708 = EDGE_CURVE ( 'NONE', #1831, #1624, #1699, .T. ) ; +#2709 = ADVANCED_FACE ( 'NONE', ( #479 ), #2185, .T. ) ; +#2710 = EDGE_CURVE ( 'NONE', #2276, #2196, #254, .T. ) ; +#2711 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 0.7500000000000002200 ) ) ; +#2712 = EDGE_LOOP ( 'NONE', ( #1282, #1774, #333, #1650 ) ) ; +#2713 = ORIENTED_EDGE ( 'NONE', *, *, #1333, .F. ) ; +#2714 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2715 = EDGE_CURVE ( 'NONE', #70, #1294, #322, .T. ) ; +#2716 = CIRCLE ( 'NONE', #1328, 0.1000000000000000500 ) ; +#2717 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, -0.7499999999999997800 ) ) ; +#2718 = FACE_OUTER_BOUND ( 'NONE', #2561, .T. ) ; +#2719 = EDGE_CURVE ( 'NONE', #389, #385, #2548, .T. ) ; +#2720 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, -1.149999999999999700 ) ) ; +#2721 = CYLINDRICAL_SURFACE ( 'NONE', #275, 0.1000000000000000500 ) ; +#2722 = ORIENTED_EDGE ( 'NONE', *, *, #1608, .T. ) ; +#2723 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, -0.7499999999999997800 ) ) ; +#2724 = ADVANCED_FACE ( 'NONE', ( #808 ), #3179, .F. ) ; +#2725 = VECTOR ( 'NONE', #677, 1000.000000000000100 ) ; +#2726 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8875000000000000700, 0.2000000000000002100 ) ) ; +#2727 = EDGE_CURVE ( 'NONE', #3010, #1021, #959, .T. ) ; +#2728 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2729 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, -0.1999999999999997600 ) ) ; +#2730 = AXIS2_PLACEMENT_3D ( 'NONE', #1610, #1366, #316 ) ; +#2731 = CIRCLE ( 'NONE', #910, 0.01000000000000002600 ) ; +#2732 = ORIENTED_EDGE ( 'NONE', *, *, #1987, .T. ) ; +#2733 = VECTOR ( 'NONE', #922, 999.9999999999998900 ) ; +#2734 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 1.037500000000000100, -1.149999999999999700 ) ) ; +#2735 = ORIENTED_EDGE ( 'NONE', *, *, #3037, .F. ) ; +#2736 = ORIENTED_EDGE ( 'NONE', *, *, #814, .F. ) ; +#2737 = CARTESIAN_POINT ( 'NONE', ( -0.7272651204577580400, 1.450000000000000000, 1.377265120457757700 ) ) ; +#2738 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, 1.150000000000000100 ) ) ; +#2739 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, 1.150000000000000100 ) ) ; +#2740 = ORIENTED_EDGE ( 'NONE', *, *, #2975, .T. ) ; +#2741 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 1.150000000000000100 ) ) ; +#2742 = ORIENTED_EDGE ( 'NONE', *, *, #2425, .F. ) ; +#2743 = ADVANCED_FACE ( 'NONE', ( #2277 ), #2865, .T. ) ; +#2744 = ORIENTED_EDGE ( 'NONE', *, *, #1348, .F. ) ; +#2745 = AXIS2_PLACEMENT_3D ( 'NONE', #2499, #2757, #1506 ) ; +#2746 = ORIENTED_EDGE ( 'NONE', *, *, #1971, .F. ) ; +#2747 = ORIENTED_EDGE ( 'NONE', *, *, #464, .T. ) ; +#2748 = CARTESIAN_POINT ( 'NONE', ( 0.9075821177293221800, 0.8401167978121472100, 1.150000000000000100 ) ) ; +#2749 = EDGE_LOOP ( 'NONE', ( #344, #2807, #2588, #1136 ) ) ; +#2750 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.067157287525380700, -1.049999999999999800 ) ) ; +#2751 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, -1.149999999999999700 ) ) ; +#2752 = AXIS2_PLACEMENT_3D ( 'NONE', #598, #1286, #553 ) ; +#2753 = ORIENTED_EDGE ( 'NONE', *, *, #937, .T. ) ; +#2754 = FACE_OUTER_BOUND ( 'NONE', #799, .T. ) ; +#2755 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.1496346075389737300, 0.2000000000000002100 ) ) ; +#2756 = FACE_OUTER_BOUND ( 'NONE', #1257, .T. ) ; +#2757 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2758 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2759 = VECTOR ( 'NONE', #1050, 1000.000000000000000 ) ; +#2760 = STYLED_ITEM ( 'NONE', ( #157 ), #221 ) ; +#2761 = LINE ( 'NONE', #2971, #3186 ) ; +#2762 = AXIS2_PLACEMENT_3D ( 'NONE', #974, #2463, #498 ) ; +#2763 = FACE_OUTER_BOUND ( 'NONE', #2028, .T. ) ; +#2764 = EDGE_CURVE ( 'NONE', #1456, #389, #550, .T. ) ; +#2765 = EDGE_CURVE ( 'NONE', #1054, #1689, #3141, .T. ) ; +#2766 = CARTESIAN_POINT ( 'NONE', ( 1.092385959375934000, 0.1799478263304782100, -1.149999999999999700 ) ) ; +#2767 = FACE_OUTER_BOUND ( 'NONE', #1869, .T. ) ; +#2768 = DIRECTION ( 'NONE', ( -0.05233595624294376500, 0.9986295347545739400, 0.0000000000000000000 ) ) ; +#2769 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2770 = VERTEX_POINT ( 'NONE', #2584 ) ; +#2771 = DIRECTION ( 'NONE', ( 0.9975640502598243100, -0.06975647374412515000, 0.0000000000000000000 ) ) ; +#2772 = EDGE_CURVE ( 'NONE', #36, #846, #1388, .T. ) ; +#2773 = EDGE_LOOP ( 'NONE', ( #423, #2242, #2138, #200 ) ) ; +#2774 = CARTESIAN_POINT ( 'NONE', ( -0.7272651204577579300, 1.450000000000000000, -1.377265120457757700 ) ) ; +#2775 = ORIENTED_EDGE ( 'NONE', *, *, #1923, .F. ) ; +#2776 = ORIENTED_EDGE ( 'NONE', *, *, #464, .F. ) ; +#2777 = PLANE ( 'NONE', #2752 ) ; +#2778 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#2779 = ORIENTED_EDGE ( 'NONE', *, *, #509, .T. ) ; +#2780 = DIRECTION ( 'NONE', ( 0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#2781 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133569600, 0.2000000000000002100 ) ) ; +#2782 = ORIENTED_EDGE ( 'NONE', *, *, #2496, .F. ) ; +#2783 = ORIENTED_EDGE ( 'NONE', *, *, #662, .T. ) ; +#2784 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 0.7500000000000002200 ) ) ; +#2785 = ORIENTED_EDGE ( 'NONE', *, *, #2211, .T. ) ; +#2786 = EDGE_CURVE ( 'NONE', #839, #2861, #1813, .T. ) ; +#2787 = LINE ( 'NONE', #1455, #1305 ) ; +#2788 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.450000000000000000, -1.249999999999999800 ) ) ; +#2789 = AXIS2_PLACEMENT_3D ( 'NONE', #1844, #386, #2359 ) ; +#2790 = VECTOR ( 'NONE', #1861, 1000.000000000000000 ) ; +#2791 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293221800, 0.8401167978121472100, 0.2000000000000002100 ) ) ; +#2792 = DIRECTION ( 'NONE', ( 0.9975640502598243100, 0.06975647374412530200, -0.0000000000000000000 ) ) ; +#2793 = VECTOR ( 'NONE', #1066, 1000.000000000000000 ) ; +#2794 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 1.449999999999999700 ) ) ; +#2795 = CIRCLE ( 'NONE', #2908, 0.1599999999999999800 ) ; +#2796 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #238, 'distance_accuracy_value', 'NONE'); +#2797 = LINE ( 'NONE', #2613, #2130 ) ; +#2798 = DIRECTION ( 'NONE', ( 0.05233595624294376500, 0.9986295347545739400, 0.0000000000000000000 ) ) ; +#2799 = AXIS2_PLACEMENT_3D ( 'NONE', #2194, #978, #1974 ) ; +#2800 = PLANE ( 'NONE', #2962 ) ; +#2801 = LINE ( 'NONE', #2125, #1477 ) ; +#2802 = ADVANCED_FACE ( 'NONE', ( #2979 ), #1104, .F. ) ; +#2803 = ORIENTED_EDGE ( 'NONE', *, *, #1823, .T. ) ; +#2804 = ORIENTED_EDGE ( 'NONE', *, *, #2935, .F. ) ; +#2805 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2806 = AXIS2_PLACEMENT_3D ( 'NONE', #1280, #602, #1556 ) ; +#2807 = ORIENTED_EDGE ( 'NONE', *, *, #2383, .T. ) ; +#2808 = FACE_OUTER_BOUND ( 'NONE', #1836, .T. ) ; +#2809 = EDGE_CURVE ( 'NONE', #2905, #801, #629, .T. ) ; +#2810 = EDGE_CURVE ( 'NONE', #2426, #573, #1889, .T. ) ; +#2811 = VERTEX_POINT ( 'NONE', #2836 ) ; +#2812 = ORIENTED_EDGE ( 'NONE', *, *, #2344, .T. ) ; +#2813 = EDGE_LOOP ( 'NONE', ( #647, #1385, #730, #1821 ) ) ; +#2814 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133569600, 0.2000000000000002100 ) ) ; +#2815 = ORIENTED_EDGE ( 'NONE', *, *, #1608, .F. ) ; +#2816 = EDGE_LOOP ( 'NONE', ( #1763, #1505, #1419, #369 ) ) ; +#2817 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2818 = VERTEX_POINT ( 'NONE', #1345 ) ; +#2819 = EDGE_LOOP ( 'NONE', ( #486, #1611, #622, #878 ) ) ; +#2820 = EDGE_CURVE ( 'NONE', #3088, #839, #3107, .T. ) ; +#2821 = ADVANCED_FACE ( 'NONE', ( #1072 ), #1584, .F. ) ; +#2822 = VERTEX_POINT ( 'NONE', #159 ) ; +#2823 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133572400, -0.7499999999999997800 ) ) ; +#2824 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2825 = ORIENTED_EDGE ( 'NONE', *, *, #2075, .T. ) ; +#2826 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.880642008201783800E-015, 0.0000000000000000000 ) ) ; +#2827 = VECTOR ( 'NONE', #982, 1000.000000000000000 ) ; +#2828 = AXIS2_PLACEMENT_3D ( 'NONE', #2141, #2382, #1885 ) ; +#2829 = EDGE_CURVE ( 'NONE', #2822, #1772, #2122, .T. ) ; +#2830 = FACE_OUTER_BOUND ( 'NONE', #641, .T. ) ; +#2831 = DIRECTION ( 'NONE', ( 3.738628180984498900E-017, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2832 = AXIS2_PLACEMENT_3D ( 'NONE', #71, #777, #2487 ) ; +#2833 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, 0.2000000000000002100 ) ) ; +#2834 = EDGE_CURVE ( 'NONE', #2117, #625, #2391, .T. ) ; +#2835 = VECTOR ( 'NONE', #819, 1000.000000000000000 ) ; +#2836 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, 1.150000000000000100 ) ) ; +#2837 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#2838 = ADVANCED_FACE ( 'NONE', ( #890 ), #1038, .F. ) ; +#2839 = VECTOR ( 'NONE', #1620, 1000.000000000000000 ) ; +#2840 = DIRECTION ( 'NONE', ( 0.9975640502598243100, 0.06975647374412523300, -0.0000000000000000000 ) ) ; +#2841 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3100, 'distance_accuracy_value', 'NONE'); +#2842 = CIRCLE ( 'NONE', #674, 0.1999999999999999800 ) ; +#2843 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.880642008201783800E-015, 0.0000000000000000000 ) ) ; +#2844 = AXIS2_PLACEMENT_3D ( 'NONE', #2866, #1876, #2826 ) ; +#2845 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2846 = ORIENTED_EDGE ( 'NONE', *, *, #561, .T. ) ; +#2847 = LINE ( 'NONE', #2741, #2614 ) ; +#2848 = EDGE_CURVE ( 'NONE', #2346, #1487, #2354, .T. ) ; +#2849 = ORIENTED_EDGE ( 'NONE', *, *, #108, .T. ) ; +#2850 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2851 = LINE ( 'NONE', #2378, #2885 ) ; +#2852 = ORIENTED_EDGE ( 'NONE', *, *, #675, .T. ) ; +#2853 = PLANE ( 'NONE', #2298 ) ; +#2854 = ADVANCED_FACE ( 'NONE', ( #98 ), #861, .T. ) ; +#2855 = ORIENTED_EDGE ( 'NONE', *, *, #2809, .F. ) ; +#2856 = EDGE_LOOP ( 'NONE', ( #2742, #938, #3099, #2488, #345, #1687, #2670, #3156, #1738, #2386, #542, #2157 ) ) ; +#2857 = SURFACE_STYLE_USAGE ( .BOTH. , #170 ) ; +#2858 = ORIENTED_EDGE ( 'NONE', *, *, #72, .F. ) ; +#2859 = DIRECTION ( 'NONE', ( 0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#2860 = ORIENTED_EDGE ( 'NONE', *, *, #2099, .F. ) ; +#2861 = VERTEX_POINT ( 'NONE', #2111 ) ; +#2862 = VECTOR ( 'NONE', #1238, 1000.000000000000000 ) ; +#2863 = CARTESIAN_POINT ( 'NONE', ( -1.092385959375934000, 0.1799478263304782100, -0.7499999999999997800 ) ) ; +#2864 = SURFACE_SIDE_STYLE ('',( #1644 ) ) ; +#2865 = CYLINDRICAL_SURFACE ( 'NONE', #2789, 0.1599999999999999800 ) ; +#2866 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, -0.7499999999999997800 ) ) ; +#2867 = ADVANCED_FACE ( 'NONE', ( #663 ), #407, .F. ) ; +#2868 = LINE ( 'NONE', #1635, #2394 ) ; +#2869 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2870 = EDGE_CURVE ( 'NONE', #1543, #988, #1547, .T. ) ; +#2871 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2872 = EDGE_CURVE ( 'NONE', #1412, #987, #2716, .T. ) ; +#2873 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2874 = VECTOR ( 'NONE', #2879, 1000.000000000000100 ) ; +#2875 = DIRECTION ( 'NONE', ( 0.9975640502598243100, 0.06975647374412523300, -0.0000000000000000000 ) ) ; +#2876 = EDGE_CURVE ( 'NONE', #956, #2665, #1852, .T. ) ; +#2877 = VECTOR ( 'NONE', #1643, 1000.000000000000000 ) ; +#2878 = DIRECTION ( 'NONE', ( -0.9975640502598243100, 0.06975647374412530200, 0.0000000000000000000 ) ) ; +#2879 = DIRECTION ( 'NONE', ( -0.05233595624294376500, 0.9986295347545739400, 0.0000000000000000000 ) ) ; +#2880 = VECTOR ( 'NONE', #493, 1000.000000000000000 ) ; +#2881 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, -1.149999999999999700 ) ) ; +#2882 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2841 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3100, #1607, #146 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2883 = LINE ( 'NONE', #2476, #2690 ) ; +#2884 = VERTEX_POINT ( 'NONE', #1407 ) ; +#2885 = VECTOR ( 'NONE', #2139, 1000.000000000000100 ) ; +#2886 = CARTESIAN_POINT ( 'NONE', ( 1.092385959375934000, 0.1799478263304782100, -0.1999999999999997600 ) ) ; +#2887 = ORIENTED_EDGE ( 'NONE', *, *, #237, .T. ) ; +#2888 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2889 = FACE_OUTER_BOUND ( 'NONE', #2470, .T. ) ; +#2890 = EDGE_CURVE ( 'NONE', #1054, #688, #1035, .T. ) ; +#2891 = EDGE_LOOP ( 'NONE', ( #915, #172, #950, #272 ) ) ; +#2892 = AXIS2_PLACEMENT_3D ( 'NONE', #2738, #2504, #312 ) ; +#2893 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#2894 = VERTEX_POINT ( 'NONE', #2886 ) ; +#2895 = VERTEX_POINT ( 'NONE', #1639 ) ; +#2896 = ORIENTED_EDGE ( 'NONE', *, *, #2136, .T. ) ; +#2897 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2898 = ORIENTED_EDGE ( 'NONE', *, *, #2136, .F. ) ; +#2899 = CARTESIAN_POINT ( 'NONE', ( -1.092385959375934000, 0.1799478263304782100, 0.2000000000000002100 ) ) ; +#2900 = ORIENTED_EDGE ( 'NONE', *, *, #1390, .F. ) ; +#2901 = CIRCLE ( 'NONE', #1771, 0.1000000000000000500 ) ; +#2902 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1800 ) ) ; +#2903 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2006 ), #1661 ) ; +#2904 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, -0.1999999999999997600 ) ) ; +#2905 = VERTEX_POINT ( 'NONE', #3151 ) ; +#2906 = VECTOR ( 'NONE', #1046, 1000.000000000000000 ) ; +#2907 = VECTOR ( 'NONE', #546, 1000.000000000000200 ) ; +#2908 = AXIS2_PLACEMENT_3D ( 'NONE', #89, #1534, #77 ) ; +#2909 = VERTEX_POINT ( 'NONE', #2904 ) ; +#2910 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.450000000000000000, -1.149999999999999700 ) ) ; +#2911 = VERTEX_POINT ( 'NONE', #3123 ) ; +#2912 = LINE ( 'NONE', #1485, #1591 ) ; +#2913 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 2.710505431213760600E-016 ) ) ; +#2914 = VERTEX_POINT ( 'NONE', #1883 ) ; +#2915 = VECTOR ( 'NONE', #617, 1000.000000000000000 ) ; +#2916 = ORIENTED_EDGE ( 'NONE', *, *, #2279, .F. ) ; +#2917 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2918 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 1.449999999999999700 ) ) ; +#2919 = VECTOR ( 'NONE', #300, 1000.000000000000000 ) ; +#2920 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, 1.150000000000000100 ) ) ; +#2921 = VERTEX_POINT ( 'NONE', #215 ) ; +#2922 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2923 = EDGE_CURVE ( 'NONE', #954, #1624, #2043, .T. ) ; +#2924 = FACE_OUTER_BOUND ( 'NONE', #2819, .T. ) ; +#2925 = ORIENTED_EDGE ( 'NONE', *, *, #619, .F. ) ; +#2926 = LINE ( 'NONE', #1128, #2733 ) ; +#2927 = ORIENTED_EDGE ( 'NONE', *, *, #192, .F. ) ; +#2928 = ORIENTED_EDGE ( 'NONE', *, *, #1045, .F. ) ; +#2929 = EDGE_LOOP ( 'NONE', ( #44, #3075, #2070, #2066 ) ) ; +#2930 = ADVANCED_FACE ( 'NONE', ( #2431 ), #1381, .F. ) ; +#2931 = EDGE_CURVE ( 'NONE', #2346, #3041, #1465, .T. ) ; +#2932 = ORIENTED_EDGE ( 'NONE', *, *, #1773, .F. ) ; +#2933 = VERTEX_POINT ( 'NONE', #905 ) ; +#2934 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#2935 = EDGE_CURVE ( 'NONE', #355, #2347, #2901, .T. ) ; +#2936 = ORIENTED_EDGE ( 'NONE', *, *, #2848, .F. ) ; +#2937 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, 0.2000000000000002100 ) ) ; +#2938 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 1.449999999999999300 ) ) ; +#2939 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.880642008201783800E-015, 0.0000000000000000000 ) ) ; +#2940 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 0.7500000000000002200 ) ) ; +#2941 = VECTOR ( 'NONE', #16, 999.9999999999998900 ) ; +#2942 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.349999999999999900, -1.149999999999999700 ) ) ; +#2943 = ADVANCED_FACE ( 'NONE', ( #436 ), #1421, .F. ) ; +#2944 = EDGE_CURVE ( 'NONE', #1394, #514, #1778, .T. ) ; +#2945 = VECTOR ( 'NONE', #224, 1000.000000000000000 ) ; +#2946 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.450000000000000000, -1.149999999999999700 ) ) ; +#2947 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 1.449999999999999300 ) ) ; +#2948 = AXIS2_PLACEMENT_3D ( 'NONE', #869, #1532, #2340 ) ; +#2949 = LINE ( 'NONE', #2960, #1318 ) ; +#2950 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2951 = VERTEX_POINT ( 'NONE', #1874 ) ; +#2952 = LINE ( 'NONE', #1314, #2915 ) ; +#2953 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2954 = FACE_OUTER_BOUND ( 'NONE', #2580, .T. ) ; +#2955 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2956 = ORIENTED_EDGE ( 'NONE', *, *, #1723, .T. ) ; +#2957 = PLANE ( 'NONE', #451 ) ; +#2958 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, -0.1999999999999997600 ) ) ; +#2959 = ADVANCED_FACE ( 'NONE', ( #2631 ), #515, .T. ) ; +#2960 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 1.037500000000000100, 1.150000000000000100 ) ) ; +#2961 = ORIENTED_EDGE ( 'NONE', *, *, #608, .F. ) ; +#2962 = AXIS2_PLACEMENT_3D ( 'NONE', #356, #2087, #1593 ) ; +#2963 = ORIENTED_EDGE ( 'NONE', *, *, #136, .T. ) ; +#2964 = ORIENTED_EDGE ( 'NONE', *, *, #2708, .T. ) ; +#2965 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, 1.150000000000000100 ) ) ; +#2966 = ORIENTED_EDGE ( 'NONE', *, *, #2991, .F. ) ; +#2967 = ORIENTED_EDGE ( 'NONE', *, *, #738, .F. ) ; +#2968 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, 0.2000000000000002100 ) ) ; +#2969 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #698 ) ) ; +#2970 = VERTEX_POINT ( 'NONE', #1462 ) ; +#2971 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 1.449999999999999300 ) ) ; +#2972 = CARTESIAN_POINT ( 'NONE', ( -0.9075821177293220700, 0.8401167978121472100, -1.149999999999999700 ) ) ; +#2973 = EDGE_CURVE ( 'NONE', #2861, #578, #1740, .T. ) ; +#2974 = ORIENTED_EDGE ( 'NONE', *, *, #1971, .T. ) ; +#2975 = EDGE_CURVE ( 'NONE', #687, #2977, #21, .T. ) ; +#2976 = ORIENTED_EDGE ( 'NONE', *, *, #2099, .T. ) ; +#2977 = VERTEX_POINT ( 'NONE', #2458 ) ; +#2978 = ADVANCED_FACE ( 'NONE', ( #2754 ), #2039, .T. ) ; +#2979 = FACE_OUTER_BOUND ( 'NONE', #2541, .T. ) ; +#2980 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2981 = VECTOR ( 'NONE', #2873, 1000.000000000000000 ) ; +#2982 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 1.150000000000000100 ) ) ; +#2983 = EDGE_CURVE ( 'NONE', #543, #1415, #1225, .T. ) ; +#2984 = CARTESIAN_POINT ( 'NONE', ( -0.7999999999999999300, 1.037500000000000100, -1.449999999999999700 ) ) ; +#2985 = VECTOR ( 'NONE', #1571, 1000.000000000000000 ) ; +#2986 = CIRCLE ( 'NONE', #1032, 0.1599999999999999800 ) ; +#2987 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 0.7500000000000002200 ) ) ; +#2988 = FACE_OUTER_BOUND ( 'NONE', #348, .T. ) ; +#2989 = ORIENTED_EDGE ( 'NONE', *, *, #2201, .T. ) ; +#2990 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, -0.7499999999999997800 ) ) ; +#2991 = EDGE_CURVE ( 'NONE', #2347, #355, #1461, .T. ) ; +#2992 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2993 = PLANE ( 'NONE', #648 ) ; +#2994 = LINE ( 'NONE', #1983, #1014 ) ; +#2995 = EDGE_CURVE ( 'NONE', #1206, #909, #2787, .T. ) ; +#2996 = ORIENTED_EDGE ( 'NONE', *, *, #8, .T. ) ; +#2997 = CIRCLE ( 'NONE', #591, 0.04999999999999991300 ) ; +#2998 = PLANE ( 'NONE', #1125 ) ; +#2999 = EDGE_LOOP ( 'NONE', ( #2073, #2455, #793, #3163 ) ) ; +#3000 = VERTEX_POINT ( 'NONE', #2676 ) ; +#3001 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#3002 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3003 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3004 = ORIENTED_EDGE ( 'NONE', *, *, #1599, .T. ) ; +#3005 = EDGE_LOOP ( 'NONE', ( #127, #816, #1528, #2546 ) ) ; +#3006 = ORIENTED_EDGE ( 'NONE', *, *, #1269, .T. ) ; +#3007 = ORIENTED_EDGE ( 'NONE', *, *, #1026, .F. ) ; +#3008 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3009 = EDGE_CURVE ( 'NONE', #1231, #1141, #2119, .T. ) ; +#3010 = VERTEX_POINT ( 'NONE', #1691 ) ; +#3011 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3012 = SURFACE_SIDE_STYLE ('',( #2428 ) ) ; +#3013 = VERTEX_POINT ( 'NONE', #265 ) ; +#3014 = DIRECTION ( 'NONE', ( -0.9848077530122080200, 0.1736481776669307200, -3.681830018263463400E-017 ) ) ; +#3015 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#3016 = VECTOR ( 'NONE', #1191, 1000.000000000000100 ) ; +#3017 = SURFACE_SIDE_STYLE ('',( #1160 ) ) ; +#3018 = PRESENTATION_STYLE_ASSIGNMENT (( #3180 ) ) ; +#3019 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3020 = LINE ( 'NONE', #2457, #2436 ) ; +#3021 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3022 = DIRECTION ( 'NONE', ( -0.06975647374412528900, -0.9975640502598242000, 0.0000000000000000000 ) ) ; +#3023 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2236 ), #805 ) ; +#3024 = PLANE ( 'NONE', #1342 ) ; +#3025 = DIRECTION ( 'NONE', ( -3.738628180984499500E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3026 = LINE ( 'NONE', #2947, #404 ) ; +#3027 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, 1.150000000000000100 ) ) ; +#3028 = ORIENTED_EDGE ( 'NONE', *, *, #832, .F. ) ; +#3029 = CARTESIAN_POINT ( 'NONE', ( 1.101674689986038300, 0.1704955453903094200, -0.1999999999999997600 ) ) ; +#3030 = EDGE_LOOP ( 'NONE', ( #118, #575, #3172, #2966 ) ) ; +#3031 = VECTOR ( 'NONE', #2345, 1000.000000000000000 ) ; +#3032 = ORIENTED_EDGE ( 'NONE', *, *, #1909, .T. ) ; +#3033 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, 1.150000000000000100 ) ) ; +#3034 = AXIS2_PLACEMENT_3D ( 'NONE', #2094, #143, #1085 ) ; +#3035 = LINE ( 'NONE', #104, #1049 ) ; +#3036 = EDGE_CURVE ( 'NONE', #122, #2426, #2352, .T. ) ; +#3037 = EDGE_CURVE ( 'NONE', #85, #3013, #1696, .T. ) ; +#3038 = DIRECTION ( 'NONE', ( 0.9986295347545739400, -0.05233595624294376500, 0.0000000000000000000 ) ) ; +#3039 = CYLINDRICAL_SURFACE ( 'NONE', #1233, 0.01000000000000002600 ) ; +#3040 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3041 = VERTEX_POINT ( 'NONE', #748 ) ; +#3042 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3043 = EDGE_CURVE ( 'NONE', #1127, #2658, #1387, .T. ) ; +#3044 = ORIENTED_EDGE ( 'NONE', *, *, #3111, .T. ) ; +#3045 = CARTESIAN_POINT ( 'NONE', ( -1.102372254723479500, 0.1804711858929076700, 1.150000000000000100 ) ) ; +#3046 = ORIENTED_EDGE ( 'NONE', *, *, #1333, .T. ) ; +#3047 = SURFACE_SIDE_STYLE ('',( #38 ) ) ; +#3048 = EDGE_LOOP ( 'NONE', ( #2722, #682, #1732, #3092 ) ) ; +#3049 = EDGE_CURVE ( 'NONE', #1543, #1833, #627, .T. ) ; +#3050 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3051 = ORIENTED_EDGE ( 'NONE', *, *, #619, .T. ) ; +#3052 = CARTESIAN_POINT ( 'NONE', ( 1.102372254723479500, 0.1804711858929076700, 0.2000000000000002100 ) ) ; +#3053 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 1.037500000000000100, 1.150000000000000100 ) ) ; +#3054 = ORIENTED_EDGE ( 'NONE', *, *, #2931, .T. ) ; +#3055 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3056 = ORIENTED_EDGE ( 'NONE', *, *, #2415, .T. ) ; +#3057 = ORIENTED_EDGE ( 'NONE', *, *, #1033, .T. ) ; +#3058 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8375000000000000200, -0.7499999999999997800 ) ) ; +#3059 = PLANE ( 'NONE', #2338 ) ; +#3060 = EDGE_CURVE ( 'NONE', #2426, #1103, #2197, .T. ) ; +#3061 = VERTEX_POINT ( 'NONE', #2198 ) ; +#3062 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3063 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1991 ) ) ; +#3064 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, -1.149999999999999700 ) ) ; +#3065 = FACE_OUTER_BOUND ( 'NONE', #2749, .T. ) ; +#3066 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.880642008201783800E-015, -0.0000000000000000000 ) ) ; +#3067 = ADVANCED_FACE ( 'NONE', ( #661 ), #1177, .F. ) ; +#3068 = VECTOR ( 'NONE', #1525, 1000.000000000000100 ) ; +#3069 = PLANE ( 'NONE', #1962 ) ; +#3070 = SURFACE_STYLE_USAGE ( .BOTH. , #3047 ) ; +#3071 = LINE ( 'NONE', #2784, #855 ) ; +#3072 = DIRECTION ( 'NONE', ( 0.06975647374412528900, -0.9975640502598242000, -0.0000000000000000000 ) ) ; +#3073 = VECTOR ( 'NONE', #2402, 1000.000000000000000 ) ; +#3074 = AXIS2_PLACEMENT_3D ( 'NONE', #2794, #2551, #352 ) ; +#3075 = ORIENTED_EDGE ( 'NONE', *, *, #2931, .F. ) ; +#3076 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3077 = AXIS2_PLACEMENT_3D ( 'NONE', #173, #1091, #1105 ) ; +#3078 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3079 = VECTOR ( 'NONE', #2331, 1000.000000000000000 ) ; +#3080 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3081 = CARTESIAN_POINT ( 'NONE', ( -1.399999999999999900, 0.1496346075389737300, 0.2000000000000002100 ) ) ; +#3082 = VECTOR ( 'NONE', #454, 1000.000000000000000 ) ; +#3083 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 1.037500000000000100, -0.7499999999999997800 ) ) ; +#3084 = ORIENTED_EDGE ( 'NONE', *, *, #637, .T. ) ; +#3085 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3086 = ADVANCED_FACE ( 'NONE', ( #739 ), #506, .T. ) ; +#3087 = ORIENTED_EDGE ( 'NONE', *, *, #2041, .F. ) ; +#3088 = VERTEX_POINT ( 'NONE', #705 ) ; +#3089 = ORIENTED_EDGE ( 'NONE', *, *, #2200, .T. ) ; +#3090 = CARTESIAN_POINT ( 'NONE', ( 0.7999999999999999300, 0.8874999999999999600, -1.449999999999999700 ) ) ; +#3091 = DIRECTION ( 'NONE', ( -0.9975640502598243100, -0.06975647374412515000, 0.0000000000000000000 ) ) ; +#3092 = ORIENTED_EDGE ( 'NONE', *, *, #927, .T. ) ; +#3093 = CARTESIAN_POINT ( 'NONE', ( -0.9425915291627476900, 0.1720974328940367000, 1.150000000000000100 ) ) ; +#3094 = ORIENTED_EDGE ( 'NONE', *, *, #1413, .T. ) ; +#3095 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133572400, 0.7500000000000002200 ) ) ; +#3096 = ORIENTED_EDGE ( 'NONE', *, *, #3036, .F. ) ; +#3097 = EDGE_LOOP ( 'NONE', ( #2963, #2379, #2144, #2803 ) ) ; +#3098 = AXIS2_PLACEMENT_3D ( 'NONE', #2326, #3076, #1343 ) ; +#3099 = ORIENTED_EDGE ( 'NONE', *, *, #1454, .F. ) ; +#3100 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3101 = ORIENTED_EDGE ( 'NONE', *, *, #3146, .F. ) ; +#3102 = ADVANCED_FACE ( 'NONE', ( #1927 ), #1427, .T. ) ; +#3103 = VECTOR ( 'NONE', #2272, 999.9999999999998900 ) ; +#3104 = AXIS2_PLACEMENT_3D ( 'NONE', #3135, #664, #2664 ) ; +#3105 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, 1.150000000000000100 ) ) ; +#3106 = EDGE_CURVE ( 'NONE', #241, #448, #1349, .T. ) ; +#3107 = CIRCLE ( 'NONE', #2948, 0.1599999999999999800 ) ; +#3108 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133569600, 0.2000000000000002100 ) ) ; +#3109 = LINE ( 'NONE', #2229, #65 ) ; +#3110 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3111 = EDGE_CURVE ( 'NONE', #3061, #125, #701, .T. ) ; +#3112 = LINE ( 'NONE', #798, #1857 ) ; +#3113 = DIRECTION ( 'NONE', ( -0.05233595624294376500, 0.9986295347545739400, 0.0000000000000000000 ) ) ; +#3114 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3115 = FACE_OUTER_BOUND ( 'NONE', #2462, .T. ) ; +#3116 = DIRECTION ( 'NONE', ( 1.880642008201783800E-015, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3117 = SURFACE_STYLE_FILL_AREA ( #2395 ) ; +#3118 = PLANE ( 'NONE', #330 ) ; +#3119 = ADVANCED_FACE ( 'NONE', ( #214 ), #134, .F. ) ; +#3120 = VECTOR ( 'NONE', #114, 1000.000000000000000 ) ; +#3121 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3122 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3123 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, 1.150000000000000100 ) ) ; +#3124 = CIRCLE ( 'NONE', #2699, 0.1599999999999999800 ) ; +#3125 = DIRECTION ( 'NONE', ( -0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#3126 = EDGE_CURVE ( 'NONE', #2414, #1231, #2003, .T. ) ; +#3127 = ORIENTED_EDGE ( 'NONE', *, *, #456, .F. ) ; +#3128 = CYLINDRICAL_SURFACE ( 'NONE', #2589, 0.1000000000000000500 ) ; +#3129 = VERTEX_POINT ( 'NONE', #50 ) ; +#3130 = DIRECTION ( 'NONE', ( 0.9975640502598242000, -0.06975647374412523300, 0.0000000000000000000 ) ) ; +#3131 = ORIENTED_EDGE ( 'NONE', *, *, #2082, .T. ) ; +#3132 = ORIENTED_EDGE ( 'NONE', *, *, #2809, .T. ) ; +#3133 = CARTESIAN_POINT ( 'NONE', ( -0.8576506409915934900, 0.8875000000000000700, -0.7499999999999997800 ) ) ; +#3134 = ORIENTED_EDGE ( 'NONE', *, *, #2327, .T. ) ; +#3135 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 0.8375000000000000200, -0.1999999999999997600 ) ) ; +#3136 = VERTEX_POINT ( 'NONE', #995 ) ; +#3137 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 1.349999999999999900, -1.149999999999999700 ) ) ; +#3138 = ORIENTED_EDGE ( 'NONE', *, *, #192, .T. ) ; +#3139 = CARTESIAN_POINT ( 'NONE', ( -1.091211218924419600, 0.02086093785133572400, 1.150000000000000100 ) ) ; +#3140 = ORIENTED_EDGE ( 'NONE', *, *, #2890, .F. ) ; +#3141 = LINE ( 'NONE', #2101, #176 ) ; +#3142 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3143 = AXIS2_PLACEMENT_3D ( 'NONE', #100, #3062, #3011 ) ; +#3144 = LINE ( 'NONE', #1625, #2164 ) ; +#3145 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3146 = EDGE_CURVE ( 'NONE', #867, #2184, #17, .T. ) ; +#3147 = VECTOR ( 'NONE', #2062, 1000.000000000000000 ) ; +#3148 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, 1.150000000000000100 ) ) ; +#3149 = FACE_OUTER_BOUND ( 'NONE', #2586, .T. ) ; +#3150 = CIRCLE ( 'NONE', #3104, 0.1999999999999999800 ) ; +#3151 = CARTESIAN_POINT ( 'NONE', ( 0.8576506409915934900, 1.037500000000000100, 0.2000000000000002100 ) ) ; +#3152 = CARTESIAN_POINT ( 'NONE', ( 0.8000000000000000400, 0.8874999999999999600, 1.150000000000000100 ) ) ; +#3153 = EDGE_CURVE ( 'NONE', #884, #765, #1224, .T. ) ; +#3154 = CIRCLE ( 'NONE', #1674, 0.1999999999999999800 ) ; +#3155 = SURFACE_SIDE_STYLE ('',( #2552 ) ) ; +#3156 = ORIENTED_EDGE ( 'NONE', *, *, #1052, .F. ) ; +#3157 = LINE ( 'NONE', #1549, #1051 ) ; +#3158 = FILL_AREA_STYLE_COLOUR ( '', #2010 ) ; +#3159 = ORIENTED_EDGE ( 'NONE', *, *, #2206, .T. ) ; +#3160 = CARTESIAN_POINT ( 'NONE', ( -0.8000000000000000400, 0.8874999999999999600, -0.1999999999999997600 ) ) ; +#3161 = LINE ( 'NONE', #384, #1171 ) ; +#3162 = EDGE_CURVE ( 'NONE', #831, #90, #2161, .T. ) ; +#3163 = ORIENTED_EDGE ( 'NONE', *, *, #2672, .T. ) ; +#3164 = ORIENTED_EDGE ( 'NONE', *, *, #351, .F. ) ; +#3165 = ORIENTED_EDGE ( 'NONE', *, *, #503, .F. ) ; +#3166 = FILL_AREA_STYLE ('',( #2148 ) ) ; +#3167 = VERTEX_POINT ( 'NONE', #2251 ) ; +#3168 = EDGE_CURVE ( 'NONE', #2146, #2616, #887, .T. ) ; +#3169 = ORIENTED_EDGE ( 'NONE', *, *, #2009, .F. ) ; +#3170 = CARTESIAN_POINT ( 'NONE', ( 1.057376547942508300, 0.8479671912485887700, 0.2000000000000002100 ) ) ; +#3171 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.9848077530122080200, 0.1736481776669307200 ) ) ; +#3172 = ORIENTED_EDGE ( 'NONE', *, *, #2244, .T. ) ; +#3173 = DIRECTION ( 'NONE', ( -0.05233595624294376500, -0.9986295347545739400, 0.0000000000000000000 ) ) ; +#3174 = ADVANCED_FACE ( 'NONE', ( #3177 ), #1736, .T. ) ; +#3175 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3176 = ORIENTED_EDGE ( 'NONE', *, *, #782, .T. ) ; +#3177 = FACE_OUTER_BOUND ( 'NONE', #2, .T. ) ; +#3178 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2006 ) ) ; +#3179 = CYLINDRICAL_SURFACE ( 'NONE', #196, 0.04999999999999991300 ) ; +#3180 = SURFACE_STYLE_USAGE ( .BOTH. , #468 ) ; +#3181 = EDGE_CURVE ( 'NONE', #1689, #1762, #774, .T. ) ; +#3182 = DIRECTION ( 'NONE', ( 0.9975640502598243100, 0.06975647374412523300, -0.0000000000000000000 ) ) ; +#3183 = CARTESIAN_POINT ( 'NONE', ( -1.057376547942508300, 0.8479671912485887700, 0.7500000000000002200 ) ) ; +#3184 = VECTOR ( 'NONE', #2044, 1000.000000000000000 ) ; +#3185 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3186 = VECTOR ( 'NONE', #955, 1000.000000000000000 ) ; +#3187 = ORIENTED_EDGE ( 'NONE', *, *, #1932, .F. ) ; +#3188 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3189 = CARTESIAN_POINT ( 'NONE', ( 1.389536528938381200, -2.681463464988489800E-017, 0.2000000000000002100 ) ) ; +#3190 = CYLINDRICAL_SURFACE ( 'NONE', #616, 0.04999999999999991300 ) ; +#3191 = FACE_OUTER_BOUND ( 'NONE', #989, .T. ) ; +#3192 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3193 = ADVANCED_FACE ( 'NONE', ( #476 ), #2479, .T. ) ; +#3194 = CARTESIAN_POINT ( 'NONE', ( 1.091211218924419600, 0.02086093785133572400, -0.7499999999999997800 ) ) ; +#3195 = AXIS2_PLACEMENT_3D ( 'NONE', #1733, #2441, #744 ) ; +#3196 = VECTOR ( 'NONE', #2537, 1000.000000000000000 ) ; +#3197 = ORIENTED_EDGE ( 'NONE', *, *, #1146, .T. ) ; +#3198 = FACE_OUTER_BOUND ( 'NONE', #3030, .T. ) ; +#3199 = DIRECTION ( 'NONE', ( -0.05233595624294376500, 0.9986295347545739400, 0.0000000000000000000 ) ) ; +ENDSEC; +END-ISO-10303-21; diff --git a/Hardware/FabReader2/Library/DW01A/License.txt b/Hardware/FabReader2/Library/DW01A/License.txt new file mode 100644 index 0000000..9cb6384 --- /dev/null +++ b/Hardware/FabReader2/Library/DW01A/License.txt @@ -0,0 +1,24 @@ +BY ACCESSING OR USING THESE SYMBOLS & FOOTPRINTS ("MODELS"), YOU ARE ACKNOWLEDGING THAT YOU HAVE READ, FULLY UNDERSTAND AND AGREE TO THESE TERMS AND CONDITIONS (the "Agreement"), WHICH CONSTITUTE A BINDING AGREEMENT BETWEEN YOU AND SNAPEDA, INC., ENTERED INTO ON THE DATE OF SUCH OCCURRENCE (the "Effective Date"). IF YOU ARE ACCESSING OR USING THESE FILES ON BEHALF OF AN ENTITY, YOU REPRESENT THAT YOU HAVE THE RIGHT, AUTHORITY, AND CAPACITY TO BIND SUCH ENTITY TO THIS AGREEMENT AND HEREBY DO SO. IF YOU DO NOT AGREE WITH ANY OF THE TERMS OR CONDITIONS OF THIS AGREEMENT, YOU MUST NOT USE ANY PART OF THESE MODELS. + +1. Design License + +You and your sub-licensees are hereby licensed to design, manufacture, use and distribute, circuit board designs and circuit boards formed by combining Models provided by SnapEDA with other circuit elements of your choosing. You may then convey such combinations under licensing terms of your choice.  + +Individual Models remain the intellectual property of SnapEDA, Inc. You shall not (and shall not permit or encourage any third party to) to do any of the following : + +(a) sell, assign, lease, lend, rent, issue, sublicense, make available, or otherwise distribute to any third party, or publicly perform, display or communicate, the Models (for example, by uploading Models to another website or software application);
 +(b) remove, alter, or conceal, any copyright, trademark, or other proprietary rights notice or legend displayed or contained in the individual Models. + +For further clarity, once integrated into a schematic design or PCB layout, Models may be modified freely for the purpose of designing a circuit board.  + + +2. Limitation of Liability + +IN NO EVENT WILL SNAPEDA OR OUR SUBSIDIARIES, AGENTS, SUCCESSORS, THIRD PARTY PROVIDERS, AND/OR ANY OF THE FOREGOING ENTITIES' RESPECTIVE DIRECTORS, OFFICERS, EMPLOYEES, AGENTS, REPRESENTATIVES, CUSTOMERS, SUPPLIERS, OR LICENSORS BE RESPONSIBLE OR LIABLE UNDER, OR OTHERWISE IN CONNECTION WITH THIS AGREEMENT, FOR: + +(a) ANY CONSEQUENTIAL, INDIRECT, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES; +(b) ANY LOSS OF PROFITS, LOSS OF BUSINESS, LOSS OF REVENUE, OR LOSS OF ANTICIPATED SAVINGS; +(c) ANY LOSS OF, OR DAMAGE TO, DATA, REPUTATION, OR GOODWILL; AND/OR +(d) THE COST OF PROCURING ANY SUBSTITUTE GOODS OR SERVICES. + +THE COMBINED AGGREGATE LIABILITY OF SNAPEDA AND ALL SNAPEDA CONTENT AFFILIATES UNDER, OR OTHERWISE IN CONNECTION WITH, THIS AGREEMENT SHALL NOT EXCEED THE TOTAL AMOUNT OF FEES RECEIVED BY SNAPEDA FROM YOU IN THE PREVIOUS TWELVE (12) MONTHS. THE FOREGOING EXCLUSIONS AND LIMITATIONS SHALL APPLY: (a) EVEN IF SNAPEDA OR ANY SNAPEDA CONTENT AFFILIATE HAS BEEN ADVISED, OR SHOULD HAVE BEEN AWARE, OF THE POSSIBILITY OF LOSSES, DAMAGES, OR COSTS; (b) EVEN IF ANY REMEDY IN THIS AGREEMENT FAILS OF ITS ESSENTIAL PURPOSE; AND (c) REGARDLESS OF THE THEORY OR BASIS OF LIABILITY (INCLUDING WITHOUT LIMITATION BREACH OF CONTRACT, TORT, NEGLIGENCE, AND STRICT LIABILITY). \ No newline at end of file diff --git a/Hardware/FabReader2/Library/DW01A/SOT23-6.kicad_mod b/Hardware/FabReader2/Library/DW01A/SOT23-6.kicad_mod new file mode 100644 index 0000000..538fbb0 --- /dev/null +++ b/Hardware/FabReader2/Library/DW01A/SOT23-6.kicad_mod @@ -0,0 +1,76 @@ + +(module SOT23-6 (layer F.Cu) (tedit 6269D727) + (descr "") + (fp_text reference REF** (at 1.27 -2.54 0) (layer F.SilkS) + (effects (font (size 1.0 1.0) (thickness 0.15))) + ) + (fp_text value SOT23-6 (at 2.54 2.794 0) (layer F.Fab) + (effects (font (size 1.0 1.0) (thickness 0.15))) + ) + (pad 1 smd rect (at -0.95 1.3) (size 0.55 1.2) (layers F.Cu F.Mask F.Paste)) + (pad 2 smd rect (at 0.0 1.3) (size 0.55 1.2) (layers F.Cu F.Mask F.Paste)) + (pad 3 smd rect (at 0.95 1.3) (size 0.55 1.2) (layers F.Cu F.Mask F.Paste)) + (pad 4 smd rect (at 0.95 -1.3) (size 0.55 1.2) (layers F.Cu F.Mask F.Paste)) + (pad 6 smd rect (at -0.95 -1.3) (size 0.55 1.2) (layers F.Cu F.Mask F.Paste)) + (pad 5 smd rect (at 0.0 -1.3) (size 0.55 1.2) (layers F.Cu F.Mask F.Paste)) + (fp_line (start 1.422 -0.81) (end 1.422 0.81) (layer F.SilkS) (width 0.1524)) + (fp_line (start 1.422 0.81) (end -1.422 0.81) (layer F.Fab) (width 0.1524)) + (fp_line (start -1.422 0.81) (end -1.422 -0.81) (layer F.SilkS) (width 0.1524)) + (fp_line (start -1.422 -0.81) (end 1.422 -0.81) (layer F.Fab) (width 0.1524)) + (fp_line (start -0.522 -0.81) (end 0.522 -0.81) (layer F.SilkS) (width 0.1524)) + (fp_line (start -0.428 0.81) (end -0.522 0.81) (layer F.SilkS) (width 0.1524)) + (fp_line (start 0.522 0.81) (end 0.428 0.81) (layer F.SilkS) (width 0.1524)) + (fp_line (start -1.328 0.81) (end -1.422 0.81) (layer F.SilkS) (width 0.1524)) + (fp_line (start 1.422 0.81) (end 1.328 0.81) (layer F.SilkS) (width 0.1524)) + (fp_line (start 1.328 -0.81) (end 1.422 -0.81) (layer F.SilkS) (width 0.1524)) + (fp_line (start -1.422 -0.81) (end -1.328 -0.81) (layer F.SilkS) (width 0.1524)) + (fp_circle (center -1.0 0.3) (end -0.9 0.3) (layer F.SilkS) (width 0.127)) + (fp_poly + (pts + (xy -1.2 0.85) + (xy -0.7 0.85) + (xy -0.7 1.5) + (xy -1.2 1.5) + ) (layer F.Fab) (width 0.01) + ) + (fp_poly + (pts + (xy -0.25 0.85) + (xy 0.25 0.85) + (xy 0.25 1.5) + (xy -0.25 1.5) + ) (layer F.Fab) (width 0.01) + ) + (fp_poly + (pts + (xy 0.7 0.85) + (xy 1.2 0.85) + (xy 1.2 1.5) + (xy 0.7 1.5) + ) (layer F.Fab) (width 0.01) + ) + (fp_poly + (pts + (xy 0.7 -1.5) + (xy 1.2 -1.5) + (xy 1.2 -0.85) + (xy 0.7 -0.85) + ) (layer F.Fab) (width 0.01) + ) + (fp_poly + (pts + (xy -1.2 -1.5) + (xy -0.7 -1.5) + (xy -0.7 -0.85) + (xy -1.2 -0.85) + ) (layer F.Fab) (width 0.01) + ) + (fp_poly + (pts + (xy -0.3 -1.5) + (xy 0.2 -1.5) + (xy 0.2 -0.85) + (xy -0.3 -0.85) + ) (layer F.Fab) (width 0.01) + ) +) \ No newline at end of file diff --git a/Hardware/FabReader2/Library/DW01A/how-to-import.htm b/Hardware/FabReader2/Library/DW01A/how-to-import.htm new file mode 100644 index 0000000..19e484d --- /dev/null +++ b/Hardware/FabReader2/Library/DW01A/how-to-import.htm @@ -0,0 +1 @@ + Page Redirection If you are not redirected automatically, follow this link to the import guide. \ No newline at end of file diff --git a/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/ESP32-C3-WROOM-02-H4.kicad_sym b/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/ESP32-C3-WROOM-02-H4.kicad_sym new file mode 100644 index 0000000..087f897 --- /dev/null +++ b/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/ESP32-C3-WROOM-02-H4.kicad_sym @@ -0,0 +1,193 @@ +(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor) + (symbol "ESP32-C3-WROOM-02-H4" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) + (property "Reference" "U" (id 0) (at -12.7 21.082 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Value" "ESP32-C3-WROOM-02-H4" (id 1) (at -12.7 -18.542 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Footprint" "MODULE_ESP32-C3-WROOM-02-H4" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "Datasheet" "" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "STANDARD" "Manufacturer Recommendations" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "MAXIMUM_PACKAGE_HEIGHT" "3.35 mm" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "MANUFACTURER" "Espressif" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "PARTREV" "V1.0" (id 7) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "ki_locked" "" (id 8) (at 0 0 0) + (effects (font (size 1.27 1.27))) + ) + (symbol "ESP32-C3-WROOM-02-H4_0_0" + (rectangle (start -12.7 -17.78) (end 12.7 20.32) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type background)) + ) + (pin power_in line (at 17.78 17.78 180) (length 5.08) + (name "3V3" (effects (font (size 1.016 1.016)))) + (number "1" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 17.78 2.54 180) (length 5.08) + (name "IO10" (effects (font (size 1.016 1.016)))) + (number "10" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at -17.78 -12.7 0) (length 5.08) + (name "RXD" (effects (font (size 1.016 1.016)))) + (number "11" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at -17.78 -10.16 0) (length 5.08) + (name "TXD" (effects (font (size 1.016 1.016)))) + (number "12" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 17.78 0 180) (length 5.08) + (name "IO18" (effects (font (size 1.016 1.016)))) + (number "13" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 17.78 -2.54 180) (length 5.08) + (name "IO19" (effects (font (size 1.016 1.016)))) + (number "14" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at -17.78 2.54 0) (length 5.08) + (name "IO3" (effects (font (size 1.016 1.016)))) + (number "15" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at -17.78 5.08 0) (length 5.08) + (name "IO2" (effects (font (size 1.016 1.016)))) + (number "16" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at -17.78 7.62 0) (length 5.08) + (name "IO1" (effects (font (size 1.016 1.016)))) + (number "17" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at -17.78 10.16 0) (length 5.08) + (name "IO0" (effects (font (size 1.016 1.016)))) + (number "18" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "19" (effects (font (size 1.016 1.016)))) + ) + (pin input line (at -17.78 15.24 0) (length 5.08) + (name "EN" (effects (font (size 1.016 1.016)))) + (number "2" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "20" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "21" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "22" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "23" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "24" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "25" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "26" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "27" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "28" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "29" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at -17.78 0 0) (length 5.08) + (name "IO4" (effects (font (size 1.016 1.016)))) + (number "3" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "30" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "31" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "32" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "33" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "34" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "35" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "36" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "37" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "38" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "39" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at -17.78 -2.54 0) (length 5.08) + (name "IO5" (effects (font (size 1.016 1.016)))) + (number "4" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at -17.78 -5.08 0) (length 5.08) + (name "IO6" (effects (font (size 1.016 1.016)))) + (number "5" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 17.78 10.16 180) (length 5.08) + (name "IO7" (effects (font (size 1.016 1.016)))) + (number "6" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 17.78 7.62 180) (length 5.08) + (name "IO8" (effects (font (size 1.016 1.016)))) + (number "7" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 17.78 5.08 180) (length 5.08) + (name "IO9" (effects (font (size 1.016 1.016)))) + (number "8" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "9" (effects (font (size 1.016 1.016)))) + ) + ) + ) +) diff --git a/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/ESP32-C3-WROOM-02-H4.lib b/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/ESP32-C3-WROOM-02-H4.lib new file mode 100644 index 0000000..ee85527 --- /dev/null +++ b/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/ESP32-C3-WROOM-02-H4.lib @@ -0,0 +1,61 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +#(c) SnapEDA 2016 (snapeda.com) +#This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Design Exception 1.0 +# +# ESP32-C3-WROOM-02-H4 +# +DEF ESP32-C3-WROOM-02-H4 U 0 40 Y Y 1 L N +F0 "U" -500 830 50 H V L BNN +F1 "ESP32-C3-WROOM-02-H4" -500 -730 50 H V L BNN +F2 "MODULE_ESP32-C3-WROOM-02-H4" 0 0 50 H I L BNN +F3 "" 0 0 50 H I L BNN +F4 "Manufacturer Recommendations" 0 0 50 H I L BNN "STANDARD" +F5 "3.35 mm" 0 0 50 H I L BNN "MAXIMUM_PACKAGE_HEIGHT" +F6 "Espressif" 0 0 50 H I L BNN "MANUFACTURER" +F7 "V1.0" 0 0 50 H I L BNN "PARTREV" +DRAW +S -500 -700 500 800 0 0 10 f +X 3V3 1 700 700 200 L 40 40 0 0 W +X EN 2 -700 600 200 R 40 40 0 0 I +X GND 9 700 -600 200 L 40 40 0 0 W +X GND 19 700 -600 200 L 40 40 0 0 W +X GND 20 700 -600 200 L 40 40 0 0 W +X GND 21 700 -600 200 L 40 40 0 0 W +X GND 22 700 -600 200 L 40 40 0 0 W +X GND 23 700 -600 200 L 40 40 0 0 W +X GND 24 700 -600 200 L 40 40 0 0 W +X GND 25 700 -600 200 L 40 40 0 0 W +X GND 26 700 -600 200 L 40 40 0 0 W +X GND 27 700 -600 200 L 40 40 0 0 W +X GND 28 700 -600 200 L 40 40 0 0 W +X GND 29 700 -600 200 L 40 40 0 0 W +X GND 30 700 -600 200 L 40 40 0 0 W +X GND 31 700 -600 200 L 40 40 0 0 W +X GND 32 700 -600 200 L 40 40 0 0 W +X GND 33 700 -600 200 L 40 40 0 0 W +X GND 34 700 -600 200 L 40 40 0 0 W +X GND 35 700 -600 200 L 40 40 0 0 W +X GND 36 700 -600 200 L 40 40 0 0 W +X GND 37 700 -600 200 L 40 40 0 0 W +X GND 38 700 -600 200 L 40 40 0 0 W +X GND 39 700 -600 200 L 40 40 0 0 W +X IO0 18 -700 400 200 R 40 40 0 0 B +X IO1 17 -700 300 200 R 40 40 0 0 B +X IO2 16 -700 200 200 R 40 40 0 0 B +X IO3 15 -700 100 200 R 40 40 0 0 B +X IO4 3 -700 0 200 R 40 40 0 0 B +X IO5 4 -700 -100 200 R 40 40 0 0 B +X IO6 5 -700 -200 200 R 40 40 0 0 B +X IO7 6 700 400 200 L 40 40 0 0 B +X IO8 7 700 300 200 L 40 40 0 0 B +X IO9 8 700 200 200 L 40 40 0 0 B +X IO10 10 700 100 200 L 40 40 0 0 B +X IO18 13 700 0 200 L 40 40 0 0 B +X IO19 14 700 -100 200 L 40 40 0 0 B +X TXD 12 -700 -400 200 R 40 40 0 0 B +X RXD 11 -700 -500 200 R 40 40 0 0 B +ENDDRAW +ENDDEF +# +# End Library \ No newline at end of file diff --git a/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/ESP32-C3-WROOM-02-H4.step b/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/ESP32-C3-WROOM-02-H4.step new file mode 100644 index 0000000..4224a8e --- /dev/null +++ b/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/ESP32-C3-WROOM-02-H4.step @@ -0,0 +1,15939 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP214' ), + '1' ); +FILE_NAME ('ESP32-C3-WROOM-02-H4.STEP', + '2021-12-29T02:45:04', + ( '' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2017', + '' ); +FILE_SCHEMA (( 'AUTOMOTIVE_DESIGN' )); +ENDSEC; + +DATA; +#1 = LINE ( 'NONE', #10879, #7639 ) ; +#2 = VERTEX_POINT ( 'NONE', #15070 ) ; +#3 = EDGE_CURVE ( 'NONE', #11408, #5687, #12958, .T. ) ; +#4 = PLANE ( 'NONE', #7922 ) ; +#5 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7 = ORIENTED_EDGE ( 'NONE', *, *, #10446, .F. ) ; +#8 = AXIS2_PLACEMENT_3D ( 'NONE', #954, #14173, #10554 ) ; +#9 = VERTEX_POINT ( 'NONE', #14010 ) ; +#10 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#11 = ORIENTED_EDGE ( 'NONE', *, *, #14045, .F. ) ; +#12 = VERTEX_POINT ( 'NONE', #15217 ) ; +#13 = VECTOR ( 'NONE', #6573, 1000.000000000000000 ) ; +#14 = EDGE_CURVE ( 'NONE', #9239, #566, #762, .T. ) ; +#15 = LINE ( 'NONE', #3668, #9185 ) ; +#16 = FACE_OUTER_BOUND ( 'NONE', #10691, .T. ) ; +#17 = VECTOR ( 'NONE', #6391, 1000.000000000000000 ) ; +#18 = AXIS2_PLACEMENT_3D ( 'NONE', #3922, #4024, #6436 ) ; +#19 = SURFACE_SIDE_STYLE ('',( #14905 ) ) ; +#20 = LINE ( 'NONE', #2782, #15588 ) ; +#21 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, -0.1749999999999989300 ) ) ; +#22 = PLANE ( 'NONE', #13089 ) ; +#23 = ORIENTED_EDGE ( 'NONE', *, *, #15128, .F. ) ; +#24 = ADVANCED_FACE ( 'NONE', ( #9748 ), #10333, .F. ) ; +#25 = ORIENTED_EDGE ( 'NONE', *, *, #9821, .T. ) ; +#26 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 2.050000000000001600 ) ) ; +#27 = VERTEX_POINT ( 'NONE', #10273 ) ; +#28 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 7.150000000000000400 ) ) ; +#29 = CARTESIAN_POINT ( 'NONE', ( 7.581040100843955200, 3.317458334292938000, -2.936844258255254700 ) ) ; +#30 = EDGE_CURVE ( 'NONE', #12853, #4253, #8977, .T. ) ; +#31 = EDGE_LOOP ( 'NONE', ( #1492, #12851, #3257, #8682, #14152, #13251 ) ) ; +#32 = LINE ( 'NONE', #12189, #1745 ) ; +#33 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, 7.150000000000000400 ) ) ; +#34 = FACE_OUTER_BOUND ( 'NONE', #7834, .T. ) ; +#35 = FACE_OUTER_BOUND ( 'NONE', #4975, .T. ) ; +#36 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#37 = CLOSED_SHELL ( 'NONE', ( #11510, #2101, #3798, #14158, #8848, #12629, #1080, #9283, #9377, #14243 ) ) ; +#38 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, -0.3500000000000004800 ) ) ; +#39 = ADVANCED_FACE ( 'NONE', ( #4025 ), #5395, .T. ) ; +#40 = EDGE_CURVE ( 'NONE', #3619, #7264, #14505, .T. ) ; +#41 = ORIENTED_EDGE ( 'NONE', *, *, #10934, .F. ) ; +#42 = AXIS2_PLACEMENT_3D ( 'NONE', #1012, #2230, #13145 ) ; +#43 = ORIENTED_EDGE ( 'NONE', *, *, #12435, .F. ) ; +#44 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#45 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999921500, 0.4000000000000000200, 2.050000000000004300 ) ) ; +#46 = LINE ( 'NONE', #14448, #8448 ) ; +#47 = LINE ( 'NONE', #12714, #793 ) ; +#48 = FACE_OUTER_BOUND ( 'NONE', #406, .T. ) ; +#49 = LINE ( 'NONE', #11728, #4812 ) ; +#50 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.7000000000000009500, -6.100000000000001400 ) ) ; +#51 = ORIENTED_EDGE ( 'NONE', *, *, #4902, .T. ) ; +#52 = EDGE_CURVE ( 'NONE', #2678, #1030, #14131, .T. ) ; +#53 = ADVANCED_FACE ( 'NONE', ( #2299 ), #7641, .F. ) ; +#54 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, 6.550000000000001600 ) ) ; +#55 = VERTEX_POINT ( 'NONE', #470 ) ; +#56 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#57 = VERTEX_POINT ( 'NONE', #11447 ) ; +#58 = LINE ( 'NONE', #13835, #1565 ) ; +#59 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, 2.050000000000001600 ) ) ; +#60 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#61 = VECTOR ( 'NONE', #7177, 1000.000000000000000 ) ; +#62 = SURFACE_SIDE_STYLE ('',( #14100 ) ) ; +#63 = ADVANCED_FACE ( 'NONE', ( #10103 ), #14730, .F. ) ; +#64 = VECTOR ( 'NONE', #12575, 1000.000000000000000 ) ; +#65 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000036600, 0.8000000000000000400, -0.9499999999999990700 ) ) ; +#66 = VERTEX_POINT ( 'NONE', #144 ) ; +#67 = EDGE_LOOP ( 'NONE', ( #7113, #10464, #3076, #7888, #2836, #12336 ) ) ; +#68 = ORIENTED_EDGE ( 'NONE', *, *, #15175, .F. ) ; +#69 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, -0.0000000000000000000, -2.449999999999998800 ) ) ; +#70 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#71 = EDGE_CURVE ( 'NONE', #14001, #10355, #5735, .T. ) ; +#72 = VECTOR ( 'NONE', #3675, 1000.000000000000000 ) ; +#73 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.0000000000000000000, 1.849999999999999900 ) ) ; +#74 = EDGE_CURVE ( 'NONE', #5432, #4280, #3643, .T. ) ; +#75 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 8.650000000000000400 ) ) ; +#76 = EDGE_CURVE ( 'NONE', #5928, #6716, #7673, .T. ) ; +#77 = VECTOR ( 'NONE', #6190, 1000.000000000000000 ) ; +#78 = EDGE_LOOP ( 'NONE', ( #14220, #1453, #9731, #8183, #13957, #11203 ) ) ; +#79 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.4000000000000000200, 2.949999999999999300 ) ) ; +#80 = ORIENTED_EDGE ( 'NONE', *, *, #13423, .F. ) ; +#81 = AXIS2_PLACEMENT_3D ( 'NONE', #3369, #11827, #2137 ) ; +#82 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, -1.850000000000001000 ) ) ; +#83 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 5.650000000000000400 ) ) ; +#84 = ORIENTED_EDGE ( 'NONE', *, *, #6783, .T. ) ; +#85 = LINE ( 'NONE', #4622, #5811 ) ; +#86 = EDGE_LOOP ( 'NONE', ( #11238, #8971, #10785, #3153 ) ) ; +#87 = ORIENTED_EDGE ( 'NONE', *, *, #13907, .T. ) ; +#88 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 5.050000000000000700 ) ) ; +#89 = ORIENTED_EDGE ( 'NONE', *, *, #8496, .F. ) ; +#90 = LINE ( 'NONE', #4111, #14549 ) ; +#91 = LINE ( 'NONE', #8896, #7357 ) ; +#92 = ORIENTED_EDGE ( 'NONE', *, *, #4730, .T. ) ; +#93 = EDGE_CURVE ( 'NONE', #7631, #8801, #4405, .T. ) ; +#94 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000005300, 0.8000000000000000400, 7.325000000000002000 ) ) ; +#95 = ADVANCED_FACE ( 'NONE', ( #7655 ), #6605, .F. ) ; +#96 = VERTEX_POINT ( 'NONE', #4999 ) ; +#97 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#98 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, -2.625000000000000400 ) ) ; +#99 = EDGE_LOOP ( 'NONE', ( #5826, #4359, #7029, #3672 ) ) ; +#100 = LINE ( 'NONE', #15762, #11519 ) ; +#101 = VERTEX_POINT ( 'NONE', #12310 ) ; +#103 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#102 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000001800, 0.8000000000000000400, 8.650000000000000400 ) ) ; +#104 = EDGE_CURVE ( 'NONE', #13509, #5403, #1517, .T. ) ; +#105 = VECTOR ( 'NONE', #11412, 1000.000000000000000 ) ; +#106 = VECTOR ( 'NONE', #580, 1000.000000000000000 ) ; +#107 = AXIS2_PLACEMENT_3D ( 'NONE', #5458, #6698, #9143 ) ; +#108 = AXIS2_PLACEMENT_3D ( 'NONE', #11138, #11033, #6103 ) ; +#109 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 0.1000000000000002600 ) ) ; +#110 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.195440985631453300E-016 ) ) ; +#111 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000000700, 9.290000000000000900 ) ) ; +#112 = ORIENTED_EDGE ( 'NONE', *, *, #15587, .F. ) ; +#113 = ADVANCED_FACE ( 'NONE', ( #2689 ), #621, .F. ) ; +#114 = ORIENTED_EDGE ( 'NONE', *, *, #12358, .T. ) ; +#115 = LINE ( 'NONE', #6788, #3158 ) ; +#116 = EDGE_LOOP ( 'NONE', ( #11041, #4401, #2611, #11589 ) ) ; +#117 = PLANE ( 'NONE', #12676 ) ; +#118 = EDGE_CURVE ( 'NONE', #11536, #4106, #10487, .T. ) ; +#119 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 0.3749999999999994400 ) ) ; +#120 = VECTOR ( 'NONE', #3784, 1000.000000000000000 ) ; +#121 = DIRECTION ( 'NONE', ( 1.807003620809173900E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#122 = EDGE_CURVE ( 'NONE', #6152, #2237, #6889, .T. ) ; +#123 = ADVANCED_FACE ( 'NONE', ( #15418 ), #10204, .T. ) ; +#124 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#125 = AXIS2_PLACEMENT_3D ( 'NONE', #6792, #5500, #13964 ) ; +#126 = VERTEX_POINT ( 'NONE', #2850 ) ; +#127 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#128 = ADVANCED_FACE ( 'NONE', ( #379 ), #7896, .T. ) ; +#129 = LINE ( 'NONE', #9977, #501 ) ; +#130 = FACE_OUTER_BOUND ( 'NONE', #12514, .T. ) ; +#131 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 2.050000000000001600 ) ) ; +#132 = EDGE_LOOP ( 'NONE', ( #8992, #11501, #2355, #7536 ) ) ; +#133 = CARTESIAN_POINT ( 'NONE', ( -7.625487921837795100, 3.079455349686084400, 9.086673601807762100 ) ) ; +#134 = EDGE_CURVE ( 'NONE', #5480, #8549, #9732, .T. ) ; +#135 = EDGE_CURVE ( 'NONE', #11324, #15538, #14887, .T. ) ; +#136 = ORIENTED_EDGE ( 'NONE', *, *, #14901, .T. ) ; +#137 = LINE ( 'NONE', #9040, #6634 ) ; +#138 = ORIENTED_EDGE ( 'NONE', *, *, #9686, .F. ) ; +#139 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#140 = LINE ( 'NONE', #4910, #11017 ) ; +#141 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#142 = DIRECTION ( 'NONE', ( -1.548860246407863300E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#143 = VERTEX_POINT ( 'NONE', #5418 ) ; +#144 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999890200, -0.0000000000000000000, -1.850000000000001000 ) ) ; +#145 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8327 ), #6708 ) ; +#147 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 1.637941840314110200, 4.750000000000000000 ) ) ; +#146 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, -0.0000000000000000000, -2.449999999999998800 ) ) ; +#148 = VERTEX_POINT ( 'NONE', #6552 ) ; +#149 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#150 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#151 = VECTOR ( 'NONE', #4080, 1000.000000000000000 ) ; +#152 = ORIENTED_EDGE ( 'NONE', *, *, #13040, .T. ) ; +#153 = ORIENTED_EDGE ( 'NONE', *, *, #10042, .T. ) ; +#154 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13026, 'distance_accuracy_value', 'NONE'); +#155 = EDGE_CURVE ( 'NONE', #4280, #7422, #12940, .T. ) ; +#156 = LINE ( 'NONE', #9482, #13095 ) ; +#157 = LINE ( 'NONE', #7221, #5503 ) ; +#158 = PLANE ( 'NONE', #1278 ) ; +#159 = EDGE_CURVE ( 'NONE', #3613, #14396, #3243, .T. ) ; +#160 = ORIENTED_EDGE ( 'NONE', *, *, #12244, .F. ) ; +#161 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#163 = ORIENTED_EDGE ( 'NONE', *, *, #13359, .F. ) ; +#162 = CARTESIAN_POINT ( 'NONE', ( 7.593628917235417200, 3.124016485703915000, -2.847242544895638400 ) ) ; +#164 = EDGE_LOOP ( 'NONE', ( #9670, #10600, #9149, #6012 ) ) ; +#165 = AXIS2_PLACEMENT_3D ( 'NONE', #14313, #9422, #2154 ) ; +#166 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#167 = ORIENTED_EDGE ( 'NONE', *, *, #1855, .F. ) ; +#168 = ADVANCED_FACE ( 'NONE', ( #1148 ), #6497, .F. ) ; +#169 = ORIENTED_EDGE ( 'NONE', *, *, #13729, .F. ) ; +#170 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#171 = ORIENTED_EDGE ( 'NONE', *, *, #734, .T. ) ; +#172 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 7.150000000000000400 ) ) ; +#173 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#174 = LINE ( 'NONE', #6799, #8004 ) ; +#175 = VECTOR ( 'NONE', #5898, 1000.000000000000000 ) ; +#176 = FACE_OUTER_BOUND ( 'NONE', #67, .T. ) ; +#177 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.6999999999999999600, 0.0000000000000000000 ) ) ; +#178 = PLANE ( 'NONE', #653 ) ; +#179 = ORIENTED_EDGE ( 'NONE', *, *, #12670, .F. ) ; +#180 = AXIS2_PLACEMENT_3D ( 'NONE', #14239, #7981, #4652 ) ; +#181 = ORIENTED_EDGE ( 'NONE', *, *, #11740, .T. ) ; +#182 = ORIENTED_EDGE ( 'NONE', *, *, #4407, .F. ) ; +#183 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.3999999999999999700, 3.649999999999999500 ) ) ; +#184 = EDGE_CURVE ( 'NONE', #1604, #1120, #780, .T. ) ; +#185 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#186 = ADVANCED_FACE ( 'NONE', ( #9355 ), #11577, .F. ) ; +#187 = ORIENTED_EDGE ( 'NONE', *, *, #13080, .T. ) ; +#188 = EDGE_CURVE ( 'NONE', #6150, #8136, #11646, .T. ) ; +#189 = ORIENTED_EDGE ( 'NONE', *, *, #1945, .T. ) ; +#190 = EDGE_LOOP ( 'NONE', ( #10315, #12583, #14429, #13476 ) ) ; +#191 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#192 = CARTESIAN_POINT ( 'NONE', ( 7.627398903010502300, 3.128752156770257600, -3.079999999999998700 ) ) ; +#193 = LINE ( 'NONE', #8417, #12753 ) ; +#194 = VECTOR ( 'NONE', #5833, 1000.000000000000000 ) ; +#195 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8079 ) ) ; +#196 = ORIENTED_EDGE ( 'NONE', *, *, #3171, .F. ) ; +#197 = EDGE_LOOP ( 'NONE', ( #474, #5528, #14374, #14672 ) ) ; +#198 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#199 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 9.375000000000000000 ) ) ; +#200 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 3.100000000000000500 ) ) ; +#201 = ORIENTED_EDGE ( 'NONE', *, *, #5647, .F. ) ; +#202 = ADVANCED_FACE ( 'NONE', ( #13343 ), #4306, .F. ) ; +#203 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, -1.399999999999999700 ) ) ; +#204 = ORIENTED_EDGE ( 'NONE', *, *, #644, .T. ) ; +#205 = ORIENTED_EDGE ( 'NONE', *, *, #4668, .F. ) ; +#207 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000000700, -2.880000000000002100 ) ) ; +#206 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 0.5500000000000010400 ) ) ; +#208 = VECTOR ( 'NONE', #11950, 1000.000000000000000 ) ; +#209 = EDGE_CURVE ( 'NONE', #2847, #226, #4793, .T. ) ; +#210 = FACE_OUTER_BOUND ( 'NONE', #15385, .T. ) ; +#211 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#212 = ORIENTED_EDGE ( 'NONE', *, *, #13760, .F. ) ; +#213 = ORIENTED_EDGE ( 'NONE', *, *, #8488, .T. ) ; +#214 = EDGE_LOOP ( 'NONE', ( #4906, #5535, #5097, #3395 ) ) ; +#215 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, -15.05858178898088800, -9.600000000000001400 ) ) ; +#216 = EDGE_CURVE ( 'NONE', #14109, #4863, #1538, .T. ) ; +#217 = STYLED_ITEM ( 'NONE', ( #9595 ), #3657 ) ; +#218 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 8.050000000000000700 ) ) ; +#219 = LINE ( 'NONE', #11615, #13550 ) ; +#220 = FACE_OUTER_BOUND ( 'NONE', #1370, .T. ) ; +#221 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999968400, 0.4000000000000000200, 6.550000000000000700 ) ) ; +#222 = COLOUR_RGB ( '',0.5019607843137254800, 0.5019607843137254800, 0.5019607843137254800 ) ; +#223 = DIRECTION ( 'NONE', ( -5.478074134663594500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#224 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 2.649999999999999500 ) ) ; +#225 = VERTEX_POINT ( 'NONE', #6764 ) ; +#226 = VERTEX_POINT ( 'NONE', #6071 ) ; +#227 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#228 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 1.149999999999999900 ) ) ; +#229 = VERTEX_POINT ( 'NONE', #8571 ) ; +#230 = EDGE_CURVE ( 'NONE', #1011, #14975, #1520, .T. ) ; +#231 = ORIENTED_EDGE ( 'NONE', *, *, #15561, .F. ) ; +#232 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#233 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#234 = FACE_OUTER_BOUND ( 'NONE', #3999, .T. ) ; +#235 = LINE ( 'NONE', #13579, #425 ) ; +#236 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#237 = EDGE_CURVE ( 'NONE', #6706, #12573, #14309, .T. ) ; +#238 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#239 = LINE ( 'NONE', #8036, #3868 ) ; +#240 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000004600, 0.4000000000000000200, 8.049999999999995400 ) ) ; +#241 = CARTESIAN_POINT ( 'NONE', ( 7.627398806512151600, 3.129277334261817000, -3.081999999999998500 ) ) ; +#242 = ORIENTED_EDGE ( 'NONE', *, *, #12543, .T. ) ; +#243 = AXIS2_PLACEMENT_3D ( 'NONE', #8097, #4245, #2004 ) ; +#244 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, 0.7000000000000009500, -9.600000000000001400 ) ) ; +#245 = ADVANCED_FACE ( 'NONE', ( #5365 ), #14603, .F. ) ; +#246 = SURFACE_STYLE_FILL_AREA ( #14293 ) ; +#247 = PLANE ( 'NONE', #11769 ) ; +#248 = EDGE_CURVE ( 'NONE', #7837, #4737, #11077, .T. ) ; +#249 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.349999999999999600, 8.990000000000002000 ) ) ; +#251 = PLANE ( 'NONE', #797 ) ; +#250 = FILL_AREA_STYLE ('',( #12527 ) ) ; +#252 = ORIENTED_EDGE ( 'NONE', *, *, #10850, .F. ) ; +#253 = ORIENTED_EDGE ( 'NONE', *, *, #6459, .F. ) ; +#254 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000000400, 3.049999999999999800, 9.082928932188135500 ) ) ; +#255 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.8000000000000000400, -4.500000000000000000 ) ) ; +#256 = AXIS2_PLACEMENT_3D ( 'NONE', #1704, #12612, #642 ) ; +#257 = ADVANCED_FACE ( 'NONE', ( #5168 ), #6177, .F. ) ; +#258 = ORIENTED_EDGE ( 'NONE', *, *, #2111, .T. ) ; +#259 = LINE ( 'NONE', #2100, #12624 ) ; +#260 = EDGE_LOOP ( 'NONE', ( #6685, #7739, #15523, #4564 ) ) ; +#261 = ORIENTED_EDGE ( 'NONE', *, *, #14272, .T. ) ; +#262 = LINE ( 'NONE', #1160, #2344 ) ; +#263 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.6999999999999999600, -5.150000000000001200 ) ) ; +#264 = PLANE ( 'NONE', #694 ) ; +#265 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#266 = ORIENTED_EDGE ( 'NONE', *, *, #6011, .T. ) ; +#267 = EDGE_CURVE ( 'NONE', #9333, #15118, #12377, .T. ) ; +#268 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#269 = EDGE_CURVE ( 'NONE', #15430, #4435, #10025, .T. ) ; +#270 = ORIENTED_EDGE ( 'NONE', *, *, #6691, .F. ) ; +#271 = ADVANCED_FACE ( 'NONE', ( #6321 ), #13439, .T. ) ; +#272 = LINE ( 'NONE', #147, #13819 ) ; +#273 = EDGE_CURVE ( 'NONE', #7465, #7465, #10303, .T. ) ; +#274 = EDGE_LOOP ( 'NONE', ( #6092, #902, #6388, #3920 ) ) ; +#275 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#276 = ORIENTED_EDGE ( 'NONE', *, *, #11353, .F. ) ; +#277 = LINE ( 'NONE', #2922, #1600 ) ; +#278 = VECTOR ( 'NONE', #1307, 1000.000000000000000 ) ; +#279 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 0.7999999999999983800, 9.290000000000006300 ) ) ; +#280 = VERTEX_POINT ( 'NONE', #13545 ) ; +#281 = AXIS2_PLACEMENT_3D ( 'NONE', #7844, #5747, #6933 ) ; +#282 = ORIENTED_EDGE ( 'NONE', *, *, #14360, .F. ) ; +#283 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#284 = PLANE ( 'NONE', #14889 ) ; +#285 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000000700, 9.090000000000001600 ) ) ; +#286 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#287 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, -0.3500000000000004800 ) ) ; +#288 = ORIENTED_EDGE ( 'NONE', *, *, #6411, .F. ) ; +#289 = FACE_OUTER_BOUND ( 'NONE', #4667, .T. ) ; +#290 = ORIENTED_EDGE ( 'NONE', *, *, #10955, .F. ) ; +#291 = PLANE ( 'NONE', #5902 ) ; +#292 = PLANE ( 'NONE', #18 ) ; +#293 = VECTOR ( 'NONE', #11512, 1000.000000000000000 ) ; +#294 = VECTOR ( 'NONE', #11028, 1000.000000000000000 ) ; +#295 = EDGE_CURVE ( 'NONE', #9627, #390, #8039, .T. ) ; +#296 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#297 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14868 ) ) ; +#298 = PLANE ( 'NONE', #7686 ) ; +#299 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.3999999999999999700, 5.650000000000000400 ) ) ; +#301 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 2.825000000000001100 ) ) ; +#300 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#302 = EDGE_CURVE ( 'NONE', #3736, #15562, #11258, .T. ) ; +#303 = VECTOR ( 'NONE', #6162, 1000.000000000000000 ) ; +#304 = VERTEX_POINT ( 'NONE', #8887 ) ; +#305 = AXIS2_PLACEMENT_3D ( 'NONE', #6443, #2796, #12309 ) ; +#306 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#307 = LINE ( 'NONE', #14564, #15708 ) ; +#308 = CIRCLE ( 'NONE', #14854, 0.5000000000000004400 ) ; +#309 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#310 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#311 = VERTEX_POINT ( 'NONE', #7667 ) ; +#312 = EDGE_CURVE ( 'NONE', #987, #15430, #12769, .T. ) ; +#313 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.3999999999999999700, 4.049999999999999800 ) ) ; +#314 = AXIS2_PLACEMENT_3D ( 'NONE', #6969, #12882, #9256 ) ; +#315 = DIRECTION ( 'NONE', ( -3.097720492815727200E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#316 = ORIENTED_EDGE ( 'NONE', *, *, #7917, .T. ) ; +#317 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#318 = ADVANCED_FACE ( 'NONE', ( #7860 ), #10085, .T. ) ; +#319 = VECTOR ( 'NONE', #992, 1000.000000000000000 ) ; +#320 = LINE ( 'NONE', #8618, #12495 ) ; +#321 = ORIENTED_EDGE ( 'NONE', *, *, #499, .F. ) ; +#322 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000001400, 3.050000000000000700, 9.082928932188135500 ) ) ; +#323 = EDGE_CURVE ( 'NONE', #13875, #5773, #5555, .T. ) ; +#324 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.4000000000000000200, 1.849999999999999900 ) ) ; +#325 = AXIS2_PLACEMENT_3D ( 'NONE', #5644, #9364, #4619 ) ; +#326 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#327 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7248, 'distance_accuracy_value', 'NONE'); +#328 = EDGE_LOOP ( 'NONE', ( #1292, #15209, #4781, #6870 ) ) ; +#329 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#330 = VECTOR ( 'NONE', #6795, 1000.000000000000000 ) ; +#331 = ORIENTED_EDGE ( 'NONE', *, *, #2174, .F. ) ; +#332 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 1.875000000000000000 ) ) ; +#333 = ADVANCED_FACE ( 'NONE', ( #2107 ), #11114, .T. ) ; +#334 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#335 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#336 = FACE_OUTER_BOUND ( 'NONE', #8899, .T. ) ; +#337 = EDGE_CURVE ( 'NONE', #5145, #480, #586, .T. ) ; +#338 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#339 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#340 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.7000000000000009500, -6.900000000000000400 ) ) ; +#341 = ORIENTED_EDGE ( 'NONE', *, *, #14110, .F. ) ; +#342 = VERTEX_POINT ( 'NONE', #11365 ) ; +#343 = ORIENTED_EDGE ( 'NONE', *, *, #6646, .T. ) ; +#344 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, -3.350000000000000500 ) ) ; +#345 = LINE ( 'NONE', #6632, #3975 ) ; +#346 = CLOSED_SHELL ( 'NONE', ( #5445, #5384, #13094, #10306, #9870, #6357, #6259, #5548, #13178, #9374 ) ) ; +#347 = AXIS2_PLACEMENT_3D ( 'NONE', #754, #11767, #5727 ) ; +#348 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#349 = ORIENTED_EDGE ( 'NONE', *, *, #931, .T. ) ; +#350 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000029100, 0.4000000000000000200, 0.5500000000000001600 ) ) ; +#351 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#352 = ADVANCED_FACE ( 'NONE', ( #15433 ), #15137, .F. ) ; +#353 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999936400, 0.4000000000000000200, 2.650000000000001200 ) ) ; +#354 = FACE_OUTER_BOUND ( 'NONE', #14636, .T. ) ; +#355 = VECTOR ( 'NONE', #233, 1000.000000000000000 ) ; +#356 = AXIS2_PLACEMENT_3D ( 'NONE', #1560, #1352, #2618 ) ; +#358 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#357 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#359 = VERTEX_POINT ( 'NONE', #8679 ) ; +#360 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#361 = ORIENTED_EDGE ( 'NONE', *, *, #7433, .T. ) ; +#362 = VERTEX_POINT ( 'NONE', #4175 ) ; +#363 = EDGE_CURVE ( 'NONE', #4767, #5684, #1725, .T. ) ; +#364 = ORIENTED_EDGE ( 'NONE', *, *, #12198, .F. ) ; +#365 = ORIENTED_EDGE ( 'NONE', *, *, #418, .F. ) ; +#366 = SURFACE_SIDE_STYLE ('',( #15518 ) ) ; +#367 = EDGE_CURVE ( 'NONE', #4816, #10186, #11261, .T. ) ; +#368 = LINE ( 'NONE', #1251, #14280 ) ; +#369 = FACE_OUTER_BOUND ( 'NONE', #12760, .T. ) ; +#370 = DIRECTION ( 'NONE', ( 1.807003620809173900E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#371 = VERTEX_POINT ( 'NONE', #3000 ) ; +#372 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#373 = ORIENTED_EDGE ( 'NONE', *, *, #12918, .F. ) ; +#374 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#375 = AXIS2_PLACEMENT_3D ( 'NONE', #10618, #918, #4706 ) ; +#376 = EDGE_LOOP ( 'NONE', ( #9896, #10664, #787, #14703 ) ) ; +#377 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999920400, 0.4000000000000000200, 1.150000000000002100 ) ) ; +#378 = ORIENTED_EDGE ( 'NONE', *, *, #10832, .F. ) ; +#379 = FACE_OUTER_BOUND ( 'NONE', #13152, .T. ) ; +#380 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000001400, 3.050000000000000700, -2.872928932188135900 ) ) ; +#381 = LINE ( 'NONE', #4190, #10109 ) ; +#382 = SURFACE_SIDE_STYLE ('',( #9890 ) ) ; +#383 = LINE ( 'NONE', #5404, #6695 ) ; +#384 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 4.149999999999999500 ) ) ; +#385 = ORIENTED_EDGE ( 'NONE', *, *, #12718, .F. ) ; +#386 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.3999999999999999700, 2.649999999999999500 ) ) ; +#387 = EDGE_CURVE ( 'NONE', #600, #9131, #2280, .T. ) ; +#389 = ORIENTED_EDGE ( 'NONE', *, *, #13787, .F. ) ; +#388 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.4000000000000000200, -0.3500000000000004800 ) ) ; +#390 = VERTEX_POINT ( 'NONE', #7825 ) ; +#391 = PLANE ( 'NONE', #314 ) ; +#392 = FILL_AREA_STYLE_COLOUR ( '', #1578 ) ; +#393 = LINE ( 'NONE', #10282, #7873 ) ; +#394 = LINE ( 'NONE', #5936, #9746 ) ; +#395 = DIRECTION ( 'NONE', ( 5.478074134663594500E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#396 = LINE ( 'NONE', #14413, #3259 ) ; +#397 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.149999999999999900, 9.089999999999999900 ) ) ; +#398 = LINE ( 'NONE', #15609, #2478 ) ; +#399 = VECTOR ( 'NONE', #404, 1000.000000000000000 ) ; +#400 = VECTOR ( 'NONE', #12489, 1000.000000000000000 ) ; +#401 = LINE ( 'NONE', #8048, #1933 ) ; +#402 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#403 = ORIENTED_EDGE ( 'NONE', *, *, #2287, .F. ) ; +#404 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#405 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#406 = EDGE_LOOP ( 'NONE', ( #7303, #13988, #3807, #10711, #4498, #5124 ) ) ; +#407 = ORIENTED_EDGE ( 'NONE', *, *, #3274, .T. ) ; +#408 = EDGE_CURVE ( 'NONE', #11467, #14001, #7094, .T. ) ; +#409 = FACE_OUTER_BOUND ( 'NONE', #1982, .T. ) ; +#410 = LINE ( 'NONE', #9084, #10702 ) ; +#411 = ORIENTED_EDGE ( 'NONE', *, *, #337, .T. ) ; +#412 = LINE ( 'NONE', #11088, #12973 ) ; +#413 = ADVANCED_FACE ( 'NONE', ( #13143 ), #10239, .F. ) ; +#414 = LINE ( 'NONE', #4139, #12974 ) ; +#415 = ORIENTED_EDGE ( 'NONE', *, *, #7652, .F. ) ; +#416 = EDGE_LOOP ( 'NONE', ( #3721, #6544, #12671, #14331 ) ) ; +#417 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#418 = EDGE_CURVE ( 'NONE', #8298, #1430, #4979, .T. ) ; +#419 = ADVANCED_FACE ( 'NONE', ( #9186 ), #4777, .T. ) ; +#420 = EDGE_LOOP ( 'NONE', ( #8972, #2643, #2285, #6463 ) ) ; +#421 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#422 = ORIENTED_EDGE ( 'NONE', *, *, #9831, .F. ) ; +#423 = LINE ( 'NONE', #3777, #1963 ) ; +#424 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, -10.00000000000000000 ) ) ; +#425 = VECTOR ( 'NONE', #1437, 1000.000000000000000 ) ; +#426 = PLANE ( 'NONE', #8261 ) ; +#427 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#428 = FACE_OUTER_BOUND ( 'NONE', #3511, .T. ) ; +#429 = EDGE_CURVE ( 'NONE', #8491, #3563, #1345, .T. ) ; +#430 = EDGE_CURVE ( 'NONE', #5241, #8882, #6711, .T. ) ; +#431 = EDGE_LOOP ( 'NONE', ( #179, #3009, #10972, #9164 ) ) ; +#432 = EDGE_LOOP ( 'NONE', ( #8947, #924, #7818, #2083 ) ) ; +#433 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.349999999999999600, 8.990000000000000200 ) ) ; +#434 = LINE ( 'NONE', #5560, #5020 ) ; +#435 = FACE_OUTER_BOUND ( 'NONE', #893, .T. ) ; +#436 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#437 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#438 = VECTOR ( 'NONE', #13830, 1000.000000000000000 ) ; +#439 = FACE_OUTER_BOUND ( 'NONE', #10682, .T. ) ; +#440 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#441 = AXIS2_PLACEMENT_3D ( 'NONE', #8766, #10020, #13535 ) ; +#442 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000000400, 3.049999999999999800, 9.082928932188135500 ) ) ; +#443 = ORIENTED_EDGE ( 'NONE', *, *, #3939, .T. ) ; +#444 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 4.149999999999999500 ) ) ; +#445 = DIRECTION ( 'NONE', ( -1.807003620809173900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#446 = FILL_AREA_STYLE ('',( #503 ) ) ; +#447 = EDGE_CURVE ( 'NONE', #6139, #10247, #13537, .T. ) ; +#448 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 5.478074134663595300E-015 ) ) ; +#449 = ORIENTED_EDGE ( 'NONE', *, *, #12428, .F. ) ; +#450 = VECTOR ( 'NONE', #5645, 1000.000000000000000 ) ; +#451 = ORIENTED_EDGE ( 'NONE', *, *, #6472, .F. ) ; +#452 = ORIENTED_EDGE ( 'NONE', *, *, #7705, .F. ) ; +#454 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#453 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000001400, 3.050000000000000700, -2.872928932188135900 ) ) ; +#455 = ORIENTED_EDGE ( 'NONE', *, *, #14113, .T. ) ; +#456 = VECTOR ( 'NONE', #5123, 1000.000000000000000 ) ; +#457 = VECTOR ( 'NONE', #10154, 1000.000000000000000 ) ; +#458 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#459 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#460 = VERTEX_POINT ( 'NONE', #545 ) ; +#461 = ORIENTED_EDGE ( 'NONE', *, *, #1595, .T. ) ; +#462 = AXIS2_PLACEMENT_3D ( 'NONE', #301, #14950, #12528 ) ; +#463 = ORIENTED_EDGE ( 'NONE', *, *, #4878, .T. ) ; +#464 = VECTOR ( 'NONE', #7517, 1000.000000000000000 ) ; +#465 = ORIENTED_EDGE ( 'NONE', *, *, #2784, .T. ) ; +#466 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.097720492815728600E-016 ) ) ; +#467 = PLANE ( 'NONE', #10813 ) ; +#468 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 0.1000000000000002600 ) ) ; +#469 = VECTOR ( 'NONE', #3470, 1000.000000000000000 ) ; +#470 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000009600, 0.8000000000000000400, 6.549999999999998000 ) ) ; +#471 = PLANE ( 'NONE', #3839 ) ; +#472 = ADVANCED_FACE ( 'NONE', ( #14866 ), #4072, .F. ) ; +#473 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 0.5500000000000010400 ) ) ; +#474 = ORIENTED_EDGE ( 'NONE', *, *, #4170, .T. ) ; +#475 = EDGE_CURVE ( 'NONE', #6152, #12522, #6143, .T. ) ; +#476 = CARTESIAN_POINT ( 'NONE', ( -7.561459556676524600, 3.149999999999999500, -2.786779519070251800 ) ) ; +#477 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 6.100000000000001400 ) ) ; +#478 = EDGE_CURVE ( 'NONE', #1830, #4736, #5756, .T. ) ; +#479 = CARTESIAN_POINT ( 'NONE', ( 7.628752156770255900, 3.349999999999999600, -2.795530029177633000 ) ) ; +#480 = VERTEX_POINT ( 'NONE', #14027 ) ; +#481 = LINE ( 'NONE', #4638, #3349 ) ; +#482 = ORIENTED_EDGE ( 'NONE', *, *, #14777, .F. ) ; +#483 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#484 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 4.149999999999999500 ) ) ; +#485 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#486 = LINE ( 'NONE', #1638, #1255 ) ; +#487 = AXIS2_PLACEMENT_3D ( 'NONE', #774, #8100, #15454 ) ; +#488 = CARTESIAN_POINT ( 'NONE', ( 7.817668071082943400, 3.206595997628985700, 9.051952621458756500 ) ) ; +#489 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#490 = ADVANCED_FACE ( 'NONE', ( #13928 ), #3068, .F. ) ; +#491 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#492 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.349999999999999600, 8.990000000000000200 ) ) ; +#493 = ADVANCED_FACE ( 'NONE', ( #5934 ), #13044, .F. ) ; +#494 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#495 = PLANE ( 'NONE', #13572 ) ; +#496 = VECTOR ( 'NONE', #4608, 1000.000000000000000 ) ; +#497 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#498 = VERTEX_POINT ( 'NONE', #864 ) ; +#499 = EDGE_CURVE ( 'NONE', #8545, #4337, #15602, .T. ) ; +#500 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999991400, -15.05858178898088800, -9.600000000000001400 ) ) ; +#501 = VECTOR ( 'NONE', #2683, 1000.000000000000000 ) ; +#502 = VECTOR ( 'NONE', #8398, 1000.000000000000000 ) ; +#503 = FILL_AREA_STYLE_COLOUR ( '', #1519 ) ; +#504 = VERTEX_POINT ( 'NONE', #12880 ) ; +#505 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#507 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#506 = PLANE ( 'NONE', #12506 ) ; +#508 = EDGE_CURVE ( 'NONE', #14536, #10623, #12004, .T. ) ; +#509 = ORIENTED_EDGE ( 'NONE', *, *, #3826, .T. ) ; +#510 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.3999999999999999700, 4.750000000000000000 ) ) ; +#511 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, -15.05858178898088800, -6.100000000000000500 ) ) ; +#512 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#513 = LINE ( 'NONE', #12301, #15177 ) ; +#514 = ORIENTED_EDGE ( 'NONE', *, *, #2695, .T. ) ; +#515 = LINE ( 'NONE', #11176, #9688 ) ; +#516 = FACE_OUTER_BOUND ( 'NONE', #6137, .T. ) ; +#517 = ORIENTED_EDGE ( 'NONE', *, *, #14412, .T. ) ; +#518 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#519 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 5.650000000000000400 ) ) ; +#520 = EDGE_CURVE ( 'NONE', #1830, #7752, #15068, .T. ) ; +#521 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14709 ) ) ; +#522 = CARTESIAN_POINT ( 'NONE', ( 7.580976310729377900, 3.139222690360981400, 9.042198665876329100 ) ) ; +#523 = ORIENTED_EDGE ( 'NONE', *, *, #627, .T. ) ; +#524 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude5[9]', #14894 ) ; +#525 = VERTEX_POINT ( 'NONE', #700 ) ; +#526 = CIRCLE ( 'NONE', #1778, 0.2749999999999991900 ) ; +#527 = EDGE_LOOP ( 'NONE', ( #802, #11264, #138, #12207, #15359, #14946, #12723, #1580, #15263, #12634, #12779, #706, #15188, #15319, #11893, #12821, #9966, #5114, #14141, #11000, #2037, #4156, #7936, #10498, #3050, #14022, #9267, #3310 ) ) ; +#528 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999999600, 0.0000000000000000000, 9.550000000000000700 ) ) ; +#529 = ORIENTED_EDGE ( 'NONE', *, *, #9754, .T. ) ; +#530 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#531 = EDGE_CURVE ( 'NONE', #5326, #12258, #10108, .T. ) ; +#532 = PLANE ( 'NONE', #2095 ) ; +#533 = LINE ( 'NONE', #4445, #4364 ) ; +#534 = VECTOR ( 'NONE', #7069, 1000.000000000000000 ) ; +#535 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#536 = ORIENTED_EDGE ( 'NONE', *, *, #14317, .F. ) ; +#537 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#538 = ORIENTED_EDGE ( 'NONE', *, *, #1340, .T. ) ; +#539 = ORIENTED_EDGE ( 'NONE', *, *, #10092, .F. ) ; +#540 = DIRECTION ( 'NONE', ( 3.097720492815726700E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#541 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 5.050000000000000700 ) ) ; +#542 = ORIENTED_EDGE ( 'NONE', *, *, #1035, .F. ) ; +#543 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 1.637941840314110200, 4.750000000000000000 ) ) ; +#544 = EDGE_LOOP ( 'NONE', ( #12323, #6988, #722, #9801 ) ) ; +#545 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999759000, 0.3999999999999999700, 4.750000000000000000 ) ) ; +#546 = ORIENTED_EDGE ( 'NONE', *, *, #13564, .F. ) ; +#547 = EDGE_CURVE ( 'NONE', #13509, #3996, #6505, .T. ) ; +#548 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#549 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#550 = CYLINDRICAL_SURFACE ( 'NONE', #9593, 0.2749999999999991900 ) ; +#551 = VECTOR ( 'NONE', #14867, 1000.000000000000000 ) ; +#552 = VECTOR ( 'NONE', #2384, 1000.000000000000000 ) ; +#553 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#554 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 1.806230589874906900, 5.650000000000000400 ) ) ; +#555 = VERTEX_POINT ( 'NONE', #3210 ) ; +#556 = PLANE ( 'NONE', #5667 ) ; +#557 = ADVANCED_FACE ( 'NONE', ( #14115 ), #4456, .T. ) ; +#558 = VERTEX_POINT ( 'NONE', #11770 ) ; +#559 = EDGE_LOOP ( 'NONE', ( #5207, #11930, #7355, #9523, #9636, #10964 ) ) ; +#560 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#561 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 2.743077632650985200E-014, 9.090000000000008700 ) ) ; +#562 = VERTEX_POINT ( 'NONE', #11618 ) ; +#563 = EDGE_LOOP ( 'NONE', ( #6704, #12266, #5454, #1903, #15486, #9430 ) ) ; +#564 = AXIS2_PLACEMENT_3D ( 'NONE', #4055, #12548, #5288 ) ; +#565 = CARTESIAN_POINT ( 'NONE', ( -7.611952621458756100, 3.206595997628985300, 9.257668071082944600 ) ) ; +#566 = VERTEX_POINT ( 'NONE', #9253 ) ; +#568 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#567 = DIRECTION ( 'NONE', ( -5.478074134663595300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#569 = VERTEX_POINT ( 'NONE', #5314 ) ; +#570 = LINE ( 'NONE', #3413, #10876 ) ; +#571 = VECTOR ( 'NONE', #9741, 1000.000000000000000 ) ; +#572 = FACE_OUTER_BOUND ( 'NONE', #14259, .T. ) ; +#573 = CARTESIAN_POINT ( 'NONE', ( -9.449999999999999300, 0.4000000000000000200, 8.650000000000000400 ) ) ; +#574 = ORIENTED_EDGE ( 'NONE', *, *, #5399, .T. ) ; +#575 = ADVANCED_FACE ( 'NONE', ( #1706 ), #755, .T. ) ; +#576 = EDGE_CURVE ( 'NONE', #12654, #4678, #8979, .T. ) ; +#577 = ORIENTED_EDGE ( 'NONE', *, *, #2293, .F. ) ; +#578 = EDGE_CURVE ( 'NONE', #12948, #15118, #14296, .T. ) ; +#579 = VERTEX_POINT ( 'NONE', #10571 ) ; +#580 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#581 = ADVANCED_FACE ( 'NONE', ( #10491 ), #11821, .F. ) ; +#582 = EDGE_CURVE ( 'NONE', #1039, #9694, #9532, .T. ) ; +#583 = EDGE_LOOP ( 'NONE', ( #2607, #4193, #11055, #8802 ) ) ; +#584 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000025900, 0.4000000000000000200, 2.050000000000001600 ) ) ; +#585 = CIRCLE ( 'NONE', #3884, 0.2500000000000002200 ) ; +#586 = LINE ( 'NONE', #8938, #11445 ) ; +#587 = VECTOR ( 'NONE', #6944, 1000.000000000000000 ) ; +#588 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000020300, 0.4000000000000000200, 3.550000000000001200 ) ) ; +#589 = VECTOR ( 'NONE', #10141, 1000.000000000000000 ) ; +#590 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5838 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8572, #12102, #3543 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#591 = ORIENTED_EDGE ( 'NONE', *, *, #13376, .T. ) ; +#592 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#593 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, -0.9499999999999995100 ) ) ; +#594 = ORIENTED_EDGE ( 'NONE', *, *, #9103, .T. ) ; +#595 = VERTEX_POINT ( 'NONE', #9350 ) ; +#596 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#597 = VECTOR ( 'NONE', #2504, 1000.000000000000000 ) ; +#598 = VECTOR ( 'NONE', #8883, 1000.000000000000000 ) ; +#599 = VECTOR ( 'NONE', #1149, 1000.000000000000000 ) ; +#600 = VERTEX_POINT ( 'NONE', #2236 ) ; +#601 = VECTOR ( 'NONE', #3943, 1000.000000000000000 ) ; +#602 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999976900, 0.8000000000000000400, 2.649999999999997700 ) ) ; +#603 = EDGE_CURVE ( 'NONE', #1348, #12522, #570, .T. ) ; +#604 = VECTOR ( 'NONE', #9168, 1000.000000000000000 ) ; +#605 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, -15.05858178898088800, -8.800000000000000700 ) ) ; +#606 = ORIENTED_EDGE ( 'NONE', *, *, #15316, .T. ) ; +#607 = ORIENTED_EDGE ( 'NONE', *, *, #7399, .F. ) ; +#608 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, -0.9499999999999990700 ) ) ; +#609 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, -1.850000000000001000 ) ) ; +#610 = ORIENTED_EDGE ( 'NONE', *, *, #5066, .T. ) ; +#611 = VERTEX_POINT ( 'NONE', #2186 ) ; +#612 = DIRECTION ( 'NONE', ( 5.478074134663584300E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#613 = EDGE_CURVE ( 'NONE', #4278, #10967, #11432, .T. ) ; +#614 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#615 = AXIS2_PLACEMENT_3D ( 'NONE', #14671, #12263, #9742 ) ; +#616 = AXIS2_PLACEMENT_3D ( 'NONE', #8084, #5673, #5575 ) ; +#617 = LINE ( 'NONE', #6562, #5781 ) ; +#618 = PLANE ( 'NONE', #243 ) ; +#619 = VECTOR ( 'NONE', #3633, 1000.000000000000000 ) ; +#620 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#621 = PLANE ( 'NONE', #4268 ) ; +#622 = LINE ( 'NONE', #28, #9583 ) ; +#623 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000000700, 9.090000000000001600 ) ) ; +#625 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, -0.3500000000000004800 ) ) ; +#624 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#626 = ORIENTED_EDGE ( 'NONE', *, *, #6937, .T. ) ; +#627 = EDGE_CURVE ( 'NONE', #8029, #6949, #10672, .T. ) ; +#628 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, -1.674999999999998900 ) ) ; +#629 = LINE ( 'NONE', #5770, #2522 ) ; +#630 = LINE ( 'NONE', #10666, #11303 ) ; +#631 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.6999999999999999600, 0.0000000000000000000 ) ) ; +#632 = EDGE_CURVE ( 'NONE', #15759, #5999, #9357, .T. ) ; +#633 = LINE ( 'NONE', #13450, #10740 ) ; +#634 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, -0.3500000000000004800 ) ) ; +#635 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#636 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000000700, 9.292000000000001600 ) ) ; +#637 = ORIENTED_EDGE ( 'NONE', *, *, #12809, .T. ) ; +#638 = ORIENTED_EDGE ( 'NONE', *, *, #15032, .F. ) ; +#639 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, -3.350000000000000500 ) ) ; +#640 = ORIENTED_EDGE ( 'NONE', *, *, #11244, .F. ) ; +#641 = LINE ( 'NONE', #12471, #1202 ) ; +#642 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#643 = VERTEX_POINT ( 'NONE', #10723 ) ; +#644 = EDGE_CURVE ( 'NONE', #3351, #15753, #13724, .T. ) ; +#645 = EDGE_CURVE ( 'NONE', #566, #6150, #15053, .T. ) ; +#646 = PLANE ( 'NONE', #12076 ) ; +#647 = VERTEX_POINT ( 'NONE', #4810 ) ; +#648 = VECTOR ( 'NONE', #8430, 1000.000000000000000 ) ; +#649 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#650 = ORIENTED_EDGE ( 'NONE', *, *, #10029, .F. ) ; +#651 = ADVANCED_FACE ( 'NONE', ( #12943 ), #12039, .F. ) ; +#652 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#653 = AXIS2_PLACEMENT_3D ( 'NONE', #7440, #2563, #8625 ) ; +#654 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#655 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 5.050000000000000700 ) ) ; +#656 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#657 = ORIENTED_EDGE ( 'NONE', *, *, #904, .T. ) ; +#658 = ADVANCED_FACE ( 'NONE', ( #9901 ), #8284, .F. ) ; +#659 = VECTOR ( 'NONE', #6609, 1000.000000000000000 ) ; +#660 = ORIENTED_EDGE ( 'NONE', *, *, #14872, .F. ) ; +#661 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#662 = ORIENTED_EDGE ( 'NONE', *, *, #9103, .F. ) ; +#663 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.4000000000000000200, -3.350000000000000500 ) ) ; +#664 = LINE ( 'NONE', #21, #9262 ) ; +#665 = FACE_OUTER_BOUND ( 'NONE', #432, .T. ) ; +#666 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#667 = ORIENTED_EDGE ( 'NONE', *, *, #3, .T. ) ; +#668 = EDGE_CURVE ( 'NONE', #7050, #913, #2464, .T. ) ; +#669 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#670 = CARTESIAN_POINT ( 'NONE', ( -7.627398806512152500, 3.129277334261815600, 9.292000000000001600 ) ) ; +#672 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#671 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#673 = ORIENTED_EDGE ( 'NONE', *, *, #9115, .T. ) ; +#674 = VECTOR ( 'NONE', #12868, 1000.000000000000000 ) ; +#675 = EDGE_CURVE ( 'NONE', #9510, #14554, #5739, .T. ) ; +#676 = EDGE_LOOP ( 'NONE', ( #5002, #3617, #13138, #13391 ) ) ; +#677 = LINE ( 'NONE', #14907, #2968 ) ; +#678 = AXIS2_PLACEMENT_3D ( 'NONE', #1665, #14936, #11472 ) ; +#679 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#680 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 8.050000000000000700 ) ) ; +#681 = FACE_OUTER_BOUND ( 'NONE', #11633, .T. ) ; +#682 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#683 = ORIENTED_EDGE ( 'NONE', *, *, #13428, .T. ) ; +#684 = AXIS2_PLACEMENT_3D ( 'NONE', #1845, #14048, #2861 ) ; +#685 = VECTOR ( 'NONE', #44, 1000.000000000000000 ) ; +#686 = CIRCLE ( 'NONE', #3136, 0.2749999999999991900 ) ; +#687 = EDGE_CURVE ( 'NONE', #1526, #3976, #11059, .T. ) ; +#688 = ORIENTED_EDGE ( 'NONE', *, *, #6781, .T. ) ; +#689 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#690 = EDGE_LOOP ( 'NONE', ( #12155, #10643, #12759, #7921 ) ) ; +#691 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000011400, 0.8000000000000000400, 5.649999999999999500 ) ) ; +#692 = PRESENTATION_STYLE_ASSIGNMENT (( #7826 ) ) ; +#693 = EDGE_LOOP ( 'NONE', ( #9178, #3501, #5678, #4674 ) ) ; +#694 = AXIS2_PLACEMENT_3D ( 'NONE', #3788, #11185, #3945 ) ; +#695 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, -3.350000000000000500 ) ) ; +#696 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#697 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#698 = VECTOR ( 'NONE', #1900, 1000.000000000000000 ) ; +#699 = FACE_OUTER_BOUND ( 'NONE', #6976, .T. ) ; +#700 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.3999999999999999700, -0.9499999999999990700 ) ) ; +#701 = ORIENTED_EDGE ( 'NONE', *, *, #4448, .F. ) ; +#702 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#703 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000500, 0.3999999999999999700, 3.649999999999999500 ) ) ; +#704 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#705 = EDGE_CURVE ( 'NONE', #7473, #3170, #3246, .T. ) ; +#706 = ORIENTED_EDGE ( 'NONE', *, *, #3391, .F. ) ; +#707 = ADVANCED_FACE ( 'NONE', ( #7449 ), #4606, .F. ) ; +#708 = LINE ( 'NONE', #11914, #10821 ) ; +#709 = EDGE_LOOP ( 'NONE', ( #10188, #8651, #15018, #2945 ) ) ; +#710 = ORIENTED_EDGE ( 'NONE', *, *, #12229, .T. ) ; +#711 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#712 = EDGE_LOOP ( 'NONE', ( #5141, #1514, #13084, #2759 ) ) ; +#713 = B_SPLINE_SURFACE_WITH_KNOTS ( 'NONE', 1, 3, ( + ( #14932, #241, #12467, #14771, #1354, #13646 ), + ( #14880, #192, #8837, #3917, #6382, #8777 ), + ( #6229, #11161, #3871, #9931, #2619, #7669 ), + ( #12360, #1561, #5206, #8727, #1452, #1404 ) ), + .UNSPECIFIED., .F., .F., .F., + ( 2, 1, 1, 2 ), + ( 4, 2, 4 ), + ( -0.01000000000000000000, 0.0000000000000000000, 1.000000000000000000, 1.010100000000000000 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#714 = FACE_OUTER_BOUND ( 'NONE', #13243, .T. ) ; +#715 = CARTESIAN_POINT ( 'NONE', ( -7.565520379342617100, 3.149999999999999900, 9.016234407614298600 ) ) ; +#717 = PLANE ( 'NONE', #5076 ) ; +#716 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#718 = EDGE_CURVE ( 'NONE', #3027, #1426, #7847, .T. ) ; +#719 = AXIS2_PLACEMENT_3D ( 'NONE', #8126, #799, #15173 ) ; +#720 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#721 = ORIENTED_EDGE ( 'NONE', *, *, #7647, .T. ) ; +#722 = ORIENTED_EDGE ( 'NONE', *, *, #5563, .T. ) ; +#723 = ADVANCED_FACE ( 'NONE', ( #16 ), #11139, .T. ) ; +#724 = ORIENTED_EDGE ( 'NONE', *, *, #11789, .F. ) ; +#725 = CYLINDRICAL_SURFACE ( 'NONE', #441, 0.2749999999999991900 ) ; +#726 = ORIENTED_EDGE ( 'NONE', *, *, #14039, .F. ) ; +#727 = ORIENTED_EDGE ( 'NONE', *, *, #4974, .T. ) ; +#728 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#729 = ADVANCED_FACE ( 'NONE', ( #6693 ), #2724, .F. ) ; +#730 = LINE ( 'NONE', #4474, #2633 ) ; +#731 = VECTOR ( 'NONE', #11309, 1000.000000000000000 ) ; +#732 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#733 = EDGE_CURVE ( 'NONE', #13356, #8429, #5348, .T. ) ; +#734 = EDGE_CURVE ( 'NONE', #10796, #647, #2092, .T. ) ; +#735 = CARTESIAN_POINT ( 'NONE', ( 7.565530029177630800, 3.350000000000000100, 9.068752156770255400 ) ) ; +#736 = ORIENTED_EDGE ( 'NONE', *, *, #9448, .F. ) ; +#737 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#738 = ORIENTED_EDGE ( 'NONE', *, *, #3709, .T. ) ; +#739 = ORIENTED_EDGE ( 'NONE', *, *, #5219, .F. ) ; +#740 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999967700, 0.0000000000000000000, 6.550000000000002500 ) ) ; +#741 = ORIENTED_EDGE ( 'NONE', *, *, #8102, .F. ) ; +#742 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#743 = ORIENTED_EDGE ( 'NONE', *, *, #3293, .F. ) ; +#744 = AXIS2_PLACEMENT_3D ( 'NONE', #6619, #2973, #13955 ) ; +#745 = ORIENTED_EDGE ( 'NONE', *, *, #269, .T. ) ; +#746 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 0.1000000000000002600 ) ) ; +#747 = FACE_OUTER_BOUND ( 'NONE', #12142, .T. ) ; +#748 = AXIS2_PLACEMENT_3D ( 'NONE', #7893, #1508, #13713 ) ; +#749 = LINE ( 'NONE', #14428, #3232 ) ; +#750 = EDGE_LOOP ( 'NONE', ( #1033, #4842, #51, #10264 ) ) ; +#751 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#752 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#753 = ORIENTED_EDGE ( 'NONE', *, *, #10146, .F. ) ; +#754 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#755 = PLANE ( 'NONE', #12494 ) ; +#756 = EDGE_CURVE ( 'NONE', #1142, #937, #6305, .T. ) ; +#757 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#758 = ORIENTED_EDGE ( 'NONE', *, *, #15509, .F. ) ; +#759 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#760 = ORIENTED_EDGE ( 'NONE', *, *, #2568, .T. ) ; +#761 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#762 = LINE ( 'NONE', #9022, #10511 ) ; +#763 = PLANE ( 'NONE', #10317 ) ; +#764 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 10.00000000000000000 ) ) ; +#765 = LINE ( 'NONE', #9691, #4599 ) ; +#766 = VECTOR ( 'NONE', #13268, 1000.000000000000000 ) ; +#767 = VECTOR ( 'NONE', #5417, 1000.000000000000000 ) ; +#768 = LINE ( 'NONE', #131, #9923 ) ; +#769 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#770 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.3999999999999999700, 2.649999999999999500 ) ) ; +#771 = EDGE_LOOP ( 'NONE', ( #11572, #10585, #8132, #2332 ) ) ; +#772 = VERTEX_POINT ( 'NONE', #14406 ) ; +#773 = AXIS2_PLACEMENT_3D ( 'NONE', #10644, #9236, #15516 ) ; +#774 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 13.60000000000000100 ) ) ; +#775 = ORIENTED_EDGE ( 'NONE', *, *, #10595, .F. ) ; +#776 = VECTOR ( 'NONE', #5077, 1000.000000000000000 ) ; +#777 = LINE ( 'NONE', #7929, #8053 ) ; +#778 = LINE ( 'NONE', #14456, #14885 ) ; +#779 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 4.149999999999999500 ) ) ; +#780 = LINE ( 'NONE', #1838, #5570 ) ; +#781 = LINE ( 'NONE', #12542, #10512 ) ; +#782 = AXIS2_PLACEMENT_3D ( 'NONE', #4754, #2133, #9662 ) ; +#783 = VECTOR ( 'NONE', #13956, 1000.000000000000000 ) ; +#784 = ORIENTED_EDGE ( 'NONE', *, *, #11056, .F. ) ; +#785 = EDGE_CURVE ( 'NONE', #5583, #12247, #4196, .T. ) ; +#786 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#787 = ORIENTED_EDGE ( 'NONE', *, *, #1591, .T. ) ; +#788 = EDGE_CURVE ( 'NONE', #12181, #5310, #7080, .T. ) ; +#789 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#790 = ORIENTED_EDGE ( 'NONE', *, *, #11786, .F. ) ; +#791 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000020300, 0.4000000000000000200, 2.649999999999999500 ) ) ; +#792 = LINE ( 'NONE', #7300, #4440 ) ; +#793 = VECTOR ( 'NONE', #10225, 1000.000000000000000 ) ; +#794 = ORIENTED_EDGE ( 'NONE', *, *, #4471, .T. ) ; +#795 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#796 = FACE_OUTER_BOUND ( 'NONE', #3185, .T. ) ; +#797 = AXIS2_PLACEMENT_3D ( 'NONE', #9300, #3152, #5063 ) ; +#798 = LINE ( 'NONE', #12750, #7880 ) ; +#799 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#800 = PLANE ( 'NONE', #13656 ) ; +#801 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 1.149999999999999900 ) ) ; +#802 = ORIENTED_EDGE ( 'NONE', *, *, #4004, .F. ) ; +#803 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#804 = ORIENTED_EDGE ( 'NONE', *, *, #5965, .F. ) ; +#805 = ORIENTED_EDGE ( 'NONE', *, *, #9796, .T. ) ; +#806 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 5.650000000000000400 ) ) ; +#807 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000009600, 0.4000000000000000200, 5.649999999999999500 ) ) ; +#808 = EDGE_CURVE ( 'NONE', #15134, #3494, #193, .T. ) ; +#809 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#810 = ADVANCED_FACE ( 'NONE', ( #14664 ), #8258, .T. ) ; +#811 = VECTOR ( 'NONE', #13566, 1000.000000000000000 ) ; +#812 = VECTOR ( 'NONE', #14194, 1000.000000000000000 ) ; +#813 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 7.150000000000000400 ) ) ; +#814 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#815 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#816 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#817 = ADVANCED_FACE ( 'NONE', ( #4410 ), #2206, .F. ) ; +#818 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000300, 0.0000000000000000000, 2.949999999999999300 ) ) ; +#819 = EDGE_CURVE ( 'NONE', #9494, #12712, #15585, .T. ) ; +#820 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#821 = VERTEX_POINT ( 'NONE', #936 ) ; +#822 = AXIS2_PLACEMENT_3D ( 'NONE', #7150, #10751, #15556 ) ; +#823 = VERTEX_POINT ( 'NONE', #6024 ) ; +#824 = AXIS2_PLACEMENT_3D ( 'NONE', #11327, #11282, #1627 ) ; +#825 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude5[3]', #10884 ) ; +#826 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, -0.9499999999999990700 ) ) ; +#827 = VECTOR ( 'NONE', #10681, 1000.000000000000000 ) ; +#828 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.0000000000000000000, -10.00000000000000000 ) ) ; +#829 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000014900, 0.4000000000000000200, 5.050000000000000700 ) ) ; +#830 = VECTOR ( 'NONE', #11427, 1000.000000000000000 ) ; +#831 = VECTOR ( 'NONE', #922, 1000.000000000000000 ) ; +#832 = EDGE_CURVE ( 'NONE', #14669, #4863, #15036, .T. ) ; +#833 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2184 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3436, #10592, #4574 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#834 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#835 = ORIENTED_EDGE ( 'NONE', *, *, #2834, .T. ) ; +#836 = ORIENTED_EDGE ( 'NONE', *, *, #14017, .F. ) ; +#837 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13180, 'distance_accuracy_value', 'NONE'); +#838 = PLANE ( 'NONE', #2596 ) ; +#839 = ORIENTED_EDGE ( 'NONE', *, *, #4718, .F. ) ; +#840 = EDGE_CURVE ( 'NONE', #1108, #9489, #13708, .T. ) ; +#841 = VECTOR ( 'NONE', #8793, 1000.000000000000000 ) ; +#842 = ORIENTED_EDGE ( 'NONE', *, *, #7576, .F. ) ; +#843 = ORIENTED_EDGE ( 'NONE', *, *, #11489, .T. ) ; +#844 = AXIS2_PLACEMENT_3D ( 'NONE', #7065, #9548, #12984 ) ; +#845 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#846 = VERTEX_POINT ( 'NONE', #1150 ) ; +#847 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, 2.050000000000001600 ) ) ; +#848 = LINE ( 'NONE', #8608, #7943 ) ; +#849 = VECTOR ( 'NONE', #3875, 1000.000000000000000 ) ; +#850 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 9.550000000000000700 ) ) ; +#851 = ORIENTED_EDGE ( 'NONE', *, *, #840, .T. ) ; +#852 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999994700, 0.0000000000000000000, 7.325000000000002000 ) ) ; +#853 = ORIENTED_EDGE ( 'NONE', *, *, #12358, .F. ) ; +#854 = EDGE_CURVE ( 'NONE', #12448, #5413, #7636, .T. ) ; +#855 = ORIENTED_EDGE ( 'NONE', *, *, #5189, .F. ) ; +#856 = FACE_OUTER_BOUND ( 'NONE', #8044, .T. ) ; +#857 = ORIENTED_EDGE ( 'NONE', *, *, #7453, .T. ) ; +#858 = LINE ( 'NONE', #2942, #1807 ) ; +#859 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #8873, #1652, #13749, #11198, #3955, #13692 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.0002388152348380243200, 0.0004776304696760486400 ), + .UNSPECIFIED. ) ; +#860 = CARTESIAN_POINT ( 'NONE', ( 8.549999999999998900, 0.4000000000000000200, 8.649999999999993200 ) ) ; +#861 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#862 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#863 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 1.325000000000001500 ) ) ; +#864 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000009200, 0.7999999999999977100, 9.082928932188135500 ) ) ; +#865 = ORIENTED_EDGE ( 'NONE', *, *, #302, .T. ) ; +#866 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#867 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#868 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#869 = DIRECTION ( 'NONE', ( -5.478074134663584300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#870 = VERTEX_POINT ( 'NONE', #10911 ) ; +#871 = ORIENTED_EDGE ( 'NONE', *, *, #9995, .T. ) ; +#872 = CARTESIAN_POINT ( 'NONE', ( -7.629277334261822800, 3.351999999999999400, -2.795530125675982800 ) ) ; +#873 = LINE ( 'NONE', #6805, #11165 ) ; +#874 = FACE_OUTER_BOUND ( 'NONE', #3630, .T. ) ; +#875 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#876 = EDGE_CURVE ( 'NONE', #6716, #2013, #368, .T. ) ; +#877 = PLANE ( 'NONE', #1145 ) ; +#878 = EDGE_CURVE ( 'NONE', #14119, #11456, #3231, .T. ) ; +#879 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#880 = EDGE_CURVE ( 'NONE', #8867, #13067, #3609, .T. ) ; +#881 = FILL_AREA_STYLE ('',( #7036 ) ) ; +#882 = PLANE ( 'NONE', #8786 ) ; +#883 = ORIENTED_EDGE ( 'NONE', *, *, #6242, .F. ) ; +#884 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#885 = LINE ( 'NONE', #9117, #1848 ) ; +#886 = VECTOR ( 'NONE', #173, 1000.000000000000000 ) ; +#887 = AXIS2_PLACEMENT_3D ( 'NONE', #1811, #2984, #13963 ) ; +#888 = ORIENTED_EDGE ( 'NONE', *, *, #7685, .T. ) ; +#889 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, -2.449999999999998800 ) ) ; +#890 = ADVANCED_FACE ( 'NONE', ( #11242 ), #2151, .T. ) ; +#891 = PLANE ( 'NONE', #11159 ) ; +#892 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#893 = EDGE_LOOP ( 'NONE', ( #11246, #12279, #11517, #1837 ) ) ; +#894 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.3999999999999999700, 2.949999999999999700 ) ) ; +#895 = EDGE_LOOP ( 'NONE', ( #12648, #1632, #3680, #15025 ) ) ; +#896 = FACE_OUTER_BOUND ( 'NONE', #12724, .T. ) ; +#897 = ORIENTED_EDGE ( 'NONE', *, *, #10609, .T. ) ; +#898 = EDGE_CURVE ( 'NONE', #5532, #14204, #12925, .T. ) ; +#899 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000020300, 0.8000000000000000400, 3.550000000000001200 ) ) ; +#900 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#901 = LINE ( 'NONE', #12274, #11934 ) ; +#902 = ORIENTED_EDGE ( 'NONE', *, *, #14729, .F. ) ; +#903 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.149999999999999900, 8.990000000000002000 ) ) ; +#904 = EDGE_CURVE ( 'NONE', #12413, #4968, #1693, .T. ) ; +#905 = AXIS2_PLACEMENT_3D ( 'NONE', #5178, #1381, #9853 ) ; +#906 = AXIS2_PLACEMENT_3D ( 'NONE', #911, #4454, #14284 ) ; +#907 = PLANE ( 'NONE', #42 ) ; +#908 = PLANE ( 'NONE', #4284 ) ; +#909 = VERTEX_POINT ( 'NONE', #12226 ) ; +#910 = LINE ( 'NONE', #4644, #3570 ) ; +#911 = CARTESIAN_POINT ( 'NONE', ( -3.182167904976575400E-016, 1.079957636320873200E-014, -2.880000000000011000 ) ) ; +#912 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#913 = VERTEX_POINT ( 'NONE', #12120 ) ; +#914 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.3999999999999999700, 1.849999999999999900 ) ) ; +#915 = ORIENTED_EDGE ( 'NONE', *, *, #2406, .T. ) ; +#916 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.149999999999998600, -2.780000000000001100 ) ) ; +#917 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 5.478074134663595300E-015 ) ) ; +#918 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#919 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#920 = EDGE_LOOP ( 'NONE', ( #5992, #11064, #12384, #12743 ) ) ; +#921 = EDGE_CURVE ( 'NONE', #2549, #10375, #15405, .T. ) ; +#922 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#923 = ORIENTED_EDGE ( 'NONE', *, *, #13570, .T. ) ; +#924 = ORIENTED_EDGE ( 'NONE', *, *, #5109, .T. ) ; +#925 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#926 = ORIENTED_EDGE ( 'NONE', *, *, #14210, .F. ) ; +#927 = CLOSED_SHELL ( 'NONE', ( #12395, #1462, #6186, #9540, #13915, #8538 ) ) ; +#928 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999988600, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#930 = PLANE ( 'NONE', #2393 ) ; +#929 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000030200, 0.0000000000000000000, -0.1749999999999998200 ) ) ; +#931 = EDGE_CURVE ( 'NONE', #11608, #14177, #9717, .T. ) ; +#932 = VECTOR ( 'NONE', #4499, 1000.000000000000000 ) ; +#933 = VECTOR ( 'NONE', #9922, 1000.000000000000000 ) ; +#934 = AXIS2_PLACEMENT_3D ( 'NONE', #7336, #3420, #15583 ) ; +#935 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#936 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000002800, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#937 = VERTEX_POINT ( 'NONE', #4897 ) ; +#938 = ORIENTED_EDGE ( 'NONE', *, *, #7899, .F. ) ; +#939 = VERTEX_POINT ( 'NONE', #1210 ) ; +#940 = EDGE_LOOP ( 'NONE', ( #1872, #15457, #952, #5393 ) ) ; +#941 = CARTESIAN_POINT ( 'NONE', ( -8.549999999999998900, 0.4000000000000000200, 9.550000000000000700 ) ) ; +#942 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 1.637941840314110200, 4.049999999999999800 ) ) ; +#943 = ORIENTED_EDGE ( 'NONE', *, *, #9576, .T. ) ; +#944 = DIRECTION ( 'NONE', ( -6.100126508929432000E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#945 = EDGE_CURVE ( 'NONE', #8695, #10896, #11790, .T. ) ; +#946 = EDGE_CURVE ( 'NONE', #7645, #7052, #14649, .T. ) ; +#947 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#948 = VECTOR ( 'NONE', #1016, 1000.000000000000000 ) ; +#949 = VECTOR ( 'NONE', #3640, 1000.000000000000000 ) ; +#950 = PLANE ( 'NONE', #7420 ) ; +#951 = VECTOR ( 'NONE', #14184, 1000.000000000000000 ) ; +#952 = ORIENTED_EDGE ( 'NONE', *, *, #3188, .T. ) ; +#953 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 2.050000000000001600 ) ) ; +#954 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.4000000000000000200, 1.850000000000000100 ) ) ; +#955 = ORIENTED_EDGE ( 'NONE', *, *, #7748, .T. ) ; +#956 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.3999999999999999700, 4.149999999999999500 ) ) ; +#957 = ORIENTED_EDGE ( 'NONE', *, *, #3855, .T. ) ; +#958 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, -15.05858178898088800, -5.150000000000001200 ) ) ; +#959 = AXIS2_PLACEMENT_3D ( 'NONE', #10931, #6095, #14582 ) ; +#960 = ORIENTED_EDGE ( 'NONE', *, *, #13231, .T. ) ; +#961 = FACE_OUTER_BOUND ( 'NONE', #9076, .T. ) ; +#962 = SURFACE_STYLE_FILL_AREA ( #3165 ) ; +#963 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 1.149999999999999900 ) ) ; +#964 = VECTOR ( 'NONE', #10952, 1000.000000000000000 ) ; +#965 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 8.050000000000000700 ) ) ; +#966 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#967 = DIRECTION ( 'NONE', ( -5.478074134663594500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#968 = ORIENTED_EDGE ( 'NONE', *, *, #8096, .T. ) ; +#969 = EDGE_CURVE ( 'NONE', #3601, #10623, #8400, .T. ) ; +#970 = SURFACE_SIDE_STYLE ('',( #13063 ) ) ; +#971 = ADVANCED_FACE ( 'NONE', ( #14467 ), #6043, .T. ) ; +#972 = ORIENTED_EDGE ( 'NONE', *, *, #9730, .T. ) ; +#973 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#974 = VERTEX_POINT ( 'NONE', #6197 ) ; +#975 = PLANE ( 'NONE', #14813 ) ; +#976 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000001200, -3.079999999999999200 ) ) ; +#977 = EDGE_CURVE ( 'NONE', #13673, #15399, #4391, .T. ) ; +#978 = LINE ( 'NONE', #10015, #12014 ) ; +#979 = VECTOR ( 'NONE', #15284, 1000.000000000000000 ) ; +#980 = PLANE ( 'NONE', #4637 ) ; +#981 = VECTOR ( 'NONE', #1301, 1000.000000000000000 ) ; +#982 = ORIENTED_EDGE ( 'NONE', *, *, #15490, .T. ) ; +#983 = AXIS2_PLACEMENT_3D ( 'NONE', #6671, #5601, #12655 ) ; +#984 = FACE_OUTER_BOUND ( 'NONE', #12867, .T. ) ; +#985 = EDGE_LOOP ( 'NONE', ( #7360, #13860, #2097, #2208 ) ) ; +#986 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 6.375000000000000900 ) ) ; +#987 = VERTEX_POINT ( 'NONE', #111 ) ; +#989 = PLANE ( 'NONE', #11887 ) ; +#988 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#990 = ORIENTED_EDGE ( 'NONE', *, *, #13264, .T. ) ; +#991 = EDGE_LOOP ( 'NONE', ( #463, #14525, #6299, #8161 ) ) ; +#992 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#993 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 3.550000000000001200 ) ) ; +#994 = AXIS2_PLACEMENT_3D ( 'NONE', #14386, #15577, #2337 ) ; +#995 = LINE ( 'NONE', #33, #12798 ) ; +#996 = LINE ( 'NONE', #3526, #10544 ) ; +#997 = EDGE_CURVE ( 'NONE', #6999, #8600, #6879, .T. ) ; +#998 = EDGE_CURVE ( 'NONE', #5435, #6004, #6486, .T. ) ; +#999 = LINE ( 'NONE', #6757, #12213 ) ; +#1000 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1001 = ORIENTED_EDGE ( 'NONE', *, *, #15463, .F. ) ; +#1002 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1003 = ORIENTED_EDGE ( 'NONE', *, *, #6527, .F. ) ; +#1004 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1605 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #10010, #5069, #7579 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1005 = FACE_OUTER_BOUND ( 'NONE', #10522, .T. ) ; +#1006 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1007 = VECTOR ( 'NONE', #1942, 1000.000000000000000 ) ; +#1008 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, -3.174999999999998900 ) ) ; +#1009 = LINE ( 'NONE', #8646, #15473 ) ; +#1010 = ORIENTED_EDGE ( 'NONE', *, *, #880, .T. ) ; +#1011 = VERTEX_POINT ( 'NONE', #14684 ) ; +#1012 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#1013 = EDGE_CURVE ( 'NONE', #7398, #3707, #1501, .T. ) ; +#1014 = MANIFOLD_SOLID_BREP ( 'LPattern1[4]', #15300 ) ; +#1015 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000008900, 0.8000000000000000400, 5.825000000000001100 ) ) ; +#1016 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1017 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999967700, 0.4000000000000000200, 6.550000000000002500 ) ) ; +#1018 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1019 = ORIENTED_EDGE ( 'NONE', *, *, #687, .F. ) ; +#1020 = LINE ( 'NONE', #1086, #10747 ) ; +#1021 = ORIENTED_EDGE ( 'NONE', *, *, #1230, .F. ) ; +#1022 = EDGE_CURVE ( 'NONE', #13827, #2914, #9889, .T. ) ; +#1023 = ORIENTED_EDGE ( 'NONE', *, *, #13627, .F. ) ; +#1024 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1025 = LINE ( 'NONE', #4439, #648 ) ; +#1026 = FACE_OUTER_BOUND ( 'NONE', #7074, .T. ) ; +#1027 = PLANE ( 'NONE', #7011 ) ; +#1028 = VERTEX_POINT ( 'NONE', #6245 ) ; +#1029 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1030 = VERTEX_POINT ( 'NONE', #9650 ) ; +#1031 = ORIENTED_EDGE ( 'NONE', *, *, #6058, .T. ) ; +#1032 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.8000000000000000400, 0.0000000000000000000 ) ) ; +#1033 = ORIENTED_EDGE ( 'NONE', *, *, #9859, .F. ) ; +#1034 = EDGE_LOOP ( 'NONE', ( #11128, #10184, #11522, #6077, #3792, #12426 ) ) ; +#1035 = EDGE_CURVE ( 'NONE', #8392, #3127, #8763, .T. ) ; +#1036 = EDGE_CURVE ( 'NONE', #12250, #5929, #14838, .T. ) ; +#1037 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#1038 = SURFACE_SIDE_STYLE ('',( #1314 ) ) ; +#1039 = VERTEX_POINT ( 'NONE', #10868 ) ; +#1040 = LINE ( 'NONE', #3571, #11153 ) ; +#1041 = LINE ( 'NONE', #6284, #8879 ) ; +#1042 = EDGE_LOOP ( 'NONE', ( #15662, #9554, #11051, #389 ) ) ; +#1043 = EDGE_CURVE ( 'NONE', #5064, #5476, #12342, .T. ) ; +#1044 = ADVANCED_FACE ( 'NONE', ( #15749 ), #6453, .T. ) ; +#1045 = AXIS2_PLACEMENT_3D ( 'NONE', #1583, #12704, #15063 ) ; +#1046 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1047 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1048 = ORIENTED_EDGE ( 'NONE', *, *, #969, .T. ) ; +#1049 = FACE_OUTER_BOUND ( 'NONE', #4289, .T. ) ; +#1050 = EDGE_LOOP ( 'NONE', ( #9965, #14929, #12334, #12570 ) ) ; +#1051 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999968400, 0.4000000000000000200, 5.649999999999999500 ) ) ; +#1052 = LINE ( 'NONE', #4508, #7563 ) ; +#1053 = VECTOR ( 'NONE', #6303, 1000.000000000000000 ) ; +#1054 = PLANE ( 'NONE', #2559 ) ; +#1055 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000000700, 8.990000000000002000 ) ) ; +#1056 = ADVANCED_FACE ( 'NONE', ( #354 ), #14791, .T. ) ; +#1057 = EDGE_CURVE ( 'NONE', #14396, #8136, #3031, .T. ) ; +#1058 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, -3.350000000000000500 ) ) ; +#1059 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.3999999999999999700, 8.050000000000000700 ) ) ; +#1060 = LINE ( 'NONE', #2550, #13443 ) ; +#1061 = ORIENTED_EDGE ( 'NONE', *, *, #12752, .F. ) ; +#1062 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, -1.674999999999998900 ) ) ; +#1063 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999987600, 0.8000000000000000400, 5.649999999999995900 ) ) ; +#1064 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1065 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#1066 = LINE ( 'NONE', #3763, #9107 ) ; +#1067 = LINE ( 'NONE', #5665, #2983 ) ; +#1068 = CARTESIAN_POINT ( 'NONE', ( -7.636149413117881800, 3.061459556676524600, -2.879999999999999400 ) ) ; +#1069 = ORIENTED_EDGE ( 'NONE', *, *, #4082, .F. ) ; +#1070 = DIRECTION ( 'NONE', ( -5.478074134663584300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1071 = AXIS2_PLACEMENT_3D ( 'NONE', #6485, #14983, #7718 ) ; +#1072 = CARTESIAN_POINT ( 'NONE', ( 8.549999999999998900, 0.8000000000000000400, 8.649999999999993200 ) ) ; +#1073 = ORIENTED_EDGE ( 'NONE', *, *, #6225, .T. ) ; +#1074 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.3999999999999999700, 3.649999999999999500 ) ) ; +#1075 = VECTOR ( 'NONE', #13546, 1000.000000000000000 ) ; +#1076 = ORIENTED_EDGE ( 'NONE', *, *, #2648, .T. ) ; +#1077 = ORIENTED_EDGE ( 'NONE', *, *, #3240, .T. ) ; +#1078 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1079 = EDGE_CURVE ( 'NONE', #10367, #5919, #3216, .T. ) ; +#1080 = ADVANCED_FACE ( 'NONE', ( #9153 ), #9174, .T. ) ; +#1081 = LINE ( 'NONE', #10632, #1267 ) ; +#1082 = LINE ( 'NONE', #1232, #6827 ) ; +#1083 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999906200, 0.0000000000000000000, -0.3499999999999993100 ) ) ; +#1084 = EDGE_CURVE ( 'NONE', #7750, #4946, #9515, .T. ) ; +#1086 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999967700, 0.4000000000000000200, 5.649999999999999500 ) ) ; +#1085 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999952400, 0.0000000000000000000, 4.150000000000001200 ) ) ; +#1087 = EDGE_CURVE ( 'NONE', #11155, #13015, #6674, .T. ) ; +#1088 = PLANE ( 'NONE', #14461 ) ; +#1089 = CARTESIAN_POINT ( 'NONE', ( -7.627408552845517800, 3.076234407614292500, -2.879999999999999400 ) ) ; +#1090 = ORIENTED_EDGE ( 'NONE', *, *, #13690, .F. ) ; +#1091 = LINE ( 'NONE', #1008, #6454 ) ; +#1092 = VERTEX_POINT ( 'NONE', #779 ) ; +#1093 = VERTEX_POINT ( 'NONE', #512 ) ; +#1094 = VERTEX_POINT ( 'NONE', #3234 ) ; +#1095 = AXIS2_PLACEMENT_3D ( 'NONE', #9620, #12146, #3591 ) ; +#1096 = COLOUR_RGB ( '',0.5019607843137254800, 0.5019607843137254800, 0.5019607843137254800 ) ; +#1097 = VECTOR ( 'NONE', #10823, 1000.000000000000000 ) ; +#1098 = PLANE ( 'NONE', #4020 ) ; +#1099 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 7.150000000000000400 ) ) ; +#1100 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1101 = ORIENTED_EDGE ( 'NONE', *, *, #10679, .F. ) ; +#1102 = ORIENTED_EDGE ( 'NONE', *, *, #4932, .F. ) ; +#1103 = EDGE_CURVE ( 'NONE', #14893, #11555, #11592, .T. ) ; +#1104 = ORIENTED_EDGE ( 'NONE', *, *, #14113, .F. ) ; +#1105 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, -15.05858178898088800, -9.600000000000001400 ) ) ; +#1106 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#1107 = LINE ( 'NONE', #7709, #13685 ) ; +#1108 = VERTEX_POINT ( 'NONE', #6990 ) ; +#1109 = AXIS2_PLACEMENT_3D ( 'NONE', #1265, #13405, #5059 ) ; +#1110 = ORIENTED_EDGE ( 'NONE', *, *, #13447, .F. ) ; +#1111 = LINE ( 'NONE', #956, #3979 ) ; +#1112 = LINE ( 'NONE', #2510, #5704 ) ; +#1113 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#1114 = EDGE_CURVE ( 'NONE', #4089, #14096, #730, .T. ) ; +#1115 = VERTEX_POINT ( 'NONE', #5541 ) ; +#1116 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1117 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.149999999999999900, 9.090000000000001600 ) ) ; +#1119 = ORIENTED_EDGE ( 'NONE', *, *, #6567, .T. ) ; +#1118 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1120 = VERTEX_POINT ( 'NONE', #13062 ) ; +#1121 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.4000000000000000200, 1.850000000000000100 ) ) ; +#1122 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1123 = EDGE_LOOP ( 'NONE', ( #10909, #12531, #7595, #4954, #6668, #11635 ) ) ; +#1124 = ADVANCED_FACE ( 'NONE', ( #14085 ), #882, .T. ) ; +#1125 = ORIENTED_EDGE ( 'NONE', *, *, #11606, .F. ) ; +#1126 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1127 = ORIENTED_EDGE ( 'NONE', *, *, #7746, .F. ) ; +#1128 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1129 = PLANE ( 'NONE', #14739 ) ; +#1130 = PRESENTATION_STYLE_ASSIGNMENT (( #7143 ) ) ; +#1131 = CIRCLE ( 'NONE', #3313, 0.4999999999999995600 ) ; +#1132 = EDGE_CURVE ( 'NONE', #5687, #13019, #174, .T. ) ; +#1133 = AXIS2_PLACEMENT_3D ( 'NONE', #511, #6405, #11383 ) ; +#1134 = VECTOR ( 'NONE', #7534, 1000.000000000000000 ) ; +#1135 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1136 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#1137 = ORIENTED_EDGE ( 'NONE', *, *, #7327, .T. ) ; +#1138 = ORIENTED_EDGE ( 'NONE', *, *, #10903, .T. ) ; +#1139 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, -1.850000000000000500 ) ) ; +#1141 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1140 = PLANE ( 'NONE', #11911 ) ; +#1142 = VERTEX_POINT ( 'NONE', #1871 ) ; +#1143 = EDGE_CURVE ( 'NONE', #14616, #2979, #5135, .T. ) ; +#1144 = ORIENTED_EDGE ( 'NONE', *, *, #1013, .T. ) ; +#1145 = AXIS2_PLACEMENT_3D ( 'NONE', #1032, #3539, #14402 ) ; +#1146 = CARTESIAN_POINT ( 'NONE', ( -7.601335216528854100, 3.115261346167814700, 9.066879667662414400 ) ) ; +#1147 = ORIENTED_EDGE ( 'NONE', *, *, #1738, .T. ) ; +#1148 = FACE_OUTER_BOUND ( 'NONE', #10650, .T. ) ; +#1149 = DIRECTION ( 'NONE', ( 1.807003620809173900E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1150 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#1151 = LINE ( 'NONE', #5156, #7272 ) ; +#1152 = VECTOR ( 'NONE', #14491, 1000.000000000000000 ) ; +#1153 = LINE ( 'NONE', #6374, #13726 ) ; +#1154 = VERTEX_POINT ( 'NONE', #691 ) ; +#1155 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 0.7999999999999760600, -2.880000000000009200 ) ) ; +#1156 = ORIENTED_EDGE ( 'NONE', *, *, #13484, .T. ) ; +#1157 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1158 = EDGE_CURVE ( 'NONE', #9479, #10394, #7436, .T. ) ; +#1159 = EDGE_LOOP ( 'NONE', ( #8785, #9681, #3906, #3331 ) ) ; +#1160 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.149999999999999900, 9.090000000000001600 ) ) ; +#1161 = LINE ( 'NONE', #7588, #776 ) ; +#1162 = LINE ( 'NONE', #9095, #13942 ) ; +#1163 = DIRECTION ( 'NONE', ( -3.690901012716604900E-015, -1.000000000000000000, 6.123233995736767300E-017 ) ) ; +#1164 = VECTOR ( 'NONE', #3496, 1000.000000000000000 ) ; +#1165 = VECTOR ( 'NONE', #3147, 1000.000000000000000 ) ; +#1166 = VECTOR ( 'NONE', #9125, 1000.000000000000000 ) ; +#1167 = VECTOR ( 'NONE', #3033, 1000.000000000000000 ) ; +#1168 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1169 = PLANE ( 'NONE', #2829 ) ; +#1170 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.807003620809173900E-016 ) ) ; +#1171 = ADVANCED_FACE ( 'NONE', ( #9704 ), #11762, .T. ) ; +#1172 = VERTEX_POINT ( 'NONE', #537 ) ; +#1173 = PLANE ( 'NONE', #959 ) ; +#1174 = ORIENTED_EDGE ( 'NONE', *, *, #7099, .T. ) ; +#1175 = ORIENTED_EDGE ( 'NONE', *, *, #6471, .F. ) ; +#1176 = FACE_OUTER_BOUND ( 'NONE', #9989, .T. ) ; +#1177 = LINE ( 'NONE', #12871, #2885 ) ; +#1178 = DIRECTION ( 'NONE', ( 9.035018104045869500E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1179 = VECTOR ( 'NONE', #14798, 1000.000000000000000 ) ; +#1180 = CARTESIAN_POINT ( 'NONE', ( -7.565530029177630800, 3.349999999999999600, -2.858752156770253200 ) ) ; +#1181 = EDGE_CURVE ( 'NONE', #3097, #7255, #13114, .T. ) ; +#1182 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, -3.174999999999998900 ) ) ; +#1183 = ORIENTED_EDGE ( 'NONE', *, *, #5656, .T. ) ; +#1184 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1185 = ORIENTED_EDGE ( 'NONE', *, *, #14444, .F. ) ; +#1186 = EDGE_CURVE ( 'NONE', #12230, #6435, #11967, .T. ) ; +#1187 = ORIENTED_EDGE ( 'NONE', *, *, #4310, .F. ) ; +#1188 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 0.5500000000000010400 ) ) ; +#1189 = LINE ( 'NONE', #3729, #3468 ) ; +#1190 = VECTOR ( 'NONE', #8456, 1000.000000000000000 ) ; +#1191 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9675 ) ) ; +#1192 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1193 = VECTOR ( 'NONE', #14982, 1000.000000000000000 ) ; +#1194 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, -1.399999999999999700 ) ) ; +#1195 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -5.102127870520021000E-016 ) ) ; +#1196 = ORIENTED_EDGE ( 'NONE', *, *, #6349, .F. ) ; +#1197 = ORIENTED_EDGE ( 'NONE', *, *, #2202, .F. ) ; +#1198 = AXIS2_PLACEMENT_3D ( 'NONE', #484, #2830, #8881 ) ; +#1199 = EDGE_CURVE ( 'NONE', #2593, #1748, #5518, .T. ) ; +#1200 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1201 = ADVANCED_FACE ( 'NONE', ( #6292 ), #550, .F. ) ; +#1202 = VECTOR ( 'NONE', #3970, 1000.000000000000000 ) ; +#1203 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1204 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1205 = CARTESIAN_POINT ( 'NONE', ( 7.614815129928837600, 3.096076976721358500, 9.079702065901541300 ) ) ; +#1206 = FACE_OUTER_BOUND ( 'NONE', #3890, .T. ) ; +#1207 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, -2.449999999999998800 ) ) ; +#1208 = ORIENTED_EDGE ( 'NONE', *, *, #13399, .T. ) ; +#1209 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1210 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 4.149999999999999500 ) ) ; +#1211 = CARTESIAN_POINT ( 'NONE', ( -7.564605673451389100, 3.149999999999999500, 8.998640774202062400 ) ) ; +#1212 = VERTEX_POINT ( 'NONE', #5197 ) ; +#1213 = LINE ( 'NONE', #5594, #13408 ) ; +#1214 = VERTEX_POINT ( 'NONE', #6426 ) ; +#1215 = ORIENTED_EDGE ( 'NONE', *, *, #12479, .T. ) ; +#1216 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 3.550000000000001200 ) ) ; +#1217 = ORIENTED_EDGE ( 'NONE', *, *, #10171, .F. ) ; +#1218 = LINE ( 'NONE', #6461, #6582 ) ; +#1219 = LINE ( 'NONE', #13395, #13227 ) ; +#1220 = EDGE_CURVE ( 'NONE', #13269, #7971, #6469, .T. ) ; +#1221 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#1222 = CARTESIAN_POINT ( 'NONE', ( 7.625487921837795100, 3.079455349686083900, -2.876673601807758100 ) ) ; +#1223 = DIRECTION ( 'NONE', ( 6.100126508929432000E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1224 = ORIENTED_EDGE ( 'NONE', *, *, #8632, .F. ) ; +#1225 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1226 = ORIENTED_EDGE ( 'NONE', *, *, #10106, .T. ) ; +#1227 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 18.10000000000000100 ) ) ; +#1228 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.149999999999999500, 8.990000000000002000 ) ) ; +#1229 = VERTEX_POINT ( 'NONE', #3401 ) ; +#1230 = EDGE_CURVE ( 'NONE', #939, #7996, #1111, .T. ) ; +#1231 = VECTOR ( 'NONE', #13613, 1000.000000000000000 ) ; +#1232 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999964500, 0.8000000000000000400, -0.9499999999999990700 ) ) ; +#1233 = ORIENTED_EDGE ( 'NONE', *, *, #733, .F. ) ; +#1234 = AXIS2_PLACEMENT_3D ( 'NONE', #13239, #1168, #8653 ) ; +#1235 = ORIENTED_EDGE ( 'NONE', *, *, #14210, .T. ) ; +#1236 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 7.150000000000000400 ) ) ; +#1237 = VECTOR ( 'NONE', #8140, 1000.000000000000000 ) ; +#1238 = VECTOR ( 'NONE', #5700, 1000.000000000000000 ) ; +#1239 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 1.637941840314110200, 3.649999999999999500 ) ) ; +#1240 = ADVANCED_FACE ( 'NONE', ( #12525 ), #10709, .F. ) ; +#1241 = VERTEX_POINT ( 'NONE', #14277 ) ; +#1242 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.0000000000000000000, 2.950000000000000200 ) ) ; +#1244 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1243 = DIRECTION ( 'NONE', ( -3.097720492815726700E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1245 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000001200, 9.090000000000001600 ) ) ; +#1246 = EDGE_CURVE ( 'NONE', #9390, #1554, #2825, .T. ) ; +#1247 = EDGE_CURVE ( 'NONE', #5145, #5684, #1884, .T. ) ; +#1248 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1249 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1250 = ORIENTED_EDGE ( 'NONE', *, *, #15156, .F. ) ; +#1251 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 2.825000000000001100 ) ) ; +#1252 = FACE_OUTER_BOUND ( 'NONE', #4908, .T. ) ; +#1253 = EDGE_LOOP ( 'NONE', ( #13434, #13904, #7284, #13203 ) ) ; +#1254 = VECTOR ( 'NONE', #4237, 1000.000000000000000 ) ; +#1255 = VECTOR ( 'NONE', #6458, 1000.000000000000000 ) ; +#1256 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000009900, 0.8000000000000000400, 6.549999999999998000 ) ) ; +#1257 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14414 ), #10860 ) ; +#1258 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1259 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1260 = AXIS2_PLACEMENT_3D ( 'NONE', #13931, #10248, #10037 ) ; +#1261 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1262 = FACE_BOUND ( 'NONE', #4431, .T. ) ; +#1263 = EDGE_LOOP ( 'NONE', ( #10753, #14361, #4876, #9176 ) ) ; +#1264 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, 5.050000000000000700 ) ) ; +#1265 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 4.599999999999999600 ) ) ; +#1266 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1267 = VECTOR ( 'NONE', #8358, 1000.000000000000000 ) ; +#1268 = LINE ( 'NONE', #15295, #12121 ) ; +#1269 = EDGE_CURVE ( 'NONE', #460, #2564, #1486, .T. ) ; +#1270 = ORIENTED_EDGE ( 'NONE', *, *, #508, .T. ) ; +#1271 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1272 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000041900, 0.8000000000000000400, -3.350000000000000500 ) ) ; +#1273 = PLANE ( 'NONE', #12117 ) ; +#1274 = ORIENTED_EDGE ( 'NONE', *, *, #13059, .F. ) ; +#1275 = VECTOR ( 'NONE', #8680, 1000.000000000000000 ) ; +#1276 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1277 = ORIENTED_EDGE ( 'NONE', *, *, #1247, .F. ) ; +#1278 = AXIS2_PLACEMENT_3D ( 'NONE', #13516, #13412, #9757 ) ; +#1279 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, -15.05858178898088800, -6.900000000000000400 ) ) ; +#1280 = PLANE ( 'NONE', #2190 ) ; +#1281 = ADVANCED_FACE ( 'NONE', ( #9324 ), #6601, .F. ) ; +#1282 = LINE ( 'NONE', #14972, #8157 ) ; +#1283 = LINE ( 'NONE', #4408, #9312 ) ; +#1284 = PLANE ( 'NONE', #2057 ) ; +#1285 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1286 = PLANE ( 'NONE', #5982 ) ; +#1287 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000002500, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#1288 = AXIS2_PLACEMENT_3D ( 'NONE', #2783, #13766, #5254 ) ; +#1289 = ORIENTED_EDGE ( 'NONE', *, *, #9589, .T. ) ; +#1290 = B_SPLINE_SURFACE_WITH_KNOTS ( 'NONE', 1, 3, ( + ( #12674, #15082, #2727, #6478, #12461, #11361 ), + ( #15026, #5201, #488, #4068, #11461, #433 ), + ( #7712, #9034, #4169, #2781, #8984, #1711 ), + ( #2833, #1555, #7877, #1659, #8933, #12564 ) ), + .UNSPECIFIED., .F., .F., .F., + ( 2, 1, 1, 2 ), + ( 4, 2, 4 ), + ( -0.01000000000000000000, 0.0000000000000000000, 1.000000000000000000, 1.010100000000000000 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#1291 = VECTOR ( 'NONE', #12455, 1000.000000000000000 ) ; +#1292 = ORIENTED_EDGE ( 'NONE', *, *, #8411, .T. ) ; +#1293 = CARTESIAN_POINT ( 'NONE', ( -7.817458334292936700, 3.206844258255253900, 9.051888831344181000 ) ) ; +#1294 = ORIENTED_EDGE ( 'NONE', *, *, #8470, .T. ) ; +#1295 = EDGE_CURVE ( 'NONE', #6546, #11295, #15389, .T. ) ; +#1296 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000023800, 0.4000000000000000200, 2.049999999999999800 ) ) ; +#1297 = ADVANCED_FACE ( 'NONE', ( #12734 ), #7625, .T. ) ; +#1298 = EDGE_CURVE ( 'NONE', #11714, #1782, #10268, .T. ) ; +#1299 = CYLINDRICAL_SURFACE ( 'NONE', #10403, 0.2999999999999999300 ) ; +#1300 = VECTOR ( 'NONE', #814, 1000.000000000000000 ) ; +#1301 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1302 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, -1.850000000000000500 ) ) ; +#1303 = ORIENTED_EDGE ( 'NONE', *, *, #3495, .F. ) ; +#1304 = ORIENTED_EDGE ( 'NONE', *, *, #11899, .F. ) ; +#1305 = ORIENTED_EDGE ( 'NONE', *, *, #8344, .T. ) ; +#1306 = ORIENTED_EDGE ( 'NONE', *, *, #11995, .F. ) ; +#1307 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1308 = ORIENTED_EDGE ( 'NONE', *, *, #4535, .T. ) ; +#1309 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1310 = ORIENTED_EDGE ( 'NONE', *, *, #7463, .T. ) ; +#1311 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 1.806230589874906900, -1.850000000000000500 ) ) ; +#1312 = ADVANCED_FACE ( 'NONE', ( #7621 ), #5367, .F. ) ; +#1313 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 8.650000000000000400 ) ) ; +#1314 = SURFACE_STYLE_FILL_AREA ( #12055 ) ; +#1315 = LINE ( 'NONE', #3645, #9154 ) ; +#1316 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1317 = LINE ( 'NONE', #7172, #15038 ) ; +#1318 = VERTEX_POINT ( 'NONE', #3174 ) ; +#1319 = EDGE_CURVE ( 'NONE', #4473, #10623, #7244, .T. ) ; +#1320 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1321 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1322 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, -3.174999999999998900 ) ) ; +#1323 = ORIENTED_EDGE ( 'NONE', *, *, #11158, .T. ) ; +#1324 = EDGE_LOOP ( 'NONE', ( #5163, #3960, #15754, #6167 ) ) ; +#1325 = ADVANCED_FACE ( 'NONE', ( #7061 ), #14016, .F. ) ; +#1326 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14349, 'distance_accuracy_value', 'NONE'); +#1327 = ORIENTED_EDGE ( 'NONE', *, *, #5373, .F. ) ; +#1328 = ORIENTED_EDGE ( 'NONE', *, *, #4220, .T. ) ; +#1329 = ORIENTED_EDGE ( 'NONE', *, *, #2908, .F. ) ; +#1330 = EDGE_CURVE ( 'NONE', #5005, #5188, #10459, .T. ) ; +#1331 = VECTOR ( 'NONE', #3124, 1000.000000000000000 ) ; +#1332 = CARTESIAN_POINT ( 'NONE', ( -7.649999999999999500, 3.049999999999999800, 9.082928932188135500 ) ) ; +#1333 = FACE_OUTER_BOUND ( 'NONE', #15627, .T. ) ; +#1334 = ORIENTED_EDGE ( 'NONE', *, *, #9904, .F. ) ; +#1335 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#1336 = ORIENTED_EDGE ( 'NONE', *, *, #5484, .T. ) ; +#1337 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 5.050000000000000700 ) ) ; +#1338 = ORIENTED_EDGE ( 'NONE', *, *, #998, .F. ) ; +#1339 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1340 = EDGE_CURVE ( 'NONE', #2102, #15221, #5502, .T. ) ; +#1341 = ORIENTED_EDGE ( 'NONE', *, *, #15150, .F. ) ; +#1342 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#1343 = VECTOR ( 'NONE', #7897, 1000.000000000000000 ) ; +#1344 = LINE ( 'NONE', #6288, #10490 ) ; +#1345 = LINE ( 'NONE', #2895, #9920 ) ; +#1346 = FACE_OUTER_BOUND ( 'NONE', #6983, .T. ) ; +#1347 = VECTOR ( 'NONE', #4930, 1000.000000000000000 ) ; +#1348 = VERTEX_POINT ( 'NONE', #6955 ) ; +#1349 = EDGE_CURVE ( 'NONE', #6683, #1999, #11947, .T. ) ; +#1350 = ORIENTED_EDGE ( 'NONE', *, *, #14426, .F. ) ; +#1351 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#1352 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1353 = ORIENTED_EDGE ( 'NONE', *, *, #7077, .T. ) ; +#1354 = CARTESIAN_POINT ( 'NONE', ( 7.565530125675980600, 3.351999999999997600, -2.859277334261815600 ) ) ; +#1355 = VECTOR ( 'NONE', #12288, 1000.000000000000000 ) ; +#1356 = VECTOR ( 'NONE', #751, 1000.000000000000000 ) ; +#1357 = VECTOR ( 'NONE', #9912, 1000.000000000000000 ) ; +#1358 = ORIENTED_EDGE ( 'NONE', *, *, #7812, .F. ) ; +#1359 = VECTOR ( 'NONE', #12864, 1000.000000000000000 ) ; +#1360 = CYLINDRICAL_SURFACE ( 'NONE', #6028, 0.2749999999999991900 ) ; +#1361 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1362 = ADVANCED_FACE ( 'NONE', ( #7603 ), #800, .T. ) ; +#1363 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1364 = VERTEX_POINT ( 'NONE', #6845 ) ; +#1365 = EDGE_LOOP ( 'NONE', ( #8921, #15551, #2076, #1208, #12983, #11152 ) ) ; +#1366 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1367 = EDGE_CURVE ( 'NONE', #14844, #390, #533, .T. ) ; +#1368 = CARTESIAN_POINT ( 'NONE', ( -7.707639970946511100, 3.319452524890163400, 9.020976310729381000 ) ) ; +#1369 = ORIENTED_EDGE ( 'NONE', *, *, #8388, .F. ) ; +#1370 = EDGE_LOOP ( 'NONE', ( #2441, #13659, #8825, #4773, #3141, #4219 ) ) ; +#1371 = VECTOR ( 'NONE', #6875, 1000.000000000000000 ) ; +#1372 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, -0.3500000000000004800 ) ) ; +#1373 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1374 = LINE ( 'NONE', #7024, #13962 ) ; +#1375 = AXIS2_PLACEMENT_3D ( 'NONE', #13417, #2494, #6160 ) ; +#1376 = ADVANCED_FACE ( 'NONE', ( #11404 ), #10501, .F. ) ; +#1377 = VECTOR ( 'NONE', #1448, 1000.000000000000000 ) ; +#1378 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13937 ) ) ; +#1379 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000000400, 3.049999999999999800, -2.872928932188135100 ) ) ; +#1380 = EDGE_LOOP ( 'NONE', ( #11101 ) ) ; +#1381 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1382 = CARTESIAN_POINT ( 'NONE', ( -7.580976310729377900, 3.319452524890163400, -2.937639970946509300 ) ) ; +#1383 = EDGE_CURVE ( 'NONE', #11502, #14616, #7046, .T. ) ; +#1384 = LINE ( 'NONE', #14274, #14350 ) ; +#1385 = FACE_OUTER_BOUND ( 'NONE', #8112, .T. ) ; +#1386 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 2.825000000000001100 ) ) ; +#1387 = EDGE_CURVE ( 'NONE', #3061, #9827, #9134, .T. ) ; +#1388 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.3999999999999999700, 4.049999999999999800 ) ) ; +#1389 = ADVANCED_FACE ( 'NONE', ( #8744 ), #10649, .F. ) ; +#1390 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1391 = ORIENTED_EDGE ( 'NONE', *, *, #11807, .T. ) ; +#1392 = EDGE_CURVE ( 'NONE', #6840, #1172, #8188, .T. ) ; +#1393 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, -15.05858178898088800, -9.600000000000001400 ) ) ; +#1394 = ORIENTED_EDGE ( 'NONE', *, *, #4108, .T. ) ; +#1395 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000036600, 0.8000000000000000400, -1.850000000000001000 ) ) ; +#1396 = ORIENTED_EDGE ( 'NONE', *, *, #8925, .F. ) ; +#1397 = AXIS2_PLACEMENT_3D ( 'NONE', #10387, #5497, #3197 ) ; +#1398 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, 6.550000000000001600 ) ) ; +#1399 = ORIENTED_EDGE ( 'NONE', *, *, #3478, .T. ) ; +#1400 = LINE ( 'NONE', #4820, #3690 ) ; +#1401 = ORIENTED_EDGE ( 'NONE', *, *, #6548, .F. ) ; +#1402 = VERTEX_POINT ( 'NONE', #3399 ) ; +#1403 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1404 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.147979999999998700, -2.780000000000001100 ) ) ; +#1405 = ORIENTED_EDGE ( 'NONE', *, *, #7370, .F. ) ; +#1406 = LINE ( 'NONE', #9381, #5230 ) ; +#1407 = FACE_OUTER_BOUND ( 'NONE', #1042, .T. ) ; +#1408 = ORIENTED_EDGE ( 'NONE', *, *, #11453, .F. ) ; +#1409 = EDGE_CURVE ( 'NONE', #15644, #1805, #156, .T. ) ; +#1410 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1411 = ORIENTED_EDGE ( 'NONE', *, *, #6881, .T. ) ; +#1412 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#1413 = EDGE_LOOP ( 'NONE', ( #10824, #7912, #1812, #4463 ) ) ; +#1414 = FACE_OUTER_BOUND ( 'NONE', #1799, .T. ) ; +#1415 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1416 = ORIENTED_EDGE ( 'NONE', *, *, #2588, .F. ) ; +#1418 = PLANE ( 'NONE', #3140 ) ; +#1417 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1419 = EDGE_CURVE ( 'NONE', #2620, #11898, #15554, .T. ) ; +#1420 = ORIENTED_EDGE ( 'NONE', *, *, #4672, .F. ) ; +#1421 = LINE ( 'NONE', #2767, #9808 ) ; +#1422 = LINE ( 'NONE', #11063, #278 ) ; +#1423 = AXIS2_PLACEMENT_3D ( 'NONE', #8502, #15634, #1118 ) ; +#1424 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, -0.3500000000000004800 ) ) ; +#1425 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, -15.05858178898088800, -6.900000000000000400 ) ) ; +#1426 = VERTEX_POINT ( 'NONE', #10605 ) ; +#1427 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 5.478074134663591400E-015 ) ) ; +#1428 = EDGE_LOOP ( 'NONE', ( #15172, #2735, #9835 ) ) ; +#1429 = LINE ( 'NONE', #9383, #12278 ) ; +#1430 = VERTEX_POINT ( 'NONE', #4540 ) ; +#1431 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#1432 = EDGE_CURVE ( 'NONE', #11771, #8185, #3388, .T. ) ; +#1433 = FILL_AREA_STYLE ('',( #11090 ) ) ; +#1434 = VECTOR ( 'NONE', #15482, 1000.000000000000000 ) ; +#1435 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 4.325000000000001100 ) ) ; +#1436 = ADVANCED_FACE ( 'NONE', ( #9873 ), #5821, .F. ) ; +#1437 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1438 = EDGE_CURVE ( 'NONE', #7175, #13949, #14822, .T. ) ; +#1439 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1440 = PLANE ( 'NONE', #10981 ) ; +#1441 = LINE ( 'NONE', #13420, #4696 ) ; +#1442 = VERTEX_POINT ( 'NONE', #14327 ) ; +#1443 = PLANE ( 'NONE', #15044 ) ; +#1444 = LINE ( 'NONE', #287, #6625 ) ; +#1445 = FACE_OUTER_BOUND ( 'NONE', #13053, .T. ) ; +#1446 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1447 = ADVANCED_FACE ( 'NONE', ( #14437, #2239 ), #15197, .T. ) ; +#1448 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1449 = EDGE_CURVE ( 'NONE', #7778, #9, #11578, .T. ) ; +#1450 = EDGE_CURVE ( 'NONE', #225, #14092, #2429, .T. ) ; +#1451 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000008900, 0.8000000000000000400, 5.825000000000001100 ) ) ; +#1452 = CARTESIAN_POINT ( 'NONE', ( 7.565520281879280200, 3.147979999999998200, -2.805703978347815000 ) ) ; +#1453 = ORIENTED_EDGE ( 'NONE', *, *, #9278, .T. ) ; +#1454 = CARTESIAN_POINT ( 'NONE', ( -7.649999999999999500, 3.149999999999999900, 9.082928932188135500 ) ) ; +#1455 = VECTOR ( 'NONE', #13596, 1000.000000000000000 ) ; +#1456 = ORIENTED_EDGE ( 'NONE', *, *, #10620, .T. ) ; +#1457 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1458 = LINE ( 'NONE', #3220, #3951 ) ; +#1459 = AXIS2_PLACEMENT_3D ( 'NONE', #8151, #3374, #925 ) ; +#1460 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, -2.449999999999998800 ) ) ; +#1461 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1462 = ADVANCED_FACE ( 'NONE', ( #12719 ), #3459, .T. ) ; +#1463 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1464 = AXIS2_PLACEMENT_3D ( 'NONE', #240, #9976, #3762 ) ; +#1465 = PLANE ( 'NONE', #12209 ) ; +#1466 = EDGE_LOOP ( 'NONE', ( #7262, #11285, #1922, #2339 ) ) ; +#1467 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1468 = PRESENTATION_STYLE_ASSIGNMENT (( #9105 ) ) ; +#1469 = VERTEX_POINT ( 'NONE', #10761 ) ; +#1470 = EDGE_CURVE ( 'NONE', #12854, #11054, #8368, .T. ) ; +#1471 = VECTOR ( 'NONE', #3198, 1000.000000000000000 ) ; +#1472 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1473 = EDGE_CURVE ( 'NONE', #2806, #14060, #14069, .T. ) ; +#1474 = PLANE ( 'NONE', #12778 ) ; +#1475 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1476 = ORIENTED_EDGE ( 'NONE', *, *, #2712, .T. ) ; +#1477 = ORIENTED_EDGE ( 'NONE', *, *, #3237, .T. ) ; +#1478 = AXIS2_PLACEMENT_3D ( 'NONE', #631, #9179, #518 ) ; +#1479 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1480 = ORIENTED_EDGE ( 'NONE', *, *, #10168, .T. ) ; +#1481 = FACE_OUTER_BOUND ( 'NONE', #10636, .T. ) ; +#1482 = ORIENTED_EDGE ( 'NONE', *, *, #9517, .F. ) ; +#1483 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9461 ) ) ; +#1484 = VERTEX_POINT ( 'NONE', #12070 ) ; +#1485 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#1486 = LINE ( 'NONE', #9375, #3800 ) ; +#1487 = LINE ( 'NONE', #10074, #9516 ) ; +#1488 = CARTESIAN_POINT ( 'NONE', ( 7.629277334261814800, 3.351999999999999400, -2.795530125675983200 ) ) ; +#1489 = ORIENTED_EDGE ( 'NONE', *, *, #6724, .T. ) ; +#1490 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude5[5]', #2574 ) ; +#1491 = ORIENTED_EDGE ( 'NONE', *, *, #1712, .T. ) ; +#1492 = ORIENTED_EDGE ( 'NONE', *, *, #9806, .T. ) ; +#1493 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, -15.05858178898088800, -4.000000000000000000 ) ) ; +#1494 = EDGE_CURVE ( 'NONE', #7856, #12302, #11773, .T. ) ; +#1495 = ORIENTED_EDGE ( 'NONE', *, *, #14604, .T. ) ; +#1496 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1497 = ORIENTED_EDGE ( 'NONE', *, *, #6575, .T. ) ; +#1498 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1499 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 4.149999999999999500 ) ) ; +#1500 = VERTEX_POINT ( 'NONE', #10309 ) ; +#1501 = LINE ( 'NONE', #6148, #5920 ) ; +#1502 = LINE ( 'NONE', #7947, #3990 ) ; +#1503 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 2.825000000000001100 ) ) ; +#1504 = FACE_OUTER_BOUND ( 'NONE', #5549, .T. ) ; +#1505 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1506 = AXIS2_PLACEMENT_3D ( 'NONE', #10121, #5234, #1695 ) ; +#1507 = ORIENTED_EDGE ( 'NONE', *, *, #931, .F. ) ; +#1508 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#1509 = ADVANCED_FACE ( 'NONE', ( #14264 ), #5985, .T. ) ; +#1510 = EDGE_LOOP ( 'NONE', ( #10457, #14799, #11607, #1497, #8224, #2915, #4403, #7054, #13720, #3025, #5878, #2534, #5616, #2879, #5045, #3948, #12328, #4983, #7737, #3435, #3446, #2805, #2763, #15497, #11639, #12062, #5533, #13917 ) ) ; +#1511 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1512 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1513 = DIRECTION ( 'NONE', ( -3.097720492815728200E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1514 = ORIENTED_EDGE ( 'NONE', *, *, #4643, .T. ) ; +#1515 = VERTEX_POINT ( 'NONE', #13136 ) ; +#1516 = ORIENTED_EDGE ( 'NONE', *, *, #5737, .T. ) ; +#1517 = LINE ( 'NONE', #6719, #3623 ) ; +#1518 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 2.551063935260010500E-016 ) ) ; +#1519 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1520 = LINE ( 'NONE', #6816, #8623 ) ; +#1521 = LINE ( 'NONE', #10806, #3069 ) ; +#1522 = EDGE_CURVE ( 'NONE', #225, #7402, #5316, .T. ) ; +#1523 = VECTOR ( 'NONE', #3431, 1000.000000000000000 ) ; +#1524 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1525 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#1526 = VERTEX_POINT ( 'NONE', #7159 ) ; +#1527 = ADVANCED_FACE ( 'NONE', ( #6274 ), #1299, .T. ) ; +#1528 = ORIENTED_EDGE ( 'NONE', *, *, #429, .F. ) ; +#1529 = ORIENTED_EDGE ( 'NONE', *, *, #12855, .F. ) ; +#1530 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1531 = EDGE_CURVE ( 'NONE', #11812, #12807, #13481, .T. ) ; +#1532 = AXIS2_PLACEMENT_3D ( 'NONE', #5663, #4331, #9132 ) ; +#1533 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, 0.7000000000000009500, -4.000000000000000000 ) ) ; +#1534 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 5.050000000000000700 ) ) ; +#1535 = CIRCLE ( 'NONE', #13388, 0.2749999999999991900 ) ; +#1536 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.149999999999998600, -2.780000000000001100 ) ) ; +#1537 = LINE ( 'NONE', #3448, #7672 ) ; +#1538 = LINE ( 'NONE', #4363, #11814 ) ; +#1539 = CYLINDRICAL_SURFACE ( 'NONE', #8130, 0.2749999999999991900 ) ; +#1540 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1541 = VECTOR ( 'NONE', #9463, 1000.000000000000000 ) ; +#1542 = ORIENTED_EDGE ( 'NONE', *, *, #10446, .T. ) ; +#1543 = CARTESIAN_POINT ( 'NONE', ( -7.626879667662414000, 3.115261346167813800, -2.831335216528853700 ) ) ; +#1544 = ADVANCED_FACE ( 'NONE', ( #5703 ), #1169, .T. ) ; +#1545 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#1546 = ORIENTED_EDGE ( 'NONE', *, *, #7787, .T. ) ; +#1547 = EDGE_CURVE ( 'NONE', #2726, #11029, #5889, .T. ) ; +#1548 = EDGE_CURVE ( 'NONE', #5432, #15166, #12895, .T. ) ; +#1549 = EDGE_LOOP ( 'NONE', ( #1399, #3573, #14740, #3599, #4526, #11451 ) ) ; +#1550 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1551 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, 4.149999999999999500 ) ) ; +#1552 = VECTOR ( 'NONE', #12049, 1000.000000000000000 ) ; +#1553 = LINE ( 'NONE', #5446, #4615 ) ; +#1554 = VERTEX_POINT ( 'NONE', #14578 ) ; +#1555 = CARTESIAN_POINT ( 'NONE', ( 7.647980000000000400, 3.075703978347817300, 9.067408650308854200 ) ) ; +#1556 = PLANE ( 'NONE', #4795 ) ; +#1557 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#1558 = LINE ( 'NONE', #1944, #9952 ) ; +#1559 = ORIENTED_EDGE ( 'NONE', *, *, #945, .T. ) ; +#1560 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.8000000000000000400, -4.500000000000000900 ) ) ; +#1561 = CARTESIAN_POINT ( 'NONE', ( 7.627408650308850300, 3.075703978347818600, -2.877979999999998700 ) ) ; +#1562 = ORIENTED_EDGE ( 'NONE', *, *, #4448, .T. ) ; +#1563 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1564 = PLANE ( 'NONE', #12232 ) ; +#1565 = VECTOR ( 'NONE', #1741, 1000.000000000000000 ) ; +#1566 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1567 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, -1.674999999999998900 ) ) ; +#1568 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1569 = EDGE_CURVE ( 'NONE', #7100, #2426, #7810, .T. ) ; +#1570 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000014900, 0.4000000000000000200, 5.050000000000000700 ) ) ; +#1571 = LINE ( 'NONE', #7665, #9405 ) ; +#1573 = DIRECTION ( 'NONE', ( 1.204669080539449300E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1572 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1574 = ORIENTED_EDGE ( 'NONE', *, *, #5775, .T. ) ; +#1575 = ORIENTED_EDGE ( 'NONE', *, *, #3509, .F. ) ; +#1576 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1577 = DIRECTION ( 'NONE', ( -5.478074134663590600E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1578 = COLOUR_RGB ( '',0.5019607843137254800, 0.5019607843137254800, 0.5019607843137254800 ) ; +#1579 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9829 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #11788, #13112, #15354 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1580 = ORIENTED_EDGE ( 'NONE', *, *, #15404, .F. ) ; +#1581 = VECTOR ( 'NONE', #682, 1000.000000000000000 ) ; +#1582 = VECTOR ( 'NONE', #3222, 1000.000000000000000 ) ; +#1583 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000000700, 8.990000000000002000 ) ) ; +#1584 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 9.099999999999999600 ) ) ; +#1585 = VERTEX_POINT ( 'NONE', #8325 ) ; +#1586 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1587 = ORIENTED_EDGE ( 'NONE', *, *, #14, .F. ) ; +#1588 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.4000000000000000200, 1.149999999999999900 ) ) ; +#1589 = VERTEX_POINT ( 'NONE', #6089 ) ; +#1590 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, -0.9499999999999990700 ) ) ; +#1591 = EDGE_CURVE ( 'NONE', #15723, #101, #12700, .T. ) ; +#1592 = EDGE_LOOP ( 'NONE', ( #9739, #13591, #182, #14379 ) ) ; +#1593 = VECTOR ( 'NONE', #454, 1000.000000000000000 ) ; +#1594 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1595 = EDGE_CURVE ( 'NONE', #4278, #3736, #13868, .T. ) ; +#1596 = ORIENTED_EDGE ( 'NONE', *, *, #2808, .F. ) ; +#1597 = VERTEX_POINT ( 'NONE', #8740 ) ; +#1598 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1599 = ORIENTED_EDGE ( 'NONE', *, *, #13157, .T. ) ; +#1600 = VECTOR ( 'NONE', #2815, 1000.000000000000000 ) ; +#1601 = FACE_OUTER_BOUND ( 'NONE', #2152, .T. ) ; +#1602 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 7.600000000000000500 ) ) ; +#1603 = AXIS2_PLACEMENT_3D ( 'NONE', #206, #5273, #7738 ) ; +#1604 = VERTEX_POINT ( 'NONE', #6147 ) ; +#1605 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #10010, 'distance_accuracy_value', 'NONE'); +#1606 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.349999999999999600, 9.082928932188135500 ) ) ; +#1607 = ADVANCED_FACE ( 'NONE', ( #714 ), #5112, .F. ) ; +#1608 = ORIENTED_EDGE ( 'NONE', *, *, #15689, .F. ) ; +#1609 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1610 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, 3.550000000000001200 ) ) ; +#1611 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1612 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1613 = ORIENTED_EDGE ( 'NONE', *, *, #11149, .T. ) ; +#1614 = ADVANCED_FACE ( 'NONE', ( #10054 ), #8654, .F. ) ; +#1615 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#1616 = ORIENTED_EDGE ( 'NONE', *, *, #7226, .F. ) ; +#1617 = DIRECTION ( 'NONE', ( -1.807003620809173900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1618 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -5.478074134663595300E-015 ) ) ; +#1619 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 0.5500000000000010400 ) ) ; +#1620 = VECTOR ( 'NONE', #9205, 1000.000000000000000 ) ; +#1621 = VECTOR ( 'NONE', #14162, 1000.000000000000000 ) ; +#1622 = EDGE_CURVE ( 'NONE', #11957, #15475, #12306, .T. ) ; +#1623 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1624 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1625 = ORIENTED_EDGE ( 'NONE', *, *, #5966, .F. ) ; +#1626 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 4.149999999999999500 ) ) ; +#1627 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1629 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 2.891205793294687700E-015, -1.000000000000000000 ) ) ; +#1628 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999995000, 0.4000000000000000200, 9.550000000000004300 ) ) ; +#1630 = EDGE_CURVE ( 'NONE', #27, #12442, #901, .T. ) ; +#1631 = VECTOR ( 'NONE', #7759, 1000.000000000000000 ) ; +#1632 = ORIENTED_EDGE ( 'NONE', *, *, #9951, .T. ) ; +#1633 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14487 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5315, #14997, #2910 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1634 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.8000000000000000400, -4.500000000000000000 ) ) ; +#1635 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 9.099999999999999600 ) ) ; +#1636 = FACE_OUTER_BOUND ( 'NONE', #116, .T. ) ; +#1637 = VECTOR ( 'NONE', #8746, 1000.000000000000000 ) ; +#1638 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#1639 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#1640 = EDGE_CURVE ( 'NONE', #10731, #13526, #12508, .T. ) ; +#1641 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999957400, 0.8000000000000000400, -3.174999999999998900 ) ) ; +#1642 = AXIS2_PLACEMENT_3D ( 'NONE', #12696, #6820, #15204 ) ; +#1643 = CYLINDRICAL_SURFACE ( 'NONE', #8457, 0.2749999999999991900 ) ; +#1644 = ORIENTED_EDGE ( 'NONE', *, *, #6155, .F. ) ; +#1645 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999998200, 0.8000000000000000400, 8.649999999999993200 ) ) ; +#1646 = LINE ( 'NONE', #14157, #698 ) ; +#1647 = VECTOR ( 'NONE', #12289, 1000.000000000000000 ) ; +#1648 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#1649 = ORIENTED_EDGE ( 'NONE', *, *, #11354, .F. ) ; +#1650 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1651 = EDGE_CURVE ( 'NONE', #8560, #2520, #2415, .T. ) ; +#1652 = CARTESIAN_POINT ( 'NONE', ( -7.627304604898441200, 3.129230338724656100, 9.290000000000000900 ) ) ; +#1653 = AXIS2_PLACEMENT_3D ( 'NONE', #6243, #9997, #5171 ) ; +#1654 = CARTESIAN_POINT ( 'NONE', ( 7.637420392015690700, 3.101144252825625900, -2.841952621458757800 ) ) ; +#1655 = FILL_AREA_STYLE_COLOUR ( '', #13291 ) ; +#1656 = ORIENTED_EDGE ( 'NONE', *, *, #14272, .F. ) ; +#1657 = FACE_OUTER_BOUND ( 'NONE', #12168, .T. ) ; +#1658 = ORIENTED_EDGE ( 'NONE', *, *, #840, .F. ) ; +#1659 = CARTESIAN_POINT ( 'NONE', ( 7.601144252825626800, 3.137420392015689300, 9.020976310729377400 ) ) ; +#1660 = CARTESIAN_POINT ( 'NONE', ( 7.849999999999999600, 0.7999999999999767300, -3.080000000000009400 ) ) ; +#1661 = VECTOR ( 'NONE', #10048, 1000.000000000000000 ) ; +#1662 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1663 = EDGE_CURVE ( 'NONE', #3223, #8015, #6081, .T. ) ; +#1664 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1665 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 1.637941840314110200, 2.549999999999999800 ) ) ; +#1666 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 6.123233995736767300E-017 ) ) ; +#1667 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#1668 = EDGE_LOOP ( 'NONE', ( #2665, #3899, #9003, #9145 ) ) ; +#1669 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999906200, -0.0000000000000000000, -0.3500000000000013700 ) ) ; +#1670 = ADVANCED_FACE ( 'NONE', ( #10237 ), #13079, .F. ) ; +#1671 = VECTOR ( 'NONE', #14019, 1000.000000000000000 ) ; +#1672 = VERTEX_POINT ( 'NONE', #2641 ) ; +#1673 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 1.637941840314110200, 2.950000000000000200 ) ) ; +#1674 = VERTEX_POINT ( 'NONE', #6354 ) ; +#1675 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1676 = DIRECTION ( 'NONE', ( 5.478074134663595300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1677 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1678 = VECTOR ( 'NONE', #11912, 1000.000000000000000 ) ; +#1679 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #12639 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15578, #5785, #5839 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1680 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1681 = ORIENTED_EDGE ( 'NONE', *, *, #8736, .T. ) ; +#1682 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 9.035018104045869500E-017 ) ) ; +#1683 = VERTEX_POINT ( 'NONE', #3730 ) ; +#1684 = ORIENTED_EDGE ( 'NONE', *, *, #10903, .F. ) ; +#1685 = ADVANCED_FACE ( 'NONE', ( #9311 ), #8799, .F. ) ; +#1686 = EDGE_CURVE ( 'NONE', #8801, #480, #515, .T. ) ; +#1687 = VERTEX_POINT ( 'NONE', #5009 ) ; +#1688 = ORIENTED_EDGE ( 'NONE', *, *, #10146, .T. ) ; +#1689 = VERTEX_POINT ( 'NONE', #12321 ) ; +#1690 = EDGE_CURVE ( 'NONE', #3170, #11407, #9483, .T. ) ; +#1691 = ADVANCED_FACE ( 'NONE', ( #3768 ), #12224, .T. ) ; +#1692 = EDGE_CURVE ( 'NONE', #2645, #3513, #8553, .T. ) ; +#1693 = LINE ( 'NONE', #14607, #5149 ) ; +#1694 = SURFACE_SIDE_STYLE ('',( #13552 ) ) ; +#1695 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1696 = FACE_OUTER_BOUND ( 'NONE', #11756, .T. ) ; +#1697 = ORIENTED_EDGE ( 'NONE', *, *, #13040, .F. ) ; +#1698 = MANIFOLD_SOLID_BREP ( 'LPattern1[3]', #13409 ) ; +#1699 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#1700 = ORIENTED_EDGE ( 'NONE', *, *, #12409, .F. ) ; +#1701 = ORIENTED_EDGE ( 'NONE', *, *, #10228, .F. ) ; +#1702 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1703 = ORIENTED_EDGE ( 'NONE', *, *, #1367, .T. ) ; +#1704 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#1705 = VERTEX_POINT ( 'NONE', #14954 ) ; +#1706 = FACE_OUTER_BOUND ( 'NONE', #14923, .T. ) ; +#1707 = LINE ( 'NONE', #15760, #571 ) ; +#1708 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1709 = LINE ( 'NONE', #7820, #12756 ) ; +#1710 = ORIENTED_EDGE ( 'NONE', *, *, #10630, .T. ) ; +#1711 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.149999999999999500, 8.990000000000000200 ) ) ; +#1712 = EDGE_CURVE ( 'NONE', #13107, #1469, #5871, .T. ) ; +#1713 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1715 = ORIENTED_EDGE ( 'NONE', *, *, #9597, .F. ) ; +#1714 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 5.050000000000000700 ) ) ; +#1716 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.049999999999999400, -2.872928932188135100 ) ) ; +#1717 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1718 = ORIENTED_EDGE ( 'NONE', *, *, #8271, .T. ) ; +#1719 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1720 = VERTEX_POINT ( 'NONE', #8958 ) ; +#1721 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.4000000000000000200, -3.350000000000000500 ) ) ; +#1722 = EDGE_CURVE ( 'NONE', #15673, #9045, #9858, .T. ) ; +#1723 = FACE_OUTER_BOUND ( 'NONE', #15453, .T. ) ; +#1724 = LINE ( 'NONE', #4635, #12785 ) ; +#1725 = LINE ( 'NONE', #9038, #3832 ) ; +#1726 = LINE ( 'NONE', #7048, #3833 ) ; +#1727 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #8079 ), #1004 ) ; +#1728 = FACE_OUTER_BOUND ( 'NONE', #9784, .T. ) ; +#1729 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1730 = ORIENTED_EDGE ( 'NONE', *, *, #267, .T. ) ; +#1731 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#1732 = VERTEX_POINT ( 'NONE', #2802 ) ; +#1733 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1735 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 3.550000000000001200 ) ) ; +#1734 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999980800, 0.0000000000000000000, 7.150000000000002100 ) ) ; +#1736 = ORIENTED_EDGE ( 'NONE', *, *, #12264, .F. ) ; +#1737 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1738 = EDGE_CURVE ( 'NONE', #3601, #15222, #6639, .T. ) ; +#1739 = LINE ( 'NONE', #2602, #6725 ) ; +#1740 = LINE ( 'NONE', #11156, #12402 ) ; +#1741 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1742 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1743 = FACE_OUTER_BOUND ( 'NONE', #2708, .T. ) ; +#1744 = ORIENTED_EDGE ( 'NONE', *, *, #4220, .F. ) ; +#1745 = VECTOR ( 'NONE', #9615, 1000.000000000000000 ) ; +#1746 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#1747 = VECTOR ( 'NONE', #8342, 1000.000000000000000 ) ; +#1748 = VERTEX_POINT ( 'NONE', #15055 ) ; +#1749 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999998600, 0.4000000000000000200, 8.650000000000000400 ) ) ; +#1750 = EDGE_CURVE ( 'NONE', #6993, #5653, #15375, .T. ) ; +#1751 = VERTEX_POINT ( 'NONE', #11288 ) ; +#1752 = AXIS2_PLACEMENT_3D ( 'NONE', #12187, #13424, #6168 ) ; +#1753 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 1.637941840314110200, 1.850000000000000100 ) ) ; +#1754 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1755 = ORIENTED_EDGE ( 'NONE', *, *, #14297, .F. ) ; +#1756 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.4000000000000000200, 2.949999999999999700 ) ) ; +#1757 = LINE ( 'NONE', #3886, #3291 ) ; +#1758 = ADVANCED_FACE ( 'NONE', ( #10627 ), #4039, .F. ) ; +#1759 = VECTOR ( 'NONE', #7646, 1000.000000000000000 ) ; +#1760 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1761 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000000400, 3.049999999999999800, -2.872928932188135100 ) ) ; +#1762 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000300, 0.4000000000000000200, 2.949999999999999300 ) ) ; +#1763 = LINE ( 'NONE', #334, #10160 ) ; +#1764 = EDGE_CURVE ( 'NONE', #5622, #3348, #2052, .T. ) ; +#1765 = EDGE_CURVE ( 'NONE', #846, #5326, #4914, .T. ) ; +#1766 = CARTESIAN_POINT ( 'NONE', ( 7.852000000000001200, 3.129277334261815600, -2.857398806512154300 ) ) ; +#1767 = ORIENTED_EDGE ( 'NONE', *, *, #4127, .T. ) ; +#1768 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #8541, #1211, #7777, #7725, #6598, #13773, #10246, #1829, #8943, #6710, #10354, #4185, #442 ), + .UNSPECIFIED., .F., .F., + ( 4, 3, 3, 3, 4 ), + ( 0.0000000000000000000, 5.091068730646576800E-005, 9.613048157375682700E-005, 0.0001413399754770194600, 0.0001810054085857351800 ), + .UNSPECIFIED. ) ; +#1769 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, 1.149999999999999900 ) ) ; +#1770 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1771 = ADVANCED_FACE ( 'NONE', ( #5688 ), #5277, .T. ) ; +#1772 = VECTOR ( 'NONE', #13032, 1000.000000000000000 ) ; +#1773 = DIRECTION ( 'NONE', ( -3.857805506003896100E-031, -1.000000000000000000, -3.491481338843133400E-015 ) ) ; +#1774 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999966200, 0.8000000000000000400, -0.3500000000000011400 ) ) ; +#1775 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1776 = ADVANCED_FACE ( 'NONE', ( #11758 ), #2860, .T. ) ; +#1777 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1778 = AXIS2_PLACEMENT_3D ( 'NONE', #3510, #12026, #15521 ) ; +#1779 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000024900, 0.8000000000000000400, 1.325000000000001500 ) ) ; +#1780 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1781 = ORIENTED_EDGE ( 'NONE', *, *, #7959, .F. ) ; +#1782 = VERTEX_POINT ( 'NONE', #4098 ) ; +#1783 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1784 = PLANE ( 'NONE', #9349 ) ; +#1785 = EDGE_CURVE ( 'NONE', #12132, #13781, #14613, .T. ) ; +#1786 = ORIENTED_EDGE ( 'NONE', *, *, #7552, .T. ) ; +#1787 = LINE ( 'NONE', #5166, #6395 ) ; +#1788 = ORIENTED_EDGE ( 'NONE', *, *, #2047, .F. ) ; +#1789 = ORIENTED_EDGE ( 'NONE', *, *, #5589, .F. ) ; +#1790 = CARTESIAN_POINT ( 'NONE', ( -7.580976310729377900, 3.317668071082943400, 9.146595997628987000 ) ) ; +#1792 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#1791 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999875300, 0.4000000000000000200, -3.350000000000000500 ) ) ; +#1793 = ORIENTED_EDGE ( 'NONE', *, *, #756, .F. ) ; +#1794 = EDGE_CURVE ( 'NONE', #4577, #2572, #3199, .T. ) ; +#1795 = LINE ( 'NONE', #6736, #8104 ) ; +#1796 = LINE ( 'NONE', #11276, #13600 ) ; +#1797 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 4.599999999999999600 ) ) ; +#1798 = AXIS2_PLACEMENT_3D ( 'NONE', #8002, #12761, #1801 ) ; +#1799 = EDGE_LOOP ( 'NONE', ( #8050, #12116, #5635, #12293 ) ) ; +#1800 = EDGE_LOOP ( 'NONE', ( #5981, #6871, #2087, #10442 ) ) ; +#1801 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1802 = VERTEX_POINT ( 'NONE', #6452 ) ; +#1803 = ORIENTED_EDGE ( 'NONE', *, *, #13106, .F. ) ; +#1804 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1805 = VERTEX_POINT ( 'NONE', #6563 ) ; +#1806 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1807 = VECTOR ( 'NONE', #10192, 1000.000000000000000 ) ; +#1808 = LINE ( 'NONE', #7044, #3342 ) ; +#1809 = AXIS2_PLACEMENT_3D ( 'NONE', #13224, #5970, #10742 ) ; +#1810 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 1.500000000000000000 ) ) ; +#1811 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#1812 = ORIENTED_EDGE ( 'NONE', *, *, #13802, .F. ) ; +#1813 = EDGE_CURVE ( 'NONE', #1348, #9542, #7407, .T. ) ; +#1814 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1815 = EDGE_CURVE ( 'NONE', #8245, #8790, #6826, .T. ) ; +#1816 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1817 = ORIENTED_EDGE ( 'NONE', *, *, #4895, .F. ) ; +#1818 = LINE ( 'NONE', #588, #9271 ) ; +#1819 = ORIENTED_EDGE ( 'NONE', *, *, #10525, .F. ) ; +#1820 = FACE_OUTER_BOUND ( 'NONE', #14547, .T. ) ; +#1821 = VECTOR ( 'NONE', #3735, 1000.000000000000000 ) ; +#1822 = AXIS2_PLACEMENT_3D ( 'NONE', #2652, #10058, #8807 ) ; +#1823 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 1.806230589874906900, 7.150000000000000400 ) ) ; +#1824 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1825 = PLANE ( 'NONE', #11528 ) ; +#1826 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, -3.174999999999998900 ) ) ; +#1827 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1828 = VECTOR ( 'NONE', #5021, 1000.000000000000000 ) ; +#1829 = CARTESIAN_POINT ( 'NONE', ( -7.632769666234340300, 3.107607578482642900, 9.047004589923656000 ) ) ; +#1830 = VERTEX_POINT ( 'NONE', #6664 ) ; +#1831 = EDGE_CURVE ( 'NONE', #4340, #3613, #11193, .T. ) ; +#1832 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1833 = ADVANCED_FACE ( 'NONE', ( #3183 ), #1962, .T. ) ; +#1834 = LINE ( 'NONE', #8681, #11733 ) ; +#1835 = VECTOR ( 'NONE', #8017, 1000.000000000000000 ) ; +#1836 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1837 = ORIENTED_EDGE ( 'NONE', *, *, #2503, .F. ) ; +#1838 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, 0.5500000000000010400 ) ) ; +#1839 = CARTESIAN_POINT ( 'NONE', ( -7.611952621458756100, 3.102198665876328300, 9.079222690360984100 ) ) ; +#1840 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1841 = EDGE_CURVE ( 'NONE', #7816, #15077, #885, .T. ) ; +#1842 = AXIS2_PLACEMENT_3D ( 'NONE', #6446, #8952, #8901 ) ; +#1843 = ORIENTED_EDGE ( 'NONE', *, *, #10818, .F. ) ; +#1844 = ORIENTED_EDGE ( 'NONE', *, *, #4932, .T. ) ; +#1845 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, -1.850000000000000500 ) ) ; +#1846 = VERTEX_POINT ( 'NONE', #3020 ) ; +#1847 = ADVANCED_FACE ( 'NONE', ( #9673 ), #5430, .F. ) ; +#1848 = VECTOR ( 'NONE', #8054, 1000.000000000000000 ) ; +#1849 = VECTOR ( 'NONE', #4759, 1000.000000000000000 ) ; +#1850 = VERTEX_POINT ( 'NONE', #12899 ) ; +#1851 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1852 = ADVANCED_FACE ( 'NONE', ( #14806 ), #10426, .F. ) ; +#1853 = EDGE_CURVE ( 'NONE', #5480, #15430, #15360, .T. ) ; +#1854 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, -1.850000000000000500 ) ) ; +#1855 = EDGE_CURVE ( 'NONE', #9322, #8967, #13458, .T. ) ; +#1856 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.350000000000000100, 8.990000000000002000 ) ) ; +#1857 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999999600, 0.0000000000000000000, 8.650000000000000400 ) ) ; +#1858 = ORIENTED_EDGE ( 'NONE', *, *, #12966, .T. ) ; +#1859 = SURFACE_STYLE_FILL_AREA ( #12682 ) ; +#1860 = EDGE_LOOP ( 'NONE', ( #1308, #14271, #14276, #13728 ) ) ; +#1861 = ORIENTED_EDGE ( 'NONE', *, *, #8072, .T. ) ; +#1862 = PLANE ( 'NONE', #6420 ) ; +#1863 = EDGE_LOOP ( 'NONE', ( #857, #3790, #378, #3885 ) ) ; +#1864 = PLANE ( 'NONE', #10541 ) ; +#1865 = EDGE_CURVE ( 'NONE', #14119, #8309, #4345, .T. ) ; +#1866 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#1867 = LINE ( 'NONE', #13911, #12720 ) ; +#1868 = AXIS2_PLACEMENT_3D ( 'NONE', #9182, #4481, #6833 ) ; +#1869 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1870 = AXIS2_PLACEMENT_3D ( 'NONE', #94, #14891, #13604 ) ; +#1871 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999890200, 0.0000000000000000000, -0.9499999999999975100 ) ) ; +#1872 = ORIENTED_EDGE ( 'NONE', *, *, #13050, .F. ) ; +#1873 = VERTEX_POINT ( 'NONE', #9317 ) ; +#1874 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #14395, #10833, #9862, #29, #3636, #11043 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 1.301042606982605300E-018, 0.0002388152348380229400, 0.0004776304696760445800 ), + .UNSPECIFIED. ) ; +#1875 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1876 = CARTESIAN_POINT ( 'NONE', ( 7.649999999999999500, 3.049999999999999800, 9.082928932188135500 ) ) ; +#1877 = EDGE_LOOP ( 'NONE', ( #7766, #12961, #8956, #14247 ) ) ; +#1878 = CIRCLE ( 'NONE', #7214, 0.2749999999999991900 ) ; +#1879 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#1880 = ORIENTED_EDGE ( 'NONE', *, *, #2857, .F. ) ; +#1881 = ORIENTED_EDGE ( 'NONE', *, *, #8317, .T. ) ; +#1882 = EDGE_CURVE ( 'NONE', #9390, #3808, #10223, .T. ) ; +#1883 = PLANE ( 'NONE', #2766 ) ; +#1884 = LINE ( 'NONE', #9181, #11228 ) ; +#1885 = LINE ( 'NONE', #14814, #2254 ) ; +#1886 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1887 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000000400, 3.049999999999999800, -2.872928932188135900 ) ) ; +#1888 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1889 = ORIENTED_EDGE ( 'NONE', *, *, #4247, .T. ) ; +#1890 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#1891 = EDGE_LOOP ( 'NONE', ( #7114, #12220, #10250 ) ) ; +#1892 = ORIENTED_EDGE ( 'NONE', *, *, #6041, .F. ) ; +#1893 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1894 = ORIENTED_EDGE ( 'NONE', *, *, #7305, .F. ) ; +#1895 = VERTEX_POINT ( 'NONE', #5540 ) ; +#1896 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1897 = DIRECTION ( 'NONE', ( -1.548860246407863300E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1898 = VECTOR ( 'NONE', #11683, 1000.000000000000000 ) ; +#1899 = FACE_OUTER_BOUND ( 'NONE', #13999, .T. ) ; +#1900 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1901 = VERTEX_POINT ( 'NONE', #15311 ) ; +#1902 = EDGE_CURVE ( 'NONE', #4737, #7694, #3561, .T. ) ; +#1903 = ORIENTED_EDGE ( 'NONE', *, *, #3826, .F. ) ; +#1904 = EDGE_CURVE ( 'NONE', #3619, #3144, #7585, .T. ) ; +#1905 = ORIENTED_EDGE ( 'NONE', *, *, #6557, .T. ) ; +#1906 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999905500, 0.0000000000000000000, 0.5500000000000001600 ) ) ; +#1907 = EDGE_CURVE ( 'NONE', #8115, #6435, #1646, .T. ) ; +#1908 = VERTEX_POINT ( 'NONE', #12808 ) ; +#1909 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000014900, 0.4000000000000000200, 4.149999999999999500 ) ) ; +#1910 = ORIENTED_EDGE ( 'NONE', *, *, #6317, .F. ) ; +#1911 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1912 = VECTOR ( 'NONE', #3978, 1000.000000000000000 ) ; +#1913 = VECTOR ( 'NONE', #9148, 1000.000000000000000 ) ; +#1914 = PRESENTATION_STYLE_ASSIGNMENT (( #13232 ) ) ; +#1915 = LINE ( 'NONE', #6782, #4573 ) ; +#1916 = ADVANCED_FACE ( 'NONE', ( #7016 ), #6882, .T. ) ; +#1917 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, 0.5500000000000010400 ) ) ; +#1918 = AXIS2_PLACEMENT_3D ( 'NONE', #13262, #3649, #13384 ) ; +#1919 = ORIENTED_EDGE ( 'NONE', *, *, #5547, .T. ) ; +#1920 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1921 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1922 = ORIENTED_EDGE ( 'NONE', *, *, #13852, .F. ) ; +#1923 = ORIENTED_EDGE ( 'NONE', *, *, #3693, .F. ) ; +#1924 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 1.325000000000001500 ) ) ; +#1925 = SURFACE_STYLE_FILL_AREA ( #11500 ) ; +#1926 = LINE ( 'NONE', #6850, #4023 ) ; +#1927 = VECTOR ( 'NONE', #6239, 1000.000000000000000 ) ; +#1928 = ORIENTED_EDGE ( 'NONE', *, *, #2113, .T. ) ; +#1929 = PLANE ( 'NONE', #15021 ) ; +#1930 = EDGE_CURVE ( 'NONE', #7682, #4450, #2399, .T. ) ; +#1931 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#1932 = ADVANCED_FACE ( 'NONE', ( #11561 ), #3233, .F. ) ; +#1933 = VECTOR ( 'NONE', #15402, 1000.000000000000000 ) ; +#1934 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 5.050000000000000700 ) ) ; +#1935 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14187 ) ) ; +#1936 = VERTEX_POINT ( 'NONE', #15356 ) ; +#1937 = ORIENTED_EDGE ( 'NONE', *, *, #9995, .F. ) ; +#1938 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#1939 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1940 = ADVANCED_FACE ( 'NONE', ( #4528 ), #14211, .T. ) ; +#1941 = VERTEX_POINT ( 'NONE', #15599 ) ; +#1942 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1943 = ORIENTED_EDGE ( 'NONE', *, *, #8295, .T. ) ; +#1944 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999968000, 0.0000000000000000000, -0.1749999999999998200 ) ) ; +#1945 = EDGE_CURVE ( 'NONE', #14177, #1941, #13850, .T. ) ; +#1946 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1947 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5643 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15101, #12584, #13880 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1948 = LINE ( 'NONE', #7240, #14902 ) ; +#1949 = FILL_AREA_STYLE_COLOUR ( '', #649 ) ; +#1950 = LINE ( 'NONE', #1648, #14521 ) ; +#1951 = ORIENTED_EDGE ( 'NONE', *, *, #5761, .F. ) ; +#1952 = PRESENTATION_STYLE_ASSIGNMENT (( #12176 ) ) ; +#1953 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1954 = VECTOR ( 'NONE', #612, 1000.000000000000000 ) ; +#1955 = ORIENTED_EDGE ( 'NONE', *, *, #3190, .T. ) ; +#1957 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1956 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1958 = EDGE_LOOP ( 'NONE', ( #2073, #15088, #6200, #4551 ) ) ; +#1959 = ORIENTED_EDGE ( 'NONE', *, *, #15420, .F. ) ; +#1960 = EDGE_CURVE ( 'NONE', #2473, #6438, #8352, .T. ) ; +#1961 = AXIS2_PLACEMENT_3D ( 'NONE', #4720, #10960, #7401 ) ; +#1962 = PLANE ( 'NONE', #8514 ) ; +#1963 = VECTOR ( 'NONE', #12273, 1000.000000000000000 ) ; +#1964 = EDGE_CURVE ( 'NONE', #8729, #1732, #5674, .T. ) ; +#1965 = FACE_OUTER_BOUND ( 'NONE', #8360, .T. ) ; +#1966 = PLANE ( 'NONE', #7605 ) ; +#1967 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.4000000000000000200, 1.849999999999999900 ) ) ; +#1968 = CARTESIAN_POINT ( 'NONE', ( 7.627408552845517800, 3.076234407614292900, 9.090000000000001600 ) ) ; +#1969 = ORIENTED_EDGE ( 'NONE', *, *, #15129, .T. ) ; +#1970 = ORIENTED_EDGE ( 'NONE', *, *, #9365, .F. ) ; +#1971 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#1972 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 2.050000000000001600 ) ) ; +#1973 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000004300, 0.8000000000000000400, 8.049999999999995400 ) ) ; +#1974 = ORIENTED_EDGE ( 'NONE', *, *, #9240, .T. ) ; +#1975 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999936400, 0.0000000000000000000, 2.650000000000001200 ) ) ; +#1976 = LINE ( 'NONE', #12512, #4832 ) ; +#1977 = EDGE_CURVE ( 'NONE', #1039, #13035, #11003, .T. ) ; +#1978 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000500, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#1979 = ORIENTED_EDGE ( 'NONE', *, *, #12945, .F. ) ; +#1980 = LINE ( 'NONE', #3244, #11505 ) ; +#1981 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1982 = EDGE_LOOP ( 'NONE', ( #14560, #2153, #7358 ) ) ; +#1983 = PLANE ( 'NONE', #6579 ) ; +#1984 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1985 = ORIENTED_EDGE ( 'NONE', *, *, #15404, .T. ) ; +#1986 = CARTESIAN_POINT ( 'NONE', ( 8.549999999999998900, 0.4000000000000000200, 9.549999999999993600 ) ) ; +#1987 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1988 = AXIS2_PLACEMENT_3D ( 'NONE', #15384, #11820, #10516 ) ; +#1989 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1990 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 3.350000000000000100, 0.0000000000000000000 ) ) ; +#1991 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, -10.00000000000000000 ) ) ; +#1992 = ORIENTED_EDGE ( 'NONE', *, *, #8072, .F. ) ; +#1993 = VECTOR ( 'NONE', #11430, 1000.000000000000000 ) ; +#1994 = VERTEX_POINT ( 'NONE', #11742 ) ; +#1995 = ORIENTED_EDGE ( 'NONE', *, *, #11042, .T. ) ; +#1996 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1997 = AXIS2_PLACEMENT_3D ( 'NONE', #5205, #14931, #338 ) ; +#1998 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000029100, 0.4000000000000000200, 0.5500000000000001600 ) ) ; +#1999 = VERTEX_POINT ( 'NONE', #3381 ) ; +#2000 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 5.650000000000000400 ) ) ; +#2001 = LINE ( 'NONE', #119, #14008 ) ; +#2002 = VECTOR ( 'NONE', #6492, 1000.000000000000000 ) ; +#2003 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude5[6]', #927 ) ; +#2004 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2005 = ORIENTED_EDGE ( 'NONE', *, *, #11124, .F. ) ; +#2006 = EDGE_CURVE ( 'NONE', #12695, #12230, #1081, .T. ) ; +#2008 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2007 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2009 = EDGE_LOOP ( 'NONE', ( #6171, #12246, #638, #6848 ) ) ; +#2010 = LINE ( 'NONE', #4791, #11715 ) ; +#2011 = EDGE_CURVE ( 'NONE', #6876, #10367, #14051, .T. ) ; +#2012 = ORIENTED_EDGE ( 'NONE', *, *, #6998, .F. ) ; +#2013 = VERTEX_POINT ( 'NONE', #15408 ) ; +#2014 = CARTESIAN_POINT ( 'NONE', ( -7.849999999999999600, 3.150000000000000800, -2.872928932188135100 ) ) ; +#2015 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000005300, 0.8000000000000000400, 7.325000000000002000 ) ) ; +#2016 = VECTOR ( 'NONE', #4231, 1000.000000000000000 ) ; +#2017 = VECTOR ( 'NONE', #14054, 1000.000000000000000 ) ; +#2018 = ADVANCED_FACE ( 'NONE', ( #5289 ), #5753, .T. ) ; +#2019 = CLOSED_SHELL ( 'NONE', ( #7147, #15248, #11118, #3767, #2158, #10386 ) ) ; +#2020 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 1.325000000000001500 ) ) ; +#2021 = ADVANCED_FACE ( 'NONE', ( #6440 ), #11793, .T. ) ; +#2022 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000029100, 0.4000000000000000200, -0.3500000000000013700 ) ) ; +#2023 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#2024 = FACE_OUTER_BOUND ( 'NONE', #8129, .T. ) ; +#2025 = ORIENTED_EDGE ( 'NONE', *, *, #11216, .F. ) ; +#2026 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.8000000000000000400, 0.0000000000000000000 ) ) ; +#2027 = VECTOR ( 'NONE', #9497, 1000.000000000000000 ) ; +#2028 = FACE_OUTER_BOUND ( 'NONE', #8409, .T. ) ; +#2029 = DIRECTION ( 'NONE', ( 9.035018104045869500E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2030 = EDGE_CURVE ( 'NONE', #12839, #5511, #13654, .T. ) ; +#2031 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2032 = DIRECTION ( 'NONE', ( -5.478074134663590600E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2033 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#2034 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2035 = FACE_OUTER_BOUND ( 'NONE', #12338, .T. ) ; +#2036 = ORIENTED_EDGE ( 'NONE', *, *, #6761, .T. ) ; +#2037 = ORIENTED_EDGE ( 'NONE', *, *, #2406, .F. ) ; +#2038 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2985 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #15286, #3164, #1984 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2039 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2040 = PLANE ( 'NONE', #906 ) ; +#2041 = VECTOR ( 'NONE', #14047, 1000.000000000000000 ) ; +#2042 = FACE_OUTER_BOUND ( 'NONE', #3129, .T. ) ; +#2043 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2044 = PLANE ( 'NONE', #375 ) ; +#2045 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 6.550000000000000700 ) ) ; +#2046 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2047 = EDGE_CURVE ( 'NONE', #1115, #11437, #11372, .T. ) ; +#2048 = VERTEX_POINT ( 'NONE', #10685 ) ; +#2049 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2050 = ORIENTED_EDGE ( 'NONE', *, *, #14989, .T. ) ; +#2051 = PLANE ( 'NONE', #6093 ) ; +#2052 = LINE ( 'NONE', #12533, #9120 ) ; +#2053 = SURFACE_STYLE_FILL_AREA ( #14246 ) ; +#2054 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 4.149999999999999500 ) ) ; +#2055 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2056 = EDGE_CURVE ( 'NONE', #1936, #6706, #4898, .T. ) ; +#2057 = AXIS2_PLACEMENT_3D ( 'NONE', #227, #8820, #8664 ) ; +#2058 = ORIENTED_EDGE ( 'NONE', *, *, #13386, .F. ) ; +#2059 = ORIENTED_EDGE ( 'NONE', *, *, #12479, .F. ) ; +#2060 = FACE_OUTER_BOUND ( 'NONE', #5564, .T. ) ; +#2061 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2062 = ORIENTED_EDGE ( 'NONE', *, *, #14872, .T. ) ; +#2063 = ORIENTED_EDGE ( 'NONE', *, *, #10752, .T. ) ; +#2064 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2065 = VECTOR ( 'NONE', #3559, 1000.000000000000000 ) ; +#2066 = FACE_OUTER_BOUND ( 'NONE', #3974, .T. ) ; +#2067 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2068 = EDGE_CURVE ( 'NONE', #7613, #6993, #13065, .T. ) ; +#2069 = EDGE_CURVE ( 'NONE', #7869, #2964, #8334, .T. ) ; +#2070 = ORIENTED_EDGE ( 'NONE', *, *, #12064, .F. ) ; +#2071 = ORIENTED_EDGE ( 'NONE', *, *, #8225, .F. ) ; +#2072 = ORIENTED_EDGE ( 'NONE', *, *, #12651, .T. ) ; +#2073 = ORIENTED_EDGE ( 'NONE', *, *, #8496, .T. ) ; +#2074 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2075 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2076 = ORIENTED_EDGE ( 'NONE', *, *, #2380, .T. ) ; +#2077 = EDGE_LOOP ( 'NONE', ( #8776, #8576, #12431, #1416, #7223, #13821 ) ) ; +#2078 = LINE ( 'NONE', #5686, #8202 ) ; +#2079 = FACE_OUTER_BOUND ( 'NONE', #14241, .T. ) ; +#2080 = EDGE_LOOP ( 'NONE', ( #3449, #9685, #1061, #12535 ) ) ; +#2081 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.3999999999999999700, 2.949999999999999700 ) ) ; +#2083 = ORIENTED_EDGE ( 'NONE', *, *, #4718, .T. ) ; +#2082 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, -0.0000000000000000000, -2.625000000000000400 ) ) ; +#2084 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#2085 = ORIENTED_EDGE ( 'NONE', *, *, #6718, .F. ) ; +#2086 = EDGE_CURVE ( 'NONE', #8860, #8200, #11921, .T. ) ; +#2087 = ORIENTED_EDGE ( 'NONE', *, *, #904, .F. ) ; +#2088 = CARTESIAN_POINT ( 'NONE', ( 7.611888831344180600, 3.206844258255254800, 9.257458334292938000 ) ) ; +#2089 = ADVANCED_FACE ( 'NONE', ( #11178 ), #9781, .F. ) ; +#2090 = ORIENTED_EDGE ( 'NONE', *, *, #3495, .T. ) ; +#2091 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2092 = LINE ( 'NONE', #15600, #8217 ) ; +#2093 = LINE ( 'NONE', #14942, #12944 ) ; +#2094 = CARTESIAN_POINT ( 'NONE', ( -7.628752156770262100, 3.349999999999999600, -2.795530029177632600 ) ) ; +#2095 = AXIS2_PLACEMENT_3D ( 'NONE', #10443, #9194, #7809 ) ; +#2096 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2097 = ORIENTED_EDGE ( 'NONE', *, *, #12093, .F. ) ; +#2098 = ORIENTED_EDGE ( 'NONE', *, *, #5487, .F. ) ; +#2099 = AXIS2_PLACEMENT_3D ( 'NONE', #13991, #15104, #1897 ) ; +#2100 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000029100, 0.8000000000000000400, 0.5500000000000001600 ) ) ; +#2101 = ADVANCED_FACE ( 'NONE', ( #7968 ), #13390, .T. ) ; +#2102 = VERTEX_POINT ( 'NONE', #12002 ) ; +#2103 = ORIENTED_EDGE ( 'NONE', *, *, #11937, .F. ) ; +#2104 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2105 = LINE ( 'NONE', #8792, #4977 ) ; +#2106 = FACE_OUTER_BOUND ( 'NONE', #559, .T. ) ; +#2107 = FACE_OUTER_BOUND ( 'NONE', #6477, .T. ) ; +#2108 = VECTOR ( 'NONE', #8531, 1000.000000000000000 ) ; +#2109 = FACE_OUTER_BOUND ( 'NONE', #13730, .T. ) ; +#2110 = VERTEX_POINT ( 'NONE', #8573 ) ; +#2111 = EDGE_CURVE ( 'NONE', #6104, #11039, #7572, .T. ) ; +#2112 = CLOSED_SHELL ( 'NONE', ( #5212, #8673, #2971, #14390, #7073, #4017, #6911, #2485, #4927, #10980 ) ) ; +#2113 = EDGE_CURVE ( 'NONE', #9305, #14686, #307, .T. ) ; +#2114 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2115 = CLOSED_SHELL ( 'NONE', ( #6755, #7416, #8340, #9942, #10170, #4434 ) ) ; +#2116 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2117 = VECTOR ( 'NONE', #8199, 1000.000000000000000 ) ; +#2118 = LINE ( 'NONE', #224, #14904 ) ; +#2119 = FACE_OUTER_BOUND ( 'NONE', #5764, .T. ) ; +#2120 = AXIS2_PLACEMENT_3D ( 'NONE', #6126, #2461, #13325 ) ; +#2121 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2122 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000500, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#2123 = FACE_OUTER_BOUND ( 'NONE', #3011, .T. ) ; +#2124 = ORIENTED_EDGE ( 'NONE', *, *, #11927, .T. ) ; +#2125 = VERTEX_POINT ( 'NONE', #13326 ) ; +#2126 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2127 = EDGE_LOOP ( 'NONE', ( #6936, #3858, #11665, #9869 ) ) ; +#2128 = ORIENTED_EDGE ( 'NONE', *, *, #1079, .T. ) ; +#2129 = EDGE_CURVE ( 'NONE', #11701, #4489, #8720, .T. ) ; +#2130 = CARTESIAN_POINT ( 'NONE', ( -8.549999999999998900, 0.4000000000000000200, 8.650000000000000400 ) ) ; +#2131 = VECTOR ( 'NONE', #1576, 1000.000000000000000 ) ; +#2132 = LINE ( 'NONE', #1386, #7123 ) ; +#2133 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2134 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, -1.674999999999998900 ) ) ; +#2135 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2136 = VECTOR ( 'NONE', #7775, 1000.000000000000000 ) ; +#2137 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2138 = EDGE_CURVE ( 'NONE', #8564, #11979, #2779, .T. ) ; +#2139 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#2140 = ORIENTED_EDGE ( 'NONE', *, *, #7601, .F. ) ; +#2141 = AXIS2_PLACEMENT_3D ( 'NONE', #3005, #15293, #7832 ) ; +#2142 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000000400, 3.076234407614293800, -2.857408552845518200 ) ) ; +#2143 = LINE ( 'NONE', #11710, #14725 ) ; +#2144 = VECTOR ( 'NONE', #5788, 1000.000000000000000 ) ; +#2146 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2145 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 5.050000000000000700 ) ) ; +#2147 = VECTOR ( 'NONE', #11377, 1000.000000000000000 ) ; +#2148 = EDGE_CURVE ( 'NONE', #4450, #8170, #4702, .T. ) ; +#2149 = AXIS2_PLACEMENT_3D ( 'NONE', #13012, #3340, #4626 ) ; +#2150 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 7.325000000000002000 ) ) ; +#2151 = PLANE ( 'NONE', #10494 ) ; +#2152 = EDGE_LOOP ( 'NONE', ( #6542, #12025, #5164, #5419 ) ) ; +#2153 = ORIENTED_EDGE ( 'NONE', *, *, #12045, .T. ) ; +#2154 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2155 = ORIENTED_EDGE ( 'NONE', *, *, #11087, .T. ) ; +#2156 = EDGE_CURVE ( 'NONE', #12938, #12713, #10798, .T. ) ; +#2157 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2158 = ADVANCED_FACE ( 'NONE', ( #5472 ), #4775, .T. ) ; +#2159 = VECTOR ( 'NONE', #9169, 1000.000000000000000 ) ; +#2160 = ORIENTED_EDGE ( 'NONE', *, *, #9780, .F. ) ; +#2161 = ORIENTED_EDGE ( 'NONE', *, *, #13564, .T. ) ; +#2162 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2163 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2164 = ORIENTED_EDGE ( 'NONE', *, *, #3557, .F. ) ; +#2165 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 2.050000000000001600 ) ) ; +#2166 = FACE_OUTER_BOUND ( 'NONE', #15611, .T. ) ; +#2167 = VECTOR ( 'NONE', #1832, 1000.000000000000000 ) ; +#2168 = ORIENTED_EDGE ( 'NONE', *, *, #15316, .F. ) ; +#2169 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2170 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#2171 = EDGE_LOOP ( 'NONE', ( #4593, #14046, #12547, #2816 ) ) ; +#2172 = ORIENTED_EDGE ( 'NONE', *, *, #3391, .T. ) ; +#2173 = ADVANCED_FACE ( 'NONE', ( #10024 ), #3655, .F. ) ; +#2174 = EDGE_CURVE ( 'NONE', #2777, #2726, #4327, .T. ) ; +#2175 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.3999999999999999700, 7.150000000000000400 ) ) ; +#2176 = ORIENTED_EDGE ( 'NONE', *, *, #11537, .T. ) ; +#2177 = VECTOR ( 'NONE', #12314, 1000.000000000000000 ) ; +#2178 = VERTEX_POINT ( 'NONE', #7192 ) ; +#2179 = VERTEX_POINT ( 'NONE', #8416 ) ; +#2180 = EDGE_LOOP ( 'NONE', ( #403, #9974, #8945, #14510, #10871, #5027 ) ) ; +#2181 = LINE ( 'NONE', #4807, #14965 ) ; +#2182 = VECTOR ( 'NONE', #5859, 1000.000000000000000 ) ; +#2183 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2184 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3436, 'distance_accuracy_value', 'NONE'); +#2185 = PLANE ( 'NONE', #8452 ) ; +#2186 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, -2.449999999999998800 ) ) ; +#2187 = ORIENTED_EDGE ( 'NONE', *, *, #7181, .F. ) ; +#2188 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2189 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#2190 = AXIS2_PLACEMENT_3D ( 'NONE', #8552, #6258, #12087 ) ; +#2191 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000009900, 0.4000000000000000200, 6.550000000000000700 ) ) ; +#2192 = ORIENTED_EDGE ( 'NONE', *, *, #10468, .F. ) ; +#2193 = LINE ( 'NONE', #894, #674 ) ; +#2194 = CARTESIAN_POINT ( 'NONE', ( -7.627304606097597500, 3.129230332643794000, -3.079999999999999200 ) ) ; +#2195 = ORIENTED_EDGE ( 'NONE', *, *, #7961, .T. ) ; +#2196 = CARTESIAN_POINT ( 'NONE', ( -7.601144252825626800, 3.137420392015689300, -2.810976310729378400 ) ) ; +#2197 = LINE ( 'NONE', #12936, #7005 ) ; +#2198 = VECTOR ( 'NONE', #679, 1000.000000000000000 ) ; +#2199 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.8000000000000000400, -4.500000000000000000 ) ) ; +#2200 = EDGE_CURVE ( 'NONE', #1850, #6124, #2209, .T. ) ; +#2201 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2202 = EDGE_CURVE ( 'NONE', #10743, #14119, #14792, .T. ) ; +#2203 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2204 = EDGE_CURVE ( 'NONE', #13272, #4829, #6246, .T. ) ; +#2205 = SURFACE_STYLE_USAGE ( .BOTH. , #4524 ) ; +#2206 = PLANE ( 'NONE', #1809 ) ; +#2207 = LINE ( 'NONE', #2597, #1631 ) ; +#2208 = ORIENTED_EDGE ( 'NONE', *, *, #5462, .T. ) ; +#2209 = LINE ( 'NONE', #6127, #15526 ) ; +#2210 = LINE ( 'NONE', #13965, #5279 ) ; +#2211 = AXIS2_PLACEMENT_3D ( 'NONE', #10244, #3218, #11677 ) ; +#2212 = EDGE_LOOP ( 'NONE', ( #7634, #13075, #1197, #2484 ) ) ; +#2213 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.097720492815728600E-016 ) ) ; +#2214 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2215 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 5.478074134663591400E-015 ) ) ; +#2216 = ORIENTED_EDGE ( 'NONE', *, *, #7115, .T. ) ; +#2217 = PLANE ( 'NONE', #3229 ) ; +#2218 = ORIENTED_EDGE ( 'NONE', *, *, #5750, .F. ) ; +#2219 = LINE ( 'NONE', #11268, #5095 ) ; +#2220 = ORIENTED_EDGE ( 'NONE', *, *, #13607, .T. ) ; +#2221 = ORIENTED_EDGE ( 'NONE', *, *, #14183, .F. ) ; +#2222 = EDGE_CURVE ( 'NONE', #7237, #7398, #1066, .T. ) ; +#2223 = PLANE ( 'NONE', #13171 ) ; +#2224 = SURFACE_SIDE_STYLE ('',( #14629 ) ) ; +#2225 = VECTOR ( 'NONE', #9173, 1000.000000000000000 ) ; +#2226 = LINE ( 'NONE', #11035, #12136 ) ; +#2227 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2228 = EDGE_CURVE ( 'NONE', #11933, #9723, #14035, .T. ) ; +#2229 = AXIS2_PLACEMENT_3D ( 'NONE', #9812, #2594, #13523 ) ; +#2230 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2231 = VERTEX_POINT ( 'NONE', #5148 ) ; +#2232 = LINE ( 'NONE', #7267, #11202 ) ; +#2233 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2234 = ORIENTED_EDGE ( 'NONE', *, *, #3263, .F. ) ; +#2235 = ORIENTED_EDGE ( 'NONE', *, *, #7590, .T. ) ; +#2236 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999966200, 0.8000000000000000400, -0.3500000000000013700 ) ) ; +#2237 = VERTEX_POINT ( 'NONE', #13223 ) ; +#2238 = ADVANCED_FACE ( 'NONE', ( #2586 ), #713, .F. ) ; +#2239 = FACE_OUTER_BOUND ( 'NONE', #11011, .T. ) ; +#2240 = VECTOR ( 'NONE', #8182, 1000.000000000000000 ) ; +#2241 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000034500, 0.8000000000000000400, -0.9499999999999990700 ) ) ; +#2242 = EDGE_CURVE ( 'NONE', #8860, #1039, #13248, .T. ) ; +#2243 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, 0.5500000000000010400 ) ) ; +#2244 = ORIENTED_EDGE ( 'NONE', *, *, #7506, .F. ) ; +#2245 = VERTEX_POINT ( 'NONE', #10087 ) ; +#2246 = ORIENTED_EDGE ( 'NONE', *, *, #4583, .F. ) ; +#2247 = VECTOR ( 'NONE', #5026, 1000.000000000000000 ) ; +#2248 = ORIENTED_EDGE ( 'NONE', *, *, #14824, .F. ) ; +#2249 = EDGE_LOOP ( 'NONE', ( #2659, #5268, #10162, #13183 ) ) ; +#2251 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2250 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2252 = EDGE_CURVE ( 'NONE', #9017, #13407, #1444, .T. ) ; +#2253 = VECTOR ( 'NONE', #8930, 1000.000000000000000 ) ; +#2254 = VECTOR ( 'NONE', #12294, 1000.000000000000000 ) ; +#2255 = AXIS2_PLACEMENT_3D ( 'NONE', #5342, #13853, #2772 ) ; +#2256 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 6.375000000000000900 ) ) ; +#2257 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.3999999999999999700, 4.750000000000000000 ) ) ; +#2258 = ORIENTED_EDGE ( 'NONE', *, *, #7840, .F. ) ; +#2259 = ORIENTED_EDGE ( 'NONE', *, *, #10209, .F. ) ; +#2260 = VERTEX_POINT ( 'NONE', #7607 ) ; +#2261 = ORIENTED_EDGE ( 'NONE', *, *, #5006, .F. ) ; +#2262 = PLANE ( 'NONE', #7105 ) ; +#2263 = PLANE ( 'NONE', #11204 ) ; +#2264 = VERTEX_POINT ( 'NONE', #5091 ) ; +#2265 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2266 = EDGE_CURVE ( 'NONE', #15716, #8674, #129, .T. ) ; +#2267 = ORIENTED_EDGE ( 'NONE', *, *, #6742, .T. ) ; +#2268 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 1.149999999999999900 ) ) ; +#2269 = EDGE_CURVE ( 'NONE', #6669, #7920, #13638, .T. ) ; +#2270 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.149999999999999500, 8.990000000000000200 ) ) ; +#2271 = ORIENTED_EDGE ( 'NONE', *, *, #5023, .F. ) ; +#2272 = ORIENTED_EDGE ( 'NONE', *, *, #2402, .F. ) ; +#2273 = ADVANCED_FACE ( 'NONE', ( #6812 ), #14722, .T. ) ; +#2274 = AXIS2_PLACEMENT_3D ( 'NONE', #966, #7015, #12932 ) ; +#2275 = ORIENTED_EDGE ( 'NONE', *, *, #430, .T. ) ; +#2276 = PLANE ( 'NONE', #5876 ) ; +#2277 = ORIENTED_EDGE ( 'NONE', *, *, #3902, .T. ) ; +#2278 = EDGE_LOOP ( 'NONE', ( #13858, #10549, #12722, #1880 ) ) ; +#2279 = PLANE ( 'NONE', #5598 ) ; +#2280 = LINE ( 'NONE', #1774, #4600 ) ; +#2281 = VECTOR ( 'NONE', #15365, 1000.000000000000000 ) ; +#2282 = PLANE ( 'NONE', #5924 ) ; +#2283 = CYLINDRICAL_SURFACE ( 'NONE', #4067, 0.2749999999999991900 ) ; +#2284 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#2285 = ORIENTED_EDGE ( 'NONE', *, *, #5893, .F. ) ; +#2286 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3411, 'distance_accuracy_value', 'NONE'); +#2287 = EDGE_CURVE ( 'NONE', #9426, #1092, #2982, .T. ) ; +#2288 = VERTEX_POINT ( 'NONE', #7448 ) ; +#2289 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2290 = ORIENTED_EDGE ( 'NONE', *, *, #5415, .F. ) ; +#2291 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2292 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999952400, 0.0000000000000000000, 4.149999999999999500 ) ) ; +#2293 = EDGE_CURVE ( 'NONE', #11584, #1672, #12295, .T. ) ; +#2294 = VECTOR ( 'NONE', #530, 1000.000000000000000 ) ; +#2295 = LINE ( 'NONE', #5832, #8433 ) ; +#2296 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2297 = LINE ( 'NONE', #10553, #599 ) ; +#2298 = FACE_OUTER_BOUND ( 'NONE', #9391, .T. ) ; +#2299 = FACE_OUTER_BOUND ( 'NONE', #8208, .T. ) ; +#2300 = LINE ( 'NONE', #5705, #7674 ) ; +#2301 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7235 ) ) ; +#2302 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 2.649999999999999500 ) ) ; +#2303 = LINE ( 'NONE', #929, #6338 ) ; +#2304 = AXIS2_PLACEMENT_3D ( 'NONE', #8569, #12200, #12147 ) ; +#2305 = ORIENTED_EDGE ( 'NONE', *, *, #14066, .T. ) ; +#2306 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, -3.350000000000000500 ) ) ; +#2307 = ORIENTED_EDGE ( 'NONE', *, *, #1432, .T. ) ; +#2309 = PLANE ( 'NONE', #2601 ) ; +#2308 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.7000000000000009500, -5.150000000000001200 ) ) ; +#2310 = ORIENTED_EDGE ( 'NONE', *, *, #5006, .T. ) ; +#2311 = CARTESIAN_POINT ( 'NONE', ( -7.616851616828785000, 3.092667204855683100, 9.080440641471891900 ) ) ; +#2312 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2313 = ORIENTED_EDGE ( 'NONE', *, *, #1865, .T. ) ; +#2314 = CYLINDRICAL_SURFACE ( 'NONE', #325, 0.5000000000000004400 ) ; +#2315 = FACE_OUTER_BOUND ( 'NONE', #12256, .T. ) ; +#2316 = FACE_OUTER_BOUND ( 'NONE', #11975, .T. ) ; +#2317 = EDGE_CURVE ( 'NONE', #579, #7064, #10417, .T. ) ; +#2318 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 12.10000000000000000 ) ) ; +#2319 = ADVANCED_FACE ( 'NONE', ( #12685 ), #11367, .T. ) ; +#2320 = LINE ( 'NONE', #2045, #9389 ) ; +#2321 = DIRECTION ( 'NONE', ( 5.478074134663595300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2322 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2323 = ORIENTED_EDGE ( 'NONE', *, *, #118, .F. ) ; +#2324 = CARTESIAN_POINT ( 'NONE', ( 7.622513364263748600, 3.083823333624609900, 9.084106227756287000 ) ) ; +#2325 = EDGE_LOOP ( 'NONE', ( #10388, #1905, #1073, #9433 ) ) ; +#2326 = FACE_OUTER_BOUND ( 'NONE', #13704, .T. ) ; +#2327 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 2.891205793294679000E-015, 1.000000000000000000 ) ) ; +#2328 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2329 = VECTOR ( 'NONE', #9888, 1000.000000000000000 ) ; +#2330 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2331 = ORIENTED_EDGE ( 'NONE', *, *, #10280, .T. ) ; +#2332 = ORIENTED_EDGE ( 'NONE', *, *, #11789, .T. ) ; +#2333 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2334 = EDGE_CURVE ( 'NONE', #3127, #11050, #1834, .T. ) ; +#2335 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2336 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#2337 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2338 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.7000000000000009500, -9.600000000000001400 ) ) ; +#2339 = ORIENTED_EDGE ( 'NONE', *, *, #14017, .T. ) ; +#2340 = ORIENTED_EDGE ( 'NONE', *, *, #6178, .T. ) ; +#2341 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000035500, 0.0000000000000000000, -1.674999999999999400 ) ) ; +#2342 = EDGE_CURVE ( 'NONE', #11993, #14620, #15168, .T. ) ; +#2343 = ORIENTED_EDGE ( 'NONE', *, *, #11740, .F. ) ; +#2344 = VECTOR ( 'NONE', #10921, 1000.000000000000000 ) ; +#2345 = SURFACE_STYLE_FILL_AREA ( #12799 ) ; +#2346 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3991 ), #11046 ) ; +#2347 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2348 = ORIENTED_EDGE ( 'NONE', *, *, #15701, .F. ) ; +#2349 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 9.549999999999993600 ) ) ; +#2350 = ORIENTED_EDGE ( 'NONE', *, *, #2521, .T. ) ; +#2351 = ADVANCED_FACE ( 'NONE', ( #9284 ), #9660, .F. ) ; +#2352 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#2354 = PLANE ( 'NONE', #6513 ) ; +#2353 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.049999999999999400, -2.872928932188135100 ) ) ; +#2355 = ORIENTED_EDGE ( 'NONE', *, *, #11401, .F. ) ; +#2356 = LINE ( 'NONE', #7857, #14928 ) ; +#2357 = EDGE_LOOP ( 'NONE', ( #11116, #6494, #8215, #938 ) ) ; +#2358 = VERTEX_POINT ( 'NONE', #4178 ) ; +#2359 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.491481338843133400E-015, -1.462686427040065000E-032 ) ) ; +#2360 = EDGE_CURVE ( 'NONE', #15742, #1936, #5083, .T. ) ; +#2361 = EDGE_CURVE ( 'NONE', #8596, #12520, #3547, .T. ) ; +#2362 = SURFACE_STYLE_USAGE ( .BOTH. , #3597 ) ; +#2363 = VERTEX_POINT ( 'NONE', #15139 ) ; +#2364 = LINE ( 'NONE', #9855, #9634 ) ; +#2365 = VECTOR ( 'NONE', #7727, 1000.000000000000000 ) ; +#2366 = ORIENTED_EDGE ( 'NONE', *, *, #3662, .F. ) ; +#2367 = AXIS2_PLACEMENT_3D ( 'NONE', #1753, #7753, #466 ) ; +#2368 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2369 = ORIENTED_EDGE ( 'NONE', *, *, #5562, .F. ) ; +#2370 = LINE ( 'NONE', #9024, #15155 ) ; +#2371 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 1.600000000000000800 ) ) ; +#2372 = ORIENTED_EDGE ( 'NONE', *, *, #14304, .T. ) ; +#2373 = CARTESIAN_POINT ( 'NONE', ( 7.646673601807760800, 3.079455349686084400, 9.065487921837798200 ) ) ; +#2374 = LINE ( 'NONE', #14540, #5263 ) ; +#2375 = VECTOR ( 'NONE', #12702, 1000.000000000000000 ) ; +#2376 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 0.1000000000000002600 ) ) ; +#2377 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000500, 1.637941840314110200, 3.649999999999999500 ) ) ; +#2378 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.3999999999999999700, 4.750000000000000000 ) ) ; +#2379 = ORIENTED_EDGE ( 'NONE', *, *, #12170, .T. ) ; +#2380 = EDGE_CURVE ( 'NONE', #10163, #14864, #7195, .T. ) ; +#2381 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999978700, 0.8000000000000000400, 2.825000000000001100 ) ) ; +#2382 = VECTOR ( 'NONE', #223, 1000.000000000000000 ) ; +#2383 = ORIENTED_EDGE ( 'NONE', *, *, #13231, .F. ) ; +#2384 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2385 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 0.5499999999999997100 ) ) ; +#2386 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 2.050000000000001600 ) ) ; +#2387 = LINE ( 'NONE', #10298, #1254 ) ; +#2388 = SURFACE_STYLE_FILL_AREA ( #9668 ) ; +#2389 = AXIS2_PLACEMENT_3D ( 'NONE', #3471, #15684, #1178 ) ; +#2390 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2391 = ADVANCED_FACE ( 'NONE', ( #6052 ), #9041, .F. ) ; +#2392 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2393 = AXIS2_PLACEMENT_3D ( 'NONE', #4470, #6878, #3379 ) ; +#2394 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.0000000000000000000, 1.849999999999999900 ) ) ; +#2395 = FACE_OUTER_BOUND ( 'NONE', #14642, .T. ) ; +#2396 = ORIENTED_EDGE ( 'NONE', *, *, #1902, .F. ) ; +#2397 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2398 = AXIS2_PLACEMENT_3D ( 'NONE', #1279, #3745, #2548 ) ; +#2399 = LINE ( 'NONE', #11693, #4713 ) ; +#2400 = VECTOR ( 'NONE', #5636, 1000.000000000000000 ) ; +#2401 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2402 = EDGE_CURVE ( 'NONE', #9363, #4376, #11910, .T. ) ; +#2404 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.149999999999999900, -2.879999999999999400 ) ) ; +#2403 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, -0.0000000000000000000, -2.899999999999999900 ) ) ; +#2405 = VERTEX_POINT ( 'NONE', #609 ) ; +#2406 = EDGE_CURVE ( 'NONE', #10381, #14106, #7956, .T. ) ; +#2407 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 7.500000000000000000 ) ) ; +#2408 = DIRECTION ( 'NONE', ( -5.478074134663594500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2409 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999999600, 0.4000000000000000200, 9.550000000000000700 ) ) ; +#2410 = VERTEX_POINT ( 'NONE', #9100 ) ; +#2411 = LINE ( 'NONE', #13817, #8546 ) ; +#2412 = ORIENTED_EDGE ( 'NONE', *, *, #6169, .F. ) ; +#2413 = EDGE_LOOP ( 'NONE', ( #11025, #13127, #14845, #8540 ) ) ; +#2414 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2415 = LINE ( 'NONE', #14683, #7793 ) ; +#2416 = LINE ( 'NONE', #12645, #11935 ) ; +#2417 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 10.00000000000000000 ) ) ; +#2418 = FILL_AREA_STYLE ('',( #4836 ) ) ; +#2419 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, 8.650000000000000400 ) ) ; +#2420 = ORIENTED_EDGE ( 'NONE', *, *, #3914, .T. ) ; +#2421 = EDGE_CURVE ( 'NONE', #14655, #11608, #2387, .T. ) ; +#2422 = ORIENTED_EDGE ( 'NONE', *, *, #15748, .F. ) ; +#2423 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2424 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, 2.649999999999999500 ) ) ; +#2425 = LINE ( 'NONE', #14763, #1291 ) ; +#2426 = VERTEX_POINT ( 'NONE', #13976 ) ; +#2427 = ADVANCED_FACE ( 'NONE', ( #12281 ), #7719, .T. ) ; +#2428 = ORIENTED_EDGE ( 'NONE', *, *, #2030, .T. ) ; +#2429 = LINE ( 'NONE', #2424, #4162 ) ; +#2430 = LINE ( 'NONE', #13637, #15198 ) ; +#2431 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999937500, 0.4000000000000000200, 2.650000000000002100 ) ) ; +#2432 = EDGE_CURVE ( 'NONE', #8180, #12157, #13056, .T. ) ; +#2433 = ORIENTED_EDGE ( 'NONE', *, *, #6114, .F. ) ; +#2434 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.097720492815727200E-016 ) ) ; +#2435 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2437 = VERTEX_POINT ( 'NONE', #1826 ) ; +#2436 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2438 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#2439 = VERTEX_POINT ( 'NONE', #12628 ) ; +#2440 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2441 = ORIENTED_EDGE ( 'NONE', *, *, #6134, .F. ) ; +#2442 = ORIENTED_EDGE ( 'NONE', *, *, #12861, .T. ) ; +#2443 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, -2.449999999999998800 ) ) ; +#2444 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 5.050000000000000700 ) ) ; +#2445 = VECTOR ( 'NONE', #3490, 1000.000000000000000 ) ; +#2446 = VECTOR ( 'NONE', #5529, 1000.000000000000000 ) ; +#2447 = EDGE_CURVE ( 'NONE', #6383, #3044, #10011, .T. ) ; +#2448 = LINE ( 'NONE', #218, #7831 ) ; +#2449 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.4000000000000000200, -2.449999999999998800 ) ) ; +#2450 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2451 = ORIENTED_EDGE ( 'NONE', *, *, #8783, .T. ) ; +#2452 = ORIENTED_EDGE ( 'NONE', *, *, #15596, .F. ) ; +#2453 = ORIENTED_EDGE ( 'NONE', *, *, #5280, .T. ) ; +#2454 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2456 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2455 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2457 = ORIENTED_EDGE ( 'NONE', *, *, #6199, .F. ) ; +#2458 = EDGE_CURVE ( 'NONE', #11293, #14774, #7183, .T. ) ; +#2459 = EDGE_LOOP ( 'NONE', ( #12065, #4000, #3211, #15727, #9031, #6314 ) ) ; +#2460 = AXIS2_PLACEMENT_3D ( 'NONE', #15698, #13216, #5959 ) ; +#2461 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2462 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, 5.050000000000000700 ) ) ; +#2463 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.0000000000000000000, 2.950000000000000200 ) ) ; +#2464 = LINE ( 'NONE', #1121, #7273 ) ; +#2465 = LINE ( 'NONE', #8583, #12754 ) ; +#2466 = MANIFOLD_SOLID_BREP ( 'LPattern1[2]', #8306 ) ; +#2467 = LINE ( 'NONE', #5202, #10673 ) ; +#2468 = ORIENTED_EDGE ( 'NONE', *, *, #5975, .T. ) ; +#2469 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#2470 = ADVANCED_FACE ( 'NONE', ( #4121 ), #391, .F. ) ; +#2471 = ORIENTED_EDGE ( 'NONE', *, *, #5820, .F. ) ; +#2472 = EDGE_CURVE ( 'NONE', #5578, #14774, #9457, .T. ) ; +#2473 = VERTEX_POINT ( 'NONE', #6860 ) ; +#2474 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2475 = EDGE_LOOP ( 'NONE', ( #1482, #8046, #12144, #6885, #10277, #9335 ) ) ; +#2476 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2477 = VECTOR ( 'NONE', #12313, 1000.000000000000000 ) ; +#2478 = VECTOR ( 'NONE', #9530, 1000.000000000000000 ) ; +#2479 = VECTOR ( 'NONE', #3815, 1000.000000000000000 ) ; +#2480 = LINE ( 'NONE', #8427, #208 ) ; +#2481 = CYLINDRICAL_SURFACE ( 'NONE', #9481, 0.1000000000000002600 ) ; +#2482 = CARTESIAN_POINT ( 'NONE', ( -6.050000000000001600, 3.149999999999999900, 7.440000000000001300 ) ) ; +#2483 = STYLED_ITEM ( 'NONE', ( #12926 ), #7392 ) ; +#2484 = ORIENTED_EDGE ( 'NONE', *, *, #12435, .T. ) ; +#2485 = ADVANCED_FACE ( 'NONE', ( #2967 ), #1883, .T. ) ; +#2486 = ORIENTED_EDGE ( 'NONE', *, *, #2069, .F. ) ; +#2487 = ORIENTED_EDGE ( 'NONE', *, *, #2056, .T. ) ; +#2488 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000015300, 0.8000000000000000400, 4.149999999999999500 ) ) ; +#2489 = FILL_AREA_STYLE ('',( #3625 ) ) ; +#2490 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 3.374999999999999600 ) ) ; +#2491 = VECTOR ( 'NONE', #9572, 1000.000000000000000 ) ; +#2492 = VECTOR ( 'NONE', #2029, 1000.000000000000000 ) ; +#2493 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 1.637941840314110200, 3.649999999999999500 ) ) ; +#2494 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2495 = VECTOR ( 'NONE', #6101, 1000.000000000000000 ) ; +#2496 = EDGE_CURVE ( 'NONE', #5257, #8949, #873, .T. ) ; +#2497 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.6999999999999999600, -5.150000000000001200 ) ) ; +#2498 = VECTOR ( 'NONE', #11073, 1000.000000000000000 ) ; +#2499 = VECTOR ( 'NONE', #15687, 1000.000000000000000 ) ; +#2500 = PLANE ( 'NONE', #3865 ) ; +#2501 = ORIENTED_EDGE ( 'NONE', *, *, #7787, .F. ) ; +#2502 = ORIENTED_EDGE ( 'NONE', *, *, #10750, .T. ) ; +#2503 = EDGE_CURVE ( 'NONE', #9586, #5237, #4884, .T. ) ; +#2504 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2505 = ADVANCED_FACE ( 'NONE', ( #5455 ), #14242, .F. ) ; +#2506 = VERTEX_POINT ( 'NONE', #3214 ) ; +#2507 = EDGE_CURVE ( 'NONE', #4753, #2506, #2197, .T. ) ; +#2508 = ORIENTED_EDGE ( 'NONE', *, *, #7675, .F. ) ; +#2509 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2510 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999996100, 0.0000000000000000000, 9.550000000000004300 ) ) ; +#2511 = LINE ( 'NONE', #9462, #7122 ) ; +#2512 = LINE ( 'NONE', #3691, #8260 ) ; +#2513 = ADVANCED_FACE ( 'NONE', ( #15517 ), #11726, .F. ) ; +#2514 = AXIS2_PLACEMENT_3D ( 'NONE', #13529, #10014, #14916 ) ; +#2515 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2516 = PLANE ( 'NONE', #14980 ) ; +#2517 = LINE ( 'NONE', #1557, #6943 ) ; +#2518 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 1.875000000000000000 ) ) ; +#2519 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#2520 = VERTEX_POINT ( 'NONE', #15388 ) ; +#2521 = EDGE_CURVE ( 'NONE', #9598, #9439, #6800, .T. ) ; +#2522 = VECTOR ( 'NONE', #2121, 1000.000000000000000 ) ; +#2523 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 1.637941840314110200, 4.049999999999999800 ) ) ; +#2524 = LINE ( 'NONE', #5466, #8843 ) ; +#2525 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#2526 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#2527 = CARTESIAN_POINT ( 'NONE', ( -7.706595997628984800, 3.317668071082943800, 9.020976310729381000 ) ) ; +#2528 = PLANE ( 'NONE', #10834 ) ; +#2530 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2529 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#2531 = EDGE_CURVE ( 'NONE', #10825, #12854, #10212, .T. ) ; +#2532 = VERTEX_POINT ( 'NONE', #4402 ) ; +#2533 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11816 ), #2038 ) ; +#2534 = ORIENTED_EDGE ( 'NONE', *, *, #14920, .T. ) ; +#2535 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#2536 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2537 = ORIENTED_EDGE ( 'NONE', *, *, #3288, .F. ) ; +#2538 = VECTOR ( 'NONE', #11379, 1000.000000000000000 ) ; +#2539 = VERTEX_POINT ( 'NONE', #10406 ) ; +#2540 = ORIENTED_EDGE ( 'NONE', *, *, #12693, .F. ) ; +#2541 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 5.102127870520021000E-016 ) ) ; +#2542 = ORIENTED_EDGE ( 'NONE', *, *, #4467, .F. ) ; +#2543 = LINE ( 'NONE', #8164, #9246 ) ; +#2544 = PRESENTATION_STYLE_ASSIGNMENT (( #4356 ) ) ; +#2545 = EDGE_CURVE ( 'NONE', #14626, #3196, #1052, .T. ) ; +#2546 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2547 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 8.050000000000000700 ) ) ; +#2548 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2549 = VERTEX_POINT ( 'NONE', #1991 ) ; +#2550 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, -0.9499999999999990700 ) ) ; +#2551 = ADVANCED_FACE ( 'NONE', ( #1636 ), #9404, .T. ) ; +#2552 = ORIENTED_EDGE ( 'NONE', *, *, #15059, .F. ) ; +#2553 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999968400, 0.4000000000000000200, 5.650000000000001200 ) ) ; +#2554 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 2.649999999999999500 ) ) ; +#2555 = ORIENTED_EDGE ( 'NONE', *, *, #14297, .T. ) ; +#2556 = EDGE_CURVE ( 'NONE', #2993, #10355, #14222, .T. ) ; +#2557 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999906200, 0.4000000000000000200, 0.5500000000000001600 ) ) ; +#2558 = ORIENTED_EDGE ( 'NONE', *, *, #5656, .F. ) ; +#2559 = AXIS2_PLACEMENT_3D ( 'NONE', #3458, #4692, #14224 ) ; +#2560 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000009600, 0.8000000000000000400, 5.649999999999995900 ) ) ; +#2561 = LINE ( 'NONE', #10236, #6416 ) ; +#2562 = FACE_OUTER_BOUND ( 'NONE', #4625, .T. ) ; +#2563 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2564 = VERTEX_POINT ( 'NONE', #6754 ) ; +#2565 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#2566 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#2567 = ADVANCED_FACE ( 'NONE', ( #1820 ), #4350, .F. ) ; +#2568 = EDGE_CURVE ( 'NONE', #14938, #11029, #3535, .T. ) ; +#2569 = EDGE_CURVE ( 'NONE', #3794, #3513, #4316, .T. ) ; +#2570 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2571 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2572 = VERTEX_POINT ( 'NONE', #11925 ) ; +#2573 = LINE ( 'NONE', #12970, #10782 ) ; +#2574 = CLOSED_SHELL ( 'NONE', ( #8761, #3925, #12311, #13287, #12930 ) ) ; +#2575 = LINE ( 'NONE', #11338, #15160 ) ; +#2576 = AXIS2_PLACEMENT_3D ( 'NONE', #3699, #4923, #6172 ) ; +#2577 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2578 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000000400, 3.049999999999999800, 9.082928932188135500 ) ) ; +#2579 = ADVANCED_FACE ( 'NONE', ( #5071 ), #9450, .F. ) ; +#2580 = PLANE ( 'NONE', #14690 ) ; +#2582 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.4000000000000000200, -1.850000000000000500 ) ) ; +#2581 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2583 = EDGE_LOOP ( 'NONE', ( #9520, #2663, #13513, #6036, #8357, #14927 ) ) ; +#2584 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2585 = ADVANCED_FACE ( 'NONE', ( #8322 ), #13093, .T. ) ; +#2586 = FACE_OUTER_BOUND ( 'NONE', #4828, .T. ) ; +#2587 = VECTOR ( 'NONE', #14862, 1000.000000000000000 ) ; +#2588 = EDGE_CURVE ( 'NONE', #7160, #8695, #13625, .T. ) ; +#2589 = ORIENTED_EDGE ( 'NONE', *, *, #5488, .F. ) ; +#2590 = EDGE_CURVE ( 'NONE', #390, #2939, #4689, .T. ) ; +#2591 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000029100, 0.8000000000000000400, 0.5499999999999997100 ) ) ; +#2592 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999951700, 0.4000000000000000200, 4.149999999999999500 ) ) ; +#2593 = VERTEX_POINT ( 'NONE', #13151 ) ; +#2594 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2595 = VERTEX_POINT ( 'NONE', #14389 ) ; +#2596 = AXIS2_PLACEMENT_3D ( 'NONE', #4629, #786, #5654 ) ; +#2597 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, -2.625000000000000400 ) ) ; +#2598 = VECTOR ( 'NONE', #2584, 1000.000000000000000 ) ; +#2599 = VECTOR ( 'NONE', #15103, 1000.000000000000000 ) ; +#2600 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, -0.1749999999999989300 ) ) ; +#2601 = AXIS2_PLACEMENT_3D ( 'NONE', #2404, #14601, #13437 ) ; +#2602 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 8.650000000000000400 ) ) ; +#2603 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999996100, 0.4000000000000000200, 9.550000000000004300 ) ) ; +#2604 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000000300, -2.880000000000000300 ) ) ; +#2605 = PLANE ( 'NONE', #14238 ) ; +#2606 = STYLED_ITEM ( 'NONE', ( #1130 ), #825 ) ; +#2607 = ORIENTED_EDGE ( 'NONE', *, *, #1114, .T. ) ; +#2608 = LINE ( 'NONE', #11475, #11942 ) ; +#2609 = EDGE_LOOP ( 'NONE', ( #14230, #736, #6759, #2161 ) ) ; +#2610 = ORIENTED_EDGE ( 'NONE', *, *, #15658, .F. ) ; +#2611 = ORIENTED_EDGE ( 'NONE', *, *, #15745, .F. ) ; +#2612 = EDGE_CURVE ( 'NONE', #2125, #14959, #14399, .T. ) ; +#2613 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, -15.05858178898088800, -4.000000000000000000 ) ) ; +#2614 = EDGE_CURVE ( 'NONE', #10186, #3418, #9826, .T. ) ; +#2615 = VECTOR ( 'NONE', #14531, 1000.000000000000000 ) ; +#2616 = LINE ( 'NONE', #12037, #10444 ) ; +#2617 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2618 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2619 = CARTESIAN_POINT ( 'NONE', ( 7.565520379342613600, 3.149999999999998100, -2.806234407614290200 ) ) ; +#2620 = VERTEX_POINT ( 'NONE', #4641 ) ; +#2621 = ORIENTED_EDGE ( 'NONE', *, *, #8578, .F. ) ; +#2622 = ORIENTED_EDGE ( 'NONE', *, *, #7890, .F. ) ; +#2623 = VERTEX_POINT ( 'NONE', #8339 ) ; +#2624 = ORIENTED_EDGE ( 'NONE', *, *, #7959, .T. ) ; +#2625 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 7.875000000000000000 ) ) ; +#2626 = ADVANCED_FACE ( 'NONE', ( #14023 ), #8107, .F. ) ; +#2627 = LINE ( 'NONE', #5247, #7616 ) ; +#2628 = ORIENTED_EDGE ( 'NONE', *, *, #9214, .T. ) ; +#2629 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 2.649999999999999500 ) ) ; +#2630 = EDGE_LOOP ( 'NONE', ( #11885, #6982, #14710, #4685 ) ) ; +#2631 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2632 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2633 = VECTOR ( 'NONE', #4575, 1000.000000000000000 ) ; +#2634 = FACE_OUTER_BOUND ( 'NONE', #2821, .T. ) ; +#2636 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 8.050000000000000700 ) ) ; +#2635 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 0.1000000000000002600 ) ) ; +#2637 = LINE ( 'NONE', #12604, #5696 ) ; +#2638 = ORIENTED_EDGE ( 'NONE', *, *, #14760, .T. ) ; +#2639 = EDGE_CURVE ( 'NONE', #96, #7194, #11539, .T. ) ; +#2640 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000009600, 0.4000000000000000200, 5.649999999999995900 ) ) ; +#2641 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 5.825000000000002000 ) ) ; +#2642 = ORIENTED_EDGE ( 'NONE', *, *, #10525, .T. ) ; +#2643 = ORIENTED_EDGE ( 'NONE', *, *, #3421, .T. ) ; +#2644 = ADVANCED_FACE ( 'NONE', ( #10396 ), #2892, .T. ) ; +#2645 = VERTEX_POINT ( 'NONE', #7770 ) ; +#2646 = ORIENTED_EDGE ( 'NONE', *, *, #8906, .T. ) ; +#2647 = ORIENTED_EDGE ( 'NONE', *, *, #8513, .T. ) ; +#2648 = EDGE_CURVE ( 'NONE', #13489, #7175, #4112, .T. ) ; +#2649 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#2650 = SURFACE_STYLE_FILL_AREA ( #13164 ) ; +#2651 = DIRECTION ( 'NONE', ( -1.807003620809173900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2652 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2653 = VECTOR ( 'NONE', #9035, 1000.000000000000000 ) ; +#2654 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#2655 = ORIENTED_EDGE ( 'NONE', *, *, #5488, .T. ) ; +#2656 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2657 = ORIENTED_EDGE ( 'NONE', *, *, #4205, .F. ) ; +#2658 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 2.649999999999999500 ) ) ; +#2659 = ORIENTED_EDGE ( 'NONE', *, *, #2402, .T. ) ; +#2660 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2661 = ADVANCED_FACE ( 'NONE', ( #13824 ), #10402, .T. ) ; +#2662 = PLANE ( 'NONE', #7125 ) ; +#2663 = ORIENTED_EDGE ( 'NONE', *, *, #10304, .T. ) ; +#2664 = EDGE_CURVE ( 'NONE', #8708, #2179, #858, .T. ) ; +#2665 = ORIENTED_EDGE ( 'NONE', *, *, #2360, .F. ) ; +#2666 = EDGE_CURVE ( 'NONE', #2439, #6021, #12857, .T. ) ; +#2667 = PLANE ( 'NONE', #10769 ) ; +#2668 = LINE ( 'NONE', #4786, #4409 ) ; +#2669 = VECTOR ( 'NONE', #2359, 1000.000000000000000 ) ; +#2670 = LINE ( 'NONE', #12308, #13131 ) ; +#2671 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3669, 'distance_accuracy_value', 'NONE'); +#2672 = LINE ( 'NONE', #3759, #4215 ) ; +#2673 = VERTEX_POINT ( 'NONE', #8986 ) ; +#2674 = CARTESIAN_POINT ( 'NONE', ( 8.549999999999998900, 0.4000000000000000200, 9.550000000000004300 ) ) ; +#2675 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2676 = EDGE_CURVE ( 'NONE', #11954, #10234, #5828, .T. ) ; +#2678 = VERTEX_POINT ( 'NONE', #1879 ) ; +#2677 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2679 = AXIS2_PLACEMENT_3D ( 'NONE', #6780, #8117, #14217 ) ; +#2680 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.8000000000000000400, -4.500000000000000000 ) ) ; +#2681 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#2682 = ORIENTED_EDGE ( 'NONE', *, *, #7045, .F. ) ; +#2683 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2684 = VECTOR ( 'NONE', #14646, 1000.000000000000000 ) ; +#2685 = LINE ( 'NONE', #4286, #979 ) ; +#2686 = PLANE ( 'NONE', #13054 ) ; +#2687 = FACE_OUTER_BOUND ( 'NONE', #14768, .T. ) ; +#2688 = PRESENTATION_STYLE_ASSIGNMENT (( #15664 ) ) ; +#2689 = FACE_OUTER_BOUND ( 'NONE', #7668, .T. ) ; +#2690 = LINE ( 'NONE', #263, #601 ) ; +#2691 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#2692 = FILL_AREA_STYLE ('',( #5313 ) ) ; +#2693 = EDGE_LOOP ( 'NONE', ( #9695, #4563, #3287, #14392, #10840, #14073 ) ) ; +#2694 = ORIENTED_EDGE ( 'NONE', *, *, #10993, .T. ) ; +#2695 = EDGE_CURVE ( 'NONE', #14060, #1589, #12271, .T. ) ; +#2696 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.147979999999999600, 8.990000000000002000 ) ) ; +#2697 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#2698 = EDGE_LOOP ( 'NONE', ( #660, #7642, #8103, #15431 ) ) ; +#2699 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, -0.3500000000000004800 ) ) ; +#2700 = ORIENTED_EDGE ( 'NONE', *, *, #4348, .F. ) ; +#2701 = VECTOR ( 'NONE', #6326, 1000.000000000000000 ) ; +#2702 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2703 = LINE ( 'NONE', #6213, #15446 ) ; +#2704 = FACE_OUTER_BOUND ( 'NONE', #14473, .T. ) ; +#2705 = FACE_OUTER_BOUND ( 'NONE', #1034, .T. ) ; +#2706 = AXIS2_PLACEMENT_3D ( 'NONE', #13092, #1122, #3315 ) ; +#2707 = ORIENTED_EDGE ( 'NONE', *, *, #14999, .F. ) ; +#2708 = EDGE_LOOP ( 'NONE', ( #14625, #9771, #11283, #3137 ) ) ; +#2709 = PLANE ( 'NONE', #13274 ) ; +#2710 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#2711 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2712 = EDGE_CURVE ( 'NONE', #8382, #13489, #13432, .T. ) ; +#2713 = LINE ( 'NONE', #9648, #10346 ) ; +#2714 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 2.649999999999999500 ) ) ; +#2715 = ADVANCED_FACE ( 'NONE', ( #7756 ), #6638, .T. ) ; +#2716 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2717 = EDGE_CURVE ( 'NONE', #280, #5064, #2561, .T. ) ; +#2718 = DIRECTION ( 'NONE', ( -3.881988258447496500E-031, 1.051772519791920300E-016, 1.000000000000000000 ) ) ; +#2719 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 8.650000000000000400 ) ) ; +#2720 = EDGE_CURVE ( 'NONE', #13467, #5229, #5441, .T. ) ; +#2721 = VECTOR ( 'NONE', #5203, 1000.000000000000000 ) ; +#2722 = CARTESIAN_POINT ( 'NONE', ( 7.707639970946511100, 3.319452524890163400, -2.810976310729379300 ) ) ; +#2723 = ORIENTED_EDGE ( 'NONE', *, *, #10906, .T. ) ; +#2724 = B_SPLINE_SURFACE_WITH_KNOTS ( 'NONE', 1, 3, ( + ( #13574, #4963, #1382, #13468, #5019, #13525 ), + ( #7281, #1180, #4861, #7758, #2873, #13777 ), + ( #10848, #11563, #11514, #6054, #1089, #9632 ), + ( #10794, #6074, #4627, #13118, #9578, #5853 ) ), + .UNSPECIFIED., .F., .F., .F., + ( 2, 1, 1, 2 ), + ( 4, 2, 4 ), + ( -0.01000000000000000000, 0.0000000000000000000, 1.000000000000000000, 1.010100000000000000 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#2725 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#2726 = VERTEX_POINT ( 'NONE', #4344 ) ; +#2727 = CARTESIAN_POINT ( 'NONE', ( 7.819452524890163400, 3.207639970946512000, 9.051952621458756500 ) ) ; +#2728 = PLANE ( 'NONE', #8589 ) ; +#2729 = ADVANCED_FACE ( 'NONE', ( #14212 ), #1825, .T. ) ; +#2730 = ORIENTED_EDGE ( 'NONE', *, *, #2614, .T. ) ; +#2731 = VECTOR ( 'NONE', #10793, 1000.000000000000000 ) ; +#2732 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.7000000000000009500, -9.600000000000001400 ) ) ; +#2733 = VERTEX_POINT ( 'NONE', #6699 ) ; +#2734 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.0000000000000000000, 2.950000000000000200 ) ) ; +#2735 = ORIENTED_EDGE ( 'NONE', *, *, #8805, .T. ) ; +#2736 = VECTOR ( 'NONE', #15713, 1000.000000000000000 ) ; +#2737 = VECTOR ( 'NONE', #7027, 1000.000000000000000 ) ; +#2738 = SURFACE_SIDE_STYLE ('',( #5213 ) ) ; +#2739 = ORIENTED_EDGE ( 'NONE', *, *, #5189, .T. ) ; +#2740 = EDGE_CURVE ( 'NONE', #3339, #1212, #6599, .T. ) ; +#2741 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.3999999999999999700, 8.650000000000000400 ) ) ; +#2742 = ORIENTED_EDGE ( 'NONE', *, *, #15106, .T. ) ; +#2743 = DIRECTION ( 'NONE', ( 1.000000000000000000, 2.762298528625489200E-017, -1.104919411450194700E-016 ) ) ; +#2744 = CARTESIAN_POINT ( 'NONE', ( -7.817668071082943400, 3.206595997628985700, 9.051952621458760000 ) ) ; +#2745 = ORIENTED_EDGE ( 'NONE', *, *, #7906, .T. ) ; +#2746 = ADVANCED_FACE ( 'NONE', ( #3161 ), #15181, .F. ) ; +#2747 = LINE ( 'NONE', #358, #841 ) ; +#2748 = EDGE_LOOP ( 'NONE', ( #15382, #15415, #3273, #6302 ) ) ; +#2749 = ORIENTED_EDGE ( 'NONE', *, *, #11583, .F. ) ; +#2751 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2750 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2752 = EDGE_CURVE ( 'NONE', #12689, #6650, #6220, .T. ) ; +#2753 = ORIENTED_EDGE ( 'NONE', *, *, #15477, .T. ) ; +#2754 = VECTOR ( 'NONE', #13296, 1000.000000000000000 ) ; +#2755 = LINE ( 'NONE', #8530, #12650 ) ; +#2756 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13123 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13935, #4191, #1836 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2757 = AXIS2_PLACEMENT_3D ( 'NONE', #3350, #947, #11855 ) ; +#2758 = ORIENTED_EDGE ( 'NONE', *, *, #9292, .F. ) ; +#2759 = ORIENTED_EDGE ( 'NONE', *, *, #9973, .F. ) ; +#2760 = LINE ( 'NONE', #12068, #12091 ) ; +#2761 = ORIENTED_EDGE ( 'NONE', *, *, #273, .T. ) ; +#2762 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2763 = ORIENTED_EDGE ( 'NONE', *, *, #687, .T. ) ; +#2764 = EDGE_CURVE ( 'NONE', #4340, #14124, #8310, .T. ) ; +#2765 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, -3.349999999999998800 ) ) ; +#2766 = AXIS2_PLACEMENT_3D ( 'NONE', #10458, #8088, #14029 ) ; +#2767 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.7000000000000009500, -4.000000000000000000 ) ) ; +#2768 = VECTOR ( 'NONE', #6966, 1000.000000000000000 ) ; +#2769 = SURFACE_STYLE_FILL_AREA ( #14411 ) ; +#2770 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2771 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #13982 ) ; +#2772 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2773 = EDGE_CURVE ( 'NONE', #11143, #9767, #11346, .T. ) ; +#2774 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 7.150000000000000400 ) ) ; +#2775 = AXIS2_PLACEMENT_3D ( 'NONE', #3377, #8099, #11737 ) ; +#2776 = FACE_OUTER_BOUND ( 'NONE', #7164, .T. ) ; +#2777 = VERTEX_POINT ( 'NONE', #1934 ) ; +#2778 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 2.952720810173285400E-015 ) ) ; +#2779 = LINE ( 'NONE', #12054, #5856 ) ; +#2780 = VECTOR ( 'NONE', #7972, 1000.000000000000000 ) ; +#2781 = CARTESIAN_POINT ( 'NONE', ( 7.602198665876327900, 3.139222690360981000, 9.020976310729377400 ) ) ; +#2782 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 8.050000000000000700 ) ) ; +#2783 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 1.637941840314110200, 2.549999999999999800 ) ) ; +#2784 = EDGE_CURVE ( 'NONE', #6004, #9755, #15337, .T. ) ; +#2785 = PLANE ( 'NONE', #1071 ) ; +#2786 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2787 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2788 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2789 = LINE ( 'NONE', #10724, #3358 ) ; +#2790 = VERTEX_POINT ( 'NONE', #9400 ) ; +#2791 = ORIENTED_EDGE ( 'NONE', *, *, #14514, .F. ) ; +#2792 = ADVANCED_FACE ( 'NONE', ( #14574 ), #10611, .F. ) ; +#2793 = PRESENTATION_STYLE_ASSIGNMENT (( #2205 ) ) ; +#2794 = VECTOR ( 'NONE', #11928, 1000.000000000000000 ) ; +#2795 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2796 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2797 = ORIENTED_EDGE ( 'NONE', *, *, #15009, .T. ) ; +#2798 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999991100, 0.8000000000000000400, 6.549999999999998000 ) ) ; +#2799 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2800 = ORIENTED_EDGE ( 'NONE', *, *, #10630, .F. ) ; +#2801 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 9.550000000000000700 ) ) ; +#2802 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 7.325000000000002000 ) ) ; +#2803 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 2.649999999999999500 ) ) ; +#2804 = VECTOR ( 'NONE', #497, 1000.000000000000000 ) ; +#2805 = ORIENTED_EDGE ( 'NONE', *, *, #4332, .T. ) ; +#2806 = VERTEX_POINT ( 'NONE', #8026 ) ; +#2807 = ADVANCED_FACE ( 'NONE', ( #7369 ), #4397, .T. ) ; +#2808 = EDGE_CURVE ( 'NONE', #15134, #5238, #9081, .T. ) ; +#2809 = VECTOR ( 'NONE', #13836, 1000.000000000000000 ) ; +#2810 = LINE ( 'NONE', #10580, #2999 ) ; +#2811 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 1.149999999999999900 ) ) ; +#2812 = EDGE_CURVE ( 'NONE', #9378, #4435, #12664, .T. ) ; +#2813 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 2.050000000000001600 ) ) ; +#2814 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 8.050000000000000700 ) ) ; +#2815 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2816 = ORIENTED_EDGE ( 'NONE', *, *, #30, .T. ) ; +#2817 = PLANE ( 'NONE', #564 ) ; +#2818 = VERTEX_POINT ( 'NONE', #3265 ) ; +#2819 = FACE_OUTER_BOUND ( 'NONE', #8905, .T. ) ; +#2820 = VERTEX_POINT ( 'NONE', #10454 ) ; +#2821 = EDGE_LOOP ( 'NONE', ( #5713, #6970, #2896, #3602 ) ) ; +#2822 = DIRECTION ( 'NONE', ( -5.478074134663590600E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2823 = ADVANCED_FACE ( 'NONE', ( #15146 ), #6855, .T. ) ; +#2824 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.7000000000000009500, -5.150000000000001200 ) ) ; +#2825 = LINE ( 'NONE', #11712, #14454 ) ; +#2826 = LINE ( 'NONE', #2349, #4745 ) ; +#2827 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000014200, 0.8000000000000000400, 4.325000000000001100 ) ) ; +#2828 = ORIENTED_EDGE ( 'NONE', *, *, #12752, .T. ) ; +#2829 = AXIS2_PLACEMENT_3D ( 'NONE', #2377, #10926, #3615 ) ; +#2830 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2831 = EDGE_LOOP ( 'NONE', ( #2452, #11590, #943, #13705 ) ) ; +#2832 = ORIENTED_EDGE ( 'NONE', *, *, #7287, .T. ) ; +#2833 = CARTESIAN_POINT ( 'NONE', ( 7.647980000000000400, 3.049999999999999800, 9.082928932188135500 ) ) ; +#2834 = EDGE_CURVE ( 'NONE', #6281, #6480, #12474, .T. ) ; +#2835 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2836 = ORIENTED_EDGE ( 'NONE', *, *, #7576, .T. ) ; +#2837 = PLANE ( 'NONE', #4313 ) ; +#2838 = VERTEX_POINT ( 'NONE', #14234 ) ; +#2839 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2840 = CLOSED_SHELL ( 'NONE', ( #9800, #4769, #4821, #1544, #5943, #15721 ) ) ; +#2841 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000023800, 0.8000000000000000400, 1.149999999999999900 ) ) ; +#2842 = FACE_OUTER_BOUND ( 'NONE', #5130, .T. ) ; +#2843 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2844 = FACE_OUTER_BOUND ( 'NONE', #14181, .T. ) ; +#2845 = ORIENTED_EDGE ( 'NONE', *, *, #5796, .T. ) ; +#2846 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 8.050000000000000700 ) ) ; +#2847 = VERTEX_POINT ( 'NONE', #4605 ) ; +#2848 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2849 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -2.551063935260010500E-016 ) ) ; +#2850 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.4000000000000000200, 7.150000000000000400 ) ) ; +#2851 = EDGE_LOOP ( 'NONE', ( #3791 ) ) ; +#2852 = ORIENTED_EDGE ( 'NONE', *, *, #6313, .T. ) ; +#2853 = VECTOR ( 'NONE', #12911, 1000.000000000000000 ) ; +#2855 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#2854 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, -0.9499999999999990700 ) ) ; +#2856 = FACE_OUTER_BOUND ( 'NONE', #8874, .T. ) ; +#2857 = EDGE_CURVE ( 'NONE', #7166, #8867, #14765, .T. ) ; +#2858 = FACE_OUTER_BOUND ( 'NONE', #6202, .T. ) ; +#2859 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999906200, 0.4000000000000000200, -0.3500000000000013700 ) ) ; +#2860 = PLANE ( 'NONE', #1133 ) ; +#2861 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2862 = VERTEX_POINT ( 'NONE', #10659 ) ; +#2863 = ORIENTED_EDGE ( 'NONE', *, *, #1815, .T. ) ; +#2864 = ORIENTED_EDGE ( 'NONE', *, *, #1663, .F. ) ; +#2865 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2866 = EDGE_CURVE ( 'NONE', #9055, #9712, #10200, .T. ) ; +#2867 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000034500, 0.4000000000000000200, -0.9499999999999974000 ) ) ; +#2868 = ORIENTED_EDGE ( 'NONE', *, *, #6997, .F. ) ; +#2869 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999988600, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#2870 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 1.149999999999999900 ) ) ; +#2871 = VECTOR ( 'NONE', #14081, 1000.000000000000000 ) ; +#2872 = FACE_OUTER_BOUND ( 'NONE', #3716, .T. ) ; +#2873 = CARTESIAN_POINT ( 'NONE', ( -7.627398903010503200, 3.128752156770256300, -3.079999999999999200 ) ) ; +#2874 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000023800, 0.4000000000000000200, 2.049999999999999800 ) ) ; +#2875 = VECTOR ( 'NONE', #1192, 1000.000000000000000 ) ; +#2876 = ADVANCED_FACE ( 'NONE', ( #15695 ), #2040, .F. ) ; +#2877 = ORIENTED_EDGE ( 'NONE', *, *, #5280, .F. ) ; +#2878 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999989300, 0.0000000000000000000, 5.825000000000001100 ) ) ; +#2879 = ORIENTED_EDGE ( 'NONE', *, *, #3540, .T. ) ; +#2880 = EDGE_CURVE ( 'NONE', #11743, #9439, #8137, .T. ) ; +#2881 = EDGE_CURVE ( 'NONE', #5173, #10063, #4872, .T. ) ; +#2882 = ORIENTED_EDGE ( 'NONE', *, *, #11992, .F. ) ; +#2883 = SURFACE_STYLE_USAGE ( .BOTH. , #382 ) ; +#2884 = VECTOR ( 'NONE', #13316, 1000.000000000000000 ) ; +#2885 = VECTOR ( 'NONE', #6896, 1000.000000000000000 ) ; +#2886 = ORIENTED_EDGE ( 'NONE', *, *, #11340, .F. ) ; +#2887 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #15761, #9587, #8585, #9790, #10862, #9643, #3450, #14416, #1205, #2324, #8483, #9744, #14527 ), + .UNSPECIFIED., .F., .F., + ( 4, 3, 3, 3, 4 ), + ( 8.673617379884035500E-019, 5.091068730646366700E-005, 9.613048157375563400E-005, 0.0001413399754770147100, 0.0001810054085857334200 ), + .UNSPECIFIED. ) ; +#2888 = FACE_OUTER_BOUND ( 'NONE', #6810, .T. ) ; +#2889 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2890 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.4000000000000000200, 1.849999999999999900 ) ) ; +#2891 = ADVANCED_FACE ( 'NONE', ( #6991 ), #11867, .F. ) ; +#2892 = PLANE ( 'NONE', #7469 ) ; +#2893 = LINE ( 'NONE', #10831, #6358 ) ; +#2894 = AXIS2_PLACEMENT_3D ( 'NONE', #2525, #97, #141 ) ; +#2895 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 1.806230589874906900, 4.149999999999999500 ) ) ; +#2896 = ORIENTED_EDGE ( 'NONE', *, *, #2242, .F. ) ; +#2897 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2898 = ADVANCED_FACE ( 'NONE', ( #5651 ), #3520, .F. ) ; +#2899 = ORIENTED_EDGE ( 'NONE', *, *, #12568, .F. ) ; +#2900 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2901 = VERTEX_POINT ( 'NONE', #2082 ) ; +#2902 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.0000000000000000000, 10.00000000000000000 ) ) ; +#2903 = LINE ( 'NONE', #5322, #2131 ) ; +#2904 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2905 = LINE ( 'NONE', #2443, #1190 ) ; +#2906 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.4000000000000000200, 2.949999999999999700 ) ) ; +#2907 = SURFACE_SIDE_STYLE ('',( #3046 ) ) ; +#2908 = EDGE_CURVE ( 'NONE', #13121, #12188, #11895, .T. ) ; +#2909 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#2910 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2911 = FACE_OUTER_BOUND ( 'NONE', #3971, .T. ) ; +#2913 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.3999999999999999700, 9.550000000000000700 ) ) ; +#2912 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 8.825000000000001100 ) ) ; +#2914 = VERTEX_POINT ( 'NONE', #5994 ) ; +#2915 = ORIENTED_EDGE ( 'NONE', *, *, #6689, .T. ) ; +#2916 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999960900, 0.8000000000000000400, -1.850000000000000100 ) ) ; +#2917 = FACE_OUTER_BOUND ( 'NONE', #15157, .T. ) ; +#2918 = AXIS2_PLACEMENT_3D ( 'NONE', #10738, #2008, #10588 ) ; +#2919 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2920 = VECTOR ( 'NONE', #12422, 1000.000000000000000 ) ; +#2921 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2922 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 1.637941840314110200, 2.549999999999999800 ) ) ; +#2923 = EDGE_LOOP ( 'NONE', ( #2935, #6105, #8320, #10195 ) ) ; +#2924 = ORIENTED_EDGE ( 'NONE', *, *, #13517, .T. ) ; +#2925 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999890200, 0.4000000000000000200, -0.9499999999999995100 ) ) ; +#2926 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999980800, 0.4000000000000000200, 7.150000000000002100 ) ) ; +#2927 = EDGE_CURVE ( 'NONE', #11295, #11957, #8697, .T. ) ; +#2928 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2929 = ORIENTED_EDGE ( 'NONE', *, *, #4709, .T. ) ; +#2930 = LINE ( 'NONE', #6661, #14559 ) ; +#2931 = EDGE_CURVE ( 'NONE', #4394, #1802, #2951, .T. ) ; +#2932 = ORIENTED_EDGE ( 'NONE', *, *, #6615, .T. ) ; +#2933 = ORIENTED_EDGE ( 'NONE', *, *, #13207, .F. ) ; +#2934 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2935 = ORIENTED_EDGE ( 'NONE', *, *, #12221, .F. ) ; +#2936 = LINE ( 'NONE', #5865, #14366 ) ; +#2937 = VECTOR ( 'NONE', #15395, 1000.000000000000000 ) ; +#2938 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15179 ), #15756 ) ; +#2939 = VERTEX_POINT ( 'NONE', #12082 ) ; +#2940 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 1.637941840314110200, 2.549999999999999800 ) ) ; +#2941 = ORIENTED_EDGE ( 'NONE', *, *, #10948, .T. ) ; +#2942 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, 6.550000000000001600 ) ) ; +#2943 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 6.550000000000001600 ) ) ; +#2944 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2945 = ORIENTED_EDGE ( 'NONE', *, *, #76, .F. ) ; +#2946 = ORIENTED_EDGE ( 'NONE', *, *, #4815, .T. ) ; +#2947 = FILL_AREA_STYLE ('',( #392 ) ) ; +#2948 = ORIENTED_EDGE ( 'NONE', *, *, #9222, .F. ) ; +#2949 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2950 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.3999999999999999700, 2.549999999999999800 ) ) ; +#2951 = LINE ( 'NONE', #13086, #6039 ) ; +#2952 = VECTOR ( 'NONE', #9071, 1000.000000000000000 ) ; +#2953 = EDGE_CURVE ( 'NONE', #2288, #2623, #2374, .T. ) ; +#2954 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 0.3749999999999994400 ) ) ; +#2955 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2956 = ORIENTED_EDGE ( 'NONE', *, *, #13359, .T. ) ; +#2957 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#2958 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2960 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.3999999999999999700, 4.049999999999999800 ) ) ; +#2959 = PLANE ( 'NONE', #13864 ) ; +#2961 = EDGE_LOOP ( 'NONE', ( #12694, #9090, #14156, #3823 ) ) ; +#2962 = EDGE_CURVE ( 'NONE', #4103, #8309, #2181, .T. ) ; +#2963 = LINE ( 'NONE', #1971, #5453 ) ; +#2964 = VERTEX_POINT ( 'NONE', #9658 ) ; +#2965 = AXIS2_PLACEMENT_3D ( 'NONE', #10101, #6431, #8516 ) ; +#2966 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2967 = FACE_OUTER_BOUND ( 'NONE', #13490, .T. ) ; +#2968 = VECTOR ( 'NONE', #8911, 1000.000000000000000 ) ; +#2969 = ADVANCED_FACE ( 'NONE', ( #3727 ), #11919, .F. ) ; +#2970 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2971 = ADVANCED_FACE ( 'NONE', ( #11717 ), #9550, .T. ) ; +#2972 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2973 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2974 = EDGE_CURVE ( 'NONE', #6194, #1908, #14566, .T. ) ; +#2975 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2976 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15503 ), #833 ) ; +#2977 = LINE ( 'NONE', #11725, #15522 ) ; +#2978 = PLANE ( 'NONE', #10415 ) ; +#2979 = VERTEX_POINT ( 'NONE', #3628 ) ; +#2980 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, -0.9499999999999990700 ) ) ; +#2981 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2982 = LINE ( 'NONE', #1499, #5660 ) ; +#2983 = VECTOR ( 'NONE', #4493, 1000.000000000000000 ) ; +#2984 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2985 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15286, 'distance_accuracy_value', 'NONE'); +#2986 = ORIENTED_EDGE ( 'NONE', *, *, #8559, .T. ) ; +#2987 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.8000000000000000400, -5.150000000000001200 ) ) ; +#2988 = EDGE_CURVE ( 'NONE', #5993, #3712, #5637, .T. ) ; +#2989 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2990 = AXIS2_PLACEMENT_3D ( 'NONE', #14555, #7343, #8467 ) ; +#2991 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2992 = AXIS2_PLACEMENT_3D ( 'NONE', #11570, #11681, #1783 ) ; +#2993 = VERTEX_POINT ( 'NONE', #2284 ) ; +#2994 = VERTEX_POINT ( 'NONE', #10822 ) ; +#2995 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, -2.449999999999998800 ) ) ; +#2996 = VECTOR ( 'NONE', #13975, 1000.000000000000000 ) ; +#2997 = ORIENTED_EDGE ( 'NONE', *, *, #14472, .T. ) ; +#2998 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#2999 = VECTOR ( 'NONE', #4514, 1000.000000000000000 ) ; +#3000 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 9.375000000000000000 ) ) ; +#3001 = EDGE_CURVE ( 'NONE', #1430, #3223, #1040, .T. ) ; +#3002 = ORIENTED_EDGE ( 'NONE', *, *, #3902, .F. ) ; +#3003 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3004 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 6.375000000000000900 ) ) ; +#3005 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 4.599999999999999600 ) ) ; +#3006 = EDGE_LOOP ( 'NONE', ( #136, #13323, #5116, #6020 ) ) ; +#3007 = LINE ( 'NONE', #10712, #3779 ) ; +#3008 = ORIENTED_EDGE ( 'NONE', *, *, #4433, .F. ) ; +#3009 = ORIENTED_EDGE ( 'NONE', *, *, #6637, .T. ) ; +#3010 = AXIS2_PLACEMENT_3D ( 'NONE', #3130, #15151, #2958 ) ; +#3011 = EDGE_LOOP ( 'NONE', ( #14433, #2487, #7624, #14863 ) ) ; +#3012 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#3013 = VECTOR ( 'NONE', #12167, 1000.000000000000000 ) ; +#3014 = VECTOR ( 'NONE', #6051, 1000.000000000000000 ) ; +#3015 = AXIS2_PLACEMENT_3D ( 'NONE', #3900, #13576, #1540 ) ; +#3016 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3018 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000041900, 0.4000000000000000200, -2.449999999999997500 ) ) ; +#3017 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#3019 = ORIENTED_EDGE ( 'NONE', *, *, #1449, .F. ) ; +#3020 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, -3.174999999999998900 ) ) ; +#3021 = ORIENTED_EDGE ( 'NONE', *, *, #6803, .T. ) ; +#3022 = ORIENTED_EDGE ( 'NONE', *, *, #7870, .F. ) ; +#3023 = ORIENTED_EDGE ( 'NONE', *, *, #11606, .T. ) ; +#3024 = EDGE_CURVE ( 'NONE', #1028, #3996, #10581, .T. ) ; +#3025 = ORIENTED_EDGE ( 'NONE', *, *, #2531, .T. ) ; +#3026 = CLOSED_SHELL ( 'NONE', ( #1685, #9765, #11002, #7650, #14463, #11290, #15339, #6290, #4656, #11277 ) ) ; +#3027 = VERTEX_POINT ( 'NONE', #4751 ) ; +#3028 = EDGE_CURVE ( 'NONE', #6135, #1895, #15324, .T. ) ; +#3029 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.952720810173285400E-015 ) ) ; +#3030 = EDGE_CURVE ( 'NONE', #14492, #15411, #7356, .T. ) ; +#3031 = LINE ( 'NONE', #9065, #10846 ) ; +#3032 = VECTOR ( 'NONE', #12400, 1000.000000000000000 ) ; +#3033 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3034 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3035 = VECTOR ( 'NONE', #14748, 1000.000000000000000 ) ; +#3036 = VERTEX_POINT ( 'NONE', #9708 ) ; +#3037 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000004300, 0.4000000000000000200, 8.050000000000000700 ) ) ; +#3038 = EDGE_LOOP ( 'NONE', ( #6873, #888, #1233, #3505 ) ) ; +#3039 = ORIENTED_EDGE ( 'NONE', *, *, #4271, .T. ) ; +#3040 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, -15.05858178898088800, -4.000000000000000000 ) ) ; +#3041 = ORIENTED_EDGE ( 'NONE', *, *, #71, .F. ) ; +#3042 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3043 = ORIENTED_EDGE ( 'NONE', *, *, #5676, .T. ) ; +#3044 = VERTEX_POINT ( 'NONE', #2385 ) ; +#3045 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 1.637941840314110200, 2.549999999999999800 ) ) ; +#3046 = SURFACE_STYLE_FILL_AREA ( #446 ) ; +#3047 = PRESENTATION_STYLE_ASSIGNMENT (( #6743 ) ) ; +#3048 = VECTOR ( 'NONE', #1893, 1000.000000000000000 ) ; +#3049 = VECTOR ( 'NONE', #696, 1000.000000000000000 ) ; +#3050 = ORIENTED_EDGE ( 'NONE', *, *, #5449, .F. ) ; +#3051 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 1.637941840314110200, 2.549999999999999800 ) ) ; +#3052 = EDGE_CURVE ( 'NONE', #4376, #11408, #3150, .T. ) ; +#3053 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3054 = ADVANCED_FACE ( 'NONE', ( #10383 ), #12079, .F. ) ; +#3056 = ORIENTED_EDGE ( 'NONE', *, *, #12953, .T. ) ; +#3055 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3057 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3058 = EDGE_LOOP ( 'NONE', ( #7527, #14262, #3441, #87 ) ) ; +#3059 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999936400, 0.4000000000000000200, 2.650000000000001200 ) ) ; +#3060 = ADVANCED_FACE ( 'NONE', ( #6977 ), #8710, .F. ) ; +#3061 = VERTEX_POINT ( 'NONE', #4649 ) ; +#3062 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000014900, 0.4000000000000000200, 5.049999999999997200 ) ) ; +#3063 = ORIENTED_EDGE ( 'NONE', *, *, #7717, .T. ) ; +#3064 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3065 = EDGE_CURVE ( 'NONE', #14204, #8386, #2364, .T. ) ; +#3066 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3067 = SURFACE_STYLE_FILL_AREA ( #3825 ) ; +#3068 = CYLINDRICAL_SURFACE ( 'NONE', #7549, 0.2749999999999991900 ) ; +#3069 = VECTOR ( 'NONE', #4940, 1000.000000000000000 ) ; +#3070 = AXIS2_PLACEMENT_3D ( 'NONE', #14083, #917, #11824 ) ; +#3071 = LINE ( 'NONE', #11111, #1347 ) ; +#3072 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, -1.850000000000000500 ) ) ; +#3073 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.3999999999999999700, 2.949999999999999300 ) ) ; +#3074 = ORIENTED_EDGE ( 'NONE', *, *, #5521, .F. ) ; +#3075 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3076 = ORIENTED_EDGE ( 'NONE', *, *, #6953, .F. ) ; +#3077 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.149999999999999900, 8.990000000000002000 ) ) ; +#3079 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 7.875000000000000000 ) ) ; +#3078 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000030200, 0.8000000000000000400, -0.1749999999999998200 ) ) ; +#3080 = ORIENTED_EDGE ( 'NONE', *, *, #15062, .T. ) ; +#3081 = EDGE_CURVE ( 'NONE', #6104, #7823, #848, .T. ) ; +#3082 = LINE ( 'NONE', #4341, #5951 ) ; +#3083 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3084 = VECTOR ( 'NONE', #8471, 1000.000000000000000 ) ; +#3085 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#3086 = LINE ( 'NONE', #12440, #7110 ) ; +#3087 = LINE ( 'NONE', #10629, #7676 ) ; +#3088 = ORIENTED_EDGE ( 'NONE', *, *, #10445, .F. ) ; +#3089 = VERTEX_POINT ( 'NONE', #12235 ) ; +#3090 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 7.149999999999996800 ) ) ; +#3091 = EDGE_CURVE ( 'NONE', #7064, #10428, #6026, .T. ) ; +#3092 = EDGE_LOOP ( 'NONE', ( #14900, #15105, #9616, #10115 ) ) ; +#3093 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3094 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #11656 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2291, #4758, #12042 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3095 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000014900, 0.4000000000000000200, 5.050000000000000700 ) ) ; +#3096 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, -15.05858178898088800, -8.800000000000000700 ) ) ; +#3097 = VERTEX_POINT ( 'NONE', #8661 ) ; +#3098 = LINE ( 'NONE', #283, #14520 ) ; +#3099 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.8000000000000000400, -4.500000000000000900 ) ) ; +#3100 = FACE_OUTER_BOUND ( 'NONE', #10668, .T. ) ; +#3101 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#3102 = VECTOR ( 'NONE', #10878, 1000.000000000000000 ) ; +#3103 = PLANE ( 'NONE', #125 ) ; +#3104 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3105 = LINE ( 'NONE', #9769, #6746 ) ; +#3106 = EDGE_CURVE ( 'NONE', #1469, #148, #15679, .T. ) ; +#3107 = EDGE_CURVE ( 'NONE', #9911, #11963, #13615, .T. ) ; +#3108 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3109 = ORIENTED_EDGE ( 'NONE', *, *, #9573, .T. ) ; +#3110 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 3.374999999999999600 ) ) ; +#3111 = VECTOR ( 'NONE', #2031, 1000.000000000000000 ) ; +#3112 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3113 = AXIS2_PLACEMENT_3D ( 'NONE', #11001, #13808, #10023 ) ; +#3114 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3115 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3116 = CIRCLE ( 'NONE', #5121, 0.5000000000000004400 ) ; +#3117 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000029100, 0.4000000000000000200, 0.5499999999999997100 ) ) ; +#3118 = PLANE ( 'NONE', #10008 ) ; +#3119 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3120 = ORIENTED_EDGE ( 'NONE', *, *, #7984, .F. ) ; +#3121 = ORIENTED_EDGE ( 'NONE', *, *, #632, .T. ) ; +#3122 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999951700, 0.0000000000000000000, 5.050000000000000700 ) ) ; +#3123 = ADVANCED_FACE ( 'NONE', ( #8878 ), #6308, .T. ) ; +#3124 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3125 = EDGE_CURVE ( 'NONE', #4968, #10922, #12457, .T. ) ; +#3126 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3127 = VERTEX_POINT ( 'NONE', #10988 ) ; +#3128 = VECTOR ( 'NONE', #2251, 1000.000000000000000 ) ; +#3129 = EDGE_LOOP ( 'NONE', ( #2628, #23, #13073, #15347 ) ) ; +#3130 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, -0.3500000000000004800 ) ) ; +#3132 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 1.637941840314110200, 4.750000000000000000 ) ) ; +#3131 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 9.375000000000000000 ) ) ; +#3133 = ORIENTED_EDGE ( 'NONE', *, *, #9954, .F. ) ; +#3134 = EDGE_CURVE ( 'NONE', #8392, #13356, #3907, .T. ) ; +#3135 = LINE ( 'NONE', #10601, #6771 ) ; +#3136 = AXIS2_PLACEMENT_3D ( 'NONE', #10875, #9596, #15725 ) ; +#3137 = ORIENTED_EDGE ( 'NONE', *, *, #10329, .F. ) ; +#3138 = ADVANCED_FACE ( 'NONE', ( #14952 ), #11188, .F. ) ; +#3139 = ORIENTED_EDGE ( 'NONE', *, *, #6718, .T. ) ; +#3140 = AXIS2_PLACEMENT_3D ( 'NONE', #7368, #8587, #1261 ) ; +#3141 = ORIENTED_EDGE ( 'NONE', *, *, #5184, .F. ) ; +#3142 = ADVANCED_FACE ( 'NONE', ( #7740 ), #3686, .T. ) ; +#3143 = VECTOR ( 'NONE', #12647, 1000.000000000000000 ) ; +#3144 = VERTEX_POINT ( 'NONE', #13465 ) ; +#3145 = ORIENTED_EDGE ( 'NONE', *, *, #9471, .F. ) ; +#3146 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3147 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3148 = EDGE_LOOP ( 'NONE', ( #12643, #15665, #3416 ) ) ; +#3149 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000000700, 9.290000000000000900 ) ) ; +#3150 = LINE ( 'NONE', #9491, #4300 ) ; +#3151 = LINE ( 'NONE', #7454, #7944 ) ; +#3152 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3153 = ORIENTED_EDGE ( 'NONE', *, *, #2361, .T. ) ; +#3154 = EDGE_CURVE ( 'NONE', #13067, #823, #664, .T. ) ; +#3155 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000011900, 2.897357294982538800E-014, 0.0000000000000000000 ) ) ; +#3156 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3157 = VERTEX_POINT ( 'NONE', #221 ) ; +#3158 = VECTOR ( 'NONE', #15274, 1000.000000000000000 ) ; +#3159 = ORIENTED_EDGE ( 'NONE', *, *, #4902, .F. ) ; +#3160 = ORIENTED_EDGE ( 'NONE', *, *, #1432, .F. ) ; +#3161 = FACE_OUTER_BOUND ( 'NONE', #15744, .T. ) ; +#3162 = VECTOR ( 'NONE', #9122, 1000.000000000000000 ) ; +#3163 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3164 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3165 = FILL_AREA_STYLE ('',( #3267 ) ) ; +#3166 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 6.550000000000001600 ) ) ; +#3167 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 4.149999999999999500 ) ) ; +#3168 = FACE_OUTER_BOUND ( 'NONE', #11959, .T. ) ; +#3169 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000021300, 0.8000000000000000400, 2.649999999999999500 ) ) ; +#3170 = VERTEX_POINT ( 'NONE', #6255 ) ; +#3171 = EDGE_CURVE ( 'NONE', #13912, #14492, #5249, .T. ) ; +#3172 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1339, 'distance_accuracy_value', 'NONE'); +#3173 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3174 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 0.7999999999999767300, -3.080000000000009400 ) ) ; +#3175 = VECTOR ( 'NONE', #6643, 1000.000000000000000 ) ; +#3176 = VECTOR ( 'NONE', #15225, 1000.000000000000000 ) ; +#3177 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3178 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 10.00000000000000000 ) ) ; +#3179 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 4.599999999999999600 ) ) ; +#3180 = EDGE_CURVE ( 'NONE', #9598, #8009, #10139, .T. ) ; +#3181 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3182 = EDGE_LOOP ( 'NONE', ( #5812, #10297, #11262, #6682, #5912, #1174 ) ) ; +#3183 = FACE_OUTER_BOUND ( 'NONE', #10648, .T. ) ; +#3184 = LINE ( 'NONE', #2557, #9674 ) ; +#3185 = EDGE_LOOP ( 'NONE', ( #2828, #2220, #8165, #784 ) ) ; +#3186 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000004100, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#3187 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, -0.0000000000000000000, -3.174999999999998900 ) ) ; +#3188 = EDGE_CURVE ( 'NONE', #12, #13558, #2001, .T. ) ; +#3189 = PLANE ( 'NONE', #10936 ) ; +#3190 = EDGE_CURVE ( 'NONE', #9162, #5145, #4095, .T. ) ; +#3191 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000002000, 9.290000000000000900 ) ) ; +#3192 = VERTEX_POINT ( 'NONE', #6361 ) ; +#3193 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#3194 = ORIENTED_EDGE ( 'NONE', *, *, #1103, .F. ) ; +#3195 = LINE ( 'NONE', #10558, #3384 ) ; +#3196 = VERTEX_POINT ( 'NONE', #14964 ) ; +#3197 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3198 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3199 = LINE ( 'NONE', #12590, #14253 ) ; +#3200 = FACE_OUTER_BOUND ( 'NONE', #6748, .T. ) ; +#3201 = AXIS2_PLACEMENT_3D ( 'NONE', #15511, #15663, #1000 ) ; +#3202 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3725 ) ) ; +#3203 = VERTEX_POINT ( 'NONE', #5286 ) ; +#3204 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, -1.850000000000000500 ) ) ; +#3205 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 9.550000000000000700 ) ) ; +#3206 = ADVANCED_FACE ( 'NONE', ( #13806 ), #5236, .F. ) ; +#3207 = EDGE_LOOP ( 'NONE', ( #4496, #3121, #15252, #6328 ) ) ; +#3208 = FACE_OUTER_BOUND ( 'NONE', #12505, .T. ) ; +#3209 = ORIENTED_EDGE ( 'NONE', *, *, #8203, .F. ) ; +#3210 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.3999999999999999700, -2.449999999999998800 ) ) ; +#3211 = ORIENTED_EDGE ( 'NONE', *, *, #13544, .T. ) ; +#3212 = EDGE_CURVE ( 'NONE', #6475, #15429, #1421, .T. ) ; +#3213 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3214 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000014900, 0.4000000000000000200, 5.050000000000002500 ) ) ; +#3215 = ADVANCED_FACE ( 'NONE', ( #8498 ), #10219, .T. ) ; +#3216 = LINE ( 'NONE', #4041, #5906 ) ; +#3217 = VECTOR ( 'NONE', #3956, 1000.000000000000000 ) ; +#3218 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3219 = SURFACE_SIDE_STYLE ('',( #10917 ) ) ; +#3220 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000011200, 3.022803820977839200E-014, 9.082928932188135500 ) ) ; +#3221 = ORIENTED_EDGE ( 'NONE', *, *, #6085, .F. ) ; +#3222 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3223 = VERTEX_POINT ( 'NONE', #12443 ) ; +#3224 = ORIENTED_EDGE ( 'NONE', *, *, #3447, .T. ) ; +#3225 = AXIS2_PLACEMENT_3D ( 'NONE', #8548, #15575, #8503 ) ; +#3226 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3227 = ORIENTED_EDGE ( 'NONE', *, *, #9240, .F. ) ; +#3228 = ORIENTED_EDGE ( 'NONE', *, *, #15608, .F. ) ; +#3229 = AXIS2_PLACEMENT_3D ( 'NONE', #10757, #3504, #3453 ) ; +#3230 = DIRECTION ( 'NONE', ( 1.807003620809173900E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3231 = LINE ( 'NONE', #9734, #11609 ) ; +#3232 = VECTOR ( 'NONE', #12177, 1000.000000000000000 ) ; +#3233 = PLANE ( 'NONE', #13679 ) ; +#3234 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999936400, 0.0000000000000000000, 2.649999999999999500 ) ) ; +#3235 = ORIENTED_EDGE ( 'NONE', *, *, #3708, .F. ) ; +#3236 = EDGE_LOOP ( 'NONE', ( #1881, #2941, #2098, #7332 ) ) ; +#3237 = EDGE_CURVE ( 'NONE', #12, #772, #13414, .T. ) ; +#3238 = ORIENTED_EDGE ( 'NONE', *, *, #13947, .F. ) ; +#3239 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3240 = EDGE_CURVE ( 'NONE', #8009, #6232, #13226, .T. ) ; +#3241 = VERTEX_POINT ( 'NONE', #11393 ) ; +#3242 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3243 = LINE ( 'NONE', #9111, #8057 ) ; +#3244 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.3999999999999999700, -3.350000000000000500 ) ) ; +#3245 = FACE_OUTER_BOUND ( 'NONE', #4298, .T. ) ; +#3246 = LINE ( 'NONE', #10663, #8602 ) ; +#3247 = FACE_OUTER_BOUND ( 'NONE', #8147, .T. ) ; +#3248 = FACE_OUTER_BOUND ( 'NONE', #8195, .T. ) ; +#3249 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3250 = AXIS2_PLACEMENT_3D ( 'NONE', #5536, #11533, #13939 ) ; +#3251 = ORIENTED_EDGE ( 'NONE', *, *, #3106, .T. ) ; +#3252 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#3253 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3254 = ORIENTED_EDGE ( 'NONE', *, *, #13069, .F. ) ; +#3255 = ORIENTED_EDGE ( 'NONE', *, *, #10539, .F. ) ; +#3256 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 5.102127870520021000E-016 ) ) ; +#3257 = ORIENTED_EDGE ( 'NONE', *, *, #4490, .T. ) ; +#3258 = VECTOR ( 'NONE', #2889, 1000.000000000000000 ) ; +#3259 = VECTOR ( 'NONE', #2581, 1000.000000000000000 ) ; +#3260 = VECTOR ( 'NONE', #6890, 1000.000000000000000 ) ; +#3261 = ORIENTED_EDGE ( 'NONE', *, *, #9163, .T. ) ; +#3262 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#3263 = EDGE_CURVE ( 'NONE', #4851, #2790, #9993, .T. ) ; +#3264 = LINE ( 'NONE', #5961, #13554 ) ; +#3265 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999998600, 0.0000000000000000000, 8.650000000000000400 ) ) ; +#3266 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#3267 = FILL_AREA_STYLE_COLOUR ( '', #11628 ) ; +#3268 = EDGE_LOOP ( 'NONE', ( #8527, #3410, #2899, #1613 ) ) ; +#3269 = PLANE ( 'NONE', #4955 ) ; +#3270 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3271 = ORIENTED_EDGE ( 'NONE', *, *, #11031, .F. ) ; +#3272 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3273 = ORIENTED_EDGE ( 'NONE', *, *, #13135, .F. ) ; +#3274 = EDGE_CURVE ( 'NONE', #909, #11021, #10187, .T. ) ; +#3275 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 15.10000000000000100 ) ) ; +#3276 = AXIS2_PLACEMENT_3D ( 'NONE', #12162, #8481, #13398 ) ; +#3277 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6561 ), #1633 ) ; +#3278 = LINE ( 'NONE', #6984, #2117 ) ; +#3279 = LINE ( 'NONE', #7587, #10138 ) ; +#3280 = FACE_OUTER_BOUND ( 'NONE', #7446, .T. ) ; +#3281 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3282 = FACE_OUTER_BOUND ( 'NONE', #5670, .T. ) ; +#3283 = EDGE_LOOP ( 'NONE', ( #14796, #9851, #9818, #3159, #13718, #6972 ) ) ; +#3284 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 0.5500000000000010400 ) ) ; +#3285 = EDGE_LOOP ( 'NONE', ( #13540, #14346, #15386, #14786, #11810, #3786 ) ) ; +#3286 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.8000000000000000400, -5.150000000000001200 ) ) ; +#3287 = ORIENTED_EDGE ( 'NONE', *, *, #11553, .F. ) ; +#3288 = EDGE_CURVE ( 'NONE', #9571, #6709, #277, .T. ) ; +#3289 = EDGE_LOOP ( 'NONE', ( #8168, #10781, #5595, #2025 ) ) ; +#3290 = ADVANCED_FACE ( 'NONE', ( #3713 ), #12492, .T. ) ; +#3291 = VECTOR ( 'NONE', #8855, 1000.000000000000000 ) ; +#3292 = LINE ( 'NONE', #10830, #11478 ) ; +#3293 = EDGE_CURVE ( 'NONE', #562, #4489, #1218, .T. ) ; +#3294 = ADVANCED_FACE ( 'NONE', ( #3324 ), #12388, .F. ) ; +#3295 = LINE ( 'NONE', #10030, #1193 ) ; +#3296 = AXIS2_PLACEMENT_3D ( 'NONE', #1493, #10027, #8722 ) ; +#3297 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 8.050000000000000700 ) ) ; +#3298 = EDGE_LOOP ( 'NONE', ( #4578, #4420, #1090, #7432 ) ) ; +#3299 = ORIENTED_EDGE ( 'NONE', *, *, #977, .T. ) ; +#3300 = ORIENTED_EDGE ( 'NONE', *, *, #2421, .T. ) ; +#3301 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3302 = VECTOR ( 'NONE', #12820, 1000.000000000000000 ) ; +#3303 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3304 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3305 = EDGE_CURVE ( 'NONE', #480, #10163, #7546, .T. ) ; +#3306 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -2.551063935260010500E-016 ) ) ; +#3307 = LINE ( 'NONE', #10045, #2920 ) ; +#3308 = LINE ( 'NONE', #4976, #4472 ) ; +#3309 = EDGE_LOOP ( 'NONE', ( #12601, #3074, #14654, #276, #7954, #7085, #1817, #1329, #422, #11206, #15047, #3918, #6466, #12997, #2366, #13920, #842, #8756, #2218, #9054, #7431, #10540, #212, #726, #11601, #9709, #373, #2542, #14870, #13818, #9092, #1338, #8487, #2622, #14764, #9456, #7599, #6047, #6588, #1793, #4462, #5777, #8703, #2369, #10232, #7853, #8567, #13464, #5337, #15496, #662, #9282, #2758, #8196, #14460, #1507, #5093, #7090, #7489, #3271, #12698, #10867, #11426, #14105, #10801, #11873, #15013, #12172, #15297, #231, #5362, #6732, #7351, #1616, #14750, #2160 ) ) ; +#3310 = ORIENTED_EDGE ( 'NONE', *, *, #52, .F. ) ; +#3311 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 6.550000000000001600 ) ) ; +#3312 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3313 = AXIS2_PLACEMENT_3D ( 'NONE', #2199, #8517, #4766 ) ; +#3314 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 5.050000000000000700 ) ) ; +#3315 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3316 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, -0.9499999999999990700 ) ) ; +#3317 = ORIENTED_EDGE ( 'NONE', *, *, #9754, .F. ) ; +#3318 = VECTOR ( 'NONE', #15455, 1000.000000000000000 ) ; +#3319 = ORIENTED_EDGE ( 'NONE', *, *, #613, .F. ) ; +#3320 = ORIENTED_EDGE ( 'NONE', *, *, #12669, .F. ) ; +#3321 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3322 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3323 = ORIENTED_EDGE ( 'NONE', *, *, #13245, .T. ) ; +#3324 = FACE_OUTER_BOUND ( 'NONE', #14804, .T. ) ; +#3325 = VECTOR ( 'NONE', #1410, 1000.000000000000000 ) ; +#3326 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.351999999999999400, -2.779999999999999400 ) ) ; +#3327 = DIRECTION ( 'NONE', ( -1.807003620809173900E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3328 = ORIENTED_EDGE ( 'NONE', *, *, #1522, .F. ) ; +#3329 = EDGE_CURVE ( 'NONE', #2231, #9305, #90, .T. ) ; +#3330 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3331 = ORIENTED_EDGE ( 'NONE', *, *, #14450, .F. ) ; +#3332 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 6.375000000000000900 ) ) ; +#3333 = EDGE_CURVE ( 'NONE', #12795, #11800, #9432, .T. ) ; +#3335 = FILL_AREA_STYLE_COLOUR ( '', #9053 ) ; +#3334 = FILL_AREA_STYLE_COLOUR ( '', #3850 ) ; +#3336 = VERTEX_POINT ( 'NONE', #13624 ) ; +#3337 = LINE ( 'NONE', #3671, #4105 ) ; +#3338 = EDGE_CURVE ( 'NONE', #1674, #9338, #15307, .T. ) ; +#3339 = VERTEX_POINT ( 'NONE', #4155 ) ; +#3340 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3341 = VECTOR ( 'NONE', #5626, 1000.000000000000000 ) ; +#3342 = VECTOR ( 'NONE', #2064, 1000.000000000000000 ) ; +#3343 = STYLED_ITEM ( 'NONE', ( #3876 ), #12817 ) ; +#3344 = ORIENTED_EDGE ( 'NONE', *, *, #4823, .F. ) ; +#3345 = PLANE ( 'NONE', #165 ) ; +#3346 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, -1.399999999999999700 ) ) ; +#3347 = PLANE ( 'NONE', #9895 ) ; +#3348 = VERTEX_POINT ( 'NONE', #5335 ) ; +#3349 = VECTOR ( 'NONE', #6038, 1000.000000000000000 ) ; +#3350 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, -15.05858178898088800, -9.600000000000001400 ) ) ; +#3351 = VERTEX_POINT ( 'NONE', #4264 ) ; +#3352 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#3353 = LINE ( 'NONE', #8601, #7382 ) ; +#3354 = EDGE_CURVE ( 'NONE', #5711, #15538, #13029, .T. ) ; +#3355 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 7.875000000000000000 ) ) ; +#3356 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 2.952720810173285400E-015 ) ) ; +#3357 = EDGE_CURVE ( 'NONE', #4736, #6662, #10368, .T. ) ; +#3358 = VECTOR ( 'NONE', #14341, 1000.000000000000000 ) ; +#3359 = ORIENTED_EDGE ( 'NONE', *, *, #2531, .F. ) ; +#3360 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 4.599999999999999600 ) ) ; +#3361 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6802, 'distance_accuracy_value', 'NONE'); +#3362 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3363 = VECTOR ( 'NONE', #8888, 1000.000000000000000 ) ; +#3364 = FACE_OUTER_BOUND ( 'NONE', #4655, .T. ) ; +#3365 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#3366 = VERTEX_POINT ( 'NONE', #5491 ) ; +#3367 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3368 = ADVANCED_FACE ( 'NONE', ( #10755 ), #2978, .F. ) ; +#3369 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000009600, 0.4000000000000000200, 6.549999999999998000 ) ) ; +#3370 = PLANE ( 'NONE', #14305 ) ; +#3371 = EDGE_CURVE ( 'NONE', #3241, #6723, #11134, .T. ) ; +#3372 = EDGE_LOOP ( 'NONE', ( #8078, #6491, #15623 ) ) ; +#3373 = ORIENTED_EDGE ( 'NONE', *, *, #2676, .F. ) ; +#3374 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3375 = PRESENTATION_STYLE_ASSIGNMENT (( #9064 ) ) ; +#3376 = VECTOR ( 'NONE', #1135, 1000.000000000000000 ) ; +#3377 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 3.000000000000000000 ) ) ; +#3379 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3378 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#3380 = EDGE_CURVE ( 'NONE', #15559, #1214, #12437, .T. ) ; +#3381 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.4000000000000000200, -0.3500000000000004800 ) ) ; +#3382 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3383 = ORIENTED_EDGE ( 'NONE', *, *, #8120, .T. ) ; +#3384 = VECTOR ( 'NONE', #1869, 1000.000000000000000 ) ; +#3385 = EDGE_LOOP ( 'NONE', ( #14476, #5527, #11036, #6111 ) ) ; +#3386 = ORIENTED_EDGE ( 'NONE', *, *, #11831, .T. ) ; +#3387 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999905500, -0.0000000000000000000, -0.3500000000000013700 ) ) ; +#3388 = LINE ( 'NONE', #14275, #7419 ) ; +#3389 = LINE ( 'NONE', #14338, #4163 ) ; +#3390 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3391 = EDGE_CURVE ( 'NONE', #1093, #4089, #11318, .T. ) ; +#3392 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3393 = EDGE_CURVE ( 'NONE', #5252, #8115, #1795, .T. ) ; +#3394 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3395 = ORIENTED_EDGE ( 'NONE', *, *, #11672, .F. ) ; +#3396 = ORIENTED_EDGE ( 'NONE', *, *, #6058, .F. ) ; +#3397 = ORIENTED_EDGE ( 'NONE', *, *, #6179, .F. ) ; +#3398 = ORIENTED_EDGE ( 'NONE', *, *, #14257, .T. ) ; +#3399 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 10.00000000000000000 ) ) ; +#3400 = ORIENTED_EDGE ( 'NONE', *, *, #6761, .F. ) ; +#3401 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 2.825000000000001100 ) ) ; +#3402 = AXIS2_PLACEMENT_3D ( 'NONE', #14976, #483, #1708 ) ; +#3403 = VECTOR ( 'NONE', #15223, 1000.000000000000000 ) ; +#3404 = VECTOR ( 'NONE', #7236, 1000.000000000000000 ) ; +#3405 = AXIS2_PLACEMENT_3D ( 'NONE', #5617, #6902, #2034 ) ; +#3406 = VECTOR ( 'NONE', #15163, 1000.000000000000000 ) ; +#3407 = EDGE_LOOP ( 'NONE', ( #7405, #2420, #3921, #5139 ) ) ; +#3408 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3409 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3410 = ORIENTED_EDGE ( 'NONE', *, *, #9231, .F. ) ; +#3411 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3412 = EDGE_LOOP ( 'NONE', ( #13950, #8562, #3944, #745 ) ) ; +#3413 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999962700, 0.8000000000000000400, -1.674999999999999400 ) ) ; +#3414 = EDGE_CURVE ( 'NONE', #6581, #558, #9979, .T. ) ; +#3415 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 10.50000000000000000 ) ) ; +#3416 = ORIENTED_EDGE ( 'NONE', *, *, #9386, .T. ) ; +#3417 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, 2.050000000000001600 ) ) ; +#3418 = VERTEX_POINT ( 'NONE', #3191 ) ; +#3419 = ORIENTED_EDGE ( 'NONE', *, *, #7203, .T. ) ; +#3420 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3421 = EDGE_CURVE ( 'NONE', #12749, #5193, #6205, .T. ) ; +#3422 = VECTOR ( 'NONE', #3382, 1000.000000000000000 ) ; +#3423 = LINE ( 'NONE', #11167, #17 ) ; +#3424 = VECTOR ( 'NONE', #12929, 1000.000000000000000 ) ; +#3425 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#3426 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14794 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #8861, #309, #5228 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3427 = ORIENTED_EDGE ( 'NONE', *, *, #5965, .T. ) ; +#3428 = EDGE_LOOP ( 'NONE', ( #365, #7086, #577, #9507, #2864, #13847 ) ) ; +#3429 = AXIS2_PLACEMENT_3D ( 'NONE', #5260, #12679, #12631 ) ; +#3430 = CARTESIAN_POINT ( 'NONE', ( -7.629230338724656900, 3.350000000000000100, 9.005624327289695000 ) ) ; +#3432 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, -2.899999999999999900 ) ) ; +#3431 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3433 = VERTEX_POINT ( 'NONE', #6622 ) ; +#3434 = ORIENTED_EDGE ( 'NONE', *, *, #9019, .F. ) ; +#3435 = ORIENTED_EDGE ( 'NONE', *, *, #7201, .T. ) ; +#3436 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3437 = FACE_OUTER_BOUND ( 'NONE', #5886, .T. ) ; +#3438 = VECTOR ( 'NONE', #7882, 1000.000000000000000 ) ; +#3439 = VECTOR ( 'NONE', #4585, 1000.000000000000000 ) ; +#3440 = LINE ( 'NONE', #5087, #14488 ) ; +#3441 = ORIENTED_EDGE ( 'NONE', *, *, #8835, .T. ) ; +#3442 = EDGE_CURVE ( 'NONE', #9743, #10843, #5039, .T. ) ; +#3443 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3444 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.3999999999999999700, 4.750000000000000000 ) ) ; +#3445 = ADVANCED_FACE ( 'NONE', ( #6006 ), #6109, .F. ) ; +#3446 = ORIENTED_EDGE ( 'NONE', *, *, #11992, .T. ) ; +#3447 = EDGE_CURVE ( 'NONE', #9494, #11437, #12649, .T. ) ; +#3448 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 1.637941840314110200, 2.549999999999999800 ) ) ; +#3449 = ORIENTED_EDGE ( 'NONE', *, *, #8365, .T. ) ; +#3450 = CARTESIAN_POINT ( 'NONE', ( 7.599300014952715000, 3.117242544895639300, 9.064016485703918500 ) ) ; +#3451 = LINE ( 'NONE', #10130, #6331 ) ; +#3452 = VECTOR ( 'NONE', #13913, 1000.000000000000000 ) ; +#3453 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3454 = VECTOR ( 'NONE', #14064, 1000.000000000000000 ) ; +#3455 = FACE_OUTER_BOUND ( 'NONE', #6087, .T. ) ; +#3456 = AXIS2_PLACEMENT_3D ( 'NONE', #5672, #9488, #5780 ) ; +#3457 = LINE ( 'NONE', #11787, #6146 ) ; +#3458 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.6999999999999999600, -5.150000000000001200 ) ) ; +#3459 = PLANE ( 'NONE', #3957 ) ; +#3460 = VERTEX_POINT ( 'NONE', #14267 ) ; +#3461 = CLOSED_SHELL ( 'NONE', ( #5459, #9779, #10995 ) ) ; +#3462 = ADVANCED_FACE ( 'NONE', ( #5817 ), #10272, .T. ) ; +#3463 = EDGE_LOOP ( 'NONE', ( #7205, #743, #1127, #12875 ) ) ; +#3464 = ORIENTED_EDGE ( 'NONE', *, *, #7958, .F. ) ; +#3465 = PLANE ( 'NONE', #5450 ) ; +#3466 = EDGE_CURVE ( 'NONE', #8782, #6498, #2543, .T. ) ; +#3467 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, -0.3500000000000004800 ) ) ; +#3468 = VECTOR ( 'NONE', #10975, 1000.000000000000000 ) ; +#3469 = LINE ( 'NONE', #3747, #9218 ) ; +#3470 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3471 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#3472 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3473 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7034, 'distance_accuracy_value', 'NONE'); +#3474 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3475 = VECTOR ( 'NONE', #9301, 1000.000000000000000 ) ; +#3476 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 0.7999999999999760600, -2.880000000000009200 ) ) ; +#3477 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3478 = EDGE_CURVE ( 'NONE', #9743, #11979, #4281, .T. ) ; +#3479 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3480 = VERTEX_POINT ( 'NONE', #791 ) ; +#3481 = AXIS2_PLACEMENT_3D ( 'NONE', #12566, #13644, #11208 ) ; +#3482 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3483 = VECTOR ( 'NONE', #13282, 1000.000000000000000 ) ; +#3484 = LINE ( 'NONE', #5891, #10347 ) ; +#3485 = ADVANCED_FACE ( 'NONE', ( #12257 ), #14167, .T. ) ; +#3486 = EDGE_CURVE ( 'NONE', #3794, #11608, #1406, .T. ) ; +#3487 = EDGE_CURVE ( 'NONE', #1108, #2013, #3135, .T. ) ; +#3488 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3489 = VERTEX_POINT ( 'NONE', #9531 ) ; +#3490 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3491 = ORIENTED_EDGE ( 'NONE', *, *, #4847, .T. ) ; +#3492 = ORIENTED_EDGE ( 'NONE', *, *, #7349, .T. ) ; +#3493 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000004300, 0.8000000000000000400, 8.050000000000000700 ) ) ; +#3494 = VERTEX_POINT ( 'NONE', #13071 ) ; +#3495 = EDGE_CURVE ( 'NONE', #7752, #1011, #15666, .T. ) ; +#3496 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3497 = LINE ( 'NONE', #9514, #827 ) ; +#3498 = ORIENTED_EDGE ( 'NONE', *, *, #13512, .T. ) ; +#3499 = SURFACE_SIDE_STYLE ('',( #5169 ) ) ; +#3500 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#3501 = ORIENTED_EDGE ( 'NONE', *, *, #675, .T. ) ; +#3502 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 3.374999999999999600 ) ) ; +#3503 = FACE_OUTER_BOUND ( 'NONE', #10713, .T. ) ; +#3504 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3505 = ORIENTED_EDGE ( 'NONE', *, *, #3134, .F. ) ; +#3506 = DIRECTION ( 'NONE', ( -5.478074134663590600E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3507 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.491481338843133400E-015, -1.462686427040065000E-032 ) ) ; +#3508 = ORIENTED_EDGE ( 'NONE', *, *, #2569, .T. ) ; +#3509 = EDGE_CURVE ( 'NONE', #2838, #4176, #1980, .T. ) ; +#3510 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 6.100000000000001400 ) ) ; +#3511 = EDGE_LOOP ( 'NONE', ( #11795, #10149, #10001, #5911 ) ) ; +#3512 = LINE ( 'NONE', #5054, #464 ) ; +#3513 = VERTEX_POINT ( 'NONE', #7104 ) ; +#3514 = EDGE_LOOP ( 'NONE', ( #1104, #8198, #2258, #12952 ) ) ; +#3515 = VECTOR ( 'NONE', #14853, 1000.000000000000000 ) ; +#3516 = FACE_OUTER_BOUND ( 'NONE', #15334, .T. ) ; +#3517 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#3518 = CARTESIAN_POINT ( 'NONE', ( -9.449999999999999300, 0.4000000000000000200, 9.550000000000000700 ) ) ; +#3519 = ORIENTED_EDGE ( 'NONE', *, *, #718, .T. ) ; +#3520 = PLANE ( 'NONE', #14788 ) ; +#3521 = PLANE ( 'NONE', #3225 ) ; +#3522 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #9637 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6758, #1888, #11776 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3523 = EDGE_LOOP ( 'NONE', ( #8493, #14033, #7118, #4953 ) ) ; +#3524 = CARTESIAN_POINT ( 'NONE', ( -7.583777056305527800, 3.134883614495198100, -2.834446300443227900 ) ) ; +#3525 = ADVANCED_FACE ( 'NONE', ( #15132 ), #5765, .T. ) ; +#3526 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999920400, 0.4000000000000000200, 1.150000000000002100 ) ) ; +#3527 = AXIS2_PLACEMENT_3D ( 'NONE', #7982, #5628, #3213 ) ; +#3528 = PLANE ( 'NONE', #10216 ) ; +#3529 = ORIENTED_EDGE ( 'NONE', *, *, #2317, .F. ) ; +#3530 = LINE ( 'NONE', #639, #9642 ) ; +#3531 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.350000000000000100, 8.990000000000002000 ) ) ; +#3532 = ORIENTED_EDGE ( 'NONE', *, *, #14090, .F. ) ; +#3533 = ORIENTED_EDGE ( 'NONE', *, *, #645, .F. ) ; +#3534 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 2.825000000000001100 ) ) ; +#3535 = LINE ( 'NONE', #5840, #14775 ) ; +#3536 = LINE ( 'NONE', #15628, #120 ) ; +#3537 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999936400, 0.4000000000000000200, 2.649999999999999500 ) ) ; +#3538 = EDGE_CURVE ( 'NONE', #7050, #5687, #2936, .T. ) ; +#3539 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3540 = EDGE_CURVE ( 'NONE', #14669, #13139, #7531, .T. ) ; +#3541 = PLANE ( 'NONE', #2304 ) ; +#3542 = EDGE_CURVE ( 'NONE', #13019, #1597, #14745, .T. ) ; +#3543 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3544 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3545 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3546 = ORIENTED_EDGE ( 'NONE', *, *, #15189, .T. ) ; +#3547 = LINE ( 'NONE', #4128, #12869 ) ; +#3548 = FACE_OUTER_BOUND ( 'NONE', #4748, .T. ) ; +#3549 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#3550 = PLANE ( 'NONE', #3201 ) ; +#3551 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3552 = PLANE ( 'NONE', #12755 ) ; +#3553 = ORIENTED_EDGE ( 'NONE', *, *, #3357, .F. ) ; +#3554 = VECTOR ( 'NONE', #8186, 1000.000000000000000 ) ; +#3555 = ORIENTED_EDGE ( 'NONE', *, *, #788, .F. ) ; +#3556 = ORIENTED_EDGE ( 'NONE', *, *, #8794, .T. ) ; +#3557 = EDGE_CURVE ( 'NONE', #15302, #11620, #3893, .T. ) ; +#3558 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999905500, 0.4000000000000000200, -0.3500000000000013700 ) ) ; +#3559 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3560 = ADVANCED_FACE ( 'NONE', ( #3503 ), #4587, .T. ) ; +#3561 = LINE ( 'NONE', #2014, #2041 ) ; +#3562 = FACE_OUTER_BOUND ( 'NONE', #15142, .T. ) ; +#3563 = VERTEX_POINT ( 'NONE', #9328 ) ; +#3564 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3565 = EDGE_CURVE ( 'NONE', #10428, #1782, #1025, .T. ) ; +#3566 = AXIS2_PLACEMENT_3D ( 'NONE', #11531, #1675, #11480 ) ; +#3567 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3568 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3569 = VERTEX_POINT ( 'NONE', #4788 ) ; +#3570 = VECTOR ( 'NONE', #7116, 1000.000000000000000 ) ; +#3571 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 5.650000000000000400 ) ) ; +#3572 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3573 = ORIENTED_EDGE ( 'NONE', *, *, #2138, .F. ) ; +#3574 = ORIENTED_EDGE ( 'NONE', *, *, #13463, .T. ) ; +#3575 = ORIENTED_EDGE ( 'NONE', *, *, #13485, .F. ) ; +#3576 = PLANE ( 'NONE', #11983 ) ; +#3577 = VECTOR ( 'NONE', #6244, 1000.000000000000000 ) ; +#3578 = VECTOR ( 'NONE', #10421, 1000.000000000000000 ) ; +#3579 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 9.550000000000000700 ) ) ; +#3580 = DIRECTION ( 'NONE', ( 5.478074134663594500E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3581 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#3582 = EDGE_CURVE ( 'NONE', #600, #4620, #12825, .T. ) ; +#3583 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3584 = ORIENTED_EDGE ( 'NONE', *, *, #2666, .F. ) ; +#3585 = ORIENTED_EDGE ( 'NONE', *, *, #8656, .F. ) ; +#3586 = ORIENTED_EDGE ( 'NONE', *, *, #854, .F. ) ; +#3587 = VECTOR ( 'NONE', #13634, 1000.000000000000000 ) ; +#3588 = ORIENTED_EDGE ( 'NONE', *, *, #295, .F. ) ; +#3589 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.097720492815727700E-016 ) ) ; +#3590 = VERTEX_POINT ( 'NONE', #14466 ) ; +#3592 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3591 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3593 = EDGE_CURVE ( 'NONE', #7654, #5480, #2887, .T. ) ; +#3594 = VECTOR ( 'NONE', #10562, 1000.000000000000000 ) ; +#3595 = LINE ( 'NONE', #7592, #12526 ) ; +#3596 = AXIS2_PLACEMENT_3D ( 'NONE', #11888, #8153, #4469 ) ; +#3597 = SURFACE_SIDE_STYLE ('',( #7671 ) ) ; +#3598 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 2.050000000000001600 ) ) ; +#3599 = ORIENTED_EDGE ( 'NONE', *, *, #3813, .T. ) ; +#3600 = VERTEX_POINT ( 'NONE', #7152 ) ; +#3601 = VERTEX_POINT ( 'NONE', #7257 ) ; +#3602 = ORIENTED_EDGE ( 'NONE', *, *, #11998, .F. ) ; +#3603 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 4.149999999999999500 ) ) ; +#3604 = ADVANCED_FACE ( 'NONE', ( #2166 ), #3552, .F. ) ; +#3605 = VERTEX_POINT ( 'NONE', #13184 ) ; +#3606 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#3607 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3608 = EDGE_CURVE ( 'NONE', #3666, #14626, #6384, .T. ) ; +#3609 = CIRCLE ( 'NONE', #15657, 0.2749999999999991900 ) ; +#3610 = LINE ( 'NONE', #5847, #4392 ) ; +#3611 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 6.550000000000001600 ) ) ; +#3612 = LINE ( 'NONE', #6102, #12546 ) ; +#3613 = VERTEX_POINT ( 'NONE', #11952 ) ; +#3614 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.0000000000000000000, 2.949999999999999700 ) ) ; +#3615 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3616 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3617 = ORIENTED_EDGE ( 'NONE', *, *, #13245, .F. ) ; +#3618 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2483 ) ) ; +#3619 = VERTEX_POINT ( 'NONE', #9692 ) ; +#3620 = ORIENTED_EDGE ( 'NONE', *, *, #5862, .F. ) ; +#3621 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #8327 ) ) ; +#3622 = VERTEX_POINT ( 'NONE', #13236 ) ; +#3623 = VECTOR ( 'NONE', #7731, 1000.000000000000000 ) ; +#3624 = VECTOR ( 'NONE', #1363, 1000.000000000000000 ) ; +#3625 = FILL_AREA_STYLE_COLOUR ( '', #6161 ) ; +#3626 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3627 = CYLINDRICAL_SURFACE ( 'NONE', #3973, 0.1000000000000002600 ) ; +#3628 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.3999999999999999700, 9.550000000000000700 ) ) ; +#3629 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3630 = EDGE_LOOP ( 'NONE', ( #6733, #7883, #10574, #11956 ) ) ; +#3631 = EDGE_CURVE ( 'NONE', #15430, #15205, #262, .T. ) ; +#3632 = ORIENTED_EDGE ( 'NONE', *, *, #74, .F. ) ; +#3633 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3634 = ORIENTED_EDGE ( 'NONE', *, *, #367, .T. ) ; +#3635 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3636 = CARTESIAN_POINT ( 'NONE', ( 7.565624326090536500, 3.349999999999997900, -2.859230332643795300 ) ) ; +#3637 = EDGE_CURVE ( 'NONE', #5618, #14959, #5619, .T. ) ; +#3638 = LINE ( 'NONE', #11197, #8052 ) ; +#3639 = LINE ( 'NONE', #5671, #1356 ) ; +#3640 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3641 = LINE ( 'NONE', #12490, #3663 ) ; +#3642 = LINE ( 'NONE', #10807, #12018 ) ; +#3643 = LINE ( 'NONE', #5048, #13324 ) ; +#3644 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3645 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.0000000000000000000, 2.949999999999999300 ) ) ; +#3646 = FACE_OUTER_BOUND ( 'NONE', #1958, .T. ) ; +#3647 = ADVANCED_FACE ( 'NONE', ( #12067 ), #13277, .T. ) ; +#3648 = EDGE_LOOP ( 'NONE', ( #657, #14192, #8092, #8412 ) ) ; +#3650 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3649 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3651 = ORIENTED_EDGE ( 'NONE', *, *, #6783, .F. ) ; +#3652 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, -3.350000000000000500 ) ) ; +#3653 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#3654 = ORIENTED_EDGE ( 'NONE', *, *, #13995, .T. ) ; +#3655 = PLANE ( 'NONE', #5752 ) ; +#3656 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 0.1000000000000002600 ) ) ; +#3657 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude4[1]', #3461 ) ; +#3658 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7891 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1266, #6, #3731 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3659 = LINE ( 'NONE', #2604, #3587 ) ; +#3660 = VECTOR ( 'NONE', #9026, 1000.000000000000000 ) ; +#3661 = VECTOR ( 'NONE', #10009, 1000.000000000000000 ) ; +#3662 = EDGE_CURVE ( 'NONE', #15077, #1094, #10947, .T. ) ; +#3663 = VECTOR ( 'NONE', #5392, 1000.000000000000000 ) ; +#3664 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3665 = LINE ( 'NONE', #10780, #6164 ) ; +#3666 = VERTEX_POINT ( 'NONE', #7365 ) ; +#3667 = ORIENTED_EDGE ( 'NONE', *, *, #1904, .T. ) ; +#3668 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000009600, 0.8000000000000000400, 6.550000000000000700 ) ) ; +#3669 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3670 = ORIENTED_EDGE ( 'NONE', *, *, #4579, .T. ) ; +#3671 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, 2.050000000000001600 ) ) ; +#3672 = ORIENTED_EDGE ( 'NONE', *, *, #6979, .T. ) ; +#3673 = AXIS2_PLACEMENT_3D ( 'NONE', #5724, #9345, #4700 ) ; +#3674 = LINE ( 'NONE', #7742, #9775 ) ; +#3675 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3676 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3677 = LINE ( 'NONE', #5945, #7499 ) ; +#3678 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, -0.9499999999999990700 ) ) ; +#3679 = LINE ( 'NONE', #4078, #2136 ) ; +#3680 = ORIENTED_EDGE ( 'NONE', *, *, #7797, .T. ) ; +#3681 = ORIENTED_EDGE ( 'NONE', *, *, #11199, .T. ) ; +#3682 = ORIENTED_EDGE ( 'NONE', *, *, #15596, .T. ) ; +#3683 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3684 = EDGE_CURVE ( 'NONE', #13875, #7816, #6566, .T. ) ; +#3685 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3686 = PLANE ( 'NONE', #5523 ) ; +#3687 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 2.649999999999999500 ) ) ; +#3688 = LINE ( 'NONE', #9797, #9413 ) ; +#3689 = ADVANCED_FACE ( 'NONE', ( #6368 ), #2580, .T. ) ; +#3690 = VECTOR ( 'NONE', #4717, 1000.000000000000000 ) ; +#3691 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#3692 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 8.649999999999993200 ) ) ; +#3693 = EDGE_CURVE ( 'NONE', #11122, #2862, #3307, .T. ) ; +#3694 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.0000000000000000000, 2.950000000000000200 ) ) ; +#3695 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3696 = LINE ( 'NONE', #353, #438 ) ; +#3697 = LINE ( 'NONE', #4922, #9792 ) ; +#3698 = VERTEX_POINT ( 'NONE', #14782 ) ; +#3699 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 1.600000000000000800 ) ) ; +#3700 = ORIENTED_EDGE ( 'NONE', *, *, #9028, .T. ) ; +#3701 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3702 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 1.637941840314110200, 4.750000000000000000 ) ) ; +#3703 = ADVANCED_FACE ( 'NONE', ( #6191 ), #2528, .T. ) ; +#3704 = VERTEX_POINT ( 'NONE', #11018 ) ; +#3705 = VECTOR ( 'NONE', #11582, 1000.000000000000000 ) ; +#3706 = ORIENTED_EDGE ( 'NONE', *, *, #11132, .F. ) ; +#3707 = VERTEX_POINT ( 'NONE', #7459 ) ; +#3708 = EDGE_CURVE ( 'NONE', #9600, #13091, #13400, .T. ) ; +#3709 = EDGE_CURVE ( 'NONE', #4267, #3366, #633, .T. ) ; +#3710 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, -3.350000000000000500 ) ) ; +#3711 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3712 = VERTEX_POINT ( 'NONE', #11070 ) ; +#3713 = FACE_OUTER_BOUND ( 'NONE', #14956, .T. ) ; +#3714 = FACE_OUTER_BOUND ( 'NONE', #6123, .T. ) ; +#3715 = ORIENTED_EDGE ( 'NONE', *, *, #7984, .T. ) ; +#3716 = EDGE_LOOP ( 'NONE', ( #667, #15154, #2005, #7180 ) ) ; +#3717 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3718 = ORIENTED_EDGE ( 'NONE', *, *, #14810, .T. ) ; +#3719 = STYLED_ITEM ( 'NONE', ( #7450 ), #7003 ) ; +#3720 = PLANE ( 'NONE', #615 ) ; +#3721 = ORIENTED_EDGE ( 'NONE', *, *, #10410, .F. ) ; +#3722 = ADVANCED_FACE ( 'NONE', ( #7515 ), #11493, .F. ) ; +#3723 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3724 = VERTEX_POINT ( 'NONE', #13561 ) ; +#3725 = STYLED_ITEM ( 'NONE', ( #2544 ), #9810 ) ; +#3726 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3727 = FACE_OUTER_BOUND ( 'NONE', #14835, .T. ) ; +#3728 = LINE ( 'NONE', #15112, #2375 ) ; +#3729 = CARTESIAN_POINT ( 'NONE', ( -8.549999999999998900, 0.8000000000000000400, 9.550000000000000700 ) ) ; +#3730 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, -1.850000000000001000 ) ) ; +#3731 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3732 = ADVANCED_FACE ( 'NONE', ( #5803 ), #5051, .T. ) ; +#3733 = EDGE_LOOP ( 'NONE', ( #6857, #2234, #839, #13953, #14007, #9493 ) ) ; +#3734 = EDGE_CURVE ( 'NONE', #11371, #3489, #13788, .T. ) ; +#3735 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3736 = VERTEX_POINT ( 'NONE', #7514 ) ; +#3737 = LINE ( 'NONE', #8868, #7964 ) ; +#3738 = ORIENTED_EDGE ( 'NONE', *, *, #6225, .F. ) ; +#3739 = PLANE ( 'NONE', #11254 ) ; +#3740 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3741 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.4000000000000000200, 4.149999999999999500 ) ) ; +#3742 = VECTOR ( 'NONE', #11872, 1000.000000000000000 ) ; +#3743 = FACE_OUTER_BOUND ( 'NONE', #3901, .T. ) ; +#3744 = AXIS2_PLACEMENT_3D ( 'NONE', #215, #13358, #9852 ) ; +#3745 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3746 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3747 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000500, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#3748 = AXIS2_PLACEMENT_3D ( 'NONE', #14734, #103, #9843 ) ; +#3749 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3750 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3751 = FACE_BOUND ( 'NONE', #2698, .T. ) ; +#3752 = EDGE_LOOP ( 'NONE', ( #10208, #3194, #12892, #7058 ) ) ; +#3753 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3754 = AXIS2_PLACEMENT_3D ( 'NONE', #1610, #13974, #12730 ) ; +#3755 = VECTOR ( 'NONE', #12103, 1000.000000000000000 ) ; +#3756 = LINE ( 'NONE', #9455, #8353 ) ; +#3757 = CARTESIAN_POINT ( 'NONE', ( -7.849999999999999600, 3.129230332643793600, 9.067304606097597000 ) ) ; +#3758 = EDGE_CURVE ( 'NONE', #15732, #359, #7337, .T. ) ; +#3759 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999875300, 0.4000000000000000200, -2.449999999999998800 ) ) ; +#3760 = VERTEX_POINT ( 'NONE', #12312 ) ; +#3761 = EDGE_CURVE ( 'NONE', #8200, #5618, #1009, .T. ) ; +#3762 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3763 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#3764 = ORIENTED_EDGE ( 'NONE', *, *, #3631, .T. ) ; +#3765 = ORIENTED_EDGE ( 'NONE', *, *, #2334, .F. ) ; +#3766 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3473 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7034, #12897, #879 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3767 = ADVANCED_FACE ( 'NONE', ( #14733 ), #8693, .T. ) ; +#3768 = FACE_OUTER_BOUND ( 'NONE', #7026, .T. ) ; +#3769 = VECTOR ( 'NONE', #1896, 1000.000000000000000 ) ; +#3770 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3771 = PLANE ( 'NONE', #3276 ) ; +#3772 = ORIENTED_EDGE ( 'NONE', *, *, #6459, .T. ) ; +#3774 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999937500, 0.4000000000000000200, 2.649999999999999500 ) ) ; +#3773 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3775 = EDGE_CURVE ( 'NONE', #15564, #7237, #3116, .T. ) ; +#3776 = EDGE_LOOP ( 'NONE', ( #14282, #15271, #1358, #3988 ) ) ; +#3777 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, -0.9499999999999990700 ) ) ; +#3778 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, -15.05858178898088800, -8.800000000000000700 ) ) ; +#3779 = VECTOR ( 'NONE', #15566, 1000.000000000000000 ) ; +#3780 = VERTEX_POINT ( 'NONE', #2697 ) ; +#3781 = ORIENTED_EDGE ( 'NONE', *, *, #1367, .F. ) ; +#3782 = ADVANCED_FACE ( 'NONE', ( #6958 ), #8738, .F. ) ; +#3783 = VECTOR ( 'NONE', #9551, 1000.000000000000000 ) ; +#3784 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3785 = EDGE_CURVE ( 'NONE', #4435, #13688, #10559, .T. ) ; +#3786 = ORIENTED_EDGE ( 'NONE', *, *, #10676, .T. ) ; +#3787 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 9.550000000000000700 ) ) ; +#3788 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 4.325000000000001100 ) ) ; +#3790 = ORIENTED_EDGE ( 'NONE', *, *, #5399, .F. ) ; +#3789 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3791 = ORIENTED_EDGE ( 'NONE', *, *, #11453, .T. ) ; +#3792 = ORIENTED_EDGE ( 'NONE', *, *, #1855, .T. ) ; +#3793 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3794 = VERTEX_POINT ( 'NONE', #5105 ) ; +#3795 = ORIENTED_EDGE ( 'NONE', *, *, #5321, .F. ) ; +#3796 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#3797 = ORIENTED_EDGE ( 'NONE', *, *, #3540, .F. ) ; +#3798 = ADVANCED_FACE ( 'NONE', ( #10172 ), #13611, .T. ) ; +#3799 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, -0.9499999999999990700 ) ) ; +#3800 = VECTOR ( 'NONE', #2061, 1000.000000000000000 ) ; +#3801 = LINE ( 'NONE', #8561, #10847 ) ; +#3802 = EDGE_CURVE ( 'NONE', #15221, #15580, #4075, .T. ) ; +#3803 = AXIS2_PLACEMENT_3D ( 'NONE', #2150, #14258, #6989 ) ; +#3804 = LINE ( 'NONE', #15726, #13311 ) ; +#3805 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999920400, 0.4000000000000000200, 1.149999999999999900 ) ) ; +#3806 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3807 = ORIENTED_EDGE ( 'NONE', *, *, #9667, .T. ) ; +#3808 = VERTEX_POINT ( 'NONE', #14947 ) ; +#3809 = ORIENTED_EDGE ( 'NONE', *, *, #7141, .F. ) ; +#3810 = ADVANCED_FACE ( 'NONE', ( #8665 ), #14353, .F. ) ; +#3811 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3812 = ORIENTED_EDGE ( 'NONE', *, *, #4372, .F. ) ; +#3813 = EDGE_CURVE ( 'NONE', #5653, #5999, #5409, .T. ) ; +#3814 = ORIENTED_EDGE ( 'NONE', *, *, #1319, .T. ) ; +#3815 = DIRECTION ( 'NONE', ( 5.478074134663594500E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3816 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3817 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3818 = VECTOR ( 'NONE', #7224, 1000.000000000000000 ) ; +#3819 = LINE ( 'NONE', #13933, #3048 ) ; +#3820 = LINE ( 'NONE', #1876, #12178 ) ; +#3821 = ORIENTED_EDGE ( 'NONE', *, *, #9806, .F. ) ; +#3822 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.3999999999999999700, 2.950000000000000200 ) ) ; +#3823 = ORIENTED_EDGE ( 'NONE', *, *, #11291, .T. ) ; +#3824 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000014900, 0.4000000000000000200, 5.050000000000000700 ) ) ; +#3825 = FILL_AREA_STYLE ('',( #12478 ) ) ; +#3826 = EDGE_CURVE ( 'NONE', #643, #9753, #10351, .T. ) ; +#3827 = CARTESIAN_POINT ( 'NONE', ( -7.647980000000000400, 3.049999999999999800, 9.082928932188135500 ) ) ; +#3828 = ORIENTED_EDGE ( 'NONE', *, *, #10997, .F. ) ; +#3829 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 8.050000000000000700 ) ) ; +#3830 = ORIENTED_EDGE ( 'NONE', *, *, #11190, .T. ) ; +#3831 = CARTESIAN_POINT ( 'NONE', ( 8.549999999999998900, 0.4000000000000000200, 8.649999999999993200 ) ) ; +#3832 = VECTOR ( 'NONE', #436, 1000.000000000000000 ) ; +#3833 = VECTOR ( 'NONE', #9529, 1000.000000000000000 ) ; +#3834 = LINE ( 'NONE', #2566, #12006 ) ; +#3835 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#3836 = AXIS2_PLACEMENT_3D ( 'NONE', #7589, #6316, #4002 ) ; +#3837 = ORIENTED_EDGE ( 'NONE', *, *, #4824, .T. ) ; +#3838 = ORIENTED_EDGE ( 'NONE', *, *, #13802, .T. ) ; +#3839 = AXIS2_PLACEMENT_3D ( 'NONE', #15219, #5557, #11395 ) ; +#3840 = ORIENTED_EDGE ( 'NONE', *, *, #10849, .T. ) ; +#3841 = DIRECTION ( 'NONE', ( -5.478074134663594500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3842 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#3843 = VECTOR ( 'NONE', #7386, 1000.000000000000000 ) ; +#3844 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999890200, 0.4000000000000000200, -1.849999999999998800 ) ) ; +#3845 = VECTOR ( 'NONE', #13759, 1000.000000000000000 ) ; +#3846 = ORIENTED_EDGE ( 'NONE', *, *, #4057, .F. ) ; +#3847 = LINE ( 'NONE', #5489, #6728 ) ; +#3848 = EDGE_CURVE ( 'NONE', #6088, #7222, #9791, .T. ) ; +#3849 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3850 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3851 = ADVANCED_FACE ( 'NONE', ( #9964 ), #4088, .F. ) ; +#3852 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 8.050000000000000700 ) ) ; +#3853 = ORIENTED_EDGE ( 'NONE', *, *, #8315, .F. ) ; +#3854 = ORIENTED_EDGE ( 'NONE', *, *, #6865, .F. ) ; +#3855 = EDGE_CURVE ( 'NONE', #8983, #5944, #12423, .T. ) ; +#3856 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, -15.05858178898088800, -8.800000000000000700 ) ) ; +#3857 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3858 = ORIENTED_EDGE ( 'NONE', *, *, #15394, .T. ) ; +#3859 = EDGE_CURVE ( 'NONE', #11329, #11342, #3696, .T. ) ; +#3860 = EDGE_LOOP ( 'NONE', ( #11123, #6100, #2246, #1697 ) ) ; +#3861 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3862 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude5[8]', #5774 ) ; +#3863 = VECTOR ( 'NONE', #12429, 1000.000000000000000 ) ; +#3864 = FACE_OUTER_BOUND ( 'NONE', #7821, .T. ) ; +#3865 = AXIS2_PLACEMENT_3D ( 'NONE', #1227, #7385, #13253 ) ; +#3866 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, -2.449999999999998800 ) ) ; +#3867 = ADVANCED_FACE ( 'NONE', ( #13010 ), #5217, .F. ) ; +#3868 = VECTOR ( 'NONE', #661, 1000.000000000000000 ) ; +#3869 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3870 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3871 = CARTESIAN_POINT ( 'NONE', ( 7.611952621458756100, 3.102198665876327400, -2.869222690360980500 ) ) ; +#3872 = EDGE_LOOP ( 'NONE', ( #3940, #14420, #1744, #3586, #7092, #7156 ) ) ; +#3873 = EDGE_CURVE ( 'NONE', #2405, #1683, #8275, .T. ) ; +#3874 = VECTOR ( 'NONE', #4843, 1000.000000000000000 ) ; +#3875 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3876 = PRESENTATION_STYLE_ASSIGNMENT (( #8341 ) ) ; +#3877 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.4000000000000000200, 1.850000000000000100 ) ) ; +#3878 = ADVANCED_FACE ( 'NONE', ( #4632 ), #6553, .T. ) ; +#3879 = VECTOR ( 'NONE', #13499, 1000.000000000000000 ) ; +#3881 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, -0.1749999999999989300 ) ) ; +#3880 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3882 = EDGE_CURVE ( 'NONE', #525, #362, #6554, .T. ) ; +#3883 = ORIENTED_EDGE ( 'NONE', *, *, #3582, .T. ) ; +#3884 = AXIS2_PLACEMENT_3D ( 'NONE', #13336, #3607, #6237 ) ; +#3885 = ORIENTED_EDGE ( 'NONE', *, *, #5137, .F. ) ; +#3886 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 2.649999999999999500 ) ) ; +#3887 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3888 = ORIENTED_EDGE ( 'NONE', *, *, #3274, .F. ) ; +#3889 = LINE ( 'NONE', #11320, #13202 ) ; +#3890 = EDGE_LOOP ( 'NONE', ( #4901, #13767, #607, #12659, #4938, #6125 ) ) ; +#3891 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, -0.3500000000000004800 ) ) ; +#3892 = ORIENTED_EDGE ( 'NONE', *, *, #8632, .T. ) ; +#3893 = LINE ( 'NONE', #10754, #13599 ) ; +#3894 = FACE_OUTER_BOUND ( 'NONE', #4234, .T. ) ; +#3895 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000030200, 0.8000000000000000400, -0.1749999999999998200 ) ) ; +#3896 = EDGE_CURVE ( 'NONE', #6612, #2288, #11482, .T. ) ; +#3897 = PLANE ( 'NONE', #1822 ) ; +#3898 = ORIENTED_EDGE ( 'NONE', *, *, #15269, .F. ) ; +#3899 = ORIENTED_EDGE ( 'NONE', *, *, #14542, .T. ) ; +#3900 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999920400, 0.4000000000000000200, 1.149999999999999900 ) ) ; +#3901 = EDGE_LOOP ( 'NONE', ( #9141, #11731, #5932, #9321, #15306, #15396 ) ) ; +#3902 = EDGE_CURVE ( 'NONE', #15234, #10694, #4459, .T. ) ; +#3903 = FACE_OUTER_BOUND ( 'NONE', #4566, .T. ) ; +#3904 = ORIENTED_EDGE ( 'NONE', *, *, #14628, .T. ) ; +#3905 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3906 = ORIENTED_EDGE ( 'NONE', *, *, #3001, .T. ) ; +#3907 = LINE ( 'NONE', #2493, #7167 ) ; +#3908 = LINE ( 'NONE', #444, #14567 ) ; +#3909 = EDGE_LOOP ( 'NONE', ( #1546 ) ) ; +#3910 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.4000000000000000200, 1.850000000000000100 ) ) ; +#3911 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#3912 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 0.5500000000000010400 ) ) ; +#3913 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3914 = EDGE_CURVE ( 'NONE', #13407, #1604, #5602, .T. ) ; +#3915 = EDGE_CURVE ( 'NONE', #7752, #3563, #3295, .T. ) ; +#3916 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 7.150000000000000400 ) ) ; +#3917 = CARTESIAN_POINT ( 'NONE', ( 7.580976310729377900, 3.317668071082942000, -2.936595997628985300 ) ) ; +#3918 = ORIENTED_EDGE ( 'NONE', *, *, #5089, .F. ) ; +#3919 = VECTOR ( 'NONE', #6894, 1000.000000000000000 ) ; +#3920 = ORIENTED_EDGE ( 'NONE', *, *, #13386, .T. ) ; +#3921 = ORIENTED_EDGE ( 'NONE', *, *, #184, .T. ) ; +#3922 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 9.099999999999999600 ) ) ; +#3923 = VECTOR ( 'NONE', #6515, 1000.000000000000000 ) ; +#3924 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, -1.125000000000000700 ) ) ; +#3925 = ADVANCED_FACE ( 'NONE', ( #13966 ), #13703, .F. ) ; +#3926 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3927 = SURFACE_SIDE_STYLE ('',( #3067 ) ) ; +#3928 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.149999999999999900, 8.990000000000002000 ) ) ; +#3929 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6098 ) ) ; +#3931 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000029100, 0.4000000000000000200, -0.3500000000000011400 ) ) ; +#3930 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3932 = VECTOR ( 'NONE', #2390, 1000.000000000000000 ) ; +#3933 = ORIENTED_EDGE ( 'NONE', *, *, #6615, .F. ) ; +#3934 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#3935 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.491481338843133700E-015, 0.0000000000000000000 ) ) ; +#3936 = VECTOR ( 'NONE', #7353, 1000.000000000000000 ) ; +#3937 = LINE ( 'NONE', #7271, #8909 ) ; +#3938 = ADVANCED_FACE ( 'NONE', ( #2911 ), #11364, .F. ) ; +#3939 = EDGE_CURVE ( 'NONE', #2532, #11908, #13387, .T. ) ; +#3940 = ORIENTED_EDGE ( 'NONE', *, *, #2472, .F. ) ; +#3941 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 8.825000000000001100 ) ) ; +#3942 = EDGE_CURVE ( 'NONE', #8287, #1241, #1763, .T. ) ; +#3943 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3944 = ORIENTED_EDGE ( 'NONE', *, *, #1853, .T. ) ; +#3945 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3946 = VECTOR ( 'NONE', #6804, 1000.000000000000000 ) ; +#3947 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3948 = ORIENTED_EDGE ( 'NONE', *, *, #1295, .T. ) ; +#3949 = AXIS2_PLACEMENT_3D ( 'NONE', #4102, #10214, #417 ) ; +#3950 = VECTOR ( 'NONE', #12955, 1000.000000000000000 ) ; +#3951 = VECTOR ( 'NONE', #10412, 1000.000000000000000 ) ; +#3952 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3953 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, -1.850000000000000500 ) ) ; +#3954 = ADVANCED_FACE ( 'NONE', ( #12052 ), #7296, .T. ) ; +#3955 = CARTESIAN_POINT ( 'NONE', ( -7.565624326090537400, 3.350000000000000100, 9.069230332643798000 ) ) ; +#3956 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3957 = AXIS2_PLACEMENT_3D ( 'NONE', #10976, #3676, #4739 ) ; +#3958 = ORIENTED_EDGE ( 'NONE', *, *, #6851, .T. ) ; +#3959 = VECTOR ( 'NONE', #9543, 1000.000000000000000 ) ; +#3960 = ORIENTED_EDGE ( 'NONE', *, *, #8225, .T. ) ; +#3961 = EDGE_LOOP ( 'NONE', ( #10452, #1138, #4063, #8299, #6025, #12710 ) ) ; +#3962 = EDGE_CURVE ( 'NONE', #7473, #7363, #15292, .T. ) ; +#3963 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12368, 'distance_accuracy_value', 'NONE'); +#3964 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3965 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3966 = VECTOR ( 'NONE', #13349, 1000.000000000000000 ) ; +#3967 = VECTOR ( 'NONE', #12291, 1000.000000000000000 ) ; +#3968 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3969 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3970 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3971 = EDGE_LOOP ( 'NONE', ( #4595, #13594, #14552, #11423 ) ) ; +#3972 = ORIENTED_EDGE ( 'NONE', *, *, #5862, .T. ) ; +#3973 = AXIS2_PLACEMENT_3D ( 'NONE', #6749, #8081, #13914 ) ; +#3974 = EDGE_LOOP ( 'NONE', ( #13968, #10811, #790, #1599, #15582, #2248 ) ) ; +#3975 = VECTOR ( 'NONE', #1816, 1000.000000000000000 ) ; +#3976 = VERTEX_POINT ( 'NONE', #2732 ) ; +#3977 = ORIENTED_EDGE ( 'NONE', *, *, #9362, .F. ) ; +#3978 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3979 = VECTOR ( 'NONE', #10504, 1000.000000000000000 ) ; +#3980 = LINE ( 'NONE', #2725, #731 ) ; +#3982 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.049999999999999800, -2.780000000000000200 ) ) ; +#3981 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3983 = ORIENTED_EDGE ( 'NONE', *, *, #6227, .T. ) ; +#3984 = EDGE_CURVE ( 'NONE', #13526, #12573, #2517, .T. ) ; +#3985 = ORIENTED_EDGE ( 'NONE', *, *, #7652, .T. ) ; +#3986 = ORIENTED_EDGE ( 'NONE', *, *, #12515, .T. ) ; +#3987 = ORIENTED_EDGE ( 'NONE', *, *, #3081, .T. ) ; +#3988 = ORIENTED_EDGE ( 'NONE', *, *, #1622, .F. ) ; +#3989 = EDGE_CURVE ( 'NONE', #4475, #11329, #1571, .T. ) ; +#3990 = VECTOR ( 'NONE', #666, 1000.000000000000000 ) ; +#3991 = STYLED_ITEM ( 'NONE', ( #7290 ), #4545 ) ; +#3992 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3993 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3994 = VECTOR ( 'NONE', #3685, 1000.000000000000000 ) ; +#3995 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.149999999999999500, -2.780000000000001100 ) ) ; +#3996 = VERTEX_POINT ( 'NONE', #388 ) ; +#3997 = DIRECTION ( 'NONE', ( 5.478074134663590600E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3998 = ADVANCED_FACE ( 'NONE', ( #11850 ), #2837, .T. ) ; +#3999 = EDGE_LOOP ( 'NONE', ( #6401, #1892, #7319, #13891 ) ) ; +#4000 = ORIENTED_EDGE ( 'NONE', *, *, #11056, .T. ) ; +#4001 = PLANE ( 'NONE', #2255 ) ; +#4002 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4003 = ORIENTED_EDGE ( 'NONE', *, *, #13485, .T. ) ; +#4004 = EDGE_CURVE ( 'NONE', #12520, #2678, #10727, .T. ) ; +#4005 = ORIENTED_EDGE ( 'NONE', *, *, #8716, .T. ) ; +#4006 = VECTOR ( 'NONE', #11497, 1000.000000000000000 ) ; +#4007 = EDGE_CURVE ( 'NONE', #10465, #5154, #9229, .T. ) ; +#4008 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#4009 = LINE ( 'NONE', #5214, #13536 ) ; +#4010 = VECTOR ( 'NONE', #8453, 1000.000000000000000 ) ; +#4011 = LINE ( 'NONE', #10251, #767 ) ; +#4012 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4013 = LINE ( 'NONE', #6067, #964 ) ; +#4014 = ORIENTED_EDGE ( 'NONE', *, *, #2664, .T. ) ; +#4015 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#4016 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 5.650000000000000400 ) ) ; +#4017 = ADVANCED_FACE ( 'NONE', ( #8850 ), #6333, .T. ) ; +#4019 = ORIENTED_EDGE ( 'NONE', *, *, #6689, .F. ) ; +#4018 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, -15.05858178898088800, -8.800000000000000700 ) ) ; +#4020 = AXIS2_PLACEMENT_3D ( 'NONE', #12063, #2215, #14524 ) ; +#4021 = ORIENTED_EDGE ( 'NONE', *, *, #155, .F. ) ; +#4022 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4023 = VECTOR ( 'NONE', #9250, 1000.000000000000000 ) ; +#4024 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4025 = FACE_OUTER_BOUND ( 'NONE', #5055, .T. ) ; +#4026 = VECTOR ( 'NONE', #6996, 1000.000000000000000 ) ; +#4027 = FACE_OUTER_BOUND ( 'NONE', #6633, .T. ) ; +#4028 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#4029 = EDGE_LOOP ( 'NONE', ( #5096, #9872, #14879, #6424 ) ) ; +#4030 = EDGE_CURVE ( 'NONE', #2520, #12747, #5401, .T. ) ; +#4031 = ADVANCED_FACE ( 'NONE', ( #15102 ), #7610, .F. ) ; +#4032 = FILL_AREA_STYLE ('',( #7735 ) ) ; +#4033 = VERTEX_POINT ( 'NONE', #7562 ) ; +#4035 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000004300, 0.4000000000000000200, 8.049999999999995400 ) ) ; +#4034 = CARTESIAN_POINT ( 'NONE', ( -7.850000000000001400, 3.050000000000000700, 9.082928932188135500 ) ) ; +#4036 = ORIENTED_EDGE ( 'NONE', *, *, #14450, .T. ) ; +#4037 = LINE ( 'NONE', #11109, #15632 ) ; +#4038 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999889500, 0.4000000000000000200, -0.9499999999999970700 ) ) ; +#4039 = PLANE ( 'NONE', #13584 ) ; +#4040 = VECTOR ( 'NONE', #6627, 1000.000000000000000 ) ; +#4041 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#4042 = EDGE_LOOP ( 'NONE', ( #9878, #9177, #1843, #4202 ) ) ; +#4043 = AXIS2_PLACEMENT_3D ( 'NONE', #7434, #13308, #9915 ) ; +#4044 = FACE_OUTER_BOUND ( 'NONE', #6120, .T. ) ; +#4045 = PRESENTATION_STYLE_ASSIGNMENT (( #5680 ) ) ; +#4046 = AXIS2_PLACEMENT_3D ( 'NONE', #9004, #2751, #11284 ) ; +#4047 = VERTEX_POINT ( 'NONE', #12473 ) ; +#4048 = ORIENTED_EDGE ( 'NONE', *, *, #6567, .F. ) ; +#4049 = ORIENTED_EDGE ( 'NONE', *, *, #1319, .F. ) ; +#4050 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4051 = ORIENTED_EDGE ( 'NONE', *, *, #14383, .T. ) ; +#4052 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.097720492815727200E-016 ) ) ; +#4053 = AXIS2_PLACEMENT_3D ( 'NONE', #11736, #12947, #3126 ) ; +#4054 = VECTOR ( 'NONE', #211, 1000.000000000000000 ) ; +#4055 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.4000000000000000200, 2.950000000000000200 ) ) ; +#4056 = LINE ( 'NONE', #12088, #13381 ) ; +#4057 = EDGE_CURVE ( 'NONE', #4435, #7654, #9029, .T. ) ; +#4058 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999906200, 0.4000000000000000200, -0.3499999999999993100 ) ) ; +#4059 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4060 = EDGE_CURVE ( 'NONE', #647, #7251, #11113, .T. ) ; +#4061 = VECTOR ( 'NONE', #12738, 1000.000000000000000 ) ; +#4062 = PLANE ( 'NONE', #10461 ) ; +#4063 = ORIENTED_EDGE ( 'NONE', *, *, #3333, .T. ) ; +#4064 = ORIENTED_EDGE ( 'NONE', *, *, #3333, .F. ) ; +#4065 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999921500, 0.0000000000000000000, 2.050000000000001600 ) ) ; +#4066 = ORIENTED_EDGE ( 'NONE', *, *, #4149, .F. ) ; +#4067 = AXIS2_PLACEMENT_3D ( 'NONE', #9830, #8723, #13436 ) ; +#4068 = CARTESIAN_POINT ( 'NONE', ( 7.706595997628984800, 3.317668071082943800, 9.020976310729377400 ) ) ; +#4069 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4070 = LINE ( 'NONE', #13710, #7148 ) ; +#4071 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 7.150000000000000400 ) ) ; +#4072 = PLANE ( 'NONE', #10899 ) ; +#4073 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#4074 = FILL_AREA_STYLE_COLOUR ( '', #485 ) ; +#4075 = LINE ( 'NONE', #2798, #15653 ) ; +#4076 = LINE ( 'NONE', #1074, #10560 ) ; +#4077 = PLANE ( 'NONE', #2211 ) ; +#4078 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 3.550000000000001200 ) ) ; +#4079 = ORIENTED_EDGE ( 'NONE', *, *, #10228, .T. ) ; +#4080 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4081 = ORIENTED_EDGE ( 'NONE', *, *, #10190, .T. ) ; +#4082 = EDGE_CURVE ( 'NONE', #8380, #14561, #3679, .T. ) ; +#4083 = ADVANCED_FACE ( 'NONE', ( #8657, #5013 ), #292, .F. ) ; +#4084 = SURFACE_STYLE_USAGE ( .BOTH. , #10096 ) ; +#4085 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4086 = EDGE_LOOP ( 'NONE', ( #12633, #8269, #6510, #10859 ) ) ; +#4087 = LINE ( 'NONE', #829, #3318 ) ; +#4088 = PLANE ( 'NONE', #13361 ) ; +#4089 = VERTEX_POINT ( 'NONE', #8781 ) ; +#4090 = VERTEX_POINT ( 'NONE', #340 ) ; +#4092 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4091 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4093 = EDGE_CURVE ( 'NONE', #9338, #8801, #7707, .T. ) ; +#4094 = ORIENTED_EDGE ( 'NONE', *, *, #5209, .F. ) ; +#4095 = LINE ( 'NONE', #7425, #10771 ) ; +#4096 = LINE ( 'NONE', #3924, #4301 ) ; +#4097 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #217 ), #14397 ) ; +#4098 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 3.550000000000001200 ) ) ; +#4099 = ORIENTED_EDGE ( 'NONE', *, *, #10637, .F. ) ; +#4100 = ADVANCED_FACE ( 'NONE', ( #428 ), #1564, .F. ) ; +#4101 = EDGE_LOOP ( 'NONE', ( #1715, #3898, #3088, #3023, #189, #1644 ) ) ; +#4102 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, -15.05858178898088800, -8.800000000000000700 ) ) ; +#4103 = VERTEX_POINT ( 'NONE', #7723 ) ; +#4104 = ADVANCED_FACE ( 'NONE', ( #12613 ), #2686, .T. ) ; +#4105 = VECTOR ( 'NONE', #56, 1000.000000000000000 ) ; +#4106 = VERTEX_POINT ( 'NONE', #13772 ) ; +#4107 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4108 = EDGE_CURVE ( 'NONE', #14396, #11963, #12994, .T. ) ; +#4109 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#4110 = AXIS2_PLACEMENT_3D ( 'NONE', #4425, #6774, #13943 ) ; +#4111 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 8.650000000000000400 ) ) ; +#4112 = LINE ( 'NONE', #2998, #105 ) ; +#4113 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.104919411450195700E-016 ) ) ; +#4114 = ORIENTED_EDGE ( 'NONE', *, *, #11335, .F. ) ; +#4115 = EDGE_CURVE ( 'NONE', #8009, #2, #4122, .T. ) ; +#4116 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.097720492815726700E-016 ) ) ; +#4117 = AXIS2_PLACEMENT_3D ( 'NONE', #6697, #10344, #8080 ) ; +#4118 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.147979999999999600, -2.780000000000001100 ) ) ; +#4119 = EDGE_LOOP ( 'NONE', ( #13422, #13684, #7851, #1310 ) ) ; +#4120 = ORIENTED_EDGE ( 'NONE', *, *, #5699, .T. ) ; +#4121 = FACE_OUTER_BOUND ( 'NONE', #1863, .T. ) ; +#4122 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #8942, #10198, #12414, #5152, #6387, #14884, #10409, #15145, #5363, #9212, #5467, #10301, #1887 ), + .UNSPECIFIED., .F., .F., + ( 4, 3, 3, 3, 4 ), + ( 9.697399036122160600E-019, 5.091068730646599800E-005, 9.613048157375423900E-005, 0.0001413399754770169600, 0.0001810054085857352100 ), + .UNSPECIFIED. ) ; +#4123 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4124 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4125 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4126 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4127 = EDGE_CURVE ( 'NONE', #14758, #2358, #8089, .T. ) ; +#4128 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.6999999999999999600, -5.150000000000001200 ) ) ; +#4129 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, -15.05858178898088800, -9.600000000000001400 ) ) ; +#4130 = FILL_AREA_STYLE_COLOUR ( '', #15192 ) ; +#4131 = ORIENTED_EDGE ( 'NONE', *, *, #3557, .T. ) ; +#4132 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#4133 = LINE ( 'NONE', #8460, #1849 ) ; +#4134 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000020600, 0.8000000000000000400, 3.549999999999999400 ) ) ; +#4135 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#4136 = ORIENTED_EDGE ( 'NONE', *, *, #14257, .F. ) ; +#4137 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4138 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#4139 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 7.325000000000002000 ) ) ; +#4140 = EDGE_LOOP ( 'NONE', ( #364, #6777, #15123, #13279, #594, #1992 ) ) ; +#4141 = ORIENTED_EDGE ( 'NONE', *, *, #1569, .F. ) ; +#4142 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 8.050000000000000700 ) ) ; +#4143 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4144 = LINE ( 'NONE', #7558, #1075 ) ; +#4145 = ORIENTED_EDGE ( 'NONE', *, *, #4732, .T. ) ; +#4146 = EDGE_CURVE ( 'NONE', #11856, #10922, #11305, .T. ) ; +#4147 = VECTOR ( 'NONE', #7471, 1000.000000000000000 ) ; +#4148 = FACE_OUTER_BOUND ( 'NONE', #7418, .T. ) ; +#4149 = EDGE_CURVE ( 'NONE', #4870, #504, #10932, .T. ) ; +#4150 = ORIENTED_EDGE ( 'NONE', *, *, #15083, .T. ) ; +#4151 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4152 = EDGE_CURVE ( 'NONE', #5229, #5154, #7329, .T. ) ; +#4153 = PLANE ( 'NONE', #744 ) ; +#4154 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 0.5500000000000010400 ) ) ; +#4155 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 1.150000000000002400 ) ) ; +#4156 = ORIENTED_EDGE ( 'NONE', *, *, #5737, .F. ) ; +#4157 = ADVANCED_FACE ( 'NONE', ( #1965 ), #3118, .T. ) ; +#4158 = LINE ( 'NONE', #10380, #10006 ) ; +#4159 = VERTEX_POINT ( 'NONE', #6645 ) ; +#4160 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4161 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#4162 = VECTOR ( 'NONE', #5, 1000.000000000000000 ) ; +#4163 = VECTOR ( 'NONE', #3312, 1000.000000000000000 ) ; +#4164 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000004600, 0.4000000000000000200, 8.050000000000000700 ) ) ; +#4165 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 7.600000000000000500 ) ) ; +#4166 = ORIENTED_EDGE ( 'NONE', *, *, #9096, .F. ) ; +#4167 = ORIENTED_EDGE ( 'NONE', *, *, #11998, .T. ) ; +#4168 = ORIENTED_EDGE ( 'NONE', *, *, #7453, .F. ) ; +#4169 = CARTESIAN_POINT ( 'NONE', ( 7.639222690360981900, 3.102198665876327900, 9.051952621458756500 ) ) ; +#4170 = EDGE_CURVE ( 'NONE', #8549, #15205, #5977, .T. ) ; +#4171 = ADVANCED_FACE ( 'NONE', ( #5204 ), #14087, .T. ) ; +#4172 = VERTEX_POINT ( 'NONE', #9102 ) ; +#4173 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 5.050000000000000700 ) ) ; +#4174 = EDGE_LOOP ( 'NONE', ( #11550, #15218, #517, #13981 ) ) ; +#4175 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, -0.9499999999999990700 ) ) ; +#4176 = VERTEX_POINT ( 'NONE', #1721 ) ; +#4177 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4178 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, -0.3500000000000004800 ) ) ; +#4179 = ADVANCED_FACE ( 'NONE', ( #2705 ), #15186, .T. ) ; +#4180 = VECTOR ( 'NONE', #3330, 1000.000000000000000 ) ; +#4181 = LINE ( 'NONE', #6372, #551 ) ; +#4182 = PRESENTATION_STYLE_ASSIGNMENT (( #13678 ) ) ; +#4183 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4184 = EDGE_CURVE ( 'NONE', #2790, #12132, #13369, .T. ) ; +#4185 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000000400, 3.061459556676523700, 9.076149413117883900 ) ) ; +#4187 = ORIENTED_EDGE ( 'NONE', *, *, #4668, .T. ) ; +#4186 = AXIS2_PLACEMENT_3D ( 'NONE', #10721, #1064, #13148 ) ; +#4188 = EDGE_LOOP ( 'NONE', ( #805, #10144, #14645, #2745 ) ) ; +#4189 = ORIENTED_EDGE ( 'NONE', *, *, #3859, .T. ) ; +#4190 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, -10.00000000000000000 ) ) ; +#4191 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4192 = ORIENTED_EDGE ( 'NONE', *, *, #7428, .T. ) ; +#4193 = ORIENTED_EDGE ( 'NONE', *, *, #15057, .F. ) ; +#4194 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4195 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#4196 = LINE ( 'NONE', #15705, #10287 ) ; +#4197 = VECTOR ( 'NONE', #2743, 1000.000000000000000 ) ; +#4198 = EDGE_CURVE ( 'NONE', #7160, #7613, #239, .T. ) ; +#4199 = LINE ( 'NONE', #9397, #951 ) ; +#4200 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4201 = EDGE_LOOP ( 'NONE', ( #5496, #7611, #6973, #4438 ) ) ; +#4202 = ORIENTED_EDGE ( 'NONE', *, *, #5345, .F. ) ; +#4203 = ORIENTED_EDGE ( 'NONE', *, *, #5539, .F. ) ; +#4204 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#4205 = EDGE_CURVE ( 'NONE', #15118, #11214, #7128, .T. ) ; +#4206 = AXIS2_PLACEMENT_3D ( 'NONE', #12774, #4272, #14121 ) ; +#4207 = CARTESIAN_POINT ( 'NONE', ( -7.706844258255255700, 3.317458334292940700, -2.811040100843955200 ) ) ; +#4208 = EDGE_LOOP ( 'NONE', ( #6688, #15312, #4770, #6075 ) ) ; +#4209 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, 4.149999999999999500 ) ) ; +#4210 = LINE ( 'NONE', #102, #4230 ) ; +#4211 = LINE ( 'NONE', #9941, #13723 ) ; +#4212 = VECTOR ( 'NONE', #15183, 1000.000000000000000 ) ; +#4213 = LINE ( 'NONE', #11651, #8040 ) ; +#4214 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4215 = VECTOR ( 'NONE', #8672, 1000.000000000000000 ) ; +#4216 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999936400, 0.4000000000000000200, 3.550000000000002900 ) ) ; +#4217 = VERTEX_POINT ( 'NONE', #3167 ) ; +#4218 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, -15.05858178898088800, -6.100000000000000500 ) ) ; +#4219 = ORIENTED_EDGE ( 'NONE', *, *, #3237, .F. ) ; +#4220 = EDGE_CURVE ( 'NONE', #5413, #8635, #999, .T. ) ; +#4221 = EDGE_CURVE ( 'NONE', #12132, #1908, #14906, .T. ) ; +#4222 = ORIENTED_EDGE ( 'NONE', *, *, #6997, .T. ) ; +#4223 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.349999999999999600, -2.780000000000001100 ) ) ; +#4224 = LINE ( 'NONE', #13580, #597 ) ; +#4225 = VECTOR ( 'NONE', #540, 1000.000000000000000 ) ; +#4226 = FACE_OUTER_BOUND ( 'NONE', #5506, .T. ) ; +#4227 = ORIENTED_EDGE ( 'NONE', *, *, #7748, .F. ) ; +#4228 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4229 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000029100, 0.8000000000000000400, -0.3500000000000011400 ) ) ; +#4230 = VECTOR ( 'NONE', #7461, 1000.000000000000000 ) ; +#4231 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4232 = STYLED_ITEM ( 'NONE', ( #6862 ), #7687 ) ; +#4233 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.4000000000000000200, 1.849999999999999900 ) ) ; +#4234 = EDGE_LOOP ( 'NONE', ( #9453, #5884, #6397, #12044 ) ) ; +#4235 = ORIENTED_EDGE ( 'NONE', *, *, #11190, .F. ) ; +#4236 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4237 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4238 = ORIENTED_EDGE ( 'NONE', *, *, #8212, .F. ) ; +#4239 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#4240 = AXIS2_PLACEMENT_3D ( 'NONE', #2681, #1403, #6433 ) ; +#4241 = ORIENTED_EDGE ( 'NONE', *, *, #4395, .F. ) ; +#4242 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4243 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 6.550000000000001600 ) ) ; +#4244 = FACE_OUTER_BOUND ( 'NONE', #12538, .T. ) ; +#4245 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4246 = VECTOR ( 'NONE', #2716, 1000.000000000000000 ) ; +#4247 = EDGE_CURVE ( 'NONE', #9131, #11650, #1558, .T. ) ; +#4248 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 6.123233995736767300E-017 ) ) ; +#4249 = VECTOR ( 'NONE', #4297, 1000.000000000000000 ) ; +#4250 = PLANE ( 'NONE', #4952 ) ; +#4252 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4251 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 3.491481338843133400E-015, 1.000000000000000000 ) ) ; +#4253 = VERTEX_POINT ( 'NONE', #5520 ) ; +#4254 = EDGE_CURVE ( 'NONE', #3724, #4924, #12596, .T. ) ; +#4255 = ADVANCED_FACE ( 'NONE', ( #15281 ), #763, .F. ) ; +#4256 = FACE_OUTER_BOUND ( 'NONE', #13429, .T. ) ; +#4257 = VECTOR ( 'NONE', #14030, 1000.000000000000000 ) ; +#4258 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4259 = ADVANCED_FACE ( 'NONE', ( #5591 ), #495, .F. ) ; +#4260 = VECTOR ( 'NONE', #9988, 1000.000000000000000 ) ; +#4261 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4262 = DIRECTION ( 'NONE', ( 9.035018104045869500E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4263 = ORIENTED_EDGE ( 'NONE', *, *, #7601, .T. ) ; +#4264 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.3999999999999999700, 2.549999999999999800 ) ) ; +#4265 = ORIENTED_EDGE ( 'NONE', *, *, #14039, .T. ) ; +#4266 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#4267 = VERTEX_POINT ( 'NONE', #9406 ) ; +#4268 = AXIS2_PLACEMENT_3D ( 'NONE', #12690, #12640, #4248 ) ; +#4269 = PLANE ( 'NONE', #13305 ) ; +#4270 = PLANE ( 'NONE', #15362 ) ; +#4271 = EDGE_CURVE ( 'NONE', #6232, #13997, #13383, .T. ) ; +#4272 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4273 = ORIENTED_EDGE ( 'NONE', *, *, #15570, .T. ) ; +#4274 = LINE ( 'NONE', #10538, #8478 ) ; +#4275 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 8.650000000000000400 ) ) ; +#4276 = EDGE_CURVE ( 'NONE', #6475, #7403, #49, .T. ) ; +#4277 = ORIENTED_EDGE ( 'NONE', *, *, #1794, .T. ) ; +#4278 = VERTEX_POINT ( 'NONE', #8091 ) ; +#4279 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4280 = VERTEX_POINT ( 'NONE', #8291 ) ; +#4281 = LINE ( 'NONE', #9477, #4663 ) ; +#4282 = VECTOR ( 'NONE', #11989, 1000.000000000000000 ) ; +#4283 = VERTEX_POINT ( 'NONE', #13099 ) ; +#4284 = AXIS2_PLACEMENT_3D ( 'NONE', #1015, #11866, #13041 ) ; +#4285 = ORIENTED_EDGE ( 'NONE', *, *, #14920, .F. ) ; +#4286 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000023800, 0.8000000000000000400, 2.049999999999999800 ) ) ; +#4287 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4288 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 7.150000000000000400 ) ) ; +#4289 = EDGE_LOOP ( 'NONE', ( #2986, #2323, #11507, #14197 ) ) ; +#4290 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4291 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 3.550000000000001200 ) ) ; +#4292 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4293 = ORIENTED_EDGE ( 'NONE', *, *, #12813, .T. ) ; +#4294 = VECTOR ( 'NONE', #1518, 1000.000000000000000 ) ; +#4295 = ORIENTED_EDGE ( 'NONE', *, *, #6663, .F. ) ; +#4296 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, -0.9499999999999990700 ) ) ; +#4297 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4298 = EDGE_LOOP ( 'NONE', ( #10197, #3854, #10578, #8279 ) ) ; +#4299 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4300 = VECTOR ( 'NONE', #10774, 1000.000000000000000 ) ; +#4301 = VECTOR ( 'NONE', #13652, 1000.000000000000000 ) ; +#4302 = EDGE_CURVE ( 'NONE', #5813, #9827, #14150, .T. ) ; +#4303 = PLANE ( 'NONE', #14417 ) ; +#4304 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 2.050000000000001600 ) ) ; +#4305 = ORIENTED_EDGE ( 'NONE', *, *, #10732, .T. ) ; +#4306 = PLANE ( 'NONE', #15739 ) ; +#4307 = CARTESIAN_POINT ( 'NONE', ( -7.580976310729377900, 3.319452524890163000, 9.147639970946512400 ) ) ; +#4308 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4309 = VERTEX_POINT ( 'NONE', #5634 ) ; +#4310 = EDGE_CURVE ( 'NONE', #8705, #9055, #13765, .T. ) ; +#4311 = FACE_OUTER_BOUND ( 'NONE', #3372, .T. ) ; +#4312 = ORIENTED_EDGE ( 'NONE', *, *, #8096, .F. ) ; +#4313 = AXIS2_PLACEMENT_3D ( 'NONE', #5301, #652, #13899 ) ; +#4314 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4315 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4316 = LINE ( 'NONE', #4556, #3742 ) ; +#4317 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#4318 = PLANE ( 'NONE', #1478 ) ; +#4319 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, 8.050000000000000700 ) ) ; +#4320 = EDGE_CURVE ( 'NONE', #5749, #4473, #2320, .T. ) ; +#4321 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 8.825000000000001100 ) ) ; +#4322 = EDGE_CURVE ( 'NONE', #10694, #7149, #12803, .T. ) ; +#4323 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4324 = ORIENTED_EDGE ( 'NONE', *, *, #11603, .F. ) ; +#4325 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, 8.650000000000000400 ) ) ; +#4326 = ADVANCED_FACE ( 'NONE', ( #8455 ), #9356, .F. ) ; +#4327 = LINE ( 'NONE', #88, #11547 ) ; +#4328 = LINE ( 'NONE', #13854, #3176 ) ; +#4329 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, -0.3500000000000004800 ) ) ; +#4330 = VERTEX_POINT ( 'NONE', #15392 ) ; +#4331 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4332 = EDGE_CURVE ( 'NONE', #7375, #1526, #7314, .T. ) ; +#4333 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#4334 = AXIS2_PLACEMENT_3D ( 'NONE', #6286, #13335, #7316 ) ; +#4335 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#4336 = AXIS2_PLACEMENT_3D ( 'NONE', #14830, #7614, #139 ) ; +#4337 = VERTEX_POINT ( 'NONE', #6864 ) ; +#4338 = CLOSED_SHELL ( 'NONE', ( #11146, #3954, #2018, #1201, #123, #8011, #6445, #2807, #9687, #11902 ) ) ; +#4339 = ORIENTED_EDGE ( 'NONE', *, *, #9487, .T. ) ; +#4340 = VERTEX_POINT ( 'NONE', #6975 ) ; +#4341 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.0000000000000000000, 1.849999999999999900 ) ) ; +#4342 = FILL_AREA_STYLE ('',( #9203 ) ) ; +#4343 = ADVANCED_FACE ( 'NONE', ( #7504 ), #3370, .F. ) ; +#4344 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 5.050000000000000700 ) ) ; +#4345 = LINE ( 'NONE', #7901, #14991 ) ; +#4346 = LINE ( 'NONE', #764, #5101 ) ; +#4347 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#4348 = EDGE_CURVE ( 'NONE', #2264, #5352, #11663, .T. ) ; +#4349 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 7.325000000000002000 ) ) ; +#4350 = PLANE ( 'NONE', #3070 ) ; +#4351 = ADVANCED_FACE ( 'NONE', ( #7693 ), #975, .F. ) ; +#4352 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#4353 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999984400, 0.4000000000000000200, 7.150000000000000400 ) ) ; +#4354 = MANIFOLD_SOLID_BREP ( 'LPattern1[9]', #37 ) ; +#4355 = ORIENTED_EDGE ( 'NONE', *, *, #13583, .T. ) ; +#4356 = SURFACE_STYLE_USAGE ( .BOTH. , #11632 ) ; +#4357 = FACE_OUTER_BOUND ( 'NONE', #14459, .T. ) ; +#4358 = ORIENTED_EDGE ( 'NONE', *, *, #14756, .T. ) ; +#4359 = ORIENTED_EDGE ( 'NONE', *, *, #15032, .T. ) ; +#4360 = AXIS2_PLACEMENT_3D ( 'NONE', #4275, #3156, #6631 ) ; +#4361 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#4362 = ORIENTED_EDGE ( 'NONE', *, *, #9386, .F. ) ; +#4363 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.8000000000000000400, -5.150000000000001200 ) ) ; +#4364 = VECTOR ( 'NONE', #900, 1000.000000000000000 ) ; +#4365 = FACE_OUTER_BOUND ( 'NONE', #2212, .T. ) ; +#4366 = AXIS2_PLACEMENT_3D ( 'NONE', #14591, #3793, #7485 ) ; +#4367 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.351999999999999900, 8.990000000000002000 ) ) ; +#4369 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4368 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 8.650000000000000400 ) ) ; +#4370 = ORIENTED_EDGE ( 'NONE', *, *, #9686, .T. ) ; +#4371 = ORIENTED_EDGE ( 'NONE', *, *, #9410, .F. ) ; +#4372 = EDGE_CURVE ( 'NONE', #9162, #10163, #3665, .T. ) ; +#4373 = ORIENTED_EDGE ( 'NONE', *, *, #9614, .T. ) ; +#4374 = LINE ( 'NONE', #15130, #7999 ) ; +#4375 = ORIENTED_EDGE ( 'NONE', *, *, #12813, .F. ) ; +#4376 = VERTEX_POINT ( 'NONE', #8396 ) ; +#4377 = EDGE_CURVE ( 'NONE', #5238, #4661, #622, .T. ) ; +#4378 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 6.550000000000001600 ) ) ; +#4379 = EDGE_CURVE ( 'NONE', #6325, #1093, #15452, .T. ) ; +#4380 = VECTOR ( 'NONE', #1981, 1000.000000000000000 ) ; +#4381 = VECTOR ( 'NONE', #11154, 1000.000000000000000 ) ; +#4382 = ORIENTED_EDGE ( 'NONE', *, *, #3662, .T. ) ; +#4383 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#4384 = EDGE_LOOP ( 'NONE', ( #1119, #15501, #10809, #13901 ) ) ; +#4385 = EDGE_LOOP ( 'NONE', ( #15140, #13686, #9768, #11828 ) ) ; +#4386 = PLANE ( 'NONE', #12297 ) ; +#4387 = ORIENTED_EDGE ( 'NONE', *, *, #2068, .F. ) ; +#4388 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, -0.3500000000000004800 ) ) ; +#4389 = VERTEX_POINT ( 'NONE', #1072 ) ; +#4390 = ORIENTED_EDGE ( 'NONE', *, *, #1438, .T. ) ; +#4391 = LINE ( 'NONE', #2378, #12541 ) ; +#4392 = VECTOR ( 'NONE', #5743, 1000.000000000000000 ) ; +#4393 = FACE_OUTER_BOUND ( 'NONE', #11162, .T. ) ; +#4394 = VERTEX_POINT ( 'NONE', #8557 ) ; +#4395 = EDGE_CURVE ( 'NONE', #7613, #10896, #2893, .T. ) ; +#4396 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4398 = ORIENTED_EDGE ( 'NONE', *, *, #12500, .F. ) ; +#4397 = PLANE ( 'NONE', #12637 ) ; +#4399 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4400 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#4401 = ORIENTED_EDGE ( 'NONE', *, *, #6496, .T. ) ; +#4402 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 9.550000000000000700 ) ) ; +#4403 = ORIENTED_EDGE ( 'NONE', *, *, #1392, .T. ) ; +#4404 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 6.550000000000001600 ) ) ; +#4405 = LINE ( 'NONE', #13716, #8436 ) ; +#4406 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4407 = EDGE_CURVE ( 'NONE', #4283, #6325, #3105, .T. ) ; +#4408 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#4409 = VECTOR ( 'NONE', #4834, 1000.000000000000000 ) ; +#4410 = FACE_OUTER_BOUND ( 'NONE', #8300, .T. ) ; +#4411 = VECTOR ( 'NONE', #7566, 1000.000000000000000 ) ; +#4412 = AXIS2_PLACEMENT_3D ( 'NONE', #7408, #4942, #9788 ) ; +#4413 = VECTOR ( 'NONE', #2675, 1000.000000000000000 ) ; +#4414 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#4415 = DIRECTION ( 'NONE', ( -1.807003620809173900E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#4416 = EDGE_LOOP ( 'NONE', ( #8595, #9147, #2642, #14772 ) ) ; +#4417 = ORIENTED_EDGE ( 'NONE', *, *, #6793, .F. ) ; +#4418 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999984400, 0.0000000000000000000, 7.150000000000000400 ) ) ; +#4419 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000004300, 0.4000000000000000200, 7.150000000000000400 ) ) ; +#4420 = ORIENTED_EDGE ( 'NONE', *, *, #9302, .F. ) ; +#4421 = EDGE_CURVE ( 'NONE', #2410, #12654, #13179, .T. ) ; +#4422 = FACE_OUTER_BOUND ( 'NONE', #7415, .T. ) ; +#4423 = FACE_OUTER_BOUND ( 'NONE', #11916, .T. ) ; +#4424 = AXIS2_PLACEMENT_3D ( 'NONE', #12511, #437, #1664 ) ; +#4425 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#4426 = VECTOR ( 'NONE', #5552, 1000.000000000000000 ) ; +#4427 = FACE_OUTER_BOUND ( 'NONE', #13717, .T. ) ; +#4428 = VECTOR ( 'NONE', #7841, 1000.000000000000000 ) ; +#4429 = CYLINDRICAL_SURFACE ( 'NONE', #1045, 0.09999999999999939500 ) ; +#4430 = ADVANCED_FACE ( 'NONE', ( #9014 ), #10890, .T. ) ; +#4431 = EDGE_LOOP ( 'NONE', ( #12597 ) ) ; +#4432 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4433 = EDGE_CURVE ( 'NONE', #7194, #2363, #5772, .T. ) ; +#4434 = ADVANCED_FACE ( 'NONE', ( #2123 ), #3528, .F. ) ; +#4435 = VERTEX_POINT ( 'NONE', #1228 ) ; +#4436 = AXIS2_PLACEMENT_3D ( 'NONE', #7521, #13727, #14843 ) ; +#4437 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4438 = ORIENTED_EDGE ( 'NONE', *, *, #14850, .F. ) ; +#4439 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999937500, 0.0000000000000000000, 3.550000000000001200 ) ) ; +#4440 = VECTOR ( 'NONE', #2454, 1000.000000000000000 ) ; +#4441 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999890200, 0.4000000000000000200, -1.850000000000001000 ) ) ; +#4442 = LINE ( 'NONE', #11349, #4040 ) ; +#4443 = ORIENTED_EDGE ( 'NONE', *, *, #6471, .T. ) ; +#4444 = VECTOR ( 'NONE', #14538, 1000.000000000000000 ) ; +#4445 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 1.637941840314110200, 2.949999999999999700 ) ) ; +#4446 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 12.00000000000000000 ) ) ; +#4447 = ORIENTED_EDGE ( 'NONE', *, *, #14756, .F. ) ; +#4448 = EDGE_CURVE ( 'NONE', #10967, #13023, #8642, .T. ) ; +#4449 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999980100, 0.0000000000000000000, 7.150000000000002100 ) ) ; +#4450 = VERTEX_POINT ( 'NONE', #12089 ) ; +#4451 = PLANE ( 'NONE', #15379 ) ; +#4452 = FACE_OUTER_BOUND ( 'NONE', #10675, .T. ) ; +#4453 = LINE ( 'NONE', #2241, #61 ) ; +#4454 = DIRECTION ( 'NONE', ( -1.104919411450195700E-016, 3.506355962080744500E-015, -1.000000000000000000 ) ) ; +#4455 = AXIS2_PLACEMENT_3D ( 'NONE', #6926, #7030, #11735 ) ; +#4456 = PLANE ( 'NONE', #4875 ) ; +#4457 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4458 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4459 = LINE ( 'NONE', #4018, #1377 ) ; +#4460 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 7.325000000000002000 ) ) ; +#4461 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000023800, 0.4000000000000000200, 2.049999999999999800 ) ) ; +#4462 = ORIENTED_EDGE ( 'NONE', *, *, #9278, .F. ) ; +#4463 = ORIENTED_EDGE ( 'NONE', *, *, #9448, .T. ) ; +#4464 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4465 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#4466 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13871, 'distance_accuracy_value', 'NONE'); +#4467 = EDGE_CURVE ( 'NONE', #9298, #2405, #5385, .T. ) ; +#4468 = VECTOR ( 'NONE', #9621, 1000.000000000000000 ) ; +#4469 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4470 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 3.149999999999999900, 0.0000000000000000000 ) ) ; +#4471 = EDGE_CURVE ( 'NONE', #2437, #12948, #11097, .T. ) ; +#4472 = VECTOR ( 'NONE', #13379, 1000.000000000000000 ) ; +#4473 = VERTEX_POINT ( 'NONE', #4814 ) ; +#4474 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#4475 = VERTEX_POINT ( 'NONE', #10944 ) ; +#4476 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#4477 = VERTEX_POINT ( 'NONE', #7286 ) ; +#4478 = FACE_OUTER_BOUND ( 'NONE', #6204, .T. ) ; +#4479 = ORIENTED_EDGE ( 'NONE', *, *, #7556, .T. ) ; +#4480 = ORIENTED_EDGE ( 'NONE', *, *, #921, .F. ) ; +#4481 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4482 = PLANE ( 'NONE', #10414 ) ; +#4483 = VERTEX_POINT ( 'NONE', #6056 ) ; +#4484 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4485 = VECTOR ( 'NONE', #11093, 1000.000000000000000 ) ; +#4486 = VECTOR ( 'NONE', #13876, 1000.000000000000000 ) ; +#4487 = AXIS2_PLACEMENT_3D ( 'NONE', #11490, #12365, #10670 ) ; +#4488 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4489 = VERTEX_POINT ( 'NONE', #9714 ) ; +#4490 = EDGE_CURVE ( 'NONE', #7442, #14169, #7881, .T. ) ; +#4491 = PLANE ( 'NONE', #14006 ) ; +#4492 = DIRECTION ( 'NONE', ( 1.104919411450195700E-016, 2.952720810173285400E-015, 1.000000000000000000 ) ) ; +#4493 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.195440985631455300E-016 ) ) ; +#4494 = CLOSED_SHELL ( 'NONE', ( #12248, #890, #11825, #8702, #9226, #1940, #1771, #8521, #5701, #11207 ) ) ; +#4495 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999875300, 0.4000000000000000200, -2.449999999999996600 ) ) ; +#4496 = ORIENTED_EDGE ( 'NONE', *, *, #5157, .T. ) ; +#4497 = FACE_OUTER_BOUND ( 'NONE', #10437, .T. ) ; +#4498 = ORIENTED_EDGE ( 'NONE', *, *, #10005, .F. ) ; +#4499 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4500 = VECTOR ( 'NONE', #7822, 1000.000000000000000 ) ; +#4501 = FACE_OUTER_BOUND ( 'NONE', #13571, .T. ) ; +#4502 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000002500, 0.7000000000000009500, -4.000000000000000000 ) ) ; +#4503 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4504 = ADVANCED_FACE ( 'NONE', ( #14328 ), #6112, .F. ) ; +#4505 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, -15.05858178898088800, -6.900000000000000400 ) ) ; +#4506 = PLANE ( 'NONE', #13715 ) ; +#4507 = EDGE_LOOP ( 'NONE', ( #2221, #11530, #10220, #10979 ) ) ; +#4508 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#4509 = ADVANCED_FACE ( 'NONE', ( #10892 ), #1284, .T. ) ; +#4510 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4511 = DIRECTION ( 'NONE', ( 3.097720492815726700E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4512 = EDGE_LOOP ( 'NONE', ( #5433, #7427, #3933, #196 ) ) ; +#4513 = FACE_OUTER_BOUND ( 'NONE', #15226, .T. ) ; +#4514 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4515 = ORIENTED_EDGE ( 'NONE', *, *, #6169, .T. ) ; +#4516 = EDGE_CURVE ( 'NONE', #8708, #12695, #1161, .T. ) ; +#4517 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.4000000000000000200, -3.349999999999998800 ) ) ; +#4518 = VECTOR ( 'NONE', #11621, 1000.000000000000000 ) ; +#4519 = LINE ( 'NONE', #10982, #14024 ) ; +#4521 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4520 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#4522 = EDGE_CURVE ( 'NONE', #13393, #8983, #978, .T. ) ; +#4523 = AXIS2_PLACEMENT_3D ( 'NONE', #10227, #2928, #1650 ) ; +#4524 = SURFACE_SIDE_STYLE ('',( #10613 ) ) ; +#4525 = FACE_BOUND ( 'NONE', #7884, .T. ) ; +#4526 = ORIENTED_EDGE ( 'NONE', *, *, #13207, .T. ) ; +#4527 = ORIENTED_EDGE ( 'NONE', *, *, #12693, .T. ) ; +#4528 = FACE_OUTER_BOUND ( 'NONE', #8932, .T. ) ; +#4529 = LINE ( 'NONE', #11626, #2400 ) ; +#4530 = EDGE_LOOP ( 'NONE', ( #8479, #2036, #4997, #2244 ) ) ; +#4531 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, 8.050000000000000700 ) ) ; +#4532 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999968400, 0.0000000000000000000, 5.650000000000001200 ) ) ; +#4533 = EDGE_CURVE ( 'NONE', #1214, #12815, #10318, .T. ) ; +#4534 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 7.500000000000000000 ) ) ; +#4535 = EDGE_CURVE ( 'NONE', #3704, #1426, #4224, .T. ) ; +#4536 = CARTESIAN_POINT ( 'NONE', ( 7.565520281879283700, 3.147980000000000000, 9.015703978347822600 ) ) ; +#4537 = VERTEX_POINT ( 'NONE', #2554 ) ; +#4538 = VECTOR ( 'NONE', #3034, 1000.000000000000000 ) ; +#4539 = ORIENTED_EDGE ( 'NONE', *, *, #2720, .F. ) ; +#4540 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 5.650000000000000400 ) ) ; +#4541 = AXIS2_PLACEMENT_3D ( 'NONE', #11374, #7729, #8735 ) ; +#4542 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.6999999999999999600, -5.150000000000001200 ) ) ; +#4543 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #9645, #8434, #2373, #13132, #13340, #13186, #15558, #9535, #15668, #8321, #10923, #14573, #2270 ), + .UNSPECIFIED., .F., .F., + ( 4, 3, 3, 3, 4 ), + ( 0.0000000000000000000, 5.091068730646621500E-005, 9.613048157375845300E-005, 0.0001413399754770218400, 0.0001810054085857365400 ), + .UNSPECIFIED. ) ; +#4544 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.0000000000000000000, 1.850000000000000100 ) ) ; +#4545 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude2', #10529 ) ; +#4546 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 3.550000000000001200 ) ) ; +#4547 = ORIENTED_EDGE ( 'NONE', *, *, #13630, .T. ) ; +#4548 = LINE ( 'NONE', #10506, #10634 ) ; +#4549 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000009600, 0.4000000000000000200, 5.649999999999995900 ) ) ; +#4550 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999998600, 0.4000000000000000200, 8.650000000000000400 ) ) ; +#4551 = ORIENTED_EDGE ( 'NONE', *, *, #7157, .F. ) ; +#4552 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 3.100000000000000500 ) ) ; +#4553 = ORIENTED_EDGE ( 'NONE', *, *, #5761, .T. ) ; +#4554 = EDGE_CURVE ( 'NONE', #13107, #14268, #10120, .T. ) ; +#4555 = SURFACE_STYLE_USAGE ( .BOTH. , #970 ) ; +#4556 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999985800, 0.8000000000000000400, 5.049999999999997200 ) ) ; +#4557 = VECTOR ( 'NONE', #5771, 1000.000000000000000 ) ; +#4558 = FACE_OUTER_BOUND ( 'NONE', #8497, .T. ) ; +#4559 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000024900, 0.8000000000000000400, 1.325000000000001500 ) ) ; +#4560 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.4000000000000000200, 2.950000000000000200 ) ) ; +#4561 = ORIENTED_EDGE ( 'NONE', *, *, #2200, .F. ) ; +#4562 = CARTESIAN_POINT ( 'NONE', ( -7.576234407614292000, 3.149999999999999500, -2.795520379342615800 ) ) ; +#4563 = ORIENTED_EDGE ( 'NONE', *, *, #12861, .F. ) ; +#4564 = ORIENTED_EDGE ( 'NONE', *, *, #12126, .F. ) ; +#4565 = ORIENTED_EDGE ( 'NONE', *, *, #9541, .F. ) ; +#4566 = EDGE_LOOP ( 'NONE', ( #9072, #6296, #2012, #7117 ) ) ; +#4567 = AXIS2_PLACEMENT_3D ( 'NONE', #12016, #14469, #1100 ) ; +#4568 = EDGE_LOOP ( 'NONE', ( #6532, #10226, #14315, #9728 ) ) ; +#4570 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4569 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4571 = VECTOR ( 'NONE', #7326, 1000.000000000000000 ) ; +#4572 = VECTOR ( 'NONE', #5795, 1000.000000000000000 ) ; +#4573 = VECTOR ( 'NONE', #11704, 1000.000000000000000 ) ; +#4574 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4575 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4576 = ORIENTED_EDGE ( 'NONE', *, *, #8670, .F. ) ; +#4577 = VERTEX_POINT ( 'NONE', #8615 ) ; +#4578 = ORIENTED_EDGE ( 'NONE', *, *, #14658, .T. ) ; +#4579 = EDGE_CURVE ( 'NONE', #4389, #11455, #5950, .T. ) ; +#4580 = ORIENTED_EDGE ( 'NONE', *, *, #15463, .T. ) ; +#4581 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.3999999999999999700, 5.650000000000000400 ) ) ; +#4582 = ADVANCED_FACE ( 'NONE', ( #4422 ), #13631, .F. ) ; +#4583 = EDGE_CURVE ( 'NONE', #5067, #11050, #13549, .T. ) ; +#4584 = ORIENTED_EDGE ( 'NONE', *, *, #8468, .F. ) ; +#4585 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4586 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000031300, 0.4000000000000000200, -0.3500000000000013700 ) ) ; +#4587 = PLANE ( 'NONE', #5429 ) ; +#4588 = VECTOR ( 'NONE', #15546, 1000.000000000000000 ) ; +#4589 = VECTOR ( 'NONE', #1624, 1000.000000000000000 ) ; +#4590 = DIRECTION ( 'NONE', ( 1.807003620809173900E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4591 = LINE ( 'NONE', #8024, #4961 ) ; +#4592 = AXIS2_PLACEMENT_3D ( 'NONE', #3179, #2007, #1956 ) ; +#4593 = ORIENTED_EDGE ( 'NONE', *, *, #14068, .F. ) ; +#4594 = PLANE ( 'NONE', #7799 ) ; +#4595 = ORIENTED_EDGE ( 'NONE', *, *, #13472, .T. ) ; +#4596 = ORIENTED_EDGE ( 'NONE', *, *, #2317, .T. ) ; +#4597 = ORIENTED_EDGE ( 'NONE', *, *, #13784, .F. ) ; +#4598 = LINE ( 'NONE', #14998, #11096 ) ; +#4599 = VECTOR ( 'NONE', #142, 1000.000000000000000 ) ; +#4600 = VECTOR ( 'NONE', #6589, 1000.000000000000000 ) ; +#4601 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 1.149999999999999900 ) ) ; +#4602 = EDGE_CURVE ( 'NONE', #11705, #4172, #11271, .T. ) ; +#4603 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.4000000000000000200, 1.849999999999999900 ) ) ; +#4604 = LINE ( 'NONE', #8630, #5368 ) ; +#4605 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999920400, 0.0000000000000000000, 1.149999999999999900 ) ) ; +#4606 = PLANE ( 'NONE', #5694 ) ; +#4607 = ORIENTED_EDGE ( 'NONE', *, *, #997, .T. ) ; +#4608 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4609 = VERTEX_POINT ( 'NONE', #1388 ) ; +#4610 = ORIENTED_EDGE ( 'NONE', *, *, #13633, .F. ) ; +#4611 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4612 = EDGE_CURVE ( 'NONE', #9723, #7146, #3638, .T. ) ; +#4613 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999971600, 0.8000000000000000400, 1.149999999999999000 ) ) ; +#4614 = VECTOR ( 'NONE', #10140, 1000.000000000000000 ) ; +#4615 = VECTOR ( 'NONE', #4113, 1000.000000000000000 ) ; +#4616 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#4617 = VECTOR ( 'NONE', #4866, 1000.000000000000000 ) ; +#4618 = ORIENTED_EDGE ( 'NONE', *, *, #3915, .T. ) ; +#4619 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4620 = VERTEX_POINT ( 'NONE', #12241 ) ; +#4622 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999936400, 0.4000000000000000200, 2.650000000000001200 ) ) ; +#4621 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 5.825000000000002000 ) ) ; +#4623 = ORIENTED_EDGE ( 'NONE', *, *, #8191, .T. ) ; +#4624 = EDGE_CURVE ( 'NONE', #5993, #7612, #1739, .T. ) ; +#4625 = EDGE_LOOP ( 'NONE', ( #3987, #8023, #14072 ) ) ; +#4626 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4627 = CARTESIAN_POINT ( 'NONE', ( -7.580976310729377900, 3.137420392015688500, -2.831144252825625900 ) ) ; +#4628 = FACE_OUTER_BOUND ( 'NONE', #5650, .T. ) ; +#4629 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, -1.399999999999999700 ) ) ; +#4630 = EDGE_CURVE ( 'NONE', #7367, #8916, #12782, .T. ) ; +#4631 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4632 = FACE_OUTER_BOUND ( 'NONE', #8422, .T. ) ; +#4633 = AXIS2_PLACEMENT_3D ( 'NONE', #10773, #8231, #9396 ) ; +#4634 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 2.825000000000001100 ) ) ; +#4635 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999906200, 0.4000000000000000200, -0.3500000000000013700 ) ) ; +#4636 = ORIENTED_EDGE ( 'NONE', *, *, #3734, .F. ) ; +#4637 = AXIS2_PLACEMENT_3D ( 'NONE', #14299, #15589, #7133 ) ; +#4638 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999967700, 0.4000000000000000200, 5.650000000000001200 ) ) ; +#4639 = FACE_OUTER_BOUND ( 'NONE', #416, .T. ) ; +#4640 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4641 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 8.050000000000000700 ) ) ; +#4642 = LINE ( 'NONE', #15093, #14160 ) ; +#4643 = EDGE_CURVE ( 'NONE', #1585, #3569, #6518, .T. ) ; +#4644 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.3999999999999999700, 4.149999999999999500 ) ) ; +#4645 = VECTOR ( 'NONE', #10159, 1000.000000000000000 ) ; +#4646 = ORIENTED_EDGE ( 'NONE', *, *, #15113, .F. ) ; +#4647 = ORIENTED_EDGE ( 'NONE', *, *, #7091, .T. ) ; +#4648 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, -1.850000000000000500 ) ) ; +#4649 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000500, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#4650 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4651 = AXIS2_PLACEMENT_3D ( 'NONE', #13581, #12450, #7764 ) ; +#4652 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4653 = PLANE ( 'NONE', #12725 ) ; +#4654 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 3.550000000000001200 ) ) ; +#4655 = EDGE_LOOP ( 'NONE', ( #8598, #6734, #12259, #13878, #13810, #4120 ) ) ; +#4656 = ADVANCED_FACE ( 'NONE', ( #9745 ), #5133, .F. ) ; +#4657 = VECTOR ( 'NONE', #7302, 1000.000000000000000 ) ; +#4658 = EDGE_LOOP ( 'NONE', ( #3021, #9425, #2164, #11062 ) ) ; +#4659 = ORIENTED_EDGE ( 'NONE', *, *, #5702, .T. ) ; +#4660 = FILL_AREA_STYLE_COLOUR ( '', #15288 ) ; +#4661 = VERTEX_POINT ( 'NONE', #172 ) ; +#4662 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.8000000000000000400, -5.150000000000001200 ) ) ; +#4663 = VECTOR ( 'NONE', #9431, 1000.000000000000000 ) ; +#4664 = LINE ( 'NONE', #12517, #8865 ) ; +#4665 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000000400, 3.049999999999999800, -2.872928932188135100 ) ) ; +#4666 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#4667 = EDGE_LOOP ( 'NONE', ( #449, #9917, #4295, #3221 ) ) ; +#4668 = EDGE_CURVE ( 'NONE', #7807, #14292, #6903, .T. ) ; +#4669 = VERTEX_POINT ( 'NONE', #5293 ) ; +#4670 = ORIENTED_EDGE ( 'NONE', *, *, #627, .F. ) ; +#4671 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999921500, 0.4000000000000000200, 1.150000000000002600 ) ) ; +#4672 = EDGE_CURVE ( 'NONE', #13371, #14844, #3451, .T. ) ; +#4673 = PLANE ( 'NONE', #13530 ) ; +#4674 = ORIENTED_EDGE ( 'NONE', *, *, #1964, .F. ) ; +#4675 = EDGE_CURVE ( 'NONE', #6232, #15676, #8806, .T. ) ; +#4676 = ORIENTED_EDGE ( 'NONE', *, *, #5329, .T. ) ; +#4677 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4678 = VERTEX_POINT ( 'NONE', #3953 ) ; +#4679 = VECTOR ( 'NONE', #5070, 1000.000000000000000 ) ; +#4680 = CIRCLE ( 'NONE', #9175, 0.4999999999999995600 ) ; +#4681 = ORIENTED_EDGE ( 'NONE', *, *, #7867, .T. ) ; +#4682 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000036600, 0.4000000000000000200, -1.850000000000001000 ) ) ; +#4683 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#4684 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.913297951445007900E-016 ) ) ; +#4685 = ORIENTED_EDGE ( 'NONE', *, *, #1960, .T. ) ; +#4686 = VECTOR ( 'NONE', #7913, 1000.000000000000000 ) ; +#4687 = ORIENTED_EDGE ( 'NONE', *, *, #876, .F. ) ; +#4688 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#4689 = LINE ( 'NONE', #10725, #10989 ) ; +#4690 = VECTOR ( 'NONE', #1472, 1000.000000000000000 ) ; +#4691 = EDGE_CURVE ( 'NONE', #11898, #8729, #5566, .T. ) ; +#4692 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4693 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4694 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#4695 = EDGE_CURVE ( 'NONE', #6021, #1154, #4789, .T. ) ; +#4696 = VECTOR ( 'NONE', #13301, 1000.000000000000000 ) ; +#4697 = VERTEX_POINT ( 'NONE', #9087 ) ; +#4698 = AXIS2_PLACEMENT_3D ( 'NONE', #4962, #3740, #13365 ) ; +#4699 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999984400, 0.0000000000000000000, 8.050000000000000700 ) ) ; +#4700 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4701 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000009200, 0.7999999999999960500, 9.082928932188135500 ) ) ; +#4702 = LINE ( 'NONE', #2462, #12486 ) ; +#4703 = FACE_OUTER_BOUND ( 'NONE', #3733, .T. ) ; +#4704 = PLANE ( 'NONE', #13098 ) ; +#4705 = ORIENTED_EDGE ( 'NONE', *, *, #7201, .F. ) ; +#4706 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4707 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#4708 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 9.550000000000000700 ) ) ; +#4709 = EDGE_CURVE ( 'NONE', #11811, #498, #15612, .T. ) ; +#4710 = ORIENTED_EDGE ( 'NONE', *, *, #3154, .T. ) ; +#4711 = VECTOR ( 'NONE', #9876, 1000.000000000000000 ) ; +#4712 = EDGE_LOOP ( 'NONE', ( #15315, #11524, #12427, #6257 ) ) ; +#4713 = VECTOR ( 'NONE', #4200, 1000.000000000000000 ) ; +#4714 = LINE ( 'NONE', #2603, #1647 ) ; +#4715 = PLANE ( 'NONE', #2460 ) ; +#4717 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4716 = DIRECTION ( 'NONE', ( -1.000000000000000000, 4.336808689942006700E-015, 0.0000000000000000000 ) ) ; +#4718 = EDGE_CURVE ( 'NONE', #14815, #4851, #13158, .T. ) ; +#4719 = FILL_AREA_STYLE ('',( #7352 ) ) ; +#4720 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4721 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4722 = ORIENTED_EDGE ( 'NONE', *, *, #13784, .T. ) ; +#4723 = VECTOR ( 'NONE', #10, 1000.000000000000000 ) ; +#4724 = ORIENTED_EDGE ( 'NONE', *, *, #3608, .F. ) ; +#4725 = ORIENTED_EDGE ( 'NONE', *, *, #4920, .T. ) ; +#4726 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4727 = ADVANCED_FACE ( 'NONE', ( #13338 ), #10179, .F. ) ; +#4728 = LINE ( 'NONE', #1065, #11774 ) ; +#4729 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#4730 = EDGE_CURVE ( 'NONE', #3336, #870, #11641, .T. ) ; +#4731 = FILL_AREA_STYLE_COLOUR ( '', #5954 ) ; +#4732 = EDGE_CURVE ( 'NONE', #7920, #3794, #4991, .T. ) ; +#4733 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999937500, 0.0000000000000000000, 2.649999999999999500 ) ) ; +#4734 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4735 = ORIENTED_EDGE ( 'NONE', *, *, #11401, .T. ) ; +#4736 = VERTEX_POINT ( 'NONE', #12499 ) ; +#4737 = VERTEX_POINT ( 'NONE', #13748 ) ; +#4738 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4739 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4740 = LINE ( 'NONE', #14922, #2247 ) ; +#4741 = ORIENTED_EDGE ( 'NONE', *, *, #7746, .T. ) ; +#4742 = ORIENTED_EDGE ( 'NONE', *, *, #14347, .T. ) ; +#4743 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4744 = VECTOR ( 'NONE', #7904, 1000.000000000000000 ) ; +#4745 = VECTOR ( 'NONE', #13211, 1000.000000000000000 ) ; +#4746 = AXIS2_PLACEMENT_3D ( 'NONE', #15184, #6591, #12677 ) ; +#4747 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000300, 0.0000000000000000000, 2.949999999999999300 ) ) ; +#4748 = EDGE_LOOP ( 'NONE', ( #12215, #1559, #4241, #14662 ) ) ; +#4749 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4750 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 2.050000000000001600 ) ) ; +#4752 = ORIENTED_EDGE ( 'NONE', *, *, #878, .T. ) ; +#4751 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#4753 = VERTEX_POINT ( 'NONE', #11351 ) ; +#4754 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 7.600000000000000500 ) ) ; +#4755 = EDGE_CURVE ( 'NONE', #3808, #15393, #10699, .T. ) ; +#4756 = EDGE_LOOP ( 'NONE', ( #3227, #11024, #11999, #12028 ) ) ; +#4757 = ORIENTED_EDGE ( 'NONE', *, *, #7523, .F. ) ; +#4758 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4759 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4760 = EDGE_CURVE ( 'NONE', #8882, #9378, #7393, .T. ) ; +#4761 = VECTOR ( 'NONE', #4798, 1000.000000000000000 ) ; +#4762 = LINE ( 'NONE', #11151, #3967 ) ; +#4763 = FACE_OUTER_BOUND ( 'NONE', #6526, .T. ) ; +#4764 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 1.637941840314110200, 2.549999999999999800 ) ) ; +#4765 = AXIS2_PLACEMENT_3D ( 'NONE', #10596, #6886, #4432 ) ; +#4766 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4767 = VERTEX_POINT ( 'NONE', #7649 ) ; +#4768 = ORIENTED_EDGE ( 'NONE', *, *, #5120, .T. ) ; +#4769 = ADVANCED_FACE ( 'NONE', ( #9171 ), #4001, .T. ) ; +#4770 = ORIENTED_EDGE ( 'NONE', *, *, #2148, .T. ) ; +#4771 = VERTEX_POINT ( 'NONE', #13689 ) ; +#4772 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4773 = ORIENTED_EDGE ( 'NONE', *, *, #2252, .F. ) ; +#4774 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999991400, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#4775 = PLANE ( 'NONE', #1961 ) ; +#4776 = VECTOR ( 'NONE', #2849, 1000.000000000000000 ) ; +#4777 = CYLINDRICAL_SURFACE ( 'NONE', #7038, 0.3000000000000007700 ) ; +#4778 = LINE ( 'NONE', #11851, #3439 ) ; +#4779 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8359 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9592, #10814, #13283 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4780 = CIRCLE ( 'NONE', #10290, 0.2749999999999991900 ) ; +#4781 = ORIENTED_EDGE ( 'NONE', *, *, #430, .F. ) ; +#4782 = EDGE_CURVE ( 'NONE', #9795, #1895, #10072, .T. ) ; +#4783 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999906200, 0.4000000000000000200, 0.5500000000000020400 ) ) ; +#4784 = ORIENTED_EDGE ( 'NONE', *, *, #14340, .F. ) ; +#4785 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.7000000000000009500, -6.100000000000000500 ) ) ; +#4786 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000020300, 0.8000000000000000400, 3.549999999999999400 ) ) ; +#4787 = ORIENTED_EDGE ( 'NONE', *, *, #4127, .F. ) ; +#4788 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#4789 = LINE ( 'NONE', #8922, #14882 ) ; +#4790 = LINE ( 'NONE', #15338, #7107 ) ; +#4791 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, -1.850000000000000500 ) ) ; +#4792 = FACE_OUTER_BOUND ( 'NONE', #2180, .T. ) ; +#4793 = LINE ( 'NONE', #11634, #10125 ) ; +#4794 = VECTOR ( 'NONE', #3146, 1000.000000000000000 ) ; +#4795 = AXIS2_PLACEMENT_3D ( 'NONE', #14926, #4124, #12621 ) ; +#4796 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4797 = DIRECTION ( 'NONE', ( 3.690901012716607300E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4798 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4799 = ORIENTED_EDGE ( 'NONE', *, *, #13690, .T. ) ; +#4800 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4801 = ORIENTED_EDGE ( 'NONE', *, *, #12382, .T. ) ; +#4802 = ORIENTED_EDGE ( 'NONE', *, *, #9231, .T. ) ; +#4803 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4804 = EDGE_CURVE ( 'NONE', #1172, #1585, #1282, .T. ) ; +#4805 = LINE ( 'NONE', #15650, #8828 ) ; +#4806 = VECTOR ( 'NONE', #14702, 1000.000000000000000 ) ; +#4807 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#4808 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 5.650000000000001200 ) ) ; +#4809 = CYLINDRICAL_SURFACE ( 'NONE', #4633, 0.5000000000000004400 ) ; +#4810 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, -0.0000000000000000000, -3.350000000000000500 ) ) ; +#4811 = ADVANCED_FACE ( 'NONE', ( #7210 ), #8016, .T. ) ; +#4812 = VECTOR ( 'NONE', #14294, 1000.000000000000000 ) ; +#4813 = ORIENTED_EDGE ( 'NONE', *, *, #14877, .F. ) ; +#4814 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, 6.550000000000000700 ) ) ; +#4815 = EDGE_CURVE ( 'NONE', #7269, #9598, #15506, .T. ) ; +#4816 = VERTEX_POINT ( 'NONE', #322 ) ; +#4817 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9418 ), #3094 ) ; +#4818 = LINE ( 'NONE', #7689, #13565 ) ; +#4819 = LINE ( 'NONE', #4352, #14532 ) ; +#4820 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999920400, 0.4000000000000000200, 1.149999999999999900 ) ) ; +#4821 = ADVANCED_FACE ( 'NONE', ( #13780 ), #3103, .T. ) ; +#4822 = VECTOR ( 'NONE', #395, 1000.000000000000000 ) ; +#4823 = EDGE_CURVE ( 'NONE', #3666, #4669, #11836, .T. ) ; +#4824 = EDGE_CURVE ( 'NONE', #359, #5326, #393, .T. ) ; +#4825 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#4826 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 3.550000000000001200 ) ) ; +#4827 = FILL_AREA_STYLE_COLOUR ( '', #4957 ) ; +#4828 = EDGE_LOOP ( 'NONE', ( #10066, #7923, #6359, #12927 ) ) ; +#4829 = VERTEX_POINT ( 'NONE', #6844 ) ; +#4830 = MANIFOLD_SOLID_BREP ( 'LPattern1[15]', #3026 ) ; +#4831 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4832 = VECTOR ( 'NONE', #1617, 1000.000000000000000 ) ; +#4833 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#4834 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4835 = ORIENTED_EDGE ( 'NONE', *, *, #13970, .F. ) ; +#4836 = FILL_AREA_STYLE_COLOUR ( '', #8864 ) ; +#4837 = VECTOR ( 'NONE', #12814, 1000.000000000000000 ) ; +#4838 = VECTOR ( 'NONE', #9160, 1000.000000000000000 ) ; +#4839 = AXIS2_PLACEMENT_3D ( 'NONE', #10857, #8580, #4831 ) ; +#4840 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4841 = ORIENTED_EDGE ( 'NONE', *, *, #9973, .T. ) ; +#4842 = ORIENTED_EDGE ( 'NONE', *, *, #5184, .T. ) ; +#4843 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4844 = ORIENTED_EDGE ( 'NONE', *, *, #6937, .F. ) ; +#4845 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4846 = ADVANCED_FACE ( 'NONE', ( #5983 ), #1864, .F. ) ; +#4847 = EDGE_CURVE ( 'NONE', #11929, #7251, #2143, .T. ) ; +#4848 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 5.478074134663595300E-015 ) ) ; +#4849 = ORIENTED_EDGE ( 'NONE', *, *, #3107, .T. ) ; +#4850 = LINE ( 'NONE', #10105, #1593 ) ; +#4851 = VERTEX_POINT ( 'NONE', #9287 ) ; +#4852 = ORIENTED_EDGE ( 'NONE', *, *, #4320, .F. ) ; +#4853 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#4854 = ORIENTED_EDGE ( 'NONE', *, *, #14481, .F. ) ; +#4855 = VECTOR ( 'NONE', #13738, 1000.000000000000000 ) ; +#4856 = VECTOR ( 'NONE', #6339, 1000.000000000000000 ) ; +#4857 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999951700, 0.0000000000000000000, 4.149999999999999500 ) ) ; +#4858 = PLANE ( 'NONE', #5621 ) ; +#4859 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4860 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000009900, 0.4000000000000000200, 5.649999999999995900 ) ) ; +#4861 = CARTESIAN_POINT ( 'NONE', ( -7.580976310729377900, 3.317668071082943800, -2.936595997628982600 ) ) ; +#4862 = EDGE_LOOP ( 'NONE', ( #4929, #1703, #3588, #9161 ) ) ; +#4863 = VERTEX_POINT ( 'NONE', #9193 ) ; +#4864 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 3.550000000000001200 ) ) ; +#4865 = AXIS2_PLACEMENT_3D ( 'NONE', #3018, #1957, #9059 ) ; +#4866 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4867 = EDGE_LOOP ( 'NONE', ( #12332 ) ) ; +#4868 = FACE_OUTER_BOUND ( 'NONE', #5108, .T. ) ; +#4869 = PLANE ( 'NONE', #7417 ) ; +#4870 = VERTEX_POINT ( 'NONE', #5448 ) ; +#4871 = PLANE ( 'NONE', #10561 ) ; +#4872 = LINE ( 'NONE', #4549, #12096 ) ; +#4873 = CIRCLE ( 'NONE', #5897, 0.2749999999999991900 ) ; +#4874 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4875 = AXIS2_PLACEMENT_3D ( 'NONE', #3314, #5627, #9402 ) ; +#4876 = ORIENTED_EDGE ( 'NONE', *, *, #13664, .T. ) ; +#4877 = EDGE_CURVE ( 'NONE', #5352, #8142, #15110, .T. ) ; +#4878 = EDGE_CURVE ( 'NONE', #4172, #12520, #6362, .T. ) ; +#4879 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.8000000000000000400, -3.349999999999998800 ) ) ; +#4880 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4881 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 5.650000000000000400 ) ) ; +#4882 = LINE ( 'NONE', #11348, #10021 ) ; +#4883 = VERTEX_POINT ( 'NONE', #14172 ) ; +#4884 = LINE ( 'NONE', #11674, #15159 ) ; +#4885 = FACE_OUTER_BOUND ( 'NONE', #10291, .T. ) ; +#4886 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15179 ) ) ; +#4887 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 2.050000000000001600 ) ) ; +#4888 = ADVANCED_FACE ( 'NONE', ( #9036 ), #15279, .F. ) ; +#4889 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#4890 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.3999999999999999700, 4.049999999999999800 ) ) ; +#4891 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4892 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.3999999999999999700, 2.950000000000000200 ) ) ; +#4893 = FACE_BOUND ( 'NONE', #10564, .T. ) ; +#4894 = ORIENTED_EDGE ( 'NONE', *, *, #4060, .T. ) ; +#4895 = EDGE_CURVE ( 'NONE', #12188, #8185, #434, .T. ) ; +#4896 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, -2.449999999999998800 ) ) ; +#4897 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999890200, 0.0000000000000000000, -1.849999999999998800 ) ) ; +#4898 = LINE ( 'NONE', #7142, #13259 ) ; +#4899 = VECTOR ( 'NONE', #8511, 1000.000000000000000 ) ; +#4900 = ADVANCED_FACE ( 'NONE', ( #5210 ), #15372, .F. ) ; +#4901 = ORIENTED_EDGE ( 'NONE', *, *, #9075, .F. ) ; +#4902 = EDGE_CURVE ( 'NONE', #9017, #13797, #8841, .T. ) ; +#4903 = STYLED_ITEM ( 'NONE', ( #7079 ), #11944 ) ; +#4904 = AXIS2_PLACEMENT_3D ( 'NONE', #2371, #7318, #2474 ) ; +#4905 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.4000000000000000200, 1.849999999999999900 ) ) ; +#4906 = ORIENTED_EDGE ( 'NONE', *, *, #429, .T. ) ; +#4907 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4908 = EDGE_LOOP ( 'NONE', ( #12824, #15685, #883, #14020 ) ) ; +#4909 = CARTESIAN_POINT ( 'NONE', ( 7.578113802259294700, 3.139702065901542200, -2.826076976721356700 ) ) ; +#4910 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 8.050000000000000700 ) ) ; +#4911 = ORIENTED_EDGE ( 'NONE', *, *, #15371, .T. ) ; +#4912 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4913 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000023800, 0.8000000000000000400, 2.049999999999999800 ) ) ; +#4914 = LINE ( 'NONE', #5380, #1661 ) ; +#4915 = LINE ( 'NONE', #6607, #12701 ) ; +#4916 = VERTEX_POINT ( 'NONE', #14372 ) ; +#4917 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4918 = ADVANCED_FACE ( 'NONE', ( #9958 ), #7112, .F. ) ; +#4919 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.3999999999999999700, 3.649999999999999500 ) ) ; +#4920 = EDGE_CURVE ( 'NONE', #2620, #9510, #6184, .T. ) ; +#4921 = AXIS2_PLACEMENT_3D ( 'NONE', #1635, #4143, #7626 ) ; +#4922 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999951700, 0.4000000000000000200, 5.050000000000002500 ) ) ; +#4923 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4924 = VERTEX_POINT ( 'NONE', #5870 ) ; +#4925 = VECTOR ( 'NONE', #9244, 1000.000000000000000 ) ; +#4926 = ORIENTED_EDGE ( 'NONE', *, *, #12287, .F. ) ; +#4927 = ADVANCED_FACE ( 'NONE', ( #8272 ), #2223, .F. ) ; +#4928 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, -15.05858178898088800, -6.100000000000000500 ) ) ; +#4929 = ORIENTED_EDGE ( 'NONE', *, *, #11870, .F. ) ; +#4931 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4930 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4932 = EDGE_CURVE ( 'NONE', #9827, #10967, #5797, .T. ) ; +#4933 = VECTOR ( 'NONE', #14225, 1000.000000000000000 ) ; +#4934 = CARTESIAN_POINT ( 'NONE', ( -7.634288157986073700, 3.064605673451390000, 9.090000000000001600 ) ) ; +#4935 = ORIENTED_EDGE ( 'NONE', *, *, #11652, .F. ) ; +#4936 = ORIENTED_EDGE ( 'NONE', *, *, #3305, .F. ) ; +#4937 = ORIENTED_EDGE ( 'NONE', *, *, #5146, .F. ) ; +#4938 = ORIENTED_EDGE ( 'NONE', *, *, #15438, .T. ) ; +#4939 = ORIENTED_EDGE ( 'NONE', *, *, #6742, .F. ) ; +#4940 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4941 = ORIENTED_EDGE ( 'NONE', *, *, #7399, .T. ) ; +#4942 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4943 = EDGE_CURVE ( 'NONE', #5140, #13121, #13003, .T. ) ; +#4944 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#4945 = VECTOR ( 'NONE', #4050, 1000.000000000000000 ) ; +#4946 = VERTEX_POINT ( 'NONE', #11960 ) ; +#4947 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, -0.3500000000000004800 ) ) ; +#4948 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4949 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 7.150000000000000400 ) ) ; +#4950 = ORIENTED_EDGE ( 'NONE', *, *, #3802, .F. ) ; +#4951 = ORIENTED_EDGE ( 'NONE', *, *, #9894, .T. ) ; +#4952 = AXIS2_PLACEMENT_3D ( 'NONE', #12748, #3016, #5478 ) ; +#4953 = ORIENTED_EDGE ( 'NONE', *, *, #15610, .T. ) ; +#4954 = ORIENTED_EDGE ( 'NONE', *, *, #5299, .T. ) ; +#4955 = AXIS2_PLACEMENT_3D ( 'NONE', #15236, #15439, #15290 ) ; +#4956 = PLANE ( 'NONE', #5383 ) ; +#4957 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#4958 = LINE ( 'NONE', #8948, #4589 ) ; +#4959 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4960 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4961 = VECTOR ( 'NONE', #752, 1000.000000000000000 ) ; +#4962 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999920400, 0.4000000000000000200, 1.150000000000002100 ) ) ; +#4963 = CARTESIAN_POINT ( 'NONE', ( -7.565530125675980600, 3.351999999999999400, -2.859277334261812500 ) ) ; +#4964 = ORIENTED_EDGE ( 'NONE', *, *, #15587, .T. ) ; +#4965 = EDGE_CURVE ( 'NONE', #13139, #14109, #1384, .T. ) ; +#4966 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4967 = ADVANCED_FACE ( 'NONE', ( #12048 ), #1054, .F. ) ; +#4968 = VERTEX_POINT ( 'NONE', #5926 ) ; +#4969 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#4970 = EDGE_CURVE ( 'NONE', #11325, #11189, #7902, .T. ) ; +#4971 = VERTEX_POINT ( 'NONE', #10760 ) ; +#4972 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4973 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4974 = EDGE_CURVE ( 'NONE', #1526, #1241, #629, .T. ) ; +#4975 = EDGE_LOOP ( 'NONE', ( #14065, #15467, #6409, #1688 ) ) ; +#4976 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 1.058845584977101000E-014, -2.880000000000010100 ) ) ; +#4977 = VECTOR ( 'NONE', #300, 1000.000000000000000 ) ; +#4978 = SURFACE_STYLE_FILL_AREA ( #10642 ) ; +#4979 = LINE ( 'NONE', #5304, #14483 ) ; +#4980 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 2.649999999999999500 ) ) ; +#4981 = VECTOR ( 'NONE', #10844, 1000.000000000000000 ) ; +#4982 = AXIS2_PLACEMENT_3D ( 'NONE', #11040, #10888, #8613 ) ; +#4983 = ORIENTED_EDGE ( 'NONE', *, *, #5820, .T. ) ; +#4984 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 1.806230589874906900, 8.650000000000000400 ) ) ; +#4985 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 6.550000000000001600 ) ) ; +#4986 = ADVANCED_FACE ( 'NONE', ( #11117 ), #4594, .F. ) ; +#4987 = ORIENTED_EDGE ( 'NONE', *, *, #478, .F. ) ; +#4988 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, -1.850000000000000500 ) ) ; +#4989 = ORIENTED_EDGE ( 'NONE', *, *, #3785, .F. ) ; +#4990 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4991 = LINE ( 'NONE', #2878, #11089 ) ; +#4992 = LINE ( 'NONE', #6066, #5971 ) ; +#4993 = VECTOR ( 'NONE', #7865, 1000.000000000000000 ) ; +#4994 = VECTOR ( 'NONE', #5068, 1000.000000000000000 ) ; +#4995 = EDGE_CURVE ( 'NONE', #4577, #2264, #6564, .T. ) ; +#4996 = LINE ( 'NONE', #14840, #8621 ) ; +#4997 = ORIENTED_EDGE ( 'NONE', *, *, #13828, .T. ) ; +#4998 = ORIENTED_EDGE ( 'NONE', *, *, #3414, .F. ) ; +#4999 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, 9.550000000000000700 ) ) ; +#5000 = ADVANCED_FACE ( 'NONE', ( #4639 ), #4491, .F. ) ; +#5001 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 1.637941840314110200, 2.949999999999999700 ) ) ; +#5002 = ORIENTED_EDGE ( 'NONE', *, *, #5449, .T. ) ; +#5004 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.195440985631454300E-016 ) ) ; +#5003 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5005 = VERTEX_POINT ( 'NONE', #6954 ) ; +#5006 = EDGE_CURVE ( 'NONE', #10812, #10116, #7510, .T. ) ; +#5007 = LINE ( 'NONE', #5746, #1371 ) ; +#5008 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 5.825000000000002000 ) ) ; +#5009 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999952400, 0.4000000000000000200, 5.050000000000000700 ) ) ; +#5010 = LINE ( 'NONE', #3796, #1759 ) ; +#5011 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.3999999999999999700, 3.649999999999999500 ) ) ; +#5012 = ADVANCED_FACE ( 'NONE', ( #4256 ), #5714, .F. ) ; +#5013 = FACE_OUTER_BOUND ( 'NONE', #9940, .T. ) ; +#5014 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999890200, 0.4000000000000000200, -1.849999999999998800 ) ) ; +#5015 = ORIENTED_EDGE ( 'NONE', *, *, #13907, .F. ) ; +#5016 = PLANE ( 'NONE', #12465 ) ; +#5017 = EDGE_CURVE ( 'NONE', #3036, #9162, #6751, .T. ) ; +#5018 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#5019 = CARTESIAN_POINT ( 'NONE', ( -7.627398806512152500, 3.129277334261816100, -3.081999999999999000 ) ) ; +#5020 = VECTOR ( 'NONE', #5611, 1000.000000000000000 ) ; +#5021 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.104919411450195700E-016 ) ) ; +#5022 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#5023 = EDGE_CURVE ( 'NONE', #5728, #15580, #3688, .T. ) ; +#5024 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#5025 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#5026 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#5027 = ORIENTED_EDGE ( 'NONE', *, *, #14569, .F. ) ; +#5028 = ORIENTED_EDGE ( 'NONE', *, *, #4624, .F. ) ; +#5029 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000300, 0.0000000000000000000, 2.949999999999999300 ) ) ; +#5030 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#5031 = ORIENTED_EDGE ( 'NONE', *, *, #6045, .F. ) ; +#5032 = VECTOR ( 'NONE', #2055, 1000.000000000000000 ) ; +#5033 = ORIENTED_EDGE ( 'NONE', *, *, #12828, .F. ) ; +#5034 = ORIENTED_EDGE ( 'NONE', *, *, #5937, .F. ) ; +#5035 = EDGE_CURVE ( 'NONE', #13558, #6300, #5405, .T. ) ; +#5036 = EDGE_CURVE ( 'NONE', #7375, #13467, #10734, .T. ) ; +#5037 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 6.100000000000001400 ) ) ; +#5038 = ORIENTED_EDGE ( 'NONE', *, *, #12454, .F. ) ; +#5039 = LINE ( 'NONE', #11544, #4837 ) ; +#5040 = VECTOR ( 'NONE', #7182, 1000.000000000000000 ) ; +#5041 = EDGE_LOOP ( 'NONE', ( #1562, #7452, #10113, #7842 ) ) ; +#5042 = ORIENTED_EDGE ( 'NONE', *, *, #363, .F. ) ; +#5043 = PLANE ( 'NONE', #14937 ) ; +#5044 = ADVANCED_FACE ( 'NONE', ( #9590 ), #8439, .T. ) ; +#5045 = ORIENTED_EDGE ( 'NONE', *, *, #14183, .T. ) ; +#5046 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4232 ) ) ; +#5047 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5048 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999991400, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#5049 = EDGE_LOOP ( 'NONE', ( #6696, #7294, #3160, #13750, #14641, #7426 ) ) ; +#5050 = VECTOR ( 'NONE', #7462, 1000.000000000000000 ) ; +#5051 = PLANE ( 'NONE', #7082 ) ; +#5052 = ORIENTED_EDGE ( 'NONE', *, *, #9028, .F. ) ; +#5053 = AXIS2_PLACEMENT_3D ( 'NONE', #746, #5565, #8021 ) ; +#5054 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.0000000000000000000, 2.949999999999999300 ) ) ; +#5055 = EDGE_LOOP ( 'NONE', ( #5793, #7059, #7299, #4610 ) ) ; +#5056 = VECTOR ( 'NONE', #15340, 1000.000000000000000 ) ; +#5057 = FACE_OUTER_BOUND ( 'NONE', #7666, .T. ) ; +#5058 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, -0.0000000000000000000, -2.625000000000000400 ) ) ; +#5059 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5060 = ORIENTED_EDGE ( 'NONE', *, *, #8317, .F. ) ; +#5061 = ADVANCED_FACE ( 'NONE', ( #1005 ), #7263, .F. ) ; +#5062 = EDGE_CURVE ( 'NONE', #2358, #12247, #2713, .T. ) ; +#5063 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5064 = VERTEX_POINT ( 'NONE', #13455 ) ; +#5065 = VECTOR ( 'NONE', #5444, 1000.000000000000000 ) ; +#5066 = EDGE_CURVE ( 'NONE', #6546, #6578, #15287, .T. ) ; +#5067 = VERTEX_POINT ( 'NONE', #3614 ) ; +#5068 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5069 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5070 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5071 = FACE_OUTER_BOUND ( 'NONE', #14190, .T. ) ; +#5072 = LINE ( 'NONE', #2431, #9094 ) ; +#5073 = AXIS2_PLACEMENT_3D ( 'NONE', #8211, #3239, #11748 ) ; +#5074 = PLANE ( 'NONE', #3015 ) ; +#5075 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5076 = AXIS2_PLACEMENT_3D ( 'NONE', #9114, #568, #7994 ) ; +#5077 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5078 = ADVANCED_FACE ( 'NONE', ( #2326 ), #7413, .F. ) ; +#5079 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 0.7999999999999977100, 9.090000000000007000 ) ) ; +#5080 = LINE ( 'NONE', #11302, #10795 ) ; +#5081 = ORIENTED_EDGE ( 'NONE', *, *, #15156, .T. ) ; +#5082 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 5.050000000000000700 ) ) ; +#5083 = LINE ( 'NONE', #13921, #3175 ) ; +#5084 = LINE ( 'NONE', #12776, #12870 ) ; +#5085 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5086 = EDGE_CURVE ( 'NONE', #5511, #143, #7136, .T. ) ; +#5087 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 2.050000000000001600 ) ) ; +#5088 = ORIENTED_EDGE ( 'NONE', *, *, #13592, .F. ) ; +#5089 = EDGE_CURVE ( 'NONE', #1782, #4217, #13187, .T. ) ; +#5090 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, -0.9499999999999990700 ) ) ; +#5091 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000004300, 0.4000000000000000200, 7.149999999999996800 ) ) ; +#5092 = ORIENTED_EDGE ( 'NONE', *, *, #4782, .F. ) ; +#5093 = ORIENTED_EDGE ( 'NONE', *, *, #3486, .F. ) ; +#5094 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5095 = VECTOR ( 'NONE', #6381, 1000.000000000000000 ) ; +#5096 = ORIENTED_EDGE ( 'NONE', *, *, #5487, .T. ) ; +#5097 = ORIENTED_EDGE ( 'NONE', *, *, #520, .F. ) ; +#5098 = AXIS2_PLACEMENT_3D ( 'NONE', #2710, #161, #14692 ) ; +#5099 = PLANE ( 'NONE', #1870 ) ; +#5100 = VECTOR ( 'NONE', #935, 1000.000000000000000 ) ; +#5101 = VECTOR ( 'NONE', #12941, 1000.000000000000000 ) ; +#5102 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999936400, 0.4000000000000000200, 3.550000000000001200 ) ) ; +#5103 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5104 = CARTESIAN_POINT ( 'NONE', ( -7.852000000000001200, 3.129277334261816500, 9.067398806512153800 ) ) ; +#5105 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 5.050000000000002500 ) ) ; +#5107 = SURFACE_SIDE_STYLE ('',( #14208 ) ) ; +#5106 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5108 = EDGE_LOOP ( 'NONE', ( #11034, #1369, #1327, #6530 ) ) ; +#5109 = EDGE_CURVE ( 'NONE', #12074, #9421, #13575, .T. ) ; +#5110 = ORIENTED_EDGE ( 'NONE', *, *, #4847, .F. ) ; +#5111 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000500, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#5112 = PLANE ( 'NONE', #11723 ) ; +#5113 = LINE ( 'NONE', #4449, #330 ) ; +#5114 = ORIENTED_EDGE ( 'NONE', *, *, #9730, .F. ) ; +#5115 = EDGE_LOOP ( 'NONE', ( #316, #7317, #15483, #14053 ) ) ; +#5116 = ORIENTED_EDGE ( 'NONE', *, *, #3380, .F. ) ; +#5117 = VECTOR ( 'NONE', #2032, 1000.000000000000000 ) ; +#5118 = FACE_OUTER_BOUND ( 'NONE', #11133, .T. ) ; +#5119 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000015300, 0.8000000000000000400, 5.049999999999997200 ) ) ; +#5120 = EDGE_CURVE ( 'NONE', #8838, #13272, #14913, .T. ) ; +#5121 = AXIS2_PLACEMENT_3D ( 'NONE', #4944, #2632, #11171 ) ; +#5122 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#5124 = ORIENTED_EDGE ( 'NONE', *, *, #8556, .F. ) ; +#5123 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5125 = ORIENTED_EDGE ( 'NONE', *, *, #4877, .F. ) ; +#5126 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5127 = ORIENTED_EDGE ( 'NONE', *, *, #1882, .T. ) ; +#5128 = ADVANCED_FACE ( 'NONE', ( #2917 ), #5984, .T. ) ; +#5129 = VECTOR ( 'NONE', #7496, 1000.000000000000000 ) ; +#5130 = EDGE_LOOP ( 'NONE', ( #6078, #2997, #5708, #11390 ) ) ; +#5131 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5132 = ORIENTED_EDGE ( 'NONE', *, *, #9624, .F. ) ; +#5133 = PLANE ( 'NONE', #1752 ) ; +#5134 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#5135 = LINE ( 'NONE', #11612, #4380 ) ; +#5136 = FACE_OUTER_BOUND ( 'NONE', #10207, .T. ) ; +#5137 = EDGE_CURVE ( 'NONE', #10646, #4159, #8464, .T. ) ; +#5138 = EDGE_CURVE ( 'NONE', #6108, #9911, #1189, .T. ) ; +#5139 = ORIENTED_EDGE ( 'NONE', *, *, #14090, .T. ) ; +#5140 = VERTEX_POINT ( 'NONE', #1264 ) ; +#5141 = ORIENTED_EDGE ( 'NONE', *, *, #12529, .F. ) ; +#5142 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5143 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5144 = ADVANCED_FACE ( 'NONE', ( #14159 ), #4, .F. ) ; +#5145 = VERTEX_POINT ( 'NONE', #9751 ) ; +#5146 = EDGE_CURVE ( 'NONE', #11235, #5583, #7892, .T. ) ; +#5147 = ORIENTED_EDGE ( 'NONE', *, *, #3028, .T. ) ; +#5148 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 8.650000000000000400 ) ) ; +#5149 = VECTOR ( 'NONE', #7354, 1000.000000000000000 ) ; +#5150 = FACE_OUTER_BOUND ( 'NONE', #8858, .T. ) ; +#5151 = VECTOR ( 'NONE', #2435, 1000.000000000000000 ) ; +#5152 = CARTESIAN_POINT ( 'NONE', ( 7.592667204855684000, 3.140440641471889700, -2.806077315359350800 ) ) ; +#5153 = ORIENTED_EDGE ( 'NONE', *, *, #13706, .T. ) ; +#5154 = VERTEX_POINT ( 'NONE', #14789 ) ; +#5155 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 7.150000000000000400 ) ) ; +#5156 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 3.374999999999999600 ) ) ; +#5157 = EDGE_CURVE ( 'NONE', #6993, #15759, #10334, .T. ) ; +#5158 = CARTESIAN_POINT ( 'NONE', ( -7.637420392015690700, 3.101144252825625900, 9.051952621458760000 ) ) ; +#5159 = ORIENTED_EDGE ( 'NONE', *, *, #8253, .F. ) ; +#5160 = ADVANCED_FACE ( 'NONE', ( #4244 ), #8082, .F. ) ; +#5161 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 1.600000000000000800 ) ) ; +#5162 = ORIENTED_EDGE ( 'NONE', *, *, #9416, .F. ) ; +#5163 = ORIENTED_EDGE ( 'NONE', *, *, #15332, .F. ) ; +#5164 = ORIENTED_EDGE ( 'NONE', *, *, #5484, .F. ) ; +#5166 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.3999999999999999700, 4.049999999999999800 ) ) ; +#5165 = PLANE ( 'NONE', #6538 ) ; +#5167 = VECTOR ( 'NONE', #11224, 1000.000000000000000 ) ; +#5168 = FACE_OUTER_BOUND ( 'NONE', #14753, .T. ) ; +#5169 = SURFACE_STYLE_FILL_AREA ( #13275 ) ; +#5170 = LINE ( 'NONE', #83, #9189 ) ; +#5171 = DIRECTION ( 'NONE', ( -3.690901012716604900E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5172 = ORIENTED_EDGE ( 'NONE', *, *, #5563, .F. ) ; +#5173 = VERTEX_POINT ( 'NONE', #2640 ) ; +#5174 = AXIS2_PLACEMENT_3D ( 'NONE', #14805, #5126, #10062 ) ; +#5175 = ORIENTED_EDGE ( 'NONE', *, *, #854, .T. ) ; +#5176 = PLANE ( 'NONE', #12161 ) ; +#5177 = VECTOR ( 'NONE', #14917, 1000.000000000000000 ) ; +#5178 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#5179 = VECTOR ( 'NONE', #15572, 1000.000000000000000 ) ; +#5180 = VECTOR ( 'NONE', #13440, 1000.000000000000000 ) ; +#5181 = VECTOR ( 'NONE', #14218, 1000.000000000000000 ) ; +#5182 = VECTOR ( 'NONE', #14041, 1000.000000000000000 ) ; +#5183 = VECTOR ( 'NONE', #9326, 1000.000000000000000 ) ; +#5184 = EDGE_CURVE ( 'NONE', #772, #9017, #13380, .T. ) ; +#5185 = VECTOR ( 'NONE', #11889, 1000.000000000000000 ) ; +#5186 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, -0.1749999999999989300 ) ) ; +#5187 = ORIENTED_EDGE ( 'NONE', *, *, #7190, .F. ) ; +#5188 = VERTEX_POINT ( 'NONE', #11236 ) ; +#5189 = EDGE_CURVE ( 'NONE', #13035, #13154, #1757, .T. ) ; +#5190 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5191 = EDGE_LOOP ( 'NONE', ( #1277, #411, #13120, #14273, #9020, #12838 ) ) ; +#5192 = EDGE_CURVE ( 'NONE', #12106, #7726, #10153, .T. ) ; +#5193 = VERTEX_POINT ( 'NONE', #5111 ) ; +#5194 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 1.637941840314110200, 4.049999999999999800 ) ) ; +#5195 = FILL_AREA_STYLE ('',( #1655 ) ) ; +#5196 = VECTOR ( 'NONE', #2515, 1000.000000000000000 ) ; +#5197 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 0.5500000000000022600 ) ) ; +#5198 = LINE ( 'NONE', #6261, #1357 ) ; +#5199 = FACE_OUTER_BOUND ( 'NONE', #4101, .T. ) ; +#5200 = AXIS2_PLACEMENT_3D ( 'NONE', #9526, #2214, #14783 ) ; +#5201 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000001400, 3.128752156770256300, 9.067398903010504400 ) ) ; +#5202 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, -0.9499999999999990700 ) ) ; +#5203 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5204 = FACE_OUTER_BOUND ( 'NONE', #12641, .T. ) ; +#5205 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, -2.899999999999999900 ) ) ; +#5206 = CARTESIAN_POINT ( 'NONE', ( 7.611952621458756100, 3.101144252825625400, -2.867420392015688400 ) ) ; +#5207 = ORIENTED_EDGE ( 'NONE', *, *, #15645, .F. ) ; +#5208 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5209 = EDGE_CURVE ( 'NONE', #5241, #7856, #7322, .T. ) ; +#5210 = FACE_OUTER_BOUND ( 'NONE', #14724, .T. ) ; +#5211 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.4000000000000000200, 2.649999999999999500 ) ) ; +#5212 = ADVANCED_FACE ( 'NONE', ( #4452 ), #9949, .F. ) ; +#5213 = SURFACE_STYLE_FILL_AREA ( #2947 ) ; +#5214 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999875300, -0.0000000000000000000, -2.449999999999998800 ) ) ; +#5215 = DIRECTION ( 'NONE', ( -1.807003620809173900E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#5216 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, -1.850000000000000500 ) ) ; +#5217 = CYLINDRICAL_SURFACE ( 'NONE', #14102, 0.2749999999999991900 ) ; +#5218 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5219 = EDGE_CURVE ( 'NONE', #5925, #3433, #4818, .T. ) ; +#5220 = ORIENTED_EDGE ( 'NONE', *, *, #3939, .F. ) ; +#5221 = ORIENTED_EDGE ( 'NONE', *, *, #1409, .T. ) ; +#5222 = AXIS2_PLACEMENT_3D ( 'NONE', #8030, #702, #14291 ) ; +#5223 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000038000, 0.8000000000000000400, -1.850000000000001000 ) ) ; +#5224 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5225 = ADVANCED_FACE ( 'NONE', ( #14335 ), #9948, .F. ) ; +#5226 = ORIENTED_EDGE ( 'NONE', *, *, #7181, .T. ) ; +#5227 = LINE ( 'NONE', #12050, #6376 ) ; +#5228 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5229 = VERTEX_POINT ( 'NONE', #11080 ) ; +#5230 = VECTOR ( 'NONE', #15514, 1000.000000000000000 ) ; +#5231 = LINE ( 'NONE', #13102, #5040 ) ; +#5232 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5233 = EDGE_CURVE ( 'NONE', #9408, #11324, #12986, .T. ) ; +#5234 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5235 = AXIS2_PLACEMENT_3D ( 'NONE', #6509, #459, #2966 ) ; +#5236 = PLANE ( 'NONE', #6351 ) ; +#5237 = VERTEX_POINT ( 'NONE', #11125 ) ; +#5238 = VERTEX_POINT ( 'NONE', #12320 ) ; +#5239 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000002500, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#5240 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#5241 = VERTEX_POINT ( 'NONE', #254 ) ; +#5242 = EDGE_CURVE ( 'NONE', #6723, #11122, #6939, .T. ) ; +#5243 = ADVANCED_FACE ( 'NONE', ( #10925 ), #14953, .T. ) ; +#5244 = LINE ( 'NONE', #10206, #2538 ) ; +#5245 = VERTEX_POINT ( 'NONE', #5058 ) ; +#5246 = EDGE_LOOP ( 'NONE', ( #15049, #4382, #7783, #2103, #1183, #11013 ) ) ; +#5247 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.3999999999999999700, 4.750000000000000000 ) ) ; +#5248 = VERTEX_POINT ( 'NONE', #5223 ) ; +#5249 = LINE ( 'NONE', #2547, #12842 ) ; +#5250 = LINE ( 'NONE', #7511, #457 ) ; +#5251 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 8.650000000000003900 ) ) ; +#5252 = VERTEX_POINT ( 'NONE', #5008 ) ; +#5253 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 6.100000000000001400 ) ) ; +#5254 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5255 = EDGE_CURVE ( 'NONE', #13221, #8695, #423, .T. ) ; +#5256 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 2.050000000000001600 ) ) ; +#5257 = VERTEX_POINT ( 'NONE', #6404 ) ; +#5258 = LINE ( 'NONE', #1857, #9834 ) ; +#5259 = ORIENTED_EDGE ( 'NONE', *, *, #10377, .T. ) ; +#5260 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 8.825000000000001100 ) ) ; +#5261 = ORIENTED_EDGE ( 'NONE', *, *, #12893, .T. ) ; +#5262 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, -0.3500000000000004800 ) ) ; +#5263 = VECTOR ( 'NONE', #5882, 1000.000000000000000 ) ; +#5264 = LINE ( 'NONE', #3090, #7757 ) ; +#5265 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5266 = AXIS2_PLACEMENT_3D ( 'NONE', #15539, #14443, #2397 ) ; +#5267 = PLANE ( 'NONE', #4541 ) ; +#5268 = ORIENTED_EDGE ( 'NONE', *, *, #11124, .T. ) ; +#5269 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#5270 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5271 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5272 = AXIS2_PLACEMENT_3D ( 'NONE', #4073, #10240, #11366 ) ; +#5273 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5274 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#5275 = ORIENTED_EDGE ( 'NONE', *, *, #819, .T. ) ; +#5276 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000014900, 0.8000000000000000400, 4.149999999999995900 ) ) ; +#5277 = PLANE ( 'NONE', #5235 ) ; +#5278 = VECTOR ( 'NONE', #7827, 1000.000000000000000 ) ; +#5279 = VECTOR ( 'NONE', #5501, 1000.000000000000000 ) ; +#5280 = EDGE_CURVE ( 'NONE', #12247, #12072, #3674, .T. ) ; +#5281 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5282 = EDGE_CURVE ( 'NONE', #8009, #9378, #58, .T. ) ; +#5283 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5284 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5285 = FACE_OUTER_BOUND ( 'NONE', #12567, .T. ) ; +#5286 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#5287 = ORIENTED_EDGE ( 'NONE', *, *, #12953, .F. ) ; +#5288 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.195440985631456300E-016 ) ) ; +#5289 = FACE_OUTER_BOUND ( 'NONE', #2923, .T. ) ; +#5290 = LINE ( 'NONE', #2444, #13851 ) ; +#5291 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4466 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13871, #2843, #14881 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5292 = ORIENTED_EDGE ( 'NONE', *, *, #5035, .T. ) ; +#5293 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.3999999999999999700, 1.849999999999999900 ) ) ; +#5294 = PLANE ( 'NONE', #4651 ) ; +#5295 = CARTESIAN_POINT ( 'NONE', ( 7.852000000000001200, 3.050000000000000700, -2.872928932188135900 ) ) ; +#5296 = ORIENTED_EDGE ( 'NONE', *, *, #3091, .T. ) ; +#5297 = LINE ( 'NONE', #10916, #14803 ) ; +#5298 = ORIENTED_EDGE ( 'NONE', *, *, #7906, .F. ) ; +#5299 = EDGE_CURVE ( 'NONE', #6653, #5928, #617, .T. ) ; +#5300 = ADVANCED_FACE ( 'NONE', ( #6549 ), #12652, .T. ) ; +#5301 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, -15.05858178898088800, -6.900000000000000400 ) ) ; +#5302 = VECTOR ( 'NONE', #60, 1000.000000000000000 ) ; +#5303 = FACE_OUTER_BOUND ( 'NONE', #712, .T. ) ; +#5304 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 5.650000000000000400 ) ) ; +#5305 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, -1.125000000000000700 ) ) ; +#5306 = ADVANCED_FACE ( 'NONE', ( #12607 ), #7789, .F. ) ; +#5307 = DIRECTION ( 'NONE', ( 3.097720492815726700E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5308 = ORIENTED_EDGE ( 'NONE', *, *, #15490, .F. ) ; +#5309 = AXIS2_PLACEMENT_3D ( 'NONE', #15027, #13813, #13866 ) ; +#5310 = VERTEX_POINT ( 'NONE', #510 ) ; +#5311 = CYLINDRICAL_SURFACE ( 'NONE', #5053, 0.2749999999999991900 ) ; +#5312 = ORIENTED_EDGE ( 'NONE', *, *, #6987, .T. ) ; +#5313 = FILL_AREA_STYLE_COLOUR ( '', #12175 ) ; +#5314 = CARTESIAN_POINT ( 'NONE', ( -6.050000000000001600, 3.149999999999999900, 7.690000000000001300 ) ) ; +#5315 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5316 = LINE ( 'NONE', #9649, #2065 ) ; +#5317 = LINE ( 'NONE', #9762, #1097 ) ; +#5319 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 0.7999999999999767300, -3.080000000000009400 ) ) ; +#5318 = PLANE ( 'NONE', #10915 ) ; +#5320 = ORIENTED_EDGE ( 'NONE', *, *, #13541, .T. ) ; +#5321 = EDGE_CURVE ( 'NONE', #13091, #11898, #6173, .T. ) ; +#5322 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, -0.9499999999999990700 ) ) ; +#5323 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5324 = ORIENTED_EDGE ( 'NONE', *, *, #12964, .F. ) ; +#5325 = EDGE_LOOP ( 'NONE', ( #11037, #6775, #5308, #10484 ) ) ; +#5326 = VERTEX_POINT ( 'NONE', #10111 ) ; +#5327 = ORIENTED_EDGE ( 'NONE', *, *, #10283, .F. ) ; +#5328 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#5329 = EDGE_CURVE ( 'NONE', #1364, #10247, #15458, .T. ) ; +#5330 = VECTOR ( 'NONE', #9465, 1000.000000000000000 ) ; +#5331 = LINE ( 'NONE', #15697, #15406 ) ; +#5332 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, 0.7000000000000009500, -4.000000000000000000 ) ) ; +#5333 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 8.825000000000001100 ) ) ; +#5334 = LINE ( 'NONE', #2592, #7438 ) ; +#5335 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999968400, 0.0000000000000000000, 6.550000000000002500 ) ) ; +#5336 = ORIENTED_EDGE ( 'NONE', *, *, #4433, .T. ) ; +#5337 = ORIENTED_EDGE ( 'NONE', *, *, #13884, .F. ) ; +#5338 = ORIENTED_EDGE ( 'NONE', *, *, #7619, .T. ) ; +#5339 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 5.650000000000000400 ) ) ; +#5340 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7618, 'distance_accuracy_value', 'NONE'); +#5341 = ORIENTED_EDGE ( 'NONE', *, *, #8424, .T. ) ; +#5342 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 1.637941840314110200, 2.949999999999999300 ) ) ; +#5343 = PLANE ( 'NONE', #10358 ) ; +#5344 = ORIENTED_EDGE ( 'NONE', *, *, #475, .T. ) ; +#5345 = EDGE_CURVE ( 'NONE', #8564, #2673, #2903, .T. ) ; +#5346 = EDGE_CURVE ( 'NONE', #6438, #2994, #9023, .T. ) ; +#5347 = PLANE ( 'NONE', #9944 ) ; +#5348 = LINE ( 'NONE', #7193, #766 ) ; +#5349 = FACE_OUTER_BOUND ( 'NONE', #7225, .T. ) ; +#5350 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5351 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#5352 = VERTEX_POINT ( 'NONE', #6508 ) ; +#5353 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 1.149999999999999900 ) ) ; +#5354 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#5355 = VERTEX_POINT ( 'NONE', #2801 ) ; +#5356 = AXIS2_PLACEMENT_3D ( 'NONE', #3346, #14465, #3390 ) ; +#5357 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000004100, -15.05858178898088800, -4.000000000000000000 ) ) ; +#5358 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#5359 = ORIENTED_EDGE ( 'NONE', *, *, #9863, .T. ) ; +#5360 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 9.550000000000000700 ) ) ; +#5361 = AXIS2_PLACEMENT_3D ( 'NONE', #6602, #2904, #7835 ) ; +#5362 = ORIENTED_EDGE ( 'NONE', *, *, #14453, .F. ) ; +#5363 = CARTESIAN_POINT ( 'NONE', ( 7.639702065901541800, 3.096076976721357600, -2.844815129928838400 ) ) ; +#5364 = LINE ( 'NONE', #7362, #10895 ) ; +#5365 = FACE_OUTER_BOUND ( 'NONE', #9106, .T. ) ; +#5366 = FACE_OUTER_BOUND ( 'NONE', #5390, .T. ) ; +#5367 = PLANE ( 'NONE', #12107 ) ; +#5368 = VECTOR ( 'NONE', #1243, 1000.000000000000000 ) ; +#5369 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999765700, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#5370 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 0.5500000000000010400 ) ) ; +#5371 = VERTEX_POINT ( 'NONE', #5276 ) ; +#5372 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #2957 ) ; +#5373 = EDGE_CURVE ( 'NONE', #9421, #14815, #8259, .T. ) ; +#5374 = EDGE_LOOP ( 'NONE', ( #9814, #7720, #3397, #12398, #5895, #11328 ) ) ; +#5375 = PLANE ( 'NONE', #3010 ) ; +#5376 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5377 = EDGE_LOOP ( 'NONE', ( #12653, #465, #13889, #3238, #153, #12498 ) ) ; +#5378 = LINE ( 'NONE', #12298, #14500 ) ; +#5379 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, -15.05858178898088800, -8.800000000000000700 ) ) ; +#5380 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#5381 = FACE_OUTER_BOUND ( 'NONE', #2748, .T. ) ; +#5382 = VECTOR ( 'NONE', #8447, 1000.000000000000000 ) ; +#5383 = AXIS2_PLACEMENT_3D ( 'NONE', #5014, #12228, #14631 ) ; +#5384 = ADVANCED_FACE ( 'NONE', ( #4628 ), #9388, .T. ) ; +#5385 = LINE ( 'NONE', #2341, #11465 ) ; +#5386 = AXIS2_PLACEMENT_3D ( 'NONE', #4035, #9991, #2799 ) ; +#5387 = ORIENTED_EDGE ( 'NONE', *, *, #2086, .T. ) ; +#5388 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, -0.3500000000000013700 ) ) ; +#5389 = ADVANCED_FACE ( 'NONE', ( #9398 ), #8252, .F. ) ; +#5390 = EDGE_LOOP ( 'NONE', ( #12269, #7520, #12539, #13119 ) ) ; +#5391 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5392 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.690901012716608100E-015, 2.683779753520866600E-032 ) ) ; +#5393 = ORIENTED_EDGE ( 'NONE', *, *, #6672, .F. ) ; +#5394 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5395 = PLANE ( 'NONE', #14252 ) ; +#5396 = AXIS2_PLACEMENT_3D ( 'NONE', #1351, #2617, #3869 ) ; +#5397 = VECTOR ( 'NONE', #11785, 1000.000000000000000 ) ; +#5398 = LINE ( 'NONE', #4109, #10528 ) ; +#5399 = EDGE_CURVE ( 'NONE', #12131, #3712, #2511, .T. ) ; +#5400 = EDGE_CURVE ( 'NONE', #10568, #11357, #8652, .T. ) ; +#5401 = CIRCLE ( 'NONE', #12439, 0.2749999999999991900 ) ; +#5402 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000000400, 3.076234407614293800, -2.857408552845519100 ) ) ; +#5403 = VERTEX_POINT ( 'NONE', #3284 ) ; +#5404 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999969800, 0.8000000000000000400, 0.5499999999999997100 ) ) ; +#5405 = CIRCLE ( 'NONE', #6460, 0.2749999999999991900 ) ; +#5406 = CARTESIAN_POINT ( 'NONE', ( 7.817567445684519900, 3.206658047799211700, 9.051930011826955900 ) ) ; +#5407 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#5408 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5409 = LINE ( 'NONE', #5216, #2147 ) ; +#5410 = DIRECTION ( 'NONE', ( 3.690901012716607300E-015, -1.000000000000000000, 6.123233995736767300E-017 ) ) ; +#5411 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 1.104919411450195700E-016 ) ) ; +#5412 = SURFACE_SIDE_STYLE ('',( #1859 ) ) ; +#5413 = VERTEX_POINT ( 'NONE', #15498 ) ; +#5414 = ORIENTED_EDGE ( 'NONE', *, *, #2011, .F. ) ; +#5415 = EDGE_CURVE ( 'NONE', #5403, #7166, #10719, .T. ) ; +#5416 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000000300, -2.879999999999999400 ) ) ; +#5417 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5418 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 6.375000000000000900 ) ) ; +#5419 = ORIENTED_EDGE ( 'NONE', *, *, #946, .T. ) ; +#5420 = SURFACE_STYLE_FILL_AREA ( #9315 ) ; +#5421 = ORIENTED_EDGE ( 'NONE', *, *, #5425, .T. ) ; +#5422 = ORIENTED_EDGE ( 'NONE', *, *, #6178, .F. ) ; +#5423 = CARTESIAN_POINT ( 'NONE', ( -7.627398903010503200, 3.128752156770255900, 9.290000000000000900 ) ) ; +#5424 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, 2.050000000000001600 ) ) ; +#5425 = EDGE_CURVE ( 'NONE', #96, #5355, #11848, .T. ) ; +#5426 = EDGE_LOOP ( 'NONE', ( #2657, #10308, #11694, #758, #169, #8929 ) ) ; +#5427 = VECTOR ( 'NONE', #3394, 1000.000000000000000 ) ; +#5428 = LINE ( 'NONE', #4132, #13994 ) ; +#5429 = AXIS2_PLACEMENT_3D ( 'NONE', #6891, #8122, #12968 ) ; +#5430 = PLANE ( 'NONE', #4110 ) ; +#5431 = ORIENTED_EDGE ( 'NONE', *, *, #10715, .F. ) ; +#5432 = VERTEX_POINT ( 'NONE', #928 ) ; +#5433 = ORIENTED_EDGE ( 'NONE', *, *, #9733, .T. ) ; +#5434 = CYLINDRICAL_SURFACE ( 'NONE', #11099, 0.2500000000000002200 ) ; +#5435 = VERTEX_POINT ( 'NONE', #828 ) ; +#5436 = EDGE_CURVE ( 'NONE', #11555, #11754, #5007, .T. ) ; +#5437 = PLANE ( 'NONE', #1506 ) ; +#5438 = AXIS2_PLACEMENT_3D ( 'NONE', #1302, #5969, #10910 ) ; +#5439 = ORIENTED_EDGE ( 'NONE', *, *, #9123, .T. ) ; +#5440 = CARTESIAN_POINT ( 'NONE', ( 7.627398903010503200, 3.128752156770255900, 9.290000000000000900 ) ) ; +#5441 = LINE ( 'NONE', #13916, #11526 ) ; +#5442 = FACE_OUTER_BOUND ( 'NONE', #2609, .T. ) ; +#5443 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 1.637941840314110200, 4.049999999999999800 ) ) ; +#5444 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#5445 = ADVANCED_FACE ( 'NONE', ( #7498 ), #10678, .F. ) ; +#5446 = CARTESIAN_POINT ( 'NONE', ( 7.849999999999999600, 0.7999999999999767300, -3.080000000000009400 ) ) ; +#5447 = ORIENTED_EDGE ( 'NONE', *, *, #8998, .T. ) ; +#5448 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.8000000000000000400, -2.449999999999998800 ) ) ; +#5449 = EDGE_CURVE ( 'NONE', #15538, #6858, #11107, .T. ) ; +#5450 = AXIS2_PLACEMENT_3D ( 'NONE', #8176, #3262, #15524 ) ; +#5451 = CARTESIAN_POINT ( 'NONE', ( 7.575703978347823900, 3.147979999999999600, -2.795520281879287700 ) ) ; +#5452 = VERTEX_POINT ( 'NONE', #11838 ) ; +#5453 = VECTOR ( 'NONE', #4590, 1000.000000000000000 ) ; +#5454 = ORIENTED_EDGE ( 'NONE', *, *, #11267, .F. ) ; +#5455 = FACE_OUTER_BOUND ( 'NONE', #1860, .T. ) ; +#5456 = CIRCLE ( 'NONE', #8961, 0.2500000000000002200 ) ; +#5457 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, -2.449999999999998800 ) ) ; +#5458 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, -15.05858178898088800, -8.800000000000000700 ) ) ; +#5459 = ADVANCED_FACE ( 'NONE', ( #12222, #11476 ), #2314, .T. ) ; +#5460 = DIRECTION ( 'NONE', ( -1.204669080539449300E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#5461 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5462 = EDGE_CURVE ( 'NONE', #13494, #2678, #12205, .T. ) ; +#5463 = PLANE ( 'NONE', #8648 ) ; +#5464 = DIRECTION ( 'NONE', ( -5.478074134663594500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5465 = ADVANCED_FACE ( 'NONE', ( #9579 ), #14153, .T. ) ; +#5466 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.3999999999999999700, 2.549999999999999800 ) ) ; +#5467 = CARTESIAN_POINT ( 'NONE', ( 7.647982895189701800, 3.073037331497398200, -2.859289567165739200 ) ) ; +#5468 = VECTOR ( 'NONE', #816, 1000.000000000000000 ) ; +#5469 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#5470 = ORIENTED_EDGE ( 'NONE', *, *, #1663, .T. ) ; +#5471 = DIRECTION ( 'NONE', ( -3.097720492815726700E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5472 = FACE_OUTER_BOUND ( 'NONE', #3523, .T. ) ; +#5473 = LINE ( 'NONE', #6794, #2780 ) ; +#5474 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5475 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.3999999999999999700, 2.549999999999999800 ) ) ; +#5476 = VERTEX_POINT ( 'NONE', #2054 ) ; +#5477 = AXIS2_PLACEMENT_3D ( 'NONE', #1990, #5730, #14028 ) ; +#5478 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5479 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5480 = VERTEX_POINT ( 'NONE', #9511 ) ; +#5481 = ORIENTED_EDGE ( 'NONE', *, *, #7768, .T. ) ; +#5482 = FACE_OUTER_BOUND ( 'NONE', #14287, .T. ) ; +#5483 = ORIENTED_EDGE ( 'NONE', *, *, #9367, .T. ) ; +#5484 = EDGE_CURVE ( 'NONE', #7645, #4475, #13363, .T. ) ; +#5485 = VECTOR ( 'NONE', #3083, 1000.000000000000000 ) ; +#5486 = VECTOR ( 'NONE', #5522, 1000.000000000000000 ) ; +#5487 = EDGE_CURVE ( 'NONE', #13418, #11584, #9009, .T. ) ; +#5488 = EDGE_CURVE ( 'NONE', #5944, #13514, #11657, .T. ) ; +#5489 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, -15.05858178898088800, -8.800000000000000700 ) ) ; +#5490 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5491 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.0000000000000000000, 2.949999999999999700 ) ) ; +#5492 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5493 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5494 = ORIENTED_EDGE ( 'NONE', *, *, #248, .F. ) ; +#5495 = LINE ( 'NONE', #2950, #6076 ) ; +#5496 = ORIENTED_EDGE ( 'NONE', *, *, #1269, .F. ) ; +#5497 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5498 = AXIS2_PLACEMENT_3D ( 'NONE', #12391, #5022, #5131 ) ; +#5499 = ORIENTED_EDGE ( 'NONE', *, *, #547, .T. ) ; +#5500 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5501 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5502 = LINE ( 'NONE', #852, #5117 ) ; +#5503 = VECTOR ( 'NONE', #13366, 1000.000000000000000 ) ; +#5504 = CARTESIAN_POINT ( 'NONE', ( 7.817668071082943400, 3.206595997628985700, -2.841952621458757800 ) ) ; +#5505 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.097720492815728600E-016 ) ) ; +#5506 = EDGE_LOOP ( 'NONE', ( #9986, #14209, #5762, #6373 ) ) ; +#5507 = CLOSED_SHELL ( 'NONE', ( #11659, #13590, #12060, #3560, #13213 ) ) ; +#5508 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#5509 = EDGE_CURVE ( 'NONE', #11295, #8669, #3278, .T. ) ; +#5510 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5511 = VERTEX_POINT ( 'NONE', #986 ) ; +#5512 = FACE_OUTER_BOUND ( 'NONE', #10486, .T. ) ; +#5513 = ORIENTED_EDGE ( 'NONE', *, *, #9894, .F. ) ; +#5514 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000002500, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#5515 = ORIENTED_EDGE ( 'NONE', *, *, #8752, .F. ) ; +#5516 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5517 = DIRECTION ( 'NONE', ( 2.762298528625412100E-017, -1.000000000000000000, -3.506355962080744500E-015 ) ) ; +#5518 = LINE ( 'NONE', #384, #2253 ) ; +#5519 = VECTOR ( 'NONE', #4874, 1000.000000000000000 ) ; +#5520 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000007600, 0.7999999999999983800, 9.082928932188135500 ) ) ; +#5521 = EDGE_CURVE ( 'NONE', #15222, #6150, #8068, .T. ) ; +#5522 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5524 = ORIENTED_EDGE ( 'NONE', *, *, #478, .T. ) ; +#5523 = AXIS2_PLACEMENT_3D ( 'NONE', #12179, #2654, #3789 ) ; +#5525 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13887, 'distance_accuracy_value', 'NONE'); +#5526 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5527 = ORIENTED_EDGE ( 'NONE', *, *, #4554, .F. ) ; +#5528 = ORIENTED_EDGE ( 'NONE', *, *, #3631, .F. ) ; +#5529 = DIRECTION ( 'NONE', ( 1.807003620809173900E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5530 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5531 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#5532 = VERTEX_POINT ( 'NONE', #1242 ) ; +#5533 = ORIENTED_EDGE ( 'NONE', *, *, #6360, .T. ) ; +#5534 = CARTESIAN_POINT ( 'NONE', ( -7.580976310729377900, 3.137420392015689800, 9.041144252825628100 ) ) ; +#5535 = ORIENTED_EDGE ( 'NONE', *, *, #3915, .F. ) ; +#5536 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, -2.449999999999998800 ) ) ; +#5537 = VERTEX_POINT ( 'NONE', #9050 ) ; +#5538 = LINE ( 'NONE', #4616, #15037 ) ; +#5539 = EDGE_CURVE ( 'NONE', #6709, #2426, #1948, .T. ) ; +#5540 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.0000000000000000000, 2.949999999999999300 ) ) ; +#5541 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 1.149999999999999900 ) ) ; +#5542 = ORIENTED_EDGE ( 'NONE', *, *, #11654, .T. ) ; +#5543 = ADVANCED_FACE ( 'NONE', ( #409 ), #877, .T. ) ; +#5544 = ORIENTED_EDGE ( 'NONE', *, *, #10805, .F. ) ; +#5545 = ORIENTED_EDGE ( 'NONE', *, *, #1522, .T. ) ; +#5546 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5547 = EDGE_CURVE ( 'NONE', #8591, #4971, #12589, .T. ) ; +#5548 = ADVANCED_FACE ( 'NONE', ( #6352 ), #4715, .T. ) ; +#5549 = EDGE_LOOP ( 'NONE', ( #15241, #2058, #13643, #14139, #7055, #12373 ) ) ; +#5550 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 8.650000000000000400 ) ) ; +#5551 = ORIENTED_EDGE ( 'NONE', *, *, #15106, .F. ) ; +#5552 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5553 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5554 = LINE ( 'NONE', #2526, #1912 ) ; +#5555 = LINE ( 'NONE', #6483, #2479 ) ; +#5556 = VECTOR ( 'NONE', #1258, 1000.000000000000000 ) ; +#5557 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#5558 = VECTOR ( 'NONE', #14716, 1000.000000000000000 ) ; +#5559 = ORIENTED_EDGE ( 'NONE', *, *, #14944, .T. ) ; +#5560 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999967700, 0.0000000000000000000, 5.649999999999999500 ) ) ; +#5561 = ORIENTED_EDGE ( 'NONE', *, *, #12330, .T. ) ; +#5562 = EDGE_CURVE ( 'NONE', #1554, #15393, #6535, .T. ) ; +#5563 = EDGE_CURVE ( 'NONE', #2426, #5896, #46, .T. ) ; +#5564 = EDGE_LOOP ( 'NONE', ( #1844, #3319, #1979, #11413 ) ) ; +#5565 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5566 = LINE ( 'NONE', #7704, #2294 ) ; +#5567 = LINE ( 'NONE', #4544, #10319 ) ; +#5568 = CIRCLE ( 'NONE', #15278, 0.2749999999999991900 ) ; +#5569 = LINE ( 'NONE', #5604, #5181 ) ; +#5570 = VECTOR ( 'NONE', #3075, 1000.000000000000000 ) ; +#5571 = VECTOR ( 'NONE', #10379, 1000.000000000000000 ) ; +#5572 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5573 = SURFACE_STYLE_USAGE ( .BOTH. , #12829 ) ; +#5574 = VECTOR ( 'NONE', #5800, 1000.000000000000000 ) ; +#5575 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5576 = AXIS2_PLACEMENT_3D ( 'NONE', #11200, #11106, #9773 ) ; +#5577 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 8.650000000000000400 ) ) ; +#5578 = VERTEX_POINT ( 'NONE', #12145 ) ; +#5579 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#5580 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5581 = ORIENTED_EDGE ( 'NONE', *, *, #1143, .F. ) ; +#5582 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6098 ), #6399 ) ; +#5583 = VERTEX_POINT ( 'NONE', #38 ) ; +#5584 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000004300, 0.8000000000000000400, 8.049999999999995400 ) ) ; +#5585 = LINE ( 'NONE', #7395, #9759 ) ; +#5586 = PLANE ( 'NONE', #2992 ) ; +#5587 = VECTOR ( 'NONE', #9286, 1000.000000000000000 ) ; +#5588 = LINE ( 'NONE', #7216, #4444 ) ; +#5589 = EDGE_CURVE ( 'NONE', #11189, #5773, #4805, .T. ) ; +#5590 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#5591 = FACE_OUTER_BOUND ( 'NONE', #5377, .T. ) ; +#5592 = CARTESIAN_POINT ( 'NONE', ( -7.611952621458756100, 3.101144252825626300, 9.077420392015691100 ) ) ; +#5594 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.0000000000000000000, 1.849999999999999900 ) ) ; +#5593 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000004300, 0.4000000000000000200, 7.150000000000000400 ) ) ; +#5595 = ORIENTED_EDGE ( 'NONE', *, *, #4630, .T. ) ; +#5596 = EDGE_CURVE ( 'NONE', #14330, #5432, #5766, .T. ) ; +#5597 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 2.649999999999999500 ) ) ; +#5598 = AXIS2_PLACEMENT_3D ( 'NONE', #10817, #7215, #12029 ) ; +#5599 = LINE ( 'NONE', #11521, #12418 ) ; +#5600 = AXIS2_PLACEMENT_3D ( 'NONE', #672, #4308, #11484 ) ; +#5601 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5602 = LINE ( 'NONE', #3912, #2721 ) ; +#5603 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999995000, 0.4000000000000000200, 8.650000000000003900 ) ) ; +#5604 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000014900, 0.4000000000000000200, 4.149999999999995900 ) ) ; +#5605 = CARTESIAN_POINT ( 'NONE', ( 7.565520379342617100, 3.149999999999999900, 9.016234407614298600 ) ) ; +#5606 = ORIENTED_EDGE ( 'NONE', *, *, #9292, .T. ) ; +#5607 = EDGE_LOOP ( 'NONE', ( #8818, #2694, #13945, #3398 ) ) ; +#5608 = AXIS2_PLACEMENT_3D ( 'NONE', #6905, #14180, #15377 ) ; +#5609 = PLANE ( 'NONE', #773 ) ; +#5610 = EDGE_CURVE ( 'NONE', #8029, #10796, #13755, .T. ) ; +#5611 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5612 = ORIENTED_EDGE ( 'NONE', *, *, #2773, .T. ) ; +#5613 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5614 = FACE_OUTER_BOUND ( 'NONE', #12673, .T. ) ; +#5615 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5616 = ORIENTED_EDGE ( 'NONE', *, *, #8605, .T. ) ; +#5617 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#5618 = VERTEX_POINT ( 'NONE', #14511 ) ; +#5619 = LINE ( 'NONE', #3502, #11691 ) ; +#5620 = LINE ( 'NONE', #10357, #9613 ) ; +#5621 = AXIS2_PLACEMENT_3D ( 'NONE', #13295, #7277, #2335 ) ; +#5622 = VERTEX_POINT ( 'NONE', #10842 ) ; +#5623 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 3.506355962080744500E-015 ) ) ; +#5624 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5625 = ADVANCED_FACE ( 'NONE', ( #8242 ), #9676, .F. ) ; +#5626 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5627 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5628 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5629 = ORIENTED_EDGE ( 'NONE', *, *, #733, .T. ) ; +#5630 = ADVANCED_FACE ( 'NONE', ( #6156 ), #8566, .F. ) ; +#5631 = VECTOR ( 'NONE', #845, 1000.000000000000000 ) ; +#5632 = ORIENTED_EDGE ( 'NONE', *, *, #1651, .T. ) ; +#5633 = ORIENTED_EDGE ( 'NONE', *, *, #2569, .F. ) ; +#5634 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000001600, -3.080000000000001000 ) ) ; +#5635 = ORIENTED_EDGE ( 'NONE', *, *, #6408, .T. ) ; +#5636 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5637 = LINE ( 'NONE', #8390, #14381 ) ; +#5638 = FACE_OUTER_BOUND ( 'NONE', #13322, .T. ) ; +#5639 = EDGE_CURVE ( 'NONE', #3196, #15549, #9382, .T. ) ; +#5640 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5641 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000000300, -2.879999999999999400 ) ) ; +#5642 = EDGE_LOOP ( 'NONE', ( #9545, #1144, #10267, #4584 ) ) ; +#5643 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15101, 'distance_accuracy_value', 'NONE'); +#5644 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, -0.7142135623730971900, -4.500000000000000900 ) ) ; +#5645 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5646 = ORIENTED_EDGE ( 'NONE', *, *, #12991, .T. ) ; +#5647 = EDGE_CURVE ( 'NONE', #12854, #13949, #14693, .T. ) ; +#5648 = VECTOR ( 'NONE', #3301, 1000.000000000000000 ) ; +#5649 = ORIENTED_EDGE ( 'NONE', *, *, #4602, .F. ) ; +#5650 = EDGE_LOOP ( 'NONE', ( #1480, #14860, #2348, #1767, #12354, #10343 ) ) ; +#5651 = FACE_OUTER_BOUND ( 'NONE', #11471, .T. ) ; +#5652 = LINE ( 'NONE', #8111, #1238 ) ; +#5653 = VERTEX_POINT ( 'NONE', #1139 ) ; +#5654 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5655 = EDGE_CURVE ( 'NONE', #6183, #14330, #792, .T. ) ; +#5656 = EDGE_CURVE ( 'NONE', #3480, #11189, #4992, .T. ) ; +#5657 = LINE ( 'NONE', #9909, #15706 ) ; +#5658 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#5659 = ORIENTED_EDGE ( 'NONE', *, *, #10548, .F. ) ; +#5660 = VECTOR ( 'NONE', #2571, 1000.000000000000000 ) ; +#5661 = VECTOR ( 'NONE', #2330, 1000.000000000000000 ) ; +#5662 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 4.325000000000001100 ) ) ; +#5663 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000025900, 0.4000000000000000200, 2.049999999999999800 ) ) ; +#5664 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5665 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.4000000000000000200, 2.950000000000000200 ) ) ; +#5666 = DIRECTION ( 'NONE', ( -5.478074134663594500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5667 = AXIS2_PLACEMENT_3D ( 'NONE', #4028, #5265, #10202 ) ; +#5668 = VECTOR ( 'NONE', #5998, 1000.000000000000000 ) ; +#5669 = ORIENTED_EDGE ( 'NONE', *, *, #13199, .F. ) ; +#5670 = EDGE_LOOP ( 'NONE', ( #9856, #5052, #13306, #4802, #13314, #15119 ) ) ; +#5671 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#5672 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000004600, 0.4000000000000000200, 7.149999999999996800 ) ) ; +#5673 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5674 = CIRCLE ( 'NONE', #2149, 0.2749999999999991900 ) ; +#5675 = LINE ( 'NONE', #75, #11746 ) ; +#5676 = EDGE_CURVE ( 'NONE', #13688, #13814, #14714, .T. ) ; +#5677 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#5678 = ORIENTED_EDGE ( 'NONE', *, *, #12221, .T. ) ; +#5679 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999952400, 0.4000000000000000200, 4.149999999999999500 ) ) ; +#5680 = SURFACE_STYLE_USAGE ( .BOTH. , #3219 ) ; +#5681 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 8.050000000000000700 ) ) ; +#5682 = ORIENTED_EDGE ( 'NONE', *, *, #9954, .T. ) ; +#5683 = LINE ( 'NONE', #10194, #10624 ) ; +#5684 = VERTEX_POINT ( 'NONE', #11205 ) ; +#5685 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10883 ), #3522 ) ; +#5686 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999998600, 0.0000000000000000000, 8.650000000000000400 ) ) ; +#5687 = VERTEX_POINT ( 'NONE', #9828 ) ; +#5688 = FACE_OUTER_BOUND ( 'NONE', #7213, .T. ) ; +#5689 = VECTOR ( 'NONE', #1276, 1000.000000000000000 ) ; +#5690 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5691 = SURFACE_STYLE_USAGE ( .BOTH. , #9314 ) ; +#5692 = VERTEX_POINT ( 'NONE', #7551 ) ; +#5693 = ADVANCED_FACE ( 'NONE', ( #234 ), #10902, .F. ) ; +#5694 = AXIS2_PLACEMENT_3D ( 'NONE', #5836, #7174, #12084 ) ; +#5695 = ORIENTED_EDGE ( 'NONE', *, *, #10131, .T. ) ; +#5696 = VECTOR ( 'NONE', #13790, 1000.000000000000000 ) ; +#5697 = EDGE_LOOP ( 'NONE', ( #8338, #11779, #258, #12765 ) ) ; +#5698 = ORIENTED_EDGE ( 'NONE', *, *, #2974, .T. ) ; +#5699 = EDGE_CURVE ( 'NONE', #11502, #9352, #8637, .T. ) ; +#5700 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5701 = ADVANCED_FACE ( 'NONE', ( #1176 ), #12405, .F. ) ; +#5702 = EDGE_CURVE ( 'NONE', #4883, #1348, #10136, .T. ) ; +#5703 = FACE_OUTER_BOUND ( 'NONE', #3514, .T. ) ; +#5704 = VECTOR ( 'NONE', #13475, 1000.000000000000000 ) ; +#5705 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#5706 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 9.035018104045869500E-017 ) ) ; +#5707 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5708 = ORIENTED_EDGE ( 'NONE', *, *, #9663, .F. ) ; +#5709 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#5710 = VERTEX_POINT ( 'NONE', #6270 ) ; +#5711 = VERTEX_POINT ( 'NONE', #2565 ) ; +#5712 = AXIS2_PLACEMENT_3D ( 'NONE', #236, #11157, #14600 ) ; +#5713 = ORIENTED_EDGE ( 'NONE', *, *, #6828, .T. ) ; +#5714 = PLANE ( 'NONE', #7289 ) ; +#5715 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5716 = EDGE_LOOP ( 'NONE', ( #1156, #13024, #5822, #15178 ) ) ; +#5717 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5718 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5719 = LINE ( 'NONE', #770, #14650 ) ; +#5720 = LINE ( 'NONE', #13623, #1134 ) ; +#5721 = ORIENTED_EDGE ( 'NONE', *, *, #7344, .F. ) ; +#5722 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#5723 = EDGE_CURVE ( 'NONE', #12094, #8330, #3098, .T. ) ; +#5724 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000031300, 0.4000000000000000200, 0.5499999999999997100 ) ) ; +#5726 = ORIENTED_EDGE ( 'NONE', *, *, #14136, .T. ) ; +#5725 = CARTESIAN_POINT ( 'NONE', ( -3.182167904976573000E-016, 0.7999999999999760600, -2.880000000000008300 ) ) ; +#5727 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5728 = VERTEX_POINT ( 'NONE', #7501 ) ; +#5729 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 10.00000000000000000 ) ) ; +#5730 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5731 = EDGE_LOOP ( 'NONE', ( #701, #1102, #7151, #11385 ) ) ; +#5732 = ORIENTED_EDGE ( 'NONE', *, *, #7138, .F. ) ; +#5733 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5734 = EDGE_LOOP ( 'NONE', ( #7966, #4263, #5159, #10503 ) ) ; +#5735 = LINE ( 'NONE', #12480, #6522 ) ; +#5736 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999988600, 0.7000000000000009500, -6.900000000000000400 ) ) ; +#5737 = EDGE_CURVE ( 'NONE', #1426, #10381, #1740, .T. ) ; +#5738 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#5739 = CIRCLE ( 'NONE', #782, 0.2749999999999991900 ) ; +#5740 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4903 ), #2756 ) ; +#5741 = CIRCLE ( 'NONE', #14074, 0.4999999999999995600 ) ; +#5742 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000000700, 0.8000000000000000400, 8.650000000000000400 ) ) ; +#5743 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5744 = VERTEX_POINT ( 'NONE', #14715 ) ; +#5745 = ORIENTED_EDGE ( 'NONE', *, *, #1230, .T. ) ; +#5746 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#5748 = PLANE ( 'NONE', #14352 ) ; +#5747 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#5749 = VERTEX_POINT ( 'NONE', #12197 ) ; +#5750 = EDGE_CURVE ( 'NONE', #6194, #2847, #6922, .T. ) ; +#5751 = ORIENTED_EDGE ( 'NONE', *, *, #14, .T. ) ; +#5752 = AXIS2_PLACEMENT_3D ( 'NONE', #11010, #3711, #4880 ) ; +#5753 = PLANE ( 'NONE', #3803 ) ; +#5754 = LINE ( 'NONE', #4774, #3084 ) ; +#5755 = VECTOR ( 'NONE', #2163, 1000.000000000000000 ) ; +#5756 = LINE ( 'NONE', #12626, #1913 ) ; +#5757 = LINE ( 'NONE', #10485, #10688 ) ; +#5758 = LINE ( 'NONE', #13058, #5574 ) ; +#5759 = VERTEX_POINT ( 'NONE', #7444 ) ; +#5760 = FILL_AREA_STYLE_COLOUR ( '', #11527 ) ; +#5761 = EDGE_CURVE ( 'NONE', #11456, #8782, #4037, .T. ) ; +#5762 = ORIENTED_EDGE ( 'NONE', *, *, #2764, .F. ) ; +#5763 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5764 = EDGE_LOOP ( 'NONE', ( #14107, #7648, #6837, #8374, #10579, #3386, #4079, #7545, #6948, #4355, #12085, #8658, #4752, #4553, #9884, #673, #6182, #11164, #5481, #10183, #13636, #7373, #10281, #4741, #8482, #15574, #3838, #3985 ) ) ; +#5765 = PLANE ( 'NONE', #10938 ) ; +#5766 = LINE ( 'NONE', #6122, #1552 ) ; +#5767 = LINE ( 'NONE', #10441, #14323 ) ; +#5768 = LINE ( 'NONE', #7578, #15277 ) ; +#5769 = VECTOR ( 'NONE', #4251, 1000.000000000000000 ) ; +#5770 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, -15.05858178898088800, -6.900000000000000400 ) ) ; +#5771 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5772 = LINE ( 'NONE', #8508, #8250 ) ; +#5773 = VERTEX_POINT ( 'NONE', #14819 ) ; +#5774 = CLOSED_SHELL ( 'NONE', ( #6917, #13382, #3290, #10222, #6272, #5306 ) ) ; +#5775 = EDGE_CURVE ( 'NONE', #6840, #846, #12034, .T. ) ; +#5776 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5777 = ORIENTED_EDGE ( 'NONE', *, *, #4247, .F. ) ; +#5778 = ORIENTED_EDGE ( 'NONE', *, *, #14679, .T. ) ; +#5779 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999983700, 0.4000000000000000200, 8.050000000000000700 ) ) ; +#5780 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5781 = VECTOR ( 'NONE', #7848, 1000.000000000000000 ) ; +#5782 = LINE ( 'NONE', #13304, #15099 ) ; +#5783 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#5784 = SURFACE_STYLE_USAGE ( .BOTH. , #10404 ) ; +#5785 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5786 = ADVANCED_FACE ( 'NONE', ( #10526 ), #6175, .T. ) ; +#5787 = VECTOR ( 'NONE', #6377, 1000.000000000000000 ) ; +#5788 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5789 = AXIS2_PLACEMENT_3D ( 'NONE', #7283, #166, #10991 ) ; +#5790 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5791 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5792 = ORIENTED_EDGE ( 'NONE', *, *, #788, .T. ) ; +#5793 = ORIENTED_EDGE ( 'NONE', *, *, #8794, .F. ) ; +#5794 = CARTESIAN_POINT ( 'NONE', ( -7.647980000000000400, 3.075703978347818600, -2.857408650308852000 ) ) ; +#5795 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5796 = EDGE_CURVE ( 'NONE', #2564, #12171, #5585, .T. ) ; +#5797 = LINE ( 'NONE', #8324, #11487 ) ; +#5798 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000023800, 0.4000000000000000200, 2.050000000000001600 ) ) ; +#5799 = EDGE_CURVE ( 'NONE', #362, #13221, #12969, .T. ) ; +#5801 = SURFACE_STYLE_USAGE ( .BOTH. , #11841 ) ; +#5800 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5802 = EDGE_CURVE ( 'NONE', #5941, #1683, #5378, .T. ) ; +#5803 = FACE_OUTER_BOUND ( 'NONE', #31, .T. ) ; +#5804 = ORIENTED_EDGE ( 'NONE', *, *, #1692, .T. ) ; +#5805 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.6999999999999999600, -5.150000000000001200 ) ) ; +#5806 = ORIENTED_EDGE ( 'NONE', *, *, #5547, .F. ) ; +#5807 = EDGE_LOOP ( 'NONE', ( #13515, #187, #8645, #15426 ) ) ; +#5808 = AXIS2_PLACEMENT_3D ( 'NONE', #12572, #1719, #7829 ) ; +#5809 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, -2.449999999999998800 ) ) ; +#5810 = ORIENTED_EDGE ( 'NONE', *, *, #3190, .F. ) ; +#5811 = VECTOR ( 'NONE', #6934, 1000.000000000000000 ) ; +#5812 = ORIENTED_EDGE ( 'NONE', *, *, #475, .F. ) ; +#5813 = VERTEX_POINT ( 'NONE', #5029 ) ; +#5814 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 1.637941840314110200, 2.950000000000000200 ) ) ; +#5815 = VERTEX_POINT ( 'NONE', #183 ) ; +#5816 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5817 = FACE_OUTER_BOUND ( 'NONE', #1891, .T. ) ; +#5818 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5819 = ORIENTED_EDGE ( 'NONE', *, *, #6745, .T. ) ; +#5820 = EDGE_CURVE ( 'NONE', #11957, #4090, #7481, .T. ) ; +#5821 = PLANE ( 'NONE', #8880 ) ; +#5822 = ORIENTED_EDGE ( 'NONE', *, *, #5864, .F. ) ; +#5823 = VERTEX_POINT ( 'NONE', #2674 ) ; +#5824 = LINE ( 'NONE', #1854, #5631 ) ; +#5825 = ORIENTED_EDGE ( 'NONE', *, *, #12553, .F. ) ; +#5826 = ORIENTED_EDGE ( 'NONE', *, *, #13181, .T. ) ; +#5827 = EDGE_CURVE ( 'NONE', #143, #5252, #11642, .T. ) ; +#5828 = LINE ( 'NONE', #12625, #9646 ) ; +#5829 = VECTOR ( 'NONE', #7098, 1000.000000000000000 ) ; +#5830 = STYLED_ITEM ( 'NONE', ( #2688 ), #15444 ) ; +#5831 = AXIS2_PLACEMENT_3D ( 'NONE', #14342, #9556, #10617 ) ; +#5832 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 4.149999999999999500 ) ) ; +#5833 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5834 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999957400, 0.8000000000000000400, -3.174999999999998900 ) ) ; +#5835 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000009900, 0.4000000000000000200, 5.649999999999999500 ) ) ; +#5836 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000015300, 0.4000000000000000200, 4.149999999999999500 ) ) ; +#5837 = ORIENTED_EDGE ( 'NONE', *, *, #7077, .F. ) ; +#5838 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8572, 'distance_accuracy_value', 'NONE'); +#5839 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5840 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 5.050000000000000700 ) ) ; +#5841 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.4000000000000000200, -3.349999999999998800 ) ) ; +#5842 = EDGE_LOOP ( 'NONE', ( #542, #9978, #15264, #3765 ) ) ; +#5843 = VECTOR ( 'NONE', #12665, 1000.000000000000000 ) ; +#5844 = ORIENTED_EDGE ( 'NONE', *, *, #1419, .F. ) ; +#5845 = EDGE_CURVE ( 'NONE', #6281, #10094, #13339, .T. ) ; +#5846 = CARTESIAN_POINT ( 'NONE', ( -7.817668071082943400, 3.206595997628985700, -2.841952621458756500 ) ) ; +#5847 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, -0.1749999999999989300 ) ) ; +#5848 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#5849 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5850 = EDGE_CURVE ( 'NONE', #10568, #1873, #7874, .T. ) ; +#5851 = AXIS2_PLACEMENT_3D ( 'NONE', #7007, #15471, #15563 ) ; +#5852 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000007600, 0.7999999999999971600, -3.080000000000001000 ) ) ; +#5853 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000000300, -2.877979999999999100 ) ) ; +#5854 = VECTOR ( 'NONE', #10573, 1000.000000000000000 ) ; +#5855 = ORIENTED_EDGE ( 'NONE', *, *, #12599, .F. ) ; +#5856 = VECTOR ( 'NONE', #9631, 1000.000000000000000 ) ; +#5857 = LINE ( 'NONE', #1866, #11548 ) ; +#5858 = ORIENTED_EDGE ( 'NONE', *, *, #4348, .T. ) ; +#5859 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5860 = ADVANCED_FACE ( 'NONE', ( #6520 ), #12619, .F. ) ; +#5861 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 1.637941840314110200, 4.049999999999999800 ) ) ; +#5862 = EDGE_CURVE ( 'NONE', #870, #7612, #10700, .T. ) ; +#5863 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 1.806230589874906900, -3.350000000000000500 ) ) ; +#5864 = EDGE_CURVE ( 'NONE', #10094, #3089, #1162, .T. ) ; +#5865 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.4000000000000000200, 1.850000000000000100 ) ) ; +#5866 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5867 = ORIENTED_EDGE ( 'NONE', *, *, #11965, .F. ) ; +#5868 = FACE_OUTER_BOUND ( 'NONE', #14261, .T. ) ; +#5869 = ORIENTED_EDGE ( 'NONE', *, *, #4184, .T. ) ; +#5870 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, -1.850000000000000500 ) ) ; +#5871 = LINE ( 'NONE', #4896, #15733 ) ; +#5872 = LINE ( 'NONE', #15303, #3578 ) ; +#5873 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4232 ), #6701 ) ; +#5874 = ADVANCED_FACE ( 'NONE', ( #4423 ), #1290, .F. ) ; +#5875 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5876 = AXIS2_PLACEMENT_3D ( 'NONE', #958, #2227, #11860 ) ; +#5877 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, -2.449999999999997100 ) ) ; +#5878 = ORIENTED_EDGE ( 'NONE', *, *, #1470, .T. ) ; +#5879 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5880 = ORIENTED_EDGE ( 'NONE', *, *, #1930, .F. ) ; +#5881 = VECTOR ( 'NONE', #614, 1000.000000000000000 ) ; +#5882 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5883 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000009200, 0.7999999999999962700, -2.872928932188135100 ) ) ; +#5884 = ORIENTED_EDGE ( 'NONE', *, *, #14586, .T. ) ; +#5885 = VERTEX_POINT ( 'NONE', #13812 ) ; +#5886 = EDGE_LOOP ( 'NONE', ( #11008, #14610, #14818, #13302 ) ) ; +#5887 = EDGE_CURVE ( 'NONE', #2733, #909, #14883, .T. ) ; +#5888 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.0000000000000000000, 1.850000000000000500 ) ) ; +#5889 = LINE ( 'NONE', #9538, #2615 ) ; +#5890 = VECTOR ( 'NONE', #3572, 1000.000000000000000 ) ; +#5891 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#5892 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5893 = EDGE_CURVE ( 'NONE', #8790, #5193, #15613, .T. ) ; +#5894 = ORIENTED_EDGE ( 'NONE', *, *, #13951, .T. ) ; +#5895 = ORIENTED_EDGE ( 'NONE', *, *, #188, .T. ) ; +#5896 = VERTEX_POINT ( 'NONE', #7663 ) ; +#5897 = AXIS2_PLACEMENT_3D ( 'NONE', #15364, #10692, #14214 ) ; +#5898 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5899 = ORIENTED_EDGE ( 'NONE', *, *, #15748, .T. ) ; +#5900 = VECTOR ( 'NONE', #635, 1000.000000000000000 ) ; +#5901 = ORIENTED_EDGE ( 'NONE', *, *, #5436, .T. ) ; +#5902 = AXIS2_PLACEMENT_3D ( 'NONE', #4129, #2900, #7774 ) ; +#5903 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#5904 = ORIENTED_EDGE ( 'NONE', *, *, #3989, .T. ) ; +#5905 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5906 = VECTOR ( 'NONE', #11177, 1000.000000000000000 ) ; +#5907 = LINE ( 'NONE', #14652, #10269 ) ; +#5908 = VECTOR ( 'NONE', #11298, 1000.000000000000000 ) ; +#5909 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000036600, 0.4000000000000000200, -0.9499999999999990700 ) ) ; +#5910 = ORIENTED_EDGE ( 'NONE', *, *, #10373, .F. ) ; +#5911 = ORIENTED_EDGE ( 'NONE', *, *, #3684, .T. ) ; +#5912 = ORIENTED_EDGE ( 'NONE', *, *, #6411, .T. ) ; +#5913 = EDGE_CURVE ( 'NONE', #7631, #4767, #12387, .T. ) ; +#5914 = ORIENTED_EDGE ( 'NONE', *, *, #14586, .F. ) ; +#5915 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.350000000000000100, 8.990000000000002000 ) ) ; +#5916 = EDGE_CURVE ( 'NONE', #15237, #1484, #7670, .T. ) ; +#5917 = ORIENTED_EDGE ( 'NONE', *, *, #8248, .T. ) ; +#5918 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.8000000000000000400, -3.174999999999998900 ) ) ; +#5919 = VERTEX_POINT ( 'NONE', #10189 ) ; +#5920 = VECTOR ( 'NONE', #3616, 1000.000000000000000 ) ; +#5921 = LINE ( 'NONE', #12638, #14101 ) ; +#5922 = PLANE ( 'NONE', #13411 ) ; +#5923 = FACE_OUTER_BOUND ( 'NONE', #7762, .T. ) ; +#5924 = AXIS2_PLACEMENT_3D ( 'NONE', #4750, #10987, #7380 ) ; +#5925 = VERTEX_POINT ( 'NONE', #5353 ) ; +#5926 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000023800, 0.4000000000000000200, 1.149999999999999900 ) ) ; +#5927 = FILL_AREA_STYLE ('',( #15620 ) ) ; +#5928 = VERTEX_POINT ( 'NONE', #3110 ) ; +#5929 = VERTEX_POINT ( 'NONE', #13865 ) ; +#5930 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5931 = ORIENTED_EDGE ( 'NONE', *, *, #269, .F. ) ; +#5932 = ORIENTED_EDGE ( 'NONE', *, *, #6337, .F. ) ; +#5933 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#5934 = FACE_OUTER_BOUND ( 'NONE', #11716, .T. ) ; +#5935 = LINE ( 'NONE', #5861, #8420 ) ; +#5936 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 8.650000000000000400 ) ) ; +#5937 = EDGE_CURVE ( 'NONE', #9245, #15234, #3639, .T. ) ; +#5938 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5939 = LINE ( 'NONE', #2308, #4981 ) ; +#5940 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5941 = VERTEX_POINT ( 'NONE', #11312 ) ; +#5942 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 1.637941840314110200, 3.649999999999999500 ) ) ; +#5943 = ADVANCED_FACE ( 'NONE', ( #13736 ), #12726, .T. ) ; +#5944 = VERTEX_POINT ( 'NONE', #332 ) ; +#5945 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, 8.050000000000000700 ) ) ; +#5946 = VERTEX_POINT ( 'NONE', #5508 ) ; +#5947 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 1.637941840314110200, 3.649999999999999500 ) ) ; +#5948 = EDGE_CURVE ( 'NONE', #3698, #558, #9198, .T. ) ; +#5949 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999968400, 0.4000000000000000200, 5.650000000000001200 ) ) ; +#5950 = LINE ( 'NONE', #3692, #14128 ) ; +#5951 = VECTOR ( 'NONE', #5572, 1000.000000000000000 ) ; +#5952 = CARTESIAN_POINT ( 'NONE', ( -7.852000000000001200, 3.129277334261817000, -2.857398806512152900 ) ) ; +#5953 = VECTOR ( 'NONE', #4631, 1000.000000000000000 ) ; +#5954 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#5955 = LINE ( 'NONE', #8163, #4026 ) ; +#5956 = SURFACE_SIDE_STYLE ('',( #2650 ) ) ; +#5957 = LINE ( 'NONE', #15200, #14890 ) ; +#5958 = ORIENTED_EDGE ( 'NONE', *, *, #15689, .T. ) ; +#5959 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5960 = ORIENTED_EDGE ( 'NONE', *, *, #7643, .F. ) ; +#5962 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#5961 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 7.875000000000000000 ) ) ; +#5963 = ADVANCED_FACE ( 'NONE', ( #12783 ), #9291, .T. ) ; +#5964 = ORIENTED_EDGE ( 'NONE', *, *, #5219, .T. ) ; +#5965 = EDGE_CURVE ( 'NONE', #3351, #8289, #14321, .T. ) ; +#5966 = EDGE_CURVE ( 'NONE', #10843, #13221, #219, .T. ) ; +#5967 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#5968 = VERTEX_POINT ( 'NONE', #602 ) ; +#5969 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5970 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#5971 = VECTOR ( 'NONE', #5903, 1000.000000000000000 ) ; +#5972 = LINE ( 'NONE', #5662, #13756 ) ; +#5973 = LINE ( 'NONE', #860, #9385 ) ; +#5974 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5975 = EDGE_CURVE ( 'NONE', #15005, #13510, #6332, .T. ) ; +#5976 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5977 = LINE ( 'NONE', #6807, #10143 ) ; +#5978 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10341 ) ) ; +#5979 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000030900, 0.8000000000000000400, -0.3500000000000013700 ) ) ; +#5980 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 1.637941840314110200, 2.549999999999999800 ) ) ; +#5981 = ORIENTED_EDGE ( 'NONE', *, *, #4146, .T. ) ; +#5982 = AXIS2_PLACEMENT_3D ( 'NONE', #12245, #6117, #10894 ) ; +#5983 = FACE_OUTER_BOUND ( 'NONE', #328, .T. ) ; +#5984 = PLANE ( 'NONE', #14516 ) ; +#5985 = PLANE ( 'NONE', #10930 ) ; +#5986 = LINE ( 'NONE', #3004, #4257 ) ; +#5987 = ADVANCED_FACE ( 'NONE', ( #9563 ), #1983, .T. ) ; +#5988 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5989 = EDGE_CURVE ( 'NONE', #12742, #11555, #3082, .T. ) ; +#5990 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999952400, 0.0000000000000000000, 5.050000000000000700 ) ) ; +#5991 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999920400, 0.4000000000000000200, 2.050000000000001600 ) ) ; +#5992 = ORIENTED_EDGE ( 'NONE', *, *, #9170, .T. ) ; +#5993 = VERTEX_POINT ( 'NONE', #15380 ) ; +#5994 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999995000, 0.0000000000000000000, 9.550000000000004300 ) ) ; +#5995 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5996 = AXIS2_PLACEMENT_3D ( 'NONE', #6687, #3104, #1814 ) ; +#5997 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5998 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5999 = VERTEX_POINT ( 'NONE', #3204 ) ; +#6000 = VECTOR ( 'NONE', #4931, 1000.000000000000000 ) ; +#6001 = ORIENTED_EDGE ( 'NONE', *, *, #13022, .F. ) ; +#6002 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999973400, 0.8000000000000000400, 1.325000000000001500 ) ) ; +#6003 = DIRECTION ( 'NONE', ( -1.548860246407863300E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#6004 = VERTEX_POINT ( 'NONE', #695 ) ; +#6005 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#6006 = FACE_OUTER_BOUND ( 'NONE', #6899, .T. ) ; +#6007 = FACE_OUTER_BOUND ( 'NONE', #7144, .T. ) ; +#6008 = ORIENTED_EDGE ( 'NONE', *, *, #3608, .T. ) ; +#6009 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, -0.9499999999999990700 ) ) ; +#6010 = VERTEX_POINT ( 'NONE', #5457 ) ; +#6011 = EDGE_CURVE ( 'NONE', #8429, #5067, #1926, .T. ) ; +#6012 = ORIENTED_EDGE ( 'NONE', *, *, #5639, .T. ) ; +#6013 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#6014 = EDGE_CURVE ( 'NONE', #12370, #11293, #2685, .T. ) ; +#6016 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000010700, 0.8000000000000000400, 5.649999999999999500 ) ) ; +#6015 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6017 = ORIENTED_EDGE ( 'NONE', *, *, #9777, .F. ) ; +#6018 = FACE_OUTER_BOUND ( 'NONE', #6666, .T. ) ; +#6019 = EDGE_CURVE ( 'NONE', #14096, #15166, #11272, .T. ) ; +#6020 = ORIENTED_EDGE ( 'NONE', *, *, #13627, .T. ) ; +#6021 = VERTEX_POINT ( 'NONE', #807 ) ; +#6022 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.762298528625412100E-017, -8.984670197367549300E-032 ) ) ; +#6023 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, 5.650000000000000400 ) ) ; +#6024 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, -0.1749999999999989300 ) ) ; +#6025 = ORIENTED_EDGE ( 'NONE', *, *, #5827, .T. ) ; +#6026 = LINE ( 'NONE', #14384, #6402 ) ; +#6027 = VECTOR ( 'NONE', #10802, 1000.000000000000000 ) ; +#6028 = AXIS2_PLACEMENT_3D ( 'NONE', #2635, #4091, #9945 ) ; +#6029 = ORIENTED_EDGE ( 'NONE', *, *, #4030, .T. ) ; +#6030 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6031 = ADVANCED_FACE ( 'NONE', ( #12015 ), #1929, .F. ) ; +#6032 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#6033 = ORIENTED_EDGE ( 'NONE', *, *, #12945, .T. ) ; +#6034 = CIRCLE ( 'NONE', #14151, 0.2749999999999991900 ) ; +#6035 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#6036 = ORIENTED_EDGE ( 'NONE', *, *, #15722, .F. ) ; +#6037 = ORIENTED_EDGE ( 'NONE', *, *, #12657, .T. ) ; +#6038 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6039 = VECTOR ( 'NONE', #5940, 1000.000000000000000 ) ; +#6040 = LINE ( 'NONE', #11849, #6992 ) ; +#6041 = EDGE_CURVE ( 'NONE', #913, #13019, #4790, .T. ) ; +#6042 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#6043 = PLANE ( 'NONE', #13351 ) ; +#6044 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6045 = EDGE_CURVE ( 'NONE', #6139, #6104, #777, .T. ) ; +#6046 = LINE ( 'NONE', #10885, #6423 ) ; +#6047 = ORIENTED_EDGE ( 'NONE', *, *, #10280, .F. ) ; +#6048 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5830 ), #9599 ) ; +#6049 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.349999999999998800, -2.780000000000002900 ) ) ; +#6050 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6051 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6052 = FACE_OUTER_BOUND ( 'NONE', #7340, .T. ) ; +#6053 = LINE ( 'NONE', #15331, #5661 ) ; +#6054 = CARTESIAN_POINT ( 'NONE', ( -7.611952621458756100, 3.102198665876327900, -2.869222690360980500 ) ) ; +#6055 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6056 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 0.7999999999999983800, 9.290000000000008000 ) ) ; +#6057 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, -15.05858178898088800, -8.800000000000000700 ) ) ; +#6058 = EDGE_CURVE ( 'NONE', #6662, #2593, #1535, .T. ) ; +#6059 = AXIS2_PLACEMENT_3D ( 'NONE', #12678, #5408, #11470 ) ; +#6060 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6061 = LINE ( 'NONE', #10405, #5468 ) ; +#6062 = ORIENTED_EDGE ( 'NONE', *, *, #9428, .T. ) ; +#6063 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999988600, 0.7000000000000009500, -6.900000000000000400 ) ) ; +#6064 = ADVANCED_FACE ( 'NONE', ( #8808 ), #10893, .F. ) ; +#6065 = VECTOR ( 'NONE', #5791, 1000.000000000000000 ) ; +#6066 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000020300, 0.4000000000000000200, 2.649999999999999500 ) ) ; +#6068 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000023800, 0.4000000000000000200, 2.050000000000001600 ) ) ; +#6067 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, 2.050000000000001600 ) ) ; +#6069 = ORIENTED_EDGE ( 'NONE', *, *, #12030, .T. ) ; +#6070 = EDGE_CURVE ( 'NONE', #12573, #13940, #5567, .T. ) ; +#6071 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999920400, 0.0000000000000000000, 2.050000000000001600 ) ) ; +#6072 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.149999999999999900, -2.880000000000001200 ) ) ; +#6073 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#6074 = CARTESIAN_POINT ( 'NONE', ( -7.565520281879283700, 3.147979999999999100, -2.805703978347820400 ) ) ; +#6075 = ORIENTED_EDGE ( 'NONE', *, *, #9365, .T. ) ; +#6076 = VECTOR ( 'NONE', #3066, 1000.000000000000000 ) ; +#6077 = ORIENTED_EDGE ( 'NONE', *, *, #7506, .T. ) ; +#6078 = ORIENTED_EDGE ( 'NONE', *, *, #13423, .T. ) ; +#6079 = ORIENTED_EDGE ( 'NONE', *, *, #3171, .T. ) ; +#6080 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#6081 = LINE ( 'NONE', #8593, #13470 ) ; +#6082 = LINE ( 'NONE', #1062, #15734 ) ; +#6083 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6084 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999952400, 0.4000000000000000200, 4.150000000000001200 ) ) ; +#6085 = EDGE_CURVE ( 'NONE', #939, #5476, #2295, .T. ) ; +#6086 = SURFACE_SIDE_STYLE ('',( #13582 ) ) ; +#6087 = EDGE_LOOP ( 'NONE', ( #7519, #2235, #6455, #4227 ) ) ; +#6088 = VERTEX_POINT ( 'NONE', #10658 ) ; +#6089 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 4.874999999999999100 ) ) ; +#6090 = SURFACE_STYLE_USAGE ( .BOTH. , #62 ) ; +#6091 = LINE ( 'NONE', #8077, #14260 ) ; +#6092 = ORIENTED_EDGE ( 'NONE', *, *, #5138, .T. ) ; +#6093 = AXIS2_PLACEMENT_3D ( 'NONE', #6814, #3281, #3226 ) ; +#6094 = EDGE_LOOP ( 'NONE', ( #7986, #8853, #10084, #2140 ) ) ; +#6095 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6096 = VECTOR ( 'NONE', #4315, 1000.000000000000000 ) ; +#6097 = VECTOR ( 'NONE', #9032, 1000.000000000000000 ) ; +#6098 = STYLED_ITEM ( 'NONE', ( #692 ), #10986 ) ; +#6099 = DIRECTION ( 'NONE', ( 5.478074134663591400E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6100 = ORIENTED_EDGE ( 'NONE', *, *, #2334, .T. ) ; +#6101 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6102 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#6104 = VERTEX_POINT ( 'NONE', #4502 ) ; +#6103 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6105 = ORIENTED_EDGE ( 'NONE', *, *, #8203, .T. ) ; +#6106 = EDGE_CURVE ( 'NONE', #9467, #4916, #6904, .T. ) ; +#6107 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999984400, 0.4000000000000000200, 7.150000000000000400 ) ) ; +#6108 = VERTEX_POINT ( 'NONE', #7171 ) ; +#6109 = B_SPLINE_SURFACE_WITH_KNOTS ( 'NONE', 1, 3, ( + ( #10332, #12706, #8008, #7965, #15323, #636 ), + ( #1856, #735, #11596, #10435, #5440, #3149 ), + ( #12866, #5605, #522, #9281, #1968, #9080 ), + ( #13958, #4536, #8216, #14219, #15366, #13130 ) ), + .UNSPECIFIED., .F., .F., .F., + ( 2, 1, 1, 2 ), + ( 4, 2, 4 ), + ( -0.01000000000000000000, 0.0000000000000000000, 1.000000000000000000, 1.010100000000000000 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#6110 = ADVANCED_FACE ( 'NONE', ( #12954 ), #3465, .T. ) ; +#6111 = ORIENTED_EDGE ( 'NONE', *, *, #11843, .F. ) ; +#6112 = PLANE ( 'NONE', #934 ) ; +#6113 = PLANE ( 'NONE', #4043 ) ; +#6114 = EDGE_CURVE ( 'NONE', #9045, #3336, #394, .T. ) ; +#6115 = LINE ( 'NONE', #8247, #1898 ) ; +#6116 = VECTOR ( 'NONE', #4960, 1000.000000000000000 ) ; +#6117 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6118 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, -1.850000000000001000 ) ) ; +#6119 = PLANE ( 'NONE', #10764 ) ; +#6120 = EDGE_LOOP ( 'NONE', ( #1491, #8459, #7745, #13027, #4398, #13088 ) ) ; +#6121 = ORIENTED_EDGE ( 'NONE', *, *, #2857, .T. ) ; +#6122 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999988600, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#6123 = EDGE_LOOP ( 'NONE', ( #9770, #1048, #4049, #10262 ) ) ; +#6124 = VERTEX_POINT ( 'NONE', #15434 ) ; +#6125 = ORIENTED_EDGE ( 'NONE', *, *, #387, .F. ) ; +#6126 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 5.650000000000000400 ) ) ; +#6127 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.0000000000000000000, 1.850000000000000100 ) ) ; +#6128 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6129 = VECTOR ( 'NONE', #4399, 1000.000000000000000 ) ; +#6130 = LINE ( 'NONE', #8643, #3624 ) ; +#6131 = AXIS2_PLACEMENT_3D ( 'NONE', #11022, #14790, #1321 ) ; +#6132 = LINE ( 'NONE', #3311, #194 ) ; +#6133 = VERTEX_POINT ( 'NONE', #13195 ) ; +#6134 = EDGE_CURVE ( 'NONE', #13297, #12, #11091, .T. ) ; +#6135 = VERTEX_POINT ( 'NONE', #8331 ) ; +#6136 = PLANE ( 'NONE', #9435 ) ; +#6137 = EDGE_LOOP ( 'NONE', ( #6962, #4784, #9180, #8875 ) ) ; +#6138 = ADVANCED_FACE ( 'NONE', ( #10122 ), #4809, .F. ) ; +#6139 = VERTEX_POINT ( 'NONE', #10565 ) ; +#6140 = FILL_AREA_STYLE ('',( #11019 ) ) ; +#6141 = PRESENTATION_STYLE_ASSIGNMENT (( #2362 ) ) ; +#6142 = LINE ( 'NONE', #5863, #5755 ) ; +#6143 = LINE ( 'NONE', #10296, #4212 ) ; +#6144 = VECTOR ( 'NONE', #15712, 1000.000000000000000 ) ; +#6145 = AXIS2_PLACEMENT_3D ( 'NONE', #6910, #8281, #14232 ) ; +#6146 = VECTOR ( 'NONE', #6818, 1000.000000000000000 ) ; +#6147 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 0.5500000000000010400 ) ) ; +#6148 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, -15.05858178898088800, -8.800000000000000700 ) ) ; +#6149 = ADVANCED_FACE ( 'NONE', ( #3280 ), #907, .T. ) ; +#6150 = VERTEX_POINT ( 'NONE', #4699 ) ; +#6151 = ORIENTED_EDGE ( 'NONE', *, *, #9929, .F. ) ; +#6152 = VERTEX_POINT ( 'NONE', #5877 ) ; +#6153 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6154 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000015300, 0.4000000000000000200, 4.149999999999995900 ) ) ; +#6155 = EDGE_CURVE ( 'NONE', #8180, #1941, #13758, .T. ) ; +#6156 = FACE_OUTER_BOUND ( 'NONE', #4385, .T. ) ; +#6157 = VECTOR ( 'NONE', #12610, 1000.000000000000000 ) ; +#6158 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6159 = ORIENTED_EDGE ( 'NONE', *, *, #7157, .T. ) ; +#6160 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6161 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#6162 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6163 = PRESENTATION_STYLE_ASSIGNMENT (( #14898 ) ) ; +#6164 = VECTOR ( 'NONE', #3477, 1000.000000000000000 ) ; +#6165 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999998600, 0.4000000000000000200, 9.550000000000000700 ) ) ; +#6166 = ORIENTED_EDGE ( 'NONE', *, *, #13135, .T. ) ; +#6167 = ORIENTED_EDGE ( 'NONE', *, *, #12594, .F. ) ; +#6168 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6169 = EDGE_CURVE ( 'NONE', #13740, #4389, #5973, .T. ) ; +#6170 = EDGE_LOOP ( 'NONE', ( #14095, #361, #12027, #3892 ) ) ; +#6171 = ORIENTED_EDGE ( 'NONE', *, *, #5796, .F. ) ; +#6172 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6173 = LINE ( 'NONE', #4142, #14530 ) ; +#6174 = VECTOR ( 'NONE', #1070, 1000.000000000000000 ) ; +#6175 = PLANE ( 'NONE', #3296 ) ; +#6176 = VECTOR ( 'NONE', #5094, 1000.000000000000000 ) ; +#6177 = PLANE ( 'NONE', #13228 ) ; +#6178 = EDGE_CURVE ( 'NONE', #5173, #6784, #12038, .T. ) ; +#6179 = EDGE_CURVE ( 'NONE', #566, #4340, #12574, .T. ) ; +#6180 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 0.3749999999999994400 ) ) ; +#6181 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6182 = ORIENTED_EDGE ( 'NONE', *, *, #11014, .T. ) ; +#6183 = VERTEX_POINT ( 'NONE', #8387 ) ; +#6184 = LINE ( 'NONE', #3355, #8662 ) ; +#6185 = PLANE ( 'NONE', #9534 ) ; +#6186 = ADVANCED_FACE ( 'NONE', ( #2316 ), #8280, .T. ) ; +#6187 = VECTOR ( 'NONE', #12736, 1000.000000000000000 ) ; +#6188 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3719 ) ) ; +#6189 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 6.549999999999998000 ) ) ; +#6190 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6191 = FACE_OUTER_BOUND ( 'NONE', #11100, .T. ) ; +#6192 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10519 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6811, #15298, #8042 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6193 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#6194 = VERTEX_POINT ( 'NONE', #4601 ) ; +#6195 = VERTEX_POINT ( 'NONE', #13362 ) ; +#6196 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#6197 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, -2.625000000000000400 ) ) ; +#6198 = ADVANCED_FACE ( 'NONE', ( #2119 ), #10939, .T. ) ; +#6199 = EDGE_CURVE ( 'NONE', #1687, #10439, #8246, .T. ) ; +#6200 = ORIENTED_EDGE ( 'NONE', *, *, #9471, .T. ) ; +#6201 = FACE_OUTER_BOUND ( 'NONE', #4174, .T. ) ; +#6202 = EDGE_LOOP ( 'NONE', ( #6843, #288, #9588, #2468 ) ) ; +#6203 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999978700, 0.8000000000000000400, 2.825000000000001100 ) ) ; +#6204 = EDGE_LOOP ( 'NONE', ( #15206, #451, #6412, #13608 ) ) ; +#6205 = LINE ( 'NONE', #15272, #1581 ) ; +#6206 = FACE_OUTER_BOUND ( 'NONE', #2851, .T. ) ; +#6207 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6208 = EDGE_LOOP ( 'NONE', ( #3809, #2863, #11981, #7852 ) ) ; +#6209 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 6.000000000000000000 ) ) ; +#6210 = ORIENTED_EDGE ( 'NONE', *, *, #6429, .T. ) ; +#6211 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, -0.0000000000000000000, -3.350000000000000500 ) ) ; +#6212 = ORIENTED_EDGE ( 'NONE', *, *, #578, .T. ) ; +#6213 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#6214 = EDGE_LOOP ( 'NONE', ( #8405, #7445, #2589, #14744 ) ) ; +#6215 = ADVANCED_FACE ( 'NONE', ( #5199 ), #3739, .F. ) ; +#6216 = VECTOR ( 'NONE', #14841, 1000.000000000000000 ) ; +#6217 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6218 = EDGE_LOOP ( 'NONE', ( #13140, #14876, #3584, #9437 ) ) ; +#6219 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6220 = LINE ( 'NONE', #4288, #293 ) ; +#6221 = FACE_OUTER_BOUND ( 'NONE', #12777, .T. ) ; +#6222 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude5[4]', #2840 ) ; +#6223 = ADVANCED_FACE ( 'NONE', ( #7692 ), #11030, .F. ) ; +#6224 = ORIENTED_EDGE ( 'NONE', *, *, #11786, .T. ) ; +#6225 = EDGE_CURVE ( 'NONE', #6133, #10356, #6356, .T. ) ; +#6226 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.0000000000000000000, 3.650000000000000400 ) ) ; +#6227 = EDGE_CURVE ( 'NONE', #15753, #7100, #15635, .T. ) ; +#6228 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 3.100000000000000500 ) ) ; +#6229 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000000700, -2.879999999999999400 ) ) ; +#6230 = ORIENTED_EDGE ( 'NONE', *, *, #8271, .F. ) ; +#6231 = CIRCLE ( 'NONE', #15531, 0.5000000000000004400 ) ; +#6232 = VERTEX_POINT ( 'NONE', #6049 ) ; +#6233 = VECTOR ( 'NONE', #12835, 1000.000000000000000 ) ; +#6234 = LINE ( 'NONE', #8446, #1821 ) ; +#6235 = AXIS2_PLACEMENT_3D ( 'NONE', #3378, #11689, #8201 ) ; +#6236 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 9.550000000000000700 ) ) ; +#6237 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6238 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.195440985631453300E-016 ) ) ; +#6240 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6239 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6241 = ORIENTED_EDGE ( 'NONE', *, *, #12543, .F. ) ; +#6242 = EDGE_CURVE ( 'NONE', #913, #9363, #9581, .T. ) ; +#6243 = CARTESIAN_POINT ( 'NONE', ( -7.850000000000011200, 2.967186921759401500E-014, 0.0000000000000000000 ) ) ; +#6244 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6245 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.3999999999999999700, 0.5500000000000010400 ) ) ; +#6246 = LINE ( 'NONE', #6023, #12108 ) ; +#6247 = LINE ( 'NONE', #15174, #14793 ) ; +#6248 = EDGE_LOOP ( 'NONE', ( #3532, #11604, #1137, #7321 ) ) ; +#6249 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999989300, 0.8000000000000000400, 5.825000000000001100 ) ) ; +#6250 = EDGE_CURVE ( 'NONE', #1484, #11143, #14697, .T. ) ; +#6251 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #217 ) ) ; +#6252 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, 1.149999999999999900 ) ) ; +#6253 = EDGE_LOOP ( 'NONE', ( #721, #5629, #266, #12656 ) ) ; +#6254 = VECTOR ( 'NONE', #13645, 1000.000000000000000 ) ; +#6255 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000002500, 0.8000000000000000400, -4.500000000000000000 ) ) ; +#6256 = ORIENTED_EDGE ( 'NONE', *, *, #8752, .T. ) ; +#6257 = ORIENTED_EDGE ( 'NONE', *, *, #3896, .T. ) ; +#6258 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6259 = ADVANCED_FACE ( 'NONE', ( #2888 ), #12233, .T. ) ; +#6260 = LINE ( 'NONE', #4353, #12307 ) ; +#6261 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, 0.7000000000000009500, -9.600000000000001400 ) ) ; +#6262 = ORIENTED_EDGE ( 'NONE', *, *, #14921, .F. ) ; +#6263 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, -2.449999999999998800 ) ) ; +#6264 = EDGE_CURVE ( 'NONE', #504, #9142, #12593, .T. ) ; +#6265 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.3999999999999999700, 2.549999999999999800 ) ) ; +#6266 = ORIENTED_EDGE ( 'NONE', *, *, #6496, .F. ) ; +#6267 = VECTOR ( 'NONE', #4800, 1000.000000000000000 ) ; +#6268 = ORIENTED_EDGE ( 'NONE', *, *, #9859, .T. ) ; +#6269 = EDGE_LOOP ( 'NONE', ( #13237, #1185, #10478, #4515 ) ) ; +#6270 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#6271 = ORIENTED_EDGE ( 'NONE', *, *, #13376, .F. ) ; +#6272 = ADVANCED_FACE ( 'NONE', ( #15448 ), #117, .T. ) ; +#6273 = EDGE_CURVE ( 'NONE', #15676, #13688, #5588, .T. ) ; +#6274 = FACE_OUTER_BOUND ( 'NONE', #15512, .T. ) ; +#6275 = VECTOR ( 'NONE', #14186, 1000.000000000000000 ) ; +#6276 = AXIS2_PLACEMENT_3D ( 'NONE', #5379, #1682, #11382 ) ; +#6277 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#6278 = DIRECTION ( 'NONE', ( -9.035018104045869500E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6279 = ORIENTED_EDGE ( 'NONE', *, *, #5845, .F. ) ; +#6280 = EDGE_LOOP ( 'NONE', ( #5646, #871, #3328, #11148 ) ) ; +#6281 = VERTEX_POINT ( 'NONE', #14486 ) ; +#6282 = EDGE_LOOP ( 'NONE', ( #5499, #10660, #6271, #14537 ) ) ; +#6283 = ORIENTED_EDGE ( 'NONE', *, *, #1548, .T. ) ; +#6284 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, -2.625000000000000400 ) ) ; +#6285 = ORIENTED_EDGE ( 'NONE', *, *, #11403, .T. ) ; +#6286 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 1.637941840314110200, 2.549999999999999800 ) ) ; +#6287 = ORIENTED_EDGE ( 'NONE', *, *, #8821, .T. ) ; +#6288 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000032000, 0.8000000000000000400, -0.3500000000000013700 ) ) ; +#6289 = EDGE_CURVE ( 'NONE', #4217, #8373, #12404, .T. ) ; +#6290 = ADVANCED_FACE ( 'NONE', ( #2704 ), #5176, .T. ) ; +#6291 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#6292 = FACE_OUTER_BOUND ( 'NONE', #693, .T. ) ; +#6293 = FACE_OUTER_BOUND ( 'NONE', #15737, .T. ) ; +#6294 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, -0.0000000000000000000, -2.899999999999999900 ) ) ; +#6295 = FACE_OUTER_BOUND ( 'NONE', #10945, .T. ) ; +#6296 = ORIENTED_EDGE ( 'NONE', *, *, #8367, .F. ) ; +#6297 = CLOSED_SHELL ( 'NONE', ( #5543, #24, #5300, #3123, #6138 ) ) ; +#6298 = ORIENTED_EDGE ( 'NONE', *, *, #15020, .T. ) ; +#6299 = ORIENTED_EDGE ( 'NONE', *, *, #10339, .F. ) ; +#6300 = VERTEX_POINT ( 'NONE', #12329 ) ; +#6301 = AXIS2_PLACEMENT_3D ( 'NONE', #14221, #3352, #6951 ) ; +#6302 = ORIENTED_EDGE ( 'NONE', *, *, #14412, .F. ) ; +#6303 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6304 = VERTEX_POINT ( 'NONE', #7839 ) ; +#6305 = LINE ( 'NONE', #7037, #4588 ) ; +#6306 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000009600, 0.4000000000000000200, 6.550000000000000700 ) ) ; +#6307 = VECTOR ( 'NONE', #15381, 1000.000000000000000 ) ; +#6308 = PLANE ( 'NONE', #108 ) ; +#6309 = ORIENTED_EDGE ( 'NONE', *, *, #13706, .F. ) ; +#6310 = EDGE_CURVE ( 'NONE', #14620, #6383, #5768, .T. ) ; +#6311 = ORIENTED_EDGE ( 'NONE', *, *, #7812, .T. ) ; +#6312 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 1.149999999999999900 ) ) ; +#6313 = EDGE_CURVE ( 'NONE', #5154, #15557, #10530, .T. ) ; +#6314 = ORIENTED_EDGE ( 'NONE', *, *, #12500, .T. ) ; +#6315 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6316 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#6317 = EDGE_CURVE ( 'NONE', #2979, #8257, #11460, .T. ) ; +#6318 = ORIENTED_EDGE ( 'NONE', *, *, #6070, .T. ) ; +#6319 = ORIENTED_EDGE ( 'NONE', *, *, #3989, .F. ) ; +#6320 = VECTOR ( 'NONE', #1568, 1000.000000000000000 ) ; +#6321 = FACE_OUTER_BOUND ( 'NONE', #7900, .T. ) ; +#6322 = LINE ( 'NONE', #8214, #14116 ) ; +#6323 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6324 = LINE ( 'NONE', #9778, #7096 ) ; +#6325 = VERTEX_POINT ( 'NONE', #3842 ) ; +#6326 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6327 = CARTESIAN_POINT ( 'NONE', ( 8.549999999999998900, 0.4000000000000000200, 9.549999999999993600 ) ) ; +#6328 = ORIENTED_EDGE ( 'NONE', *, *, #1750, .F. ) ; +#6329 = VERTEX_POINT ( 'NONE', #1533 ) ; +#6330 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6331 = VECTOR ( 'NONE', #6630, 1000.000000000000000 ) ; +#6332 = LINE ( 'NONE', #12876, #14129 ) ; +#6333 = PLANE ( 'NONE', #8402 ) ; +#6334 = LINE ( 'NONE', #10803, #1927 ) ; +#6335 = LINE ( 'NONE', #6834, #8996 ) ; +#6336 = PRESENTATION_STYLE_ASSIGNMENT (( #10217 ) ) ; +#6337 = EDGE_CURVE ( 'NONE', #4767, #14933, #6537, .T. ) ; +#6338 = VECTOR ( 'NONE', #11738, 1000.000000000000000 ) ; +#6339 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#6340 = ADVANCED_FACE ( 'NONE', ( #8639 ), #1474, .F. ) ; +#6341 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999968400, 0.0000000000000000000, 5.649999999999999500 ) ) ; +#6342 = ORIENTED_EDGE ( 'NONE', *, *, #5086, .T. ) ; +#6343 = ORIENTED_EDGE ( 'NONE', *, *, #3761, .F. ) ; +#6344 = PLANE ( 'NONE', #14201 ) ; +#6345 = CARTESIAN_POINT ( 'NONE', ( -7.850000000000001400, 3.128752156770256800, 9.067398903010504400 ) ) ; +#6346 = ORIENTED_EDGE ( 'NONE', *, *, #10410, .T. ) ; +#6347 = PLANE ( 'NONE', #3748 ) ; +#6348 = VERTEX_POINT ( 'NONE', #8804 ) ; +#6349 = EDGE_CURVE ( 'NONE', #13814, #5241, #6925, .T. ) ; +#6350 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'part', '', ( #9442 ) ) ; +#6351 = AXIS2_PLACEMENT_3D ( 'NONE', #8915, #14912, #8810 ) ; +#6352 = FACE_OUTER_BOUND ( 'NONE', #13280, .T. ) ; +#6353 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6354 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 1.325000000000001500 ) ) ; +#6355 = LINE ( 'NONE', #4969, #4246 ) ; +#6356 = LINE ( 'NONE', #7275, #9012 ) ; +#6357 = ADVANCED_FACE ( 'NONE', ( #7309 ), #2709, .T. ) ; +#6358 = VECTOR ( 'NONE', #7130, 1000.000000000000000 ) ; +#6359 = ORIENTED_EDGE ( 'NONE', *, *, #8367, .T. ) ; +#6360 = EDGE_CURVE ( 'NONE', #7363, #9245, #412, .T. ) ; +#6361 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 2.825000000000001100 ) ) ; +#6362 = LINE ( 'NONE', #2987, #3302 ) ; +#6363 = PLANE ( 'NONE', #2514 ) ; +#6364 = SURFACE_SIDE_STYLE ('',( #9562 ) ) ; +#6365 = EDGE_CURVE ( 'NONE', #2439, #5749, #10897, .T. ) ; +#6366 = ADVANCED_FACE ( 'NONE', ( #796 ), #1539, .F. ) ; +#6367 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.3999999999999999700, 1.850000000000000100 ) ) ; +#6368 = FACE_OUTER_BOUND ( 'NONE', #13588, .T. ) ; +#6369 = AXIS2_PLACEMENT_3D ( 'NONE', #14333, #4803, #15681 ) ; +#6370 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#6371 = ORIENTED_EDGE ( 'NONE', *, *, #13828, .F. ) ; +#6372 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.6999999999999999600, -5.150000000000001200 ) ) ; +#6373 = ORIENTED_EDGE ( 'NONE', *, *, #1831, .T. ) ; +#6374 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#6375 = ORIENTED_EDGE ( 'NONE', *, *, #2222, .F. ) ; +#6376 = VECTOR ( 'NONE', #1141, 1000.000000000000000 ) ; +#6377 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6378 = ORIENTED_EDGE ( 'NONE', *, *, #12406, .F. ) ; +#6379 = EDGE_CURVE ( 'NONE', #8095, #12636, #14506, .T. ) ; +#6380 = EDGE_CURVE ( 'NONE', #8596, #13494, #2690, .T. ) ; +#6381 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6382 = CARTESIAN_POINT ( 'NONE', ( 7.565530029177630800, 3.349999999999997900, -2.858752156770255800 ) ) ; +#6383 = VERTEX_POINT ( 'NONE', #2591 ) ; +#6384 = LINE ( 'NONE', #5980, #2736 ) ; +#6385 = LINE ( 'NONE', #14145, #2937 ) ; +#6386 = SURFACE_STYLE_USAGE ( .BOTH. , #2738 ) ; +#6387 = CARTESIAN_POINT ( 'NONE', ( 7.604446300443229700, 3.134883614495199500, -2.813777056305528700 ) ) ; +#6388 = ORIENTED_EDGE ( 'NONE', *, *, #9277, .F. ) ; +#6389 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, -1.849999999999998500 ) ) ; +#6390 = AXIS2_PLACEMENT_3D ( 'NONE', #15249, #12744, #1729 ) ; +#6391 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6392 = PLANE ( 'NONE', #305 ) ; +#6393 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.351999999999999400, 8.990000000000002000 ) ) ; +#6394 = ORIENTED_EDGE ( 'NONE', *, *, #2880, .F. ) ; +#6395 = VECTOR ( 'NONE', #5218, 1000.000000000000000 ) ; +#6396 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6397 = ORIENTED_EDGE ( 'NONE', *, *, #13059, .T. ) ; +#6398 = ORIENTED_EDGE ( 'NONE', *, *, #15009, .F. ) ; +#6399 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15461 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7772, #13919, #4177 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6400 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 7.150000000000000400 ) ) ; +#6401 = ORIENTED_EDGE ( 'NONE', *, *, #1132, .T. ) ; +#6402 = VECTOR ( 'NONE', #70, 1000.000000000000000 ) ; +#6403 = LINE ( 'NONE', #7312, #6787 ) ; +#6404 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.3999999999999999700, 4.049999999999999800 ) ) ; +#6405 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6406 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6407 = ORIENTED_EDGE ( 'NONE', *, *, #12051, .F. ) ; +#6408 = EDGE_CURVE ( 'NONE', #1901, #8115, #3086, .T. ) ; +#6409 = ORIENTED_EDGE ( 'NONE', *, *, #5233, .F. ) ; +#6410 = FACE_OUTER_BOUND ( 'NONE', #5325, .T. ) ; +#6411 = EDGE_CURVE ( 'NONE', #12731, #1720, #9935, .T. ) ; +#6412 = ORIENTED_EDGE ( 'NONE', *, *, #408, .T. ) ; +#6413 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6414 = PLANE ( 'NONE', #5098 ) ; +#6415 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 1.637941840314110200, 1.850000000000000100 ) ) ; +#6416 = VECTOR ( 'NONE', #11616, 1000.000000000000000 ) ; +#6417 = LINE ( 'NONE', #4581, #12097 ) ; +#6418 = ADVANCED_FACE ( 'NONE', ( #10322 ), #5016, .T. ) ; +#6419 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6420 = AXIS2_PLACEMENT_3D ( 'NONE', #15276, #10497, #6842 ) ; +#6421 = CARTESIAN_POINT ( 'NONE', ( -7.573037331497398700, 3.147982895189703100, -2.793639365022396500 ) ) ; +#6422 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6423 = VECTOR ( 'NONE', #7383, 1000.000000000000000 ) ; +#6424 = ORIENTED_EDGE ( 'NONE', *, *, #12290, .F. ) ; +#6425 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000020300, 0.4000000000000000200, 2.649999999999997700 ) ) ; +#6426 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#6427 = VECTOR ( 'NONE', #11058, 1000.000000000000000 ) ; +#6428 = LINE ( 'NONE', #6529, #2587 ) ; +#6429 = EDGE_CURVE ( 'NONE', #15302, #9223, #13741, .T. ) ; +#6430 = ADVANCED_FACE ( 'NONE', ( #9567 ), #4429, .F. ) ; +#6431 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6432 = CARTESIAN_POINT ( 'NONE', ( -7.578113802259297300, 3.139702065901542700, 9.036076976721359300 ) ) ; +#6433 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6434 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 2.649999999999999500 ) ) ; +#6435 = VERTEX_POINT ( 'NONE', #519 ) ; +#6436 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#6437 = LINE ( 'NONE', #3365, #5668 ) ; +#6438 = VERTEX_POINT ( 'NONE', #2867 ) ; +#6439 = ORIENTED_EDGE ( 'NONE', *, *, #4467, .T. ) ; +#6440 = FACE_OUTER_BOUND ( 'NONE', #2171, .T. ) ; +#6441 = LINE ( 'NONE', #15532, #14425 ) ; +#6442 = PLANE ( 'NONE', #6390 ) ; +#6443 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 3.100000000000000500 ) ) ; +#6444 = ORIENTED_EDGE ( 'NONE', *, *, #3065, .F. ) ; +#6445 = ADVANCED_FACE ( 'NONE', ( #7484 ), #10118, .T. ) ; +#6446 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 6.100000000000001400 ) ) ; +#6448 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6447 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000009600, 0.4000000000000000200, 6.549999999999998000 ) ) ; +#6449 = EDGE_CURVE ( 'NONE', #11856, #13875, #11647, .T. ) ; +#6450 = EDGE_LOOP ( 'NONE', ( #7617, #8862, #3133, #4607, #3681, #14802 ) ) ; +#6451 = CARTESIAN_POINT ( 'NONE', ( 9.449999999999999300, 0.8000000000000000400, 9.549999999999993600 ) ) ; +#6452 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999980800, 0.0000000000000000000, 8.050000000000004300 ) ) ; +#6453 = PLANE ( 'NONE', #11221 ) ; +#6454 = VECTOR ( 'NONE', #2328, 1000.000000000000000 ) ; +#6455 = ORIENTED_EDGE ( 'NONE', *, *, #12872, .F. ) ; +#6456 = ORIENTED_EDGE ( 'NONE', *, *, #8411, .F. ) ; +#6457 = LINE ( 'NONE', #12928, #10055 ) ; +#6458 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6459 = EDGE_CURVE ( 'NONE', #1241, #13467, #781, .T. ) ; +#6460 = AXIS2_PLACEMENT_3D ( 'NONE', #109, #13404, #1209 ) ; +#6461 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#6462 = ORIENTED_EDGE ( 'NONE', *, *, #13399, .F. ) ; +#6463 = ORIENTED_EDGE ( 'NONE', *, *, #1815, .F. ) ; +#6464 = VECTOR ( 'NONE', #4335, 1000.000000000000000 ) ; +#6465 = ORIENTED_EDGE ( 'NONE', *, *, #7934, .T. ) ; +#6466 = ORIENTED_EDGE ( 'NONE', *, *, #3565, .F. ) ; +#6467 = CARTESIAN_POINT ( 'NONE', ( -7.583823333624608600, 3.144106227756287900, -2.800415567924384500 ) ) ; +#6468 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6469 = LINE ( 'NONE', #11359, #4180 ) ; +#6470 = VECTOR ( 'NONE', #12459, 1000.000000000000000 ) ; +#6471 = EDGE_CURVE ( 'NONE', #8871, #3780, #10126, .T. ) ; +#6472 = EDGE_CURVE ( 'NONE', #11467, #11534, #15617, .T. ) ; +#6473 = CARTESIAN_POINT ( 'NONE', ( 7.819452524890163400, 3.207639970946512000, -2.841952621458757800 ) ) ; +#6474 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6475 = VERTEX_POINT ( 'NONE', #13789 ) ; +#6476 = EDGE_LOOP ( 'NONE', ( #10855, #6482, #7952, #804 ) ) ; +#6477 = EDGE_LOOP ( 'NONE', ( #2761 ) ) ; +#6478 = CARTESIAN_POINT ( 'NONE', ( 7.707639970946511100, 3.319452524890163400, 9.020976310729377400 ) ) ; +#6479 = PLANE ( 'NONE', #6961 ) ; +#6480 = VERTEX_POINT ( 'NONE', #7905 ) ; +#6481 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, -0.9499999999999990700 ) ) ; +#6482 = ORIENTED_EDGE ( 'NONE', *, *, #3288, .T. ) ; +#6483 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000019500, 0.8000000000000000400, 2.825000000000001100 ) ) ; +#6484 = ORIENTED_EDGE ( 'NONE', *, *, #9597, .T. ) ; +#6485 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.6999999999999999600, 0.0000000000000000000 ) ) ; +#6486 = LINE ( 'NONE', #1322, #4571 ) ; +#6487 = AXIS2_PLACEMENT_3D ( 'NONE', #14990, #402, #1623 ) ; +#6488 = LINE ( 'NONE', #13146, #15407 ) ; +#6489 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6490 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6491 = ORIENTED_EDGE ( 'NONE', *, *, #11232, .T. ) ; +#6492 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6493 = ADVANCED_FACE ( 'NONE', ( #3455 ), #12763, .T. ) ; +#6494 = ORIENTED_EDGE ( 'NONE', *, *, #15201, .T. ) ; +#6495 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#6496 = EDGE_CURVE ( 'NONE', #1172, #2539, #3847, .T. ) ; +#6497 = PLANE ( 'NONE', #11394 ) ; +#6498 = VERTEX_POINT ( 'NONE', #15008 ) ; +#6499 = SURFACE_STYLE_USAGE ( .BOTH. , #7784 ) ; +#6500 = ORIENTED_EDGE ( 'NONE', *, *, #3125, .T. ) ; +#6501 = ORIENTED_EDGE ( 'NONE', *, *, #408, .F. ) ; +#6502 = VECTOR ( 'NONE', #10255, 1000.000000000000000 ) ; +#6503 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 10.00000000000000000 ) ) ; +#6504 = FACE_OUTER_BOUND ( 'NONE', #1123, .T. ) ; +#6505 = LINE ( 'NONE', #10456, #15421 ) ; +#6506 = VECTOR ( 'NONE', #2955, 1000.000000000000000 ) ; +#6507 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude5[1]', #8619 ) ; +#6508 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000004300, 0.8000000000000000400, 7.149999999999996800 ) ) ; +#6509 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 5.650000000000000400 ) ) ; +#6510 = ORIENTED_EDGE ( 'NONE', *, *, #2006, .T. ) ; +#6511 = ADVANCED_FACE ( 'NONE', ( #8813 ), #10328, .T. ) ; +#6512 = ORIENTED_EDGE ( 'NONE', *, *, #3107, .F. ) ; +#6513 = AXIS2_PLACEMENT_3D ( 'NONE', #11007, #13319, #14513 ) ; +#6514 = ORIENTED_EDGE ( 'NONE', *, *, #9096, .T. ) ; +#6515 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6516 = ADVANCED_FACE ( 'NONE', ( #14888 ), #4153, .F. ) ; +#6517 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.349999999999999600, -2.779999999999999400 ) ) ; +#6518 = LINE ( 'NONE', #3856, #9932 ) ; +#6519 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6520 = FACE_OUTER_BOUND ( 'NONE', #7803, .T. ) ; +#6521 = LINE ( 'NONE', #5407, #7109 ) ; +#6522 = VECTOR ( 'NONE', #5215, 1000.000000000000000 ) ; +#6523 = FACE_OUTER_BOUND ( 'NONE', #8292, .T. ) ; +#6524 = CYLINDRICAL_SURFACE ( 'NONE', #13640, 0.2749999999999991900 ) ; +#6525 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6526 = EDGE_LOOP ( 'NONE', ( #349, #1125, #15322, #3300 ) ) ; +#6527 = EDGE_CURVE ( 'NONE', #6183, #4089, #14132, .T. ) ; +#6528 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 8.650000000000000400 ) ) ; +#6529 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999890200, -0.0000000000000000000, -1.850000000000001000 ) ) ; +#6530 = ORIENTED_EDGE ( 'NONE', *, *, #15355, .T. ) ; +#6531 = EDGE_CURVE ( 'NONE', #7694, #15676, #7119, .T. ) ; +#6532 = ORIENTED_EDGE ( 'NONE', *, *, #6310, .T. ) ; +#6533 = CARTESIAN_POINT ( 'NONE', ( 7.647980000000000400, 3.075703978347818600, -2.857408650308852900 ) ) ; +#6534 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999996100, 0.4000000000000000200, 8.650000000000003900 ) ) ; +#6535 = LINE ( 'NONE', #1083, #2491 ) ; +#6536 = VECTOR ( 'NONE', #4488, 1000.000000000000000 ) ; +#6537 = LINE ( 'NONE', #9903, #1179 ) ; +#6538 = AXIS2_PLACEMENT_3D ( 'NONE', #2854, #1572, #5106 ) ; +#6539 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000300, 0.0000000000000000000, 2.949999999999999300 ) ) ; +#6540 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.0000000000000000000, 10.00000000000000000 ) ) ; +#6541 = LINE ( 'NONE', #1791, #12595 ) ; +#6542 = ORIENTED_EDGE ( 'NONE', *, *, #15542, .T. ) ; +#6543 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6544 = ORIENTED_EDGE ( 'NONE', *, *, #14360, .T. ) ; +#6545 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#6546 = VERTEX_POINT ( 'NONE', #11494 ) ; +#6547 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, -0.0000000000000000000, -3.350000000000000500 ) ) ; +#6548 = EDGE_CURVE ( 'NONE', #8768, #9600, #11095, .T. ) ; +#6549 = FACE_OUTER_BOUND ( 'NONE', #13811, .T. ) ; +#6550 = PLANE ( 'NONE', #748 ) ; +#6551 = VECTOR ( 'NONE', #14858, 1000.000000000000000 ) ; +#6552 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, -3.350000000000000500 ) ) ; +#6553 = PLANE ( 'NONE', #2965 ) ; +#6554 = LINE ( 'NONE', #6481, #11676 ) ; +#6556 = PLANE ( 'NONE', #5386 ) ; +#6555 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6557 = EDGE_CURVE ( 'NONE', #12442, #6133, #2300, .T. ) ; +#6558 = ORIENTED_EDGE ( 'NONE', *, *, #4254, .T. ) ; +#6559 = ORIENTED_EDGE ( 'NONE', *, *, #3154, .F. ) ; +#6560 = ORIENTED_EDGE ( 'NONE', *, *, #11720, .T. ) ; +#6561 = STYLED_ITEM ( 'NONE', ( #13192 ), #3862 ) ; +#6562 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 3.550000000000001200 ) ) ; +#6563 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000012100, 0.0000000000000000000, 2.550000000000000300 ) ) ; +#6564 = LINE ( 'NONE', #15619, #15470 ) ; +#6565 = FACE_OUTER_BOUND ( 'NONE', #14358, .T. ) ; +#6566 = LINE ( 'NONE', #10808, #15115 ) ; +#6567 = EDGE_CURVE ( 'NONE', #15564, #7684, #12020, .T. ) ; +#6568 = PLANE ( 'NONE', #8278 ) ; +#6569 = CARTESIAN_POINT ( 'NONE', ( 7.556779519070251400, 3.149999999999998600, -2.791459556676525000 ) ) ; +#6570 = ORIENTED_EDGE ( 'NONE', *, *, #12602, .T. ) ; +#6571 = EDGE_LOOP ( 'NONE', ( #1401, #1274, #15692, #10759, #3795, #3235 ) ) ; +#6572 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6573 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6574 = VERTEX_POINT ( 'NONE', #5603 ) ; +#6575 = EDGE_CURVE ( 'NONE', #7398, #15732, #5955, .T. ) ; +#6576 = FACE_OUTER_BOUND ( 'NONE', #15207, .T. ) ; +#6577 = PLANE ( 'NONE', #4360 ) ; +#6578 = VERTEX_POINT ( 'NONE', #10546 ) ; +#6579 = AXIS2_PLACEMENT_3D ( 'NONE', #14075, #6909, #5623 ) ; +#6580 = CARTESIAN_POINT ( 'NONE', ( 7.706595997628984800, 3.317668071082943800, -2.810976310729379300 ) ) ; +#6581 = VERTEX_POINT ( 'NONE', #9379 ) ; +#6582 = VECTOR ( 'NONE', #13791, 1000.000000000000000 ) ; +#6583 = VECTOR ( 'NONE', #7359, 1000.000000000000000 ) ; +#6584 = CARTESIAN_POINT ( 'NONE', ( 1.026470133237232800E-015, 2.812907259427848200E-014, 9.290000000000009800 ) ) ; +#6585 = ORIENTED_EDGE ( 'NONE', *, *, #6828, .F. ) ; +#6586 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6587 = ADVANCED_FACE ( 'NONE', ( #7295 ), #12963, .T. ) ; +#6588 = ORIENTED_EDGE ( 'NONE', *, *, #13265, .F. ) ; +#6589 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6590 = EDGE_CURVE ( 'NONE', #6700, #9305, #8058, .T. ) ; +#6591 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6592 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#6593 = ORIENTED_EDGE ( 'NONE', *, *, #15309, .T. ) ; +#6594 = ADVANCED_FACE ( 'NONE', ( #35 ), #1966, .F. ) ; +#6595 = VECTOR ( 'NONE', #2476, 1000.000000000000000 ) ; +#6596 = CLOSED_SHELL ( 'NONE', ( #4430, #10575, #5128, #6587, #2273, #4986 ) ) ; +#6597 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.0000000000000000000, 1.850000000000000100 ) ) ; +#6598 = CARTESIAN_POINT ( 'NONE', ( -7.604446300443230600, 3.134883614495199000, 9.023777056305528200 ) ) ; +#6599 = LINE ( 'NONE', #12728, #1620 ) ; +#6600 = LINE ( 'NONE', #14263, #14766 ) ; +#6601 = PLANE ( 'NONE', #4487 ) ; +#6602 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 9.099999999999999600 ) ) ; +#6603 = VERTEX_POINT ( 'NONE', #1909 ) ; +#6604 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.3999999999999999700, 1.849999999999999900 ) ) ; +#6605 = PLANE ( 'NONE', #10797 ) ; +#6606 = AXIS2_PLACEMENT_3D ( 'NONE', #4349, #5579, #866 ) ; +#6607 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 7.875000000000000000 ) ) ; +#6609 = DIRECTION ( 'NONE', ( -6.598435676419215900E-033, 3.491481338843133400E-015, -1.000000000000000000 ) ) ; +#6608 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6610 = ORIENTED_EDGE ( 'NONE', *, *, #12305, .F. ) ; +#6611 = LINE ( 'NONE', #7108, #13426 ) ; +#6612 = VERTEX_POINT ( 'NONE', #3095 ) ; +#6613 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000300, 1.637941840314110200, 2.949999999999999300 ) ) ; +#6614 = SURFACE_STYLE_FILL_AREA ( #12571 ) ; +#6615 = EDGE_CURVE ( 'NONE', #14492, #4477, #9749, .T. ) ; +#6616 = EDGE_CURVE ( 'NONE', #1846, #10796, #13946, .T. ) ; +#6617 = PLANE ( 'NONE', #1798 ) ; +#6618 = EDGE_CURVE ( 'NONE', #12074, #15367, #12192, .T. ) ; +#6619 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999906200, 0.4000000000000000200, -0.3499999999999993100 ) ) ; +#6620 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#6621 = VECTOR ( 'NONE', #8087, 1000.000000000000000 ) ; +#6622 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 2.050000000000001600 ) ) ; +#6623 = ORIENTED_EDGE ( 'NONE', *, *, #9502, .F. ) ; +#6624 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999889500, 0.4000000000000000200, -0.9499999999999995100 ) ) ; +#6625 = VECTOR ( 'NONE', #4990, 1000.000000000000000 ) ; +#6626 = CYLINDRICAL_SURFACE ( 'NONE', #10789, 0.4999999999999995600 ) ; +#6627 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#6628 = AXIS2_PLACEMENT_3D ( 'NONE', #8145, #4510, #12995 ) ; +#6629 = ORIENTED_EDGE ( 'NONE', *, *, #2521, .F. ) ; +#6630 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6631 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6632 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#6633 = EDGE_LOOP ( 'NONE', ( #9434, #8550, #2275, #13586 ) ) ; +#6634 = VECTOR ( 'NONE', #12732, 1000.000000000000000 ) ; +#6635 = ORIENTED_EDGE ( 'NONE', *, *, #11419, .F. ) ; +#6636 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 8.650000000000000400 ) ) ; +#6637 = EDGE_CURVE ( 'NONE', #10091, #13526, #5757, .T. ) ; +#6638 = PLANE ( 'NONE', #13144 ) ; +#6639 = LINE ( 'NONE', #11486, #2809 ) ; +#6640 = LINE ( 'NONE', #14637, #5689 ) ; +#6641 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000000400, 3.049999999999999800, 9.290000000000000900 ) ) ; +#6642 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000034500, 0.4000000000000000200, -0.9499999999999995100 ) ) ; +#6643 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6644 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.491481338843133400E-015, 1.000000000000000000 ) ) ; +#6645 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 9.550000000000000700 ) ) ; +#6646 = EDGE_CURVE ( 'NONE', #5452, #12157, #4213, .T. ) ; +#6647 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6648 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5830 ) ) ; +#6649 = AXIS2_PLACEMENT_3D ( 'NONE', #15012, #8966, #7755 ) ; +#6650 = VERTEX_POINT ( 'NONE', #11703 ) ; +#6651 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 4.149999999999995900 ) ) ; +#6652 = LINE ( 'NONE', #15624, #3959 ) ; +#6653 = VERTEX_POINT ( 'NONE', #14166 ) ; +#6654 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.3999999999999999700, 1.850000000000000100 ) ) ; +#6655 = ORIENTED_EDGE ( 'NONE', *, *, #4490, .F. ) ; +#6656 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999905500, 0.4000000000000000200, 0.5500000000000024900 ) ) ; +#6657 = VECTOR ( 'NONE', #2075, 1000.000000000000000 ) ; +#6658 = LINE ( 'NONE', #2084, #7811 ) ; +#6659 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, -3.350000000000000500 ) ) ; +#6661 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 7.325000000000002000 ) ) ; +#6660 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6662 = VERTEX_POINT ( 'NONE', #10598 ) ; +#6663 = EDGE_CURVE ( 'NONE', #5476, #2726, #14678, .T. ) ; +#6664 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 5.050000000000000700 ) ) ; +#6665 = ORIENTED_EDGE ( 'NONE', *, *, #7685, .F. ) ; +#6666 = EDGE_LOOP ( 'NONE', ( #14653, #15409, #5298, #5858 ) ) ; +#6667 = ADVANCED_FACE ( 'NONE', ( #11259 ), #11801, .F. ) ; +#6668 = ORIENTED_EDGE ( 'NONE', *, *, #76, .T. ) ; +#6669 = VERTEX_POINT ( 'NONE', #4532 ) ; +#6670 = EDGE_LOOP ( 'NONE', ( #11798, #6629, #10331, #8413 ) ) ; +#6671 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#6672 = EDGE_CURVE ( 'NONE', #10622, #13558, #7467, .T. ) ; +#6673 = ADVANCED_FACE ( 'NONE', ( #5366 ), #3550, .F. ) ; +#6674 = LINE ( 'NONE', #12592, #6096 ) ; +#6675 = VECTOR ( 'NONE', #6474, 1000.000000000000000 ) ; +#6676 = AXIS2_PLACEMENT_3D ( 'NONE', #5947, #9665, #14546 ) ; +#6677 = CARTESIAN_POINT ( 'NONE', ( -7.629230332643794000, 3.350000000000000100, -2.795624326090536500 ) ) ; +#6678 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#6679 = LINE ( 'NONE', #7424, #9156 ) ; +#6680 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#6681 = VERTEX_POINT ( 'NONE', #15464 ) ; +#6682 = ORIENTED_EDGE ( 'NONE', *, *, #10316, .F. ) ; +#6683 = VERTEX_POINT ( 'NONE', #634 ) ; +#6684 = CARTESIAN_POINT ( 'NONE', ( 9.449999999999999300, 0.4000000000000000200, 9.549999999999993600 ) ) ; +#6685 = ORIENTED_EDGE ( 'NONE', *, *, #13918, .T. ) ; +#6686 = FILL_AREA_STYLE_COLOUR ( '', #15639 ) ; +#6687 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, -3.350000000000000500 ) ) ; +#6688 = ORIENTED_EDGE ( 'NONE', *, *, #15083, .F. ) ; +#6689 = EDGE_CURVE ( 'NONE', #359, #6840, #8997, .T. ) ; +#6690 = ORIENTED_EDGE ( 'NONE', *, *, #1473, .T. ) ; +#6691 = EDGE_CURVE ( 'NONE', #821, #10812, #7861, .T. ) ; +#6692 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6693 = FACE_OUTER_BOUND ( 'NONE', #12484, .T. ) ; +#6694 = FACE_OUTER_BOUND ( 'NONE', #6476, .T. ) ; +#6695 = VECTOR ( 'NONE', #9097, 1000.000000000000000 ) ; +#6696 = ORIENTED_EDGE ( 'NONE', *, *, #12386, .F. ) ; +#6697 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, -2.449999999999998800 ) ) ; +#6698 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6700 = VERTEX_POINT ( 'NONE', #10695 ) ; +#6699 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.3999999999999999700, 3.550000000000001200 ) ) ; +#6701 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2286 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3411, #1987, #3362 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6702 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6703 = FILL_AREA_STYLE_COLOUR ( '', #7790 ) ; +#6704 = ORIENTED_EDGE ( 'NONE', *, *, #3873, .F. ) ; +#6705 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6706 = VERTEX_POINT ( 'NONE', #8314 ) ; +#6707 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#6708 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7019 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1780, #4299, #6647 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6709 = VERTEX_POINT ( 'NONE', #10641 ) ; +#6710 = CARTESIAN_POINT ( 'NONE', ( -7.644106227756288300, 3.083823333624607300, 9.062513364263754300 ) ) ; +#6711 = LINE ( 'NONE', #6641, #8419 ) ; +#6712 = LINE ( 'NONE', #11904, #12770 ) ; +#6713 = MANIFOLD_SOLID_BREP ( 'LPattern1[5]', #7974 ) ; +#6714 = LINE ( 'NONE', #1296, #15071 ) ; +#6715 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.807003620809173900E-016 ) ) ; +#6716 = VERTEX_POINT ( 'NONE', #4634 ) ; +#6717 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999998600, 0.4000000000000000200, 8.650000000000000400 ) ) ; +#6718 = EDGE_CURVE ( 'NONE', #595, #9142, #7095, .T. ) ; +#6719 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 0.5500000000000010400 ) ) ; +#6720 = ORIENTED_EDGE ( 'NONE', *, *, #14901, .F. ) ; +#6721 = CARTESIAN_POINT ( 'NONE', ( -7.611952621458756100, 3.207639970946511500, 9.259452524890166500 ) ) ; +#6722 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6723 = VERTEX_POINT ( 'NONE', #4683 ) ; +#6724 = EDGE_CURVE ( 'NONE', #8386, #2110, #2480, .T. ) ; +#6725 = VECTOR ( 'NONE', #12339, 1000.000000000000000 ) ; +#6726 = VECTOR ( 'NONE', #5142, 1000.000000000000000 ) ; +#6727 = LINE ( 'NONE', #2529, #1164 ) ; +#6728 = VECTOR ( 'NONE', #11441, 1000.000000000000000 ) ; +#6729 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9671 ) ) ; +#6730 = PRESENTATION_STYLE_ASSIGNMENT (( #5691 ) ) ; +#6731 = AXIS2_PLACEMENT_3D ( 'NONE', #8101, #6985, #2203 ) ; +#6732 = ORIENTED_EDGE ( 'NONE', *, *, #10683, .F. ) ; +#6733 = ORIENTED_EDGE ( 'NONE', *, *, #8656, .T. ) ; +#6734 = ORIENTED_EDGE ( 'NONE', *, *, #6590, .T. ) ; +#6735 = ORIENTED_EDGE ( 'NONE', *, *, #7619, .F. ) ; +#6736 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 5.825000000000002000 ) ) ; +#6737 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.6999999999999999600, 0.0000000000000000000 ) ) ; +#6738 = VECTOR ( 'NONE', #13007, 1000.000000000000000 ) ; +#6739 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000020300, 0.8000000000000000400, 3.549999999999999400 ) ) ; +#6740 = ADVANCED_FACE ( 'NONE', ( #12378 ), #891, .F. ) ; +#6741 = CYLINDRICAL_SURFACE ( 'NONE', #4982, 0.4999999999999995600 ) ; +#6742 = EDGE_CURVE ( 'NONE', #15232, #280, #1726, .T. ) ; +#6743 = SURFACE_STYLE_USAGE ( .BOTH. , #9238 ) ; +#6744 = PLANE ( 'NONE', #256 ) ; +#6745 = EDGE_CURVE ( 'NONE', #7367, #2410, #14484, .T. ) ; +#6746 = VECTOR ( 'NONE', #6003, 1000.000000000000000 ) ; +#6747 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#6748 = EDGE_LOOP ( 'NONE', ( #9927, #6779, #7460, #11498, #4167, #5387 ) ) ; +#6749 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.049999999999999400, 9.082928932188135500 ) ) ; +#6750 = ADVANCED_FACE ( 'NONE', ( #9921 ), #1098, .F. ) ; +#6751 = LINE ( 'NONE', #953, #12237 ) ; +#6752 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999875300, -0.0000000000000000000, -3.350000000000000500 ) ) ; +#6753 = PLANE ( 'NONE', #6606 ) ; +#6754 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.3999999999999999700, 4.750000000000000000 ) ) ; +#6755 = ADVANCED_FACE ( 'NONE', ( #14310 ), #15607, .T. ) ; +#6756 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 0.7999999999999983800, 9.290000000000008000 ) ) ; +#6757 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999920400, 0.4000000000000000200, 2.050000000000003400 ) ) ; +#6758 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6759 = ORIENTED_EDGE ( 'NONE', *, *, #5723, .F. ) ; +#6760 = ORIENTED_EDGE ( 'NONE', *, *, #10499, .F. ) ; +#6761 = EDGE_CURVE ( 'NONE', #14938, #9820, #4778, .T. ) ; +#6762 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000041900, 0.8000000000000000400, -2.449999999999997500 ) ) ; +#6763 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, -1.674999999999998900 ) ) ; +#6764 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 2.649999999999999500 ) ) ; +#6765 = ORIENTED_EDGE ( 'NONE', *, *, #8463, .T. ) ; +#6766 = ORIENTED_EDGE ( 'NONE', *, *, #7141, .T. ) ; +#6767 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.4000000000000000200, -3.349999999999998800 ) ) ; +#6768 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999967700, 0.0000000000000000000, 6.550000000000000700 ) ) ; +#6769 = EDGE_CURVE ( 'NONE', #1515, #11371, #6712, .T. ) ; +#6770 = ORIENTED_EDGE ( 'NONE', *, *, #2648, .F. ) ; +#6771 = VECTOR ( 'NONE', #2116, 1000.000000000000000 ) ; +#6772 = VECTOR ( 'NONE', #11529, 1000.000000000000000 ) ; +#6773 = AXIS2_PLACEMENT_3D ( 'NONE', #11227, #12371, #8849 ) ; +#6774 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.548860246407863300E-016 ) ) ; +#6775 = ORIENTED_EDGE ( 'NONE', *, *, #8676, .F. ) ; +#6776 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.150000000000000400, 9.290000000000000900 ) ) ; +#6777 = ORIENTED_EDGE ( 'NONE', *, *, #946, .F. ) ; +#6778 = FACE_OUTER_BOUND ( 'NONE', #1380, .T. ) ; +#6779 = ORIENTED_EDGE ( 'NONE', *, *, #11354, .T. ) ; +#6780 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#6781 = EDGE_CURVE ( 'NONE', #12171, #9503, #5935, .T. ) ; +#6782 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, -0.3500000000000004800 ) ) ; +#6783 = EDGE_CURVE ( 'NONE', #13372, #2125, #1521, .T. ) ; +#6784 = VERTEX_POINT ( 'NONE', #12262 ) ; +#6785 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6786 = VECTOR ( 'NONE', #10881, 1000.000000000000000 ) ; +#6787 = VECTOR ( 'NONE', #1200, 1000.000000000000000 ) ; +#6788 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, -2.625000000000000400 ) ) ; +#6789 = EDGE_LOOP ( 'NONE', ( #12537, #5320, #343, #7270 ) ) ; +#6790 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6791 = ORIENTED_EDGE ( 'NONE', *, *, #273, .F. ) ; +#6792 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 1.637941840314110200, 3.649999999999999500 ) ) ; +#6793 = EDGE_CURVE ( 'NONE', #10922, #1908, #6322, .T. ) ; +#6794 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 0.5500000000000010400 ) ) ; +#6795 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6796 = ORIENTED_EDGE ( 'NONE', *, *, #7490, .T. ) ; +#6797 = FACE_OUTER_BOUND ( 'NONE', #3385, .T. ) ; +#6798 = ORIENTED_EDGE ( 'NONE', *, *, #13264, .F. ) ; +#6799 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.0000000000000000000, 1.850000000000000100 ) ) ; +#6800 = LINE ( 'NONE', #8144, #13445 ) ; +#6801 = PRESENTATION_STYLE_ASSIGNMENT (( #7796 ) ) ; +#6802 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6803 = EDGE_CURVE ( 'NONE', #342, #10261, #15069, .T. ) ; +#6804 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6805 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 1.637941840314110200, 4.049999999999999800 ) ) ; +#6806 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#6807 = CARTESIAN_POINT ( 'NONE', ( 1.004371745008228700E-015, 0.7999999999999977100, 9.090000000000007000 ) ) ; +#6808 = VECTOR ( 'NONE', #9664, 1000.000000000000000 ) ; +#6809 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.3999999999999999700, 5.050000000000000700 ) ) ; +#6810 = EDGE_LOOP ( 'NONE', ( #9900, #15149, #2453, #1250 ) ) ; +#6811 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6812 = FACE_OUTER_BOUND ( 'NONE', #6253, .T. ) ; +#6813 = LINE ( 'NONE', #2719, #12109 ) ; +#6814 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 4.149999999999999500 ) ) ; +#6815 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2414, 'distance_accuracy_value', 'NONE'); +#6816 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 4.149999999999999500 ) ) ; +#6817 = AXIS2_PLACEMENT_3D ( 'NONE', #12335, #8814, #2770 ) ; +#6819 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#6818 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6820 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6821 = FACE_OUTER_BOUND ( 'NONE', #13672, .T. ) ; +#6822 = VERTEX_POINT ( 'NONE', #10968 ) ; +#6823 = ORIENTED_EDGE ( 'NONE', *, *, #8762, .T. ) ; +#6824 = ADVANCED_FACE ( 'NONE', ( #11078 ), #6136, .F. ) ; +#6825 = EDGE_CURVE ( 'NONE', #3622, #2237, #10877, .T. ) ; +#6826 = LINE ( 'NONE', #6613, #5485 ) ; +#6827 = VECTOR ( 'NONE', #7492, 1000.000000000000000 ) ; +#6828 = EDGE_CURVE ( 'NONE', #14092, #9694, #9373, .T. ) ; +#6829 = ORIENTED_EDGE ( 'NONE', *, *, #5750, .T. ) ; +#6830 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, -0.3499999999999991500 ) ) ; +#6831 = ADVANCED_FACE ( 'NONE', ( #1346 ), #13556, .F. ) ; +#6832 = EDGE_CURVE ( 'NONE', #4337, #3666, #13929, .T. ) ; +#6833 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6834 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000034500, 0.4000000000000000200, -0.9499999999999990700 ) ) ; +#6835 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6836 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 0.7999999999999760600, -2.880000000000007400 ) ) ; +#6837 = ORIENTED_EDGE ( 'NONE', *, *, #12093, .T. ) ; +#6838 = VECTOR ( 'NONE', #9044, 1000.000000000000000 ) ; +#6839 = ORIENTED_EDGE ( 'NONE', *, *, #10399, .T. ) ; +#6840 = VERTEX_POINT ( 'NONE', #50 ) ; +#6841 = ORIENTED_EDGE ( 'NONE', *, *, #1043, .F. ) ; +#6842 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6843 = ORIENTED_EDGE ( 'NONE', *, *, #11266, .T. ) ; +#6844 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, 5.650000000000000400 ) ) ; +#6845 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#6846 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6847 = LINE ( 'NONE', #3169, #5486 ) ; +#6848 = ORIENTED_EDGE ( 'NONE', *, *, #6781, .F. ) ; +#6849 = ORIENTED_EDGE ( 'NONE', *, *, #4271, .F. ) ; +#6850 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.0000000000000000000, 2.950000000000000200 ) ) ; +#6851 = EDGE_CURVE ( 'NONE', #1214, #3605, #8624, .T. ) ; +#6852 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.0000000000000000000, 1.849999999999999900 ) ) ; +#6853 = VERTEX_POINT ( 'NONE', #6236 ) ; +#6854 = FACE_OUTER_BOUND ( 'NONE', #5374, .T. ) ; +#6855 = PLANE ( 'NONE', #8500 ) ; +#6856 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999936400, 0.0000000000000000000, 2.649999999999999500 ) ) ; +#6857 = ORIENTED_EDGE ( 'NONE', *, *, #4184, .F. ) ; +#6858 = VERTEX_POINT ( 'NONE', #8688 ) ; +#6859 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000002500, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#6860 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000034500, 0.4000000000000000200, -1.850000000000000100 ) ) ; +#6861 = VECTOR ( 'NONE', #3304, 1000.000000000000000 ) ; +#6862 = PRESENTATION_STYLE_ASSIGNMENT (( #2883 ) ) ; +#6863 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 7.325000000000002000 ) ) ; +#6864 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.3999999999999999700, 2.549999999999999800 ) ) ; +#6865 = EDGE_CURVE ( 'NONE', #12938, #1442, #2670, .T. ) ; +#6866 = AXIS2_PLACEMENT_3D ( 'NONE', #6717, #4085, #13985 ) ; +#6868 = ORIENTED_EDGE ( 'NONE', *, *, #998, .T. ) ; +#6867 = AXIS2_PLACEMENT_3D ( 'NONE', #6415, #315, #4052 ) ; +#6869 = CARTESIAN_POINT ( 'NONE', ( -6.050000000000001600, 3.149999999999999900, 7.440000000000001300 ) ) ; +#6870 = ORIENTED_EDGE ( 'NONE', *, *, #5209, .T. ) ; +#6871 = ORIENTED_EDGE ( 'NONE', *, *, #3125, .F. ) ; +#6872 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 4.325000000000001100 ) ) ; +#6873 = ORIENTED_EDGE ( 'NONE', *, *, #15682, .F. ) ; +#6874 = ORIENTED_EDGE ( 'NONE', *, *, #7675, .T. ) ; +#6875 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6876 = VERTEX_POINT ( 'NONE', #4833 ) ; +#6878 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6877 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999937500, 0.4000000000000000200, 3.550000000000001200 ) ) ; +#6879 = LINE ( 'NONE', #4949, #11415 ) ; +#6880 = LINE ( 'NONE', #15450, #14468 ) ; +#6881 = EDGE_CURVE ( 'NONE', #9610, #823, #15422, .T. ) ; +#6882 = PLANE ( 'NONE', #12545 ) ; +#6883 = EDGE_LOOP ( 'NONE', ( #4370, #5649, #415, #4081 ) ) ; +#6884 = ORIENTED_EDGE ( 'NONE', *, *, #6449, .T. ) ; +#6885 = ORIENTED_EDGE ( 'NONE', *, *, #576, .F. ) ; +#6886 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6887 = EDGE_CURVE ( 'NONE', #15399, #6133, #6130, .T. ) ; +#6888 = ORIENTED_EDGE ( 'NONE', *, *, #14110, .T. ) ; +#6889 = LINE ( 'NONE', #13829, #4428 ) ; +#6890 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6891 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, -15.05858178898088800, -8.800000000000000700 ) ) ; +#6892 = VECTOR ( 'NONE', #5997, 1000.000000000000000 ) ; +#6893 = LINE ( 'NONE', #8898, #4197 ) ; +#6894 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6895 = LINE ( 'NONE', #2940, #11805 ) ; +#6896 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6897 = ORIENTED_EDGE ( 'NONE', *, *, #11576, .T. ) ; +#6898 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 9.550000000000000700 ) ) ; +#6899 = EDGE_LOOP ( 'NONE', ( #14827, #13862, #1542, #2730 ) ) ; +#6900 = EDGE_CURVE ( 'NONE', #11929, #2838, #2465, .T. ) ; +#6901 = EDGE_LOOP ( 'NONE', ( #9738, #3828, #14828, #3958 ) ) ; +#6902 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6903 = LINE ( 'NONE', #14809, #3843 ) ; +#6904 = LINE ( 'NONE', #5722, #5179 ) ; +#6905 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#6906 = VECTOR ( 'NONE', #9474, 1000.000000000000000 ) ; +#6907 = VECTOR ( 'NONE', #13129, 1000.000000000000000 ) ; +#6908 = ORIENTED_EDGE ( 'NONE', *, *, #2612, .F. ) ; +#6909 = DIRECTION ( 'NONE', ( -1.104919411450195700E-016, 3.506355962080744500E-015, -1.000000000000000000 ) ) ; +#6910 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999952400, 0.4000000000000000200, 4.150000000000001200 ) ) ; +#6911 = ADVANCED_FACE ( 'NONE', ( #2856 ), #12112, .T. ) ; +#6912 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#6913 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6914 = ORIENTED_EDGE ( 'NONE', *, *, #499, .T. ) ; +#6915 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#6916 = SURFACE_STYLE_USAGE ( .BOTH. , #15034 ) ; +#6917 = ADVANCED_FACE ( 'NONE', ( #6694 ), #14570, .T. ) ; +#6918 = ORIENTED_EDGE ( 'NONE', *, *, #1591, .F. ) ; +#6919 = AXIS2_PLACEMENT_3D ( 'NONE', #177, #10230, #12873 ) ; +#6920 = ORIENTED_EDGE ( 'NONE', *, *, #6360, .F. ) ; +#6921 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6922 = LINE ( 'NONE', #13479, #11832 ) ; +#6923 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6924 = LINE ( 'NONE', #2553, #8244 ) ; +#6925 = LINE ( 'NONE', #1332, #3661 ) ; +#6926 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, 5.050000000000000700 ) ) ; +#6927 = EDGE_CURVE ( 'NONE', #148, #14268, #1707, .T. ) ; +#6928 = FACE_OUTER_BOUND ( 'NONE', #11709, .T. ) ; +#6929 = ORIENTED_EDGE ( 'NONE', *, *, #3487, .F. ) ; +#6930 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6931 = ORIENTED_EDGE ( 'NONE', *, *, #2056, .F. ) ; +#6932 = EDGE_CURVE ( 'NONE', #8575, #3027, #13519, .T. ) ; +#6934 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6933 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6935 = ORIENTED_EDGE ( 'NONE', *, *, #13317, .T. ) ; +#6936 = ORIENTED_EDGE ( 'NONE', *, *, #9951, .F. ) ; +#6937 = EDGE_CURVE ( 'NONE', #6723, #8386, #9902, .T. ) ; +#6938 = ORIENTED_EDGE ( 'NONE', *, *, #11945, .T. ) ; +#6939 = LINE ( 'NONE', #3934, #3863 ) ; +#6940 = FACE_OUTER_BOUND ( 'NONE', #3289, .T. ) ; +#6941 = AXIS2_PLACEMENT_3D ( 'NONE', #5186, #14808, #10067 ) ; +#6942 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999984400, 0.4000000000000000200, 7.150000000000000400 ) ) ; +#6943 = VECTOR ( 'NONE', #3644, 1000.000000000000000 ) ; +#6944 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6945 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#6946 = EDGE_LOOP ( 'NONE', ( #5901, #14820, #8121, #15056 ) ) ; +#6947 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 5.050000000000000700 ) ) ; +#6948 = ORIENTED_EDGE ( 'NONE', *, *, #14481, .T. ) ; +#6949 = VERTEX_POINT ( 'NONE', #10040 ) ; +#6950 = AXIS2_PLACEMENT_3D ( 'NONE', #8223, #4492, #3356 ) ; +#6951 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6952 = PLANE ( 'NONE', #7761 ) ; +#6953 = EDGE_CURVE ( 'NONE', #13863, #12413, #12560, .T. ) ; +#6954 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999936400, 0.0000000000000000000, 3.550000000000002900 ) ) ; +#6955 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999960900, 0.8000000000000000400, -1.850000000000001000 ) ) ; +#6956 = FACE_OUTER_BOUND ( 'NONE', #5041, .T. ) ; +#6957 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6958 = FACE_OUTER_BOUND ( 'NONE', #4568, .T. ) ; +#6959 = LINE ( 'NONE', #1236, #7338 ) ; +#6960 = ORIENTED_EDGE ( 'NONE', *, *, #10969, .F. ) ; +#6961 = AXIS2_PLACEMENT_3D ( 'NONE', #13642, #2835, #1713 ) ; +#6962 = ORIENTED_EDGE ( 'NONE', *, *, #6014, .T. ) ; +#6963 = AXIS2_PLACEMENT_3D ( 'NONE', #15291, #10350, #4292 ) ; +#6964 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6965 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999991400, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#6966 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6967 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6968 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 5.825000000000002000 ) ) ; +#6969 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, 9.550000000000000700 ) ) ; +#6970 = ORIENTED_EDGE ( 'NONE', *, *, #582, .F. ) ; +#6971 = FACE_OUTER_BOUND ( 'NONE', #4086, .T. ) ; +#6972 = ORIENTED_EDGE ( 'NONE', *, *, #14846, .T. ) ; +#6973 = ORIENTED_EDGE ( 'NONE', *, *, #6106, .F. ) ; +#6974 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#6975 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000004300, 0.4000000000000000200, 8.050000000000000700 ) ) ; +#6976 = EDGE_LOOP ( 'NONE', ( #6017, #7887, #7795, #10378 ) ) ; +#6977 = FACE_OUTER_BOUND ( 'NONE', #10082, .T. ) ; +#6978 = VECTOR ( 'NONE', #10965, 1000.000000000000000 ) ; +#6979 = EDGE_CURVE ( 'NONE', #4916, #8949, #14665, .T. ) ; +#6980 = CARTESIAN_POINT ( 'NONE', ( -7.852000000000001200, 3.050000000000000700, -2.872928932188135100 ) ) ; +#6981 = PLANE ( 'NONE', #4455 ) ; +#6982 = ORIENTED_EDGE ( 'NONE', *, *, #12568, .T. ) ; +#6983 = EDGE_LOOP ( 'NONE', ( #10665, #5127, #4941, #13014 ) ) ; +#6984 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, -15.05858178898088800, -9.600000000000001400 ) ) ; +#6985 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#6986 = ORIENTED_EDGE ( 'NONE', *, *, #13000, .T. ) ; +#6987 = EDGE_CURVE ( 'NONE', #4477, #126, #3423, .T. ) ; +#6988 = ORIENTED_EDGE ( 'NONE', *, *, #5539, .T. ) ; +#6989 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6990 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 2.649999999999999500 ) ) ; +#6991 = FACE_OUTER_BOUND ( 'NONE', #11332, .T. ) ; +#6992 = VECTOR ( 'NONE', #8262, 1000.000000000000000 ) ; +#6993 = VERTEX_POINT ( 'NONE', #1567 ) ; +#6994 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999937500, 0.0000000000000000000, 3.550000000000003800 ) ) ; +#6995 = ADVANCED_FACE ( 'NONE', ( #3247 ), #5267, .F. ) ; +#6996 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6997 = EDGE_CURVE ( 'NONE', #4537, #13372, #13725, .T. ) ; +#6998 = EDGE_CURVE ( 'NONE', #5237, #4309, #6893, .T. ) ; +#6999 = VERTEX_POINT ( 'NONE', #5155 ) ; +#7000 = VECTOR ( 'NONE', #14436, 1000.000000000000000 ) ; +#7001 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7002 = ORIENTED_EDGE ( 'NONE', *, *, #7388, .T. ) ; +#7003 = MANIFOLD_SOLID_BREP ( 'LPattern1[13]', #13488 ) ; +#7004 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7005 = VECTOR ( 'NONE', #1939, 1000.000000000000000 ) ; +#7006 = LINE ( 'NONE', #5388, #2198 ) ; +#7007 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999988600, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#7008 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3719 ), #7824 ) ; +#7009 = ADVANCED_FACE ( 'NONE', ( #5349 ), #14834, .T. ) ; +#7010 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 7.150000000000000400 ) ) ; +#7011 = AXIS2_PLACEMENT_3D ( 'NONE', #2243, #3425, #3482 ) ; +#7012 = FACE_BOUND ( 'NONE', #5731, .T. ) ; +#7013 = ORIENTED_EDGE ( 'NONE', *, *, #3785, .T. ) ; +#7014 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 0.3749999999999994400 ) ) ; +#7015 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7016 = FACE_OUTER_BOUND ( 'NONE', #12392, .T. ) ; +#7017 = FACE_OUTER_BOUND ( 'NONE', #676, .T. ) ; +#7018 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, -0.0000000000000000000, -3.174999999999998900 ) ) ; +#7019 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1780, 'distance_accuracy_value', 'NONE'); +#7020 = EDGE_CURVE ( 'NONE', #13067, #14758, #2093, .T. ) ; +#7021 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000020300, 0.8000000000000000400, 2.649999999999999500 ) ) ; +#7022 = CLOSED_SHELL ( 'NONE', ( #12299, #11081, #3445, #8031, #1527, #6430, #10638, #7630, #1389, #13191, #14856, #53, #9850, #419, #14146, #4104, #5243, #4846, #1691, #113, #10166, #5874, #10002, #14647, #8985, #8743, #1509, #2021, #2969, #729, #2238, #12023, #5225, #12481, #5987, #2876, #2644, #13533, #11913 ) ) ; +#7023 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7024 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.3999999999999999700, 2.549999999999999800 ) ) ; +#7025 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -5.478074134663584300E-015 ) ) ; +#7026 = EDGE_LOOP ( 'NONE', ( #5494, #6456, #7331, #181 ) ) ; +#7027 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7028 = VECTOR ( 'NONE', #11469, 1000.000000000000000 ) ; +#7029 = ORIENTED_EDGE ( 'NONE', *, *, #6106, .T. ) ; +#7030 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#7031 = VECTOR ( 'NONE', #110, 1000.000000000000000 ) ; +#7032 = VECTOR ( 'NONE', #13938, 1000.000000000000000 ) ; +#7033 = AXIS2_PLACEMENT_3D ( 'NONE', #7898, #4252, #6819 ) ; +#7035 = CARTESIAN_POINT ( 'NONE', ( -7.850000000000007600, 0.7999999999999967100, 9.082928932188135500 ) ) ; +#7034 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7036 = FILL_AREA_STYLE_COLOUR ( '', #7780 ) ; +#7037 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999890200, 0.0000000000000000000, -1.849999999999998800 ) ) ; +#7038 = AXIS2_PLACEMENT_3D ( 'NONE', #1716, #1662, #10193 ) ; +#7039 = ORIENTED_EDGE ( 'NONE', *, *, #5893, .T. ) ; +#7040 = LINE ( 'NONE', #10391, #10049 ) ; +#7041 = ORIENTED_EDGE ( 'NONE', *, *, #11251, .F. ) ; +#7042 = ORIENTED_EDGE ( 'NONE', *, *, #11696, .T. ) ; +#7043 = EDGE_CURVE ( 'NONE', #1672, #8298, #8218, .T. ) ; +#7044 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999890200, 0.4000000000000000200, -1.849999999999998800 ) ) ; +#7045 = EDGE_CURVE ( 'NONE', #10684, #10743, #4958, .T. ) ; +#7046 = LINE ( 'NONE', #6898, #6657 ) ; +#7047 = FACE_OUTER_BOUND ( 'NONE', #9159, .T. ) ; +#7048 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 4.149999999999999500 ) ) ; +#7049 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.0000000000000000000, 1.849999999999999900 ) ) ; +#7050 = VERTEX_POINT ( 'NONE', #3877 ) ; +#7051 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#7052 = VERTEX_POINT ( 'NONE', #12419 ) ; +#7053 = ORIENTED_EDGE ( 'NONE', *, *, #977, .F. ) ; +#7054 = ORIENTED_EDGE ( 'NONE', *, *, #4804, .T. ) ; +#7055 = ORIENTED_EDGE ( 'NONE', *, *, #13254, .T. ) ; +#7056 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#7057 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#7058 = ORIENTED_EDGE ( 'NONE', *, *, #7870, .T. ) ; +#7059 = ORIENTED_EDGE ( 'NONE', *, *, #12251, .T. ) ; +#7060 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 2.649999999999999500 ) ) ; +#7061 = FACE_OUTER_BOUND ( 'NONE', #991, .T. ) ; +#7062 = LINE ( 'NONE', #4065, #11229 ) ; +#7063 = LINE ( 'NONE', #15478, #7261 ) ; +#7064 = VERTEX_POINT ( 'NONE', #5102 ) ; +#7065 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#7066 = EDGE_CURVE ( 'NONE', #8185, #14674, #7081, .T. ) ; +#7068 = ORIENTED_EDGE ( 'NONE', *, *, #1409, .F. ) ; +#7067 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000026600, 0.8000000000000000400, 1.149999999999999900 ) ) ; +#7069 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7070 = ORIENTED_EDGE ( 'NONE', *, *, #8951, .T. ) ; +#7071 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7072 = EDGE_LOOP ( 'NONE', ( #6570, #897, #11094 ) ) ; +#7073 = ADVANCED_FACE ( 'NONE', ( #11060 ), #247, .T. ) ; +#7074 = EDGE_LOOP ( 'NONE', ( #1781 ) ) ; +#7075 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000007600, 0.7999999999999971600, -2.872928932188135900 ) ) ; +#7076 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000001400, 3.050000000000000700, -2.872928932188135900 ) ) ; +#7077 = EDGE_CURVE ( 'NONE', #1028, #11235, #9737, .T. ) ; +#7078 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.349999999999999600, -2.779999999999999400 ) ) ; +#7079 = PRESENTATION_STYLE_ASSIGNMENT (( #15196 ) ) ; +#7080 = LINE ( 'NONE', #2257, #3422 ) ; +#7081 = LINE ( 'NONE', #6341, #4411 ) ; +#7082 = AXIS2_PLACEMENT_3D ( 'NONE', #203, #6396, #12268 ) ; +#7083 = LINE ( 'NONE', #4209, #4945 ) ; +#7084 = PLANE ( 'NONE', #9937 ) ; +#7085 = ORIENTED_EDGE ( 'NONE', *, *, #7066, .F. ) ; +#7086 = ORIENTED_EDGE ( 'NONE', *, *, #7043, .F. ) ; +#7088 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, -15.05858178898088800, -8.800000000000000700 ) ) ; +#7087 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.4000000000000000200, -3.350000000000000500 ) ) ; +#7089 = ADVANCED_FACE ( 'NONE', ( #10492 ), #6442, .F. ) ; +#7090 = ORIENTED_EDGE ( 'NONE', *, *, #4732, .F. ) ; +#7091 = EDGE_CURVE ( 'NONE', #6603, #2623, #3819, .T. ) ; +#7092 = ORIENTED_EDGE ( 'NONE', *, *, #14340, .T. ) ; +#7093 = VECTOR ( 'NONE', #7730, 1000.000000000000000 ) ; +#7094 = LINE ( 'NONE', #5357, #8230 ) ; +#7095 = LINE ( 'NONE', #5918, #11629 ) ; +#7096 = VECTOR ( 'NONE', #5030, 1000.000000000000000 ) ; +#7097 = EDGE_LOOP ( 'NONE', ( #3620, #4235, #6262, #7347, #9472, #3145 ) ) ; +#7098 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -5.102127870520021000E-016 ) ) ; +#7099 = EDGE_CURVE ( 'NONE', #1720, #12522, #9172, .T. ) ; +#7100 = VERTEX_POINT ( 'NONE', #6654 ) ; +#7101 = AXIS2_PLACEMENT_3D ( 'NONE', #11287, #13667, #1320 ) ; +#7102 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 5.478074134663595300E-015 ) ) ; +#7103 = ORIENTED_EDGE ( 'NONE', *, *, #6769, .F. ) ; +#7104 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 5.049999999999997200 ) ) ; +#7105 = AXIS2_PLACEMENT_3D ( 'NONE', #3549, #13273, #6030 ) ; +#7106 = VECTOR ( 'NONE', #4917, 1000.000000000000000 ) ; +#7107 = VECTOR ( 'NONE', #12787, 1000.000000000000000 ) ; +#7108 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000000400, 3.149999999999999900, -2.872928932188135100 ) ) ; +#7109 = VECTOR ( 'NONE', #7189, 1000.000000000000000 ) ; +#7110 = VECTOR ( 'NONE', #6413, 1000.000000000000000 ) ; +#7111 = LINE ( 'NONE', #12850, #13347 ) ; +#7112 = PLANE ( 'NONE', #5851 ) ; +#7113 = ORIENTED_EDGE ( 'NONE', *, *, #6449, .F. ) ; +#7114 = ORIENTED_EDGE ( 'NONE', *, *, #5329, .F. ) ; +#7115 = EDGE_CURVE ( 'NONE', #2549, #595, #381, .T. ) ; +#7116 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7117 = ORIENTED_EDGE ( 'NONE', *, *, #8256, .F. ) ; +#7118 = ORIENTED_EDGE ( 'NONE', *, *, #9707, .T. ) ; +#7119 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #10174, #9077, #13896, #4207, #6677, #6517 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 4.336808689942017700E-019, 0.0002388152348380261900, 0.0004776304696760519500 ), + .UNSPECIFIED. ) ; +#7120 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7121 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999906200, 0.4000000000000000200, 0.5500000000000001600 ) ) ; +#7122 = VECTOR ( 'NONE', #2201, 1000.000000000000000 ) ; +#7123 = VECTOR ( 'NONE', #11098, 1000.000000000000000 ) ; +#7124 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 1.637941840314110200, 2.949999999999999300 ) ) ; +#7125 = AXIS2_PLACEMENT_3D ( 'NONE', #228, #10070, #1439 ) ; +#7126 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999890200, 0.4000000000000000200, -0.9499999999999975100 ) ) ; +#7127 = CARTESIAN_POINT ( 'NONE', ( 7.565624327289690100, 3.350000000000000100, 9.069230338724654700 ) ) ; +#7128 = LINE ( 'NONE', #11567, #4249 ) ; +#7129 = SURFACE_SIDE_STYLE ('',( #246 ) ) ; +#7130 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7131 = PLANE ( 'NONE', #11682 ) ; +#7132 = ORIENTED_EDGE ( 'NONE', *, *, #10539, .T. ) ; +#7133 = DIRECTION ( 'NONE', ( -1.204669080539449300E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7134 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7135 = EDGE_CURVE ( 'NONE', #4946, #11201, #4011, .T. ) ; +#7136 = LINE ( 'NONE', #14682, #3874 ) ; +#7137 = VECTOR ( 'NONE', #1996, 1000.000000000000000 ) ; +#7138 = EDGE_CURVE ( 'NONE', #7805, #2818, #13328, .T. ) ; +#7140 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 2.050000000000001600 ) ) ; +#7139 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, 3.550000000000001200 ) ) ; +#7141 = EDGE_CURVE ( 'NONE', #8245, #6135, #13895, .T. ) ; +#7142 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.3999999999999999700, 1.850000000000000100 ) ) ; +#7143 = SURFACE_STYLE_USAGE ( .BOTH. , #1038 ) ; +#7144 = EDGE_LOOP ( 'NONE', ( #6287, #4036, #5470, #5060, #3019, #2646 ) ) ; +#7145 = ORIENTED_EDGE ( 'NONE', *, *, #8143, .F. ) ; +#7146 = VERTEX_POINT ( 'NONE', #7838 ) ; +#7147 = ADVANCED_FACE ( 'NONE', ( #11791 ), #10419, .T. ) ; +#7148 = VECTOR ( 'NONE', #5307, 1000.000000000000000 ) ; +#7149 = VERTEX_POINT ( 'NONE', #15045 ) ; +#7150 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 4.599999999999999600 ) ) ; +#7151 = ORIENTED_EDGE ( 'NONE', *, *, #4302, .F. ) ; +#7152 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#7153 = VECTOR ( 'NONE', #6785, 1000.000000000000000 ) ; +#7154 = FACE_OUTER_BOUND ( 'NONE', #12024, .T. ) ; +#7155 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#7156 = ORIENTED_EDGE ( 'NONE', *, *, #2458, .T. ) ; +#7157 = EDGE_CURVE ( 'NONE', #12615, #9183, #1502, .T. ) ; +#7158 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#7159 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.7000000000000009500, -6.900000000000000400 ) ) ; +#7160 = VERTEX_POINT ( 'NONE', #14094 ) ; +#7161 = ADVANCED_FACE ( 'NONE', ( #12164 ), #1784, .F. ) ; +#7162 = ORIENTED_EDGE ( 'NONE', *, *, #14971, .T. ) ; +#7163 = CIRCLE ( 'NONE', #11613, 0.2500000000000002200 ) ; +#7164 = EDGE_LOOP ( 'NONE', ( #7987, #1529, #14278, #5544, #536, #3255 ) ) ; +#7165 = EDGE_CURVE ( 'NONE', #8983, #13534, #9342, .T. ) ; +#7166 = VERTEX_POINT ( 'NONE', #9049 ) ; +#7167 = VECTOR ( 'NONE', #14588, 1000.000000000000000 ) ; +#7168 = CIRCLE ( 'NONE', #4336, 0.2749999999999991900 ) ; +#7169 = AXIS2_PLACEMENT_3D ( 'NONE', #1584, #11345, #12544 ) ; +#7170 = AXIS2_PLACEMENT_3D ( 'NONE', #8866, #2711, #13680 ) ; +#7171 = CARTESIAN_POINT ( 'NONE', ( -8.549999999999998900, 0.8000000000000000400, 9.550000000000000700 ) ) ; +#7172 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#7173 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -6.123233995736767300E-017 ) ) ; +#7174 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7175 = VERTEX_POINT ( 'NONE', #7782 ) ; +#7176 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7177 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#7178 = EDGE_LOOP ( 'NONE', ( #12912, #2372, #15757, #4835 ) ) ; +#7179 = FACE_OUTER_BOUND ( 'NONE', #5115, .T. ) ; +#7180 = ORIENTED_EDGE ( 'NONE', *, *, #3052, .T. ) ; +#7181 = EDGE_CURVE ( 'NONE', #7149, #11407, #15229, .T. ) ; +#7182 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7183 = LINE ( 'NONE', #15091, #9093 ) ; +#7184 = FACE_OUTER_BOUND ( 'NONE', #3268, .T. ) ; +#7185 = PLANE ( 'NONE', #14833 ) ; +#7186 = ADVANCED_FACE ( 'NONE', ( #10088 ), #10307, .F. ) ; +#7187 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7189 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7188 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 1.806230589874906900, 2.649999999999999500 ) ) ; +#7190 = EDGE_CURVE ( 'NONE', #11511, #12157, #8401, .T. ) ; +#7191 = AXIS2_PLACEMENT_3D ( 'NONE', #1398, #9871, #13435 ) ; +#7192 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#7193 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#7194 = VERTEX_POINT ( 'NONE', #7895 ) ; +#7195 = LINE ( 'NONE', #5256, #8908 ) ; +#7196 = CYLINDRICAL_SURFACE ( 'NONE', #13839, 0.2749999999999991900 ) ; +#7197 = EDGE_LOOP ( 'NONE', ( #3251, #11186, #13834, #6960 ) ) ; +#7198 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7199 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.4000000000000000200, 1.849999999999999900 ) ) ; +#7200 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 8.825000000000001100 ) ) ; +#7201 = EDGE_CURVE ( 'NONE', #10465, #1705, #11987, .T. ) ; +#7202 = SURFACE_SIDE_STYLE ('',( #4978 ) ) ; +#7203 = EDGE_CURVE ( 'NONE', #8170, #2777, #5921, .T. ) ; +#7204 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7205 = ORIENTED_EDGE ( 'NONE', *, *, #2129, .T. ) ; +#7206 = PLANE ( 'NONE', #4567 ) ; +#7207 = FACE_OUTER_BOUND ( 'NONE', #8018, .T. ) ; +#7208 = ORIENTED_EDGE ( 'NONE', *, *, #15059, .T. ) ; +#7209 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7210 = FACE_OUTER_BOUND ( 'NONE', #7197, .T. ) ; +#7211 = VECTOR ( 'NONE', #9611, 1000.000000000000000 ) ; +#7212 = AXIS2_PLACEMENT_3D ( 'NONE', #4165, #13696, #12561 ) ; +#7213 = EDGE_LOOP ( 'NONE', ( #10424, #1456, #1684, #9607 ) ) ; +#7214 = AXIS2_PLACEMENT_3D ( 'NONE', #15333, #10606, #8175 ) ; +#7215 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7216 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.349999999999999600, -2.872928932188135100 ) ) ; +#7217 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 5.050000000000000700 ) ) ; +#7218 = ORIENTED_EDGE ( 'NONE', *, *, #576, .T. ) ; +#7219 = LINE ( 'NONE', #2175, #14062 ) ; +#7220 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -6.100126508929432700E-015 ) ) ; +#7221 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 1.637941840314110200, 4.049999999999999800 ) ) ; +#7222 = VERTEX_POINT ( 'NONE', #11781 ) ; +#7223 = ORIENTED_EDGE ( 'NONE', *, *, #10924, .F. ) ; +#7224 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7225 = EDGE_LOOP ( 'NONE', ( #4019, #3837, #14168, #12276 ) ) ; +#7226 = EDGE_CURVE ( 'NONE', #2818, #1442, #2078, .T. ) ; +#7227 = ADVANCED_FACE ( 'NONE', ( #5150 ), #8043, .F. ) ; +#7228 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#7229 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7230 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, -1.850000000000000500 ) ) ; +#7231 = EDGE_CURVE ( 'NONE', #9332, #11702, #8779, .T. ) ; +#7232 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, 5.649999999999999500 ) ) ; +#7233 = ORIENTED_EDGE ( 'NONE', *, *, #8533, .T. ) ; +#7234 = VERTEX_POINT ( 'NONE', #9266 ) ; +#7235 = STYLED_ITEM ( 'NONE', ( #6801 ), #9047 ) ; +#7236 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7237 = VERTEX_POINT ( 'NONE', #15398 ) ; +#7238 = FACE_OUTER_BOUND ( 'NONE', #12900, .T. ) ; +#7239 = ORIENTED_EDGE ( 'NONE', *, *, #5562, .T. ) ; +#7240 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#7241 = ORIENTED_EDGE ( 'NONE', *, *, #7934, .F. ) ; +#7243 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 1.806230589874906900, -3.350000000000000500 ) ) ; +#7242 = PLANE ( 'NONE', #1095 ) ; +#7244 = LINE ( 'NONE', #2015, #10654 ) ; +#7245 = LINE ( 'NONE', #2827, #6470 ) ; +#7246 = DIRECTION ( 'NONE', ( 2.762298528625412100E-017, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7247 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7248 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7249 = ORIENTED_EDGE ( 'NONE', *, *, #12428, .T. ) ; +#7250 = ORIENTED_EDGE ( 'NONE', *, *, #14196, .T. ) ; +#7251 = VERTEX_POINT ( 'NONE', #9309 ) ; +#7252 = EDGE_CURVE ( 'NONE', #12072, #8974, #6115, .T. ) ; +#7253 = ORIENTED_EDGE ( 'NONE', *, *, #1022, .F. ) ; +#7254 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#7255 = VERTEX_POINT ( 'NONE', #15350 ) ; +#7256 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7257 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 7.150000000000000400 ) ) ; +#7258 = VECTOR ( 'NONE', #14579, 1000.000000000000000 ) ; +#7259 = VECTOR ( 'NONE', #9000, 1000.000000000000000 ) ; +#7260 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7261 = VECTOR ( 'NONE', #3409, 1000.000000000000000 ) ; +#7262 = ORIENTED_EDGE ( 'NONE', *, *, #14002, .T. ) ; +#7263 = PLANE ( 'NONE', #14594 ) ; +#7264 = VERTEX_POINT ( 'NONE', #826 ) ; +#7265 = ADVANCED_FACE ( 'NONE', ( #2842 ), #15299, .T. ) ; +#7266 = ORIENTED_EDGE ( 'NONE', *, *, #11158, .F. ) ; +#7267 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#7268 = ORIENTED_EDGE ( 'NONE', *, *, #9475, .F. ) ; +#7269 = VERTEX_POINT ( 'NONE', #5641 ) ; +#7270 = ORIENTED_EDGE ( 'NONE', *, *, #2432, .F. ) ; +#7271 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000039100, 0.8000000000000000400, -3.350000000000000500 ) ) ; +#7272 = VECTOR ( 'NONE', #1461, 1000.000000000000000 ) ; +#7273 = VECTOR ( 'NONE', #9446, 1000.000000000000000 ) ; +#7274 = VECTOR ( 'NONE', #5474, 1000.000000000000000 ) ; +#7275 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#7276 = EDGE_CURVE ( 'NONE', #8257, #6700, #13310, .T. ) ; +#7277 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7278 = LINE ( 'NONE', #7139, #8421 ) ; +#7279 = DIRECTION ( 'NONE', ( 9.035018104045869500E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7280 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7281 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.349999999999998800, -2.779999999999997600 ) ) ; +#7282 = EDGE_LOOP ( 'NONE', ( #2924, #213, #982, #7574 ) ) ; +#7283 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 19.59999999999999800 ) ) ; +#7284 = ORIENTED_EDGE ( 'NONE', *, *, #3106, .F. ) ; +#7285 = VERTEX_POINT ( 'NONE', #9412 ) ; +#7286 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.3999999999999999700, 8.050000000000000700 ) ) ; +#7287 = EDGE_CURVE ( 'NONE', #2237, #1689, #6880, .T. ) ; +#7288 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#7289 = AXIS2_PLACEMENT_3D ( 'NONE', #14326, #15519, #8273 ) ; +#7290 = PRESENTATION_STYLE_ASSIGNMENT (( #14861 ) ) ; +#7291 = VECTOR ( 'NONE', #13969, 1000.000000000000000 ) ; +#7292 = VECTOR ( 'NONE', #8524, 1000.000000000000000 ) ; +#7293 = LINE ( 'NONE', #2268, #12191 ) ; +#7294 = ORIENTED_EDGE ( 'NONE', *, *, #4895, .T. ) ; +#7295 = FACE_OUTER_BOUND ( 'NONE', #3038, .T. ) ; +#7296 = PLANE ( 'NONE', #7379 ) ; +#7297 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7298 = VECTOR ( 'NONE', #15152, 1000.000000000000000 ) ; +#7299 = ORIENTED_EDGE ( 'NONE', *, *, #10858, .F. ) ; +#7300 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#7301 = B_SPLINE_SURFACE_WITH_KNOTS ( 'NONE', 1, 3, ( + ( #13990, #670, #6721, #4307, #15199, #4367 ), + ( #7950, #5423, #565, #1790, #12804, #11636 ), + ( #623, #12849, #1839, #8047, #715, #3077 ), + ( #10312, #10257, #5592, #5534, #11483, #14097 ) ), + .UNSPECIFIED., .F., .F., .F., + ( 2, 1, 1, 2 ), + ( 4, 2, 4 ), + ( -0.01000000000000000000, 0.0000000000000000000, 1.000000000000000000, 1.010100000000000000 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#7302 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7303 = ORIENTED_EDGE ( 'NONE', *, *, #14908, .F. ) ; +#7304 = EDGE_CURVE ( 'NONE', #7684, #10694, #5538, .T. ) ; +#7305 = EDGE_CURVE ( 'NONE', #3170, #10394, #10863, .T. ) ; +#7306 = ORIENTED_EDGE ( 'NONE', *, *, #734, .F. ) ; +#7307 = VECTOR ( 'NONE', #3701, 1000.000000000000000 ) ; +#7308 = FACE_OUTER_BOUND ( 'NONE', #15260, .T. ) ; +#7309 = FACE_OUTER_BOUND ( 'NONE', #14479, .T. ) ; +#7310 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7962, 'distance_accuracy_value', 'NONE'); +#7311 = LINE ( 'NONE', #11121, #2477 ) ; +#7312 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, 0.7000000000000009500, -4.000000000000000000 ) ) ; +#7313 = ADVANCED_FACE ( 'NONE', ( #10655 ), #2051, .T. ) ; +#7314 = LINE ( 'NONE', #5736, #8075 ) ; +#7315 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #837 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13180, #8266, #12011 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7316 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7317 = ORIENTED_EDGE ( 'NONE', *, *, #3478, .F. ) ; +#7318 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7319 = ORIENTED_EDGE ( 'NONE', *, *, #668, .F. ) ; +#7320 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 1.806230589874906900, 5.650000000000000400 ) ) ; +#7321 = ORIENTED_EDGE ( 'NONE', *, *, #1349, .T. ) ; +#7322 = LINE ( 'NONE', #9845, #10543 ) ; +#7323 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7324 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 1.637941840314110200, 1.850000000000000100 ) ) ; +#7325 = LINE ( 'NONE', #9558, #14336 ) ; +#7326 = DIRECTION ( 'NONE', ( -6.100126508929432000E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#7327 = EDGE_CURVE ( 'NONE', #10633, #6683, #7637, .T. ) ; +#7328 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000034500, 0.4000000000000000200, -1.850000000000001000 ) ) ; +#7329 = LINE ( 'NONE', #10353, #4061 ) ; +#7330 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 0.3749999999999994400 ) ) ; +#7331 = ORIENTED_EDGE ( 'NONE', *, *, #1494, .T. ) ; +#7332 = ORIENTED_EDGE ( 'NONE', *, *, #12741, .F. ) ; +#7333 = ORIENTED_EDGE ( 'NONE', *, *, #12251, .F. ) ; +#7334 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999952400, 0.4000000000000000200, 5.050000000000000700 ) ) ; +#7335 = FACE_OUTER_BOUND ( 'NONE', #14193, .T. ) ; +#7336 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 3.000000000000000000 ) ) ; +#7337 = LINE ( 'NONE', #14837, #4260 ) ; +#7338 = VECTOR ( 'NONE', #7439, 1000.000000000000000 ) ; +#7339 = PLANE ( 'NONE', #3113 ) ; +#7340 = EDGE_LOOP ( 'NONE', ( #4373, #3320, #9069, #5958 ) ) ; +#7341 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2606 ), #9967 ) ; +#7342 = ADVANCED_FACE ( 'NONE', ( #8586 ), #6981, .F. ) ; +#7343 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7344 = EDGE_CURVE ( 'NONE', #13035, #13372, #11045, .T. ) ; +#7346 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7345 = PLANE ( 'NONE', #5712 ) ; +#7347 = ORIENTED_EDGE ( 'NONE', *, *, #14304, .F. ) ; +#7348 = VECTOR ( 'NONE', #7845, 1000.000000000000000 ) ; +#7349 = EDGE_CURVE ( 'NONE', #6300, #13797, #3610, .T. ) ; +#7350 = ORIENTED_EDGE ( 'NONE', *, *, #8522, .T. ) ; +#7351 = ORIENTED_EDGE ( 'NONE', *, *, #13254, .F. ) ; +#7352 = FILL_AREA_STYLE_COLOUR ( '', #9370 ) ; +#7353 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7354 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7355 = ORIENTED_EDGE ( 'NONE', *, *, #15355, .F. ) ; +#7356 = LINE ( 'NONE', #965, #6786 ) ; +#7357 = VECTOR ( 'NONE', #14940, 1000.000000000000000 ) ; +#7358 = ORIENTED_EDGE ( 'NONE', *, *, #10955, .T. ) ; +#7359 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7360 = ORIENTED_EDGE ( 'NONE', *, *, #52, .T. ) ; +#7361 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 1.806230589874906900, 2.649999999999999500 ) ) ; +#7362 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, -0.0000000000000000000, -2.449999999999998800 ) ) ; +#7363 = VERTEX_POINT ( 'NONE', #4465 ) ; +#7364 = VECTOR ( 'NONE', #12482, 1000.000000000000000 ) ; +#7365 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.3999999999999999700, 2.549999999999999800 ) ) ; +#7366 = ORIENTED_EDGE ( 'NONE', *, *, #10425, .T. ) ; +#7367 = VERTEX_POINT ( 'NONE', #10626 ) ; +#7368 = CARTESIAN_POINT ( 'NONE', ( -6.050000000000001600, 3.350000000000000100, 7.440000000000001300 ) ) ; +#7369 = FACE_OUTER_BOUND ( 'NONE', #9078, .T. ) ; +#7370 = EDGE_CURVE ( 'NONE', #13154, #9694, #5719, .T. ) ; +#7371 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.3999999999999999700, 2.950000000000000200 ) ) ; +#7372 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, -10.00000000000000000 ) ) ; +#7373 = ORIENTED_EDGE ( 'NONE', *, *, #74, .T. ) ; +#7374 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 9.550000000000000700 ) ) ; +#7375 = VERTEX_POINT ( 'NONE', #6063 ) ; +#7376 = EDGE_CURVE ( 'NONE', #6578, #14109, #5331, .T. ) ; +#7377 = LINE ( 'NONE', #12182, #13242 ) ; +#7378 = ORIENTED_EDGE ( 'NONE', *, *, #11251, .T. ) ; +#7379 = AXIS2_PLACEMENT_3D ( 'NONE', #4071, #12408, #2677 ) ; +#7380 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7381 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7382 = VECTOR ( 'NONE', #1271, 1000.000000000000000 ) ; +#7383 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#7384 = ADVANCED_FACE ( 'NONE', ( #369 ), #9672, .F. ) ; +#7385 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#7386 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7387 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7388 = EDGE_CURVE ( 'NONE', #9723, #7403, #1131, .T. ) ; +#7389 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14868 ), #11741 ) ; +#7390 = LINE ( 'NONE', #6915, #9466 ) ; +#7391 = ORIENTED_EDGE ( 'NONE', *, *, #644, .F. ) ; +#7392 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude5[2]', #2115 ) ; +#7393 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #1761, #12552, #15122, #13796, #12611, #1543, #15074, #12447, #7808, #6467, #6421, #476, #9027 ), + .UNSPECIFIED., .F., .F., + ( 4, 3, 3, 3, 4 ), + ( 0.0000000000000000000, 5.091068730646591700E-005, 9.613048157375484800E-005, 0.0001413399754770182100, 0.0001810054085857360200 ), + .UNSPECIFIED. ) ; +#7394 = VECTOR ( 'NONE', #1594, 1000.000000000000000 ) ; +#7395 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.3999999999999999700, 4.049999999999999800 ) ) ; +#7396 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7397 = ADVANCED_FACE ( 'NONE', ( #747 ), #9721, .F. ) ; +#7398 = VERTEX_POINT ( 'NONE', #14401 ) ; +#7399 = EDGE_CURVE ( 'NONE', #3808, #11993, #8954, .T. ) ; +#7400 = AXIS2_PLACEMENT_3D ( 'NONE', #1875, #3163, #10292 ) ; +#7401 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#7402 = VERTEX_POINT ( 'NONE', #15590 ) ; +#7403 = VERTEX_POINT ( 'NONE', #9617 ) ; +#7404 = LINE ( 'NONE', #15033, #2996 ) ; +#7405 = ORIENTED_EDGE ( 'NONE', *, *, #14846, .F. ) ; +#7406 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 21.10000000000000100 ) ) ; +#7407 = LINE ( 'NONE', #2916, #10038 ) ; +#7408 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 7.600000000000000500 ) ) ; +#7409 = EDGE_CURVE ( 'NONE', #13023, #5813, #1315, .T. ) ; +#7410 = ADVANCED_FACE ( 'NONE', ( #12149 ), #7185, .F. ) ; +#7411 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 9.375000000000000000 ) ) ; +#7412 = ORIENTED_EDGE ( 'NONE', *, *, #7840, .T. ) ; +#7413 = PLANE ( 'NONE', #1234 ) ; +#7414 = FACE_OUTER_BOUND ( 'NONE', #1263, .T. ) ; +#7415 = EDGE_LOOP ( 'NONE', ( #6062, #6914, #10363, #10284 ) ) ; +#7416 = ADVANCED_FACE ( 'NONE', ( #13115 ), #7084, .T. ) ; +#7417 = AXIS2_PLACEMENT_3D ( 'NONE', #14648, #7387, #124 ) ; +#7418 = EDGE_LOOP ( 'NONE', ( #3797, #10958, #15440, #12056 ) ) ; +#7419 = VECTOR ( 'NONE', #5613, 1000.000000000000000 ) ; +#7420 = AXIS2_PLACEMENT_3D ( 'NONE', #8486, #7155, #9693 ) ; +#7421 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#7422 = VERTEX_POINT ( 'NONE', #1136 ) ; +#7423 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7424 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.4000000000000000200, 2.950000000000000200 ) ) ; +#7426 = ORIENTED_EDGE ( 'NONE', *, *, #8616, .T. ) ; +#7425 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 1.149999999999999900 ) ) ; +#7427 = ORIENTED_EDGE ( 'NONE', *, *, #6987, .F. ) ; +#7428 = EDGE_CURVE ( 'NONE', #13154, #4537, #15568, .T. ) ; +#7429 = PLANE ( 'NONE', #9056 ) ; +#7430 = ORIENTED_EDGE ( 'NONE', *, *, #3180, .T. ) ; +#7431 = ORIENTED_EDGE ( 'NONE', *, *, #9192, .F. ) ; +#7432 = ORIENTED_EDGE ( 'NONE', *, *, #15265, .T. ) ; +#7433 = EDGE_CURVE ( 'NONE', #7441, #7726, #2826, .T. ) ; +#7434 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.4000000000000000200, -3.350000000000000500 ) ) ; +#7435 = EDGE_CURVE ( 'NONE', #9710, #4033, #13501, .T. ) ; +#7436 = LINE ( 'NONE', #9248, #12908 ) ; +#7437 = VECTOR ( 'NONE', #3327, 1000.000000000000000 ) ; +#7438 = VECTOR ( 'NONE', #12441, 1000.000000000000000 ) ; +#7439 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7440 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#7441 = VERTEX_POINT ( 'NONE', #12047 ) ; +#7442 = VERTEX_POINT ( 'NONE', #6009 ) ; +#7443 = ORIENTED_EDGE ( 'NONE', *, *, #11508, .T. ) ; +#7444 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, -0.0000000000000000000, -2.449999999999998800 ) ) ; +#7445 = ORIENTED_EDGE ( 'NONE', *, *, #14393, .T. ) ; +#7446 = EDGE_LOOP ( 'NONE', ( #14909, #15400, #14093, #13444 ) ) ; +#7447 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7448 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000014900, 0.8000000000000000400, 5.050000000000000700 ) ) ; +#7449 = FACE_OUTER_BOUND ( 'NONE', #13682, .T. ) ; +#7450 = PRESENTATION_STYLE_ASSIGNMENT (( #4084 ) ) ; +#7451 = VECTOR ( 'NONE', #8139, 1000.000000000000000 ) ; +#7452 = ORIENTED_EDGE ( 'NONE', *, *, #10705, .F. ) ; +#7453 = EDGE_CURVE ( 'NONE', #10646, #3712, #10073, .T. ) ; +#7454 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999978700, 0.0000000000000000000, 2.825000000000001100 ) ) ; +#7455 = ADVANCED_FACE ( 'NONE', ( #9325 ), #2605, .T. ) ; +#7456 = EDGE_LOOP ( 'NONE', ( #3718, #14205, #5513, #13650 ) ) ; +#7457 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, -0.0000000000000000000, -2.449999999999998800 ) ) ; +#7458 = EDGE_LOOP ( 'NONE', ( #11958, #2155, #13281, #7910 ) ) ; +#7459 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#7460 = ORIENTED_EDGE ( 'NONE', *, *, #10547, .T. ) ; +#7462 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7461 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7463 = EDGE_CURVE ( 'NONE', #7680, #4483, #1885, .T. ) ; +#7464 = VECTOR ( 'NONE', #5976, 1000.000000000000000 ) ; +#7465 = VERTEX_POINT ( 'NONE', #1731 ) ; +#7466 = VECTOR ( 'NONE', #12355, 1000.000000000000000 ) ; +#7467 = LINE ( 'NONE', #9230, #2281 ) ; +#7468 = AXIS2_PLACEMENT_3D ( 'NONE', #14963, #1754, #421 ) ; +#7469 = AXIS2_PLACEMENT_3D ( 'NONE', #1660, #1773, #12790 ) ; +#7470 = LINE ( 'NONE', #8772, #10880 ) ; +#7471 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7472 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 4.149999999999999500 ) ) ; +#7473 = VERTEX_POINT ( 'NONE', #1287 ) ; +#7474 = ADVANCED_FACE ( 'NONE', ( #13694 ), #178, .F. ) ; +#7475 = ORIENTED_EDGE ( 'NONE', *, *, #2639, .F. ) ; +#7476 = VERTEX_POINT ( 'NONE', #12141 ) ; +#7477 = PLANE ( 'NONE', #10584 ) ; +#7478 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7479 = EDGE_CURVE ( 'NONE', #7441, #2914, #1112, .T. ) ; +#7480 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7481 = LINE ( 'NONE', #12351, #6726 ) ; +#7482 = FACE_OUTER_BOUND ( 'NONE', #12470, .T. ) ; +#7483 = CARTESIAN_POINT ( 'NONE', ( 7.601335216528853200, 3.115261346167814200, -2.856879667662412200 ) ) ; +#7484 = FACE_OUTER_BOUND ( 'NONE', #10746, .T. ) ; +#7485 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#7486 = SURFACE_STYLE_FILL_AREA ( #250 ) ; +#7487 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7488 = ORIENTED_EDGE ( 'NONE', *, *, #8578, .T. ) ; +#7489 = ORIENTED_EDGE ( 'NONE', *, *, #2269, .F. ) ; +#7490 = EDGE_CURVE ( 'NONE', #1751, #8893, #8384, .T. ) ; +#7491 = ADVANCED_FACE ( 'NONE', ( #12735 ), #1443, .F. ) ; +#7492 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#7493 = ORIENTED_EDGE ( 'NONE', *, *, #8676, .T. ) ; +#7494 = AXIS2_PLACEMENT_3D ( 'NONE', #1998, #6921, #8240 ) ; +#7495 = EDGE_LOOP ( 'NONE', ( #4114, #640, #5287, #4670, #10278, #252 ) ) ; +#7496 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#7497 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#7498 = FACE_OUTER_BOUND ( 'NONE', #10887, .T. ) ; +#7499 = VECTOR ( 'NONE', #11142, 1000.000000000000000 ) ; +#7500 = ADVANCED_FACE ( 'NONE', ( #5136 ), #9865, .F. ) ; +#7501 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999992900, 0.8000000000000000400, 7.149999999999996800 ) ) ; +#7502 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #357, 'distance_accuracy_value', 'NONE'); +#7503 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7504 = FACE_OUTER_BOUND ( 'NONE', #4140, .T. ) ; +#7505 = EDGE_CURVE ( 'NONE', #11310, #5885, #5907, .T. ) ; +#7506 = EDGE_CURVE ( 'NONE', #11029, #9322, #14455, .T. ) ; +#7507 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7508 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#7509 = ORIENTED_EDGE ( 'NONE', *, *, #323, .T. ) ; +#7510 = LINE ( 'NONE', #3252, #11670 ) ; +#7511 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#7512 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#7513 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.548860246407863300E-016 ) ) ; +#7514 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.4000000000000000200, 2.949999999999999300 ) ) ; +#7515 = FACE_OUTER_BOUND ( 'NONE', #10950, .T. ) ; +#7517 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7516 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 1.637941840314110200, 4.750000000000000000 ) ) ; +#7518 = VERTEX_POINT ( 'NONE', #13587 ) ; +#7519 = ORIENTED_EDGE ( 'NONE', *, *, #9428, .F. ) ; +#7520 = ORIENTED_EDGE ( 'NONE', *, *, #2773, .F. ) ; +#7521 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.049999999999999800, -2.780000000000000200 ) ) ; +#7522 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#7523 = EDGE_CURVE ( 'NONE', #5248, #1683, #14839, .T. ) ; +#7524 = ORIENTED_EDGE ( 'NONE', *, *, #12809, .F. ) ; +#7525 = FACE_OUTER_BOUND ( 'NONE', #12904, .T. ) ; +#7526 = ORIENTED_EDGE ( 'NONE', *, *, #11729, .F. ) ; +#7527 = ORIENTED_EDGE ( 'NONE', *, *, #5845, .T. ) ; +#7528 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 4.325000000000001100 ) ) ; +#7529 = CLOSED_SHELL ( 'NONE', ( #1447, #333, #10726 ) ) ; +#7530 = EDGE_CURVE ( 'NONE', #7234, #8773, #8764, .T. ) ; +#7531 = LINE ( 'NONE', #10698, #5427 ) ; +#7532 = LINE ( 'NONE', #14091, #4838 ) ; +#7533 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 7.600000000000000500 ) ) ; +#7534 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#7535 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000023800, 0.4000000000000000200, 1.149999999999999900 ) ) ; +#7536 = ORIENTED_EDGE ( 'NONE', *, *, #11492, .F. ) ; +#7537 = ADVANCED_FACE ( 'NONE', ( #6293 ), #6119, .T. ) ; +#7538 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.7000000000000009500, -5.150000000000001200 ) ) ; +#7539 = STYLED_ITEM ( 'NONE', ( #14378 ), #11847 ) ; +#7540 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#7541 = ORIENTED_EDGE ( 'NONE', *, *, #898, .F. ) ; +#7542 = LINE ( 'NONE', #13883, #4294 ) ; +#7543 = ORIENTED_EDGE ( 'NONE', *, *, #5036, .T. ) ; +#7544 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, -3.350000000000000500 ) ) ; +#7545 = ORIENTED_EDGE ( 'NONE', *, *, #6932, .T. ) ; +#7546 = LINE ( 'NONE', #2870, #456 ) ; +#7547 = LINE ( 'NONE', #344, #2002 ) ; +#7548 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999952400, 0.4000000000000000200, 4.149999999999999500 ) ) ; +#7549 = AXIS2_PLACEMENT_3D ( 'NONE', #4552, #8184, #654 ) ; +#7550 = ORIENTED_EDGE ( 'NONE', *, *, #11903, .T. ) ; +#7551 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, -0.3500000000000013700 ) ) ; +#7552 = EDGE_CURVE ( 'NONE', #3157, #2439, #12343, .T. ) ; +#7553 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7554 = ADVANCED_FACE ( 'NONE', ( #2634 ), #14598, .F. ) ; +#7555 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.6999999999999999600, 0.0000000000000000000 ) ) ; +#7556 = EDGE_CURVE ( 'NONE', #13514, #10261, #12909, .T. ) ; +#7557 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.149999999999999500, 8.990000000000002000 ) ) ; +#7558 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, 5.650000000000000400 ) ) ; +#7559 = ORIENTED_EDGE ( 'NONE', *, *, #6793, .T. ) ; +#7560 = LINE ( 'NONE', #15423, #8890 ) ; +#7561 = ORIENTED_EDGE ( 'NONE', *, *, #3052, .F. ) ; +#7562 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999906200, 0.0000000000000000000, 0.5500000000000001600 ) ) ; +#7563 = VECTOR ( 'NONE', #12993, 1000.000000000000000 ) ; +#7564 = LINE ( 'NONE', #2488, #1053 ) ; +#7565 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, 2.649999999999999500 ) ) ; +#7566 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7567 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#7568 = ADVANCED_FACE ( 'NONE', ( #15212 ), #7339, .F. ) ; +#7569 = ORIENTED_EDGE ( 'NONE', *, *, #13182, .F. ) ; +#7570 = EDGE_CURVE ( 'NONE', #2, #11943, #14086, .T. ) ; +#7571 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7572 = LINE ( 'NONE', #10852, #14409 ) ; +#7573 = LINE ( 'NONE', #5991, #8335 ) ; +#7574 = ORIENTED_EDGE ( 'NONE', *, *, #7643, .T. ) ; +#7575 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 0.5500000000000010400 ) ) ; +#7576 = EDGE_CURVE ( 'NONE', #226, #7816, #7062, .T. ) ; +#7577 = AXIS2_PLACEMENT_3D ( 'NONE', #5001, #1463, #12217 ) ; +#7578 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000029100, 0.8000000000000000400, 0.5499999999999997100 ) ) ; +#7579 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7580 = EDGE_LOOP ( 'NONE', ( #1889, #6765, #15401, #10295 ) ) ; +#7581 = FACE_OUTER_BOUND ( 'NONE', #3058, .T. ) ; +#7582 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7583 = VERTEX_POINT ( 'NONE', #5251 ) ; +#7584 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001500, 0.0000000000000000000, 2.550000000000000300 ) ) ; +#7585 = LINE ( 'NONE', #11538, #11745 ) ; +#7586 = LINE ( 'NONE', #2394, #14807 ) ; +#7587 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, 6.550000000000001600 ) ) ; +#7588 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 6.550000000000001600 ) ) ; +#7589 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 3.100000000000000500 ) ) ; +#7590 = EDGE_CURVE ( 'NONE', #4669, #2595, #3801, .T. ) ; +#7591 = EDGE_CURVE ( 'NONE', #11771, #3157, #1487, .T. ) ; +#7592 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#7593 = ORIENTED_EDGE ( 'NONE', *, *, #7705, .T. ) ; +#7594 = LINE ( 'NONE', #903, #11571 ) ; +#7595 = ORIENTED_EDGE ( 'NONE', *, *, #12202, .T. ) ; +#7596 = ORIENTED_EDGE ( 'NONE', *, *, #4152, .F. ) ; +#7597 = VERTEX_POINT ( 'NONE', #1551 ) ; +#7598 = DIRECTION ( 'NONE', ( -1.807003620809173900E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#7599 = ORIENTED_EDGE ( 'NONE', *, *, #122, .F. ) ; +#7600 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, -15.05858178898088800, -8.800000000000000700 ) ) ; +#7601 = EDGE_CURVE ( 'NONE', #1994, #3600, #7622, .T. ) ; +#7602 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7603 = FACE_OUTER_BOUND ( 'NONE', #13357, .T. ) ; +#7604 = FACE_OUTER_BOUND ( 'NONE', #274, .T. ) ; +#7605 = AXIS2_PLACEMENT_3D ( 'NONE', #789, #732, #2067 ) ; +#7606 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.4000000000000000200, 2.949999999999999300 ) ) ; +#7607 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.4000000000000000200, -1.850000000000000500 ) ) ; +#7608 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7609 = AXIS2_PLACEMENT_3D ( 'NONE', #6869, #12845, #4464 ) ; +#7610 = PLANE ( 'NONE', #14202 ) ; +#7611 = ORIENTED_EDGE ( 'NONE', *, *, #11917, .T. ) ; +#7612 = VERTEX_POINT ( 'NONE', #7815 ) ; +#7613 = VERTEX_POINT ( 'NONE', #11358 ) ; +#7614 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#7615 = ADVANCED_FACE ( 'NONE', ( #11968 ), #13857, .F. ) ; +#7616 = VECTOR ( 'NONE', #11306, 1000.000000000000000 ) ; +#7617 = ORIENTED_EDGE ( 'NONE', *, *, #10468, .T. ) ; +#7618 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7619 = EDGE_CURVE ( 'NONE', #11714, #7597, #7245, .T. ) ; +#7620 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7621 = FACE_OUTER_BOUND ( 'NONE', #6218, .T. ) ; +#7622 = LINE ( 'NONE', #13753, #6097 ) ; +#7623 = PLANE ( 'NONE', #462 ) ; +#7624 = ORIENTED_EDGE ( 'NONE', *, *, #9777, .T. ) ; +#7625 = PLANE ( 'NONE', #1198 ) ; +#7626 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7627 = ORIENTED_EDGE ( 'NONE', *, *, #14760, .F. ) ; +#7628 = ORIENTED_EDGE ( 'NONE', *, *, #12718, .T. ) ; +#7629 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10883 ) ) ; +#7630 = ADVANCED_FACE ( 'NONE', ( #8005 ), #8981, .T. ) ; +#7631 = VERTEX_POINT ( 'NONE', #10231 ) ; +#7632 = ORIENTED_EDGE ( 'NONE', *, *, #12855, .T. ) ; +#7633 = AXIS2_PLACEMENT_3D ( 'NONE', #5942, #9555, #8285 ) ; +#7634 = ORIENTED_EDGE ( 'NONE', *, *, #2962, .T. ) ; +#7635 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#7636 = LINE ( 'NONE', #45, #10475 ) ; +#7637 = LINE ( 'NONE', #15495, #14851 ) ; +#7638 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 4.149999999999999500 ) ) ; +#7639 = VECTOR ( 'NONE', #3568, 1000.000000000000000 ) ; +#7640 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000029100, 0.4000000000000000200, 0.5500000000000001600 ) ) ; +#7641 = B_SPLINE_SURFACE_WITH_KNOTS ( 'NONE', 1, 3, ( + ( #6393, #11225, #1368, #12369, #5104, #9840 ), + ( #249, #8788, #2527, #2744, #6345, #11119 ), + ( #11067, #14945, #14781, #13560, #9985, #2578 ), + ( #2696, #12421, #7681, #5158, #13660, #3827 ) ), + .UNSPECIFIED., .F., .F., .F., + ( 2, 1, 1, 2 ), + ( 4, 2, 4 ), + ( -0.01000000000000000000, 0.0000000000000000000, 1.000000000000000000, 1.010100000000000000 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#7642 = ORIENTED_EDGE ( 'NONE', *, *, #3542, .F. ) ; +#7643 = EDGE_CURVE ( 'NONE', #6574, #13740, #10460, .T. ) ; +#7644 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7645 = VERTEX_POINT ( 'NONE', #6425 ) ; +#7646 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7647 = EDGE_CURVE ( 'NONE', #11050, #13356, #3980, .T. ) ; +#7648 = ORIENTED_EDGE ( 'NONE', *, *, #6380, .T. ) ; +#7649 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, 1.149999999999999900 ) ) ; +#7650 = ADVANCED_FACE ( 'NONE', ( #15750 ), #15390, .F. ) ; +#7651 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7652 = EDGE_CURVE ( 'NONE', #14458, #11705, #4181, .T. ) ; +#7653 = ORIENTED_EDGE ( 'NONE', *, *, #13181, .F. ) ; +#7654 = VERTEX_POINT ( 'NONE', #12502 ) ; +#7655 = FACE_OUTER_BOUND ( 'NONE', #6789, .T. ) ; +#7656 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7657 = VECTOR ( 'NONE', #4677, 1000.000000000000000 ) ; +#7658 = VECTOR ( 'NONE', #12214, 1000.000000000000000 ) ; +#7659 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000000400, 3.049999999999999800, -3.080000000000001000 ) ) ; +#7660 = VECTOR ( 'NONE', #14659, 1000.000000000000000 ) ; +#7661 = AXIS2_PLACEMENT_3D ( 'NONE', #8649, #1316, #3773 ) ; +#7662 = ORIENTED_EDGE ( 'NONE', *, *, #2068, .T. ) ; +#7663 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.0000000000000000000, 1.849999999999999900 ) ) ; +#7664 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 4.325000000000001100 ) ) ; +#7666 = EDGE_LOOP ( 'NONE', ( #2933, #11941, #12683, #12261, #13137, #1625 ) ) ; +#7665 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999937500, 0.4000000000000000200, 3.550000000000003800 ) ) ; +#7667 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 9.550000000000000700 ) ) ; +#7668 = EDGE_LOOP ( 'NONE', ( #8125, #11906, #12218, #1294 ) ) ; +#7669 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.149999999999998600, -2.780000000000001100 ) ) ; +#7670 = LINE ( 'NONE', #4015, #3258 ) ; +#7671 = SURFACE_STYLE_FILL_AREA ( #4719 ) ; +#7672 = VECTOR ( 'NONE', #8316, 1000.000000000000000 ) ; +#7673 = CIRCLE ( 'NONE', #12283, 0.2749999999999991900 ) ; +#7674 = VECTOR ( 'NONE', #10433, 1000.000000000000000 ) ; +#7675 = EDGE_CURVE ( 'NONE', #1805, #1850, #3595, .T. ) ; +#7676 = VECTOR ( 'NONE', #13111, 1000.000000000000000 ) ; +#7677 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 0.7999999999999767300, -3.080000000000007600 ) ) ; +#7678 = AXIS2_PLACEMENT_3D ( 'NONE', #4446, #5717, #5988 ) ; +#7679 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7680 = VERTEX_POINT ( 'NONE', #279 ) ; +#7681 = CARTESIAN_POINT ( 'NONE', ( -7.601144252825626800, 3.137420392015689300, 9.020976310729381000 ) ) ; +#7682 = VERTEX_POINT ( 'NONE', #8928 ) ; +#7683 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#7684 = VERTEX_POINT ( 'NONE', #8827 ) ; +#7685 = EDGE_CURVE ( 'NONE', #101, #8429, #2430, .T. ) ; +#7686 = AXIS2_PLACEMENT_3D ( 'NONE', #8950, #5047, #11168 ) ; +#7687 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude5[10]', #6596 ) ; +#7688 = VECTOR ( 'NONE', #8301, 1000.000000000000000 ) ; +#7689 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 1.149999999999999900 ) ) ; +#7690 = VECTOR ( 'NONE', #11602, 1000.000000000000000 ) ; +#7691 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, -15.05858178898088800, -8.800000000000000700 ) ) ; +#7692 = FACE_OUTER_BOUND ( 'NONE', #11380, .T. ) ; +#7693 = FACE_OUTER_BOUND ( 'NONE', #15537, .T. ) ; +#7694 = VERTEX_POINT ( 'NONE', #11920 ) ; +#7695 = ORIENTED_EDGE ( 'NONE', *, *, #4755, .F. ) ; +#7696 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.807003620809173900E-016 ) ) ; +#7697 = EDGE_CURVE ( 'NONE', #1094, #10428, #11027, .T. ) ; +#7698 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7699 = AXIS2_PLACEMENT_3D ( 'NONE', #759, #11772, #5580 ) ; +#7700 = VECTOR ( 'NONE', #6353, 1000.000000000000000 ) ; +#7701 = ADVANCED_FACE ( 'NONE', ( #15555 ), #4506, .F. ) ; +#7702 = LINE ( 'NONE', #9353, #10720 ) ; +#7703 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000011900, 2.879765678877630800E-014, -2.872928932188135900 ) ) ; +#7704 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 8.050000000000000700 ) ) ; +#7705 = EDGE_CURVE ( 'NONE', #10063, #55, #10256, .T. ) ; +#7706 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 8.050000000000000700 ) ) ; +#7707 = LINE ( 'NONE', #8993, #14343 ) ; +#7708 = AXIS2_PLACEMENT_3D ( 'NONE', #11994, #13261, #6013 ) ; +#7709 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000004600, 0.8000000000000000400, 8.049999999999995400 ) ) ; +#7710 = VERTEX_POINT ( 'NONE', #11868 ) ; +#7711 = ORIENTED_EDGE ( 'NONE', *, *, #1158, .F. ) ; +#7712 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000000400, 3.049999999999999800, 9.082928932188135500 ) ) ; +#7713 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7714 = ADVANCED_FACE ( 'NONE', ( #7047 ), #9401, .F. ) ; +#7715 = LINE ( 'NONE', #10904, #13593 ) ; +#7716 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#7717 = EDGE_CURVE ( 'NONE', #555, #11929, #13482, .T. ) ; +#7718 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#7719 = PLANE ( 'NONE', #11150 ) ; +#7720 = ORIENTED_EDGE ( 'NONE', *, *, #1831, .F. ) ; +#7721 = VECTOR ( 'NONE', #8296, 1000.000000000000000 ) ; +#7722 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.3999999999999999700, -1.850000000000000500 ) ) ; +#7723 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#7724 = ORIENTED_EDGE ( 'NONE', *, *, #14718, .F. ) ; +#7725 = CARTESIAN_POINT ( 'NONE', ( -7.592667204855684000, 3.140440641471889700, 9.016077315359350300 ) ) ; +#7726 = VERTEX_POINT ( 'NONE', #10722 ) ; +#7727 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7728 = AXIS2_PLACEMENT_3D ( 'NONE', #79, #11048, #3753 ) ; +#7729 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#7730 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7731 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7732 = ORIENTED_EDGE ( 'NONE', *, *, #11112, .F. ) ; +#7733 = ADVANCED_FACE ( 'NONE', ( #4558 ), #13043, .F. ) ; +#7734 = VECTOR ( 'NONE', #12751, 1000.000000000000000 ) ; +#7735 = FILL_AREA_STYLE_COLOUR ( '', #5025 ) ; +#7736 = ORIENTED_EDGE ( 'NONE', *, *, #10069, .F. ) ; +#7737 = ORIENTED_EDGE ( 'NONE', *, *, #10215, .T. ) ; +#7738 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7739 = ORIENTED_EDGE ( 'NONE', *, *, #12764, .T. ) ; +#7740 = FACE_OUTER_BOUND ( 'NONE', #4658, .T. ) ; +#7741 = VECTOR ( 'NONE', #7779, 1000.000000000000000 ) ; +#7742 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, -0.3500000000000004800 ) ) ; +#7743 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7744 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7745 = ORIENTED_EDGE ( 'NONE', *, *, #13729, .T. ) ; +#7746 = EDGE_CURVE ( 'NONE', #7422, #562, #13881, .T. ) ; +#7747 = EDGE_LOOP ( 'NONE', ( #738, #1023, #4238, #4005 ) ) ; +#7748 = EDGE_CURVE ( 'NONE', #8545, #15549, #8745, .T. ) ; +#7749 = PLANE ( 'NONE', #13002 ) ; +#7750 = VERTEX_POINT ( 'NONE', #3266 ) ; +#7751 = EDGE_CURVE ( 'NONE', #10261, #11620, #11579, .T. ) ; +#7752 = VERTEX_POINT ( 'NONE', #8085 ) ; +#7753 = DIRECTION ( 'NONE', ( -3.097720492815728600E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7754 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, -0.0000000000000000000, -3.350000000000000500 ) ) ; +#7755 = DIRECTION ( 'NONE', ( -5.478074134663595300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7756 = FACE_OUTER_BOUND ( 'NONE', #4530, .T. ) ; +#7757 = VECTOR ( 'NONE', #5546, 1000.000000000000000 ) ; +#7758 = CARTESIAN_POINT ( 'NONE', ( -7.611952621458756100, 3.206595997628985700, -3.047668071082942900 ) ) ; +#7759 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7760 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#7761 = AXIS2_PLACEMENT_3D ( 'NONE', #8171, #14171, #8014 ) ; +#7762 = EDGE_LOOP ( 'NONE', ( #8228, #10059, #12165, #7162 ) ) ; +#7763 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#7764 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#7765 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.7000000000000009500, -6.900000000000000400 ) ) ; +#7766 = ORIENTED_EDGE ( 'NONE', *, *, #9929, .T. ) ; +#7767 = ORIENTED_EDGE ( 'NONE', *, *, #13345, .T. ) ; +#7768 = EDGE_CURVE ( 'NONE', #6325, #6183, #6658, .T. ) ; +#7769 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7770 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999987600, 0.8000000000000000400, 5.649999999999995900 ) ) ; +#7771 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000001400, 3.050000000000000700, 9.082928932188135500 ) ) ; +#7772 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7773 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000029100, 0.4000000000000000200, -0.3500000000000011400 ) ) ; +#7774 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7775 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7776 = LINE ( 'NONE', #12992, #5854 ) ; +#7777 = CARTESIAN_POINT ( 'NONE', ( -7.579455349686084800, 3.146673601807759500, 9.007441010350339300 ) ) ; +#7778 = VERTEX_POINT ( 'NONE', #10570 ) ; +#7779 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7780 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#7781 = VECTOR ( 'NONE', #10182, 1000.000000000000000 ) ; +#7782 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#7783 = ORIENTED_EDGE ( 'NONE', *, *, #7961, .F. ) ; +#7784 = SURFACE_SIDE_STYLE ('',( #12630 ) ) ; +#7786 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.0000000000000000000, 1.850000000000000100 ) ) ; +#7785 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, 7.150000000000000400 ) ) ; +#7787 = EDGE_CURVE ( 'NONE', #10107, #10107, #13096, .T. ) ; +#7788 = EDGE_LOOP ( 'NONE', ( #794, #6212, #11520, #12319 ) ) ; +#7789 = PLANE ( 'NONE', #14216 ) ; +#7790 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#7791 = ORIENTED_EDGE ( 'NONE', *, *, #14357, .F. ) ; +#7792 = ADVANCED_FACE ( 'NONE', ( #11210 ), #9445, .F. ) ; +#7793 = VECTOR ( 'NONE', #9798, 1000.000000000000000 ) ; +#7794 = LINE ( 'NONE', #9220, #7032 ) ; +#7795 = ORIENTED_EDGE ( 'NONE', *, *, #3984, .F. ) ; +#7796 = SURFACE_STYLE_USAGE ( .BOTH. , #366 ) ; +#7797 = EDGE_CURVE ( 'NONE', #1751, #13371, #3389, .T. ) ; +#7798 = ADVANCED_FACE ( 'NONE', ( #7604 ), #2185, .F. ) ; +#7799 = AXIS2_PLACEMENT_3D ( 'NONE', #13188, #14421, #7158 ) ; +#7800 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7801 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 6.550000000000001600 ) ) ; +#7802 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, 7.150000000000000400 ) ) ; +#7803 = EDGE_LOOP ( 'NONE', ( #2832, #8504, #8751, #11617 ) ) ; +#7804 = LINE ( 'NONE', #4542, #11588 ) ; +#7805 = VERTEX_POINT ( 'NONE', #4550 ) ; +#7806 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7807 = VERTEX_POINT ( 'NONE', #9659 ) ; +#7808 = CARTESIAN_POINT ( 'NONE', ( -7.596076976721359000, 3.139702065901542200, -2.808113802259296400 ) ) ; +#7809 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7810 = LINE ( 'NONE', #7324, #2598 ) ; +#7811 = VECTOR ( 'NONE', #9492, 1000.000000000000000 ) ; +#7812 = EDGE_CURVE ( 'NONE', #15475, #8669, #1867, .T. ) ; +#7813 = EDGE_CURVE ( 'NONE', #11812, #229, #4728, .T. ) ; +#7814 = CARTESIAN_POINT ( 'NONE', ( 7.647980000000000400, 3.049999999999999800, -2.872928932188135900 ) ) ; +#7815 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 8.650000000000000400 ) ) ; +#7816 = VERTEX_POINT ( 'NONE', #2386 ) ; +#7817 = ORIENTED_EDGE ( 'NONE', *, *, #14729, .T. ) ; +#7818 = ORIENTED_EDGE ( 'NONE', *, *, #5373, .T. ) ; +#7819 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7820 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, 3.550000000000001200 ) ) ; +#7821 = EDGE_LOOP ( 'NONE', ( #11624, #1928, #15730, #4187, #11396, #3654 ) ) ; +#7822 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7823 = VERTEX_POINT ( 'NONE', #2336 ) ; +#7824 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5340 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7618, #8845, #1511 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7825 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.0000000000000000000, 2.949999999999999700 ) ) ; +#7826 = SURFACE_STYLE_USAGE ( .BOTH. , #11515 ) ; +#7827 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#7828 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#7829 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7830 = AXIS2_PLACEMENT_3D ( 'NONE', #6642, #8989, #4236 ) ; +#7831 = VECTOR ( 'NONE', #11137, 1000.000000000000000 ) ; +#7832 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#7833 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7834 = EDGE_LOOP ( 'NONE', ( #2305, #546, #13747, #11217 ) ) ; +#7835 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7836 = ORIENTED_EDGE ( 'NONE', *, *, #4379, .T. ) ; +#7837 = VERTEX_POINT ( 'NONE', #5883 ) ; +#7838 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#7839 = CARTESIAN_POINT ( 'NONE', ( -6.050000000000001600, 3.350000000000000100, 7.690000000000001300 ) ) ; +#7840 = EDGE_CURVE ( 'NONE', #5193, #9795, #14438, .T. ) ; +#7841 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -5.102127870520021000E-016 ) ) ; +#7842 = ORIENTED_EDGE ( 'NONE', *, *, #613, .T. ) ; +#7843 = EDGE_LOOP ( 'NONE', ( #11473, #11864, #12000, #14089 ) ) ; +#7845 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7844 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 6.550000000000001600 ) ) ; +#7846 = EDGE_CURVE ( 'NONE', #4389, #12106, #9499, .T. ) ; +#7847 = LINE ( 'NONE', #11869, #13518 ) ; +#7848 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7849 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, -1.850000000000000500 ) ) ; +#7850 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7235 ), #3426 ) ; +#7851 = ORIENTED_EDGE ( 'NONE', *, *, #12716, .T. ) ; +#7852 = ORIENTED_EDGE ( 'NONE', *, *, #3028, .F. ) ; +#7853 = ORIENTED_EDGE ( 'NONE', *, *, #2740, .F. ) ; +#7854 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000014900, 0.8000000000000000400, 5.049999999999997200 ) ) ; +#7855 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#7856 = VERTEX_POINT ( 'NONE', #4701 ) ; +#7857 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.4000000000000000200, -2.449999999999998800 ) ) ; +#7858 = LINE ( 'NONE', #13721, #11463 ) ; +#7859 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.4000000000000000200, 2.949999999999999700 ) ) ; +#7860 = FACE_OUTER_BOUND ( 'NONE', #12758, .T. ) ; +#7861 = CIRCLE ( 'NONE', #10557, 0.5000000000000004400 ) ; +#7862 = AXIS2_PLACEMENT_3D ( 'NONE', #2680, #11211, #3913 ) ; +#7863 = LINE ( 'NONE', #3866, #13538 ) ; +#7864 = ADVANCED_FACE ( 'NONE', ( #12326 ), #22, .T. ) ; +#7865 = DIRECTION ( 'NONE', ( 3.690901012716607300E-015, -1.000000000000000000, 6.123233995736767300E-017 ) ) ; +#7866 = ORIENTED_EDGE ( 'NONE', *, *, #808, .T. ) ; +#7867 = EDGE_CURVE ( 'NONE', #304, #12773, #10639, .T. ) ; +#7868 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.4000000000000000200, 2.950000000000000200 ) ) ; +#7869 = VERTEX_POINT ( 'NONE', #2438 ) ; +#7870 = EDGE_CURVE ( 'NONE', #14742, #12742, #8369, .T. ) ; +#7871 = ORIENTED_EDGE ( 'NONE', *, *, #3758, .F. ) ; +#7872 = PLANE ( 'NONE', #12884 ) ; +#7873 = VECTOR ( 'NONE', #689, 1000.000000000000000 ) ; +#7874 = LINE ( 'NONE', #386, #10508 ) ; +#7875 = LINE ( 'NONE', #1972, #7690 ) ; +#7876 = VECTOR ( 'NONE', #13025, 1000.000000000000000 ) ; +#7877 = CARTESIAN_POINT ( 'NONE', ( 7.637420392015690700, 3.101144252825625900, 9.051952621458756500 ) ) ; +#7878 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7879 = ADVANCED_FACE ( 'NONE', ( #9135 ), #3521, .F. ) ; +#7880 = VECTOR ( 'NONE', #6660, 1000.000000000000000 ) ; +#7881 = LINE ( 'NONE', #15641, #4617 ) ; +#7882 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#7883 = ORIENTED_EDGE ( 'NONE', *, *, #5916, .T. ) ; +#7884 = EDGE_LOOP ( 'NONE', ( #13820, #6444, #7541, #7732 ) ) ; +#7885 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7886 = ADVANCED_FACE ( 'NONE', ( #2066 ), #12083, .F. ) ; +#7887 = ORIENTED_EDGE ( 'NONE', *, *, #237, .T. ) ; +#7888 = ORIENTED_EDGE ( 'NONE', *, *, #8725, .T. ) ; +#7889 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 3.100000000000000500 ) ) ; +#7890 = EDGE_CURVE ( 'NONE', #7222, #10375, #8570, .T. ) ; +#7891 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1266, 'distance_accuracy_value', 'NONE'); +#7892 = LINE ( 'NONE', #4947, #11301 ) ; +#7893 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, 8.050000000000000700 ) ) ; +#7894 = VECTOR ( 'NONE', #5075, 1000.000000000000000 ) ; +#7895 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 10.00000000000000000 ) ) ; +#7896 = PLANE ( 'NONE', #8968 ) ; +#7898 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 9.000000000000001800 ) ) ; +#7897 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -5.102127870520021000E-016 ) ) ; +#7899 = EDGE_CURVE ( 'NONE', #4609, #27, #157, .T. ) ; +#7900 = EDGE_LOOP ( 'NONE', ( #11844, #10151, #7350, #3986 ) ) ; +#7901 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#7902 = LINE ( 'NONE', #899, #3111 ) ; +#7903 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 9.550000000000000700 ) ) ; +#7904 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7905 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#7906 = EDGE_CURVE ( 'NONE', #2264, #3760, #5317, .T. ) ; +#7907 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 2.649999999999999500 ) ) ; +#7908 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14709 ), #11938 ) ; +#7909 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7910 = ORIENTED_EDGE ( 'NONE', *, *, #4007, .F. ) ; +#7911 = DIRECTION ( 'NONE', ( -3.881988258447496500E-031, 1.051772519791920300E-016, 1.000000000000000000 ) ) ; +#7912 = ORIENTED_EDGE ( 'NONE', *, *, #10190, .F. ) ; +#7913 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7914 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 6.000000000000000000 ) ) ; +#7915 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7916 = ORIENTED_EDGE ( 'NONE', *, *, #13447, .T. ) ; +#7917 = EDGE_CURVE ( 'NONE', #525, #11979, #2616, .T. ) ; +#7918 = LINE ( 'NONE', #7243, #6000 ) ; +#7919 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#7920 = VERTEX_POINT ( 'NONE', #4808 ) ; +#7921 = ORIENTED_EDGE ( 'NONE', *, *, #5799, .F. ) ; +#7922 = AXIS2_PLACEMENT_3D ( 'NONE', #59, #2535, #14903 ) ; +#7923 = ORIENTED_EDGE ( 'NONE', *, *, #11945, .F. ) ; +#7924 = VECTOR ( 'NONE', #6835, 1000.000000000000000 ) ; +#7925 = LINE ( 'NONE', #1890, #12438 ) ; +#7926 = AXIS2_PLACEMENT_3D ( 'NONE', #12501, #1550, #8666 ) ; +#7927 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7928 = ORIENTED_EDGE ( 'NONE', *, *, #7797, .F. ) ; +#7929 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, 0.7000000000000009500, -9.600000000000001400 ) ) ; +#7930 = ORIENTED_EDGE ( 'NONE', *, *, #2881, .T. ) ; +#7931 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, -10.00000000000000000 ) ) ; +#7932 = VERTEX_POINT ( 'NONE', #8450 ) ; +#7933 = CARTESIAN_POINT ( 'NONE', ( 7.849999999999999600, 3.129230338724656100, 9.067304604898444300 ) ) ; +#7934 = EDGE_CURVE ( 'NONE', #909, #10568, #13675, .T. ) ; +#7935 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7936 = ORIENTED_EDGE ( 'NONE', *, *, #4535, .F. ) ; +#7937 = LINE ( 'NONE', #13722, #15500 ) ; +#7938 = ORIENTED_EDGE ( 'NONE', *, *, #3848, .T. ) ; +#7939 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 4.599999999999999600 ) ) ; +#7940 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7941 = ORIENTED_EDGE ( 'NONE', *, *, #13918, .F. ) ; +#7942 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#7943 = VECTOR ( 'NONE', #6158, 1000.000000000000000 ) ; +#7944 = VECTOR ( 'NONE', #11015, 1000.000000000000000 ) ; +#7945 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 7.150000000000000400 ) ) ; +#7946 = AXIS2_PLACEMENT_3D ( 'NONE', #10996, #6217, #3857 ) ; +#7947 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 9.550000000000000700 ) ) ; +#7948 = ORIENTED_EDGE ( 'NONE', *, *, #13230, .F. ) ; +#7949 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.3999999999999999700, 2.949999999999999700 ) ) ; +#7950 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000000700, 9.290000000000000900 ) ) ; +#7951 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 3.549999999999999400 ) ) ; +#7952 = ORIENTED_EDGE ( 'NONE', *, *, #10652, .F. ) ; +#7953 = LINE ( 'NONE', #7967, #5065 ) ; +#7954 = ORIENTED_EDGE ( 'NONE', *, *, #12229, .F. ) ; +#7955 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7956 = LINE ( 'NONE', #549, #14589 ) ; +#7957 = ADVANCED_FACE ( 'NONE', ( #4365 ), #14490, .F. ) ; +#7958 = EDGE_CURVE ( 'NONE', #14124, #9239, #2226, .T. ) ; +#7959 = EDGE_CURVE ( 'NONE', #5537, #5537, #8936, .T. ) ; +#7960 = ADVANCED_FACE ( 'NONE', ( #5118 ), #12236, .F. ) ; +#7961 = EDGE_CURVE ( 'NONE', #579, #1094, #6640, .T. ) ; +#7962 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7963 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 1.637941840314110200, 4.049999999999999800 ) ) ; +#7964 = VECTOR ( 'NONE', #3997, 1000.000000000000000 ) ; +#7965 = CARTESIAN_POINT ( 'NONE', ( 7.611952621458756100, 3.207639970946511500, 9.259452524890166500 ) ) ; +#7966 = ORIENTED_EDGE ( 'NONE', *, *, #11169, .F. ) ; +#7967 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#7968 = FACE_OUTER_BOUND ( 'NONE', #1549, .T. ) ; +#7969 = FACE_OUTER_BOUND ( 'NONE', #13185, .T. ) ; +#7970 = AXIS2_PLACEMENT_3D ( 'NONE', #5967, #13266, #2312 ) ; +#7971 = VERTEX_POINT ( 'NONE', #11974 ) ; +#7972 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7973 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000034500, 0.8000000000000000400, -0.9499999999999995100 ) ) ; +#7974 = CLOSED_SHELL ( 'NONE', ( #15414, #15672, #15035, #14061, #2715, #14700, #11675, #4179, #658, #12446 ) ) ; +#7975 = ORIENTED_EDGE ( 'NONE', *, *, #9068, .F. ) ; +#7976 = ORIENTED_EDGE ( 'NONE', *, *, #11014, .F. ) ; +#7977 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7978 = EDGE_CURVE ( 'NONE', #7285, #2620, #140, .T. ) ; +#7979 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999968400, 0.0000000000000000000, 6.550000000000000700 ) ) ; +#7980 = LINE ( 'NONE', #6057, #4899 ) ; +#7981 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7982 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, -2.899999999999999900 ) ) ; +#7983 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999952400, 0.0000000000000000000, 4.149999999999999500 ) ) ; +#7984 = EDGE_CURVE ( 'NONE', #13814, #7694, #15007, .T. ) ; +#7985 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#7986 = ORIENTED_EDGE ( 'NONE', *, *, #9969, .F. ) ; +#7987 = ORIENTED_EDGE ( 'NONE', *, *, #2030, .F. ) ; +#7988 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.097720492815726700E-016 ) ) ; +#7989 = LINE ( 'NONE', #12797, #11384 ) ; +#7990 = ORIENTED_EDGE ( 'NONE', *, *, #5850, .F. ) ; +#7991 = PLANE ( 'NONE', #6866 ) ; +#7992 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7993 = VECTOR ( 'NONE', #13033, 1000.000000000000000 ) ; +#7994 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#7995 = EDGE_CURVE ( 'NONE', #10361, #8095, #5872, .T. ) ; +#7996 = VERTEX_POINT ( 'NONE', #3741 ) ; +#7997 = ORIENTED_EDGE ( 'NONE', *, *, #9006, .F. ) ; +#7998 = ORIENTED_EDGE ( 'NONE', *, *, #8821, .F. ) ; +#7999 = VECTOR ( 'NONE', #2991, 1000.000000000000000 ) ; +#8000 = VERTEX_POINT ( 'NONE', #6767 ) ; +#8001 = EDGE_LOOP ( 'NONE', ( #14362, #4636, #7103, #7998 ) ) ; +#8002 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.8000000000000000400, 0.0000000000000000000 ) ) ; +#8003 = EDGE_CURVE ( 'NONE', #4106, #8667, #7794, .T. ) ; +#8004 = VECTOR ( 'NONE', #5505, 1000.000000000000000 ) ; +#8005 = FACE_OUTER_BOUND ( 'NONE', #2961, .T. ) ; +#8006 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8007 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#8008 = CARTESIAN_POINT ( 'NONE', ( 7.580976310729377900, 3.319452524890163000, 9.147639970946512400 ) ) ; +#8009 = VERTEX_POINT ( 'NONE', #9166 ) ; +#8010 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8011 = ADVANCED_FACE ( 'NONE', ( #15541 ), #4250, .T. ) ; +#8012 = ORIENTED_EDGE ( 'NONE', *, *, #9006, .T. ) ; +#8013 = EDGE_LOOP ( 'NONE', ( #15660, #13909, #7002, #15318 ) ) ; +#8014 = DIRECTION ( 'NONE', ( -1.204669080539449300E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8015 = VERTEX_POINT ( 'NONE', #9112 ) ; +#8016 = PLANE ( 'NONE', #4206 ) ; +#8017 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8018 = EDGE_LOOP ( 'NONE', ( #5542, #5659, #2800, #2442 ) ) ; +#8019 = EDGE_CURVE ( 'NONE', #9767, #9055, #9121, .T. ) ; +#8020 = EDGE_CURVE ( 'NONE', #10394, #8287, #2416, .T. ) ; +#8021 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8022 = LINE ( 'NONE', #9956, #13504 ) ; +#8023 = ORIENTED_EDGE ( 'NONE', *, *, #14526, .T. ) ; +#8024 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, -15.05858178898088800, -8.800000000000000700 ) ) ; +#8025 = ADVANCED_FACE ( 'NONE', ( #9689 ), #5375, .T. ) ; +#8027 = ORIENTED_EDGE ( 'NONE', *, *, #11899, .T. ) ; +#8026 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 5.050000000000000700 ) ) ; +#8028 = AXIS2_PLACEMENT_3D ( 'NONE', #14994, #11278, #12477 ) ; +#8029 = VERTEX_POINT ( 'NONE', #6659 ) ; +#8030 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.8000000000000000400, -4.500000000000000900 ) ) ; +#8031 = ADVANCED_FACE ( 'NONE', ( #336 ), #7301, .F. ) ; +#8032 = EDGE_LOOP ( 'NONE', ( #9347, #7132, #1305, #15437 ) ) ; +#8033 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 7.150000000000000400 ) ) ; +#8034 = AXIS2_PLACEMENT_3D ( 'NONE', #14987, #15095, #13873 ) ; +#8035 = VERTEX_POINT ( 'NONE', #10471 ) ; +#8036 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, -1.125000000000000700 ) ) ; +#8037 = FILL_AREA_STYLE_COLOUR ( '', #8174 ) ; +#8038 = LINE ( 'NONE', #10253, #10686 ) ; +#8039 = LINE ( 'NONE', #2734, #9372 ) ; +#8040 = VECTOR ( 'NONE', #14056, 1000.000000000000000 ) ; +#8041 = LINE ( 'NONE', #7600, #11449 ) ; +#8042 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#8043 = PLANE ( 'NONE', #1459 ) ; +#8044 = EDGE_LOOP ( 'NONE', ( #2624 ) ) ; +#8045 = EDGE_CURVE ( 'NONE', #13870, #2520, #4915, .T. ) ; +#8046 = ORIENTED_EDGE ( 'NONE', *, *, #40, .F. ) ; +#8047 = CARTESIAN_POINT ( 'NONE', ( -7.580976310729377900, 3.139222690360981400, 9.042198665876329100 ) ) ; +#8049 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#8048 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000007500, 0.7999999999999977100, 9.082928932188135500 ) ) ; +#8050 = ORIENTED_EDGE ( 'NONE', *, *, #8344, .F. ) ; +#8051 = EDGE_CURVE ( 'NONE', #7194, #1402, #11759, .T. ) ; +#8052 = VECTOR ( 'NONE', #121, 1000.000000000000000 ) ; +#8053 = VECTOR ( 'NONE', #10398, 1000.000000000000000 ) ; +#8054 = DIRECTION ( 'NONE', ( 5.478074134663594500E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#8055 = VECTOR ( 'NONE', #12001, 1000.000000000000000 ) ; +#8056 = CIRCLE ( 'NONE', #4412, 0.2749999999999991900 ) ; +#8057 = VECTOR ( 'NONE', #5270, 1000.000000000000000 ) ; +#8058 = LINE ( 'NONE', #5550, #4794 ) ; +#8059 = AXIS2_PLACEMENT_3D ( 'NONE', #11241, #4151, #4258 ) ; +#8060 = FACE_OUTER_BOUND ( 'NONE', #9604, .T. ) ; +#8061 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.7000000000000009500, -9.600000000000001400 ) ) ; +#8062 = AXIS2_PLACEMENT_3D ( 'NONE', #3062, #761, #15143 ) ; +#8063 = ORIENTED_EDGE ( 'NONE', *, *, #6349, .T. ) ; +#8064 = ORIENTED_EDGE ( 'NONE', *, *, #5400, .T. ) ; +#8065 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999921500, 0.0000000000000000000, 1.150000000000002600 ) ) ; +#8066 = ORIENTED_EDGE ( 'NONE', *, *, #8315, .T. ) ; +#8067 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#8068 = LINE ( 'NONE', #4418, #11458 ) ; +#8069 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.6999999999999999600, -5.150000000000001200 ) ) ; +#8070 = VECTOR ( 'NONE', #15328, 1000.000000000000000 ) ; +#8071 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 6.375000000000000900 ) ) ; +#8072 = EDGE_CURVE ( 'NONE', #5968, #13403, #12896, .T. ) ; +#8073 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8074 = PLANE ( 'NONE', #14639 ) ; +#8075 = VECTOR ( 'NONE', #3322, 1000.000000000000000 ) ; +#8076 = ORIENTED_EDGE ( 'NONE', *, *, #10784, .T. ) ; +#8077 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999905500, 0.0000000000000000000, 0.5500000000000024900 ) ) ; +#8078 = ORIENTED_EDGE ( 'NONE', *, *, #2556, .F. ) ; +#8079 = STYLED_ITEM ( 'NONE', ( #4182 ), #14977 ) ; +#8080 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8081 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8082 = CYLINDRICAL_SURFACE ( 'NONE', #7101, 0.4999999999999995600 ) ; +#8083 = FACE_OUTER_BOUND ( 'NONE', #15592, .T. ) ; +#8084 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#8085 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.3999999999999999700, 5.050000000000000700 ) ) ; +#8086 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8087 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8088 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8089 = LINE ( 'NONE', #5262, #6176 ) ; +#8090 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 9.375000000000000000 ) ) ; +#8091 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#8092 = ORIENTED_EDGE ( 'NONE', *, *, #12454, .T. ) ; +#8093 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.195440985631453300E-016 ) ) ; +#8094 = ORIENTED_EDGE ( 'NONE', *, *, #14784, .T. ) ; +#8095 = VERTEX_POINT ( 'NONE', #12691 ) ; +#8096 = EDGE_CURVE ( 'NONE', #2410, #11155, #6082, .T. ) ; +#8097 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 6.550000000000001600 ) ) ; +#8098 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#8099 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#8101 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 9.099999999999999600 ) ) ; +#8100 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#8102 = EDGE_CURVE ( 'NONE', #10234, #11502, #6457, .T. ) ; +#8103 = ORIENTED_EDGE ( 'NONE', *, *, #1132, .F. ) ; +#8104 = VECTOR ( 'NONE', #4323, 1000.000000000000000 ) ; +#8105 = VECTOR ( 'NONE', #15148, 1000.000000000000000 ) ; +#8106 = AXIS2_PLACEMENT_3D ( 'NONE', #2376, #4796, #6196 ) ; +#8107 = PLANE ( 'NONE', #13454 ) ; +#8108 = ORIENTED_EDGE ( 'NONE', *, *, #8191, .F. ) ; +#8109 = ADVANCED_FACE ( 'NONE', ( #5303 ), #12125, .T. ) ; +#8110 = ORIENTED_EDGE ( 'NONE', *, *, #4115, .F. ) ; +#8111 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#8112 = EDGE_LOOP ( 'NONE', ( #13170, #11317, #3667, #6346 ) ) ; +#8113 = ADVANCED_FACE ( 'NONE', ( #3200 ), #8192, .F. ) ; +#8114 = LINE ( 'NONE', #10473, #11874 ) ; +#8115 = VERTEX_POINT ( 'NONE', #2000 ) ; +#8116 = ORIENTED_EDGE ( 'NONE', *, *, #13651, .T. ) ; +#8117 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#8118 = EDGE_CURVE ( 'NONE', #3460, #9898, #14614, .T. ) ; +#8119 = PLANE ( 'NONE', #9007 ) ; +#8120 = EDGE_CURVE ( 'NONE', #3089, #3590, #15182, .T. ) ; +#8121 = ORIENTED_EDGE ( 'NONE', *, *, #12515, .F. ) ; +#8122 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.807003620809173900E-016 ) ) ; +#8123 = VECTOR ( 'NONE', #12606, 1000.000000000000000 ) ; +#8124 = VECTOR ( 'NONE', #15758, 1000.000000000000000 ) ; +#8125 = ORIENTED_EDGE ( 'NONE', *, *, #11760, .T. ) ; +#8126 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#8127 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.3999999999999999700, -0.3500000000000004800 ) ) ; +#8128 = PLANE ( 'NONE', #15449 ) ; +#8129 = EDGE_LOOP ( 'NONE', ( #9701, #7866, #10285, #14995, #11068, #2932 ) ) ; +#8130 = AXIS2_PLACEMENT_3D ( 'NONE', #11136, #14747, #9955 ) ; +#8131 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#8132 = ORIENTED_EDGE ( 'NONE', *, *, #7570, .T. ) ; +#8133 = LINE ( 'NONE', #7320, #11147 ) ; +#8134 = ORIENTED_EDGE ( 'NONE', *, *, #3962, .F. ) ; +#8135 = AXIS2_PLACEMENT_3D ( 'NONE', #4764, #15694, #10998 ) ; +#8136 = VERTEX_POINT ( 'NONE', #5681 ) ; +#8137 = LINE ( 'NONE', #5725, #8894 ) ; +#8138 = LINE ( 'NONE', #9473, #1621 ) ; +#8139 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#8140 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#8141 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 1.637941840314110200, 1.850000000000000100 ) ) ; +#8142 = VERTEX_POINT ( 'NONE', #5584 ) ; +#8143 = EDGE_CURVE ( 'NONE', #5919, #229, #2810, .T. ) ; +#8144 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.149999999999999900, -2.880000000000000800 ) ) ; +#8145 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, -15.05858178898088800, -8.800000000000000700 ) ) ; +#8146 = FACE_OUTER_BOUND ( 'NONE', #6170, .T. ) ; +#8147 = EDGE_LOOP ( 'NONE', ( #3224, #1788, #7997, #8444 ) ) ; +#8148 = VECTOR ( 'NONE', #2786, 1000.000000000000000 ) ; +#8149 = VECTOR ( 'NONE', #5281, 1000.000000000000000 ) ; +#8150 = AXIS2_PLACEMENT_3D ( 'NONE', #5949, #3479, #11985 ) ; +#8151 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000020300, 0.4000000000000000200, 3.550000000000001200 ) ) ; +#8152 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999983700, 0.0000000000000000000, 8.050000000000000700 ) ) ; +#8153 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8154 = FACE_BOUND ( 'NONE', #9577, .T. ) ; +#8155 = ORIENTED_EDGE ( 'NONE', *, *, #312, .T. ) ; +#8156 = ORIENTED_EDGE ( 'NONE', *, *, #7020, .T. ) ; +#8157 = VECTOR ( 'NONE', #1920, 1000.000000000000000 ) ; +#8158 = FACE_OUTER_BOUND ( 'NONE', #12999, .T. ) ; +#8159 = PRODUCT_DEFINITION_CONTEXT ( 'detailed design', #2957, 'design' ) ; +#8160 = EDGE_CURVE ( 'NONE', #7750, #11754, #1283, .T. ) ; +#8161 = ORIENTED_EDGE ( 'NONE', *, *, #4602, .T. ) ; +#8162 = EDGE_CURVE ( 'NONE', #15077, #5773, #6847, .T. ) ; +#8163 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#8164 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#8165 = ORIENTED_EDGE ( 'NONE', *, *, #4471, .F. ) ; +#8166 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude4[2]', #7529 ) ; +#8167 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, 3.550000000000001200 ) ) ; +#8168 = ORIENTED_EDGE ( 'NONE', *, *, #11196, .F. ) ; +#8169 = LINE ( 'NONE', #608, #7028 ) ; +#8170 = VERTEX_POINT ( 'NONE', #6809 ) ; +#8171 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999991400, -15.05858178898088800, -9.600000000000001400 ) ) ; +#8172 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#8173 = VECTOR ( 'NONE', #1577, 1000.000000000000000 ) ; +#8174 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#8175 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8176 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, -0.1749999999999989300 ) ) ; +#8177 = EDGE_CURVE ( 'NONE', #9333, #7932, #10238, .T. ) ; +#8178 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, -15.05858178898088800, -6.100000000000000500 ) ) ; +#8179 = ADVANCED_FACE ( 'NONE', ( #516 ), #12886, .F. ) ; +#8180 = VERTEX_POINT ( 'NONE', #10621 ) ; +#8181 = LINE ( 'NONE', #7765, #15017 ) ; +#8182 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#8183 = ORIENTED_EDGE ( 'NONE', *, *, #5346, .F. ) ; +#8184 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8185 = VERTEX_POINT ( 'NONE', #14198 ) ; +#8186 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#8187 = ADVANCED_FACE ( 'NONE', ( #4148 ), #14143, .T. ) ; +#8188 = LINE ( 'NONE', #7057, #7993 ) ; +#8189 = VECTOR ( 'NONE', #10882, 1000.000000000000000 ) ; +#8190 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8191 = EDGE_CURVE ( 'NONE', #9239, #15222, #6260, .T. ) ; +#8192 = PLANE ( 'NONE', #13932 ) ; +#8193 = ORIENTED_EDGE ( 'NONE', *, *, #2720, .T. ) ; +#8194 = PLANE ( 'NONE', #11953 ) ; +#8195 = EDGE_LOOP ( 'NONE', ( #13337, #8854, #5561, #760, #14518, #331 ) ) ; +#8196 = ORIENTED_EDGE ( 'NONE', *, *, #13541, .F. ) ; +#8197 = ORIENTED_EDGE ( 'NONE', *, *, #447, .F. ) ; +#8198 = ORIENTED_EDGE ( 'NONE', *, *, #12244, .T. ) ; +#8199 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8200 = VERTEX_POINT ( 'NONE', #12998 ) ; +#8201 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8202 = VECTOR ( 'NONE', #9460, 1000.000000000000000 ) ; +#8203 = EDGE_CURVE ( 'NONE', #14554, #12689, #4529, .T. ) ; +#8204 = AXIS2_PLACEMENT_3D ( 'NONE', #1797, #15258, #10370 ) ; +#8205 = DIRECTION ( 'NONE', ( 3.491481338843133700E-015, -1.000000000000000000, 1.051772519791920100E-016 ) ) ; +#8206 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#8207 = EDGE_LOOP ( 'NONE', ( #15001, #7948, #1701, #3323 ) ) ; +#8208 = EDGE_LOOP ( 'NONE', ( #8063, #775, #7013, #3043 ) ) ; +#8209 = EDGE_LOOP ( 'NONE', ( #13124, #3022, #11435, #11973 ) ) ; +#8210 = ORIENTED_EDGE ( 'NONE', *, *, #9839, .T. ) ; +#8211 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, -15.05858178898088800, -8.800000000000000700 ) ) ; +#8212 = EDGE_CURVE ( 'NONE', #6348, #15559, #13655, .T. ) ; +#8213 = EDGE_LOOP ( 'NONE', ( #9234, #11687, #12380, #9486 ) ) ; +#8214 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000025900, 0.8000000000000000400, 1.149999999999999900 ) ) ; +#8215 = ORIENTED_EDGE ( 'NONE', *, *, #1630, .F. ) ; +#8216 = CARTESIAN_POINT ( 'NONE', ( 7.580976310729377900, 3.137420392015689800, 9.041144252825628100 ) ) ; +#8217 = VECTOR ( 'NONE', #12104, 1000.000000000000000 ) ; +#8218 = LINE ( 'NONE', #12582, #15586 ) ; +#8219 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8220 = FACE_OUTER_BOUND ( 'NONE', #15042, .T. ) ; +#8221 = ORIENTED_EDGE ( 'NONE', *, *, #11553, .T. ) ; +#8222 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#8223 = CARTESIAN_POINT ( 'NONE', ( 1.004371745008228900E-015, 2.743077632650985600E-014, 9.090000000000008700 ) ) ; +#8224 = ORIENTED_EDGE ( 'NONE', *, *, #3758, .T. ) ; +#8225 = EDGE_CURVE ( 'NONE', #4816, #4253, #1458, .T. ) ; +#8226 = EDGE_LOOP ( 'NONE', ( #8474, #12891, #6166 ) ) ; +#8227 = PLANE ( 'NONE', #9354 ) ; +#8228 = ORIENTED_EDGE ( 'NONE', *, *, #2011, .T. ) ; +#8229 = VECTOR ( 'NONE', #10696, 1000.000000000000000 ) ; +#8230 = VECTOR ( 'NONE', #5461, 1000.000000000000000 ) ; +#8231 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#8232 = FACE_OUTER_BOUND ( 'NONE', #10594, .T. ) ; +#8233 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#8234 = ORIENTED_EDGE ( 'NONE', *, *, #2472, .T. ) ; +#8235 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 1.600000000000000800 ) ) ; +#8236 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000002000, 9.290000000000000900 ) ) ; +#8237 = ORIENTED_EDGE ( 'NONE', *, *, #8884, .F. ) ; +#8238 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13937 ), #1679 ) ; +#8239 = ORIENTED_EDGE ( 'NONE', *, *, #8414, .T. ) ; +#8240 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8241 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 2.825000000000001100 ) ) ; +#8242 = FACE_OUTER_BOUND ( 'NONE', #13229, .T. ) ; +#8243 = CARTESIAN_POINT ( 'NONE', ( -7.602198665876327900, 3.139222690360981000, -2.810976310729378400 ) ) ; +#8244 = VECTOR ( 'NONE', #6419, 1000.000000000000000 ) ; +#8245 = VERTEX_POINT ( 'NONE', #14088 ) ; +#8246 = LINE ( 'NONE', #7334, #5382 ) ; +#8247 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 0.5500000000000010400 ) ) ; +#8248 = EDGE_CURVE ( 'NONE', #1402, #7726, #4346, .T. ) ; +#8249 = LINE ( 'NONE', #3387, #2498 ) ; +#8250 = VECTOR ( 'NONE', #1128, 1000.000000000000000 ) ; +#8251 = CLOSED_SHELL ( 'NONE', ( #10479, #11436, #6740, #6750, #8923, #95, #10567, #7733, #651, #2567, #2898, #2746, #5012, #1281, #13922, #4255, #4100, #3294, #14717, #9451, #3206, #493, #4083, #11069, #1325, #11304, #7615, #9228, #15327, #3851, #15016, #9837, #4918, #8506, #7714, #1847, #14580, #3938, #2391, #7186, #14314, #7957, #10081, #7397, #14423, #2505, #6340, #8466, #6594, #5061, #581, #4967, #6198, #14941, #1932, #7798, #10841, #14731, #12098, #13354, #9702, #2792, #10235, #6031, #13577, #4351, #7701, #1312, #7089, #707, #6824, #7879, #4031, #7227, #15185, #14475, #5389, #8597, #15344, #4326, #13653, #13674, #10886, #13778, #4259, #11038, #12169, #11744, #14738, #2626, #13691, #186, #14811, #9910, #3782, #4888, #8381, #8179, #1614, #4343, #9605, #6223, #6215, #12699, #2089, #7886, #12788, #817, #8356, #1758, #14795, #8627, #2513, #5078, #3138, #6831, #6516, #472, #8910, #10407, #5860, #6149, #8425, #12212, #11669, #9651, #11842, #14233, #11368, #11363, #7384, #1171, #7491, #4509, #245, #2427, #11226, #13457, #11586, #7474, #13333, #2891, #15743, #9392, #15553, #10816, #1852, #14612, #7410, #4900, #14896, #2173, #10804, #6667, #7568, #11440, #12518, #15114, #10966, #413, #1376, #8832, #1124, #9527, #9144, #14543, #63, #271, #14084, #11421, #5693, #9983, #11192, #12381, #10326, #8617, #7500, #14957, #12285, #7161, #3368, #5630, #10243, #10100, #168, #6673, #7792, #9048 ) ) ; +#8252 = PLANE ( 'NONE', #13695 ) ; +#8253 = EDGE_CURVE ( 'NONE', #8674, #3600, #1268, .T. ) ; +#8254 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.4000000000000000200, -3.350000000000000500 ) ) ; +#8255 = ORIENTED_EDGE ( 'NONE', *, *, #5887, .T. ) ; +#8256 = EDGE_CURVE ( 'NONE', #15676, #5237, #15432, .T. ) ; +#8257 = VERTEX_POINT ( 'NONE', #4708 ) ; +#8258 = PLANE ( 'NONE', #10275 ) ; +#8259 = LINE ( 'NONE', #2859, #15096 ) ; +#8260 = VECTOR ( 'NONE', #15640, 1000.000000000000000 ) ; +#8261 = AXIS2_PLACEMENT_3D ( 'NONE', #3040, #7806, #6572 ) ; +#8262 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#8263 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8264 = ADVANCED_FACE ( 'NONE', ( #3562 ), #1129, .T. ) ; +#8265 = VECTOR ( 'NONE', #14821, 1000.000000000000000 ) ; +#8266 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8267 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.7000000000000009500, -4.000000000000000000 ) ) ; +#8268 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.8000000000000000400, 0.0000000000000000000 ) ) ; +#8269 = ORIENTED_EDGE ( 'NONE', *, *, #4516, .T. ) ; +#8270 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000009200, 0.7999999999999964900, -2.872928932188135900 ) ) ; +#8271 = EDGE_CURVE ( 'NONE', #13371, #2939, #11373, .T. ) ; +#8272 = FACE_OUTER_BOUND ( 'NONE', #11891, .T. ) ; +#8273 = DIRECTION ( 'NONE', ( 6.100126508929432700E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8274 = LINE ( 'NONE', #14391, #2144 ) ; +#8275 = LINE ( 'NONE', #6118, #14719 ) ; +#8276 = EDGE_CURVE ( 'NONE', #4863, #13489, #15361, .T. ) ; +#8277 = ORIENTED_EDGE ( 'NONE', *, *, #14751, .T. ) ; +#8278 = AXIS2_PLACEMENT_3D ( 'NONE', #584, #5284, #2921 ) ; +#8279 = ORIENTED_EDGE ( 'NONE', *, *, #7138, .T. ) ; +#8280 = PLANE ( 'NONE', #6369 ) ; +#8281 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8282 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8283 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8284 = PLANE ( 'NONE', #994 ) ; +#8285 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8286 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.349999999999999600, 8.990000000000000200 ) ) ; +#8287 = VERTEX_POINT ( 'NONE', #3581 ) ; +#8288 = ORIENTED_EDGE ( 'NONE', *, *, #1904, .F. ) ; +#8289 = VERTEX_POINT ( 'NONE', #2139 ) ; +#8290 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.7000000000000009500, -6.100000000000001400 ) ) ; +#8291 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999991400, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#8292 = EDGE_LOOP ( 'NONE', ( #8737, #688, #7653, #13425 ) ) ; +#8293 = VECTOR ( 'NONE', #14365, 1000.000000000000000 ) ; +#8294 = LINE ( 'NONE', #4517, #4282 ) ; +#8295 = EDGE_CURVE ( 'NONE', #13688, #10186, #12879, .T. ) ; +#8296 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8297 = DIRECTION ( 'NONE', ( -3.097720492815727200E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8298 = VERTEX_POINT ( 'NONE', #11880 ) ; +#8299 = ORIENTED_EDGE ( 'NONE', *, *, #12409, .T. ) ; +#8300 = EDGE_LOOP ( 'NONE', ( #1323, #13331, #6224, #2340 ) ) ; +#8301 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8302 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8303 = ORIENTED_EDGE ( 'NONE', *, *, #9136, .F. ) ; +#8304 = EDGE_CURVE ( 'NONE', #11456, #9332, #6441, .T. ) ; +#8305 = LINE ( 'NONE', #3774, #5050 ) ; +#8306 = CLOSED_SHELL ( 'NONE', ( #4504, #5465, #6110, #13843, #11591, #13840, #8025, #5044, #9861, #13511 ) ) ; +#8307 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9718 ) ) ; +#8308 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999951700, 0.0000000000000000000, 4.150000000000001200 ) ) ; +#8309 = VERTEX_POINT ( 'NONE', #10730 ) ; +#8310 = LINE ( 'NONE', #14026, #9823 ) ; +#8311 = FACE_OUTER_BOUND ( 'NONE', #11655, .T. ) ; +#8312 = ORIENTED_EDGE ( 'NONE', *, *, #10676, .F. ) ; +#8313 = PLANE ( 'NONE', #10078 ) ; +#8314 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.3999999999999999700, 1.850000000000000100 ) ) ; +#8315 = EDGE_CURVE ( 'NONE', #15565, #3339, #10430, .T. ) ; +#8316 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8317 = EDGE_CURVE ( 'NONE', #9, #8015, #4133, .T. ) ; +#8318 = ORIENTED_EDGE ( 'NONE', *, *, #14227, .T. ) ; +#8319 = VECTOR ( 'NONE', #14012, 1000.000000000000000 ) ; +#8320 = ORIENTED_EDGE ( 'NONE', *, *, #2752, .T. ) ; +#8321 = CARTESIAN_POINT ( 'NONE', ( 7.583823333624605900, 3.144106227756289200, 9.010415567924383100 ) ) ; +#8322 = FACE_OUTER_BOUND ( 'NONE', #7178, .T. ) ; +#8323 = LINE ( 'NONE', #65, #294 ) ; +#8324 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000500, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#8325 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#8326 = PLANE ( 'NONE', #11566 ) ; +#8327 = STYLED_ITEM ( 'NONE', ( #1468 ), #10689 ) ; +#8328 = LINE ( 'NONE', #9815, #6808 ) ; +#8329 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #916, #11871, #10777, #9449, #3524, #8454, #15529, #13250, #11978, #15481, #14388, #1068, #10828 ), + .UNSPECIFIED., .F., .F., + ( 4, 3, 3, 3, 4 ), + ( 1.622685226974697000E-018, 5.091068730646602500E-005, 9.613048157375391300E-005, 0.0001413399754770157400, 0.0001810054085857333100 ), + .UNSPECIFIED. ) ; +#8330 = VERTEX_POINT ( 'NONE', #10783 ) ; +#8331 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.3999999999999999700, 2.949999999999999300 ) ) ; +#8332 = PLANE ( 'NONE', #3673 ) ; +#8333 = DIRECTION ( 'NONE', ( -6.100126508929432700E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8334 = LINE ( 'NONE', #13173, #9469 ) ; +#8335 = VECTOR ( 'NONE', #3253, 1000.000000000000000 ) ; +#8336 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999984400, 0.4000000000000000200, 8.050000000000000700 ) ) ; +#8337 = EDGE_CURVE ( 'NONE', #7583, #4394, #10224, .T. ) ; +#8338 = ORIENTED_EDGE ( 'NONE', *, *, #11640, .F. ) ; +#8339 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000018500, 0.8000000000000000400, 4.149999999999999500 ) ) ; +#8340 = ADVANCED_FACE ( 'NONE', ( #699 ), #7131, .T. ) ; +#8341 = SURFACE_STYLE_USAGE ( .BOTH. , #7129 ) ; +#8342 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8343 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 1.637941840314110200, 2.549999999999999800 ) ) ; +#8344 = EDGE_CURVE ( 'NONE', #14080, #5252, #3756, .T. ) ; +#8345 = ORIENTED_EDGE ( 'NONE', *, *, #12651, .F. ) ; +#8346 = CARTESIAN_POINT ( 'NONE', ( -7.575703978347817700, 3.147979999999999600, -2.795520281879281900 ) ) ; +#8347 = LINE ( 'NONE', #1451, #6254 ) ; +#8348 = ORIENTED_EDGE ( 'NONE', *, *, #6379, .T. ) ; +#8349 = ORIENTED_EDGE ( 'NONE', *, *, #15351, .F. ) ; +#8350 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6815 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2414, #12159, #4726 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#8351 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#8352 = LINE ( 'NONE', #9419, #5100 ) ; +#8353 = VECTOR ( 'NONE', #5892, 1000.000000000000000 ) ; +#8355 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.8000000000000000400, -5.150000000000000400 ) ) ; +#8354 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8356 = ADVANCED_FACE ( 'NONE', ( #13260 ), #13100, .F. ) ; +#8357 = ORIENTED_EDGE ( 'NONE', *, *, #10071, .T. ) ; +#8358 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8359 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9592, 'distance_accuracy_value', 'NONE'); +#8360 = EDGE_LOOP ( 'NONE', ( #5825, #1937, #15693, #6908, #3651, #2868 ) ) ; +#8361 = FACE_OUTER_BOUND ( 'NONE', #9339, .T. ) ; +#8362 = ORIENTED_EDGE ( 'NONE', *, *, #10329, .T. ) ; +#8363 = ORIENTED_EDGE ( 'NONE', *, *, #1960, .F. ) ; +#8364 = EDGE_LOOP ( 'NONE', ( #14735, #14050, #6256, #12887 ) ) ; +#8365 = EDGE_CURVE ( 'NONE', #611, #5759, #10039, .T. ) ; +#8366 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.4000000000000000200, 8.650000000000000400 ) ) ; +#8367 = EDGE_CURVE ( 'NONE', #4309, #6232, #1874, .T. ) ; +#8368 = LINE ( 'NONE', #13240, #11209 ) ; +#8369 = LINE ( 'NONE', #14385, #5890 ) ; +#8370 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 1.637941840314110200, 1.849999999999999900 ) ) ; +#8371 = PLANE ( 'NONE', #12316 ) ; +#8372 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8373 = VERTEX_POINT ( 'NONE', #2292 ) ; +#8374 = ORIENTED_EDGE ( 'NONE', *, *, #13182, .T. ) ; +#8375 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11816 ) ) ; +#8376 = ORIENTED_EDGE ( 'NONE', *, *, #2666, .T. ) ; +#8377 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8378 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.690901012716607300E-015, 0.0000000000000000000 ) ) ; +#8379 = VECTOR ( 'NONE', #9864, 1000.000000000000000 ) ; +#8380 = VERTEX_POINT ( 'NONE', #15691 ) ; +#8381 = ADVANCED_FACE ( 'NONE', ( #10815 ), #12243, .F. ) ; +#8382 = VERTEX_POINT ( 'NONE', #5024 ) ; +#8383 = VECTOR ( 'NONE', #8594, 1000.000000000000000 ) ; +#8384 = LINE ( 'NONE', #1239, #4381 ) ; +#8385 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#8386 = VERTEX_POINT ( 'NONE', #10946 ) ; +#8387 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#8388 = EDGE_CURVE ( 'NONE', #14815, #4033, #3184, .T. ) ; +#8389 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 1.637941840314110200, 4.750000000000000000 ) ) ; +#8391 = ORIENTED_EDGE ( 'NONE', *, *, #3447, .F. ) ; +#8390 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.3999999999999999700, 8.650000000000000400 ) ) ; +#8392 = VERTEX_POINT ( 'NONE', #4919 ) ; +#8393 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#8394 = ORIENTED_EDGE ( 'NONE', *, *, #7813, .T. ) ; +#8395 = ORIENTED_EDGE ( 'NONE', *, *, #2447, .F. ) ; +#8396 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#8397 = EDGE_CURVE ( 'NONE', #12181, #8674, #14992, .T. ) ; +#8398 = DIRECTION ( 'NONE', ( -5.478074134663594500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8399 = VERTEX_POINT ( 'NONE', #10360 ) ; +#8400 = LINE ( 'NONE', #13406, #13894 ) ; +#8401 = LINE ( 'NONE', #4134, #13709 ) ; +#8402 = AXIS2_PLACEMENT_3D ( 'NONE', #10034, #13822, #1505 ) ; +#8403 = LINE ( 'NONE', #8389, #5151 ) ; +#8404 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.097720492815727200E-016 ) ) ; +#8405 = ORIENTED_EDGE ( 'NONE', *, *, #7165, .T. ) ; +#8406 = ORIENTED_EDGE ( 'NONE', *, *, #1977, .F. ) ; +#8407 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8408 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8409 = EDGE_LOOP ( 'NONE', ( #15442, #15560, #13172, #960, #12586, #10371 ) ) ; +#8410 = ORIENTED_EDGE ( 'NONE', *, *, #11132, .T. ) ; +#8411 = EDGE_CURVE ( 'NONE', #7856, #7837, #14599, .T. ) ; +#8412 = ORIENTED_EDGE ( 'NONE', *, *, #6953, .T. ) ; +#8413 = ORIENTED_EDGE ( 'NONE', *, *, #9914, .T. ) ; +#8414 = EDGE_CURVE ( 'NONE', #1011, #2806, #5290, .T. ) ; +#8415 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 2.050000000000001600 ) ) ; +#8416 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.4000000000000000200, 5.650000000000000400 ) ) ; +#8417 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 8.050000000000000700 ) ) ; +#8418 = LINE ( 'NONE', #12420, #6320 ) ; +#8419 = VECTOR ( 'NONE', #13816, 1000.000000000000000 ) ; +#8420 = VECTOR ( 'NONE', #13070, 1000.000000000000000 ) ; +#8421 = VECTOR ( 'NONE', #2250, 1000.000000000000000 ) ; +#8422 = EDGE_LOOP ( 'NONE', ( #3344, #6008, #10203, #13064 ) ) ; +#8423 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#8424 = EDGE_CURVE ( 'NONE', #14040, #7442, #15720, .T. ) ; +#8425 = ADVANCED_FACE ( 'NONE', ( #2042 ), #6113, .F. ) ; +#8426 = ORIENTED_EDGE ( 'NONE', *, *, #13651, .F. ) ; +#8427 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#8428 = PLANE ( 'NONE', #12031 ) ; +#8429 = VERTEX_POINT ( 'NONE', #3694 ) ; +#8430 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8431 = AXIS2_PLACEMENT_3D ( 'NONE', #10527, #7988, #5471 ) ; +#8432 = VECTOR ( 'NONE', #2718, 1000.000000000000000 ) ; +#8433 = VECTOR ( 'NONE', #7120, 1000.000000000000000 ) ; +#8434 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000000400, 3.064605673451389600, 9.074288157986075000 ) ) ; +#8435 = FACE_OUTER_BOUND ( 'NONE', #9015, .T. ) ; +#8436 = VECTOR ( 'NONE', #351, 1000.000000000000000 ) ; +#8437 = VECTOR ( 'NONE', #12661, 1000.000000000000000 ) ; +#8438 = SURFACE_STYLE_FILL_AREA ( #10472 ) ; +#8439 = PLANE ( 'NONE', #8106 ) ; +#8440 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8441 = ORIENTED_EDGE ( 'NONE', *, *, #2458, .F. ) ; +#8442 = EDGE_CURVE ( 'NONE', #2595, #14626, #7586, .T. ) ; +#8443 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8444 = ORIENTED_EDGE ( 'NONE', *, *, #819, .F. ) ; +#8445 = ORIENTED_EDGE ( 'NONE', *, *, #5802, .F. ) ; +#8446 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 9.550000000000000700 ) ) ; +#8447 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#8448 = VECTOR ( 'NONE', #3589, 1000.000000000000000 ) ; +#8449 = LINE ( 'NONE', #12286, #4806 ) ; +#8450 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, -3.350000000000000500 ) ) ; +#8451 = VECTOR ( 'NONE', #13082, 1000.000000000000000 ) ; +#8452 = AXIS2_PLACEMENT_3D ( 'NONE', #15480, #10661, #4650 ) ; +#8453 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8454 = CARTESIAN_POINT ( 'NONE', ( -7.591593715659279900, 3.126879667662412700, -2.845261346167814200 ) ) ; +#8455 = FACE_OUTER_BOUND ( 'NONE', #15547, .T. ) ; +#8456 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8457 = AXIS2_PLACEMENT_3D ( 'NONE', #8235, #7176, #15686 ) ; +#8458 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#8459 = ORIENTED_EDGE ( 'NONE', *, *, #10969, .T. ) ; +#8460 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 6.550000000000001600 ) ) ; +#8461 = ORIENTED_EDGE ( 'NONE', *, *, #8699, .T. ) ; +#8462 = SURFACE_STYLE_USAGE ( .BOTH. , #5956 ) ; +#8463 = EDGE_CURVE ( 'NONE', #11650, #4620, #1082, .T. ) ; +#8464 = LINE ( 'NONE', #14577, #9785 ) ; +#8465 = VECTOR ( 'NONE', #6707, 1000.000000000000000 ) ; +#8466 = ADVANCED_FACE ( 'NONE', ( #7017 ), #4869, .F. ) ; +#8467 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8468 = EDGE_CURVE ( 'NONE', #15732, #12258, #7980, .T. ) ; +#8469 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000023800, 0.4000000000000000200, 2.050000000000003400 ) ) ; +#8470 = EDGE_CURVE ( 'NONE', #7694, #8882, #320, .T. ) ; +#8471 = DIRECTION ( 'NONE', ( -1.204669080539449300E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#8472 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, 2.649999999999999500 ) ) ; +#8473 = ORIENTED_EDGE ( 'NONE', *, *, #2200, .T. ) ; +#8474 = ORIENTED_EDGE ( 'NONE', *, *, #7388, .F. ) ; +#8475 = AXIS2_PLACEMENT_3D ( 'NONE', #6072, #6022, #7246 ) ; +#8476 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#8477 = EDGE_LOOP ( 'NONE', ( #7068, #10132, #4561, #2508 ) ) ; +#8478 = VECTOR ( 'NONE', #4521, 1000.000000000000000 ) ; +#8479 = ORIENTED_EDGE ( 'NONE', *, *, #2568, .F. ) ; +#8480 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 1.325000000000001500 ) ) ; +#8481 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8482 = ORIENTED_EDGE ( 'NONE', *, *, #13017, .T. ) ; +#8483 = CARTESIAN_POINT ( 'NONE', ( 7.629289567165737500, 3.073037331497399500, 9.087982895189703900 ) ) ; +#8484 = FACE_OUTER_BOUND ( 'NONE', #2127, .T. ) ; +#8485 = LINE ( 'NONE', #3122, #7721 ) ; +#8486 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 3.550000000000001200 ) ) ; +#8487 = ORIENTED_EDGE ( 'NONE', *, *, #13289, .F. ) ; +#8488 = EDGE_CURVE ( 'NONE', #5823, #13827, #4714, .T. ) ; +#8489 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 1.637941840314110200, 2.950000000000000200 ) ) ; +#8490 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8491 = VERTEX_POINT ( 'NONE', #13473 ) ; +#8492 = LINE ( 'NONE', #15052, #15317 ) ; +#8493 = ORIENTED_EDGE ( 'NONE', *, *, #295, .T. ) ; +#8494 = ORIENTED_EDGE ( 'NONE', *, *, #8020, .F. ) ; +#8495 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000002500, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#8496 = EDGE_CURVE ( 'NONE', #12615, #5993, #5675, .T. ) ; +#8497 = EDGE_LOOP ( 'NONE', ( #8066, #14829, #12588, #10241 ) ) ; +#8498 = FACE_OUTER_BOUND ( 'NONE', #13286, .T. ) ; +#8499 = LINE ( 'NONE', #4887, #6583 ) ; +#8500 = AXIS2_PLACEMENT_3D ( 'NONE', #4505, #12988, #14079 ) ; +#8501 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8502 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, -3.174999999999998900 ) ) ; +#8503 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8504 = ORIENTED_EDGE ( 'NONE', *, *, #9881, .F. ) ; +#8505 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#8506 = ADVANCED_FACE ( 'NONE', ( #9295 ), #8715, .F. ) ; +#8507 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 1.637941840314110200, 2.949999999999999700 ) ) ; +#8508 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 10.00000000000000000 ) ) ; +#8509 = EDGE_LOOP ( 'NONE', ( #10523, #13670, #3434, #2128 ) ) ; +#8510 = VECTOR ( 'NONE', #2981, 1000.000000000000000 ) ; +#8511 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8512 = EDGE_LOOP ( 'NONE', ( #10007, #5867, #6897, #12277, #9366, #3812 ) ) ; +#8513 = EDGE_CURVE ( 'NONE', #3590, #3780, #8539, .T. ) ; +#8514 = AXIS2_PLACEMENT_3D ( 'NONE', #628, #720, #14104 ) ; +#8515 = LINE ( 'NONE', #15161, #2952 ) ; +#8516 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8517 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8518 = ORIENTED_EDGE ( 'NONE', *, *, #603, .T. ) ; +#8519 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8520 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000034500, 0.4000000000000000200, -0.9499999999999995100 ) ) ; +#8521 = ADVANCED_FACE ( 'NONE', ( #11562 ), #10017, .T. ) ; +#8522 = EDGE_CURVE ( 'NONE', #14742, #14893, #10614, .T. ) ; +#8523 = AXIS2_PLACEMENT_3D ( 'NONE', #12485, #1524, #306 ) ; +#8524 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8525 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8526 = PRESENTATION_STYLE_ASSIGNMENT (( #4555 ) ) ; +#8527 = ORIENTED_EDGE ( 'NONE', *, *, #756, .T. ) ; +#8528 = VECTOR ( 'NONE', #6330, 1000.000000000000000 ) ; +#8529 = LINE ( 'NONE', #7421, #15169 ) ; +#8530 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.3999999999999999700, 1.850000000000000100 ) ) ; +#8531 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8532 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999971600, 0.8000000000000000400, 1.149999999999998100 ) ) ; +#8533 = EDGE_CURVE ( 'NONE', #10234, #2231, #6813, .T. ) ; +#8534 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999968000, 0.8000000000000000400, -0.1749999999999998200 ) ) ; +#8535 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8536 = LINE ( 'NONE', #12881, #6621 ) ; +#8537 = ORIENTED_EDGE ( 'NONE', *, *, #5596, .F. ) ; +#8538 = ADVANCED_FACE ( 'NONE', ( #8919 ), #5294, .F. ) ; +#8539 = LINE ( 'NONE', #1485, #7781 ) ; +#8540 = ORIENTED_EDGE ( 'NONE', *, *, #14689, .F. ) ; +#8541 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.149999999999999500, 8.990000000000002000 ) ) ; +#8542 = AXIS2_PLACEMENT_3D ( 'NONE', #1058, #6044, #11966 ) ; +#8543 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#8544 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000015300, 0.4000000000000000200, 5.049999999999997200 ) ) ; +#8545 = VERTEX_POINT ( 'NONE', #6367 ) ; +#8546 = VECTOR ( 'NONE', #7935, 1000.000000000000000 ) ; +#8547 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8548 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000020600, 0.4000000000000000200, 3.550000000000001200 ) ) ; +#8549 = VERTEX_POINT ( 'NONE', #5079 ) ; +#8550 = ORIENTED_EDGE ( 'NONE', *, *, #10595, .T. ) ; +#8551 = EDGE_CURVE ( 'NONE', #4047, #1229, #11179, .T. ) ; +#8552 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 8.050000000000000700 ) ) ; +#8553 = LINE ( 'NONE', #15108, #8173 ) ; +#8554 = VECTOR ( 'NONE', #1733, 1000.000000000000000 ) ; +#8555 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999889500, -0.0000000000000000000, -1.850000000000001000 ) ) ; +#8556 = EDGE_CURVE ( 'NONE', #10633, #10470, #11922, .T. ) ; +#8557 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 8.050000000000004300 ) ) ; +#8558 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000009200, 0.7999999999999960500, 0.0000000000000000000 ) ) ; +#8559 = EDGE_CURVE ( 'NONE', #66, #4106, #6428, .T. ) ; +#8560 = VERTEX_POINT ( 'NONE', #7706 ) ; +#8561 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 1.637941840314110200, 1.849999999999999900 ) ) ; +#8562 = ORIENTED_EDGE ( 'NONE', *, *, #3593, .T. ) ; +#8563 = LINE ( 'NONE', #10134, #9699 ) ; +#8564 = VERTEX_POINT ( 'NONE', #14812 ) ; +#8565 = AXIS2_PLACEMENT_3D ( 'NONE', #6684, #13795, #15170 ) ; +#8566 = PLANE ( 'NONE', #2990 ) ; +#8567 = ORIENTED_EDGE ( 'NONE', *, *, #15262, .F. ) ; +#8569 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 1.637941840314110200, 4.049999999999999800 ) ) ; +#8568 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#8570 = LINE ( 'NONE', #15729, #11948 ) ; +#8571 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#8572 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8573 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999870000, 0.0000000000000000000, 3.650000000000000400 ) ) ; +#8574 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8575 = VERTEX_POINT ( 'NONE', #5134 ) ; +#8576 = ORIENTED_EDGE ( 'NONE', *, *, #5799, .T. ) ; +#8577 = VERTEX_POINT ( 'NONE', #13799 ) ; +#8578 = EDGE_CURVE ( 'NONE', #987, #13688, #859, .T. ) ; +#8579 = ORIENTED_EDGE ( 'NONE', *, *, #2545, .F. ) ; +#8580 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#8581 = ADVANCED_FACE ( 'NONE', ( #13066 ), #2662, .T. ) ; +#8582 = ORIENTED_EDGE ( 'NONE', *, *, #12386, .T. ) ; +#8583 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, -3.350000000000000500 ) ) ; +#8584 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, -2.449999999999998800 ) ) ; +#8585 = CARTESIAN_POINT ( 'NONE', ( 7.567441010350338000, 3.146673601807759000, 9.019455349686083400 ) ) ; +#8586 = FACE_OUTER_BOUND ( 'NONE', #214, .T. ) ; +#8587 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8588 = CIRCLE ( 'NONE', #11323, 0.2749999999999991900 ) ; +#8589 = AXIS2_PLACEMENT_3D ( 'NONE', #2890, #12462, #11263 ) ; +#8591 = VERTEX_POINT ( 'NONE', #377 ) ; +#8590 = AXIS2_PLACEMENT_3D ( 'NONE', #7931, #9146, #11560 ) ; +#8592 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 5.650000000000000400 ) ) ; +#8593 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 6.550000000000001600 ) ) ; +#8594 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8595 = ORIENTED_EDGE ( 'NONE', *, *, #2808, .T. ) ; +#8596 = VERTEX_POINT ( 'NONE', #12396 ) ; +#8597 = ADVANCED_FACE ( 'NONE', ( #4703 ), #8822, .F. ) ; +#8598 = ORIENTED_EDGE ( 'NONE', *, *, #9640, .F. ) ; +#8599 = VERTEX_POINT ( 'NONE', #14918 ) ; +#8600 = VERTEX_POINT ( 'NONE', #2774 ) ; +#8601 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, -0.0000000000000000000, -2.449999999999998800 ) ) ; +#8602 = VECTOR ( 'NONE', #9553, 1000.000000000000000 ) ; +#8603 = VECTOR ( 'NONE', #348, 1000.000000000000000 ) ; +#8604 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8605 = EDGE_CURVE ( 'NONE', #8382, #14669, #11734, .T. ) ; +#8606 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8607 = LINE ( 'NONE', #8935, #2653 ) ; +#8608 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.7000000000000009500, -4.000000000000000000 ) ) ; +#8609 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#8610 = ORIENTED_EDGE ( 'NONE', *, *, #3708, .T. ) ; +#8611 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000020300, 0.8000000000000000400, 3.550000000000001200 ) ) ; +#8612 = ORIENTED_EDGE ( 'NONE', *, *, #5192, .F. ) ; +#8613 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8614 = EDGE_LOOP ( 'NONE', ( #4565, #1226, #8494, #7711 ) ) ; +#8615 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999980800, 0.4000000000000000200, 7.150000000000002100 ) ) ; +#8616 = EDGE_CURVE ( 'NONE', #1154, #9953, #12296, .T. ) ; +#8617 = ADVANCED_FACE ( 'NONE', ( #7969 ), #5343, .F. ) ; +#8618 = CARTESIAN_POINT ( 'NONE', ( -7.649999999999999500, 3.049999999999999800, -2.872928932188135100 ) ) ; +#8619 = CLOSED_SHELL ( 'NONE', ( #6418, #15267, #9152, #1436, #8187, #10401, #3485, #12536, #723, #2823, #8970, #13449, #3215, #3998, #12622, #15638, #14627, #971, #9294, #14779, #7009, #1044, #2551, #8109, #1776, #8991, #12862, #15261, #5160, #6064 ) ) ; +#8620 = PLANE ( 'NONE', #8135 ) ; +#8621 = VECTOR ( 'NONE', #12587, 1000.000000000000000 ) ; +#8622 = VECTOR ( 'NONE', #8689, 1000.000000000000000 ) ; +#8623 = VECTOR ( 'NONE', #14517, 1000.000000000000000 ) ; +#8624 = LINE ( 'NONE', #3606, #6144 ) ; +#8625 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8626 = LINE ( 'NONE', #4985, #15603 ) ; +#8627 = ADVANCED_FACE ( 'NONE', ( #10026 ), #6744, .F. ) ; +#8628 = ORIENTED_EDGE ( 'NONE', *, *, #13169, .F. ) ; +#8629 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8630 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000300, 0.3999999999999999700, 2.949999999999999300 ) ) ; +#8631 = ORIENTED_EDGE ( 'NONE', *, *, #898, .T. ) ; +#8632 = EDGE_CURVE ( 'NONE', #1402, #13782, #6247, .T. ) ; +#8633 = EDGE_CURVE ( 'NONE', #14970, #4609, #4328, .T. ) ; +#8634 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#8635 = VERTEX_POINT ( 'NONE', #15075 ) ; +#8636 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8637 = LINE ( 'NONE', #4984, #5196 ) ; +#8638 = FACE_OUTER_BOUND ( 'NONE', #6282, .T. ) ; +#8639 = FACE_OUTER_BOUND ( 'NONE', #8207, .T. ) ; +#8640 = VECTOR ( 'NONE', #3930, 1000.000000000000000 ) ; +#8641 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#8642 = LINE ( 'NONE', #8458, #15086 ) ; +#8643 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 1.637941840314110200, 4.750000000000000000 ) ) ; +#8644 = ORIENTED_EDGE ( 'NONE', *, *, #9638, .F. ) ; +#8645 = ORIENTED_EDGE ( 'NONE', *, *, #93, .T. ) ; +#8646 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 3.374999999999999600 ) ) ; +#8647 = ORIENTED_EDGE ( 'NONE', *, *, #4421, .T. ) ; +#8648 = AXIS2_PLACEMENT_3D ( 'NONE', #12510, #548, #15138 ) ; +#8650 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, -1.850000000000000500 ) ) ; +#8649 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000036600, 0.4000000000000000200, -1.850000000000000100 ) ) ; +#8651 = ORIENTED_EDGE ( 'NONE', *, *, #8551, .T. ) ; +#8652 = LINE ( 'NONE', #10736, #6738 ) ; +#8653 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8654 = PLANE ( 'NONE', #6131 ) ; +#8655 = LINE ( 'NONE', #14545, #13175 ) ; +#8656 = EDGE_CURVE ( 'NONE', #8705, #15237, #5857, .T. ) ; +#8657 = FACE_BOUND ( 'NONE', #527, .T. ) ; +#8658 = ORIENTED_EDGE ( 'NONE', *, *, #2202, .T. ) ; +#8659 = ORIENTED_EDGE ( 'NONE', *, *, #10474, .T. ) ; +#8660 = EDGE_CURVE ( 'NONE', #7166, #8974, #5473, .T. ) ; +#8661 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, -2.449999999999998800 ) ) ; +#8662 = VECTOR ( 'NONE', #12975, 1000.000000000000000 ) ; +#8663 = ADVANCED_FACE ( 'NONE', ( #3364 ), #6577, .T. ) ; +#8664 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#8665 = FACE_OUTER_BOUND ( 'NONE', #4029, .T. ) ; +#8666 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8667 = VERTEX_POINT ( 'NONE', #593 ) ; +#8668 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999967700, 0.4000000000000000200, 6.550000000000000700 ) ) ; +#8669 = VERTEX_POINT ( 'NONE', #9133 ) ; +#8670 = EDGE_CURVE ( 'NONE', #4968, #10133, #9108, .T. ) ; +#8671 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3321, 'distance_accuracy_value', 'NONE'); +#8672 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8673 = ADVANCED_FACE ( 'NONE', ( #1445 ), #12668, .T. ) ; +#8674 = VERTEX_POINT ( 'NONE', #4161 ) ; +#8675 = CIRCLE ( 'NONE', #6731, 0.2749999999999991900 ) ; +#8676 = EDGE_CURVE ( 'NONE', #6574, #13001, #5084, .T. ) ; +#8677 = ORIENTED_EDGE ( 'NONE', *, *, #11313, .T. ) ; +#8678 = ORIENTED_EDGE ( 'NONE', *, *, #7135, .F. ) ; +#8679 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.7000000000000009500, -6.100000000000000500 ) ) ; +#8680 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8681 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 1.637941840314110200, 3.649999999999999500 ) ) ; +#8682 = ORIENTED_EDGE ( 'NONE', *, *, #11216, .T. ) ; +#8683 = VECTOR ( 'NONE', #1002, 1000.000000000000000 ) ; +#8684 = LINE ( 'NONE', #10733, #14746 ) ; +#8685 = ORIENTED_EDGE ( 'NONE', *, *, #4970, .T. ) ; +#8686 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 8.650000000000000400 ) ) ; +#8687 = ORIENTED_EDGE ( 'NONE', *, *, #8857, .F. ) ; +#8688 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#8689 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#8690 = EDGE_LOOP ( 'NONE', ( #12013, #1574, #5855, #6266 ) ) ; +#8691 = ADVANCED_FACE ( 'NONE', ( #12686 ), #532, .F. ) ; +#8692 = LINE ( 'NONE', #5319, #659 ) ; +#8693 = PLANE ( 'NONE', #7577 ) ; +#8694 = ORIENTED_EDGE ( 'NONE', *, *, #7276, .F. ) ; +#8695 = VERTEX_POINT ( 'NONE', #15125 ) ; +#8696 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8697 = LINE ( 'NONE', #14489, #469 ) ; +#8698 = LINE ( 'NONE', #12860, #2017 ) ; +#8699 = EDGE_CURVE ( 'NONE', #15411, #8560, #2210, .T. ) ; +#8700 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, -1.674999999999998900 ) ) ; +#8701 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#8702 = ADVANCED_FACE ( 'NONE', ( #12487 ), #7196, .F. ) ; +#8703 = ORIENTED_EDGE ( 'NONE', *, *, #15438, .F. ) ; +#8704 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8705 = VERTEX_POINT ( 'NONE', #4333 ) ; +#8706 = EDGE_CURVE ( 'NONE', #3418, #5480, #14036, .T. ) ; +#8707 = VECTOR ( 'NONE', #11857, 1000.000000000000000 ) ; +#8708 = VERTEX_POINT ( 'NONE', #9242 ) ; +#8709 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#8710 = PLANE ( 'NONE', #2229 ) ; +#8711 = VECTOR ( 'NONE', #867, 1000.000000000000000 ) ; +#8712 = FACE_OUTER_BOUND ( 'NONE', #2009, .T. ) ; +#8713 = CARTESIAN_POINT ( 'NONE', ( 1.026470133237231800E-015, 3.050000000000000700, 9.290000000000000900 ) ) ; +#8714 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#8715 = PLANE ( 'NONE', #7946 ) ; +#8716 = EDGE_CURVE ( 'NONE', #6348, #4267, #10418, .T. ) ; +#8717 = LINE ( 'NONE', #15387, #12115 ) ; +#8718 = VERTEX_POINT ( 'NONE', #15280 ) ; +#8719 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8720 = LINE ( 'NONE', #6073, #685 ) ; +#8721 = VECTOR ( 'NONE', #1921, 1000.000000000000000 ) ; +#8722 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8723 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8724 = ORIENTED_EDGE ( 'NONE', *, *, #11057, .T. ) ; +#8725 = EDGE_CURVE ( 'NONE', #13863, #226, #7573, .T. ) ; +#8726 = PLANE ( 'NONE', #1464 ) ; +#8727 = CARTESIAN_POINT ( 'NONE', ( 7.580976310729377900, 3.137420392015688000, -2.831144252825626300 ) ) ; +#8728 = AXIS2_PLACEMENT_3D ( 'NONE', #2469, #12417, #1361 ) ; +#8729 = VERTEX_POINT ( 'NONE', #11454 ) ; +#8730 = LINE ( 'NONE', #12411, #13649 ) ; +#8731 = EDGE_LOOP ( 'NONE', ( #9191, #9897, #4768, #13320, #12100, #11249 ) ) ; +#8732 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 7.150000000000000400 ) ) ; +#8733 = ADVANCED_FACE ( 'NONE', ( #2028 ), #14480, .F. ) ; +#8734 = VECTOR ( 'NONE', #2091, 1000.000000000000000 ) ; +#8735 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8736 = EDGE_CURVE ( 'NONE', #11908, #14292, #9470, .T. ) ; +#8737 = ORIENTED_EDGE ( 'NONE', *, *, #12086, .F. ) ; +#8738 = PLANE ( 'NONE', #6773 ) ; +#8739 = ORIENTED_EDGE ( 'NONE', *, *, #11266, .F. ) ; +#8740 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#8741 = LINE ( 'NONE', #2902, #2804 ) ; +#8742 = ORIENTED_EDGE ( 'NONE', *, *, #1531, .F. ) ; +#8743 = ADVANCED_FACE ( 'NONE', ( #15709 ), #8074, .F. ) ; +#8744 = FACE_OUTER_BOUND ( 'NONE', #197, .T. ) ; +#8745 = LINE ( 'NONE', #8141, #1300 ) ; +#8746 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8747 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#8748 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#8750 = EDGE_LOOP ( 'NONE', ( #4136, #8255, #6465, #15006 ) ) ; +#8749 = CARTESIAN_POINT ( 'NONE', ( 7.634288157986072900, 3.064605673451390000, -2.879999999999999400 ) ) ; +#8751 = ORIENTED_EDGE ( 'NONE', *, *, #12840, .F. ) ; +#8752 = EDGE_CURVE ( 'NONE', #2862, #3241, #1067, .T. ) ; +#8753 = PLANE ( 'NONE', #14244 ) ; +#8754 = ORIENTED_EDGE ( 'NONE', *, *, #14215, .T. ) ; +#8755 = LINE ( 'NONE', #1393, #14078 ) ; +#8756 = ORIENTED_EDGE ( 'NONE', *, *, #209, .F. ) ; +#8757 = PLANE ( 'NONE', #5498 ) ; +#8758 = EDGE_LOOP ( 'NONE', ( #15688, #7041, #13225, #4131, #12353, #1959 ) ) ; +#8759 = EDGE_CURVE ( 'NONE', #6329, #821, #13639, .T. ) ; +#8760 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8761 = ADVANCED_FACE ( 'NONE', ( #13249 ), #8128, .T. ) ; +#8762 = EDGE_CURVE ( 'NONE', #6004, #9142, #3937, .T. ) ; +#8763 = LINE ( 'NONE', #5011, #13290 ) ; +#8764 = LINE ( 'NONE', #7497, #9705 ) ; +#8765 = VECTOR ( 'NONE', #1475, 1000.000000000000000 ) ; +#8766 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, -1.399999999999999700 ) ) ; +#8767 = EDGE_LOOP ( 'NONE', ( #13612, #14063, #15089, #4003 ) ) ; +#8768 = VERTEX_POINT ( 'NONE', #1059 ) ; +#8769 = ORIENTED_EDGE ( 'NONE', *, *, #7252, .T. ) ; +#8770 = AXIS2_PLACEMENT_3D ( 'NONE', #4296, #11727, #1886 ) ; +#8771 = DIRECTION ( 'NONE', ( 5.478074134663594500E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#8772 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000023800, 0.4000000000000000200, 1.149999999999999000 ) ) ; +#8773 = VERTEX_POINT ( 'NONE', #8495 ) ; +#8774 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 9.375000000000000000 ) ) ; +#8775 = ORIENTED_EDGE ( 'NONE', *, *, #10870, .F. ) ; +#8776 = ORIENTED_EDGE ( 'NONE', *, *, #3882, .T. ) ; +#8777 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.349999999999998800, -2.780000000000002900 ) ) ; +#8778 = VECTOR ( 'NONE', #4845, 1000.000000000000000 ) ; +#8779 = LINE ( 'NONE', #875, #7437 ) ; +#8780 = FACE_OUTER_BOUND ( 'NONE', #12826, .T. ) ; +#8781 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#8782 = VERTEX_POINT ( 'NONE', #11757 ) ; +#8783 = EDGE_CURVE ( 'NONE', #5929, #1674, #686, .T. ) ; +#8784 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.3999999999999999700, 2.050000000000001600 ) ) ; +#8785 = ORIENTED_EDGE ( 'NONE', *, *, #6769, .T. ) ; +#8786 = AXIS2_PLACEMENT_3D ( 'NONE', #1106, #15003, #7927 ) ; +#8787 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8788 = CARTESIAN_POINT ( 'NONE', ( -7.628752156770255900, 3.349999999999999600, 9.005530029177633000 ) ) ; +#8789 = ORIENTED_EDGE ( 'NONE', *, *, #5676, .F. ) ; +#8790 = VERTEX_POINT ( 'NONE', #4747 ) ; +#8791 = EDGE_LOOP ( 'NONE', ( #11082, #15126, #15491, #1736 ) ) ; +#8793 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8792 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 4.874999999999999100 ) ) ; +#8794 = EDGE_CURVE ( 'NONE', #5310, #15487, #9661, .T. ) ; +#8795 = VECTOR ( 'NONE', #2043, 1000.000000000000000 ) ; +#8796 = VECTOR ( 'NONE', #3242, 1000.000000000000000 ) ; +#8797 = AXIS2_PLACEMENT_3D ( 'NONE', #468, #11299, #3947 ) ; +#8798 = LINE ( 'NONE', #7188, #14117 ) ; +#8799 = PLANE ( 'NONE', #14474 ) ; +#8800 = EDGE_LOOP ( 'NONE', ( #14442, #9700, #7767, #2929 ) ) ; +#8801 = VERTEX_POINT ( 'NONE', #801 ) ; +#8802 = ORIENTED_EDGE ( 'NONE', *, *, #6527, .T. ) ; +#8803 = PLANE ( 'NONE', #8059 ) ; +#8804 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.4000000000000000200, 2.950000000000000200 ) ) ; +#8805 = EDGE_CURVE ( 'NONE', #11534, #7476, #308, .T. ) ; +#8806 = LINE ( 'NONE', #13906, #13735 ) ; +#8807 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#8808 = FACE_OUTER_BOUND ( 'NONE', #4384, .T. ) ; +#8809 = LINE ( 'NONE', #3710, #5180 ) ; +#8810 = DIRECTION ( 'NONE', ( -5.478074134663595300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8811 = LINE ( 'NONE', #4321, #3260 ) ; +#8812 = VECTOR ( 'NONE', #7911, 1000.000000000000000 ) ; +#8813 = FACE_OUTER_BOUND ( 'NONE', #14471, .T. ) ; +#8814 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8815 = VECTOR ( 'NONE', #4569, 1000.000000000000000 ) ; +#8816 = ADVANCED_FACE ( 'NONE', ( #130 ), #6626, .F. ) ; +#8817 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8818 = ORIENTED_EDGE ( 'NONE', *, *, #14196, .F. ) ; +#8819 = ORIENTED_EDGE ( 'NONE', *, *, #10042, .F. ) ; +#8820 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8821 = EDGE_CURVE ( 'NONE', #6681, #1515, #6053, .T. ) ; +#8822 = PLANE ( 'NONE', #9552 ) ; +#8823 = ORIENTED_EDGE ( 'NONE', *, *, #11630, .F. ) ; +#8824 = AXIS2_PLACEMENT_3D ( 'NONE', #14585, #4959, #1116 ) ; +#8825 = ORIENTED_EDGE ( 'NONE', *, *, #3914, .F. ) ; +#8826 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#8827 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000005000, 0.8000000000000000400, -4.500000000000000900 ) ) ; +#8828 = VECTOR ( 'NONE', #8407, 1000.000000000000000 ) ; +#8829 = LINE ( 'NONE', #1917, #6536 ) ; +#8830 = VECTOR ( 'NONE', #2039, 1000.000000000000000 ) ; +#8831 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8832 = ADVANCED_FACE ( 'NONE', ( #14979 ), #2279, .F. ) ; +#8833 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8834 = VECTOR ( 'NONE', #4511, 1000.000000000000000 ) ; +#8835 = EDGE_CURVE ( 'NONE', #3089, #8871, #8529, .T. ) ; +#8836 = EDGE_CURVE ( 'NONE', #11310, #1805, #3536, .T. ) ; +#8837 = CARTESIAN_POINT ( 'NONE', ( 7.611952621458756100, 3.206595997628984800, -3.047668071082942900 ) ) ; +#8838 = VERTEX_POINT ( 'NONE', #12077 ) ; +#8839 = PLANE ( 'NONE', #678 ) ; +#8840 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, -15.05858178898088800, -9.600000000000001400 ) ) ; +#8841 = LINE ( 'NONE', #4388, #13972 ) ; +#8842 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8843 = VECTOR ( 'NONE', #1827, 1000.000000000000000 ) ; +#8844 = AXIS2_PLACEMENT_3D ( 'NONE', #3537, #14553, #9508 ) ; +#8845 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#8846 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, -15.05858178898088800, -9.600000000000001400 ) ) ; +#8847 = DIRECTION ( 'NONE', ( -1.204669080539449300E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#8848 = ADVANCED_FACE ( 'NONE', ( #3548 ), #7477, .T. ) ; +#8849 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#8850 = FACE_OUTER_BOUND ( 'NONE', #14371, .T. ) ; +#8852 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#8851 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8853 = ORIENTED_EDGE ( 'NONE', *, *, #13633, .T. ) ; +#8854 = ORIENTED_EDGE ( 'NONE', *, *, #2148, .F. ) ; +#8855 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8856 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#8857 = EDGE_CURVE ( 'NONE', #2623, #7597, #7564, .T. ) ; +#8858 = EDGE_LOOP ( 'NONE', ( #8685, #2558, #3317, #12253 ) ) ; +#8859 = VECTOR ( 'NONE', #6545, 1000.000000000000000 ) ; +#8860 = VERTEX_POINT ( 'NONE', #1216 ) ; +#8861 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#8862 = ORIENTED_EDGE ( 'NONE', *, *, #9733, .F. ) ; +#8863 = EDGE_CURVE ( 'NONE', #14686, #7807, #6234, .T. ) ; +#8864 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#8865 = VECTOR ( 'NONE', #15041, 1000.000000000000000 ) ; +#8866 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999988600, -15.05858178898088800, -6.900000000000000400 ) ) ; +#8867 = VERTEX_POINT ( 'NONE', #7330 ) ; +#8868 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000005300, 0.0000000000000000000, 7.325000000000002000 ) ) ; +#8869 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, -0.0000000000000000000, -2.449999999999998800 ) ) ; +#8870 = ORIENTED_EDGE ( 'NONE', *, *, #4221, .T. ) ; +#8871 = VERTEX_POINT ( 'NONE', #4853 ) ; +#8872 = FACE_BOUND ( 'NONE', #15015, .T. ) ; +#8873 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000000700, 9.290000000000000900 ) ) ; +#8874 = EDGE_LOOP ( 'NONE', ( #13128, #3491, #13303, #15707 ) ) ; +#8875 = ORIENTED_EDGE ( 'NONE', *, *, #14357, .T. ) ; +#8876 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8877 = ORIENTED_EDGE ( 'NONE', *, *, #12453, .F. ) ; +#8878 = FACE_OUTER_BOUND ( 'NONE', #13934, .T. ) ; +#8879 = VECTOR ( 'NONE', #12476, 1000.000000000000000 ) ; +#8880 = AXIS2_PLACEMENT_3D ( 'NONE', #15428, #10708, #8172 ) ; +#8881 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8882 = VERTEX_POINT ( 'NONE', #1379 ) ; +#8883 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8884 = EDGE_CURVE ( 'NONE', #5744, #4620, #8323, .T. ) ; +#8885 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8886 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#8887 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, 5.650000000000000400 ) ) ; +#8888 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#8889 = ORIENTED_EDGE ( 'NONE', *, *, #10924, .T. ) ; +#8890 = VECTOR ( 'NONE', #9331, 1000.000000000000000 ) ; +#8891 = ORIENTED_EDGE ( 'NONE', *, *, #15658, .T. ) ; +#8892 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999890200, 0.4000000000000000200, -1.849999999999998800 ) ) ; +#8893 = VERTEX_POINT ( 'NONE', #8543 ) ; +#8894 = VECTOR ( 'NONE', #11819, 1000.000000000000000 ) ; +#8895 = AXIS2_PLACEMENT_3D ( 'NONE', #14133, #4287, #5624 ) ; +#8896 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#8897 = ADVANCED_FACE ( 'NONE', ( #3743 ), #158, .F. ) ; +#8898 = CARTESIAN_POINT ( 'NONE', ( -4.245652838497374400E-016, 3.050000000000001600, -3.080000000000000100 ) ) ; +#8899 = EDGE_LOOP ( 'NONE', ( #5931, #9046, #7488, #4989 ) ) ; +#8900 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#8901 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8903 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000029100, 0.4000000000000000200, -0.3500000000000013700 ) ) ; +#8902 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.097720492815727700E-016 ) ) ; +#8904 = LINE ( 'NONE', #8713, #1828 ) ; +#8905 = EDGE_LOOP ( 'NONE', ( #6593, #3830, #10589, #2433 ) ) ; +#8906 = EDGE_CURVE ( 'NONE', #7778, #6681, #4519, .T. ) ; +#8907 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#8908 = VECTOR ( 'NONE', #11516, 1000.000000000000000 ) ; +#8909 = VECTOR ( 'NONE', #14123, 1000.000000000000000 ) ; +#8910 = ADVANCED_FACE ( 'NONE', ( #7184 ), #4956, .F. ) ; +#8911 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8912 = EDGE_CURVE ( 'NONE', #7251, #9816, #3353, .T. ) ; +#8913 = PLANE ( 'NONE', #7169 ) ; +#8914 = VECTOR ( 'NONE', #3114, 1000.000000000000000 ) ; +#8915 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 8.825000000000001100 ) ) ; +#8916 = VERTEX_POINT ( 'NONE', #13461 ) ; +#8917 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 8.825000000000001100 ) ) ; +#8918 = VECTOR ( 'NONE', #9464, 1000.000000000000000 ) ; +#8919 = FACE_OUTER_BOUND ( 'NONE', #11438, .T. ) ; +#8920 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, -1.850000000000000500 ) ) ; +#8921 = ORIENTED_EDGE ( 'NONE', *, *, #1686, .T. ) ; +#8922 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000009600, 0.4000000000000000200, 5.649999999999999500 ) ) ; +#8923 = ADVANCED_FACE ( 'NONE', ( #4885 ), #12124, .F. ) ; +#8924 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8925 = EDGE_CURVE ( 'NONE', #2532, #7807, #11360, .T. ) ; +#8926 = EDGE_CURVE ( 'NONE', #5896, #8289, #13626, .T. ) ; +#8927 = CARTESIAN_POINT ( 'NONE', ( 7.639222690360981900, 3.102198665876327900, -2.841952621458757800 ) ) ; +#8928 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, 4.149999999999999500 ) ) ; +#8929 = ORIENTED_EDGE ( 'NONE', *, *, #11431, .F. ) ; +#8930 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8931 = VECTOR ( 'NONE', #14427, 1000.000000000000000 ) ; +#8932 = EDGE_LOOP ( 'NONE', ( #14449, #10191, #7632, #5359, #4064, #14213 ) ) ; +#8933 = CARTESIAN_POINT ( 'NONE', ( 7.575703978347823900, 3.147979999999999600, 9.005520281879285000 ) ) ; +#8934 = EDGE_LOOP ( 'NONE', ( #11248, #5147, #5092, #160 ) ) ; +#8935 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 4.149999999999999500 ) ) ; +#8936 = CIRCLE ( 'NONE', #1375, 0.2500000000000002200 ) ; +#8937 = AXIS2_PLACEMENT_3D ( 'NONE', #9787, #6083, #1203 ) ; +#8938 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 1.149999999999999900 ) ) ; +#8939 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#8940 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8941 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8942 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.149999999999998600, -2.780000000000001100 ) ) ; +#8943 = CARTESIAN_POINT ( 'NONE', ( -7.639702065901542700, 3.096076976721357200, 9.054815129928842400 ) ) ; +#8944 = EDGE_LOOP ( 'NONE', ( #282, #8288, #12337, #11806, #6655, #14285 ) ) ; +#8945 = ORIENTED_EDGE ( 'NONE', *, *, #9316, .F. ) ; +#8946 = LINE ( 'NONE', #12614, #11962 ) ; +#8947 = ORIENTED_EDGE ( 'NONE', *, *, #15608, .T. ) ; +#8948 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#8949 = VERTEX_POINT ( 'NONE', #12327 ) ; +#8950 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#8951 = EDGE_CURVE ( 'NONE', #5968, #14774, #10788, .T. ) ; +#8952 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8953 = VECTOR ( 'NONE', #11961, 1000.000000000000000 ) ; +#8954 = LINE ( 'NONE', #10898, #11593 ) ; +#8955 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#8956 = ORIENTED_EDGE ( 'NONE', *, *, #10445, .T. ) ; +#8957 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8958 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.8000000000000000400, -2.449999999999997500 ) ) ; +#8959 = ORIENTED_EDGE ( 'NONE', *, *, #9881, .T. ) ; +#8960 = ORIENTED_EDGE ( 'NONE', *, *, #675, .F. ) ; +#8961 = AXIS2_PLACEMENT_3D ( 'NONE', #13676, #1530, #13786 ) ; +#8962 = ORIENTED_EDGE ( 'NONE', *, *, #5436, .F. ) ; +#8963 = ORIENTED_EDGE ( 'NONE', *, *, #1785, .T. ) ; +#8964 = AXIS2_PLACEMENT_3D ( 'NONE', #3702, #3650, #1244 ) ; +#8965 = VECTOR ( 'NONE', #13984, 1000.000000000000000 ) ; +#8966 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -5.478074134663595300E-015 ) ) ; +#8967 = VERTEX_POINT ( 'NONE', #7528 ) ; +#8968 = AXIS2_PLACEMENT_3D ( 'NONE', #12523, #12585, #15046 ) ; +#8969 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#8970 = ADVANCED_FACE ( 'NONE', ( #10990 ), #13569, .T. ) ; +#8971 = ORIENTED_EDGE ( 'NONE', *, *, #5462, .F. ) ; +#8972 = ORIENTED_EDGE ( 'NONE', *, *, #14319, .F. ) ; +#8973 = EDGE_CURVE ( 'NONE', #11342, #7645, #5072, .T. ) ; +#8974 = VERTEX_POINT ( 'NONE', #7575 ) ; +#8975 = EDGE_CURVE ( 'NONE', #3600, #7710, #486, .T. ) ; +#8976 = ORIENTED_EDGE ( 'NONE', *, *, #9039, .T. ) ; +#8977 = LINE ( 'NONE', #12707, #8812 ) ; +#8978 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#8979 = LINE ( 'NONE', #14288, #12559 ) ; +#8980 = SURFACE_STYLE_FILL_AREA ( #2692 ) ; +#8981 = PLANE ( 'NONE', #15621 ) ; +#8982 = VECTOR ( 'NONE', #861, 1000.000000000000000 ) ; +#8983 = VERTEX_POINT ( 'NONE', #11294 ) ; +#8984 = CARTESIAN_POINT ( 'NONE', ( 7.576234407614299100, 3.149999999999999500, 9.005520379342620200 ) ) ; +#8985 = ADVANCED_FACE ( 'NONE', ( #9458 ), #7749, .T. ) ; +#8987 = ORIENTED_EDGE ( 'NONE', *, *, #1622, .T. ) ; +#8986 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, -0.9499999999999990700 ) ) ; +#8988 = CARTESIAN_POINT ( 'NONE', ( 7.706844258255259200, 3.317458334292941600, 9.021040100843958200 ) ) ; +#8989 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8990 = EDGE_LOOP ( 'NONE', ( #9005, #14356, #12792, #13557, #10102, #11863 ) ) ; +#8991 = ADVANCED_FACE ( 'NONE', ( #13838 ), #10169, .T. ) ; +#8992 = ORIENTED_EDGE ( 'NONE', *, *, #7327, .F. ) ; +#8993 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 1.325000000000001500 ) ) ; +#8994 = VECTOR ( 'NONE', #2408, 1000.000000000000000 ) ; +#8995 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000034500, 0.4000000000000000200, -0.9499999999999995100 ) ) ; +#8996 = VECTOR ( 'NONE', #10488, 1000.000000000000000 ) ; +#8997 = LINE ( 'NONE', #4785, #11446 ) ; +#8998 = EDGE_CURVE ( 'NONE', #57, #3513, #10604, .T. ) ; +#8999 = VECTOR ( 'NONE', #14512, 1000.000000000000000 ) ; +#9000 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9001 = ORIENTED_EDGE ( 'NONE', *, *, #15265, .F. ) ; +#9002 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9003 = ORIENTED_EDGE ( 'NONE', *, *, #12150, .F. ) ; +#9004 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, -15.05858178898088800, -4.000000000000000000 ) ) ; +#9005 = ORIENTED_EDGE ( 'NONE', *, *, #13630, .F. ) ; +#9006 = EDGE_CURVE ( 'NONE', #12712, #1115, #10012, .T. ) ; +#9007 = AXIS2_PLACEMENT_3D ( 'NONE', #11595, #10599, #4437 ) ; +#9008 = AXIS2_PLACEMENT_3D ( 'NONE', #7555, #8833, #9972 ) ; +#9009 = LINE ( 'NONE', #3332, #9215 ) ; +#9010 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9011 = FACE_OUTER_BOUND ( 'NONE', #1466, .T. ) ; +#9012 = VECTOR ( 'NONE', #6207, 1000.000000000000000 ) ; +#9013 = LINE ( 'NONE', #10313, #5769 ) ; +#9014 = FACE_OUTER_BOUND ( 'NONE', #5842, .T. ) ; +#9015 = EDGE_LOOP ( 'NONE', ( #1970, #3419, #7249, #5745 ) ) ; +#9016 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -6.123233995736767300E-017 ) ) ; +#9017 = VERTEX_POINT ( 'NONE', #3891 ) ; +#9018 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 7.150000000000000400 ) ) ; +#9019 = EDGE_CURVE ( 'NONE', #10367, #11812, #10213, .T. ) ; +#9020 = ORIENTED_EDGE ( 'NONE', *, *, #5913, .T. ) ; +#9021 = CARTESIAN_POINT ( 'NONE', ( 7.563639365022394800, 3.147982895189702600, -2.803037331497398200 ) ) ; +#9022 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999984400, 0.4000000000000000200, 7.150000000000000400 ) ) ; +#9023 = LINE ( 'NONE', #4038, #13174 ) ; +#9024 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, -0.3500000000000004800 ) ) ; +#9025 = FACE_OUTER_BOUND ( 'NONE', #9916, .T. ) ; +#9026 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9027 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.149999999999998600, -2.780000000000001100 ) ) ; +#9028 = EDGE_CURVE ( 'NONE', #2473, #4883, #13057, .T. ) ; +#9029 = LINE ( 'NONE', #11321, #14534 ) ; +#9030 = AXIS2_PLACEMENT_3D ( 'NONE', #1372, #10210, #8957 ) ; +#9031 = ORIENTED_EDGE ( 'NONE', *, *, #11843, .T. ) ; +#9032 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9033 = EDGE_LOOP ( 'NONE', ( #7239, #7695, #9116, #15030 ) ) ; +#9034 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000000400, 3.076234407614292500, 9.067408552845520800 ) ) ; +#9035 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9036 = FACE_OUTER_BOUND ( 'NONE', #3872, .T. ) ; +#9037 = LINE ( 'NONE', #3476, #9227 ) ; +#9038 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 1.806230589874906900, 1.149999999999999900 ) ) ; +#9039 = EDGE_CURVE ( 'NONE', #229, #7869, #677, .T. ) ; +#9040 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 3.550000000000001200 ) ) ; +#9041 = PLANE ( 'NONE', #13060 ) ; +#9042 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, -1.850000000000000500 ) ) ; +#9043 = EDGE_LOOP ( 'NONE', ( #2062, #7561, #2272, #5726 ) ) ; +#9044 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9045 = VERTEX_POINT ( 'NONE', #3941 ) ; +#9046 = ORIENTED_EDGE ( 'NONE', *, *, #312, .F. ) ; +#9047 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude3', #7022 ) ; +#9048 = ADVANCED_FACE ( 'NONE', ( #874 ), #12600, .T. ) ; +#9049 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 0.5500000000000010400 ) ) ; +#9050 = CARTESIAN_POINT ( 'NONE', ( -6.050000000000001600, 3.350000000000000100, 7.690000000000001300 ) ) ; +#9051 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#9052 = ORIENTED_EDGE ( 'NONE', *, *, #2931, .T. ) ; +#9053 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#9054 = ORIENTED_EDGE ( 'NONE', *, *, #9429, .F. ) ; +#9055 = VERTEX_POINT ( 'NONE', #13619 ) ; +#9056 = AXIS2_PLACEMENT_3D ( 'NONE', #6107, #14698, #3746 ) ; +#9057 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999976900, 0.8000000000000000400, 2.649999999999997700 ) ) ; +#9059 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9058 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999921500, 0.0000000000000000000, 2.050000000000004300 ) ) ; +#9060 = EDGE_LOOP ( 'NONE', ( #14125, #1608, #1951, #14632 ) ) ; +#9061 = VECTOR ( 'NONE', #1806, 1000.000000000000000 ) ; +#9062 = LINE ( 'NONE', #14440, #2737 ) ; +#9063 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9064 = SURFACE_STYLE_USAGE ( .BOTH. , #11434 ) ; +#9065 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000003600, 0.8000000000000000400, 8.050000000000000700 ) ) ; +#9066 = ORIENTED_EDGE ( 'NONE', *, *, #4221, .F. ) ; +#9067 = ADVANCED_FACE ( 'NONE', ( #12282 ), #11183, .T. ) ; +#9068 = EDGE_CURVE ( 'NONE', #4477, #15134, #2575, .T. ) ; +#9069 = ORIENTED_EDGE ( 'NONE', *, *, #3466, .F. ) ; +#9070 = EDGE_CURVE ( 'NONE', #569, #569, #5456, .T. ) ; +#9071 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 5.102127870520021000E-016 ) ) ; +#9072 = ORIENTED_EDGE ( 'NONE', *, *, #4675, .F. ) ; +#9073 = ADVANCED_FACE ( 'NONE', ( #8712 ), #8803, .T. ) ; +#9074 = LINE ( 'NONE', #7786, #7364 ) ; +#9075 = EDGE_CURVE ( 'NONE', #14620, #600, #7006, .T. ) ; +#9076 = EDGE_LOOP ( 'NONE', ( #1021, #10534, #6841, #14355, #10856, #4150 ) ) ; +#9077 = CARTESIAN_POINT ( 'NONE', ( -7.849999999999999600, 3.129230338724656100, -2.857304604898443800 ) ) ; +#9078 = EDGE_LOOP ( 'NONE', ( #3109, #10635, #12333, #13905, #13603, #13413 ) ) ; +#9079 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9080 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000000700, 9.090000000000001600 ) ) ; +#9081 = LINE ( 'NONE', #813, #9275 ) ; +#9082 = LINE ( 'NONE', #7854, #3162 ) ; +#9083 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9084 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 1.637941840314110200, 1.849999999999999900 ) ) ; +#9085 = AXIS2_PLACEMENT_3D ( 'NONE', #7914, #15121, #10128 ) ; +#9086 = EDGE_LOOP ( 'NONE', ( #5221, #10518, #4166, #14761 ) ) ; +#9087 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999968400, 0.4000000000000000200, 5.650000000000001200 ) ) ; +#9088 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999921500, 0.4000000000000000200, 1.149999999999999900 ) ) ; +#9089 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#9090 = ORIENTED_EDGE ( 'NONE', *, *, #7463, .F. ) ; +#9091 = LINE ( 'NONE', #3193, #8707 ) ; +#9092 = ORIENTED_EDGE ( 'NONE', *, *, #2784, .F. ) ; +#9093 = VECTOR ( 'NONE', #6705, 1000.000000000000000 ) ; +#9094 = VECTOR ( 'NONE', #2541, 1000.000000000000000 ) ; +#9095 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#9096 = EDGE_CURVE ( 'NONE', #7518, #11310, #14776, .T. ) ; +#9097 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9098 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#9099 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9100 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, -1.674999999999998900 ) ) ; +#9101 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9102 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.8000000000000000400, -5.150000000000001200 ) ) ; +#9103 = EDGE_CURVE ( 'NONE', #5188, #13403, #8515, .T. ) ; +#9104 = VECTOR ( 'NONE', #1717, 1000.000000000000000 ) ; +#9105 = SURFACE_STYLE_USAGE ( .BOTH. , #5412 ) ; +#9106 = EDGE_LOOP ( 'NONE', ( #10440, #5910, #10043, #2307 ) ) ; +#9107 = VECTOR ( 'NONE', #6278, 1000.000000000000000 ) ; +#9108 = LINE ( 'NONE', #9088, #8721 ) ; +#9109 = PRODUCT_CONTEXT ( 'NONE', #12687, 'mechanical' ) ; +#9110 = ORIENTED_EDGE ( 'NONE', *, *, #14045, .T. ) ; +#9111 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 8.050000000000000700 ) ) ; +#9112 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 6.550000000000001600 ) ) ; +#9114 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#9113 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9115 = EDGE_CURVE ( 'NONE', #6498, #3203, #12272, .T. ) ; +#9116 = ORIENTED_EDGE ( 'NONE', *, *, #1882, .F. ) ; +#9117 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000019500, 0.0000000000000000000, 2.825000000000001100 ) ) ; +#9118 = VECTOR ( 'NONE', #9099, 1000.000000000000000 ) ; +#9119 = ORIENTED_EDGE ( 'NONE', *, *, #7530, .T. ) ; +#9120 = VECTOR ( 'NONE', #12430, 1000.000000000000000 ) ; +#9121 = LINE ( 'NONE', #4138, #3769 ) ; +#9122 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#9123 = EDGE_CURVE ( 'NONE', #4483, #987, #15147, .T. ) ; +#9124 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3991 ) ) ; +#9125 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9126 = ORIENTED_EDGE ( 'NONE', *, *, #15224, .T. ) ; +#9127 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9128 = ORIENTED_EDGE ( 'NONE', *, *, #11854, .F. ) ; +#9129 = LINE ( 'NONE', #12662, #4538 ) ; +#9130 = ORIENTED_EDGE ( 'NONE', *, *, #14689, .T. ) ; +#9131 = VERTEX_POINT ( 'NONE', #6830 ) ; +#9132 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9133 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#9134 = LINE ( 'NONE', #2122, #1471 ) ; +#9135 = FACE_OUTER_BOUND ( 'NONE', #13528, .T. ) ; +#9136 = EDGE_CURVE ( 'NONE', #5352, #5728, #5264, .T. ) ; +#9137 = EDGE_CURVE ( 'NONE', #12815, #6348, #10201, .T. ) ; +#9138 = CARTESIAN_POINT ( 'NONE', ( 7.576234407614299100, 3.149999999999999500, -2.795520379342621100 ) ) ; +#9139 = ORIENTED_EDGE ( 'NONE', *, *, #13855, .T. ) ; +#9140 = ORIENTED_EDGE ( 'NONE', *, *, #5639, .F. ) ; +#9141 = ORIENTED_EDGE ( 'NONE', *, *, #1036, .F. ) ; +#9142 = VERTEX_POINT ( 'NONE', #12812 ) ; +#9143 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9144 = ADVANCED_FACE ( 'NONE', ( #14575 ), #14000, .F. ) ; +#9145 = ORIENTED_EDGE ( 'NONE', *, *, #15371, .F. ) ; +#9146 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9147 = ORIENTED_EDGE ( 'NONE', *, *, #4377, .T. ) ; +#9148 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9149 = ORIENTED_EDGE ( 'NONE', *, *, #2545, .T. ) ; +#9150 = FILL_AREA_STYLE ('',( #6703 ) ) ; +#9151 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000031300, 0.8000000000000000400, 0.5499999999999997100 ) ) ; +#9152 = ADVANCED_FACE ( 'NONE', ( #4501 ), #6617, .T. ) ; +#9153 = FACE_OUTER_BOUND ( 'NONE', #690, .T. ) ; +#9154 = VECTOR ( 'NONE', #7134, 1000.000000000000000 ) ; +#9155 = DIRECTION ( 'NONE', ( 3.690901012716604900E-015, 1.000000000000000000, -6.123233995736767300E-017 ) ) ; +#9156 = VECTOR ( 'NONE', #13521, 1000.000000000000000 ) ; +#9157 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9158 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9159 = EDGE_LOOP ( 'NONE', ( #2172, #1003, #12059, #7836 ) ) ; +#9160 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9161 = ORIENTED_EDGE ( 'NONE', *, *, #15394, .F. ) ; +#9162 = VERTEX_POINT ( 'NONE', #14108 ) ; +#9163 = EDGE_CURVE ( 'NONE', #7805, #12938, #11718, .T. ) ; +#9164 = ORIENTED_EDGE ( 'NONE', *, *, #14542, .F. ) ; +#9165 = ORIENTED_EDGE ( 'NONE', *, *, #15460, .T. ) ; +#9166 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.149999999999998600, -2.780000000000001100 ) ) ; +#9167 = ORIENTED_EDGE ( 'NONE', *, *, #9070, .T. ) ; +#9169 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9168 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#9170 = EDGE_CURVE ( 'NONE', #5371, #57, #9082, .T. ) ; +#9171 = FACE_OUTER_BOUND ( 'NONE', #6208, .T. ) ; +#9172 = LINE ( 'NONE', #6762, #7274 ) ; +#9173 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9174 = PLANE ( 'NONE', #684 ) ; +#9175 = AXIS2_PLACEMENT_3D ( 'NONE', #6080, #8423, #3664 ) ; +#9176 = ORIENTED_EDGE ( 'NONE', *, *, #13979, .T. ) ; +#9177 = ORIENTED_EDGE ( 'NONE', *, *, #7917, .F. ) ; +#9178 = ORIENTED_EDGE ( 'NONE', *, *, #12151, .F. ) ; +#9179 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9180 = ORIENTED_EDGE ( 'NONE', *, *, #11508, .F. ) ; +#9181 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.3999999999999999700, 1.149999999999999900 ) ) ; +#9182 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 1.637941840314110200, 3.649999999999999500 ) ) ; +#9183 = VERTEX_POINT ( 'NONE', #7903 ) ; +#9184 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.097720492815727700E-016 ) ) ; +#9185 = VECTOR ( 'NONE', #1366, 1000.000000000000000 ) ; +#9186 = FACE_OUTER_BOUND ( 'NONE', #9197, .T. ) ; +#9187 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#9188 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2606 ) ) ; +#9189 = VECTOR ( 'NONE', #11006, 1000.000000000000000 ) ; +#9190 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000000400, 3.149999999999999900, 9.082928932188135500 ) ) ; +#9191 = ORIENTED_EDGE ( 'NONE', *, *, #12741, .T. ) ; +#9192 = EDGE_CURVE ( 'NONE', #4033, #13781, #15507, .T. ) ; +#9193 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.8000000000000000400, -5.150000000000001200 ) ) ; +#9194 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#9195 = ORIENTED_EDGE ( 'NONE', *, *, #832, .F. ) ; +#9196 = EDGE_CURVE ( 'NONE', #9260, #13107, #11896, .T. ) ; +#9197 = EDGE_LOOP ( 'NONE', ( #12451, #9886, #3120, #8789 ) ) ; +#9198 = LINE ( 'NONE', #1823, #7291 ) ; +#9199 = LINE ( 'NONE', #3444, #5953 ) ; +#9200 = VECTOR ( 'NONE', #9639, 1000.000000000000000 ) ; +#9201 = AXIS2_PLACEMENT_3D ( 'NONE', #1534, #9905, #7480 ) ; +#9202 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9203 = FILL_AREA_STYLE_COLOUR ( '', #5351 ) ; +#9204 = VECTOR ( 'NONE', #624, 1000.000000000000000 ) ; +#9205 = DIRECTION ( 'NONE', ( -5.478074134663584300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9206 = CLOSED_SHELL ( 'NONE', ( #7864, #7455, #12463, #39, #15028, #5625 ) ) ; +#9207 = ORIENTED_EDGE ( 'NONE', *, *, #11313, .F. ) ; +#9208 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.7000000000000009500, -6.100000000000000500 ) ) ; +#9209 = ORIENTED_EDGE ( 'NONE', *, *, #14347, .F. ) ; +#9210 = PLANE ( 'NONE', #8062 ) ; +#9211 = ORIENTED_EDGE ( 'NONE', *, *, #9222, .T. ) ; +#9212 = CARTESIAN_POINT ( 'NONE', ( 7.644106227756287500, 3.083823333624608100, -2.852513364263750800 ) ) ; +#9213 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#9214 = EDGE_CURVE ( 'NONE', #9755, #14939, #3728, .T. ) ; +#9215 = VECTOR ( 'NONE', #12949, 1000.000000000000000 ) ; +#9216 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, -1.850000000000000500 ) ) ; +#9217 = ADVANCED_FACE ( 'NONE', ( #2562 ), #4318, .F. ) ; +#9218 = VECTOR ( 'NONE', #7229, 1000.000000000000000 ) ; +#9219 = VECTOR ( 'NONE', #13734, 1000.000000000000000 ) ; +#9220 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999889500, -0.0000000000000000000, -0.9499999999999995100 ) ) ; +#9221 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 2.649999999999997700 ) ) ; +#9222 = EDGE_CURVE ( 'NONE', #11455, #7583, #8698, .T. ) ; +#9223 = VERTEX_POINT ( 'NONE', #10431 ) ; +#9224 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000004300, 0.4000000000000000200, 8.050000000000000700 ) ) ; +#9225 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#9226 = ADVANCED_FACE ( 'NONE', ( #6221 ), #10374, .T. ) ; +#9227 = VECTOR ( 'NONE', #13047, 1000.000000000000000 ) ; +#9228 = ADVANCED_FACE ( 'NONE', ( #5442 ), #11799, .F. ) ; +#9229 = LINE ( 'NONE', #8840, #64 ) ; +#9230 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 0.5500000000000010400 ) ) ; +#9231 = EDGE_CURVE ( 'NONE', #15029, #937, #1808, .T. ) ; +#9232 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 1.637941840314110200, 3.649999999999999500 ) ) ; +#9233 = EDGE_CURVE ( 'NONE', #12230, #2179, #6417, .T. ) ; +#9234 = ORIENTED_EDGE ( 'NONE', *, *, #230, .T. ) ; +#9235 = ORIENTED_EDGE ( 'NONE', *, *, #7115, .F. ) ; +#9236 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9237 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9238 = SURFACE_SIDE_STYLE ('',( #1925 ) ) ; +#9239 = VERTEX_POINT ( 'NONE', #6942 ) ; +#9240 = EDGE_CURVE ( 'NONE', #6480, #2245, #5652, .T. ) ; +#9241 = VECTOR ( 'NONE', #2146, 1000.000000000000000 ) ; +#9242 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.3999999999999999700, 6.550000000000001600 ) ) ; +#9243 = ORIENTED_EDGE ( 'NONE', *, *, #15285, .T. ) ; +#9244 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9245 = VERTEX_POINT ( 'NONE', #13125 ) ; +#9246 = VECTOR ( 'NONE', #15466, 1000.000000000000000 ) ; +#9247 = AXIS2_PLACEMENT_3D ( 'NONE', #12046, #9772, #6060 ) ; +#9248 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, -15.05858178898088800, -9.600000000000001400 ) ) ; +#9249 = ORIENTED_EDGE ( 'NONE', *, *, #1383, .F. ) ; +#9250 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.195440985631453300E-016 ) ) ; +#9251 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9252 = ORIENTED_EDGE ( 'NONE', *, *, #7190, .T. ) ; +#9253 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999984400, 0.4000000000000000200, 8.050000000000000700 ) ) ; +#9254 = EDGE_CURVE ( 'NONE', #8768, #558, #12475, .T. ) ; +#9255 = PLANE ( 'NONE', #15050 ) ; +#9256 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9257 = ORIENTED_EDGE ( 'NONE', *, *, #12898, .F. ) ; +#9258 = FACE_OUTER_BOUND ( 'NONE', #6280, .T. ) ; +#9259 = EDGE_LOOP ( 'NONE', ( #6121, #1010, #8156, #14231, #10647, #15642 ) ) ; +#9260 = VERTEX_POINT ( 'NONE', #5809 ) ; +#9261 = ORIENTED_EDGE ( 'NONE', *, *, #302, .F. ) ; +#9262 = VECTOR ( 'NONE', #8547, 1000.000000000000000 ) ; +#9263 = LINE ( 'NONE', #13176, #8124 ) ; +#9264 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.8000000000000000400, -4.500000000000000000 ) ) ; +#9265 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 10.00000000000000000 ) ) ; +#9266 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#9267 = ORIENTED_EDGE ( 'NONE', *, *, #14944, .F. ) ; +#9268 = AXIS2_PLACEMENT_3D ( 'NONE', #12445, #7644, #317 ) ; +#9269 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#9270 = ORIENTED_EDGE ( 'NONE', *, *, #5948, .T. ) ; +#9271 = VECTOR ( 'NONE', #10335, 1000.000000000000000 ) ; +#9272 = ORIENTED_EDGE ( 'NONE', *, *, #6179, .T. ) ; +#9273 = ORIENTED_EDGE ( 'NONE', *, *, #2866, .F. ) ; +#9274 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#9275 = VECTOR ( 'NONE', #9251, 1000.000000000000000 ) ; +#9276 = FACE_OUTER_BOUND ( 'NONE', #5642, .T. ) ; +#9277 = EDGE_CURVE ( 'NONE', #12713, #8718, #13825, .T. ) ; +#9278 = EDGE_CURVE ( 'NONE', #11650, #1142, #6600, .T. ) ; +#9279 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9280 = LINE ( 'NONE', #8917, #2382 ) ; +#9281 = CARTESIAN_POINT ( 'NONE', ( 7.611952621458756100, 3.102198665876328300, 9.079222690360984100 ) ) ; +#9282 = ORIENTED_EDGE ( 'NONE', *, *, #1330, .F. ) ; +#9283 = ADVANCED_FACE ( 'NONE', ( #5057 ), #838, .T. ) ; +#9284 = FACE_OUTER_BOUND ( 'NONE', #10748, .T. ) ; +#9285 = VECTOR ( 'NONE', #5715, 1000.000000000000000 ) ; +#9286 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9287 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000029100, 0.4000000000000000200, 0.5500000000000001600 ) ) ; +#9288 = DIRECTION ( 'NONE', ( -9.035018104045869500E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9289 = FACE_BOUND ( 'NONE', #10836, .T. ) ; +#9290 = ORIENTED_EDGE ( 'NONE', *, *, #12811, .T. ) ; +#9291 = PLANE ( 'NONE', #4117 ) ; +#9292 = EDGE_CURVE ( 'NONE', #5452, #5005, #11347, .T. ) ; +#9293 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000023800, 0.4000000000000000200, 2.050000000000001600 ) ) ; +#9294 = ADVANCED_FACE ( 'NONE', ( #9276 ), #15413, .T. ) ; +#9295 = FACE_OUTER_BOUND ( 'NONE', #583, .T. ) ; +#9296 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9297 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#9298 = VERTEX_POINT ( 'NONE', #889 ) ; +#9299 = ADVANCED_FACE ( 'NONE', ( #8311 ), #3345, .T. ) ; +#9300 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.6999999999999999600, 0.0000000000000000000 ) ) ; +#9301 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#9302 = EDGE_CURVE ( 'NONE', #7518, #15644, #6040, .T. ) ; +#9303 = SURFACE_SIDE_STYLE ('',( #2053 ) ) ; +#9304 = AXIS2_PLACEMENT_3D ( 'NONE', #12036, #14431, #7173 ) ; +#9305 = VERTEX_POINT ( 'NONE', #13068 ) ; +#9306 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999890200, 0.4000000000000000200, -1.850000000000001000 ) ) ; +#9307 = LINE ( 'NONE', #7060, #6267 ) ; +#9308 = ORIENTED_EDGE ( 'NONE', *, *, #8551, .F. ) ; +#9309 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, -0.0000000000000000000, -2.449999999999998800 ) ) ; +#9310 = ORIENTED_EDGE ( 'NONE', *, *, #10069, .T. ) ; +#9311 = FACE_OUTER_BOUND ( 'NONE', #12667, .T. ) ; +#9312 = VECTOR ( 'NONE', #9213, 1000.000000000000000 ) ; +#9313 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9315 = FILL_AREA_STYLE ('',( #3335 ) ) ; +#9314 = SURFACE_SIDE_STYLE ('',( #8438 ) ) ; +#9316 = EDGE_CURVE ( 'NONE', #1589, #11422, #4873, .T. ) ; +#9317 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.4000000000000000200, 2.649999999999999500 ) ) ; +#9318 = ORIENTED_EDGE ( 'NONE', *, *, #14403, .F. ) ; +#9319 = ORIENTED_EDGE ( 'NONE', *, *, #9367, .F. ) ; +#9320 = LINE ( 'NONE', #1342, #13285 ) ; +#9321 = ORIENTED_EDGE ( 'NONE', *, *, #5913, .F. ) ; +#9322 = VERTEX_POINT ( 'NONE', #9524 ) ; +#9323 = EDGE_CURVE ( 'NONE', #11371, #1430, #8138, .T. ) ; +#9324 = FACE_OUTER_BOUND ( 'NONE', #13234, .T. ) ; +#9325 = FACE_OUTER_BOUND ( 'NONE', #5734, .T. ) ; +#9326 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9327 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 1.149999999999999900 ) ) ; +#9328 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.4000000000000000200, 4.149999999999999500 ) ) ; +#9329 = ORIENTED_EDGE ( 'NONE', *, *, #14526, .F. ) ; +#9330 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude5[3]', #5507 ) ; +#9331 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9332 = VERTEX_POINT ( 'NONE', #3186 ) ; +#9333 = VERTEX_POINT ( 'NONE', #15710 ) ; +#9334 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 3.550000000000001200 ) ) ; +#9335 = ORIENTED_EDGE ( 'NONE', *, *, #6745, .F. ) ; +#9336 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9337 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 2.050000000000001600 ) ) ; +#9338 = VERTEX_POINT ( 'NONE', #2020 ) ; +#9339 = EDGE_LOOP ( 'NONE', ( #12348, #10180, #13543, #6407 ) ) ; +#9340 = EDGE_CURVE ( 'NONE', #1500, #1500, #4680, .T. ) ; +#9341 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#9342 = LINE ( 'NONE', #4304, #8965 ) ; +#9343 = LINE ( 'NONE', #8748, #6116 ) ; +#9344 = ORIENTED_EDGE ( 'NONE', *, *, #9928, .F. ) ; +#9345 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9347 = ORIENTED_EDGE ( 'NONE', *, *, #5086, .F. ) ; +#9346 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.149999999999999500, -2.872928932188135100 ) ) ; +#9348 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9349 = AXIS2_PLACEMENT_3D ( 'NONE', #2906, #560, #11424 ) ; +#9350 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, -10.00000000000000000 ) ) ; +#9351 = EDGE_LOOP ( 'NONE', ( #13491, #204, #3983, #12019 ) ) ; +#9352 = VERTEX_POINT ( 'NONE', #8366 ) ; +#9353 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000034500, 0.4000000000000000200, -0.9499999999999995100 ) ) ; +#9354 = AXIS2_PLACEMENT_3D ( 'NONE', #4694, #9653, #4743 ) ; +#9355 = FACE_OUTER_BOUND ( 'NONE', #13293, .T. ) ; +#9356 = PLANE ( 'NONE', #7494 ) ; +#9357 = LINE ( 'NONE', #15636, #1152 ) ; +#9358 = LINE ( 'NONE', #2130, #11061 ) ; +#9359 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#9360 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 8.650000000000000400 ) ) ; +#9361 = ORIENTED_EDGE ( 'NONE', *, *, #12045, .F. ) ; +#9362 = EDGE_CURVE ( 'NONE', #3613, #14536, #11707, .T. ) ; +#9363 = VERTEX_POINT ( 'NONE', #4476 ) ; +#9364 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9365 = EDGE_CURVE ( 'NONE', #8170, #7996, #1219, .T. ) ; +#9366 = ORIENTED_EDGE ( 'NONE', *, *, #2380, .F. ) ; +#9367 = EDGE_CURVE ( 'NONE', #6010, #555, #11334, .T. ) ; +#9368 = ORIENTED_EDGE ( 'NONE', *, *, #12775, .T. ) ; +#9369 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9370 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#9371 = LINE ( 'NONE', #11752, #12957 ) ; +#9372 = VECTOR ( 'NONE', #11265, 1000.000000000000000 ) ; +#9373 = LINE ( 'NONE', #7361, #11815 ) ; +#9374 = ADVANCED_FACE ( 'NONE', ( #9994 ), #12111, .F. ) ; +#9375 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.3999999999999999700, 4.750000000000000000 ) ) ; +#9376 = ORIENTED_EDGE ( 'NONE', *, *, #15113, .T. ) ; +#9377 = ADVANCED_FACE ( 'NONE', ( #9809 ), #12058, .F. ) ; +#9378 = VERTEX_POINT ( 'NONE', #10745 ) ; +#9379 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 7.150000000000000400 ) ) ; +#9380 = ORIENTED_EDGE ( 'NONE', *, *, #1765, .T. ) ; +#9381 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999951700, 0.0000000000000000000, 5.050000000000002500 ) ) ; +#9382 = LINE ( 'NONE', #2352, #15079 ) ; +#9383 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999952400, 0.4000000000000000200, 4.150000000000001200 ) ) ; +#9384 = FACE_OUTER_BOUND ( 'NONE', #4119, .T. ) ; +#9385 = VECTOR ( 'NONE', #3408, 1000.000000000000000 ) ; +#9386 = EDGE_CURVE ( 'NONE', #10812, #6329, #6403, .T. ) ; +#9387 = VECTOR ( 'NONE', #2750, 1000.000000000000000 ) ; +#9388 = PLANE ( 'NONE', #9030 ) ; +#9389 = VECTOR ( 'NONE', #4611, 1000.000000000000000 ) ; +#9390 = VERTEX_POINT ( 'NONE', #4783 ) ; +#9391 = EDGE_LOOP ( 'NONE', ( #2070, #11587, #1955, #15656 ) ) ; +#9392 = ADVANCED_FACE ( 'NONE', ( #13030 ), #2262, .F. ) ; +#9393 = PLANE ( 'NONE', #3405 ) ; +#9394 = ORIENTED_EDGE ( 'NONE', *, *, #3030, .T. ) ; +#9395 = ORIENTED_EDGE ( 'NONE', *, *, #10349, .T. ) ; +#9396 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9397 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999992900, 0.8000000000000000400, 7.149999999999996800 ) ) ; +#9398 = FACE_OUTER_BOUND ( 'NONE', #1800, .T. ) ; +#9399 = FACE_OUTER_BOUND ( 'NONE', #8013, .T. ) ; +#9400 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000029100, 0.8000000000000000400, 0.5500000000000001600 ) ) ; +#9401 = PLANE ( 'NONE', #2274 ) ; +#9402 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9403 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9404 = PLANE ( 'NONE', #6963 ) ; +#9405 = VECTOR ( 'NONE', #10083, 1000.000000000000000 ) ; +#9406 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.0000000000000000000, 2.950000000000000200 ) ) ; +#9407 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9408 = VERTEX_POINT ( 'NONE', #8476 ) ; +#9409 = ORIENTED_EDGE ( 'NONE', *, *, #531, .T. ) ; +#9410 = EDGE_CURVE ( 'NONE', #12250, #14864, #8499, .T. ) ; +#9411 = CARTESIAN_POINT ( 'NONE', ( -7.706595997628984800, 3.317668071082943800, -2.810976310729378400 ) ) ; +#9412 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 8.050000000000000700 ) ) ; +#9413 = VECTOR ( 'NONE', #3506, 1000.000000000000000 ) ; +#9414 = FACE_OUTER_BOUND ( 'NONE', #2077, .T. ) ; +#9415 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#9416 = EDGE_CURVE ( 'NONE', #55, #15580, #9635, .T. ) ; +#9417 = VECTOR ( 'NONE', #13661, 1000.000000000000000 ) ; +#9418 = STYLED_ITEM ( 'NONE', ( #4045 ), #4354 ) ; +#9419 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000034500, 0.4000000000000000200, -0.9499999999999990700 ) ) ; +#9420 = ORIENTED_EDGE ( 'NONE', *, *, #8160, .T. ) ; +#9421 = VERTEX_POINT ( 'NONE', #14522 ) ; +#9422 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9423 = ORIENTED_EDGE ( 'NONE', *, *, #2764, .T. ) ; +#9424 = LINE ( 'NONE', #1735, #13798 ) ; +#9425 = ORIENTED_EDGE ( 'NONE', *, *, #7751, .T. ) ; +#9426 = VERTEX_POINT ( 'NONE', #3603 ) ; +#9427 = FILL_AREA_STYLE_COLOUR ( '', #9187 ) ; +#9428 = EDGE_CURVE ( 'NONE', #4669, #8545, #2755, .T. ) ; +#9429 = EDGE_CURVE ( 'NONE', #13781, #6194, #9263, .T. ) ; +#9430 = ORIENTED_EDGE ( 'NONE', *, *, #7523, .T. ) ; +#9431 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9432 = LINE ( 'NONE', #7801, #13993 ) ; +#9433 = ORIENTED_EDGE ( 'NONE', *, *, #10171, .T. ) ; +#9434 = ORIENTED_EDGE ( 'NONE', *, *, #2812, .T. ) ; +#9435 = AXIS2_PLACEMENT_3D ( 'NONE', #3824, #2368, #3770 ) ; +#9436 = PLANE ( 'NONE', #8542 ) ; +#9437 = ORIENTED_EDGE ( 'NONE', *, *, #6365, .T. ) ; +#9438 = VECTOR ( 'NONE', #6448, 1000.000000000000000 ) ; +#9439 = VERTEX_POINT ( 'NONE', #1155 ) ; +#9440 = AXIS2_PLACEMENT_3D ( 'NONE', #2381, #4848, #9703 ) ; +#9441 = VECTOR ( 'NONE', #13867, 1000.000000000000000 ) ; +#9442 = PRODUCT ( 'ESP32-C3-WROOM-02-H4', 'ESP32-C3-WROOM-02-H4', '', ( #9109 ) ) ; +#9443 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9444 = PLANE ( 'NONE', #12415 ) ; +#9445 = PLANE ( 'NONE', #10052 ) ; +#9446 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.097720492815728600E-016 ) ) ; +#9447 = EDGE_LOOP ( 'NONE', ( #9423, #10616, #5751, #9272 ) ) ; +#9448 = EDGE_CURVE ( 'NONE', #8330, #13269, #10582, .T. ) ; +#9449 = CARTESIAN_POINT ( 'NONE', ( -7.576077315359349000, 3.140440641471888400, -2.822667204855682200 ) ) ; +#9450 = PLANE ( 'NONE', #11817 ) ; +#9451 = ADVANCED_FACE ( 'NONE', ( #3714 ), #5099, .F. ) ; +#9452 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9453 = ORIENTED_EDGE ( 'NONE', *, *, #5948, .F. ) ; +#9454 = VECTOR ( 'NONE', #15120, 1000.000000000000000 ) ; +#9455 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 5.825000000000002000 ) ) ; +#9456 = ORIENTED_EDGE ( 'NONE', *, *, #7287, .F. ) ; +#9457 = LINE ( 'NONE', #15343, #6233 ) ; +#9458 = FACE_OUTER_BOUND ( 'NONE', #14638, .T. ) ; +#9459 = AXIS2_PLACEMENT_3D ( 'NONE', #5328, #10117, #12434 ) ; +#9460 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9461 = STYLED_ITEM ( 'NONE', ( #14741 ), #12318 ) ; +#9462 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, 9.550000000000000700 ) ) ; +#9463 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9464 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9465 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9466 = VECTOR ( 'NONE', #757, 1000.000000000000000 ) ; +#9467 = VERTEX_POINT ( 'NONE', #2691 ) ; +#9468 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12401 ), #12708 ) ; +#9469 = VECTOR ( 'NONE', #834, 1000.000000000000000 ) ; +#9470 = LINE ( 'NONE', #12977, #14410 ) ; +#9471 = EDGE_CURVE ( 'NONE', #7612, #9183, #12843, .T. ) ; +#9472 = ORIENTED_EDGE ( 'NONE', *, *, #10425, .F. ) ; +#9473 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 5.650000000000000400 ) ) ; +#9474 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9475 = EDGE_CURVE ( 'NONE', #11908, #11954, #7168, .T. ) ; +#9476 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9477 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.3999999999999999700, -1.850000000000000500 ) ) ; +#9478 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#9479 = VERTEX_POINT ( 'NONE', #244 ) ; +#9480 = VERTEX_POINT ( 'NONE', #3822 ) ; +#9481 = AXIS2_PLACEMENT_3D ( 'NONE', #2353, #6015, #4716 ) ; +#9482 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#9483 = CIRCLE ( 'NONE', #12832, 0.4999999999999995600 ) ; +#9484 = VECTOR ( 'NONE', #820, 1000.000000000000000 ) ; +#9485 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#9486 = ORIENTED_EDGE ( 'NONE', *, *, #8414, .F. ) ; +#9487 = EDGE_CURVE ( 'NONE', #13403, #5578, #3151, .T. ) ; +#9488 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9489 = VERTEX_POINT ( 'NONE', #7565 ) ; +#9490 = LINE ( 'NONE', #13081, #13669 ) ; +#9491 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#9492 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9493 = ORIENTED_EDGE ( 'NONE', *, *, #1785, .F. ) ; +#9494 = VERTEX_POINT ( 'NONE', #8784 ) ; +#9495 = ORIENTED_EDGE ( 'NONE', *, *, #15171, .F. ) ; +#9496 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 8.650000000000000400 ) ) ; +#9497 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9498 = VECTOR ( 'NONE', #3507, 1000.000000000000000 ) ; +#9499 = LINE ( 'NONE', #13149, #3014 ) ; +#9500 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#9501 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9502 = EDGE_CURVE ( 'NONE', #3241, #14204, #10384, .T. ) ; +#9503 = VERTEX_POINT ( 'NONE', #8641 ) ; +#9504 = CARTESIAN_POINT ( 'NONE', ( -7.639222690360981900, 3.102198665876327900, -2.841952621458756500 ) ) ; +#9505 = ORIENTED_EDGE ( 'NONE', *, *, #11340, .T. ) ; +#9506 = ORIENTED_EDGE ( 'NONE', *, *, #5035, .F. ) ; +#9507 = ORIENTED_EDGE ( 'NONE', *, *, #10948, .F. ) ; +#9508 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9509 = ORIENTED_EDGE ( 'NONE', *, *, #15645, .T. ) ; +#9510 = VERTEX_POINT ( 'NONE', #2625 ) ; +#9511 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000001200, 9.090000000000001600 ) ) ; +#9512 = ORIENTED_EDGE ( 'NONE', *, *, #4146, .F. ) ; +#9514 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, -1.850000000000000500 ) ) ; +#9513 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 9.550000000000000700 ) ) ; +#9515 = LINE ( 'NONE', #3085, #15211 ) ; +#9516 = VECTOR ( 'NONE', #11406, 1000.000000000000000 ) ; +#9517 = EDGE_CURVE ( 'NONE', #7264, #7367, #4096, .T. ) ; +#9518 = AXIS2_PLACEMENT_3D ( 'NONE', #5037, #7508, #3003 ) ; +#9519 = LINE ( 'NONE', #14801, #5908 ) ; +#9520 = ORIENTED_EDGE ( 'NONE', *, *, #14605, .F. ) ; +#9521 = ORIENTED_EDGE ( 'NONE', *, *, #2988, .F. ) ; +#9522 = EDGE_LOOP ( 'NONE', ( #9913, #15220, #9807, #2063 ) ) ; +#9523 = ORIENTED_EDGE ( 'NONE', *, *, #5109, .F. ) ; +#9524 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 4.874999999999999100 ) ) ; +#9525 = EDGE_CURVE ( 'NONE', #2013, #11357, #10772, .T. ) ; +#9526 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, -1.850000000000000500 ) ) ; +#9527 = ADVANCED_FACE ( 'NONE', ( #3516 ), #11218, .F. ) ; +#9528 = EDGE_LOOP ( 'NONE', ( #8461, #5632, #12981, #12605 ) ) ; +#9529 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9530 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9531 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.4000000000000000200, 5.650000000000000400 ) ) ; +#9532 = LINE ( 'NONE', #14541, #9736 ) ; +#9533 = VECTOR ( 'NONE', #7679, 1000.000000000000000 ) ; +#9534 = AXIS2_PLACEMENT_3D ( 'NONE', #2523, #296, #8842 ) ; +#9535 = CARTESIAN_POINT ( 'NONE', ( 7.607607578482642000, 3.132769666234338100, 9.025924342264477900 ) ) ; +#9536 = FACE_OUTER_BOUND ( 'NONE', #3752, .T. ) ; +#9537 = ORIENTED_EDGE ( 'NONE', *, *, #11537, .F. ) ; +#9538 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 5.050000000000000700 ) ) ; +#9539 = ORIENTED_EDGE ( 'NONE', *, *, #10993, .F. ) ; +#9540 = ADVANCED_FACE ( 'NONE', ( #13807 ), #6185, .T. ) ; +#9541 = EDGE_CURVE ( 'NONE', #3976, #9479, #1422, .T. ) ; +#9542 = VERTEX_POINT ( 'NONE', #6389 ) ; +#9543 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9544 = ORIENTED_EDGE ( 'NONE', *, *, #11375, .F. ) ; +#9545 = ORIENTED_EDGE ( 'NONE', *, *, #6575, .F. ) ; +#9546 = VECTOR ( 'NONE', #10041, 1000.000000000000000 ) ; +#9547 = VECTOR ( 'NONE', #7716, 1000.000000000000000 ) ; +#9548 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9549 = VECTOR ( 'NONE', #3964, 1000.000000000000000 ) ; +#9550 = PLANE ( 'NONE', #1423 ) ; +#9551 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9552 = AXIS2_PLACEMENT_3D ( 'NONE', #9963, #13632, #8924 ) ; +#9553 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9554 = ORIENTED_EDGE ( 'NONE', *, *, #8470, .F. ) ; +#9555 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9556 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#9557 = ORIENTED_EDGE ( 'NONE', *, *, #5400, .F. ) ; +#9558 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 6.550000000000001600 ) ) ; +#9559 = ORIENTED_EDGE ( 'NONE', *, *, #8616, .F. ) ; +#9560 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9561 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, -2.449999999999998800 ) ) ; +#9562 = SURFACE_STYLE_FILL_AREA ( #11102 ) ; +#9563 = FACE_OUTER_BOUND ( 'NONE', #10758, .T. ) ; +#9564 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.147979999999999600, -2.779999999999999400 ) ) ; +#9565 = FACE_OUTER_BOUND ( 'NONE', #9943, .T. ) ; +#9566 = LINE ( 'NONE', #14415, #12577 ) ; +#9567 = FACE_OUTER_BOUND ( 'NONE', #3412, .T. ) ; +#9568 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9569 = EDGE_CURVE ( 'NONE', #7684, #4330, #12080, .T. ) ; +#9570 = ADVANCED_FACE ( 'NONE', ( #5638 ), #5043, .F. ) ; +#9571 = VERTEX_POINT ( 'NONE', #12260 ) ; +#9572 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#9573 = EDGE_CURVE ( 'NONE', #6650, #12456, #15680, .T. ) ; +#9574 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000029100, 0.4000000000000000200, 0.5500000000000021500 ) ) ; +#9575 = EDGE_LOOP ( 'NONE', ( #14842, #10395, #14005, #13712, #13983, #3888 ) ) ; +#9576 = EDGE_CURVE ( 'NONE', #974, #2901, #1041, .T. ) ; +#9577 = EDGE_LOOP ( 'NONE', ( #13562, #2486, #11418, #7145 ) ) ; +#9578 = CARTESIAN_POINT ( 'NONE', ( -7.627408650308851200, 3.075703978347817300, -2.877979999999999100 ) ) ; +#9579 = FACE_OUTER_BOUND ( 'NONE', #3283, .T. ) ; +#9580 = LINE ( 'NONE', #8507, #7894 ) ; +#9581 = LINE ( 'NONE', #4905, #10914 ) ; +#9582 = SURFACE_SIDE_STYLE ('',( #2769 ) ) ; +#9583 = VECTOR ( 'NONE', #9560, 1000.000000000000000 ) ; +#9584 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9585 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000001200, 9.090000000000001600 ) ) ; +#9586 = VERTEX_POINT ( 'NONE', #7677 ) ; +#9587 = CARTESIAN_POINT ( 'NONE', ( 7.558640774202060300, 3.149999999999999900, 9.004605673451390400 ) ) ; +#9588 = ORIENTED_EDGE ( 'NONE', *, *, #13979, .F. ) ; +#9589 = EDGE_CURVE ( 'NONE', #3203, #7234, #5250, .T. ) ; +#9590 = FACE_OUTER_BOUND ( 'NONE', #14377, .T. ) ; +#9591 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#9592 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9593 = AXIS2_PLACEMENT_3D ( 'NONE', #1602, #10137, #329 ) ; +#9594 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999936400, 0.0000000000000000000, 3.550000000000001200 ) ) ; +#9595 = PRESENTATION_STYLE_ASSIGNMENT (( #10971 ) ) ; +#9596 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9597 = EDGE_CURVE ( 'NONE', #5371, #8180, #14009, .T. ) ; +#9598 = VERTEX_POINT ( 'NONE', #5416 ) ; +#9599 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #154 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13026, #11853, #13497 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9600 = VERTEX_POINT ( 'NONE', #2846 ) ; +#9601 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9602 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9603 = PLANE ( 'NONE', #2706 ) ; +#9604 = EDGE_LOOP ( 'NONE', ( #12324, #3904, #13757, #4387 ) ) ; +#9605 = ADVANCED_FACE ( 'NONE', ( #1601 ), #13826, .F. ) ; +#9606 = LINE ( 'NONE', #15403, #9241 ) ; +#9607 = ORIENTED_EDGE ( 'NONE', *, *, #1186, .F. ) ; +#9608 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, -1.850000000000000500 ) ) ; +#9609 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9610 = VERTEX_POINT ( 'NONE', #2954 ) ; +#9611 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9612 = VECTOR ( 'NONE', #14617, 1000.000000000000000 ) ; +#9613 = VECTOR ( 'NONE', #5640, 1000.000000000000000 ) ; +#9614 = EDGE_CURVE ( 'NONE', #11702, #2178, #91, .T. ) ; +#9615 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9616 = ORIENTED_EDGE ( 'NONE', *, *, #5610, .T. ) ; +#9617 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#9618 = ORIENTED_EDGE ( 'NONE', *, *, #13000, .F. ) ; +#9619 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 2.551063935260010500E-016 ) ) ; +#9621 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9620 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 1.325000000000001500 ) ) ; +#9622 = ADVANCED_FACE ( 'NONE', ( #13415 ), #15097, .T. ) ; +#9623 = ORIENTED_EDGE ( 'NONE', *, *, #11083, .T. ) ; +#9624 = EDGE_CURVE ( 'NONE', #148, #11214, #7547, .T. ) ; +#9625 = FACE_OUTER_BOUND ( 'NONE', #13334, .T. ) ; +#9626 = ORIENTED_EDGE ( 'NONE', *, *, #12594, .T. ) ; +#9627 = VERTEX_POINT ( 'NONE', #11420 ) ; +#9628 = STYLED_ITEM ( 'NONE', ( #1952 ), #6222 ) ; +#9629 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 1.637941840314110200, 1.850000000000000100 ) ) ; +#9630 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999988600, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#9631 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#9632 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000000300, -2.879999999999999400 ) ) ; +#9633 = ORIENTED_EDGE ( 'NONE', *, *, #1295, .F. ) ; +#9634 = VECTOR ( 'NONE', #7381, 1000.000000000000000 ) ; +#9635 = LINE ( 'NONE', #1256, #6027 ) ; +#9636 = ORIENTED_EDGE ( 'NONE', *, *, #6618, .T. ) ; +#9637 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6758, 'distance_accuracy_value', 'NONE'); +#9638 = EDGE_CURVE ( 'NONE', #1705, #5229, #10963, .T. ) ; +#9639 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9640 = EDGE_CURVE ( 'NONE', #6700, #9352, #13616, .T. ) ; +#9641 = ORIENTED_EDGE ( 'NONE', *, *, #8276, .F. ) ; +#9642 = VECTOR ( 'NONE', #10276, 1000.000000000000000 ) ; +#9643 = CARTESIAN_POINT ( 'NONE', ( 7.591593715659279000, 3.126879667662414000, 9.055261346167817700 ) ) ; +#9644 = ORIENTED_EDGE ( 'NONE', *, *, #8857, .T. ) ; +#9645 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000000400, 3.049999999999999800, 9.082928932188135500 ) ) ; +#9646 = VECTOR ( 'NONE', #3112, 1000.000000000000000 ) ; +#9647 = VECTOR ( 'NONE', #2970, 1000.000000000000000 ) ; +#9648 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, -0.3500000000000004800 ) ) ; +#9649 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 2.649999999999999500 ) ) ; +#9650 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#9651 = ADVANCED_FACE ( 'NONE', ( #665 ), #556, .T. ) ; +#9652 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2483 ), #12071 ) ; +#9653 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9654 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.690901012716607300E-015, 0.0000000000000000000 ) ) ; +#9655 = FACE_OUTER_BOUND ( 'NONE', #14723, .T. ) ; +#9656 = EDGE_LOOP ( 'NONE', ( #12551, #6394, #6069, #990 ) ) ; +#9657 = PLANE ( 'NONE', #905 ) ; +#9658 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#9659 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 9.550000000000000700 ) ) ; +#9660 = CYLINDRICAL_SURFACE ( 'NONE', #6059, 0.2749999999999991900 ) ; +#9661 = LINE ( 'NONE', #15677, #9285 ) ; +#9662 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9663 = EDGE_CURVE ( 'NONE', #1748, #9426, #3908, .T. ) ; +#9664 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9665 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9666 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9667 = EDGE_CURVE ( 'NONE', #1604, #13297, #1796, .T. ) ; +#9668 = FILL_AREA_STYLE ('',( #10835 ) ) ; +#9669 = FACE_BOUND ( 'NONE', #8477, .T. ) ; +#9670 = ORIENTED_EDGE ( 'NONE', *, *, #12872, .T. ) ; +#9671 = STYLED_ITEM ( 'NONE', ( #14382 ), #9330 ) ; +#9672 = PLANE ( 'NONE', #8844 ) ; +#9673 = FACE_OUTER_BOUND ( 'NONE', #1592, .T. ) ; +#9674 = VECTOR ( 'NONE', #1285, 1000.000000000000000 ) ; +#9675 = STYLED_ITEM ( 'NONE', ( #6141 ), #13506 ) ; +#9676 = PLANE ( 'NONE', #7708 ) ; +#9677 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.0000000000000000000, 2.949999999999999700 ) ) ; +#9678 = ORIENTED_EDGE ( 'NONE', *, *, #10906, .F. ) ; +#9679 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, 9.550000000000000700 ) ) ; +#9680 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #11311 ) ) ; +#9681 = ORIENTED_EDGE ( 'NONE', *, *, #9323, .T. ) ; +#9682 = LINE ( 'NONE', #15674, #8931 ) ; +#9683 = ORIENTED_EDGE ( 'NONE', *, *, #10832, .T. ) ; +#9684 = ORIENTED_EDGE ( 'NONE', *, *, #3188, .F. ) ; +#9685 = ORIENTED_EDGE ( 'NONE', *, *, #15509, .T. ) ; +#9686 = EDGE_CURVE ( 'NONE', #7971, #4172, #9980, .T. ) ; +#9687 = ADVANCED_FACE ( 'NONE', ( #3894 ), #6550, .F. ) ; +#9688 = VECTOR ( 'NONE', #3887, 1000.000000000000000 ) ; +#9689 = FACE_OUTER_BOUND ( 'NONE', #132, .T. ) ; +#9690 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9691 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#9692 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, -0.9499999999999990700 ) ) ; +#9693 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9694 = VERTEX_POINT ( 'NONE', #5211 ) ; +#9695 = ORIENTED_EDGE ( 'NONE', *, *, #7995, .F. ) ; +#9696 = ORIENTED_EDGE ( 'NONE', *, *, #14921, .T. ) ; +#9697 = DIRECTION ( 'NONE', ( -6.195440985631453300E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9698 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9699 = VECTOR ( 'NONE', #9089, 1000.000000000000000 ) ; +#9700 = ORIENTED_EDGE ( 'NONE', *, *, #7570, .F. ) ; +#9701 = ORIENTED_EDGE ( 'NONE', *, *, #9068, .T. ) ; +#9702 = ADVANCED_FACE ( 'NONE', ( #7154 ), #10093, .F. ) ; +#9703 = DIRECTION ( 'NONE', ( 5.478074134663595300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9704 = FACE_OUTER_BOUND ( 'NONE', #9522, .T. ) ; +#9705 = VECTOR ( 'NONE', #12193, 1000.000000000000000 ) ; +#9706 = ORIENTED_EDGE ( 'NONE', *, *, #10092, .T. ) ; +#9707 = EDGE_CURVE ( 'NONE', #2939, #8893, #4664, .T. ) ; +#9709 = ORIENTED_EDGE ( 'NONE', *, *, #8559, .F. ) ; +#9708 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.3999999999999999700, 2.050000000000001600 ) ) ; +#9710 = VERTEX_POINT ( 'NONE', #1669 ) ; +#9711 = ORIENTED_EDGE ( 'NONE', *, *, #5023, .T. ) ; +#9712 = VERTEX_POINT ( 'NONE', #5369 ) ; +#9713 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999995000, 0.0000000000000000000, 8.650000000000003900 ) ) ; +#9714 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#9715 = EDGE_CURVE ( 'NONE', #6858, #3704, #5428, .T. ) ; +#9716 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9717 = LINE ( 'NONE', #10977, #12361 ) ; +#9718 = STYLED_ITEM ( 'NONE', ( #3047 ), #4830 ) ; +#9719 = VECTOR ( 'NONE', #3626, 1000.000000000000000 ) ; +#9720 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#9721 = PLANE ( 'NONE', #5266 ) ; +#9722 = ORIENTED_EDGE ( 'NONE', *, *, #2242, .T. ) ; +#9723 = VERTEX_POINT ( 'NONE', #9264 ) ; +#9724 = ADVANCED_FACE ( 'NONE', ( #10756, #1026 ), #15667, .T. ) ; +#9725 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.350000000000000100, 8.990000000000002000 ) ) ; +#9726 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#9727 = ORIENTED_EDGE ( 'NONE', *, *, #13954, .T. ) ; +#9728 = ORIENTED_EDGE ( 'NONE', *, *, #2342, .T. ) ; +#9729 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#9730 = EDGE_CURVE ( 'NONE', #8309, #9332, #7925, .T. ) ; +#9731 = ORIENTED_EDGE ( 'NONE', *, *, #11149, .F. ) ; +#9732 = LINE ( 'NONE', #561, #11274 ) ; +#9733 = EDGE_CURVE ( 'NONE', #13912, #126, #5620, .T. ) ; +#9734 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#9735 = LINE ( 'NONE', #11280, #15601 ) ; +#9736 = VECTOR ( 'NONE', #7071, 1000.000000000000000 ) ; +#9737 = LINE ( 'NONE', #5370, #1331 ) ; +#9738 = ORIENTED_EDGE ( 'NONE', *, *, #12287, .T. ) ; +#9739 = ORIENTED_EDGE ( 'NONE', *, *, #15540, .T. ) ; +#9740 = AXIS2_PLACEMENT_3D ( 'NONE', #9018, #4261, #1804 ) ; +#9741 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9742 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#9743 = VERTEX_POINT ( 'NONE', #3072 ) ; +#9744 = CARTESIAN_POINT ( 'NONE', ( 7.636149413117881800, 3.061459556676525500, 9.090000000000001600 ) ) ; +#9745 = FACE_OUTER_BOUND ( 'NONE', #4512, .T. ) ; +#9746 = VECTOR ( 'NONE', #11865, 1000.000000000000000 ) ; +#9747 = FACE_OUTER_BOUND ( 'NONE', #1428, .T. ) ; +#9748 = FACE_OUTER_BOUND ( 'NONE', #3148, .T. ) ; +#9749 = LINE ( 'NONE', #4319, #1359 ) ; +#9750 = LINE ( 'NONE', #14451, #2875 ) ; +#9751 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 1.149999999999999900 ) ) ; +#9752 = SURFACE_STYLE_USAGE ( .BOTH. , #2224 ) ; +#9753 = VERTEX_POINT ( 'NONE', #9306 ) ; +#9754 = EDGE_CURVE ( 'NONE', #12727, #3480, #11135, .T. ) ; +#9755 = VERTEX_POINT ( 'NONE', #14203 ) ; +#9756 = ORIENTED_EDGE ( 'NONE', *, *, #10209, .T. ) ; +#9757 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#9758 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#9759 = VECTOR ( 'NONE', #8629, 1000.000000000000000 ) ; +#9760 = LINE ( 'NONE', #13745, #3660 ) ; +#9761 = CARTESIAN_POINT ( 'NONE', ( 7.585924342264479300, 3.132769666234337600, -2.837607578482642400 ) ) ; +#9762 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000004300, 0.4000000000000000200, 8.049999999999995400 ) ) ; +#9763 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, -0.9499999999999990700 ) ) ; +#9764 = FACE_OUTER_BOUND ( 'NONE', #15412, .T. ) ; +#9765 = ADVANCED_FACE ( 'NONE', ( #14367 ), #4303, .T. ) ; +#9766 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999999600, 0.4000000000000000200, 8.650000000000000400 ) ) ; +#9767 = VERTEX_POINT ( 'NONE', #769 ) ; +#9768 = ORIENTED_EDGE ( 'NONE', *, *, #9137, .F. ) ; +#9769 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#9770 = ORIENTED_EDGE ( 'NONE', *, *, #11353, .T. ) ; +#9771 = ORIENTED_EDGE ( 'NONE', *, *, #10800, .T. ) ; +#9772 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9773 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9774 = AXIS2_PLACEMENT_3D ( 'NONE', #13498, #1513, #10044 ) ; +#9775 = VECTOR ( 'NONE', #15107, 1000.000000000000000 ) ; +#9776 = LINE ( 'NONE', #10992, #12800 ) ; +#9777 = EDGE_CURVE ( 'NONE', #6706, #10091, #10369, .T. ) ; +#9778 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#9779 = ADVANCED_FACE ( 'NONE', ( #6206 ), #5586, .T. ) ; +#9780 = EDGE_CURVE ( 'NONE', #8136, #11184, #6385, .T. ) ; +#9781 = PLANE ( 'NONE', #13377 ) ; +#9782 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9783 = ORIENTED_EDGE ( 'NONE', *, *, #880, .F. ) ; +#9784 = EDGE_LOOP ( 'NONE', ( #972, #12890, #12372, #2313 ) ) ; +#9785 = VECTOR ( 'NONE', #2423, 1000.000000000000000 ) ; +#9786 = LINE ( 'NONE', #5962, #4468 ) ; +#9787 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, -3.350000000000000500 ) ) ; +#9788 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9789 = ADVANCED_FACE ( 'NONE', ( #6007 ), #618, .T. ) ; +#9790 = CARTESIAN_POINT ( 'NONE', ( 7.576077315359348100, 3.140440641471889700, 9.032667204855682600 ) ) ; +#9791 = LINE ( 'NONE', #15048, #11861 ) ; +#9792 = VECTOR ( 'NONE', #3583, 1000.000000000000000 ) ; +#9793 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#9794 = ORIENTED_EDGE ( 'NONE', *, *, #13289, .T. ) ; +#9795 = VERTEX_POINT ( 'NONE', #4414 ) ; +#9796 = EDGE_CURVE ( 'NONE', #3760, #15144, #7532, .T. ) ; +#9797 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999994700, 0.8000000000000000400, 7.325000000000002000 ) ) ; +#9798 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9799 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000020300, 0.4000000000000000200, 2.649999999999997700 ) ) ; +#9800 = ADVANCED_FACE ( 'NONE', ( #14179 ), #12888, .T. ) ; +#9801 = ORIENTED_EDGE ( 'NONE', *, *, #8926, .T. ) ; +#9802 = LINE ( 'NONE', #3079, #2159 ) ; +#9803 = ORIENTED_EDGE ( 'NONE', *, *, #8337, .T. ) ; +#9804 = ORIENTED_EDGE ( 'NONE', *, *, #5138, .F. ) ; +#9805 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#9806 = EDGE_CURVE ( 'NONE', #13015, #4924, #11506, .T. ) ; +#9807 = ORIENTED_EDGE ( 'NONE', *, *, #14825, .T. ) ; +#9808 = VECTOR ( 'NONE', #1586, 1000.000000000000000 ) ; +#9809 = FACE_OUTER_BOUND ( 'NONE', #4042, .T. ) ; +#9810 = MANIFOLD_SOLID_BREP ( 'Mirror1', #11545 ) ; +#9811 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#9812 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 15.10000000000000100 ) ) ; +#9813 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9814 = ORIENTED_EDGE ( 'NONE', *, *, #159, .F. ) ; +#9815 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000014900, 0.4000000000000000200, 5.049999999999997200 ) ) ; +#9816 = VERTEX_POINT ( 'NONE', #10416 ) ; +#9817 = CARTESIAN_POINT ( 'NONE', ( 0.6099999999999994300, 0.0000000000000000000, 2.949999999999999300 ) ) ; +#9818 = ORIENTED_EDGE ( 'NONE', *, *, #15213, .F. ) ; +#9819 = LINE ( 'NONE', #3881, #1231 ) ; +#9820 = VERTEX_POINT ( 'NONE', #15247 ) ; +#9821 = EDGE_CURVE ( 'NONE', #8669, #6578, #9062, .T. ) ; +#9822 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9823 = VECTOR ( 'NONE', #13815, 1000.000000000000000 ) ; +#9824 = VECTOR ( 'NONE', #3029, 1000.000000000000000 ) ; +#9825 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9826 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #8286, #7127, #10778, #2088, #13046, #8236 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 1.788112030672749000E-018, 0.0002388152348380245700, 0.0004776304696760473400 ), + .UNSPECIFIED. ) ; +#9827 = VERTEX_POINT ( 'NONE', #14249 ) ; +#9828 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.0000000000000000000, 1.850000000000000100 ) ) ; +#9829 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #11788, 'distance_accuracy_value', 'NONE'); +#9830 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, -2.899999999999999900 ) ) ; +#9831 = EDGE_CURVE ( 'NONE', #10439, #13121, #8485, .T. ) ; +#9832 = PLANE ( 'NONE', #2120 ) ; +#9833 = ORIENTED_EDGE ( 'NONE', *, *, #12198, .T. ) ; +#9834 = VECTOR ( 'NONE', #9127, 1000.000000000000000 ) ; +#9835 = ORIENTED_EDGE ( 'NONE', *, *, #9904, .T. ) ; +#9836 = VECTOR ( 'NONE', #5464, 1000.000000000000000 ) ; +#9837 = ADVANCED_FACE ( 'NONE', ( #14935 ), #980, .F. ) ; +#9838 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#9839 = EDGE_CURVE ( 'NONE', #9753, #11536, #8684, .T. ) ; +#9840 = CARTESIAN_POINT ( 'NONE', ( -7.852000000000001200, 3.050000000000000700, 9.082928932188135500 ) ) ; +#9841 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9843 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#9842 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000036600, 0.4000000000000000200, -0.9499999999999995100 ) ) ; +#9844 = ORIENTED_EDGE ( 'NONE', *, *, #9254, .F. ) ; +#9845 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000011900, 2.952974194200974700E-014, 9.082928932188135500 ) ) ; +#9846 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#9847 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999995000, 0.4000000000000000200, 9.550000000000004300 ) ) ; +#9848 = VECTOR ( 'NONE', #13267, 1000.000000000000000 ) ; +#9849 = VECTOR ( 'NONE', #9288, 1000.000000000000000 ) ; +#9850 = ADVANCED_FACE ( 'NONE', ( #1407 ), #13346, .F. ) ; +#9851 = ORIENTED_EDGE ( 'NONE', *, *, #11492, .T. ) ; +#9852 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9853 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#9854 = ORIENTED_EDGE ( 'NONE', *, *, #1450, .F. ) ; +#9855 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.0000000000000000000, 2.949999999999999700 ) ) ; +#9856 = ORIENTED_EDGE ( 'NONE', *, *, #5702, .F. ) ; +#9857 = PLANE ( 'NONE', #5789 ) ; +#9858 = CIRCLE ( 'NONE', #4921, 0.2749999999999991900 ) ; +#9859 = EDGE_CURVE ( 'NONE', #772, #6300, #11883, .T. ) ; +#9860 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.6999999999999999600, -5.150000000000001200 ) ) ; +#9861 = ADVANCED_FACE ( 'NONE', ( #11692 ), #1027, .F. ) ; +#9862 = CARTESIAN_POINT ( 'NONE', ( 7.611930011826951900, 3.206658047799210800, -3.047567445684513700 ) ) ; +#9863 = EDGE_CURVE ( 'NONE', #12839, #11800, #5231, .T. ) ; +#9864 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9865 = PLANE ( 'NONE', #7728 ) ; +#9866 = ORIENTED_EDGE ( 'NONE', *, *, #8051, .T. ) ; +#9867 = ORIENTED_EDGE ( 'NONE', *, *, #5062, .F. ) ; +#9868 = FACE_OUTER_BOUND ( 'NONE', #3860, .T. ) ; +#9869 = ORIENTED_EDGE ( 'NONE', *, *, #7490, .F. ) ; +#9870 = ADVANCED_FACE ( 'NONE', ( #14550 ), #8194, .T. ) ; +#9871 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#9872 = ORIENTED_EDGE ( 'NONE', *, *, #2293, .T. ) ; +#9873 = FACE_OUTER_BOUND ( 'NONE', #1510, .T. ) ; +#9874 = VECTOR ( 'NONE', #13087, 1000.000000000000000 ) ; +#9875 = CARTESIAN_POINT ( 'NONE', ( -7.585924342264480200, 3.132769666234338100, 9.047607578482644200 ) ) ; +#9876 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9877 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9878 = ORIENTED_EDGE ( 'NONE', *, *, #2138, .T. ) ; +#9879 = ORIENTED_EDGE ( 'NONE', *, *, #14068, .T. ) ; +#9880 = ORIENTED_EDGE ( 'NONE', *, *, #10029, .T. ) ; +#9881 = EDGE_CURVE ( 'NONE', #8000, #1689, #8294, .T. ) ; +#9882 = EDGE_LOOP ( 'NONE', ( #13299, #11381, #5153, #10099 ) ) ; +#9883 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9884 = ORIENTED_EDGE ( 'NONE', *, *, #3466, .T. ) ; +#9885 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9886 = ORIENTED_EDGE ( 'NONE', *, *, #6531, .F. ) ; +#9887 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999995000, 0.4000000000000000200, 8.650000000000003900 ) ) ; +#9888 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9889 = LINE ( 'NONE', #9847, #13693 ) ; +#9890 = SURFACE_STYLE_FILL_AREA ( #5195 ) ; +#9892 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.7000000000000009500, -6.900000000000000400 ) ) ; +#9891 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9893 = LINE ( 'NONE', #5018, #8765 ) ; +#9894 = EDGE_CURVE ( 'NONE', #13272, #8298, #11319, .T. ) ; +#9895 = AXIS2_PLACEMENT_3D ( 'NONE', #4586, #14318, #3392 ) ; +#9896 = ORIENTED_EDGE ( 'NONE', *, *, #1035, .T. ) ; +#9897 = ORIENTED_EDGE ( 'NONE', *, *, #12290, .T. ) ; +#9898 = VERTEX_POINT ( 'NONE', #2449 ) ; +#9899 = EDGE_LOOP ( 'NONE', ( #12122, #15369, #12816, #6318 ) ) ; +#9900 = ORIENTED_EDGE ( 'NONE', *, *, #5146, .T. ) ; +#9901 = FACE_OUTER_BOUND ( 'NONE', #4208, .T. ) ; +#9902 = LINE ( 'NONE', #10157, #11433 ) ; +#9903 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 2.050000000000001600 ) ) ; +#9904 = EDGE_CURVE ( 'NONE', #7476, #11467, #13401, .T. ) ; +#9905 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#9906 = CIRCLE ( 'NONE', #8895, 0.2749999999999991900 ) ; +#9907 = CARTESIAN_POINT ( 'NONE', ( -9.449999999999999300, 0.8000000000000000400, 8.650000000000000400 ) ) ; +#9908 = ORIENTED_EDGE ( 'NONE', *, *, #12064, .T. ) ; +#9909 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#9910 = ADVANCED_FACE ( 'NONE', ( #1206 ), #1286, .F. ) ; +#9911 = VERTEX_POINT ( 'NONE', #5742 ) ; +#9912 = DIRECTION ( 'NONE', ( 1.548860246407863300E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9913 = ORIENTED_EDGE ( 'NONE', *, *, #12315, .T. ) ; +#9914 = EDGE_CURVE ( 'NONE', #7269, #11743, #3308, .T. ) ; +#9915 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9916 = EDGE_LOOP ( 'NONE', ( #4710, #14387, #4787, #14082 ) ) ; +#9917 = ORIENTED_EDGE ( 'NONE', *, *, #2174, .T. ) ; +#9918 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9919 = FACE_OUTER_BOUND ( 'NONE', #12156, .T. ) ; +#9920 = VECTOR ( 'NONE', #15031, 1000.000000000000000 ) ; +#9921 = FACE_OUTER_BOUND ( 'NONE', #13622, .T. ) ; +#9922 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9923 = VECTOR ( 'NONE', #5143, 1000.000000000000000 ) ; +#9924 = ORIENTED_EDGE ( 'NONE', *, *, #13317, .F. ) ; +#9925 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#9926 = ADVANCED_FACE ( 'NONE', ( #439 ), #4871, .T. ) ; +#9927 = ORIENTED_EDGE ( 'NONE', *, *, #3761, .T. ) ; +#9928 = EDGE_CURVE ( 'NONE', #12456, #13091, #6959, .T. ) ; +#9929 = EDGE_CURVE ( 'NONE', #2506, #14655, #3697, .T. ) ; +#9930 = EDGE_LOOP ( 'NONE', ( #7627, #13792, #11049, #8959, #9395, #11575 ) ) ; +#9931 = CARTESIAN_POINT ( 'NONE', ( 7.580976310729377900, 3.139222690360979700, -2.832198665876328300 ) ) ; +#9932 = VECTOR ( 'NONE', #12394, 1000.000000000000000 ) ; +#9933 = VECTOR ( 'NONE', #4228, 1000.000000000000000 ) ; +#9934 = LINE ( 'NONE', #9679, #8055 ) ; +#9935 = LINE ( 'NONE', #14911, #13344 ) ; +#9936 = LINE ( 'NONE', #12950, #1541 ) ; +#9937 = AXIS2_PLACEMENT_3D ( 'NONE', #11990, #8297, #8404 ) ; +#9938 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9939 = ORIENTED_EDGE ( 'NONE', *, *, #14498, .F. ) ; +#9940 = EDGE_LOOP ( 'NONE', ( #9711, #5162, #452, #15058, #5804, #13992, #10129, #6484, #15604, #5187, #12254, #9833, #7070, #8441, #15228, #10563, #1858, #8395, #15655, #10022, #3883, #8237, #14445, #4659, #8518, #13258, #8739, #2638, #3080, #2216, #3139, #12075, #4066, #4742, #12967, #4757, #14687, #12493, #8348, #15043, #853, #5869, #8870, #4417, #9512, #6884, #7509, #1789, #13013, #11350, #5338, #8687, #11558, #4547, #3840, #9559, #13201, #12516, #3814, #10763, #3977, #10550, #1394, #6512, #9804, #6560, #11796, #9866, #5917, #8612, #12729, #3670, #6285, #2259, #5125, #14155 ) ) ; +#9941 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#9942 = ADVANCED_FACE ( 'NONE', ( #10173 ), #8620, .T. ) ; +#9943 = EDGE_LOOP ( 'NONE', ( #14951, #5341, #13034, #11724 ) ) ; +#9944 = AXIS2_PLACEMENT_3D ( 'NONE', #3045, #1598, #6692 ) ; +#9946 = SURFACE_STYLE_USAGE ( .BOTH. , #5107 ) ; +#9945 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9947 = EDGE_LOOP ( 'NONE', ( #1304, #8962, #11130, #1306 ) ) ; +#9948 = CYLINDRICAL_SURFACE ( 'NONE', #4436, 0.09999999999999896500 ) ; +#9949 = PLANE ( 'NONE', #8523 ) ; +#9950 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9951 = EDGE_CURVE ( 'NONE', #9480, #1751, #4076, .T. ) ; +#9952 = VECTOR ( 'NONE', #12632, 1000.000000000000000 ) ; +#9953 = VERTEX_POINT ( 'NONE', #7232 ) ; +#9954 = EDGE_CURVE ( 'NONE', #6999, #13912, #995, .T. ) ; +#9955 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#9956 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000016000, 0.8000000000000000400, 4.149999999999999500 ) ) ; +#9957 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9671 ), #8350 ) ; +#9958 = FACE_OUTER_BOUND ( 'NONE', #10321, .T. ) ; +#9959 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.4000000000000000200, 1.849999999999999900 ) ) ; +#9960 = VECTOR ( 'NONE', #6644, 1000.000000000000000 ) ; +#9961 = AXIS2_PLACEMENT_3D ( 'NONE', #9415, #5849, #4570 ) ; +#9962 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.0000000000000000000, 2.949999999999999700 ) ) ; +#9963 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000031300, 0.4000000000000000200, 0.5500000000000001600 ) ) ; +#9964 = FACE_OUTER_BOUND ( 'NONE', #3463, .T. ) ; +#9965 = ORIENTED_EDGE ( 'NONE', *, *, #8975, .T. ) ; +#9966 = ORIENTED_EDGE ( 'NONE', *, *, #7231, .F. ) ; +#9967 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #327 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7248, #14457, #15654 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#9968 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#9969 = EDGE_CURVE ( 'NONE', #15487, #1994, #32, .T. ) ; +#9970 = ORIENTED_EDGE ( 'NONE', *, *, #10119, .T. ) ; +#9971 = LINE ( 'NONE', #6434, #12061 ) ; +#9972 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#9973 = EDGE_CURVE ( 'NONE', #10825, #8577, #12579, .T. ) ; +#9974 = ORIENTED_EDGE ( 'NONE', *, *, #14472, .F. ) ; +#9975 = CARTESIAN_POINT ( 'NONE', ( -7.570415567924385400, 3.144106227756287900, 9.023823333624610800 ) ) ; +#9976 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9977 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#9978 = ORIENTED_EDGE ( 'NONE', *, *, #3134, .T. ) ; +#9979 = LINE ( 'NONE', #15216, #11882 ) ; +#9980 = LINE ( 'NONE', #12684, #8105 ) ; +#9981 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9982 = ORIENTED_EDGE ( 'NONE', *, *, #2503, .T. ) ; +#9983 = ADVANCED_FACE ( 'NONE', ( #2872 ), #11047, .F. ) ; +#9984 = PLANE ( 'NONE', #11732 ) ; +#9985 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000000400, 3.076234407614293300, 9.067408552845520800 ) ) ; +#9986 = ORIENTED_EDGE ( 'NONE', *, *, #9362, .T. ) ; +#9987 = FACE_OUTER_BOUND ( 'NONE', #12762, .T. ) ; +#9988 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#9989 = EDGE_LOOP ( 'NONE', ( #8312, #4681, #6298, #4014 ) ) ; +#9991 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#9990 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.149999999999999500, -2.779999999999999400 ) ) ; +#9992 = ORIENTED_EDGE ( 'NONE', *, *, #367, .F. ) ; +#9993 = LINE ( 'NONE', #7640, #3515 ) ; +#9994 = FACE_OUTER_BOUND ( 'NONE', #9259, .T. ) ; +#9995 = EDGE_CURVE ( 'NONE', #3192, #7402, #13471, .T. ) ; +#9996 = MANIFOLD_SOLID_BREP ( 'LPattern1[16]', #11763 ) ; +#9997 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.690901012716604900E-015, 0.0000000000000000000 ) ) ; +#9998 = DIRECTION ( 'NONE', ( -3.491481338843133700E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#9999 = ORIENTED_EDGE ( 'NONE', *, *, #6618, .F. ) ; +#10000 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10001 = ORIENTED_EDGE ( 'NONE', *, *, #323, .F. ) ; +#10002 = ADVANCED_FACE ( 'NONE', ( #8158 ), #12362, .T. ) ; +#10003 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, -3.174999999999998900 ) ) ; +#10004 = ORIENTED_EDGE ( 'NONE', *, *, #6887, .T. ) ; +#10005 = EDGE_CURVE ( 'NONE', #10470, #10622, #15257, .T. ) ; +#10006 = VECTOR ( 'NONE', #9184, 1000.000000000000000 ) ; +#10007 = ORIENTED_EDGE ( 'NONE', *, *, #5017, .F. ) ; +#10008 = AXIS2_PLACEMENT_3D ( 'NONE', #7889, #2949, #3064 ) ; +#10009 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.690901012716605700E-015, 2.683779753520849100E-032 ) ) ; +#10010 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#10011 = LINE ( 'NONE', #9151, #8148 ) ; +#10012 = LINE ( 'NONE', #2811, #8149 ) ; +#10013 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, -0.0000000000000000000, -3.350000000000000500 ) ) ; +#10014 = DIRECTION ( 'NONE', ( 3.857805506003896100E-031, -1.000000000000000000, 3.491481338843133400E-015 ) ) ; +#10015 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 2.050000000000001600 ) ) ; +#10016 = ADVANCED_FACE ( 'NONE', ( #6523 ), #13585, .T. ) ; +#10017 = PLANE ( 'NONE', #11479 ) ; +#10018 = EDGE_CURVE ( 'NONE', #11620, #5925, #4762, .T. ) ; +#10019 = EDGE_CURVE ( 'NONE', #5237, #7269, #3659, .T. ) ; +#10020 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10021 = VECTOR ( 'NONE', #11191, 1000.000000000000000 ) ; +#10022 = ORIENTED_EDGE ( 'NONE', *, *, #9075, .T. ) ; +#10023 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10024 = FACE_OUTER_BOUND ( 'NONE', #5716, .T. ) ; +#10025 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #1245, #4934, #133, #2311, #15700, #1146, #10907, #9875, #6432, #9975, #14823, #14930, #7557 ), + .UNSPECIFIED., .F., .F., + ( 4, 3, 3, 3, 4 ), + ( 4.336808689942017300E-019, 5.091068730646496800E-005, 9.613048157375399500E-005, 0.0001413399754770157200, 0.0001810054085857345600 ), + .UNSPECIFIED. ) ; +#10026 = FACE_OUTER_BOUND ( 'NONE', #10068, .T. ) ; +#10027 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10028 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000004300, 0.8000000000000000400, 7.150000000000000400 ) ) ; +#10029 = EDGE_CURVE ( 'NONE', #5944, #342, #12903, .T. ) ; +#10030 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, 5.050000000000000700 ) ) ; +#10031 = AXIS2_PLACEMENT_3D ( 'NONE', #14780, #13397, #9690 ) ; +#10032 = STYLED_ITEM ( 'NONE', ( #13446 ), #9996 ) ; +#10033 = ORIENTED_EDGE ( 'NONE', *, *, #2974, .F. ) ; +#10034 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, -2.449999999999998800 ) ) ; +#10035 = VECTOR ( 'NONE', #14493, 1000.000000000000000 ) ; +#10036 = ORIENTED_EDGE ( 'NONE', *, *, #1330, .T. ) ; +#10037 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10038 = VECTOR ( 'NONE', #5323, 1000.000000000000000 ) ; +#10039 = LINE ( 'NONE', #9561, #7211 ) ; +#10040 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, -3.350000000000000500 ) ) ; +#10041 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10042 = EDGE_CURVE ( 'NONE', #7255, #504, #11397, .T. ) ; +#10043 = ORIENTED_EDGE ( 'NONE', *, *, #7591, .F. ) ; +#10044 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.097720492815728200E-016 ) ) ; +#10045 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#10046 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 7.875000000000000000 ) ) ; +#10047 = ORIENTED_EDGE ( 'NONE', *, *, #11672, .T. ) ; +#10048 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10049 = VECTOR ( 'NONE', #3108, 1000.000000000000000 ) ; +#10050 = EDGE_LOOP ( 'NONE', ( #12350, #8349, #14685, #1730, #13101, #5132 ) ) ; +#10051 = ORIENTED_EDGE ( 'NONE', *, *, #1013, .F. ) ; +#10052 = AXIS2_PLACEMENT_3D ( 'NONE', #15525, #9348, #6967 ) ; +#10053 = ORIENTED_EDGE ( 'NONE', *, *, #14227, .F. ) ; +#10054 = FACE_OUTER_BOUND ( 'NONE', #11679, .T. ) ; +#10055 = VECTOR ( 'NONE', #4194, 1000.000000000000000 ) ; +#10056 = DIRECTION ( 'NONE', ( 1.991647080244473300E-031, -6.123233995736767300E-017, -1.000000000000000000 ) ) ; +#10057 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10058 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10059 = ORIENTED_EDGE ( 'NONE', *, *, #9019, .T. ) ; +#10060 = ORIENTED_EDGE ( 'NONE', *, *, #8488, .F. ) ; +#10061 = AXIS2_PLACEMENT_3D ( 'NONE', #5729, #15289, #12833 ) ; +#10062 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10063 = VERTEX_POINT ( 'NONE', #2560 ) ; +#10064 = ADVANCED_FACE ( 'NONE', ( #7238 ), #725, .F. ) ; +#10065 = LINE ( 'NONE', #8826, #5129 ) ; +#10066 = ORIENTED_EDGE ( 'NONE', *, *, #3180, .F. ) ; +#10067 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10068 = EDGE_LOOP ( 'NONE', ( #5904, #4189, #10413, #1336 ) ) ; +#10069 = EDGE_CURVE ( 'NONE', #4609, #13673, #2627, .T. ) ; +#10070 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10071 = EDGE_CURVE ( 'NONE', #14135, #6383, #4740, .T. ) ; +#10072 = LINE ( 'NONE', #5240, #3403 ) ; +#10073 = LINE ( 'NONE', #13313, #175 ) ; +#10074 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999968400, 0.4000000000000000200, 5.649999999999999500 ) ) ; +#10075 = ORIENTED_EDGE ( 'NONE', *, *, #1079, .F. ) ; +#10076 = EDGE_LOOP ( 'NONE', ( #1656, #10004, #13698, #15515 ) ) ; +#10077 = EDGE_LOOP ( 'NONE', ( #270, #4051, #8076, #2261 ) ) ; +#10078 = AXIS2_PLACEMENT_3D ( 'NONE', #4682, #10693, #5003 ) ; +#10079 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10080 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#10081 = ADVANCED_FACE ( 'NONE', ( #15208 ), #1440, .F. ) ; +#10082 = EDGE_LOOP ( 'NONE', ( #2610, #1069, #9539, #1658, #11253, #9308 ) ) ; +#10083 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -5.102127870520021000E-016 ) ) ; +#10084 = ORIENTED_EDGE ( 'NONE', *, *, #8975, .F. ) ; +#10085 = PLANE ( 'NONE', #1288 ) ; +#10086 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#10087 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#10088 = FACE_OUTER_BOUND ( 'NONE', #9060, .T. ) ; +#10089 = SURFACE_STYLE_FILL_AREA ( #1433 ) ; +#10090 = DIRECTION ( 'NONE', ( -5.478074134663595300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10091 = VERTEX_POINT ( 'NONE', #6265 ) ; +#10092 = EDGE_CURVE ( 'NONE', #7363, #11407, #2425, .T. ) ; +#10093 = PLANE ( 'NONE', #6487 ) ; +#10094 = VERTEX_POINT ( 'NONE', #232 ) ; +#10095 = AXIS2_PLACEMENT_3D ( 'NONE', #14122, #12976, #13078 ) ; +#10096 = SURFACE_SIDE_STYLE ('',( #8980 ) ) ; +#10097 = SURFACE_STYLE_USAGE ( .BOTH. , #3927 ) ; +#10098 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 2.952720810173285400E-015 ) ) ; +#10099 = ORIENTED_EDGE ( 'NONE', *, *, #4108, .F. ) ; +#10100 = ADVANCED_FACE ( 'NONE', ( #1481 ), #2667, .F. ) ; +#10101 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 1.637941840314110200, 1.849999999999999900 ) ) ; +#10102 = ORIENTED_EDGE ( 'NONE', *, *, #9831, .T. ) ; +#10103 = FACE_OUTER_BOUND ( 'NONE', #8209, .T. ) ; +#10105 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, 2.050000000000001600 ) ) ; +#10104 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10106 = EDGE_CURVE ( 'NONE', #3976, #8287, #8755, .T. ) ; +#10107 = VERTEX_POINT ( 'NONE', #4135 ) ; +#10108 = LINE ( 'NONE', #4347, #6129 ) ; +#10109 = VECTOR ( 'NONE', #12847, 1000.000000000000000 ) ; +#10110 = LINE ( 'NONE', #13083, #8982 ) ; +#10111 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#10112 = FILL_AREA_STYLE ('',( #13668 ) ) ; +#10113 = ORIENTED_EDGE ( 'NONE', *, *, #1595, .F. ) ; +#10114 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #9720, 'distance_accuracy_value', 'NONE'); +#10115 = ORIENTED_EDGE ( 'NONE', *, *, #6616, .F. ) ; +#10116 = VERTEX_POINT ( 'NONE', #6370 ) ; +#10117 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#10118 = PLANE ( 'NONE', #9740 ) ; +#10119 = EDGE_CURVE ( 'NONE', #5941, #9298, #14446, .T. ) ; +#10120 = LINE ( 'NONE', #6263, #15256 ) ; +#10121 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 1.600000000000000800 ) ) ; +#10122 = FACE_OUTER_BOUND ( 'NONE', #10077, .T. ) ; +#10123 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15503 ) ) ; +#10124 = LINE ( 'NONE', #942, #6906 ) ; +#10125 = VECTOR ( 'NONE', #3177, 1000.000000000000000 ) ; +#10126 = LINE ( 'NONE', #1639, #8437 ) ; +#10127 = LINE ( 'NONE', #2912, #9204 ) ; +#10128 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#10129 = ORIENTED_EDGE ( 'NONE', *, *, #9170, .F. ) ; +#10130 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.3999999999999999700, 2.949999999999999700 ) ) ; +#10131 = EDGE_CURVE ( 'NONE', #8577, #3569, #9320, .T. ) ; +#10132 = ORIENTED_EDGE ( 'NONE', *, *, #14658, .F. ) ; +#10133 = VERTEX_POINT ( 'NONE', #3805 ) ; +#10134 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999995000, 0.0000000000000000000, 8.650000000000003900 ) ) ; +#10135 = DIRECTION ( 'NONE', ( 1.104919411450195700E-016, 2.952720810173285400E-015, 1.000000000000000000 ) ) ; +#10136 = LINE ( 'NONE', #82, #7307 ) ; +#10137 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10138 = VECTOR ( 'NONE', #7487, 1000.000000000000000 ) ; +#10139 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #12280, #8749, #1222, #14695, #14749, #7483, #162, #9761, #4909, #14635, #9021, #6569, #1536 ), + .UNSPECIFIED., .F., .F., + ( 4, 3, 3, 3, 4 ), + ( 4.336808689942017700E-019, 5.091068730646493400E-005, 9.613048157375408900E-005, 0.0001413399754770175300, 0.0001810054085857317400 ), + .UNSPECIFIED. ) ; +#10140 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10141 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10142 = LINE ( 'NONE', #7516, #8640 ) ; +#10143 = VECTOR ( 'NONE', #5411, 1000.000000000000000 ) ; +#10144 = ORIENTED_EDGE ( 'NONE', *, *, #13852, .T. ) ; +#10145 = CLOSED_SHELL ( 'NONE', ( #13438, #8663, #12540, #3054, #3703, #9299, #3689, #12859, #8691, #9570 ) ) ; +#10146 = EDGE_CURVE ( 'NONE', #9408, #5711, #10065, .T. ) ; +#10147 = PLANE ( 'NONE', #5272 ) ; +#10148 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10149 = ORIENTED_EDGE ( 'NONE', *, *, #8162, .T. ) ; +#10150 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, -2.449999999999997500 ) ) ; +#10151 = ORIENTED_EDGE ( 'NONE', *, *, #13874, .T. ) ; +#10152 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000009600, 0.4000000000000000200, 6.550000000000000700 ) ) ; +#10153 = LINE ( 'NONE', #6451, #7700 ) ; +#10154 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#10155 = LINE ( 'NONE', #8065, #2853 ) ; +#10156 = AXIS2_PLACEMENT_3D ( 'NONE', #1673, #11574, #15100 ) ; +#10157 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#10158 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999984000, 0.8000000000000000400, 4.325000000000001100 ) ) ; +#10159 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10160 = VECTOR ( 'NONE', #3965, 1000.000000000000000 ) ; +#10161 = PLANE ( 'NONE', #1603 ) ; +#10162 = ORIENTED_EDGE ( 'NONE', *, *, #668, .T. ) ; +#10163 = VERTEX_POINT ( 'NONE', #11105 ) ; +#10164 = ORIENTED_EDGE ( 'NONE', *, *, #6590, .F. ) ; +#10165 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10166 = ADVANCED_FACE ( 'NONE', ( #11219 ), #13859, .F. ) ; +#10167 = VECTOR ( 'NONE', #7346, 1000.000000000000000 ) ; +#10168 = EDGE_CURVE ( 'NONE', #5583, #3996, #10839, .T. ) ; +#10169 = PLANE ( 'NONE', #3949 ) ; +#10170 = ADVANCED_FACE ( 'NONE', ( #11766 ), #7872, .T. ) ; +#10171 = EDGE_CURVE ( 'NONE', #10356, #27, #4374, .T. ) ; +#10172 = FACE_OUTER_BOUND ( 'NONE', #3207, .T. ) ; +#10173 = FACE_OUTER_BOUND ( 'NONE', #431, .T. ) ; +#10174 = CARTESIAN_POINT ( 'NONE', ( -7.849999999999999600, 3.050000000000000700, -2.872928932188135100 ) ) ; +#10175 = DIRECTION ( 'NONE', ( 6.100126508929432000E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10176 = ORIENTED_EDGE ( 'NONE', *, *, #1036, .T. ) ; +#10177 = ORIENTED_EDGE ( 'NONE', *, *, #2614, .F. ) ; +#10178 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000004100, 0.7000000000000009500, -4.000000000000000000 ) ) ; +#10179 = PLANE ( 'NONE', #4523 ) ; +#10180 = ORIENTED_EDGE ( 'NONE', *, *, #134, .F. ) ; +#10181 = VECTOR ( 'NONE', #15153, 1000.000000000000000 ) ; +#10182 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10183 = ORIENTED_EDGE ( 'NONE', *, *, #5655, .T. ) ; +#10184 = ORIENTED_EDGE ( 'NONE', *, *, #6663, .T. ) ; +#10185 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10186 = VERTEX_POINT ( 'NONE', #11405 ) ; +#10187 = LINE ( 'NONE', #15066, #4855 ) ; +#10188 = ORIENTED_EDGE ( 'NONE', *, *, #10739, .F. ) ; +#10189 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000237500, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#10190 = EDGE_CURVE ( 'NONE', #14458, #7971, #8946, .T. ) ; +#10191 = ORIENTED_EDGE ( 'NONE', *, *, #15020, .F. ) ; +#10192 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10193 = DIRECTION ( 'NONE', ( -1.000000000000000000, 4.336808689942006700E-015, 0.0000000000000000000 ) ) ; +#10194 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 9.550000000000000700 ) ) ; +#10195 = ORIENTED_EDGE ( 'NONE', *, *, #11541, .F. ) ; +#10196 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.8000000000000000400, -5.150000000000001200 ) ) ; +#10197 = ORIENTED_EDGE ( 'NONE', *, *, #7226, .T. ) ; +#10198 = CARTESIAN_POINT ( 'NONE', ( 7.564605673451389100, 3.149999999999999500, -2.788640774202062900 ) ) ; +#10199 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10200 = LINE ( 'NONE', #5783, #2768 ) ; +#10201 = LINE ( 'NONE', #11439, #14966 ) ; +#10202 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#10203 = ORIENTED_EDGE ( 'NONE', *, *, #8442, .F. ) ; +#10204 = PLANE ( 'NONE', #11598 ) ; +#10205 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 1.875000000000000000 ) ) ; +#10206 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 2.812907259427848200E-014, 9.290000000000009800 ) ) ; +#10207 = EDGE_LOOP ( 'NONE', ( #13315, #12915, #9261, #10466 ) ) ; +#10208 = ORIENTED_EDGE ( 'NONE', *, *, #5989, .T. ) ; +#10209 = EDGE_CURVE ( 'NONE', #8142, #6822, #1107, .T. ) ; +#10210 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10211 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000028400, 0.8000000000000000400, 0.5500000000000001600 ) ) ; +#10212 = LINE ( 'NONE', #9208, #8711 ) ; +#10213 = LINE ( 'NONE', #7635, #4690 ) ; +#10214 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10215 = EDGE_CURVE ( 'NONE', #4090, #10465, #8181, .T. ) ; +#10216 = AXIS2_PLACEMENT_3D ( 'NONE', #14497, #3635, #13155 ) ; +#10217 = SURFACE_STYLE_USAGE ( .BOTH. , #1694 ) ; +#10218 = LINE ( 'NONE', #15090, #9104 ) ; +#10219 = PLANE ( 'NONE', #7170 ) ; +#10220 = ORIENTED_EDGE ( 'NONE', *, *, #7376, .F. ) ; +#10221 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#10222 = ADVANCED_FACE ( 'NONE', ( #5512 ), #5347, .T. ) ; +#10223 = LINE ( 'NONE', #10320, #14424 ) ; +#10224 = LINE ( 'NONE', #13206, #502 ) ; +#10225 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 2.551063935260010500E-016 ) ) ; +#10226 = ORIENTED_EDGE ( 'NONE', *, *, #10071, .F. ) ; +#10227 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 10.60000000000000000 ) ) ; +#10228 = EDGE_CURVE ( 'NONE', #5946, #8575, #345, .T. ) ; +#10229 = EDGE_CURVE ( 'NONE', #2914, #13001, #8563, .T. ) ; +#10230 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10231 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 1.149999999999999900 ) ) ; +#10232 = ORIENTED_EDGE ( 'NONE', *, *, #10304, .F. ) ; +#10233 = LINE ( 'NONE', #11212, #4711 ) ; +#10234 = VERTEX_POINT ( 'NONE', #11355 ) ; +#10235 = ADVANCED_FACE ( 'NONE', ( #6854 ), #4062, .F. ) ; +#10236 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 4.149999999999999500 ) ) ; +#10237 = FACE_OUTER_BOUND ( 'NONE', #12715, .T. ) ; +#10238 = LINE ( 'NONE', #10524, #8734 ) ; +#10239 = PLANE ( 'NONE', #13848 ) ; +#10240 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#10241 = ORIENTED_EDGE ( 'NONE', *, *, #12966, .F. ) ; +#10242 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#10243 = ADVANCED_FACE ( 'NONE', ( #14831 ), #11554, .T. ) ; +#10244 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, -0.9499999999999990700 ) ) ; +#10245 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000023800, 0.8000000000000000400, 2.050000000000001600 ) ) ; +#10246 = CARTESIAN_POINT ( 'NONE', ( -7.624016485703917200, 3.117242544895639300, 9.039300014952719000 ) ) ; +#10247 = VERTEX_POINT ( 'NONE', #11457 ) ; +#10248 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10249 = FACE_OUTER_BOUND ( 'NONE', #10050, .T. ) ; +#10250 = ORIENTED_EDGE ( 'NONE', *, *, #14426, .T. ) ; +#10251 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.4000000000000000200, 1.850000000000000100 ) ) ; +#10252 = ORIENTED_EDGE ( 'NONE', *, *, #4030, .F. ) ; +#10253 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 9.550000000000000700 ) ) ; +#10254 = EDGE_CURVE ( 'NONE', #8635, #12848, #10453, .T. ) ; +#10255 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10256 = LINE ( 'NONE', #14286, #2240 ) ; +#10257 = CARTESIAN_POINT ( 'NONE', ( -7.627408650308851200, 3.075703978347818600, 9.087979999999999900 ) ) ; +#10258 = PLANE ( 'NONE', #2099 ) ; +#10259 = EDGE_LOOP ( 'NONE', ( #8823, #7791, #5806, #14817, #13885, #3853 ) ) ; +#10260 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10261 = VERTEX_POINT ( 'NONE', #1924 ) ; +#10262 = ORIENTED_EDGE ( 'NONE', *, *, #10679, .T. ) ; +#10263 = AXIS2_PLACEMENT_3D ( 'NONE', #10003, #12385, #14849 ) ; +#10264 = ORIENTED_EDGE ( 'NONE', *, *, #7349, .F. ) ; +#10265 = ORIENTED_EDGE ( 'NONE', *, *, #12553, .T. ) ; +#10266 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9461 ), #1579 ) ; +#10267 = ORIENTED_EDGE ( 'NONE', *, *, #12811, .F. ) ; +#10268 = LINE ( 'NONE', #13352, #12148 ) ; +#10269 = VECTOR ( 'NONE', #8719, 1000.000000000000000 ) ; +#10270 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#10271 = LINE ( 'NONE', #6678, #3406 ) ; +#10272 = PLANE ( 'NONE', #14485 ) ; +#10273 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#10274 = ORIENTED_EDGE ( 'NONE', *, *, #14099, .F. ) ; +#10275 = AXIS2_PLACEMENT_3D ( 'NONE', #993, #12003, #4721 ) ; +#10276 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10277 = ORIENTED_EDGE ( 'NONE', *, *, #4421, .F. ) ; +#10278 = ORIENTED_EDGE ( 'NONE', *, *, #11552, .F. ) ; +#10279 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10280 = EDGE_CURVE ( 'NONE', #9542, #6152, #12519, .T. ) ; +#10281 = ORIENTED_EDGE ( 'NONE', *, *, #155, .T. ) ; +#10282 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, -15.05858178898088800, -6.100000000000000500 ) ) ; +#10283 = EDGE_CURVE ( 'NONE', #8916, #11155, #1878, .T. ) ; +#10284 = ORIENTED_EDGE ( 'NONE', *, *, #4823, .T. ) ; +#10285 = ORIENTED_EDGE ( 'NONE', *, *, #14999, .T. ) ; +#10286 = CARTESIAN_POINT ( 'NONE', ( 7.601144252825626800, 3.137420392015689300, -2.810976310729379300 ) ) ; +#10287 = VECTOR ( 'NONE', #15505, 1000.000000000000000 ) ; +#10288 = VECTOR ( 'NONE', #198, 1000.000000000000000 ) ; +#10289 = VECTOR ( 'NONE', #1824, 1000.000000000000000 ) ; +#10290 = AXIS2_PLACEMENT_3D ( 'NONE', #2403, #10737, #10792 ) ; +#10291 = EDGE_LOOP ( 'NONE', ( #12393, #4145, #3508, #12472 ) ) ; +#10292 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#10293 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10295 = ORIENTED_EDGE ( 'NONE', *, *, #387, .T. ) ; +#10294 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#10296 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999959100, 0.8000000000000000400, -2.449999999999997500 ) ) ; +#10297 = ORIENTED_EDGE ( 'NONE', *, *, #122, .T. ) ; +#10298 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999952400, 0.4000000000000000200, 5.050000000000002500 ) ) ; +#10299 = PLANE ( 'NONE', #8770 ) ; +#10300 = ORIENTED_EDGE ( 'NONE', *, *, #1269, .T. ) ; +#10301 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000000400, 3.061459556676524100, -2.866149413117884000 ) ) ; +#10302 = VECTOR ( 'NONE', #1259, 1000.000000000000000 ) ; +#10303 = CIRCLE ( 'NONE', #7862, 0.4999999999999995600 ) ; +#10304 = EDGE_CURVE ( 'NONE', #1212, #1554, #6091, .T. ) ; +#10305 = VECTOR ( 'NONE', #8885, 1000.000000000000000 ) ; +#10306 = ADVANCED_FACE ( 'NONE', ( #3208 ), #5311, .F. ) ; +#10307 = PLANE ( 'NONE', #10978 ) ; +#10308 = ORIENTED_EDGE ( 'NONE', *, *, #578, .F. ) ; +#10309 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#10310 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#10311 = ORIENTED_EDGE ( 'NONE', *, *, #5916, .F. ) ; +#10312 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000000700, 9.087979999999999900 ) ) ; +#10314 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 5.650000000000000400 ) ) ; +#10313 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 0.7999999999999977100, 9.090000000000008700 ) ) ; +#10315 = ORIENTED_EDGE ( 'NONE', *, *, #11031, .T. ) ; +#10316 = EDGE_CURVE ( 'NONE', #12731, #3622, #12143, .T. ) ; +#10317 = AXIS2_PLACEMENT_3D ( 'NONE', #4559, #7025, #869 ) ; +#10318 = LINE ( 'NONE', #13373, #1355 ) ; +#10319 = VECTOR ( 'NONE', #15476, 1000.000000000000000 ) ; +#10320 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999906200, 0.4000000000000000200, -0.3499999999999993100 ) ) ; +#10321 = EDGE_LOOP ( 'NONE', ( #15203, #12304, #8537, #10651 ) ) ; +#10322 = FACE_OUTER_BOUND ( 'NONE', #13480, .T. ) ; +#10323 = ADVANCED_FACE ( 'NONE', ( #15741 ), #646, .F. ) ; +#10324 = VECTOR ( 'NONE', #12692, 1000.000000000000000 ) ; +#10325 = ORIENTED_EDGE ( 'NONE', *, *, #2496, .T. ) ; +#10326 = ADVANCED_FACE ( 'NONE', ( #2060 ), #14228, .F. ) ; +#10327 = ORIENTED_EDGE ( 'NONE', *, *, #4691, .F. ) ; +#10328 = PLANE ( 'NONE', #13595 ) ; +#10329 = EDGE_CURVE ( 'NONE', #7476, #10355, #14624, .T. ) ; +#10330 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999980800, 0.4000000000000000200, 8.050000000000004300 ) ) ; +#10331 = ORIENTED_EDGE ( 'NONE', *, *, #4815, .F. ) ; +#10332 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.351999999999999900, 8.990000000000002000 ) ) ; +#10333 = PLANE ( 'NONE', #11782 ) ; +#10334 = LINE ( 'NONE', #8700, #811 ) ; +#10335 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#10336 = FACE_OUTER_BOUND ( 'NONE', #14581, .T. ) ; +#10337 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#10338 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#10339 = EDGE_CURVE ( 'NONE', #11705, #8596, #7804, .T. ) ; +#10340 = VECTOR ( 'NONE', #4183, 1000.000000000000000 ) ; +#10341 = STYLED_ITEM ( 'NONE', ( #1914 ), #6713 ) ; +#10342 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000000400, 3.049999999999999800, -2.872928932188135900 ) ) ; +#10343 = ORIENTED_EDGE ( 'NONE', *, *, #785, .F. ) ; +#10344 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#10345 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 16.60000000000000100 ) ) ; +#10346 = VECTOR ( 'NONE', #13348, 1000.000000000000000 ) ; +#10347 = VECTOR ( 'NONE', #11877, 1000.000000000000000 ) ; +#10348 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10349 = EDGE_CURVE ( 'NONE', #1689, #7222, #4548, .T. ) ; +#10350 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10351 = LINE ( 'NONE', #12524, #830 ) ; +#10352 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, -1.850000000000000500 ) ) ; +#10353 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#10354 = CARTESIAN_POINT ( 'NONE', ( -7.647982895189702600, 3.073037331497397800, 9.069289567165741400 ) ) ; +#10355 = VERTEX_POINT ( 'NONE', #12924 ) ; +#10356 = VERTEX_POINT ( 'NONE', #14279 ) ; +#10357 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 1.806230589874906900, 7.150000000000000400 ) ) ; +#10358 = AXIS2_PLACEMENT_3D ( 'NONE', #1762, #4116, #14015 ) ; +#10359 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999998600, 0.4000000000000000200, 8.650000000000000400 ) ) ; +#10360 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#10361 = VERTEX_POINT ( 'NONE', #7973 ) ; +#10362 = LINE ( 'NONE', #15594, #2731 ) ; +#10363 = ORIENTED_EDGE ( 'NONE', *, *, #6832, .T. ) ; +#10364 = AXIS2_PLACEMENT_3D ( 'NONE', #2026, #7004, #5818 ) ; +#10365 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10366 = PLANE ( 'NONE', #4865 ) ; +#10367 = VERTEX_POINT ( 'NONE', #9341 ) ; +#10368 = LINE ( 'NONE', #12663, #14934 ) ; +#10369 = LINE ( 'NONE', #15348, #6772 ) ; +#10370 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10371 = ORIENTED_EDGE ( 'NONE', *, *, #14255, .T. ) ; +#10372 = EDGE_CURVE ( 'NONE', #2572, #2102, #5113, .T. ) ; +#10373 = EDGE_CURVE ( 'NONE', #3157, #14674, #7040, .T. ) ; +#10374 = PLANE ( 'NONE', #11300 ) ; +#10375 = VERTEX_POINT ( 'NONE', #11713 ) ; +#10376 = VECTOR ( 'NONE', #5004, 1000.000000000000000 ) ; +#10377 = EDGE_CURVE ( 'NONE', #8095, #8667, #3195, .T. ) ; +#10378 = ORIENTED_EDGE ( 'NONE', *, *, #6637, .F. ) ; +#10379 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10380 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.4000000000000000200, 1.850000000000000100 ) ) ; +#10381 = VERTEX_POINT ( 'NONE', #8131 ) ; +#10382 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.4000000000000000200, 2.950000000000000200 ) ) ; +#10383 = FACE_OUTER_BOUND ( 'NONE', #8791, .T. ) ; +#10384 = LINE ( 'NONE', #12211, #12458 ) ; +#10385 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10386 = ADVANCED_FACE ( 'NONE', ( #12889 ), #9393, .F. ) ; +#10387 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 12.00000000000000000 ) ) ; +#10388 = ORIENTED_EDGE ( 'NONE', *, *, #1630, .T. ) ; +#10389 = DIRECTION ( 'NONE', ( -3.690901012716604900E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10390 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10391 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999968400, 0.4000000000000000200, 6.550000000000000700 ) ) ; +#10392 = EDGE_LOOP ( 'NONE', ( #2647, #1175, #10838, #3383 ) ) ; +#10393 = FACE_OUTER_BOUND ( 'NONE', #15176, .T. ) ; +#10394 = VERTEX_POINT ( 'NONE', #14071 ) ; +#10395 = ORIENTED_EDGE ( 'NONE', *, *, #14592, .F. ) ; +#10396 = FACE_OUTER_BOUND ( 'NONE', #9656, .T. ) ; +#10397 = VECTOR ( 'NONE', #2865, 1000.000000000000000 ) ; +#10398 = DIRECTION ( 'NONE', ( 1.548860246407863300E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10399 = EDGE_CURVE ( 'NONE', #14975, #3563, #910, .T. ) ; +#10400 = PLANE ( 'NONE', #107 ) ; +#10401 = ADVANCED_FACE ( 'NONE', ( #13477 ), #2276, .T. ) ; +#10402 = PLANE ( 'NONE', #11234 ) ; +#10403 = AXIS2_PLACEMENT_3D ( 'NONE', #1055, #1006, #2327 ) ; +#10404 = SURFACE_SIDE_STYLE ('',( #962 ) ) ; +#10405 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 5.649999999999995900 ) ) ; +#10406 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#10407 = ADVANCED_FACE ( 'NONE', ( #7414 ), #8227, .F. ) ; +#10408 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10409 = CARTESIAN_POINT ( 'NONE', ( 7.624016485703915400, 3.117242544895639300, -2.829300014952716800 ) ) ; +#10410 = EDGE_CURVE ( 'NONE', #3144, #2260, #9682, .T. ) ; +#10411 = LINE ( 'NONE', #12284, #14785 ) ; +#10412 = DIRECTION ( 'NONE', ( 3.690901012716607300E-015, -1.000000000000000000, 6.123233995736767300E-017 ) ) ; +#10413 = ORIENTED_EDGE ( 'NONE', *, *, #8973, .T. ) ; +#10414 = AXIS2_PLACEMENT_3D ( 'NONE', #6945, #5490, #5763 ) ; +#10415 = AXIS2_PLACEMENT_3D ( 'NONE', #10382, #11495, #12767 ) ; +#10416 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, -0.0000000000000000000, -2.449999999999998800 ) ) ; +#10417 = LINE ( 'NONE', #11115, #14978 ) ; +#10418 = LINE ( 'NONE', #7868, #10799 ) ; +#10419 = PLANE ( 'NONE', #10156 ) ; +#10420 = ORIENTED_EDGE ( 'NONE', *, *, #12991, .F. ) ; +#10421 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10423 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 2.050000000000001600 ) ) ; +#10422 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -5.478074134663595300E-015 ) ) ; +#10424 = ORIENTED_EDGE ( 'NONE', *, *, #2006, .F. ) ; +#10425 = EDGE_CURVE ( 'NONE', #9183, #311, #3007, .T. ) ; +#10426 = PLANE ( 'NONE', #1642 ) ; +#10427 = LINE ( 'NONE', #14826, #13074 ) ; +#10428 = VERTEX_POINT ( 'NONE', #9594 ) ; +#10429 = VECTOR ( 'NONE', #14354, 1000.000000000000000 ) ; +#10430 = LINE ( 'NONE', #4613, #2794 ) ; +#10431 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, 1.149999999999999900 ) ) ; +#10432 = EDGE_CURVE ( 'NONE', #13949, #8577, #6652, .T. ) ; +#10433 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10434 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10435 = CARTESIAN_POINT ( 'NONE', ( 7.611952621458756100, 3.206595997628985300, 9.257668071082944600 ) ) ; +#10436 = PLANE ( 'NONE', #10364 ) ; +#10437 = EDGE_LOOP ( 'NONE', ( #13890 ) ) ; +#10438 = LINE ( 'NONE', #15187, #151 ) ; +#10439 = VERTEX_POINT ( 'NONE', #5990 ) ; +#10440 = ORIENTED_EDGE ( 'NONE', *, *, #7066, .T. ) ; +#10441 = CARTESIAN_POINT ( 'NONE', ( -8.549999999999998900, 0.4000000000000000200, 9.550000000000000700 ) ) ; +#10442 = ORIENTED_EDGE ( 'NONE', *, *, #14661, .T. ) ; +#10443 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, 9.550000000000000700 ) ) ; +#10444 = VECTOR ( 'NONE', #13298, 1000.000000000000000 ) ; +#10445 = EDGE_CURVE ( 'NONE', #15579, #4753, #9490, .T. ) ; +#10446 = EDGE_CURVE ( 'NONE', #7654, #10186, #7594, .T. ) ; +#10447 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -5.102127870520021000E-016 ) ) ; +#10448 = ORIENTED_EDGE ( 'NONE', *, *, #12793, .T. ) ; +#10449 = ORIENTED_EDGE ( 'NONE', *, *, #13113, .F. ) ; +#10450 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10451 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 9.550000000000000700 ) ) ; +#10452 = ORIENTED_EDGE ( 'NONE', *, *, #1907, .T. ) ; +#10453 = LINE ( 'NONE', #14176, #6464 ) ; +#10454 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, -3.174999999999998900 ) ) ; +#10455 = EDGE_LOOP ( 'NONE', ( #14847, #1147, #8108, #3464, #9727, #1270 ) ) ; +#10456 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 1.806230589874906900, -0.3500000000000004800 ) ) ; +#10457 = ORIENTED_EDGE ( 'NONE', *, *, #11652, .T. ) ; +#10458 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, -2.899999999999999900 ) ) ; +#10459 = LINE ( 'NONE', #1975, #6861 ) ; +#10460 = LINE ( 'NONE', #6534, #3217 ) ; +#10461 = AXIS2_PLACEMENT_3D ( 'NONE', #4164, #596, #535 ) ; +#10462 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10463 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10464 = ORIENTED_EDGE ( 'NONE', *, *, #14661, .F. ) ; +#10465 = VERTEX_POINT ( 'NONE', #14376 ) ; +#10466 = ORIENTED_EDGE ( 'NONE', *, *, #10705, .T. ) ; +#10467 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#10468 = EDGE_CURVE ( 'NONE', #5238, #126, #7219, .T. ) ; +#10469 = EDGE_LOOP ( 'NONE', ( #6371, #4527, #2742, #167 ) ) ; +#10470 = VERTEX_POINT ( 'NONE', #10653 ) ; +#10471 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#10473 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 1.637941840314110200, 3.649999999999999500 ) ) ; +#10472 = FILL_AREA_STYLE ('',( #3334 ) ) ; +#10474 = EDGE_CURVE ( 'NONE', #2820, #1846, #1091, .T. ) ; +#10475 = VECTOR ( 'NONE', #1195, 1000.000000000000000 ) ; +#10476 = VECTOR ( 'NONE', #15194, 1000.000000000000000 ) ; +#10477 = FACE_OUTER_BOUND ( 'NONE', #10770, .T. ) ; +#10478 = ORIENTED_EDGE ( 'NONE', *, *, #13517, .F. ) ; +#10479 = ADVANCED_FACE ( 'NONE', ( #15548 ), #8326, .F. ) ; +#10480 = EDGE_LOOP ( 'NONE', ( #8473, #9001, #14597, #14755 ) ) ; +#10481 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3343 ), #11797 ) ; +#10482 = ORIENTED_EDGE ( 'NONE', *, *, #14393, .F. ) ; +#10483 = ADVANCED_FACE ( 'NONE', ( #10249 ), #9436, .T. ) ; +#10484 = ORIENTED_EDGE ( 'NONE', *, *, #1022, .T. ) ; +#10485 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 1.637941840314110200, 2.549999999999999800 ) ) ; +#10486 = EDGE_LOOP ( 'NONE', ( #5033, #13134, #4203, #2537 ) ) ; +#10487 = LINE ( 'NONE', #12745, #399 ) ; +#10488 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#10489 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 1.325000000000001500 ) ) ; +#10490 = VECTOR ( 'NONE', #2577, 1000.000000000000000 ) ; +#10491 = FACE_OUTER_BOUND ( 'NONE', #985, .T. ) ; +#10492 = FACE_OUTER_BOUND ( 'NONE', #8990, .T. ) ; +#10493 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #14633, 'distance_accuracy_value', 'NONE'); +#10494 = AXIS2_PLACEMENT_3D ( 'NONE', #4881, #9782, #6128 ) ; +#10495 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, -0.9499999999999972900 ) ) ; +#10496 = FACE_OUTER_BOUND ( 'NONE', #14897, .T. ) ; +#10497 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#10498 = ORIENTED_EDGE ( 'NONE', *, *, #9715, .F. ) ; +#10499 = EDGE_CURVE ( 'NONE', #8967, #5064, #708, .T. ) ; +#10500 = DIRECTION ( 'NONE', ( 1.000000000000000000, 2.762298528625489200E-017, -1.104919411450194700E-016 ) ) ; +#10501 = PLANE ( 'NONE', #8 ) ; +#10502 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.8000000000000000400, 0.0000000000000000000 ) ) ; +#10503 = ORIENTED_EDGE ( 'NONE', *, *, #8397, .F. ) ; +#10504 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10505 = ORIENTED_EDGE ( 'NONE', *, *, #6881, .F. ) ; +#10506 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999875300, 0.0000000000000000000, -3.349999999999997900 ) ) ; +#10507 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#10508 = VECTOR ( 'NONE', #15135, 1000.000000000000000 ) ; +#10509 = FACE_OUTER_BOUND ( 'NONE', #7282, .T. ) ; +#10510 = FACE_OUTER_BOUND ( 'NONE', #4416, .T. ) ; +#10511 = VECTOR ( 'NONE', #5492, 1000.000000000000000 ) ; +#10512 = VECTOR ( 'NONE', #4107, 1000.000000000000000 ) ; +#10513 = PLANE ( 'NONE', #13774 ) ; +#10514 = FACE_OUTER_BOUND ( 'NONE', #10469, .T. ) ; +#10515 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10516 = DIRECTION ( 'NONE', ( 5.478074134663584300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10517 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10518 = ORIENTED_EDGE ( 'NONE', *, *, #8836, .F. ) ; +#10519 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6811, 'distance_accuracy_value', 'NONE'); +#10520 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10521 = DIRECTION ( 'NONE', ( -2.762298528625412100E-017, 1.000000000000000000, 3.506355962080744500E-015 ) ) ; +#10522 = EDGE_LOOP ( 'NONE', ( #5559, #753, #7569, #15092 ) ) ; +#10523 = ORIENTED_EDGE ( 'NONE', *, *, #8143, .T. ) ; +#10524 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, -3.350000000000000500 ) ) ; +#10525 = EDGE_CURVE ( 'NONE', #4661, #3494, #15728, .T. ) ; +#10526 = FACE_OUTER_BOUND ( 'NONE', #5697, .T. ) ; +#10527 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000300, 1.637941840314110200, 2.949999999999999300 ) ) ; +#10528 = VECTOR ( 'NONE', #7698, 1000.000000000000000 ) ; +#10529 = CLOSED_SHELL ( 'NONE', ( #9724, #1607, #11980 ) ) ; +#10530 = LINE ( 'NONE', #1431, #9219 ) ; +#10531 = DIRECTION ( 'NONE', ( -1.548860246407863300E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#10532 = LINE ( 'NONE', #9058, #1343 ) ; +#10533 = VECTOR ( 'NONE', #14195, 1000.000000000000000 ) ; +#10534 = ORIENTED_EDGE ( 'NONE', *, *, #6085, .T. ) ; +#10535 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 0.5500000000000010400 ) ) ; +#10536 = ORIENTED_EDGE ( 'NONE', *, *, #8256, .T. ) ; +#10538 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 5.050000000000000700 ) ) ; +#10537 = PLANE ( 'NONE', #6235 ) ; +#10539 = EDGE_CURVE ( 'NONE', #5511, #14080, #526, .T. ) ; +#10540 = ORIENTED_EDGE ( 'NONE', *, *, #7435, .F. ) ; +#10541 = AXIS2_PLACEMENT_3D ( 'NONE', #3155, #15330, #10389 ) ; +#10542 = ORIENTED_EDGE ( 'NONE', *, *, #5089, .T. ) ; +#10543 = VECTOR ( 'NONE', #13507, 1000.000000000000000 ) ; +#10544 = VECTOR ( 'NONE', #14643, 1000.000000000000000 ) ; +#10545 = VECTOR ( 'NONE', #7940, 1000.000000000000000 ) ; +#10546 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#10547 = EDGE_CURVE ( 'NONE', #12617, #225, #9307, .T. ) ; +#10548 = EDGE_CURVE ( 'NONE', #643, #5248, #12504, .T. ) ; +#10549 = ORIENTED_EDGE ( 'NONE', *, *, #12453, .T. ) ; +#10550 = ORIENTED_EDGE ( 'NONE', *, *, #159, .T. ) ; +#10551 = ORIENTED_EDGE ( 'NONE', *, *, #3357, .T. ) ; +#10552 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10553 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#10554 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.097720492815728200E-016 ) ) ; +#10555 = FACE_OUTER_BOUND ( 'NONE', #5426, .T. ) ; +#10556 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#10557 = AXIS2_PLACEMENT_3D ( 'NONE', #4729, #2265, #2162 ) ; +#10558 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000033800, 0.8000000000000000400, -0.9499999999999995100 ) ) ; +#10559 = LINE ( 'NONE', #3928, #3879 ) ; +#10560 = VECTOR ( 'NONE', #13256, 1000.000000000000000 ) ; +#10561 = AXIS2_PLACEMENT_3D ( 'NONE', #13312, #2509, #6219 ) ; +#10562 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10563 = ORIENTED_EDGE ( 'NONE', *, *, #11630, .T. ) ; +#10564 = EDGE_LOOP ( 'NONE', ( #9273, #14441, #9257, #14306 ) ) ; +#10565 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000002500, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#10566 = PLANE ( 'NONE', #3456 ) ; +#10567 = ADVANCED_FACE ( 'NONE', ( #4357 ), #12123, .F. ) ; +#10568 = VERTEX_POINT ( 'NONE', #13355 ) ; +#10569 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10570 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 6.550000000000001600 ) ) ; +#10571 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999936400, 0.4000000000000000200, 2.649999999999999500 ) ) ; +#10572 = EDGE_CURVE ( 'NONE', #5710, #1030, #2232, .T. ) ; +#10573 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#10574 = ORIENTED_EDGE ( 'NONE', *, *, #6250, .T. ) ; +#10575 = ADVANCED_FACE ( 'NONE', ( #9868 ), #1173, .T. ) ; +#10576 = LINE ( 'NONE', #11890, #5032 ) ; +#10577 = EDGE_LOOP ( 'NONE', ( #1420, #1718, #11215, #3781 ) ) ; +#10578 = ORIENTED_EDGE ( 'NONE', *, *, #9163, .F. ) ; +#10579 = ORIENTED_EDGE ( 'NONE', *, *, #5233, .T. ) ; +#10580 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#10581 = LINE ( 'NONE', #11972, #14199 ) ; +#10582 = LINE ( 'NONE', #7254, #4856 ) ; +#10583 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.149999999999999500, -2.779999999999999400 ) ) ; +#10584 = AXIS2_PLACEMENT_3D ( 'NONE', #11086, #9805, #14797 ) ; +#10585 = ORIENTED_EDGE ( 'NONE', *, *, #4115, .T. ) ; +#10586 = ORIENTED_EDGE ( 'NONE', *, *, #14751, .F. ) ; +#10587 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000020300, 0.4000000000000000200, 3.549999999999999400 ) ) ; +#10588 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10589 = ORIENTED_EDGE ( 'NONE', *, *, #4730, .F. ) ; +#10590 = LINE ( 'NONE', #11955, #6595 ) ; +#10591 = ORIENTED_EDGE ( 'NONE', *, *, #5521, .T. ) ; +#10592 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10593 = VECTOR ( 'NONE', #697, 1000.000000000000000 ) ; +#10594 = EDGE_LOOP ( 'NONE', ( #11649, #13714, #13288, #4951, #11428, #14369 ) ) ; +#10595 = EDGE_CURVE ( 'NONE', #4435, #5241, #1768, .T. ) ; +#10596 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#10597 = EDGE_CURVE ( 'NONE', #9571, #3351, #5495, .T. ) ; +#10598 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 4.874999999999999100 ) ) ; +#10599 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10600 = ORIENTED_EDGE ( 'NONE', *, *, #8442, .T. ) ; +#10601 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 2.649999999999999500 ) ) ; +#10602 = ORIENTED_EDGE ( 'NONE', *, *, #12126, .T. ) ; +#10603 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999952400, 0.0000000000000000000, 5.050000000000002500 ) ) ; +#10604 = LINE ( 'NONE', #5119, #3923 ) ; +#10605 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#10606 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#10607 = FACE_BOUND ( 'NONE', #9947, .T. ) ; +#10608 = ORIENTED_EDGE ( 'NONE', *, *, #1494, .F. ) ; +#10609 = EDGE_CURVE ( 'NONE', #11933, #6475, #15368, .T. ) ; +#10610 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#10611 = PLANE ( 'NONE', #11020 ) ; +#10612 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#10613 = SURFACE_STYLE_FILL_AREA ( #881 ) ; +#10614 = LINE ( 'NONE', #324, #7394 ) ; +#10615 = FILL_AREA_STYLE ('',( #11823 ) ) ; +#10616 = ORIENTED_EDGE ( 'NONE', *, *, #7958, .T. ) ; +#10617 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10618 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, -0.9499999999999990700 ) ) ; +#10619 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#10620 = EDGE_CURVE ( 'NONE', #12695, #12795, #14816, .T. ) ; +#10621 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999982200, 0.8000000000000000400, 4.149999999999995900 ) ) ; +#10622 = VERTEX_POINT ( 'NONE', #11568 ) ; +#10623 = VERTEX_POINT ( 'NONE', #11525 ) ; +#10624 = VECTOR ( 'NONE', #2897, 1000.000000000000000 ) ; +#10625 = ORIENTED_EDGE ( 'NONE', *, *, #4322, .F. ) ; +#10626 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, -1.125000000000000700 ) ) ; +#10627 = FACE_OUTER_BOUND ( 'NONE', #1877, .T. ) ; +#10628 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 9.550000000000000700 ) ) ; +#10629 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#10630 = EDGE_CURVE ( 'NONE', #14207, #643, #13270, .T. ) ; +#10631 = AXIS2_PLACEMENT_3D ( 'NONE', #12412, #3969, #9877 ) ; +#10632 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 5.650000000000000400 ) ) ; +#10633 = VERTEX_POINT ( 'NONE', #1619 ) ; +#10634 = VECTOR ( 'NONE', #3256, 1000.000000000000000 ) ; +#10635 = ORIENTED_EDGE ( 'NONE', *, *, #9928, .T. ) ; +#10636 = EDGE_LOOP ( 'NONE', ( #15040, #926, #3585, #12444 ) ) ; +#10637 = EDGE_CURVE ( 'NONE', #11954, #13442, #10438, .T. ) ; +#10638 = ADVANCED_FACE ( 'NONE', ( #8361 ), #13980, .T. ) ; +#10639 = LINE ( 'NONE', #12130, #3783 ) ; +#10640 = AXIS2_PLACEMENT_3D ( 'NONE', #5253, #12507, #6586 ) ; +#10641 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#10642 = FILL_AREA_STYLE ('',( #4731 ) ) ; +#10643 = ORIENTED_EDGE ( 'NONE', *, *, #3442, .T. ) ; +#10644 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 4.149999999999999500 ) ) ; +#10645 = ORIENTED_EDGE ( 'NONE', *, *, #15309, .F. ) ; +#10646 = VERTEX_POINT ( 'NONE', #13823 ) ; +#10647 = ORIENTED_EDGE ( 'NONE', *, *, #104, .T. ) ; +#10648 = EDGE_LOOP ( 'NONE', ( #4312, #8647, #15417, #14435 ) ) ; +#10649 = PLANE ( 'NONE', #6950 ) ; +#10650 = EDGE_LOOP ( 'NONE', ( #15740, #1187, #1803, #5612 ) ) ; +#10651 = ORIENTED_EDGE ( 'NONE', *, *, #15057, .T. ) ; +#10652 = EDGE_CURVE ( 'NONE', #8289, #6709, #12129, .T. ) ; +#10653 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 0.5500000000000010400 ) ) ; +#10654 = VECTOR ( 'NONE', #14055, 1000.000000000000000 ) ; +#10655 = FACE_OUTER_BOUND ( 'NONE', #11174, .T. ) ; +#10656 = LINE ( 'NONE', #15683, #9719 ) ; +#10657 = ORIENTED_EDGE ( 'NONE', *, *, #9277, .T. ) ; +#10658 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999959100, 0.8000000000000000400, -3.349999999999998800 ) ) ; +#10660 = ORIENTED_EDGE ( 'NONE', *, *, #3024, .F. ) ; +#10659 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.4000000000000000200, 2.950000000000000200 ) ) ; +#10661 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10662 = ORIENTED_EDGE ( 'NONE', *, *, #7505, .T. ) ; +#10663 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000002500, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#10664 = ORIENTED_EDGE ( 'NONE', *, *, #11700, .T. ) ; +#10665 = ORIENTED_EDGE ( 'NONE', *, *, #15722, .T. ) ; +#10666 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, -15.05858178898088800, -4.000000000000000000 ) ) ; +#10667 = AXIS2_PLACEMENT_3D ( 'NONE', #14137, #9403, #9297 ) ; +#10668 = EDGE_LOOP ( 'NONE', ( #4285, #9130, #6770, #11443 ) ) ; +#10669 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#10670 = DIRECTION ( 'NONE', ( -5.478074134663595300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10671 = SHAPE_DEFINITION_REPRESENTATION ( #2771, #11944 ) ; +#10672 = LINE ( 'NONE', #15528, #11804 ) ; +#10673 = VECTOR ( 'NONE', #11410, 1000.000000000000000 ) ; +#10674 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, -0.1749999999999989300 ) ) ; +#10675 = EDGE_LOOP ( 'NONE', ( #12201, #3063, #12962, #14925 ) ) ; +#10676 = EDGE_CURVE ( 'NONE', #304, #2179, #12711, .T. ) ; +#10677 = VERTEX_POINT ( 'NONE', #12739 ) ; +#10678 = PLANE ( 'NONE', #2775 ) ; +#10679 = EDGE_CURVE ( 'NONE', #4473, #11503, #2608, .T. ) ; +#10681 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10680 = PLANE ( 'NONE', #487 ) ; +#10682 = EDGE_LOOP ( 'NONE', ( #8426, #10325, #10919, #15064 ) ) ; +#10683 = EDGE_CURVE ( 'NONE', #5355, #2363, #8741, .T. ) ; +#10684 = VERTEX_POINT ( 'NONE', #7942 ) ; +#10685 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, -2.449999999999998800 ) ) ; +#10686 = VECTOR ( 'NONE', #14038, 1000.000000000000000 ) ; +#10687 = VECTOR ( 'NONE', #4772, 1000.000000000000000 ) ; +#10688 = VECTOR ( 'NONE', #11594, 1000.000000000000000 ) ; +#10689 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude6', #2112 ) ; +#10690 = FACE_OUTER_BOUND ( 'NONE', #3648, .T. ) ; +#10691 = EDGE_LOOP ( 'NONE', ( #2471, #8987, #68, #13697 ) ) ; +#10692 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#10693 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10694 = VERTEX_POINT ( 'NONE', #5469 ) ; +#10695 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 8.650000000000000400 ) ) ; +#10696 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#10697 = ORIENTED_EDGE ( 'NONE', *, *, #6998, .T. ) ; +#10698 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.7000000000000009500, -5.150000000000001200 ) ) ; +#10699 = LINE ( 'NONE', #4058, #13 ) ; +#10700 = LINE ( 'NONE', #6636, #4614 ) ; +#10701 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, -2.449999999999998800 ) ) ; +#10702 = VECTOR ( 'NONE', #1760, 1000.000000000000000 ) ; +#10703 = ORIENTED_EDGE ( 'NONE', *, *, #921, .T. ) ; +#10704 = VECTOR ( 'NONE', #5232, 1000.000000000000000 ) ; +#10705 = EDGE_CURVE ( 'NONE', #3736, #13023, #7989, .T. ) ; +#10706 = VECTOR ( 'NONE', #3880, 1000.000000000000000 ) ; +#10707 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#10708 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#10709 = PLANE ( 'NONE', #7678 ) ; +#10710 = ORIENTED_EDGE ( 'NONE', *, *, #15416, .T. ) ; +#10711 = ORIENTED_EDGE ( 'NONE', *, *, #13050, .T. ) ; +#10712 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 9.550000000000000700 ) ) ; +#10713 = EDGE_LOOP ( 'NONE', ( #1334, #8362, #3041, #6501 ) ) ; +#10714 = ORIENTED_EDGE ( 'NONE', *, *, #15128, .T. ) ; +#10715 = EDGE_CURVE ( 'NONE', #6853, #311, #11187, .T. ) ; +#10716 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13360 ) ) ; +#10717 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999982200, 0.8000000000000000400, 4.149999999999995900 ) ) ; +#10718 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10719 = LINE ( 'NONE', #10535, #5397 ) ; +#10720 = VECTOR ( 'NONE', #3272, 1000.000000000000000 ) ; +#10721 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 9.099999999999999600 ) ) ; +#10722 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 9.549999999999993600 ) ) ; +#10723 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000034500, 0.4000000000000000200, -1.850000000000001000 ) ) ; +#10724 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.3999999999999999700, 4.750000000000000000 ) ) ; +#10725 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.0000000000000000000, 2.949999999999999700 ) ) ; +#10726 = ADVANCED_FACE ( 'NONE', ( #1657 ), #13332, .F. ) ; +#10727 = LINE ( 'NONE', #10196, #2329 ) ; +#10728 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10729 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10730 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#10731 = VERTEX_POINT ( 'NONE', #1545 ) ; +#10732 = EDGE_CURVE ( 'NONE', #3780, #6480, #5297, .T. ) ; +#10733 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999890200, 0.4000000000000000200, -1.850000000000001000 ) ) ; +#10734 = LINE ( 'NONE', #12223, #12810 ) ; +#10735 = LINE ( 'NONE', #6806, #8465 ) ; +#10736 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 2.649999999999999500 ) ) ; +#10738 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 6.100000000000001400 ) ) ; +#10737 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#10739 = EDGE_CURVE ( 'NONE', #4047, #5928, #10810, .T. ) ; +#10740 = VECTOR ( 'NONE', #6238, 1000.000000000000000 ) ; +#10741 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10742 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10743 = VERTEX_POINT ( 'NONE', #11160 ) ; +#10744 = ORIENTED_EDGE ( 'NONE', *, *, #3637, .F. ) ; +#10745 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.149999999999998600, -2.780000000000001100 ) ) ; +#10746 = EDGE_LOOP ( 'NONE', ( #11376, #8610, #9344, #13031 ) ) ; +#10747 = VECTOR ( 'NONE', #2456, 1000.000000000000000 ) ; +#10748 = EDGE_LOOP ( 'NONE', ( #13394, #2502, #10420, #1649 ) ) ; +#10749 = ORIENTED_EDGE ( 'NONE', *, *, #5345, .T. ) ; +#10750 = EDGE_CURVE ( 'NONE', #14959, #3192, #13861, .T. ) ; +#10751 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#10752 = EDGE_CURVE ( 'NONE', #1687, #6612, #513, .T. ) ; +#10753 = ORIENTED_EDGE ( 'NONE', *, *, #10316, .T. ) ; +#10754 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 1.149999999999999900 ) ) ; +#10755 = FACE_OUTER_BOUND ( 'NONE', #7747, .T. ) ; +#10756 = FACE_OUTER_BOUND ( 'NONE', #12325, .T. ) ; +#10757 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999906200, 0.4000000000000000200, -0.3500000000000013700 ) ) ; +#10758 = EDGE_LOOP ( 'NONE', ( #2168, #6798, #9982, #10697 ) ) ; +#10759 = ORIENTED_EDGE ( 'NONE', *, *, #1419, .T. ) ; +#10760 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000023800, 0.4000000000000000200, 1.149999999999999000 ) ) ; +#10761 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, -2.449999999999998800 ) ) ; +#10762 = ORIENTED_EDGE ( 'NONE', *, *, #11169, .T. ) ; +#10763 = ORIENTED_EDGE ( 'NONE', *, *, #508, .F. ) ; +#10764 = AXIS2_PLACEMENT_3D ( 'NONE', #4980, #36, #127 ) ; +#10765 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10766 = ORIENTED_EDGE ( 'NONE', *, *, #4302, .T. ) ; +#10767 = LINE ( 'NONE', #10701, #6216 ) ; +#10768 = ORIENTED_EDGE ( 'NONE', *, *, #10432, .T. ) ; +#10769 = AXIS2_PLACEMENT_3D ( 'NONE', #4008, #326, #6422 ) ; +#10770 = EDGE_LOOP ( 'NONE', ( #461, #865, #242, #6033 ) ) ; +#10771 = VECTOR ( 'NONE', #265, 1000.000000000000000 ) ; +#10772 = LINE ( 'NONE', #11166, #849 ) ; +#10773 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#10774 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#10775 = EDGE_LOOP ( 'NONE', ( #12139, #10075, #5414, #1995 ) ) ; +#10776 = EDGE_CURVE ( 'NONE', #6581, #12456, #11557, .T. ) ; +#10777 = CARTESIAN_POINT ( 'NONE', ( -7.567441010350338900, 3.146673601807757700, -2.809455349686083500 ) ) ; +#10778 = CARTESIAN_POINT ( 'NONE', ( 7.580998920361181200, 3.317567445684514600, 9.146658047799212100 ) ) ; +#10779 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10780 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 2.050000000000001600 ) ) ; +#10781 = ORIENTED_EDGE ( 'NONE', *, *, #9517, .T. ) ; +#10782 = VECTOR ( 'NONE', #11753, 1000.000000000000000 ) ; +#10783 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#10784 = EDGE_CURVE ( 'NONE', #11614, #10116, #11932, .T. ) ; +#10785 = ORIENTED_EDGE ( 'NONE', *, *, #6380, .F. ) ; +#10786 = CARTESIAN_POINT ( 'NONE', ( -7.707639970946511100, 3.319452524890163400, -2.810976310729378400 ) ) ; +#10787 = VECTOR ( 'NONE', #13768, 1000.000000000000000 ) ; +#10788 = LINE ( 'NONE', #6203, #12858 ) ; +#10789 = AXIS2_PLACEMENT_3D ( 'NONE', #2033, #10556, #13241 ) ; +#10790 = FILL_AREA_STYLE_COLOUR ( '', #7828 ) ; +#10791 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10793 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10792 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10794 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.147979999999998700, -2.779999999999999400 ) ) ; +#10795 = VECTOR ( 'NONE', #3849, 1000.000000000000000 ) ; +#10796 = VERTEX_POINT ( 'NONE', #12359 ) ; +#10797 = AXIS2_PLACEMENT_3D ( 'NONE', #10158, #448, #1676 ) ; +#10798 = LINE ( 'NONE', #2409, #3755 ) ; +#10799 = VECTOR ( 'NONE', #8385, 1000.000000000000000 ) ; +#10800 = EDGE_CURVE ( 'NONE', #11534, #2993, #10233, .T. ) ; +#10801 = ORIENTED_EDGE ( 'NONE', *, *, #2931, .F. ) ; +#10802 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10803 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, -3.350000000000000500 ) ) ; +#10804 = ADVANCED_FACE ( 'NONE', ( #7581 ), #14878, .T. ) ; +#10805 = EDGE_CURVE ( 'NONE', #1901, #304, #4144, .T. ) ; +#10806 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 3.550000000000001200 ) ) ; +#10807 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 0.3749999999999994400 ) ) ; +#10808 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000023100, 0.8000000000000000400, 2.050000000000001600 ) ) ; +#10809 = ORIENTED_EDGE ( 'NONE', *, *, #12138, .F. ) ; +#10810 = LINE ( 'NONE', #13486, #1275 ) ; +#10811 = ORIENTED_EDGE ( 'NONE', *, *, #2881, .F. ) ; +#10812 = VERTEX_POINT ( 'NONE', #6277 ) ; +#10813 = AXIS2_PLACEMENT_3D ( 'NONE', #5333, #6620, #6519 ) ; +#10814 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10815 = FACE_OUTER_BOUND ( 'NONE', #10259, .T. ) ; +#10816 = ADVANCED_FACE ( 'NONE', ( #5482 ), #12466, .F. ) ; +#10817 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#10818 = EDGE_CURVE ( 'NONE', #2673, #525, #11755, .T. ) ; +#10819 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 9.099999999999999600 ) ) ; +#10820 = VERTEX_POINT ( 'NONE', #13707 ) ; +#10821 = VECTOR ( 'NONE', #5930, 1000.000000000000000 ) ; +#10822 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999890200, 0.4000000000000000200, -0.9499999999999975100 ) ) ; +#10823 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#10824 = ORIENTED_EDGE ( 'NONE', *, *, #1220, .T. ) ; +#10825 = VERTEX_POINT ( 'NONE', #14721 ) ; +#10826 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999968000, 0.8000000000000000400, -0.1749999999999998200 ) ) ; +#10827 = EDGE_LOOP ( 'NONE', ( #15190, #6766, #7042, #455 ) ) ; +#10828 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000000300, -2.879999999999999400 ) ) ; +#10829 = PRESENTATION_STYLE_ASSIGNMENT (( #9752 ) ) ; +#10830 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.0000000000000000000, 1.850000000000000100 ) ) ; +#10831 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, -1.125000000000000700 ) ) ; +#10832 = EDGE_CURVE ( 'NONE', #4159, #12131, #10427, .T. ) ; +#10833 = CARTESIAN_POINT ( 'NONE', ( 7.627304604898443000, 3.129230338724656900, -3.079999999999998300 ) ) ; +#10834 = AXIS2_PLACEMENT_3D ( 'NONE', #11120, #6291, #14673 ) ; +#10835 = FILL_AREA_STYLE_COLOUR ( '', #7228 ) ; +#10836 = EDGE_LOOP ( 'NONE', ( #4926, #6720, #14704, #5088 ) ) ; +#10837 = ORIENTED_EDGE ( 'NONE', *, *, #2676, .T. ) ; +#10838 = ORIENTED_EDGE ( 'NONE', *, *, #8835, .F. ) ; +#10839 = LINE ( 'NONE', #13967, #1671 ) ; +#10840 = ORIENTED_EDGE ( 'NONE', *, *, #8003, .T. ) ; +#10841 = ADVANCED_FACE ( 'NONE', ( #896 ), #8726, .F. ) ; +#10842 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999968400, 0.4000000000000000200, 6.550000000000002500 ) ) ; +#10843 = VERTEX_POINT ( 'NONE', #4988 ) ; +#10845 = PLANE ( 'NONE', #11389 ) ; +#10844 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10846 = VECTOR ( 'NONE', #7955, 1000.000000000000000 ) ; +#10847 = VECTOR ( 'NONE', #2450, 1000.000000000000000 ) ; +#10848 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.149999999999998600, -2.779999999999999400 ) ) ; +#10849 = EDGE_CURVE ( 'NONE', #5140, #9953, #8347, .T. ) ; +#10850 = EDGE_CURVE ( 'NONE', #974, #2820, #14049, .T. ) ; +#10851 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#10852 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000002500, -15.05858178898088800, -4.000000000000000000 ) ) ; +#10853 = ORIENTED_EDGE ( 'NONE', *, *, #3942, .T. ) ; +#10854 = ORIENTED_EDGE ( 'NONE', *, *, #10776, .T. ) ; +#10855 = ORIENTED_EDGE ( 'NONE', *, *, #10597, .F. ) ; +#10856 = ORIENTED_EDGE ( 'NONE', *, *, #15171, .T. ) ; +#10857 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, -0.9499999999999990700 ) ) ; +#10858 = EDGE_CURVE ( 'NONE', #7710, #15716, #8730, .T. ) ; +#10859 = ORIENTED_EDGE ( 'NONE', *, *, #9233, .T. ) ; +#10860 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7310 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7962, #7800, #10270 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#10861 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#10862 = CARTESIAN_POINT ( 'NONE', ( 7.583777056305526900, 3.134883614495199500, 9.044446300443228300 ) ) ; +#10863 = LINE ( 'NONE', #10467, #11610 ) ; +#10864 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #10032 ) ) ; +#10865 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000023800, 0.8000000000000000400, 2.050000000000001600 ) ) ; +#10866 = LINE ( 'NONE', #1063, #552 ) ; +#10867 = ORIENTED_EDGE ( 'NONE', *, *, #1340, .F. ) ; +#10868 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.3999999999999999700, 3.550000000000001200 ) ) ; +#10869 = EDGE_LOOP ( 'NONE', ( #13150, #15595, #5038, #8677 ) ) ; +#10870 = EDGE_CURVE ( 'NONE', #5885, #1850, #2219, .T. ) ; +#10871 = ORIENTED_EDGE ( 'NONE', *, *, #1473, .F. ) ; +#10872 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 10.00000000000000000 ) ) ; +#10873 = ORIENTED_EDGE ( 'NONE', *, *, #7344, .T. ) ; +#10874 = ORIENTED_EDGE ( 'NONE', *, *, #8468, .T. ) ; +#10875 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 1.600000000000000800 ) ) ; +#10876 = VECTOR ( 'NONE', #967, 1000.000000000000000 ) ; +#10877 = LINE ( 'NONE', #13496, #5556 ) ; +#10878 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10879 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 0.5500000000000010400 ) ) ; +#10880 = VECTOR ( 'NONE', #9925, 1000.000000000000000 ) ; +#10881 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10882 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10883 = STYLED_ITEM ( 'NONE', ( #15376 ), #8166 ) ; +#10884 = CLOSED_SHELL ( 'NONE', ( #6493, #12554, #318, #3878, #12794, #4582 ) ) ; +#10885 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.8000000000000000400, -2.449999999999997500 ) ) ; +#10886 = ADVANCED_FACE ( 'NONE', ( #7207 ), #11315, .F. ) ; +#10887 = EDGE_LOOP ( 'NONE', ( #12433, #13614, #4937, #5837 ) ) ; +#10888 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#10889 = VERTEX_POINT ( 'NONE', #8939 ) ; +#10890 = PLANE ( 'NONE', #6676 ) ; +#10891 = CARTESIAN_POINT ( 'NONE', ( -7.611888831344178800, 3.206844258255254800, -3.047458334292941100 ) ) ; +#10892 = FACE_OUTER_BOUND ( 'NONE', #12823, .T. ) ; +#10893 = CYLINDRICAL_SURFACE ( 'NONE', #844, 0.5000000000000004400 ) ; +#10894 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10895 = VECTOR ( 'NONE', #3551, 1000.000000000000000 ) ; +#10896 = VERTEX_POINT ( 'NONE', #5305 ) ; +#10897 = LINE ( 'NONE', #6306, #12786 ) ; +#10898 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999905500, 0.4000000000000000200, -0.3499999999999989800 ) ) ; +#10899 = AXIS2_PLACEMENT_3D ( 'NONE', #9098, #3057, #4126 ) ; +#10900 = LINE ( 'NONE', #15353, #13743 ) ; +#10901 = ORIENTED_EDGE ( 'NONE', *, *, #12138, .T. ) ; +#10902 = PLANE ( 'NONE', #15510 ) ; +#10903 = EDGE_CURVE ( 'NONE', #6435, #12795, #2411, .T. ) ; +#10904 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 4.874999999999999100 ) ) ; +#10905 = ORIENTED_EDGE ( 'NONE', *, *, #14164, .T. ) ; +#10906 = EDGE_CURVE ( 'NONE', #8257, #14686, #5683, .T. ) ; +#10907 = CARTESIAN_POINT ( 'NONE', ( -7.593628917235418100, 3.124016485703915400, 9.057242544895640200 ) ) ; +#10908 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#10909 = ORIENTED_EDGE ( 'NONE', *, *, #9525, .T. ) ; +#10910 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10911 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 8.650000000000000400 ) ) ; +#10912 = VECTOR ( 'NONE', #9619, 1000.000000000000000 ) ; +#10913 = VECTOR ( 'NONE', #6525, 1000.000000000000000 ) ; +#10914 = VECTOR ( 'NONE', #8604, 1000.000000000000000 ) ; +#10915 = AXIS2_PLACEMENT_3D ( 'NONE', #13662, #6555, #10104 ) ; +#10916 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#10917 = SURFACE_STYLE_FILL_AREA ( #14142 ) ; +#10918 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.3999999999999999700, 2.549999999999999800 ) ) ; +#10919 = ORIENTED_EDGE ( 'NONE', *, *, #6979, .F. ) ; +#10920 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.4000000000000000200, 2.949999999999999700 ) ) ; +#10921 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 2.952720810173285400E-015 ) ) ; +#10922 = VERTEX_POINT ( 'NONE', #2841 ) ; +#10923 = CARTESIAN_POINT ( 'NONE', ( 7.573037331497397800, 3.147982895189703500, 9.003639365022394300 ) ) ; +#10924 = EDGE_CURVE ( 'NONE', #2673, #7160, #8169, .T. ) ; +#10925 = FACE_OUTER_BOUND ( 'NONE', #11876, .T. ) ; +#10926 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#10927 = FACE_OUTER_BOUND ( 'NONE', #164, .T. ) ; +#10928 = DIRECTION ( 'NONE', ( -1.807003620809173900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10929 = ADVANCED_FACE ( 'NONE', ( #5868 ), #5463, .T. ) ; +#10930 = AXIS2_PLACEMENT_3D ( 'NONE', #14422, #8378, #4797 ) ; +#10931 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 1.637941840314110200, 2.949999999999999700 ) ) ; +#10932 = LINE ( 'NONE', #14985, #10545 ) ; +#10933 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 21.10000000000000100 ) ) ; +#10934 = EDGE_CURVE ( 'NONE', #14561, #6653, #137, .T. ) ; +#10935 = EDGE_LOOP ( 'NONE', ( #9633, #610, #12196, #15597 ) ) ; +#10936 = AXIS2_PLACEMENT_3D ( 'NONE', #3096, #5706, #4262 ) ; +#10937 = ORIENTED_EDGE ( 'NONE', *, *, #15062, .F. ) ; +#10938 = AXIS2_PLACEMENT_3D ( 'NONE', #2165, #5658, #7001 ) ; +#10939 = PLANE ( 'NONE', #8824 ) ; +#10940 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000008900, 0.0000000000000000000, 5.825000000000001100 ) ) ; +#10941 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 1.637941840314110200, 4.049999999999999800 ) ) ; +#10942 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 7.325000000000002000 ) ) ; +#10943 = LINE ( 'NONE', #10953, #13987 ) ; +#10944 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000020300, 0.4000000000000000200, 3.550000000000002900 ) ) ; +#10945 = EDGE_LOOP ( 'NONE', ( #5551, #2267, #15468, #6760 ) ) ; +#10946 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#10947 = LINE ( 'NONE', #4733, #13977 ) ; +#10948 = EDGE_CURVE ( 'NONE', #8015, #11584, #12697, .T. ) ; +#10949 = DIRECTION ( 'NONE', ( 1.000000000000000000, 4.336808689942006700E-015, 0.0000000000000000000 ) ) ; +#10950 = EDGE_LOOP ( 'NONE', ( #12740, #2451, #12397, #7526 ) ) ; +#10951 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, -15.05858178898088800, -6.100000000000000500 ) ) ; +#10953 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#10952 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#10954 = ORIENTED_EDGE ( 'NONE', *, *, #10373, .T. ) ; +#10955 = EDGE_CURVE ( 'NONE', #8035, #10116, #14609, .T. ) ; +#10956 = FACE_OUTER_BOUND ( 'NONE', #11875, .T. ) ; +#10957 = EDGE_LOOP ( 'NONE', ( #7736, #11991, #1217, #13903 ) ) ; +#10958 = ORIENTED_EDGE ( 'NONE', *, *, #832, .T. ) ; +#10959 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 1.875000000000000000 ) ) ; +#10960 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#10961 = ORIENTED_EDGE ( 'NONE', *, *, #4630, .F. ) ; +#10962 = VECTOR ( 'NONE', #13197, 1000.000000000000000 ) ; +#10963 = LINE ( 'NONE', #500, #7741 ) ; +#10964 = ORIENTED_EDGE ( 'NONE', *, *, #12356, .T. ) ; +#10965 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10966 = ADVANCED_FACE ( 'NONE', ( #14250 ), #10147, .F. ) ; +#10967 = VERTEX_POINT ( 'NONE', #12569 ) ; +#10968 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 8.049999999999995400 ) ) ; +#10969 = EDGE_CURVE ( 'NONE', #1469, #13049, #7404, .T. ) ; +#10970 = ORIENTED_EDGE ( 'NONE', *, *, #6070, .F. ) ; +#10971 = SURFACE_STYLE_USAGE ( .BOTH. , #6086 ) ; +#10972 = ORIENTED_EDGE ( 'NONE', *, *, #1640, .F. ) ; +#10973 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000000400, 3.049999999999999800, 9.082928932188135500 ) ) ; +#10974 = VECTOR ( 'NONE', #13042, 1000.000000000000000 ) ; +#10975 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10976 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 1.637941840314110200, 4.750000000000000000 ) ) ; +#10977 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999952400, 0.0000000000000000000, 4.150000000000001200 ) ) ; +#10978 = AXIS2_PLACEMENT_3D ( 'NONE', #14037, #6715, #445 ) ; +#10979 = ORIENTED_EDGE ( 'NONE', *, *, #5066, .F. ) ; +#10980 = ADVANCED_FACE ( 'NONE', ( #15536 ), #12627, .F. ) ; +#10981 = AXIS2_PLACEMENT_3D ( 'NONE', #11256, #9918, #3905 ) ; +#10982 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, 6.550000000000001600 ) ) ; +#10983 = VECTOR ( 'NONE', #1479, 1000.000000000000000 ) ; +#10984 = ORIENTED_EDGE ( 'NONE', *, *, #14604, .F. ) ; +#10985 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.3999999999999999700, 1.850000000000000100 ) ) ; +#10986 = MANIFOLD_SOLID_BREP ( 'LPattern1[14]', #14248 ) ; +#10987 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#10988 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.3999999999999999700, 3.649999999999999500 ) ) ; +#10989 = VECTOR ( 'NONE', #7023, 1000.000000000000000 ) ; +#10990 = FACE_OUTER_BOUND ( 'NONE', #15250, .T. ) ; +#10991 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#10992 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 2.825000000000001100 ) ) ; +#10993 = EDGE_CURVE ( 'NONE', #9489, #8380, #10218, .T. ) ; +#10994 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#10995 = ADVANCED_FACE ( 'NONE', ( #14229 ), #2785, .F. ) ; +#10996 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#10997 = EDGE_CURVE ( 'NONE', #12815, #14300, #11370, .T. ) ; +#10998 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#10999 = FACE_OUTER_BOUND ( 'NONE', #3309, .T. ) ; +#11000 = ORIENTED_EDGE ( 'NONE', *, *, #15129, .F. ) ; +#11001 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.4000000000000000200, 2.949999999999999700 ) ) ; +#11002 = ADVANCED_FACE ( 'NONE', ( #12491 ), #6753, .T. ) ; +#11003 = LINE ( 'NONE', #13117, #12878 ) ; +#11004 = VECTOR ( 'NONE', #13156, 1000.000000000000000 ) ; +#11005 = AXIS2_PLACEMENT_3D ( 'NONE', #26, #13204, #1126 ) ; +#11007 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 16.60000000000000100 ) ) ; +#11006 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11008 = ORIENTED_EDGE ( 'NONE', *, *, #2069, .T. ) ; +#11009 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#11010 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#11011 = EDGE_LOOP ( 'NONE', ( #6791 ) ) ; +#11012 = VECTOR ( 'NONE', #1611, 1000.000000000000000 ) ; +#11013 = ORIENTED_EDGE ( 'NONE', *, *, #5589, .T. ) ; +#11014 = EDGE_CURVE ( 'NONE', #3203, #4283, #12874, .T. ) ; +#11015 = DIRECTION ( 'NONE', ( -5.478074134663594500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11016 = VECTOR ( 'NONE', #13785, 1000.000000000000000 ) ; +#11017 = VECTOR ( 'NONE', #9813, 1000.000000000000000 ) ; +#11018 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#11019 = FILL_AREA_STYLE_COLOUR ( '', #1615 ) ; +#11020 = AXIS2_PLACEMENT_3D ( 'NONE', #1986, #10569, #862 ) ; +#11021 = VERTEX_POINT ( 'NONE', #4291 ) ; +#11022 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000020600, 0.4000000000000000200, 3.549999999999999400 ) ) ; +#11023 = VECTOR ( 'NONE', #275, 1000.000000000000000 ) ; +#11024 = ORIENTED_EDGE ( 'NONE', *, *, #10732, .F. ) ; +#11025 = ORIENTED_EDGE ( 'NONE', *, *, #1470, .F. ) ; +#11026 = VECTOR ( 'NONE', #4693, 1000.000000000000000 ) ; +#11027 = LINE ( 'NONE', #6856, #14070 ) ; +#11028 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11029 = VERTEX_POINT ( 'NONE', #655 ) ; +#11030 = PLANE ( 'NONE', #11949 ) ; +#11031 = EDGE_CURVE ( 'NONE', #3348, #6669, #7776, .T. ) ; +#11032 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11034 = ORIENTED_EDGE ( 'NONE', *, *, #7435, .T. ) ; +#11033 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11035 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999983700, 0.4000000000000000200, 7.150000000000000400 ) ) ; +#11036 = ORIENTED_EDGE ( 'NONE', *, *, #9196, .F. ) ; +#11037 = ORIENTED_EDGE ( 'NONE', *, *, #10229, .T. ) ; +#11038 = ADVANCED_FACE ( 'NONE', ( #5285 ), #3269, .F. ) ; +#11039 = VERTEX_POINT ( 'NONE', #6859 ) ; +#11040 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#11041 = ORIENTED_EDGE ( 'NONE', *, *, #4804, .F. ) ; +#11042 = EDGE_CURVE ( 'NONE', #6876, #2964, #7390, .T. ) ; +#11043 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.349999999999998800, -2.780000000000002900 ) ) ; +#11044 = VECTOR ( 'NONE', #13284, 1000.000000000000000 ) ; +#11045 = LINE ( 'NONE', #11884, #11416 ) ; +#11046 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3172 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1339, #10994, #14757 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11047 = PLANE ( 'NONE', #9247 ) ; +#11048 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11049 = ORIENTED_EDGE ( 'NONE', *, *, #13664, .F. ) ; +#11050 = VERTEX_POINT ( 'NONE', #14240 ) ; +#11051 = ORIENTED_EDGE ( 'NONE', *, *, #6531, .T. ) ; +#11052 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, 8.050000000000000700 ) ) ; +#11053 = ADVANCED_FACE ( 'NONE', ( #15357 ), #9255, .T. ) ; +#11054 = VERTEX_POINT ( 'NONE', #4400 ) ; +#11055 = ORIENTED_EDGE ( 'NONE', *, *, #5655, .F. ) ; +#11056 = EDGE_CURVE ( 'NONE', #15534, #2437, #14986, .T. ) ; +#11057 = EDGE_CURVE ( 'NONE', #12131, #12615, #8536, .T. ) ; +#11058 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11059 = LINE ( 'NONE', #13198, #4010 ) ; +#11060 = FACE_OUTER_BOUND ( 'NONE', #2831, .T. ) ; +#11061 = VECTOR ( 'NONE', #10610, 1000.000000000000000 ) ; +#11062 = ORIENTED_EDGE ( 'NONE', *, *, #14708, .F. ) ; +#11063 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.7000000000000009500, -9.600000000000001400 ) ) ; +#11064 = ORIENTED_EDGE ( 'NONE', *, *, #11296, .F. ) ; +#11065 = AXIS2_PLACEMENT_3D ( 'NONE', #14691, #3683, #7423 ) ; +#11066 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11067 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.149999999999999500, 8.990000000000002000 ) ) ; +#11068 = ORIENTED_EDGE ( 'NONE', *, *, #3030, .F. ) ; +#11069 = ADVANCED_FACE ( 'NONE', ( #10999, #4893, #9289, #7012, #3751, #10607, #9669, #4525, #15164, #8154 ), #12934, .T. ) ; +#11070 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.4000000000000000200, 8.650000000000000400 ) ) ; +#11071 = AXIS2_PLACEMENT_3D ( 'NONE', #6228, #286, #7507 ) ; +#11072 = ORIENTED_EDGE ( 'NONE', *, *, #11291, .F. ) ; +#11074 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#11073 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11075 = VECTOR ( 'NONE', #7683, 1000.000000000000000 ) ; +#11076 = LINE ( 'NONE', #1412, #5167 ) ; +#11077 = LINE ( 'NONE', #13483, #2669 ) ; +#11078 = FACE_OUTER_BOUND ( 'NONE', #4712, .T. ) ; +#11079 = LINE ( 'NONE', #12407, #5558 ) ; +#11080 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999991400, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#11081 = ADVANCED_FACE ( 'NONE', ( #1262, #2035 ), #14189, .T. ) ; +#11082 = ORIENTED_EDGE ( 'NONE', *, *, #8736, .F. ) ; +#11083 = EDGE_CURVE ( 'NONE', #1229, #1108, #2977, .T. ) ; +#11084 = ORIENTED_EDGE ( 'NONE', *, *, #2113, .F. ) ; +#11085 = ORIENTED_EDGE ( 'NONE', *, *, #4152, .T. ) ; +#11086 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, -0.9499999999999990700 ) ) ; +#11087 = EDGE_CURVE ( 'NONE', #4090, #15557, #8717, .T. ) ; +#11088 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#11089 = VECTOR ( 'NONE', #2822, 1000.000000000000000 ) ; +#11090 = FILL_AREA_STYLE_COLOUR ( '', #14651 ) ; +#11091 = LINE ( 'NONE', #7014, #13367 ) ; +#11092 = LINE ( 'NONE', #7963, #4426 ) ; +#11093 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#11094 = ORIENTED_EDGE ( 'NONE', *, *, #3212, .T. ) ; +#11095 = LINE ( 'NONE', #680, #5571 ) ; +#11096 = VECTOR ( 'NONE', #11172, 1000.000000000000000 ) ; +#11097 = LINE ( 'NONE', #13307, #1747 ) ; +#11098 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11099 = AXIS2_PLACEMENT_3D ( 'NONE', #13503, #14675, #6240 ) ; +#11100 = EDGE_LOOP ( 'NONE', ( #1396, #443, #1681, #205 ) ) ; +#11101 = ORIENTED_EDGE ( 'NONE', *, *, #9070, .F. ) ; +#11102 = FILL_AREA_STYLE ('',( #11144 ) ) ; +#11103 = EDGE_LOOP ( 'NONE', ( #15081, #8116, #10300, #2845 ) ) ; +#11104 = ORIENTED_EDGE ( 'NONE', *, *, #1722, .F. ) ; +#11105 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 2.050000000000001600 ) ) ; +#11106 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#11107 = LINE ( 'NONE', #11688, #13960 ) ; +#11108 = LINE ( 'NONE', #9766, #619 ) ; +#11109 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#11110 = EDGE_CURVE ( 'NONE', #10063, #2645, #6061, .T. ) ; +#11111 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, -0.9499999999999990700 ) ) ; +#11112 = EDGE_CURVE ( 'NONE', #2110, #5532, #13257, .T. ) ; +#11113 = LINE ( 'NONE', #6547, #14919 ) ; +#11114 = PLANE ( 'NONE', #11897 ) ; +#11115 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999936400, 0.4000000000000000200, 2.649999999999999500 ) ) ; +#11116 = ORIENTED_EDGE ( 'NONE', *, *, #8633, .F. ) ; +#11117 = FACE_OUTER_BOUND ( 'NONE', #376, .T. ) ; +#11118 = ADVANCED_FACE ( 'NONE', ( #11915 ), #11619, .T. ) ; +#11119 = CARTESIAN_POINT ( 'NONE', ( -7.850000000000001400, 3.050000000000000700, 9.082928932188135500 ) ) ; +#11120 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 9.550000000000000700 ) ) ; +#11121 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 2.050000000000001600 ) ) ; +#11122 = VERTEX_POINT ( 'NONE', #5677 ) ; +#11123 = ORIENTED_EDGE ( 'NONE', *, *, #11700, .F. ) ; +#11124 = EDGE_CURVE ( 'NONE', #4376, #7050, #6437, .T. ) ; +#11125 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000001200, -3.079999999999999200 ) ) ; +#11126 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11127 = ADVANCED_FACE ( 'NONE', ( #2395 ), #1643, .F. ) ; +#11128 = ORIENTED_EDGE ( 'NONE', *, *, #1043, .T. ) ; +#11129 = FACE_OUTER_BOUND ( 'NONE', #2357, .T. ) ; +#11130 = ORIENTED_EDGE ( 'NONE', *, *, #5989, .F. ) ; +#11131 = ORIENTED_EDGE ( 'NONE', *, *, #2266, .F. ) ; +#11132 = EDGE_CURVE ( 'NONE', #9378, #7269, #8329, .T. ) ; +#11133 = EDGE_LOOP ( 'NONE', ( #15094, #1405, #855, #8406 ) ) ; +#11134 = LINE ( 'NONE', #7859, #7153 ) ; +#11135 = LINE ( 'NONE', #15191, #1582 ) ; +#11136 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, -2.899999999999999900 ) ) ; +#11137 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11138 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, -15.05858178898088800, -4.000000000000000000 ) ) ; +#11139 = PLANE ( 'NONE', #2398 ) ; +#11140 = ORIENTED_EDGE ( 'NONE', *, *, #1690, .T. ) ; +#11141 = ORIENTED_EDGE ( 'NONE', *, *, #9969, .T. ) ; +#11142 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#11143 = VERTEX_POINT ( 'NONE', #8393 ) ; +#11144 = FILL_AREA_STYLE_COLOUR ( '', #10507 ) ; +#11145 = ORIENTED_EDGE ( 'NONE', *, *, #9707, .F. ) ; +#11146 = ADVANCED_FACE ( 'NONE', ( #6821 ), #4704, .F. ) ; +#11147 = VECTOR ( 'NONE', #4840, 1000.000000000000000 ) ; +#11148 = ORIENTED_EDGE ( 'NONE', *, *, #10547, .F. ) ; +#11149 = EDGE_CURVE ( 'NONE', #2994, #1142, #14596, .T. ) ; +#11150 = AXIS2_PLACEMENT_3D ( 'NONE', #6592, #8940, #1612 ) ; +#11151 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 1.149999999999999900 ) ) ; +#11152 = ORIENTED_EDGE ( 'NONE', *, *, #4093, .T. ) ; +#11153 = VECTOR ( 'NONE', #6050, 1000.000000000000000 ) ; +#11154 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11155 = VERTEX_POINT ( 'NONE', #2134 ) ; +#11156 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#11157 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11158 = EDGE_CURVE ( 'NONE', #6784, #5622, #13845, .T. ) ; +#11159 = AXIS2_PLACEMENT_3D ( 'NONE', #7200, #7102, #2321 ) ; +#11160 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#11161 = CARTESIAN_POINT ( 'NONE', ( 7.627408552845516900, 3.076234407614293800, -2.879999999999999000 ) ) ; +#11162 = EDGE_LOOP ( 'NONE', ( #7871, #10874, #13986, #12057 ) ) ; +#11163 = FACE_OUTER_BOUND ( 'NONE', #940, .T. ) ; +#11164 = ORIENTED_EDGE ( 'NONE', *, *, #4407, .T. ) ; +#11165 = VECTOR ( 'NONE', #656, 1000.000000000000000 ) ; +#11166 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 2.649999999999999500 ) ) ; +#11167 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, 8.050000000000000700 ) ) ; +#11168 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#11169 = EDGE_CURVE ( 'NONE', #1994, #12181, #2789, .T. ) ; +#11170 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#11171 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11172 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#11173 = VECTOR ( 'NONE', #6055, 1000.000000000000000 ) ; +#11174 = EDGE_LOOP ( 'NONE', ( #6839, #1528, #4597, #13037, #15193, #13219 ) ) ; +#11175 = MANIFOLD_SOLID_BREP ( 'LPattern1[7]', #4338 ) ; +#11176 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 1.149999999999999900 ) ) ; +#11177 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#11178 = FACE_OUTER_BOUND ( 'NONE', #15358, .T. ) ; +#11179 = CIRCLE ( 'NONE', #3836, 0.2749999999999991900 ) ; +#11180 = AXIS2_PLACEMENT_3D ( 'NONE', #4461, #10463, #9407 ) ; +#11181 = ORIENTED_EDGE ( 'NONE', *, *, #1298, .F. ) ; +#11182 = AXIS2_PLACEMENT_3D ( 'NONE', #4441, #10552, #8219 ) ; +#11183 = PLANE ( 'NONE', #10263 ) ; +#11184 = VERTEX_POINT ( 'NONE', #9496 ) ; +#11185 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#11186 = ORIENTED_EDGE ( 'NONE', *, *, #9624, .T. ) ; +#11187 = LINE ( 'NONE', #12043, #15004 ) ; +#11188 = PLANE ( 'NONE', #4698 ) ; +#11189 = VERTEX_POINT ( 'NONE', #7021 ) ; +#11190 = EDGE_CURVE ( 'NONE', #4771, #870, #13452, .T. ) ; +#11191 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11192 = ADVANCED_FACE ( 'NONE', ( #15345 ), #9603, .T. ) ; +#11193 = LINE ( 'NONE', #9224, #2225 ) ; +#11194 = VECTOR ( 'NONE', #1390, 1000.000000000000000 ) ; +#11195 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11196 = EDGE_CURVE ( 'NONE', #7264, #14169, #1060, .T. ) ; +#11197 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#11198 = CARTESIAN_POINT ( 'NONE', ( -7.581040100843952500, 3.317458334292941600, 9.146844258255256900 ) ) ; +#11199 = EDGE_CURVE ( 'NONE', #8600, #4661, #12105, .T. ) ; +#11200 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, 3.550000000000001200 ) ) ; +#11201 = VERTEX_POINT ( 'NONE', #5888 ) ; +#11202 = VECTOR ( 'NONE', #15724, 1000.000000000000000 ) ; +#11203 = ORIENTED_EDGE ( 'NONE', *, *, #8884, .T. ) ; +#11204 = AXIS2_PLACEMENT_3D ( 'NONE', #9842, #13126, #2157 ) ; +#11205 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.4000000000000000200, 1.149999999999999900 ) ) ; +#11206 = ORIENTED_EDGE ( 'NONE', *, *, #12775, .F. ) ; +#11207 = ADVANCED_FACE ( 'NONE', ( #2776 ), #14640, .F. ) ; +#11208 = DIRECTION ( 'NONE', ( 1.807003620809173900E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11209 = VECTOR ( 'NONE', #9698, 1000.000000000000000 ) ; +#11210 = FACE_OUTER_BOUND ( 'NONE', #12007, .T. ) ; +#11211 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11212 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#11213 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000020600, 0.4000000000000000200, 2.649999999999999500 ) ) ; +#11214 = VERTEX_POINT ( 'NONE', #6211 ) ; +#11215 = ORIENTED_EDGE ( 'NONE', *, *, #2590, .F. ) ; +#11216 = EDGE_CURVE ( 'NONE', #14169, #8916, #14583, .T. ) ; +#11217 = ORIENTED_EDGE ( 'NONE', *, *, #3293, .T. ) ; +#11218 = PLANE ( 'NONE', #8728 ) ; +#11219 = FACE_OUTER_BOUND ( 'NONE', #15508, .T. ) ; +#11220 = EDGE_LOOP ( 'NONE', ( #6514, #10662, #9126, #4799 ) ) ; +#11221 = AXIS2_PLACEMENT_3D ( 'NONE', #7691, #360, #6406 ) ; +#11222 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#11223 = ORIENTED_EDGE ( 'NONE', *, *, #3371, .F. ) ; +#11224 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#11225 = CARTESIAN_POINT ( 'NONE', ( -7.629277334261815600, 3.351999999999999400, 9.005530125675985400 ) ) ; +#11226 = ADVANCED_FACE ( 'NONE', ( #681 ), #7429, .F. ) ; +#11227 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000029100, 0.4000000000000000200, 0.5499999999999997100 ) ) ; +#11228 = VECTOR ( 'NONE', #3093, 1000.000000000000000 ) ; +#11229 = VECTOR ( 'NONE', #5350, 1000.000000000000000 ) ; +#11231 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 0.5500000000000010400 ) ) ; +#11230 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, 4.149999999999999500 ) ) ; +#11232 = EDGE_CURVE ( 'NONE', #2993, #14001, #13635, .T. ) ; +#11233 = AXIS2_PLACEMENT_3D ( 'NONE', #9232, #1911, #10434 ) ; +#11235 = VERTEX_POINT ( 'NONE', #14752 ) ; +#11234 = AXIS2_PLACEMENT_3D ( 'NONE', #543, #12675, #4125 ) ; +#11236 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999936400, 0.0000000000000000000, 2.650000000000001200 ) ) ; +#11237 = ORIENTED_EDGE ( 'NONE', *, *, #2752, .F. ) ; +#11238 = ORIENTED_EDGE ( 'NONE', *, *, #4004, .T. ) ; +#11239 = ORIENTED_EDGE ( 'NONE', *, *, #2421, .F. ) ; +#11240 = ORIENTED_EDGE ( 'NONE', *, *, #15332, .T. ) ; +#11241 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 1.637941840314110200, 4.049999999999999800 ) ) ; +#11242 = FACE_OUTER_BOUND ( 'NONE', #3285, .T. ) ; +#11243 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 0.5500000000000010400 ) ) ; +#11244 = EDGE_CURVE ( 'NONE', #6010, #2048, #10411, .T. ) ; +#11245 = SURFACE_SIDE_STYLE ('',( #10089 ) ) ; +#11246 = ORIENTED_EDGE ( 'NONE', *, *, #12030, .F. ) ; +#11247 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11248 = ORIENTED_EDGE ( 'NONE', *, *, #11696, .F. ) ; +#11249 = ORIENTED_EDGE ( 'NONE', *, *, #1449, .T. ) ; +#11250 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999905500, 0.4000000000000000200, 0.5500000000000001600 ) ) ; +#11251 = EDGE_CURVE ( 'NONE', #9223, #11437, #11543, .T. ) ; +#11252 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000009900, 0.8000000000000000400, 5.649999999999999500 ) ) ; +#11253 = ORIENTED_EDGE ( 'NONE', *, *, #11083, .F. ) ; +#11254 = AXIS2_PLACEMENT_3D ( 'NONE', #6154, #9601, #3567 ) ; +#11255 = ORIENTED_EDGE ( 'NONE', *, *, #7552, .F. ) ; +#11256 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#11257 = VECTOR ( 'NONE', #14943, 1000.000000000000000 ) ; +#11258 = LINE ( 'NONE', #7606, #7466 ) ; +#11259 = FACE_OUTER_BOUND ( 'NONE', #13402, .T. ) ; +#11260 = LINE ( 'NONE', #7664, #589 ) ; +#11261 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #7771, #7933, #5406, #8988, #15087, #492 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.0002388152348380240500, 0.0004776304696760481000 ), + .UNSPECIFIED. ) ; +#11262 = ORIENTED_EDGE ( 'NONE', *, *, #6825, .F. ) ; +#11263 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11264 = ORIENTED_EDGE ( 'NONE', *, *, #4878, .F. ) ; +#11265 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.195440985631455300E-016 ) ) ; +#11266 = EDGE_CURVE ( 'NONE', #13510, #1720, #6046, .T. ) ; +#11267 = EDGE_CURVE ( 'NONE', #9753, #66, #7377, .T. ) ; +#11268 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.4000000000000000200, 1.850000000000000100 ) ) ; +#11269 = ORIENTED_EDGE ( 'NONE', *, *, #10850, .T. ) ; +#11270 = PLANE ( 'NONE', #5808 ) ; +#11271 = LINE ( 'NONE', #9860, #2684 ) ; +#11272 = LINE ( 'NONE', #15233, #13159 ) ; +#11273 = FACE_OUTER_BOUND ( 'NONE', #563, .T. ) ; +#11274 = VECTOR ( 'NONE', #10098, 1000.000000000000000 ) ; +#11275 = LINE ( 'NONE', #13217, #8999 ) ; +#11276 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 0.5500000000000010400 ) ) ; +#11277 = ADVANCED_FACE ( 'NONE', ( #9655 ), #9857, .F. ) ; +#11278 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11279 = ORIENTED_EDGE ( 'NONE', *, *, #12170, .F. ) ; +#11280 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.3999999999999999700, 3.649999999999999500 ) ) ; +#11281 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#11282 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#11283 = ORIENTED_EDGE ( 'NONE', *, *, #2556, .T. ) ; +#11284 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11285 = ORIENTED_EDGE ( 'NONE', *, *, #1794, .F. ) ; +#11286 = VECTOR ( 'NONE', #14254, 1000.000000000000000 ) ; +#11287 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#11288 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.3999999999999999700, 3.649999999999999500 ) ) ; +#11289 = LINE ( 'NONE', #7703, #4993 ) ; +#11290 = ADVANCED_FACE ( 'NONE', ( #2024 ), #1280, .T. ) ; +#11291 = EDGE_CURVE ( 'NONE', #3418, #987, #8904, .T. ) ; +#11292 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#11293 = VERTEX_POINT ( 'NONE', #4913 ) ; +#11294 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 2.050000000000001600 ) ) ; +#11295 = VERTEX_POINT ( 'NONE', #2338 ) ; +#11296 = EDGE_CURVE ( 'NONE', #2506, #57, #8328, .T. ) ; +#11297 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11298 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11299 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#11300 = AXIS2_PLACEMENT_3D ( 'NONE', #4378, #15462, #11900 ) ; +#11301 = VECTOR ( 'NONE', #149, 1000.000000000000000 ) ; +#11302 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999952400, 0.4000000000000000200, 4.149999999999999500 ) ) ; +#11303 = VECTOR ( 'NONE', #5733, 1000.000000000000000 ) ; +#11304 = ADVANCED_FACE ( 'NONE', ( #14407 ), #3576, .F. ) ; +#11305 = LINE ( 'NONE', #10245, #14165 ) ; +#11306 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11307 = ORIENTED_EDGE ( 'NONE', *, *, #7252, .F. ) ; +#11308 = ORIENTED_EDGE ( 'NONE', *, *, #10254, .T. ) ; +#11309 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11310 = VERTEX_POINT ( 'NONE', #13469 ) ; +#11311 = STYLED_ITEM ( 'NONE', ( #10829 ), #1490 ) ; +#11312 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, -2.449999999999998800 ) ) ; +#11313 = EDGE_CURVE ( 'NONE', #10133, #2847, #1441, .T. ) ; +#11314 = VECTOR ( 'NONE', #1563, 1000.000000000000000 ) ; +#11315 = PLANE ( 'NONE', #7830 ) ; +#11316 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#11317 = ORIENTED_EDGE ( 'NONE', *, *, #14548, .T. ) ; +#11318 = LINE ( 'NONE', #8067, #13208 ) ; +#11319 = LINE ( 'NONE', #11778, #831 ) ; +#11320 = CARTESIAN_POINT ( 'NONE', ( 7.849999999999999600, 3.150000000000000800, -2.872928932188135900 ) ) ; +#11321 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.149999999999999900, 8.990000000000002000 ) ) ; +#11322 = ORIENTED_EDGE ( 'NONE', *, *, #9502, .T. ) ; +#11323 = AXIS2_PLACEMENT_3D ( 'NONE', #10819, #9758, #8606 ) ; +#11324 = VERTEX_POINT ( 'NONE', #372 ) ; +#11325 = VERTEX_POINT ( 'NONE', #8611 ) ; +#11326 = LINE ( 'NONE', #6768, #10181 ) ; +#11327 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, -1.674999999999998900 ) ) ; +#11328 = ORIENTED_EDGE ( 'NONE', *, *, #1057, .F. ) ; +#11329 = VERTEX_POINT ( 'NONE', #13368 ) ; +#11331 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, 0.5500000000000001600 ) ) ; +#11330 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 6.100000000000001400 ) ) ; +#11332 = EDGE_LOOP ( 'NONE', ( #13076, #3261, #12598, #10657 ) ) ; +#11333 = VECTOR ( 'NONE', #10500, 1000.000000000000000 ) ; +#11334 = LINE ( 'NONE', #15659, #14200 ) ; +#11335 = EDGE_CURVE ( 'NONE', #2048, #974, #2207, .T. ) ; +#11336 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11337 = ORIENTED_EDGE ( 'NONE', *, *, #2908, .T. ) ; +#11338 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 8.050000000000000700 ) ) ; +#11339 = VERTEX_POINT ( 'NONE', #10942 ) ; +#11340 = EDGE_CURVE ( 'NONE', #12831, #8373, #5080, .T. ) ; +#11341 = LINE ( 'NONE', #6193, #15141 ) ; +#11342 = VERTEX_POINT ( 'NONE', #13628 ) ; +#11343 = AXIS2_PLACEMENT_3D ( 'NONE', #7540, #6315, #8714 ) ; +#11344 = ORIENTED_EDGE ( 'NONE', *, *, #8295, .F. ) ; +#11345 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#11346 = LINE ( 'NONE', #14185, #1237 ) ; +#11347 = LINE ( 'NONE', #6994, #5829 ) ; +#11348 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, -0.3500000000000004800 ) ) ; +#11349 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#11350 = ORIENTED_EDGE ( 'NONE', *, *, #14777, .T. ) ; +#11351 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000014900, 0.4000000000000000200, 4.149999999999995900 ) ) ; +#11352 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 0.5500000000000010400 ) ) ; +#11353 = EDGE_CURVE ( 'NONE', #11503, #3601, #3737, .T. ) ; +#11354 = EDGE_CURVE ( 'NONE', #5618, #12617, #12865, .T. ) ; +#11355 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 8.650000000000000400 ) ) ; +#11356 = VECTOR ( 'NONE', #12133, 1000.000000000000000 ) ; +#11357 = VERTEX_POINT ( 'NONE', #2714 ) ; +#11358 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, -1.125000000000000700 ) ) ; +#11359 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#11360 = LINE ( 'NONE', #7374, #14400 ) ; +#11361 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.351999999999999400, 8.990000000000000200 ) ) ; +#11362 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11363 = ADVANCED_FACE ( 'NONE', ( #3168 ), #15014, .T. ) ; +#11364 = PLANE ( 'NONE', #3481 ) ; +#11365 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 1.325000000000001500 ) ) ; +#11366 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11367 = PLANE ( 'NONE', #4424 ) ; +#11368 = ADVANCED_FACE ( 'NONE', ( #12483 ), #5074, .F. ) ; +#11369 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 7.600000000000000500 ) ) ; +#11370 = LINE ( 'NONE', #12834, #3554 ) ; +#11371 = VERTEX_POINT ( 'NONE', #14914 ) ; +#11372 = LINE ( 'NONE', #15504, #3950 ) ; +#11373 = LINE ( 'NONE', #15584, #11004 ) ; +#11374 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 4.500000000000000900 ) ) ; +#11375 = EDGE_CURVE ( 'NONE', #1484, #10677, #5657, .T. ) ; +#11376 = ORIENTED_EDGE ( 'NONE', *, *, #12110, .F. ) ; +#11377 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11379 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -2.952720810173285400E-015 ) ) ; +#11378 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 0.5500000000000001600 ) ) ; +#11380 = EDGE_LOOP ( 'NONE', ( #5633, #11777, #11239, #6151, #12906, #5447 ) ) ; +#11381 = ORIENTED_EDGE ( 'NONE', *, *, #9780, .T. ) ; +#11382 = DIRECTION ( 'NONE', ( 9.035018104045869500E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11383 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11384 = VECTOR ( 'NONE', #7288, 1000.000000000000000 ) ; +#11385 = ORIENTED_EDGE ( 'NONE', *, *, #7409, .F. ) ; +#11386 = AXIS2_PLACEMENT_3D ( 'NONE', #6249, #1427, #6099 ) ; +#11387 = SURFACE_STYLE_FILL_AREA ( #10112 ) ; +#11388 = VECTOR ( 'NONE', #3119, 1000.000000000000000 ) ; +#11389 = AXIS2_PLACEMENT_3D ( 'NONE', #339, #7608, #440 ) ; +#11390 = ORIENTED_EDGE ( 'NONE', *, *, #1199, .F. ) ; +#11391 = FILL_AREA_STYLE_COLOUR ( '', #4317 ) ; +#11392 = FILL_AREA_STYLE_COLOUR ( '', #222 ) ; +#11393 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.4000000000000000200, 2.949999999999999700 ) ) ; +#11394 = AXIS2_PLACEMENT_3D ( 'NONE', #12894, #7992, #669 ) ; +#11395 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11396 = ORIENTED_EDGE ( 'NONE', *, *, #12264, .T. ) ; +#11397 = LINE ( 'NONE', #7544, #11023 ) ; +#11398 = ORIENTED_EDGE ( 'NONE', *, *, #7165, .F. ) ; +#11399 = PLANE ( 'NONE', #9085 ) ; +#11400 = EDGE_LOOP ( 'NONE', ( #6037, #9696, #10645, #11104 ) ) ; +#11401 = EDGE_CURVE ( 'NONE', #14762, #10470, #4882, .T. ) ; +#11402 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#11403 = EDGE_CURVE ( 'NONE', #11455, #6822, #9280, .T. ) ; +#11404 = FACE_OUTER_BOUND ( 'NONE', #10480, .T. ) ; +#11405 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.349999999999999600, 8.990000000000000200 ) ) ; +#11406 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11407 = VERTEX_POINT ( 'NONE', #14968 ) ; +#11408 = VERTEX_POINT ( 'NONE', #7584 ) ; +#11409 = ORIENTED_EDGE ( 'NONE', *, *, #12764, .F. ) ; +#11410 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11411 = ORIENTED_EDGE ( 'NONE', *, *, #6289, .T. ) ; +#11412 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11413 = ORIENTED_EDGE ( 'NONE', *, *, #1387, .T. ) ; +#11414 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11415 = VECTOR ( 'NONE', #15719, 1000.000000000000000 ) ; +#11416 = VECTOR ( 'NONE', #2096, 1000.000000000000000 ) ; +#11417 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 8.825000000000001100 ) ) ; +#11418 = ORIENTED_EDGE ( 'NONE', *, *, #9039, .F. ) ; +#11419 = EDGE_CURVE ( 'NONE', #595, #5435, #14031, .T. ) ; +#11420 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.0000000000000000000, 2.950000000000000200 ) ) ; +#11421 = ADVANCED_FACE ( 'NONE', ( #1252 ), #8753, .F. ) ; +#11422 = VERTEX_POINT ( 'NONE', #1435 ) ; +#11423 = ORIENTED_EDGE ( 'NONE', *, *, #12669, .T. ) ; +#11424 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11425 = CARTESIAN_POINT ( 'NONE', ( -6.050000000000001600, 3.149999999999999900, 7.690000000000001300 ) ) ; +#11426 = ORIENTED_EDGE ( 'NONE', *, *, #10372, .F. ) ; +#11427 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11428 = ORIENTED_EDGE ( 'NONE', *, *, #418, .T. ) ; +#11429 = CLOSED_SHELL ( 'NONE', ( #6995, #8581, #3142, #11127, #3525, #1362, #4171, #15109, #2579, #14076 ) ) ; +#11430 = DIRECTION ( 'NONE', ( 9.035018104045869500E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11431 = EDGE_CURVE ( 'NONE', #11214, #13049, #11730, .T. ) ; +#11432 = LINE ( 'NONE', #11923, #6892 ) ; +#11433 = VECTOR ( 'NONE', #2848, 1000.000000000000000 ) ; +#11434 = SURFACE_SIDE_STYLE ('',( #11387 ) ) ; +#11435 = ORIENTED_EDGE ( 'NONE', *, *, #13874, .F. ) ; +#11436 = ADVANCED_FACE ( 'NONE', ( #8146 ), #13742, .F. ) ; +#11437 = VERTEX_POINT ( 'NONE', #1588 ) ; +#11438 = EDGE_LOOP ( 'NONE', ( #12916, #9310, #3299, #261 ) ) ; +#11439 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#11440 = ADVANCED_FACE ( 'NONE', ( #10393 ), #2817, .F. ) ; +#11441 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11442 = EDGE_CURVE ( 'NONE', #611, #15534, #115, .T. ) ; +#11443 = ORIENTED_EDGE ( 'NONE', *, *, #2712, .F. ) ; +#11444 = LINE ( 'NONE', #146, #13763 ) ; +#11445 = VECTOR ( 'NONE', #11414, 1000.000000000000000 ) ; +#11446 = VECTOR ( 'NONE', #14316, 1000.000000000000000 ) ; +#11447 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000014900, 0.8000000000000000400, 5.049999999999997200 ) ) ; +#11448 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 7.325000000000002000 ) ) ; +#11449 = VECTOR ( 'NONE', #11362, 1000.000000000000000 ) ; +#11450 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.3999999999999999700, 3.649999999999999500 ) ) ; +#11451 = ORIENTED_EDGE ( 'NONE', *, *, #3442, .F. ) ; +#11452 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000009200, 0.7999999999999968200, -8.414180158335024100E-017 ) ) ; +#11453 = EDGE_CURVE ( 'NONE', #8399, #8399, #6231, .T. ) ; +#11454 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 7.875000000000000000 ) ) ; +#11455 = VERTEX_POINT ( 'NONE', #1645 ) ; +#11456 = VERTEX_POINT ( 'NONE', #13793 ) ; +#11457 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000002500, 0.8000000000000000400, -4.500000000000000000 ) ) ; +#11458 = VECTOR ( 'NONE', #2401, 1000.000000000000000 ) ; +#11459 = LINE ( 'NONE', #528, #6157 ) ; +#11460 = LINE ( 'NONE', #3787, #4994 ) ; +#11461 = CARTESIAN_POINT ( 'NONE', ( 7.628752156770259400, 3.349999999999999600, 9.005530029177631200 ) ) ; +#11462 = PLANE ( 'NONE', #5309 ) ; +#11463 = VECTOR ( 'NONE', #8902, 1000.000000000000000 ) ; +#11464 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000009600, 0.4000000000000000200, 6.550000000000000700 ) ) ; +#11465 = VECTOR ( 'NONE', #3580, 1000.000000000000000 ) ; +#11466 = ORIENTED_EDGE ( 'NONE', *, *, #7591, .T. ) ; +#11467 = VERTEX_POINT ( 'NONE', #10178 ) ; +#11468 = EDGE_CURVE ( 'NONE', #10094, #2245, #14773, .T. ) ; +#11469 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11470 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11471 = EDGE_LOOP ( 'NONE', ( #7938, #13936, #4480, #10937 ) ) ; +#11472 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11473 = ORIENTED_EDGE ( 'NONE', *, *, #4533, .T. ) ; +#11474 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 0.5500000000000001600 ) ) ; +#11475 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000007100, 0.8000000000000000400, 6.550000000000000700 ) ) ; +#11476 = FACE_OUTER_BOUND ( 'NONE', #14707, .T. ) ; +#11477 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11478 = VECTOR ( 'NONE', #14495, 1000.000000000000000 ) ; +#11479 = AXIS2_PLACEMENT_3D ( 'NONE', #12341, #6468, #11402 ) ; +#11480 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11481 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 8.050000000000000700 ) ) ; +#11482 = LINE ( 'NONE', #1570, #8265 ) ; +#11483 = CARTESIAN_POINT ( 'NONE', ( -7.565520281879283700, 3.147980000000000000, 9.015703978347822600 ) ) ; +#11484 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#11485 = ORIENTED_EDGE ( 'NONE', *, *, #11603, .T. ) ; +#11486 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999983700, 0.0000000000000000000, 7.150000000000000400 ) ) ; +#11487 = VECTOR ( 'NONE', #4640, 1000.000000000000000 ) ; +#11488 = LINE ( 'NONE', #4460, #1007 ) ; +#11489 = EDGE_CURVE ( 'NONE', #11184, #2818, #5258, .T. ) ; +#11490 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000035500, 0.8000000000000000400, -1.674999999999999400 ) ) ; +#11491 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, -2.449999999999998800 ) ) ; +#11492 = EDGE_CURVE ( 'NONE', #6683, #14762, #2370, .T. ) ; +#11493 = CYLINDRICAL_SURFACE ( 'NONE', #12530, 0.2749999999999991900 ) ; +#11494 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.7000000000000009500, -9.600000000000001400 ) ) ; +#11495 = DIRECTION ( 'NONE', ( -6.195440985631453300E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11496 = ORIENTED_EDGE ( 'NONE', *, *, #9576, .F. ) ; +#11497 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11498 = ORIENTED_EDGE ( 'NONE', *, *, #1450, .T. ) ; +#11499 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11500 = FILL_AREA_STYLE ('',( #6686 ) ) ; +#11501 = ORIENTED_EDGE ( 'NONE', *, *, #8556, .T. ) ; +#11502 = VERTEX_POINT ( 'NONE', #4325 ) ; +#11503 = VERTEX_POINT ( 'NONE', #12818 ) ; +#11504 = ORIENTED_EDGE ( 'NONE', *, *, #1181, .F. ) ; +#11505 = VECTOR ( 'NONE', #11803, 1000.000000000000000 ) ; +#11506 = LINE ( 'NONE', #9216, #2167 ) ; +#11507 = ORIENTED_EDGE ( 'NONE', *, *, #9839, .F. ) ; +#11508 = EDGE_CURVE ( 'NONE', #4971, #12448, #11535, .T. ) ; +#11509 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11510 = ADVANCED_FACE ( 'NONE', ( #7179 ), #12608, .F. ) ; +#11511 = VERTEX_POINT ( 'NONE', #6739 ) ; +#11512 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11513 = ORIENTED_EDGE ( 'NONE', *, *, #8863, .F. ) ; +#11514 = CARTESIAN_POINT ( 'NONE', ( -7.580976310729377900, 3.139222690360980100, -2.832198665876327400 ) ) ; +#11515 = SURFACE_SIDE_STYLE ('',( #12303 ) ) ; +#11516 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11517 = ORIENTED_EDGE ( 'NONE', *, *, #10019, .F. ) ; +#11518 = ADVANCED_FACE ( 'NONE', ( #6797 ), #471, .F. ) ; +#11519 = VECTOR ( 'NONE', #2530, 1000.000000000000000 ) ; +#11520 = ORIENTED_EDGE ( 'NONE', *, *, #267, .F. ) ; +#11521 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, -2.625000000000000400 ) ) ; +#11522 = ORIENTED_EDGE ( 'NONE', *, *, #1547, .T. ) ; +#11523 = EDGE_CURVE ( 'NONE', #10889, #13269, #7953, .T. ) ; +#11524 = ORIENTED_EDGE ( 'NONE', *, *, #7091, .F. ) ; +#11525 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, 7.150000000000000400 ) ) ; +#11526 = VECTOR ( 'NONE', #5460, 1000.000000000000000 ) ; +#11527 = COLOUR_RGB ( '',0.5019607843137254800, 0.5019607843137254800, 0.5019607843137254800 ) ; +#11528 = AXIS2_PLACEMENT_3D ( 'NONE', #12830, #10348, #3055 ) ; +#11529 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11530 = ORIENTED_EDGE ( 'NONE', *, *, #4965, .T. ) ; +#11531 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11532 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#11533 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11534 = VERTEX_POINT ( 'NONE', #1699 ) ; +#11535 = LINE ( 'NONE', #2874, #8319 ) ; +#11536 = VERTEX_POINT ( 'NONE', #2925 ) ; +#11537 = EDGE_CURVE ( 'NONE', #12689, #3698, #12672, .T. ) ; +#11538 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, -0.9499999999999990700 ) ) ; +#11539 = LINE ( 'NONE', #9265, #4518 ) ; +#11540 = VECTOR ( 'NONE', #2919, 1000.000000000000000 ) ; +#11541 = EDGE_CURVE ( 'NONE', #1732, #6650, #12469, .T. ) ; +#11542 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9718 ), #12344 ) ; +#11543 = LINE ( 'NONE', #13527, #3932 ) ; +#11544 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, -1.850000000000000500 ) ) ; +#11545 = CLOSED_SHELL ( 'NONE', ( #13493, #10483, #9067, #6366, #5963, #13902, #4811, #12366, #11518, #15180 ) ) ; +#11546 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 6.375000000000000900 ) ) ; +#11547 = VECTOR ( 'NONE', #8636, 1000.000000000000000 ) ; +#11548 = VECTOR ( 'NONE', #11551, 1000.000000000000000 ) ; +#11549 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.0000000000000000000, -10.00000000000000000 ) ) ; +#11550 = ORIENTED_EDGE ( 'NONE', *, *, #2228, .F. ) ; +#11551 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11552 = EDGE_CURVE ( 'NONE', #2820, #8029, #3530, .T. ) ; +#11553 = EDGE_CURVE ( 'NONE', #11536, #14207, #14960, .T. ) ; +#11554 = PLANE ( 'NONE', #11862 ) ; +#11555 = VERTEX_POINT ( 'NONE', #12709 ) ; +#11556 = ORIENTED_EDGE ( 'NONE', *, *, #6317, .T. ) ; +#11557 = LINE ( 'NONE', #3916, #14419 ) ; +#11558 = ORIENTED_EDGE ( 'NONE', *, *, #2953, .F. ) ; +#11559 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.7000000000000009500, -5.150000000000001200 ) ) ; +#11560 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11561 = FACE_OUTER_BOUND ( 'NONE', #14515, .T. ) ; +#11562 = FACE_OUTER_BOUND ( 'NONE', #3961, .T. ) ; +#11563 = CARTESIAN_POINT ( 'NONE', ( -7.565520379342617100, 3.149999999999999000, -2.806234407614295500 ) ) ; +#11564 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999876100, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#11565 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11566 = AXIS2_PLACEMENT_3D ( 'NONE', #10872, #3564, #14477 ) ; +#11567 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, -0.0000000000000000000, -3.350000000000000500 ) ) ; +#11568 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 0.5500000000000010400 ) ) ; +#11569 = ORIENTED_EDGE ( 'NONE', *, *, #11419, .T. ) ; +#11570 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.8000000000000000400, -4.500000000000000900 ) ) ; +#11571 = VECTOR ( 'NONE', #8443, 1000.000000000000000 ) ; +#11572 = ORIENTED_EDGE ( 'NONE', *, *, #13069, .T. ) ; +#11573 = ORIENTED_EDGE ( 'NONE', *, *, #11244, .T. ) ; +#11574 = DIRECTION ( 'NONE', ( -6.195440985631454300E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11575 = ORIENTED_EDGE ( 'NONE', *, *, #3848, .F. ) ; +#11576 = EDGE_CURVE ( 'NONE', #14933, #12250, #14394, .T. ) ; +#11577 = PLANE ( 'NONE', #4053 ) ; +#11578 = LINE ( 'NONE', #15718, #8953 ) ; +#11579 = LINE ( 'NONE', #863, #534 ) ; +#11580 = CARTESIAN_POINT ( 'NONE', ( -7.850000000000001400, 3.050000000000000700, 0.0000000000000000000 ) ) ; +#11582 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#11581 = PLANE ( 'NONE', #13330 ) ; +#11583 = EDGE_CURVE ( 'NONE', #12727, #11325, #1818, .T. ) ; +#11584 = VERTEX_POINT ( 'NONE', #11546 ) ; +#11585 = ORIENTED_EDGE ( 'NONE', *, *, #12340, .F. ) ; +#11586 = ADVANCED_FACE ( 'NONE', ( #6410 ), #4269, .F. ) ; +#11587 = ORIENTED_EDGE ( 'NONE', *, *, #5017, .T. ) ; +#11588 = VECTOR ( 'NONE', #6957, 1000.000000000000000 ) ; +#11589 = ORIENTED_EDGE ( 'NONE', *, *, #4643, .F. ) ; +#11590 = ORIENTED_EDGE ( 'NONE', *, *, #11335, .T. ) ; +#11591 = ADVANCED_FACE ( 'NONE', ( #11163 ), #15469, .T. ) ; +#11592 = LINE ( 'NONE', #8206, #13500 ) ; +#11593 = VECTOR ( 'NONE', #15647, 1000.000000000000000 ) ; +#11594 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11595 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, -15.05858178898088800, -5.150000000000001200 ) ) ; +#11596 = CARTESIAN_POINT ( 'NONE', ( 7.580976310729377900, 3.317668071082943400, 9.146595997628987000 ) ) ; +#11597 = EDGE_LOOP ( 'NONE', ( #4998, #10854, #13378, #11237, #2176, #9270 ) ) ; +#11598 = AXIS2_PLACEMENT_3D ( 'NONE', #11481, #2909, #4137 ) ; +#11599 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#11600 = EDGE_LOOP ( 'NONE', ( #7928, #6796, #11145, #6230 ) ) ; +#11601 = ORIENTED_EDGE ( 'NONE', *, *, #8003, .F. ) ; +#11602 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11603 = EDGE_CURVE ( 'NONE', #5413, #8591, #13235, .T. ) ; +#11604 = ORIENTED_EDGE ( 'NONE', *, *, #14908, .T. ) ; +#11605 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000000700, 9.089999999999999900 ) ) ; +#11606 = EDGE_CURVE ( 'NONE', #15579, #14177, #1429, .T. ) ; +#11607 = ORIENTED_EDGE ( 'NONE', *, *, #2222, .T. ) ; +#11608 = VERTEX_POINT ( 'NONE', #10603 ) ; +#11609 = VECTOR ( 'NONE', #15752, 1000.000000000000000 ) ; +#11610 = VECTOR ( 'NONE', #10531, 1000.000000000000000 ) ; +#11611 = FACE_OUTER_BOUND ( 'NONE', #2583, .T. ) ; +#11612 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, 9.550000000000000700 ) ) ; +#11613 = AXIS2_PLACEMENT_3D ( 'NONE', #12705, #3993, #9079 ) ; +#11614 = VERTEX_POINT ( 'NONE', #12914 ) ; +#11615 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, -1.850000000000000500 ) ) ; +#11617 = ORIENTED_EDGE ( 'NONE', *, *, #6825, .T. ) ; +#11616 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11618 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#11619 = PLANE ( 'NONE', #7633 ) ; +#11620 = VERTEX_POINT ( 'NONE', #14322 ) ; +#11621 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#11622 = ORIENTED_EDGE ( 'NONE', *, *, #2812, .F. ) ; +#11623 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, -0.3500000000000013700 ) ) ; +#11624 = ORIENTED_EDGE ( 'NONE', *, *, #3329, .T. ) ; +#11625 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 1.149999999999999900 ) ) ; +#11626 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 7.150000000000000400 ) ) ; +#11627 = LINE ( 'NONE', #6656, #4776 ) ; +#11628 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#11629 = VECTOR ( 'NONE', #944, 1000.000000000000000 ) ; +#11630 = EDGE_CURVE ( 'NONE', #12370, #15565, #13621, .T. ) ; +#11631 = LINE ( 'NONE', #10080, #9549 ) ; +#11632 = SURFACE_SIDE_STYLE ('',( #2345 ) ) ; +#11633 = EDGE_LOOP ( 'NONE', ( #10591, #3533, #1587, #4623 ) ) ; +#11634 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999920400, 0.0000000000000000000, 1.149999999999999900 ) ) ; +#11635 = ORIENTED_EDGE ( 'NONE', *, *, #876, .T. ) ; +#11636 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.350000000000000100, 8.990000000000002000 ) ) ; +#11638 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.3999999999999999700, 4.750000000000000000 ) ) ; +#11637 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11639 = ORIENTED_EDGE ( 'NONE', *, *, #13199, .T. ) ; +#11640 = EDGE_CURVE ( 'NONE', #7823, #1364, #9091, .T. ) ; +#11641 = LINE ( 'NONE', #6528, #14499 ) ; +#11642 = CIRCLE ( 'NONE', #10640, 0.2749999999999991900 ) ; +#11643 = CARTESIAN_POINT ( 'NONE', ( 7.849999999999999600, 3.050000000000000700, 9.089999999999999900 ) ) ; +#11644 = VECTOR ( 'NONE', #13502, 1000.000000000000000 ) ; +#11645 = LINE ( 'NONE', #12012, #8229 ) ; +#11646 = LINE ( 'NONE', #8152, #5182 ) ; +#11647 = LINE ( 'NONE', #2813, #1167 ) ; +#11648 = LINE ( 'NONE', #8254, #5185 ) ; +#11649 = ORIENTED_EDGE ( 'NONE', *, *, #3734, .T. ) ; +#11650 = VERTEX_POINT ( 'NONE', #10495 ) ; +#11651 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999980500, 0.8000000000000000400, 3.549999999999999400 ) ) ; +#11652 = EDGE_CURVE ( 'NONE', #15234, #15564, #2963, .T. ) ; +#11653 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 6.550000000000002500 ) ) ; +#11654 = EDGE_CURVE ( 'NONE', #10361, #5248, #7560, .T. ) ; +#11655 = EDGE_LOOP ( 'NONE', ( #1910, #5581, #5899, #12203, #11513, #9678 ) ) ; +#11656 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2291, 'distance_accuracy_value', 'NONE'); +#11657 = LINE ( 'NONE', #15352, #7688 ) ; +#11658 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.3999999999999999700, 3.649999999999999500 ) ) ; +#11659 = ADVANCED_FACE ( 'NONE', ( #4311 ), #10436, .T. ) ; +#11660 = LINE ( 'NONE', #8920, #14147 ) ; +#11661 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 8.825000000000001100 ) ) ; +#11662 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#11663 = LINE ( 'NONE', #14245, #12040 ) ; +#11664 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10493 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14633, #2333, #13462 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11665 = ORIENTED_EDGE ( 'NONE', *, *, #15610, .F. ) ; +#11666 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #10114 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #9720, #2347, #3750 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11667 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11668 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11669 = ADVANCED_FACE ( 'NONE', ( #1049 ), #11708, .F. ) ; +#11670 = VECTOR ( 'NONE', #7056, 1000.000000000000000 ) ; +#11671 = FACE_OUTER_BOUND ( 'NONE', #920, .T. ) ; +#11672 = EDGE_CURVE ( 'NONE', #8491, #1830, #2573, .T. ) ; +#11673 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#11674 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 1.128675211753963700E-014, -3.080000000000010300 ) ) ; +#11675 = ADVANCED_FACE ( 'NONE', ( #289 ), #5609, .T. ) ; +#11676 = VECTOR ( 'NONE', #1496, 1000.000000000000000 ) ; +#11677 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11678 = FILL_AREA_STYLE_COLOUR ( '', #11292 ) ; +#11679 = EDGE_LOOP ( 'NONE', ( #12231, #5606, #163, #6319, #2050, #9252 ) ) ; +#11680 = ORIENTED_EDGE ( 'NONE', *, *, #4995, .F. ) ; +#11681 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#11682 = AXIS2_PLACEMENT_3D ( 'NONE', #8343, #1024, #14295 ) ; +#11683 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11684 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11685 = ORIENTED_EDGE ( 'NONE', *, *, #15416, .F. ) ; +#11686 = LINE ( 'NONE', #15652, #10167 ) ; +#11687 = ORIENTED_EDGE ( 'NONE', *, *, #13419, .T. ) ; +#11688 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#11689 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#11690 = ORIENTED_EDGE ( 'NONE', *, *, #9525, .F. ) ; +#11691 = VECTOR ( 'NONE', #7204, 1000.000000000000000 ) ; +#11692 = FACE_OUTER_BOUND ( 'NONE', #3407, .T. ) ; +#11693 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 5.050000000000000700 ) ) ; +#11694 = ORIENTED_EDGE ( 'NONE', *, *, #13607, .F. ) ; +#11695 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12401 ) ) ; +#11696 = EDGE_CURVE ( 'NONE', #6135, #5815, #11907, .T. ) ; +#11697 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11698 = ORIENTED_EDGE ( 'NONE', *, *, #2612, .T. ) ; +#11699 = FACE_OUTER_BOUND ( 'NONE', #6901, .T. ) ; +#11700 = EDGE_CURVE ( 'NONE', #3127, #15723, #2193, .T. ) ; +#11701 = VERTEX_POINT ( 'NONE', #15326 ) ; +#11702 = VERTEX_POINT ( 'NONE', #4383 ) ; +#11703 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 7.150000000000000400 ) ) ; +#11704 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11705 = VERTEX_POINT ( 'NONE', #8069 ) ; +#11706 = VECTOR ( 'NONE', #4859, 1000.000000000000000 ) ; +#11707 = LINE ( 'NONE', #3493, #6978 ) ; +#11708 = PLANE ( 'NONE', #11182 ) ; +#11709 = EDGE_LOOP ( 'NONE', ( #4265, #9509, #13598, #5259 ) ) ; +#11710 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, -2.449999999999998800 ) ) ; +#11711 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000011200, 2.967186921759403300E-014, 0.0000000000000000000 ) ) ; +#11712 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999906200, 0.4000000000000000200, 0.5500000000000020400 ) ) ; +#11713 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, -10.00000000000000000 ) ) ; +#11714 = VERTEX_POINT ( 'NONE', #8167 ) ; +#11715 = VECTOR ( 'NONE', #15614, 1000.000000000000000 ) ; +#11716 = EDGE_LOOP ( 'NONE', ( #5421, #11768, #3008, #7475 ) ) ; +#11717 = FACE_OUTER_BOUND ( 'NONE', #3092, .T. ) ; +#11718 = LINE ( 'NONE', #1749, #106 ) ; +#11719 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000004600, 0.4000000000000000200, 7.150000000000000400 ) ) ; +#11720 = EDGE_CURVE ( 'NONE', #6108, #96, #12852, .T. ) ; +#11721 = PLANE ( 'NONE', #14576 ) ; +#11722 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 0.3749999999999994400 ) ) ; +#11723 = AXIS2_PLACEMENT_3D ( 'NONE', #2482, #9846, #4948 ) ; +#11724 = ORIENTED_EDGE ( 'NONE', *, *, #4254, .F. ) ; +#11725 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 2.649999999999999500 ) ) ; +#11726 = PLANE ( 'NONE', #15011 ) ; +#11727 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#11728 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#11729 = EDGE_CURVE ( 'NONE', #6195, #9338, #6034, .T. ) ; +#11730 = LINE ( 'NONE', #10013, #13833 ) ; +#11731 = ORIENTED_EDGE ( 'NONE', *, *, #11576, .F. ) ; +#11732 = AXIS2_PLACEMENT_3D ( 'NONE', #1626, #8787, #8900 ) ; +#11733 = VECTOR ( 'NONE', #1775, 1000.000000000000000 ) ; +#11734 = LINE ( 'NONE', #2824, #14590 ) ; +#11735 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11736 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000034500, 0.4000000000000000200, -0.9499999999999990700 ) ) ; +#11737 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11739 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#11738 = DIRECTION ( 'NONE', ( 5.478074134663594500E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#11740 = EDGE_CURVE ( 'NONE', #12302, #4737, #2760, .T. ) ; +#11741 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5525 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #13887, #10260, #9010 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11742 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.3999999999999999700, 4.049999999999999800 ) ) ; +#11743 = VERTEX_POINT ( 'NONE', #6836 ) ; +#11744 = ADVANCED_FACE ( 'NONE', ( #15335 ), #5922, .F. ) ; +#11745 = VECTOR ( 'NONE', #4314, 1000.000000000000000 ) ; +#11746 = VECTOR ( 'NONE', #14706, 1000.000000000000000 ) ; +#11747 = ORIENTED_EDGE ( 'NONE', *, *, #6887, .F. ) ; +#11748 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11749 = EDGE_CURVE ( 'NONE', #14040, #3724, #2010, .T. ) ; +#11750 = ADVANCED_FACE ( 'NONE', ( #13051 ), #950, .T. ) ; +#11751 = AXIS2_PLACEMENT_3D ( 'NONE', #14981, #10079, #7819 ) ; +#11752 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.150000000000000800, -3.080000000000001000 ) ) ; +#11753 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11754 = VERTEX_POINT ( 'NONE', #14368 ) ; +#11755 = LINE ( 'NONE', #5090, #1455 ) ; +#11756 = EDGE_LOOP ( 'NONE', ( #4371, #10176, #923, #6462 ) ) ; +#11757 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#11758 = FACE_OUTER_BOUND ( 'NONE', #14855, .T. ) ; +#11759 = LINE ( 'NONE', #3178, #2599 ) ; +#11760 = EDGE_CURVE ( 'NONE', #8882, #7837, #6611, .T. ) ; +#11761 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999962700, 0.0000000000000000000, -1.674999999999999400 ) ) ; +#11762 = PLANE ( 'NONE', #5608 ) ; +#11763 = CLOSED_SHELL ( 'NONE', ( #1240, #575, #15098, #3867, #2585, #13020, #13998, #9622, #2470, #8733 ) ) ; +#11764 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11765 = ORIENTED_EDGE ( 'NONE', *, *, #9416, .T. ) ; +#11766 = FACE_OUTER_BOUND ( 'NONE', #9899, .T. ) ; +#11767 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#11768 = ORIENTED_EDGE ( 'NONE', *, *, #10683, .T. ) ; +#11769 = AXIS2_PLACEMENT_3D ( 'NONE', #1460, #11222, #3926 ) ; +#11770 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.4000000000000000200, 7.150000000000000400 ) ) ; +#11771 = VERTEX_POINT ( 'NONE', #1051 ) ; +#11772 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11773 = LINE ( 'NONE', #15671, #9498 ) ; +#11774 = VECTOR ( 'NONE', #14432, 1000.000000000000000 ) ; +#11775 = CARTESIAN_POINT ( 'NONE', ( 7.849999999999999600, 3.129230332643793600, -2.857304606097598800 ) ) ; +#11776 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#11777 = ORIENTED_EDGE ( 'NONE', *, *, #3486, .T. ) ; +#11778 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 5.650000000000000400 ) ) ; +#11779 = ORIENTED_EDGE ( 'NONE', *, *, #3081, .F. ) ; +#11780 = EDGE_LOOP ( 'NONE', ( #7039, #7412, #13547, #7550 ) ) ; +#11781 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, -3.349999999999998300 ) ) ; +#11782 = AXIS2_PLACEMENT_3D ( 'NONE', #6737, #9083, #4214 ) ; +#11783 = ORIENTED_EDGE ( 'NONE', *, *, #9640, .T. ) ; +#11784 = EDGE_LOOP ( 'NONE', ( #15625, #8410, #2946, #7430 ) ) ; +#11785 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11786 = EDGE_CURVE ( 'NONE', #4697, #5173, #481, .T. ) ; +#11788 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#11787 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, 0.5500000000000010400 ) ) ; +#11789 = EDGE_CURVE ( 'NONE', #11943, #7654, #4543, .T. ) ; +#11790 = LINE ( 'NONE', #3678, #4761 ) ; +#11791 = FACE_OUTER_BOUND ( 'NONE', #4862, .T. ) ; +#11792 = LINE ( 'NONE', #1221, #14470 ) ; +#11793 = PLANE ( 'NONE', #15310 ) ; +#11794 = EDGE_LOOP ( 'NONE', ( #5042, #12935, #12836, #9908 ) ) ; +#11795 = ORIENTED_EDGE ( 'NONE', *, *, #1841, .T. ) ; +#11796 = ORIENTED_EDGE ( 'NONE', *, *, #2639, .T. ) ; +#11797 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #8671 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3321, #10728, #15488 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11798 = ORIENTED_EDGE ( 'NONE', *, *, #2880, .T. ) ; +#11799 = PLANE ( 'NONE', #4765 ) ; +#11800 = VERTEX_POINT ( 'NONE', #3611 ) ; +#11801 = PLANE ( 'NONE', #2679 ) ; +#11802 = PLANE ( 'NONE', #822 ) ; +#11803 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11804 = VECTOR ( 'NONE', #3472, 1000.000000000000000 ) ; +#11805 = VECTOR ( 'NONE', #489, 1000.000000000000000 ) ; +#11806 = ORIENTED_EDGE ( 'NONE', *, *, #11196, .T. ) ; +#11807 = EDGE_CURVE ( 'NONE', #4829, #3489, #8133, .T. ) ; +#11808 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 1.500000000000000000 ) ) ; +#11809 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11810 = ORIENTED_EDGE ( 'NONE', *, *, #10805, .T. ) ; +#11811 = VERTEX_POINT ( 'NONE', #8270 ) ; +#11812 = VERTEX_POINT ( 'NONE', #9478 ) ; +#11813 = LINE ( 'NONE', #9887, #8622 ) ; +#11814 = VECTOR ( 'NONE', #11684, 1000.000000000000000 ) ; +#11815 = VECTOR ( 'NONE', #9838, 1000.000000000000000 ) ; +#11816 = STYLED_ITEM ( 'NONE', ( #12363 ), #14680 ) ; +#11817 = AXIS2_PLACEMENT_3D ( 'NONE', #3417, #2189, #3367 ) ; +#11818 = LINE ( 'NONE', #2613, #7660 ) ; +#11819 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -1.104919411450195700E-016 ) ) ; +#11820 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 5.478074134663584300E-015 ) ) ; +#11821 = PLANE ( 'NONE', #180 ) ; +#11822 = EDGE_LOOP ( 'NONE', ( #9368, #2457, #13103, #9505 ) ) ; +#11823 = FILL_AREA_STYLE_COLOUR ( '', #5274 ) ; +#11824 = DIRECTION ( 'NONE', ( 5.478074134663595300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11825 = ADVANCED_FACE ( 'NONE', ( #1414 ), #7206, .T. ) ; +#11826 = ORIENTED_EDGE ( 'NONE', *, *, #4675, .T. ) ; +#11827 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11828 = ORIENTED_EDGE ( 'NONE', *, *, #10997, .T. ) ; +#11829 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11830 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11831 = EDGE_CURVE ( 'NONE', #11324, #5946, #12658, .T. ) ; +#11832 = VECTOR ( 'NONE', #14657, 1000.000000000000000 ) ; +#11833 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.349999999999999600, -2.779999999999999400 ) ) ; +#11834 = FACE_OUTER_BOUND ( 'NONE', #13108, .T. ) ; +#11835 = FACE_OUTER_BOUND ( 'NONE', #3428, .T. ) ; +#11836 = LINE ( 'NONE', #14067, #14701 ) ; +#11837 = ORIENTED_EDGE ( 'NONE', *, *, #7376, .T. ) ; +#11838 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 3.550000000000003400 ) ) ; +#11839 = ORIENTED_EDGE ( 'NONE', *, *, #10372, .T. ) ; +#11841 = SURFACE_SIDE_STYLE ('',( #5420 ) ) ; +#11840 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#11842 = ADVANCED_FACE ( 'NONE', ( #4868 ), #2217, .F. ) ; +#11843 = EDGE_CURVE ( 'NONE', #7932, #9260, #10767, .T. ) ; +#11844 = ORIENTED_EDGE ( 'NONE', *, *, #1084, .T. ) ; +#11845 = ORIENTED_EDGE ( 'NONE', *, *, #10399, .F. ) ; +#11846 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.097720492815727200E-016 ) ) ; +#11847 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude5[5]', #9206 ) ; +#11848 = LINE ( 'NONE', #10628, #14712 ) ; +#11849 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#11850 = FACE_OUTER_BOUND ( 'NONE', #13769, .T. ) ; +#11851 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 4.874999999999999100 ) ) ; +#11852 = EDGE_CURVE ( 'NONE', #9712, #10677, #10590, .T. ) ; +#11853 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#11854 = EDGE_CURVE ( 'NONE', #823, #2358, #9819, .T. ) ; +#11855 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11856 = VERTEX_POINT ( 'NONE', #10865 ) ; +#11857 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#11858 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000012400, 0.8000000000000000400, 5.050000000000000700 ) ) ; +#11859 = LINE ( 'NONE', #6756, #9960 ) ; +#11860 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11861 = VECTOR ( 'NONE', #5271, 1000.000000000000000 ) ; +#11862 = AXIS2_PLACEMENT_3D ( 'NONE', #12558, #4279, #15022 ) ; +#11863 = ORIENTED_EDGE ( 'NONE', *, *, #4943, .F. ) ; +#11864 = ORIENTED_EDGE ( 'NONE', *, *, #9137, .T. ) ; +#11865 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#11866 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -5.478074134663591400E-015 ) ) ; +#11867 = PLANE ( 'NONE', #616 ) ; +#11868 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#11869 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#11870 = EDGE_CURVE ( 'NONE', #14844, #9480, #11892, .T. ) ; +#11871 = CARTESIAN_POINT ( 'NONE', ( -7.558640774202061200, 3.149999999999998600, -2.794605673451389100 ) ) ; +#11872 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#11873 = ORIENTED_EDGE ( 'NONE', *, *, #8337, .F. ) ; +#11874 = VECTOR ( 'NONE', #4369, 1000.000000000000000 ) ; +#11875 = EDGE_LOOP ( 'NONE', ( #5031, #12383, #1350, #14949 ) ) ; +#11876 = EDGE_LOOP ( 'NONE', ( #2396, #2343, #2072, #3715 ) ) ; +#11877 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11878 = CARTESIAN_POINT ( 'NONE', ( 7.706658047799211700, 3.317567445684515400, -2.810998920361183400 ) ) ; +#11879 = ORIENTED_EDGE ( 'NONE', *, *, #7433, .F. ) ; +#11880 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 5.650000000000000400 ) ) ; +#11881 = EDGE_CURVE ( 'NONE', #362, #9743, #13610, .T. ) ; +#11882 = VECTOR ( 'NONE', #15117, 1000.000000000000000 ) ; +#11883 = LINE ( 'NONE', #10674, #15308 ) ; +#11884 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 3.550000000000001200 ) ) ; +#11885 = ORIENTED_EDGE ( 'NONE', *, *, #5346, .T. ) ; +#11886 = ORIENTED_EDGE ( 'NONE', *, *, #3859, .F. ) ; +#11887 = AXIS2_PLACEMENT_3D ( 'NONE', #3432, #12951, #13009 ) ; +#11888 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, -0.3500000000000004800 ) ) ; +#11890 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#11889 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#11891 = EDGE_LOOP ( 'NONE', ( #6378, #3056, #5483, #9243 ) ) ; +#11892 = LINE ( 'NONE', #4892, #10376 ) ; +#11893 = ORIENTED_EDGE ( 'NONE', *, *, #13472, .F. ) ; +#11894 = EDGE_LOOP ( 'NONE', ( #5844, #4725, #13563, #10327 ) ) ; +#11895 = LINE ( 'NONE', #10940, #13038 ) ; +#11896 = LINE ( 'NONE', #11491, #15696 ) ; +#11897 = AXIS2_PLACEMENT_3D ( 'NONE', #12300, #14770, #2839 ) ; +#11898 = VERTEX_POINT ( 'NONE', #2636 ) ; +#11899 = EDGE_CURVE ( 'NONE', #11754, #11201, #11341, .T. ) ; +#11900 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11901 = PLANE ( 'NONE', #5200 ) ; +#11902 = ADVANCED_FACE ( 'NONE', ( #9987 ), #6347, .F. ) ; +#11903 = EDGE_CURVE ( 'NONE', #1895, #8790, #3512, .T. ) ; +#11904 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 5.650000000000000400 ) ) ; +#11905 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 1.637941840314110200, 1.849999999999999900 ) ) ; +#11906 = ORIENTED_EDGE ( 'NONE', *, *, #248, .T. ) ; +#11907 = LINE ( 'NONE', #11658, #3919 ) ; +#11908 = VERTEX_POINT ( 'NONE', #7411 ) ; +#11909 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#11910 = LINE ( 'NONE', #10242, #10787 ) ; +#11911 = AXIS2_PLACEMENT_3D ( 'NONE', #15543, #5905, #988 ) ; +#11912 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11913 = ADVANCED_FACE ( 'NONE', ( #6778, #4497 ), #5434, .F. ) ; +#11914 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 4.325000000000001100 ) ) ; +#11915 = FACE_OUTER_BOUND ( 'NONE', #11600, .T. ) ; +#11916 = EDGE_LOOP ( 'NONE', ( #724, #15622, #3634, #7 ) ) ; +#11917 = EDGE_CURVE ( 'NONE', #460, #4916, #272, .T. ) ; +#11918 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, -2.449999999999997500 ) ) ; +#11919 = PLANE ( 'NONE', #9304 ) ; +#11920 = CARTESIAN_POINT ( 'NONE', ( -7.849999999999999600, 3.050000000000000700, -2.872928932188135100 ) ) ; +#11921 = LINE ( 'NONE', #4826, #3936 ) ; +#11922 = LINE ( 'NONE', #11352, #15349 ) ; +#11923 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#11924 = ORIENTED_EDGE ( 'NONE', *, *, #6011, .F. ) ; +#11925 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999980800, 0.0000000000000000000, 7.150000000000002100 ) ) ; +#11926 = PLANE ( 'NONE', #15550 ) ; +#11927 = EDGE_CURVE ( 'NONE', #3760, #8142, #100, .T. ) ; +#11928 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11929 = VERTEX_POINT ( 'NONE', #1207 ) ; +#11930 = ORIENTED_EDGE ( 'NONE', *, *, #13760, .T. ) ; +#11931 = CARTESIAN_POINT ( 'NONE', ( -7.819452524890163400, 3.207639970946512000, -2.841952621458756500 ) ) ; +#11932 = CIRCLE ( 'NONE', #356, 0.5000000000000004400 ) ; +#11933 = VERTEX_POINT ( 'NONE', #11074 ) ; +#11934 = VECTOR ( 'NONE', #150, 1000.000000000000000 ) ; +#11935 = VECTOR ( 'NONE', #10365, 1000.000000000000000 ) ; +#11936 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 9.375000000000000000 ) ) ; +#11937 = EDGE_CURVE ( 'NONE', #3480, #579, #8305, .T. ) ; +#11938 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #15167 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3115, #14138, #15238 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#11939 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11940 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, -15.05858178898088800, -5.150000000000001200 ) ) ; +#11941 = ORIENTED_EDGE ( 'NONE', *, *, #632, .F. ) ; +#11942 = VECTOR ( 'NONE', #10199, 1000.000000000000000 ) ; +#11943 = VERTEX_POINT ( 'NONE', #10973 ) ; +#11944 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'ESP32-C3-WROOM-02-H4', ( #9047, #4545, #6507, #12618, #9330, #12817, #1490, #3657, #8166, #14011, #7392, #825, #6222, #11847, #2003, #14977, #3862, #524, #7687, #10689, #9810, #13506, #2466, #1698, #1014, #6713, #15630, #11175, #13809, #4354, #14680, #12318, #15444, #7003, #10986, #4830, #9996, #3566 ), #1947 ) ; +#11945 = EDGE_CURVE ( 'NONE', #4309, #9598, #13036, .T. ) ; +#11946 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999875300, 0.4000000000000000200, -3.349999999999997900 ) ) ; +#11947 = LINE ( 'NONE', #8127, #4557 ) ; +#11948 = VECTOR ( 'NONE', #1223, 1000.000000000000000 ) ; +#11949 = AXIS2_PLACEMENT_3D ( 'NONE', #8544, #8501, #12032 ) ; +#11950 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11951 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.3999999999999999700, 4.750000000000000000 ) ) ; +#11952 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000004300, 0.8000000000000000400, 8.050000000000000700 ) ) ; +#11953 = AXIS2_PLACEMENT_3D ( 'NONE', #14348, #9359, #2049 ) ; +#11954 = VERTEX_POINT ( 'NONE', #14619 ) ; +#11955 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#11956 = ORIENTED_EDGE ( 'NONE', *, *, #13106, .T. ) ; +#11957 = VERTEX_POINT ( 'NONE', #9892 ) ; +#11958 = ORIENTED_EDGE ( 'NONE', *, *, #10215, .F. ) ; +#11959 = EDGE_LOOP ( 'NONE', ( #529, #12841, #4596, #12128 ) ) ; +#11960 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.4000000000000000200, 1.850000000000000100 ) ) ; +#11961 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11962 = VECTOR ( 'NONE', #12780, 1000.000000000000000 ) ; +#11963 = VERTEX_POINT ( 'NONE', #2419 ) ; +#11964 = ORIENTED_EDGE ( 'NONE', *, *, #13321, .F. ) ; +#11965 = EDGE_CURVE ( 'NONE', #14933, #3036, #3337, .T. ) ; +#11966 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#11967 = LINE ( 'NONE', #806, #3594 ) ; +#11968 = FACE_OUTER_BOUND ( 'NONE', #1413, .T. ) ; +#11969 = LINE ( 'NONE', #1641, #12737 ) ; +#11970 = ORIENTED_EDGE ( 'NONE', *, *, #7479, .T. ) ; +#11971 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11973 = ORIENTED_EDGE ( 'NONE', *, *, #7135, .T. ) ; +#11972 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, 0.5500000000000010400 ) ) ; +#11974 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#11975 = EDGE_LOOP ( 'NONE', ( #7053, #12078, #3738, #11747 ) ) ; +#11976 = AXIS2_PLACEMENT_3D ( 'NONE', #15242, #11830, #7985 ) ; +#11977 = DIRECTION ( 'NONE', ( 5.478074134663595300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11978 = CARTESIAN_POINT ( 'NONE', ( -7.614815129928836700, 3.096076976721358100, -2.869702065901542600 ) ) ; +#11979 = VERTEX_POINT ( 'NONE', #2582 ) ; +#11980 = ADVANCED_FACE ( 'NONE', ( #856 ), #1418, .T. ) ; +#11981 = ORIENTED_EDGE ( 'NONE', *, *, #11903, .F. ) ; +#11982 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#11983 = AXIS2_PLACEMENT_3D ( 'NONE', #2497, #12238, #4966 ) ; +#11984 = EDGE_LOOP ( 'NONE', ( #8303, #2700, #11680, #4277, #11839, #4447 ) ) ; +#11985 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#11986 = VERTEX_POINT ( 'NONE', #11425 ) ; +#11987 = LINE ( 'NONE', #12802, #7259 ) ; +#11988 = LINE ( 'NONE', #963, #3424 ) ; +#11989 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#11990 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 1.637941840314110200, 1.850000000000000100 ) ) ; +#11991 = ORIENTED_EDGE ( 'NONE', *, *, #7899, .T. ) ; +#11992 = EDGE_CURVE ( 'NONE', #1705, #7375, #7937, .T. ) ; +#11993 = VERTEX_POINT ( 'NONE', #3931 ) ; +#11994 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#11995 = EDGE_CURVE ( 'NONE', #11201, #12742, #9074, .T. ) ; +#11996 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.3999999999999999700, 4.049999999999999800 ) ) ; +#11997 = ORIENTED_EDGE ( 'NONE', *, *, #1298, .T. ) ; +#11998 = EDGE_CURVE ( 'NONE', #14092, #8860, #14004, .T. ) ; +#11999 = ORIENTED_EDGE ( 'NONE', *, *, #8513, .F. ) ; +#12000 = ORIENTED_EDGE ( 'NONE', *, *, #8212, .T. ) ; +#12001 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12002 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 7.150000000000002100 ) ) ; +#12003 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12004 = LINE ( 'NONE', #12933, #8795 ) ; +#12005 = VECTOR ( 'NONE', #2296, 1000.000000000000000 ) ; +#12006 = VECTOR ( 'NONE', #12352, 1000.000000000000000 ) ; +#12007 = EDGE_LOOP ( 'NONE', ( #14112, #9544, #10311, #1235 ) ) ; +#12008 = SURFACE_STYLE_USAGE ( .BOTH. , #9582 ) ; +#12009 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.4000000000000000200, 2.949999999999999700 ) ) ; +#12010 = ORIENTED_EDGE ( 'NONE', *, *, #4007, .T. ) ; +#12011 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12012 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000001400, 3.050000000000000700, -3.080000000000001000 ) ) ; +#12013 = ORIENTED_EDGE ( 'NONE', *, *, #1392, .F. ) ; +#12014 = VECTOR ( 'NONE', #13532, 1000.000000000000000 ) ; +#12015 = FACE_OUTER_BOUND ( 'NONE', #10455, .T. ) ; +#12016 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 5.825000000000002000 ) ) ; +#12017 = FACE_OUTER_BOUND ( 'NONE', #1159, .T. ) ; +#12018 = VECTOR ( 'NONE', #14266, 1000.000000000000000 ) ; +#12019 = ORIENTED_EDGE ( 'NONE', *, *, #12828, .T. ) ; +#12020 = LINE ( 'NONE', #14265, #5183 ) ; +#12021 = EDGE_CURVE ( 'NONE', #15029, #2473, #7542, .T. ) ; +#12022 = CYLINDRICAL_SURFACE ( 'NONE', #4592, 0.2749999999999991900 ) ; +#12023 = ADVANCED_FACE ( 'NONE', ( #3903 ), #13220, .T. ) ; +#12024 = EDGE_LOOP ( 'NONE', ( #12919, #2412, #5960, #7493, #10905, #2948 ) ) ; +#12025 = ORIENTED_EDGE ( 'NONE', *, *, #14989, .F. ) ; +#12026 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12027 = ORIENTED_EDGE ( 'NONE', *, *, #8248, .F. ) ; +#12028 = ORIENTED_EDGE ( 'NONE', *, *, #13484, .F. ) ; +#12029 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12030 = EDGE_CURVE ( 'NONE', #11743, #9586, #8692, .T. ) ; +#12031 = AXIS2_PLACEMENT_3D ( 'NONE', #4534, #1047, #13233 ) ; +#12032 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12033 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12034 = LINE ( 'NONE', #4928, #2701 ) ; +#12035 = LINE ( 'NONE', #5239, #12206 ) ; +#12036 = CARTESIAN_POINT ( 'NONE', ( 7.649999999999999500, 3.149999999999999900, 9.082928932188135500 ) ) ; +#12037 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, -0.9499999999999990700 ) ) ; +#12038 = LINE ( 'NONE', #15629, #14324 ) ; +#12039 = PLANE ( 'NONE', #14967 ) ; +#12040 = VECTOR ( 'NONE', #9501, 1000.000000000000000 ) ; +#12041 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12042 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#12043 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 9.550000000000000700 ) ) ; +#12044 = ORIENTED_EDGE ( 'NONE', *, *, #9254, .T. ) ; +#12045 = EDGE_CURVE ( 'NONE', #11614, #8035, #12449, .T. ) ; +#12046 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#12047 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 9.550000000000004300 ) ) ; +#12048 = FACE_OUTER_BOUND ( 'NONE', #86, .T. ) ; +#12049 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12050 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 0.5500000000000010400 ) ) ; +#12051 = EDGE_CURVE ( 'NONE', #7680, #3418, #5244, .T. ) ; +#12052 = FACE_OUTER_BOUND ( 'NONE', #11597, .T. ) ; +#12053 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9628 ) ) ; +#12054 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 1.806230589874906900, -1.850000000000000500 ) ) ; +#12055 = FILL_AREA_STYLE ('',( #4827 ) ) ; +#12056 = ORIENTED_EDGE ( 'NONE', *, *, #4965, .F. ) ; +#12057 = ORIENTED_EDGE ( 'NONE', *, *, #4824, .F. ) ; +#12058 = PLANE ( 'NONE', #4839 ) ; +#12059 = ORIENTED_EDGE ( 'NONE', *, *, #7768, .F. ) ; +#12060 = ADVANCED_FACE ( 'NONE', ( #4478 ), #13831, .T. ) ; +#12061 = VECTOR ( 'NONE', #2787, 1000.000000000000000 ) ; +#12062 = ORIENTED_EDGE ( 'NONE', *, *, #3962, .T. ) ; +#12063 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999994700, 0.8000000000000000400, 7.325000000000002000 ) ) ; +#12064 = EDGE_CURVE ( 'NONE', #3036, #5684, #4850, .T. ) ; +#12065 = ORIENTED_EDGE ( 'NONE', *, *, #11442, .T. ) ; +#12066 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12067 = FACE_OUTER_BOUND ( 'NONE', #1365, .T. ) ; +#12068 = CARTESIAN_POINT ( 'NONE', ( -7.850000000000007600, 0.7999999999999967100, -3.079999999999999200 ) ) ; +#12069 = ORIENTED_EDGE ( 'NONE', *, *, #2988, .T. ) ; +#12070 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#12071 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1326 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #14349, #1078, #7297 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12072 = VERTEX_POINT ( 'NONE', #11231 ) ; +#12073 = LINE ( 'NONE', #9221, #450 ) ; +#12074 = VERTEX_POINT ( 'NONE', #8903 ) ; +#12075 = ORIENTED_EDGE ( 'NONE', *, *, #6264, .F. ) ; +#12076 = AXIS2_PLACEMENT_3D ( 'NONE', #12980, #5718, #803 ) ; +#12077 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 5.825000000000002000 ) ) ; +#12078 = ORIENTED_EDGE ( 'NONE', *, *, #13803, .T. ) ; +#12079 = CYLINDRICAL_SURFACE ( 'NONE', #4186, 0.2749999999999991900 ) ; +#12080 = CIRCLE ( 'NONE', #14127, 0.5000000000000004400 ) ; +#12081 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12082 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#12083 = PLANE ( 'NONE', #14434 ) ; +#12084 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12085 = ORIENTED_EDGE ( 'NONE', *, *, #7045, .T. ) ; +#12086 = EDGE_CURVE ( 'NONE', #12171, #5257, #1787, .T. ) ; +#12087 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12088 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#12089 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 5.050000000000000700 ) ) ; +#12090 = ORIENTED_EDGE ( 'NONE', *, *, #1651, .F. ) ; +#12091 = VECTOR ( 'NONE', #7260, 1000.000000000000000 ) ; +#12092 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12093 = EDGE_CURVE ( 'NONE', #13494, #5710, #2747, .T. ) ; +#12094 = VERTEX_POINT ( 'NONE', #2855 ) ; +#12095 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.049999999999999400, 9.082928932188135500 ) ) ; +#12096 = VECTOR ( 'NONE', #15479, 1000.000000000000000 ) ; +#12097 = VECTOR ( 'NONE', #12907, 1000.000000000000000 ) ; +#12098 = ADVANCED_FACE ( 'NONE', ( #6018 ), #6556, .F. ) ; +#12099 = AXIS2_PLACEMENT_3D ( 'NONE', #7939, #9101, #11565 ) ; +#12100 = ORIENTED_EDGE ( 'NONE', *, *, #14718, .T. ) ; +#12101 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, -0.9499999999999990700 ) ) ; +#12102 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12103 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12104 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12105 = LINE ( 'NONE', #14289, #303 ) ; +#12106 = VERTEX_POINT ( 'NONE', #13663 ) ; +#12107 = AXIS2_PLACEMENT_3D ( 'NONE', #10152, #3695, #1737 ) ; +#12108 = VECTOR ( 'NONE', #7247, 1000.000000000000000 ) ; +#12109 = VECTOR ( 'NONE', #12555, 1000.000000000000000 ) ; +#12110 = EDGE_CURVE ( 'NONE', #9600, #6581, #15124, .T. ) ; +#12111 = PLANE ( 'NONE', #14618 ) ; +#12112 = PLANE ( 'NONE', #8937 ) ; +#12113 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000005000, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#12114 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12115 = VECTOR ( 'NONE', #10520, 1000.000000000000000 ) ; +#12116 = ORIENTED_EDGE ( 'NONE', *, *, #14317, .T. ) ; +#12117 = AXIS2_PLACEMENT_3D ( 'NONE', #3518, #12033, #13246 ) ; +#12118 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.195440985631453300E-016 ) ) ; +#12119 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999988600, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#12120 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.4000000000000000200, 1.849999999999999900 ) ) ; +#12121 = VECTOR ( 'NONE', #13255, 1000.000000000000000 ) ; +#12122 = ORIENTED_EDGE ( 'NONE', *, *, #12150, .T. ) ; +#12123 = PLANE ( 'NONE', #9440 ) ; +#12124 = PLANE ( 'NONE', #11386 ) ; +#12125 = PLANE ( 'NONE', #15731 ) ; +#12126 = EDGE_CURVE ( 'NONE', #11339, #6999, #8492, .T. ) ; +#12127 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999952400, 0.4000000000000000200, 4.149999999999999500 ) ) ; +#12128 = ORIENTED_EDGE ( 'NONE', *, *, #14099, .T. ) ; +#12129 = LINE ( 'NONE', #1667, #12322 ) ; +#12130 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 6.550000000000001600 ) ) ; +#12131 = VERTEX_POINT ( 'NONE', #2913 ) ; +#12132 = VERTEX_POINT ( 'NONE', #11331 ) ; +#12133 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12134 = ADVANCED_FACE ( 'NONE', ( #9258 ), #7623, .T. ) ; +#12135 = VECTOR ( 'NONE', #15002, 1000.000000000000000 ) ; +#12136 = VECTOR ( 'NONE', #13466, 1000.000000000000000 ) ; +#12137 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12138 = EDGE_CURVE ( 'NONE', #7237, #4330, #14191, .T. ) ; +#12139 = ORIENTED_EDGE ( 'NONE', *, *, #13897, .T. ) ; +#12140 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12141 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000004100, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#12142 = EDGE_LOOP ( 'NONE', ( #915, #112, #13620, #7628 ) ) ; +#12143 = LINE ( 'NONE', #4495, #13877 ) ; +#12144 = ORIENTED_EDGE ( 'NONE', *, *, #14548, .F. ) ; +#12145 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 2.050000000000003800 ) ) ; +#12147 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12146 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#12148 = VECTOR ( 'NONE', #14375, 1000.000000000000000 ) ; +#12149 = FACE_OUTER_BOUND ( 'NONE', #13531, .T. ) ; +#12150 = EDGE_CURVE ( 'NONE', #13940, #10731, #1213, .T. ) ; +#12151 = EDGE_CURVE ( 'NONE', #9510, #8729, #9802, .T. ) ; +#12152 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, -0.3500000000000004800 ) ) ; +#12153 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000009900, 0.4000000000000000200, 6.549999999999998000 ) ) ; +#12154 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12155 = ORIENTED_EDGE ( 'NONE', *, *, #11881, .T. ) ; +#12156 = EDGE_LOOP ( 'NONE', ( #13214, #5669, #14924, #1894 ) ) ; +#12157 = VERTEX_POINT ( 'NONE', #7951 ) ; +#12158 = ORIENTED_EDGE ( 'NONE', *, *, #7305, .T. ) ; +#12159 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12160 = ORIENTED_EDGE ( 'NONE', *, *, #14708, .T. ) ; +#12161 = AXIS2_PLACEMENT_3D ( 'NONE', #7533, #2762, #7478 ) ; +#12162 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#12163 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12164 = FACE_OUTER_BOUND ( 'NONE', #3006, .T. ) ; +#12165 = ORIENTED_EDGE ( 'NONE', *, *, #1531, .T. ) ; +#12166 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000014200, 0.0000000000000000000, 4.325000000000001100 ) ) ; +#12167 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12168 = EDGE_LOOP ( 'NONE', ( #15397 ) ) ; +#12169 = ADVANCED_FACE ( 'NONE', ( #12837 ), #10366, .F. ) ; +#12170 = EDGE_CURVE ( 'NONE', #11122, #2110, #12642, .T. ) ; +#12171 = VERTEX_POINT ( 'NONE', #2960 ) ; +#12172 = ORIENTED_EDGE ( 'NONE', *, *, #10229, .F. ) ; +#12173 = VECTOR ( 'NONE', #12265, 1000.000000000000000 ) ; +#12174 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.0000000000000000000, 1.849999999999999900 ) ) ; +#12175 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#12176 = SURFACE_STYLE_USAGE ( .BOTH. , #19 ) ; +#12177 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.491481338843133400E-015, -1.462686427040065000E-032 ) ) ; +#12178 = VECTOR ( 'NONE', #13971, 1000.000000000000000 ) ; +#12179 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 1.325000000000001500 ) ) ; +#12180 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12181 = VERTEX_POINT ( 'NONE', #11638 ) ; +#12182 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999890200, 0.4000000000000000200, -1.850000000000001000 ) ) ; +#12183 = ORIENTED_EDGE ( 'NONE', *, *, #7505, .F. ) ; +#12184 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12185 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #15649 ) ) ; +#12186 = ORIENTED_EDGE ( 'NONE', *, *, #4332, .F. ) ; +#12187 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, 8.050000000000000700 ) ) ; +#12188 = VERTEX_POINT ( 'NONE', #15305 ) ; +#12189 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.3999999999999999700, 4.049999999999999800 ) ) ; +#12190 = FACE_OUTER_BOUND ( 'NONE', #1253, .T. ) ; +#12191 = VECTOR ( 'NONE', #2114, 1000.000000000000000 ) ; +#12192 = LINE ( 'NONE', #2022, #8796 ) ; +#12193 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12194 = AXIS2_PLACEMENT_3D ( 'NONE', #12255, #14663, #14562 ) ; +#12195 = FACE_OUTER_BOUND ( 'NONE', #3236, .T. ) ; +#12196 = ORIENTED_EDGE ( 'NONE', *, *, #9821, .F. ) ; +#12197 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000009600, 0.8000000000000000400, 6.550000000000000700 ) ) ; +#12198 = EDGE_CURVE ( 'NONE', #7052, #5968, #12073, .T. ) ; +#12200 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12199 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#12201 = ORIENTED_EDGE ( 'NONE', *, *, #15285, .F. ) ; +#12202 = EDGE_CURVE ( 'NONE', #11021, #6653, #9424, .T. ) ; +#12203 = ORIENTED_EDGE ( 'NONE', *, *, #8925, .T. ) ; +#12204 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.097720492815727700E-016 ) ) ; +#12205 = LINE ( 'NONE', #5848, #11286 ) ; +#12206 = VECTOR ( 'NONE', #1702, 1000.000000000000000 ) ; +#12207 = ORIENTED_EDGE ( 'NONE', *, *, #1220, .F. ) ; +#12208 = VECTOR ( 'NONE', #2434, 1000.000000000000000 ) ; +#12209 = AXIS2_PLACEMENT_3D ( 'NONE', #11330, #8955, #8851 ) ; +#12210 = LINE ( 'NONE', #4154, #783 ) ; +#12211 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.4000000000000000200, 2.949999999999999700 ) ) ; +#12212 = ADVANCED_FACE ( 'NONE', ( #9625 ), #717, .T. ) ; +#12213 = VECTOR ( 'NONE', #704, 1000.000000000000000 ) ; +#12214 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12215 = ORIENTED_EDGE ( 'NONE', *, *, #2588, .T. ) ; +#12216 = ORIENTED_EDGE ( 'NONE', *, *, #3802, .T. ) ; +#12217 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12218 = ORIENTED_EDGE ( 'NONE', *, *, #1902, .T. ) ; +#12219 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12220 = ORIENTED_EDGE ( 'NONE', *, *, #13110, .T. ) ; +#12221 = EDGE_CURVE ( 'NONE', #14554, #1732, #2930, .T. ) ; +#12222 = FACE_OUTER_BOUND ( 'NONE', #14380, .T. ) ; +#12223 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999988600, -15.05858178898088800, -6.900000000000000400 ) ) ; +#12224 = PLANE ( 'NONE', #14058 ) ; +#12225 = FACE_OUTER_BOUND ( 'NONE', #8512, .T. ) ; +#12226 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 3.550000000000001200 ) ) ; +#12227 = ADVANCED_FACE ( 'NONE', ( #10956 ), #10258, .T. ) ; +#12228 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12229 = EDGE_CURVE ( 'NONE', #14674, #11503, #11326, .T. ) ; +#12230 = VERTEX_POINT ( 'NONE', #10314 ) ; +#12231 = ORIENTED_EDGE ( 'NONE', *, *, #6646, .F. ) ; +#12232 = AXIS2_PLACEMENT_3D ( 'NONE', #13602, #1618, #10090 ) ; +#12233 = PLANE ( 'NONE', #11065 ) ; +#12234 = PLANE ( 'NONE', #9201 ) ; +#12235 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#12236 = PLANE ( 'NONE', #12801 ) ; +#12237 = VECTOR ( 'NONE', #2169, 1000.000000000000000 ) ; +#12238 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12239 = FACE_OUTER_BOUND ( 'NONE', #8614, .T. ) ; +#12240 = PLANE ( 'NONE', #11005 ) ; +#12241 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, -0.9499999999999990700 ) ) ; +#12242 = ADVANCED_FACE ( 'NONE', ( #13021 ), #15254, .T. ) ; +#12243 = PLANE ( 'NONE', #13300 ) ; +#12244 = EDGE_CURVE ( 'NONE', #5815, #9795, #8114, .T. ) ; +#12245 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000031300, 0.4000000000000000200, -0.3500000000000011400 ) ) ; +#12246 = ORIENTED_EDGE ( 'NONE', *, *, #14850, .T. ) ; +#12247 = VERTEX_POINT ( 'NONE', #625 ) ; +#12248 = ADVANCED_FACE ( 'NONE', ( #6971 ), #14098, .F. ) ; +#12249 = DIRECTION ( 'NONE', ( -3.097720492815728600E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12250 = VERTEX_POINT ( 'NONE', #10423 ) ; +#12251 = EDGE_CURVE ( 'NONE', #5310, #15716, #15485, .T. ) ; +#12252 = CIRCLE ( 'NONE', #2918, 0.2749999999999991900 ) ; +#12253 = ORIENTED_EDGE ( 'NONE', *, *, #11583, .T. ) ; +#12254 = ORIENTED_EDGE ( 'NONE', *, *, #15542, .F. ) ; +#12255 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999968400, 0.4000000000000000200, 5.649999999999999500 ) ) ; +#12256 = EDGE_LOOP ( 'NONE', ( #7391, #3427, #14608, #9924 ) ) ; +#12257 = FACE_OUTER_BOUND ( 'NONE', #10935, .T. ) ; +#12258 = VERTEX_POINT ( 'NONE', #8049 ) ; +#12259 = ORIENTED_EDGE ( 'NONE', *, *, #3329, .F. ) ; +#12260 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.3999999999999999700, 2.549999999999999800 ) ) ; +#12261 = ORIENTED_EDGE ( 'NONE', *, *, #945, .F. ) ; +#12262 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000009600, 0.4000000000000000200, 6.550000000000002500 ) ) ; +#12263 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12264 = EDGE_CURVE ( 'NONE', #14292, #13442, #8675, .T. ) ; +#12265 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12266 = ORIENTED_EDGE ( 'NONE', *, *, #12918, .T. ) ; +#12267 = VECTOR ( 'NONE', #13451, 1000.000000000000000 ) ; +#12268 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#12269 = ORIENTED_EDGE ( 'NONE', *, *, #12898, .T. ) ; +#12270 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#12271 = LINE ( 'NONE', #4173, #9441 ) ; +#12272 = LINE ( 'NONE', #4204, #13039 ) ; +#12273 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12274 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#12275 = FILL_AREA_STYLE ('',( #14623 ) ) ; +#12276 = ORIENTED_EDGE ( 'NONE', *, *, #5775, .F. ) ; +#12277 = ORIENTED_EDGE ( 'NONE', *, *, #9410, .T. ) ; +#12278 = VECTOR ( 'NONE', #7051, 1000.000000000000000 ) ; +#12279 = ORIENTED_EDGE ( 'NONE', *, *, #9914, .F. ) ; +#12280 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000000300, -2.879999999999999400 ) ) ; +#12281 = FACE_OUTER_BOUND ( 'NONE', #9447, .T. ) ; +#12282 = FACE_OUTER_BOUND ( 'NONE', #7788, .T. ) ; +#12283 = AXIS2_PLACEMENT_3D ( 'NONE', #200, #11281, #14996 ) ; +#12284 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, -2.449999999999998800 ) ) ; +#12285 = ADVANCED_FACE ( 'NONE', ( #11699 ), #14154, .F. ) ; +#12286 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#12287 = EDGE_CURVE ( 'NONE', #3605, #14300, #10576, .T. ) ; +#12288 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12289 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12290 = EDGE_CURVE ( 'NONE', #13418, #8838, #12252, .T. ) ; +#12291 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12292 = FACE_OUTER_BOUND ( 'NONE', #8364, .T. ) ; +#12293 = ORIENTED_EDGE ( 'NONE', *, *, #3393, .F. ) ; +#12294 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.104919411450195700E-016 ) ) ; +#12295 = CIRCLE ( 'NONE', #9518, 0.2749999999999991900 ) ; +#12296 = LINE ( 'NONE', #11252, #15527 ) ; +#12297 = AXIS2_PLACEMENT_3D ( 'NONE', #3101, #14013, #12819 ) ; +#12298 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000035500, 0.8000000000000000400, -1.674999999999999400 ) ) ; +#12299 = ADVANCED_FACE ( 'NONE', ( #8872, #6576 ), #930, .F. ) ; +#12300 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.8000000000000000400, -4.500000000000000000 ) ) ; +#12301 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999951700, 0.4000000000000000200, 5.050000000000000700 ) ) ; +#12302 = VERTEX_POINT ( 'NONE', #7035 ) ; +#12303 = SURFACE_STYLE_FILL_AREA ( #9150 ) ; +#12304 = ORIENTED_EDGE ( 'NONE', *, *, #1548, .F. ) ; +#12305 = EDGE_CURVE ( 'NONE', #11342, #5188, #85, .T. ) ; +#12306 = LINE ( 'NONE', #1425, #5302 ) ; +#12307 = VECTOR ( 'NONE', #15346, 1000.000000000000000 ) ; +#12308 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999998600, 0.4000000000000000200, 9.550000000000000700 ) ) ; +#12309 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#12310 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.3999999999999999700, 2.950000000000000200 ) ) ; +#12311 = ADVANCED_FACE ( 'NONE', ( #6201 ), #5748, .T. ) ; +#12312 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000004300, 0.4000000000000000200, 8.050000000000004300 ) ) ; +#12314 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12313 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12315 = EDGE_CURVE ( 'NONE', #6612, #6603, #4087, .T. ) ; +#12316 = AXIS2_PLACEMENT_3D ( 'NONE', #1099, #9476, #2322 ) ; +#12317 = ORIENTED_EDGE ( 'NONE', *, *, #1764, .F. ) ; +#12318 = MANIFOLD_SOLID_BREP ( 'LPattern1[11]', #11429 ) ; +#12319 = ORIENTED_EDGE ( 'NONE', *, *, #13544, .F. ) ; +#12320 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 7.150000000000000400 ) ) ; +#12321 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, -3.349999999999998800 ) ) ; +#12322 = VECTOR ( 'NONE', #13926, 1000.000000000000000 ) ; +#12323 = ORIENTED_EDGE ( 'NONE', *, *, #10652, .T. ) ; +#12324 = ORIENTED_EDGE ( 'NONE', *, *, #4395, .T. ) ; +#12325 = EDGE_LOOP ( 'NONE', ( #9376 ) ) ; +#12326 = FACE_OUTER_BOUND ( 'NONE', #6094, .T. ) ; +#12327 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#12328 = ORIENTED_EDGE ( 'NONE', *, *, #2927, .T. ) ; +#12329 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, -0.1749999999999989300 ) ) ; +#12330 = EDGE_CURVE ( 'NONE', #4450, #14938, #4274, .T. ) ; +#12331 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12332 = ORIENTED_EDGE ( 'NONE', *, *, #9340, .F. ) ; +#12333 = ORIENTED_EDGE ( 'NONE', *, *, #5321, .T. ) ; +#12334 = ORIENTED_EDGE ( 'NONE', *, *, #2266, .T. ) ; +#12335 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#12336 = ORIENTED_EDGE ( 'NONE', *, *, #3684, .F. ) ; +#12337 = ORIENTED_EDGE ( 'NONE', *, *, #40, .T. ) ; +#12338 = EDGE_LOOP ( 'NONE', ( #1495, #11826, #14332, #1943 ) ) ; +#12339 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12340 = EDGE_CURVE ( 'NONE', #12654, #13015, #3497, .T. ) ; +#12341 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 6.100000000000001400 ) ) ; +#12342 = LINE ( 'NONE', #7472, #15567 ) ; +#12343 = LINE ( 'NONE', #8668, #3032 ) ; +#12344 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #13294 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7915, #592, #9336 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12345 = LINE ( 'NONE', #15270, #5900 ) ; +#12346 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000039100, 0.8000000000000000400, -2.449999999999998800 ) ) ; +#12347 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12348 = ORIENTED_EDGE ( 'NONE', *, *, #12716, .F. ) ; +#12349 = ORIENTED_EDGE ( 'NONE', *, *, #12497, .F. ) ; +#12350 = ORIENTED_EDGE ( 'NONE', *, *, #6927, .T. ) ; +#12351 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.7000000000000009500, -6.900000000000000400 ) ) ; +#12352 = DIRECTION ( 'NONE', ( -1.548860246407863300E-016, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#12353 = ORIENTED_EDGE ( 'NONE', *, *, #10018, .T. ) ; +#12354 = ORIENTED_EDGE ( 'NONE', *, *, #5062, .T. ) ; +#12355 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12356 = EDGE_CURVE ( 'NONE', #15367, #12636, #9606, .T. ) ; +#12357 = ORIENTED_EDGE ( 'NONE', *, *, #9638, .T. ) ; +#12358 = EDGE_CURVE ( 'NONE', #2790, #15367, #259, .T. ) ; +#12359 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, -0.0000000000000000000, -3.350000000000000500 ) ) ; +#12360 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000000700, -2.877979999999999100 ) ) ; +#12361 = VECTOR ( 'NONE', #13350, 1000.000000000000000 ) ; +#12362 = CYLINDRICAL_SURFACE ( 'NONE', #13601, 0.3000000000000007700 ) ; +#12363 = PRESENTATION_STYLE_ASSIGNMENT (( #5573 ) ) ; +#12364 = EDGE_LOOP ( 'NONE', ( #3498, #10586, #3632, #6283 ) ) ; +#12365 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -5.478074134663595300E-015 ) ) ; +#12366 = ADVANCED_FACE ( 'NONE', ( #10555 ), #989, .T. ) ; +#12367 = ORIENTED_EDGE ( 'NONE', *, *, #10106, .F. ) ; +#12368 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#12369 = CARTESIAN_POINT ( 'NONE', ( -7.819452524890163400, 3.207639970946512000, 9.051952621458760000 ) ) ; +#12370 = VERTEX_POINT ( 'NONE', #13168 ) ; +#12371 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12372 = ORIENTED_EDGE ( 'NONE', *, *, #878, .F. ) ; +#12373 = ORIENTED_EDGE ( 'NONE', *, *, #5425, .F. ) ; +#12375 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12374 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999920400, 0.4000000000000000200, 2.050000000000001600 ) ) ; +#12376 = LINE ( 'NONE', #7457, #10302 ) ; +#12377 = LINE ( 'NONE', #3652, #10687 ) ; +#12378 = FACE_OUTER_BOUND ( 'NONE', #14584, .T. ) ; +#12379 = LINE ( 'NONE', #11996, #13147 ) ; +#12380 = ORIENTED_EDGE ( 'NONE', *, *, #14569, .T. ) ; +#12381 = ADVANCED_FACE ( 'NONE', ( #6956 ), #4673, .F. ) ; +#12382 = EDGE_CURVE ( 'NONE', #6021, #11771, #1020, .T. ) ; +#12383 = ORIENTED_EDGE ( 'NONE', *, *, #447, .T. ) ; +#12384 = ORIENTED_EDGE ( 'NONE', *, *, #2507, .F. ) ; +#12385 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#12386 = EDGE_CURVE ( 'NONE', #12188, #9953, #13396, .T. ) ; +#12387 = LINE ( 'NONE', #1769, #3452 ) ; +#12388 = PLANE ( 'NONE', #6649 ) ; +#12389 = VECTOR ( 'NONE', #9279, 1000.000000000000000 ) ; +#12390 = LINE ( 'NONE', #1734, #604 ) ; +#12391 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, 0.5500000000000010400 ) ) ; +#12392 = EDGE_LOOP ( 'NONE', ( #2739, #4192, #4222, #5721 ) ) ; +#12393 = ORIENTED_EDGE ( 'NONE', *, *, #14824, .T. ) ; +#12394 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12395 = ADVANCED_FACE ( 'NONE', ( #11129 ), #3541, .T. ) ; +#12396 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.6999999999999999600, -5.150000000000001200 ) ) ; +#12397 = ORIENTED_EDGE ( 'NONE', *, *, #3338, .T. ) ; +#12398 = ORIENTED_EDGE ( 'NONE', *, *, #645, .T. ) ; +#12399 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.351999999999999400, -2.780000000000001100 ) ) ; +#12400 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12401 = STYLED_ITEM ( 'NONE', ( #15244 ), #524 ) ; +#12402 = VECTOR ( 'NONE', #5085, 1000.000000000000000 ) ; +#12403 = LINE ( 'NONE', #8555, #12609 ) ; +#12404 = LINE ( 'NONE', #4857, #2495 ) ; +#12405 = PLANE ( 'NONE', #7191 ) ; +#12406 = EDGE_CURVE ( 'NONE', #6949, #4176, #7918, .T. ) ; +#12407 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 9.550000000000000700 ) ) ; +#12408 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12409 = EDGE_CURVE ( 'NONE', #11800, #143, #12822, .T. ) ; +#12410 = VECTOR ( 'NONE', #9157, 1000.000000000000000 ) ; +#12411 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#12412 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12413 = VERTEX_POINT ( 'NONE', #6068 ) ; +#12414 = CARTESIAN_POINT ( 'NONE', ( 7.579455349686084800, 3.146673601807759500, -2.797441010350340200 ) ) ; +#12415 = AXIS2_PLACEMENT_3D ( 'NONE', #11918, #5879, #11971 ) ; +#12416 = VECTOR ( 'NONE', #15717, 1000.000000000000000 ) ; +#12417 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12418 = VECTOR ( 'NONE', #10408, 1000.000000000000000 ) ; +#12419 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000020300, 0.8000000000000000400, 2.649999999999997700 ) ) ; +#12420 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, -0.3500000000000004800 ) ) ; +#12421 = CARTESIAN_POINT ( 'NONE', ( -7.575703978347817700, 3.147979999999999600, 9.005520281879283200 ) ) ; +#12422 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12423 = LINE ( 'NONE', #10205, #4645 ) ; +#12425 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 3.550000000000001200 ) ) ; +#12424 = SURFACE_SIDE_STYLE ('',( #7486 ) ) ; +#12426 = ORIENTED_EDGE ( 'NONE', *, *, #10499, .T. ) ; +#12427 = ORIENTED_EDGE ( 'NONE', *, *, #12315, .F. ) ; +#12428 = EDGE_CURVE ( 'NONE', #2777, #939, #11686, .T. ) ; +#12429 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12430 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#12431 = ORIENTED_EDGE ( 'NONE', *, *, #5255, .T. ) ; +#12432 = FACE_OUTER_BOUND ( 'NONE', #15127, .T. ) ; +#12433 = ORIENTED_EDGE ( 'NONE', *, *, #3024, .T. ) ; +#12434 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12435 = EDGE_CURVE ( 'NONE', #10743, #4103, #10943, .T. ) ; +#12436 = ORIENTED_EDGE ( 'NONE', *, *, #13787, .T. ) ; +#12437 = LINE ( 'NONE', #1756, #7924 ) ; +#12438 = VECTOR ( 'NONE', #6923, 1000.000000000000000 ) ; +#12439 = AXIS2_PLACEMENT_3D ( 'NONE', #11369, #6489, #5208 ) ; +#12440 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 5.650000000000000400 ) ) ; +#12441 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12442 = VERTEX_POINT ( 'NONE', #15747 ) ; +#12443 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 6.550000000000001600 ) ) ; +#12444 = ORIENTED_EDGE ( 'NONE', *, *, #4310, .T. ) ; +#12445 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 10.00000000000000000 ) ) ; +#12446 = ADVANCED_FACE ( 'NONE', ( #6565 ), #2354, .F. ) ; +#12447 = CARTESIAN_POINT ( 'NONE', ( -7.607607578482643800, 3.132769666234337200, -2.815924342264481500 ) ) ; +#12448 = VERTEX_POINT ( 'NONE', #8469 ) ; +#12449 = LINE ( 'NONE', #8852, #1993 ) ; +#12450 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12451 = ORIENTED_EDGE ( 'NONE', *, *, #6273, .F. ) ; +#12452 = ORIENTED_EDGE ( 'NONE', *, *, #1690, .F. ) ; +#12453 = EDGE_CURVE ( 'NONE', #8974, #9610, #5227, .T. ) ; +#12454 = EDGE_CURVE ( 'NONE', #10133, #13863, #1400, .T. ) ; +#12455 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12456 = VERTEX_POINT ( 'NONE', #13385 ) ; +#12457 = LINE ( 'NONE', #7535, #4485 ) ; +#12458 = VECTOR ( 'NONE', #1457, 1000.000000000000000 ) ; +#12459 = DIRECTION ( 'NONE', ( 5.478074134663594500E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#12460 = ORIENTED_EDGE ( 'NONE', *, *, #14161, .T. ) ; +#12461 = CARTESIAN_POINT ( 'NONE', ( 7.629277334261819200, 3.351999999999999400, 9.005530125675983700 ) ) ; +#12462 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12463 = ADVANCED_FACE ( 'NONE', ( #7525 ), #13218, .T. ) ; +#12464 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 9.099999999999999600 ) ) ; +#12465 = AXIS2_PLACEMENT_3D ( 'NONE', #14962, #7696, #370 ) ; +#12466 = PLANE ( 'NONE', #15626 ) ; +#12467 = CARTESIAN_POINT ( 'NONE', ( 7.611952621458756100, 3.207639970946511100, -3.049452524890162500 ) ) ; +#12468 = ORIENTED_EDGE ( 'NONE', *, *, #12330, .F. ) ; +#12469 = LINE ( 'NONE', #11448, #9454 ) ; +#12470 = EDGE_LOOP ( 'NONE', ( #41, #8891, #13212, #13702 ) ) ; +#12471 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.7000000000000009500, -6.100000000000000500 ) ) ; +#12472 = ORIENTED_EDGE ( 'NONE', *, *, #1692, .F. ) ; +#12473 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 3.374999999999999600 ) ) ; +#12474 = LINE ( 'NONE', #6912, #10593 ) ; +#12475 = LINE ( 'NONE', #4531, #2182 ) ; +#12476 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12477 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12478 = FILL_AREA_STYLE_COLOUR ( '', #5933 ) ; +#12479 = EDGE_CURVE ( 'NONE', #6662, #1589, #7715, .T. ) ; +#12480 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#12481 = ADVANCED_FACE ( 'NONE', ( #435 ), #2309, .T. ) ; +#12482 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.097720492815727700E-016 ) ) ; +#12483 = FACE_OUTER_BOUND ( 'NONE', #10869, .T. ) ; +#12484 = EDGE_LOOP ( 'NONE', ( #14494, #3706, #12436, #10536 ) ) ; +#12485 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#12486 = VECTOR ( 'NONE', #13441, 1000.000000000000000 ) ; +#12487 = FACE_OUTER_BOUND ( 'NONE', #8032, .T. ) ; +#12488 = CARTESIAN_POINT ( 'NONE', ( 7.649999999999999500, 3.149999999999999900, -2.872928932188135900 ) ) ; +#12489 = DIRECTION ( 'NONE', ( 5.478074134663594500E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#12490 = CARTESIAN_POINT ( 'NONE', ( 7.649999999999999500, 3.049999999999999800, -2.872928932188135900 ) ) ; +#12491 = FACE_OUTER_BOUND ( 'NONE', #260, .T. ) ; +#12492 = PLANE ( 'NONE', #6867 ) ; +#12493 = ORIENTED_EDGE ( 'NONE', *, *, #7995, .T. ) ; +#12494 = AXIS2_PLACEMENT_3D ( 'NONE', #5577, #1989, #14188 ) ; +#12495 = VECTOR ( 'NONE', #15736, 1000.000000000000000 ) ; +#12496 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12497 = EDGE_CURVE ( 'NONE', #12712, #3433, #15301, .T. ) ; +#12498 = ORIENTED_EDGE ( 'NONE', *, *, #6264, .T. ) ; +#12499 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 5.050000000000000700 ) ) ; +#12500 = EDGE_CURVE ( 'NONE', #9260, #611, #10362, .T. ) ; +#12501 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 1.600000000000000800 ) ) ; +#12502 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.149999999999999500, 8.990000000000000200 ) ) ; +#12503 = EDGE_LOOP ( 'NONE', ( #15670, #1224, #12796, #5336 ) ) ; +#12504 = LINE ( 'NONE', #7328, #4723 ) ; +#12505 = EDGE_LOOP ( 'NONE', ( #9165, #1411, #6559, #9783 ) ) ; +#12506 = AXIS2_PLACEMENT_3D ( 'NONE', #6722, #13882, #671 ) ; +#12507 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12508 = LINE ( 'NONE', #8701, #3577 ) ; +#12509 = VECTOR ( 'NONE', #14042, 1000.000000000000000 ) ; +#12510 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 2.649999999999999500 ) ) ; +#12511 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 1.149999999999999900 ) ) ; +#12512 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#12513 = DIRECTION ( 'NONE', ( 1.991647080244473300E-031, 6.123233995736767300E-017, 1.000000000000000000 ) ) ; +#12514 = EDGE_LOOP ( 'NONE', ( #9329, #15024, #4676, #8197 ) ) ; +#12515 = EDGE_CURVE ( 'NONE', #14893, #7750, #9786, .T. ) ; +#12516 = ORIENTED_EDGE ( 'NONE', *, *, #4320, .T. ) ; +#12517 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#12518 = ADVANCED_FACE ( 'NONE', ( #12432 ), #10845, .F. ) ; +#12519 = LINE ( 'NONE', #11761, #15383 ) ; +#12520 = VERTEX_POINT ( 'NONE', #8355 ) ; +#12521 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #14187 ), #3658 ) ; +#12522 = VERTEX_POINT ( 'NONE', #10150 ) ; +#12523 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 1.149999999999999900 ) ) ; +#12524 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999889500, 0.4000000000000000200, -1.850000000000001000 ) ) ; +#12525 = FACE_OUTER_BOUND ( 'NONE', #13699, .T. ) ; +#12526 = VECTOR ( 'NONE', #12616, 1000.000000000000000 ) ; +#12528 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12527 = FILL_AREA_STYLE_COLOUR ( '', #1746 ) ; +#12529 = EDGE_CURVE ( 'NONE', #1585, #10825, #641, .T. ) ; +#12531 = ORIENTED_EDGE ( 'NONE', *, *, #13169, .T. ) ; +#12530 = AXIS2_PLACEMENT_3D ( 'NONE', #5161, #14732, #9841 ) ; +#12532 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -2.551063935260010500E-016 ) ) ; +#12533 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999968400, 0.4000000000000000200, 6.550000000000002500 ) ) ; +#12534 = ORIENTED_EDGE ( 'NONE', *, *, #12110, .T. ) ; +#12535 = ORIENTED_EDGE ( 'NONE', *, *, #11442, .F. ) ; +#12536 = ADVANCED_FACE ( 'NONE', ( #15661 ), #291, .T. ) ; +#12537 = ORIENTED_EDGE ( 'NONE', *, *, #6155, .T. ) ; +#12538 = EDGE_LOOP ( 'NONE', ( #15268, #11140, #539, #8134 ) ) ; +#12539 = ORIENTED_EDGE ( 'NONE', *, *, #6250, .F. ) ; +#12540 = ADVANCED_FACE ( 'NONE', ( #7335 ), #14984, .T. ) ; +#12541 = VECTOR ( 'NONE', #14533, 1000.000000000000000 ) ; +#12542 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999988600, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#12543 = EDGE_CURVE ( 'NONE', #15562, #3061, #4070, .T. ) ; +#12544 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12545 = AXIS2_PLACEMENT_3D ( 'NONE', #5597, #13996, #3181 ) ; +#12546 = VECTOR ( 'NONE', #14634, 1000.000000000000000 ) ; +#12547 = ORIENTED_EDGE ( 'NONE', *, *, #14877, .T. ) ; +#12548 = DIRECTION ( 'NONE', ( -6.195440985631456300E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12549 = ORIENTED_EDGE ( 'NONE', *, *, #10432, .F. ) ; +#12550 = PLANE ( 'NONE', #8565 ) ; +#12551 = ORIENTED_EDGE ( 'NONE', *, *, #12793, .F. ) ; +#12552 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000000400, 3.064605673451389600, -2.864288157986073300 ) ) ; +#12553 = EDGE_CURVE ( 'NONE', #7402, #4537, #9971, .T. ) ; +#12554 = ADVANCED_FACE ( 'NONE', ( #5614 ), #8839, .T. ) ; +#12555 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12556 = ORIENTED_EDGE ( 'NONE', *, *, #8951, .F. ) ; +#12557 = VECTOR ( 'NONE', #11532, 1000.000000000000000 ) ; +#12558 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#12559 = VECTOR ( 'NONE', #14134, 1000.000000000000000 ) ; +#12560 = LINE ( 'NONE', #14892, #9533 ) ; +#12561 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12562 = VECTOR ( 'NONE', #5510, 1000.000000000000000 ) ; +#12563 = ORIENTED_EDGE ( 'NONE', *, *, #10119, .F. ) ; +#12564 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.147979999999999600, 8.990000000000000200 ) ) ; +#12565 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#12567 = EDGE_LOOP ( 'NONE', ( #13800, #8819, #11504, #6986 ) ) ; +#12566 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#12568 = EDGE_CURVE ( 'NONE', #2994, #15029, #14174, .T. ) ; +#12569 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#12570 = ORIENTED_EDGE ( 'NONE', *, *, #8253, .T. ) ; +#12571 = FILL_AREA_STYLE ('',( #4074 ) ) ; +#12572 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, -15.05858178898088800, -9.600000000000001400 ) ) ; +#12573 = VERTEX_POINT ( 'NONE', #6597 ) ; +#12574 = LINE ( 'NONE', #5779, #8451 ) ; +#12575 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12576 = VECTOR ( 'NONE', #3488, 1000.000000000000000 ) ; +#12577 = VECTOR ( 'NONE', #4684, 1000.000000000000000 ) ; +#12578 = VECTOR ( 'NONE', #10517, 1000.000000000000000 ) ; +#12579 = LINE ( 'NONE', #13474, #12005 ) ; +#12580 = FACE_OUTER_BOUND ( 'NONE', #5807, .T. ) ; +#12581 = AXIS2_PLACEMENT_3D ( 'NONE', #6872, #8098, #1953 ) ; +#12582 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 5.825000000000002000 ) ) ; +#12583 = ORIENTED_EDGE ( 'NONE', *, *, #13157, .F. ) ; +#12584 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12585 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12586 = ORIENTED_EDGE ( 'NONE', *, *, #5137, .T. ) ; +#12587 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12588 = ORIENTED_EDGE ( 'NONE', *, *, #14605, .T. ) ; +#12589 = LINE ( 'NONE', #4671, #10912 ) ; +#12590 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999980800, 0.4000000000000000200, 7.150000000000002100 ) ) ; +#12591 = LINE ( 'NONE', #795, #2492 ) ; +#12592 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, -1.674999999999998900 ) ) ; +#12593 = LINE ( 'NONE', #1272, #3102 ) ; +#12594 = EDGE_CURVE ( 'NONE', #13997, #12853, #3889, .T. ) ; +#12595 = VECTOR ( 'NONE', #11637, 1000.000000000000000 ) ; +#12596 = LINE ( 'NONE', #9042, #10340 ) ; +#12597 = ORIENTED_EDGE ( 'NONE', *, *, #15545, .F. ) ; +#12598 = ORIENTED_EDGE ( 'NONE', *, *, #2156, .T. ) ; +#12599 = EDGE_CURVE ( 'NONE', #2539, #846, #14544, .T. ) ; +#12600 = PLANE ( 'NONE', #9459 ) ; +#12601 = ORIENTED_EDGE ( 'NONE', *, *, #188, .F. ) ; +#12602 = EDGE_CURVE ( 'NONE', #15429, #11933, #1976, .T. ) ; +#12603 = FILL_AREA_STYLE ('',( #11392 ) ) ; +#12604 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 1.806230589874906900, 4.149999999999999500 ) ) ; +#12605 = ORIENTED_EDGE ( 'NONE', *, *, #14161, .F. ) ; +#12606 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12607 = FACE_OUTER_BOUND ( 'NONE', #9351, .T. ) ; +#12608 = PLANE ( 'NONE', #14958 ) ; +#12609 = VECTOR ( 'NONE', #12137, 1000.000000000000000 ) ; +#12610 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12611 = CARTESIAN_POINT ( 'NONE', ( -7.634883614495200800, 3.104446300443229200, -2.839151875882608000 ) ) ; +#12612 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12613 = FACE_OUTER_BOUND ( 'NONE', #12806, .T. ) ; +#12614 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#12615 = VERTEX_POINT ( 'NONE', #5360 ) ; +#12616 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12617 = VERTEX_POINT ( 'NONE', #1503 ) ; +#12618 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude5[2]', #6297 ) ; +#12619 = PLANE ( 'NONE', #11751 ) ; +#12620 = EDGE_CURVE ( 'NONE', #3724, #2260, #14915, .T. ) ; +#12621 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12622 = ADVANCED_FACE ( 'NONE', ( #12239 ), #11270, .T. ) ; +#12623 = VECTOR ( 'NONE', #10338, 1000.000000000000000 ) ; +#12624 = VECTOR ( 'NONE', #15544, 1000.000000000000000 ) ; +#12625 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 8.650000000000000400 ) ) ; +#12626 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 5.050000000000000700 ) ) ; +#12627 = PLANE ( 'NONE', #4746 ) ; +#12628 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000009600, 0.4000000000000000200, 6.550000000000000700 ) ) ; +#12629 = ADVANCED_FACE ( 'NONE', ( #9414 ), #4077, .T. ) ; +#12630 = SURFACE_STYLE_FILL_AREA ( #4032 ) ; +#12631 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12632 = DIRECTION ( 'NONE', ( -5.478074134663594500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12633 = ORIENTED_EDGE ( 'NONE', *, *, #2664, .F. ) ; +#12634 = ORIENTED_EDGE ( 'NONE', *, *, #6019, .F. ) ; +#12635 = AXIS2_PLACEMENT_3D ( 'NONE', #1117, #11032, #14587 ) ; +#12636 = VERTEX_POINT ( 'NONE', #11623 ) ; +#12637 = AXIS2_PLACEMENT_3D ( 'NONE', #15436, #10515, #8233 ) ; +#12638 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 5.050000000000000700 ) ) ; +#12639 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #15578, 'distance_accuracy_value', 'NONE'); +#12640 = DIRECTION ( 'NONE', ( 1.991647080244473300E-031, 6.123233995736767300E-017, 1.000000000000000000 ) ) ; +#12641 = EDGE_LOOP ( 'NONE', ( #8012, #15456, #5964, #12349 ) ) ; +#12642 = LINE ( 'NONE', #1792, #3705 ) ; +#12643 = ORIENTED_EDGE ( 'NONE', *, *, #8759, .T. ) ; +#12644 = ORIENTED_EDGE ( 'NONE', *, *, #13141, .F. ) ; +#12645 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#12647 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12646 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000004100, 0.8000000000000000400, -4.000000000000000000 ) ) ; +#12648 = ORIENTED_EDGE ( 'NONE', *, *, #11870, .T. ) ; +#12649 = LINE ( 'NONE', #847, #14178 ) ; +#12650 = VECTOR ( 'NONE', #2213, 1000.000000000000000 ) ; +#12651 = EDGE_CURVE ( 'NONE', #12302, #13814, #4642, .T. ) ; +#12652 = PLANE ( 'NONE', #6276 ) ; +#12653 = ORIENTED_EDGE ( 'NONE', *, *, #8762, .F. ) ; +#12654 = VERTEX_POINT ( 'NONE', #10352 ) ; +#12655 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12656 = ORIENTED_EDGE ( 'NONE', *, *, #4583, .T. ) ; +#12657 = EDGE_CURVE ( 'NONE', #15673, #371, #13973, .T. ) ; +#12658 = LINE ( 'NONE', #11909, #14759 ) ; +#12659 = ORIENTED_EDGE ( 'NONE', *, *, #4755, .T. ) ; +#12660 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #9418 ) ) ; +#12661 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#12662 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 4.325000000000001100 ) ) ; +#12663 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 4.874999999999999100 ) ) ; +#12664 = LINE ( 'NONE', #9346, #10974 ) ; +#12665 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12666 = PLANE ( 'NONE', #15072 ) ; +#12667 = EDGE_LOOP ( 'NONE', ( #5312, #2192, #1596, #7975 ) ) ; +#12668 = PLANE ( 'NONE', #5996 ) ; +#12669 = EDGE_CURVE ( 'NONE', #6498, #2178, #4819, .T. ) ; +#12670 = EDGE_CURVE ( 'NONE', #10091, #15742, #2524, .T. ) ; +#12671 = ORIENTED_EDGE ( 'NONE', *, *, #11749, .T. ) ; +#12672 = LINE ( 'NONE', #7802, #5843 ) ; +#12673 = EDGE_LOOP ( 'NONE', ( #321, #955, #9140, #11685 ) ) ; +#12674 = CARTESIAN_POINT ( 'NONE', ( 7.852000000000001200, 3.050000000000000700, 9.082928932188135500 ) ) ; +#12675 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12676 = AXIS2_PLACEMENT_3D ( 'NONE', #4749, #13416, #13244 ) ; +#12677 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#12678 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 3.100000000000000500 ) ) ; +#12679 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#12680 = AXIS2_PLACEMENT_3D ( 'NONE', #1978, #14126, #5776 ) ; +#12681 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000041900, 0.4000000000000000200, -3.350000000000000500 ) ) ; +#12682 = FILL_AREA_STYLE ('',( #4130 ) ) ; +#12683 = ORIENTED_EDGE ( 'NONE', *, *, #14628, .F. ) ; +#12684 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.8000000000000000400, -5.150000000000001200 ) ) ; +#12685 = FACE_OUTER_BOUND ( 'NONE', #5191, .T. ) ; +#12686 = FACE_OUTER_BOUND ( 'NONE', #8767, .T. ) ; +#12687 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#12688 = EDGE_CURVE ( 'NONE', #11993, #14135, #13190, .T. ) ; +#12689 = VERTEX_POINT ( 'NONE', #8033 ) ; +#12690 = CARTESIAN_POINT ( 'NONE', ( -7.649999999999999500, 3.149999999999999900, -2.872928932188135100 ) ) ; +#12691 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, -0.9499999999999995100 ) ) ; +#12692 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12693 = EDGE_CURVE ( 'NONE', #9820, #15232, #15111, .T. ) ; +#12694 = ORIENTED_EDGE ( 'NONE', *, *, #9123, .F. ) ; +#12695 = VERTEX_POINT ( 'NONE', #3166 ) ; +#12696 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#12697 = LINE ( 'NONE', #2943, #11012 ) ; +#12698 = ORIENTED_EDGE ( 'NONE', *, *, #13428, .F. ) ; +#12699 = ADVANCED_FACE ( 'NONE', ( #11671 ), #9210, .F. ) ; +#12700 = LINE ( 'NONE', #7371, #7031 ) ; +#12701 = VECTOR ( 'NONE', #505, 1000.000000000000000 ) ; +#12702 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12703 = ADVANCED_FACE ( 'NONE', ( #1385 ), #10299, .F. ) ; +#12704 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12705 = CARTESIAN_POINT ( 'NONE', ( -6.050000000000001600, 3.149999999999999900, 7.440000000000001300 ) ) ; +#12706 = CARTESIAN_POINT ( 'NONE', ( 7.565530125675980600, 3.351999999999999900, 9.069277334261814300 ) ) ; +#12707 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000007600, 0.7999999999999971600, -3.080000000000001000 ) ) ; +#12708 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3361 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6802, #8086, #9296 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#12709 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#12710 = ORIENTED_EDGE ( 'NONE', *, *, #3393, .T. ) ; +#12711 = LINE ( 'NONE', #554, #5881 ) ; +#12712 = VERTEX_POINT ( 'NONE', #13923 ) ; +#12713 = VERTEX_POINT ( 'NONE', #13978 ) ; +#12714 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999889500, 0.0000000000000000000, -1.849999999999998300 ) ) ; +#12715 = EDGE_LOOP ( 'NONE', ( #1215, #14462, #80, #3396 ) ) ; +#12716 = EDGE_CURVE ( 'NONE', #8549, #7680, #11859, .T. ) ; +#12717 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12718 = EDGE_CURVE ( 'NONE', #10820, #10381, #10735, .T. ) ; +#12719 = FACE_OUTER_BOUND ( 'NONE', #10957, .T. ) ; +#12720 = VECTOR ( 'NONE', #10612, 1000.000000000000000 ) ; +#12721 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000001400, 3.128752156770255900, -2.857398903010504000 ) ) ; +#12722 = ORIENTED_EDGE ( 'NONE', *, *, #15460, .F. ) ; +#12723 = ORIENTED_EDGE ( 'NONE', *, *, #2129, .F. ) ; +#12724 = EDGE_LOOP ( 'NONE', ( #11, #9052, #836, #13478, #2124, #9756 ) ) ; +#12725 = AXIS2_PLACEMENT_3D ( 'NONE', #3037, #11499, #8696 ) ; +#12726 = PLANE ( 'NONE', #7400 ) ; +#12727 = VERTEX_POINT ( 'NONE', #15240 ) ; +#12728 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999973400, 0.0000000000000000000, 1.325000000000001500 ) ) ; +#12729 = ORIENTED_EDGE ( 'NONE', *, *, #7846, .F. ) ; +#12730 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12731 = VERTEX_POINT ( 'NONE', #12939 ) ; +#12732 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12733 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999984000, 0.8000000000000000400, 4.325000000000001100 ) ) ; +#12734 = FACE_OUTER_BOUND ( 'NONE', #8213, .T. ) ; +#12735 = FACE_OUTER_BOUND ( 'NONE', #11822, .T. ) ; +#12736 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12737 = VECTOR ( 'NONE', #10175, 1000.000000000000000 ) ; +#12738 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12739 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#12740 = ORIENTED_EDGE ( 'NONE', *, *, #13570, .F. ) ; +#12741 = EDGE_CURVE ( 'NONE', #9, #13418, #5986, .T. ) ; +#12742 = VERTEX_POINT ( 'NONE', #12883 ) ; +#12743 = ORIENTED_EDGE ( 'NONE', *, *, #15269, .T. ) ; +#12744 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12745 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999890200, 0.4000000000000000200, -0.9499999999999995100 ) ) ; +#12746 = ORIENTED_EDGE ( 'NONE', *, *, #13345, .F. ) ; +#12747 = VERTEX_POINT ( 'NONE', #6863 ) ; +#12748 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 8.050000000000000700 ) ) ; +#12749 = VERTEX_POINT ( 'NONE', #703 ) ; +#12751 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12750 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#12752 = EDGE_CURVE ( 'NONE', #15534, #5245, #5599, .T. ) ; +#12753 = VECTOR ( 'NONE', #3545, 1000.000000000000000 ) ; +#12754 = VECTOR ( 'NONE', #9885, 1000.000000000000000 ) ; +#12755 = AXIS2_PLACEMENT_3D ( 'NONE', #54, #6035, #12066 ) ; +#12756 = VECTOR ( 'NONE', #1770, 1000.000000000000000 ) ; +#12757 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12758 = EDGE_LOOP ( 'NONE', ( #13924, #10710, #8579, #4724 ) ) ; +#12759 = ORIENTED_EDGE ( 'NONE', *, *, #5966, .T. ) ; +#12760 = EDGE_LOOP ( 'NONE', ( #14571, #15370, #3529, #2195 ) ) ; +#12761 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12762 = EDGE_LOOP ( 'NONE', ( #15378, #14961, #5914, #9537, #3209, #8960 ) ) ; +#12763 = PLANE ( 'NONE', #2367 ) ; +#12764 = EDGE_CURVE ( 'NONE', #12747, #8600, #11488, .T. ) ; +#12765 = ORIENTED_EDGE ( 'NONE', *, *, #13110, .F. ) ; +#12766 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 4.325000000000001100 ) ) ; +#12767 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.195440985631453300E-016 ) ) ; +#12768 = LINE ( 'NONE', #8584, #7093 ) ; +#12769 = LINE ( 'NONE', #285, #9547 ) ; +#12770 = VECTOR ( 'NONE', #9584, 1000.000000000000000 ) ; +#12771 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999995000, 0.4000000000000000200, 8.650000000000003900 ) ) ; +#12772 = LINE ( 'NONE', #6540, #10305 ) ; +#12773 = VERTEX_POINT ( 'NONE', #4404 ) ; +#12774 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, -3.350000000000000500 ) ) ; +#12775 = EDGE_CURVE ( 'NONE', #8373, #10439, #13578, .T. ) ; +#12776 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999995000, 0.4000000000000000200, 8.650000000000003900 ) ) ; +#12777 = EDGE_LOOP ( 'NONE', ( #14565, #2428, #6342, #1700 ) ) ; +#12778 = AXIS2_PLACEMENT_3D ( 'NONE', #8747, #310, #10057 ) ; +#12779 = ORIENTED_EDGE ( 'NONE', *, *, #1114, .F. ) ; +#12780 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12781 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10032 ), #11666 ) ; +#12782 = LINE ( 'NONE', #14705, #7106 ) ; +#12783 = FACE_OUTER_BOUND ( 'NONE', #2080, .T. ) ; +#12784 = LINE ( 'NONE', #2518, #7292 ) ; +#12785 = VECTOR ( 'NONE', #15465, 1000.000000000000000 ) ; +#12786 = VECTOR ( 'NONE', #5122, 1000.000000000000000 ) ; +#12787 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#12788 = ADVANCED_FACE ( 'NONE', ( #8083 ), #14140, .F. ) ; +#12789 = LINE ( 'NONE', #5593, #7298 ) ; +#12790 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.491481338843133400E-015, -1.000000000000000000 ) ) ; +#12791 = EDGE_LOOP ( 'NONE', ( #2090, #8239, #6690, #7524, #4987, #13193 ) ) ; +#12792 = ORIENTED_EDGE ( 'NONE', *, *, #10752, .F. ) ; +#12793 = EDGE_CURVE ( 'NONE', #9439, #1318, #9037, .T. ) ; +#12794 = ADVANCED_FACE ( 'NONE', ( #10927 ), #15441, .T. ) ; +#12795 = VERTEX_POINT ( 'NONE', #15581 ) ; +#12796 = ORIENTED_EDGE ( 'NONE', *, *, #8051, .F. ) ; +#12797 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000003200, 0.4000000000000000200, 2.949999999999999300 ) ) ; +#12798 = VECTOR ( 'NONE', #9822, 1000.000000000000000 ) ; +#12799 = FILL_AREA_STYLE ('',( #1949 ) ) ; +#12800 = VECTOR ( 'NONE', #12184, 1000.000000000000000 ) ; +#12801 = AXIS2_PLACEMENT_3D ( 'NONE', #6209, #8609, #14696 ) ; +#12802 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.7000000000000009500, -9.600000000000001400 ) ) ; +#12803 = LINE ( 'NONE', #10669, #10533 ) ; +#12804 = CARTESIAN_POINT ( 'NONE', ( -7.565530029177630000, 3.350000000000000100, 9.068752156770251800 ) ) ; +#12805 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12806 = EDGE_LOOP ( 'NONE', ( #10608, #4094, #1196, #8345 ) ) ; +#12807 = VERTEX_POINT ( 'NONE', #868 ) ; +#12808 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, 1.149999999999999900 ) ) ; +#12809 = EDGE_CURVE ( 'NONE', #4736, #14060, #8274, .T. ) ; +#12810 = VECTOR ( 'NONE', #7323, 1000.000000000000000 ) ; +#12811 = EDGE_CURVE ( 'NONE', #12258, #3707, #3484, .T. ) ; +#12812 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, -3.350000000000000500 ) ) ; +#12813 = EDGE_CURVE ( 'NONE', #6329, #8035, #630, .T. ) ; +#12814 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12815 = VERTEX_POINT ( 'NONE', #6974 ) ; +#12816 = ORIENTED_EDGE ( 'NONE', *, *, #3984, .T. ) ; +#12817 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude5[4]', #13801 ) ; +#12818 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 6.550000000000000700 ) ) ; +#12819 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#12820 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12821 = ORIENTED_EDGE ( 'NONE', *, *, #9614, .F. ) ; +#12822 = LINE ( 'NONE', #13263, #4657 ) ; +#12823 = EDGE_LOOP ( 'NONE', ( #8376, #4801, #11466, #1786 ) ) ; +#12824 = ORIENTED_EDGE ( 'NONE', *, *, #3542, .T. ) ; +#12825 = LINE ( 'NONE', #8534, #9612 ) ; +#12826 = EDGE_LOOP ( 'NONE', ( #11337, #8582, #13104, #14857 ) ) ; +#12827 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12828 = EDGE_CURVE ( 'NONE', #7100, #9571, #1374, .T. ) ; +#12829 = SURFACE_SIDE_STYLE ('',( #14298 ) ) ; +#12830 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, -1.850000000000000500 ) ) ; +#12831 = VERTEX_POINT ( 'NONE', #5679 ) ; +#12832 = AXIS2_PLACEMENT_3D ( 'NONE', #255, #11126, #1467 ) ; +#12833 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12834 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#12835 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12836 = ORIENTED_EDGE ( 'NONE', *, *, #11965, .T. ) ; +#12837 = FACE_OUTER_BOUND ( 'NONE', #3182, .T. ) ; +#12838 = ORIENTED_EDGE ( 'NONE', *, *, #363, .T. ) ; +#12839 = VERTEX_POINT ( 'NONE', #15530 ) ; +#12840 = EDGE_CURVE ( 'NONE', #3622, #8000, #15633, .T. ) ; +#12841 = ORIENTED_EDGE ( 'NONE', *, *, #11937, .T. ) ; +#12842 = VECTOR ( 'NONE', #2436, 1000.000000000000000 ) ; +#12843 = LINE ( 'NONE', #8686, #3325 ) ; +#12844 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13360 ), #13665 ) ; +#12845 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12846 = ADVANCED_FACE ( 'NONE', ( #6940 ), #2044, .T. ) ; +#12847 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12848 = VERTEX_POINT ( 'NONE', #13097 ) ; +#12849 = CARTESIAN_POINT ( 'NONE', ( -7.627408552845517800, 3.076234407614293800, 9.090000000000001600 ) ) ; +#12850 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999980800, 0.4000000000000000200, 8.050000000000004300 ) ) ; +#12851 = ORIENTED_EDGE ( 'NONE', *, *, #14800, .T. ) ; +#12852 = LINE ( 'NONE', #850, #5648 ) ; +#12853 = VERTEX_POINT ( 'NONE', #7075 ) ; +#12854 = VERTEX_POINT ( 'NONE', #8290 ) ; +#12855 = EDGE_CURVE ( 'NONE', #12773, #12839, #7325, .T. ) ; +#12856 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#12857 = LINE ( 'NONE', #11464, #2016 ) ; +#12858 = VECTOR ( 'NONE', #3841, 1000.000000000000000 ) ; +#12859 = ADVANCED_FACE ( 'NONE', ( #3864 ), #11926, .T. ) ; +#12860 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999998200, 0.8000000000000000400, 8.649999999999993200 ) ) ; +#12861 = EDGE_CURVE ( 'NONE', #14207, #10361, #7702, .T. ) ; +#12862 = ADVANCED_FACE ( 'NONE', ( #3100 ), #14344, .T. ) ; +#12863 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9628 ), #11664 ) ; +#12864 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#12865 = CIRCLE ( 'NONE', #5174, 0.2749999999999991900 ) ; +#12866 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.149999999999999900, 8.990000000000002000 ) ) ; +#12867 = EDGE_LOOP ( 'NONE', ( #957, #9880, #12160, #6210, #12901, #13647 ) ) ; +#12868 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12869 = VECTOR ( 'NONE', #2944, 1000.000000000000000 ) ; +#12870 = VECTOR ( 'NONE', #7919, 1000.000000000000000 ) ; +#12871 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 4.149999999999999500 ) ) ; +#12872 = EDGE_CURVE ( 'NONE', #15549, #2595, #3292, .T. ) ; +#12873 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#12874 = LINE ( 'NONE', #11673, #3946 ) ; +#12875 = ORIENTED_EDGE ( 'NONE', *, *, #15637, .T. ) ; +#12876 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, -3.349999999999998800 ) ) ; +#12877 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12878 = VECTOR ( 'NONE', #2104, 1000.000000000000000 ) ; +#12879 = LINE ( 'NONE', #3531, #6065 ) ; +#12880 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.8000000000000000400, -3.350000000000000500 ) ) ; +#12881 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 9.550000000000000700 ) ) ; +#12882 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#12883 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.0000000000000000000, 1.849999999999999900 ) ) ; +#12884 = AXIS2_PLACEMENT_3D ( 'NONE', #15078, #10185, #6747 ) ; +#12885 = CARTESIAN_POINT ( 'NONE', ( 7.817458334292940200, 3.206844258255254300, -2.841888831344180100 ) ) ; +#12886 = PLANE ( 'NONE', #11180 ) ; +#12887 = ORIENTED_EDGE ( 'NONE', *, *, #3371, .T. ) ; +#12888 = PLANE ( 'NONE', #8431 ) ; +#12889 = FACE_OUTER_BOUND ( 'NONE', #895, .T. ) ; +#12890 = ORIENTED_EDGE ( 'NONE', *, *, #8304, .F. ) ; +#12891 = ORIENTED_EDGE ( 'NONE', *, *, #4612, .T. ) ; +#12892 = ORIENTED_EDGE ( 'NONE', *, *, #8522, .F. ) ; +#12893 = EDGE_CURVE ( 'NONE', #4883, #5744, #4453, .T. ) ; +#12894 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#12895 = LINE ( 'NONE', #12119, #3966 ) ; +#12896 = LINE ( 'NONE', #9057, #8554 ) ; +#12897 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#12898 = EDGE_CURVE ( 'NONE', #10677, #9767, #2512, .T. ) ; +#12899 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.0000000000000000000, 1.850000000000000100 ) ) ; +#12900 = EDGE_LOOP ( 'NONE', ( #10961, #5819, #968, #5327 ) ) ; +#12901 = ORIENTED_EDGE ( 'NONE', *, *, #13733, .T. ) ; +#12902 = ORIENTED_EDGE ( 'NONE', *, *, #3942, .F. ) ; +#12903 = CIRCLE ( 'NONE', #7926, 0.2749999999999991900 ) ; +#12904 = EDGE_LOOP ( 'NONE', ( #3555, #15019, #11131, #7333 ) ) ; +#12905 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3343 ) ) ; +#12906 = ORIENTED_EDGE ( 'NONE', *, *, #11296, .T. ) ; +#12907 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12908 = VECTOR ( 'NONE', #15133, 1000.000000000000000 ) ; +#12909 = CIRCLE ( 'NONE', #2576, 0.2749999999999991900 ) ; +#12910 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 4.149999999999999500 ) ) ; +#12911 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 2.551063935260010500E-016 ) ) ; +#12912 = ORIENTED_EDGE ( 'NONE', *, *, #10715, .T. ) ; +#12913 = AXIS2_PLACEMENT_3D ( 'NONE', #5805, #4912, #8006 ) ; +#12914 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000002800, 0.8000000000000000400, -4.500000000000000900 ) ) ; +#12915 = ORIENTED_EDGE ( 'NONE', *, *, #14784, .F. ) ; +#12916 = ORIENTED_EDGE ( 'NONE', *, *, #8633, .T. ) ; +#12917 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 2.050000000000001600 ) ) ; +#12918 = EDGE_CURVE ( 'NONE', #2405, #66, #12403, .T. ) ; +#12919 = ORIENTED_EDGE ( 'NONE', *, *, #4579, .F. ) ; +#12920 = CARTESIAN_POINT ( 'NONE', ( -7.849999999999999600, 3.050000000000000300, -2.879999999999999400 ) ) ; +#12921 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 8.050000000000000700 ) ) ; +#12922 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12923 = ORIENTED_EDGE ( 'NONE', *, *, #8836, .T. ) ; +#12924 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000005000, 0.8000000000000000400, -4.500000000000000900 ) ) ; +#12925 = LINE ( 'NONE', #2463, #11044 ) ; +#12926 = PRESENTATION_STYLE_ASSIGNMENT (( #8462 ) ) ; +#12927 = ORIENTED_EDGE ( 'NONE', *, *, #3240, .F. ) ; +#12928 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, 8.650000000000000400 ) ) ; +#12929 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12930 = ADVANCED_FACE ( 'NONE', ( #9399 ), #6741, .F. ) ; +#12931 = EDGE_LOOP ( 'NONE', ( #6931, #4911, #10970, #15606 ) ) ; +#12932 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12933 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000004600, 0.8000000000000000400, 7.150000000000000400 ) ) ; +#12934 = PLANE ( 'NONE', #10667 ) ; +#12935 = ORIENTED_EDGE ( 'NONE', *, *, #6337, .T. ) ; +#12936 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000014900, 0.4000000000000000200, 5.049999999999997200 ) ) ; +#12937 = ADVANCED_FACE ( 'NONE', ( #13568 ), #2500, .F. ) ; +#12938 = VERTEX_POINT ( 'NONE', #6165 ) ; +#12939 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, -2.449999999999997500 ) ) ; +#12940 = LINE ( 'NONE', #10310, #6502 ) ; +#12941 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12942 = LINE ( 'NONE', #2417, #14114 ) ; +#12943 = FACE_OUTER_BOUND ( 'NONE', #7580, .T. ) ; +#12944 = VECTOR ( 'NONE', #2795, 1000.000000000000000 ) ; +#12945 = EDGE_CURVE ( 'NONE', #3061, #4278, #3469, .T. ) ; +#12946 = ORIENTED_EDGE ( 'NONE', *, *, #4522, .F. ) ; +#12947 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12948 = VERTEX_POINT ( 'NONE', #1182 ) ; +#12949 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#12951 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#12950 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999996400, 0.8000000000000000400, 8.049999999999995400 ) ) ; +#12952 = ORIENTED_EDGE ( 'NONE', *, *, #3421, .F. ) ; +#12953 = EDGE_CURVE ( 'NONE', #6949, #6010, #2905, .T. ) ; +#12954 = FACE_OUTER_BOUND ( 'NONE', #750, .T. ) ; +#12955 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12956 = LINE ( 'NONE', #13177, #7464 ) ; +#12957 = VECTOR ( 'NONE', #12965, 1000.000000000000000 ) ; +#12958 = LINE ( 'NONE', #4266, #4006 ) ; +#12959 = VECTOR ( 'NONE', #7855, 1000.000000000000000 ) ; +#12960 = LINE ( 'NONE', #9726, #15435 ) ; +#12961 = ORIENTED_EDGE ( 'NONE', *, *, #15502, .T. ) ; +#12962 = ORIENTED_EDGE ( 'NONE', *, *, #6900, .T. ) ; +#12963 = PLANE ( 'NONE', #1868 ) ; +#12964 = EDGE_CURVE ( 'NONE', #8718, #7805, #11108, .T. ) ; +#12965 = DIRECTION ( 'NONE', ( -2.762298528625412100E-017, 1.000000000000000000, 3.506355962080744500E-015 ) ) ; +#12966 = EDGE_CURVE ( 'NONE', #15565, #3044, #13776, .T. ) ; +#12967 = ORIENTED_EDGE ( 'NONE', *, *, #5802, .T. ) ; +#12968 = DIRECTION ( 'NONE', ( -1.807003620809173900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12969 = LINE ( 'NONE', #13589, #15445 ) ; +#12970 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 5.050000000000000700 ) ) ; +#12971 = FACE_OUTER_BOUND ( 'NONE', #15363, .T. ) ; +#12972 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 2.650000000000001700 ) ) ; +#12973 = VECTOR ( 'NONE', #2651, 1000.000000000000000 ) ; +#12974 = VECTOR ( 'NONE', #12805, 1000.000000000000000 ) ; +#12975 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12976 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#12977 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 9.375000000000000000 ) ) ; +#12978 = AXIS2_PLACEMENT_3D ( 'NONE', #8370, #1046, #7256 ) ; +#12979 = ORIENTED_EDGE ( 'NONE', *, *, #8759, .F. ) ; +#12980 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 9.000000000000001800 ) ) ; +#12981 = ORIENTED_EDGE ( 'NONE', *, *, #8045, .F. ) ; +#12982 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3725 ), #6192 ) ; +#12983 = ORIENTED_EDGE ( 'NONE', *, *, #11729, .T. ) ; +#12984 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12985 = PLANE ( 'NONE', #15669 ) ; +#12986 = LINE ( 'NONE', #3835, #4054 ) ; +#12987 = LINE ( 'NONE', #6312, #15459 ) ; +#12988 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12989 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#12990 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, 5.050000000000000700 ) ) ; +#12991 = EDGE_CURVE ( 'NONE', #12617, #3192, #9776, .T. ) ; +#12992 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999968400, 0.0000000000000000000, 5.650000000000001200 ) ) ; +#12993 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12994 = LINE ( 'NONE', #11417, #4822 ) ; +#12995 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#12996 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#12997 = ORIENTED_EDGE ( 'NONE', *, *, #7697, .F. ) ; +#12998 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 3.550000000000001200 ) ) ; +#12999 = EDGE_LOOP ( 'NONE', ( #10984, #9992, #11240, #6849 ) ) ; +#13000 = EDGE_CURVE ( 'NONE', #3097, #4870, #8655, .T. ) ; +#13001 = VERTEX_POINT ( 'NONE', #9713 ) ; +#13002 = AXIS2_PLACEMENT_3D ( 'NONE', #12488, #10056, #9016 ) ; +#13003 = LINE ( 'NONE', #11858, #1772 ) ; +#13004 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13005 = VECTOR ( 'NONE', #14557, 1000.000000000000000 ) ; +#13006 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #15649 ), #5291 ) ; +#13007 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13009 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13008 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13010 = FACE_OUTER_BOUND ( 'NONE', #11400, .T. ) ; +#13011 = VECTOR ( 'NONE', #14502, 1000.000000000000000 ) ; +#13012 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 7.600000000000000500 ) ) ; +#13013 = ORIENTED_EDGE ( 'NONE', *, *, #4970, .F. ) ; +#13014 = ORIENTED_EDGE ( 'NONE', *, *, #12688, .T. ) ; +#13015 = VERTEX_POINT ( 'NONE', #9608 ) ; +#13016 = ADVANCED_FACE ( 'NONE', ( #12225 ), #12240, .T. ) ; +#13017 = EDGE_CURVE ( 'NONE', #562, #12094, #4056, .T. ) ; +#13018 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -2.551063935260010500E-016 ) ) ; +#13019 = VERTEX_POINT ( 'NONE', #73 ) ; +#13020 = ADVANCED_FACE ( 'NONE', ( #10336 ), #13370, .T. ) ; +#13021 = FACE_OUTER_BOUND ( 'NONE', #99, .T. ) ; +#13022 = EDGE_CURVE ( 'NONE', #8591, #12848, #996, .T. ) ; +#13023 = VERTEX_POINT ( 'NONE', #9817 ) ; +#13024 = ORIENTED_EDGE ( 'NONE', *, *, #8120, .F. ) ; +#13025 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13026 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13027 = ORIENTED_EDGE ( 'NONE', *, *, #8365, .F. ) ; +#13028 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13029 = LINE ( 'NONE', #6680, #9061 ) ; +#13030 = FACE_OUTER_BOUND ( 'NONE', #10775, .T. ) ; +#13031 = ORIENTED_EDGE ( 'NONE', *, *, #10776, .F. ) ; +#13032 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13033 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13034 = ORIENTED_EDGE ( 'NONE', *, *, #14800, .F. ) ; +#13035 = VERTEX_POINT ( 'NONE', #4864 ) ; +#13036 = LINE ( 'NONE', #207, #12267 ) ; +#13037 = ORIENTED_EDGE ( 'NONE', *, *, #9663, .T. ) ; +#13038 = VECTOR ( 'NONE', #14337, 1000.000000000000000 ) ; +#13039 = VECTOR ( 'NONE', #15266, 1000.000000000000000 ) ; +#13040 = EDGE_CURVE ( 'NONE', #15723, #5067, #9580, .T. ) ; +#13041 = DIRECTION ( 'NONE', ( -5.478074134663591400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13042 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#13043 = PLANE ( 'NONE', #1988 ) ; +#13044 = PLANE ( 'NONE', #10061 ) ; +#13045 = ORIENTED_EDGE ( 'NONE', *, *, #8906, .F. ) ; +#13046 = CARTESIAN_POINT ( 'NONE', ( 7.627304606097597500, 3.129230332643794000, 9.290000000000000900 ) ) ; +#13047 = DIRECTION ( 'NONE', ( -6.598435676419215900E-033, 3.491481338843133400E-015, -1.000000000000000000 ) ) ; +#13048 = CARTESIAN_POINT ( 'NONE', ( 7.629230338724656100, 3.350000000000000500, -2.795624327289693700 ) ) ; +#13049 = VERTEX_POINT ( 'NONE', #8869 ) ; +#13050 = EDGE_CURVE ( 'NONE', #13297, #10622, #5782, .T. ) ; +#13051 = FACE_OUTER_BOUND ( 'NONE', #13166, .T. ) ; +#13052 = CARTESIAN_POINT ( 'NONE', ( -7.580998920361182100, 3.317567445684515000, -2.936658047799210400 ) ) ; +#13053 = EDGE_LOOP ( 'NONE', ( #1575, #15136, #7306, #14848, #523, #13353 ) ) ; +#13054 = AXIS2_PLACEMENT_3D ( 'NONE', #1454, #12513, #1666 ) ; +#13055 = CARTESIAN_POINT ( 'NONE', ( -7.850000000000001400, 3.128752156770257600, -2.857398903010502700 ) ) ; +#13056 = LINE ( 'NONE', #12733, #9836 ) ; +#13057 = LINE ( 'NONE', #13842, #10397 ) ; +#13058 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 3.550000000000001200 ) ) ; +#13059 = EDGE_CURVE ( 'NONE', #7285, #8768, #3677, .T. ) ; +#13060 = AXIS2_PLACEMENT_3D ( 'NONE', #11316, #7885, #6543 ) ; +#13061 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 6.550000000000001600 ) ) ; +#13062 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.3999999999999999700, 0.5500000000000010400 ) ) ; +#13063 = SURFACE_STYLE_FILL_AREA ( #10615 ) ; +#13064 = ORIENTED_EDGE ( 'NONE', *, *, #7590, .F. ) ; +#13065 = CIRCLE ( 'NONE', #14404, 0.2749999999999991900 ) ; +#13066 = FACE_OUTER_BOUND ( 'NONE', #8758, .T. ) ; +#13067 = VERTEX_POINT ( 'NONE', #2600 ) ; +#13068 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 8.650000000000000400 ) ) ; +#13069 = EDGE_CURVE ( 'NONE', #7654, #8009, #235, .T. ) ; +#13070 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13071 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 8.050000000000000700 ) ) ; +#13072 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999920400, 0.4000000000000000200, 1.150000000000002100 ) ) ; +#13073 = ORIENTED_EDGE ( 'NONE', *, *, #8118, .F. ) ; +#13074 = VECTOR ( 'NONE', #10086, 1000.000000000000000 ) ; +#13075 = ORIENTED_EDGE ( 'NONE', *, *, #1865, .F. ) ; +#13076 = ORIENTED_EDGE ( 'NONE', *, *, #12964, .T. ) ; +#13077 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13078 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13079 = CYLINDRICAL_SURFACE ( 'NONE', #1109, 0.2749999999999991900 ) ; +#13080 = EDGE_CURVE ( 'NONE', #1674, #7631, #12987, .T. ) ; +#13081 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999951700, 0.4000000000000000200, 4.150000000000001200 ) ) ; +#13082 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13083 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, -3.349999999999998800 ) ) ; +#13084 = ORIENTED_EDGE ( 'NONE', *, *, #10131, .F. ) ; +#13085 = VECTOR ( 'NONE', #2126, 1000.000000000000000 ) ; +#13086 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999980100, 0.0000000000000000000, 8.050000000000004300 ) ) ; +#13087 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#13088 = ORIENTED_EDGE ( 'NONE', *, *, #9196, .T. ) ; +#13089 = AXIS2_PLACEMENT_3D ( 'NONE', #10941, #9602, #3629 ) ; +#13090 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#13091 = VERTEX_POINT ( 'NONE', #3852 ) ; +#13092 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#13093 = PLANE ( 'NONE', #5831 ) ; +#13094 = ADVANCED_FACE ( 'NONE', ( #9025 ), #13629, .T. ) ; +#13095 = VECTOR ( 'NONE', #15373, 1000.000000000000000 ) ; +#13096 = CIRCLE ( 'NONE', #347, 0.5000000000000004400 ) ; +#13097 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999920400, 0.0000000000000000000, 1.150000000000002100 ) ) ; +#13098 = AXIS2_PLACEMENT_3D ( 'NONE', #3415, #3474, #2188 ) ; +#13099 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000002500, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#13100 = PLANE ( 'NONE', #8150 ) ; +#13101 = ORIENTED_EDGE ( 'NONE', *, *, #4205, .T. ) ; +#13102 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 6.550000000000001600 ) ) ; +#13103 = ORIENTED_EDGE ( 'NONE', *, *, #14825, .F. ) ; +#13104 = ORIENTED_EDGE ( 'NONE', *, *, #10849, .F. ) ; +#13105 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#13106 = EDGE_CURVE ( 'NONE', #11143, #8705, #6355, .T. ) ; +#13107 = VERTEX_POINT ( 'NONE', #14754 ) ; +#13108 = EDGE_LOOP ( 'NONE', ( #2882, #12357, #4539, #15073 ) ) ; +#13109 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#13110 = EDGE_CURVE ( 'NONE', #1364, #11039, #14713, .T. ) ; +#13112 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13111 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13113 = EDGE_CURVE ( 'NONE', #1229, #6716, #2132, .T. ) ; +#13114 = LINE ( 'NONE', #2995, #932 ) ; +#13115 = FACE_OUTER_BOUND ( 'NONE', #12931, .T. ) ; +#13116 = LINE ( 'NONE', #12127, #3994 ) ; +#13117 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 3.550000000000001200 ) ) ; +#13118 = CARTESIAN_POINT ( 'NONE', ( -7.611952621458756100, 3.101144252825625900, -2.867420392015688400 ) ) ; +#13119 = ORIENTED_EDGE ( 'NONE', *, *, #11375, .T. ) ; +#13120 = ORIENTED_EDGE ( 'NONE', *, *, #1686, .F. ) ; +#13121 = VERTEX_POINT ( 'NONE', #1337 ) ; +#13122 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #9675 ), #590 ) ; +#13123 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #13935, 'distance_accuracy_value', 'NONE'); +#13124 = ORIENTED_EDGE ( 'NONE', *, *, #11995, .T. ) ; +#13125 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#13126 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13127 = ORIENTED_EDGE ( 'NONE', *, *, #5647, .T. ) ; +#13128 = ORIENTED_EDGE ( 'NONE', *, *, #6900, .F. ) ; +#13129 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13130 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000000700, 9.087979999999999900 ) ) ; +#13131 = VECTOR ( 'NONE', #14670, 1000.000000000000000 ) ; +#13132 = CARTESIAN_POINT ( 'NONE', ( 7.640440641471891500, 3.092667204855682700, 9.056851616828785400 ) ) ; +#13133 = LINE ( 'NONE', #4546, #6307 ) ; +#13134 = ORIENTED_EDGE ( 'NONE', *, *, #1569, .T. ) ; +#13135 = EDGE_CURVE ( 'NONE', #7146, #7403, #5010, .T. ) ; +#13136 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 6.550000000000001600 ) ) ; +#13137 = ORIENTED_EDGE ( 'NONE', *, *, #5255, .F. ) ; +#13138 = ORIENTED_EDGE ( 'NONE', *, *, #11831, .F. ) ; +#13139 = VERTEX_POINT ( 'NONE', #7538 ) ; +#13140 = ORIENTED_EDGE ( 'NONE', *, *, #15520, .T. ) ; +#13141 = EDGE_CURVE ( 'NONE', #6681, #3489, #3279, .T. ) ; +#13142 = LINE ( 'NONE', #350, #9546 ) ; +#13143 = FACE_OUTER_BOUND ( 'NONE', #3298, .T. ) ; +#13144 = AXIS2_PLACEMENT_3D ( 'NONE', #1714, #10294, #491 ) ; +#13145 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#13146 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 5.825000000000002000 ) ) ; +#13147 = VECTOR ( 'NONE', #3811, 1000.000000000000000 ) ; +#13148 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13149 = CARTESIAN_POINT ( 'NONE', ( 8.549999999999998900, 0.8000000000000000400, 9.549999999999993600 ) ) ; +#13150 = ORIENTED_EDGE ( 'NONE', *, *, #209, .T. ) ; +#13151 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 4.325000000000001100 ) ) ; +#13152 = EDGE_LOOP ( 'NONE', ( #5810, #15131, #4936, #14572 ) ) ; +#13153 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 9.099999999999999600 ) ) ; +#13154 = VERTEX_POINT ( 'NONE', #2658 ) ; +#13155 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#13156 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13157 = EDGE_CURVE ( 'NONE', #4697, #6669, #6924, .T. ) ; +#13158 = LINE ( 'NONE', #11250, #5177 ) ; +#13159 = VECTOR ( 'NONE', #7977, 1000.000000000000000 ) ; +#13160 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13161 = VECTOR ( 'NONE', #15552, 1000.000000000000000 ) ; +#13162 = ORIENTED_EDGE ( 'NONE', *, *, #15637, .F. ) ; +#13163 = VECTOR ( 'NONE', #13844, 1000.000000000000000 ) ; +#13164 = FILL_AREA_STYLE ('',( #10790 ) ) ; +#13165 = LINE ( 'NONE', #3131, #10324 ) ; +#13166 = EDGE_LOOP ( 'NONE', ( #6888, #11698, #10744, #6343 ) ) ; +#13168 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000023800, 0.8000000000000000400, 1.149999999999999000 ) ) ; +#13167 = PLANE ( 'NONE', #1918 ) ; +#13169 = EDGE_CURVE ( 'NONE', #11357, #11021, #2118, .T. ) ; +#13170 = ORIENTED_EDGE ( 'NONE', *, *, #15477, .F. ) ; +#13171 = AXIS2_PLACEMENT_3D ( 'NONE', #15427, #8222, #2074 ) ; +#13172 = ORIENTED_EDGE ( 'NONE', *, *, #6114, .T. ) ; +#13173 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#13174 = VECTOR ( 'NONE', #12532, 1000.000000000000000 ) ; +#13175 = VECTOR ( 'NONE', #2289, 1000.000000000000000 ) ; +#13176 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000024900, 0.0000000000000000000, 1.325000000000001500 ) ) ; +#13177 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.4000000000000000200, 1.849999999999999900 ) ) ; +#13178 = ADVANCED_FACE ( 'NONE', ( #8638 ), #8757, .F. ) ; +#13179 = LINE ( 'NONE', #7230, #2499 ) ; +#13180 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13181 = EDGE_CURVE ( 'NONE', #8949, #9503, #2703, .T. ) ; +#13182 = EDGE_CURVE ( 'NONE', #5710, #9408, #8449, .T. ) ; +#13183 = ORIENTED_EDGE ( 'NONE', *, *, #6242, .T. ) ; +#13184 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#13185 = EDGE_LOOP ( 'NONE', ( #10766, #14303, #6241, #8094 ) ) ; +#13186 = CARTESIAN_POINT ( 'NONE', ( 7.626879667662413100, 3.115261346167814200, 9.041335216528851900 ) ) ; +#13187 = LINE ( 'NONE', #12166, #3483 ) ; +#13188 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#13189 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, 5.050000000000000700 ) ) ; +#13190 = LINE ( 'NONE', #3117, #14727 ) ; +#13191 = ADVANCED_FACE ( 'NONE', ( #9384 ), #6363, .T. ) ; +#13192 = PRESENTATION_STYLE_ASSIGNMENT (( #6499 ) ) ; +#13193 = ORIENTED_EDGE ( 'NONE', *, *, #520, .T. ) ; +#13194 = ORIENTED_EDGE ( 'NONE', *, *, #15175, .T. ) ; +#13195 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#13196 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 2.050000000000001600 ) ) ; +#13197 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13198 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.7000000000000009500, -6.900000000000000400 ) ) ; +#13199 = EDGE_CURVE ( 'NONE', #9479, #7473, #5198, .T. ) ; +#13200 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 8.825000000000001100 ) ) ; +#13201 = ORIENTED_EDGE ( 'NONE', *, *, #15520, .F. ) ; +#13202 = VECTOR ( 'NONE', #5410, 1000.000000000000000 ) ; +#13203 = ORIENTED_EDGE ( 'NONE', *, *, #1712, .F. ) ; +#13204 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13205 = ORIENTED_EDGE ( 'NONE', *, *, #3263, .T. ) ; +#13206 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 8.825000000000001100 ) ) ; +#13207 = EDGE_CURVE ( 'NONE', #5999, #10843, #11660, .T. ) ; +#13208 = VECTOR ( 'NONE', #5394, 1000.000000000000000 ) ; +#13209 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13210 = ORIENTED_EDGE ( 'NONE', *, *, #13855, .F. ) ; +#13211 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#13212 = ORIENTED_EDGE ( 'NONE', *, *, #10739, .T. ) ; +#13213 = ADVANCED_FACE ( 'NONE', ( #1743 ), #13944, .F. ) ; +#13214 = ORIENTED_EDGE ( 'NONE', *, *, #705, .F. ) ; +#13215 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #14120 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12219, #3726, #9793 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13216 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13218 = PLANE ( 'NONE', #8964 ) ; +#13217 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#13219 = ORIENTED_EDGE ( 'NONE', *, *, #13419, .F. ) ; +#13220 = CYLINDRICAL_SURFACE ( 'NONE', #13841, 0.2999999999999990500 ) ; +#13221 = VERTEX_POINT ( 'NONE', #1590 ) ; +#13222 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 12.10000000000000000 ) ) ; +#13223 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, -2.449999999999997500 ) ) ; +#13224 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#13225 = ORIENTED_EDGE ( 'NONE', *, *, #6429, .F. ) ; +#13226 = LINE ( 'NONE', #3995, #8123 ) ; +#13227 = VECTOR ( 'NONE', #7198, 1000.000000000000000 ) ; +#13228 = AXIS2_PLACEMENT_3D ( 'NONE', #2407, #9729, #14720 ) ; +#13229 = EDGE_LOOP ( 'NONE', ( #11141, #10762, #5792, #3556 ) ) ; +#13230 = EDGE_CURVE ( 'NONE', #8575, #3704, #1950, .T. ) ; +#13231 = EDGE_CURVE ( 'NONE', #3336, #10646, #9760, .T. ) ; +#13232 = SURFACE_STYLE_USAGE ( .BOTH. , #3499 ) ; +#13233 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#13234 = EDGE_LOOP ( 'NONE', ( #6439, #14077, #8445, #9970 ) ) ; +#13235 = LINE ( 'NONE', #13072, #14021 ) ; +#13236 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.4000000000000000200, -2.449999999999997500 ) ) ; +#13237 = ORIENTED_EDGE ( 'NONE', *, *, #7846, .T. ) ; +#13238 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13239 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#13240 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#13241 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13242 = VECTOR ( 'NONE', #8505, 1000.000000000000000 ) ; +#13243 = EDGE_LOOP ( 'NONE', ( #4646 ) ) ; +#13244 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13245 = EDGE_CURVE ( 'NONE', #5946, #6858, #4442, .T. ) ; +#13246 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13247 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000500, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#13248 = LINE ( 'NONE', #13597, #8528 ) ; +#13249 = FACE_OUTER_BOUND ( 'NONE', #8226, .T. ) ; +#13250 = CARTESIAN_POINT ( 'NONE', ( -7.607004589923652900, 3.107607578482643800, -2.862769666234338000 ) ) ; +#13251 = ORIENTED_EDGE ( 'NONE', *, *, #1087, .T. ) ; +#13252 = ADVANCED_FACE ( 'NONE', ( #15275 ), #11399, .F. ) ; +#13253 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13254 = EDGE_CURVE ( 'NONE', #1442, #5355, #11459, .T. ) ; +#13255 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13256 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13257 = LINE ( 'NONE', #11564, #8914 ) ; +#13258 = ORIENTED_EDGE ( 'NONE', *, *, #7099, .F. ) ; +#13259 = VECTOR ( 'NONE', #11846, 1000.000000000000000 ) ; +#13260 = FACE_OUTER_BOUND ( 'NONE', #190, .T. ) ; +#13261 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13263 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 6.550000000000001600 ) ) ; +#13262 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#13264 = EDGE_CURVE ( 'NONE', #9586, #1318, #1553, .T. ) ; +#13265 = EDGE_CURVE ( 'NONE', #937, #9542, #47, .T. ) ; +#13266 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13267 = DIRECTION ( 'NONE', ( 9.035018104045869500E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13268 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13269 = VERTEX_POINT ( 'NONE', #7760 ) ; +#13270 = LINE ( 'NONE', #8995, #6838 ) ; +#13271 = ORIENTED_EDGE ( 'NONE', *, *, #5192, .T. ) ; +#13272 = VERTEX_POINT ( 'NONE', #5339 ) ; +#13273 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#13274 = AXIS2_PLACEMENT_3D ( 'NONE', #11243, #11297, #13520 ) ; +#13275 = FILL_AREA_STYLE ('',( #9427 ) ) ; +#13276 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#13277 = PLANE ( 'NONE', #4904 ) ; +#13278 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 1.600000000000000800 ) ) ; +#13279 = ORIENTED_EDGE ( 'NONE', *, *, #12305, .T. ) ; +#13280 = EDGE_LOOP ( 'NONE', ( #9867, #9128, #10505, #8877, #11307, #2877 ) ) ; +#13281 = ORIENTED_EDGE ( 'NONE', *, *, #6313, .F. ) ; +#13282 = DIRECTION ( 'NONE', ( 5.478074134663594500E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#13283 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13284 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -6.195440985631455300E-016 ) ) ; +#13285 = VECTOR ( 'NONE', #7656, 1000.000000000000000 ) ; +#13286 = EDGE_LOOP ( 'NONE', ( #12186, #7543, #253, #13430 ) ) ; +#13287 = ADVANCED_FACE ( 'NONE', ( #5381 ), #426, .T. ) ; +#13288 = ORIENTED_EDGE ( 'NONE', *, *, #2204, .F. ) ; +#13289 = EDGE_CURVE ( 'NONE', #10375, #5435, #13364, .T. ) ; +#13290 = VECTOR ( 'NONE', #8440, 1000.000000000000000 ) ; +#13291 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#13292 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#13293 = EDGE_LOOP ( 'NONE', ( #5261, #13681, #8363, #3700 ) ) ; +#13294 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7915, 'distance_accuracy_value', 'NONE'); +#13295 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#13297 = VERTEX_POINT ( 'NONE', #473 ) ; +#13296 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#13298 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13299 = ORIENTED_EDGE ( 'NONE', *, *, #1057, .T. ) ; +#13300 = AXIS2_PLACEMENT_3D ( 'NONE', #14593, #3749, #1184 ) ; +#13301 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13302 = ORIENTED_EDGE ( 'NONE', *, *, #14498, .T. ) ; +#13303 = ORIENTED_EDGE ( 'NONE', *, *, #4060, .F. ) ; +#13304 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 0.5500000000000010400 ) ) ; +#13305 = AXIS2_PLACEMENT_3D ( 'NONE', #12771, #5493, #737 ) ; +#13306 = ORIENTED_EDGE ( 'NONE', *, *, #12021, .F. ) ; +#13307 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, -3.174999999999998900 ) ) ; +#13308 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13309 = PRESENTATION_STYLE_ASSIGNMENT (( #6090 ) ) ; +#13310 = LINE ( 'NONE', #9360, #4572 ) ; +#13311 = VECTOR ( 'NONE', #4907, 1000.000000000000000 ) ; +#13312 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 1.637941840314110200, 4.750000000000000000 ) ) ; +#13313 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 1.806230589874906900, 8.650000000000000400 ) ) ; +#13314 = ORIENTED_EDGE ( 'NONE', *, *, #13265, .T. ) ; +#13315 = ORIENTED_EDGE ( 'NONE', *, *, #7409, .T. ) ; +#13316 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#13317 = EDGE_CURVE ( 'NONE', #15753, #5896, #410, .T. ) ; +#13319 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13318 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13320 = ORIENTED_EDGE ( 'NONE', *, *, #2204, .T. ) ; +#13321 = EDGE_CURVE ( 'NONE', #4283, #8773, #12035, .T. ) ; +#13322 = EDGE_LOOP ( 'NONE', ( #5220, #2422, #9249, #741, #3373, #7268 ) ) ; +#13323 = ORIENTED_EDGE ( 'NONE', *, *, #6851, .F. ) ; +#13324 = VECTOR ( 'NONE', #8847, 1000.000000000000000 ) ; +#13325 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13326 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 3.550000000000001200 ) ) ; +#13327 = VECTOR ( 'NONE', #5530, 1000.000000000000000 ) ; +#13328 = LINE ( 'NONE', #10359, #6506 ) ; +#13329 = LINE ( 'NONE', #1606, #10289 ) ; +#13330 = AXIS2_PLACEMENT_3D ( 'NONE', #4368, #5376, #6608 ) ; +#13331 = ORIENTED_EDGE ( 'NONE', *, *, #15235, .T. ) ; +#13332 = PLANE ( 'NONE', #6919 ) ; +#13333 = ADVANCED_FACE ( 'NONE', ( #9011 ), #12666, .F. ) ; +#13334 = EDGE_LOOP ( 'NONE', ( #1710, #509, #8210, #8221 ) ) ; +#13335 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13336 = CARTESIAN_POINT ( 'NONE', ( -6.050000000000001600, 3.350000000000000100, 7.440000000000001300 ) ) ; +#13337 = ORIENTED_EDGE ( 'NONE', *, *, #7203, .F. ) ; +#13338 = FACE_OUTER_BOUND ( 'NONE', #2475, .T. ) ; +#13339 = LINE ( 'NONE', #9968, #598 ) ; +#13340 = CARTESIAN_POINT ( 'NONE', ( 7.634883614495200800, 3.104446300443228800, 9.049151875882605700 ) ) ; +#13341 = LINE ( 'NONE', #14563, #8994 ) ; +#13342 = LINE ( 'NONE', #15419, #12389 ) ; +#13343 = FACE_OUTER_BOUND ( 'NONE', #11103, .T. ) ; +#13344 = VECTOR ( 'NONE', #3992, 1000.000000000000000 ) ; +#13345 = EDGE_CURVE ( 'NONE', #2, #11811, #11289, .T. ) ; +#13346 = B_SPLINE_SURFACE_WITH_KNOTS ( 'NONE', 1, 3, ( + ( #6980, #5952, #11931, #10786, #872, #3326 ), + ( #14398, #13055, #5846, #9411, #2094, #11833 ), + ( #4665, #2142, #9504, #8243, #4562, #10583 ), + ( #15646, #5794, #15494, #2196, #8346, #9564 ) ), + .UNSPECIFIED., .F., .F., .F., + ( 2, 1, 1, 2 ), + ( 4, 2, 4 ), + ( -0.01000000000000000000, 0.0000000000000000000, 1.000000000000000000, 1.010100000000000000 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#13347 = VECTOR ( 'NONE', #11840, 1000.000000000000000 ) ; +#13348 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13349 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#13350 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#13351 = AXIS2_PLACEMENT_3D ( 'NONE', #3778, #1170, #10928 ) ; +#13352 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000017800, 0.8000000000000000400, 3.550000000000001200 ) ) ; +#13353 = ORIENTED_EDGE ( 'NONE', *, *, #12406, .T. ) ; +#13354 = ADVANCED_FACE ( 'NONE', ( #12971 ), #12550, .F. ) ; +#13355 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 2.649999999999999500 ) ) ; +#13356 = VERTEX_POINT ( 'NONE', #374 ) ; +#13357 = EDGE_LOOP ( 'NONE', ( #5275, #15313, #2555, #11398, #12946, #8318 ) ) ; +#13358 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13359 = EDGE_CURVE ( 'NONE', #11329, #5005, #14694, .T. ) ; +#13360 = STYLED_ITEM ( 'NONE', ( #15243 ), #15630 ) ; +#13361 = AXIS2_PLACEMENT_3D ( 'NONE', #13779, #9002, #1677 ) ; +#13362 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 1.875000000000000000 ) ) ; +#13363 = LINE ( 'NONE', #10587, #15273 ) ; +#13364 = LINE ( 'NONE', #11549, #10913 ) ; +#13365 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13366 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13367 = VECTOR ( 'NONE', #6964, 1000.000000000000000 ) ; +#13368 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999936400, 0.4000000000000000200, 3.550000000000002900 ) ) ; +#13369 = LINE ( 'NONE', #11474, #12410 ) ; +#13370 = PLANE ( 'NONE', #13746 ) ; +#13371 = VERTEX_POINT ( 'NONE', #11450 ) ; +#13372 = VERTEX_POINT ( 'NONE', #9334 ) ; +#13373 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#13374 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13375 = ORIENTED_EDGE ( 'NONE', *, *, #7751, .F. ) ; +#13376 = EDGE_CURVE ( 'NONE', #5403, #1028, #8829, .T. ) ; +#13377 = AXIS2_PLACEMENT_3D ( 'NONE', #12153, #14606, #8525 ) ; +#13378 = ORIENTED_EDGE ( 'NONE', *, *, #9573, .F. ) ; +#13379 = DIRECTION ( 'NONE', ( 2.762298528625412100E-017, -1.000000000000000000, -3.506355962080744500E-015 ) ) ; +#13380 = LINE ( 'NONE', #1424, #13775 ) ; +#13381 = VECTOR ( 'NONE', #15735, 1000.000000000000000 ) ; +#13382 = ADVANCED_FACE ( 'NONE', ( #2315 ), #4270, .T. ) ; +#13383 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #15489, #13048, #11878, #12885, #11775, #7076 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 0.0000000000000000000, 0.0002388152348380259500, 0.0004776304696760501100 ), + .UNSPECIFIED. ) ; +#13385 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 7.150000000000000400 ) ) ; +#13384 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#13386 = EDGE_CURVE ( 'NONE', #12713, #6108, #5767, .T. ) ; +#13387 = LINE ( 'NONE', #8774, #5787 ) ; +#13388 = AXIS2_PLACEMENT_3D ( 'NONE', #3360, #2183, #9443 ) ; +#13389 = PLANE ( 'NONE', #8475 ) ; +#13390 = PLANE ( 'NONE', #5438 ) ; +#13391 = ORIENTED_EDGE ( 'NONE', *, *, #135, .T. ) ; +#13392 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13393 = VERTEX_POINT ( 'NONE', #12917 ) ; +#13394 = ORIENTED_EDGE ( 'NONE', *, *, #3637, .T. ) ; +#13395 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, 5.050000000000000700 ) ) ; +#13396 = LINE ( 'NONE', #6016, #13005 ) ; +#13397 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13398 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13399 = EDGE_CURVE ( 'NONE', #14864, #6195, #7875, .T. ) ; +#13400 = LINE ( 'NONE', #3829, #77 ) ; +#13401 = LINE ( 'NONE', #15535, #13011 ) ; +#13402 = EDGE_LOOP ( 'NONE', ( #1489, #11279, #14621, #626 ) ) ; +#13403 = VERTEX_POINT ( 'NONE', #12972 ) ; +#13404 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#13405 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13406 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000007100, 0.8000000000000000400, 7.150000000000000400 ) ) ; +#13407 = VERTEX_POINT ( 'NONE', #4329 ) ; +#13408 = VECTOR ( 'NONE', #507, 1000.000000000000000 ) ; +#13409 = CLOSED_SHELL ( 'NONE', ( #15484, #2319, #14163, #3722, #14874, #13016, #128, #3647, #5144, #8897 ) ) ; +#13410 = ORIENTED_EDGE ( 'NONE', *, *, #10005, .T. ) ; +#13411 = AXIS2_PLACEMENT_3D ( 'NONE', #15715, #14529, #4734 ) ; +#13412 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13413 = ORIENTED_EDGE ( 'NONE', *, *, #11541, .T. ) ; +#13414 = CIRCLE ( 'NONE', #8797, 0.2749999999999991900 ) ; +#13415 = FACE_OUTER_BOUND ( 'NONE', #7097, .T. ) ; +#13416 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13417 = CARTESIAN_POINT ( 'NONE', ( -6.050000000000001600, 3.350000000000000100, 7.440000000000001300 ) ) ; +#13418 = VERTEX_POINT ( 'NONE', #8071 ) ; +#13419 = EDGE_CURVE ( 'NONE', #14975, #1092, #1177, .T. ) ; +#13420 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999920400, 0.4000000000000000200, 1.149999999999999900 ) ) ; +#13421 = ADVANCED_FACE ( 'NONE', ( #7482 ), #1862, .T. ) ; +#13422 = ORIENTED_EDGE ( 'NONE', *, *, #13951, .F. ) ; +#13423 = EDGE_CURVE ( 'NONE', #2593, #11422, #5972, .T. ) ; +#13424 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#13425 = ORIENTED_EDGE ( 'NONE', *, *, #2496, .F. ) ; +#13426 = VECTOR ( 'NONE', #1163, 1000.000000000000000 ) ; +#13427 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 1.637941840314110200, 4.750000000000000000 ) ) ; +#13428 = EDGE_CURVE ( 'NONE', #15221, #3348, #15080, .T. ) ; +#13429 = EDGE_LOOP ( 'NONE', ( #6868, #6823, #2085, #11569 ) ) ; +#13430 = ORIENTED_EDGE ( 'NONE', *, *, #4974, .F. ) ; +#13431 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13432 = LINE ( 'NONE', #605, #4500 ) ; +#13433 = VECTOR ( 'NONE', #11697, 1000.000000000000000 ) ; +#13434 = ORIENTED_EDGE ( 'NONE', *, *, #4554, .T. ) ; +#13435 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13437 = DIRECTION ( 'NONE', ( 2.762298528625412100E-017, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13436 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13438 = ADVANCED_FACE ( 'NONE', ( #7308 ), #14223, .F. ) ; +#13439 = PLANE ( 'NONE', #5396 ) ; +#13440 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13441 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13442 = VERTEX_POINT ( 'NONE', #11661 ) ; +#13443 = VECTOR ( 'NONE', #1225, 1000.000000000000000 ) ; +#13444 = ORIENTED_EDGE ( 'NONE', *, *, #14403, .T. ) ; +#13445 = VECTOR ( 'NONE', #5517, 1000.000000000000000 ) ; +#13446 = PRESENTATION_STYLE_ASSIGNMENT (( #14551 ) ) ; +#13447 = EDGE_CURVE ( 'NONE', #3707, #4330, #12591, .T. ) ; +#13448 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999952400, 0.4000000000000000200, 4.150000000000001200 ) ) ; +#13449 = ADVANCED_FACE ( 'NONE', ( #11834 ), #6952, .T. ) ; +#13450 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.0000000000000000000, 2.950000000000000200 ) ) ; +#13451 = DIRECTION ( 'NONE', ( 1.030435733265139100E-031, -6.982962677686266700E-015, 1.000000000000000000 ) ) ; +#13452 = LINE ( 'NONE', #13200, #7000 ) ; +#13453 = ORIENTED_EDGE ( 'NONE', *, *, #15702, .T. ) ; +#13454 = AXIS2_PLACEMENT_3D ( 'NONE', #5909, #14519, #4022 ) ; +#13455 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 4.149999999999999500 ) ) ; +#13456 = CARTESIAN_POINT ( 'NONE', ( -7.850000000000007600, 0.7999999999999967100, -3.079999999999999200 ) ) ; +#13457 = ADVANCED_FACE ( 'NONE', ( #10509 ), #4386, .T. ) ; +#13458 = CIRCLE ( 'NONE', #8204, 0.2749999999999991900 ) ; +#13459 = VECTOR ( 'NONE', #8093, 1000.000000000000000 ) ; +#13460 = CLOSED_SHELL ( 'NONE', ( #7960, #1056, #12134, #2351, #11750, #6511, #1916, #4157, #7554, #8113 ) ) ; +#13461 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, -1.125000000000000700 ) ) ; +#13462 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13463 = EDGE_CURVE ( 'NONE', #11943, #498, #15615, .T. ) ; +#13464 = ORIENTED_EDGE ( 'NONE', *, *, #10254, .F. ) ; +#13465 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.3999999999999999700, -0.9499999999999990700 ) ) ; +#13466 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13467 = VERTEX_POINT ( 'NONE', #9630 ) ; +#13468 = CARTESIAN_POINT ( 'NONE', ( -7.611952621458756100, 3.207639970946512000, -3.049452524890162500 ) ) ; +#13469 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#13470 = VECTOR ( 'NONE', #13567, 1000.000000000000000 ) ; +#13471 = LINE ( 'NONE', #3534, #3376 ) ; +#13472 = EDGE_CURVE ( 'NONE', #2178, #7234, #2297, .T. ) ; +#13473 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, 4.149999999999999500 ) ) ; +#13474 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, -15.05858178898088800, -6.100000000000000500 ) ) ; +#13475 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13476 = ORIENTED_EDGE ( 'NONE', *, *, #1764, .T. ) ; +#13477 = FACE_OUTER_BOUND ( 'NONE', #4507, .T. ) ; +#13478 = ORIENTED_EDGE ( 'NONE', *, *, #9796, .F. ) ; +#13479 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999921500, 0.0000000000000000000, 1.149999999999999900 ) ) ; +#13480 = EDGE_LOOP ( 'NONE', ( #6920, #9706, #2187, #2791 ) ) ; +#13481 = LINE ( 'NONE', #6042, #3013 ) ; +#13482 = LINE ( 'NONE', #14235, #6275 ) ; +#13483 = CARTESIAN_POINT ( 'NONE', ( -7.650000000000007500, 0.7999999999999964900, -2.872928932188135100 ) ) ; +#13484 = EDGE_CURVE ( 'NONE', #2245, #3590, #13551, .T. ) ; +#13485 = EDGE_CURVE ( 'NONE', #2979, #9352, #9934, .T. ) ; +#13486 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 3.374999999999999600 ) ) ; +#13487 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999967700, 0.0000000000000000000, 5.650000000000001200 ) ) ; +#13488 = CLOSED_SHELL ( 'NONE', ( #257, #7313, #7265, #1670, #14973, #557, #1297, #15410, #7342, #14656 ) ) ; +#13489 = VERTEX_POINT ( 'NONE', #3653 ) ; +#13490 = EDGE_LOOP ( 'NONE', ( #171, #4894, #13832, #4273, #8754, #15314 ) ) ; +#13491 = ORIENTED_EDGE ( 'NONE', *, *, #10597, .T. ) ; +#13492 = CARTESIAN_POINT ( 'NONE', ( 3.850000000000003600, 0.8000000000000000400, -4.500000000000000900 ) ) ; +#13493 = ADVANCED_FACE ( 'NONE', ( #12190 ), #15751, .F. ) ; +#13494 = VERTEX_POINT ( 'NONE', #10851 ) ; +#13495 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #14414 ) ) ; +#13496 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.4000000000000000200, -2.449999999999997500 ) ) ; +#13497 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13498 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.4000000000000000200, 1.850000000000000100 ) ) ; +#13499 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#13500 = VECTOR ( 'NONE', #9225, 1000.000000000000000 ) ; +#13501 = LINE ( 'NONE', #14507, #5519 ) ; +#13503 = CARTESIAN_POINT ( 'NONE', ( -6.050000000000001600, 3.149999999999999900, 7.440000000000001300 ) ) ; +#13502 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 5.102127870520021000E-016 ) ) ; +#13504 = VECTOR ( 'NONE', #2546, 1000.000000000000000 ) ; +#13505 = ORIENTED_EDGE ( 'NONE', *, *, #6672, .T. ) ; +#13506 = MANIFOLD_SOLID_BREP ( 'LPattern1[1]', #14478 ) ; +#13507 = DIRECTION ( 'NONE', ( -3.690901012716604900E-015, -1.000000000000000000, 6.123233995736767300E-017 ) ) ; +#13508 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 1.875000000000000000 ) ) ; +#13509 = VERTEX_POINT ( 'NONE', #12152 ) ; +#13510 = VERTEX_POINT ( 'NONE', #4879 ) ; +#13511 = ADVANCED_FACE ( 'NONE', ( #220 ), #1088, .F. ) ; +#13512 = EDGE_CURVE ( 'NONE', #15166, #8599, #5754, .T. ) ; +#13513 = ORIENTED_EDGE ( 'NONE', *, *, #1246, .F. ) ; +#13514 = VERTEX_POINT ( 'NONE', #10959 ) ; +#13515 = ORIENTED_EDGE ( 'NONE', *, *, #3338, .F. ) ; +#13516 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 13.60000000000000100 ) ) ; +#13517 = EDGE_CURVE ( 'NONE', #13740, #5823, #778, .T. ) ; +#13518 = VECTOR ( 'NONE', #13090, 1000.000000000000000 ) ; +#13519 = LINE ( 'NONE', #4889, #7658 ) ; +#13520 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13521 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13522 = LINE ( 'NONE', #6852, #12562 ) ; +#13523 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#13524 = AXIS2_PLACEMENT_3D ( 'NONE', #10933, #14175, #15374 ) ; +#13525 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000001200, -3.081999999999999400 ) ) ; +#13526 = VERTEX_POINT ( 'NONE', #11009 ) ; +#13527 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 1.806230589874906900, 1.149999999999999900 ) ) ; +#13528 = EDGE_LOOP ( 'NONE', ( #482, #2749, #10274, #5296, #15329, #11181 ) ) ; +#13529 = CARTESIAN_POINT ( 'NONE', ( -7.849999999999999600, 0.7999999999999983800, 9.290000000000008000 ) ) ; +#13530 = AXIS2_PLACEMENT_3D ( 'NONE', #11739, #15699, #8408 ) ; +#13531 = EDGE_LOOP ( 'NONE', ( #1974, #14373, #6279, #835 ) ) ; +#13532 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13533 = ADVANCED_FACE ( 'NONE', ( #2687 ), #13389, .F. ) ; +#13534 = VERTEX_POINT ( 'NONE', #8415 ) ; +#13535 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13536 = VECTOR ( 'NONE', #2631, 1000.000000000000000 ) ; +#13537 = LINE ( 'NONE', #5514, #3438 ) ; +#13538 = VECTOR ( 'NONE', #7503, 1000.000000000000000 ) ; +#13539 = ADVANCED_FACE ( 'NONE', ( #12017 ), #9832, .T. ) ; +#13540 = ORIENTED_EDGE ( 'NONE', *, *, #9233, .F. ) ; +#13541 = EDGE_CURVE ( 'NONE', #1941, #5452, #13341, .T. ) ; +#13542 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13543 = ORIENTED_EDGE ( 'NONE', *, *, #8706, .F. ) ; +#13544 = EDGE_CURVE ( 'NONE', #2437, #9333, #8809, .T. ) ; +#13545 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 4.149999999999999500 ) ) ; +#13546 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13547 = ORIENTED_EDGE ( 'NONE', *, *, #4782, .T. ) ; +#13548 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#13549 = LINE ( 'NONE', #9962, #13941 ) ; +#13550 = VECTOR ( 'NONE', #11667, 1000.000000000000000 ) ; +#13551 = LINE ( 'NONE', #15703, #12576 ) ; +#13552 = SURFACE_STYLE_FILL_AREA ( #12603 ) ; +#13553 = STYLED_ITEM ( 'NONE', ( #6730 ), #14011 ) ; +#13554 = VECTOR ( 'NONE', #15651, 1000.000000000000000 ) ; +#13555 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#13556 = PLANE ( 'NONE', #2894 ) ; +#13557 = ORIENTED_EDGE ( 'NONE', *, *, #6199, .T. ) ; +#13558 = VERTEX_POINT ( 'NONE', #6180 ) ; +#13559 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#13560 = CARTESIAN_POINT ( 'NONE', ( -7.639222690360981900, 3.102198665876327900, 9.051952621458760000 ) ) ; +#13561 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, -1.850000000000000500 ) ) ; +#13562 = ORIENTED_EDGE ( 'NONE', *, *, #13897, .F. ) ; +#13563 = ORIENTED_EDGE ( 'NONE', *, *, #12151, .T. ) ; +#13564 = EDGE_CURVE ( 'NONE', #12094, #10889, #14130, .T. ) ; +#13565 = VECTOR ( 'NONE', #13617, 1000.000000000000000 ) ; +#13566 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13567 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13568 = FACE_OUTER_BOUND ( 'NONE', #8731, .T. ) ; +#13569 = PLANE ( 'NONE', #3744 ) ; +#13570 = EDGE_CURVE ( 'NONE', #5929, #6195, #12784, .T. ) ; +#13571 = EDGE_LOOP ( 'NONE', ( #13666, #15576, #14496, #5226, #12452, #12158, #13989, #10853, #3772, #8193, #11085, #2852, #13194, #6311, #25, #11837, #15474, #13605, #1076, #4390, #10768, #5695, #15296, #15714, #9380, #9409, #9290, #7916 ) ) ; +#13572 = AXIS2_PLACEMENT_3D ( 'NONE', #12681, #15443, #5790 ) ; +#13573 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, -3.350000000000000500 ) ) ; +#13574 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.351999999999998500, -2.779999999999997600 ) ) ; +#13575 = LINE ( 'NONE', #3558, #72 ) ; +#13576 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13577 = ADVANCED_FACE ( 'NONE', ( #4226 ), #4653, .F. ) ; +#13578 = LINE ( 'NONE', #7983, #7137 ) ; +#13579 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.149999999999999500, 9.082928932188135500 ) ) ; +#13580 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#13581 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#13582 = SURFACE_STYLE_FILL_AREA ( #2418 ) ; +#13583 = EDGE_CURVE ( 'NONE', #10820, #10684, #6521, .T. ) ; +#13584 = AXIS2_PLACEMENT_3D ( 'NONE', #1525, #8856, #7743 ) ; +#13585 = PLANE ( 'NONE', #15230 ) ; +#13586 = ORIENTED_EDGE ( 'NONE', *, *, #4760, .T. ) ; +#13587 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#13588 = EDGE_LOOP ( 'NONE', ( #8694, #2723, #11084, #10164 ) ) ; +#13589 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, -0.9499999999999990700 ) ) ; +#13590 = ADVANCED_FACE ( 'NONE', ( #9747 ), #251, .F. ) ; +#13591 = ORIENTED_EDGE ( 'NONE', *, *, #4379, .F. ) ; +#13592 = EDGE_CURVE ( 'NONE', #14300, #4267, #6727, .T. ) ; +#13593 = VECTOR ( 'NONE', #3592, 1000.000000000000000 ) ; +#13594 = ORIENTED_EDGE ( 'NONE', *, *, #9589, .F. ) ; +#13595 = AXIS2_PLACEMENT_3D ( 'NONE', #15162, #5391, #5283 ) ; +#13596 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13597 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, 3.550000000000001200 ) ) ; +#13598 = ORIENTED_EDGE ( 'NONE', *, *, #6379, .F. ) ; +#13599 = VECTOR ( 'NONE', #13028, 1000.000000000000000 ) ; +#13600 = VECTOR ( 'NONE', #11477, 1000.000000000000000 ) ; +#13601 = AXIS2_PLACEMENT_3D ( 'NONE', #12095, #13431, #10949 ) ; +#13602 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000019500, 0.8000000000000000400, 2.825000000000001100 ) ) ; +#13603 = ORIENTED_EDGE ( 'NONE', *, *, #1964, .T. ) ; +#13604 = DIRECTION ( 'NONE', ( -5.478074134663591400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13605 = ORIENTED_EDGE ( 'NONE', *, *, #8276, .T. ) ; +#13606 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13607 = EDGE_CURVE ( 'NONE', #5245, #12948, #5568, .T. ) ; +#13608 = ORIENTED_EDGE ( 'NONE', *, *, #11232, .F. ) ; +#13609 = ADVANCED_FACE ( 'NONE', ( #9565 ), #11901, .T. ) ; +#13610 = LINE ( 'NONE', #8650, #2177 ) ; +#13611 = PLANE ( 'NONE', #824 ) ; +#13612 = ORIENTED_EDGE ( 'NONE', *, *, #5699, .F. ) ; +#13613 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13614 = ORIENTED_EDGE ( 'NONE', *, *, #10168, .F. ) ; +#13615 = LINE ( 'NONE', #9907, #4679 ) ; +#13616 = LINE ( 'NONE', #2741, #2365 ) ; +#13617 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13618 = ORIENTED_EDGE ( 'NONE', *, *, #6548, .T. ) ; +#13619 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#13620 = ORIENTED_EDGE ( 'NONE', *, *, #13583, .F. ) ; +#13621 = LINE ( 'NONE', #14170, #15513 ) ; +#13622 = EDGE_LOOP ( 'NONE', ( #538, #12216, #2271, #4358 ) ) ; +#13623 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000020300, 0.4000000000000000200, 3.549999999999999400 ) ) ; +#13624 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 8.650000000000000400 ) ) ; +#13625 = LINE ( 'NONE', #3316, #2027 ) ; +#13626 = LINE ( 'NONE', #12174, #1637 ) ; +#13627 = EDGE_CURVE ( 'NONE', #15559, #3366, #15259, .T. ) ; +#13628 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999936400, 0.4000000000000000200, 2.650000000000001200 ) ) ; +#13629 = PLANE ( 'NONE', #6941 ) ; +#13630 = EDGE_CURVE ( 'NONE', #2288, #5140, #396, .T. ) ; +#13631 = PLANE ( 'NONE', #11343 ) ; +#13632 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13633 = EDGE_CURVE ( 'NONE', #15487, #7710, #10124, .T. ) ; +#13634 = DIRECTION ( 'NONE', ( 1.030435733265139100E-031, -6.982962677686266700E-015, 1.000000000000000000 ) ) ; +#13635 = LINE ( 'NONE', #1335, #11173 ) ; +#13636 = ORIENTED_EDGE ( 'NONE', *, *, #5596, .T. ) ; +#13637 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 1.637941840314110200, 2.950000000000000200 ) ) ; +#13638 = LINE ( 'NONE', #13487, #6427 ) ; +#13639 = LINE ( 'NONE', #11662, #9849 ) ; +#13640 = AXIS2_PLACEMENT_3D ( 'NONE', #15746, #8354, #8302 ) ; +#13641 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#13642 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000025900, 0.4000000000000000200, 1.149999999999999900 ) ) ; +#13643 = ORIENTED_EDGE ( 'NONE', *, *, #2156, .F. ) ; +#13644 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.807003620809173900E-016 ) ) ; +#13645 = DIRECTION ( 'NONE', ( 5.478074134663590600E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#13646 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.351999999999998500, -2.780000000000002900 ) ) ; +#13647 = ORIENTED_EDGE ( 'NONE', *, *, #4522, .T. ) ; +#13648 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13649 = VECTOR ( 'NONE', #1498, 1000.000000000000000 ) ; +#13650 = ORIENTED_EDGE ( 'NONE', *, *, #5120, .F. ) ; +#13651 = EDGE_CURVE ( 'NONE', #5257, #460, #9199, .T. ) ; +#13652 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13653 = ADVANCED_FACE ( 'NONE', ( #14503 ), #2263, .F. ) ; +#13654 = LINE ( 'NONE', #2256, #10429 ) ; +#13655 = LINE ( 'NONE', #4560, #13459 ) ; +#13656 = AXIS2_PLACEMENT_3D ( 'NONE', #9337, #5664, #11809 ) ; +#13657 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13658 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13659 = ORIENTED_EDGE ( 'NONE', *, *, #9667, .F. ) ; +#13660 = CARTESIAN_POINT ( 'NONE', ( -7.647980000000000400, 3.075703978347818200, 9.067408650308854200 ) ) ; +#13661 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13663 = CARTESIAN_POINT ( 'NONE', ( 8.549999999999998900, 0.8000000000000000400, 9.549999999999993600 ) ) ; +#13662 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000041900, 0.4000000000000000200, -2.449999999999998800 ) ) ; +#13664 = EDGE_CURVE ( 'NONE', #8000, #15005, #13737, .T. ) ; +#13665 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3963 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #12368, #1512, #13606 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#13666 = ORIENTED_EDGE ( 'NONE', *, *, #9569, .F. ) ; +#13667 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#13668 = FILL_AREA_STYLE_COLOUR ( '', #335 ) ; +#13669 = VECTOR ( 'NONE', #5875, 1000.000000000000000 ) ; +#13670 = ORIENTED_EDGE ( 'NONE', *, *, #7813, .F. ) ; +#13671 = VERTEX_POINT ( 'NONE', #7199 ) ; +#13672 = EDGE_LOOP ( 'NONE', ( #9844, #13618, #12534, #14111 ) ) ; +#13673 = VERTEX_POINT ( 'NONE', #14359 ) ; +#13674 = ADVANCED_FACE ( 'NONE', ( #11273 ), #8313, .F. ) ; +#13675 = LINE ( 'NONE', #3687, #14630 ) ; +#13676 = CARTESIAN_POINT ( 'NONE', ( -6.050000000000001600, 3.149999999999999900, 7.440000000000001300 ) ) ; +#13677 = EDGE_CURVE ( 'NONE', #2838, #647, #6334, .T. ) ; +#13678 = SURFACE_STYLE_USAGE ( .BOTH. , #11245 ) ; +#13679 = AXIS2_PLACEMENT_3D ( 'NONE', #573, #12757, #11939 ) ; +#13681 = ORIENTED_EDGE ( 'NONE', *, *, #15294, .F. ) ; +#13680 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13682 = EDGE_LOOP ( 'NONE', ( #6398, #11411, #2886, #15598, #4647, #9644 ) ) ; +#13683 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13684 = ORIENTED_EDGE ( 'NONE', *, *, #4170, .F. ) ; +#13685 = VECTOR ( 'NONE', #2934, 1000.000000000000000 ) ; +#13686 = ORIENTED_EDGE ( 'NONE', *, *, #8716, .F. ) ; +#13687 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13688 = VERTEX_POINT ( 'NONE', #5915 ) ; +#13689 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 8.825000000000001100 ) ) ; +#13690 = EDGE_CURVE ( 'NONE', #13671, #7518, #12956, .T. ) ; +#13691 = ADVANCED_FACE ( 'NONE', ( #3282 ), #15605, .F. ) ; +#13692 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.350000000000000100, 8.990000000000002000 ) ) ; +#13693 = VECTOR ( 'NONE', #2536, 1000.000000000000000 ) ; +#13694 = FACE_OUTER_BOUND ( 'NONE', #4188, .T. ) ; +#13695 = AXIS2_PLACEMENT_3D ( 'NONE', #5798, #5690, #9313 ) ; +#13696 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13697 = ORIENTED_EDGE ( 'NONE', *, *, #11087, .F. ) ; +#13698 = ORIENTED_EDGE ( 'NONE', *, *, #6557, .F. ) ; +#13699 = EDGE_LOOP ( 'NONE', ( #574, #9521, #89, #14528 ) ) ; +#13700 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 3.550000000000001200 ) ) ; +#13701 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 3.550000000000001200 ) ) ; +#13702 = ORIENTED_EDGE ( 'NONE', *, *, #5299, .F. ) ; +#13703 = PLANE ( 'NONE', #9008 ) ; +#13704 = EDGE_LOOP ( 'NONE', ( #5175, #11485, #1919, #7443 ) ) ; +#13705 = ORIENTED_EDGE ( 'NONE', *, *, #15570, .F. ) ; +#13706 = EDGE_CURVE ( 'NONE', #11184, #11963, #4210, .T. ) ; +#13707 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#13708 = LINE ( 'NONE', #8472, #5330 ) ; +#13709 = VECTOR ( 'NONE', #620, 1000.000000000000000 ) ; +#13710 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000300, 0.4000000000000000200, 2.949999999999999300 ) ) ; +#13711 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13712 = ORIENTED_EDGE ( 'NONE', *, *, #10934, .T. ) ; +#13713 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13714 = ORIENTED_EDGE ( 'NONE', *, *, #11807, .F. ) ; +#13715 = AXIS2_PLACEMENT_3D ( 'NONE', #5835, #12989, #8283 ) ; +#13716 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 1.149999999999999900 ) ) ; +#13717 = EDGE_LOOP ( 'NONE', ( #6375, #10901, #1110, #10051 ) ) ; +#13718 = ORIENTED_EDGE ( 'NONE', *, *, #2252, .T. ) ; +#13719 = AXIS2_PLACEMENT_3D ( 'NONE', #397, #7833, #9158 ) ; +#13720 = ORIENTED_EDGE ( 'NONE', *, *, #12529, .T. ) ; +#13722 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999991400, 0.7000000000000009500, -9.600000000000001400 ) ) ; +#13721 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.4000000000000000200, 1.850000000000000100 ) ) ; +#13723 = VECTOR ( 'NONE', #5103, 1000.000000000000000 ) ; +#13724 = LINE ( 'NONE', #914, #3818 ) ; +#13725 = LINE ( 'NONE', #2629, #10288 ) ; +#13726 = VECTOR ( 'NONE', #14873, 1000.000000000000000 ) ; +#13727 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13728 = ORIENTED_EDGE ( 'NONE', *, *, #13230, .T. ) ; +#13729 = EDGE_CURVE ( 'NONE', #13049, #5759, #11444, .T. ) ; +#13730 = EDGE_LOOP ( 'NONE', ( #10033, #6829, #9207, #4576, #6500, #7559 ) ) ; +#13731 = ORIENTED_EDGE ( 'NONE', *, *, #14215, .F. ) ; +#13732 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13733 = EDGE_CURVE ( 'NONE', #9223, #13393, #7311, .T. ) ; +#13734 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#13735 = VECTOR ( 'NONE', #427, 1000.000000000000000 ) ; +#13736 = FACE_OUTER_BOUND ( 'NONE', #11780, .T. ) ; +#13737 = LINE ( 'NONE', #11946, #11644 ) ; +#13738 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13739 = LINE ( 'NONE', #5814, #9200 ) ; +#13740 = VERTEX_POINT ( 'NONE', #3831 ) ; +#13741 = LINE ( 'NONE', #6252, #10704 ) ; +#13742 = PLANE ( 'NONE', #9268 ) ; +#13743 = VECTOR ( 'NONE', #13008, 1000.000000000000000 ) ; +#13744 = ADVANCED_FACE ( 'NONE', ( #15065 ), #5165, .T. ) ; +#13745 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, 8.650000000000000400 ) ) ; +#13746 = AXIS2_PLACEMENT_3D ( 'NONE', #3579, #2392, #12041 ) ; +#13747 = ORIENTED_EDGE ( 'NONE', *, *, #13017, .F. ) ; +#13748 = CARTESIAN_POINT ( 'NONE', ( -7.850000000000007600, 0.7999999999999970500, -2.872928932188135100 ) ) ; +#13749 = CARTESIAN_POINT ( 'NONE', ( -7.611930011826952800, 3.206658047799210400, 9.257567445684518500 ) ) ; +#13750 = ORIENTED_EDGE ( 'NONE', *, *, #12382, .F. ) ; +#13751 = ORIENTED_EDGE ( 'NONE', *, *, #7304, .F. ) ; +#13752 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#13753 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 1.637941840314110200, 4.049999999999999800 ) ) ; +#13754 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #11311 ), #4779 ) ; +#13755 = LINE ( 'NONE', #2306, #14144 ) ; +#13756 = VECTOR ( 'NONE', #14118, 1000.000000000000000 ) ; +#13757 = ORIENTED_EDGE ( 'NONE', *, *, #5157, .F. ) ; +#13758 = LINE ( 'NONE', #10717, #8830 ) ; +#13759 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13760 = EDGE_CURVE ( 'NONE', #5692, #9710, #8249, .T. ) ; +#13761 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 8.050000000000000700 ) ) ; +#13762 = ADVANCED_FACE ( 'NONE', ( #11835 ), #1465, .T. ) ; +#13763 = VECTOR ( 'NONE', #9891, 1000.000000000000000 ) ; +#13764 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13765 = LINE ( 'NONE', #10619, #3475 ) ; +#13766 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13767 = ORIENTED_EDGE ( 'NONE', *, *, #2342, .F. ) ; +#13768 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13769 = EDGE_LOOP ( 'NONE', ( #1019, #727, #12902, #12367 ) ) ; +#13770 = ORIENTED_EDGE ( 'NONE', *, *, #13995, .F. ) ; +#13771 = EDGE_LOOP ( 'NONE', ( #14948, #6558, #3821, #11585, #7218, #2753 ) ) ; +#13772 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999890200, -0.0000000000000000000, -0.9499999999999995100 ) ) ; +#13773 = CARTESIAN_POINT ( 'NONE', ( -7.615261346167815600, 3.126879667662413500, 9.031593715659283800 ) ) ; +#13774 = AXIS2_PLACEMENT_3D ( 'NONE', #10345, #3053, #7878 ) ; +#13775 = VECTOR ( 'NONE', #2702, 1000.000000000000000 ) ; +#13776 = LINE ( 'NONE', #6002, #6174 ) ; +#13777 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000001200, -3.079999999999999200 ) ) ; +#13778 = ADVANCED_FACE ( 'NONE', ( #14699 ), #5318, .F. ) ; +#13779 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#13780 = FACE_OUTER_BOUND ( 'NONE', #8934, .T. ) ; +#13781 = VERTEX_POINT ( 'NONE', #11378 ) ; +#13782 = VERTEX_POINT ( 'NONE', #6503 ) ; +#13783 = ORIENTED_EDGE ( 'NONE', *, *, #3065, .T. ) ; +#13784 = EDGE_CURVE ( 'NONE', #1748, #8491, #13925, .T. ) ; +#13785 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13786 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13787 = EDGE_CURVE ( 'NONE', #9378, #15676, #15085, .T. ) ; +#13788 = LINE ( 'NONE', #299, #9417 ) ; +#13789 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#13790 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13791 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#13792 = ORIENTED_EDGE ( 'NONE', *, *, #5975, .F. ) ; +#13793 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000004100, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#13794 = EDGE_LOOP ( 'NONE', ( #9209, #9618, #9318, #10714, #13453, #12563 ) ) ; +#13795 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13796 = CARTESIAN_POINT ( 'NONE', ( -7.640440641471891500, 3.092667204855683100, -2.846851616828785400 ) ) ; +#13797 = VERTEX_POINT ( 'NONE', #2699 ) ; +#13798 = VECTOR ( 'NONE', #5479, 1000.000000000000000 ) ; +#13799 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#13800 = ORIENTED_EDGE ( 'NONE', *, *, #4149, .T. ) ; +#13801 = CLOSED_SHELL ( 'NONE', ( #3462, #9217, #5786, #12227, #8816 ) ) ; +#13802 = EDGE_CURVE ( 'NONE', #8330, #14458, #4996, .T. ) ; +#13803 = EDGE_CURVE ( 'NONE', #13673, #10356, #10142, .T. ) ; +#13804 = CARTESIAN_POINT ( 'NONE', ( 7.602198665876327900, 3.139222690360981000, -2.810976310729379300 ) ) ; +#13805 = ORIENTED_EDGE ( 'NONE', *, *, #7428, .F. ) ; +#13806 = FACE_OUTER_BOUND ( 'NONE', #9882, .T. ) ; +#13807 = FACE_OUTER_BOUND ( 'NONE', #10076, .T. ) ; +#13808 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13809 = MANIFOLD_SOLID_BREP ( 'LPattern1[8]', #10145 ) ; +#13810 = ORIENTED_EDGE ( 'NONE', *, *, #8102, .T. ) ; +#13811 = EDGE_LOOP ( 'NONE', ( #14290, #12979, #4293, #9361 ) ) ; +#13812 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.4000000000000000200, 1.850000000000000100 ) ) ; +#13813 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#13814 = VERTEX_POINT ( 'NONE', #4034 ) ; +#13815 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13816 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13817 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 5.650000000000000400 ) ) ; +#13818 = ORIENTED_EDGE ( 'NONE', *, *, #9214, .F. ) ; +#13819 = VECTOR ( 'NONE', #8535, 1000.000000000000000 ) ; +#13820 = ORIENTED_EDGE ( 'NONE', *, *, #6724, .F. ) ; +#13821 = ORIENTED_EDGE ( 'NONE', *, *, #10818, .T. ) ; +#13822 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13823 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, 8.650000000000000400 ) ) ; +#13824 = FACE_OUTER_BOUND ( 'NONE', #4201, .T. ) ; +#13825 = LINE ( 'NONE', #941, #13433 ) ; +#13826 = PLANE ( 'NONE', #1260 ) ; +#13827 = VERTEX_POINT ( 'NONE', #1628 ) ; +#13828 = EDGE_CURVE ( 'NONE', #9820, #9322, #2105, .T. ) ; +#13829 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999875300, 0.0000000000000000000, -2.449999999999996600 ) ) ; +#13830 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#13831 = PLANE ( 'NONE', #4046 ) ; +#13832 = ORIENTED_EDGE ( 'NONE', *, *, #8912, .T. ) ; +#13833 = VECTOR ( 'NONE', #11247, 1000.000000000000000 ) ; +#13834 = ORIENTED_EDGE ( 'NONE', *, *, #11431, .T. ) ; +#13835 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.149999999999998600, -2.780000000000001100 ) ) ; +#13836 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13837 = PRESENTATION_STYLE_ASSIGNMENT (( #6916 ) ) ; +#13838 = FACE_OUTER_BOUND ( 'NONE', #2413, .T. ) ; +#13839 = AXIS2_PLACEMENT_3D ( 'NONE', #477, #12717, #10390 ) ; +#13840 = ADVANCED_FACE ( 'NONE', ( #48 ), #10161, .T. ) ; +#13841 = AXIS2_PLACEMENT_3D ( 'NONE', #3982, #4092, #1629 ) ; +#13842 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000034500, 0.4000000000000000200, -1.850000000000000100 ) ) ; +#13843 = ADVANCED_FACE ( 'NONE', ( #1723 ), #1360, .F. ) ; +#13844 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13845 = LINE ( 'NONE', #1017, #496 ) ; +#13846 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13847 = ORIENTED_EDGE ( 'NONE', *, *, #3001, .F. ) ; +#13848 = AXIS2_PLACEMENT_3D ( 'NONE', #4233, #13869, #6702 ) ; +#13849 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13850 = LINE ( 'NONE', #8308, #319 ) ; +#13851 = VECTOR ( 'NONE', #13374, 1000.000000000000000 ) ; +#13852 = EDGE_CURVE ( 'NONE', #15144, #4577, #4598, .T. ) ; +#13853 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13854 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.3999999999999999700, 4.049999999999999800 ) ) ; +#13855 = EDGE_CURVE ( 'NONE', #6784, #55, #14307, .T. ) ; +#13856 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.149999999999999500, -2.780000000000001100 ) ) ; +#13857 = PLANE ( 'NONE', #3402 ) ; +#13858 = ORIENTED_EDGE ( 'NONE', *, *, #8660, .T. ) ; +#13859 = B_SPLINE_SURFACE_WITH_KNOTS ( 'NONE', 1, 3, ( + ( #12399, #1488, #2722, #6473, #1766, #5295 ), + ( #4223, #479, #6580, #5504, #12721, #380 ), + ( #13856, #9138, #13804, #8927, #5402, #10342 ), + ( #4118, #5451, #10286, #1654, #6533, #7814 ) ), + .UNSPECIFIED., .F., .F., .F., + ( 2, 1, 1, 2 ), + ( 4, 2, 4 ), + ( -0.01000000000000000000, 0.0000000000000000000, 1.000000000000000000, 1.010100000000000000 ), + ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#13860 = ORIENTED_EDGE ( 'NONE', *, *, #10572, .F. ) ; +#13861 = CIRCLE ( 'NONE', #11071, 0.2749999999999991900 ) ; +#13862 = ORIENTED_EDGE ( 'NONE', *, *, #3593, .F. ) ; +#13863 = VERTEX_POINT ( 'NONE', #12374 ) ; +#13864 = AXIS2_PLACEMENT_3D ( 'NONE', #3078, #10422, #567 ) ; +#13865 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 1.875000000000000000 ) ) ; +#13866 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13867 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13868 = LINE ( 'NONE', #7522, #4147 ) ; +#13869 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13870 = VERTEX_POINT ( 'NONE', #10046 ) ; +#13871 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13872 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13873 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13874 = EDGE_CURVE ( 'NONE', #4946, #14742, #7858, .T. ) ; +#13875 = VERTEX_POINT ( 'NONE', #5424 ) ; +#13876 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13877 = VECTOR ( 'NONE', #10447, 1000.000000000000000 ) ; +#13878 = ORIENTED_EDGE ( 'NONE', *, *, #8533, .F. ) ; +#13879 = ORIENTED_EDGE ( 'NONE', *, *, #7370, .T. ) ; +#13880 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#13881 = LINE ( 'NONE', #15341, #9874 ) ; +#13883 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999889500, 0.4000000000000000200, -1.849999999999998300 ) ) ; +#13882 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13884 = EDGE_CURVE ( 'NONE', #5578, #8635, #10532, .T. ) ; +#13885 = ORIENTED_EDGE ( 'NONE', *, *, #15262, .T. ) ; +#13886 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13887 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13888 = ORIENTED_EDGE ( 'NONE', *, *, #7276, .T. ) ; +#13889 = ORIENTED_EDGE ( 'NONE', *, *, #14018, .F. ) ; +#13890 = ORIENTED_EDGE ( 'NONE', *, *, #15545, .T. ) ; +#13891 = ORIENTED_EDGE ( 'NONE', *, *, #3538, .T. ) ; +#13892 = ORIENTED_EDGE ( 'NONE', *, *, #1750, .T. ) ; +#13893 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13894 = VECTOR ( 'NONE', #8490, 1000.000000000000000 ) ; +#13895 = LINE ( 'NONE', #3073, #10476 ) ; +#13896 = CARTESIAN_POINT ( 'NONE', ( -7.817567445684516300, 3.206658047799210800, -2.841930011826954600 ) ) ; +#13897 = EDGE_CURVE ( 'NONE', #2964, #5919, #798, .T. ) ; +#13898 = VECTOR ( 'NONE', #11764, 1000.000000000000000 ) ; +#13899 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13900 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13901 = ORIENTED_EDGE ( 'NONE', *, *, #3775, .F. ) ; +#13902 = ADVANCED_FACE ( 'NONE', ( #4044 ), #14043, .T. ) ; +#13903 = ORIENTED_EDGE ( 'NONE', *, *, #13803, .F. ) ; +#13904 = ORIENTED_EDGE ( 'NONE', *, *, #6927, .F. ) ; +#13905 = ORIENTED_EDGE ( 'NONE', *, *, #4691, .T. ) ; +#13906 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.349999999999998800, -2.780000000000002900 ) ) ; +#13907 = EDGE_CURVE ( 'NONE', #8871, #6281, #15451, .T. ) ; +#13908 = ORIENTED_EDGE ( 'NONE', *, *, #4198, .T. ) ; +#13909 = ORIENTED_EDGE ( 'NONE', *, *, #2228, .T. ) ; +#13910 = VECTOR ( 'NONE', #6913, 1000.000000000000000 ) ; +#13911 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#13912 = VERTEX_POINT ( 'NONE', #7785 ) ; +#13913 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13914 = DIRECTION ( 'NONE', ( 1.000000000000000000, 4.336808689942006700E-015, 0.0000000000000000000 ) ) ; +#13915 = ADVANCED_FACE ( 'NONE', ( #14325 ), #506, .T. ) ; +#13917 = ORIENTED_EDGE ( 'NONE', *, *, #5937, .T. ) ; +#13916 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999991400, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#13918 = EDGE_CURVE ( 'NONE', #11339, #12747, #414, .T. ) ; +#13919 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#13920 = ORIENTED_EDGE ( 'NONE', *, *, #1841, .F. ) ; +#13921 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.3999999999999999700, 1.849999999999999900 ) ) ; +#13922 = ADVANCED_FACE ( 'NONE', ( #6928 ), #2959, .F. ) ; +#13923 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 2.050000000000001600 ) ) ; +#13924 = ORIENTED_EDGE ( 'NONE', *, *, #6832, .F. ) ; +#13925 = LINE ( 'NONE', #11230, #10706 ) ; +#13926 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13927 = LINE ( 'NONE', #3012, #13327 ) ; +#13928 = FACE_OUTER_BOUND ( 'NONE', #709, .T. ) ; +#13929 = LINE ( 'NONE', #10918, #2108 ) ; +#13930 = LINE ( 'NONE', #9513, #1523 ) ; +#13931 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000020300, 0.4000000000000000200, 3.549999999999999400 ) ) ; +#13932 = AXIS2_PLACEMENT_3D ( 'NONE', #3275, #1946, #2046 ) ; +#13933 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000014900, 0.4000000000000000200, 4.149999999999999500 ) ) ; +#13934 = EDGE_LOOP ( 'NONE', ( #4362, #2310, #290, #4375 ) ) ; +#13935 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#13936 = ORIENTED_EDGE ( 'NONE', *, *, #7890, .T. ) ; +#13937 = STYLED_ITEM ( 'NONE', ( #8526 ), #11175 ) ; +#13938 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#13939 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13940 = VERTEX_POINT ( 'NONE', #15253 ) ; +#13941 = VECTOR ( 'NONE', #8760, 1000.000000000000000 ) ; +#13942 = VECTOR ( 'NONE', #4123, 1000.000000000000000 ) ; +#13943 = DIRECTION ( 'NONE', ( -1.548860246407863300E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13944 = CYLINDRICAL_SURFACE ( 'NONE', #887, 0.5000000000000004400 ) ; +#13945 = ORIENTED_EDGE ( 'NONE', *, *, #14592, .T. ) ; +#13946 = LINE ( 'NONE', #3187, #7876 ) ; +#13947 = EDGE_CURVE ( 'NONE', #7255, #3460, #6541, .T. ) ; +#13948 = VECTOR ( 'NONE', #9113, 1000.000000000000000 ) ; +#13949 = VERTEX_POINT ( 'NONE', #4195 ) ; +#13950 = ORIENTED_EDGE ( 'NONE', *, *, #4057, .T. ) ; +#13951 = EDGE_CURVE ( 'NONE', #15205, #4483, #9013, .T. ) ; +#13952 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13953 = ORIENTED_EDGE ( 'NONE', *, *, #8388, .T. ) ; +#13954 = EDGE_CURVE ( 'NONE', #14124, #14536, #12789, .T. ) ; +#13955 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13956 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13957 = ORIENTED_EDGE ( 'NONE', *, *, #15294, .T. ) ; +#13958 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.147980000000000000, 8.990000000000002000 ) ) ; +#13959 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13960 = VECTOR ( 'NONE', #6930, 1000.000000000000000 ) ; +#13961 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 2.050000000000001600 ) ) ; +#13962 = VECTOR ( 'NONE', #9452, 1000.000000000000000 ) ; +#13963 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13964 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#13965 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 8.050000000000000700 ) ) ; +#13966 = FACE_OUTER_BOUND ( 'NONE', #7072, .T. ) ; +#13967 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.3999999999999999700, -0.3500000000000004800 ) ) ; +#13968 = ORIENTED_EDGE ( 'NONE', *, *, #11110, .F. ) ; +#13969 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#13970 = EDGE_CURVE ( 'NONE', #6853, #15673, #13165, .T. ) ; +#13971 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.690901012716608100E-015, 2.683779753520857800E-032 ) ) ; +#13972 = VECTOR ( 'NONE', #3042, 1000.000000000000000 ) ; +#13973 = LINE ( 'NONE', #8090, #6187 ) ; +#13974 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#13975 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13976 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.0000000000000000000, 1.850000000000000100 ) ) ; +#13977 = VECTOR ( 'NONE', #12114, 1000.000000000000000 ) ; +#13978 = CARTESIAN_POINT ( 'NONE', ( -8.549999999999998900, 0.4000000000000000200, 9.550000000000000700 ) ) ; +#13979 = EDGE_CURVE ( 'NONE', #15005, #12731, #5957, .T. ) ; +#13980 = PLANE ( 'NONE', #13719 ) ; +#13981 = ORIENTED_EDGE ( 'NONE', *, *, #4612, .F. ) ; +#13982 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #14787, #8159 ) ; +#13983 = ORIENTED_EDGE ( 'NONE', *, *, #12202, .F. ) ; +#13984 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#13985 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13986 = ORIENTED_EDGE ( 'NONE', *, *, #531, .F. ) ; +#13987 = VECTOR ( 'NONE', #14452, 1000.000000000000000 ) ; +#13988 = ORIENTED_EDGE ( 'NONE', *, *, #184, .F. ) ; +#13989 = ORIENTED_EDGE ( 'NONE', *, *, #8020, .T. ) ; +#13990 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 3.050000000000000700, 9.292000000000001600 ) ) ; +#13991 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, -15.05858178898088800, -9.600000000000001400 ) ) ; +#13992 = ORIENTED_EDGE ( 'NONE', *, *, #8998, .F. ) ; +#13993 = VECTOR ( 'NONE', #15165, 1000.000000000000000 ) ; +#13994 = VECTOR ( 'NONE', #5526, 1000.000000000000000 ) ; +#13995 = EDGE_CURVE ( 'NONE', #13442, #2231, #10127, .T. ) ; +#13996 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13997 = VERTEX_POINT ( 'NONE', #453 ) ; +#13998 = ADVANCED_FACE ( 'NONE', ( #3646 ), #11581, .T. ) ; +#13999 = EDGE_LOOP ( 'NONE', ( #3764, #5894, #5439, #8155 ) ) ; +#14000 = PLANE ( 'NONE', #983 ) ; +#14001 = VERTEX_POINT ( 'NONE', #12646 ) ; +#14002 = EDGE_CURVE ( 'NONE', #1802, #2572, #12390, .T. ) ; +#14003 = ADVANCED_FACE ( 'NONE', ( #12195 ), #15051, .T. ) ; +#14004 = LINE ( 'NONE', #12425, #9438 ) ; +#14005 = ORIENTED_EDGE ( 'NONE', *, *, #4082, .T. ) ; +#14006 = AXIS2_PLACEMENT_3D ( 'NONE', #11808, #13077, #10707 ) ; +#14007 = ORIENTED_EDGE ( 'NONE', *, *, #9192, .T. ) ; +#14008 = VECTOR ( 'NONE', #7582, 1000.000000000000000 ) ; +#14009 = LINE ( 'NONE', #6651, #4486 ) ; +#14010 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 6.550000000000001600 ) ) ; +#14011 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude7', #8251 ) ; +#14012 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14013 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14014 = EDGE_LOOP ( 'NONE', ( #10036, #6610, #11886, #2956 ) ) ; +#14015 = DIRECTION ( 'NONE', ( -3.097720492815726700E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14016 = PLANE ( 'NONE', #12913 ) ; +#14017 = EDGE_CURVE ( 'NONE', #15144, #1802, #7111, .T. ) ; +#14018 = EDGE_CURVE ( 'NONE', #3460, #9755, #11648, .T. ) ; +#14019 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14020 = ORIENTED_EDGE ( 'NONE', *, *, #6041, .T. ) ; +#14021 = VECTOR ( 'NONE', #5709, 1000.000000000000000 ) ; +#14022 = ORIENTED_EDGE ( 'NONE', *, *, #3354, .F. ) ; +#14023 = FACE_OUTER_BOUND ( 'NONE', #78, .T. ) ; +#14024 = VECTOR ( 'NONE', #6153, 1000.000000000000000 ) ; +#14025 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999952400, 0.4000000000000000200, 5.050000000000002500 ) ) ; +#14026 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000004300, 0.4000000000000000200, 8.050000000000000700 ) ) ; +#14027 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 1.149999999999999900 ) ) ; +#14028 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14029 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#14030 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14031 = LINE ( 'NONE', #424, #10983 ) ; +#14032 = SURFACE_STYLE_USAGE ( .BOTH. , #9303 ) ; +#14033 = ORIENTED_EDGE ( 'NONE', *, *, #2590, .T. ) ; +#14034 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14035 = LINE ( 'NONE', #13548, #3363 ) ; +#14036 = LINE ( 'NONE', #11605, #1835 ) ; +#14037 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#14038 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14039 = EDGE_CURVE ( 'NONE', #8667, #5692, #2303, .T. ) ; +#14040 = VERTEX_POINT ( 'NONE', #14206 ) ; +#14041 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14042 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14044 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#14043 = PLANE ( 'NONE', #3250 ) ; +#14045 = EDGE_CURVE ( 'NONE', #4394, #6822, #9936, .T. ) ; +#14046 = ORIENTED_EDGE ( 'NONE', *, *, #4709, .F. ) ; +#14047 = DIRECTION ( 'NONE', ( 3.690901012716604900E-015, 1.000000000000000000, -6.123233995736767300E-017 ) ) ; +#14048 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14049 = CIRCLE ( 'NONE', #1997, 0.2749999999999991900 ) ; +#14050 = ORIENTED_EDGE ( 'NONE', *, *, #3693, .T. ) ; +#14051 = LINE ( 'NONE', #1037, #8918 ) ; +#14052 = VECTOR ( 'NONE', #919, 1000.000000000000000 ) ; +#14053 = ORIENTED_EDGE ( 'NONE', *, *, #3882, .F. ) ; +#14054 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14055 = DIRECTION ( 'NONE', ( 5.478074134663590600E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14056 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14057 = CARTESIAN_POINT ( 'NONE', ( -7.642928932188134200, 0.7999999999999977100, 9.090000000000007000 ) ) ; +#14058 = AXIS2_PLACEMENT_3D ( 'NONE', #13456, #9998, #3935 ) ; +#14059 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14060 = VERTEX_POINT ( 'NONE', #2145 ) ; +#14061 = ADVANCED_FACE ( 'NONE', ( #10514 ), #12022, .F. ) ; +#14062 = VECTOR ( 'NONE', #10765, 1000.000000000000000 ) ; +#14063 = ORIENTED_EDGE ( 'NONE', *, *, #1383, .T. ) ; +#14064 = DIRECTION ( 'NONE', ( 3.690901012716607300E-015, -1.000000000000000000, 6.123233995736767300E-017 ) ) ; +#14065 = ORIENTED_EDGE ( 'NONE', *, *, #3354, .T. ) ; +#14066 = EDGE_CURVE ( 'NONE', #4489, #10889, #3087, .T. ) ; +#14067 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.3999999999999999700, 1.849999999999999900 ) ) ; +#14068 = EDGE_CURVE ( 'NONE', #498, #4253, #401, .T. ) ; +#14069 = LINE ( 'NONE', #13189, #11026 ) ; +#14070 = VECTOR ( 'NONE', #912, 1000.000000000000000 ) ; +#14071 = CARTESIAN_POINT ( 'NONE', ( 6.550000000000001600, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#14072 = ORIENTED_EDGE ( 'NONE', *, *, #6045, .T. ) ; +#14073 = ORIENTED_EDGE ( 'NONE', *, *, #10377, .F. ) ; +#14074 = AXIS2_PLACEMENT_3D ( 'NONE', #12565, #4069, #7713 ) ; +#14075 = CARTESIAN_POINT ( 'NONE', ( -3.403151787266614600E-016, 1.149787263097735900E-014, -3.080000000000011200 ) ) ; +#14076 = ADVANCED_FACE ( 'NONE', ( #984 ), #10680, .F. ) ; +#14077 = ORIENTED_EDGE ( 'NONE', *, *, #3873, .T. ) ; +#14078 = VECTOR ( 'NONE', #13752, 1000.000000000000000 ) ; +#14079 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14080 = VERTEX_POINT ( 'NONE', #4621 ) ; +#14081 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14082 = ORIENTED_EDGE ( 'NONE', *, *, #7020, .F. ) ; +#14083 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999962700, 0.8000000000000000400, -1.674999999999999400 ) ) ; +#14084 = ADVANCED_FACE ( 'NONE', ( #14508 ), #10537, .F. ) ; +#14085 = FACE_OUTER_BOUND ( 'NONE', #11220, .T. ) ; +#14086 = LINE ( 'NONE', #7659, #6675 ) ; +#14087 = PLANE ( 'NONE', #15493 ) ; +#14088 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000100, 0.3999999999999999700, 2.949999999999999300 ) ) ; +#14089 = ORIENTED_EDGE ( 'NONE', *, *, #3380, .T. ) ; +#14090 = EDGE_CURVE ( 'NONE', #1120, #1999, #3457, .T. ) ; +#14091 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999980100, 0.4000000000000000200, 8.050000000000004300 ) ) ; +#14092 = VERTEX_POINT ( 'NONE', #15304 ) ; +#14093 = ORIENTED_EDGE ( 'NONE', *, *, #8118, .T. ) ; +#14094 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, -0.9499999999999990700 ) ) ; +#14095 = ORIENTED_EDGE ( 'NONE', *, *, #15561, .T. ) ; +#14096 = VERTEX_POINT ( 'NONE', #716 ) ; +#14097 = CARTESIAN_POINT ( 'NONE', ( -7.549999999999999800, 3.147980000000000000, 8.990000000000002000 ) ) ; +#14098 = PLANE ( 'NONE', #7033 ) ; +#14099 = EDGE_CURVE ( 'NONE', #7064, #12727, #15618, .T. ) ; +#14100 = SURFACE_STYLE_FILL_AREA ( #12275 ) ; +#14101 = VECTOR ( 'NONE', #711, 1000.000000000000000 ) ; +#14102 = AXIS2_PLACEMENT_3D ( 'NONE', #12464, #14875, #7602 ) ; +#14103 = LINE ( 'NONE', #4648, #13898 ) ; +#14104 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14105 = ORIENTED_EDGE ( 'NONE', *, *, #14002, .F. ) ; +#14106 = VERTEX_POINT ( 'NONE', #9269 ) ; +#14107 = ORIENTED_EDGE ( 'NONE', *, *, #10339, .T. ) ; +#14108 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 2.050000000000001600 ) ) ; +#14109 = VERTEX_POINT ( 'NONE', #3286 ) ; +#14110 = EDGE_CURVE ( 'NONE', #8200, #2125, #5758, .T. ) ; +#14111 = ORIENTED_EDGE ( 'NONE', *, *, #3414, .T. ) ; +#14112 = ORIENTED_EDGE ( 'NONE', *, *, #11852, .T. ) ; +#14113 = EDGE_CURVE ( 'NONE', #5815, #12749, #10900, .T. ) ; +#14114 = VECTOR ( 'NONE', #1204, 1000.000000000000000 ) ; +#14115 = FACE_OUTER_BOUND ( 'NONE', #12791, .T. ) ; +#14116 = VECTOR ( 'NONE', #11066, 1000.000000000000000 ) ; +#14117 = VECTOR ( 'NONE', #14556, 1000.000000000000000 ) ; +#14118 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14119 = VERTEX_POINT ( 'NONE', #4520 ) ; +#14120 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #12219, 'distance_accuracy_value', 'NONE'); +#14121 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14122 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, -0.7142135623730971900, -4.500000000000000000 ) ) ; +#14123 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14124 = VERTEX_POINT ( 'NONE', #4419 ) ; +#14125 = ORIENTED_EDGE ( 'NONE', *, *, #7231, .T. ) ; +#14126 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14127 = AXIS2_PLACEMENT_3D ( 'NONE', #13492, #14726, #14778 ) ; +#14128 = VECTOR ( 'NONE', #4972, 1000.000000000000000 ) ; +#14129 = VECTOR ( 'NONE', #12827, 1000.000000000000000 ) ; +#14130 = LINE ( 'NONE', #8634, #981 ) ; +#14131 = LINE ( 'NONE', #11170, #12173 ) ; +#14132 = LINE ( 'NONE', #15116, #12959 ) ; +#14133 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, -1.399999999999999700 ) ) ; +#14134 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14135 = VERTEX_POINT ( 'NONE', #9574 ) ; +#14136 = EDGE_CURVE ( 'NONE', #9363, #1597, #11275, .T. ) ; +#14137 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 9.099999999999999600 ) ) ; +#14138 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14139 = ORIENTED_EDGE ( 'NONE', *, *, #6865, .T. ) ; +#14140 = PLANE ( 'NONE', #81 ) ; +#14141 = ORIENTED_EDGE ( 'NONE', *, *, #2962, .F. ) ; +#14142 = FILL_AREA_STYLE ('',( #11678 ) ) ; +#14143 = PLANE ( 'NONE', #11976 ) ; +#14144 = VECTOR ( 'NONE', #7187, 1000.000000000000000 ) ; +#14145 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.0000000000000000000, 8.825000000000001100 ) ) ; +#14146 = ADVANCED_FACE ( 'NONE', ( #4027 ), #2481, .F. ) ; +#14147 = VECTOR ( 'NONE', #10279, 1000.000000000000000 ) ; +#14148 = VECTOR ( 'NONE', #12081, 1000.000000000000000 ) ; +#14149 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14150 = LINE ( 'NONE', #818, #8834 ) ; +#14151 = AXIS2_PLACEMENT_3D ( 'NONE', #13278, #4688, #13238 ) ; +#14152 = ORIENTED_EDGE ( 'NONE', *, *, #10283, .T. ) ; +#14153 = PLANE ( 'NONE', #3596 ) ; +#14154 = PLANE ( 'NONE', #9961 ) ; +#14155 = ORIENTED_EDGE ( 'NONE', *, *, #9136, .T. ) ; +#14156 = ORIENTED_EDGE ( 'NONE', *, *, #12051, .T. ) ; +#14157 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 5.650000000000000400 ) ) ; +#14158 = ADVANCED_FACE ( 'NONE', ( #8060 ), #6524, .F. ) ; +#14159 = FACE_OUTER_BOUND ( 'NONE', #11794, .T. ) ; +#14160 = VECTOR ( 'NONE', #9155, 1000.000000000000000 ) ; +#14161 = EDGE_CURVE ( 'NONE', #15411, #13870, #3264, .T. ) ; +#14162 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14163 = ADVANCED_FACE ( 'NONE', ( #12580 ), #7242, .T. ) ; +#14164 = EDGE_CURVE ( 'NONE', #13001, #7583, #9750, .T. ) ; +#14165 = VECTOR ( 'NONE', #4242, 1000.000000000000000 ) ; +#14166 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 3.550000000000001200 ) ) ; +#14167 = PLANE ( 'NONE', #2757 ) ; +#14168 = ORIENTED_EDGE ( 'NONE', *, *, #1765, .F. ) ; +#14169 = VERTEX_POINT ( 'NONE', #12101 ) ; +#14170 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 1.149999999999998100 ) ) ; +#14171 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.204669080539449300E-016 ) ) ; +#14172 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000034500, 0.8000000000000000400, -1.850000000000000100 ) ) ; +#14173 = DIRECTION ( 'NONE', ( -3.097720492815728200E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14174 = LINE ( 'NONE', #8892, #8859 ) ; +#14175 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14176 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999920400, 0.0000000000000000000, 1.150000000000002100 ) ) ; +#14177 = VERTEX_POINT ( 'NONE', #1085 ) ; +#14178 = VECTOR ( 'NONE', #892, 1000.000000000000000 ) ; +#14179 = FACE_OUTER_BOUND ( 'NONE', #420, .T. ) ; +#14180 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14181 = EDGE_LOOP ( 'NONE', ( #637, #514, #2059, #3553 ) ) ; +#14182 = EDGE_LOOP ( 'NONE', ( #14660, #5698, #9066, #8963 ) ) ; +#14183 = EDGE_CURVE ( 'NONE', #13139, #6546, #5939, .T. ) ; +#14184 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14185 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#14186 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14187 = STYLED_ITEM ( 'NONE', ( #13309 ), #1014 ) ; +#14188 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14189 = PLANE ( 'NONE', #5477 ) ; +#14190 = EDGE_LOOP ( 'NONE', ( #7378, #8391, #10053, #15195 ) ) ; +#14191 = LINE ( 'NONE', #14044, #7734 ) ; +#14192 = ORIENTED_EDGE ( 'NONE', *, *, #8670, .T. ) ; +#14193 = EDGE_LOOP ( 'NONE', ( #4099, #10837, #7233, #13770 ) ) ; +#14194 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#14195 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14196 = EDGE_CURVE ( 'NONE', #9489, #1873, #8798, .T. ) ; +#14197 = ORIENTED_EDGE ( 'NONE', *, *, #11267, .T. ) ; +#14198 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999968400, 0.0000000000000000000, 5.649999999999999500 ) ) ; +#14199 = VECTOR ( 'NONE', #8282, 1000.000000000000000 ) ; +#14200 = VECTOR ( 'NONE', #5974, 1000.000000000000000 ) ; +#14201 = AXIS2_PLACEMENT_3D ( 'NONE', #8846, #7513, #14836 ) ; +#14202 = AXIS2_PLACEMENT_3D ( 'NONE', #11213, #2788, #13711 ) ; +#14203 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, -0.0000000000000000000, -3.350000000000000500 ) ) ; +#14204 = VERTEX_POINT ( 'NONE', #9677 ) ; +#14205 = ORIENTED_EDGE ( 'NONE', *, *, #7043, .T. ) ; +#14206 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, -0.9499999999999990700 ) ) ; +#14207 = VERTEX_POINT ( 'NONE', #8520 ) ; +#14208 = SURFACE_STYLE_FILL_AREA ( #6140 ) ; +#14209 = ORIENTED_EDGE ( 'NONE', *, *, #13954, .F. ) ; +#14210 = EDGE_CURVE ( 'NONE', #15237, #9712, #12960, .T. ) ; +#14211 = PLANE ( 'NONE', #14501 ) ; +#14212 = FACE_OUTER_BOUND ( 'NONE', #13771, .T. ) ; +#14213 = ORIENTED_EDGE ( 'NONE', *, *, #10620, .F. ) ; +#14214 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14215 = EDGE_CURVE ( 'NONE', #2901, #1846, #4780, .T. ) ; +#14216 = AXIS2_PLACEMENT_3D ( 'NONE', #8907, #13886, #458 ) ; +#14217 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14218 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14219 = CARTESIAN_POINT ( 'NONE', ( 7.611952621458756100, 3.101144252825626300, 9.077420392015691100 ) ) ; +#14220 = ORIENTED_EDGE ( 'NONE', *, *, #8463, .F. ) ; +#14221 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 0.5500000000000010400 ) ) ; +#14222 = CIRCLE ( 'NONE', #5222, 0.5000000000000004400 ) ; +#14223 = PLANE ( 'NONE', #1397 ) ; +#14224 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14225 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14226 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14227 = EDGE_CURVE ( 'NONE', #13393, #9494, #4013, .T. ) ; +#14228 = PLANE ( 'NONE', #12680 ) ; +#14229 = FACE_OUTER_BOUND ( 'NONE', #3909, .T. ) ; +#14230 = ORIENTED_EDGE ( 'NONE', *, *, #11523, .T. ) ; +#14231 = ORIENTED_EDGE ( 'NONE', *, *, #15701, .T. ) ; +#14232 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14233 = ADVANCED_FACE ( 'NONE', ( #10690 ), #13167, .T. ) ; +#14234 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, -3.350000000000000500 ) ) ; +#14235 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, -2.449999999999998800 ) ) ; +#14236 = VECTOR ( 'NONE', #15158, 1000.000000000000000 ) ; +#14237 = VECTOR ( 'NONE', #9716, 1000.000000000000000 ) ; +#14238 = AXIS2_PLACEMENT_3D ( 'NONE', #14711, #6323, #3806 ) ; +#14239 = CARTESIAN_POINT ( 'NONE', ( -7.379999999999999000, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#14240 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#14241 = EDGE_LOOP ( 'NONE', ( #1985, #13162, #4021, #8277 ) ) ; +#14242 = PLANE ( 'NONE', #7699 ) ; +#14243 = ADVANCED_FACE ( 'NONE', ( #10496 ), #1140, .F. ) ; +#14244 = AXIS2_PLACEMENT_3D ( 'NONE', #9959, #268, #2656 ) ; +#14245 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000004300, 0.4000000000000000200, 7.149999999999996800 ) ) ; +#14246 = FILL_AREA_STYLE ('',( #8037 ) ) ; +#14247 = ORIENTED_EDGE ( 'NONE', *, *, #2507, .T. ) ; +#14248 = CLOSED_SHELL ( 'NONE', ( #10323, #14509, #11053, #3810, #14003, #9789, #13539, #13762, #3604, #12937 ) ) ; +#14249 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000500, 0.0000000000000000000, 3.649999999999999500 ) ) ; +#14250 = FACE_OUTER_BOUND ( 'NONE', #9086, .T. ) ; +#14251 = ORIENTED_EDGE ( 'NONE', *, *, #14255, .F. ) ; +#14252 = AXIS2_PLACEMENT_3D ( 'NONE', #5443, #13900, #13959 ) ; +#14253 = VECTOR ( 'NONE', #5224, 1000.000000000000000 ) ; +#14254 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14255 = EDGE_CURVE ( 'NONE', #4159, #6853, #13930, .T. ) ; +#14256 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.807003620809173900E-016 ) ) ; +#14257 = EDGE_CURVE ( 'NONE', #2733, #1873, #7278, .T. ) ; +#14258 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#14259 = EDGE_LOOP ( 'NONE', ( #10551, #1031, #14464, #4722, #10047, #5524 ) ) ; +#14260 = VECTOR ( 'NONE', #3306, 1000.000000000000000 ) ; +#14261 = EDGE_LOOP ( 'NONE', ( #7990, #8064, #11690, #6929, #851, #7250 ) ) ; +#14262 = ORIENTED_EDGE ( 'NONE', *, *, #5864, .T. ) ; +#14263 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999889500, 0.0000000000000000000, -0.9499999999999970700 ) ) ; +#14264 = FACE_OUTER_BOUND ( 'NONE', #8800, .T. ) ; +#14265 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000004100, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#14266 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14267 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.4000000000000000200, -3.350000000000000500 ) ) ; +#14268 = VERTEX_POINT ( 'NONE', #7087 ) ; +#14269 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14270 = ORIENTED_EDGE ( 'NONE', *, *, #11403, .F. ) ; +#14271 = ORIENTED_EDGE ( 'NONE', *, *, #718, .F. ) ; +#14272 = EDGE_CURVE ( 'NONE', #15399, #14970, #12379, .T. ) ; +#14273 = ORIENTED_EDGE ( 'NONE', *, *, #93, .F. ) ; +#14274 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, -15.05858178898088800, -5.150000000000001200 ) ) ; +#14275 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999968400, 0.4000000000000000200, 5.649999999999999500 ) ) ; +#14276 = ORIENTED_EDGE ( 'NONE', *, *, #6932, .F. ) ; +#14277 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#14278 = ORIENTED_EDGE ( 'NONE', *, *, #7867, .F. ) ; +#14279 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#14280 = VECTOR ( 'NONE', #8574, 1000.000000000000000 ) ; +#14281 = FACE_OUTER_BOUND ( 'NONE', #10392, .T. ) ; +#14282 = ORIENTED_EDGE ( 'NONE', *, *, #2927, .F. ) ; +#14283 = PLANE ( 'NONE', #6145 ) ; +#14285 = ORIENTED_EDGE ( 'NONE', *, *, #8424, .F. ) ; +#14284 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 3.506355962080744500E-015 ) ) ; +#14286 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000009600, 0.8000000000000000400, 6.549999999999998000 ) ) ; +#14287 = EDGE_LOOP ( 'NONE', ( #8976, #9939, #8742, #8394 ) ) ; +#14288 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, -1.850000000000000500 ) ) ; +#14289 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 7.150000000000000400 ) ) ; +#14290 = ORIENTED_EDGE ( 'NONE', *, *, #14383, .F. ) ; +#14291 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14292 = VERTEX_POINT ( 'NONE', #11936 ) ; +#14293 = FILL_AREA_STYLE ('',( #4660 ) ) ; +#14294 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14295 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14296 = LINE ( 'NONE', #7018, #13910 ) ; +#14297 = EDGE_CURVE ( 'NONE', #3433, #13534, #3440, .T. ) ; +#14298 = SURFACE_STYLE_FILL_AREA ( #4342 ) ; +#14299 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999991400, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#14300 = VERTEX_POINT ( 'NONE', #6226 ) ; +#14301 = ORIENTED_EDGE ( 'NONE', *, *, #1084, .F. ) ; +#14302 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14303 = ORIENTED_EDGE ( 'NONE', *, *, #1387, .F. ) ; +#14304 = EDGE_CURVE ( 'NONE', #311, #371, #11079, .T. ) ; +#14305 = AXIS2_PLACEMENT_3D ( 'NONE', #14345, #11829, #12996 ) ; +#14306 = ORIENTED_EDGE ( 'NONE', *, *, #11852, .F. ) ; +#14307 = LINE ( 'NONE', #6447, #11075 ) ; +#14308 = LINE ( 'NONE', #11905, #6907 ) ; +#14309 = LINE ( 'NONE', #9629, #14677 ) ; +#14310 = FACE_OUTER_BOUND ( 'NONE', #1668, .T. ) ; +#14311 = LINE ( 'NONE', #6327, #4413 ) ; +#14312 = ORIENTED_EDGE ( 'NONE', *, *, #10018, .F. ) ; +#14313 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 9.550000000000000700 ) ) ; +#14314 = ADVANCED_FACE ( 'NONE', ( #1728 ), #2516, .F. ) ; +#14315 = ORIENTED_EDGE ( 'NONE', *, *, #12688, .F. ) ; +#14316 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14317 = EDGE_CURVE ( 'NONE', #14080, #1901, #5170, .T. ) ; +#14318 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14319 = EDGE_CURVE ( 'NONE', #12749, #8245, #4604, .T. ) ; +#14320 = ORIENTED_EDGE ( 'NONE', *, *, #603, .F. ) ; +#14321 = LINE ( 'NONE', #3051, #9933 ) ; +#14322 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 1.149999999999999900 ) ) ; +#14323 = VECTOR ( 'NONE', #3249, 1000.000000000000000 ) ; +#14324 = VECTOR ( 'NONE', #9485, 1000.000000000000000 ) ; +#14325 = FACE_OUTER_BOUND ( 'NONE', #2325, .T. ) ; +#14326 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.8000000000000000400, -3.174999999999998900 ) ) ; +#14327 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999998600, 0.0000000000000000000, 9.550000000000000700 ) ) ; +#14328 = FACE_OUTER_BOUND ( 'NONE', #6248, .T. ) ; +#14329 = ORIENTED_EDGE ( 'NONE', *, *, #6365, .F. ) ; +#14330 = VERTEX_POINT ( 'NONE', #3911 ) ; +#14331 = ORIENTED_EDGE ( 'NONE', *, *, #12620, .T. ) ; +#14332 = ORIENTED_EDGE ( 'NONE', *, *, #6273, .T. ) ; +#14333 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 1.637941840314110200, 4.750000000000000000 ) ) ; +#14334 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, -0.3500000000000004800 ) ) ; +#14335 = FACE_OUTER_BOUND ( 'NONE', #11784, .T. ) ; +#14336 = VECTOR ( 'NONE', #973, 1000.000000000000000 ) ; +#14337 = DIRECTION ( 'NONE', ( 5.478074134663590600E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14338 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 0.3999999999999999700, 3.649999999999999500 ) ) ; +#14339 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 5.478074134663595300E-015 ) ) ; +#14340 = EDGE_CURVE ( 'NONE', #12448, #11293, #6714, .T. ) ; +#14341 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14342 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 9.550000000000000700 ) ) ; +#14343 = VECTOR ( 'NONE', #13648, 1000.000000000000000 ) ; +#14344 = PLANE ( 'NONE', #6628 ) ; +#14345 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000020600, 0.4000000000000000200, 2.649999999999997700 ) ) ; +#14346 = ORIENTED_EDGE ( 'NONE', *, *, #1186, .T. ) ; +#14347 = EDGE_CURVE ( 'NONE', #4870, #5941, #7863, .T. ) ; +#14348 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 0.5500000000000010400 ) ) ; +#14349 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14350 = VECTOR ( 'NONE', #3303, 1000.000000000000000 ) ; +#14351 = PRESENTATION_STYLE_ASSIGNMENT (( #6386 ) ) ; +#14352 = AXIS2_PLACEMENT_3D ( 'NONE', #7088, #14256, #3230 ) ; +#14353 = CYLINDRICAL_SURFACE ( 'NONE', #1842, 0.2749999999999991900 ) ; +#14354 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14355 = ORIENTED_EDGE ( 'NONE', *, *, #2717, .F. ) ; +#14356 = ORIENTED_EDGE ( 'NONE', *, *, #3896, .F. ) ; +#14357 = EDGE_CURVE ( 'NONE', #4971, #12370, #7470, .T. ) ; +#14358 = EDGE_LOOP ( 'NONE', ( #3400, #12468, #5880, #9495, #4939, #2540 ) ) ; +#14359 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.3999999999999999700, 4.750000000000000000 ) ) ; +#14360 = EDGE_CURVE ( 'NONE', #3144, #14040, #3071, .T. ) ; +#14361 = ORIENTED_EDGE ( 'NONE', *, *, #12840, .T. ) ; +#14362 = ORIENTED_EDGE ( 'NONE', *, *, #13141, .T. ) ; +#14363 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999906200, 0.0000000000000000000, -0.3499999999999993100 ) ) ; +#14364 = EDGE_LOOP ( 'NONE', ( #1516, #385, #4854, #3519 ) ) ; +#14365 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14366 = VECTOR ( 'NONE', #4484, 1000.000000000000000 ) ; +#14367 = FACE_OUTER_BOUND ( 'NONE', #6450, .T. ) ; +#14368 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#14369 = ORIENTED_EDGE ( 'NONE', *, *, #9323, .F. ) ; +#14370 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #13553 ), #3766 ) ; +#14371 = EDGE_LOOP ( 'NONE', ( #14743, #9319, #11573, #3682, #15239, #5110 ) ) ; +#14372 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#14373 = ORIENTED_EDGE ( 'NONE', *, *, #11468, .F. ) ; +#14374 = ORIENTED_EDGE ( 'NONE', *, *, #1853, .F. ) ; +#14375 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14376 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.7000000000000009500, -9.600000000000001400 ) ) ; +#14377 = EDGE_LOOP ( 'NONE', ( #14736, #4735, #13410, #13505, #5292, #3492 ) ) ; +#14378 = PRESENTATION_STYLE_ASSIGNMENT (( #9946 ) ) ; +#14379 = ORIENTED_EDGE ( 'NONE', *, *, #13321, .T. ) ; +#14380 = EDGE_LOOP ( 'NONE', ( #2501 ) ) ; +#14381 = VECTOR ( 'NONE', #2233, 1000.000000000000000 ) ; +#14382 = PRESENTATION_STYLE_ASSIGNMENT (( #12008 ) ) ; +#14383 = EDGE_CURVE ( 'NONE', #821, #11614, #6324, .T. ) ; +#14384 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999936400, 0.4000000000000000200, 3.550000000000001200 ) ) ; +#14385 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.4000000000000000200, 1.849999999999999900 ) ) ; +#14386 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, 5.050000000000000700 ) ) ; +#14387 = ORIENTED_EDGE ( 'NONE', *, *, #11854, .T. ) ; +#14388 = CARTESIAN_POINT ( 'NONE', ( -7.629289567165736600, 3.073037331497398700, -2.877982895189703500 ) ) ; +#14389 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.0000000000000000000, 1.849999999999999900 ) ) ; +#14390 = ADVANCED_FACE ( 'NONE', ( #210 ), #2283, .F. ) ; +#14391 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 5.050000000000000700 ) ) ; +#14392 = ORIENTED_EDGE ( 'NONE', *, *, #118, .T. ) ; +#14393 = EDGE_CURVE ( 'NONE', #13534, #13514, #768, .T. ) ; +#14394 = LINE ( 'NONE', #13961, #4686 ) ; +#14395 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000001600, -3.080000000000001000 ) ) ; +#14396 = VERTEX_POINT ( 'NONE', #11052 ) ; +#14397 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2671 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3669, #12163, #4891 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#14398 = CARTESIAN_POINT ( 'NONE', ( -7.850000000000001400, 3.050000000000000700, -2.872928932188135100 ) ) ; +#14399 = LINE ( 'NONE', #4654, #1434 ) ; +#14400 = VECTOR ( 'NONE', #14688, 1000.000000000000000 ) ; +#14401 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003200, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#14402 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14403 = EDGE_CURVE ( 'NONE', #9898, #3097, #2672, .T. ) ; +#14404 = AXIS2_PLACEMENT_3D ( 'NONE', #1194, #6181, #1249 ) ; +#14405 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.491481338843133700E-015, 0.0000000000000000000 ) ) ; +#14406 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, -0.1749999999999989300 ) ) ; +#14407 = FACE_OUTER_BOUND ( 'NONE', #6883, .T. ) ; +#14408 = EDGE_LOOP ( 'NONE', ( #13783, #4844, #11223, #11322 ) ) ; +#14409 = VECTOR ( 'NONE', #3544, 1000.000000000000000 ) ; +#14410 = VECTOR ( 'NONE', #6846, 1000.000000000000000 ) ; +#14411 = FILL_AREA_STYLE ('',( #5760 ) ) ; +#14412 = EDGE_CURVE ( 'NONE', #15429, #7146, #11818, .T. ) ; +#14413 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 5.050000000000000700 ) ) ; +#14414 = STYLED_ITEM ( 'NONE', ( #6336 ), #6507 ) ; +#14415 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999905500, 0.0000000000000000000, -0.3499999999999989800 ) ) ; +#14416 = CARTESIAN_POINT ( 'NONE', ( 7.607004589923652000, 3.107607578482644700, 9.072769666234341600 ) ) ; +#14417 = AXIS2_PLACEMENT_3D ( 'NONE', #7945, #3173, #14034 ) ; +#14418 = ORIENTED_EDGE ( 'NONE', *, *, #7556, .F. ) ; +#14419 = VECTOR ( 'NONE', #3968, 1000.000000000000000 ) ; +#14420 = ORIENTED_EDGE ( 'NONE', *, *, #13884, .T. ) ; +#14421 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14422 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000011900, 2.897357294982540700E-014, 0.0000000000000000000 ) ) ; +#14423 = ADVANCED_FACE ( 'NONE', ( #15246 ), #7345, .F. ) ; +#14424 = VECTOR ( 'NONE', #9274, 1000.000000000000000 ) ; +#14425 = VECTOR ( 'NONE', #12092, 1000.000000000000000 ) ; +#14426 = EDGE_CURVE ( 'NONE', #11039, #10247, #3834, .T. ) ; +#14427 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14428 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000007600, 0.7999999999999971600, -2.872928932188135900 ) ) ; +#14429 = ORIENTED_EDGE ( 'NONE', *, *, #15235, .F. ) ; +#14430 = VECTOR ( 'NONE', #6490, 1000.000000000000000 ) ; +#14431 = DIRECTION ( 'NONE', ( 1.991647080244473300E-031, -6.123233995736767300E-017, -1.000000000000000000 ) ) ; +#14432 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14433 = ORIENTED_EDGE ( 'NONE', *, *, #2360, .T. ) ; +#14434 = AXIS2_PLACEMENT_3D ( 'NONE', #4860, #7280, #5995 ) ; +#14435 = ORIENTED_EDGE ( 'NONE', *, *, #1087, .F. ) ; +#14436 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14437 = FACE_OUTER_BOUND ( 'NONE', #4867, .T. ) ; +#14438 = LINE ( 'NONE', #13247, #8189 ) ; +#14439 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14440 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#14441 = ORIENTED_EDGE ( 'NONE', *, *, #8019, .F. ) ; +#14442 = ORIENTED_EDGE ( 'NONE', *, *, #13463, .F. ) ; +#14443 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14444 = EDGE_CURVE ( 'NONE', #5823, #12106, #14311, .T. ) ; +#14445 = ORIENTED_EDGE ( 'NONE', *, *, #12893, .F. ) ; +#14446 = LINE ( 'NONE', #12346, #8379 ) ; +#14447 = ORIENTED_EDGE ( 'NONE', *, *, #15150, .T. ) ; +#14448 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.0000000000000000000, 1.850000000000000100 ) ) ; +#14449 = ORIENTED_EDGE ( 'NONE', *, *, #4516, .F. ) ; +#14450 = EDGE_CURVE ( 'NONE', #1515, #3223, #8626, .T. ) ; +#14452 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14451 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999996100, 0.0000000000000000000, 8.650000000000003900 ) ) ; +#14453 = EDGE_CURVE ( 'NONE', #2363, #13782, #12772, .T. ) ; +#14454 = VECTOR ( 'NONE', #2972, 1000.000000000000000 ) ; +#14455 = LINE ( 'NONE', #5082, #355 ) ; +#14456 = CARTESIAN_POINT ( 'NONE', ( 8.549999999999998900, 0.4000000000000000200, 9.549999999999993600 ) ) ; +#14457 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14458 = VERTEX_POINT ( 'NONE', #8568 ) ; +#14459 = EDGE_LOOP ( 'NONE', ( #1861, #4339, #8234, #12556 ) ) ; +#14460 = ORIENTED_EDGE ( 'NONE', *, *, #1945, .F. ) ; +#14461 = AXIS2_PLACEMENT_3D ( 'NONE', #13222, #1248, #4825 ) ; +#14462 = ORIENTED_EDGE ( 'NONE', *, *, #9316, .T. ) ; +#14463 = ADVANCED_FACE ( 'NONE', ( #14869 ), #11462, .T. ) ; +#14464 = ORIENTED_EDGE ( 'NONE', *, *, #1199, .T. ) ; +#14465 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14466 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#14467 = FACE_OUTER_BOUND ( 'NONE', #14668, .T. ) ; +#14468 = VECTOR ( 'NONE', #13105, 1000.000000000000000 ) ; +#14469 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#14470 = VECTOR ( 'NONE', #5938, 1000.000000000000000 ) ; +#14471 = EDGE_LOOP ( 'NONE', ( #15571, #10873, #84, #341, #15447, #9722 ) ) ; +#14472 = EDGE_CURVE ( 'NONE', #11422, #9426, #11260, .T. ) ; +#14473 = EDGE_LOOP ( 'NONE', ( #14832, #11409, #10252, #12090, #2707, #1819 ) ) ; +#14474 = AXIS2_PLACEMENT_3D ( 'NONE', #14737, #1373, #9950 ) ; +#14475 = ADVANCED_FACE ( 'NONE', ( #2109 ), #6479, .F. ) ; +#14476 = ORIENTED_EDGE ( 'NONE', *, *, #15351, .T. ) ; +#14477 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14478 = CLOSED_SHELL ( 'NONE', ( #5000, #2729, #1833, #10064, #12846, #13744, #13609, #3732, #12703, #4727 ) ) ; +#14479 = EDGE_LOOP ( 'NONE', ( #1353, #5081, #8769, #15210, #2290, #591 ) ) ; +#14480 = PLANE ( 'NONE', #13524 ) ; +#14481 = EDGE_CURVE ( 'NONE', #3027, #10820, #11631, .T. ) ; +#14482 = FACE_OUTER_BOUND ( 'NONE', #10827, .T. ) ; +#14483 = VECTOR ( 'NONE', #4290, 1000.000000000000000 ) ; +#14484 = CIRCLE ( 'NONE', #5356, 0.2749999999999991900 ) ; +#14485 = AXIS2_PLACEMENT_3D ( 'NONE', #8268, #5816, #5707 ) ; +#14486 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#14487 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5315, 'distance_accuracy_value', 'NONE'); +#14488 = VECTOR ( 'NONE', #2455, 1000.000000000000000 ) ; +#14489 = CARTESIAN_POINT ( 'NONE', ( -5.139999999999999700, 0.7000000000000009500, -9.600000000000001400 ) ) ; +#14490 = PLANE ( 'NONE', #2389 ) ; +#14491 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14492 = VERTEX_POINT ( 'NONE', #13761 ) ; +#14493 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14494 = ORIENTED_EDGE ( 'NONE', *, *, #10019, .T. ) ; +#14495 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.097720492815728600E-016 ) ) ; +#14496 = ORIENTED_EDGE ( 'NONE', *, *, #4322, .T. ) ; +#14497 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#14498 = EDGE_CURVE ( 'NONE', #12807, #7869, #1153, .T. ) ; +#14499 = VECTOR ( 'NONE', #4160, 1000.000000000000000 ) ; +#14500 = VECTOR ( 'NONE', #8771, 1000.000000000000000 ) ; +#14501 = AXIS2_PLACEMENT_3D ( 'NONE', #13061, #10741, #9369 ) ; +#14502 = DIRECTION ( 'NONE', ( 1.807003620809173900E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14503 = FACE_OUTER_BOUND ( 'NONE', #2693, .T. ) ; +#14504 = VECTOR ( 'NONE', #1157, 1000.000000000000000 ) ; +#14505 = LINE ( 'NONE', #2980, #1166 ) ; +#14506 = LINE ( 'NONE', #3895, #400 ) ; +#14507 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999906200, -0.0000000000000000000, -0.3500000000000013700 ) ) ; +#14508 = FACE_OUTER_BOUND ( 'NONE', #9043, .T. ) ; +#14509 = ADVANCED_FACE ( 'NONE', ( #8232 ), #284, .T. ) ; +#14510 = ORIENTED_EDGE ( 'NONE', *, *, #2695, .F. ) ; +#14511 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 3.374999999999999600 ) ) ; +#14513 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#14512 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14514 = EDGE_CURVE ( 'NONE', #9245, #7149, #8041, .T. ) ; +#14515 = EDGE_LOOP ( 'NONE', ( #6309, #843, #5732, #5324, #7817, #4849 ) ) ; +#14516 = AXIS2_PLACEMENT_3D ( 'NONE', #8489, #9697, #12118 ) ; +#14517 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14518 = ORIENTED_EDGE ( 'NONE', *, *, #1547, .F. ) ; +#14519 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14520 = VECTOR ( 'NONE', #13641, 1000.000000000000000 ) ; +#14521 = VECTOR ( 'NONE', #10337, 1000.000000000000000 ) ; +#14522 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999906200, 0.4000000000000000200, -0.3500000000000013700 ) ) ; +#14523 = VECTOR ( 'NONE', #9609, 1000.000000000000000 ) ; +#14524 = DIRECTION ( 'NONE', ( 5.478074134663591400E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14525 = ORIENTED_EDGE ( 'NONE', *, *, #2361, .F. ) ; +#14526 = EDGE_CURVE ( 'NONE', #7823, #6139, #5741, .T. ) ; +#14527 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000001200, 9.090000000000001600 ) ) ; +#14528 = ORIENTED_EDGE ( 'NONE', *, *, #11057, .F. ) ; +#14529 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14530 = VECTOR ( 'NONE', #9063, 1000.000000000000000 ) ; +#14531 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14532 = VECTOR ( 'NONE', #4239, 1000.000000000000000 ) ; +#14533 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14534 = VECTOR ( 'NONE', #9981, 1000.000000000000000 ) ; +#14535 = DIRECTION ( 'NONE', ( 3.690901012716607300E-015, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14536 = VERTEX_POINT ( 'NONE', #10028 ) ; +#14537 = ORIENTED_EDGE ( 'NONE', *, *, #104, .F. ) ; +#14538 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14539 = PLANE ( 'NONE', #12635 ) ; +#14540 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000014900, 0.8000000000000000400, 5.050000000000000700 ) ) ; +#14541 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, 3.550000000000001200 ) ) ; +#14542 = EDGE_CURVE ( 'NONE', #15742, #10731, #6895, .T. ) ; +#14543 = ADVANCED_FACE ( 'NONE', ( #9536 ), #2728, .F. ) ; +#14544 = LINE ( 'NONE', #494, #11314 ) ; +#14545 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, -2.449999999999998800 ) ) ; +#14546 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14547 = EDGE_LOOP ( 'NONE', ( #2331, #5344, #14320, #14558 ) ) ; +#14548 = EDGE_CURVE ( 'NONE', #4678, #3619, #2467, .T. ) ; +#14549 = VECTOR ( 'NONE', #13846, 1000.000000000000000 ) ; +#14550 = FACE_OUTER_BOUND ( 'NONE', #2278, .T. ) ; +#14551 = SURFACE_STYLE_USAGE ( .BOTH. , #14595 ) ; +#14552 = ORIENTED_EDGE ( 'NONE', *, *, #9115, .F. ) ; +#14553 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14554 = VERTEX_POINT ( 'NONE', #15084 ) ; +#14555 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000012600, 0.4000000000000000200, 3.649999999999999500 ) ) ; +#14557 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14556 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14558 = ORIENTED_EDGE ( 'NONE', *, *, #1813, .T. ) ; +#14559 = VECTOR ( 'NONE', #1840, 1000.000000000000000 ) ; +#14560 = ORIENTED_EDGE ( 'NONE', *, *, #10784, .F. ) ; +#14561 = VERTEX_POINT ( 'NONE', #13701 ) ; +#14562 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14563 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999984000, 0.0000000000000000000, 4.325000000000001100 ) ) ; +#14564 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 8.650000000000000400 ) ) ; +#14565 = ORIENTED_EDGE ( 'NONE', *, *, #9863, .F. ) ; +#14566 = LINE ( 'NONE', #7067, #2754 ) ; +#14567 = VECTOR ( 'NONE', #1566, 1000.000000000000000 ) ; +#14568 = ORIENTED_EDGE ( 'NONE', *, *, #6227, .F. ) ; +#14569 = EDGE_CURVE ( 'NONE', #1092, #2806, #8607, .T. ) ; +#14570 = PLANE ( 'NONE', #4334 ) ; +#14571 = ORIENTED_EDGE ( 'NONE', *, *, #7697, .T. ) ; +#14572 = ORIENTED_EDGE ( 'NONE', *, *, #337, .F. ) ; +#14573 = CARTESIAN_POINT ( 'NONE', ( 7.561459556676523700, 3.149999999999999500, 8.996779519070251800 ) ) ; +#14574 = FACE_OUTER_BOUND ( 'NONE', #6269, .T. ) ; +#14575 = FACE_OUTER_BOUND ( 'NONE', #6946, .T. ) ; +#14576 = AXIS2_PLACEMENT_3D ( 'NONE', #541, #11668, #12877 ) ; +#14577 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 9.550000000000000700 ) ) ; +#14578 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999906200, 0.0000000000000000000, 0.5500000000000020400 ) ) ; +#14579 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14580 = ADVANCED_FACE ( 'NONE', ( #1333 ), #1556, .F. ) ; +#14581 = EDGE_LOOP ( 'NONE', ( #8724, #6159, #7366, #5431, #14251, #9683 ) ) ; +#14582 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14583 = LINE ( 'NONE', #9763, #11356 ) ; +#14584 = EDGE_LOOP ( 'NONE', ( #9211, #9803, #9110, #14270 ) ) ; +#14585 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.6999999999999999600, 0.0000000000000000000 ) ) ; +#14586 = EDGE_CURVE ( 'NONE', #3698, #7285, #20, .T. ) ; +#14587 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14588 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14589 = VECTOR ( 'NONE', #10148, 1000.000000000000000 ) ; +#14590 = VECTOR ( 'NONE', #4059, 1000.000000000000000 ) ; +#14591 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 18.10000000000000100 ) ) ; +#14592 = EDGE_CURVE ( 'NONE', #8380, #2733, #1709, .T. ) ; +#14593 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000025900, 0.4000000000000000200, 1.149999999999999000 ) ) ; +#14594 = AXIS2_PLACEMENT_3D ( 'NONE', #9591, #4738, #14622 ) ; +#14595 = SURFACE_SIDE_STYLE ('',( #2388 ) ) ; +#14596 = LINE ( 'NONE', #7126, #10035 ) ; +#14597 = ORIENTED_EDGE ( 'NONE', *, *, #15224, .F. ) ; +#14598 = PLANE ( 'NONE', #5576 ) ; +#14599 = LINE ( 'NONE', #8558, #11194 ) ; +#14601 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.762298528625412100E-017, -8.984670197367549300E-032 ) ) ; +#14600 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14602 = EDGE_LOOP ( 'NONE', ( #1969, #43, #2682, #4964 ) ) ; +#14603 = PLANE ( 'NONE', #12194 ) ; +#14604 = EDGE_CURVE ( 'NONE', #10186, #6232, #13329, .T. ) ; +#14605 = EDGE_CURVE ( 'NONE', #1212, #3044, #383, .T. ) ; +#14606 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14607 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000023800, 0.4000000000000000200, 2.050000000000001600 ) ) ; +#14608 = ORIENTED_EDGE ( 'NONE', *, *, #8926, .F. ) ; +#14609 = LINE ( 'NONE', #5358, #9118 ) ; +#14610 = ORIENTED_EDGE ( 'NONE', *, *, #11042, .F. ) ; +#14611 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14612 = ADVANCED_FACE ( 'NONE', ( #5923 ), #4451, .T. ) ; +#14613 = LINE ( 'NONE', #10211, #11016 ) ; +#14614 = LINE ( 'NONE', #663, #11388 ) ; +#14615 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000300, 0.4000000000000000200, 2.949999999999999300 ) ) ; +#14616 = VERTEX_POINT ( 'NONE', #10451 ) ; +#14617 = DIRECTION ( 'NONE', ( -5.478074134663594500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14618 = AXIS2_PLACEMENT_3D ( 'NONE', #2318, #14611, #3443 ) ; +#14619 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 8.825000000000001100 ) ) ; +#14620 = VERTEX_POINT ( 'NONE', #4229 ) ; +#14621 = ORIENTED_EDGE ( 'NONE', *, *, #5242, .F. ) ; +#14622 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14623 = FILL_AREA_STYLE_COLOUR ( '', #2649 ) ; +#14624 = LINE ( 'NONE', #15282, #4925 ) ; +#14625 = ORIENTED_EDGE ( 'NONE', *, *, #8805, .F. ) ; +#14626 = VERTEX_POINT ( 'NONE', #5354 ) ; +#14627 = ADVANCED_FACE ( 'NONE', ( #8220 ), #10400, .T. ) ; +#14628 = EDGE_CURVE ( 'NONE', #10896, #15759, #9906, .T. ) ; +#14629 = SURFACE_STYLE_FILL_AREA ( #5927 ) ; +#14630 = VECTOR ( 'NONE', #12180, 1000.000000000000000 ) ; +#14631 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14632 = ORIENTED_EDGE ( 'NONE', *, *, #8304, .T. ) ; +#14633 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#14634 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14636 = EDGE_LOOP ( 'NONE', ( #13879, #6585, #9854, #5545, #10265, #13805 ) ) ; +#14635 = CARTESIAN_POINT ( 'NONE', ( 7.570415567924382700, 3.144106227756287500, -2.813823333624607200 ) ) ; +#14637 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999936400, 0.4000000000000000200, 2.649999999999999500 ) ) ; +#14638 = EDGE_LOOP ( 'NONE', ( #4813, #12746, #1341, #9626 ) ) ; +#14639 = AXIS2_PLACEMENT_3D ( 'NONE', #11711, #9654, #14535 ) ; +#14640 = PLANE ( 'NONE', #4366 ) ; +#14641 = ORIENTED_EDGE ( 'NONE', *, *, #4695, .T. ) ; +#14642 = EDGE_LOOP ( 'NONE', ( #2655, #4479, #15336, #650 ) ) ; +#14643 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14644 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7539 ), #13215 ) ; +#14645 = ORIENTED_EDGE ( 'NONE', *, *, #4995, .T. ) ; +#14646 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14647 = ADVANCED_FACE ( 'NONE', ( #15054 ), #3627, .F. ) ; +#14648 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#14649 = LINE ( 'NONE', #9799, #7258 ) ; +#14650 = VECTOR ( 'NONE', #1029, 1000.000000000000000 ) ; +#14651 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#14652 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#14653 = ORIENTED_EDGE ( 'NONE', *, *, #4877, .T. ) ; +#14654 = ORIENTED_EDGE ( 'NONE', *, *, #1738, .F. ) ; +#14655 = VERTEX_POINT ( 'NONE', #14025 ) ; +#14656 = ADVANCED_FACE ( 'NONE', ( #572 ), #10513, .F. ) ; +#14657 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14658 = EDGE_CURVE ( 'NONE', #6124, #15644, #13522, .T. ) ; +#14659 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14660 = ORIENTED_EDGE ( 'NONE', *, *, #9429, .T. ) ; +#14661 = EDGE_CURVE ( 'NONE', #12413, #11856, #15231, .T. ) ; +#14662 = ORIENTED_EDGE ( 'NONE', *, *, #4198, .F. ) ; +#14663 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14664 = FACE_OUTER_BOUND ( 'NONE', #9575, .T. ) ; +#14665 = LINE ( 'NONE', #7512, #8603 ) ; +#14666 = LINE ( 'NONE', #6965, #7451 ) ; +#14667 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #13553 ) ) ; +#14668 = EDGE_LOOP ( 'NONE', ( #4048, #4935, #2277, #13751 ) ) ; +#14669 = VERTEX_POINT ( 'NONE', #11559 ) ; +#14670 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14671 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 4.500000000000000900 ) ) ; +#14672 = ORIENTED_EDGE ( 'NONE', *, *, #134, .T. ) ; +#14673 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14674 = VERTEX_POINT ( 'NONE', #7979 ) ; +#14675 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14676 = LINE ( 'NONE', #1967, #1165 ) ; +#14677 = VECTOR ( 'NONE', #7447, 1000.000000000000000 ) ; +#14678 = LINE ( 'NONE', #12910, #587 ) ; +#14679 = EDGE_CURVE ( 'NONE', #4816, #11943, #3820, .T. ) ; +#14680 = MANIFOLD_SOLID_BREP ( 'LPattern1[10]', #346 ) ; +#14681 = FACE_OUTER_BOUND ( 'NONE', #2459, .T. ) ; +#14682 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 6.375000000000000900 ) ) ; +#14683 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 8.050000000000000700 ) ) ; +#14684 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 5.050000000000000700 ) ) ; +#14685 = ORIENTED_EDGE ( 'NONE', *, *, #8177, .F. ) ; +#14686 = VERTEX_POINT ( 'NONE', #3205 ) ; +#14687 = ORIENTED_EDGE ( 'NONE', *, *, #11654, .F. ) ; +#14688 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14689 = EDGE_CURVE ( 'NONE', #11054, #7175, #4591, .T. ) ; +#14690 = AXIS2_PLACEMENT_3D ( 'NONE', #1313, #1415, #3723 ) ; +#14691 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, -0.3500000000000004800 ) ) ; +#14692 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14693 = LINE ( 'NONE', #10951, #2884 ) ; +#14694 = LINE ( 'NONE', #4216, #8070 ) ; +#14695 = CARTESIAN_POINT ( 'NONE', ( 7.616851616828784100, 3.092667204855682300, -2.870440641471888800 ) ) ; +#14696 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14697 = LINE ( 'NONE', #3517, #14148 ) ; +#14698 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14699 = FACE_OUTER_BOUND ( 'NONE', #13794, .T. ) ; +#14700 = ADVANCED_FACE ( 'NONE', ( #3248 ), #11721, .T. ) ; +#14701 = VECTOR ( 'NONE', #8073, 1000.000000000000000 ) ; +#14702 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14703 = ORIENTED_EDGE ( 'NONE', *, *, #15682, .T. ) ; +#14704 = ORIENTED_EDGE ( 'NONE', *, *, #3709, .F. ) ; +#14705 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, -1.125000000000000700 ) ) ; +#14706 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14707 = EDGE_LOOP ( 'NONE', ( #1408 ) ) ; +#14708 = EDGE_CURVE ( 'NONE', #342, #15302, #11988, .T. ) ; +#14709 = STYLED_ITEM ( 'NONE', ( #13837 ), #2466 ) ; +#14710 = ORIENTED_EDGE ( 'NONE', *, *, #12021, .T. ) ; +#14711 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 1.637941840314110200, 4.750000000000000000 ) ) ; +#14712 = VECTOR ( 'NONE', #14302, 1000.000000000000000 ) ; +#14713 = LINE ( 'NONE', #170, #6551 ) ; +#14714 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #9725, #3430, #15593, #1293, #3757, #14871 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 8.673617379884034500E-019, 0.0002388152348380257000, 0.0004776304696760487500 ), + .UNSPECIFIED. ) ; +#14715 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000034500, 0.8000000000000000400, -0.9499999999999990700 ) ) ; +#14716 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14717 = ADVANCED_FACE ( 'NONE', ( #8780 ), #908, .F. ) ; +#14718 = EDGE_CURVE ( 'NONE', #4829, #7778, #6132, .T. ) ; +#14719 = VECTOR ( 'NONE', #12140, 1000.000000000000000 ) ; +#14720 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14721 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.7000000000000009500, -6.100000000000000500 ) ) ; +#14722 = PLANE ( 'NONE', #10631 ) ; +#14723 = EDGE_LOOP ( 'NONE', ( #12460, #4580, #10602, #5682, #6079, #9394 ) ) ; +#14724 = EDGE_LOOP ( 'NONE', ( #4305, #15255, #5015, #4443 ) ) ; +#14725 = VECTOR ( 'NONE', #742, 1000.000000000000000 ) ; +#14726 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14727 = VECTOR ( 'NONE', #1777, 1000.000000000000000 ) ; +#14728 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.0000000000000000000, 1.850000000000000100 ) ) ; +#14729 = EDGE_CURVE ( 'NONE', #8718, #9911, #9358, .T. ) ; +#14730 = PLANE ( 'NONE', #9774 ) ; +#14731 = ADVANCED_FACE ( 'NONE', ( #15424 ), #10566, .F. ) ; +#14732 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14733 = FACE_OUTER_BOUND ( 'NONE', #10577, .T. ) ; +#14734 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 19.59999999999999800 ) ) ; +#14735 = ORIENTED_EDGE ( 'NONE', *, *, #5242, .T. ) ; +#14736 = ORIENTED_EDGE ( 'NONE', *, *, #15213, .T. ) ; +#14737 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 10.50000000000000000 ) ) ; +#14738 = ADVANCED_FACE ( 'NONE', ( #2858 ), #9444, .F. ) ; +#14739 = AXIS2_PLACEMENT_3D ( 'NONE', #8241, #6005, #9666 ) ; +#14740 = ORIENTED_EDGE ( 'NONE', *, *, #15189, .F. ) ; +#14741 = PRESENTATION_STYLE_ASSIGNMENT (( #5801 ) ) ; +#14742 = VERTEX_POINT ( 'NONE', #4603 ) ; +#14743 = ORIENTED_EDGE ( 'NONE', *, *, #7717, .F. ) ; +#14744 = ORIENTED_EDGE ( 'NONE', *, *, #3855, .F. ) ; +#14745 = LINE ( 'NONE', #7049, #8293 ) ; +#14746 = VECTOR ( 'NONE', #13160, 1000.000000000000000 ) ; +#14747 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14748 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14749 = CARTESIAN_POINT ( 'NONE', ( 7.609151875882606200, 3.104446300443227900, -2.864883614495198100 ) ) ; +#14750 = ORIENTED_EDGE ( 'NONE', *, *, #11489, .F. ) ; +#14751 = EDGE_CURVE ( 'NONE', #4280, #8599, #14666, .T. ) ; +#14752 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 0.5500000000000010400 ) ) ; +#14753 = EDGE_LOOP ( 'NONE', ( #4618, #11845, #15076, #1303 ) ) ; +#14754 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.3999999999999999700, -2.449999999999998800 ) ) ; +#14755 = ORIENTED_EDGE ( 'NONE', *, *, #10870, .T. ) ; +#14756 = EDGE_CURVE ( 'NONE', #5728, #2102, #4199, .T. ) ; +#14757 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14758 = VERTEX_POINT ( 'NONE', #3467 ) ; +#14759 = VECTOR ( 'NONE', #5866, 1000.000000000000000 ) ; +#14760 = EDGE_CURVE ( 'NONE', #13510, #6088, #10110, .T. ) ; +#14761 = ORIENTED_EDGE ( 'NONE', *, *, #9302, .T. ) ; +#14762 = VERTEX_POINT ( 'NONE', #14334 ) ; +#14763 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#14764 = ORIENTED_EDGE ( 'NONE', *, *, #10349, .F. ) ; +#14765 = LINE ( 'NONE', #11722, #5056 ) ; +#14766 = VECTOR ( 'NONE', #13018, 1000.000000000000000 ) ; +#14767 = AXIS2_PLACEMENT_3D ( 'NONE', #8190, #11982, #9500 ) ; +#14768 = EDGE_LOOP ( 'NONE', ( #2350, #10448, #606, #6938 ) ) ; +#14769 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.097720492815728600E-016 ) ) ; +#14770 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14771 = CARTESIAN_POINT ( 'NONE', ( 7.580976310729377900, 3.319452524890161600, -2.937639970946511500 ) ) ; +#14772 = ORIENTED_EDGE ( 'NONE', *, *, #808, .F. ) ; +#14773 = LINE ( 'NONE', #11599, #15690 ) ; +#14774 = VERTEX_POINT ( 'NONE', #15573 ) ; +#14775 = VECTOR ( 'NONE', #2135, 1000.000000000000000 ) ; +#14776 = LINE ( 'NONE', #728, #11540 ) ; +#14777 = EDGE_CURVE ( 'NONE', #11325, #11714, #13133, .T. ) ; +#14778 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14779 = ADVANCED_FACE ( 'NONE', ( #4393 ), #12985, .T. ) ; +#14780 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 0.1000000000000002600 ) ) ; +#14781 = CARTESIAN_POINT ( 'NONE', ( -7.602198665876327900, 3.139222690360981000, 9.020976310729381000 ) ) ; +#14782 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, 7.150000000000000400 ) ) ; +#14783 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14784 = EDGE_CURVE ( 'NONE', #15562, #5813, #7063, .T. ) ; +#14785 = VECTOR ( 'NONE', #2440, 1000.000000000000000 ) ; +#14786 = ORIENTED_EDGE ( 'NONE', *, *, #6408, .F. ) ; +#14787 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #9442, .NOT_KNOWN. ) ; +#14788 = AXIS2_PLACEMENT_3D ( 'NONE', #5834, #7220, #8333 ) ; +#14789 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#14790 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14791 = PLANE ( 'NONE', #14993 ) ; +#14792 = LINE ( 'NONE', #2519, #9848 ) ; +#14793 = VECTOR ( 'NONE', #2989, 1000.000000000000000 ) ; +#14794 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #8861, 'distance_accuracy_value', 'NONE'); +#14795 = ADVANCED_FACE ( 'NONE', ( #4763 ), #14283, .F. ) ; +#14796 = ORIENTED_EDGE ( 'NONE', *, *, #1349, .F. ) ; +#14797 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14798 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14799 = ORIENTED_EDGE ( 'NONE', *, *, #3775, .T. ) ; +#14800 = EDGE_CURVE ( 'NONE', #4924, #7442, #14103, .T. ) ; +#14801 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000238100, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#14802 = ORIENTED_EDGE ( 'NONE', *, *, #4377, .F. ) ; +#14803 = VECTOR ( 'NONE', #884, 1000.000000000000000 ) ; +#14804 = EDGE_LOOP ( 'NONE', ( #10542, #2797, #6735, #11997 ) ) ; +#14805 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.7999999999999999300, 3.100000000000000500 ) ) ; +#14806 = FACE_OUTER_BOUND ( 'NONE', #8509, .T. ) ; +#14807 = VECTOR ( 'NONE', #4973, 1000.000000000000000 ) ; +#14808 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#14809 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 9.550000000000000700 ) ) ; +#14810 = EDGE_CURVE ( 'NONE', #8838, #1672, #6488, .T. ) ; +#14811 = ADVANCED_FACE ( 'NONE', ( #11611 ), #8332, .F. ) ; +#14812 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, -1.850000000000000500 ) ) ; +#14813 = AXIS2_PLACEMENT_3D ( 'NONE', #2191, #10729, #4406 ) ; +#14814 = CARTESIAN_POINT ( 'NONE', ( -7.849999999999999600, 0.7999999999999983800, 9.290000000000008000 ) ) ; +#14815 = VERTEX_POINT ( 'NONE', #7121 ) ; +#14816 = LINE ( 'NONE', #4243, #14430 ) ; +#14817 = ORIENTED_EDGE ( 'NONE', *, *, #13022, .T. ) ; +#14818 = ORIENTED_EDGE ( 'NONE', *, *, #14971, .F. ) ; +#14819 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.8000000000000000400, 2.649999999999999500 ) ) ; +#14820 = ORIENTED_EDGE ( 'NONE', *, *, #8160, .F. ) ; +#14821 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14822 = LINE ( 'NONE', #2170, #1678 ) ; +#14823 = CARTESIAN_POINT ( 'NONE', ( -7.563639365022396500, 3.147982895189703100, 9.013037331497400800 ) ) ; +#14824 = EDGE_CURVE ( 'NONE', #2645, #7920, #10866, .T. ) ; +#14825 = EDGE_CURVE ( 'NONE', #12831, #1687, #13116, .T. ) ; +#14826 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, 9.550000000000000700 ) ) ; +#14827 = ORIENTED_EDGE ( 'NONE', *, *, #8706, .T. ) ; +#14828 = ORIENTED_EDGE ( 'NONE', *, *, #4533, .F. ) ; +#14829 = ORIENTED_EDGE ( 'NONE', *, *, #2740, .T. ) ; +#14830 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 9.099999999999999600 ) ) ; +#14831 = FACE_OUTER_BOUND ( 'NONE', #7843, .T. ) ; +#14832 = ORIENTED_EDGE ( 'NONE', *, *, #11199, .F. ) ; +#14833 = AXIS2_PLACEMENT_3D ( 'NONE', #4666, #8351, #9568 ) ; +#14834 = PLANE ( 'NONE', #8028 ) ; +#14835 = EDGE_LOOP ( 'NONE', ( #3574, #9879, #2071, #5778 ) ) ; +#14836 = DIRECTION ( 'NONE', ( -1.548860246407863300E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14837 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.7000000000000009500, -6.100000000000000500 ) ) ; +#14838 = LINE ( 'NONE', #13508, #8383 ) ; +#14839 = LINE ( 'NONE', #1395, #933 ) ; +#14841 = DIRECTION ( 'NONE', ( -1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14840 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#14842 = ORIENTED_EDGE ( 'NONE', *, *, #5887, .F. ) ; +#14843 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 4.336808689942062700E-015, -1.000000000000000000 ) ) ; +#14844 = VERTEX_POINT ( 'NONE', #2081 ) ; +#14845 = ORIENTED_EDGE ( 'NONE', *, *, #1438, .F. ) ; +#14846 = EDGE_CURVE ( 'NONE', #13407, #1999, #10656, .T. ) ; +#14847 = ORIENTED_EDGE ( 'NONE', *, *, #969, .F. ) ; +#14848 = ORIENTED_EDGE ( 'NONE', *, *, #5610, .F. ) ; +#14849 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14850 = EDGE_CURVE ( 'NONE', #2564, #9467, #8403, .T. ) ; +#14851 = VECTOR ( 'NONE', #14149, 1000.000000000000000 ) ; +#14852 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, 6.550000000000001600 ) ) ; +#14853 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14854 = AXIS2_PLACEMENT_3D ( 'NONE', #1113, #5615, #14226 ) ; +#14855 = EDGE_LOOP ( 'NONE', ( #3359, #4841, #12549, #201 ) ) ; +#14856 = ADVANCED_FACE ( 'NONE', ( #1899 ), #14539, .F. ) ; +#14857 = ORIENTED_EDGE ( 'NONE', *, *, #4943, .T. ) ; +#14858 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14859 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7539 ) ) ; +#14860 = ORIENTED_EDGE ( 'NONE', *, *, #547, .F. ) ; +#14861 = SURFACE_STYLE_USAGE ( .BOTH. , #6364 ) ; +#14862 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14863 = ORIENTED_EDGE ( 'NONE', *, *, #12670, .T. ) ; +#14864 = VERTEX_POINT ( 'NONE', #13196 ) ; +#14865 = LINE ( 'NONE', #13559, #11257 ) ; +#14866 = FACE_OUTER_BOUND ( 'NONE', #2630, .T. ) ; +#14867 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14868 = STYLED_ITEM ( 'NONE', ( #3375 ), #1698 ) ; +#14869 = FACE_OUTER_BOUND ( 'NONE', #9528, .T. ) ; +#14870 = ORIENTED_EDGE ( 'NONE', *, *, #15702, .F. ) ; +#14871 = CARTESIAN_POINT ( 'NONE', ( -7.850000000000001400, 3.050000000000000700, 9.082928932188135500 ) ) ; +#14872 = EDGE_CURVE ( 'NONE', #1597, #11408, #11792, .T. ) ; +#14873 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14874 = ADVANCED_FACE ( 'NONE', ( #1696 ), #2282, .T. ) ; +#14876 = ORIENTED_EDGE ( 'NONE', *, *, #4695, .F. ) ; +#14875 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#14877 = EDGE_CURVE ( 'NONE', #11811, #12853, #749, .T. ) ; +#14878 = PLANE ( 'NONE', #4240 ) ; +#14879 = ORIENTED_EDGE ( 'NONE', *, *, #14810, .F. ) ; +#14880 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000002500, -3.079999999999999200 ) ) ; +#14881 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#14882 = VECTOR ( 'NONE', #7763, 1000.000000000000000 ) ; +#14883 = LINE ( 'NONE', #13700, #3845 ) ; +#14884 = CARTESIAN_POINT ( 'NONE', ( 7.615261346167814700, 3.126879667662413100, -2.821593715659281600 ) ) ; +#14885 = VECTOR ( 'NONE', #10908, 1000.000000000000000 ) ; +#14886 = LINE ( 'NONE', #1311, #14504 ) ; +#14887 = LINE ( 'NONE', #9051, #12557 ) ; +#14888 = FACE_OUTER_BOUND ( 'NONE', #9033, .T. ) ; +#14889 = AXIS2_PLACEMENT_3D ( 'NONE', #4016, #8831, #7769 ) ; +#14890 = VECTOR ( 'NONE', #1680, 1000.000000000000000 ) ; +#14891 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -5.478074134663591400E-015 ) ) ; +#14892 = CARTESIAN_POINT ( 'NONE', ( -9.849999999999921500, 0.4000000000000000200, 2.050000000000001600 ) ) ; +#14893 = VERTEX_POINT ( 'NONE', #9811 ) ; +#14894 = CLOSED_SHELL ( 'NONE', ( #10016, #9926, #2661, #9073, #12242, #202 ) ) ; +#14895 = CARTESIAN_POINT ( 'NONE', ( -7.550000000000000700, 3.349999999999999600, -2.779999999999999400 ) ) ; +#14896 = ADVANCED_FACE ( 'NONE', ( #14281 ), #4858, .F. ) ; +#14897 = EDGE_LOOP ( 'NONE', ( #13908, #7662, #13892, #3546, #10749, #8889 ) ) ; +#14899 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14898 = SURFACE_STYLE_USAGE ( .BOTH. , #12424 ) ; +#14900 = ORIENTED_EDGE ( 'NONE', *, *, #10474, .F. ) ; +#14901 = EDGE_CURVE ( 'NONE', #3366, #3605, #3804, .T. ) ; +#14902 = VECTOR ( 'NONE', #8519, 1000.000000000000000 ) ; +#14903 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14904 = VECTOR ( 'NONE', #11195, 1000.000000000000000 ) ; +#14905 = SURFACE_STYLE_FILL_AREA ( #2489 ) ; +#14906 = LINE ( 'NONE', #1779, #1954 ) ; +#14907 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#14908 = EDGE_CURVE ( 'NONE', #1120, #10633, #1, .T. ) ; +#14909 = ORIENTED_EDGE ( 'NONE', *, *, #1181, .T. ) ; +#14910 = AXIS2_PLACEMENT_3D ( 'NONE', #8886, #1609, #13764 ) ; +#14911 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, -2.449999999999997500 ) ) ; +#14912 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -5.478074134663595300E-015 ) ) ; +#14913 = LINE ( 'NONE', #8592, #12416 ) ; +#14914 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 5.650000000000000400 ) ) ; +#14915 = LINE ( 'NONE', #7722, #15472 ) ; +#14916 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -3.491481338843133400E-015, -1.000000000000000000 ) ) ; +#14917 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14918 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999991400, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#14919 = VECTOR ( 'NONE', #15039, 1000.000000000000000 ) ; +#14920 = EDGE_CURVE ( 'NONE', #11054, #8382, #3612, .T. ) ; +#14921 = EDGE_CURVE ( 'NONE', #371, #4771, #8588, .T. ) ; +#14922 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000029100, 0.4000000000000000200, 0.5499999999999997100 ) ) ; +#14923 = EDGE_LOOP ( 'NONE', ( #12069, #4168, #2383, #92, #3972, #5028 ) ) ; +#14924 = ORIENTED_EDGE ( 'NONE', *, *, #1158, .T. ) ; +#14925 = ORIENTED_EDGE ( 'NONE', *, *, #3509, .T. ) ; +#14926 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#14927 = ORIENTED_EDGE ( 'NONE', *, *, #2447, .T. ) ; +#14928 = VECTOR ( 'NONE', #2975, 1000.000000000000000 ) ; +#14929 = ORIENTED_EDGE ( 'NONE', *, *, #10858, .T. ) ; +#14930 = CARTESIAN_POINT ( 'NONE', ( -7.556779519070251400, 3.149999999999999900, 9.001459556676525900 ) ) ; +#14931 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14932 = CARTESIAN_POINT ( 'NONE', ( 7.642928932188134200, 3.050000000000002500, -3.081999999999999400 ) ) ; +#14933 = VERTEX_POINT ( 'NONE', #15631 ) ; +#14934 = VECTOR ( 'NONE', #7909, 1000.000000000000000 ) ; +#14935 = FACE_OUTER_BOUND ( 'NONE', #12364, .T. ) ; +#14936 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#14937 = AXIS2_PLACEMENT_3D ( 'NONE', #7406, #9883, #13555 ) ; +#14938 = VERTEX_POINT ( 'NONE', #7217 ) ; +#14939 = VERTEX_POINT ( 'NONE', #69 ) ; +#14940 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14941 = ADVANCED_FACE ( 'NONE', ( #1504 ), #1273, .F. ) ; +#14942 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, -0.3500000000000004800 ) ) ; +#14943 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14944 = EDGE_CURVE ( 'NONE', #1030, #5711, #1317, .T. ) ; +#14945 = CARTESIAN_POINT ( 'NONE', ( -7.576234407614292900, 3.149999999999999500, 9.005520379342618400 ) ) ; +#14946 = ORIENTED_EDGE ( 'NONE', *, *, #14066, .F. ) ; +#14947 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999906200, 0.4000000000000000200, -0.3499999999999993100 ) ) ; +#14948 = ORIENTED_EDGE ( 'NONE', *, *, #12620, .F. ) ; +#14949 = ORIENTED_EDGE ( 'NONE', *, *, #2111, .F. ) ; +#14950 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#14951 = ORIENTED_EDGE ( 'NONE', *, *, #11749, .F. ) ; +#14952 = FACE_OUTER_BOUND ( 'NONE', #15060, .T. ) ; +#14953 = PLANE ( 'NONE', #1653 ) ; +#14954 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999991400, 0.7000000000000009500, -9.600000000000001400 ) ) ; +#14955 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#14956 = EDGE_LOOP ( 'NONE', ( #14568, #6935, #5172, #4141 ) ) ; +#14957 = ADVANCED_FACE ( 'NONE', ( #10477 ), #9657, .T. ) ; +#14958 = AXIS2_PLACEMENT_3D ( 'NONE', #1810, #13849, #8010 ) ; +#14959 = VERTEX_POINT ( 'NONE', #2490 ) ; +#14960 = LINE ( 'NONE', #6624, #8510 ) ; +#14961 = ORIENTED_EDGE ( 'NONE', *, *, #7978, .F. ) ; +#14962 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, -15.05858178898088800, -8.800000000000000700 ) ) ; +#14963 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.4000000000000000200, 0.0000000000000000000 ) ) ; +#14964 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.0000000000000000000, 2.549999999999999800 ) ) ; +#14965 = VECTOR ( 'NONE', #7279, 1000.000000000000000 ) ; +#14966 = VECTOR ( 'NONE', #13952, 1000.000000000000000 ) ; +#14967 = AXIS2_PLACEMENT_3D ( 'NONE', #10826, #14339, #11977 ) ; +#14968 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000003400, 0.8000000000000000400, -4.500000000000000000 ) ) ; +#14969 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#14970 = VERTEX_POINT ( 'NONE', #313 ) ; +#14971 = EDGE_CURVE ( 'NONE', #12807, #6876, #9343, .T. ) ; +#14972 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#14973 = ADVANCED_FACE ( 'NONE', ( #2844 ), #12234, .T. ) ; +#14974 = EDGE_CURVE ( 'NONE', #6603, #12831, #5334, .T. ) ; +#14975 = VERTEX_POINT ( 'NONE', #7638 ) ; +#14976 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#14977 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude5[7]', #2019 ) ; +#14978 = VECTOR ( 'NONE', #3817, 1000.000000000000000 ) ; +#14979 = FACE_OUTER_BOUND ( 'NONE', #15755, .T. ) ; +#14980 = AXIS2_PLACEMENT_3D ( 'NONE', #12199, #7396, #13542 ) ; +#14981 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.4000000000000000200, -3.349999999999998800 ) ) ; +#14982 = DIRECTION ( 'NONE', ( 1.927470528863115800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14983 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#14984 = PLANE ( 'NONE', #3429 ) ; +#14985 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.8000000000000000400, -2.449999999999998800 ) ) ; +#14986 = CIRCLE ( 'NONE', #3527, 0.2749999999999991900 ) ; +#14987 = CARTESIAN_POINT ( 'NONE', ( 6.050000000000003400, 0.6999999999999999600, -4.500000000000000000 ) ) ; +#14988 = ORIENTED_EDGE ( 'NONE', *, *, #14514, .T. ) ; +#14989 = EDGE_CURVE ( 'NONE', #4475, #11511, #5720, .T. ) ; +#14990 = CARTESIAN_POINT ( 'NONE', ( 9.449999999999999300, 0.4000000000000000200, 8.649999999999993200 ) ) ; +#14991 = VECTOR ( 'NONE', #12856, 1000.000000000000000 ) ; +#14992 = LINE ( 'NONE', #13427, #886 ) ; +#14993 = AXIS2_PLACEMENT_3D ( 'NONE', #2803, #10000, #7571 ) ; +#14994 = CARTESIAN_POINT ( 'NONE', ( -1.139999999999999000, -15.05858178898088800, -6.100000000000000500 ) ) ; +#14995 = ORIENTED_EDGE ( 'NONE', *, *, #8699, .F. ) ; +#14996 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#14997 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#14998 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999980800, 0.4000000000000000200, 7.150000000000002100 ) ) ; +#14999 = EDGE_CURVE ( 'NONE', #3494, #8560, #2448, .T. ) ; +#15000 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4903 ) ) ; +#15001 = ORIENTED_EDGE ( 'NONE', *, *, #9715, .T. ) ; +#15002 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15003 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#15004 = VECTOR ( 'NONE', #1851, 1000.000000000000000 ) ; +#15005 = VERTEX_POINT ( 'NONE', #2765 ) ; +#15006 = ORIENTED_EDGE ( 'NONE', *, *, #5850, .T. ) ; +#15007 = LINE ( 'NONE', #11580, #12509 ) ; +#15008 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, 0.6999999999999999600, -8.800000000000000700 ) ) ; +#15009 = EDGE_CURVE ( 'NONE', #4217, #7597, #8022, .T. ) ; +#15010 = PLANE ( 'NONE', #7468 ) ; +#15011 = AXIS2_PLACEMENT_3D ( 'NONE', #3059, #3270, #4458 ) ; +#15012 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000014200, 0.8000000000000000400, 4.325000000000001100 ) ) ; +#15013 = ORIENTED_EDGE ( 'NONE', *, *, #14164, .F. ) ; +#15014 = PLANE ( 'NONE', #6817 ) ; +#15015 = EDGE_LOOP ( 'NONE', ( #9167 ) ) ; +#15016 = ADVANCED_FACE ( 'NONE', ( #2079 ), #6414, .F. ) ; +#15017 = VECTOR ( 'NONE', #8978, 1000.000000000000000 ) ; +#15018 = ORIENTED_EDGE ( 'NONE', *, *, #13113, .T. ) ; +#15019 = ORIENTED_EDGE ( 'NONE', *, *, #8397, .T. ) ; +#15020 = EDGE_CURVE ( 'NONE', #12773, #8708, #15569, .T. ) ; +#15021 = AXIS2_PLACEMENT_3D ( 'NONE', #11719, #10450, #9202 ) ; +#15022 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15023 = ORIENTED_EDGE ( 'NONE', *, *, #5282, .F. ) ; +#15024 = ORIENTED_EDGE ( 'NONE', *, *, #11640, .T. ) ; +#15025 = ORIENTED_EDGE ( 'NONE', *, *, #4672, .T. ) ; +#15026 = CARTESIAN_POINT ( 'NONE', ( 7.850000000000001400, 3.050000000000000700, 9.082928932188135500 ) ) ; +#15027 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 1.637941840314110200, 8.050000000000000700 ) ) ; +#15028 = ADVANCED_FACE ( 'NONE', ( #15215 ), #3897, .T. ) ; +#15029 = VERTEX_POINT ( 'NONE', #3844 ) ; +#15030 = ORIENTED_EDGE ( 'NONE', *, *, #1246, .T. ) ; +#15031 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#15032 = EDGE_CURVE ( 'NONE', #9503, #9467, #9519, .T. ) ; +#15033 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, -2.449999999999998800 ) ) ; +#15034 = SURFACE_SIDE_STYLE ('',( #6614 ) ) ; +#15035 = ADVANCED_FACE ( 'NONE', ( #6295 ), #264, .T. ) ; +#15036 = LINE ( 'NONE', #11940, #2445 ) ; +#15037 = VECTOR ( 'NONE', #4415, 1000.000000000000000 ) ; +#15038 = VECTOR ( 'NONE', #12331, 1000.000000000000000 ) ; +#15039 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15040 = ORIENTED_EDGE ( 'NONE', *, *, #2866, .T. ) ; +#15041 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15042 = EDGE_LOOP ( 'NONE', ( #5034, #14988, #10625, #3002 ) ) ; +#15043 = ORIENTED_EDGE ( 'NONE', *, *, #12356, .F. ) ; +#15044 = AXIS2_PLACEMENT_3D ( 'NONE', #7548, #12347, #9825 ) ; +#15045 = CARTESIAN_POINT ( 'NONE', ( 5.550000000000002500, 0.8000000000000000400, -8.800000000000000700 ) ) ; +#15046 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15047 = ORIENTED_EDGE ( 'NONE', *, *, #6289, .F. ) ; +#15048 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999959100, 0.8000000000000000400, -3.349999999999998800 ) ) ; +#15049 = ORIENTED_EDGE ( 'NONE', *, *, #8162, .F. ) ; +#15050 = AXIS2_PLACEMENT_3D ( 'NONE', #6968, #1938, #4457 ) ; +#15052 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 7.150000000000000400 ) ) ; +#15051 = PLANE ( 'NONE', #281 ) ; +#15053 = LINE ( 'NONE', #8336, #948 ) ; +#15054 = FACE_OUTER_BOUND ( 'NONE', #771, .T. ) ; +#15055 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, 4.149999999999999500 ) ) ; +#15056 = ORIENTED_EDGE ( 'NONE', *, *, #1103, .T. ) ; +#15057 = EDGE_CURVE ( 'NONE', #14330, #14096, #9893, .T. ) ; +#15058 = ORIENTED_EDGE ( 'NONE', *, *, #11110, .T. ) ; +#15059 = EDGE_CURVE ( 'NONE', #2862, #5532, #6679, .T. ) ; +#15060 = EDGE_LOOP ( 'NONE', ( #11308, #6001, #4324, #1328 ) ) ; +#15061 = FILL_AREA_STYLE ('',( #11391 ) ) ; +#15062 = EDGE_CURVE ( 'NONE', #6088, #2549, #11969, .T. ) ; +#15063 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 4.336808689942043800E-015, 1.000000000000000000 ) ) ; +#15064 = ORIENTED_EDGE ( 'NONE', *, *, #11917, .F. ) ; +#15065 = FACE_OUTER_BOUND ( 'NONE', #8944, .T. ) ; +#15066 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 1.637941840314110200, 3.550000000000001200 ) ) ; +#15067 = VECTOR ( 'NONE', #10861, 1000.000000000000000 ) ; +#15068 = LINE ( 'NONE', #12990, #2871 ) ; +#15069 = LINE ( 'NONE', #8480, #15245 ) ; +#15070 = CARTESIAN_POINT ( 'NONE', ( 7.650000000000000400, 3.049999999999999800, -2.872928932188135900 ) ) ; +#15071 = VECTOR ( 'NONE', #185, 1000.000000000000000 ) ; +#15072 = AXIS2_PLACEMENT_3D ( 'NONE', #2926, #12496, #14969 ) ; +#15073 = ORIENTED_EDGE ( 'NONE', *, *, #5036, .F. ) ; +#15074 = CARTESIAN_POINT ( 'NONE', ( -7.617242544895639800, 3.124016485703914500, -2.823628917235419000 ) ) ; +#15075 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999920400, 0.0000000000000000000, 2.050000000000003400 ) ) ; +#15076 = ORIENTED_EDGE ( 'NONE', *, *, #230, .F. ) ; +#15077 = VERTEX_POINT ( 'NONE', #7907 ) ; +#15078 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15079 = VECTOR ( 'NONE', #10791, 1000.000000000000000 ) ; +#15080 = LINE ( 'NONE', #740, #5587 ) ; +#15081 = ORIENTED_EDGE ( 'NONE', *, *, #12086, .T. ) ; +#15082 = CARTESIAN_POINT ( 'NONE', ( 7.852000000000001200, 3.129277334261816100, 9.067398806512153800 ) ) ; +#15083 = EDGE_CURVE ( 'NONE', #7682, #7996, #2637, .T. ) ; +#15084 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 7.325000000000002000 ) ) ; +#15085 = LINE ( 'NONE', #9990, #9387 ) ; +#15086 = VECTOR ( 'NONE', #14439, 1000.000000000000000 ) ; +#15087 = CARTESIAN_POINT ( 'NONE', ( 7.629230332643793100, 3.350000000000000100, 9.005624326090535100 ) ) ; +#15088 = ORIENTED_EDGE ( 'NONE', *, *, #4624, .T. ) ; +#15089 = ORIENTED_EDGE ( 'NONE', *, *, #1143, .T. ) ; +#15090 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 3.550000000000001200 ) ) ; +#15091 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000025900, 0.8000000000000000400, 2.049999999999999800 ) ) ; +#15092 = ORIENTED_EDGE ( 'NONE', *, *, #10572, .T. ) ; +#15093 = CARTESIAN_POINT ( 'NONE', ( -7.850000000000011200, 3.022803820977837300E-014, 9.082928932188135500 ) ) ; +#15094 = ORIENTED_EDGE ( 'NONE', *, *, #582, .T. ) ; +#15095 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#15096 = VECTOR ( 'NONE', #10462, 1000.000000000000000 ) ; +#15097 = PLANE ( 'NONE', #5361 ) ; +#15098 = ADVANCED_FACE ( 'NONE', ( #2819 ), #467, .T. ) ; +#15099 = VECTOR ( 'NONE', #13687, 1000.000000000000000 ) ; +#15100 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.195440985631454300E-016 ) ) ; +#15101 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15102 = FACE_OUTER_BOUND ( 'NONE', #5246, .T. ) ; +#15103 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15104 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.548860246407863300E-016 ) ) ; +#15105 = ORIENTED_EDGE ( 'NONE', *, *, #11552, .T. ) ; +#15106 = EDGE_CURVE ( 'NONE', #15232, #8967, #9129, .T. ) ; +#15107 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15108 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999989300, 0.8000000000000000400, 5.825000000000001100 ) ) ; +#15109 = ADVANCED_FACE ( 'NONE', ( #4513 ), #5437, .T. ) ; +#15110 = LINE ( 'NONE', #1973, #12623 ) ; +#15111 = CIRCLE ( 'NONE', #12099, 0.2749999999999991900 ) ; +#15112 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, -0.0000000000000000000, -3.350000000000000500 ) ) ; +#15113 = EDGE_CURVE ( 'NONE', #11986, #11986, #7163, .T. ) ; +#15114 = ADVANCED_FACE ( 'NONE', ( #12292 ), #15010, .T. ) ; +#15115 = VECTOR ( 'NONE', #8372, 1000.000000000000000 ) ; +#15116 = CARTESIAN_POINT ( 'NONE', ( 1.320000000000001400, 0.6999999999999999600, -9.600000000000001400 ) ) ; +#15117 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15118 = VERTEX_POINT ( 'NONE', #7754 ) ; +#15119 = ORIENTED_EDGE ( 'NONE', *, *, #1813, .F. ) ; +#15120 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15121 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#15122 = CARTESIAN_POINT ( 'NONE', ( -7.646673601807761700, 3.079455349686083900, -2.855487921837795500 ) ) ; +#15123 = ORIENTED_EDGE ( 'NONE', *, *, #8973, .F. ) ; +#15124 = LINE ( 'NONE', #6400, #3143 ) ; +#15125 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, -0.9499999999999990700 ) ) ; +#15126 = ORIENTED_EDGE ( 'NONE', *, *, #9475, .T. ) ; +#15127 = EDGE_LOOP ( 'NONE', ( #15533, #2552, #1923, #2379 ) ) ; +#15128 = EDGE_CURVE ( 'NONE', #9898, #14939, #2356, .T. ) ; +#15129 = EDGE_CURVE ( 'NONE', #14106, #4103, #5398, .T. ) ; +#15130 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#15131 = ORIENTED_EDGE ( 'NONE', *, *, #4372, .T. ) ; +#15132 = FACE_OUTER_BOUND ( 'NONE', #6214, .T. ) ; +#15133 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#15134 = VERTEX_POINT ( 'NONE', #2814 ) ; +#15135 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15136 = ORIENTED_EDGE ( 'NONE', *, *, #13677, .T. ) ; +#15137 = PLANE ( 'NONE', #3754 ) ; +#15138 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15139 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.0000000000000000000, 10.00000000000000000 ) ) ; +#15140 = ORIENTED_EDGE ( 'NONE', *, *, #13592, .T. ) ; +#15141 = VECTOR ( 'NONE', #12375, 1000.000000000000000 ) ; +#15142 = EDGE_LOOP ( 'NONE', ( #10449, #9623, #15283, #4687 ) ) ; +#15143 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15144 = VERTEX_POINT ( 'NONE', #10330 ) ; +#15145 = CARTESIAN_POINT ( 'NONE', ( 7.632769666234337600, 3.107607578482644200, -2.837004589923654700 ) ) ; +#15146 = FACE_OUTER_BOUND ( 'NONE', #7458, .T. ) ; +#15147 = LINE ( 'NONE', #6776, #9824 ) ; +#15148 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#15149 = ORIENTED_EDGE ( 'NONE', *, *, #785, .T. ) ; +#15150 = EDGE_CURVE ( 'NONE', #13997, #2, #3641, .T. ) ; +#15151 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15153 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15152 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#15154 = ORIENTED_EDGE ( 'NONE', *, *, #3538, .F. ) ; +#15155 = VECTOR ( 'NONE', #10385, 1000.000000000000000 ) ; +#15156 = EDGE_CURVE ( 'NONE', #11235, #12072, #12210, .T. ) ; +#15157 = EDGE_LOOP ( 'NONE', ( #6918, #152, #11924, #6665 ) ) ; +#15158 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.104919411450195700E-016 ) ) ; +#15159 = VECTOR ( 'NONE', #10521, 1000.000000000000000 ) ; +#15160 = VECTOR ( 'NONE', #13732, 1000.000000000000000 ) ; +#15161 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999937500, 0.0000000000000000000, 2.650000000000002100 ) ) ; +#15162 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, 3.550000000000001200 ) ) ; +#15163 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15164 = FACE_BOUND ( 'NONE', #4756, .T. ) ; +#15165 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15166 = VERTEX_POINT ( 'NONE', #2869 ) ; +#15167 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3115, 'distance_accuracy_value', 'NONE'); +#15168 = LINE ( 'NONE', #7773, #5278 ) ; +#15169 = VECTOR ( 'NONE', #8704, 1000.000000000000000 ) ; +#15170 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15171 = EDGE_CURVE ( 'NONE', #280, #7682, #7083, .T. ) ; +#15172 = ORIENTED_EDGE ( 'NONE', *, *, #6472, .T. ) ; +#15173 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15174 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 10.00000000000000000 ) ) ; +#15175 = EDGE_CURVE ( 'NONE', #15557, #15475, #10271, .T. ) ; +#15176 = EDGE_LOOP ( 'NONE', ( #8631, #6623, #5515, #7208 ) ) ; +#15177 = VECTOR ( 'NONE', #3816, 1000.000000000000000 ) ; +#15178 = ORIENTED_EDGE ( 'NONE', *, *, #11468, .T. ) ; +#15179 = STYLED_ITEM ( 'NONE', ( #6163 ), #13809 ) ; +#15180 = ADVANCED_FACE ( 'NONE', ( #14681 ), #8913, .F. ) ; +#15181 = PLANE ( 'NONE', #8590 ) ; +#15182 = LINE ( 'NONE', #5738, #9484 ) ; +#15183 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#15184 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 9.099999999999999600 ) ) ; +#15185 = ADVANCED_FACE ( 'NONE', ( #176 ), #6568, .F. ) ; +#15186 = PLANE ( 'NONE', #2141 ) ; +#15187 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 1.637941840314110200, 8.825000000000001100 ) ) ; +#15188 = ORIENTED_EDGE ( 'NONE', *, *, #15540, .F. ) ; +#15189 = EDGE_CURVE ( 'NONE', #5653, #8564, #5824, .T. ) ; +#15190 = ORIENTED_EDGE ( 'NONE', *, *, #14319, .T. ) ; +#15191 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000020300, 0.4000000000000000200, 3.550000000000001200 ) ) ; +#15192 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#15193 = ORIENTED_EDGE ( 'NONE', *, *, #2287, .T. ) ; +#15194 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15195 = ORIENTED_EDGE ( 'NONE', *, *, #13733, .F. ) ; +#15196 = SURFACE_STYLE_USAGE ( .BOTH. , #2907 ) ; +#15197 = CYLINDRICAL_SURFACE ( 'NONE', #10095, 0.4999999999999995600 ) ; +#15198 = VECTOR ( 'NONE', #4012, 1000.000000000000000 ) ; +#15199 = CARTESIAN_POINT ( 'NONE', ( -7.565530125675979700, 3.351999999999999900, 9.069277334261810700 ) ) ; +#15200 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.4000000000000000200, -2.449999999999997500 ) ) ; +#15201 = EDGE_CURVE ( 'NONE', #14970, #12442, #11092, .T. ) ; +#15203 = ORIENTED_EDGE ( 'NONE', *, *, #6019, .T. ) ; +#15202 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6561 ) ) ; +#15204 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15205 = VERTEX_POINT ( 'NONE', #14057 ) ; +#15206 = ORIENTED_EDGE ( 'NONE', *, *, #10800, .F. ) ; +#15207 = EDGE_LOOP ( 'NONE', ( #15023, #3254, #3846, #11622 ) ) ; +#15208 = FACE_OUTER_BOUND ( 'NONE', #14602, .T. ) ; +#15209 = ORIENTED_EDGE ( 'NONE', *, *, #11760, .F. ) ; +#15210 = ORIENTED_EDGE ( 'NONE', *, *, #8660, .F. ) ; +#15211 = VECTOR ( 'NONE', #7744, 1000.000000000000000 ) ; +#15212 = FACE_OUTER_BOUND ( 'NONE', #14408, .T. ) ; +#15213 = EDGE_CURVE ( 'NONE', #13797, #14762, #1915, .T. ) ; +#15214 = PLANE ( 'NONE', #11233 ) ; +#15215 = FACE_OUTER_BOUND ( 'NONE', #1050, .T. ) ; +#15216 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.3999999999999999700, 7.150000000000000400 ) ) ; +#15217 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 0.3749999999999994400 ) ) ; +#15218 = ORIENTED_EDGE ( 'NONE', *, *, #12602, .F. ) ; +#15219 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 1.806230589874906900, -2.449999999999998800 ) ) ; +#15220 = ORIENTED_EDGE ( 'NONE', *, *, #14974, .T. ) ; +#15221 = VERTEX_POINT ( 'NONE', #11653 ) ; +#15222 = VERTEX_POINT ( 'NONE', #15321 ) ; +#15223 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15224 = EDGE_CURVE ( 'NONE', #5885, #13671, #4158, .T. ) ; +#15225 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15226 = EDGE_LOOP ( 'NONE', ( #14312, #13375, #14418, #10482, #1755, #739 ) ) ; +#15227 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #10341 ), #7315 ) ; +#15228 = ORIENTED_EDGE ( 'NONE', *, *, #6014, .F. ) ; +#15229 = LINE ( 'NONE', #4361, #2446 ) ; +#15230 = AXIS2_PLACEMENT_3D ( 'NONE', #5194, #3861, #8876 ) ; +#15231 = LINE ( 'NONE', #9293, #3049 ) ; +#15232 = VERTEX_POINT ( 'NONE', #12766 ) ; +#15233 = CARTESIAN_POINT ( 'NONE', ( -0.3399999999999988600, 0.8000000000000000400, -6.900000000000000400 ) ) ; +#15234 = VERTEX_POINT ( 'NONE', #2023 ) ; +#15235 = EDGE_CURVE ( 'NONE', #5622, #4697, #12345, .T. ) ; +#15236 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, -2.449999999999998800 ) ) ; +#15237 = VERTEX_POINT ( 'NONE', #8007 ) ; +#15238 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15239 = ORIENTED_EDGE ( 'NONE', *, *, #8912, .F. ) ; +#15240 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000020300, 0.4000000000000000200, 3.550000000000001200 ) ) ; +#15241 = ORIENTED_EDGE ( 'NONE', *, *, #11720, .F. ) ; +#15242 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, -15.05858178898088800, -5.150000000000001200 ) ) ; +#15243 = PRESENTATION_STYLE_ASSIGNMENT (( #10097 ) ) ; +#15244 = PRESENTATION_STYLE_ASSIGNMENT (( #5784 ) ) ; +#15245 = VECTOR ( 'NONE', #1309, 1000.000000000000000 ) ; +#15246 = FACE_OUTER_BOUND ( 'NONE', #14364, .T. ) ; +#15247 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.7999999999999999300, 4.874999999999999100 ) ) ; +#15248 = ADVANCED_FACE ( 'NONE', ( #8484 ), #15214, .T. ) ; +#15249 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000015300, 0.4000000000000000200, 5.050000000000000700 ) ) ; +#15250 = EDGE_LOOP ( 'NONE', ( #4705, #12010, #7596, #8644 ) ) ; +#15251 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #12687 ) ; +#15252 = ORIENTED_EDGE ( 'NONE', *, *, #3813, .F. ) ; +#15254 = PLANE ( 'NONE', #5600 ) ; +#15253 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.0000000000000000000, 1.849999999999999900 ) ) ; +#15255 = ORIENTED_EDGE ( 'NONE', *, *, #2834, .F. ) ; +#15256 = VECTOR ( 'NONE', #2660, 1000.000000000000000 ) ; +#15257 = LINE ( 'NONE', #1188, #949 ) ; +#15258 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#15259 = LINE ( 'NONE', #12009, #13161 ) ; +#15260 = EDGE_LOOP ( 'NONE', ( #3575, #11556, #13888, #11783 ) ) ; +#15261 = ADVANCED_FACE ( 'NONE', ( #9764 ), #8119, .T. ) ; +#15262 = EDGE_CURVE ( 'NONE', #12848, #3339, #10155, .T. ) ; +#15263 = ORIENTED_EDGE ( 'NONE', *, *, #13512, .F. ) ; +#15264 = ORIENTED_EDGE ( 'NONE', *, *, #7647, .F. ) ; +#15265 = EDGE_CURVE ( 'NONE', #13671, #6124, #14676, .T. ) ; +#15266 = DIRECTION ( 'NONE', ( 1.807003620809173900E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15267 = ADVANCED_FACE ( 'NONE', ( #4427 ), #3189, .T. ) ; +#15268 = ORIENTED_EDGE ( 'NONE', *, *, #705, .T. ) ; +#15269 = EDGE_CURVE ( 'NONE', #4753, #5371, #5569, .T. ) ; +#15270 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999968400, 0.4000000000000000200, 5.650000000000001200 ) ) ; +#15271 = ORIENTED_EDGE ( 'NONE', *, *, #5509, .T. ) ; +#15272 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000500, 1.637941840314110200, 3.649999999999999500 ) ) ; +#15273 = VECTOR ( 'NONE', #13109, 1000.000000000000000 ) ; +#15274 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15275 = FACE_OUTER_BOUND ( 'NONE', #8750, .T. ) ; +#15276 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 1.637941840314110200, 3.550000000000001200 ) ) ; +#15277 = VECTOR ( 'NONE', #8709, 1000.000000000000000 ) ; +#15278 = AXIS2_PLACEMENT_3D ( 'NONE', #6294, #12270, #8263 ) ; +#15279 = PLANE ( 'NONE', #1532 ) ; +#15280 = CARTESIAN_POINT ( 'NONE', ( -8.549999999999998900, 0.4000000000000000200, 8.650000000000000400 ) ) ; +#15281 = FACE_OUTER_BOUND ( 'NONE', #14182, .T. ) ; +#15282 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000004100, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#15283 = ORIENTED_EDGE ( 'NONE', *, *, #3487, .T. ) ; +#15284 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#15285 = EDGE_CURVE ( 'NONE', #555, #4176, #13342, .T. ) ; +#15286 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15287 = LINE ( 'NONE', #1105, #15648 ) ; +#15288 = COLOUR_RGB ( '',0.5019607843137254800, 0.5019607843137254800, 0.5019607843137254800 ) ; +#15289 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15290 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15291 = CARTESIAN_POINT ( 'NONE', ( -2.679999999999999300, -15.05858178898088800, -8.800000000000000700 ) ) ; +#15292 = CIRCLE ( 'NONE', #14910, 0.4999999999999995600 ) ; +#15293 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#15294 = EDGE_CURVE ( 'NONE', #6438, #5744, #6335, .T. ) ; +#15295 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000239700, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#15296 = ORIENTED_EDGE ( 'NONE', *, *, #15745, .T. ) ; +#15297 = ORIENTED_EDGE ( 'NONE', *, *, #7479, .F. ) ; +#15298 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#15299 = PLANE ( 'NONE', #12581 ) ; +#15300 = CLOSED_SHELL ( 'NONE', ( #13252, #10929, #8264, #490, #13421, #810, #7537, #15711, #352, #3060 ) ) ; +#15301 = LINE ( 'NONE', #7140, #3128 ) ; +#15302 = VERTEX_POINT ( 'NONE', #9327 ) ; +#15303 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, -0.9499999999999995100 ) ) ; +#15305 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 5.649999999999999500 ) ) ; +#15304 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000041600, 0.7999999999999999300, 2.649999999999999500 ) ) ; +#15306 = ORIENTED_EDGE ( 'NONE', *, *, #13080, .F. ) ; +#15307 = LINE ( 'NONE', #10489, #15492 ) ; +#15308 = VECTOR ( 'NONE', #13209, 1000.000000000000000 ) ; +#15309 = EDGE_CURVE ( 'NONE', #9045, #4771, #8811, .T. ) ; +#15310 = AXIS2_PLACEMENT_3D ( 'NONE', #5852, #8205, #14405 ) ; +#15311 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 5.650000000000000400 ) ) ; +#15312 = ORIENTED_EDGE ( 'NONE', *, *, #1930, .T. ) ; +#15313 = ORIENTED_EDGE ( 'NONE', *, *, #12497, .T. ) ; +#15314 = ORIENTED_EDGE ( 'NONE', *, *, #6616, .T. ) ; +#15315 = ORIENTED_EDGE ( 'NONE', *, *, #2953, .T. ) ; +#15316 = EDGE_CURVE ( 'NONE', #1318, #4309, #9371, .T. ) ; +#15317 = VECTOR ( 'NONE', #14899, 1000.000000000000000 ) ; +#15318 = ORIENTED_EDGE ( 'NONE', *, *, #4276, .F. ) ; +#15319 = ORIENTED_EDGE ( 'NONE', *, *, #7530, .F. ) ; +#15320 = AXIS2_PLACEMENT_3D ( 'NONE', #1634, #10165, #11336 ) ; +#15321 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999984400, 0.0000000000000000000, 7.150000000000000400 ) ) ; +#15322 = ORIENTED_EDGE ( 'NONE', *, *, #15502, .F. ) ; +#15323 = CARTESIAN_POINT ( 'NONE', ( 7.627398806512152500, 3.129277334261815600, 9.292000000000001600 ) ) ; +#15324 = LINE ( 'NONE', #7124, #10962 ) ; +#15325 = VECTOR ( 'NONE', #3717, 1000.000000000000000 ) ; +#15326 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#15327 = ADVANCED_FACE ( 'NONE', ( #34 ), #4482, .F. ) ; +#15328 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#15329 = ORIENTED_EDGE ( 'NONE', *, *, #3565, .T. ) ; +#15330 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.690901012716604900E-015, 0.0000000000000000000 ) ) ; +#15331 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 6.550000000000001600 ) ) ; +#15332 = EDGE_CURVE ( 'NONE', #4816, #13997, #11645, .T. ) ; +#15333 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, -1.399999999999999700 ) ) ; +#15334 = EDGE_LOOP ( 'NONE', ( #8027, #8678, #14301, #9420 ) ) ; +#15335 = FACE_OUTER_BOUND ( 'NONE', #9930, .T. ) ; +#15336 = ORIENTED_EDGE ( 'NONE', *, *, #6803, .F. ) ; +#15337 = LINE ( 'NONE', #6752, #3341 ) ; +#15338 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000000600, 0.4000000000000000200, 1.849999999999999900 ) ) ; +#15339 = ADVANCED_FACE ( 'NONE', ( #10510 ), #8371, .T. ) ; +#15340 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15341 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.6999999999999999600, -6.900000000000000400 ) ) ; +#15342 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000001100, 0.3999999999999999700, 2.549999999999999800 ) ) ; +#15343 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999975100, 0.8000000000000000400, 2.049999999999999800 ) ) ; +#15344 = ADVANCED_FACE ( 'NONE', ( #2106 ), #3347, .F. ) ; +#15345 = FACE_OUTER_BOUND ( 'NONE', #2249, .T. ) ; +#15346 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#15347 = ORIENTED_EDGE ( 'NONE', *, *, #14018, .T. ) ; +#15348 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999991000, 0.3999999999999999700, 2.549999999999999800 ) ) ; +#15349 = VECTOR ( 'NONE', #5190, 1000.000000000000000 ) ; +#15350 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, -3.350000000000000500 ) ) ; +#15351 = EDGE_CURVE ( 'NONE', #7932, #14268, #6142, .T. ) ; +#15352 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, 1.875000000000000000 ) ) ; +#15354 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15353 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000500, 0.3999999999999999700, 3.649999999999999500 ) ) ; +#15355 = EDGE_CURVE ( 'NONE', #9421, #9710, #1724, .T. ) ; +#15356 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000007700, 0.3999999999999999700, 1.849999999999999900 ) ) ; +#15357 = FACE_OUTER_BOUND ( 'NONE', #7456, .T. ) ; +#15358 = EDGE_LOOP ( 'NONE', ( #4950, #683, #12317, #7266, #9139, #11765 ) ) ; +#15359 = ORIENTED_EDGE ( 'NONE', *, *, #11523, .F. ) ; +#15360 = LINE ( 'NONE', #11643, #14236 ) ; +#15361 = LINE ( 'NONE', #4662, #14052 ) ; +#15362 = AXIS2_PLACEMENT_3D ( 'NONE', #15425, #9237, #6790 ) ; +#15363 = EDGE_LOOP ( 'NONE', ( #11879, #11970, #7253, #10060, #15499, #13271 ) ) ; +#15364 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 4.599999999999999600 ) ) ; +#15365 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15366 = CARTESIAN_POINT ( 'NONE', ( 7.627408650308851200, 3.075703978347817700, 9.087979999999999900 ) ) ; +#15367 = VERTEX_POINT ( 'NONE', #5979 ) ; +#15368 = CIRCLE ( 'NONE', #8034, 0.4999999999999995600 ) ; +#15369 = ORIENTED_EDGE ( 'NONE', *, *, #1640, .T. ) ; +#15370 = ORIENTED_EDGE ( 'NONE', *, *, #3091, .F. ) ; +#15371 = EDGE_CURVE ( 'NONE', #1936, #13940, #14308, .T. ) ; +#15372 = PLANE ( 'NONE', #719 ) ; +#15373 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15374 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15375 = LINE ( 'NONE', #7849, #12135 ) ; +#15376 = PRESENTATION_STYLE_ASSIGNMENT (( #14032 ) ) ; +#15377 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#15378 = ORIENTED_EDGE ( 'NONE', *, *, #4920, .F. ) ; +#15379 = AXIS2_PLACEMENT_3D ( 'NONE', #1931, #4396, #10293 ) ; +#15380 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.3999999999999999700, 8.650000000000000400 ) ) ; +#15381 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15382 = ORIENTED_EDGE ( 'NONE', *, *, #3212, .F. ) ; +#15383 = VECTOR ( 'NONE', #5666, 1000.000000000000000 ) ; +#15384 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999973400, 0.8000000000000000400, 1.325000000000001500 ) ) ; +#15385 = EDGE_LOOP ( 'NONE', ( #11496, #11269, #8659, #13731 ) ) ; +#15386 = ORIENTED_EDGE ( 'NONE', *, *, #1907, .F. ) ; +#15387 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, -15.05858178898088800, -6.900000000000000400 ) ) ; +#15388 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 7.875000000000000000 ) ) ; +#15389 = LINE ( 'NONE', #8061, #4744 ) ; +#15390 = CYLINDRICAL_SURFACE ( 'NONE', #7212, 0.2749999999999991900 ) ; +#15391 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#15392 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000002800, 0.8000000000000000400, -4.500000000000000900 ) ) ; +#15393 = VERTEX_POINT ( 'NONE', #14363 ) ; +#15394 = EDGE_CURVE ( 'NONE', #9480, #9627, #13739, .T. ) ; +#15395 = DIRECTION ( 'NONE', ( 5.478074134663594500E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#15396 = ORIENTED_EDGE ( 'NONE', *, *, #8783, .F. ) ; +#15397 = ORIENTED_EDGE ( 'NONE', *, *, #9340, .T. ) ; +#15398 = CARTESIAN_POINT ( 'NONE', ( 3.350000000000003600, 0.6999999999999999600, -4.500000000000000900 ) ) ; +#15399 = VERTEX_POINT ( 'NONE', #11951 ) ; +#15400 = ORIENTED_EDGE ( 'NONE', *, *, #13947, .T. ) ; +#15401 = ORIENTED_EDGE ( 'NONE', *, *, #3582, .F. ) ; +#15403 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000031300, 0.8000000000000000400, -0.3500000000000013700 ) ) ; +#15402 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.491481338843133400E-015, -1.462686427040065000E-032 ) ) ; +#15404 = EDGE_CURVE ( 'NONE', #8599, #11701, #398, .T. ) ; +#15405 = LINE ( 'NONE', #7372, #8778 ) ; +#15406 = VECTOR ( 'NONE', #15738, 1000.000000000000000 ) ; +#15407 = VECTOR ( 'NONE', #4503, 1000.000000000000000 ) ; +#15408 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.0000000000000000000, 2.649999999999999500 ) ) ; +#15409 = ORIENTED_EDGE ( 'NONE', *, *, #11927, .F. ) ; +#15410 = ADVANCED_FACE ( 'NONE', ( #4792 ), #11802, .T. ) ; +#15411 = VERTEX_POINT ( 'NONE', #3297 ) ; +#15412 = EDGE_LOOP ( 'NONE', ( #15675, #1476, #9641, #9195 ) ) ; +#15413 = PLANE ( 'NONE', #5073 ) ; +#15414 = ADVANCED_FACE ( 'NONE', ( #8435 ), #8428, .F. ) ; +#15415 = ORIENTED_EDGE ( 'NONE', *, *, #4276, .T. ) ; +#15416 = EDGE_CURVE ( 'NONE', #4337, #3196, #1537, .T. ) ; +#15417 = ORIENTED_EDGE ( 'NONE', *, *, #12340, .T. ) ; +#15418 = FACE_OUTER_BOUND ( 'NONE', #11894, .T. ) ; +#15419 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, -2.449999999999998800 ) ) ; +#15420 = EDGE_CURVE ( 'NONE', #1115, #5925, #7293, .T. ) ; +#15421 = VECTOR ( 'NONE', #815, 1000.000000000000000 ) ; +#15422 = CIRCLE ( 'NONE', #10031, 0.2749999999999991900 ) ; +#15423 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000034500, 0.8000000000000000400, -0.9499999999999995100 ) ) ; +#15424 = FACE_OUTER_BOUND ( 'NONE', #11984, .T. ) ; +#15425 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 1.637941840314110200, 1.849999999999999900 ) ) ; +#15426 = ORIENTED_EDGE ( 'NONE', *, *, #4093, .F. ) ; +#15427 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, -2.449999999999998800 ) ) ; +#15428 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.6999999999999999600, 0.0000000000000000000 ) ) ; +#15429 = VERTEX_POINT ( 'NONE', #8267 ) ; +#15430 = VERTEX_POINT ( 'NONE', #9585 ) ; +#15431 = ORIENTED_EDGE ( 'NONE', *, *, #3, .F. ) ; +#15432 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #7078, #15643, #13052, #10891, #2194, #976 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 4 ), + ( 1.788112030672749000E-018, 0.0002388152348380261900, 0.0004776304696760505900 ), + .UNSPECIFIED. ) ; +#15433 = FACE_OUTER_BOUND ( 'NONE', #5607, .T. ) ; +#15434 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000900, 0.0000000000000000000, 1.849999999999999900 ) ) ; +#15435 = VECTOR ( 'NONE', #13318, 1000.000000000000000 ) ; +#15436 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000040900, 0.0000000000000000000, 7.600000000000000500 ) ) ; +#15437 = ORIENTED_EDGE ( 'NONE', *, *, #5827, .F. ) ; +#15438 = EDGE_CURVE ( 'NONE', #15393, #9131, #9566, .T. ) ; +#15439 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15440 = ORIENTED_EDGE ( 'NONE', *, *, #216, .F. ) ; +#15441 = PLANE ( 'NONE', #14767 ) ; +#15442 = ORIENTED_EDGE ( 'NONE', *, *, #13970, .T. ) ; +#15443 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15444 = MANIFOLD_SOLID_BREP ( 'LPattern1[12]', #13460 ) ; +#15445 = VECTOR ( 'NONE', #1446, 1000.000000000000000 ) ; +#15446 = VECTOR ( 'NONE', #8817, 1000.000000000000000 ) ; +#15447 = ORIENTED_EDGE ( 'NONE', *, *, #2086, .F. ) ; +#15448 = FACE_OUTER_BOUND ( 'NONE', #544, .T. ) ; +#15449 = AXIS2_PLACEMENT_3D ( 'NONE', #10502, #12922, #13292 ) ; +#15450 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 0.0000000000000000000, -3.349999999999998800 ) ) ; +#15451 = LINE ( 'NONE', #3017, #13948 ) ; +#15452 = LINE ( 'NONE', #4707, #14523 ) ; +#15453 = EDGE_LOOP ( 'NONE', ( #9684, #1477, #6268, #9506 ) ) ; +#15455 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15454 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15456 = ORIENTED_EDGE ( 'NONE', *, *, #15420, .T. ) ; +#15457 = ORIENTED_EDGE ( 'NONE', *, *, #6134, .T. ) ; +#15458 = CIRCLE ( 'NONE', #15320, 0.4999999999999995600 ) ; +#15459 = VECTOR ( 'NONE', #3952, 1000.000000000000000 ) ; +#15460 = EDGE_CURVE ( 'NONE', #8867, #9610, #3642, .T. ) ; +#15461 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7772, 'distance_accuracy_value', 'NONE'); +#15462 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.982541115402047700E-014 ) ) ; +#15463 = EDGE_CURVE ( 'NONE', #13870, #11339, #8056, .T. ) ; +#15464 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.3999999999999999700, 6.550000000000001600 ) ) ; +#15465 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#15466 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15467 = ORIENTED_EDGE ( 'NONE', *, *, #135, .F. ) ; +#15468 = ORIENTED_EDGE ( 'NONE', *, *, #2717, .T. ) ; +#15469 = PLANE ( 'NONE', #6301 ) ; +#15470 = VECTOR ( 'NONE', #8377, 1000.000000000000000 ) ; +#15471 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15472 = VECTOR ( 'NONE', #8941, 1000.000000000000000 ) ; +#15473 = VECTOR ( 'NONE', #7620, 1000.000000000000000 ) ; +#15474 = ORIENTED_EDGE ( 'NONE', *, *, #216, .T. ) ; +#15475 = VERTEX_POINT ( 'NONE', #3500 ) ; +#15476 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.097720492815727700E-016 ) ) ; +#15477 = EDGE_CURVE ( 'NONE', #4678, #2260, #14886, .T. ) ; +#15478 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000000300, 0.4000000000000000200, 2.949999999999999300 ) ) ; +#15479 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#15480 = CARTESIAN_POINT ( 'NONE', ( -8.549999999999998900, 0.4000000000000000200, 9.550000000000000700 ) ) ; +#15481 = CARTESIAN_POINT ( 'NONE', ( -7.622513364263748600, 3.083823333624608600, -2.874106227756288300 ) ) ; +#15482 = DIRECTION ( 'NONE', ( 1.982541115402047700E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15483 = ORIENTED_EDGE ( 'NONE', *, *, #11881, .F. ) ; +#15484 = ADVANCED_FACE ( 'NONE', ( #2298 ), #3720, .F. ) ; +#15485 = LINE ( 'NONE', #3132, #7348 ) ; +#15486 = ORIENTED_EDGE ( 'NONE', *, *, #10548, .T. ) ; +#15487 = VERTEX_POINT ( 'NONE', #4890 ) ; +#15488 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15489 = CARTESIAN_POINT ( 'NONE', ( 7.549999999999999800, 3.349999999999998800, -2.780000000000002900 ) ) ; +#15490 = EDGE_CURVE ( 'NONE', #13827, #6574, #11813, .T. ) ; +#15491 = ORIENTED_EDGE ( 'NONE', *, *, #10637, .T. ) ; +#15492 = VECTOR ( 'NONE', #5553, 1000.000000000000000 ) ; +#15493 = AXIS2_PLACEMENT_3D ( 'NONE', #11625, #553, #13872 ) ; +#15494 = CARTESIAN_POINT ( 'NONE', ( -7.637420392015690700, 3.101144252825625900, -2.841952621458756500 ) ) ; +#15495 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, -0.3500000000000004800 ) ) ; +#15496 = ORIENTED_EDGE ( 'NONE', *, *, #9487, .F. ) ; +#15497 = ORIENTED_EDGE ( 'NONE', *, *, #9541, .T. ) ; +#15498 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999920400, 0.4000000000000000200, 2.050000000000003400 ) ) ; +#15499 = ORIENTED_EDGE ( 'NONE', *, *, #14444, .T. ) ; +#15500 = VECTOR ( 'NONE', #1573, 1000.000000000000000 ) ; +#15501 = ORIENTED_EDGE ( 'NONE', *, *, #9569, .T. ) ; +#15502 = EDGE_CURVE ( 'NONE', #14655, #15579, #15616, .T. ) ; +#15503 = STYLED_ITEM ( 'NONE', ( #2793 ), #2003 ) ; +#15504 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.3999999999999999700, 1.149999999999999900 ) ) ; +#15505 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#15506 = LINE ( 'NONE', #12920, #11333 ) ; +#15507 = LINE ( 'NONE', #1906, #9647 ) ; +#15508 = EDGE_LOOP ( 'NONE', ( #14447, #8110, #1077, #3039 ) ) ; +#15509 = EDGE_CURVE ( 'NONE', #5759, #5245, #5364, .T. ) ; +#15510 = AXIS2_PLACEMENT_3D ( 'NONE', #3910, #12249, #14769 ) ; +#15511 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.4000000000000000200, 4.049999999999999800 ) ) ; +#15512 = EDGE_LOOP ( 'NONE', ( #11344, #2621, #11072, #10177 ) ) ; +#15513 = VECTOR ( 'NONE', #14269, 1000.000000000000000 ) ; +#15514 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15515 = ORIENTED_EDGE ( 'NONE', *, *, #15201, .F. ) ; +#15516 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15517 = FACE_OUTER_BOUND ( 'NONE', #14014, .T. ) ; +#15518 = SURFACE_STYLE_FILL_AREA ( #15061 ) ; +#15519 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 6.100126508929432700E-015 ) ) ; +#15520 = EDGE_CURVE ( 'NONE', #5749, #1154, #15, .T. ) ; +#15521 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15522 = VECTOR ( 'NONE', #5516, 1000.000000000000000 ) ; +#15523 = ORIENTED_EDGE ( 'NONE', *, *, #997, .F. ) ; +#15524 = DIRECTION ( 'NONE', ( -1.982541115402047700E-014, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15525 = CARTESIAN_POINT ( 'NONE', ( -0.4899999999999760100, 0.4000000000000000200, 4.750000000000000000 ) ) ; +#15526 = VECTOR ( 'NONE', #12204, 1000.000000000000000 ) ; +#15527 = VECTOR ( 'NONE', #7651, 1000.000000000000000 ) ; +#15528 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 0.7999999999999999300, -3.350000000000000500 ) ) ; +#15529 = CARTESIAN_POINT ( 'NONE', ( -7.599300014952715000, 3.117242544895639300, -2.854016485703915000 ) ) ; +#15530 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, 0.7999999999999999300, 6.550000000000001600 ) ) ; +#15531 = AXIS2_PLACEMENT_3D ( 'NONE', #3099, #8969, #14059 ) ; +#15532 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000004100, 0.6999999999999999600, -4.000000000000000000 ) ) ; +#15533 = ORIENTED_EDGE ( 'NONE', *, *, #11112, .T. ) ; +#15534 = VERTEX_POINT ( 'NONE', #98 ) ; +#15535 = CARTESIAN_POINT ( 'NONE', ( 4.350000000000003200, 0.7000000000000009500, -8.800000000000000700 ) ) ; +#15536 = FACE_OUTER_BOUND ( 'NONE', #7495, .T. ) ; +#15537 = EDGE_LOOP ( 'NONE', ( #4852, #14329, #11255, #10954, #710, #1101 ) ) ; +#15538 = VERTEX_POINT ( 'NONE', #6032 ) ; +#15539 = CARTESIAN_POINT ( 'NONE', ( 2.120000000000001400, 0.6999999999999999600, -6.100000000000000500 ) ) ; +#15540 = EDGE_CURVE ( 'NONE', #8773, #1093, #765, .T. ) ; +#15541 = FACE_OUTER_BOUND ( 'NONE', #6571, .T. ) ; +#15542 = EDGE_CURVE ( 'NONE', #7052, #11511, #2668, .T. ) ; +#15544 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15543 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000000000, 0.8000000000000000400, 10.60000000000000000 ) ) ; +#15545 = EDGE_CURVE ( 'NONE', #6304, #6304, #585, .T. ) ; +#15546 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#15547 = EDGE_LOOP ( 'NONE', ( #114, #9999, #3228, #13205 ) ) ; +#15548 = FACE_OUTER_BOUND ( 'NONE', #12503, .T. ) ; +#15549 = VERTEX_POINT ( 'NONE', #14728 ) ; +#15550 = AXIS2_PLACEMENT_3D ( 'NONE', #13153, #10779, #15391 ) ; +#15551 = ORIENTED_EDGE ( 'NONE', *, *, #3305, .T. ) ; +#15552 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#15553 = ADVANCED_FACE ( 'NONE', ( #3437 ), #3771, .F. ) ; +#15554 = LINE ( 'NONE', #12921, #4933 ) ; +#15555 = FACE_OUTER_BOUND ( 'NONE', #5049, .T. ) ; +#15556 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15557 = VERTEX_POINT ( 'NONE', #13276 ) ; +#15558 = CARTESIAN_POINT ( 'NONE', ( 7.617242544895638000, 3.124016485703915400, 9.033628917235416700 ) ) ; +#15559 = VERTEX_POINT ( 'NONE', #10920 ) ; +#15560 = ORIENTED_EDGE ( 'NONE', *, *, #1722, .T. ) ; +#15561 = EDGE_CURVE ( 'NONE', #13782, #7441, #12942, .T. ) ; +#15562 = VERTEX_POINT ( 'NONE', #14615 ) ; +#15563 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15564 = VERTEX_POINT ( 'NONE', #12113 ) ; +#15565 = VERTEX_POINT ( 'NONE', #8532 ) ; +#15566 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15567 = VECTOR ( 'NONE', #14955, 1000.000000000000000 ) ; +#15568 = LINE ( 'NONE', #2302, #3404 ) ; +#15569 = LINE ( 'NONE', #14852, #3035 ) ; +#15570 = EDGE_CURVE ( 'NONE', #9816, #2901, #12376, .T. ) ; +#15571 = ORIENTED_EDGE ( 'NONE', *, *, #1977, .T. ) ; +#15572 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15573 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.8000000000000000400, 2.049999999999999800 ) ) ; +#15574 = ORIENTED_EDGE ( 'NONE', *, *, #5723, .T. ) ; +#15575 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15576 = ORIENTED_EDGE ( 'NONE', *, *, #7304, .T. ) ; +#15577 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.927470528863115800E-015 ) ) ; +#15578 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#15579 = VERTEX_POINT ( 'NONE', #13448 ) ; +#15580 = VERTEX_POINT ( 'NONE', #6189 ) ; +#15581 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, 6.550000000000001600 ) ) ; +#15582 = ORIENTED_EDGE ( 'NONE', *, *, #2269, .T. ) ; +#15583 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#15584 = CARTESIAN_POINT ( 'NONE', ( 0.2100000000000122900, 1.637941840314110200, 3.649999999999999500 ) ) ; +#15585 = LINE ( 'NONE', #3598, #7657 ) ; +#15586 = VECTOR ( 'NONE', #9938, 1000.000000000000000 ) ; +#15587 = EDGE_CURVE ( 'NONE', #10684, #14106, #5554, .T. ) ; +#15588 = VECTOR ( 'NONE', #11509, 1000.000000000000000 ) ; +#15589 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.204669080539449300E-016 ) ) ; +#15590 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.0000000000000000000, 2.649999999999999500 ) ) ; +#15591 = ORIENTED_EDGE ( 'NONE', *, *, #8045, .T. ) ; +#15592 = EDGE_LOOP ( 'NONE', ( #7593, #13210, #5422, #7930 ) ) ; +#15593 = CARTESIAN_POINT ( 'NONE', ( -7.706658047799210800, 3.317567445684515000, 9.020998920361186900 ) ) ; +#15594 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, -2.449999999999998800 ) ) ; +#15595 = ORIENTED_EDGE ( 'NONE', *, *, #8725, .F. ) ; +#15596 = EDGE_CURVE ( 'NONE', #2048, #9816, #12768, .T. ) ; +#15597 = ORIENTED_EDGE ( 'NONE', *, *, #5509, .F. ) ; +#15598 = ORIENTED_EDGE ( 'NONE', *, *, #14974, .F. ) ; +#15599 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000000000, 0.0000000000000000000, 4.150000000000001200 ) ) ; +#15600 = CARTESIAN_POINT ( 'NONE', ( -9.000000000000037300, -0.0000000000000000000, -3.350000000000000500 ) ) ; +#15601 = VECTOR ( 'NONE', #13658, 1000.000000000000000 ) ; +#15602 = LINE ( 'NONE', #15342, #12578 ) ; +#15603 = VECTOR ( 'NONE', #7553, 1000.000000000000000 ) ; +#15604 = ORIENTED_EDGE ( 'NONE', *, *, #2432, .T. ) ; +#15605 = PLANE ( 'NONE', #7661 ) ; +#15606 = ORIENTED_EDGE ( 'NONE', *, *, #237, .F. ) ; +#15607 = PLANE ( 'NONE', #12978 ) ; +#15608 = EDGE_CURVE ( 'NONE', #4851, #12074, #13142, .T. ) ; +#15609 = CARTESIAN_POINT ( 'NONE', ( -3.479999999999999100, 0.8000000000000000400, -9.600000000000001400 ) ) ; +#15610 = EDGE_CURVE ( 'NONE', #8893, #9627, #4211, .T. ) ; +#15611 = EDGE_LOOP ( 'NONE', ( #1391, #12644, #13045, #7724 ) ) ; +#15612 = LINE ( 'NONE', #11452, #8432 ) ; +#15613 = LINE ( 'NONE', #6539, #4225 ) ; +#15614 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15615 = LINE ( 'NONE', #9190, #3454 ) ; +#15616 = LINE ( 'NONE', #6084, #15067 ) ; +#15617 = LINE ( 'NONE', #5332, #13163 ) ; +#15618 = LINE ( 'NONE', #6877, #8815 ) ; +#15619 = CARTESIAN_POINT ( 'NONE', ( 9.849999999999980100, 0.4000000000000000200, 7.150000000000002100 ) ) ; +#15620 = FILL_AREA_STYLE_COLOUR ( '', #1096 ) ; +#15621 = AXIS2_PLACEMENT_3D ( 'NONE', #6584, #10135, #2778 ) ; +#15622 = ORIENTED_EDGE ( 'NONE', *, *, #14679, .F. ) ; +#15623 = ORIENTED_EDGE ( 'NONE', *, *, #71, .T. ) ; +#15624 = CARTESIAN_POINT ( 'NONE', ( -5.940000000000000400, 0.8000000000000000400, -6.100000000000000500 ) ) ; +#15625 = ORIENTED_EDGE ( 'NONE', *, *, #5282, .T. ) ; +#15626 = AXIS2_PLACEMENT_3D ( 'NONE', #191, #2570, #3870 ) ; +#15627 = EDGE_LOOP ( 'NONE', ( #9119, #11964, #7976, #1289 ) ) ; +#15628 = CARTESIAN_POINT ( 'NONE', ( 0.6100000000000009900, 0.4000000000000000200, 2.549999999999999800 ) ) ; +#15629 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000009600, 0.4000000000000000200, 6.549999999999998000 ) ) ; +#15630 = MANIFOLD_SOLID_BREP ( 'LPattern1[6]', #4494 ) ; +#15631 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 2.050000000000001600 ) ) ; +#15632 = VECTOR ( 'NONE', #7598, 1000.000000000000000 ) ; +#15633 = LINE ( 'NONE', #5841, #812 ) ; +#15634 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.982541115402047700E-014 ) ) ; +#15635 = LINE ( 'NONE', #10985, #12208 ) ; +#15636 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, -1.674999999999998900 ) ) ; +#15637 = EDGE_CURVE ( 'NONE', #7422, #11701, #14865, .T. ) ; +#15638 = ADVANCED_FACE ( 'NONE', ( #9919 ), #6344, .T. ) ; +#15639 = COLOUR_RGB ( '',1.000000000000000000, 0.8117647058823529400, 0.5019607843137254800 ) ; +#15640 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15641 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.0000000000000000000, -0.9499999999999990700 ) ) ; +#15642 = ORIENTED_EDGE ( 'NONE', *, *, #5415, .T. ) ; +#15643 = CARTESIAN_POINT ( 'NONE', ( -7.565624327289688400, 3.349999999999999200, -2.859230338724652900 ) ) ; +#15644 = VERTEX_POINT ( 'NONE', #7567 ) ; +#15645 = EDGE_CURVE ( 'NONE', #5692, #12636, #1344, .T. ) ; +#15646 = CARTESIAN_POINT ( 'NONE', ( -7.647980000000000400, 3.049999999999999800, -2.872928932188135100 ) ) ; +#15647 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.913297951445007900E-016 ) ) ; +#15648 = VECTOR ( 'NONE', #7209, 1000.000000000000000 ) ; +#15649 = STYLED_ITEM ( 'NONE', ( #14351 ), #12618 ) ; +#15650 = CARTESIAN_POINT ( 'NONE', ( -9.450000000000020600, 0.8000000000000000400, 2.649999999999999500 ) ) ; +#15652 = CARTESIAN_POINT ( 'NONE', ( -8.149999999999874200, 0.3999999999999999700, 4.149999999999999500 ) ) ; +#15651 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15653 = VECTOR ( 'NONE', #405, 1000.000000000000000 ) ; +#15654 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#15655 = ORIENTED_EDGE ( 'NONE', *, *, #6310, .F. ) ; +#15656 = ORIENTED_EDGE ( 'NONE', *, *, #1247, .T. ) ; +#15657 = AXIS2_PLACEMENT_3D ( 'NONE', #3656, #12154, #13392 ) ; +#15658 = EDGE_CURVE ( 'NONE', #14561, #4047, #1151, .T. ) ; +#15659 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 1.806230589874906900, -2.449999999999998800 ) ) ; +#15660 = ORIENTED_EDGE ( 'NONE', *, *, #10609, .F. ) ; +#15661 = FACE_OUTER_BOUND ( 'NONE', #3776, .T. ) ; +#15662 = ORIENTED_EDGE ( 'NONE', *, *, #4760, .F. ) ; +#15663 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15664 = SURFACE_STYLE_USAGE ( .BOTH. , #7202 ) ; +#15665 = ORIENTED_EDGE ( 'NONE', *, *, #6691, .T. ) ; +#15666 = LINE ( 'NONE', #6947, #8683 ) ; +#15667 = CYLINDRICAL_SURFACE ( 'NONE', #7609, 0.2500000000000002200 ) ; +#15668 = CARTESIAN_POINT ( 'NONE', ( 7.596076976721356300, 3.139702065901544000, 9.018113802259296800 ) ) ; +#15669 = AXIS2_PLACEMENT_3D ( 'NONE', #8178, #809, #10718 ) ; +#15670 = ORIENTED_EDGE ( 'NONE', *, *, #14453, .T. ) ; +#15671 = CARTESIAN_POINT ( 'NONE', ( -7.850000000000007600, 0.7999999999999967100, 9.082928932188135500 ) ) ; +#15672 = ADVANCED_FACE ( 'NONE', ( #961 ), #9984, .T. ) ; +#15673 = VERTEX_POINT ( 'NONE', #199 ) ; +#15674 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.4000000000000000200, -0.9499999999999990700 ) ) ; +#15675 = ORIENTED_EDGE ( 'NONE', *, *, #8605, .F. ) ; +#15676 = VERTEX_POINT ( 'NONE', #14895 ) ; +#15677 = CARTESIAN_POINT ( 'NONE', ( 1.310000000000023800, 0.3999999999999999700, 4.049999999999999800 ) ) ; +#15678 = EDGE_LOOP ( 'NONE', ( #15591, #6029, #7941, #1001 ) ) ; +#15679 = LINE ( 'NONE', #13573, #11706 ) ; +#15680 = LINE ( 'NONE', #8732, #15325 ) ; +#15681 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15682 = EDGE_CURVE ( 'NONE', #101, #8392, #9735, .T. ) ; +#15683 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000041600, 1.806230589874906900, -0.3500000000000004800 ) ) ; +#15684 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 9.035018104045869500E-017 ) ) ; +#15685 = ORIENTED_EDGE ( 'NONE', *, *, #14136, .F. ) ; +#15686 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15687 = DIRECTION ( 'NONE', ( 1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15688 = ORIENTED_EDGE ( 'NONE', *, *, #2047, .T. ) ; +#15689 = EDGE_CURVE ( 'NONE', #8782, #11702, #11076, .T. ) ; +#15690 = VECTOR ( 'NONE', #10221, 1000.000000000000000 ) ; +#15691 = CARTESIAN_POINT ( 'NONE', ( -8.550000000000039800, 0.7999999999999999300, 3.550000000000001200 ) ) ; +#15692 = ORIENTED_EDGE ( 'NONE', *, *, #7978, .T. ) ; +#15693 = ORIENTED_EDGE ( 'NONE', *, *, #10750, .F. ) ; +#15694 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15695 = FACE_OUTER_BOUND ( 'NONE', #6670, .T. ) ; +#15696 = VECTOR ( 'NONE', #13893, 1000.000000000000000 ) ; +#15697 = CARTESIAN_POINT ( 'NONE', ( -8.179999999999999700, 0.8000000000000000400, -5.150000000000001200 ) ) ; +#15698 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 0.0000000000000000000, 0.1000000000000002600 ) ) ; +#15699 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15700 = CARTESIAN_POINT ( 'NONE', ( -7.609151875882607100, 3.104446300443229200, 9.074883614495201200 ) ) ; +#15701 = EDGE_CURVE ( 'NONE', #14758, #13509, #8418, .T. ) ; +#15702 = EDGE_CURVE ( 'NONE', #14939, #9298, #4009, .T. ) ; +#15703 = CARTESIAN_POINT ( 'NONE', ( 1.710000000000023900, 0.0000000000000000000, 4.750000000000000000 ) ) ; +#15704 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#15705 = CARTESIAN_POINT ( 'NONE', ( 8.149999999999874200, 1.637941840314110200, -0.3500000000000004800 ) ) ; +#15706 = VECTOR ( 'NONE', #13683, 1000.000000000000000 ) ; +#15707 = ORIENTED_EDGE ( 'NONE', *, *, #13677, .F. ) ; +#15708 = VECTOR ( 'NONE', #15704, 1000.000000000000000 ) ; +#15709 = FACE_OUTER_BOUND ( 'NONE', #1324, .T. ) ; +#15710 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.7999999999999999300, -3.350000000000000500 ) ) ; +#15711 = ADVANCED_FACE ( 'NONE', ( #6504 ), #6392, .T. ) ; +#15712 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#15713 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#15714 = ORIENTED_EDGE ( 'NONE', *, *, #12599, .T. ) ; +#15715 = CARTESIAN_POINT ( 'NONE', ( 9.450000000000041900, 0.4000000000000000200, -3.349999999999998800 ) ) ; +#15716 = VERTEX_POINT ( 'NONE', #6495 ) ; +#15717 = DIRECTION ( 'NONE', ( -1.982541115402048000E-014, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15718 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000039800, 0.7999999999999999300, 6.550000000000001600 ) ) ; +#15719 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#15720 = LINE ( 'NONE', #3799, #14237 ) ; +#15721 = ADVANCED_FACE ( 'NONE', ( #14482 ), #298, .F. ) ; +#15722 = EDGE_CURVE ( 'NONE', #14135, #9390, #11627, .T. ) ; +#15723 = VERTEX_POINT ( 'NONE', #7949 ) ; +#15724 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#15725 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#15726 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000013000, 0.0000000000000000000, 2.949999999999999700 ) ) ; +#15727 = ORIENTED_EDGE ( 'NONE', *, *, #8177, .T. ) ; +#15728 = LINE ( 'NONE', #7010, #13085 ) ; +#15729 = CARTESIAN_POINT ( 'NONE', ( 8.999999999999957400, 0.0000000000000000000, -3.174999999999998900 ) ) ; +#15730 = ORIENTED_EDGE ( 'NONE', *, *, #8863, .T. ) ; +#15731 = AXIS2_PLACEMENT_3D ( 'NONE', #4218, #1018, #238 ) ; +#15732 = VERTEX_POINT ( 'NONE', #5269 ) ; +#15733 = VECTOR ( 'NONE', #1742, 1000.000000000000000 ) ; +#15734 = VECTOR ( 'NONE', #13657, 1000.000000000000000 ) ; +#15735 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#15736 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.690901012716605700E-015, 2.683779753520844700E-032 ) ) ; +#15737 = EDGE_LOOP ( 'NONE', ( #7241, #407, #8628, #9557 ) ) ; +#15738 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#15739 = AXIS2_PLACEMENT_3D ( 'NONE', #5590, #13004, #5531 ) ; +#15740 = ORIENTED_EDGE ( 'NONE', *, *, #8019, .T. ) ; +#15741 = FACE_OUTER_BOUND ( 'NONE', #8001, .T. ) ; +#15742 = VERTEX_POINT ( 'NONE', #5475 ) ; +#15743 = ADVANCED_FACE ( 'NONE', ( #3245 ), #7991, .F. ) ; +#15744 = EDGE_LOOP ( 'NONE', ( #9794, #6635, #9235, #10703 ) ) ; +#15745 = EDGE_CURVE ( 'NONE', #3569, #2539, #13927, .T. ) ; +#15747 = CARTESIAN_POINT ( 'NONE', ( 2.410000000000024100, 0.0000000000000000000, 4.049999999999999800 ) ) ; +#15746 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000040900, 1.637941840314110200, -1.399999999999999700 ) ) ; +#15748 = EDGE_CURVE ( 'NONE', #14616, #2532, #8038, .T. ) ; +#15749 = FACE_OUTER_BOUND ( 'NONE', #8690, .T. ) ; +#15750 = FACE_OUTER_BOUND ( 'NONE', #15678, .T. ) ; +#15751 = PLANE ( 'NONE', #7970 ) ; +#15752 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15753 = VERTEX_POINT ( 'NONE', #6604 ) ; +#15754 = ORIENTED_EDGE ( 'NONE', *, *, #30, .F. ) ; +#15755 = EDGE_LOOP ( 'NONE', ( #6874, #8775, #12183, #12923 ) ) ; +#15756 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7502 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #357, #1417, #3981 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#15757 = ORIENTED_EDGE ( 'NONE', *, *, #12657, .F. ) ; +#15758 = DIRECTION ( 'NONE', ( 5.478074134663584300E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#15759 = VERTEX_POINT ( 'NONE', #6763 ) ; +#15760 = CARTESIAN_POINT ( 'NONE', ( 9.000000000000037300, 0.3999999999999999700, -3.350000000000000500 ) ) ; +#15761 = CARTESIAN_POINT ( 'NONE', ( 7.550000000000000700, 3.149999999999999500, 8.990000000000000200 ) ) ; +#15762 = CARTESIAN_POINT ( 'NONE', ( 8.550000000000004300, 0.4000000000000000200, 8.049999999999995400 ) ) ; +ENDSEC; +END-ISO-10303-21; diff --git a/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/License.txt b/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/License.txt new file mode 100644 index 0000000..9cb6384 --- /dev/null +++ b/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/License.txt @@ -0,0 +1,24 @@ +BY ACCESSING OR USING THESE SYMBOLS & FOOTPRINTS ("MODELS"), YOU ARE ACKNOWLEDGING THAT YOU HAVE READ, FULLY UNDERSTAND AND AGREE TO THESE TERMS AND CONDITIONS (the "Agreement"), WHICH CONSTITUTE A BINDING AGREEMENT BETWEEN YOU AND SNAPEDA, INC., ENTERED INTO ON THE DATE OF SUCH OCCURRENCE (the "Effective Date"). IF YOU ARE ACCESSING OR USING THESE FILES ON BEHALF OF AN ENTITY, YOU REPRESENT THAT YOU HAVE THE RIGHT, AUTHORITY, AND CAPACITY TO BIND SUCH ENTITY TO THIS AGREEMENT AND HEREBY DO SO. IF YOU DO NOT AGREE WITH ANY OF THE TERMS OR CONDITIONS OF THIS AGREEMENT, YOU MUST NOT USE ANY PART OF THESE MODELS. + +1. Design License + +You and your sub-licensees are hereby licensed to design, manufacture, use and distribute, circuit board designs and circuit boards formed by combining Models provided by SnapEDA with other circuit elements of your choosing. You may then convey such combinations under licensing terms of your choice.  + +Individual Models remain the intellectual property of SnapEDA, Inc. You shall not (and shall not permit or encourage any third party to) to do any of the following : + +(a) sell, assign, lease, lend, rent, issue, sublicense, make available, or otherwise distribute to any third party, or publicly perform, display or communicate, the Models (for example, by uploading Models to another website or software application);
 +(b) remove, alter, or conceal, any copyright, trademark, or other proprietary rights notice or legend displayed or contained in the individual Models. + +For further clarity, once integrated into a schematic design or PCB layout, Models may be modified freely for the purpose of designing a circuit board.  + + +2. Limitation of Liability + +IN NO EVENT WILL SNAPEDA OR OUR SUBSIDIARIES, AGENTS, SUCCESSORS, THIRD PARTY PROVIDERS, AND/OR ANY OF THE FOREGOING ENTITIES' RESPECTIVE DIRECTORS, OFFICERS, EMPLOYEES, AGENTS, REPRESENTATIVES, CUSTOMERS, SUPPLIERS, OR LICENSORS BE RESPONSIBLE OR LIABLE UNDER, OR OTHERWISE IN CONNECTION WITH THIS AGREEMENT, FOR: + +(a) ANY CONSEQUENTIAL, INDIRECT, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES; +(b) ANY LOSS OF PROFITS, LOSS OF BUSINESS, LOSS OF REVENUE, OR LOSS OF ANTICIPATED SAVINGS; +(c) ANY LOSS OF, OR DAMAGE TO, DATA, REPUTATION, OR GOODWILL; AND/OR +(d) THE COST OF PROCURING ANY SUBSTITUTE GOODS OR SERVICES. + +THE COMBINED AGGREGATE LIABILITY OF SNAPEDA AND ALL SNAPEDA CONTENT AFFILIATES UNDER, OR OTHERWISE IN CONNECTION WITH, THIS AGREEMENT SHALL NOT EXCEED THE TOTAL AMOUNT OF FEES RECEIVED BY SNAPEDA FROM YOU IN THE PREVIOUS TWELVE (12) MONTHS. THE FOREGOING EXCLUSIONS AND LIMITATIONS SHALL APPLY: (a) EVEN IF SNAPEDA OR ANY SNAPEDA CONTENT AFFILIATE HAS BEEN ADVISED, OR SHOULD HAVE BEEN AWARE, OF THE POSSIBILITY OF LOSSES, DAMAGES, OR COSTS; (b) EVEN IF ANY REMEDY IN THIS AGREEMENT FAILS OF ITS ESSENTIAL PURPOSE; AND (c) REGARDLESS OF THE THEORY OR BASIS OF LIABILITY (INCLUDING WITHOUT LIMITATION BREACH OF CONTRACT, TORT, NEGLIGENCE, AND STRICT LIABILITY). \ No newline at end of file diff --git a/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/MODULE_ESP32-C3-WROOM-02-H4.kicad_mod b/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/MODULE_ESP32-C3-WROOM-02-H4.kicad_mod new file mode 100644 index 0000000..38bb566 --- /dev/null +++ b/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/MODULE_ESP32-C3-WROOM-02-H4.kicad_mod @@ -0,0 +1,110 @@ + +(module MODULE_ESP32-C3-WROOM-02-H4 (layer F.Cu) (tedit 6269D75A) + (descr "") + (fp_text reference REF** (at -6.575 -11.085 0) (layer F.SilkS) + (effects (font (size 1.0 1.0) (thickness 0.15))) + ) + (fp_text value MODULE_ESP32-C3-WROOM-02-H4 (at 7.395 11.085 0) (layer F.Fab) + (effects (font (size 1.0 1.0) (thickness 0.15))) + ) + (pad 1 smd rect (at -8.75 -2.9) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 2 smd rect (at -8.75 -1.4) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 3 smd rect (at -8.75 0.1) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 4 smd rect (at -8.75 1.6) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 5 smd rect (at -8.75 3.1) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 6 smd rect (at -8.75 4.6) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 7 smd rect (at -8.75 6.1) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 8 smd rect (at -8.75 7.6) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 9 smd rect (at -8.75 9.1) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 10 smd rect (at 8.75 9.1) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 11 smd rect (at 8.75 7.6) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 12 smd rect (at 8.75 6.1) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 13 smd rect (at 8.75 4.6) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 14 smd rect (at 8.75 3.1) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 15 smd rect (at 8.75 1.6) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 16 smd rect (at 8.75 0.1) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 17 smd rect (at 8.75 -1.4) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 18 smd rect (at 8.75 -2.9) (size 1.5 0.9) (layers F.Cu F.Mask F.Paste)) + (pad 23 smd rect (at 0.96 3.3) (size 0.7 0.7) (layers F.Cu F.Mask F.Paste)) + (pad 24 smd rect (at 2.06 3.3) (size 0.7 0.7) (layers F.Cu F.Mask F.Paste)) + (pad 22 smd rect (at -0.14 3.3) (size 0.7 0.7) (layers F.Cu F.Mask F.Paste)) + (pad 19 smd rect (at -0.14 2.2) (size 0.7 0.7) (layers F.Cu F.Mask F.Paste)) + (pad 20 smd rect (at 0.96 2.2) (size 0.7 0.7) (layers F.Cu F.Mask F.Paste)) + (pad 21 smd rect (at 2.06 2.2) (size 0.7 0.7) (layers F.Cu F.Mask F.Paste)) + (pad 27 smd rect (at 2.06 4.4) (size 0.7 0.7) (layers F.Cu F.Mask F.Paste)) + (pad 26 smd rect (at 0.96 4.4) (size 0.7 0.7) (layers F.Cu F.Mask F.Paste)) + (pad 25 smd rect (at -0.14 4.4) (size 0.7 0.7) (layers F.Cu F.Mask F.Paste)) + (pad 29 thru_hole circle (at 1.51 2.2) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 32 thru_hole circle (at 2.06 2.75) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 37 thru_hole circle (at 2.06 3.85) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 28 thru_hole circle (at 0.41 2.2) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 34 thru_hole circle (at 1.51 3.3) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 31 thru_hole circle (at 0.96 2.75) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 30 thru_hole circle (at -0.14 2.75) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 33 thru_hole circle (at 0.41 3.3) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 39 thru_hole circle (at 1.51 4.4) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 38 thru_hole circle (at 0.41 4.4) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 36 thru_hole circle (at 0.96 3.85) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 35 thru_hole circle (at -0.14 3.85) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (fp_line (start -9.0 -10.0) (end -9.0 -4.0) (layer F.Fab) (width 0.127)) + (fp_line (start -9.0 -4.0) (end -9.0 10.0) (layer F.Fab) (width 0.127)) + (fp_line (start -9.0 10.0) (end 9.0 10.0) (layer F.Fab) (width 0.127)) + (fp_line (start 9.0 10.0) (end 9.0 -4.0) (layer F.Fab) (width 0.127)) + (fp_line (start 9.0 -4.0) (end 9.0 -10.0) (layer F.Fab) (width 0.127)) + (fp_line (start 9.0 -10.0) (end -9.0 -10.0) (layer F.Fab) (width 0.127)) + (fp_line (start 9.0 -4.0) (end -9.0 -4.0) (layer F.Fab) (width 0.127)) + (fp_line (start -9.0 10.0) (end -9.0 9.87) (layer F.SilkS) (width 0.127)) + (fp_line (start 9.0 10.0) (end 9.0 9.87) (layer F.SilkS) (width 0.127)) + (fp_line (start -9.0 -10.0) (end -9.0 -3.67) (layer F.SilkS) (width 0.127)) + (fp_line (start -9.0 10.0) (end 9.0 10.0) (layer F.SilkS) (width 0.127)) + (fp_line (start 9.0 -3.67) (end 9.0 -10.0) (layer F.SilkS) (width 0.127)) + (fp_line (start 9.0 -10.0) (end -9.0 -10.0) (layer F.SilkS) (width 0.127)) + (fp_line (start -9.75 -10.25) (end -9.75 10.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -9.75 10.25) (end 9.75 10.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.75 10.25) (end 9.75 -10.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.75 -10.25) (end -9.75 -10.25) (layer F.CrtYd) (width 0.05)) + (fp_circle (center -10.5 -2.9) (end -10.4 -2.9) (layer F.SilkS) (width 0.2)) + (fp_circle (center -10.5 -2.9) (end -10.4 -2.9) (layer F.Fab) (width 0.2)) + (zone (net 0) (net_name "") (layer F.Cu) (hatch full 0.508) + (connect_pads (clearance 0)) + (min_thickness 0.01) + (keepout (tracks not_allowed) (vias not_allowed) (pads not_allowed ) (copperpour not_allowed) (footprints allowed)) + (fill (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy -9.0 -10.0) + (xy 9.0 -10.0) + (xy 9.0 -4.0) + (xy -9.0 -4.0) + ) + ) + ) + (zone (net 0) (net_name "") (layers *.Cu) (hatch full 0.508) + (connect_pads (clearance 0)) + (min_thickness 0.01) + (keepout (tracks allowed) (vias not_allowed) (pads allowed ) (copperpour allowed) (footprints allowed)) + (fill (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy -9.0 -10.0) + (xy 9.0 -10.0) + (xy 9.0 -4.0) + (xy -9.0 -4.0) + ) + ) + ) + (zone (net 0) (net_name "") (layer B.Cu) (hatch full 0.508) + (connect_pads (clearance 0)) + (min_thickness 0.01) + (keepout (tracks not_allowed) (vias not_allowed) (pads not_allowed ) (copperpour not_allowed) (footprints allowed)) + (fill (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy -9.0 -10.0) + (xy 9.0 -10.0) + (xy 9.0 -4.0) + (xy -9.0 -4.0) + ) + ) + ) +) \ No newline at end of file diff --git a/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/how-to-import.htm b/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/how-to-import.htm new file mode 100644 index 0000000..19e484d --- /dev/null +++ b/Hardware/FabReader2/Library/ESP32-C3-WROOM-02-H4/how-to-import.htm @@ -0,0 +1 @@ + Page Redirection If you are not redirected automatically, follow this link to the import guide. \ No newline at end of file diff --git a/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/JST_S2B-PH-SM4-TB(LF)(SN).kicad_mod b/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/JST_S2B-PH-SM4-TB(LF)(SN).kicad_mod new file mode 100644 index 0000000..f5ac636 --- /dev/null +++ b/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/JST_S2B-PH-SM4-TB(LF)(SN).kicad_mod @@ -0,0 +1,33 @@ + +(module JST_S2B-PH-SM4-TB_LF__SN_ (layer F.Cu) (tedit 6269D647) + (descr "") + (fp_text reference REF** (at -0.69228 -3.184 0) (layer F.SilkS) + (effects (font (size 1.00218897638 1.00218897638) (thickness 0.15))) + ) + (fp_text value JST_S2B-PH-SM4-TB_LF__SN_ (at 12.17833 9.48143 0) (layer F.Fab) + (effects (font (size 1.00357480315 1.00357480315) (thickness 0.15))) + ) + (pad 2 smd rect (at 1.0 0.0 180.0) (size 1.0 3.5) (layers F.Cu F.Mask F.Paste)) + (pad 1 smd rect (at -1.0 0.0 180.0) (size 1.0 3.5) (layers F.Cu F.Mask F.Paste)) + (pad S2 smd rect (at 3.35 5.75 180.0) (size 1.5 3.4) (layers F.Cu F.Mask F.Paste)) + (pad S1 smd rect (at -3.35 5.75 180.0) (size 1.5 3.4) (layers F.Cu F.Mask F.Paste)) + (fp_line (start 3.95 -0.35) (end 1.9 -0.35) (layer F.SilkS) (width 0.127)) + (fp_line (start -1.9 -0.35) (end -3.95 -0.35) (layer F.SilkS) (width 0.127)) + (fp_line (start -3.95 -0.35) (end -3.95 3.65) (layer F.SilkS) (width 0.127)) + (fp_circle (center -2.15 -1.35) (end -2.05 -1.35) (layer F.SilkS) (width 0.3)) + (fp_line (start -2.2 7.25) (end 2.2 7.25) (layer F.SilkS) (width 0.127)) + (fp_line (start 3.95 3.65) (end 3.95 -0.35) (layer F.SilkS) (width 0.127)) + (fp_line (start 4.35 7.7) (end -4.35 7.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.35 7.7) (end -4.35 -0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.35 -0.6) (end -1.75 -0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -0.6) (end -1.75 -2.0) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -2.0) (end 1.75 -2.0) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -2.0) (end 1.75 -0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -0.6) (end 4.35 -0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.35 -0.6) (end 4.35 7.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.95 -0.35) (end 3.95 7.25) (layer F.Fab) (width 0.127)) + (fp_line (start 3.95 7.25) (end -3.95 7.25) (layer F.Fab) (width 0.127)) + (fp_line (start -3.95 7.25) (end -3.95 -0.35) (layer F.Fab) (width 0.127)) + (fp_line (start -3.95 -0.35) (end 3.95 -0.35) (layer F.Fab) (width 0.127)) + (fp_circle (center -2.15 -1.35) (end -2.05 -1.35) (layer F.Fab) (width 0.3)) +) \ No newline at end of file diff --git a/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/License.txt b/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/License.txt new file mode 100644 index 0000000..9cb6384 --- /dev/null +++ b/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/License.txt @@ -0,0 +1,24 @@ +BY ACCESSING OR USING THESE SYMBOLS & FOOTPRINTS ("MODELS"), YOU ARE ACKNOWLEDGING THAT YOU HAVE READ, FULLY UNDERSTAND AND AGREE TO THESE TERMS AND CONDITIONS (the "Agreement"), WHICH CONSTITUTE A BINDING AGREEMENT BETWEEN YOU AND SNAPEDA, INC., ENTERED INTO ON THE DATE OF SUCH OCCURRENCE (the "Effective Date"). IF YOU ARE ACCESSING OR USING THESE FILES ON BEHALF OF AN ENTITY, YOU REPRESENT THAT YOU HAVE THE RIGHT, AUTHORITY, AND CAPACITY TO BIND SUCH ENTITY TO THIS AGREEMENT AND HEREBY DO SO. IF YOU DO NOT AGREE WITH ANY OF THE TERMS OR CONDITIONS OF THIS AGREEMENT, YOU MUST NOT USE ANY PART OF THESE MODELS. + +1. Design License + +You and your sub-licensees are hereby licensed to design, manufacture, use and distribute, circuit board designs and circuit boards formed by combining Models provided by SnapEDA with other circuit elements of your choosing. You may then convey such combinations under licensing terms of your choice.  + +Individual Models remain the intellectual property of SnapEDA, Inc. You shall not (and shall not permit or encourage any third party to) to do any of the following : + +(a) sell, assign, lease, lend, rent, issue, sublicense, make available, or otherwise distribute to any third party, or publicly perform, display or communicate, the Models (for example, by uploading Models to another website or software application);
 +(b) remove, alter, or conceal, any copyright, trademark, or other proprietary rights notice or legend displayed or contained in the individual Models. + +For further clarity, once integrated into a schematic design or PCB layout, Models may be modified freely for the purpose of designing a circuit board.  + + +2. Limitation of Liability + +IN NO EVENT WILL SNAPEDA OR OUR SUBSIDIARIES, AGENTS, SUCCESSORS, THIRD PARTY PROVIDERS, AND/OR ANY OF THE FOREGOING ENTITIES' RESPECTIVE DIRECTORS, OFFICERS, EMPLOYEES, AGENTS, REPRESENTATIVES, CUSTOMERS, SUPPLIERS, OR LICENSORS BE RESPONSIBLE OR LIABLE UNDER, OR OTHERWISE IN CONNECTION WITH THIS AGREEMENT, FOR: + +(a) ANY CONSEQUENTIAL, INDIRECT, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES; +(b) ANY LOSS OF PROFITS, LOSS OF BUSINESS, LOSS OF REVENUE, OR LOSS OF ANTICIPATED SAVINGS; +(c) ANY LOSS OF, OR DAMAGE TO, DATA, REPUTATION, OR GOODWILL; AND/OR +(d) THE COST OF PROCURING ANY SUBSTITUTE GOODS OR SERVICES. + +THE COMBINED AGGREGATE LIABILITY OF SNAPEDA AND ALL SNAPEDA CONTENT AFFILIATES UNDER, OR OTHERWISE IN CONNECTION WITH, THIS AGREEMENT SHALL NOT EXCEED THE TOTAL AMOUNT OF FEES RECEIVED BY SNAPEDA FROM YOU IN THE PREVIOUS TWELVE (12) MONTHS. THE FOREGOING EXCLUSIONS AND LIMITATIONS SHALL APPLY: (a) EVEN IF SNAPEDA OR ANY SNAPEDA CONTENT AFFILIATE HAS BEEN ADVISED, OR SHOULD HAVE BEEN AWARE, OF THE POSSIBILITY OF LOSSES, DAMAGES, OR COSTS; (b) EVEN IF ANY REMEDY IN THIS AGREEMENT FAILS OF ITS ESSENTIAL PURPOSE; AND (c) REGARDLESS OF THE THEORY OR BASIS OF LIABILITY (INCLUDING WITHOUT LIMITATION BREACH OF CONTRACT, TORT, NEGLIGENCE, AND STRICT LIABILITY). \ No newline at end of file diff --git a/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/S2B-PH-SM4-TB_LF__SN_.kicad_sym b/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/S2B-PH-SM4-TB_LF__SN_.kicad_sym new file mode 100644 index 0000000..9fc9c37 --- /dev/null +++ b/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/S2B-PH-SM4-TB_LF__SN_.kicad_sym @@ -0,0 +1,47 @@ +(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor) + (symbol "S2B-PH-SM4-TB(LF)(SN)" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) + (property "Reference" "J" (id 0) (at -5.08 5.588 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Value" "S2B-PH-SM4-TB(LF)(SN)" (id 1) (at -5.08 -9.4234 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Footprint" "JST_S2B-PH-SM4-TB(LF)(SN)" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "Datasheet" "" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "STANDARD" "Manufacturer Recommendation" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "MANUFACTURER" "JST" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "ki_locked" "" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27))) + ) + (symbol "S2B-PH-SM4-TB(LF)(SN)_0_0" + (rectangle (start -5.08 -7.62) (end 5.08 5.08) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type background)) + ) + (pin passive line (at -7.62 2.54 0) (length 2.54) + (name "1" (effects (font (size 1.016 1.016)))) + (number "1" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -7.62 0 0) (length 2.54) + (name "2" (effects (font (size 1.016 1.016)))) + (number "2" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -7.62 -5.08 0) (length 2.54) + (name "SHIELD" (effects (font (size 1.016 1.016)))) + (number "S1" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -7.62 -5.08 0) (length 2.54) + (name "SHIELD" (effects (font (size 1.016 1.016)))) + (number "S2" (effects (font (size 1.016 1.016)))) + ) + ) + ) +) diff --git a/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/S2B-PH-SM4-TB_LF__SN_.lib b/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/S2B-PH-SM4-TB_LF__SN_.lib new file mode 100644 index 0000000..32e01d0 --- /dev/null +++ b/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/S2B-PH-SM4-TB_LF__SN_.lib @@ -0,0 +1,24 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +#(c) SnapEDA 2016 (snapeda.com) +#This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Design Exception 1.0 +# +# S2B-PH-SM4-TB(LF)(SN) +# +DEF S2B-PH-SM4-TB(LF)(SN) J 0 40 Y Y 1 L N +F0 "J" -200 220 50 H V L BNN +F1 "S2B-PH-SM4-TB(LF)(SN)" -200 -371 50 H V L BNN +F2 "JST_S2B-PH-SM4-TB(LF)(SN)" 0 0 50 H I L BNN +F3 "" 0 0 50 H I L BNN +F4 "Manufacturer Recommendation" 0 0 50 H I L BNN "STANDARD" +F5 "JST" 0 0 50 H I L BNN "MANUFACTURER" +DRAW +S -200 -300 200 200 0 0 6 f +X 1 1 -300 100 100 R 40 40 0 0 P +X 2 2 -300 0 100 R 40 40 0 0 P +X SHIELD S1 -300 -200 100 R 40 40 0 0 P +X SHIELD S2 -300 -200 100 R 40 40 0 0 P +ENDDRAW +ENDDEF +# +# End Library \ No newline at end of file diff --git a/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/S2B-PH-SM4-TB_LF__SN_.step b/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/S2B-PH-SM4-TB_LF__SN_.step new file mode 100644 index 0000000..0a370d3 --- /dev/null +++ b/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/S2B-PH-SM4-TB_LF__SN_.step @@ -0,0 +1,5201 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP214' ), + '1' ); +FILE_NAME ('S2B-PH-SM4-TB(LF)(SN).STEP', + '2018-11-06T09:01:19', + ( '' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2017', + '' ); +FILE_SCHEMA (( 'AUTOMOTIVE_DESIGN' )); +ENDSEC; + +DATA; +#1 = LINE ( 'NONE', #2925, #1834 ) ; +#2 = LINE ( 'NONE', #2675, #4616 ) ; +#3 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 0.1000000000002270000, -2.910707410969268500E-014 ) ) ; +#4 = CARTESIAN_POINT ( 'NONE', ( -1.299999999999790700, 4.200000000000181400, -6.000000000000040000 ) ) ; +#5 = VECTOR ( 'NONE', #2219, 1000.000000000000000 ) ; +#6 = ADVANCED_FACE ( 'NONE', ( #1153 ), #4508, .F. ) ; +#7 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000196500, 5.500000000000234500, -7.600000000000060000 ) ) ; +#8 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000247200, 2.263814136149733800E-013, -0.8000000000000229200 ) ) ; +#9 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000201400, 0.5000000000001660900, -6.600000000000013900 ) ) ; +#10 = ORIENTED_EDGE ( 'NONE', *, *, #4213, .F. ) ; +#11 = VERTEX_POINT ( 'NONE', #3273 ) ; +#12 = VERTEX_POINT ( 'NONE', #266 ) ; +#13 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246193567500E-017, 5.629900911267176600E-031 ) ) ; +#14 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000246300, 4.705000000000227400, -0.8000000000000611100 ) ) ; +#15 = VERTEX_POINT ( 'NONE', #5039 ) ; +#17 = VERTEX_POINT ( 'NONE', #2668 ) ; +#16 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193567500E-017, -5.629900911267176600E-031 ) ) ; +#18 = PLANE ( 'NONE', #4961 ) ; +#19 = EDGE_CURVE ( 'NONE', #1843, #497, #911, .T. ) ; +#20 = LINE ( 'NONE', #3877, #2921 ) ; +#21 = ORIENTED_EDGE ( 'NONE', *, *, #4977, .F. ) ; +#22 = ORIENTED_EDGE ( 'NONE', *, *, #5093, .T. ) ; +#23 = VERTEX_POINT ( 'NONE', #5152 ) ; +#24 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000230700, 0.4000000000002048600, -2.900000000000023900 ) ) ; +#25 = CARTESIAN_POINT ( 'NONE', ( -1.255905623633769300, 0.4059902634460178500, -8.182963883710494100 ) ) ; +#26 = CARTESIAN_POINT ( 'NONE', ( -3.750000000000207400, 4.705000000000227400, -5.415000000000082600 ) ) ; +#27 = AXIS2_PLACEMENT_3D ( 'NONE', #2074, #532, #919 ) ; +#28 = VECTOR ( 'NONE', #663, 1000.000000000000000 ) ; +#29 = ORIENTED_EDGE ( 'NONE', *, *, #2920, .T. ) ; +#30 = ORIENTED_EDGE ( 'NONE', *, *, #1713, .T. ) ; +#31 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246201352500E-017, -7.395763429917407300E-015 ) ) ; +#32 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33 = DIRECTION ( 'NONE', ( 0.2515875261947374000, 0.2347343575773418500, 0.9389374303093709400 ) ) ; +#34 = LINE ( 'NONE', #4933, #1207 ) ; +#35 = VECTOR ( 'NONE', #2265, 1000.000000000000000 ) ; +#36 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999751100, 2.367897544708341700E-013, 2.081668171172168500E-014 ) ) ; +#37 = AXIS2_PLACEMENT_3D ( 'NONE', #2149, #1740, #2128 ) ; +#38 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 0.1000000000002270000, -2.910707410969268500E-014 ) ) ; +#39 = ADVANCED_FACE ( 'NONE', ( #5041 ), #2373, .F. ) ; +#40 = ORIENTED_EDGE ( 'NONE', *, *, #4609, .F. ) ; +#41 = DIRECTION ( 'NONE', ( 5.374889246201352500E-017, 1.000000000000000000, -3.975140932691230600E-031 ) ) ; +#42 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#43 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000236100, 2.550000000000218300, -1.650000000000008800 ) ) ; +#44 = EDGE_CURVE ( 'NONE', #1495, #313, #3138, .T. ) ; +#45 = ORIENTED_EDGE ( 'NONE', *, *, #5026, .F. ) ; +#46 = VECTOR ( 'NONE', #222, 1000.000000000000000 ) ; +#47 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999748800, 2.193744990609829900E-013, 1.040834085586084300E-014 ) ) ; +#48 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 4.200000000000171600, -6.000000000000065700 ) ) ; +#49 = ORIENTED_EDGE ( 'NONE', *, *, #316, .T. ) ; +#50 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000207700, 3.420000000000228200, -5.415000000000077300 ) ) ; +#51 = LINE ( 'NONE', #2453, #1705 ) ; +#52 = EDGE_CURVE ( 'NONE', #4623, #3973, #797, .T. ) ; +#53 = EDGE_CURVE ( 'NONE', #1910, #4338, #3654, .T. ) ; +#54 = AXIS2_PLACEMENT_3D ( 'NONE', #3919, #3541, #4327 ) ; +#55 = VECTOR ( 'NONE', #800, 1000.000000000000000 ) ; +#56 = FACE_OUTER_BOUND ( 'NONE', #2804, .T. ) ; +#57 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.045209539935937300E-014, -1.000000000000000000 ) ) ; +#58 = VECTOR ( 'NONE', #844, 1000.000000000000000 ) ; +#59 = CIRCLE ( 'NONE', #3883, 0.6000000000000007500 ) ; +#60 = FACE_OUTER_BOUND ( 'NONE', #2642, .T. ) ; +#61 = VERTEX_POINT ( 'NONE', #3360 ) ; +#62 = EDGE_CURVE ( 'NONE', #3920, #3834, #1885, .T. ) ; +#63 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252000, 2.100000000000236300, -4.163336342344337000E-014 ) ) ; +#64 = VERTEX_POINT ( 'NONE', #5044 ) ; +#65 = PLANE ( 'NONE', #3989 ) ; +#66 = VECTOR ( 'NONE', #1806, 1000.000000000000000 ) ; +#67 = ORIENTED_EDGE ( 'NONE', *, *, #1905, .F. ) ; +#68 = ADVANCED_FACE ( 'NONE', ( #3212 ), #1426, .F. ) ; +#69 = LINE ( 'NONE', #3858, #3086 ) ; +#70 = VECTOR ( 'NONE', #3204, 1000.000000000000000 ) ; +#71 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4620 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1883, #4687, #3516 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#72 = ORIENTED_EDGE ( 'NONE', *, *, #617, .F. ) ; +#73 = DIRECTION ( 'NONE', ( 8.148998623433651900E-015, 1.047445008332814600E-014, 1.000000000000000000 ) ) ; +#74 = LINE ( 'NONE', #1598, #1103 ) ; +#75 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000248500, 4.200000000000232900, -0.2300000000000555800 ) ) ; +#76 = VECTOR ( 'NONE', #3191, 1000.000000000000000 ) ; +#77 = ORIENTED_EDGE ( 'NONE', *, *, #2630, .F. ) ; +#78 = ORIENTED_EDGE ( 'NONE', *, *, #988, .T. ) ; +#79 = EDGE_CURVE ( 'NONE', #3202, #1909, #4980, .T. ) ; +#80 = AXIS2_PLACEMENT_3D ( 'NONE', #1029, #4286, #3449 ) ; +#81 = EDGE_LOOP ( 'NONE', ( #3807, #3012, #1556, #1182 ) ) ; +#82 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000205800, 2.850000000000227500, -6.000000000000047100 ) ) ; +#83 = ORIENTED_EDGE ( 'NONE', *, *, #3147, .T. ) ; +#84 = ORIENTED_EDGE ( 'NONE', *, *, #2936, .T. ) ; +#85 = ORIENTED_EDGE ( 'NONE', *, *, #2796, .T. ) ; +#86 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#87 = EDGE_CURVE ( 'NONE', #820, #613, #1655, .T. ) ; +#88 = LINE ( 'NONE', #1813, #5133 ) ; +#89 = ORIENTED_EDGE ( 'NONE', *, *, #4258, .F. ) ; +#90 = ORIENTED_EDGE ( 'NONE', *, *, #1779, .F. ) ; +#91 = CARTESIAN_POINT ( 'NONE', ( 3.150000000000208600, 3.700000000000171200, -6.000000000000067500 ) ) ; +#92 = ORIENTED_EDGE ( 'NONE', *, *, #2474, .F. ) ; +#93 = LINE ( 'NONE', #2503, #1802 ) ; +#94 = ORIENTED_EDGE ( 'NONE', *, *, #227, .T. ) ; +#95 = ORIENTED_EDGE ( 'NONE', *, *, #1443, .T. ) ; +#96 = EDGE_CURVE ( 'NONE', #1785, #2036, #4853, .T. ) ; +#97 = ADVANCED_FACE ( 'NONE', ( #1950 ), #3815, .F. ) ; +#98 = PLANE ( 'NONE', #4767 ) ; +#99 = FACE_OUTER_BOUND ( 'NONE', #5063, .T. ) ; +#100 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000239600, 2.850000000000227500, -1.350000000000045400 ) ) ; +#101 = VECTOR ( 'NONE', #2826, 1000.000000000000000 ) ; +#102 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.037329745435896800E-014 ) ) ; +#103 = DIRECTION ( 'NONE', ( -7.329817504127328300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#104 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 1.552577510999242300E-013, -7.599999999999971200 ) ) ; +#105 = VERTEX_POINT ( 'NONE', #3007 ) ; +#106 = AXIS2_PLACEMENT_3D ( 'NONE', #3695, #4900, #2902 ) ; +#107 = AXIS2_PLACEMENT_3D ( 'NONE', #3688, #490, #2506 ) ; +#108 = EDGE_LOOP ( 'NONE', ( #4557, #2853, #3869, #4262 ) ) ; +#109 = ORIENTED_EDGE ( 'NONE', *, *, #3697, .F. ) ; +#110 = VECTOR ( 'NONE', #2924, 1000.000000000000000 ) ; +#111 = DIRECTION ( 'NONE', ( 7.589415207398840300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#112 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000189800, 0.2996192886329119800, -8.200380711367266400 ) ) ; +#113 = VECTOR ( 'NONE', #4642, 1000.000000000000000 ) ; +#114 = ORIENTED_EDGE ( 'NONE', *, *, #1911, .F. ) ; +#115 = ORIENTED_EDGE ( 'NONE', *, *, #655, .F. ) ; +#116 = LINE ( 'NONE', #2816, #607 ) ; +#117 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000242700, 2.950000000000227100, -0.9500000000000452500 ) ) ; +#118 = FACE_OUTER_BOUND ( 'NONE', #4225, .T. ) ; +#119 = CYLINDRICAL_SURFACE ( 'NONE', #5031, 0.5999999999999963100 ) ; +#120 = CARTESIAN_POINT ( 'NONE', ( -1.300000000000234100, 4.200000000000232900, -0.2300000000000306800 ) ) ; +#121 = EDGE_LOOP ( 'NONE', ( #1753, #4192, #4381, #3734 ) ) ; +#122 = EDGE_CURVE ( 'NONE', #824, #2619, #4914, .T. ) ; +#123 = AXIS2_PLACEMENT_3D ( 'NONE', #158, #537, #3678 ) ; +#124 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#125 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000238300, 2.800000000000216100, -1.900000000000011500 ) ) ; +#126 = FACE_OUTER_BOUND ( 'NONE', #1491, .T. ) ; +#127 = VERTEX_POINT ( 'NONE', #2598 ) ; +#128 = LINE ( 'NONE', #2626, #1901 ) ; +#129 = VECTOR ( 'NONE', #1237, 1000.000000000000000 ) ; +#130 = EDGE_LOOP ( 'NONE', ( #2951, #1614, #5074, #1964 ) ) ; +#131 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.001794390543951200E-014, 1.000000000000000000 ) ) ; +#132 = VERTEX_POINT ( 'NONE', #1789 ) ; +#133 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#134 = ORIENTED_EDGE ( 'NONE', *, *, #1749, .T. ) ; +#135 = VECTOR ( 'NONE', #891, 1000.000000000000000 ) ; +#136 = DIRECTION ( 'NONE', ( -5.325276234043798300E-015, -0.7071067811865513500, -0.7071067811865435800 ) ) ; +#137 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000189800, 0.3995241107910975100, -8.204742650103805000 ) ) ; +#138 = VECTOR ( 'NONE', #13, 1000.000000000000000 ) ; +#139 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#140 = AXIS2_PLACEMENT_3D ( 'NONE', #4590, #3328, #585 ) ; +#141 = ORIENTED_EDGE ( 'NONE', *, *, #848, .T. ) ; +#143 = EDGE_LOOP ( 'NONE', ( #4784, #3427, #3854, #3153 ) ) ; +#142 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#144 = ADVANCED_FACE ( 'NONE', ( #2133 ), #1390, .F. ) ; +#145 = EDGE_CURVE ( 'NONE', #3862, #1195, #667, .T. ) ; +#146 = DIRECTION ( 'NONE', ( -8.365839057930754400E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#147 = EDGE_LOOP ( 'NONE', ( #1937, #2267, #1579, #4871, #734, #1685, #517, #1139 ) ) ; +#148 = PLANE ( 'NONE', #3510 ) ; +#149 = PLANE ( 'NONE', #106 ) ; +#150 = LINE ( 'NONE', #873, #3426 ) ; +#151 = ORIENTED_EDGE ( 'NONE', *, *, #498, .F. ) ; +#152 = ORIENTED_EDGE ( 'NONE', *, *, #3199, .T. ) ; +#153 = PLANE ( 'NONE', #4681 ) ; +#154 = EDGE_CURVE ( 'NONE', #2737, #3486, #1088, .T. ) ; +#155 = VECTOR ( 'NONE', #2215, 1000.000000000000000 ) ; +#156 = ORIENTED_EDGE ( 'NONE', *, *, #4678, .T. ) ; +#157 = EDGE_LOOP ( 'NONE', ( #4257, #340, #3333, #438 ) ) ; +#158 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000212100, 4.705000000000227400, -5.415000000000077300 ) ) ; +#159 = EDGE_CURVE ( 'NONE', #61, #661, #2768, .T. ) ; +#160 = VECTOR ( 'NONE', #2969, 1000.000000000000000 ) ; +#161 = LINE ( 'NONE', #2345, #3495 ) ; +#162 = AXIS2_PLACEMENT_3D ( 'NONE', #759, #1138, #4345 ) ; +#163 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#164 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000244100, 2.267192902524094400E-013, -1.044399185738740000 ) ) ; +#165 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000244900, -0.09999999999979568300, -0.9443991857387211700 ) ) ; +#166 = EDGE_LOOP ( 'NONE', ( #3145, #1939, #2563, #4075 ) ) ; +#167 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5103 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2660, #3864, #1488 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#168 = ADVANCED_FACE ( 'NONE', ( #60 ), #714, .T. ) ; +#169 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#170 = ORIENTED_EDGE ( 'NONE', *, *, #4678, .F. ) ; +#171 = ORIENTED_EDGE ( 'NONE', *, *, #2414, .T. ) ; +#172 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930754400E-015 ) ) ; +#173 = ORIENTED_EDGE ( 'NONE', *, *, #4996, .T. ) ; +#174 = AXIS2_PLACEMENT_3D ( 'NONE', #3436, #1045, #3008 ) ; +#175 = PRESENTATION_STYLE_ASSIGNMENT (( #2397 ) ) ; +#176 = VECTOR ( 'NONE', #3085, 1000.000000000000000 ) ; +#177 = VECTOR ( 'NONE', #5144, 1000.000000000000000 ) ; +#178 = CARTESIAN_POINT ( 'NONE', ( 1.824999999999996000, 0.09000000000023490600, 0.0000000000000000000 ) ) ; +#179 = EDGE_CURVE ( 'NONE', #244, #1840, #3901, .T. ) ; +#180 = LINE ( 'NONE', #4643, #3076 ) ; +#181 = ORIENTED_EDGE ( 'NONE', *, *, #1564, .F. ) ; +#182 = ORIENTED_EDGE ( 'NONE', *, *, #1023, .F. ) ; +#183 = DIRECTION ( 'NONE', ( -1.713912268385937600E-015, 0.9701425001453319900, -0.2425356250363325500 ) ) ; +#184 = CARTESIAN_POINT ( 'NONE', ( -1.300000000000234100, 4.355000000000233100, -5.261941203825680100 ) ) ; +#185 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -3.978146840631718600E-016 ) ) ; +#186 = LINE ( 'NONE', #2214, #2467 ) ; +#187 = VERTEX_POINT ( 'NONE', #270 ) ; +#188 = EDGE_CURVE ( 'NONE', #290, #2671, #4727, .T. ) ; +#189 = VECTOR ( 'NONE', #2640, 1000.000000000000000 ) ; +#190 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.2425356250363325500, 0.9701425001453319900 ) ) ; +#191 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000242700, 2.257299396904369700E-013, -1.170808264217954700 ) ) ; +#192 = LINE ( 'NONE', #3759, #2963 ) ; +#193 = ORIENTED_EDGE ( 'NONE', *, *, #898, .F. ) ; +#194 = ORIENTED_EDGE ( 'NONE', *, *, #2361, .T. ) ; +#195 = VECTOR ( 'NONE', #3579, 1000.000000000000000 ) ; +#196 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252400, 1.298089913141610200, -0.08005065776186022500 ) ) ; +#197 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999784400, 2.825000000000173400, -4.250000000000032000 ) ) ; +#198 = DIRECTION ( 'NONE', ( -5.374889246201352500E-017, -1.000000000000000000, 3.975140932691230600E-031 ) ) ; +#199 = PLANE ( 'NONE', #2164 ) ; +#200 = ORIENTED_EDGE ( 'NONE', *, *, #5057, .T. ) ; +#201 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000186700, 0.2821715336867768300, -8.600000000000013900 ) ) ; +#202 = ORIENTED_EDGE ( 'NONE', *, *, #4932, .F. ) ; +#203 = ORIENTED_EDGE ( 'NONE', *, *, #2692, .F. ) ; +#204 = VERTEX_POINT ( 'NONE', #3095 ) ; +#205 = AXIS2_PLACEMENT_3D ( 'NONE', #4677, #279, #1457 ) ; +#206 = ORIENTED_EDGE ( 'NONE', *, *, #498, .T. ) ; +#207 = PLANE ( 'NONE', #1232 ) ; +#208 = VECTOR ( 'NONE', #894, 1000.000000000000000 ) ; +#209 = ORIENTED_EDGE ( 'NONE', *, *, #284, .T. ) ; +#210 = ORIENTED_EDGE ( 'NONE', *, *, #2331, .T. ) ; +#211 = VERTEX_POINT ( 'NONE', #1112 ) ; +#212 = EDGE_CURVE ( 'NONE', #4148, #1240, #3015, .T. ) ; +#213 = VECTOR ( 'NONE', #2631, 1000.000000000000000 ) ; +#214 = ORIENTED_EDGE ( 'NONE', *, *, #609, .T. ) ; +#215 = ORIENTED_EDGE ( 'NONE', *, *, #2673, .T. ) ; +#216 = ORIENTED_EDGE ( 'NONE', *, *, #671, .F. ) ; +#217 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999756500, 3.350000000000233700, -6.938893903907228400E-015 ) ) ; +#218 = VECTOR ( 'NONE', #3568, 1000.000000000000100 ) ; +#219 = ADVANCED_FACE ( 'NONE', ( #3829 ), #696, .F. ) ; +#220 = EDGE_CURVE ( 'NONE', #2342, #1791, #2955, .T. ) ; +#221 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#222 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#223 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249600E-017, 0.0000000000000000000 ) ) ; +#224 = FACE_OUTER_BOUND ( 'NONE', #2301, .T. ) ; +#225 = DIRECTION ( 'NONE', ( 5.417580331251512000E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#226 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#227 = EDGE_CURVE ( 'NONE', #760, #2493, #2329, .T. ) ; +#228 = ORIENTED_EDGE ( 'NONE', *, *, #4649, .T. ) ; +#229 = DIRECTION ( 'NONE', ( -5.188523723200786800E-015, 0.7071067811865436900, -0.7071067811865513500 ) ) ; +#230 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999997489700, 4.200000000000235500, -5.898059818321144100E-014 ) ) ; +#231 = EDGE_LOOP ( 'NONE', ( #1372, #447, #2698, #2520 ) ) ; +#232 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000208500, 5.500000000000186500, -6.000000000000085300 ) ) ; +#233 = ORIENTED_EDGE ( 'NONE', *, *, #898, .T. ) ; +#234 = LINE ( 'NONE', #982, #1074 ) ; +#235 = CARTESIAN_POINT ( 'NONE', ( 1.824999999999996000, 0.09000000000023490600, 0.0000000000000000000 ) ) ; +#236 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#237 = FACE_OUTER_BOUND ( 'NONE', #802, .T. ) ; +#238 = ORIENTED_EDGE ( 'NONE', *, *, #3437, .T. ) ; +#239 = DIRECTION ( 'NONE', ( -5.374889246201249000E-017, -1.000000000000000000, 3.913799179032202200E-031 ) ) ; +#240 = LINE ( 'NONE', #3211, #5169 ) ; +#241 = EDGE_CURVE ( 'NONE', #2599, #371, #4039, .T. ) ; +#242 = LINE ( 'NONE', #1572, #910 ) ; +#243 = LINE ( 'NONE', #2325, #4351 ) ; +#244 = VERTEX_POINT ( 'NONE', #676 ) ; +#245 = ADVANCED_FACE ( 'NONE', ( #2712 ), #1902, .F. ) ; +#246 = DIRECTION ( 'NONE', ( -5.110888613495321100E-015, 0.7071067811865406900, -0.7071067811865543500 ) ) ; +#247 = VECTOR ( 'NONE', #4195, 1000.000000000000000 ) ; +#248 = EDGE_CURVE ( 'NONE', #3630, #4093, #1767, .T. ) ; +#249 = DIRECTION ( 'NONE', ( -5.374889246200642500E-017, -1.000000000000000000, 3.622425849151773500E-031 ) ) ; +#250 = EDGE_CURVE ( 'NONE', #3676, #4148, #5174, .T. ) ; +#251 = LINE ( 'NONE', #4744, #806 ) ; +#252 = ORIENTED_EDGE ( 'NONE', *, *, #4456, .F. ) ; +#253 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000250700, -0.09999999999979571100, -0.2000000000000209400 ) ) ; +#254 = FILL_AREA_STYLE ('',( #5027 ) ) ; +#255 = VERTEX_POINT ( 'NONE', #1588 ) ; +#256 = LINE ( 'NONE', #522, #1429 ) ; +#257 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.110525862004698600E-014 ) ) ; +#258 = FACE_OUTER_BOUND ( 'NONE', #4698, .T. ) ; +#259 = EDGE_CURVE ( 'NONE', #643, #3546, #4487, .T. ) ; +#260 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000218800, 2.850000000000191900, -4.250000000000050600 ) ) ; +#261 = ORIENTED_EDGE ( 'NONE', *, *, #3323, .F. ) ; +#262 = LINE ( 'NONE', #38, #1315 ) ; +#263 = VERTEX_POINT ( 'NONE', #803 ) ; +#264 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.613943996491618200E-015, -3.613943996491682900E-015 ) ) ; +#265 = ORIENTED_EDGE ( 'NONE', *, *, #3356, .T. ) ; +#266 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000228500, 0.1000000000002044700, -2.900000000000020800 ) ) ; +#267 = ORIENTED_EDGE ( 'NONE', *, *, #2243, .T. ) ; +#268 = ORIENTED_EDGE ( 'NONE', *, *, #1691, .T. ) ; +#269 = ADVANCED_FACE ( 'NONE', ( #1415 ), #119, .T. ) ; +#270 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000218800, 2.825000000000193800, -4.250000000000045300 ) ) ; +#271 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 6.263144656875306400E-015 ) ) ; +#272 = AXIS2_PLACEMENT_3D ( 'NONE', #5178, #2354, #3952 ) ; +#273 = VECTOR ( 'NONE', #326, 1000.000000000000000 ) ; +#274 = ORIENTED_EDGE ( 'NONE', *, *, #250, .T. ) ; +#275 = ORIENTED_EDGE ( 'NONE', *, *, #865, .T. ) ; +#276 = LINE ( 'NONE', #1702, #2926 ) ; +#277 = ORIENTED_EDGE ( 'NONE', *, *, #4890, .F. ) ; +#278 = EDGE_CURVE ( 'NONE', #371, #3435, #243, .T. ) ; +#279 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#280 = FACE_OUTER_BOUND ( 'NONE', #2613, .T. ) ; +#281 = LINE ( 'NONE', #2099, #4525 ) ; +#282 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#283 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000237000, 2.565000000000209100, -1.865000000000042000 ) ) ; +#284 = EDGE_CURVE ( 'NONE', #1195, #2036, #3272, .T. ) ; +#285 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#286 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, 1.000000000000000000, -3.913799179032202200E-031 ) ) ; +#287 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002058400, 2.850000000000227500, -6.000000000000043500 ) ) ; +#288 = DIRECTION ( 'NONE', ( -2.639228045337950800E-016, -0.9990482215818578000, 0.04361938736533712400 ) ) ; +#289 = PLANE ( 'NONE', #1090 ) ; +#290 = VERTEX_POINT ( 'NONE', #3948 ) ; +#291 = EDGE_CURVE ( 'NONE', #1785, #2161, #2646, .T. ) ; +#292 = LINE ( 'NONE', #1371, #4774 ) ; +#293 = ORIENTED_EDGE ( 'NONE', *, *, #2989, .F. ) ; +#294 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000220500, 2.825000000000205800, -4.250000000000032900 ) ) ; +#295 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.04361938736533572900, -0.9990482215818578000 ) ) ; +#296 = ORIENTED_EDGE ( 'NONE', *, *, #278, .T. ) ; +#297 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000228400, 0.1000000000002044400, -2.900000000000023900 ) ) ; +#298 = CARTESIAN_POINT ( 'NONE', ( 0.8571796769726364200, 0.2821715336867770000, -8.600000000000010300 ) ) ; +#299 = LINE ( 'NONE', #1513, #4972 ) ; +#300 = LINE ( 'NONE', #620, #4973 ) ; +#301 = AXIS2_PLACEMENT_3D ( 'NONE', #3925, #2710, #4751 ) ; +#302 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000189800, -0.09999999999983200100, -8.182932956421137000 ) ) ; +#303 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#304 = SURFACE_STYLE_FILL_AREA ( #4665 ) ; +#305 = ORIENTED_EDGE ( 'NONE', *, *, #493, .T. ) ; +#306 = ORIENTED_EDGE ( 'NONE', *, *, #2464, .T. ) ; +#307 = EDGE_CURVE ( 'NONE', #1240, #12, #4033, .T. ) ; +#308 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193463900E-017, -5.739594400162916200E-031 ) ) ; +#309 = LINE ( 'NONE', #82, #862 ) ; +#310 = EDGE_LOOP ( 'NONE', ( #3723, #2188, #3335, #2760 ) ) ; +#311 = FACE_OUTER_BOUND ( 'NONE', #2494, .T. ) ; +#312 = DIRECTION ( 'NONE', ( -8.193010895375706900E-015, 6.637856049494207400E-017, -1.000000000000000000 ) ) ; +#313 = VERTEX_POINT ( 'NONE', #1959 ) ; +#314 = EDGE_CURVE ( 'NONE', #941, #2929, #1591, .T. ) ; +#315 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999748800, 5.500000000000234500, -3.816391647148975600E-014 ) ) ; +#316 = EDGE_CURVE ( 'NONE', #3682, #3226, #854, .T. ) ; +#317 = AXIS2_PLACEMENT_3D ( 'NONE', #4342, #3951, #4746 ) ; +#318 = DIRECTION ( 'NONE', ( -1.818200438212216100E-015, -0.9701425001453319900, -0.2425356250363325500 ) ) ; +#319 = ORIENTED_EDGE ( 'NONE', *, *, #4090, .T. ) ; +#320 = FACE_OUTER_BOUND ( 'NONE', #4293, .T. ) ; +#321 = ADVANCED_FACE ( 'NONE', ( #432 ), #3931, .F. ) ; +#322 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#323 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#324 = EDGE_LOOP ( 'NONE', ( #4130, #1107, #3715, #2134, #768, #4011, #109, #4664, #181, #4080, #3746, #4450, #5060, #5081, #3955, #2221 ) ) ; +#325 = EDGE_CURVE ( 'NONE', #3234, #5095, #4545, .T. ) ; +#326 = DIRECTION ( 'NONE', ( -8.365839057930752800E-015, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#327 = ADVANCED_FACE ( 'NONE', ( #3896, #3207, #550 ), #1257, .F. ) ; +#328 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000252500, 1.298089913141610200, -3.325942552863712200E-014 ) ) ; +#329 = ORIENTED_EDGE ( 'NONE', *, *, #1032, .T. ) ; +#330 = ORIENTED_EDGE ( 'NONE', *, *, #2763, .F. ) ; +#331 = ORIENTED_EDGE ( 'NONE', *, *, #1368, .T. ) ; +#332 = DIRECTION ( 'NONE', ( -5.374889246201249000E-017, -1.000000000000000000, 3.913799179032202200E-031 ) ) ; +#333 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#334 = LINE ( 'NONE', #1016, #4313 ) ; +#335 = EDGE_LOOP ( 'NONE', ( #2649, #193, #194, #2293 ) ) ; +#336 = ORIENTED_EDGE ( 'NONE', *, *, #4609, .T. ) ; +#337 = VERTEX_POINT ( 'NONE', #861 ) ; +#338 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999750700, 3.350000000000234600, -1.734723475976807100E-014 ) ) ; +#339 = VECTOR ( 'NONE', #1401, 1000.000000000000000 ) ; +#340 = ORIENTED_EDGE ( 'NONE', *, *, #5136, .F. ) ; +#341 = ORIENTED_EDGE ( 'NONE', *, *, #2872, .T. ) ; +#342 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000250700, -0.09999999999979571100, -0.2000000000000209400 ) ) ; +#343 = DIRECTION ( 'NONE', ( 0.9659258262890669800, -0.01128952818585347500, -0.2585727067211929800 ) ) ; +#344 = EDGE_CURVE ( 'NONE', #2150, #1832, #2403, .T. ) ; +#345 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3232 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5012, #633, #697 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#346 = LINE ( 'NONE', #468, #4018 ) ; +#347 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 2.100000000000236300, -4.163336342344337700E-014 ) ) ; +#348 = PLANE ( 'NONE', #4168 ) ; +#349 = VECTOR ( 'NONE', #3505, 1000.000000000000000 ) ; +#350 = EDGE_CURVE ( 'NONE', #2944, #1843, #4657, .T. ) ; +#351 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 7.281636885445248400E-015 ) ) ; +#352 = CARTESIAN_POINT ( 'NONE', ( 3.750000000000230000, 4.705000000000228300, -2.715000000000083300 ) ) ; +#353 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999751100, 2.550000000000226800, 2.081668171172168500E-014 ) ) ; +#354 = ADVANCED_FACE ( 'NONE', ( #2529 ), #4169, .T. ) ; +#355 = ORIENTED_EDGE ( 'NONE', *, *, #2948, .T. ) ; +#356 = EDGE_CURVE ( 'NONE', #4127, #4135, #2009, .T. ) ; +#357 = DIRECTION ( 'NONE', ( 6.133173666732127500E-015, 0.7071067811865479100, -0.7071067811865471300 ) ) ; +#358 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#359 = ORIENTED_EDGE ( 'NONE', *, *, #3706, .T. ) ; +#360 = AXIS2_PLACEMENT_3D ( 'NONE', #2019, #3219, #57 ) ; +#361 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000239600, 2.850000000000227500, -1.350000000000045400 ) ) ; +#362 = EDGE_LOOP ( 'NONE', ( #525, #1330, #4443, #4426 ) ) ; +#363 = VECTOR ( 'NONE', #1294, 1000.000000000000000 ) ; +#364 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#365 = LINE ( 'NONE', #1623, #2321 ) ; +#366 = EDGE_LOOP ( 'NONE', ( #1219, #3570, #3929, #89 ) ) ; +#367 = FACE_OUTER_BOUND ( 'NONE', #231, .T. ) ; +#368 = SURFACE_STYLE_USAGE ( .BOTH. , #3159 ) ; +#369 = LINE ( 'NONE', #1040, #4661 ) ; +#370 = VECTOR ( 'NONE', #3783, 1000.000000000000000 ) ; +#371 = VERTEX_POINT ( 'NONE', #4142 ) ; +#372 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000249000, 0.7000000000002343200, -0.1600000000000229600 ) ) ; +#373 = LINE ( 'NONE', #4209, #2415 ) ; +#374 = VERTEX_POINT ( 'NONE', #4548 ) ; +#375 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000230700, 2.100000000000236300, -2.900000000000021200 ) ) ; +#376 = FACE_OUTER_BOUND ( 'NONE', #1042, .T. ) ; +#377 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 2.350550309948573600E-013, -2.428612866367529900E-014 ) ) ; +#378 = LINE ( 'NONE', #3060, #2593 ) ; +#379 = VERTEX_POINT ( 'NONE', #1343 ) ; +#380 = LINE ( 'NONE', #5004, #3405 ) ; +#381 = ORIENTED_EDGE ( 'NONE', *, *, #4430, .T. ) ; +#382 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#383 = ADVANCED_FACE ( 'NONE', ( #56 ), #4581, .F. ) ; +#384 = EDGE_CURVE ( 'NONE', #883, #2991, #4155, .T. ) ; +#385 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002060600, 3.350000000000211500, -6.000000000000041700 ) ) ; +#386 = FACE_OUTER_BOUND ( 'NONE', #3549, .T. ) ; +#387 = LINE ( 'NONE', #990, #2603 ) ; +#388 = DIRECTION ( 'NONE', ( 5.325276234043768400E-015, 0.7071067811865555700, 0.7071067811865393600 ) ) ; +#389 = EDGE_CURVE ( 'NONE', #863, #2545, #3582, .T. ) ; +#390 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201231700E-017, 7.281636885445248400E-015 ) ) ; +#391 = ORIENTED_EDGE ( 'NONE', *, *, #1825, .T. ) ; +#392 = ORIENTED_EDGE ( 'NONE', *, *, #996, .T. ) ; +#393 = EDGE_LOOP ( 'NONE', ( #2546, #1455, #1622, #4507 ) ) ; +#394 = DIRECTION ( 'NONE', ( -5.374889246195752200E-017, 1.000000000000000000, -7.826578390373814900E-015 ) ) ; +#395 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193779500E-017, -5.507217403949667200E-031 ) ) ; +#396 = ORIENTED_EDGE ( 'NONE', *, *, #4497, .T. ) ; +#397 = ORIENTED_EDGE ( 'NONE', *, *, #4672, .T. ) ; +#398 = ORIENTED_EDGE ( 'NONE', *, *, #665, .F. ) ; +#399 = AXIS2_PLACEMENT_3D ( 'NONE', #2931, #4979, #4941 ) ; +#400 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 1.298089913141610200, -3.660576115180942800E-014 ) ) ; +#401 = CARTESIAN_POINT ( 'NONE', ( 1.142820323027793600, 2.950000000000227100, -0.9500000000000444800 ) ) ; +#402 = VECTOR ( 'NONE', #86, 1000.000000000000000 ) ; +#403 = ORIENTED_EDGE ( 'NONE', *, *, #419, .F. ) ; +#404 = ORIENTED_EDGE ( 'NONE', *, *, #737, .F. ) ; +#405 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002109900, 5.000000000000188300, -5.250000000000049700 ) ) ; +#406 = VERTEX_POINT ( 'NONE', #2119 ) ; +#407 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252400, 1.710477983563044100, -0.08005065776186022500 ) ) ; +#408 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999762200, 3.100000000000217200, -1.650000000000020100 ) ) ; +#409 = VECTOR ( 'NONE', #3290, 1000.000000000000000 ) ; +#410 = ORIENTED_EDGE ( 'NONE', *, *, #4306, .T. ) ; +#411 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000247200, 2.550000000000234700, 0.0000000000000000000 ) ) ; +#412 = VECTOR ( 'NONE', #1205, 1000.000000000000000 ) ; +#413 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.045209539935937300E-014, -1.000000000000000000 ) ) ; +#414 = EDGE_CURVE ( 'NONE', #2882, #3164, #5101, .T. ) ; +#415 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999795600, 1.637735900447050800E-013, -5.999999999999983100 ) ) ; +#416 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#417 = PLANE ( 'NONE', #4360 ) ; +#418 = EDGE_CURVE ( 'NONE', #3261, #4938, #300, .T. ) ; +#419 = EDGE_CURVE ( 'NONE', #637, #4860, #1473, .T. ) ; +#420 = VERTEX_POINT ( 'NONE', #2207 ) ; +#421 = CARTESIAN_POINT ( 'NONE', ( -1.299999999999781100, 4.200000000000190200, -4.250000000000038200 ) ) ; +#422 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002015100, 0.5696839565364602000, -6.600000000000039600 ) ) ; +#423 = LINE ( 'NONE', #3752, #2883 ) ; +#424 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 8.365839057930752800E-015 ) ) ; +#425 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000202300, 2.750000000000227400, -6.500000000000048000 ) ) ; +#426 = ORIENTED_EDGE ( 'NONE', *, *, #79, .T. ) ; +#427 = EDGE_CURVE ( 'NONE', #4100, #587, #4836, .T. ) ; +#428 = LINE ( 'NONE', #1694, #849 ) ; +#429 = DIRECTION ( 'NONE', ( 1.029231937005643000E-014, -7.826578390373813300E-015, -1.000000000000000000 ) ) ; +#430 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.001794390543951200E-014, 1.000000000000000000 ) ) ; +#431 = LINE ( 'NONE', #1569, #2328 ) ; +#432 = FACE_OUTER_BOUND ( 'NONE', #1484, .T. ) ; +#433 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000241800, -0.09999999999979566900, -1.270808264217950100 ) ) ; +#434 = ADVANCED_FACE ( 'NONE', ( #224 ), #5029, .T. ) ; +#435 = CARTESIAN_POINT ( 'NONE', ( -1.249999999999792800, 3.350000000000193700, -4.250000000000032900 ) ) ; +#436 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.067853519814894600E-014, 1.000000000000000000 ) ) ; +#437 = LINE ( 'NONE', #711, #3462 ) ; +#438 = ORIENTED_EDGE ( 'NONE', *, *, #3129, .T. ) ; +#439 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000242900, 2.850000000000227500, -0.9500000000000445900 ) ) ; +#440 = AXIS2_PLACEMENT_3D ( 'NONE', #3245, #3648, #1607 ) ; +#441 = ORIENTED_EDGE ( 'NONE', *, *, #2756, .T. ) ; +#442 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000236100, 3.100000000000214100, -1.900000000000053600 ) ) ; +#443 = DIRECTION ( 'NONE', ( 1.000000000000000000, -7.627114208151728300E-029, -7.281636885445248400E-015 ) ) ; +#444 = VECTOR ( 'NONE', #395, 1000.000000000000000 ) ; +#445 = ORIENTED_EDGE ( 'NONE', *, *, #848, .F. ) ; +#446 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000212100, 4.705000000000227400, -5.415000000000077300 ) ) ; +#447 = ORIENTED_EDGE ( 'NONE', *, *, #3129, .F. ) ; +#448 = CARTESIAN_POINT ( 'NONE', ( -1.085804998649242600, 3.196803978152532800, -0.7372159126092616700 ) ) ; +#449 = LINE ( 'NONE', #1246, #2485 ) ; +#450 = AXIS2_PLACEMENT_3D ( 'NONE', #5038, #2885, #4232 ) ; +#451 = VECTOR ( 'NONE', #1714, 1000.000000000000000 ) ; +#452 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000246600, 5.500000000000234500, -0.8000000000000333500 ) ) ; +#453 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 2.550000000000229900, -4.857225732735059900E-014 ) ) ; +#454 = ORIENTED_EDGE ( 'NONE', *, *, #4781, .F. ) ; +#455 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000251100, 4.355000000000233100, -0.07500000000007335500 ) ) ; +#456 = DIRECTION ( 'NONE', ( 6.133173666733495400E-015, 0.7071067811865474600, -0.7071067811865476800 ) ) ; +#457 = CARTESIAN_POINT ( 'NONE', ( 3.750000000000230000, 4.705000000000228300, -2.715000000000083300 ) ) ; +#458 = VECTOR ( 'NONE', #793, 1000.000000000000000 ) ; +#459 = EDGE_CURVE ( 'NONE', #1102, #5050, #3636, .T. ) ; +#460 = PLANE ( 'NONE', #3551 ) ; +#461 = ORIENTED_EDGE ( 'NONE', *, *, #4680, .F. ) ; +#462 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999755000, 0.4000000000002275600, -0.7999999999999812800 ) ) ; +#463 = CARTESIAN_POINT ( 'NONE', ( -3.750000000000207400, 4.705000000000227400, -5.415000000000082600 ) ) ; +#464 = ORIENTED_EDGE ( 'NONE', *, *, #1453, .F. ) ; +#465 = ORIENTED_EDGE ( 'NONE', *, *, #2719, .T. ) ; +#466 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#467 = EDGE_CURVE ( 'NONE', #3128, #4453, #2752, .T. ) ; +#468 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000251100, -0.09999999999979573800, -0.2000000000000242700 ) ) ; +#469 = ADVANCED_FACE ( 'NONE', ( #4201 ), #1511, .F. ) ; +#470 = VECTOR ( 'NONE', #1699, 1000.000000000000000 ) ; +#471 = EDGE_LOOP ( 'NONE', ( #949, #561, #2531, #3762 ) ) ; +#472 = ORIENTED_EDGE ( 'NONE', *, *, #2979, .F. ) ; +#473 = CARTESIAN_POINT ( 'NONE', ( 0.8571796769726366400, 0.2821715336867768300, -8.600000000000010300 ) ) ; +#474 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000206800, 3.700000000000172900, -6.000000000000060400 ) ) ; +#475 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002508400, 5.160000000000229300, -5.619614305715791100E-014 ) ) ; +#476 = VERTEX_POINT ( 'NONE', #755 ) ; +#477 = ORIENTED_EDGE ( 'NONE', *, *, #2897, .F. ) ; +#478 = ORIENTED_EDGE ( 'NONE', *, *, #2020, .T. ) ; +#479 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000234100, 4.355000000000233100, -2.000000000000061700 ) ) ; +#480 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#481 = LINE ( 'NONE', #886, #5020 ) ; +#482 = CARTESIAN_POINT ( 'NONE', ( 3.750000000000207400, 3.420000000000228200, -5.415000000000082600 ) ) ; +#483 = VECTOR ( 'NONE', #3894, 1000.000000000000000 ) ; +#484 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 1.298089913141610200, -3.325942552863712200E-014 ) ) ; +#485 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000246300, 2.550000000000228500, -0.8000000000000613300 ) ) ; +#486 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#487 = EDGE_CURVE ( 'NONE', #4887, #3343, #1692, .T. ) ; +#488 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.245087481933969600E-029, -8.374527125405327500E-015 ) ) ; +#489 = ADVANCED_FACE ( 'NONE', ( #3121 ), #2334, .F. ) ; +#490 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.850642864397063100E-016, 7.409566345325548800E-015 ) ) ; +#491 = ORIENTED_EDGE ( 'NONE', *, *, #1980, .T. ) ; +#492 = FACE_OUTER_BOUND ( 'NONE', #1118, .T. ) ; +#493 = EDGE_CURVE ( 'NONE', #4838, #630, #2627, .T. ) ; +#494 = AXIS2_PLACEMENT_3D ( 'NONE', #3442, #1056, #2656 ) ; +#495 = EDGE_LOOP ( 'NONE', ( #3769, #1367, #680, #995 ) ) ; +#496 = VERTEX_POINT ( 'NONE', #1908 ) ; +#497 = VERTEX_POINT ( 'NONE', #789 ) ; +#498 = EDGE_CURVE ( 'NONE', #3423, #1495, #5149, .T. ) ; +#499 = DIRECTION ( 'NONE', ( -2.020986811672233200E-015, -0.9586398840728169700, 0.2846218063762091000 ) ) ; +#500 = VERTEX_POINT ( 'NONE', #719 ) ; +#501 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000206700, 2.750000000000227400, -5.900000000000047400 ) ) ; +#502 = VECTOR ( 'NONE', #5006, 1000.000000000000000 ) ; +#503 = ORIENTED_EDGE ( 'NONE', *, *, #4419, .T. ) ; +#504 = FACE_OUTER_BOUND ( 'NONE', #2571, .T. ) ; +#505 = LINE ( 'NONE', #2109, #4734 ) ; +#506 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002188200, 3.350000000000211500, -4.250000000000041700 ) ) ; +#507 = AXIS2_PLACEMENT_3D ( 'NONE', #1173, #358, #2687 ) ; +#508 = LINE ( 'NONE', #1430, #868 ) ; +#509 = ORIENTED_EDGE ( 'NONE', *, *, #2596, .T. ) ; +#510 = ORIENTED_EDGE ( 'NONE', *, *, #1124, .F. ) ; +#511 = FACE_OUTER_BOUND ( 'NONE', #1722, .T. ) ; +#512 = LINE ( 'NONE', #1366, #1970 ) ; +#513 = ADVANCED_FACE ( 'NONE', ( #5024 ), #348, .F. ) ; +#514 = EDGE_CURVE ( 'NONE', #496, #5017, #1512, .T. ) ; +#515 = ORIENTED_EDGE ( 'NONE', *, *, #2447, .T. ) ; +#516 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002060600, 3.350000000000211500, -6.000000000000041700 ) ) ; +#517 = ORIENTED_EDGE ( 'NONE', *, *, #2118, .F. ) ; +#518 = ORIENTED_EDGE ( 'NONE', *, *, #4490, .F. ) ; +#519 = EDGE_CURVE ( 'NONE', #2577, #4100, #2569, .T. ) ; +#520 = PLANE ( 'NONE', #3038 ) ; +#521 = ORIENTED_EDGE ( 'NONE', *, *, #2447, .F. ) ; +#522 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000242700, 2.257299396904369700E-013, -1.170808264217954700 ) ) ; +#523 = ORIENTED_EDGE ( 'NONE', *, *, #3157, .F. ) ; +#524 = VECTOR ( 'NONE', #2755, 1000.000000000000000 ) ; +#525 = ORIENTED_EDGE ( 'NONE', *, *, #777, .T. ) ; +#526 = ORIENTED_EDGE ( 'NONE', *, *, #2146, .T. ) ; +#527 = VERTEX_POINT ( 'NONE', #4729 ) ; +#528 = EDGE_CURVE ( 'NONE', #935, #4599, #4897, .T. ) ; +#529 = LINE ( 'NONE', #4524, #4578 ) ; +#530 = ORIENTED_EDGE ( 'NONE', *, *, #2622, .T. ) ; +#531 = PLANE ( 'NONE', #3440 ) ; +#532 = DIRECTION ( 'NONE', ( 8.365839057930752800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#533 = LINE ( 'NONE', #4682, #1637 ) ; +#534 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193567500E-017, -5.629900911267176600E-031 ) ) ; +#535 = DIRECTION ( 'NONE', ( 6.505213034913291700E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#536 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.047445008332814600E-014, 1.000000000000000000 ) ) ; +#537 = DIRECTION ( 'NONE', ( -7.395763429917407300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#538 = EDGE_LOOP ( 'NONE', ( #3556, #359, #2694, #1977, #215, #4621, #4064 ) ) ; +#539 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000244100, 2.267192902524094400E-013, -1.044399185738740000 ) ) ; +#540 = LINE ( 'NONE', #3784, #1142 ) ; +#541 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000206100, 2.850000000000227500, -6.000000000000047100 ) ) ; +#542 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002060600, 2.850000000000227500, -6.000000000000043500 ) ) ; +#543 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000201400, 0.5696839565364602000, -6.600000000000043200 ) ) ; +#544 = DIRECTION ( 'NONE', ( 7.228014483236687300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#545 = EDGE_CURVE ( 'NONE', #1041, #5001, #776, .T. ) ; +#546 = ORIENTED_EDGE ( 'NONE', *, *, #1506, .T. ) ; +#547 = LINE ( 'NONE', #2792, #1345 ) ; +#548 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000201400, -0.02974497641265105500, -6.573828367580842000 ) ) ; +#549 = VECTOR ( 'NONE', #3557, 1000.000000000000000 ) ; +#550 = FACE_BOUND ( 'NONE', #1377, .T. ) ; +#551 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000228400, 1.549137581881678500E-013, -7.599999999999971200 ) ) ; +#552 = EDGE_CURVE ( 'NONE', #4496, #2127, #1458, .T. ) ; +#553 = DIRECTION ( 'NONE', ( -6.938893903907228400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#554 = ORIENTED_EDGE ( 'NONE', *, *, #159, .T. ) ; +#555 = ADVANCED_FACE ( 'NONE', ( #4586 ), #460, .T. ) ; +#556 = DIRECTION ( 'NONE', ( 8.673617379884035500E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#557 = EDGE_CURVE ( 'NONE', #3353, #23, #3949, .T. ) ; +#558 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#559 = LINE ( 'NONE', #5013, #2652 ) ; +#560 = ORIENTED_EDGE ( 'NONE', *, *, #1123, .T. ) ; +#561 = ORIENTED_EDGE ( 'NONE', *, *, #5158, .F. ) ; +#562 = DIRECTION ( 'NONE', ( 0.9659258262890714200, -5.191744336349175600E-017, 0.2588190451025092500 ) ) ; +#563 = VECTOR ( 'NONE', #878, 1000.000000000000000 ) ; +#564 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#565 = ORIENTED_EDGE ( 'NONE', *, *, #2957, .T. ) ; +#566 = PLANE ( 'NONE', #2749 ) ; +#567 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999997494100, 5.000000000000234500, -0.1600000000000481300 ) ) ; +#568 = ORIENTED_EDGE ( 'NONE', *, *, #1369, .F. ) ; +#569 = VECTOR ( 'NONE', #466, 1000.000000000000000 ) ; +#570 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, 1.037329745435896800E-014, 1.000000000000000000 ) ) ; +#571 = AXIS2_PLACEMENT_3D ( 'NONE', #4391, #2303, #1140 ) ; +#572 = ORIENTED_EDGE ( 'NONE', *, *, #3046, .F. ) ; +#573 = LINE ( 'NONE', #2244, #792 ) ; +#574 = EDGE_CURVE ( 'NONE', #4753, #3445, #2878, .T. ) ; +#575 = ORIENTED_EDGE ( 'NONE', *, *, #4830, .F. ) ; +#576 = DIRECTION ( 'NONE', ( 7.274646834741446700E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#577 = ORIENTED_EDGE ( 'NONE', *, *, #938, .T. ) ; +#578 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201231700E-017, -7.281636885445248400E-015 ) ) ; +#579 = ORIENTED_EDGE ( 'NONE', *, *, #3518, .F. ) ; +#580 = LINE ( 'NONE', #482, #470 ) ; +#581 = ORIENTED_EDGE ( 'NONE', *, *, #3165, .T. ) ; +#582 = ORIENTED_EDGE ( 'NONE', *, *, #3853, .F. ) ; +#583 = EDGE_CURVE ( 'NONE', #3554, #204, #716, .T. ) ; +#584 = EDGE_CURVE ( 'NONE', #4113, #476, #1011, .T. ) ; +#585 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.1999877633493794300, 0.9797983948295243600 ) ) ; +#586 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999763600, 2.550000000000216100, -1.900000000000014600 ) ) ; +#587 = VERTEX_POINT ( 'NONE', #4837 ) ; +#588 = ORIENTED_EDGE ( 'NONE', *, *, #2254, .T. ) ; +#589 = EDGE_CURVE ( 'NONE', #2356, #255, #1133, .T. ) ; +#590 = LINE ( 'NONE', #1288, #2114 ) ; +#591 = FACE_OUTER_BOUND ( 'NONE', #3701, .T. ) ; +#592 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 5.500000000000227400, -0.8000000000000367900 ) ) ; +#593 = CARTESIAN_POINT ( 'NONE', ( -0.8571796769726366400, 0.2821715336867768300, -8.600000000000010300 ) ) ; +#594 = AXIS2_PLACEMENT_3D ( 'NONE', #3224, #2431, #2388 ) ; +#595 = PLANE ( 'NONE', #37 ) ; +#596 = ORIENTED_EDGE ( 'NONE', *, *, #4791, .T. ) ; +#597 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999997871600, 5.000000000000234500, -5.250000000000046200 ) ) ; +#598 = ORIENTED_EDGE ( 'NONE', *, *, #3123, .T. ) ; +#599 = PLANE ( 'NONE', #2820 ) ; +#600 = EDGE_CURVE ( 'NONE', #3293, #496, #2309, .T. ) ; +#601 = ORIENTED_EDGE ( 'NONE', *, *, #4213, .T. ) ; +#602 = VECTOR ( 'NONE', #3561, 1000.000000000000000 ) ; +#603 = LINE ( 'NONE', #2287, #3265 ) ; +#604 = DIRECTION ( 'NONE', ( -5.188523723200819200E-015, 0.7071067811865393600, -0.7071067811865556800 ) ) ; +#605 = CARTESIAN_POINT ( 'NONE', ( 1.142820323027737200, 0.2821715336867768300, -8.600000000000013900 ) ) ; +#606 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999756800, 5.500000000000234500, -0.7999999999999986000 ) ) ; +#607 = VECTOR ( 'NONE', #3214, 1000.000000000000000 ) ; +#608 = CARTESIAN_POINT ( 'NONE', ( 0.8571796769726917100, 3.250000000000227400, -0.9500000000000423700 ) ) ; +#609 = EDGE_CURVE ( 'NONE', #527, #2100, #2053, .T. ) ; +#610 = VECTOR ( 'NONE', #4251, 1000.000000000000000 ) ; +#611 = VECTOR ( 'NONE', #998, 1000.000000000000000 ) ; +#612 = ORIENTED_EDGE ( 'NONE', *, *, #5093, .F. ) ; +#613 = VERTEX_POINT ( 'NONE', #4445 ) ; +#614 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#615 = LINE ( 'NONE', #958, #1957 ) ; +#616 = ORIENTED_EDGE ( 'NONE', *, *, #880, .F. ) ; +#617 = EDGE_CURVE ( 'NONE', #1052, #3808, #4329, .T. ) ; +#618 = VECTOR ( 'NONE', #4797, 1000.000000000000000 ) ; +#619 = AXIS2_PLACEMENT_3D ( 'NONE', #4839, #1990, #424 ) ; +#620 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 4.200000000000171600, -6.000000000000040000 ) ) ; +#621 = VECTOR ( 'NONE', #1216, 1000.000000000000000 ) ; +#622 = LINE ( 'NONE', #4759, #925 ) ; +#623 = EDGE_LOOP ( 'NONE', ( #3665, #1374, #2197, #1733 ) ) ; +#624 = ORIENTED_EDGE ( 'NONE', *, *, #2187, .T. ) ; +#625 = VECTOR ( 'NONE', #3641, 1000.000000000000000 ) ; +#626 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000251100, -0.09999999999979573800, -0.2000000000000242700 ) ) ; +#627 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999750600, 5.500000000000234500, -3.122502256758252800E-014 ) ) ; +#628 = LINE ( 'NONE', #4585, #2725 ) ; +#629 = PLANE ( 'NONE', #4969 ) ; +#630 = VERTEX_POINT ( 'NONE', #3622 ) ; +#631 = ADVANCED_FACE ( 'NONE', ( #3813 ), #2032, .F. ) ; +#632 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252000, 2.100000000000227500, -0.8000000000000472300 ) ) ; +#633 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#634 = EDGE_LOOP ( 'NONE', ( #1809, #4288, #1839, #134 ) ) ; +#635 = ORIENTED_EDGE ( 'NONE', *, *, #2113, .T. ) ; +#636 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000205800, 2.850000000000227500, -6.000000000000047100 ) ) ; +#637 = VERTEX_POINT ( 'NONE', #4851 ) ; +#638 = AXIS2_PLACEMENT_3D ( 'NONE', #963, #4920, #4163 ) ; +#639 = ORIENTED_EDGE ( 'NONE', *, *, #1877, .F. ) ; +#640 = ORIENTED_EDGE ( 'NONE', *, *, #2433, .F. ) ; +#641 = EDGE_CURVE ( 'NONE', #916, #1570, #2996, .T. ) ; +#642 = VECTOR ( 'NONE', #382, 1000.000000000000000 ) ; +#643 = VERTEX_POINT ( 'NONE', #4066 ) ; +#644 = ORIENTED_EDGE ( 'NONE', *, *, #1788, .F. ) ; +#645 = EDGE_LOOP ( 'NONE', ( #2922, #4627, #2928, #847 ) ) ; +#646 = DIRECTION ( 'NONE', ( 5.374889246202355200E-017, 1.000000000000000000, 6.637856049494163000E-017 ) ) ; +#647 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000248500, 4.200000000000232900, -0.2300000000000573000 ) ) ; +#648 = FACE_OUTER_BOUND ( 'NONE', #4728, .T. ) ; +#649 = VERTEX_POINT ( 'NONE', #47 ) ; +#650 = EDGE_CURVE ( 'NONE', #1233, #2322, #895, .T. ) ; +#651 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#652 = CARTESIAN_POINT ( 'NONE', ( 1.824999999999996000, 2.349211679515083700E-013, -5.999999999999983100 ) ) ; +#653 = VECTOR ( 'NONE', #3080, 1000.000000000000000 ) ; +#654 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 5.500000000000172300, -2.428612866367529900E-014 ) ) ; +#655 = EDGE_CURVE ( 'NONE', #649, #2065, #4765, .T. ) ; +#656 = ADVANCED_FACE ( 'NONE', ( #4400 ), #566, .F. ) ; +#657 = FILL_AREA_STYLE_COLOUR ( '', #2772 ) ; +#658 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000205800, 0.5696839565364602000, -6.000000000000047100 ) ) ; +#659 = VERTEX_POINT ( 'NONE', #3327 ) ; +#660 = AXIS2_PLACEMENT_3D ( 'NONE', #3019, #4295, #1038 ) ; +#661 = VERTEX_POINT ( 'NONE', #953 ) ; +#662 = LINE ( 'NONE', #184, #2002 ) ; +#663 = DIRECTION ( 'NONE', ( 8.374527125405327500E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#664 = DIRECTION ( 'NONE', ( -0.9659258262890672000, -5.191744336349173100E-017, -0.2588190451025250100 ) ) ; +#665 = EDGE_CURVE ( 'NONE', #1505, #2588, #3692, .T. ) ; +#666 = FACE_OUTER_BOUND ( 'NONE', #2606, .T. ) ; +#667 = LINE ( 'NONE', #253, #1027 ) ; +#668 = DIRECTION ( 'NONE', ( -5.374889246201352500E-017, -1.000000000000000000, 3.975140932691230600E-031 ) ) ; +#669 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000251100, 4.355000000000233100, -0.07500000000007162000 ) ) ; +#670 = ORIENTED_EDGE ( 'NONE', *, *, #2568, .T. ) ; +#671 = EDGE_CURVE ( 'NONE', #3234, #244, #2693, .T. ) ; +#672 = EDGE_CURVE ( 'NONE', #5050, #701, #281, .T. ) ; +#673 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252400, 1.298089913141610200, -0.08005065776186022500 ) ) ; +#674 = LINE ( 'NONE', #1589, #444 ) ; +#675 = ORIENTED_EDGE ( 'NONE', *, *, #1749, .F. ) ; +#676 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000230700, 2.100000000000236300, -2.900000000000021200 ) ) ; +#677 = SURFACE_STYLE_USAGE ( .BOTH. , #5083 ) ; +#678 = VECTOR ( 'NONE', #3387, 1000.000000000000000 ) ; +#679 = ORIENTED_EDGE ( 'NONE', *, *, #389, .F. ) ; +#680 = ORIENTED_EDGE ( 'NONE', *, *, #2788, .T. ) ; +#681 = VECTOR ( 'NONE', #3362, 1000.000000000000000 ) ; +#682 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865479100, 0.7071067811865471300 ) ) ; +#683 = FACE_OUTER_BOUND ( 'NONE', #3819, .T. ) ; +#684 = EDGE_CURVE ( 'NONE', #4338, #2342, #3439, .T. ) ; +#685 = ORIENTED_EDGE ( 'NONE', *, *, #4472, .F. ) ; +#686 = AXIS2_PLACEMENT_3D ( 'NONE', #3656, #904, #1297 ) ; +#687 = ADVANCED_FACE ( 'NONE', ( #2381 ), #1471, .F. ) ; +#688 = ORIENTED_EDGE ( 'NONE', *, *, #2462, .T. ) ; +#689 = LINE ( 'NONE', #1946, #458 ) ; +#690 = ORIENTED_EDGE ( 'NONE', *, *, #3613, .T. ) ; +#691 = ORIENTED_EDGE ( 'NONE', *, *, #707, .F. ) ; +#692 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000227400, 5.500000000000214900, -2.000000000000067500 ) ) ; +#693 = DIRECTION ( 'NONE', ( -6.133173666732127500E-015, 0.7071067811865479100, -0.7071067811865471300 ) ) ; +#694 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#695 = ORIENTED_EDGE ( 'NONE', *, *, #307, .T. ) ; +#696 = PLANE ( 'NONE', #1853 ) ; +#697 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#698 = AXIS2_PLACEMENT_3D ( 'NONE', #673, #3090, #1879 ) ; +#699 = FACE_OUTER_BOUND ( 'NONE', #761, .T. ) ; +#700 = ORIENTED_EDGE ( 'NONE', *, *, #2825, .F. ) ; +#701 = VERTEX_POINT ( 'NONE', #3069 ) ; +#702 = ORIENTED_EDGE ( 'NONE', *, *, #880, .T. ) ; +#703 = CARTESIAN_POINT ( 'NONE', ( 0.8571796769726917100, 2.950000000000227100, -0.9500000000000423700 ) ) ; +#704 = LINE ( 'NONE', #4707, #4393 ) ; +#705 = EDGE_LOOP ( 'NONE', ( #4458, #398, #1991, #305 ) ) ; +#706 = VERTEX_POINT ( 'NONE', #3058 ) ; +#707 = EDGE_CURVE ( 'NONE', #2491, #934, #533, .T. ) ; +#708 = DIRECTION ( 'NONE', ( -2.639228045337849300E-016, -0.9990482215818578000, 0.04361938736533572900 ) ) ; +#709 = VECTOR ( 'NONE', #3256, 1000.000000000000000 ) ; +#710 = FACE_OUTER_BOUND ( 'NONE', #2524, .T. ) ; +#711 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002502900, 5.000000000000230900, -0.1600000000000524600 ) ) ; +#712 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.2425356250363325500, -0.9701425001453319900 ) ) ; +#713 = EDGE_CURVE ( 'NONE', #4023, #3731, #2815, .T. ) ; +#714 = PLANE ( 'NONE', #4024 ) ; +#715 = CARTESIAN_POINT ( 'NONE', ( -1.299999999999764700, 0.07689437438255455900, -1.999999999999998200 ) ) ; +#716 = LINE ( 'NONE', #2396, #4638 ) ; +#717 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299200E-017, 8.365839057930752800E-015 ) ) ; +#718 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.032988979366341300E-014, -1.000000000000000000 ) ) ; +#719 = CARTESIAN_POINT ( 'NONE', ( -1.825000000000004200, 0.09000000000023535000, 0.0000000000000000000 ) ) ; +#720 = ORIENTED_EDGE ( 'NONE', *, *, #996, .F. ) ; +#721 = ORIENTED_EDGE ( 'NONE', *, *, #79, .F. ) ; +#722 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 2.350550309948573600E-013, -2.428612866367529900E-014 ) ) ; +#723 = ORIENTED_EDGE ( 'NONE', *, *, #4182, .F. ) ; +#724 = VECTOR ( 'NONE', #4891, 1000.000000000000000 ) ; +#725 = DIRECTION ( 'NONE', ( 5.374889246202300400E-017, -1.000000000000000000, 4.501215578837055200E-031 ) ) ; +#726 = VECTOR ( 'NONE', #1258, 1000.000000000000000 ) ; +#727 = ADVANCED_FACE ( 'NONE', ( #591 ), #4269, .F. ) ; +#728 = LINE ( 'NONE', #3976, #177 ) ; +#729 = DIRECTION ( 'NONE', ( -5.374889246201249600E-017, -1.000000000000000000, 3.923442857790346800E-031 ) ) ; +#730 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.112729592618241200E-015, -1.797135268212721900E-015 ) ) ; +#731 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#732 = VECTOR ( 'NONE', #1196, 1000.000000000000100 ) ; +#733 = ORIENTED_EDGE ( 'NONE', *, *, #1469, .T. ) ; +#734 = ORIENTED_EDGE ( 'NONE', *, *, #4152, .F. ) ; +#735 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000228500, 2.100000000000236300, -2.900000000000020800 ) ) ; +#736 = ADVANCED_FACE ( 'NONE', ( #3368 ), #4666, .F. ) ; +#737 = EDGE_CURVE ( 'NONE', #4362, #637, #952, .T. ) ; +#738 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 2.776239569296743900, -7.600000000000000500 ) ) ; +#739 = CIRCLE ( 'NONE', #4259, 0.6000000000000007500 ) ; +#740 = VERTEX_POINT ( 'NONE', #2680 ) ; +#741 = LINE ( 'NONE', #1071, #3778 ) ; +#742 = VECTOR ( 'NONE', #2575, 1000.000000000000000 ) ; +#743 = LINE ( 'NONE', #3473, #4735 ) ; +#744 = ORIENTED_EDGE ( 'NONE', *, *, #1368, .F. ) ; +#745 = EDGE_CURVE ( 'NONE', #4881, #3064, #3749, .T. ) ; +#746 = AXIS2_PLACEMENT_3D ( 'NONE', #626, #4614, #5023 ) ; +#747 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.245087481933969600E-029, -8.374527125405327500E-015 ) ) ; +#748 = EDGE_LOOP ( 'NONE', ( #4534, #3322, #2607, #3687 ) ) ; +#749 = LINE ( 'NONE', #551, #2601 ) ; +#750 = VECTOR ( 'NONE', #4226, 1000.000000000000100 ) ; +#751 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#752 = DIRECTION ( 'NONE', ( -7.390057102693798800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#753 = AXIS2_PLACEMENT_3D ( 'NONE', #5011, #183, #962 ) ; +#754 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#755 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 0.1000000000002270300, -2.576073848652038200E-014 ) ) ; +#756 = VERTEX_POINT ( 'NONE', #338 ) ; +#757 = ORIENTED_EDGE ( 'NONE', *, *, #782, .F. ) ; +#758 = ADVANCED_FACE ( 'NONE', ( #1808 ), #1490, .F. ) ; +#759 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000202100, 2.750000000000227400, -6.500000000000048000 ) ) ; +#760 = VERTEX_POINT ( 'NONE', #4282 ) ; +#761 = EDGE_LOOP ( 'NONE', ( #3704, #2562, #4953, #1015, #4128, #1064, #2941, #206 ) ) ; +#762 = AXIS2_PLACEMENT_3D ( 'NONE', #4332, #1953, #2343 ) ; +#763 = PLANE ( 'NONE', #1013 ) ; +#764 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000238300, 3.100000000000214600, -1.900000000000014800 ) ) ; +#765 = ADVANCED_FACE ( 'NONE', ( #2874 ), #2283, .T. ) ; +#766 = VECTOR ( 'NONE', #5176, 1000.000000000000000 ) ; +#767 = ORIENTED_EDGE ( 'NONE', *, *, #3460, .T. ) ; +#768 = ORIENTED_EDGE ( 'NONE', *, *, #3292, .F. ) ; +#769 = VERTEX_POINT ( 'NONE', #2714 ) ; +#770 = DIRECTION ( 'NONE', ( -1.971276677246343200E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#771 = DIRECTION ( 'NONE', ( 1.971276677246343200E-016, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#772 = EDGE_CURVE ( 'NONE', #3492, #3082, #4582, .T. ) ; +#773 = VECTOR ( 'NONE', #4396, 1000.000000000000000 ) ; +#774 = ORIENTED_EDGE ( 'NONE', *, *, #3863, .F. ) ; +#775 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#776 = LINE ( 'NONE', #3490, #4704 ) ; +#777 = EDGE_CURVE ( 'NONE', #3423, #1352, #3810, .T. ) ; +#778 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999752900, 3.350000000000234600, -2.428612866367529900E-014 ) ) ; +#779 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000205800, 2.850000000000227500, -6.000000000000047100 ) ) ; +#780 = CARTESIAN_POINT ( 'NONE', ( -1.825000000000004200, 1.551435347034426300E-013, -7.599999999999971200 ) ) ; +#781 = PLANE ( 'NONE', #4547 ) ; +#782 = EDGE_CURVE ( 'NONE', #204, #4758, #2690, .T. ) ; +#783 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000245000, -0.09999999999979565500, -0.9443991857387177300 ) ) ; +#784 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246193621700E-017, 5.617885516220652200E-031 ) ) ; +#785 = PLANE ( 'NONE', #4317 ) ; +#786 = AXIS2_PLACEMENT_3D ( 'NONE', #2168, #570, #3733 ) ; +#787 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000247200, 2.550000000000228500, -0.8000000000000541100 ) ) ; +#788 = ORIENTED_EDGE ( 'NONE', *, *, #4617, .T. ) ; +#789 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999756500, 2.550000000000226800, -0.8000000000000056000 ) ) ; +#790 = ORIENTED_EDGE ( 'NONE', *, *, #4878, .F. ) ; +#791 = ORIENTED_EDGE ( 'NONE', *, *, #2349, .F. ) ; +#792 = VECTOR ( 'NONE', #4281, 1000.000000000000100 ) ; +#793 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#794 = FACE_OUTER_BOUND ( 'NONE', #4886, .T. ) ; +#795 = PLANE ( 'NONE', #1147 ) ; +#796 = VECTOR ( 'NONE', #784, 1000.000000000000000 ) ; +#797 = LINE ( 'NONE', #4589, #1529 ) ; +#798 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.9990482215818578000, 0.04361938736533712400 ) ) ; +#799 = LINE ( 'NONE', #592, #2770 ) ; +#800 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, 1.000000000000000000, -3.913799179032202200E-031 ) ) ; +#801 = AXIS2_PLACEMENT_3D ( 'NONE', #5127, #318, #712 ) ; +#802 = EDGE_LOOP ( 'NONE', ( #4685, #1450, #521, #4928 ) ) ; +#803 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000246300, 4.705000000000227400, -0.8000000000000611100 ) ) ; +#804 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999757300, 2.550000000000229900, -1.040834085586084300E-014 ) ) ; +#805 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999751100, 2.550000000000233000, -3.469446951953614200E-015 ) ) ; +#806 = VECTOR ( 'NONE', #1864, 1000.000000000000000 ) ; +#807 = ORIENTED_EDGE ( 'NONE', *, *, #3497, .F. ) ; +#808 = PLANE ( 'NONE', #5014 ) ; +#809 = FACE_BOUND ( 'NONE', #108, .T. ) ; +#810 = PLANE ( 'NONE', #162 ) ; +#811 = ORIENTED_EDGE ( 'NONE', *, *, #3764, .F. ) ; +#812 = VECTOR ( 'NONE', #1228, 1000.000000000000000 ) ; +#813 = EDGE_CURVE ( 'NONE', #2501, #3220, #1069, .T. ) ; +#814 = CARTESIAN_POINT ( 'NONE', ( -3.950000000000212000, 4.705000000000227400, -5.415000000000084400 ) ) ; +#815 = ADVANCED_FACE ( 'NONE', ( #4196 ), #1956, .F. ) ; +#816 = ORIENTED_EDGE ( 'NONE', *, *, #3535, .F. ) ; +#817 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999770600, 0.4000000000002048600, -2.999999999999987100 ) ) ; +#818 = PLANE ( 'NONE', #1697 ) ; +#819 = VERTEX_POINT ( 'NONE', #1899 ) ; +#820 = VERTEX_POINT ( 'NONE', #3827 ) ; +#821 = EDGE_CURVE ( 'NONE', #2983, #1467, #3633, .T. ) ; +#822 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 1.298089913141610200, -3.325942552863712200E-014 ) ) ; +#823 = LINE ( 'NONE', #1241, #4942 ) ; +#824 = VERTEX_POINT ( 'NONE', #4001 ) ; +#825 = ORIENTED_EDGE ( 'NONE', *, *, #584, .F. ) ; +#826 = PLANE ( 'NONE', #2189 ) ; +#827 = ORIENTED_EDGE ( 'NONE', *, *, #2218, .T. ) ; +#828 = PLANE ( 'NONE', #2523 ) ; +#829 = AXIS2_PLACEMENT_3D ( 'NONE', #1595, #2012, #1944 ) ; +#830 = VECTOR ( 'NONE', #2997, 1000.000000000000000 ) ; +#831 = PLANE ( 'NONE', #619 ) ; +#832 = ORIENTED_EDGE ( 'NONE', *, *, #1653, .F. ) ; +#833 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002395900, 2.850000000000227500, -1.350000000000041600 ) ) ; +#834 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, 1.000000000000000000, -3.913799179032202200E-031 ) ) ; +#835 = FACE_OUTER_BOUND ( 'NONE', #1223, .T. ) ; +#836 = VECTOR ( 'NONE', #3108, 1000.000000000000100 ) ; +#837 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999751600, 0.7000000000002335500, -0.1599999999999892300 ) ) ; +#838 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000239600, 2.850000000000227500, -1.350000000000045400 ) ) ; +#839 = EDGE_CURVE ( 'NONE', #4860, #4943, #3314, .T. ) ; +#840 = CARTESIAN_POINT ( 'NONE', ( -1.825000000000004200, 2.347493553367360700E-013, -1.734723475976807100E-014 ) ) ; +#841 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#842 = EDGE_CURVE ( 'NONE', #659, #3492, #4144, .T. ) ; +#843 = EDGE_CURVE ( 'NONE', #3554, #5050, #4702, .T. ) ; +#844 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.067853519814894600E-014, 1.000000000000000000 ) ) ; +#845 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000189800, 0.3995241107910975100, -8.204742650103805000 ) ) ; +#846 = VERTEX_POINT ( 'NONE', #1992 ) ; +#847 = ORIENTED_EDGE ( 'NONE', *, *, #2512, .T. ) ; +#848 = EDGE_CURVE ( 'NONE', #613, #496, #4955, .T. ) ; +#849 = VECTOR ( 'NONE', #4905, 1000.000000000000000 ) ; +#850 = CARTESIAN_POINT ( 'NONE', ( -3.449999999999756800, 1.500000000000234700, -0.7999999999999778400 ) ) ; +#851 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 0.7000000000002329900, -0.1600000000000229600 ) ) ; +#852 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#853 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000230300, 0.4000000000002191800, -2.900000000000021200 ) ) ; +#854 = LINE ( 'NONE', #817, #3456 ) ; +#855 = CLOSED_SHELL ( 'NONE', ( #3750, #2504, #2595, #6, #2165, #4486, #1334, #1993, #3034, #3880, #3507, #1354, #1750, #815, #765, #1435 ) ) ; +#856 = LINE ( 'NONE', #2831, #2709 ) ; +#857 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000205800, 2.850000000000227500, -6.000000000000047100 ) ) ; +#858 = VECTOR ( 'NONE', #1404, 1000.000000000000000 ) ; +#859 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999749700, 0.4000000000002061400, -2.899999999999982600 ) ) ; +#860 = ORIENTED_EDGE ( 'NONE', *, *, #988, .F. ) ; +#861 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000230200, -0.09999999999979557200, -2.700000000000024200 ) ) ; +#862 = VECTOR ( 'NONE', #4081, 1000.000000000000000 ) ; +#863 = VERTEX_POINT ( 'NONE', #1144 ) ; +#864 = ADVANCED_FACE ( 'NONE', ( #3116 ), #781, .F. ) ; +#865 = EDGE_CURVE ( 'NONE', #2653, #3133, #2115, .T. ) ; +#866 = LINE ( 'NONE', #4462, #70 ) ; +#867 = DIRECTION ( 'NONE', ( 1.000000000000000000, -8.086446079014292800E-029, -7.281636885445248400E-015 ) ) ; +#868 = VECTOR ( 'NONE', #257, 1000.000000000000000 ) ; +#869 = VERTEX_POINT ( 'NONE', #425 ) ; +#870 = LINE ( 'NONE', #439, #4930 ) ; +#871 = CIRCLE ( 'NONE', #3498, 0.2500000000000000000 ) ; +#872 = EDGE_CURVE ( 'NONE', #1052, #2847, #3053, .T. ) ; +#873 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999763600, 4.355000000000233100, -2.000000000000036000 ) ) ; +#874 = EDGE_CURVE ( 'NONE', #971, #2229, #161, .T. ) ; +#875 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#876 = EDGE_LOOP ( 'NONE', ( #4662, #171, #2859, #1823 ) ) ; +#877 = ORIENTED_EDGE ( 'NONE', *, *, #1875, .T. ) ; +#878 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193700600E-017, -5.552201356632754200E-031 ) ) ; +#879 = ORIENTED_EDGE ( 'NONE', *, *, #4014, .T. ) ; +#880 = EDGE_CURVE ( 'NONE', #2120, #5175, #4471, .T. ) ; +#881 = AXIS2_PLACEMENT_3D ( 'NONE', #3135, #4427, #2379 ) ; +#882 = FACE_OUTER_BOUND ( 'NONE', #2534, .T. ) ; +#883 = VERTEX_POINT ( 'NONE', #1549 ) ; +#884 = VERTEX_POINT ( 'NONE', #3142 ) ; +#885 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999793000, 3.700000000000172000, -6.000000000000021300 ) ) ; +#886 = CARTESIAN_POINT ( 'NONE', ( 3.150000000000208600, 3.700000000000172900, -6.000000000000067500 ) ) ; +#887 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000001897400, -0.09999999999983198700, -8.182932956421133500 ) ) ; +#888 = VECTOR ( 'NONE', #3851, 1000.000000000000000 ) ; +#889 = VERTEX_POINT ( 'NONE', #833 ) ; +#890 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.037329745435896800E-014 ) ) ; +#891 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193567500E-017, -5.629900911267176600E-031 ) ) ; +#892 = VECTOR ( 'NONE', #1659, 1000.000000000000000 ) ; +#893 = ORIENTED_EDGE ( 'NONE', *, *, #1167, .T. ) ; +#894 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#895 = LINE ( 'NONE', #2011, #4083 ) ; +#896 = DIRECTION ( 'NONE', ( -0.9659258262890714200, -5.191744336349175600E-017, 0.2588190451025092500 ) ) ; +#897 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000244000, 2.266977906954246500E-013, -1.044399185738743400 ) ) ; +#898 = EDGE_CURVE ( 'NONE', #2671, #659, #5146, .T. ) ; +#899 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#900 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000252500, 1.710477983563044100, -3.584739506428718000E-014 ) ) ; +#901 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201240400E-017, 7.281636885445248400E-015 ) ) ; +#902 = ORIENTED_EDGE ( 'NONE', *, *, #2254, .F. ) ; +#903 = ORIENTED_EDGE ( 'NONE', *, *, #1209, .T. ) ; +#904 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, 1.000000000000000000, -3.910042104196375400E-031 ) ) ; +#905 = LINE ( 'NONE', #4937, #110 ) ; +#906 = EDGE_CURVE ( 'NONE', #3064, #15, #5087, .T. ) ; +#907 = AXIS2_PLACEMENT_3D ( 'NONE', #422, #2001, #4452 ) ; +#908 = ORIENTED_EDGE ( 'NONE', *, *, #4528, .T. ) ; +#909 = VECTOR ( 'NONE', #3972, 1000.000000000000000 ) ; +#910 = VECTOR ( 'NONE', #2308, 1000.000000000000000 ) ; +#911 = LINE ( 'NONE', #2183, #3077 ) ; +#912 = VERTEX_POINT ( 'NONE', #2728 ) ; +#913 = AXIS2_PLACEMENT_3D ( 'NONE', #1751, #3375, #4214 ) ; +#914 = LINE ( 'NONE', #2123, #5042 ) ; +#915 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 0.0000000000000000000 ) ) ; +#916 = VERTEX_POINT ( 'NONE', #4831 ) ; +#917 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#918 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002066100, 2.750000000000227400, -5.900000000000043900 ) ) ; +#919 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 8.365839057930752800E-015 ) ) ; +#920 = LINE ( 'NONE', #4160, #66 ) ; +#921 = ORIENTED_EDGE ( 'NONE', *, *, #945, .F. ) ; +#922 = PLANE ( 'NONE', #2052 ) ; +#923 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#924 = AXIS2_PLACEMENT_3D ( 'NONE', #3824, #708, #295 ) ; +#925 = VECTOR ( 'NONE', #4323, 1000.000000000000000 ) ; +#926 = ORIENTED_EDGE ( 'NONE', *, *, #2628, .F. ) ; +#927 = LINE ( 'NONE', #3346, #4670 ) ; +#928 = VECTOR ( 'NONE', #3307, 1000.000000000000000 ) ; +#929 = EDGE_LOOP ( 'NONE', ( #4465, #560, #3626, #306 ) ) ; +#930 = LINE ( 'NONE', #4787, #4172 ) ; +#931 = PLANE ( 'NONE', #3959 ) ; +#932 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.037329745435896800E-014 ) ) ; +#933 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#934 = VERTEX_POINT ( 'NONE', #4807 ) ; +#935 = VERTEX_POINT ( 'NONE', #4333 ) ; +#936 = EDGE_CURVE ( 'NONE', #2541, #3520, #346, .T. ) ; +#937 = ADVANCED_FACE ( 'NONE', ( #2304 ), #1619, .F. ) ; +#938 = EDGE_CURVE ( 'NONE', #1539, #1046, #1744, .T. ) ; +#939 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999807000, 5.500000000000234500, -7.599999999999971200 ) ) ; +#940 = ORIENTED_EDGE ( 'NONE', *, *, #2069, .T. ) ; +#941 = VERTEX_POINT ( 'NONE', #4038 ) ; +#942 = FACE_OUTER_BOUND ( 'NONE', #1344, .T. ) ; +#943 = VERTEX_POINT ( 'NONE', #2427 ) ; +#944 = ORIENTED_EDGE ( 'NONE', *, *, #2596, .F. ) ; +#945 = EDGE_CURVE ( 'NONE', #4943, #3731, #1208, .T. ) ; +#946 = AXIS2_PLACEMENT_3D ( 'NONE', #2107, #146, #3309 ) ; +#947 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999770600, 2.038300084272748300E-013, -2.999999999999983600 ) ) ; +#948 = ORIENTED_EDGE ( 'NONE', *, *, #4956, .T. ) ; +#949 = ORIENTED_EDGE ( 'NONE', *, *, #1994, .F. ) ; +#950 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2340 ) ) ; +#951 = LINE ( 'NONE', #2917, #4399 ) ; +#952 = LINE ( 'NONE', #1109, #2175 ) ; +#953 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000246300, 2.100000000000236300, -0.8000000000000470100 ) ) ; +#954 = ADVANCED_FACE ( 'NONE', ( #2448 ), #3221, .F. ) ; +#955 = SURFACE_STYLE_FILL_AREA ( #5045 ) ; +#956 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000215600, 2.225000000000186200, -4.850000000000043200 ) ) ; +#957 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.7071067811866513800, 0.7071067811864437700 ) ) ; +#958 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000252000, 4.430000000000232400, -7.552851220967920100E-014 ) ) ; +#959 = EDGE_CURVE ( 'NONE', #3646, #2683, #4325, .T. ) ; +#960 = VERTEX_POINT ( 'NONE', #2766 ) ; +#961 = VERTEX_POINT ( 'NONE', #2027 ) ; +#962 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.2425356250363325500, 0.9701425001453319900 ) ) ; +#963 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002015100, 0.5696839565364602000, -6.600000000000039600 ) ) ; +#964 = VECTOR ( 'NONE', #429, 1000.000000000000000 ) ; +#965 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999749800, 5.500000000000234500, -4.163336342344337000E-014 ) ) ; +#966 = EDGE_CURVE ( 'NONE', #961, #2944, #2990, .T. ) ; +#967 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#968 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#969 = LINE ( 'NONE', #4378, #2711 ) ; +#970 = VECTOR ( 'NONE', #3470, 1000.000000000000000 ) ; +#971 = VERTEX_POINT ( 'NONE', #3649 ) ; +#972 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299200E-017, 8.365839057930752800E-015 ) ) ; +#973 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#974 = FACE_OUTER_BOUND ( 'NONE', #1236, .T. ) ; +#975 = ORIENTED_EDGE ( 'NONE', *, *, #4857, .F. ) ; +#976 = EDGE_LOOP ( 'NONE', ( #3175, #675, #3538, #1530 ) ) ; +#977 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 8.365839057930752800E-015 ) ) ; +#978 = LINE ( 'NONE', #1037, #1162 ) ; +#979 = FACE_OUTER_BOUND ( 'NONE', #4523, .T. ) ; +#980 = ORIENTED_EDGE ( 'NONE', *, *, #19, .T. ) ; +#981 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000244000, 2.266977906954246500E-013, -1.044399185738743400 ) ) ; +#982 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000228400, 2.038300084272748300E-013, -3.000000000000018200 ) ) ; +#983 = ORIENTED_EDGE ( 'NONE', *, *, #1987, .F. ) ; +#984 = LINE ( 'NONE', #4501, #5 ) ; +#985 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000241800, -0.09999999999979566900, -1.270808264217950100 ) ) ; +#986 = LINE ( 'NONE', #1974, #2962 ) ; +#987 = ORIENTED_EDGE ( 'NONE', *, *, #3422, .F. ) ; +#988 = EDGE_CURVE ( 'NONE', #11, #4838, #4079, .T. ) ; +#989 = ORIENTED_EDGE ( 'NONE', *, *, #3822, .F. ) ; +#990 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000238200, 2.550000000000234700, 0.0000000000000000000 ) ) ; +#991 = VERTEX_POINT ( 'NONE', #4812 ) ; +#992 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.7071067811865536800, 0.7071067811865412400 ) ) ; +#993 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002395900, 3.350000000000227500, -1.350000000000041600 ) ) ; +#994 = LINE ( 'NONE', #2242, #3357 ) ; +#995 = ORIENTED_EDGE ( 'NONE', *, *, #384, .F. ) ; +#996 = EDGE_CURVE ( 'NONE', #2914, #2666, #3187, .T. ) ; +#997 = AXIS2_PLACEMENT_3D ( 'NONE', #3336, #2572, #1381 ) ; +#998 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#999 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#1000 = VECTOR ( 'NONE', #2636, 1000.000000000000000 ) ; +#1001 = ORIENTED_EDGE ( 'NONE', *, *, #4244, .F. ) ; +#1002 = ORIENTED_EDGE ( 'NONE', *, *, #3094, .F. ) ; +#1003 = ORIENTED_EDGE ( 'NONE', *, *, #583, .F. ) ; +#1004 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000212100, 2.550000000000228500, -5.415000000000077300 ) ) ; +#1005 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 4.200000000000189400, -2.428612866367529900E-014 ) ) ; +#1006 = VECTOR ( 'NONE', #3867, 1000.000000000000100 ) ; +#1007 = ADVANCED_FACE ( 'NONE', ( #99 ), #2459, .T. ) ; +#1008 = VERTEX_POINT ( 'NONE', #2806 ) ; +#1009 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000252000, 5.160000000000229300, -8.317486077050874100E-014 ) ) ; +#1010 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999759900, 0.4000000000002361100, 1.734723475976807100E-014 ) ) ; +#1011 = LINE ( 'NONE', #822, #412 ) ; +#1012 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000246300, 4.705000000000227400, -0.8000000000000611100 ) ) ; +#1013 = AXIS2_PLACEMENT_3D ( 'NONE', #1143, #725, #1166 ) ; +#1014 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 7.281636885445248400E-015 ) ) ; +#1015 = ORIENTED_EDGE ( 'NONE', *, *, #325, .F. ) ; +#1016 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999752400, 2.550000000000235200, -5.204170427930421300E-014 ) ) ; +#1017 = EDGE_CURVE ( 'NONE', #1552, #2685, #481, .T. ) ; +#1018 = ORIENTED_EDGE ( 'NONE', *, *, #2077, .F. ) ; +#1019 = VECTOR ( 'NONE', #4619, 999.9999999999998900 ) ; +#1020 = LINE ( 'NONE', #2821, #1525 ) ; +#1021 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#1022 = VECTOR ( 'NONE', #3195, 1000.000000000000000 ) ; +#1023 = EDGE_CURVE ( 'NONE', #4148, #3594, #5077, .T. ) ; +#1024 = EDGE_CURVE ( 'NONE', #2976, #2285, #1568, .T. ) ; +#1025 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000246700, 4.355000000000233100, -2.000000000000081700 ) ) ; +#1026 = LINE ( 'NONE', #3496, #2949 ) ; +#1027 = VECTOR ( 'NONE', #3413, 1000.000000000000000 ) ; +#1028 = ADVANCED_FACE ( 'NONE', ( #648 ), #4882, .T. ) ; +#1029 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 4.200000000000235500, -5.898059818321144100E-014 ) ) ; +#1030 = LINE ( 'NONE', #3247, #5112 ) ; +#1031 = ORIENTED_EDGE ( 'NONE', *, *, #1724, .F. ) ; +#1032 = EDGE_CURVE ( 'NONE', #3028, #4748, #529, .T. ) ; +#1033 = DIRECTION ( 'NONE', ( 1.000000000000000000, -8.086446079014292800E-029, -7.281636885445248400E-015 ) ) ; +#1034 = VECTOR ( 'NONE', #5035, 1000.000000000000000 ) ; +#1035 = ORIENTED_EDGE ( 'NONE', *, *, #4084, .T. ) ; +#1036 = LINE ( 'NONE', #597, #3670 ) ; +#1037 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000238300, 2.550000000000216100, -1.900000000000008800 ) ) ; +#1038 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -8.365839057930752800E-015 ) ) ; +#1039 = VECTOR ( 'NONE', #2915, 1000.000000000000000 ) ; +#1040 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000212100, 2.550000000000228500, -5.415000000000077300 ) ) ; +#1041 = VERTEX_POINT ( 'NONE', #232 ) ; +#1042 = EDGE_LOOP ( 'NONE', ( #4804, #3885, #3392, #1792 ) ) ; +#1043 = LINE ( 'NONE', #2954, #3921 ) ; +#1044 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000230700, 2.100000000000236300, -2.900000000000021200 ) ) ; +#1045 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1046 = VERTEX_POINT ( 'NONE', #2611 ) ; +#1047 = ORIENTED_EDGE ( 'NONE', *, *, #843, .F. ) ; +#1048 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252000, 2.100000000000236300, -4.163336342344337000E-014 ) ) ; +#1049 = ORIENTED_EDGE ( 'NONE', *, *, #4284, .F. ) ; +#1050 = PLANE ( 'NONE', #4588 ) ; +#1051 = ORIENTED_EDGE ( 'NONE', *, *, #1779, .T. ) ; +#1052 = VERTEX_POINT ( 'NONE', #3616 ) ; +#1053 = ADVANCED_FACE ( 'NONE', ( #4010 ), #2591, .F. ) ; +#1054 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'S2B-PH-SM4-TB(LF)(SN)', ( #3942, #5177, #4564, #4877, #3685, #174 ), #3552 ) ; +#1055 = EDGE_CURVE ( 'NONE', #1269, #2492, #276, .T. ) ; +#1056 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#1057 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252000, -6.800904536500381000E-016, -2.528060375981901600E-014 ) ) ; +#1058 = FACE_OUTER_BOUND ( 'NONE', #3758, .T. ) ; +#1059 = ORIENTED_EDGE ( 'NONE', *, *, #1301, .T. ) ; +#1060 = ORIENTED_EDGE ( 'NONE', *, *, #4395, .T. ) ; +#1061 = CARTESIAN_POINT ( 'NONE', ( -1.142820323027737200, 0.2821715336867768300, -8.600000000000013900 ) ) ; +#1062 = LINE ( 'NONE', #735, #28 ) ; +#1063 = ORIENTED_EDGE ( 'NONE', *, *, #4658, .T. ) ; +#1064 = ORIENTED_EDGE ( 'NONE', *, *, #2145, .F. ) ; +#1065 = EDGE_CURVE ( 'NONE', #3299, #2599, #2374, .T. ) ; +#1066 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1067 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002015100, 0.4697791343782779500, -6.595638061263506400 ) ) ; +#1068 = FACE_OUTER_BOUND ( 'NONE', #2375, .T. ) ; +#1069 = LINE ( 'NONE', #4738, #773 ) ; +#1070 = EDGE_LOOP ( 'NONE', ( #3475, #3140, #2488, #1051 ) ) ; +#1071 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999750700, 5.500000000000172300, 1.040834085586084300E-014 ) ) ; +#1072 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000245000, -0.09999999999979565500, -0.9443991857387177300 ) ) ; +#1073 = ORIENTED_EDGE ( 'NONE', *, *, #4306, .F. ) ; +#1074 = VECTOR ( 'NONE', #4993, 1000.000000000000000 ) ; +#1075 = AXIS2_PLACEMENT_3D ( 'NONE', #4799, #2420, #1576 ) ; +#1076 = ADVANCED_FACE ( 'NONE', ( #3491 ), #149, .F. ) ; +#1077 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249600E-017, -7.281636885445248400E-015 ) ) ; +#1078 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#1079 = VERTEX_POINT ( 'NONE', #3432 ) ; +#1080 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000242700, 2.950000000000227100, -0.9500000000000452500 ) ) ; +#1081 = ORIENTED_EDGE ( 'NONE', *, *, #1242, .F. ) ; +#1082 = VECTOR ( 'NONE', #1678, 1000.000000000000000 ) ; +#1083 = EDGE_CURVE ( 'NONE', #941, #935, #1384, .T. ) ; +#1084 = VECTOR ( 'NONE', #4679, 1000.000000000000000 ) ; +#1085 = FACE_OUTER_BOUND ( 'NONE', #1772, .T. ) ; +#1086 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000239600, 3.350000000000227500, -1.350000000000045400 ) ) ; +#1087 = PLANE ( 'NONE', #2234 ) ; +#1088 = LINE ( 'NONE', #235, #611 ) ; +#1089 = EDGE_CURVE ( 'NONE', #4093, #2777, #4464, .T. ) ; +#1090 = AXIS2_PLACEMENT_3D ( 'NONE', #36, #1615, #3793 ) ; +#1091 = LINE ( 'NONE', #516, #3397 ) ; +#1092 = EDGE_LOOP ( 'NONE', ( #329, #2264, #4692, #5135 ) ) ; +#1093 = PLANE ( 'NONE', #4700 ) ; +#1094 = VECTOR ( 'NONE', #3850, 1000.000000000000000 ) ; +#1095 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000189800, 0.4994289329492777000, -8.209104588840332900 ) ) ; +#1096 = VECTOR ( 'NONE', #2124, 1000.000000000000000 ) ; +#1097 = EDGE_CURVE ( 'NONE', #4908, #824, #4634, .T. ) ; +#1098 = VERTEX_POINT ( 'NONE', #1786 ) ; +#1099 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000220500, 2.825000000000189800, -4.250000000000048800 ) ) ; +#1100 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002058400, 2.850000000000227500, -6.000000000000043500 ) ) ; +#1101 = DIRECTION ( 'NONE', ( -1.000000000000000000, 7.553458536735556100E-029, 7.281636885445248400E-015 ) ) ; +#1102 = VERTEX_POINT ( 'NONE', #3814 ) ; +#1103 = VECTOR ( 'NONE', #2743, 1000.000000000000000 ) ; +#1104 = ADVANCED_FACE ( 'NONE', ( #1626 ), #2498, .F. ) ; +#1105 = ORIENTED_EDGE ( 'NONE', *, *, #1911, .T. ) ; +#1106 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000189800, 0.3995241107910975100, -8.204742650103805000 ) ) ; +#1107 = ORIENTED_EDGE ( 'NONE', *, *, #467, .T. ) ; +#1108 = AXIS2_PLACEMENT_3D ( 'NONE', #501, #933, #544 ) ; +#1109 = CARTESIAN_POINT ( 'NONE', ( 1.142820323027737200, -0.01754293278778015100, -8.586914183790412400 ) ) ; +#1110 = EDGE_LOOP ( 'NONE', ( #2481, #5036, #2483, #3870, #5073, #4166, #3620, #3468, #77, #2684 ) ) ; +#1111 = ORIENTED_EDGE ( 'NONE', *, *, #3229, .F. ) ; +#1112 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000241900, -0.09999999999979564100, -1.270808264217946800 ) ) ; +#1113 = CARTESIAN_POINT ( 'NONE', ( 3.750000000000207400, 3.420000000000228200, -5.415000000000082600 ) ) ; +#1114 = EDGE_CURVE ( 'NONE', #3133, #863, #3558, .T. ) ; +#1115 = VECTOR ( 'NONE', #4291, 1000.000000000000100 ) ; +#1116 = VERTEX_POINT ( 'NONE', #3779 ) ; +#1117 = VERTEX_POINT ( 'NONE', #1305 ) ; +#1118 = EDGE_LOOP ( 'NONE', ( #3339, #3738, #926, #5072 ) ) ; +#1119 = VECTOR ( 'NONE', #1327, 1000.000000000000000 ) ; +#1120 = ORIENTED_EDGE ( 'NONE', *, *, #4147, .T. ) ; +#1121 = ORIENTED_EDGE ( 'NONE', *, *, #1877, .T. ) ; +#1122 = ORIENTED_EDGE ( 'NONE', *, *, #2155, .T. ) ; +#1123 = EDGE_CURVE ( 'NONE', #3082, #3996, #2508, .T. ) ; +#1124 = EDGE_CURVE ( 'NONE', #3105, #1041, #4261, .T. ) ; +#1125 = FILL_AREA_STYLE ('',( #1466 ) ) ; +#1126 = VECTOR ( 'NONE', #4007, 1000.000000000000000 ) ; +#1127 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.067853519814894600E-014, 1.000000000000000000 ) ) ; +#1128 = DIRECTION ( 'NONE', ( -0.2515875261947374000, 0.2347343575773418500, -0.9389374303093709400 ) ) ; +#1129 = LINE ( 'NONE', #956, #3016 ) ; +#1130 = ADVANCED_FACE ( 'NONE', ( #4522 ), #207, .F. ) ; +#1131 = EDGE_CURVE ( 'NONE', #211, #1240, #3048, .T. ) ; +#1132 = DIRECTION ( 'NONE', ( -5.374889246201273600E-017, -1.000000000000000000, 3.972073845008224400E-031 ) ) ; +#1133 = LINE ( 'NONE', #3993, #101 ) ; +#1134 = DIRECTION ( 'NONE', ( 5.374889246202433500E-017, 1.000000000000000000, 1.606225440719261700E-016 ) ) ; +#1135 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#1136 = DIRECTION ( 'NONE', ( -7.299578983070721100E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1137 = ORIENTED_EDGE ( 'NONE', *, *, #418, .F. ) ; +#1138 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 3.978146840631718600E-016, 1.000000000000000000 ) ) ; +#1139 = ORIENTED_EDGE ( 'NONE', *, *, #3668, .F. ) ; +#1140 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 7.281636885445248400E-015 ) ) ; +#1141 = EDGE_LOOP ( 'NONE', ( #2417, #141, #5018, #4760, #2067, #1608, #477, #3364, #3403, #5128, #4394, #791 ) ) ; +#1142 = VECTOR ( 'NONE', #1405, 1000.000000000000000 ) ; +#1143 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000228400, 2.100000000000236300, -2.900000000000023900 ) ) ; +#1144 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002058400, 0.5696839565364602000, -6.000000000000043500 ) ) ; +#1145 = LINE ( 'NONE', #2410, #2064 ) ; +#1146 = ORIENTED_EDGE ( 'NONE', *, *, #2441, .F. ) ; +#1147 = AXIS2_PLACEMENT_3D ( 'NONE', #1163, #3956, #1187 ) ; +#1148 = EDGE_LOOP ( 'NONE', ( #1476, #1520, #2635, #733 ) ) ; +#1149 = DIRECTION ( 'NONE', ( 7.228014483236740900E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1150 = PLANE ( 'NONE', #5075 ) ; +#1151 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999775900, 5.500000000000172300, -6.000000000000029300 ) ) ; +#1152 = VECTOR ( 'NONE', #1548, 1000.000000000000000 ) ; +#1153 = FACE_OUTER_BOUND ( 'NONE', #1256, .T. ) ; +#1154 = ORIENTED_EDGE ( 'NONE', *, *, #3809, .F. ) ; +#1155 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000237900, 2.550000000000216100, -1.900000000000047400 ) ) ; +#1156 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 7.281636885445248400E-015 ) ) ; +#1157 = EDGE_CURVE ( 'NONE', #1844, #613, #1329, .T. ) ; +#1158 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1159 = LINE ( 'NONE', #3635, #2204 ) ; +#1160 = ORIENTED_EDGE ( 'NONE', *, *, #2797, .T. ) ; +#1161 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#1162 = VECTOR ( 'NONE', #3425, 1000.000000000000000 ) ; +#1163 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, -2.149955698496917400E-017, -2.888864335566066700E-014 ) ) ; +#1164 = FACE_OUTER_BOUND ( 'NONE', #2803, .T. ) ; +#1165 = VERTEX_POINT ( 'NONE', #3367 ) ; +#1166 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246202300400E-017, 0.0000000000000000000 ) ) ; +#1167 = EDGE_CURVE ( 'NONE', #1434, #2279, #3868, .T. ) ; +#1168 = FACE_OUTER_BOUND ( 'NONE', #3849, .T. ) ; +#1169 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#1170 = ADVANCED_FACE ( 'NONE', ( #4318 ), #599, .F. ) ; +#1171 = FACE_OUTER_BOUND ( 'NONE', #4308, .T. ) ; +#1172 = VECTOR ( 'NONE', #3040, 1000.000000000000000 ) ; +#1173 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000201400, 0.5696839565364602000, -6.600000000000043200 ) ) ; +#1174 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 1.552577510999242300E-013, -7.599999999999971200 ) ) ; +#1175 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201309400E-017, -7.391429510507072300E-015 ) ) ; +#1176 = EDGE_LOOP ( 'NONE', ( #4749, #1679, #4808, #2358 ) ) ; +#1177 = LINE ( 'NONE', #837, #4444 ) ; +#1178 = AXIS2_PLACEMENT_3D ( 'NONE', #3332, #226, #4595 ) ; +#1179 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000230200, -0.09999999999979557200, -2.700000000000024200 ) ) ; +#1180 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 6.258868353590623600E-015 ) ) ; +#1181 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999764500, 2.800000000000216100, -1.900000000000017000 ) ) ; +#1182 = ORIENTED_EDGE ( 'NONE', *, *, #3831, .T. ) ; +#1183 = VERTEX_POINT ( 'NONE', #3771 ) ; +#1184 = ORIENTED_EDGE ( 'NONE', *, *, #1338, .F. ) ; +#1185 = VERTEX_POINT ( 'NONE', #3347 ) ; +#1186 = PLANE ( 'NONE', #881 ) ; +#1187 = DIRECTION ( 'NONE', ( -8.374527125405327500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1188 = VERTEX_POINT ( 'NONE', #4593 ) ; +#1190 = EDGE_LOOP ( 'NONE', ( #2854, #3661, #2225, #2102 ) ) ; +#1189 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000244900, 2.263814136149733300E-013, -0.8000000000000298000 ) ) ; +#1191 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1192 = DIRECTION ( 'NONE', ( 7.299578983070722700E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1193 = FACE_OUTER_BOUND ( 'NONE', #1677, .T. ) ; +#1194 = ORIENTED_EDGE ( 'NONE', *, *, #1097, .F. ) ; +#1195 = VERTEX_POINT ( 'NONE', #2945 ) ; +#1196 = DIRECTION ( 'NONE', ( -5.037783718415635700E-015, -0.7071067811865555700, -0.7071067811865393600 ) ) ; +#1197 = PLANE ( 'NONE', #594 ) ; +#1198 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246200642500E-017, 6.739535799202493800E-015 ) ) ; +#1199 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 2.100000000000236300, -4.163336342344337700E-014 ) ) ; +#1200 = EDGE_CURVE ( 'NONE', #4181, #4496, #3363, .T. ) ; +#1201 = LINE ( 'NONE', #2641, #1485 ) ; +#1202 = ORIENTED_EDGE ( 'NONE', *, *, #1097, .T. ) ; +#1203 = EDGE_LOOP ( 'NONE', ( #2732, #1898, #503, #546 ) ) ; +#1204 = ADVANCED_FACE ( 'NONE', ( #2808 ), #3381, .T. ) ; +#1205 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 6.258868353590623600E-015 ) ) ; +#1206 = CARTESIAN_POINT ( 'NONE', ( -1.384666883183339500, 2.724354087466151600, -1.852583650136347300 ) ) ; +#1207 = VECTOR ( 'NONE', #1349, 1000.000000000000000 ) ; +#1208 = LINE ( 'NONE', #845, #4267 ) ; +#1209 = EDGE_CURVE ( 'NONE', #3577, #769, #704, .T. ) ; +#1210 = EDGE_CURVE ( 'NONE', #2683, #4127, #2745, .T. ) ; +#1211 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000202100, 0.5696839565364600900, -6.500000000000047100 ) ) ; +#1212 = DIRECTION ( 'NONE', ( -7.277050874369692300E-015, 0.04361938736533712400, 0.9990482215818578000 ) ) ; +#1213 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000236500, 0.7000000000002343200, -2.000000000000081700 ) ) ; +#1214 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1215 = EDGE_CURVE ( 'NONE', #1989, #1909, #3180, .T. ) ; +#1216 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.037329745435896800E-014 ) ) ; +#1217 = ORIENTED_EDGE ( 'NONE', *, *, #609, .F. ) ; +#1218 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002060600, 3.350000000000211500, -6.000000000000041700 ) ) ; +#1219 = ORIENTED_EDGE ( 'NONE', *, *, #1571, .T. ) ; +#1220 = VECTOR ( 'NONE', #2616, 1000.000000000000000 ) ; +#1221 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000201400, 0.4697791343782779500, -6.595638061263509900 ) ) ; +#1222 = ORIENTED_EDGE ( 'NONE', *, *, #4563, .F. ) ; +#1223 = EDGE_LOOP ( 'NONE', ( #4865, #1756, #1416, #3726 ) ) ; +#1224 = DIRECTION ( 'NONE', ( -7.299578983070721100E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1225 = STYLED_ITEM ( 'NONE', ( #5105 ), #3685 ) ; +#1226 = PLANE ( 'NONE', #3754 ) ; +#1227 = VECTOR ( 'NONE', #357, 1000.000000000000100 ) ; +#1228 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201352500E-017, -7.395763429917407300E-015 ) ) ; +#1229 = VECTOR ( 'NONE', #2316, 1000.000000000000000 ) ; +#1230 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000252000, 4.430000000000230600, -7.552851220967920100E-014 ) ) ; +#1231 = ADVANCED_FACE ( 'NONE', ( #3310 ), #3503, .F. ) ; +#1232 = AXIS2_PLACEMENT_3D ( 'NONE', #2581, #3400, #3420 ) ; +#1233 = VERTEX_POINT ( 'NONE', #3100 ) ; +#1234 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.047445008332814600E-014, 1.000000000000000000 ) ) ; +#1235 = DIRECTION ( 'NONE', ( 0.2515875261947533900, -0.2754668179662824700, -0.9278048010560924200 ) ) ; +#1236 = EDGE_LOOP ( 'NONE', ( #1270, #4541, #3939, #2398 ) ) ; +#1237 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 6.263144656875306400E-015 ) ) ; +#1238 = LINE ( 'NONE', #217, #2838 ) ; +#1239 = ORIENTED_EDGE ( 'NONE', *, *, #5126, .T. ) ; +#1240 = VERTEX_POINT ( 'NONE', #2241 ) ; +#1241 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002265900, 2.055000000000202700, -3.105000000000049300 ) ) ; +#1242 = EDGE_CURVE ( 'NONE', #3820, #630, #1062, .T. ) ; +#1243 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1244 = LINE ( 'NONE', #1067, #1094 ) ; +#1245 = VECTOR ( 'NONE', #4190, 1000.000000000000000 ) ; +#1246 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999997793300, 4.200000000000179600, -4.250000000000054200 ) ) ; +#1247 = ORIENTED_EDGE ( 'NONE', *, *, #4563, .T. ) ; +#1248 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#1249 = EDGE_LOOP ( 'NONE', ( #1081, #4451, #2412, #1291, #3643, #4880, #518, #1920, #5130, #825, #2502, #4206, #3595, #1031 ) ) ; +#1250 = VECTOR ( 'NONE', #2822, 1000.000000000000000 ) ; +#1251 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002015100, 0.4697791343782781700, -6.595638061263506400 ) ) ; +#1252 = CARTESIAN_POINT ( 'NONE', ( -1.299999999999780200, 4.200000000000235500, -5.898059818321144100E-014 ) ) ; +#1253 = EDGE_CURVE ( 'NONE', #2034, #3009, #2297, .T. ) ; +#1254 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 5.500000000000234500, -7.979727989493312600E-014 ) ) ; +#1255 = ORIENTED_EDGE ( 'NONE', *, *, #1017, .T. ) ; +#1256 = EDGE_LOOP ( 'NONE', ( #640, #4902, #4697, #1448 ) ) ; +#1257 = PLANE ( 'NONE', #4401 ) ; +#1258 = DIRECTION ( 'NONE', ( -7.178166107490281200E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1259 = CARTESIAN_POINT ( 'NONE', ( -1.825000000000004200, 2.349227590661220000E-013, -5.999999999999983100 ) ) ; +#1260 = DIRECTION ( 'NONE', ( -7.274646834741446700E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1261 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000206500, 5.500000000000192700, -6.000000000000067500 ) ) ; +#1262 = ORIENTED_EDGE ( 'NONE', *, *, #1470, .T. ) ; +#1263 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000245800, 4.705000000000227400, -0.8000000000000676600 ) ) ; +#1264 = FACE_OUTER_BOUND ( 'NONE', #2158, .T. ) ; +#1265 = ORIENTED_EDGE ( 'NONE', *, *, #1463, .T. ) ; +#1266 = CARTESIAN_POINT ( 'NONE', ( 3.750000000000252700, -3.762422472341609700E-017, -3.133082283036120000E-014 ) ) ; +#1267 = DIRECTION ( 'NONE', ( -7.228014483236687300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1268 = VECTOR ( 'NONE', #5007, 1000.000000000000000 ) ; +#1269 = VERTEX_POINT ( 'NONE', #5088 ) ; +#1270 = ORIENTED_EDGE ( 'NONE', *, *, #4957, .T. ) ; +#1271 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1272 = VECTOR ( 'NONE', #4435, 1000.000000000000000 ) ; +#1273 = DIRECTION ( 'NONE', ( 7.329817504127328300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1274 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000228400, 2.100000000000236300, -2.900000000000023900 ) ) ; +#1275 = EDGE_CURVE ( 'NONE', #379, #1989, #3174, .T. ) ; +#1276 = VECTOR ( 'NONE', #31, 1000.000000000000000 ) ; +#1277 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999781800, 2.825000000000190200, -4.250000000000017800 ) ) ; +#1278 = DIRECTION ( 'NONE', ( 5.374889246193463900E-017, 1.000000000000000000, -1.067853519814894600E-014 ) ) ; +#1279 = CARTESIAN_POINT ( 'NONE', ( -1.299999999999786400, 5.500000000000172300, -6.000000000000047100 ) ) ; +#1280 = DIRECTION ( 'NONE', ( 1.000000000000000000, -7.627114208151728300E-029, -7.281636885445248400E-015 ) ) ; +#1281 = EDGE_CURVE ( 'NONE', #3590, #4630, #2367, .T. ) ; +#1282 = AXIS2_PLACEMENT_3D ( 'NONE', #4931, #972, #556 ) ; +#1283 = ORIENTED_EDGE ( 'NONE', *, *, #2628, .T. ) ; +#1284 = ADVANCED_FACE ( 'NONE', ( #942 ), #2669, .F. ) ; +#1285 = ORIENTED_EDGE ( 'NONE', *, *, #4526, .T. ) ; +#1286 = EDGE_LOOP ( 'NONE', ( #331, #1359, #4115, #4923 ) ) ; +#1287 = AXIS2_PLACEMENT_3D ( 'NONE', #4336, #1923, #4742 ) ; +#1288 = CARTESIAN_POINT ( 'NONE', ( 1.255905623633769300, 0.4059902634460178500, -8.182963883710494100 ) ) ; +#1289 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002015100, 0.4697791343782779500, -6.595638061263506400 ) ) ; +#1290 = VECTOR ( 'NONE', #4439, 1000.000000000000000 ) ; +#1291 = ORIENTED_EDGE ( 'NONE', *, *, #4957, .F. ) ; +#1292 = CYLINDRICAL_SURFACE ( 'NONE', #3659, 0.6000000000000007500 ) ; +#1293 = DIRECTION ( 'NONE', ( -5.417580331251512000E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1294 = DIRECTION ( 'NONE', ( 7.329817504127328300E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1295 = VECTOR ( 'NONE', #3550, 1000.000000000000000 ) ; +#1296 = VECTOR ( 'NONE', #2751, 1000.000000000000000 ) ; +#1297 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 0.0000000000000000000 ) ) ; +#1298 = FACE_OUTER_BOUND ( 'NONE', #4028, .T. ) ; +#1299 = EDGE_LOOP ( 'NONE', ( #980, #2966, #5161, #816, #5043, #940 ) ) ; +#1300 = VECTOR ( 'NONE', #2353, 1000.000000000000000 ) ; +#1301 = EDGE_CURVE ( 'NONE', #1046, #3234, #20, .T. ) ; +#1302 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 0.0000000000000000000 ) ) ; +#1303 = FACE_OUTER_BOUND ( 'NONE', #1605, .T. ) ; +#1304 = ORIENTED_EDGE ( 'NONE', *, *, #1912, .T. ) ; +#1305 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000238300, 3.100000000000214100, -1.900000000000059200 ) ) ; +#1306 = ORIENTED_EDGE ( 'NONE', *, *, #4252, .F. ) ; +#1307 = LINE ( 'NONE', #4855, #4740 ) ; +#1308 = LINE ( 'NONE', #539, #3030 ) ; +#1309 = EDGE_CURVE ( 'NONE', #3577, #3464, #3806, .T. ) ; +#1310 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#1311 = ADVANCED_FACE ( 'NONE', ( #1684 ), #1906, .F. ) ; +#1312 = EDGE_CURVE ( 'NONE', #820, #497, #5071, .T. ) ; +#1313 = DIRECTION ( 'NONE', ( -0.9659258262890669800, -0.01128952818585347500, -0.2585727067211929800 ) ) ; +#1314 = ORIENTED_EDGE ( 'NONE', *, *, #4890, .T. ) ; +#1315 = VECTOR ( 'NONE', #1618, 1000.000000000000100 ) ; +#1316 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000215600, 2.225000000000186200, -4.850000000000043200 ) ) ; +#1317 = ORIENTED_EDGE ( 'NONE', *, *, #1089, .T. ) ; +#1318 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000251100, 0.4000000000002343900, -2.428612866367529900E-014 ) ) ; +#1319 = ORIENTED_EDGE ( 'NONE', *, *, #3302, .F. ) ; +#1320 = EDGE_CURVE ( 'NONE', #187, #4944, #2047, .T. ) ; +#1321 = AXIS2_PLACEMENT_3D ( 'NONE', #4872, #2469, #2507 ) ; +#1322 = ORIENTED_EDGE ( 'NONE', *, *, #5168, .T. ) ; +#1323 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#1324 = VECTOR ( 'NONE', #1889, 1000.000000000000000 ) ; +#1325 = ORIENTED_EDGE ( 'NONE', *, *, #906, .F. ) ; +#1326 = ORIENTED_EDGE ( 'NONE', *, *, #2155, .F. ) ; +#1327 = DIRECTION ( 'NONE', ( -5.374889246201352500E-017, -1.000000000000000000, 3.975140932691230600E-031 ) ) ; +#1328 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000212000, 2.550000000000228500, -5.415000000000084400 ) ) ; +#1329 = LINE ( 'NONE', #1004, #830 ) ; +#1330 = ORIENTED_EDGE ( 'NONE', *, *, #1554, .T. ) ; +#1331 = DIRECTION ( 'NONE', ( 5.374889246201249600E-017, 1.000000000000000000, -3.858184781859579000E-031 ) ) ; +#1332 = VECTOR ( 'NONE', #1688, 999.9999999999998900 ) ; +#1333 = VECTOR ( 'NONE', #754, 1000.000000000000000 ) ; +#1334 = ADVANCED_FACE ( 'NONE', ( #1193 ), #4290, .F. ) ; +#1335 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999765300, 2.037124058565912800E-013, -2.999999999999985300 ) ) ; +#1336 = DIRECTION ( 'NONE', ( -6.938893903907228400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1337 = PLANE ( 'NONE', #4999 ) ; +#1338 = EDGE_CURVE ( 'NONE', #3351, #3604, #1447, .T. ) ; +#1339 = ORIENTED_EDGE ( 'NONE', *, *, #2769, .F. ) ; +#1340 = LINE ( 'NONE', #939, #2251 ) ; +#1341 = EDGE_CURVE ( 'NONE', #760, #4599, #4884, .T. ) ; +#1342 = ORIENTED_EDGE ( 'NONE', *, *, #2565, .F. ) ; +#1343 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000228400, 2.100000000000236300, -2.900000000000023900 ) ) ; +#1344 = EDGE_LOOP ( 'NONE', ( #2171, #2927, #3521, #691 ) ) ; +#1345 = VECTOR ( 'NONE', #4405, 1000.000000000000000 ) ; +#1346 = PRESENTATION_STYLE_ASSIGNMENT (( #1924 ) ) ; +#1347 = VECTOR ( 'NONE', #1728, 1000.000000000000000 ) ; +#1348 = CARTESIAN_POINT ( 'NONE', ( 3.750000000000207400, 3.420000000000228200, -5.415000000000082600 ) ) ; +#1349 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#1350 = DIRECTION ( 'NONE', ( -1.971276677246343200E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1351 = PLANE ( 'NONE', #1388 ) ; +#1352 = VERTEX_POINT ( 'NONE', #5153 ) ; +#1353 = ORIENTED_EDGE ( 'NONE', *, *, #1755, .F. ) ; +#1354 = ADVANCED_FACE ( 'NONE', ( #2869 ), #808, .F. ) ; +#1355 = PLANE ( 'NONE', #638 ) ; +#1356 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000218700, 3.350000000000211500, -4.250000000000045300 ) ) ; +#1357 = AXIS2_PLACEMENT_3D ( 'NONE', #2812, #4763, #2740 ) ; +#1358 = FACE_OUTER_BOUND ( 'NONE', #147, .T. ) ; +#1359 = ORIENTED_EDGE ( 'NONE', *, *, #154, .T. ) ; +#1360 = VECTOR ( 'NONE', #3300, 1000.000000000000000 ) ; +#1361 = DIRECTION ( 'NONE', ( 5.374889246193700600E-017, 1.000000000000000000, -1.032988979366341300E-014 ) ) ; +#1362 = ORIENTED_EDGE ( 'NONE', *, *, #1593, .T. ) ; +#1363 = EDGE_CURVE ( 'NONE', #587, #3862, #4074, .T. ) ; +#1364 = EDGE_LOOP ( 'NONE', ( #4480, #1668, #4356, #4222 ) ) ; +#1365 = FACE_OUTER_BOUND ( 'NONE', #976, .T. ) ; +#1366 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000251100, 0.4000000000002343900, -2.428612866367529900E-014 ) ) ; +#1367 = ORIENTED_EDGE ( 'NONE', *, *, #650, .F. ) ; +#1368 = EDGE_CURVE ( 'NONE', #3004, #2737, #3553, .T. ) ; +#1369 = EDGE_CURVE ( 'NONE', #1008, #3262, #3304, .T. ) ; +#1370 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999757700, 2.550000000000235200, 0.0000000000000000000 ) ) ; +#1371 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000244900, -0.09999999999979568300, -0.9443991857387211700 ) ) ; +#1372 = ORIENTED_EDGE ( 'NONE', *, *, #3393, .F. ) ; +#1373 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#1374 = ORIENTED_EDGE ( 'NONE', *, *, #3605, .T. ) ; +#1375 = CARTESIAN_POINT ( 'NONE', ( 3.750000000000230000, 4.705000000000228300, -2.715000000000083300 ) ) ; +#1376 = VECTOR ( 'NONE', #3031, 1000.000000000000000 ) ; +#1377 = EDGE_LOOP ( 'NONE', ( #1868, #4994, #807, #4731 ) ) ; +#1378 = ORIENTED_EDGE ( 'NONE', *, *, #2605, .T. ) ; +#1379 = EDGE_CURVE ( 'NONE', #1183, #2034, #2677, .T. ) ; +#1380 = ADVANCED_FACE ( 'NONE', ( #2228 ), #2754, .F. ) ; +#1381 = DIRECTION ( 'NONE', ( -7.228014483236740900E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1382 = DIRECTION ( 'NONE', ( 3.594270536425345300E-015, -0.8660254037844307100, 0.5000000000000138800 ) ) ; +#1383 = CARTESIAN_POINT ( 'NONE', ( -0.7499999999997922800, 3.700000000000172900, -6.000000000000038200 ) ) ; +#1384 = LINE ( 'NONE', #1012, #213 ) ; +#1385 = ORIENTED_EDGE ( 'NONE', *, *, #3757, .F. ) ; +#1386 = ORIENTED_EDGE ( 'NONE', *, *, #4019, .T. ) ; +#1387 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999797400, 3.700000000000177800, -6.000000000000012400 ) ) ; +#1388 = AXIS2_PLACEMENT_3D ( 'NONE', #2180, #3321, #977 ) ; +#1389 = VECTOR ( 'NONE', #1214, 1000.000000000000000 ) ; +#1390 = PLANE ( 'NONE', #753 ) ; +#1391 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.9990482215818578000, 0.04361938736533712400 ) ) ; +#1392 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1393 = LINE ( 'NONE', #260, #3881 ) ; +#1394 = EDGE_CURVE ( 'NONE', #5021, #4089, #2741, .T. ) ; +#1395 = PRESENTATION_STYLE_ASSIGNMENT (( #2665 ) ) ; +#1396 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.032988979366341300E-014, -1.000000000000000000 ) ) ; +#1397 = EDGE_CURVE ( 'NONE', #2491, #3486, #2104, .T. ) ; +#1398 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, 1.000000000000000000, -3.913799179032202200E-031 ) ) ; +#1399 = EDGE_CURVE ( 'NONE', #4314, #1849, #4517, .T. ) ; +#1400 = ORIENTED_EDGE ( 'NONE', *, *, #3401, .T. ) ; +#1401 = DIRECTION ( 'NONE', ( 8.352372291740183800E-015, 1.606225440719266100E-016, -1.000000000000000000 ) ) ; +#1402 = VERTEX_POINT ( 'NONE', #3117 ) ; +#1403 = VECTOR ( 'NONE', #2378, 1000.000000000000000 ) ; +#1404 = DIRECTION ( 'NONE', ( -8.374527125405327500E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1405 = DIRECTION ( 'NONE', ( -7.270030056159898800E-015, -0.04361938736533603500, -0.9990482215818578000 ) ) ; +#1406 = FACE_OUTER_BOUND ( 'NONE', #5113, .T. ) ; +#1407 = ORIENTED_EDGE ( 'NONE', *, *, #1478, .F. ) ; +#1408 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 5.500000000000214900, -2.000000000000074600 ) ) ; +#1409 = EDGE_CURVE ( 'NONE', #1910, #1102, #2986, .T. ) ; +#1410 = SURFACE_STYLE_FILL_AREA ( #1125 ) ; +#1411 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#1412 = AXIS2_PLACEMENT_3D ( 'NONE', #377, #717, #4726 ) ; +#1413 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000237400, 2.800000000000218300, -1.650000000000050500 ) ) ; +#1414 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1415 = FACE_OUTER_BOUND ( 'NONE', #4754, .T. ) ; +#1416 = ORIENTED_EDGE ( 'NONE', *, *, #872, .T. ) ; +#1417 = EDGE_LOOP ( 'NONE', ( #944, #1888, #2191, #4040, #4499, #3679, #4716, #4565, #4998, #1555, #2639, #472, #4721, #1667, #268, #1903 ) ) ; +#1418 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.112729592618241200E-015, 1.797135268212721900E-015 ) ) ; +#1419 = FACE_OUTER_BOUND ( 'NONE', #4814, .T. ) ; +#1420 = ORIENTED_EDGE ( 'NONE', *, *, #53, .F. ) ; +#1421 = DIRECTION ( 'NONE', ( -5.374889246201318000E-017, -1.000000000000000000, -9.531447670202194300E-017 ) ) ; +#1422 = LINE ( 'NONE', #4762, #1300 ) ; +#1423 = LINE ( 'NONE', #474, #621 ) ; +#1424 = VECTOR ( 'NONE', #4705, 1000.000000000000000 ) ; +#1425 = ORIENTED_EDGE ( 'NONE', *, *, #4339, .T. ) ; +#1426 = PLANE ( 'NONE', #3741 ) ; +#1427 = CARTESIAN_POINT ( 'NONE', ( 1.824999999999996000, 0.09000000000023490600, -8.600000000000013900 ) ) ; +#1428 = VERTEX_POINT ( 'NONE', #479 ) ; +#1429 = VECTOR ( 'NONE', #3330, 1000.000000000000000 ) ; +#1430 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000218800, 4.200000000000189400, -4.250000000000066600 ) ) ; +#1431 = AXIS2_PLACEMENT_3D ( 'NONE', #2305, #2697, #2248 ) ; +#1432 = LINE ( 'NONE', #1086, #451 ) ; +#1433 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000234100, 4.430000000000220900, -6.580608539076920800E-014 ) ) ; +#1434 = VERTEX_POINT ( 'NONE', #1277 ) ; +#1435 = ADVANCED_FACE ( 'NONE', ( #1058 ), #4761, .F. ) ; +#1436 = EDGE_CURVE ( 'NONE', #884, #4753, #5016, .T. ) ; +#1437 = ORIENTED_EDGE ( 'NONE', *, *, #3260, .T. ) ; +#1438 = ORIENTED_EDGE ( 'NONE', *, *, #2866, .F. ) ; +#1439 = DIRECTION ( 'NONE', ( 7.327711234729614700E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1440 = ORIENTED_EDGE ( 'NONE', *, *, #2726, .T. ) ; +#1441 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000204800, 4.200000000000235500, -5.898059818321144100E-014 ) ) ; +#1442 = ORIENTED_EDGE ( 'NONE', *, *, #1469, .F. ) ; +#1443 = EDGE_CURVE ( 'NONE', #5005, #1183, #150, .T. ) ; +#1444 = DIRECTION ( 'NONE', ( -8.156285340228848500E-015, 7.282397625204327700E-017, -1.000000000000000000 ) ) ; +#1445 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1446 = PLANE ( 'NONE', #2477 ) ; +#1447 = LINE ( 'NONE', #2294, #5139 ) ; +#1448 = ORIENTED_EDGE ( 'NONE', *, *, #1055, .T. ) ; +#1449 = ORIENTED_EDGE ( 'NONE', *, *, #248, .F. ) ; +#1450 = ORIENTED_EDGE ( 'NONE', *, *, #4756, .F. ) ; +#1451 = DIRECTION ( 'NONE', ( 8.193010895375706900E-015, 6.637856049494207400E-017, -1.000000000000000000 ) ) ; +#1452 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000230700, 2.100000000000236300, -2.900000000000021200 ) ) ; +#1453 = EDGE_CURVE ( 'NONE', #4569, #4630, #3110, .T. ) ; +#1454 = VECTOR ( 'NONE', #2311, 1000.000000000000000 ) ; +#1455 = ORIENTED_EDGE ( 'NONE', *, *, #4554, .F. ) ; +#1456 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000252500, 2.100000000000236300, -3.828702780027107000E-014 ) ) ; +#1457 = DIRECTION ( 'NONE', ( -6.938893903907228400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1458 = LINE ( 'NONE', #4307, #3501 ) ; +#1459 = DIRECTION ( 'NONE', ( -5.374889246201249000E-017, -1.000000000000000000, 3.913799179032202200E-031 ) ) ; +#1460 = ADVANCED_FACE ( 'NONE', ( #3859 ), #4477, .F. ) ; +#1461 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002395900, 3.350000000000227500, -1.350000000000041600 ) ) ; +#1462 = ORIENTED_EDGE ( 'NONE', *, *, #5022, .T. ) ; +#1463 = EDGE_CURVE ( 'NONE', #2929, #4089, #4629, .T. ) ; +#1464 = ORIENTED_EDGE ( 'NONE', *, *, #2187, .F. ) ; +#1465 = SHAPE_DEFINITION_REPRESENTATION ( #5034, #1054 ) ; +#1466 = FILL_AREA_STYLE_COLOUR ( '', #4423 ) ; +#1467 = VERTEX_POINT ( 'NONE', #2078 ) ; +#1468 = VECTOR ( 'NONE', #2827, 1000.000000000000000 ) ; +#1469 = EDGE_CURVE ( 'NONE', #127, #4569, #4821, .T. ) ; +#1470 = EDGE_CURVE ( 'NONE', #2492, #4100, #1560, .T. ) ; +#1471 = PLANE ( 'NONE', #801 ) ; +#1472 = VECTOR ( 'NONE', #3945, 1000.000000000000000 ) ; +#1473 = LINE ( 'NONE', #4203, #2893 ) ; +#1474 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #3471 ) ; +#1475 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000239800, 2.950000000000227100, -1.350000000000052700 ) ) ; +#1476 = ORIENTED_EDGE ( 'NONE', *, *, #3056, .F. ) ; +#1477 = EDGE_LOOP ( 'NONE', ( #4352, #3857, #2365, #1917 ) ) ; +#1478 = EDGE_CURVE ( 'NONE', #3996, #889, #4003, .T. ) ; +#1479 = VERTEX_POINT ( 'NONE', #4510 ) ; +#1480 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#1481 = AXIS2_PLACEMENT_3D ( 'NONE', #1266, #4106, #4051 ) ; +#1482 = FACE_OUTER_BOUND ( 'NONE', #3651, .T. ) ; +#1483 = VERTEX_POINT ( 'NONE', #840 ) ; +#1484 = EDGE_LOOP ( 'NONE', ( #2357, #1217, #1438, #3266 ) ) ; +#1485 = VECTOR ( 'NONE', #333, 1000.000000000000000 ) ; +#1486 = LINE ( 'NONE', #4280, #1837 ) ; +#1487 = ORIENTED_EDGE ( 'NONE', *, *, #4889, .T. ) ; +#1488 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1489 = ORIENTED_EDGE ( 'NONE', *, *, #2369, .T. ) ; +#1490 = PLANE ( 'NONE', #698 ) ; +#1491 = EDGE_LOOP ( 'NONE', ( #2440, #3756, #1002, #3311 ) ) ; +#1492 = FACE_OUTER_BOUND ( 'NONE', #3317, .T. ) ; +#1493 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999756800, 2.550000000000226800, -0.7999999999999986000 ) ) ; +#1494 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000201400, 0.4697791343782779500, -6.595638061263509900 ) ) ; +#1495 = VERTEX_POINT ( 'NONE', #2840 ) ; +#1496 = EDGE_CURVE ( 'NONE', #3220, #2454, #823, .T. ) ; +#1497 = VECTOR ( 'NONE', #3421, 1000.000000000000000 ) ; +#1498 = ORIENTED_EDGE ( 'NONE', *, *, #4847, .T. ) ; +#1499 = ORIENTED_EDGE ( 'NONE', *, *, #122, .T. ) ; +#1500 = EDGE_LOOP ( 'NONE', ( #3618, #4210, #2637, #3102 ) ) ; +#1501 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000202100, 0.5696839565364600900, -6.500000000000047100 ) ) ; +#1502 = ORIENTED_EDGE ( 'NONE', *, *, #3735, .T. ) ; +#1503 = EDGE_LOOP ( 'NONE', ( #3700, #1921, #1627, #4310 ) ) ; +#1504 = ADVANCED_FACE ( 'NONE', ( #1983 ), #153, .F. ) ; +#1505 = VERTEX_POINT ( 'NONE', #4120 ) ; +#1506 = EDGE_CURVE ( 'NONE', #2205, #5017, #1918, .T. ) ; +#1507 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000201400, -0.02974497641265105500, -6.573828367580842000 ) ) ; +#1508 = DIRECTION ( 'NONE', ( 5.374889246193695600E-017, -1.000000000000000000, 1.037329745435896800E-014 ) ) ; +#1509 = DIRECTION ( 'NONE', ( -5.417580331251687100E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1510 = LINE ( 'NONE', #1941, #2235 ) ; +#1511 = PLANE ( 'NONE', #3573 ) ; +#1512 = LINE ( 'NONE', #2377, #2818 ) ; +#1513 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000189800, -0.09999999999983200100, -8.182932956421137000 ) ) ; +#1514 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999795000, 5.500000000000172300, -6.000000000000034600 ) ) ; +#1515 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4484 ) ) ; +#1516 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000241000, 2.550000000000217900, -1.650000000000047900 ) ) ; +#1517 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000215600, 0.7000000000001840300, -4.849999999999995200 ) ) ; +#1518 = ORIENTED_EDGE ( 'NONE', *, *, #122, .F. ) ; +#1519 = CARTESIAN_POINT ( 'NONE', ( 1.384666883183339500, 2.724354087466151600, -1.852583650136347300 ) ) ; +#1520 = ORIENTED_EDGE ( 'NONE', *, *, #1215, .F. ) ; +#1521 = CIRCLE ( 'NONE', #2580, 0.09999999999999592500 ) ; +#1522 = DIRECTION ( 'NONE', ( 5.186901026177523000E-015, 0.7071067811865555700, 0.7071067811865393600 ) ) ; +#1523 = DIRECTION ( 'NONE', ( -5.953547734519275600E-015, 0.7071067811865476800, 0.7071067811865474600 ) ) ; +#1524 = EDGE_CURVE ( 'NONE', #64, #2737, #3937, .T. ) ; +#1525 = VECTOR ( 'NONE', #1234, 1000.000000000000000 ) ; +#1526 = VERTEX_POINT ( 'NONE', #4527 ) ; +#1527 = LINE ( 'NONE', #1566, #3331 ) ; +#1528 = CARTESIAN_POINT ( 'NONE', ( -1.300000000000234100, 4.355000000000233100, -5.261941203825680100 ) ) ; +#1529 = VECTOR ( 'NONE', #3804, 1000.000000000000000 ) ; +#1530 = ORIENTED_EDGE ( 'NONE', *, *, #4584, .T. ) ; +#1531 = ORIENTED_EDGE ( 'NONE', *, *, #2278, .F. ) ; +#1532 = EDGE_CURVE ( 'NONE', #2229, #3973, #93, .T. ) ; +#1533 = ADVANCED_FACE ( 'NONE', ( #699 ), #922, .F. ) ; +#1534 = CYLINDRICAL_SURFACE ( 'NONE', #4873, 0.2500000000000000000 ) ; +#1535 = ORIENTED_EDGE ( 'NONE', *, *, #2663, .T. ) ; +#1536 = LINE ( 'NONE', #2771, #618 ) ; +#1537 = FACE_OUTER_BOUND ( 'NONE', #362, .T. ) ; +#1538 = LINE ( 'NONE', #1962, #4864 ) ; +#1539 = VERTEX_POINT ( 'NONE', #2098 ) ; +#1540 = ORIENTED_EDGE ( 'NONE', *, *, #1665, .T. ) ; +#1541 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000201400, 0.4697791343782781700, -6.595638061263509900 ) ) ; +#1542 = PLANE ( 'NONE', #317 ) ; +#1543 = ORIENTED_EDGE ( 'NONE', *, *, #1200, .T. ) ; +#1544 = LINE ( 'NONE', #4939, #2087 ) ; +#1545 = LINE ( 'NONE', #3924, #3155 ) ; +#1546 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999752400, 2.550000000000235200, 0.0000000000000000000 ) ) ; +#1547 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1548 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#1549 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002060600, 3.350000000000211500, -6.000000000000041700 ) ) ; +#1550 = VERTEX_POINT ( 'NONE', #125 ) ; +#1551 = ORIENTED_EDGE ( 'NONE', *, *, #1532, .F. ) ; +#1552 = VERTEX_POINT ( 'NONE', #2066 ) ; +#1553 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000206500, 0.07689437438255455900, -6.000000000000071100 ) ) ; +#1554 = EDGE_CURVE ( 'NONE', #1352, #64, #2863, .T. ) ; +#1555 = ORIENTED_EDGE ( 'NONE', *, *, #2756, .F. ) ; +#1556 = ORIENTED_EDGE ( 'NONE', *, *, #4857, .T. ) ; +#1557 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -6.637856049494163000E-017, 1.000000000000000000 ) ) ; +#1558 = ADVANCED_FACE ( 'NONE', ( #882 ), #2471, .T. ) ; +#1559 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000201400, -0.02974497641265105500, -6.573828367580842000 ) ) ; +#1560 = LINE ( 'NONE', #2861, #1847 ) ; +#1561 = ORIENTED_EDGE ( 'NONE', *, *, #2889, .F. ) ; +#1562 = CARTESIAN_POINT ( 'NONE', ( -1.299999999999763800, 0.07689437438255455900, -1.999999999999998200 ) ) ; +#1563 = EDGE_LOOP ( 'NONE', ( #4429, #2553, #588, #3398 ) ) ; +#1564 = EDGE_CURVE ( 'NONE', #500, #1483, #4572, .T. ) ; +#1565 = EDGE_CURVE ( 'NONE', #3164, #3028, #580, .T. ) ; +#1566 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000251100, -0.09999999999979573800, -0.2000000000000242700 ) ) ; +#1567 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000186700, 0.2821715336867768300, -8.600000000000013900 ) ) ; +#1568 = CIRCLE ( 'NONE', #5085, 0.09999999999999592500 ) ; +#1569 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000228500, 0.1000000000002044700, -2.900000000000020800 ) ) ; +#1570 = VERTEX_POINT ( 'NONE', #2895 ) ; +#1571 = EDGE_CURVE ( 'NONE', #2457, #4758, #1797, .T. ) ; +#1572 = CARTESIAN_POINT ( 'NONE', ( 3.750000000000207400, 4.705000000000227400, -5.415000000000082600 ) ) ; +#1573 = VECTOR ( 'NONE', #2908, 1000.000000000000000 ) ; +#1574 = DIRECTION ( 'NONE', ( 5.374889246201352500E-017, 1.000000000000000000, -3.939695727955241200E-031 ) ) ; +#1575 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#1576 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.04361938736533572900, -0.9990482215818578000 ) ) ; +#1577 = ORIENTED_EDGE ( 'NONE', *, *, #3244, .F. ) ; +#1578 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000247200, 5.500000000000230900, -0.8000000000000818700 ) ) ; +#1579 = ORIENTED_EDGE ( 'NONE', *, *, #2360, .T. ) ; +#1580 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000231100, 2.100000000000236300, -2.900000000000023900 ) ) ; +#1581 = FACE_OUTER_BOUND ( 'NONE', #2556, .T. ) ; +#1582 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#1583 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999766100, 2.550000000000216100, -1.900000000000002400 ) ) ; +#1584 = ADVANCED_FACE ( 'NONE', ( #5008 ), #4909, .F. ) ; +#1585 = EDGE_LOOP ( 'NONE', ( #2923, #3891, #274, #4372 ) ) ; +#1586 = STYLED_ITEM ( 'NONE', ( #1395 ), #1054 ) ; +#1587 = ORIENTED_EDGE ( 'NONE', *, *, #5059, .T. ) ; +#1588 = CARTESIAN_POINT ( 'NONE', ( 0.8571796769726917100, 3.250000000000227400, -0.9500000000000423700 ) ) ; +#1589 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999752400, 2.550000000000235200, -6.938893903907228400E-015 ) ) ; +#1590 = LINE ( 'NONE', #4358, #549 ) ; +#1591 = LINE ( 'NONE', #4809, #3709 ) ; +#1592 = CARTESIAN_POINT ( 'NONE', ( -1.299999999999763800, 5.500000000000155400, -7.600000000000029000 ) ) ; +#1593 = EDGE_CURVE ( 'NONE', #1791, #1910, #4689, .T. ) ; +#1594 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 4.200000000000235500, -5.898059818321144100E-014 ) ) ; +#1595 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, -1.599751681989993200E-028, -2.554230773248836400E-014 ) ) ; +#1596 = LINE ( 'NONE', #4632, #610 ) ; +#1597 = ORIENTED_EDGE ( 'NONE', *, *, #2246, .F. ) ; +#1598 = CARTESIAN_POINT ( 'NONE', ( -3.449999999999750600, 0.4000000000002048600, 1.040834085586084300E-014 ) ) ; +#1599 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000196500, 2.776239569296745200, -7.600000000000058300 ) ) ; +#1600 = VECTOR ( 'NONE', #3873, 1000.000000000000100 ) ; +#1601 = EDGE_LOOP ( 'NONE', ( #1727, #4407, #3744, #1799 ) ) ; +#1602 = EDGE_CURVE ( 'NONE', #3463, #1805, #3623, .T. ) ; +#1603 = ORIENTED_EDGE ( 'NONE', *, *, #3790, .T. ) ; +#1604 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000228400, 0.1000000000002044400, -2.900000000000023900 ) ) ; +#1605 = EDGE_LOOP ( 'NONE', ( #1265, #4380, #4058, #3957 ) ) ; +#1606 = VECTOR ( 'NONE', #999, 1000.000000000000000 ) ; +#1607 = DIRECTION ( 'NONE', ( 6.505213034913291700E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1608 = ORIENTED_EDGE ( 'NONE', *, *, #906, .T. ) ; +#1609 = VECTOR ( 'NONE', #1636, 1000.000000000000000 ) ; +#1610 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000212100, 4.705000000000227400, -5.415000000000077300 ) ) ; +#1611 = ADVANCED_FACE ( 'NONE', ( #1264 ), #2880, .F. ) ; +#1612 = CLOSED_SHELL ( 'NONE', ( #2039, #2090, #97, #5051, #1880, #4236, #4436, #5000, #2650, #4708, #631, #3083, #4558, #1170, #3374, #3918, #727, #1664, #4177, #4583, #4945 ) ) ; +#1613 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000206700, 2.750000000000227400, -5.900000000000047400 ) ) ; +#1614 = ORIENTED_EDGE ( 'NONE', *, *, #5059, .F. ) ; +#1616 = CLOSED_SHELL ( 'NONE', ( #4683, #864, #3276, #4154, #4402, #3059, #2217, #513, #1130, #1104, #2907, #2249, #4311, #2268, #736, #937, #434, #1028, #4533, #2647, #2475, #1204, #1907, #1533, #1869, #1311, #4341, #245, #1611, #1730, #2300, #4841, #1504, #383, #2811, #3803, #4739, #5137, #3484, #2699, #3324, #489, #555, #2552, #469, #3907, #3170, #3852, #1460, #1231, #4970, #656, #327, #219, #4204, #1638, #4869, #4085, #3724, #3434, #2428, #3231, #3091, #2750, #1706, #1584, #4511, #1558, #1007, #2323, #2452, #1076, #3006, #354, #168, #1284, #5164, #39, #2116, #954, #3255, #1934, #3821, #4628, #3458, #4335, #4919, #2393 ) ) ; +#1615 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#1617 = VERTEX_POINT ( 'NONE', #191 ) ; +#1618 = DIRECTION ( 'NONE', ( 6.133173666733221600E-015, -0.7071067811865962000, -0.7071067811864987200 ) ) ; +#1619 = PLANE ( 'NONE', #2850 ) ; +#1620 = LINE ( 'NONE', #1100, #1333 ) ; +#1621 = EDGE_LOOP ( 'NONE', ( #572, #3657, #72, #4752 ) ) ; +#1622 = ORIENTED_EDGE ( 'NONE', *, *, #2010, .T. ) ; +#1623 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999997489700, 5.500000000000234500, -5.551115123125782700E-014 ) ) ; +#1624 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#1625 = EDGE_CURVE ( 'NONE', #4362, #4023, #4184, .T. ) ; +#1626 = FACE_OUTER_BOUND ( 'NONE', #1500, .T. ) ; +#1627 = ORIENTED_EDGE ( 'NONE', *, *, #2077, .T. ) ; +#1628 = EDGE_LOOP ( 'NONE', ( #4519, #4591, #2276, #596 ) ) ; +#1629 = PLANE ( 'NONE', #1996 ) ; +#1630 = CIRCLE ( 'NONE', #3690, 0.2500000000000000000 ) ; +#1631 = VECTOR ( 'NONE', #390, 1000.000000000000000 ) ; +#1632 = EDGE_CURVE ( 'NONE', #1539, #2435, #334, .T. ) ; +#1633 = AXIS2_PLACEMENT_3D ( 'NONE', #5143, #2302, #351 ) ; +#1634 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002196500, 4.200000000000235500, -5.898059818321144100E-014 ) ) ; +#1635 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000202100, 2.750000000000227400, -6.500000000000048000 ) ) ; +#1636 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.067853519814894600E-014, -1.000000000000000000 ) ) ; +#1637 = VECTOR ( 'NONE', #4719, 1000.000000000000000 ) ; +#1638 = ADVANCED_FACE ( 'NONE', ( #3485 ), #1050, .T. ) ; +#1639 = EDGE_LOOP ( 'NONE', ( #1893, #4063, #4229, #3306, #94, #30, #2798, #3042, #3416, #1487, #2604, #4962 ) ) ; +#1640 = EDGE_CURVE ( 'NONE', #4476, #3359, #2437, .T. ) ; +#1641 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000212100, 4.200000000000176000, -6.000000000000065700 ) ) ; +#1642 = PLANE ( 'NONE', #946 ) ; +#1643 = CARTESIAN_POINT ( 'NONE', ( 3.150000000000198400, 1.642696450646823300E-013, -7.600000000000023600 ) ) ; +#1644 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999751100, 5.500000000000234500, -3.469446951953614200E-014 ) ) ; +#1645 = VERTEX_POINT ( 'NONE', #4654 ) ; +#1646 = DIRECTION ( 'NONE', ( 6.938893903907228400E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1647 = ORIENTED_EDGE ( 'NONE', *, *, #2218, .F. ) ; +#1648 = ORIENTED_EDGE ( 'NONE', *, *, #2069, .F. ) ; +#1649 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000217000, 4.200000000000189400, -4.250000000000059500 ) ) ; +#1650 = LINE ( 'NONE', #3673, #1082 ) ; +#1651 = VECTOR ( 'NONE', #730, 1000.000000000000000 ) ; +#1652 = FACE_OUTER_BOUND ( 'NONE', #3127, .T. ) ; +#1653 = EDGE_CURVE ( 'NONE', #846, #3970, #3240, .T. ) ; +#1654 = LINE ( 'NONE', #1441, #1766 ) ; +#1655 = LINE ( 'NONE', #1370, #1827 ) ; +#1656 = DIRECTION ( 'NONE', ( 5.374889246202299800E-017, 1.000000000000000000, -2.911889426288178300E-031 ) ) ; +#1657 = DIRECTION ( 'NONE', ( 1.000000000000000000, -7.553458536735556100E-029, -7.281636885445248400E-015 ) ) ; +#1658 = ORIENTED_EDGE ( 'NONE', *, *, #4205, .T. ) ; +#1659 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201240400E-017, 7.281636885445248400E-015 ) ) ; +#1660 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -3.978146840631718600E-016 ) ) ; +#1661 = VECTOR ( 'NONE', #2530, 1000.000000000000000 ) ; +#1662 = VERTEX_POINT ( 'NONE', #3879 ) ; +#1663 = EDGE_CURVE ( 'NONE', #971, #4623, #994, .T. ) ; +#1664 = ADVANCED_FACE ( 'NONE', ( #1915 ), #3063, .F. ) ; +#1665 = EDGE_CURVE ( 'NONE', #1116, #2653, #4457, .T. ) ; +#1666 = VECTOR ( 'NONE', #3537, 1000.000000000000000 ) ; +#1667 = ORIENTED_EDGE ( 'NONE', *, *, #545, .T. ) ; +#1668 = ORIENTED_EDGE ( 'NONE', *, *, #3638, .T. ) ; +#1669 = VECTOR ( 'NONE', #2521, 1000.000000000000000 ) ; +#1670 = LINE ( 'NONE', #3246, #2213 ) ; +#1671 = EDGE_CURVE ( 'NONE', #2701, #3226, #88, .T. ) ; +#1672 = VERTEX_POINT ( 'NONE', #1866 ) ; +#1673 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252400, 1.298089913141610200, -0.08005065776186022500 ) ) ; +#1674 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193567500E-017, -5.629900911267176600E-031 ) ) ; +#1675 = VERTEX_POINT ( 'NONE', #703 ) ; +#1676 = ORIENTED_EDGE ( 'NONE', *, *, #1253, .F. ) ; +#1677 = EDGE_LOOP ( 'NONE', ( #2291, #4179, #4447, #4319 ) ) ; +#1678 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246193567500E-017, 5.629900911267176600E-031 ) ) ; +#1679 = ORIENTED_EDGE ( 'NONE', *, *, #3489, .F. ) ; +#1680 = ORIENTED_EDGE ( 'NONE', *, *, #220, .F. ) ; +#1681 = ORIENTED_EDGE ( 'NONE', *, *, #528, .F. ) ; +#1682 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1683 = AXIS2_PLACEMENT_3D ( 'NONE', #2182, #5025, #131 ) ; +#1684 = FACE_OUTER_BOUND ( 'NONE', #2583, .T. ) ; +#1685 = ORIENTED_EDGE ( 'NONE', *, *, #1905, .T. ) ; +#1686 = ORIENTED_EDGE ( 'NONE', *, *, #3698, .T. ) ; +#1687 = ORIENTED_EDGE ( 'NONE', *, *, #2046, .T. ) ; +#1688 = DIRECTION ( 'NONE', ( -2.639228045337950800E-016, 0.9990482215818578000, -0.04361938736533712400 ) ) ; +#1689 = VERTEX_POINT ( 'NONE', #2651 ) ; +#1690 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000201400, 0.4697791343782781700, -6.595638061263509900 ) ) ; +#1691 = EDGE_CURVE ( 'NONE', #5001, #3043, #2558, .T. ) ; +#1692 = LINE ( 'NONE', #1943, #2511 ) ; +#1693 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000207700, 3.420000000000228200, -5.415000000000077300 ) ) ; +#1694 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002060600, 2.850000000000227500, -6.000000000000043500 ) ) ; +#1695 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000189800, -0.09999999999983200100, -8.182932956421137000 ) ) ; +#1696 = EDGE_CURVE ( 'NONE', #4887, #1972, #1393, .T. ) ; +#1697 = AXIS2_PLACEMENT_3D ( 'NONE', #2787, #2026, #4417 ) ; +#1698 = ORIENTED_EDGE ( 'NONE', *, *, #1312, .T. ) ; +#1699 = DIRECTION ( 'NONE', ( -8.352372291740183800E-015, 1.606225440719266100E-016, -1.000000000000000000 ) ) ; +#1700 = EDGE_LOOP ( 'NONE', ( #336, #265, #827, #903 ) ) ; +#1701 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000189800, 0.3995241107910975100, -8.204742650103805000 ) ) ; +#1702 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252400, 1.298089913141610200, -0.08005065776186022500 ) ) ; +#1703 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.067853519814894600E-014, 1.000000000000000000 ) ) ; +#1704 = ORIENTED_EDGE ( 'NONE', *, *, #2499, .F. ) ; +#1705 = VECTOR ( 'NONE', #2436, 1000.000000000000000 ) ; +#1706 = ADVANCED_FACE ( 'NONE', ( #710 ), #4260, .F. ) ; +#1707 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000241900, -0.09999999999979564100, -1.270808264217946800 ) ) ; +#1708 = LINE ( 'NONE', #1553, #2259 ) ; +#1709 = ORIENTED_EDGE ( 'NONE', *, *, #4747, .F. ) ; +#1710 = DIRECTION ( 'NONE', ( 6.572626369475063900E-015, 0.5000000000000142100, 0.8660254037844304900 ) ) ; +#1711 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000251100, 5.500000000000234500, -7.632783294297951200E-014 ) ) ; +#1712 = ORIENTED_EDGE ( 'NONE', *, *, #3757, .T. ) ; +#1713 = EDGE_CURVE ( 'NONE', #2493, #701, #4139, .T. ) ; +#1714 = DIRECTION ( 'NONE', ( -7.243900229353696500E-015, -9.531447670202232500E-017, 1.000000000000000000 ) ) ; +#1715 = DIRECTION ( 'NONE', ( -7.270030056159898800E-015, -0.04361938736533603500, -0.9990482215818578000 ) ) ; +#1716 = LINE ( 'NONE', #361, #2965 ) ; +#1717 = ORIENTED_EDGE ( 'NONE', *, *, #3606, .T. ) ; +#1718 = CYLINDRICAL_SURFACE ( 'NONE', #1862, 0.2500000000000000000 ) ; +#1719 = ORIENTED_EDGE ( 'NONE', *, *, #4428, .T. ) ; +#1720 = VECTOR ( 'NONE', #4562, 1000.000000000000000 ) ; +#1721 = VECTOR ( 'NONE', #1762, 1000.000000000000000 ) ; +#1722 = EDGE_LOOP ( 'NONE', ( #2126, #987, #4711, #4567 ) ) ; +#1723 = EDGE_CURVE ( 'NONE', #2978, #1662, #1620, .T. ) ; +#1724 = EDGE_CURVE ( 'NONE', #630, #2588, #1510, .T. ) ; +#1725 = VECTOR ( 'NONE', #2359, 1000.000000000000000 ) ; +#1726 = EDGE_LOOP ( 'NONE', ( #151, #45, #3619, #2739 ) ) ; +#1727 = ORIENTED_EDGE ( 'NONE', *, *, #259, .F. ) ; +#1728 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193567500E-017, -5.629900911267176600E-031 ) ) ; +#1729 = EDGE_CURVE ( 'NONE', #4496, #4113, #4068, .T. ) ; +#1730 = ADVANCED_FACE ( 'NONE', ( #4732 ), #1542, .F. ) ; +#1731 = ORIENTED_EDGE ( 'NONE', *, *, #250, .F. ) ; +#1732 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201356800E-017, -7.391429510507072300E-015 ) ) ; +#1733 = ORIENTED_EDGE ( 'NONE', *, *, #3094, .T. ) ; +#1734 = CARTESIAN_POINT ( 'NONE', ( 1.142820323027793600, 3.250000000000227400, -0.9500000000000444800 ) ) ; +#1735 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000242700, 2.257084401334521500E-013, -1.170808264217958000 ) ) ; +#1736 = VECTOR ( 'NONE', #1480, 1000.000000000000000 ) ; +#1737 = ORIENTED_EDGE ( 'NONE', *, *, #2979, .T. ) ; +#1738 = ORIENTED_EDGE ( 'NONE', *, *, #574, .F. ) ; +#1739 = VERTEX_POINT ( 'NONE', #2333 ) ; +#1740 = DIRECTION ( 'NONE', ( 5.374889246195752200E-017, 1.000000000000000000, -7.826578390373814900E-015 ) ) ; +#1741 = VERTEX_POINT ( 'NONE', #5154 ) ; +#1742 = ORIENTED_EDGE ( 'NONE', *, *, #839, .F. ) ; +#1743 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999792100, 3.700000000000172900, -6.000000000000021300 ) ) ; +#1744 = LINE ( 'NONE', #1254, #1272 ) ; +#1745 = DIRECTION ( 'NONE', ( -7.395763429917407300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1746 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.606225440719261700E-016, -1.000000000000000000 ) ) ; +#1747 = VECTOR ( 'NONE', #4870, 1000.000000000000000 ) ; +#1748 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000239600, 3.350000000000227500, -1.350000000000045400 ) ) ; +#1749 = EDGE_CURVE ( 'NONE', #4181, #1570, #1422, .T. ) ; +#1750 = ADVANCED_FACE ( 'NONE', ( #4167 ), #2295, .F. ) ; +#1751 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000201400, -0.02974497641265105500, -6.573828367580842000 ) ) ; +#1752 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000212100, 2.550000000000228500, -5.415000000000077300 ) ) ; +#1753 = ORIENTED_EDGE ( 'NONE', *, *, #1409, .F. ) ; +#1754 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999750700, 2.550000000000214300, 1.040834085586084300E-014 ) ) ; +#1755 = EDGE_CURVE ( 'NONE', #2127, #2541, #5123, .T. ) ; +#1756 = ORIENTED_EDGE ( 'NONE', *, *, #3384, .T. ) ; +#1757 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252000, -6.800904536500381000E-016, -2.528060375981901600E-014 ) ) ; +#1758 = VERTEX_POINT ( 'NONE', #5120 ) ; +#1759 = LINE ( 'NONE', #4088, #2643 ) ; +#1760 = FACE_OUTER_BOUND ( 'NONE', #2793, .T. ) ; +#1761 = ORIENTED_EDGE ( 'NONE', *, *, #2181, .F. ) ; +#1762 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1763 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000252000, 5.500000000000234500, -8.673617379884035500E-014 ) ) ; +#1764 = VECTOR ( 'NONE', #3564, 1000.000000000000000 ) ; +#1765 = DIRECTION ( 'NONE', ( -5.374889246193779500E-017, -1.000000000000000000, 1.024619699438383000E-014 ) ) ; +#1766 = VECTOR ( 'NONE', #3884, 1000.000000000000000 ) ; +#1767 = LINE ( 'NONE', #2734, #732 ) ; +#1768 = DIRECTION ( 'NONE', ( 7.395763429917407300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1769 = DIRECTION ( 'NONE', ( -7.409566345325548800E-015, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1770 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4484 ), #2307 ) ; +#1771 = VECTOR ( 'NONE', #2629, 1000.000000000000000 ) ; +#1772 = EDGE_LOOP ( 'NONE', ( #1239, #252, #2865, #214 ) ) ; +#1773 = VECTOR ( 'NONE', #16, 1000.000000000000000 ) ; +#1774 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999779100, 4.200000000000189400, -4.250000000000032900 ) ) ; +#1775 = VECTOR ( 'NONE', #3988, 1000.000000000000000 ) ; +#1776 = FACE_OUTER_BOUND ( 'NONE', #1639, .T. ) ; +#1777 = ORIENTED_EDGE ( 'NONE', *, *, #1320, .F. ) ; +#1778 = ADVANCED_FACE ( 'NONE', ( #4049 ), #3504, .F. ) ; +#1779 = EDGE_CURVE ( 'NONE', #5118, #2545, #3093, .T. ) ; +#1780 = VECTOR ( 'NONE', #2830, 1000.000000000000000 ) ; +#1781 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000245800, 2.350550309948573600E-013, -0.8000000000000506700 ) ) ; +#1782 = FACE_OUTER_BOUND ( 'NONE', #310, .T. ) ; +#1783 = DIRECTION ( 'NONE', ( 6.938893903907228400E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1784 = ORIENTED_EDGE ( 'NONE', *, *, #865, .F. ) ; +#1785 = VERTEX_POINT ( 'NONE', #4403 ) ; +#1786 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000245800, 0.4000000000002260600, -0.8000000000000298000 ) ) ; +#1787 = ORIENTED_EDGE ( 'NONE', *, *, #3325, .T. ) ; +#1788 = EDGE_CURVE ( 'NONE', #4943, #4314, #2142, .T. ) ; +#1789 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999776400, 0.7000000000001970200, -4.849999999999995200 ) ) ; +#1790 = DIRECTION ( 'NONE', ( 5.374889246201352500E-017, 1.000000000000000000, -3.975140932691230600E-031 ) ) ; +#1791 = VERTEX_POINT ( 'NONE', #3101 ) ; +#1792 = ORIENTED_EDGE ( 'NONE', *, *, #5168, .F. ) ; +#1793 = EDGE_LOOP ( 'NONE', ( #3295, #1001, #3800, #1449, #579, #1676 ) ) ; +#1794 = ORIENTED_EDGE ( 'NONE', *, *, #589, .T. ) ; +#1795 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000218800, 4.200000000000188500, -4.250000000000066600 ) ) ; +#1796 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 2.034402214832330900E-013, -3.000000000000030200 ) ) ; +#1797 = LINE ( 'NONE', #4516, #2290 ) ; +#1798 = ORIENTED_EDGE ( 'NONE', *, *, #3985, .F. ) ; +#1799 = ORIENTED_EDGE ( 'NONE', *, *, #4014, .F. ) ; +#1800 = ORIENTED_EDGE ( 'NONE', *, *, #4658, .F. ) ; +#1801 = EDGE_CURVE ( 'NONE', #889, #2978, #1536, .T. ) ; +#1802 = VECTOR ( 'NONE', #2516, 1000.000000000000000 ) ; +#1803 = ORIENTED_EDGE ( 'NONE', *, *, #3401, .F. ) ; +#1804 = ORIENTED_EDGE ( 'NONE', *, *, #52, .T. ) ; +#1805 = VERTEX_POINT ( 'NONE', #415 ) ; +#1806 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#1807 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1225 ) ) ; +#1808 = FACE_OUTER_BOUND ( 'NONE', #634, .T. ) ; +#1809 = ORIENTED_EDGE ( 'NONE', *, *, #2054, .T. ) ; +#1810 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#1811 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002066100, 2.750000000000227400, -5.900000000000043900 ) ) ; +#1812 = VECTOR ( 'NONE', #2080, 1000.000000000000000 ) ; +#1813 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999750600, 0.4000000000002274500, -3.122502256758252800E-014 ) ) ; +#1814 = EDGE_CURVE ( 'NONE', #3177, #5009, #5114, .T. ) ; +#1815 = PLANE ( 'NONE', #746 ) ; +#1816 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 8.365839057930752800E-015 ) ) ; +#1817 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999762700, 3.350000000000234600, -1.650000000000022800 ) ) ; +#1818 = EDGE_CURVE ( 'NONE', #2991, #643, #2031, .T. ) ; +#1819 = ORIENTED_EDGE ( 'NONE', *, *, #4278, .F. ) ; +#1820 = VERTEX_POINT ( 'NONE', #779 ) ; +#1821 = VECTOR ( 'NONE', #3816, 1000.000000000000000 ) ; +#1822 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1823 = ORIENTED_EDGE ( 'NONE', *, *, #3898, .F. ) ; +#1824 = EDGE_LOOP ( 'NONE', ( #721, #4134, #2773, #2000 ) ) ; +#1825 = EDGE_CURVE ( 'NONE', #4753, #4549, #2590, .T. ) ; +#1826 = LINE ( 'NONE', #4315, #1295 ) ; +#1827 = VECTOR ( 'NONE', #2958, 1000.000000000000000 ) ; +#1828 = VECTOR ( 'NONE', #3882, 1000.000000000000000 ) ; +#1829 = ADVANCED_FACE ( 'NONE', ( #2081 ), #3610, .F. ) ; +#1830 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000238300, 2.800000000000218300, -1.650000000000055900 ) ) ; +#1831 = LINE ( 'NONE', #1904, #2722 ) ; +#1832 = VERTEX_POINT ( 'NONE', #3958 ) ; +#1833 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000230700, 2.100000000000236300, -2.900000000000021200 ) ) ; +#1834 = VECTOR ( 'NONE', #1710, 1000.000000000000200 ) ; +#1835 = PLANE ( 'NONE', #4092 ) ; +#1836 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3770 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #236, #1066, #651 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1837 = VECTOR ( 'NONE', #1857, 1000.000000000000000 ) ; +#1838 = LINE ( 'NONE', #1252, #1609 ) ; +#1839 = ORIENTED_EDGE ( 'NONE', *, *, #1200, .F. ) ; +#1840 = VERTEX_POINT ( 'NONE', #1580 ) ; +#1841 = ORIENTED_EDGE ( 'NONE', *, *, #2278, .T. ) ; +#1842 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201352500E-017, -7.395763429917407300E-015 ) ) ; +#1843 = VERTEX_POINT ( 'NONE', #3628 ) ; +#1844 = VERTEX_POINT ( 'NONE', #3548 ) ; +#1845 = EDGE_CURVE ( 'NONE', #1483, #649, #3222, .T. ) ; +#1846 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000212000, 4.705000000000227400, -5.415000000000084400 ) ) ; +#1847 = VECTOR ( 'NONE', #1293, 1000.000000000000000 ) ; +#1848 = ORIENTED_EDGE ( 'NONE', *, *, #4348, .T. ) ; +#1849 = VERTEX_POINT ( 'NONE', #1251 ) ; +#1850 = ORIENTED_EDGE ( 'NONE', *, *, #1625, .F. ) ; +#1851 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 5.500000000000235400, -2.428612866367529900E-014 ) ) ; +#1852 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000186700, 0.2821715336867768300, -8.600000000000013900 ) ) ; +#1853 = AXIS2_PLACEMENT_3D ( 'NONE', #2237, #729, #5062 ) ; +#1854 = ORIENTED_EDGE ( 'NONE', *, *, #3017, .T. ) ; +#1855 = ORIENTED_EDGE ( 'NONE', *, *, #1083, .F. ) ; +#1856 = ORIENTED_EDGE ( 'NONE', *, *, #3865, .F. ) ; +#1857 = DIRECTION ( 'NONE', ( 8.156285340228848500E-015, 7.282397625204327700E-017, -1.000000000000000000 ) ) ; +#1858 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002213700, 4.200000000000189400, -4.250000000000052400 ) ) ; +#1859 = LINE ( 'NONE', #4660, #113 ) ; +#1860 = VECTOR ( 'NONE', #1128, 1000.000000000000100 ) ; +#1861 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002060600, 2.850000000000227500, -6.000000000000043500 ) ) ; +#1862 = AXIS2_PLACEMENT_3D ( 'NONE', #4208, #578, #2608 ) ; +#1863 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000230200, -0.09999999999979557200, -2.700000000000024200 ) ) ; +#1864 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#1865 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 0.1000000000002270000, -2.910707410969268500E-014 ) ) ; +#1866 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000229900, 4.705000000000228300, -2.715000000000077100 ) ) ; +#1867 = EDGE_CURVE ( 'NONE', #3970, #991, #4057, .T. ) ; +#1868 = ORIENTED_EDGE ( 'NONE', *, *, #2405, .F. ) ; +#1869 = ADVANCED_FACE ( 'NONE', ( #2476 ), #4432, .F. ) ; +#1870 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000218800, 4.200000000000189400, -4.250000000000066600 ) ) ; +#1871 = ORIENTED_EDGE ( 'NONE', *, *, #1640, .F. ) ; +#1872 = DIRECTION ( 'NONE', ( 8.365839057930752800E-015, -6.258868353590623600E-015, -1.000000000000000000 ) ) ; +#1873 = EDGE_LOOP ( 'NONE', ( #744, #1314, #3182, #3201, #3365, #3477, #1984, #1928 ) ) ; +#1874 = SURFACE_STYLE_FILL_AREA ( #3173 ) ; +#1875 = EDGE_CURVE ( 'NONE', #1662, #371, #1894, .T. ) ; +#1876 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -6.637856049494163000E-017, 1.000000000000000000 ) ) ; +#1877 = EDGE_CURVE ( 'NONE', #3604, #2120, #871, .T. ) ; +#1878 = AXIS2_PLACEMENT_3D ( 'NONE', #4963, #604, #1732 ) ; +#1879 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246202299800E-017, 0.0000000000000000000 ) ) ; +#1880 = ADVANCED_FACE ( 'NONE', ( #376 ), #3179, .F. ) ; +#1881 = FACE_OUTER_BOUND ( 'NONE', #538, .T. ) ; +#1882 = LINE ( 'NONE', #4368, #3270 ) ; +#1883 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1884 = DIRECTION ( 'NONE', ( 1.818200438212216100E-015, -0.9701425001453319900, -0.2425356250363325500 ) ) ; +#1885 = LINE ( 'NONE', #3751, #2071 ) ; +#1886 = VERTEX_POINT ( 'NONE', #2016 ) ; +#1887 = EDGE_CURVE ( 'NONE', #943, #4181, #3922, .T. ) ; +#1888 = ORIENTED_EDGE ( 'NONE', *, *, #4878, .T. ) ; +#1889 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#1890 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201273600E-017, 7.390057102693798800E-015 ) ) ; +#1891 = VECTOR ( 'NONE', #2886, 1000.000000000000000 ) ; +#1892 = ORIENTED_EDGE ( 'NONE', *, *, #2535, .F. ) ; +#1893 = ORIENTED_EDGE ( 'NONE', *, *, #314, .F. ) ; +#1894 = CIRCLE ( 'NONE', #907, 0.5999999999999963100 ) ; +#1895 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000244100, 2.267192902524094400E-013, -1.044399185738740000 ) ) ; +#1896 = VECTOR ( 'NONE', #239, 1000.000000000000000 ) ; +#1897 = VECTOR ( 'NONE', #4606, 1000.000000000000000 ) ; +#1898 = ORIENTED_EDGE ( 'NONE', *, *, #4205, .F. ) ; +#1899 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000189800, -0.09999999999983200100, -8.182932956421137000 ) ) ; +#1900 = VECTOR ( 'NONE', #4823, 1000.000000000000000 ) ; +#1901 = VECTOR ( 'NONE', #668, 1000.000000000000000 ) ; +#1902 = PLANE ( 'NONE', #4060 ) ; +#1903 = ORIENTED_EDGE ( 'NONE', *, *, #2964, .F. ) ; +#1904 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000246600, 5.500000000000234500, -0.8000000000000611100 ) ) ; +#1905 = EDGE_CURVE ( 'NONE', #3250, #4413, #986, .T. ) ; +#1906 = PLANE ( 'NONE', #3379 ) ; +#1907 = ADVANCED_FACE ( 'NONE', ( #3278 ), #289, .F. ) ; +#1908 = CARTESIAN_POINT ( 'NONE', ( -3.950000000000212000, 4.705000000000227400, -5.415000000000084400 ) ) ; +#1909 = VERTEX_POINT ( 'NONE', #1456 ) ; +#1910 = VERTEX_POINT ( 'NONE', #3841 ) ; +#1911 = EDGE_CURVE ( 'NONE', #1550, #5175, #978, .T. ) ; +#1912 = EDGE_CURVE ( 'NONE', #3226, #406, #128, .T. ) ; +#1913 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999765300, 0.7000000000002359900, -2.000000000000045300 ) ) ; +#1914 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#1915 = FACE_OUTER_BOUND ( 'NONE', #929, .T. ) ; +#1916 = ORIENTED_EDGE ( 'NONE', *, *, #3790, .F. ) ; +#1917 = ORIENTED_EDGE ( 'NONE', *, *, #2964, .T. ) ; +#1918 = LINE ( 'NONE', #2890, #1119 ) ; +#1919 = ORIENTED_EDGE ( 'NONE', *, *, #713, .T. ) ; +#1920 = ORIENTED_EDGE ( 'NONE', *, *, #62, .F. ) ; +#1921 = ORIENTED_EDGE ( 'NONE', *, *, #3119, .F. ) ; +#1922 = EDGE_CURVE ( 'NONE', #1434, #187, #4231, .T. ) ; +#1923 = DIRECTION ( 'NONE', ( 5.953547734519275600E-015, 0.7071067811865476800, 0.7071067811865474600 ) ) ; +#1924 = SURFACE_STYLE_USAGE ( .BOTH. , #2270 ) ; +#1925 = AXIS2_PLACEMENT_3D ( 'NONE', #1811, #731, #5096 ) ; +#1926 = CARTESIAN_POINT ( 'NONE', ( 3.750000000000230000, 3.420000000000227700, -2.715000000000083300 ) ) ; +#1927 = VECTOR ( 'NONE', #770, 1000.000000000000000 ) ; +#1928 = ORIENTED_EDGE ( 'NONE', *, *, #1524, .T. ) ; +#1929 = DIRECTION ( 'NONE', ( 1.000000000000000000, -8.086446079014292800E-029, -7.281636885445248400E-015 ) ) ; +#1930 = VECTOR ( 'NONE', #4529, 1000.000000000000000 ) ; +#1931 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002066100, 3.350000000000227900, -5.900000000000043900 ) ) ; +#1932 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002283100, 5.000000000000188300, -4.250000000000056000 ) ) ; +#1933 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000242900, 3.350000000000211500, -0.9500000000000445900 ) ) ; +#1934 = ADVANCED_FACE ( 'NONE', ( #2852 ), #3823, .F. ) ; +#1935 = ORIENTED_EDGE ( 'NONE', *, *, #4053, .F. ) ; +#1936 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#1937 = ORIENTED_EDGE ( 'NONE', *, *, #4889, .F. ) ; +#1938 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000252000, 5.500000000000234500, -8.673617379884035500E-014 ) ) ; +#1939 = ORIENTED_EDGE ( 'NONE', *, *, #188, .F. ) ; +#1940 = LINE ( 'NONE', #4138, #4212 ) ; +#1941 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 2.100000000000236300, -3.828702780027107000E-014 ) ) ; +#1942 = EDGE_CURVE ( 'NONE', #4388, #3340, #3662, .T. ) ; +#1943 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002429200, 2.850000000000227500, -0.9500000000000409200 ) ) ; +#1944 = DIRECTION ( 'NONE', ( -8.374527125405327500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1945 = ORIENTED_EDGE ( 'NONE', *, *, #737, .T. ) ; +#1946 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000212100, 4.705000000000227400, -5.415000000000077300 ) ) ; +#1947 = FACE_OUTER_BOUND ( 'NONE', #2549, .T. ) ; +#1948 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000244900, -0.09999999999979568300, -0.9443991857387211700 ) ) ; +#1949 = LINE ( 'NONE', #1754, #3070 ) ; +#1950 = FACE_OUTER_BOUND ( 'NONE', #81, .T. ) ; +#1951 = CIRCLE ( 'NONE', #4035, 0.5999999999999963100 ) ; +#1952 = ORIENTED_EDGE ( 'NONE', *, *, #4152, .T. ) ; +#1953 = DIRECTION ( 'NONE', ( 5.374889246193463900E-017, 1.000000000000000000, -1.067853519814894600E-014 ) ) ; +#1954 = EDGE_CURVE ( 'NONE', #4881, #2299, #741, .T. ) ; +#1955 = AXIS2_PLACEMENT_3D ( 'NONE', #3712, #4934, #957 ) ; +#1956 = PLANE ( 'NONE', #4375 ) ; +#1957 = VECTOR ( 'NONE', #3747, 1000.000000000000000 ) ; +#1958 = VERTEX_POINT ( 'NONE', #692 ) ; +#1959 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000244900, 0.4000000000002211200, -0.8000000000000333500 ) ) ; +#1960 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000187000, -0.01754293278778023400, -8.586914183790412400 ) ) ; +#1961 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201356800E-017, -7.391429510507072300E-015 ) ) ; +#1962 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999770600, 0.4000000000002361100, -2.999999999999983600 ) ) ; +#1963 = LINE ( 'NONE', #3818, #4052 ) ; +#1964 = ORIENTED_EDGE ( 'NONE', *, *, #1729, .T. ) ; +#1965 = VECTOR ( 'NONE', #1396, 1000.000000000000000 ) ; +#1966 = ADVANCED_FACE ( 'NONE', ( #504 ), #4263, .T. ) ; +#1967 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000236100, 0.07689437438255455900, -2.000000000000015500 ) ) ; +#1968 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002188200, 2.850000000000227500, -4.250000000000040900 ) ) ; +#1969 = LINE ( 'NONE', #4071, #4118 ) ; +#1970 = VECTOR ( 'NONE', #4129, 1000.000000000000000 ) ; +#1971 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000251100, -0.09999999999979573800, -0.2000000000000242700 ) ) ; +#1972 = VERTEX_POINT ( 'NONE', #4659 ) ; +#1973 = FACE_OUTER_BOUND ( 'NONE', #3050, .T. ) ; +#1974 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000244900, 2.550000000000226800, -0.8000000000000575500 ) ) ; +#1975 = AXIS2_PLACEMENT_3D ( 'NONE', #1057, #3035, #1439 ) ; +#1976 = DIRECTION ( 'NONE', ( -8.365839057930752800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1977 = ORIENTED_EDGE ( 'NONE', *, *, #5022, .F. ) ; +#1978 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000218800, 4.200000000000189400, -4.250000000000059500 ) ) ; +#1979 = DIRECTION ( 'NONE', ( 8.352372291740183800E-015, 1.606225440719266100E-016, -1.000000000000000000 ) ) ; +#1980 = EDGE_CURVE ( 'NONE', #3463, #15, #69, .T. ) ; +#1981 = EDGE_LOOP ( 'NONE', ( #1317, #5107, #4000, #4012 ) ) ; +#1982 = SURFACE_SIDE_STYLE ('',( #1874 ) ) ; +#1983 = FACE_OUTER_BOUND ( 'NONE', #1299, .T. ) ; +#1984 = ORIENTED_EDGE ( 'NONE', *, *, #2833, .T. ) ; +#1985 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 1.298089913141610200, -3.660576115180942800E-014 ) ) ; +#1986 = ORIENTED_EDGE ( 'NONE', *, *, #2179, .F. ) ; +#1987 = EDGE_CURVE ( 'NONE', #3594, #379, #4294, .T. ) ; +#1988 = VECTOR ( 'NONE', #1451, 1000.000000000000000 ) ; +#1989 = VERTEX_POINT ( 'NONE', #3018 ) ; +#1990 = DIRECTION ( 'NONE', ( -8.365839057930752800E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1991 = ORIENTED_EDGE ( 'NONE', *, *, #2527, .F. ) ; +#1992 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000234100, 4.355000000000233100, -0.07500000000005266300 ) ) ; +#1993 = ADVANCED_FACE ( 'NONE', ( #4243 ), #1815, .F. ) ; +#1994 = EDGE_CURVE ( 'NONE', #3973, #255, #3843, .T. ) ; +#1995 = VECTOR ( 'NONE', #3512, 1000.000000000000000 ) ; +#1996 = AXIS2_PLACEMENT_3D ( 'NONE', #1316, #480, #4494 ) ; +#1997 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999763500, 0.4000000000002106300, -2.999999999999976500 ) ) ; +#1998 = DIRECTION ( 'NONE', ( 0.2515875261947374000, 0.2347343575773418500, -0.9389374303093709400 ) ) ; +#1999 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000218800, 4.200000000000189400, -4.250000000000066600 ) ) ; +#2000 = ORIENTED_EDGE ( 'NONE', *, *, #1215, .T. ) ; +#2001 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#2002 = VECTOR ( 'NONE', #2167, 1000.000000000000000 ) ; +#2003 = AXIS2_PLACEMENT_3D ( 'NONE', #3789, #1411, #4202 ) ; +#2004 = ORIENTED_EDGE ( 'NONE', *, *, #2989, .T. ) ; +#2005 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#2006 = DIRECTION ( 'NONE', ( -2.639228045337871400E-016, 0.9990482215818578000, -0.04361938736533603500 ) ) ; +#2007 = DIRECTION ( 'NONE', ( 5.374889246201352500E-017, -1.000000000000000000, 3.939695727955241200E-031 ) ) ; +#2008 = VECTOR ( 'NONE', #1936, 1000.000000000000000 ) ; +#2009 = LINE ( 'NONE', #1005, #4283 ) ; +#2010 = EDGE_CURVE ( 'NONE', #374, #4580, #1486, .T. ) ; +#2011 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002429200, 2.850000000000227500, -0.9500000000000409200 ) ) ; +#2012 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.245087481933969600E-029, -8.374527125405327500E-015 ) ) ; +#2013 = VECTOR ( 'NONE', #322, 1000.000000000000000 ) ; +#2014 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 1.710477983563044100, -3.919373068745948000E-014 ) ) ; +#2015 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 1.552577510999242300E-013, -7.599999999999971200 ) ) ; +#2016 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999750700, 0.7000000000002332100, -0.1599999999999891500 ) ) ; +#2017 = VECTOR ( 'NONE', #3389, 1000.000000000000000 ) ; +#2018 = ORIENTED_EDGE ( 'NONE', *, *, #4987, .F. ) ; +#2019 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000215600, 0.7000000000001840300, -4.850000000000028100 ) ) ; +#2020 = EDGE_CURVE ( 'NONE', #2299, #1183, #2347, .T. ) ; +#2021 = ORIENTED_EDGE ( 'NONE', *, *, #821, .T. ) ; +#2022 = DIRECTION ( 'NONE', ( -8.156285340228848500E-015, 7.282397625204327700E-017, -1.000000000000000000 ) ) ; +#2023 = VECTOR ( 'NONE', #3461, 1000.000000000000000 ) ; +#2024 = CYLINDRICAL_SURFACE ( 'NONE', #3057, 0.2500000000000000000 ) ; +#2025 = EDGE_LOOP ( 'NONE', ( #3669, #4925, #2209, #4888 ) ) ; +#2026 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#2027 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000230300, 0.4000000000002211200, -2.900000000000021200 ) ) ; +#2028 = EDGE_LOOP ( 'NONE', ( #1704, #624, #4985, #2430 ) ) ; +#2029 = LINE ( 'NONE', #405, #1900 ) ; +#2030 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2031 = LINE ( 'NONE', #435, #76 ) ; +#2032 = PLANE ( 'NONE', #3658 ) ; +#2033 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, 1.000000000000000000, -3.913799179032202200E-031 ) ) ; +#2034 = VERTEX_POINT ( 'NONE', #2315 ) ; +#2035 = CARTESIAN_POINT ( 'NONE', ( -1.142820323027793600, 3.250000000000227400, -0.9500000000000444800 ) ) ; +#2036 = VERTEX_POINT ( 'NONE', #1895 ) ; +#2037 = STYLED_ITEM ( 'NONE', ( #3652 ), #4564 ) ; +#2038 = ORIENTED_EDGE ( 'NONE', *, *, #4756, .T. ) ; +#2039 = ADVANCED_FACE ( 'NONE', ( #2658 ), #3899, .F. ) ; +#2040 = VECTOR ( 'NONE', #1682, 1000.000000000000000 ) ; +#2041 = EDGE_LOOP ( 'NONE', ( #4194, #4034, #2875, #788 ) ) ; +#2042 = ORIENTED_EDGE ( 'NONE', *, *, #427, .T. ) ; +#2043 = ORIENTED_EDGE ( 'NONE', *, *, #2634, .T. ) ; +#2044 = PLANE ( 'NONE', #2597 ) ; +#2045 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000246300, 4.705000000000227400, -0.8000000000000611100 ) ) ; +#2046 = EDGE_CURVE ( 'NONE', #1741, #337, #1545, .T. ) ; +#2047 = LINE ( 'NONE', #1099, #4255 ) ; +#2048 = EDGE_LOOP ( 'NONE', ( #3446, #4334, #4566, #3531 ) ) ; +#2049 = ORIENTED_EDGE ( 'NONE', *, *, #3366, .F. ) ; +#2050 = VECTOR ( 'NONE', #2320, 1000.000000000000000 ) ; +#2051 = EDGE_CURVE ( 'NONE', #61, #1098, #2, .T. ) ; +#2052 = AXIS2_PLACEMENT_3D ( 'NONE', #1318, #1361, #2132 ) ; +#2053 = LINE ( 'NONE', #3210, #3755 ) ; +#2054 = EDGE_CURVE ( 'NONE', #1570, #4113, #3286, .T. ) ; +#2055 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 1.710477983563044100, -3.919373068745948000E-014 ) ) ; +#2056 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.037329745435896800E-014 ) ) ; +#2057 = DIRECTION ( 'NONE', ( -5.374889246201249000E-017, 1.000000000000000000, -3.910042104196375400E-031 ) ) ; +#2058 = ORIENTED_EDGE ( 'NONE', *, *, #3567, .F. ) ; +#2059 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000206700, 2.750000000000227400, -5.900000000000047400 ) ) ; +#2060 = ORIENTED_EDGE ( 'NONE', *, *, #4339, .F. ) ; +#2061 = ORIENTED_EDGE ( 'NONE', *, *, #1436, .F. ) ; +#2062 = LINE ( 'NONE', #2220, #1019 ) ; +#2063 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1225 ), #167 ) ; +#2064 = VECTOR ( 'NONE', #4461, 1000.000000000000000 ) ; +#2065 = VERTEX_POINT ( 'NONE', #1335 ) ; +#2066 = CARTESIAN_POINT ( 'NONE', ( 3.150000000000208600, 1.723625529189615200E-013, -6.000000000000036400 ) ) ; +#2067 = ORIENTED_EDGE ( 'NONE', *, *, #4357, .F. ) ; +#2068 = LINE ( 'NONE', #4449, #1022 ) ; +#2069 = EDGE_CURVE ( 'NONE', #1185, #1843, #2088, .T. ) ; +#2070 = FACE_OUTER_BOUND ( 'NONE', #1824, .T. ) ; +#2071 = VECTOR ( 'NONE', #1444, 1000.000000000000000 ) ; +#2072 = ORIENTED_EDGE ( 'NONE', *, *, #1875, .F. ) ; +#2073 = PLANE ( 'NONE', #4535 ) ; +#2074 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252400, 1.710477983563044100, -0.08005065776186022500 ) ) ; +#2075 = VECTOR ( 'NONE', #1575, 1000.000000000000000 ) ; +#2076 = ORIENTED_EDGE ( 'NONE', *, *, #5158, .T. ) ; +#2077 = EDGE_CURVE ( 'NONE', #2162, #659, #1432, .T. ) ; +#2078 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000202300, 2.750000000000227400, -6.500000000000048000 ) ) ; +#2079 = EDGE_CURVE ( 'NONE', #1098, #5095, #2784, .T. ) ; +#2080 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#2081 = FACE_OUTER_BOUND ( 'NONE', #4815, .T. ) ; +#2082 = PLANE ( 'NONE', #1321 ) ; +#2083 = LINE ( 'NONE', #1519, #1600 ) ; +#2084 = ORIENTED_EDGE ( 'NONE', *, *, #2634, .F. ) ; +#2085 = VECTOR ( 'NONE', #4264, 1000.000000000000000 ) ; +#2086 = CLOSED_SHELL ( 'NONE', ( #2984, #269, #2193, #2782, #5110, #2934, #4789, #4137, #1829, #3404, #3534, #687, #68, #144, #2707, #1966, #5080, #3653, #3540, #1778, #3143 ) ) ; +#2087 = VECTOR ( 'NONE', #185, 1000.000000000000000 ) ; +#2088 = LINE ( 'NONE', #2952, #1039 ) ; +#2089 = EDGE_CURVE ( 'NONE', #2065, #3682, #2486, .T. ) ; +#2090 = ADVANCED_FACE ( 'NONE', ( #683 ), #4927, .T. ) ; +#2091 = VECTOR ( 'NONE', #2384, 1000.000000000000100 ) ; +#2092 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.024619699438383000E-014, 1.000000000000000000 ) ) ; +#2093 = DIRECTION ( 'NONE', ( -5.374889246201249000E-017, -1.000000000000000000, 3.913799179032202200E-031 ) ) ; +#2094 = CARTESIAN_POINT ( 'NONE', ( -3.750000000000207400, 3.420000000000228200, -5.415000000000082600 ) ) ; +#2095 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#2096 = EDGE_LOOP ( 'NONE', ( #2363, #2272, #1850, #1945 ) ) ; +#2097 = ORIENTED_EDGE ( 'NONE', *, *, #2089, .F. ) ; +#2098 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000250700, 2.550000000000235200, -4.857225732735059900E-014 ) ) ; +#2099 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000240100, 3.350000000000216800, -1.650000000000061900 ) ) ; +#2100 = VERTEX_POINT ( 'NONE', #2548 ) ; +#2101 = CARTESIAN_POINT ( 'NONE', ( 3.750000000000230000, 3.420000000000227700, -2.715000000000083300 ) ) ; +#2102 = ORIENTED_EDGE ( 'NONE', *, *, #5136, .T. ) ; +#2103 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1586 ) ) ; +#2104 = LINE ( 'NONE', #4424, #2500 ) ; +#2105 = ORIENTED_EDGE ( 'NONE', *, *, #2797, .F. ) ; +#2106 = ORIENTED_EDGE ( 'NONE', *, *, #3908, .F. ) ; +#2107 = CARTESIAN_POINT ( 'NONE', ( -3.750000000000230000, 4.705000000000228300, -2.715000000000083300 ) ) ; +#2108 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, 1.000000000000000000, -3.923442857790347700E-031 ) ) ; +#2109 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000246300, 4.705000000000227400, -0.8000000000000611100 ) ) ; +#2110 = VECTOR ( 'NONE', #1522, 1000.000000000000100 ) ; +#2111 = ORIENTED_EDGE ( 'NONE', *, *, #4145, .F. ) ; +#2112 = DIRECTION ( 'NONE', ( 2.639228045337951300E-016, 0.9990482215818576900, -0.04361938736533713100 ) ) ; +#2113 = EDGE_CURVE ( 'NONE', #3028, #4089, #3602, .T. ) ; +#2114 = VECTOR ( 'NONE', #4964, 1000.000000000000000 ) ; +#2115 = LINE ( 'NONE', #4354, #3944 ) ; +#2116 = ADVANCED_FACE ( 'NONE', ( #4367 ), #4188, .F. ) ; +#2117 = CARTESIAN_POINT ( 'NONE', ( 3.750000000000230000, 4.705000000000227400, -2.715000000000082900 ) ) ; +#2118 = EDGE_CURVE ( 'NONE', #2794, #4413, #387, .T. ) ; +#2119 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999772400, 2.037325616912645200E-013, -2.999999999999976500 ) ) ; +#2120 = VERTEX_POINT ( 'NONE', #2121 ) ; +#2121 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999763600, 3.100000000000214600, -1.900000000000020300 ) ) ; +#2122 = AXIS2_PLACEMENT_3D ( 'NONE', #1757, #2153, #2543 ) ; +#2123 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000189800, 0.3995241107910975100, -8.204742650103805000 ) ) ; +#2124 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#2125 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201240400E-017, 7.281636885445248400E-015 ) ) ; +#2126 = ORIENTED_EDGE ( 'NONE', *, *, #2246, .T. ) ; +#2127 = VERTEX_POINT ( 'NONE', #4173 ) ; +#2128 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 7.826578390373814900E-015, 1.000000000000000000 ) ) ; +#2129 = VECTOR ( 'NONE', #3791, 1000.000000000000000 ) ; +#2130 = AXIS2_PLACEMENT_3D ( 'NONE', #627, #3795, #1745 ) ; +#2131 = FACE_OUTER_BOUND ( 'NONE', #1477, .T. ) ; +#2132 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.032988979366341300E-014, 1.000000000000000000 ) ) ; +#2133 = FACE_OUTER_BOUND ( 'NONE', #623, .T. ) ; +#2134 = ORIENTED_EDGE ( 'NONE', *, *, #3192, .T. ) ; +#2135 = ORIENTED_EDGE ( 'NONE', *, *, #1801, .T. ) ; +#2136 = EDGE_CURVE ( 'NONE', #3233, #1820, #628, .T. ) ; +#2137 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#2138 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000241300, 2.550000000000226800, -0.8000000000000541100 ) ) ; +#2139 = LINE ( 'NONE', #1644, #4491 ) ; +#2140 = ORIENTED_EDGE ( 'NONE', *, *, #3056, .T. ) ; +#2141 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000239600, 0.5696839565364602000, -1.350000000000052500 ) ) ; +#2142 = LINE ( 'NONE', #1221, #2273 ) ; +#2143 = LINE ( 'NONE', #1383, #3914 ) ; +#2144 = ORIENTED_EDGE ( 'NONE', *, *, #1496, .F. ) ; +#2145 = EDGE_CURVE ( 'NONE', #1352, #1046, #512, .T. ) ; +#2146 = EDGE_CURVE ( 'NONE', #934, #500, #5056, .T. ) ; +#2147 = AXIS2_PLACEMENT_3D ( 'NONE', #1413, #2190, #553 ) ; +#2148 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000228500, 2.100000000000236300, -2.900000000000020800 ) ) ; +#2149 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000244000, 2.266977906954246500E-013, -1.044399185738743400 ) ) ; +#2150 = VERTEX_POINT ( 'NONE', #3775 ) ; +#2151 = FACE_OUTER_BOUND ( 'NONE', #1563, .T. ) ; +#2152 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000241900, -0.09999999999979564100, -1.270808264217946800 ) ) ; +#2153 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.971276677246343200E-016, 7.327711234729614700E-015 ) ) ; +#2154 = ORIENTED_EDGE ( 'NONE', *, *, #3837, .F. ) ; +#2155 = EDGE_CURVE ( 'NONE', #2036, #1617, #1308, .T. ) ; +#2156 = ORIENTED_EDGE ( 'NONE', *, *, #2585, .F. ) ; +#2157 = CARTESIAN_POINT ( 'NONE', ( -1.825000000000004200, 0.09000000000023535000, -8.600000000000013900 ) ) ; +#2158 = EDGE_LOOP ( 'NONE', ( #1681, #1063, #4816, #1737 ) ) ; +#2159 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 2.776239569296743900, -7.600000000000002300 ) ) ; +#2160 = VECTOR ( 'NONE', #4640, 1000.000000000000000 ) ; +#2161 = VERTEX_POINT ( 'NONE', #3740 ) ; +#2162 = VERTEX_POINT ( 'NONE', #4156 ) ; +#2163 = ORIENTED_EDGE ( 'NONE', *, *, #1024, .T. ) ; +#2164 = AXIS2_PLACEMENT_3D ( 'NONE', #4175, #1765, #4146 ) ; +#2165 = ADVANCED_FACE ( 'NONE', ( #1782 ), #4568, .F. ) ; +#2166 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 7.281636885445248400E-015 ) ) ; +#2167 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2168 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999795000, 3.700000000000172900, -6.000000000000016000 ) ) ; +#2169 = VECTOR ( 'NONE', #3672, 1000.000000000000000 ) ; +#2170 = ORIENTED_EDGE ( 'NONE', *, *, #4176, .T. ) ; +#2171 = ORIENTED_EDGE ( 'NONE', *, *, #1397, .T. ) ; +#2172 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252400, 1.298089913141610200, -0.08005065776186022500 ) ) ; +#2173 = EDGE_CURVE ( 'NONE', #701, #1117, #4502, .T. ) ; +#2174 = DIRECTION ( 'NONE', ( -7.299578983070722700E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2175 = VECTOR ( 'NONE', #4299, 999.9999999999998900 ) ; +#2176 = DIRECTION ( 'NONE', ( 5.417580331251512000E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2177 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000251600, 2.100000000000236300, -3.872070866926526600E-014 ) ) ; +#2178 = VECTOR ( 'NONE', #102, 1000.000000000000000 ) ; +#2179 = EDGE_CURVE ( 'NONE', #3250, #661, #3408, .T. ) ; +#2180 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 1.298089913141610200, -3.660576115180942800E-014 ) ) ; +#2181 = EDGE_CURVE ( 'NONE', #2666, #1844, #4868, .T. ) ; +#2182 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999751500, 3.350000000000233700, -6.938893903907228400E-015 ) ) ; +#2183 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999757300, 2.367897544708341700E-013, -0.8000000000000020400 ) ) ; +#2184 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000238300, 2.800000000000215600, -1.900000000000055900 ) ) ; +#2185 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2186 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999749800, 4.430000000000232400, -3.042570183428222900E-014 ) ) ; +#2187 = EDGE_CURVE ( 'NONE', #2685, #884, #1670, .T. ) ; +#2188 = ORIENTED_EDGE ( 'NONE', *, *, #1055, .F. ) ; +#2189 = AXIS2_PLACEMENT_3D ( 'NONE', #1546, #4406, #3940 ) ; +#2190 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#2191 = ORIENTED_EDGE ( 'NONE', *, *, #1814, .F. ) ; +#2192 = LINE ( 'NONE', #3767, #46 ) ; +#2193 = ADVANCED_FACE ( 'NONE', ( #2422 ), #2044, .F. ) ; +#2194 = VECTOR ( 'NONE', #834, 1000.000000000000000 ) ; +#2195 = ORIENTED_EDGE ( 'NONE', *, *, #179, .T. ) ; +#2196 = CARTESIAN_POINT ( 'NONE', ( -3.750000000000230000, 4.705000000000227400, -2.715000000000082900 ) ) ; +#2197 = ORIENTED_EDGE ( 'NONE', *, *, #2456, .F. ) ; +#2198 = LINE ( 'NONE', #352, #5102 ) ; +#2199 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002196500, 4.200000000000200900, -4.250000000000052400 ) ) ; +#2200 = FACE_OUTER_BOUND ( 'NONE', #366, .T. ) ; +#2201 = VECTOR ( 'NONE', #2615, 1000.000000000000000 ) ; +#2202 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#2203 = AXIS2_PLACEMENT_3D ( 'NONE', #1427, #1445, #1822 ) ; +#2204 = VECTOR ( 'NONE', #4773, 1000.000000000000000 ) ; +#2205 = VERTEX_POINT ( 'NONE', #3615 ) ; +#2206 = VECTOR ( 'NONE', #3171, 1000.000000000000000 ) ; +#2207 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002022800, 2.750000000000227400, -6.500000000000044400 ) ) ; +#2208 = LINE ( 'NONE', #1461, #1897 ) ; +#2209 = ORIENTED_EDGE ( 'NONE', *, *, #1023, .T. ) ; +#2210 = VECTOR ( 'NONE', #4948, 1000.000000000000000 ) ; +#2211 = LINE ( 'NONE', #1562, #3785 ) ; +#2212 = PLANE ( 'NONE', #1975 ) ; +#2213 = VECTOR ( 'NONE', #1657, 1000.000000000000000 ) ; +#2214 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000228400, 0.1000000000002044400, -2.900000000000023900 ) ) ; +#2215 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201356800E-017, 7.391429510507072300E-015 ) ) ; +#2216 = LINE ( 'NONE', #3156, #138 ) ; +#2217 = ADVANCED_FACE ( 'NONE', ( #258 ), #4771, .F. ) ; +#2218 = EDGE_CURVE ( 'NONE', #4476, #3577, #3722, .T. ) ; +#2219 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#2220 = CARTESIAN_POINT ( 'NONE', ( -0.8571796769726366400, 0.2821715336867768300, -8.600000000000010300 ) ) ; +#2221 = ORIENTED_EDGE ( 'NONE', *, *, #1632, .T. ) ; +#2222 = ORIENTED_EDGE ( 'NONE', *, *, #1253, .T. ) ; +#2223 = DIRECTION ( 'NONE', ( 1.713912268385937600E-015, 0.9701425001453319900, -0.2425356250363325500 ) ) ; +#2224 = ORIENTED_EDGE ( 'NONE', *, *, #3668, .T. ) ; +#2225 = ORIENTED_EDGE ( 'NONE', *, *, #4917, .T. ) ; +#2226 = AXIS2_PLACEMENT_3D ( 'NONE', #4655, #4275, #2623 ) ; +#2227 = DIRECTION ( 'NONE', ( -6.133173666732127500E-015, 0.7071067811865479100, -0.7071067811865471300 ) ) ; +#2228 = FACE_OUTER_BOUND ( 'NONE', #1176, .T. ) ; +#2229 = VERTEX_POINT ( 'NONE', #4834 ) ; +#2230 = EDGE_LOOP ( 'NONE', ( #2429, #4515, #1202, #1499 ) ) ; +#2231 = ORIENTED_EDGE ( 'NONE', *, *, #2733, .T. ) ; +#2232 = DIRECTION ( 'NONE', ( 0.9659258262890672000, -5.191744336349173100E-017, -0.2588190451025250100 ) ) ; +#2233 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, -2.149955698496917400E-017, -2.888864335566066700E-014 ) ) ; +#2234 = AXIS2_PLACEMENT_3D ( 'NONE', #722, #3842, #3494 ) ; +#2235 = VECTOR ( 'NONE', #4364, 1000.000000000000000 ) ; +#2236 = VERTEX_POINT ( 'NONE', #805 ) ; +#2237 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002429200, 2.850000000000227500, -0.9500000000000409200 ) ) ; +#2238 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2239 = VECTOR ( 'NONE', #2092, 1000.000000000000000 ) ; +#2240 = VECTOR ( 'NONE', #3200, 1000.000000000000000 ) ; +#2241 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000229900, -0.09999999999979555800, -2.700000000000020600 ) ) ; +#2242 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000206700, 3.350000000000227900, -5.900000000000047400 ) ) ; +#2243 = EDGE_CURVE ( 'NONE', #3268, #2034, #3787, .T. ) ; +#2244 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 0.1000000000002270300, -2.576073848652038200E-014 ) ) ; +#2245 = SURFACE_SIDE_STYLE ('',( #304 ) ) ; +#2246 = EDGE_CURVE ( 'NONE', #1079, #4077, #2592, .T. ) ; +#2247 = VERTEX_POINT ( 'NONE', #1643 ) ; +#2248 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#2249 = ADVANCED_FACE ( 'NONE', ( #3984 ), #785, .T. ) ; +#2250 = EDGE_LOOP ( 'NONE', ( #1326, #3745, #3844, #688 ) ) ; +#2251 = VECTOR ( 'NONE', #1790, 1000.000000000000000 ) ; +#2252 = ORIENTED_EDGE ( 'NONE', *, *, #3208, .F. ) ; +#2253 = ORIENTED_EDGE ( 'NONE', *, *, #4672, .F. ) ; +#2254 = EDGE_CURVE ( 'NONE', #2577, #4829, #866, .T. ) ; +#2255 = FACE_OUTER_BOUND ( 'NONE', #4854, .T. ) ; +#2256 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000228400, 2.100000000000236300, -2.900000000000023900 ) ) ; +#2257 = AXIS2_PLACEMENT_3D ( 'NONE', #1095, #343, #3890 ) ; +#2258 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201347000E-017, 7.391429510507072300E-015 ) ) ; +#2259 = VECTOR ( 'NONE', #1132, 1000.000000000000000 ) ; +#2260 = VECTOR ( 'NONE', #1414, 1000.000000000000000 ) ; +#2261 = ORIENTED_EDGE ( 'NONE', *, *, #1275, .F. ) ; +#2262 = VECTOR ( 'NONE', #4268, 1000.000000000000100 ) ; +#2263 = EDGE_LOOP ( 'NONE', ( #690, #2887, #3287, #3251 ) ) ; +#2264 = ORIENTED_EDGE ( 'NONE', *, *, #3837, .T. ) ; +#2265 = DIRECTION ( 'NONE', ( -0.2515875261947400600, 0.2754668179662825300, 0.9278048010560960800 ) ) ; +#2266 = LINE ( 'NONE', #3845, #1771 ) ; +#2267 = ORIENTED_EDGE ( 'NONE', *, *, #220, .T. ) ; +#2268 = ADVANCED_FACE ( 'NONE', ( #1537 ), #818, .T. ) ; +#2269 = DIRECTION ( 'NONE', ( -5.374889246193567500E-017, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#2270 = SURFACE_SIDE_STYLE ('',( #2402 ) ) ; +#2271 = ORIENTED_EDGE ( 'NONE', *, *, #1640, .T. ) ; +#2272 = ORIENTED_EDGE ( 'NONE', *, *, #4182, .T. ) ; +#2273 = VECTOR ( 'NONE', #2394, 1000.000000000000000 ) ; +#2274 = AXIS2_PLACEMENT_3D ( 'NONE', #5109, #694, #5092 ) ; +#2275 = VECTOR ( 'NONE', #2137, 1000.000000000000000 ) ; +#2276 = ORIENTED_EDGE ( 'NONE', *, *, #4996, .F. ) ; +#2277 = VECTOR ( 'NONE', #1161, 1000.000000000000000 ) ; +#2278 = EDGE_CURVE ( 'NONE', #5001, #4135, #1423, .T. ) ; +#2279 = VERTEX_POINT ( 'NONE', #4845 ) ; +#2280 = ORIENTED_EDGE ( 'NONE', *, *, #3697, .T. ) ; +#2281 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000201400, 0.5696839565364602000, -6.600000000000043200 ) ) ; +#2282 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#2283 = PLANE ( 'NONE', #4002 ) ; +#2284 = ORIENTED_EDGE ( 'NONE', *, *, #2936, .F. ) ; +#2285 = VERTEX_POINT ( 'NONE', #2765 ) ; +#2286 = EDGE_CURVE ( 'NONE', #769, #1188, #2721, .T. ) ; +#2287 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000205800, 3.700000000000172900, -6.000000000000035500 ) ) ; +#2288 = AXIS2_PLACEMENT_3D ( 'NONE', #3166, #1198, #4006 ) ; +#2289 = PLANE ( 'NONE', #2998 ) ; +#2290 = VECTOR ( 'NONE', #142, 1000.000000000000000 ) ; +#2291 = ORIENTED_EDGE ( 'NONE', *, *, #1363, .F. ) ; +#2292 = ORIENTED_EDGE ( 'NONE', *, *, #4252, .T. ) ; +#2293 = ORIENTED_EDGE ( 'NONE', *, *, #772, .F. ) ; +#2294 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999759100, 3.350000000000217200, -1.650000000000022800 ) ) ; +#2295 = PLANE ( 'NONE', #3607 ) ; +#2296 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000228400, 0.4000000000002048600, -3.000000000000021800 ) ) ; +#2297 = LINE ( 'NONE', #3893, #2110 ) ; +#2298 = ORIENTED_EDGE ( 'NONE', *, *, #966, .T. ) ; +#2299 = VERTEX_POINT ( 'NONE', #2823 ) ; +#2300 = ADVANCED_FACE ( 'NONE', ( #4989 ), #2753, .F. ) ; +#2301 = EDGE_LOOP ( 'NONE', ( #3938, #49, #1304, #454 ) ) ; +#2302 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2303 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2304 = FACE_OUTER_BOUND ( 'NONE', #3036, .T. ) ; +#2305 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000228400, 2.038300084272748300E-013, -3.000000000000018200 ) ) ; +#2306 = ADVANCED_FACE ( 'NONE', ( #979 ), #2938, .F. ) ; +#2307 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4239 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1158, #1243, #4026 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2308 = DIRECTION ( 'NONE', ( 8.352372291740183800E-015, 3.212450881438532200E-016, 1.000000000000000000 ) ) ; +#2309 = LINE ( 'NONE', #4798, #1276 ) ; +#2310 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000238200, 5.500000000000227400, -0.8000000000000818700 ) ) ; +#2311 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#2312 = EDGE_CURVE ( 'NONE', #3239, #2350, #3529, .T. ) ; +#2313 = ORIENTED_EDGE ( 'NONE', *, *, #2889, .T. ) ; +#2314 = ORIENTED_EDGE ( 'NONE', *, *, #1131, .T. ) ; +#2315 = CARTESIAN_POINT ( 'NONE', ( -2.300000000000246700, 4.355000000000232200, -0.07500000000002854400 ) ) ; +#2316 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#2317 = ORIENTED_EDGE ( 'NONE', *, *, #3799, .T. ) ; +#2318 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2319 = EDGE_CURVE ( 'NONE', #1672, #263, #505, .T. ) ; +#2320 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -3.978146840631718600E-016 ) ) ; +#2321 = VECTOR ( 'NONE', #2005, 1000.000000000000000 ) ; +#2322 = VERTEX_POINT ( 'NONE', #542 ) ; +#2323 = ADVANCED_FACE ( 'NONE', ( #4610 ), #2970, .T. ) ; +#2324 = LINE ( 'NONE', #463, #3209 ) ; +#2325 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002015100, -0.02974497641265102700, -6.573828367580838400 ) ) ; +#2326 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000241800, -0.09999999999979566900, -1.270808264217950100 ) ) ; +#2327 = PLANE ( 'NONE', #1412 ) ; +#2328 = VECTOR ( 'NONE', #2318, 1000.000000000000000 ) ; +#2329 = LINE ( 'NONE', #3887, #2468 ) ; +#2330 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, 1.000000000000000000, -3.913799179032202200E-031 ) ) ; +#2331 = EDGE_CURVE ( 'NONE', #3241, #643, #2844, .T. ) ; +#2332 = ORIENTED_EDGE ( 'NONE', *, *, #4781, .T. ) ; +#2333 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000229900, 3.420000000000227700, -2.715000000000077100 ) ) ; +#2334 = PLANE ( 'NONE', #272 ) ; +#2335 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000246300, 2.550000000000228500, -0.8000000000000613300 ) ) ; +#2336 = FACE_OUTER_BOUND ( 'NONE', #3796, .T. ) ; +#2337 = ORIENTED_EDGE ( 'NONE', *, *, #2605, .F. ) ; +#2338 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000240100, 2.550000000000228500, -1.650000000000008800 ) ) ; +#2339 = DIRECTION ( 'NONE', ( -0.9659258262890707500, 0.01128952818585337400, 0.2585727067211789900 ) ) ; +#2340 = STYLED_ITEM ( 'NONE', ( #1346 ), #3942 ) ; +#2341 = FACE_OUTER_BOUND ( 'NONE', #335, .T. ) ; +#2342 = VERTEX_POINT ( 'NONE', #2918 ) ; +#2343 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.067853519814894600E-014, 1.000000000000000000 ) ) ; +#2344 = LINE ( 'NONE', #1858, #1828 ) ; +#2345 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000239600, 3.350000000000227500, -1.350000000000045400 ) ) ; +#2346 = VECTOR ( 'NONE', #4180, 1000.000000000000000 ) ; +#2347 = LINE ( 'NONE', #1913, #3671 ) ; +#2348 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999751100, 2.367897544708341700E-013, 2.081668171172168500E-014 ) ) ; +#2349 = EDGE_CURVE ( 'NONE', #820, #2701, #4861, .T. ) ; +#2350 = VERTEX_POINT ( 'NONE', #3728 ) ; +#2351 = VECTOR ( 'NONE', #3954, 1000.000000000000000 ) ; +#2352 = DIRECTION ( 'NONE', ( -5.374889246202355200E-017, 1.000000000000000000, 6.637856049494163000E-017 ) ) ; +#2353 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#2354 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, 1.047445008332814600E-014, 1.000000000000000000 ) ) ; +#2355 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#2356 = VERTEX_POINT ( 'NONE', #1734 ) ; +#2357 = ORIENTED_EDGE ( 'NONE', *, *, #3674, .T. ) ; +#2358 = ORIENTED_EDGE ( 'NONE', *, *, #5157, .T. ) ; +#2359 = DIRECTION ( 'NONE', ( 1.000000000000000000, -8.086446079014292800E-029, -7.281636885445248400E-015 ) ) ; +#2360 = EDGE_CURVE ( 'NONE', #1791, #2435, #192, .T. ) ; +#2361 = EDGE_CURVE ( 'NONE', #2671, #3082, #3780, .T. ) ; +#2362 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#2363 = ORIENTED_EDGE ( 'NONE', *, *, #3334, .T. ) ; +#2365 = ORIENTED_EDGE ( 'NONE', *, *, #2719, .F. ) ; +#2364 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2366 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000206100, 2.850000000000227500, -6.000000000000047100 ) ) ; +#2367 = LINE ( 'NONE', #3476, #1324 ) ; +#2368 = ORIENTED_EDGE ( 'NONE', *, *, #350, .F. ) ; +#2369 = EDGE_CURVE ( 'NONE', #4069, #3739, #4170, .T. ) ; +#2370 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.037329745435896800E-014 ) ) ; +#2371 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000201400, -0.02974497641265105500, -6.573828367580842000 ) ) ; +#2372 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000212000, 4.705000000000227400, -5.415000000000084400 ) ) ; +#2373 = PLANE ( 'NONE', #3683 ) ; +#2374 = CIRCLE ( 'NONE', #3285, 0.5999999999999963100 ) ; +#2375 = EDGE_LOOP ( 'NONE', ( #2672, #1647, #1060, #4875 ) ) ; +#2376 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 1.435412096445492200E-030, -1.000000000000000000 ) ) ; +#2377 = CARTESIAN_POINT ( 'NONE', ( -3.950000000000245800, 4.705000000000227400, -0.8000000000000676600 ) ) ; +#2378 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201240400E-017, -7.281636885445248400E-015 ) ) ; +#2379 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 0.0000000000000000000 ) ) ; +#2380 = FACE_OUTER_BOUND ( 'NONE', #1203, .T. ) ; +#2381 = FACE_OUTER_BOUND ( 'NONE', #2470, .T. ) ; +#2382 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2383 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, 3.978146840631718600E-016, 1.000000000000000000 ) ) ; +#2384 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.5000000000000137700, -0.8660254037844306000 ) ) ; +#2385 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000189800, 0.2996192886329119800, -8.200380711367266400 ) ) ; +#2386 = AXIS2_PLACEMENT_3D ( 'NONE', #4013, #3971, #3539 ) ; +#2387 = DIRECTION ( 'NONE', ( 7.270030056159898800E-015, -0.04361938736533603500, -0.9990482215818578000 ) ) ; +#2388 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246201249600E-017, 0.0000000000000000000 ) ) ; +#2389 = DIRECTION ( 'NONE', ( -5.374889246193567500E-017, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#2390 = ORIENTED_EDGE ( 'NONE', *, *, #3054, .F. ) ; +#2391 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 8.365839057930754400E-015 ) ) ; +#2392 = DIRECTION ( 'NONE', ( 6.133173666733221600E-015, -0.7071067811865962000, -0.7071067811864987200 ) ) ; +#2393 = ADVANCED_FACE ( 'NONE', ( #3223 ), #2024, .F. ) ; +#2394 = DIRECTION ( 'NONE', ( 7.270030056159898800E-015, 0.04361938736533572900, 0.9990482215818578000 ) ) ; +#2395 = EDGE_CURVE ( 'NONE', #883, #2322, #2143, .T. ) ; +#2396 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000252100, 5.500000000000234500, -7.285838599102589800E-014 ) ) ; +#2397 = SURFACE_STYLE_USAGE ( .BOTH. , #1982 ) ; +#2398 = ORIENTED_EDGE ( 'NONE', *, *, #2881, .T. ) ; +#2399 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000201400, -0.02974497641265105500, -6.573828367580842000 ) ) ; +#2400 = VECTOR ( 'NONE', #890, 1000.000000000000000 ) ; +#2401 = DIRECTION ( 'NONE', ( -0.2515875261947397900, 0.1935550669973273600, -0.9482827387983350200 ) ) ; +#2402 = SURFACE_STYLE_FILL_AREA ( #3114 ) ; +#2403 = LINE ( 'NONE', #1796, #1347 ) ; +#2404 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 2.100000000000236300, -4.163336342344337700E-014 ) ) ; +#2405 = EDGE_CURVE ( 'NONE', #2703, #4887, #1043, .T. ) ; +#2406 = FACE_OUTER_BOUND ( 'NONE', #166, .T. ) ; +#2407 = FACE_OUTER_BOUND ( 'NONE', #471, .T. ) ; +#2408 = ORIENTED_EDGE ( 'NONE', *, *, #3025, .T. ) ; +#2409 = VERTEX_POINT ( 'NONE', #1259 ) ; +#2410 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 0.1000000000002270000, -2.910707410969268500E-014 ) ) ; +#2411 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002395900, 2.850000000000227500, -1.350000000000041600 ) ) ; +#2412 = ORIENTED_EDGE ( 'NONE', *, *, #3674, .F. ) ; +#2413 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000205800, 0.5696839565364602000, -6.000000000000047100 ) ) ; +#2414 = EDGE_CURVE ( 'NONE', #1886, #3705, #4369, .T. ) ; +#2415 = VECTOR ( 'NONE', #4935, 1000.000000000000000 ) ; +#2416 = ORIENTED_EDGE ( 'NONE', *, *, #1625, .T. ) ; +#2417 = ORIENTED_EDGE ( 'NONE', *, *, #87, .T. ) ; +#2418 = DIRECTION ( 'NONE', ( 0.2515875261947527200, -0.2347343575773417300, -0.9389374303093668300 ) ) ; +#2419 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000206900, 3.700000000000172900, -6.000000000000054200 ) ) ; +#2420 = DIRECTION ( 'NONE', ( 2.639228045337849300E-016, -0.9990482215818578000, 0.04361938736533572900 ) ) ; +#2421 = LINE ( 'NONE', #2101, #1360 ) ; +#2422 = FACE_OUTER_BOUND ( 'NONE', #1070, .T. ) ; +#2423 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000242700, 2.257084401334521500E-013, -1.170808264217958000 ) ) ; +#2424 = ORIENTED_EDGE ( 'NONE', *, *, #4847, .F. ) ; +#2425 = VECTOR ( 'NONE', #2795, 1000.000000000000000 ) ; +#2426 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 3.350000000000231000, -5.898059818321144100E-014 ) ) ; +#2427 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252400, 1.710477983563044100, -0.08005065776186022500 ) ) ; +#2428 = ADVANCED_FACE ( 'NONE', ( #320 ), #4504, .F. ) ; +#2429 = ORIENTED_EDGE ( 'NONE', *, *, #3260, .F. ) ; +#2430 = ORIENTED_EDGE ( 'NONE', *, *, #574, .T. ) ; +#2431 = DIRECTION ( 'NONE', ( -5.374889246201249600E-017, 1.000000000000000000, -3.923442857790346800E-031 ) ) ; +#2432 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999751500, 3.350000000000233700, -6.938893903907228400E-015 ) ) ; +#2433 = EDGE_CURVE ( 'NONE', #4630, #2492, #3991, .T. ) ; +#2434 = ORIENTED_EDGE ( 'NONE', *, *, #707, .T. ) ; +#2435 = VERTEX_POINT ( 'NONE', #453 ) ; +#2436 = DIRECTION ( 'NONE', ( 0.2515875261947400600, 0.2754668179662825300, 0.9278048010560960800 ) ) ; +#2437 = LINE ( 'NONE', #1494, #1376 ) ; +#2438 = ORIENTED_EDGE ( 'NONE', *, *, #3084, .F. ) ; +#2439 = DIRECTION ( 'NONE', ( 2.850642864397063100E-016, -1.000000000000000000, -2.112202743057890100E-030 ) ) ; +#2440 = ORIENTED_EDGE ( 'NONE', *, *, #4862, .F. ) ; +#2441 = EDGE_CURVE ( 'NONE', #4453, #1886, #1177, .T. ) ; +#2442 = AXIS2_PLACEMENT_3D ( 'NONE', #3634, #1574, #3188 ) ; +#2443 = DIRECTION ( 'NONE', ( 5.110888613495321100E-015, -0.7071067811865406900, 0.7071067811865543500 ) ) ; +#2444 = ORIENTED_EDGE ( 'NONE', *, *, #1602, .T. ) ; +#2445 = ORIENTED_EDGE ( 'NONE', *, *, #966, .F. ) ; +#2446 = ORIENTED_EDGE ( 'NONE', *, *, #839, .T. ) ; +#2447 = EDGE_CURVE ( 'NONE', #4314, #2983, #2790, .T. ) ; +#2448 = FACE_OUTER_BOUND ( 'NONE', #3774, .T. ) ; +#2449 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000230200, 0.4000000000002045300, -3.000000000000023500 ) ) ; +#2450 = VECTOR ( 'NONE', #3639, 1000.000000000000000 ) ; +#2451 = CARTESIAN_POINT ( 'NONE', ( -0.8748965478734310700, 2.966530065588401000, -0.8838797376473455100 ) ) ; +#2452 = ADVANCED_FACE ( 'NONE', ( #3609 ), #1642, .T. ) ; +#2453 = CARTESIAN_POINT ( 'NONE', ( -0.8571796769726364200, 0.2821715336867770000, -8.600000000000010300 ) ) ; +#2454 = VERTEX_POINT ( 'NONE', #4009 ) ; +#2455 = ORIENTED_EDGE ( 'NONE', *, *, #87, .F. ) ; +#2456 = EDGE_CURVE ( 'NONE', #1116, #1079, #930, .T. ) ; +#2457 = VERTEX_POINT ( 'NONE', #1025 ) ; +#2458 = VECTOR ( 'NONE', #103, 1000.000000000000000 ) ; +#2459 = PLANE ( 'NONE', #3075 ) ; +#2460 = LINE ( 'NONE', #4061, #2708 ) ; +#2461 = ORIENTED_EDGE ( 'NONE', *, *, #545, .F. ) ; +#2462 = EDGE_CURVE ( 'NONE', #2161, #1617, #984, .T. ) ; +#2463 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002109900, 4.200000000000179600, -5.250000000000049700 ) ) ; +#2464 = EDGE_CURVE ( 'NONE', #889, #3492, #4301, .T. ) ; +#2465 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#2466 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000201400, 0.5696839565364602000, -6.600000000000043200 ) ) ; +#2467 = VECTOR ( 'NONE', #3465, 1000.000000000000000 ) ; +#2468 = VECTOR ( 'NONE', #285, 1000.000000000000000 ) ; +#2469 = DIRECTION ( 'NONE', ( 5.374889246202360800E-017, 1.000000000000000000, 7.282397625204285800E-017 ) ) ; +#2470 = EDGE_LOOP ( 'NONE', ( #2730, #3380, #4506, #3811 ) ) ; +#2471 = PLANE ( 'NONE', #123 ) ; +#2472 = LINE ( 'NONE', #4602, #3660 ) ; +#2473 = ORIENTED_EDGE ( 'NONE', *, *, #2533, .F. ) ; +#2474 = EDGE_CURVE ( 'NONE', #4829, #374, #262, .T. ) ; +#2475 = ADVANCED_FACE ( 'NONE', ( #4805 ), #4828, .F. ) ; +#2476 = FACE_OUTER_BOUND ( 'NONE', #2489, .T. ) ; +#2477 = AXIS2_PLACEMENT_3D ( 'NONE', #3010, #2977, #682 ) ; +#2478 = VECTOR ( 'NONE', #1260, 1000.000000000000000 ) ; +#2479 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000242700, 2.257084401334521500E-013, -1.170808264217958000 ) ) ; +#2480 = VECTOR ( 'NONE', #271, 1000.000000000000000 ) ; +#2481 = ORIENTED_EDGE ( 'NONE', *, *, #1922, .T. ) ; +#2482 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#2483 = ORIENTED_EDGE ( 'NONE', *, *, #1210, .F. ) ; +#2484 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#2485 = VECTOR ( 'NONE', #2439, 1000.000000000000000 ) ; +#2486 = LINE ( 'NONE', #947, #2275 ) ; +#2487 = CARTESIAN_POINT ( 'NONE', ( -3.750000000000230000, 3.420000000000227700, -2.715000000000083300 ) ) ; +#2488 = ORIENTED_EDGE ( 'NONE', *, *, #4147, .F. ) ; +#2489 = EDGE_LOOP ( 'NONE', ( #3578, #2612, #4122, #3487, #67, #3861 ) ) ; +#2490 = PLANE ( 'NONE', #1481 ) ; +#2491 = VERTEX_POINT ( 'NONE', #4036 ) ; +#2492 = VERTEX_POINT ( 'NONE', #3198 ) ; +#2493 = VERTEX_POINT ( 'NONE', #2426 ) ; +#2494 = EDGE_LOOP ( 'NONE', ( #4551, #3647, #5129, #4714 ) ) ; +#2495 = ORIENTED_EDGE ( 'NONE', *, *, #3874, .F. ) ; +#2496 = EDGE_LOOP ( 'NONE', ( #3099, #1603, #3168, #5003, #2084, #4790 ) ) ; +#2497 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 1.710477983563044100, -3.919373068745948000E-014 ) ) ; +#2498 = PLANE ( 'NONE', #1683 ) ; +#2499 = EDGE_CURVE ( 'NONE', #2685, #3445, #3160, .T. ) ; +#2500 = VECTOR ( 'NONE', #3522, 1000.000000000000000 ) ; +#2501 = VERTEX_POINT ( 'NONE', #3585 ) ; +#2502 = ORIENTED_EDGE ( 'NONE', *, *, #2054, .F. ) ; +#2503 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000239600, 3.350000000000227500, -1.350000000000045400 ) ) ; +#2504 = ADVANCED_FACE ( 'NONE', ( #4056 ), #18, .F. ) ; +#2505 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 1.710477983563044100, -3.919373068745948000E-014 ) ) ; +#2506 = DIRECTION ( 'NONE', ( 7.409566345325548800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2507 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -7.282397625204285800E-017, 1.000000000000000000 ) ) ; +#2508 = LINE ( 'NONE', #4114, #3248 ) ; +#2509 = ORIENTED_EDGE ( 'NONE', *, *, #5065, .F. ) ; +#2510 = EDGE_CURVE ( 'NONE', #3043, #2457, #2662, .T. ) ; +#2511 = VECTOR ( 'NONE', #1136, 1000.000000000000000 ) ; +#2512 = EDGE_CURVE ( 'NONE', #4671, #3261, #1838, .T. ) ; +#2513 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#2514 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2515 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000230700, 2.100000000000236300, -2.900000000000021200 ) ) ; +#2516 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#2517 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002127100, 5.000000000000177600, -5.250000000000058600 ) ) ; +#2518 = PLANE ( 'NONE', #4410 ) ; +#2519 = ORIENTED_EDGE ( 'NONE', *, *, #2499, .T. ) ; +#2520 = ORIENTED_EDGE ( 'NONE', *, *, #3119, .T. ) ; +#2521 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, 1.000000000000000000, -3.913799179032202200E-031 ) ) ; +#2522 = LINE ( 'NONE', #3732, #5032 ) ; +#2523 = AXIS2_PLACEMENT_3D ( 'NONE', #3642, #73, #4054 ) ; +#2524 = EDGE_LOOP ( 'NONE', ( #598, #3788, #216, #4488 ) ) ; +#2525 = CYLINDRICAL_SURFACE ( 'NONE', #5015, 0.2500000000000000000 ) ; +#2526 = ADVANCED_FACE ( 'NONE', ( #1365 ), #831, .F. ) ; +#2527 = EDGE_CURVE ( 'NONE', #4838, #1505, #4123, .T. ) ; +#2528 = LINE ( 'NONE', #4703, #4783 ) ; +#2529 = FACE_OUTER_BOUND ( 'NONE', #3600, .T. ) ; +#2530 = DIRECTION ( 'NONE', ( 7.751334854710907000E-029, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#2531 = ORIENTED_EDGE ( 'NONE', *, *, #3605, .F. ) ; +#2532 = ORIENTED_EDGE ( 'NONE', *, *, #2020, .F. ) ; +#2533 = EDGE_CURVE ( 'NONE', #4748, #3044, #3032, .T. ) ; +#2534 = EDGE_LOOP ( 'NONE', ( #1518, #4779, #2559, #445, #3218, #5183 ) ) ; +#2535 = EDGE_CURVE ( 'NONE', #1552, #2247, #3727, .T. ) ; +#2536 = AXIS2_PLACEMENT_3D ( 'NONE', #4895, #124, #3714 ) ; +#2537 = DIRECTION ( 'NONE', ( 5.374889246201273600E-017, 1.000000000000000000, -3.972073845008224400E-031 ) ) ; +#2538 = FACE_OUTER_BOUND ( 'NONE', #2858, .T. ) ; +#2539 = ORIENTED_EDGE ( 'NONE', *, *, #1671, .T. ) ; +#2540 = ORIENTED_EDGE ( 'NONE', *, *, #2441, .T. ) ; +#2541 = VERTEX_POINT ( 'NONE', #1971 ) ; +#2542 = VECTOR ( 'NONE', #3263, 1000.000000000000000 ) ; +#2543 = DIRECTION ( 'NONE', ( -7.327711234729614700E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2544 = EDGE_CURVE ( 'NONE', #4671, #1526, #3478, .T. ) ; +#2545 = VERTEX_POINT ( 'NONE', #3194 ) ; +#2546 = ORIENTED_EDGE ( 'NONE', *, *, #145, .F. ) ; +#2547 = LINE ( 'NONE', #3974, #2425 ) ; +#2548 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000228500, 0.1000000000002044700, -2.900000000000020800 ) ) ; +#2549 = EDGE_LOOP ( 'NONE', ( #1462, #267, #3514, #5019 ) ) ; +#2550 = ORIENTED_EDGE ( 'NONE', *, *, #1922, .F. ) ; +#2551 = AXIS2_PLACEMENT_3D ( 'NONE', #4131, #896, #4538 ) ; +#2552 = ADVANCED_FACE ( 'NONE', ( #1973 ), #826, .F. ) ; +#2553 = ORIENTED_EDGE ( 'NONE', *, *, #519, .F. ) ; +#2554 = ORIENTED_EDGE ( 'NONE', *, *, #3158, .F. ) ; +#2555 = PLANE ( 'NONE', #2898 ) ; +#2556 = EDGE_LOOP ( 'NONE', ( #4440, #40, #4874, #3629 ) ) ; +#2557 = AXIS2_PLACEMENT_3D ( 'NONE', #2706, #3079, #3917 ) ; +#2558 = LINE ( 'NONE', #654, #1497 ) ; +#2559 = ORIENTED_EDGE ( 'NONE', *, *, #600, .T. ) ; +#2560 = ORIENTED_EDGE ( 'NONE', *, *, #2433, .T. ) ; +#2561 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000201400, 0.4697791343782781700, -6.595638061263509900 ) ) ; +#2562 = ORIENTED_EDGE ( 'NONE', *, *, #4383, .F. ) ; +#2563 = ORIENTED_EDGE ( 'NONE', *, *, #3084, .T. ) ; +#2564 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, 1.000000000000000000, -3.913799179032202200E-031 ) ) ; +#2565 = EDGE_CURVE ( 'NONE', #4069, #1758, #74, .T. ) ; +#2566 = VECTOR ( 'NONE', #1192, 1000.000000000000000 ) ; +#2567 = DIRECTION ( 'NONE', ( 2.020986811672233200E-015, -0.9586398840728169700, 0.2846218063762091000 ) ) ; +#2568 = EDGE_CURVE ( 'NONE', #3233, #290, #3092, .T. ) ; +#2569 = LINE ( 'NONE', #400, #483 ) ; +#2570 = ORIENTED_EDGE ( 'NONE', *, *, #4086, .T. ) ; +#2571 = EDGE_LOOP ( 'NONE', ( #3506, #355, #1540, #275, #3493, #1120, #2446, #2809, #515, #2021, #173 ) ) ; +#2572 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#2573 = SURFACE_STYLE_FILL_AREA ( #254 ) ; +#2574 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000238300, 2.800000000000215600, -1.900000000000055900 ) ) ; +#2575 = DIRECTION ( 'NONE', ( -1.029231937005643000E-014, -7.826578390373813300E-015, -1.000000000000000000 ) ) ; +#2576 = EDGE_LOOP ( 'NONE', ( #4250, #4434, #1856, #509, #465, #200, #3151 ) ) ; +#2577 = VERTEX_POINT ( 'NONE', #1985 ) ; +#2578 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000237900, 3.350000000000235500, -1.650000000000056300 ) ) ; +#2579 = ORIENTED_EDGE ( 'NONE', *, *, #1954, .T. ) ; +#2580 = AXIS2_PLACEMENT_3D ( 'NONE', #2466, #4470, #535 ) ; +#2581 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999766100, 2.550000000000216100, -1.900000000000002400 ) ) ; +#2582 = LINE ( 'NONE', #3051, #2950 ) ; +#2583 = EDGE_LOOP ( 'NONE', ( #3923, #1738, #391, #4059 ) ) ; +#2584 = ORIENTED_EDGE ( 'NONE', *, *, #600, .F. ) ; +#2585 = EDGE_CURVE ( 'NONE', #1844, #2619, #689, .T. ) ; +#2586 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000251100, 0.4000000000002261200, -0.8000000000000298000 ) ) ; +#2587 = LINE ( 'NONE', #2515, #1891 ) ; +#2588 = VERTEX_POINT ( 'NONE', #3562 ) ; +#2589 = DIRECTION ( 'NONE', ( 5.877535321837823200E-015, 0.7071067811864437700, -0.7071067811866513800 ) ) ; +#2590 = LINE ( 'NONE', #7, #4988 ) ; +#2591 = PLANE ( 'NONE', #450 ) ; +#2592 = LINE ( 'NONE', #2411, #2478 ) ; +#2593 = VECTOR ( 'NONE', #1175, 1000.000000000000000 ) ; +#2594 = ORIENTED_EDGE ( 'NONE', *, *, #1571, .F. ) ; +#2595 = ADVANCED_FACE ( 'NONE', ( #1492 ), #1186, .F. ) ; +#2596 = EDGE_CURVE ( 'NONE', #3181, #1958, #2547, .T. ) ; +#2597 = AXIS2_PLACEMENT_3D ( 'NONE', #2371, #2006, #4811 ) ; +#2598 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 1.710477983563044100, -3.919373068745948000E-014 ) ) ; +#2599 = VERTEX_POINT ( 'NONE', #2399 ) ; +#2600 = EDGE_LOOP ( 'NONE', ( #1146, #3916, #2253, #3801 ) ) ; +#2601 = VECTOR ( 'NONE', #536, 1000.000000000000000 ) ; +#2602 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193567500E-017, -5.629900911267176600E-031 ) ) ; +#2603 = VECTOR ( 'NONE', #4947, 1000.000000000000000 ) ; +#2604 = ORIENTED_EDGE ( 'NONE', *, *, #1394, .T. ) ; +#2605 = EDGE_CURVE ( 'NONE', #1805, #2409, #2216, .T. ) ; +#2606 = EDGE_LOOP ( 'NONE', ( #1018, #4042, #3889, #5166, #1871, #4674, #975, #4070, #2018, #3544, #3149 ) ) ; +#2607 = ORIENTED_EDGE ( 'NONE', *, *, #4693, .F. ) ; +#2608 = DIRECTION ( 'NONE', ( -6.938893903907228400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2609 = ORIENTED_EDGE ( 'NONE', *, *, #1723, .F. ) ; +#2610 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000206700, 2.750000000000227400, -5.900000000000047400 ) ) ; +#2611 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000251600, 0.4000000000002343900, -2.531602726399004100E-014 ) ) ; +#2612 = ORIENTED_EDGE ( 'NONE', *, *, #2051, .T. ) ; +#2613 = EDGE_LOOP ( 'NONE', ( #5010, #3037, #330, #4684 ) ) ; +#2614 = AXIS2_PLACEMENT_3D ( 'NONE', #3107, #1191, #4768 ) ; +#2615 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193542800E-017, -5.696500529525346000E-031 ) ) ; +#2616 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#2617 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000229300, 2.038300084272747100E-013, -3.000000000000028900 ) ) ; +#2618 = VECTOR ( 'NONE', #4048, 1000.000000000000000 ) ; +#2619 = VERTEX_POINT ( 'NONE', #50 ) ; +#2620 = EDGE_LOOP ( 'NONE', ( #2594, #5002, #5134, #1841, #3855, #1854, #3281, #381, #2495, #397, #1719, #4151, #1362, #3196, #3839, #1047, #4246, #4631 ) ) ; +#2621 = DIRECTION ( 'NONE', ( -7.395763429917407300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2622 = EDGE_CURVE ( 'NONE', #1617, #211, #2967, .T. ) ; +#2623 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#2624 = VECTOR ( 'NONE', #456, 1000.000000000000000 ) ; +#2625 = ORIENTED_EDGE ( 'NONE', *, *, #4456, .T. ) ; +#2626 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999773200, 5.500000000000234500, -2.999999999999976500 ) ) ; +#2627 = LINE ( 'NONE', #4710, #349 ) ; +#2628 = EDGE_CURVE ( 'NONE', #1972, #3808, #870, .T. ) ; +#2629 = DIRECTION ( 'NONE', ( 6.739535799202493800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2630 = EDGE_CURVE ( 'NONE', #2279, #4671, #4245, .T. ) ; +#2631 = DIRECTION ( 'NONE', ( 7.329817504127328300E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2632 = FILL_AREA_STYLE_COLOUR ( '', #4647 ) ; +#2633 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000251600, 2.100000000000236300, -3.872070866926526600E-014 ) ) ; +#2634 = EDGE_CURVE ( 'NONE', #3772, #2454, #2029, .T. ) ; +#2635 = ORIENTED_EDGE ( 'NONE', *, *, #3236, .T. ) ; +#2636 = DIRECTION ( 'NONE', ( 1.000000000000000000, -7.627114208151728300E-029, -7.281636885445248400E-015 ) ) ; +#2637 = ORIENTED_EDGE ( 'NONE', *, *, #1713, .F. ) ; +#2638 = VECTOR ( 'NONE', #286, 1000.000000000000000 ) ; +#2639 = ORIENTED_EDGE ( 'NONE', *, *, #1341, .T. ) ; +#2640 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193700600E-017, -5.552201356632754200E-031 ) ) ; +#2641 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000228400, 2.100000000000236300, -2.900000000000023900 ) ) ; +#2642 = EDGE_LOOP ( 'NONE', ( #2298, #3960, #2738, #1339 ) ) ; +#2643 = VECTOR ( 'NONE', #2033, 1000.000000000000000 ) ; +#2644 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.001794390543951200E-014, 1.000000000000000000 ) ) ; +#2645 = VECTOR ( 'NONE', #3903, 1000.000000000000100 ) ; +#2646 = LINE ( 'NONE', #3986, #964 ) ; +#2647 = ADVANCED_FACE ( 'NONE', ( #5061 ), #417, .F. ) ; +#2648 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000001897400, 0.3995241107910975100, -8.204742650103801400 ) ) ; +#2649 = ORIENTED_EDGE ( 'NONE', *, *, #842, .F. ) ; +#2650 = ADVANCED_FACE ( 'NONE', ( #2910 ), #810, .F. ) ; +#2651 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999803400, 2.776239569296748300, -7.599999999999994300 ) ) ; +#2652 = VECTOR ( 'NONE', #4242, 1000.000000000000000 ) ; +#2653 = VERTEX_POINT ( 'NONE', #3176 ) ; +#2654 = EDGE_CURVE ( 'NONE', #23, #2350, #3412, .T. ) ; +#2655 = VECTOR ( 'NONE', #1392, 1000.000000000000000 ) ; +#2656 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2657 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000251100, -0.09999999999979573800, -0.2000000000000242700 ) ) ; +#2658 = FACE_OUTER_BOUND ( 'NONE', #3021, .T. ) ; +#2659 = EDGE_LOOP ( 'NONE', ( #238, #3981, #644, #3418 ) ) ; +#2660 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2661 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2662 = LINE ( 'NONE', #1213, #5122 ) ; +#2663 = EDGE_CURVE ( 'NONE', #2299, #3177, #4995, .T. ) ; +#2664 = CARTESIAN_POINT ( 'NONE', ( -1.142820323027793600, 3.250000000000227400, -0.9500000000000444800 ) ) ; +#2665 = SURFACE_STYLE_USAGE ( .BOTH. , #2993 ) ; +#2666 = VERTEX_POINT ( 'NONE', #2338 ) ; +#2667 = DIRECTION ( 'NONE', ( -7.391429510507072300E-015, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#2668 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000229900, -0.09999999999979555800, -2.700000000000020600 ) ) ; +#2669 = PLANE ( 'NONE', #3348 ) ; +#2670 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193779500E-017, -5.507217403949667200E-031 ) ) ; +#2671 = VERTEX_POINT ( 'NONE', #2035 ) ; +#2672 = ORIENTED_EDGE ( 'NONE', *, *, #1309, .F. ) ; +#2673 = EDGE_CURVE ( 'NONE', #5005, #3177, #2211, .T. ) ; +#2674 = ORIENTED_EDGE ( 'NONE', *, *, #2654, .T. ) ; +#2675 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000246600, 1.500000000000234700, -0.8000000000000472300 ) ) ; +#2676 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#2677 = LINE ( 'NONE', #4796, #3686 ) ; +#2678 = ORIENTED_EDGE ( 'NONE', *, *, #3797, .F. ) ; +#2679 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000241800, -0.09999999999979566900, -1.270808264217950100 ) ) ; +#2680 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999997489700, 5.160000000000229300, -5.194983820292620700E-014 ) ) ; +#2681 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2037 ) ) ; +#2682 = VECTOR ( 'NONE', #4183, 1000.000000000000000 ) ; +#2683 = VERTEX_POINT ( 'NONE', #1649 ) ; +#2684 = ORIENTED_EDGE ( 'NONE', *, *, #1167, .F. ) ; +#2685 = VERTEX_POINT ( 'NONE', #91 ) ; +#2686 = CARTESIAN_POINT ( 'NONE', ( -1.249999999999780600, 3.350000000000175900, -4.250000000000030200 ) ) ; +#2687 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2688 = PLANE ( 'NONE', #3878 ) ; +#2689 = FACE_OUTER_BOUND ( 'NONE', #5156, .T. ) ; +#2690 = LINE ( 'NONE', #283, #1006 ) ; +#2691 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 5.500000000000155400, -7.600000000000029000 ) ) ; +#2692 = EDGE_CURVE ( 'NONE', #105, #1526, #449, .T. ) ; +#2693 = LINE ( 'NONE', #4559, #1930 ) ; +#2694 = ORIENTED_EDGE ( 'NONE', *, *, #4244, .T. ) ; +#2695 = EDGE_CURVE ( 'NONE', #3294, #4944, #1307, .T. ) ; +#2696 = AXIS2_PLACEMENT_3D ( 'NONE', #1567, #1212, #798 ) ; +#2697 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#2698 = ORIENTED_EDGE ( 'NONE', *, *, #3645, .T. ) ; +#2699 = ADVANCED_FACE ( 'NONE', ( #311 ), #1629, .F. ) ; +#2700 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000250700, -0.09999999999979571100, -0.2000000000000209400 ) ) ; +#2701 = VERTEX_POINT ( 'NONE', #462 ) ; +#2702 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 0.5400000000002357400, -2.258704269319608800E-014 ) ) ; +#2703 = VERTEX_POINT ( 'NONE', #506 ) ; +#2704 = EDGE_CURVE ( 'NONE', #3970, #2683, #2783, .T. ) ; +#2705 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 0.7529411764705882200 ) ; +#2706 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000220500, 2.825000000000189800, -4.250000000000048800 ) ) ; +#2707 = ADVANCED_FACE ( 'NONE', ( #511 ), #3213, .F. ) ; +#2708 = VECTOR ( 'NONE', #3614, 1000.000000000000000 ) ; +#2709 = VECTOR ( 'NONE', #2443, 1000.000000000000000 ) ; +#2710 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#2711 = VECTOR ( 'NONE', #1715, 1000.000000000000000 ) ; +#2712 = FACE_OUTER_BOUND ( 'NONE', #1417, .T. ) ; +#2713 = AXIS2_PLACEMENT_3D ( 'NONE', #3, #4810, #4398 ) ; +#2714 = CARTESIAN_POINT ( 'NONE', ( -1.142820323027737200, -0.01754293278778022700, -8.586914183790412400 ) ) ; +#2715 = LINE ( 'NONE', #112, #3338 ) ; +#2716 = ORIENTED_EDGE ( 'NONE', *, *, #3975, .T. ) ; +#2717 = PLANE ( 'NONE', #4331 ) ; +#2718 = ORIENTED_EDGE ( 'NONE', *, *, #3735, .F. ) ; +#2719 = EDGE_CURVE ( 'NONE', #1958, #1428, #3601, .T. ) ; +#2720 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #4575, .NOT_KNOWN. ) ; +#2721 = LINE ( 'NONE', #1960, #4296 ) ; +#2722 = VECTOR ( 'NONE', #3098, 1000.000000000000000 ) ; +#2723 = VERTEX_POINT ( 'NONE', #4481 ) ; +#2724 = LINE ( 'NONE', #2014, #2542 ) ; +#2725 = VECTOR ( 'NONE', #576, 1000.000000000000000 ) ; +#2726 = EDGE_CURVE ( 'NONE', #3731, #1008, #1969, .T. ) ; +#2727 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000231100, 2.100000000000236300, -2.900000000000023900 ) ) ; +#2728 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000245800, 4.705000000000227400, -0.8000000000000676600 ) ) ; +#2729 = ADVANCED_FACE ( 'NONE', ( #1171 ), #2082, .F. ) ; +#2730 = ORIENTED_EDGE ( 'NONE', *, *, #1532, .T. ) ; +#2731 = ORIENTED_EDGE ( 'NONE', *, *, #3199, .F. ) ; +#2732 = ORIENTED_EDGE ( 'NONE', *, *, #3936, .F. ) ; +#2733 = EDGE_CURVE ( 'NONE', #4309, #2723, #4926, .T. ) ; +#2734 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999997483600, 4.430000000000231500, -4.479637402120103900E-014 ) ) ; +#2735 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#2736 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000206700, 3.350000000000227900, -5.900000000000047400 ) ) ; +#2737 = VERTEX_POINT ( 'NONE', #3625 ) ; +#2738 = ORIENTED_EDGE ( 'NONE', *, *, #2369, .F. ) ; +#2739 = ORIENTED_EDGE ( 'NONE', *, *, #2957, .F. ) ; +#2740 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.032988979366341300E-014, -1.000000000000000000 ) ) ; +#2741 = LINE ( 'NONE', #1610, #642 ) ; +#2742 = ORIENTED_EDGE ( 'NONE', *, *, #487, .F. ) ; +#2743 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2744 = ORIENTED_EDGE ( 'NONE', *, *, #4624, .F. ) ; +#2745 = LINE ( 'NONE', #1795, #2682 ) ; +#2746 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 0.0000000000000000000 ) ) ; +#2747 = ORIENTED_EDGE ( 'NONE', *, *, #2726, .F. ) ; +#2748 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#2749 = AXIS2_PLACEMENT_3D ( 'NONE', #2517, #3716, #4904 ) ; +#2750 = ADVANCED_FACE ( 'NONE', ( #4366 ), #2490, .F. ) ; +#2751 = DIRECTION ( 'NONE', ( -5.374889246201249000E-017, -1.000000000000000000, 3.913799179032202200E-031 ) ) ; +#2752 = LINE ( 'NONE', #4673, #3563 ) ; +#2753 = PLANE ( 'NONE', #2288 ) ; +#2754 = PLANE ( 'NONE', #2386 ) ; +#2755 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.001794390543951200E-014, -1.000000000000000000 ) ) ; +#2756 = EDGE_CURVE ( 'NONE', #760, #960, #3840, .T. ) ; +#2757 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000212100, 4.705000000000227400, -5.415000000000077300 ) ) ; +#2758 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193567500E-017, -5.629900911267176600E-031 ) ) ; +#2759 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2760 = ORIENTED_EDGE ( 'NONE', *, *, #519, .T. ) ; +#2761 = PRESENTATION_STYLE_ASSIGNMENT (( #677 ) ) ; +#2762 = DIRECTION ( 'NONE', ( -5.417580331251512000E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2763 = EDGE_CURVE ( 'NONE', #1505, #943, #2724, .T. ) ; +#2764 = FACE_OUTER_BOUND ( 'NONE', #1249, .T. ) ; +#2765 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002020600, 0.5696839565364600900, -6.500000000000043500 ) ) ; +#2766 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999751100, 5.500000000000230000, -4.857225732735059900E-014 ) ) ; +#2767 = LINE ( 'NONE', #3926, #55 ) ; +#2768 = LINE ( 'NONE', #632, #2201 ) ; +#2769 = EDGE_CURVE ( 'NONE', #961, #4069, #4613, .T. ) ; +#2770 = VECTOR ( 'NONE', #4157, 1000.000000000000000 ) ; +#2771 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002395900, 2.850000000000227500, -1.350000000000041600 ) ) ; +#2772 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#2773 = ORIENTED_EDGE ( 'NONE', *, *, #1275, .T. ) ; +#2774 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252400, 1.710477983563044100, -0.08005065776186022500 ) ) ; +#2775 = AXIS2_PLACEMENT_3D ( 'NONE', #9, #416, #32 ) ; +#2776 = CIRCLE ( 'NONE', #1925, 0.6000000000000007500 ) ; +#2777 = VERTEX_POINT ( 'NONE', #120 ) ; +#2778 = DIRECTION ( 'NONE', ( -5.374889246201249000E-017, -1.000000000000000000, 3.913799179032202200E-031 ) ) ; +#2779 = LINE ( 'NONE', #5091, #2085 ) ; +#2780 = ORIENTED_EDGE ( 'NONE', *, *, #2763, .T. ) ; +#2781 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2782 = ADVANCED_FACE ( 'NONE', ( #5053 ), #3279, .F. ) ; +#2783 = LINE ( 'NONE', #4514, #625 ) ; +#2784 = LINE ( 'NONE', #4536, #3342 ) ; +#2785 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000230200, -0.09999999999979557200, -2.700000000000024200 ) ) ; +#2786 = ORIENTED_EDGE ( 'NONE', *, *, #1564, .T. ) ; +#2787 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000228400, 2.038300084272748300E-013, -3.000000000000018200 ) ) ; +#2788 = EDGE_CURVE ( 'NONE', #1233, #2991, #4437, .T. ) ; +#2789 = ORIENTED_EDGE ( 'NONE', *, *, #874, .F. ) ; +#2790 = CIRCLE ( 'NONE', #2536, 0.09999999999999592500 ) ; +#2791 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2792 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000242900, 2.850000000000227500, -0.9500000000000445900 ) ) ; +#2793 = EDGE_LOOP ( 'NONE', ( #879, #4644, #4300, #575 ) ) ; +#2794 = VERTEX_POINT ( 'NONE', #1328 ) ; +#2795 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.047445008332814600E-014, 1.000000000000000000 ) ) ; +#2796 = EDGE_CURVE ( 'NONE', #2120, #1402, #4241, .T. ) ; +#2797 = EDGE_CURVE ( 'NONE', #1820, #2978, #3532, .T. ) ; +#2798 = ORIENTED_EDGE ( 'NONE', *, *, #2173, .T. ) ; +#2799 = EDGE_LOOP ( 'NONE', ( #526, #2786, #1502, #202 ) ) ; +#2800 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 8.365839057930752800E-015 ) ) ; +#2801 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999795000, 3.700000000000172900, -6.000000000000016000 ) ) ; +#2802 = VECTOR ( 'NONE', #2418, 1000.000000000000100 ) ; +#2803 = EDGE_LOOP ( 'NONE', ( #1648, #3961, #2049, #3906 ) ) ; +#2804 = EDGE_LOOP ( 'NONE', ( #4509, #1798, #4099, #4668 ) ) ; +#2805 = EDGE_CURVE ( 'NONE', #2350, #1645, #256, .T. ) ; +#2806 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000001897400, -0.09999999999983198700, -8.182932956421133500 ) ) ; +#2807 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999785300, 2.225000000000180800, -4.850000000000013900 ) ) ; +#2808 = FACE_OUTER_BOUND ( 'NONE', #2982, .T. ) ; +#2809 = ORIENTED_EDGE ( 'NONE', *, *, #1788, .T. ) ; +#2810 = ORIENTED_EDGE ( 'NONE', *, *, #4324, .F. ) ; +#2811 = ADVANCED_FACE ( 'NONE', ( #3283 ), #2555, .F. ) ; +#2812 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999749700, 0.4000000000002361100, 1.387778780781445700E-014 ) ) ; +#2813 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#2814 = LINE ( 'NONE', #3711, #4017 ) ; +#2815 = LINE ( 'NONE', #298, #35 ) ; +#2816 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000252000, 4.430000000000230600, -7.552851220967920100E-014 ) ) ; +#2817 = CARTESIAN_POINT ( 'NONE', ( 3.150000000000208600, 2.776239569296766100, -7.600000000000014700 ) ) ; +#2818 = VECTOR ( 'NONE', #4328, 1000.000000000000000 ) ; +#2819 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201352500E-017, 7.395763429917407300E-015 ) ) ; +#2820 = AXIS2_PLACEMENT_3D ( 'NONE', #4639, #2223, #190 ) ; +#2821 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000196500, 1.548331348494749700E-013, -7.599999999999971200 ) ) ; +#2822 = DIRECTION ( 'NONE', ( -5.374889246201249000E-017, 1.000000000000000000, -3.913799179032202200E-031 ) ) ; +#2823 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999779100, 5.500000000000204300, -2.000000000000047100 ) ) ; +#2824 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2825 = EDGE_CURVE ( 'NONE', #5124, #105, #1036, .T. ) ; +#2826 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#2827 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#2828 = ORIENTED_EDGE ( 'NONE', *, *, #3527, .T. ) ; +#2829 = ORIENTED_EDGE ( 'NONE', *, *, #3567, .T. ) ; +#2830 = DIRECTION ( 'NONE', ( 1.000000000000000000, -7.742115945224492400E-029, -7.391429510507072300E-015 ) ) ; +#2831 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000249800, 0.6200000000002342500, -0.08000000000002273300 ) ) ; +#2832 = LINE ( 'NONE', #3631, #1290 ) ; +#2833 = EDGE_CURVE ( 'NONE', #1832, #64, #749, .T. ) ; +#2834 = FACE_OUTER_BOUND ( 'NONE', #2659, .T. ) ; +#2835 = VECTOR ( 'NONE', #1077, 1000.000000000000000 ) ; +#2836 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002020600, 0.5696839565364600900, -6.500000000000043500 ) ) ; +#2837 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000201400, 0.5000000000001660900, -6.600000000000013900 ) ) ; +#2838 = VECTOR ( 'NONE', #2644, 1000.000000000000000 ) ; +#2839 = ORIENTED_EDGE ( 'NONE', *, *, #3535, .T. ) ; +#2840 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000238200, 0.4000000000002041400, -3.000000000000032000 ) ) ; +#2841 = DIRECTION ( 'NONE', ( -1.000000000000000000, 7.742115945224492400E-029, 7.391429510507072300E-015 ) ) ; +#2842 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000189800, 0.4994289329492777000, -8.209104588840332900 ) ) ; +#2843 = VECTOR ( 'NONE', #4409, 1000.000000000000000 ) ; +#2844 = LINE ( 'NONE', #3320, #1245 ) ; +#2845 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000236100, 0.07689437438255455900, -2.000000000000017300 ) ) ; +#2846 = LINE ( 'NONE', #26, #3023 ) ; +#2847 = VERTEX_POINT ( 'NONE', #1356 ) ; +#2848 = LINE ( 'NONE', #1408, #1172 ) ; +#2849 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#2850 = AXIS2_PLACEMENT_3D ( 'NONE', #3612, #2819, #4840 ) ; +#2851 = AXIS2_PLACEMENT_3D ( 'NONE', #1528, #2759, #4766 ) ; +#2852 = FACE_OUTER_BOUND ( 'NONE', #4573, .T. ) ; +#2853 = ORIENTED_EDGE ( 'NONE', *, *, #3302, .T. ) ; +#2854 = ORIENTED_EDGE ( 'NONE', *, *, #1024, .F. ) ; +#2855 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000244900, -0.09999999999979568300, -0.9443991857387211700 ) ) ; +#2856 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002127100, 5.000000000000188300, -4.250000000000057700 ) ) ; +#2857 = EDGE_CURVE ( 'NONE', #3677, #869, #1544, .T. ) ; +#2858 = EDGE_LOOP ( 'NONE', ( #403, #404, #1073, #1742 ) ) ; +#2859 = ORIENTED_EDGE ( 'NONE', *, *, #3874, .T. ) ; +#2860 = ORIENTED_EDGE ( 'NONE', *, *, #2769, .T. ) ; +#2861 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000252100, 1.298089913141610200, -0.08005065776185686700 ) ) ; +#2862 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000230200, -0.09999999999979557200, -2.700000000000024200 ) ) ; +#2863 = LINE ( 'NONE', #1711, #208 ) ; +#2864 = EDGE_LOOP ( 'NONE', ( #577, #1059, #5033, #1425, #1986, #1952 ) ) ; +#2865 = ORIENTED_EDGE ( 'NONE', *, *, #2872, .F. ) ; +#2866 = EDGE_CURVE ( 'NONE', #337, #527, #3029, .T. ) ; +#2867 = AXIS2_PLACEMENT_3D ( 'NONE', #196, #3318, #2935 ) ; +#2868 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, -1.110525862004698600E-014, -1.000000000000000000 ) ) ; +#2869 = FACE_OUTER_BOUND ( 'NONE', #1585, .T. ) ; +#2870 = ORIENTED_EDGE ( 'NONE', *, *, #2695, .T. ) ; +#2871 = ORIENTED_EDGE ( 'NONE', *, *, #672, .F. ) ; +#2872 = EDGE_CURVE ( 'NONE', #527, #11, #3406, .T. ) ; +#2873 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999756800, 2.263814136149733300E-013, -0.7999999999999708500 ) ) ; +#2874 = FACE_OUTER_BOUND ( 'NONE', #4929, .T. ) ; +#2875 = ORIENTED_EDGE ( 'NONE', *, *, #414, .F. ) ; +#2876 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002060600, 2.850000000000227500, -6.000000000000043500 ) ) ; +#2877 = LINE ( 'NONE', #4615, #4200 ) ; +#2878 = LINE ( 'NONE', #738, #4473 ) ; +#2879 = DIRECTION ( 'NONE', ( -8.193010895375706900E-015, 6.637856049494207400E-017, -1.000000000000000000 ) ) ; +#2880 = PLANE ( 'NONE', #3765 ) ; +#2881 = EDGE_CURVE ( 'NONE', #1741, #1645, #4500, .T. ) ; +#2882 = VERTEX_POINT ( 'NONE', #2117 ) ; +#2883 = VECTOR ( 'NONE', #2537, 1000.000000000000000 ) ; +#2884 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#2885 = DIRECTION ( 'NONE', ( -8.365839057930752800E-015, -6.263144656875306400E-015, -1.000000000000000000 ) ) ; +#2886 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246201249600E-017, -7.281636885445248400E-015 ) ) ; +#2887 = ORIENTED_EDGE ( 'NONE', *, *, #2733, .F. ) ; +#2888 = LINE ( 'NONE', #1707, #3825 ) ; +#2889 = EDGE_CURVE ( 'NONE', #5124, #740, #3983, .T. ) ; +#2890 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999756800, 5.500000000000234500, -0.8000000000000298000 ) ) ; +#2891 = EDGE_CURVE ( 'NONE', #4908, #1739, #927, .T. ) ; +#2892 = LINE ( 'NONE', #5170, #4544 ) ; +#2893 = VECTOR ( 'NONE', #5067, 1000.000000000000000 ) ; +#2894 = DIRECTION ( 'NONE', ( 5.037783718415668800E-015, 0.7071067811865513500, 0.7071067811865435800 ) ) ; +#2895 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252100, 1.298089913141610200, -0.08005065776185686700 ) ) ; +#2896 = ORIENTED_EDGE ( 'NONE', *, *, #4347, .F. ) ; +#2897 = EDGE_CURVE ( 'NONE', #1689, #15, #1, .T. ) ; +#2898 = AXIS2_PLACEMENT_3D ( 'NONE', #4546, #3717, #923 ) ; +#2899 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.2846218063762091000, -0.9586398840728169700 ) ) ; +#2900 = LINE ( 'NONE', #4637, #2480 ) ; +#2901 = ORIENTED_EDGE ( 'NONE', *, *, #1369, .T. ) ; +#2902 = DIRECTION ( 'NONE', ( -8.352372291740183800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2903 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002020600, 2.750000000000227400, -6.500000000000044400 ) ) ; +#2904 = FACE_BOUND ( 'NONE', #1621, .T. ) ; +#2905 = LINE ( 'NONE', #669, #1034 ) ; +#2906 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999756800, 2.263814136149733300E-013, -0.7999999999999708500 ) ) ; +#2907 = ADVANCED_FACE ( 'NONE', ( #386, #2904, #809 ), #3753, .F. ) ; +#2908 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#2909 = DIRECTION ( 'NONE', ( 7.277050874369692300E-015, 0.04361938736533712400, 0.9990482215818578000 ) ) ; +#2910 = FACE_OUTER_BOUND ( 'NONE', #157, .T. ) ; +#2911 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#2912 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #2720, #4867 ) ; +#2913 = ORIENTED_EDGE ( 'NONE', *, *, #813, .F. ) ; +#2914 = VERTEX_POINT ( 'NONE', #3702 ) ; +#2915 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246193542800E-017, 5.696500529525346000E-031 ) ) ; +#2916 = EDGE_LOOP ( 'NONE', ( #1892, #1255, #2519, #2408 ) ) ; +#2917 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000229900, 4.705000000000228300, -2.715000000000077100 ) ) ; +#2918 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000240100, 2.550000000000217900, -1.650000000000053400 ) ) ; +#2919 = PLANE ( 'NONE', #4543 ) ; +#2920 = EDGE_CURVE ( 'NONE', #4141, #4453, #4555, .T. ) ; +#2921 = VECTOR ( 'NONE', #718, 1000.000000000000000 ) ; +#2922 = ORIENTED_EDGE ( 'NONE', *, *, #418, .T. ) ; +#2923 = ORIENTED_EDGE ( 'NONE', *, *, #1131, .F. ) ; +#2924 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2925 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999807000, 2.776239569296743900, -7.600000000000002300 ) ) ; +#2926 = VECTOR ( 'NONE', #4603, 1000.000000000000000 ) ; +#2927 = ORIENTED_EDGE ( 'NONE', *, *, #4587, .T. ) ; +#2928 = ORIENTED_EDGE ( 'NONE', *, *, #2630, .T. ) ; +#2929 = VERTEX_POINT ( 'NONE', #4149 ) ; +#2930 = EDGE_CURVE ( 'NONE', #3164, #2929, #2421, .T. ) ; +#2931 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 2.776239569296743900, -7.600000000000002300 ) ) ; +#2932 = LINE ( 'NONE', #4915, #3186 ) ; +#2933 = VECTOR ( 'NONE', #2748, 1000.000000000000000 ) ; +#2934 = ADVANCED_FACE ( 'NONE', ( #3720 ), #4530, .F. ) ; +#2935 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246202299800E-017, 0.0000000000000000000 ) ) ; +#2936 = EDGE_CURVE ( 'NONE', #3024, #2976, #1244, .T. ) ; +#2937 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000206700, 5.500000000000234500, -6.000000000000092400 ) ) ; +#2938 = PLANE ( 'NONE', #1955 ) ; +#2939 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 9.531447670202194300E-017, -1.000000000000000000 ) ) ; +#2940 = DIRECTION ( 'NONE', ( 7.228014483236687300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2941 = ORIENTED_EDGE ( 'NONE', *, *, #777, .F. ) ; +#2942 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000228400, 0.1000000000002044400, -2.900000000000023900 ) ) ; +#2943 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2037 ), #3216 ) ; +#2944 = VERTEX_POINT ( 'NONE', #3378 ) ; +#2945 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000245000, -0.09999999999979565500, -0.9443991857387177300 ) ) ; +#2946 = ORIENTED_EDGE ( 'NONE', *, *, #1394, .F. ) ; +#2947 = VECTOR ( 'NONE', #2355, 1000.000000000000000 ) ; +#2948 = EDGE_CURVE ( 'NONE', #2229, #1116, #4050, .T. ) ; +#2949 = VECTOR ( 'NONE', #388, 1000.000000000000100 ) ; +#2950 = VECTOR ( 'NONE', #693, 1000.000000000000100 ) ; +#2951 = ORIENTED_EDGE ( 'NONE', *, *, #584, .T. ) ; +#2952 = CARTESIAN_POINT ( 'NONE', ( -3.449999999999750600, 2.100000000000227500, -0.7999999999999986000 ) ) ; +#2953 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999751100, 0.4000000000002361700, 1.387778780781445700E-014 ) ) ; +#2954 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002186000, 3.350000000000175900, -4.250000000000045300 ) ) ; +#2955 = LINE ( 'NONE', #1516, #3519 ) ; +#2956 = EDGE_LOOP ( 'NONE', ( #4218, #2901, #3097, #4126 ) ) ; +#2957 = EDGE_CURVE ( 'NONE', #1495, #2150, #3847, .T. ) ; +#2958 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.024619699438383000E-014, -1.000000000000000000 ) ) ; +#2959 = PLANE ( 'NONE', #140 ) ; +#2960 = LINE ( 'NONE', #3667, #5179 ) ; +#2961 = ORIENTED_EDGE ( 'NONE', *, *, #2462, .F. ) ; +#2962 = VECTOR ( 'NONE', #443, 1000.000000000000000 ) ; +#2963 = VECTOR ( 'NONE', #4158, 1000.000000000000000 ) ; +#2964 = EDGE_CURVE ( 'NONE', #1958, #3043, #2848, .T. ) ; +#2965 = VECTOR ( 'NONE', #3950, 1000.000000000000000 ) ; +#2966 = ORIENTED_EDGE ( 'NONE', *, *, #1312, .F. ) ; +#2967 = LINE ( 'NONE', #3603, #195 ) ; +#2968 = DIRECTION ( 'NONE', ( -5.374889246201249000E-017, -1.000000000000000000, 3.913799179032202200E-031 ) ) ; +#2969 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -3.978146840631718600E-016 ) ) ; +#2970 = PLANE ( 'NONE', #3912 ) ; +#2971 = VECTOR ( 'NONE', #3597, 1000.000000000000000 ) ; +#2972 = CARTESIAN_POINT ( 'NONE', ( 3.150000000000201500, 2.776239569296748800, -7.600000000000044100 ) ) ; +#2973 = ORIENTED_EDGE ( 'NONE', *, *, #5157, .F. ) ; +#2974 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#2975 = ORIENTED_EDGE ( 'NONE', *, *, #3229, .T. ) ; +#2976 = VERTEX_POINT ( 'NONE', #3833 ) ; +#2977 = DIRECTION ( 'NONE', ( -5.953547734519279500E-015, 0.7071067811865471300, 0.7071067811865479100 ) ) ; +#2978 = VERTEX_POINT ( 'NONE', #287 ) ; +#2979 = EDGE_CURVE ( 'NONE', #3105, #4599, #1963, .T. ) ; +#2980 = VECTOR ( 'NONE', #1135, 1000.000000000000000 ) ; +#2981 = ORIENTED_EDGE ( 'NONE', *, *, #5048, .T. ) ; +#2982 = EDGE_LOOP ( 'NONE', ( #3930, #5140, #1121, #85, #3680, #4276, #29, #2540, #3792, #4911, #4193, #893, #228, #5052, #2579, #478, #5167, #2222 ) ) ; +#2983 = VERTEX_POINT ( 'NONE', #2994 ) ; +#2984 = ADVANCED_FACE ( 'NONE', ( #4922 ), #1835, .F. ) ; +#2985 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246193700600E-017, 5.552201356632754200E-031 ) ) ; +#2986 = LINE ( 'NONE', #1155, #4757 ) ; +#2987 = ORIENTED_EDGE ( 'NONE', *, *, #3431, .F. ) ; +#2988 = ORIENTED_EDGE ( 'NONE', *, *, #3208, .T. ) ; +#2989 = EDGE_CURVE ( 'NONE', #1840, #61, #3978, .T. ) ; +#2990 = LINE ( 'NONE', #375, #1927 ) ; +#2991 = VERTEX_POINT ( 'NONE', #3396 ) ; +#2992 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000252000, 0.4000000000002048600, -8.673617379884035500E-014 ) ) ; +#2993 = SURFACE_SIDE_STYLE ('',( #2573 ) ) ; +#2994 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000202100, 0.5696839565364600900, -6.500000000000047100 ) ) ; +#2995 = EDGE_CURVE ( 'NONE', #706, #3492, #2208, .T. ) ; +#2996 = LINE ( 'NONE', #4015, #1747 ) ; +#2997 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246201352500E-017, -7.395763429917407300E-015 ) ) ; +#2998 = AXIS2_PLACEMENT_3D ( 'NONE', #1113, #1134, #5115 ) ; +#2999 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, -1.000000000000000000, 3.913799179032202200E-031 ) ) ; +#3000 = ORIENTED_EDGE ( 'NONE', *, *, #4116, .T. ) ; +#3001 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000228400, 0.1000000000002044400, -2.900000000000023900 ) ) ; +#3002 = DIRECTION ( 'NONE', ( -7.391429510507072300E-015, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#3003 = CARTESIAN_POINT ( 'NONE', ( 0.8571796769726917100, 3.250000000000227400, -0.9500000000000423700 ) ) ; +#3004 = VERTEX_POINT ( 'NONE', #652 ) ; +#3005 = ORIENTED_EDGE ( 'NONE', *, *, #1696, .T. ) ; +#3006 = ADVANCED_FACE ( 'NONE', ( #1164 ), #4217, .T. ) ; +#3007 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999997802200, 5.000000000000199800, -4.250000000000056000 ) ) ; +#3008 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3009 = VERTEX_POINT ( 'NONE', #2186 ) ; +#3010 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000244900, -0.09999999999979568300, -0.9443991857387211700 ) ) ; +#3011 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4706 ), #1836 ) ; +#3012 = ORIENTED_EDGE ( 'NONE', *, *, #241, .F. ) ; +#3013 = FACE_OUTER_BOUND ( 'NONE', #1873, .T. ) ; +#3014 = LINE ( 'NONE', #3068, #3581 ) ; +#3015 = LINE ( 'NONE', #1863, #2013 ) ; +#3016 = VECTOR ( 'NONE', #1021, 1000.000000000000000 ) ; +#3017 = EDGE_CURVE ( 'NONE', #4127, #187, #508, .T. ) ; +#3018 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 2.100000000000236300, -4.163336342344337700E-014 ) ) ; +#3019 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000228400, 0.1000000000002044400, -2.900000000000023900 ) ) ; +#3020 = LINE ( 'NONE', #608, #2017 ) ; +#3021 = EDGE_LOOP ( 'NONE', ( #2609, #2105, #4297, #3946 ) ) ; +#3022 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201309400E-017, 7.391429510507072300E-015 ) ) ; +#3023 = VECTOR ( 'NONE', #4418, 1000.000000000000000 ) ; +#3024 = VERTEX_POINT ( 'NONE', #2648 ) ; +#3025 = EDGE_CURVE ( 'NONE', #3445, #2247, #4990, .T. ) ; +#3026 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#3027 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3028 = VERTEX_POINT ( 'NONE', #3805 ) ; +#3029 = LINE ( 'NONE', #4164, #681 ) ; +#3030 = VECTOR ( 'NONE', #3369, 1000.000000000000000 ) ; +#3031 = DIRECTION ( 'NONE', ( -7.270030056159898800E-015, 0.04361938736533572900, 0.9990482215818578000 ) ) ; +#3032 = LINE ( 'NONE', #446, #812 ) ; +#3033 = AXIS2_PLACEMENT_3D ( 'NONE', #5138, #364, #3542 ) ; +#3034 = ADVANCED_FACE ( 'NONE', ( #1482 ), #1446, .F. ) ; +#3035 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.971276677246343200E-016, 7.327711234729614700E-015 ) ) ; +#3036 = EDGE_LOOP ( 'NONE', ( #523, #4612, #1111, #3424, #2111, #3508, #565, #1935, #4373, #2061, #2896, #510 ) ) ; +#3037 = ORIENTED_EDGE ( 'NONE', *, *, #4584, .F. ) ; +#3038 = AXIS2_PLACEMENT_3D ( 'NONE', #2842, #1313, #4852 ) ; +#3039 = PLANE ( 'NONE', #2203 ) ; +#3040 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246193567500E-017, 5.629900911267176600E-031 ) ) ; +#3041 = VECTOR ( 'NONE', #2392, 1000.000000000000100 ) ; +#3042 = ORIENTED_EDGE ( 'NONE', *, *, #3469, .T. ) ; +#3043 = VERTEX_POINT ( 'NONE', #4272 ) ; +#3044 = VERTEX_POINT ( 'NONE', #1846 ) ; +#3045 = DIRECTION ( 'NONE', ( 5.877535321837361700E-015, 0.7071067811864988300, -0.7071067811865963100 ) ) ; +#3046 = EDGE_CURVE ( 'NONE', #3343, #4856, #559, .T. ) ; +#3047 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 6.258868353590623600E-015 ) ) ; +#3048 = LINE ( 'NONE', #2152, #1988 ) ; +#3049 = ORIENTED_EDGE ( 'NONE', *, *, #1887, .T. ) ; +#3050 = EDGE_LOOP ( 'NONE', ( #989, #392, #4940, #5180, #2455, #1698, #1712, #3088 ) ) ; +#3051 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000244900, -0.09999999999979568300, -0.9443991857387211700 ) ) ; +#3052 = LINE ( 'NONE', #3812, #160 ) ; +#3053 = LINE ( 'NONE', #1933, #2566 ) ; +#3054 = EDGE_CURVE ( 'NONE', #420, #4623, #2776, .T. ) ; +#3055 = PLANE ( 'NONE', #3139 ) ; +#3056 = EDGE_CURVE ( 'NONE', #1909, #4569, #2900, .T. ) ; +#3057 = AXIS2_PLACEMENT_3D ( 'NONE', #4949, #4521, #3743 ) ; +#3058 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002066100, 3.350000000000227900, -5.900000000000043900 ) ) ; +#3059 = ADVANCED_FACE ( 'NONE', ( #1776 ), #2327, .F. ) ; +#3060 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000252000, 5.160000000000229300, -8.317486077050872800E-014 ) ) ; +#3061 = EDGE_CURVE ( 'NONE', #2588, #916, #743, .T. ) ; +#3062 = DIRECTION ( 'NONE', ( 1.188166764367676100E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3063 = PLANE ( 'NONE', #4858 ) ; +#3064 = VERTEX_POINT ( 'NONE', #1151 ) ; +#3065 = ORIENTED_EDGE ( 'NONE', *, *, #713, .F. ) ; +#3066 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999749800, 0.5400000000002356200, 1.031990898986422500E-014 ) ) ; +#3067 = FACE_OUTER_BOUND ( 'NONE', #1700, .T. ) ; +#3068 = CARTESIAN_POINT ( 'NONE', ( -1.299999999999780200, 4.200000000000235500, -5.898059818321144100E-014 ) ) ; +#3069 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 3.350000000000216800, -1.650000000000061900 ) ) ; +#3070 = VECTOR ( 'NONE', #2030, 1000.000000000000000 ) ; +#3071 = VECTOR ( 'NONE', #2174, 1000.000000000000000 ) ; +#3072 = VECTOR ( 'NONE', #2401, 1000.000000000000000 ) ; +#3073 = DIRECTION ( 'NONE', ( 6.133173666733086700E-015, -0.7071067811866513800, -0.7071067811864437700 ) ) ; +#3074 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000205800, 0.5696839565364602000, -6.000000000000047100 ) ) ; +#3075 = AXIS2_PLACEMENT_3D ( 'NONE', #2045, #2007, #3257 ) ; +#3076 = VECTOR ( 'NONE', #249, 1000.000000000000000 ) ; +#3077 = VECTOR ( 'NONE', #2330, 1000.000000000000000 ) ; +#3078 = ORIENTED_EDGE ( 'NONE', *, *, #3046, .T. ) ; +#3079 = DIRECTION ( 'NONE', ( -5.110888613495318000E-015, 0.7071067811865413600, -0.7071067811865537900 ) ) ; +#3080 = DIRECTION ( 'NONE', ( 1.000000000000000000, -7.627114208151728300E-029, -7.281636885445248400E-015 ) ) ; +#3081 = FACE_OUTER_BOUND ( 'NONE', #4256, .T. ) ; +#3082 = VERTEX_POINT ( 'NONE', #4305 ) ; +#3083 = ADVANCED_FACE ( 'NONE', ( #2341 ), #2688, .F. ) ; +#3084 = EDGE_CURVE ( 'NONE', #290, #3996, #3781, .T. ) ; +#3085 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246193700600E-017, 5.552201356632754200E-031 ) ) ; +#3086 = VECTOR ( 'NONE', #1418, 1000.000000000000000 ) ; +#3087 = VECTOR ( 'NONE', #1350, 1000.000000000000000 ) ; +#3088 = ORIENTED_EDGE ( 'NONE', *, *, #3192, .F. ) ; +#3089 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#3090 = DIRECTION ( 'NONE', ( -5.374889246202299800E-017, -1.000000000000000000, 2.911889426288084600E-031 ) ) ; +#3091 = ADVANCED_FACE ( 'NONE', ( #1303 ), #2289, .F. ) ; +#3092 = LINE ( 'NONE', #1206, #4675 ) ; +#3093 = LINE ( 'NONE', #3992, #2971 ) ; +#3094 = EDGE_CURVE ( 'NONE', #1116, #4827, #2083, .T. ) ; +#3095 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000252100, 4.430000000000230600, -6.165072440186474400E-014 ) ) ; +#3096 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002395900, 3.350000000000227500, -1.350000000000041600 ) ) ; +#3097 = ORIENTED_EDGE ( 'NONE', *, *, #3334, .F. ) ; +#3098 = DIRECTION ( 'NONE', ( 5.374889246201352500E-017, 1.000000000000000000, -3.975140932691230600E-031 ) ) ; +#3099 = ORIENTED_EDGE ( 'NONE', *, *, #4693, .T. ) ; +#3100 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002188200, 2.850000000000227500, -4.250000000000031100 ) ) ; +#3101 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000237900, 2.550000000000214300, -1.650000000000047900 ) ) ; +#3102 = ORIENTED_EDGE ( 'NONE', *, *, #3430, .F. ) ; +#3103 = PLANE ( 'NONE', #571 ) ; +#3104 = VECTOR ( 'NONE', #4625, 1000.000000000000000 ) ; +#3105 = VERTEX_POINT ( 'NONE', #2310 ) ; +#3106 = EDGE_LOOP ( 'NONE', ( #2438, #4894, #83, #1407 ) ) ; +#3107 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000234100, 4.355000000000233100, -5.261941203825680100 ) ) ; +#3108 = DIRECTION ( 'NONE', ( -0.2515875261947527200, -0.2347343575773417300, 0.9389374303093668300 ) ) ; +#3109 = AXIS2_PLACEMENT_3D ( 'NONE', #1865, #3045, #4694 ) ; +#3110 = LINE ( 'NONE', #900, #2618 ) ; +#3111 = ORIENTED_EDGE ( 'NONE', *, *, #227, .F. ) ; +#3112 = ORIENTED_EDGE ( 'NONE', *, *, #52, .F. ) ; +#3113 = ORIENTED_EDGE ( 'NONE', *, *, #2995, .T. ) ; +#3114 = FILL_AREA_STYLE ('',( #4303 ) ) ; +#3115 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999751100, 5.500000000000226500, 2.081668171172168500E-014 ) ) ; +#3116 = FACE_OUTER_BOUND ( 'NONE', #3587, .T. ) ; +#3117 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999763600, 2.800000000000216100, -1.900000000000017200 ) ) ; +#3118 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 3.350000000000233200, -6.938893903907228400E-015 ) ) ; +#3119 = EDGE_CURVE ( 'NONE', #2162, #706, #4667, .T. ) ; +#3120 = LINE ( 'NONE', #1072, #4082 ) ; +#3121 = FACE_OUTER_BOUND ( 'NONE', #4608, .T. ) ; +#3122 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, -1.000000000000000000, 3.923442857790347700E-031 ) ) ; +#3123 = EDGE_CURVE ( 'NONE', #5095, #1840, #5049, .T. ) ; +#3124 = DIRECTION ( 'NONE', ( 7.243900229353696500E-015, -9.531447670202232500E-017, 1.000000000000000000 ) ) ; +#3125 = ORIENTED_EDGE ( 'NONE', *, *, #96, .T. ) ; +#3126 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999750700, 3.350000000000234600, 1.040834085586084300E-014 ) ) ; +#3127 = EDGE_LOOP ( 'NONE', ( #78, #4696, #2780, #3049, #1543, #4185, #4186, #3979, #3725, #3794, #601, #1687, #3782, #341 ) ) ; +#3128 = VERTEX_POINT ( 'NONE', #2702 ) ; +#3129 = EDGE_CURVE ( 'NONE', #869, #3559, #251, .T. ) ; +#3130 = DIRECTION ( 'NONE', ( -6.133173666733221600E-015, -0.7071067811865962000, -0.7071067811864987200 ) ) ; +#3131 = DIRECTION ( 'NONE', ( -1.000000000000000000, 7.553458536735556100E-029, 7.281636885445248400E-015 ) ) ; +#3132 = LINE ( 'NONE', #452, #3217 ) ; +#3133 = VERTEX_POINT ( 'NONE', #3074 ) ; +#3134 = EDGE_LOOP ( 'NONE', ( #3935, #1194, #4842, #1709 ) ) ; +#3135 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 1.710477983563044100, -3.919373068745948000E-014 ) ) ; +#3136 = VECTOR ( 'NONE', #3998, 1000.000000000000000 ) ; +#3137 = VECTOR ( 'NONE', #3073, 1000.000000000000000 ) ; +#3138 = LINE ( 'NONE', #2992, #3391 ) ; +#3139 = AXIS2_PLACEMENT_3D ( 'NONE', #3003, #2232, #1459 ) ; +#3140 = ORIENTED_EDGE ( 'NONE', *, *, #5151, .F. ) ; +#3141 = PLANE ( 'NONE', #762 ) ; +#3142 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000203600, 3.700000000000169400, -6.000000000000078200 ) ) ; +#3143 = ADVANCED_FACE ( 'NONE', ( #2538 ), #4688, .T. ) ; +#3144 = FACE_OUTER_BOUND ( 'NONE', #1981, .T. ) ; +#3145 = ORIENTED_EDGE ( 'NONE', *, *, #2361, .F. ) ; +#3146 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3147 = EDGE_CURVE ( 'NONE', #3233, #889, #1716, .T. ) ; +#3148 = VECTOR ( 'NONE', #1979, 1000.000000000000000 ) ; +#3149 = ORIENTED_EDGE ( 'NONE', *, *, #4090, .F. ) ; +#3150 = LINE ( 'NONE', #2953, #1965 ) ; +#3151 = ORIENTED_EDGE ( 'NONE', *, *, #1653, .T. ) ; +#3152 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 0.1000000000002270000, -2.910707410969268500E-014 ) ) ; +#3153 = ORIENTED_EDGE ( 'NONE', *, *, #2891, .T. ) ; +#3154 = VECTOR ( 'NONE', #2911, 1000.000000000000000 ) ; +#3155 = VECTOR ( 'NONE', #312, 1000.000000000000000 ) ; +#3156 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 1.720168712332491500E-013, -5.999999999999983100 ) ) ; +#3157 = EDGE_CURVE ( 'NONE', #912, #3105, #1831, .T. ) ; +#3158 = EDGE_CURVE ( 'NONE', #1165, #960, #3280, .T. ) ; +#3159 = SURFACE_SIDE_STYLE ('',( #1410 ) ) ; +#3160 = LINE ( 'NONE', #2817, #2091 ) ; +#3161 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#3162 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002429200, 3.350000000000211500, -0.9500000000000409200 ) ) ; +#3163 = ORIENTED_EDGE ( 'NONE', *, *, #4896, .F. ) ; +#3164 = VERTEX_POINT ( 'NONE', #1926 ) ; +#3165 = EDGE_CURVE ( 'NONE', #406, #4309, #622, .T. ) ; +#3166 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999793000, 5.500000000000173200, -6.000000000000040000 ) ) ; +#3167 = PLANE ( 'NONE', #4474 ) ; +#3168 = ORIENTED_EDGE ( 'NONE', *, *, #813, .T. ) ; +#3169 = CARTESIAN_POINT ( 'NONE', ( 1.824999999999996000, 1.549473512459565700E-013, -7.599999999999971200 ) ) ; +#3170 = ADVANCED_FACE ( 'NONE', ( #3664 ), #3517, .F. ) ; +#3171 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#3172 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000239600, 3.350000000000227500, -1.350000000000045400 ) ) ; +#3173 = FILL_AREA_STYLE ('',( #4425 ) ) ; +#3174 = LINE ( 'NONE', #2256, #888 ) ; +#3175 = ORIENTED_EDGE ( 'NONE', *, *, #641, .T. ) ; +#3176 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000205800, 2.850000000000227500, -6.000000000000047100 ) ) ; +#3177 = VERTEX_POINT ( 'NONE', #5150 ) ; +#3178 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000252500, 1.710477983563044100, -3.584739506428718000E-014 ) ) ; +#3179 = PLANE ( 'NONE', #2696 ) ; +#3180 = LINE ( 'NONE', #347, #1454 ) ; +#3181 = VERTEX_POINT ( 'NONE', #1261 ) ; +#3182 = ORIENTED_EDGE ( 'NONE', *, *, #2535, .T. ) ; +#3183 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000202100, 2.750000000000227400, -6.500000000000048000 ) ) ; +#3184 = AXIS2_PLACEMENT_3D ( 'NONE', #2463, #4102, #4467 ) ; +#3185 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999792900, 3.700000000000172900, -6.000000000000027500 ) ) ; +#3186 = VECTOR ( 'NONE', #3663, 1000.000000000000000 ) ; +#3187 = LINE ( 'NONE', #43, #892 ) ; +#3188 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201352500E-017, 0.0000000000000000000 ) ) ; +#3189 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000206100, 3.350000000000211500, -6.000000000000045300 ) ) ; +#3190 = CARTESIAN_POINT ( 'NONE', ( 0.8748965478733751200, -0.003912725495543102800, -8.653692545638461900 ) ) ; +#3191 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193463900E-017, -5.724082189611988100E-031 ) ) ; +#3192 = EDGE_CURVE ( 'NONE', #4141, #2236, #674, .T. ) ; +#3193 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000244000, 2.266977906954246500E-013, -1.044399185738743400 ) ) ; +#3194 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002015100, -0.02974497641265102700, -6.573828367580838400 ) ) ; +#3195 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193463900E-017, -5.724082189611988100E-031 ) ) ; +#3196 = ORIENTED_EDGE ( 'NONE', *, *, #1409, .T. ) ; +#3197 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3198 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000252100, 1.298089913141610200, -0.08005065776185686700 ) ) ; +#3199 = EDGE_CURVE ( 'NONE', #4388, #3682, #1538, .T. ) ; +#3200 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3201 = ORIENTED_EDGE ( 'NONE', *, *, #4782, .T. ) ; +#3202 = VERTEX_POINT ( 'NONE', #3990 ) ; +#3203 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000218800, 2.850000000000193700, -4.250000000000050600 ) ) ; +#3204 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 6.258868353590623600E-015 ) ) ; +#3205 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3206 = LINE ( 'NONE', #780, #4104 ) ; +#3207 = FACE_BOUND ( 'NONE', #1601, .T. ) ; +#3208 = EDGE_CURVE ( 'NONE', #740, #3220, #378, .T. ) ; +#3209 = VECTOR ( 'NONE', #4803, 1000.000000000000000 ) ; +#3210 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000228400, 0.1000000000002044400, -2.900000000000023900 ) ) ; +#3211 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 2.034402214832335700E-013, -2.999999999999983600 ) ) ; +#3212 = FACE_OUTER_BOUND ( 'NONE', #4004, .T. ) ; +#3213 = PLANE ( 'NONE', #686 ) ; +#3214 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201356800E-017, -7.391429510507072300E-015 ) ) ; +#3215 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 2.348635717332176500E-013, -1.734723475976807100E-014 ) ) ; +#3216 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4712 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3547, #3528, #1547 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3217 = VECTOR ( 'NONE', #41, 1000.000000000000000 ) ; +#3218 = ORIENTED_EDGE ( 'NONE', *, *, #1157, .F. ) ; +#3219 = DIRECTION ( 'NONE', ( -5.374889246193621700E-017, -1.000000000000000000, 1.045209539935937300E-014 ) ) ; +#3220 = VERTEX_POINT ( 'NONE', #475 ) ; +#3221 = PLANE ( 'NONE', #4199 ) ; +#3222 = LINE ( 'NONE', #3215, #1773 ) ; +#3223 = FACE_OUTER_BOUND ( 'NONE', #4248, .T. ) ; +#3224 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002429200, 2.850000000000227500, -0.9500000000000409200 ) ) ; +#3225 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002397000, 0.5696839565364602000, -1.350000000000045600 ) ) ; +#3226 = VERTEX_POINT ( 'NONE', #1997 ) ; +#3227 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999770600, 2.038300084272748300E-013, -2.999999999999983600 ) ) ; +#3228 = DIRECTION ( 'NONE', ( -8.365839057930754400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3229 = EDGE_CURVE ( 'NONE', #2794, #3044, #5182, .T. ) ; +#3230 = VECTOR ( 'NONE', #1929, 1000.000000000000000 ) ; +#3231 = ADVANCED_FACE ( 'NONE', ( #3838 ), #4792, .F. ) ; +#3232 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5012, 'distance_accuracy_value', 'NONE'); +#3233 = VERTEX_POINT ( 'NONE', #838 ) ; +#3234 = VERTEX_POINT ( 'NONE', #853 ) ; +#3235 = DIRECTION ( 'NONE', ( 2.639228045337951300E-016, -0.9990482215818576900, 0.04361938736533713100 ) ) ; +#3236 = EDGE_CURVE ( 'NONE', #1989, #127, #4611, .T. ) ; +#3237 = CARTESIAN_POINT ( 'NONE', ( -0.8748965478733751200, -0.003912725495543102800, -8.653692545638461900 ) ) ; +#3238 = ORIENTED_EDGE ( 'NONE', *, *, #1363, .T. ) ; +#3239 = VERTEX_POINT ( 'NONE', #4379 ) ; +#3240 = LINE ( 'NONE', #1433, #1115 ) ; +#3241 = VERTEX_POINT ( 'NONE', #3189 ) ; +#3242 = ORIENTED_EDGE ( 'NONE', *, *, #3147, .F. ) ; +#3243 = EDGE_LOOP ( 'NONE', ( #635, #2946, #2224, #2975, #2473, #4109 ) ) ; +#3244 = EDGE_CURVE ( 'NONE', #4596, #756, #3402, .T. ) ; +#3245 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000201400, 0.5696839565364602000, -6.600000000000043200 ) ) ; +#3246 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999795000, 3.700000000000172000, -6.000000000000016000 ) ) ; +#3247 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999751500, 3.350000000000233700, -5.204170427930421300E-014 ) ) ; +#3248 = VECTOR ( 'NONE', #4096, 1000.000000000000000 ) ; +#3249 = ORIENTED_EDGE ( 'NONE', *, *, #2319, .F. ) ; +#3250 = VERTEX_POINT ( 'NONE', #787 ) ; +#3251 = ORIENTED_EDGE ( 'NONE', *, *, #3985, .T. ) ; +#3252 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000206700, 3.700000000000172900, -6.000000000000072800 ) ) ; +#3253 = VECTOR ( 'NONE', #3927, 1000.000000000000000 ) ; +#3254 = VECTOR ( 'NONE', #4343, 1000.000000000000000 ) ; +#3255 = ADVANCED_FACE ( 'NONE', ( #4361 ), #65, .F. ) ; +#3256 = DIRECTION ( 'NONE', ( -6.133173666733086700E-015, -0.7071067811866513800, -0.7071067811864437700 ) ) ; +#3257 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201352500E-017, 0.0000000000000000000 ) ) ; +#3258 = ORIENTED_EDGE ( 'NONE', *, *, #4438, .F. ) ; +#3259 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000252500, -1.599751681989993200E-028, -2.554230773248836400E-014 ) ) ; +#3260 = EDGE_CURVE ( 'NONE', #1739, #2619, #4234, .T. ) ; +#3261 = VERTEX_POINT ( 'NONE', #4 ) ; +#3262 = VERTEX_POINT ( 'NONE', #4008 ) ; +#3263 = DIRECTION ( 'NONE', ( -5.417580331251687100E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3264 = LINE ( 'NONE', #4669, #1821 ) ; +#3265 = VECTOR ( 'NONE', #1508, 1000.000000000000000 ) ; +#3266 = ORIENTED_EDGE ( 'NONE', *, *, #4946, .T. ) ; +#3267 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201231700E-017, -7.281636885445248400E-015 ) ) ; +#3268 = VERTEX_POINT ( 'NONE', #3966 ) ; +#3269 = EDGE_CURVE ( 'NONE', #824, #3293, #2846, .T. ) ; +#3270 = VECTOR ( 'NONE', #3900, 1000.000000000000000 ) ; +#3271 = FACE_OUTER_BOUND ( 'NONE', #748, .T. ) ; +#3272 = LINE ( 'NONE', #783, #1227 ) ; +#3273 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000228400, 2.100000000000236300, -2.900000000000023900 ) ) ; +#3274 = LINE ( 'NONE', #1690, #4433 ) ; +#3275 = ORIENTED_EDGE ( 'NONE', *, *, #19, .F. ) ; +#3276 = ADVANCED_FACE ( 'NONE', ( #4495 ), #3167, .F. ) ; +#3277 = PLANE ( 'NONE', #107 ) ; +#3278 = FACE_OUTER_BOUND ( 'NONE', #4794, .T. ) ; +#3279 = PLANE ( 'NONE', #4898 ) ; +#3280 = LINE ( 'NONE', #3115, #1666 ) ; +#3281 = ORIENTED_EDGE ( 'NONE', *, *, #1320, .T. ) ; +#3282 = LINE ( 'NONE', #2177, #2210 ) ; +#3283 = FACE_OUTER_BOUND ( 'NONE', #2263, .T. ) ; +#3284 = CARTESIAN_POINT ( 'NONE', ( -1.825000000000004200, 0.09000000000023535000, 0.0000000000000000000 ) ) ; +#3285 = AXIS2_PLACEMENT_3D ( 'NONE', #543, #917, #4633 ) ; +#3286 = LINE ( 'NONE', #3480, #3533 ) ; +#3287 = ORIENTED_EDGE ( 'NONE', *, *, #5090, .T. ) ; +#3288 = VECTOR ( 'NONE', #4021, 1000.000000000000000 ) ; +#3289 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999763100, 3.100000000000217200, -1.650000000000014800 ) ) ; +#3290 = DIRECTION ( 'NONE', ( -7.395763429917407300E-015, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3291 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 0.0000000000000000000 ) ) ; +#3292 = EDGE_CURVE ( 'NONE', #3340, #2236, #1159, .T. ) ; +#3293 = VERTEX_POINT ( 'NONE', #4463 ) ; +#3294 = VERTEX_POINT ( 'NONE', #2807 ) ; +#3295 = ORIENTED_EDGE ( 'NONE', *, *, #2243, .F. ) ; +#3296 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#3297 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999764400, 2.800000000000218800, -1.650000000000005000 ) ) ; +#3298 = ORIENTED_EDGE ( 'NONE', *, *, #4045, .F. ) ; +#3299 = VERTEX_POINT ( 'NONE', #2413 ) ; +#3300 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930754400E-015 ) ) ; +#3301 = ORIENTED_EDGE ( 'NONE', *, *, #1942, .T. ) ; +#3302 = EDGE_CURVE ( 'NONE', #883, #3241, #3777, .T. ) ; +#3303 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000251600, 2.100000000000236300, -3.872070866926526600E-014 ) ) ; +#3304 = LINE ( 'NONE', #3190, #766 ) ; +#3305 = ORIENTED_EDGE ( 'NONE', *, *, #1723, .T. ) ; +#3306 = ORIENTED_EDGE ( 'NONE', *, *, #1341, .F. ) ; +#3307 = DIRECTION ( 'NONE', ( -5.374889246202299200E-017, -1.000000000000000000, 4.496545838793117900E-031 ) ) ; +#3308 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811865555700, 0.7071067811865393600 ) ) ; +#3309 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 8.365839057930754400E-015 ) ) ; +#3310 = FACE_OUTER_BOUND ( 'NONE', #4981, .T. ) ; +#3311 = ORIENTED_EDGE ( 'NONE', *, *, #2948, .F. ) ; +#3312 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999756500, 3.350000000000217200, -1.650000000000017200 ) ) ; +#3313 = LINE ( 'NONE', #2855, #4832 ) ; +#3314 = LINE ( 'NONE', #2385, #218 ) ; +#3315 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#3316 = EDGE_CURVE ( 'NONE', #1886, #132, #4355, .T. ) ; +#3317 = EDGE_LOOP ( 'NONE', ( #464, #1442, #2170, #4650 ) ) ; +#3318 = DIRECTION ( 'NONE', ( 5.374889246202299800E-017, -1.000000000000000000, 2.911889426288084600E-031 ) ) ; +#3319 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999798100, 1.674008154317618800E-013, -7.599999999999971200 ) ) ; +#3320 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000242900, 3.350000000000211500, -0.9500000000000445900 ) ) ; +#3321 = DIRECTION ( 'NONE', ( -8.365839057930752800E-015, -6.258868353590623600E-015, -1.000000000000000000 ) ) ; +#3322 = ORIENTED_EDGE ( 'NONE', *, *, #1867, .T. ) ; +#3323 = EDGE_CURVE ( 'NONE', #4596, #960, #2139, .T. ) ; +#3324 = ADVANCED_FACE ( 'NONE', ( #3144 ), #1337, .F. ) ; +#3325 = EDGE_CURVE ( 'NONE', #3359, #2976, #3274, .T. ) ; +#3326 = AXIS2_PLACEMENT_3D ( 'NONE', #2837, #3589, #5171 ) ; +#3327 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000239600, 3.350000000000227500, -1.350000000000045400 ) ) ; +#3328 = DIRECTION ( 'NONE', ( -1.508901352800680500E-015, 0.9797983948295244700, 0.1999877633493794500 ) ) ; +#3329 = LINE ( 'NONE', #5132, #2008 ) ; +#3330 = DIRECTION ( 'NONE', ( -6.133173666733086700E-015, -0.7071067811866513800, -0.7071067811864437700 ) ) ; +#3331 = VECTOR ( 'NONE', #2362, 1000.000000000000000 ) ; +#3332 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002015100, 0.5696839565364602000, -6.600000000000039600 ) ) ; +#3333 = ORIENTED_EDGE ( 'NONE', *, *, #2857, .T. ) ; +#3334 = EDGE_CURVE ( 'NONE', #637, #3262, #2960, .T. ) ; +#3335 = ORIENTED_EDGE ( 'NONE', *, *, #3797, .T. ) ; +#3336 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000201400, 0.5696839565364602000, -6.600000000000043200 ) ) ; +#3337 = DIRECTION ( 'NONE', ( 5.374889246202433500E-017, -1.000000000000000000, -1.606225440719261700E-016 ) ) ; +#3338 = VECTOR ( 'NONE', #2112, 1000.000000000000100 ) ; +#3339 = ORIENTED_EDGE ( 'NONE', *, *, #872, .F. ) ; +#3340 = VERTEX_POINT ( 'NONE', #4132 ) ; +#3341 = VECTOR ( 'NONE', #841, 1000.000000000000000 ) ; +#3342 = VECTOR ( 'NONE', #4982, 1000.000000000000000 ) ; +#3343 = VERTEX_POINT ( 'NONE', #2876 ) ; +#3344 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000242700, 3.250000000000227400, -0.9500000000000452500 ) ) ; +#3345 = VECTOR ( 'NONE', #3611, 1000.000000000000000 ) ; +#3346 = CARTESIAN_POINT ( 'NONE', ( -3.750000000000230000, 3.420000000000227700, -2.715000000000083300 ) ) ; +#3347 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000246200, 2.100000000000236300, -0.7999999999999983800 ) ) ; +#3348 = AXIS2_PLACEMENT_3D ( 'NONE', #4326, #3062, #5066 ) ; +#3349 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'part', '', ( #4575 ) ) ; +#3350 = ADVANCED_FACE ( 'NONE', ( #3081 ), #531, .F. ) ; +#3351 = VERTEX_POINT ( 'NONE', #3312 ) ; +#3352 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930754400E-015 ) ) ; +#3353 = VERTEX_POINT ( 'NONE', #897 ) ; +#3354 = DIRECTION ( 'NONE', ( 7.395763429917407300E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3355 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000231100, 2.100000000000236300, -2.900000000000023900 ) ) ; +#3356 = EDGE_CURVE ( 'NONE', #819, #4476, #2715, .T. ) ; +#3357 = VECTOR ( 'NONE', #5028, 1000.000000000000000 ) ; +#3358 = ORIENTED_EDGE ( 'NONE', *, *, #259, .T. ) ; +#3359 = VERTEX_POINT ( 'NONE', #3696 ) ; +#3360 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000246200, 2.100000000000236300, -0.8000000000000470100 ) ) ; +#3361 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000222300, 5.500000000000172300, -6.000000000000076400 ) ) ; +#3362 = DIRECTION ( 'NONE', ( -6.133173666733495400E-015, 0.7071067811865474600, -0.7071067811865476800 ) ) ; +#3363 = LINE ( 'NONE', #2172, #4950 ) ; +#3364 = ORIENTED_EDGE ( 'NONE', *, *, #5090, .F. ) ; +#3365 = ORIENTED_EDGE ( 'NONE', *, *, #4053, .T. ) ; +#3366 = EDGE_CURVE ( 'NONE', #2944, #3739, #2587, .T. ) ; +#3367 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999756500, 5.500000000000226500, -0.8000000000000263600 ) ) ; +#3368 = FACE_OUTER_BOUND ( 'NONE', #1726, .T. ) ; +#3369 = DIRECTION ( 'NONE', ( 1.029231937005643000E-014, -7.826578390373813300E-015, -1.000000000000000000 ) ) ; +#3370 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#3371 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000242700, 3.250000000000227400, -0.9500000000000452500 ) ) ; +#3372 = VECTOR ( 'NONE', #3047, 1000.000000000000000 ) ; +#3373 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002022800, 2.750000000000227400, -6.500000000000044400 ) ) ; +#3374 = ADVANCED_FACE ( 'NONE', ( #1298 ), #2073, .F. ) ; +#3375 = DIRECTION ( 'NONE', ( 2.639228045337871400E-016, 0.9990482215818578000, -0.04361938736533603500 ) ) ; +#3376 = CARTESIAN_POINT ( 'NONE', ( -1.300000000000234100, 4.355000000000233100, -2.000000000000042600 ) ) ; +#3377 = ORIENTED_EDGE ( 'NONE', *, *, #3606, .F. ) ; +#3378 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000230700, 2.100000000000236300, -2.900000000000021200 ) ) ; +#3379 = AXIS2_PLACEMENT_3D ( 'NONE', #2691, #3835, #4274 ) ; +#3380 = ORIENTED_EDGE ( 'NONE', *, *, #1994, .T. ) ; +#3381 = PLANE ( 'NONE', #2003 ) ; +#3382 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002429200, 3.350000000000211500, -0.9500000000000409200 ) ) ; +#3383 = EDGE_LOOP ( 'NONE', ( #2416, #1919, #921, #410 ) ) ; +#3384 = EDGE_CURVE ( 'NONE', #4856, #1052, #1091, .T. ) ; +#3385 = LINE ( 'NONE', #3203, #3768 ) ; +#3386 = ORIENTED_EDGE ( 'NONE', *, *, #3244, .T. ) ; +#3387 = DIRECTION ( 'NONE', ( -5.374889246201352500E-017, -1.000000000000000000, 3.975140932691230600E-031 ) ) ; +#3388 = LINE ( 'NONE', #2774, #1229 ) ; +#3389 = DIRECTION ( 'NONE', ( -5.374889246201249000E-017, -1.000000000000000000, 3.913799179032202200E-031 ) ) ; +#3390 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000252000, 5.500000000000227400, -8.673617379884035500E-014 ) ) ; +#3391 = VECTOR ( 'NONE', #1768, 1000.000000000000000 ) ; +#3392 = ORIENTED_EDGE ( 'NONE', *, *, #1309, .T. ) ; +#3393 = EDGE_CURVE ( 'NONE', #3559, #706, #739, .T. ) ; +#3394 = AXIS2_PLACEMENT_3D ( 'NONE', #3303, #1331, #4531 ) ; +#3395 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #1078 ) ; +#3396 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002188200, 3.350000000000211500, -4.250000000000032000 ) ) ; +#3397 = VECTOR ( 'NONE', #1323, 1000.000000000000000 ) ; +#3398 = ORIENTED_EDGE ( 'NONE', *, *, #4125, .T. ) ; +#3399 = VECTOR ( 'NONE', #3130, 1000.000000000000100 ) ; +#3400 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#3401 = EDGE_CURVE ( 'NONE', #4136, #420, #3525, .T. ) ; +#3402 = LINE ( 'NONE', #4835, #3593 ) ; +#3403 = ORIENTED_EDGE ( 'NONE', *, *, #3165, .F. ) ; +#3404 = ADVANCED_FACE ( 'NONE', ( #5046 ), #4165, .T. ) ; +#3405 = VECTOR ( 'NONE', #3354, 1000.000000000000000 ) ; +#3406 = LINE ( 'NONE', #2942, #2655 ) ; +#3407 = CARTESIAN_POINT ( 'NONE', ( 0.8571796769726917100, 3.250000000000227400, -0.9500000000000423700 ) ) ; +#3408 = LINE ( 'NONE', #1781, #928 ) ; +#3409 = CARTESIAN_POINT ( 'NONE', ( 0.8748965478734310700, 2.966530065588401000, -0.8838797376473455100 ) ) ; +#3410 = ORIENTED_EDGE ( 'NONE', *, *, #3393, .T. ) ; +#3411 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3412 = LINE ( 'NONE', #2423, #2277 ) ; +#3413 = DIRECTION ( 'NONE', ( 8.156285340228848500E-015, 7.282397625204327700E-017, -1.000000000000000000 ) ) ; +#3414 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002397000, 0.5696839565364602000, -1.350000000000045600 ) ) ; +#3415 = ORIENTED_EDGE ( 'NONE', *, *, #4019, .F. ) ; +#3416 = ORIENTED_EDGE ( 'NONE', *, *, #684, .T. ) ; +#3417 = DIRECTION ( 'NONE', ( 7.178166107490281200E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3418 = ORIENTED_EDGE ( 'NONE', *, *, #945, .T. ) ; +#3419 = ORIENTED_EDGE ( 'NONE', *, *, #459, .F. ) ; +#3420 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#3421 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3422 = EDGE_CURVE ( 'NONE', #2653, #4077, #309, .T. ) ; +#3423 = VERTEX_POINT ( 'NONE', #2449 ) ; +#3424 = ORIENTED_EDGE ( 'NONE', *, *, #2118, .T. ) ; +#3425 = DIRECTION ( 'NONE', ( 7.751334854710907000E-029, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#3426 = VECTOR ( 'NONE', #3637, 1000.000000000000000 ) ; +#3427 = ORIENTED_EDGE ( 'NONE', *, *, #4497, .F. ) ; +#3428 = EDGE_LOOP ( 'NONE', ( #1283, #3163, #2742, #3005 ) ) ; +#3429 = ORIENTED_EDGE ( 'NONE', *, *, #4316, .T. ) ; +#3430 = EDGE_CURVE ( 'NONE', #3554, #2493, #1030, .T. ) ; +#3431 = EDGE_CURVE ( 'NONE', #3772, #105, #4607, .T. ) ; +#3432 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002395900, 2.850000000000227500, -1.350000000000041600 ) ) ; +#3433 = VECTOR ( 'NONE', #4976, 1000.000000000000000 ) ; +#3434 = ADVANCED_FACE ( 'NONE', ( #4108 ), #4883, .T. ) ; +#3435 = VERTEX_POINT ( 'NONE', #887 ) ; +#3436 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3437 = EDGE_CURVE ( 'NONE', #3731, #1849, #4730, .T. ) ; +#3438 = VECTOR ( 'NONE', #992, 1000.000000000000100 ) ; +#3439 = CIRCLE ( 'NONE', #3721, 0.2500000000000000000 ) ; +#3440 = AXIS2_PLACEMENT_3D ( 'NONE', #4901, #4866, #4539 ) ; +#3441 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#3442 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000201400, 0.5696839565364602000, -6.600000000000043200 ) ) ; +#3443 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000196500, 1.560189587753000400E-013, -7.600000000000035200 ) ) ; +#3444 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999770600, 0.4000000000002205700, -2.999999999999985300 ) ) ; +#3445 = VERTEX_POINT ( 'NONE', #2972 ) ; +#3446 = ORIENTED_EDGE ( 'NONE', *, *, #2312, .T. ) ; +#3447 = LINE ( 'NONE', #302, #1220 ) ; +#3448 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000241800, -0.09999999999979566900, -1.270808264217950100 ) ) ; +#3449 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.067853519814894600E-014, 1.000000000000000000 ) ) ; +#3450 = ORIENTED_EDGE ( 'NONE', *, *, #1114, .F. ) ; +#3451 = AXIS2_PLACEMENT_3D ( 'NONE', #3259, #488, #4850 ) ; +#3452 = VECTOR ( 'NONE', #875, 1000.000000000000000 ) ; +#3453 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000186700, 0.2821715336867768300, -8.600000000000013900 ) ) ; +#3454 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002015100, 0.5000000000001660900, -6.600000000000010300 ) ) ; +#3455 = LINE ( 'NONE', #1517, #796 ) ; +#3456 = VECTOR ( 'NONE', #4415, 1000.000000000000000 ) ; +#3457 = LINE ( 'NONE', #2586, #4785 ) ; +#3458 = ADVANCED_FACE ( 'NONE', ( #1419 ), #1534, .F. ) ; +#3459 = LINE ( 'NONE', #2657, #5037 ) ; +#3460 = EDGE_CURVE ( 'NONE', #255, #1675, #3020, .T. ) ; +#3461 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3462 = VECTOR ( 'NONE', #3022, 1000.000000000000000 ) ; +#3463 = VERTEX_POINT ( 'NONE', #1387 ) ; +#3464 = VERTEX_POINT ( 'NONE', #593 ) ; +#3465 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#3466 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000228400, 0.4000000000002048600, -3.000000000000018200 ) ) ; +#3467 = FACE_OUTER_BOUND ( 'NONE', #3482, .T. ) ; +#3468 = ORIENTED_EDGE ( 'NONE', *, *, #2544, .F. ) ; +#3469 = EDGE_CURVE ( 'NONE', #1117, #4338, #4550, .T. ) ; +#3470 = DIRECTION ( 'NONE', ( -5.374889246201249000E-017, 1.000000000000000000, -3.913799179032202200E-031 ) ) ; +#3471 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#3472 = VECTOR ( 'NONE', #1373, 1000.000000000000000 ) ; +#3473 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 1.710477983563044100, -3.584739506428718000E-014 ) ) ; +#3474 = VECTOR ( 'NONE', #1235, 1000.000000000000000 ) ; +#3475 = ORIENTED_EDGE ( 'NONE', *, *, #5065, .T. ) ; +#3476 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252400, 1.710477983563044100, -0.08005065776186022500 ) ) ; +#3477 = ORIENTED_EDGE ( 'NONE', *, *, #344, .T. ) ; +#3478 = LINE ( 'NONE', #4411, #1725 ) ; +#3479 = ORIENTED_EDGE ( 'NONE', *, *, #2010, .F. ) ; +#3480 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252100, 1.298089913141610200, -0.08005065776185686700 ) ) ; +#3481 = PLANE ( 'NONE', #4801 ) ; +#3482 = EDGE_LOOP ( 'NONE', ( #1804, #1551, #2789, #4579 ) ) ; +#3483 = ORIENTED_EDGE ( 'NONE', *, *, #3560, .T. ) ; +#3484 = ADVANCED_FACE ( 'NONE', ( #1358 ), #199, .F. ) ; +#3485 = FACE_OUTER_BOUND ( 'NONE', #4390, .T. ) ; +#3486 = VERTEX_POINT ( 'NONE', #178 ) ; +#3487 = ORIENTED_EDGE ( 'NONE', *, *, #4145, .T. ) ; +#3488 = ADVANCED_FACE ( 'NONE', ( #4984 ), #1351, .F. ) ; +#3489 = EDGE_CURVE ( 'NONE', #3353, #3239, #920, .T. ) ; +#3490 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999795000, 5.500000000000173200, -6.000000000000034600 ) ) ; +#3491 = FACE_OUTER_BOUND ( 'NONE', #3134, .T. ) ; +#3492 = VERTEX_POINT ( 'NONE', #993 ) ; +#3493 = ORIENTED_EDGE ( 'NONE', *, *, #4520, .T. ) ; +#3494 = DIRECTION ( 'NONE', ( 8.365839057930752800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3495 = VECTOR ( 'NONE', #3124, 1000.000000000000000 ) ; +#3496 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002501800, 4.430000000000230600, -4.839302796248553700E-014 ) ) ; +#3497 = EDGE_CURVE ( 'NONE', #1972, #2847, #2472, .T. ) ; +#3498 = AXIS2_PLACEMENT_3D ( 'NONE', #408, #4370, #3583 ) ; +#3499 = DIRECTION ( 'NONE', ( 8.374527125405327500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3500 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3501 = VECTOR ( 'NONE', #1180, 1000.000000000000000 ) ; +#3502 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.2425356250363325500, -0.9701425001453319900 ) ) ; +#3503 = PLANE ( 'NONE', #2557 ) ; +#3504 = PLANE ( 'NONE', #54 ) ; +#3505 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#3506 = ORIENTED_EDGE ( 'NONE', *, *, #874, .T. ) ; +#3507 = ADVANCED_FACE ( 'NONE', ( #2336 ), #3798, .F. ) ; +#3508 = ORIENTED_EDGE ( 'NONE', *, *, #44, .F. ) ; +#3509 = LINE ( 'NONE', #2335, #2458 ) ; +#3510 = AXIS2_PLACEMENT_3D ( 'NONE', #4095, #2108, #1302 ) ; +#3511 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000001897400, 0.4994289329492776500, -8.209104588840329300 ) ) ; +#3512 = DIRECTION ( 'NONE', ( -1.000000000000000000, 7.553458536735556100E-029, 7.281636885445248400E-015 ) ) ; +#3513 = LINE ( 'NONE', #3185, #4098 ) ; +#3514 = ORIENTED_EDGE ( 'NONE', *, *, #1379, .F. ) ; +#3515 = VECTOR ( 'NONE', #4715, 1000.000000000000000 ) ; +#3516 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3517 = PLANE ( 'NONE', #4442 ) ; +#3518 = EDGE_CURVE ( 'NONE', #3009, #3630, #615, .T. ) ; +#3519 = VECTOR ( 'NONE', #3872, 1000.000000000000000 ) ; +#3520 = VERTEX_POINT ( 'NONE', #165 ) ; +#3521 = ORIENTED_EDGE ( 'NONE', *, *, #2146, .F. ) ; +#3522 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3523 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 1.298089913141610200, -3.660576115180942800E-014 ) ) ; +#3524 = DIRECTION ( 'NONE', ( -7.395763429917407300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3525 = LINE ( 'NONE', #2903, #4046 ) ; +#3526 = ORIENTED_EDGE ( 'NONE', *, *, #3292, .T. ) ; +#3527 = EDGE_CURVE ( 'NONE', #4093, #1526, #3905, .T. ) ; +#3528 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3529 = LINE ( 'NONE', #164, #742 ) ; +#3530 = VECTOR ( 'NONE', #3205, 1000.000000000000000 ) ; +#3531 = ORIENTED_EDGE ( 'NONE', *, *, #3489, .T. ) ; +#3532 = LINE ( 'NONE', #4892, #1720 ) ; +#3533 = VECTOR ( 'NONE', #2176, 1000.000000000000000 ) ; +#3534 = ADVANCED_FACE ( 'NONE', ( #3467 ), #629, .F. ) ; +#3535 = EDGE_CURVE ( 'NONE', #1758, #2701, #373, .T. ) ; +#3536 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000234100, 4.200000000000224000, -0.2300000000000586600 ) ) ; +#3537 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3538 = ORIENTED_EDGE ( 'NONE', *, *, #1887, .F. ) ; +#3539 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865479100, 0.7071067811865471300 ) ) ; +#3540 = ADVANCED_FACE ( 'NONE', ( #126 ), #2919, .T. ) ; +#3541 = DIRECTION ( 'NONE', ( 0.9659258262890707500, 0.01128952818585337400, 0.2585727067211789900 ) ) ; +#3542 = DIRECTION ( 'NONE', ( -6.938893903907228400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3543 = CARTESIAN_POINT ( 'NONE', ( 1.085804998649242600, 3.196803978152532800, -0.7372159126092616700 ) ) ; +#3544 = ORIENTED_EDGE ( 'NONE', *, *, #2136, .F. ) ; +#3545 = ORIENTED_EDGE ( 'NONE', *, *, #1338, .T. ) ; +#3546 = VERTEX_POINT ( 'NONE', #4986 ) ; +#3547 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3549 = EDGE_LOOP ( 'NONE', ( #277, #1035, #2434, #3691, #2337, #4824, #491, #1325, #4320, #4540, #1137, #2981, #790, #4571, #4552, #1531, #2461, #4879, #1464, #4952 ) ) ; +#3548 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000212100, 2.550000000000228500, -5.415000000000077300 ) ) ; +#3550 = DIRECTION ( 'NONE', ( 7.299578983070722700E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3551 = AXIS2_PLACEMENT_3D ( 'NONE', #1594, #1278, #436 ) ; +#3552 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3621 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3027, #2185, #3848 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3553 = LINE ( 'NONE', #3169, #4386 ) ; +#3554 = VERTEX_POINT ( 'NONE', #3729 ) ; +#3555 = ORIENTED_EDGE ( 'NONE', *, *, #4086, .F. ) ; +#3556 = ORIENTED_EDGE ( 'NONE', *, *, #2512, .F. ) ; +#3557 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246201352500E-017, -7.395763429917407300E-015 ) ) ; +#3558 = LINE ( 'NONE', #658, #1268 ) ; +#3559 = VERTEX_POINT ( 'NONE', #3373 ) ; +#3560 = EDGE_CURVE ( 'NONE', #2723, #1805, #2266, .T. ) ; +#3561 = DIRECTION ( 'NONE', ( 7.270030056159898800E-015, -0.04361938736533603500, -0.9990482215818578000 ) ) ; +#3562 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 1.710477983563044100, -3.584739506428718000E-014 ) ) ; +#3563 = VECTOR ( 'NONE', #2258, 1000.000000000000000 ) ; +#3564 = DIRECTION ( 'NONE', ( -0.2515875261947534400, -0.1935550669973274100, 0.9482827387983313600 ) ) ; +#3565 = DIRECTION ( 'NONE', ( -5.374889246201352500E-017, -1.000000000000000000, 3.975140932691230600E-031 ) ) ; +#3566 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#3567 = EDGE_CURVE ( 'NONE', #3351, #4596, #1238, .T. ) ; +#3568 = DIRECTION ( 'NONE', ( -2.639228045337951300E-016, 0.9990482215818576900, -0.04361938736533713100 ) ) ; +#3569 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000245000, -0.09999999999979565500, -0.9443991857387177300 ) ) ; +#3570 = ORIENTED_EDGE ( 'NONE', *, *, #4438, .T. ) ; +#3571 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246193937200E-017, 5.384533896632093000E-031 ) ) ; +#3572 = ORIENTED_EDGE ( 'NONE', *, *, #2136, .T. ) ; +#3573 = AXIS2_PLACEMENT_3D ( 'NONE', #1967, #1890, #4384 ) ; +#3574 = VECTOR ( 'NONE', #4178, 1000.000000000000000 ) ; +#3575 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.047445008332814600E-014, 1.000000000000000000 ) ) ; +#3576 = PLANE ( 'NONE', #1075 ) ; +#3577 = VERTEX_POINT ( 'NONE', #1061 ) ; +#3578 = ORIENTED_EDGE ( 'NONE', *, *, #159, .F. ) ; +#3579 = DIRECTION ( 'NONE', ( 6.133173666733086700E-015, -0.7071067811866513800, -0.7071067811864437700 ) ) ; +#3580 = FACE_OUTER_BOUND ( 'NONE', #4211, .T. ) ; +#3581 = VECTOR ( 'NONE', #1127, 1000.000000000000000 ) ; +#3582 = CIRCLE ( 'NONE', #1178, 0.5999999999999963100 ) ; +#3583 = DIRECTION ( 'NONE', ( -6.938893903907228400E-015, 3.295974604355933500E-014, -1.000000000000000000 ) ) ; +#3584 = AXIS2_PLACEMENT_3D ( 'NONE', #3640, #4478, #4067 ) ; +#3585 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002508400, 4.430000000000230600, -4.777293659405028100E-014 ) ) ; +#3586 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -8.365839057930752800E-015 ) ) ; +#3587 = EDGE_LOOP ( 'NONE', ( #114, #1498, #5030, #702 ) ) ; +#3588 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002058400, 2.850000000000227500, -6.000000000000043500 ) ) ; +#3589 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#3590 = VERTEX_POINT ( 'NONE', #4298 ) ; +#3591 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201347000E-017, -7.391429510507072300E-015 ) ) ; +#3592 = EDGE_CURVE ( 'NONE', #3594, #12, #186, .T. ) ; +#3593 = VECTOR ( 'NONE', #3571, 1000.000000000000000 ) ; +#3594 = VERTEX_POINT ( 'NONE', #297 ) ; +#3595 = ORIENTED_EDGE ( 'NONE', *, *, #3061, .F. ) ; +#3596 = ADVANCED_FACE ( 'NONE', ( #974 ), #3481, .F. ) ; +#3597 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#3598 = DIRECTION ( 'NONE', ( 5.374889246201318000E-017, -1.000000000000000000, -9.531447670202194300E-017 ) ) ; +#3599 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 2.100000000000236300, -4.163336342344337700E-014 ) ) ; +#3600 = EDGE_LOOP ( 'NONE', ( #3298, #1342, #1489, #3000 ) ) ; +#3601 = LINE ( 'NONE', #2845, #3341 ) ; +#3602 = LINE ( 'NONE', #1348, #4119 ) ; +#3603 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000242700, 2.257299396904369700E-013, -1.170808264217954700 ) ) ; +#3604 = VERTEX_POINT ( 'NONE', #1817 ) ; +#3605 = EDGE_CURVE ( 'NONE', #1675, #1079, #4161, .T. ) ; +#3606 = EDGE_CURVE ( 'NONE', #2454, #5124, #437, .T. ) ; +#3607 = AXIS2_PLACEMENT_3D ( 'NONE', #1179, #1523, #4382 ) ; +#3608 = ORIENTED_EDGE ( 'NONE', *, *, #2673, .F. ) ; +#3609 = FACE_OUTER_BOUND ( 'NONE', #143, .T. ) ; +#3610 = PLANE ( 'NONE', #4498 ) ; +#3611 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 6.263144656875306400E-015 ) ) ; +#3612 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000252000, 5.500000000000234500, -8.673617379884035500E-014 ) ) ; +#3613 = EDGE_CURVE ( 'NONE', #1479, #2723, #180, .T. ) ; +#3614 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.037329745435896800E-014 ) ) ; +#3615 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999756800, 5.500000000000214100, -0.8000000000000333500 ) ) ; +#3616 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000205800, 3.350000000000211500, -6.000000000000050600 ) ) ; +#3617 = AXIS2_PLACEMENT_3D ( 'NONE', #4974, #2567, #3786 ) ; +#3618 = ORIENTED_EDGE ( 'NONE', *, *, #843, .T. ) ; +#3619 = ORIENTED_EDGE ( 'NONE', *, *, #344, .F. ) ; +#3620 = ORIENTED_EDGE ( 'NONE', *, *, #2692, .T. ) ; +#3621 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3027, 'distance_accuracy_value', 'NONE'); +#3622 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 2.100000000000236300, -3.828702780027107000E-014 ) ) ; +#3623 = LINE ( 'NONE', #1743, #3934 ) ; +#3624 = EDGE_LOOP ( 'NONE', ( #4686, #5108, #1049, #2444 ) ) ; +#3625 = CARTESIAN_POINT ( 'NONE', ( 1.824999999999996000, 2.349211679515083700E-013, 0.0000000000000000000 ) ) ; +#3626 = ORIENTED_EDGE ( 'NONE', *, *, #1478, .T. ) ; +#3627 = DIRECTION ( 'NONE', ( -5.374889246193567500E-017, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#3628 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000246300, 2.100000000000236300, -0.8000000000000019300 ) ) ; +#3629 = ORIENTED_EDGE ( 'NONE', *, *, #4713, .F. ) ; +#3630 = VERTEX_POINT ( 'NONE', #3826 ) ; +#3631 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000239800, 2.950000000000227100, -1.350000000000052700 ) ) ; +#3632 = LINE ( 'NONE', #197, #3438 ) ; +#3633 = LINE ( 'NONE', #3183, #2050 ) ; +#3634 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000246300, 4.705000000000227400, -0.8000000000000611100 ) ) ; +#3635 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999751100, 5.500000000000234500, -3.469446951953614200E-014 ) ) ; +#3636 = CIRCLE ( 'NONE', #3033, 0.2500000000000000000 ) ; +#3637 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 7.281636885445248400E-015 ) ) ; +#3638 = EDGE_CURVE ( 'NONE', #4967, #2683, #1654, .T. ) ; +#3639 = DIRECTION ( 'NONE', ( -1.029231937005643000E-014, -7.826578390373813300E-015, -1.000000000000000000 ) ) ; +#3640 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000201400, 0.5696839565364602000, -6.600000000000043200 ) ) ; +#3641 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.067853519814894600E-014, -1.000000000000000000 ) ) ; +#3642 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000236500, 0.07689437438255455900, -2.000000000000026200 ) ) ; +#3643 = ORIENTED_EDGE ( 'NONE', *, *, #2805, .F. ) ; +#3644 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000251600, 2.100000000000236300, -3.872070866926526600E-014 ) ) ; +#3645 = EDGE_CURVE ( 'NONE', #869, #2162, #59, .T. ) ; +#3646 = VERTEX_POINT ( 'NONE', #2199 ) ; +#3647 = ORIENTED_EDGE ( 'NONE', *, *, #4430, .F. ) ; +#3648 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#3649 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000206700, 3.350000000000227900, -5.900000000000047400 ) ) ; +#3650 = LINE ( 'NONE', #63, #726 ) ; +#3651 = EDGE_LOOP ( 'NONE', ( #4187, #1819, #22, #3125 ) ) ; +#3652 = PRESENTATION_STYLE_ASSIGNMENT (( #368 ) ) ; +#3653 = ADVANCED_FACE ( 'NONE', ( #2407 ), #3055, .F. ) ; +#3654 = LINE ( 'NONE', #2184, #370 ) ; +#3655 = ORIENTED_EDGE ( 'NONE', *, *, #514, .F. ) ; +#3656 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000239600, 2.850000000000227500, -1.350000000000045400 ) ) ; +#3657 = ORIENTED_EDGE ( 'NONE', *, *, #4896, .T. ) ; +#3658 = AXIS2_PLACEMENT_3D ( 'NONE', #3172, #3598, #4404 ) ; +#3659 = AXIS2_PLACEMENT_3D ( 'NONE', #1613, #1248, #1267 ) ; +#3660 = VECTOR ( 'NONE', #1398, 1000.000000000000000 ) ; +#3661 = ORIENTED_EDGE ( 'NONE', *, *, #3325, .F. ) ; +#3662 = LINE ( 'NONE', #5054, #189 ) ; +#3663 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 8.148998623433651900E-015 ) ) ; +#3664 = FACE_OUTER_BOUND ( 'NONE', #4235, .T. ) ; +#3665 = ORIENTED_EDGE ( 'NONE', *, *, #4977, .T. ) ; +#3666 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000230200, -0.09999999999979557200, -2.700000000000024200 ) ) ; +#3667 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000187000, -0.01754293278778023400, -8.586914183790412400 ) ) ; +#3668 = EDGE_CURVE ( 'NONE', #5021, #2794, #369, .T. ) ; +#3669 = ORIENTED_EDGE ( 'NONE', *, *, #307, .F. ) ; +#3670 = VECTOR ( 'NONE', #1769, 1000.000000000000000 ) ; +#3671 = VECTOR ( 'NONE', #332, 1000.000000000000000 ) ; +#3672 = DIRECTION ( 'NONE', ( -8.352372291740183800E-015, 1.606225440719266100E-016, -1.000000000000000000 ) ) ; +#3673 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 1.720168712332491500E-013, -5.999999999999983100 ) ) ; +#3674 = EDGE_CURVE ( 'NONE', #17, #2100, #1596, .T. ) ; +#3675 = AXIS2_PLACEMENT_3D ( 'NONE', #1009, #229, #4247 ) ; +#3676 = VERTEX_POINT ( 'NONE', #2679 ) ; +#3677 = VERTEX_POINT ( 'NONE', #1501 ) ; +#3679 = ORIENTED_EDGE ( 'NONE', *, *, #745, .T. ) ; +#3678 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 7.395763429917407300E-015 ) ) ; +#3680 = ORIENTED_EDGE ( 'NONE', *, *, #4624, .T. ) ; +#3681 = ORIENTED_EDGE ( 'NONE', *, *, #1242, .T. ) ; +#3682 = VERTEX_POINT ( 'NONE', #3444 ) ; +#3683 = AXIS2_PLACEMENT_3D ( 'NONE', #4422, #899, #221 ) ; +#3684 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3685 = MANIFOLD_SOLID_BREP ( 'Mirror4', #855 ) ; +#3686 = VECTOR ( 'NONE', #2791, 1000.000000000000000 ) ; +#3687 = ORIENTED_EDGE ( 'NONE', *, *, #959, .T. ) ; +#3688 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999997871600, 4.200000000000179600, -5.250000000000046200 ) ) ; +#3689 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 5.500000000000235400, -7.979727989493312600E-014 ) ) ; +#3690 = AXIS2_PLACEMENT_3D ( 'NONE', #3289, #3694, #1336 ) ; +#3691 = ORIENTED_EDGE ( 'NONE', *, *, #4932, .T. ) ; +#3692 = LINE ( 'NONE', #2505, #1573 ) ; +#3693 = EDGE_CURVE ( 'NONE', #2322, #4279, #4656, .T. ) ; +#3694 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#3695 = CARTESIAN_POINT ( 'NONE', ( -3.750000000000252700, -3.762422472341609700E-017, -3.133082283036120000E-014 ) ) ; +#3696 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000201400, 0.4697791343782781700, -6.595638061263509900 ) ) ; +#3697 = EDGE_CURVE ( 'NONE', #649, #4388, #4032, .T. ) ; +#3698 = EDGE_CURVE ( 'NONE', #4856, #2703, #1826, .T. ) ; +#3699 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999793800, 4.200000000000176000, -6.000000000000036400 ) ) ; +#3700 = ORIENTED_EDGE ( 'NONE', *, *, #2995, .F. ) ; +#3701 = EDGE_LOOP ( 'NONE', ( #2135, #3305, #877, #296, #1154, #84, #2163, #3429, #3410, #3113, #4997 ) ) ; +#3702 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999762700, 2.550000000000214300, -1.650000000000014300 ) ) ; +#3703 = FACE_OUTER_BOUND ( 'NONE', #1364, .T. ) ; +#3704 = ORIENTED_EDGE ( 'NONE', *, *, #44, .T. ) ; +#3705 = VERTEX_POINT ( 'NONE', #372 ) ; +#3706 = EDGE_CURVE ( 'NONE', #4671, #2777, #3014, .T. ) ; +#3707 = VECTOR ( 'NONE', #3131, 1000.000000000000000 ) ; +#3708 = VECTOR ( 'NONE', #3146, 1000.000000000000000 ) ; +#3709 = VECTOR ( 'NONE', #4397, 1000.000000000000000 ) ; +#3710 = EDGE_LOOP ( 'NONE', ( #2718, #5159, #4005, #2332, #581, #2231, #3483, #1378 ) ) ; +#3711 = CARTESIAN_POINT ( 'NONE', ( -1.300000000000234100, 4.430000000000212900, -5.626710058730870000E-014 ) ) ; +#3712 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000242700, 2.257084401334521500E-013, -1.170808264217958000 ) ) ; +#3713 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#3714 = DIRECTION ( 'NONE', ( -6.505213034913291700E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3715 = ORIENTED_EDGE ( 'NONE', *, *, #2920, .F. ) ; +#3716 = DIRECTION ( 'NONE', ( 5.374889246193567500E-017, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#3717 = DIRECTION ( 'NONE', ( 7.391429510507072300E-015, 1.047445008332814600E-014, 1.000000000000000000 ) ) ; +#3718 = VECTOR ( 'NONE', #771, 1000.000000000000000 ) ; +#3719 = ORIENTED_EDGE ( 'NONE', *, *, #2079, .F. ) ; +#3720 = FACE_OUTER_BOUND ( 'NONE', #3383, .T. ) ; +#3721 = AXIS2_PLACEMENT_3D ( 'NONE', #1830, #4645, #3846 ) ; +#3722 = LINE ( 'NONE', #25, #3474 ) ; +#3723 = ORIENTED_EDGE ( 'NONE', *, *, #1470, .F. ) ; +#3724 = ADVANCED_FACE ( 'NONE', ( #118 ), #5163, .T. ) ; +#3725 = ORIENTED_EDGE ( 'NONE', *, *, #4469, .T. ) ; +#3726 = ORIENTED_EDGE ( 'NONE', *, *, #4722, .T. ) ; +#3727 = LINE ( 'NONE', #4454, #569 ) ; +#3728 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000242700, 2.257299396904369700E-013, -1.170808264217954700 ) ) ; +#3729 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000246700, 3.350000000000235000, -5.204170427930421300E-014 ) ) ; +#3730 = EDGE_CURVE ( 'NONE', #1849, #4136, #4221, .T. ) ; +#3731 = VERTEX_POINT ( 'NONE', #4353 ) ; +#3732 = CARTESIAN_POINT ( 'NONE', ( -3.750000000000230000, 4.705000000000228300, -2.715000000000083300 ) ) ; +#3733 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.037329745435896800E-014 ) ) ; +#3734 = ORIENTED_EDGE ( 'NONE', *, *, #4680, .T. ) ; +#3735 = EDGE_CURVE ( 'NONE', #1483, #2409, #3206, .T. ) ; +#3736 = VECTOR ( 'NONE', #534, 1000.000000000000000 ) ; +#3737 = ORIENTED_EDGE ( 'NONE', *, *, #1453, .T. ) ; +#3738 = ORIENTED_EDGE ( 'NONE', *, *, #617, .T. ) ; +#3739 = VERTEX_POINT ( 'NONE', #2727 ) ; +#3740 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000242700, 2.257084401334521500E-013, -1.170808264217958000 ) ) ; +#3741 = AXIS2_PLACEMENT_3D ( 'NONE', #3344, #4992, #2166 ) ; +#3742 = DIRECTION ( 'NONE', ( -5.633679745264341500E-015, -0.5000000000000138800, -0.8660254037844306000 ) ) ; +#3743 = DIRECTION ( 'NONE', ( -6.938893903907228400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3744 = ORIENTED_EDGE ( 'NONE', *, *, #2788, .F. ) ; +#3745 = ORIENTED_EDGE ( 'NONE', *, *, #96, .F. ) ; +#3746 = ORIENTED_EDGE ( 'NONE', *, *, #154, .F. ) ; +#3747 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201356800E-017, -7.391429510507072300E-015 ) ) ; +#3748 = LINE ( 'NONE', #885, #4701 ) ; +#3749 = LINE ( 'NONE', #1514, #1995 ) ; +#3750 = ADVANCED_FACE ( 'NONE', ( #2070 ), #763, .F. ) ; +#3751 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000250700, -0.09999999999979571100, -0.2000000000000209400 ) ) ; +#3752 = CARTESIAN_POINT ( 'NONE', ( -1.299999999999794200, 0.07689437438255455900, -6.000000000000040000 ) ) ; +#3753 = PLANE ( 'NONE', #786 ) ; +#3754 = AXIS2_PLACEMENT_3D ( 'NONE', #2015, #3627, #4031 ) ; +#3755 = VECTOR ( 'NONE', #2465, 1000.000000000000000 ) ; +#3756 = ORIENTED_EDGE ( 'NONE', *, *, #3773, .F. ) ; +#3757 = EDGE_CURVE ( 'NONE', #497, #2236, #5040, .T. ) ; +#3758 = EDGE_LOOP ( 'NONE', ( #426, #2140, #3737, #2560, #1262, #2042, #3238, #3802, #209, #1122, #530, #2314, #695, #2317 ) ) ; +#3759 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 2.550000000000214300, -2.428612866367529900E-014 ) ) ; +#3760 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999764400, 2.800000000000218800, -1.650000000000005000 ) ) ; +#3761 = ORIENTED_EDGE ( 'NONE', *, *, #487, .T. ) ; +#3762 = ORIENTED_EDGE ( 'NONE', *, *, #3460, .F. ) ; +#3763 = LINE ( 'NONE', #48, #5098 ) ; +#3764 = EDGE_CURVE ( 'NONE', #3299, #1662, #2528, .T. ) ; +#3765 = AXIS2_PLACEMENT_3D ( 'NONE', #4150, #967, #3441 ) ; +#3766 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930754400E-015 ) ) ; +#3767 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000234100, 4.355000000000233100, -5.261941203825680100 ) ) ; +#3768 = VECTOR ( 'NONE', #867, 1000.000000000000000 ) ; +#3769 = ORIENTED_EDGE ( 'NONE', *, *, #2395, .T. ) ; +#3770 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #236, 'distance_accuracy_value', 'NONE'); +#3771 = CARTESIAN_POINT ( 'NONE', ( -2.300000000000246700, 4.355000000000233100, -2.000000000000045300 ) ) ; +#3772 = VERTEX_POINT ( 'NONE', #1932 ) ; +#3773 = EDGE_CURVE ( 'NONE', #4827, #2356, #2767, .T. ) ; +#3774 = EDGE_LOOP ( 'NONE', ( #3258, #757, #170, #1916, #4047, #832 ) ) ; +#3775 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000220900, 1.793402789649767700E-013, -3.000000000000030200 ) ) ; +#3776 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.5000000000000137700, -0.8660254037844306000 ) ) ; +#3777 = LINE ( 'NONE', #1218, #2075 ) ; +#3778 = VECTOR ( 'NONE', #4207, 1000.000000000000000 ) ; +#3779 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000239600, 2.850000000000227500, -1.350000000000045400 ) ) ; +#3780 = LINE ( 'NONE', #3371, #1096 ) ; +#3781 = LINE ( 'NONE', #1080, #1424 ) ; +#3782 = ORIENTED_EDGE ( 'NONE', *, *, #2866, .T. ) ; +#3783 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201240400E-017, -7.281636885445248400E-015 ) ) ; +#3784 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002015100, -0.02974497641265102700, -6.573828367580838400 ) ) ; +#3785 = VECTOR ( 'NONE', #139, 1000.000000000000000 ) ; +#3786 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.2846218063762091000, -0.9586398840728169700 ) ) ; +#3787 = LINE ( 'NONE', #455, #1775 ) ; +#3788 = ORIENTED_EDGE ( 'NONE', *, *, #179, .F. ) ; +#3789 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999750700, 0.7000000000002359900, 1.040834085586084300E-014 ) ) ; +#3790 = EDGE_CURVE ( 'NONE', #991, #2501, #1026, .T. ) ; +#3791 = DIRECTION ( 'NONE', ( -7.178166107490281200E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3792 = ORIENTED_EDGE ( 'NONE', *, *, #3316, .T. ) ; +#3793 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3794 = ORIENTED_EDGE ( 'NONE', *, *, #557, .T. ) ; +#3795 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201352500E-017, -7.395763429917407300E-015 ) ) ; +#3796 = EDGE_LOOP ( 'NONE', ( #4635, #2961, #4691, #2716 ) ) ; +#3797 = EDGE_CURVE ( 'NONE', #1269, #2577, #3828, .T. ) ; +#3798 = PLANE ( 'NONE', #4265 ) ; +#3799 = EDGE_CURVE ( 'NONE', #12, #3202, #431, .T. ) ; +#3800 = ORIENTED_EDGE ( 'NONE', *, *, #1089, .F. ) ; +#3801 = ORIENTED_EDGE ( 'NONE', *, *, #2414, .F. ) ; +#3802 = ORIENTED_EDGE ( 'NONE', *, *, #145, .T. ) ; +#3803 = ADVANCED_FACE ( 'NONE', ( #3271 ), #3141, .F. ) ; +#3804 = DIRECTION ( 'NONE', ( 7.243900229353696500E-015, -9.531447670202232500E-017, 1.000000000000000000 ) ) ; +#3805 = CARTESIAN_POINT ( 'NONE', ( 3.750000000000207400, 3.420000000000227700, -5.415000000000082600 ) ) ; +#3806 = LINE ( 'NONE', #3453, #1736 ) ; +#3807 = ORIENTED_EDGE ( 'NONE', *, *, #278, .F. ) ; +#3808 = VERTEX_POINT ( 'NONE', #2366 ) ; +#3809 = EDGE_CURVE ( 'NONE', #3024, #3435, #5173, .T. ) ; +#3810 = LINE ( 'NONE', #3466, #4893 ) ; +#3811 = ORIENTED_EDGE ( 'NONE', *, *, #4862, .T. ) ; +#3812 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002020600, 2.750000000000227400, -6.500000000000044400 ) ) ; +#3813 = FACE_OUTER_BOUND ( 'NONE', #1503, .T. ) ; +#3814 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000237900, 3.100000000000214100, -1.900000000000053400 ) ) ; +#3815 = PLANE ( 'NONE', #913 ) ; +#3816 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#3817 = ORIENTED_EDGE ( 'NONE', *, *, #4617, .F. ) ; +#3818 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 5.500000000000227400, -0.8000000000000888600 ) ) ; +#3819 = EDGE_LOOP ( 'NONE', ( #2072, #811, #4479, #4560 ) ) ; +#3820 = VERTEX_POINT ( 'NONE', #4755 ) ; +#3821 = ADVANCED_FACE ( 'NONE', ( #2200 ), #4718, .F. ) ; +#3822 = EDGE_CURVE ( 'NONE', #2914, #4141, #1949, .T. ) ; +#3823 = PLANE ( 'NONE', #3675 ) ; +#3824 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000201400, 0.4697791343782779500, -6.595638061263509900 ) ) ; +#3825 = VECTOR ( 'NONE', #2879, 1000.000000000000000 ) ; +#3826 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999997489700, 4.430000000000232400, -4.430348964209668600E-014 ) ) ; +#3827 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999756800, 2.550000000000224100, -0.8000000000000020400 ) ) ; +#3828 = LINE ( 'NONE', #4371, #4420 ) ; +#3829 = FACE_OUTER_BOUND ( 'NONE', #3428, .T. ) ; +#3830 = ORIENTED_EDGE ( 'NONE', *, *, #4641, .F. ) ; +#3831 = EDGE_CURVE ( 'NONE', #819, #3435, #299, .T. ) ; +#3832 = PRODUCT_CONTEXT ( 'NONE', #3471, 'mechanical' ) ; +#3833 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002015100, 0.4697791343782781700, -6.595638061263506400 ) ) ; +#3834 = VERTEX_POINT ( 'NONE', #3569 ) ; +#3835 = DIRECTION ( 'NONE', ( 7.391429510507072300E-015, 1.047445008332814600E-014, 1.000000000000000000 ) ) ; +#3836 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000239600, 2.850000000000227500, -1.350000000000045400 ) ) ; +#3837 = EDGE_CURVE ( 'NONE', #4748, #2882, #242, .T. ) ; +#3838 = FACE_OUTER_BOUND ( 'NONE', #2041, .T. ) ; +#3839 = ORIENTED_EDGE ( 'NONE', *, *, #459, .T. ) ; +#3840 = LINE ( 'NONE', #3689, #135 ) ; +#3841 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000237900, 2.800000000000215600, -1.900000000000050100 ) ) ; +#3842 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299200E-017, 8.365839057930752800E-015 ) ) ; +#3843 = LINE ( 'NONE', #3407, #750 ) ; +#3844 = ORIENTED_EDGE ( 'NONE', *, *, #291, .T. ) ; +#3845 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999793000, 1.552577510999242300E-013, -6.000000000000040000 ) ) ; +#3846 = DIRECTION ( 'NONE', ( 8.673617379884035500E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3847 = LINE ( 'NONE', #2617, #1606 ) ; +#3848 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3849 = EDGE_LOOP ( 'NONE', ( #639, #1184, #1306, #616 ) ) ; +#3850 = DIRECTION ( 'NONE', ( -7.270030056159898800E-015, 0.04361938736533572900, 0.9990482215818578000 ) ) ; +#3851 = DIRECTION ( 'NONE', ( -8.374527125405327500E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3852 = ADVANCED_FACE ( 'NONE', ( #3895 ), #1093, .F. ) ; +#3853 = EDGE_CURVE ( 'NONE', #2161, #3676, #4913, .T. ) ; +#3854 = ORIENTED_EDGE ( 'NONE', *, *, #5121, .T. ) ; +#3855 = ORIENTED_EDGE ( 'NONE', *, *, #356, .F. ) ; +#3856 = ORIENTED_EDGE ( 'NONE', *, *, #3773, .T. ) ; +#3857 = ORIENTED_EDGE ( 'NONE', *, *, #4258, .T. ) ; +#3858 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 3.700000000000169800, -6.000000000000019500 ) ) ; +#3859 = FACE_OUTER_BOUND ( 'NONE', #2496, .T. ) ; +#3860 = ORIENTED_EDGE ( 'NONE', *, *, #3518, .T. ) ; +#3861 = ORIENTED_EDGE ( 'NONE', *, *, #2179, .T. ) ; +#3862 = VERTEX_POINT ( 'NONE', #2700 ) ; +#3863 = EDGE_CURVE ( 'NONE', #3009, #756, #3329, .T. ) ; +#3864 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3865 = EDGE_CURVE ( 'NONE', #3181, #4967, #1708, .T. ) ; +#3866 = AXIS2_PLACEMENT_3D ( 'NONE', #1452, #2376, #1156 ) ; +#3867 = DIRECTION ( 'NONE', ( -5.186901026177523000E-015, -0.7071067811865555700, -0.7071067811865393600 ) ) ; +#3868 = LINE ( 'NONE', #1774, #3433 ) ; +#3869 = ORIENTED_EDGE ( 'NONE', *, *, #3947, .T. ) ; +#3870 = ORIENTED_EDGE ( 'NONE', *, *, #959, .F. ) ; +#3871 = EDGE_LOOP ( 'NONE', ( #4117, #1437, #2156, #1761, #4072, #1105, #2292, #2829, #4778, #2554, #1658, #3249 ) ) ; +#3872 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201240400E-017, 7.281636885445248400E-015 ) ) ; +#3873 = DIRECTION ( 'NONE', ( -0.2515875261947374000, 0.2347343575773418500, 0.9389374303093709400 ) ) ; +#3874 = EDGE_CURVE ( 'NONE', #3705, #4592, #2892, .T. ) ; +#3875 = LINE ( 'NONE', #2479, #709 ) ; +#3876 = VECTOR ( 'NONE', #4441, 1000.000000000000000 ) ; +#3877 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 0.4000000000002343300, -2.428612866367529900E-014 ) ) ; +#3878 = AXIS2_PLACEMENT_3D ( 'NONE', #3933, #1884, #3502 ) ; +#3879 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002058400, 0.5696839565364602000, -6.000000000000043500 ) ) ; +#3880 = ADVANCED_FACE ( 'NONE', ( #4350 ), #1150, .F. ) ; +#3881 = VECTOR ( 'NONE', #1033, 1000.000000000000000 ) ; +#3882 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.110525862004698600E-014 ) ) ; +#3883 = AXIS2_PLACEMENT_3D ( 'NONE', #2610, #282, #4230 ) ; +#3884 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.067853519814894600E-014, 1.000000000000000000 ) ) ; +#3885 = ORIENTED_EDGE ( 'NONE', *, *, #1209, .F. ) ; +#3886 = FACE_OUTER_BOUND ( 'NONE', #5079, .T. ) ; +#3887 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252500, 5.500000000000234500, -7.979727989493312600E-014 ) ) ; +#3888 = PLANE ( 'NONE', #507 ) ; +#3889 = ORIENTED_EDGE ( 'NONE', *, *, #2857, .F. ) ; +#3890 = DIRECTION ( 'NONE', ( 2.639228045337950800E-016, -0.9990482215818578000, 0.04361938736533712400 ) ) ; +#3891 = ORIENTED_EDGE ( 'NONE', *, *, #3975, .F. ) ; +#3892 = LINE ( 'NONE', #4121, #2400 ) ; +#3893 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999750200, 4.430000000000232400, -2.967517972232818400E-014 ) ) ; +#3894 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#3895 = FACE_OUTER_BOUND ( 'NONE', #3871, .T. ) ; +#3896 = FACE_OUTER_BOUND ( 'NONE', #1110, .T. ) ; +#3897 = LINE ( 'NONE', #1211, #4346 ) ; +#3898 = EDGE_CURVE ( 'NONE', #132, #4592, #3455, .T. ) ; +#3899 = PLANE ( 'NONE', #1633 ) ; +#3900 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3901 = LINE ( 'NONE', #1833, #2835 ) ; +#3902 = ORIENTED_EDGE ( 'NONE', *, *, #316, .F. ) ; +#3903 = DIRECTION ( 'NONE', ( -2.639228045337951300E-016, -0.9990482215818576900, 0.04361938736533713100 ) ) ; +#3904 = CARTESIAN_POINT ( 'NONE', ( -0.8571796769726917100, 3.250000000000227400, -0.9500000000000423700 ) ) ; +#3905 = LINE ( 'NONE', #230, #502 ) ; +#3906 = ORIENTED_EDGE ( 'NONE', *, *, #350, .T. ) ; +#3907 = ADVANCED_FACE ( 'NONE', ( #1881 ), #2717, .F. ) ; +#3908 = EDGE_CURVE ( 'NONE', #756, #3604, #5100, .T. ) ; +#3909 = DIRECTION ( 'NONE', ( 8.193010895375706900E-015, 6.637856049494207400E-017, -1.000000000000000000 ) ) ; +#3910 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 7.826578390373814900E-015, 1.000000000000000000 ) ) ; +#3911 = VECTOR ( 'NONE', #264, 1000.000000000000000 ) ; +#3912 = AXIS2_PLACEMENT_3D ( 'NONE', #4916, #3337, #1746 ) ; +#3913 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000231100, 2.100000000000236300, -2.900000000000023900 ) ) ; +#3914 = VECTOR ( 'NONE', #932, 1000.000000000000000 ) ; +#3915 = VECTOR ( 'NONE', #4287, 1000.000000000000000 ) ; +#3916 = ORIENTED_EDGE ( 'NONE', *, *, #467, .F. ) ; +#3917 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.7071067811865536800, 0.7071067811865412400 ) ) ; +#3918 = ADVANCED_FACE ( 'NONE', ( #666 ), #3888, .T. ) ; +#3919 = CARTESIAN_POINT ( 'NONE', ( 0.8571796769726364200, 0.2821715336867768300, -8.600000000000010300 ) ) ; +#3920 = VERTEX_POINT ( 'NONE', #342 ) ; +#3921 = VECTOR ( 'NONE', #2093, 1000.000000000000000 ) ; +#3922 = LINE ( 'NONE', #4392, #4359 ) ; +#3923 = ORIENTED_EDGE ( 'NONE', *, *, #3025, .F. ) ; +#3924 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000241800, -0.09999999999979566900, -1.270808264217950100 ) ) ; +#3925 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999762200, 2.800000000000218800, -1.650000000000017000 ) ) ; +#3926 = CARTESIAN_POINT ( 'NONE', ( 1.142820323027793600, 3.250000000000227400, -0.9500000000000444800 ) ) ; +#3927 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.037329745435896800E-014 ) ) ; +#3928 = EDGE_LOOP ( 'NONE', ( #1386, #3450, #1784, #4446 ) ) ; +#3929 = ORIENTED_EDGE ( 'NONE', *, *, #5057, .F. ) ; +#3930 = ORIENTED_EDGE ( 'NONE', *, *, #3863, .T. ) ; +#3931 = PLANE ( 'NONE', #1287 ) ; +#3932 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000242700, 2.257084401334521500E-013, -1.170808264217958000 ) ) ; +#3933 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000242700, 3.250000000000227400, -0.9500000000000452500 ) ) ; +#3934 = VECTOR ( 'NONE', #4594, 1000.000000000000000 ) ; +#3935 = ORIENTED_EDGE ( 'NONE', *, *, #3269, .F. ) ; +#3936 = EDGE_CURVE ( 'NONE', #263, #5017, #1590, .T. ) ; +#3937 = LINE ( 'NONE', #4903, #3736 ) ; +#3938 = ORIENTED_EDGE ( 'NONE', *, *, #2089, .T. ) ; +#3939 = ORIENTED_EDGE ( 'NONE', *, *, #2046, .F. ) ; +#3940 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.024619699438383000E-014, -1.000000000000000000 ) ) ; +#3941 = ORIENTED_EDGE ( 'NONE', *, *, #1114, .T. ) ; +#3942 = MANIFOLD_SOLID_BREP ( 'Chamfer1', #2086 ) ; +#3943 = PLANE ( 'NONE', #5111 ) ; +#3944 = VECTOR ( 'NONE', #2781, 1000.000000000000000 ) ; +#3945 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3946 = ORIENTED_EDGE ( 'NONE', *, *, #3764, .T. ) ; +#3947 = EDGE_CURVE ( 'NONE', #3241, #4279, #603, .T. ) ; +#3948 = CARTESIAN_POINT ( 'NONE', ( -1.142820323027793600, 2.950000000000227100, -0.9500000000000444800 ) ) ; +#3949 = LINE ( 'NONE', #3193, #2450 ) ; +#3950 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#3951 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#3952 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#3953 = PLANE ( 'NONE', #1357 ) ; +#3954 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246193567500E-017, 5.629900911267176600E-031 ) ) ; +#3955 = ORIENTED_EDGE ( 'NONE', *, *, #938, .F. ) ; +#3956 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.245087481933969600E-029, -8.374527125405327500E-015 ) ) ; +#3957 = ORIENTED_EDGE ( 'NONE', *, *, #2930, .T. ) ; +#3958 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000228400, 2.114528191052210000E-013, -3.000000000000020000 ) ) ; +#3959 = AXIS2_PLACEMENT_3D ( 'NONE', #2873, #2884, #163 ) ; +#3960 = ORIENTED_EDGE ( 'NONE', *, *, #3366, .T. ) ; +#3961 = ORIENTED_EDGE ( 'NONE', *, *, #4116, .F. ) ; +#3962 = FACE_OUTER_BOUND ( 'NONE', #2864, .T. ) ; +#3963 = DIRECTION ( 'NONE', ( 6.133173666733495400E-015, 0.7071067811865474600, -0.7071067811865476800 ) ) ; +#3964 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201273600E-017, -7.390057102693798800E-015 ) ) ; +#3965 = DIRECTION ( 'NONE', ( -5.188523723200819200E-015, 0.7071067811865394700, -0.7071067811865556800 ) ) ; +#3966 = CARTESIAN_POINT ( 'NONE', ( -1.300000000000234100, 4.355000000000232200, -0.07500000000003574600 ) ) ; +#3967 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#3968 = ORIENTED_EDGE ( 'NONE', *, *, #1987, .T. ) ; +#3969 = FACE_OUTER_BOUND ( 'NONE', #4822, .T. ) ; +#3970 = VERTEX_POINT ( 'NONE', #3536 ) ; +#3971 = DIRECTION ( 'NONE', ( 5.953547734519279500E-015, 0.7071067811865471300, 0.7071067811865479100 ) ) ; +#3972 = DIRECTION ( 'NONE', ( 1.000000000000000000, -7.742115945224492400E-029, -7.391429510507072300E-015 ) ) ; +#3973 = VERTEX_POINT ( 'NONE', #3096 ) ; +#3974 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000206500, 5.500000000000155400, -7.600000000000029000 ) ) ; +#3975 = EDGE_CURVE ( 'NONE', #3676, #211, #4848, .T. ) ; +#3976 = CARTESIAN_POINT ( 'NONE', ( -1.825000000000004200, 0.09000000000023535000, 0.0000000000000000000 ) ) ; +#3977 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -7.281636885445248400E-015 ) ) ; +#3978 = LINE ( 'NONE', #1048, #4793 ) ; +#3979 = ORIENTED_EDGE ( 'NONE', *, *, #936, .T. ) ; +#3980 = LINE ( 'NONE', #2937, #678 ) ; +#3981 = ORIENTED_EDGE ( 'NONE', *, *, #1399, .F. ) ; +#3982 = ORIENTED_EDGE ( 'NONE', *, *, #493, .F. ) ; +#3983 = LINE ( 'NONE', #4124, #4800 ) ; +#3984 = FACE_OUTER_BOUND ( 'NONE', #3710, .T. ) ; +#3985 = EDGE_CURVE ( 'NONE', #1689, #1479, #4344, .T. ) ; +#3986 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000244000, 2.266977906954246500E-013, -1.044399185738743400 ) ) ; +#3987 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000252500, 1.298089913141610200, -3.325942552863712200E-014 ) ) ; +#3988 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 7.337680618045060300E-015 ) ) ; +#3989 = AXIS2_PLACEMENT_3D ( 'NONE', #4022, #4044, #3591 ) ; +#3990 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000228500, 2.100000000000236300, -2.900000000000020800 ) ) ; +#3991 = LINE ( 'NONE', #4885, #4561 ) ; +#3992 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000201400, -0.02974497641265105500, -6.573828367580842000 ) ) ; +#3993 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000242700, 3.250000000000227400, -0.9500000000000452500 ) ) ; +#3994 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193463900E-017, -5.739594400162916200E-031 ) ) ; +#3995 = ORIENTED_EDGE ( 'NONE', *, *, #4713, .T. ) ; +#3996 = VERTEX_POINT ( 'NONE', #4770 ) ; +#3997 = AXIS2_PLACEMENT_3D ( 'NONE', #1763, #3002, #3370 ) ; +#3998 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201231700E-017, 7.281636885445248400E-015 ) ) ; +#3999 = ORIENTED_EDGE ( 'NONE', *, *, #291, .F. ) ; +#4000 = ORIENTED_EDGE ( 'NONE', *, *, #2544, .T. ) ; +#4001 = CARTESIAN_POINT ( 'NONE', ( -3.750000000000207400, 3.420000000000228200, -5.415000000000082600 ) ) ; +#4002 = AXIS2_PLACEMENT_3D ( 'NONE', #2233, #747, #3499 ) ; +#4003 = LINE ( 'NONE', #2451, #2802 ) ; +#4004 = EDGE_LOOP ( 'NONE', ( #1794, #767, #21, #3856 ) ) ; +#4005 = ORIENTED_EDGE ( 'NONE', *, *, #655, .T. ) ; +#4006 = DIRECTION ( 'NONE', ( 6.739535799202493800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4007 = DIRECTION ( 'NONE', ( 1.000000000000000000, -8.086446079014292800E-029, -7.281636885445248400E-015 ) ) ; +#4008 = CARTESIAN_POINT ( 'NONE', ( 0.8571796769726367500, -0.01754293278778021300, -8.586914183790408800 ) ) ; +#4009 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002486800, 5.000000000000188300, -0.1600000000000533200 ) ) ; +#4010 = FACE_OUTER_BOUND ( 'NONE', #705, .T. ) ; +#4011 = ORIENTED_EDGE ( 'NONE', *, *, #1942, .F. ) ; +#4012 = ORIENTED_EDGE ( 'NONE', *, *, #3527, .F. ) ; +#4013 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000244900, -0.09999999999979568300, -0.9443991857387211700 ) ) ; +#4014 = EDGE_CURVE ( 'NONE', #3546, #1233, #3385, .T. ) ; +#4015 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252100, 1.710477983563044100, -0.08005065776185686700 ) ) ; +#4016 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000189800, -0.09999999999983200100, -8.182932956421137000 ) ) ; +#4017 = VECTOR ( 'NONE', #3308, 1000.000000000000100 ) ; +#4018 = VECTOR ( 'NONE', #2022, 1000.000000000000000 ) ; +#4019 = EDGE_CURVE ( 'NONE', #4077, #863, #4598, .T. ) ; +#4020 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002058400, 2.850000000000227500, -6.000000000000043500 ) ) ; +#4021 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201347000E-017, -7.391429510507072300E-015 ) ) ; +#4022 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 0.7000000000002329900, -0.1600000000000229600 ) ) ; +#4023 = VERTEX_POINT ( 'NONE', #473 ) ; +#4024 = AXIS2_PLACEMENT_3D ( 'NONE', #1044, #5082, #4271 ) ; +#4025 = LINE ( 'NONE', #3414, #2638 ) ; +#4026 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4027 = EDGE_LOOP ( 'NONE', ( #568, #2747, #3065, #723 ) ) ; +#4028 = EDGE_LOOP ( 'NONE', ( #4646, #3242, #3572, #1160 ) ) ; +#4029 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.1999877633493794300, 0.9797983948295243600 ) ) ; +#4030 = LINE ( 'NONE', #5155, #3707 ) ; +#4031 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#4032 = LINE ( 'NONE', #315, #1152 ) ; +#4033 = LINE ( 'NONE', #4769, #4421 ) ; +#4034 = ORIENTED_EDGE ( 'NONE', *, *, #2930, .F. ) ; +#4035 = AXIS2_PLACEMENT_3D ( 'NONE', #2281, #2676, #5055 ) ; +#4036 = CARTESIAN_POINT ( 'NONE', ( 1.824999999999996000, 0.09000000000023490600, -6.000000000000007100 ) ) ; +#4037 = VECTOR ( 'NONE', #2382, 1000.000000000000000 ) ; +#4038 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000232100, 4.705000000000227400, -2.715000000000076700 ) ) ; +#4039 = LINE ( 'NONE', #1507, #4162 ) ; +#4040 = ORIENTED_EDGE ( 'NONE', *, *, #2663, .F. ) ; +#4041 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999997489700, 4.200000000000232900, -0.2300000000000380900 ) ) ; +#4042 = ORIENTED_EDGE ( 'NONE', *, *, #3645, .F. ) ; +#4043 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002015100, 0.5696839565364602000, -6.600000000000039600 ) ) ; +#4044 = DIRECTION ( 'NONE', ( -5.264536135883020200E-015, -0.7071067811865543500, -0.7071067811865406900 ) ) ; +#4045 = EDGE_CURVE ( 'NONE', #1758, #1185, #4483, .T. ) ; +#4046 = VECTOR ( 'NONE', #1660, 1000.000000000000000 ) ; +#4047 = ORIENTED_EDGE ( 'NONE', *, *, #1867, .F. ) ; +#4048 = DIRECTION ( 'NONE', ( 5.417580331251687100E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4049 = FACE_OUTER_BOUND ( 'NONE', #4027, .T. ) ; +#4050 = LINE ( 'NONE', #1475, #1896 ) ; +#4051 = DIRECTION ( 'NONE', ( 8.352372291740183800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4052 = VECTOR ( 'NONE', #2602, 1000.000000000000000 ) ; +#4053 = EDGE_CURVE ( 'NONE', #4549, #2150, #1020, .T. ) ; +#4054 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#4055 = ORIENTED_EDGE ( 'NONE', *, *, #3936, .T. ) ; +#4056 = FACE_OUTER_BOUND ( 'NONE', #1148, .T. ) ; +#4057 = LINE ( 'NONE', #75, #2843 ) ; +#4058 = ORIENTED_EDGE ( 'NONE', *, *, #1565, .F. ) ; +#4059 = ORIENTED_EDGE ( 'NONE', *, *, #4782, .F. ) ; +#4060 = AXIS2_PLACEMENT_3D ( 'NONE', #4724, #2269, #3026 ) ; +#4061 = CARTESIAN_POINT ( 'NONE', ( 1.824999999999996000, 3.700000000000172900, -6.000000000000057700 ) ) ; +#4062 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246193937200E-017, 5.384533896632093000E-031 ) ) ; +#4063 = ORIENTED_EDGE ( 'NONE', *, *, #1083, .T. ) ; +#4064 = ORIENTED_EDGE ( 'NONE', *, *, #5048, .F. ) ; +#4065 = DIRECTION ( 'NONE', ( -5.633679745264340700E-015, -0.5000000000000142100, -0.8660254037844304900 ) ) ; +#4066 = CARTESIAN_POINT ( 'NONE', ( -1.249999999999780600, 3.350000000000202600, -4.250000000000032000 ) ) ; +#4067 = DIRECTION ( 'NONE', ( -6.505213034913291700E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4068 = LINE ( 'NONE', #3523, #2980 ) ; +#4069 = VERTEX_POINT ( 'NONE', #24 ) ; +#4070 = ORIENTED_EDGE ( 'NONE', *, *, #1065, .F. ) ; +#4071 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000001897400, 0.4994289329492776500, -8.209104588840329300 ) ) ; +#4072 = ORIENTED_EDGE ( 'NONE', *, *, #4472, .T. ) ; +#4073 = AXIS2_PLACEMENT_3D ( 'NONE', #1701, #499, #2899 ) ; +#4074 = LINE ( 'NONE', #4775, #3041 ) ; +#4075 = ORIENTED_EDGE ( 'NONE', *, *, #1123, .F. ) ; +#4076 = ORIENTED_EDGE ( 'NONE', *, *, #2173, .F. ) ; +#4077 = VERTEX_POINT ( 'NONE', #4020 ) ; +#4078 = EDGE_CURVE ( 'NONE', #4938, #4881, #3513, .T. ) ; +#4079 = LINE ( 'NONE', #1274, #3876 ) ; +#4080 = ORIENTED_EDGE ( 'NONE', *, *, #4587, .F. ) ; +#4081 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#4082 = VECTOR ( 'NONE', #2227, 1000.000000000000100 ) ; +#4083 = VECTOR ( 'NONE', #4087, 1000.000000000000000 ) ; +#4084 = EDGE_CURVE ( 'NONE', #3004, #2491, #2460, .T. ) ; +#4085 = ADVANCED_FACE ( 'NONE', ( #1760 ), #1197, .T. ) ; +#4086 = EDGE_CURVE ( 'NONE', #740, #3630, #365, .T. ) ; +#4087 = DIRECTION ( 'NONE', ( 7.299578983070721100E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4088 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999786200, 0.7000000000002359900, -4.849999999999995200 ) ) ; +#4089 = VERTEX_POINT ( 'NONE', #4844 ) ; +#4090 = EDGE_CURVE ( 'NONE', #659, #3233, #2832, .T. ) ; +#4091 = ORIENTED_EDGE ( 'NONE', *, *, #4960, .T. ) ; +#4092 = AXIS2_PLACEMENT_3D ( 'NONE', #636, #2238, #1014 ) ; +#4093 = VERTEX_POINT ( 'NONE', #4041 ) ; +#4094 = FACE_OUTER_BOUND ( 'NONE', #1286, .T. ) ; +#4095 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002429200, 3.350000000000211500, -0.9500000000000409200 ) ) ; +#4096 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, -1.000000000000000000, 3.913799179032202200E-031 ) ) ; +#4097 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 4.200000000000235500, -5.898059818321144100E-014 ) ) ; +#4098 = VECTOR ( 'NONE', #2370, 1000.000000000000000 ) ; +#4099 = ORIENTED_EDGE ( 'NONE', *, *, #2897, .T. ) ; +#4100 = VERTEX_POINT ( 'NONE', #3987 ) ; +#4101 = LINE ( 'NONE', #1634, #58 ) ; +#4102 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.215115282423575300E-016, -7.409566345325542500E-015 ) ) ; +#4103 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000206500, 4.200000000000171600, -6.000000000000063900 ) ) ; +#4104 = VECTOR ( 'NONE', #3566, 1000.000000000000000 ) ; +#4105 = VECTOR ( 'NONE', #1810, 1000.000000000000000 ) ; +#4106 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 8.352372291740183800E-015 ) ) ; +#4107 = ORIENTED_EDGE ( 'NONE', *, *, #2805, .T. ) ; +#4108 = FACE_OUTER_BOUND ( 'NONE', #495, .T. ) ; +#4109 = ORIENTED_EDGE ( 'NONE', *, *, #1032, .F. ) ; +#4110 = ADVANCED_FACE ( 'NONE', ( #4215 ), #4416, .F. ) ; +#4111 = PLANE ( 'NONE', #2551 ) ; +#4112 = CYLINDRICAL_SURFACE ( 'NONE', #440, 0.09999999999999592500 ) ; +#4113 = VERTEX_POINT ( 'NONE', #484 ) ; +#4114 = CARTESIAN_POINT ( 'NONE', ( -0.8571796769726917100, 3.250000000000227400, -0.9500000000000423700 ) ) ; +#4115 = ORIENTED_EDGE ( 'NONE', *, *, #1397, .F. ) ; +#4116 = EDGE_CURVE ( 'NONE', #3739, #1185, #3650, .T. ) ; +#4117 = ORIENTED_EDGE ( 'NONE', *, *, #4223, .T. ) ; +#4118 = VECTOR ( 'NONE', #3235, 1000.000000000000100 ) ; +#4119 = VECTOR ( 'NONE', #3352, 1000.000000000000000 ) ; +#4120 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 1.710477983563044100, -3.919373068745948000E-014 ) ) ; +#4121 = CARTESIAN_POINT ( 'NONE', ( -1.825000000000004200, 3.700000000000172900, -6.000000000000031100 ) ) ; +#4122 = ORIENTED_EDGE ( 'NONE', *, *, #4383, .T. ) ; +#4123 = LINE ( 'NONE', #4806, #3345 ) ; +#4124 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999997706700, 2.055000000000202200, -3.105000000000045700 ) ) ; +#4125 = EDGE_CURVE ( 'NONE', #4829, #587, #1145, .T. ) ; +#4126 = ORIENTED_EDGE ( 'NONE', *, *, #419, .T. ) ; +#4127 = VERTEX_POINT ( 'NONE', #1978 ) ; +#4128 = ORIENTED_EDGE ( 'NONE', *, *, #1301, .F. ) ; +#4129 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246193700600E-017, 5.552201356632754200E-031 ) ) ; +#4130 = ORIENTED_EDGE ( 'NONE', *, *, #4428, .F. ) ; +#4131 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000239600, 0.5696839565364602000, -1.350000000000052500 ) ) ; +#4132 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999751100, 0.4000000000002205100, 1.734723475976807100E-014 ) ) ; +#4133 = VECTOR ( 'NONE', #4065, 1000.000000000000200 ) ; +#4134 = ORIENTED_EDGE ( 'NONE', *, *, #4526, .F. ) ; +#4135 = VERTEX_POINT ( 'NONE', #1641 ) ; +#4136 = VERTEX_POINT ( 'NONE', #2836 ) ; +#4137 = ADVANCED_FACE ( 'NONE', ( #237 ), #4112, .F. ) ; +#4138 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 0.1000000000002270000, -2.910707410969268500E-014 ) ) ; +#4139 = LINE ( 'NONE', #3118, #524 ) ; +#4140 = ORIENTED_EDGE ( 'NONE', *, *, #1593, .F. ) ; +#4141 = VERTEX_POINT ( 'NONE', #804 ) ; +#4142 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002015100, -0.02974497641265102700, -6.573828367580838400 ) ) ; +#4143 = FACE_OUTER_BOUND ( 'NONE', #324, .T. ) ; +#4144 = LINE ( 'NONE', #5148, #2933 ) ; +#4145 = EDGE_CURVE ( 'NONE', #313, #4413, #3132, .T. ) ; +#4146 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.024619699438383000E-014, -1.000000000000000000 ) ) ; +#4147 = EDGE_CURVE ( 'NONE', #5118, #4860, #969, .T. ) ; +#4148 = VERTEX_POINT ( 'NONE', #2785 ) ; +#4149 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000229900, 3.420000000000227700, -2.715000000000077100 ) ) ; +#4150 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000244900, 2.263814136149733300E-013, -0.8000000000000298000 ) ) ; +#4151 = ORIENTED_EDGE ( 'NONE', *, *, #2360, .F. ) ; +#4152 = EDGE_CURVE ( 'NONE', #3250, #1539, #4859, .T. ) ; +#4153 = LINE ( 'NONE', #1181, #1403 ) ; +#4154 = ADVANCED_FACE ( 'NONE', ( #2380 ), #931, .F. ) ; +#4155 = LINE ( 'NONE', #3382, #3071 ) ; +#4156 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000206700, 3.350000000000227900, -5.900000000000047400 ) ) ; +#4157 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193567500E-017, -5.629900911267176600E-031 ) ) ; +#4158 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4159 = LINE ( 'NONE', #3237, #3072 ) ; +#4160 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000244000, 2.266977906954246500E-013, -1.044399185738743400 ) ) ; +#4161 = LINE ( 'NONE', #3409, #2262 ) ; +#4162 = VECTOR ( 'NONE', #5094, 1000.000000000000000 ) ; +#4163 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4164 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000230200, -0.09999999999979557200, -2.700000000000024200 ) ) ; +#4165 = CYLINDRICAL_SURFACE ( 'NONE', #1108, 0.6000000000000007500 ) ; +#4166 = ORIENTED_EDGE ( 'NONE', *, *, #3431, .T. ) ; +#4167 = FACE_OUTER_BOUND ( 'NONE', #2025, .T. ) ; +#4168 = AXIS2_PLACEMENT_3D ( 'NONE', #2757, #3524, #4776 ) ; +#4169 = PLANE ( 'NONE', #2122 ) ; +#4170 = LINE ( 'NONE', #3355, #3087 ) ; +#4171 = ORIENTED_EDGE ( 'NONE', *, *, #2825, .T. ) ; +#4172 = VECTOR ( 'NONE', #2849, 1000.000000000000000 ) ; +#4173 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 0.1000000000002270000, -2.910707410969268500E-014 ) ) ; +#4174 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#4175 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999752400, 2.550000000000235200, 0.0000000000000000000 ) ) ; +#4176 = EDGE_CURVE ( 'NONE', #127, #3590, #4266, .T. ) ; +#4177 = ADVANCED_FACE ( 'NONE', ( #2689 ), #4111, .T. ) ; +#4178 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#4179 = ORIENTED_EDGE ( 'NONE', *, *, #4125, .F. ) ; +#4180 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#4181 = VERTEX_POINT ( 'NONE', #1673 ) ; +#4182 = EDGE_CURVE ( 'NONE', #3262, #4023, #4954, .T. ) ; +#4183 = DIRECTION ( 'NONE', ( 1.000000000000000000, -8.086446079014292800E-029, -7.281636885445248400E-015 ) ) ; +#4184 = LINE ( 'NONE', #1852, #2160 ) ; +#4185 = ORIENTED_EDGE ( 'NONE', *, *, #552, .T. ) ; +#4186 = ORIENTED_EDGE ( 'NONE', *, *, #1755, .T. ) ; +#4187 = ORIENTED_EDGE ( 'NONE', *, *, #284, .F. ) ; +#4188 = PLANE ( 'NONE', #1878 ) ; +#4189 = PLANE ( 'NONE', #924 ) ; +#4190 = DIRECTION ( 'NONE', ( -7.299578983070722700E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4191 = VECTOR ( 'NONE', #4745, 1000.000000000000000 ) ; +#4192 = ORIENTED_EDGE ( 'NONE', *, *, #53, .T. ) ; +#4193 = ORIENTED_EDGE ( 'NONE', *, *, #4324, .T. ) ; +#4194 = ORIENTED_EDGE ( 'NONE', *, *, #314, .T. ) ; +#4195 = DIRECTION ( 'NONE', ( 7.270030056159898800E-015, 0.04361938736533572900, 0.9990482215818578000 ) ) ; +#4196 = FACE_OUTER_BOUND ( 'NONE', #5078, .T. ) ; +#4197 = CARTESIAN_POINT ( 'NONE', ( -3.750000000000207400, 3.420000000000228200, -5.415000000000082600 ) ) ; +#4198 = DIRECTION ( 'NONE', ( 6.133173666732127500E-015, 0.7071067811865479100, -0.7071067811865471300 ) ) ; +#4199 = AXIS2_PLACEMENT_3D ( 'NONE', #1230, #3965, #1961 ) ; +#4200 = VECTOR ( 'NONE', #973, 1000.000000000000000 ) ; +#4201 = FACE_OUTER_BOUND ( 'NONE', #2576, .T. ) ; +#4202 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4203 = CARTESIAN_POINT ( 'NONE', ( 1.214566258198710900, -0.07273958541535903400, -8.316489680117236100 ) ) ; +#4204 = ADVANCED_FACE ( 'NONE', ( #835 ), #148, .F. ) ; +#4205 = EDGE_CURVE ( 'NONE', #1165, #263, #34, .T. ) ; +#4206 = ORIENTED_EDGE ( 'NONE', *, *, #641, .F. ) ; +#4207 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4208 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999764400, 3.100000000000217200, -1.650000000000008100 ) ) ; +#4209 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999749700, 0.4000000000002278400, -0.7999999999999778400 ) ) ; +#4210 = ORIENTED_EDGE ( 'NONE', *, *, #672, .T. ) ; +#4211 = EDGE_LOOP ( 'NONE', ( #2570, #5141, #2828, #203, #700, #2313 ) ) ; +#4212 = VECTOR ( 'NONE', #2974, 1000.000000000000000 ) ; +#4213 = EDGE_CURVE ( 'NONE', #23, #1741, #3875, .T. ) ; +#4214 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.04361938736533603500, 0.9990482215818578000 ) ) ; +#4215 = FACE_OUTER_BOUND ( 'NONE', #4254, .T. ) ; +#4216 = EDGE_LOOP ( 'NONE', ( #2060, #2195, #2004, #554 ) ) ; +#4217 = PLANE ( 'NONE', #4725 ) ; +#4218 = ORIENTED_EDGE ( 'NONE', *, *, #5151, .T. ) ; +#4219 = CIRCLE ( 'NONE', #301, 0.2500000000000000000 ) ; +#4220 = CARTESIAN_POINT ( 'NONE', ( -0.8571796769726917100, 3.250000000000227400, -0.9500000000000423700 ) ) ; +#4221 = CIRCLE ( 'NONE', #4448, 0.09999999999999592500 ) ; +#4222 = ORIENTED_EDGE ( 'NONE', *, *, #356, .T. ) ; +#4223 = EDGE_CURVE ( 'NONE', #1672, #1739, #951, .T. ) ; +#4224 = FACE_OUTER_BOUND ( 'NONE', #1141, .T. ) ; +#4225 = EDGE_LOOP ( 'NONE', ( #4876, #4676, #1319, #4374 ) ) ; +#4226 = DIRECTION ( 'NONE', ( 0.2515875261947527200, -0.2347343575773417300, 0.9389374303093668300 ) ) ; +#4227 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 1.298089913141610200, -3.660576115180942800E-014 ) ) ; +#4228 = VECTOR ( 'NONE', #413, 1000.000000000000000 ) ; +#4229 = ORIENTED_EDGE ( 'NONE', *, *, #528, .T. ) ; +#4230 = DIRECTION ( 'NONE', ( -7.228014483236687300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4231 = LINE ( 'NONE', #294, #3911 ) ; +#4232 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 8.365839057930752800E-015 ) ) ; +#4233 = AXIS2_PLACEMENT_3D ( 'NONE', #3162, #3122, #2746 ) ; +#4234 = LINE ( 'NONE', #4846, #3148 ) ; +#4235 = EDGE_LOOP ( 'NONE', ( #2988, #2913, #156, #1003, #4736, #3111, #441, #261, #3386, #774, #3860, #3555 ) ) ; +#4236 = ADVANCED_FACE ( 'NONE', ( #1068 ), #4503, .F. ) ; +#4237 = PLANE ( 'NONE', #80 ) ; +#4238 = FACE_OUTER_BOUND ( 'NONE', #2028, .T. ) ; +#4239 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1158, 'distance_accuracy_value', 'NONE'); +#4240 = ORIENTED_EDGE ( 'NONE', *, *, #4830, .T. ) ; +#4241 = LINE ( 'NONE', #586, #3154 ) ; +#4242 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.037329745435896800E-014 ) ) ; +#4243 = FACE_OUTER_BOUND ( 'NONE', #393, .T. ) ; +#4244 = EDGE_CURVE ( 'NONE', #2777, #3268, #2814, .T. ) ; +#4245 = LINE ( 'NONE', #1999, #3230 ) ; +#4246 = ORIENTED_EDGE ( 'NONE', *, *, #583, .T. ) ; +#4247 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201309400E-017, -7.391429510507072300E-015 ) ) ; +#4248 = EDGE_LOOP ( 'NONE', ( #4076, #2871, #3419, #461 ) ) ; +#4249 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 1.298089913141610200, -3.660576115180942800E-014 ) ) ; +#4250 = ORIENTED_EDGE ( 'NONE', *, *, #2704, .T. ) ; +#4251 = DIRECTION ( 'NONE', ( -6.133173666733495400E-015, 0.7071067811865474600, -0.7071067811865476800 ) ) ; +#4252 = EDGE_CURVE ( 'NONE', #5175, #3351, #1630, .T. ) ; +#4253 = ORIENTED_EDGE ( 'NONE', *, *, #3809, .T. ) ; +#4254 = EDGE_LOOP ( 'NONE', ( #908, #1222, #1353, #1587 ) ) ; +#4255 = VECTOR ( 'NONE', #4653, 1000.000000000000100 ) ; +#4256 = EDGE_LOOP ( 'NONE', ( #3681, #3982, #860, #2625 ) ) ; +#4257 = ORIENTED_EDGE ( 'NONE', *, *, #4316, .F. ) ; +#4258 = EDGE_CURVE ( 'NONE', #2457, #1428, #2932, .T. ) ; +#4259 = AXIS2_PLACEMENT_3D ( 'NONE', #918, #2095, #4475 ) ; +#4260 = PLANE ( 'NONE', #3866 ) ; +#4261 = LINE ( 'NONE', #3390, #409 ) ; +#4262 = ORIENTED_EDGE ( 'NONE', *, *, #3693, .F. ) ; +#4263 = PLANE ( 'NONE', #494 ) ; +#4264 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#4265 = AXIS2_PLACEMENT_3D ( 'NONE', #1735, #2589, #4553 ) ; +#4266 = LINE ( 'NONE', #2055, #5086 ) ; +#4267 = VECTOR ( 'NONE', #4455, 1000.000000000000000 ) ; +#4268 = DIRECTION ( 'NONE', ( -0.2515875261947527200, -0.2347343575773417300, -0.9389374303093668300 ) ) ; +#4269 = PLANE ( 'NONE', #2274 ) ; +#4270 = ADVANCED_FACE ( 'NONE', ( #280 ), #98, .F. ) ; +#4271 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 7.281636885445248400E-015 ) ) ; +#4272 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000236500, 5.500000000000204300, -2.000000000000078200 ) ) ; +#4273 = AXIS2_PLACEMENT_3D ( 'NONE', #3227, #852, #3411 ) ; +#4274 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#4275 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, 1.047445008332814600E-014, 1.000000000000000000 ) ) ; +#4276 = ORIENTED_EDGE ( 'NONE', *, *, #3822, .T. ) ; +#4277 = LINE ( 'NONE', #4959, #3574 ) ; +#4278 = EDGE_CURVE ( 'NONE', #4580, #1195, #3313, .T. ) ; +#4279 = VERTEX_POINT ( 'NONE', #541 ) ; +#4280 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000251100, -0.09999999999979573800, -0.2000000000000242700 ) ) ; +#4281 = DIRECTION ( 'NONE', ( -6.133173666733221600E-015, -0.7071067811865962000, -0.7071067811864987200 ) ) ; +#4282 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000250700, 5.500000000000234500, -6.938893903907228400E-014 ) ) ; +#4283 = VECTOR ( 'NONE', #968, 1000.000000000000000 ) ; +#4284 = EDGE_CURVE ( 'NONE', #3463, #1479, #3748, .T. ) ; +#4285 = LINE ( 'NONE', #4312, #1764 ) ; +#4286 = DIRECTION ( 'NONE', ( 5.374889246193463900E-017, 1.000000000000000000, -1.067853519814894600E-014 ) ) ; +#4287 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#4288 = ORIENTED_EDGE ( 'NONE', *, *, #1729, .F. ) ; +#4289 = ORIENTED_EDGE ( 'NONE', *, *, #4747, .T. ) ; +#4290 = PLANE ( 'NONE', #3109 ) ; +#4291 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.7071067811865555700, -0.7071067811865393600 ) ) ; +#4292 = VECTOR ( 'NONE', #1674, 1000.000000000000000 ) ; +#4293 = EDGE_LOOP ( 'NONE', ( #5147, #210, #3358, #4240 ) ) ; +#4294 = LINE ( 'NONE', #3001, #2023 ) ; +#4295 = DIRECTION ( 'NONE', ( 8.365839057930752800E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4296 = VECTOR ( 'NONE', #1624, 1000.000000000000000 ) ; +#4297 = ORIENTED_EDGE ( 'NONE', *, *, #4987, .T. ) ; +#4298 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252400, 1.710477983563044100, -0.08005065776186022500 ) ) ; +#4299 = DIRECTION ( 'NONE', ( 2.639228045337950800E-016, -0.9990482215818578000, 0.04361938736533712400 ) ) ; +#4300 = ORIENTED_EDGE ( 'NONE', *, *, #3693, .T. ) ; +#4301 = LINE ( 'NONE', #3225, #1250 ) ; +#4302 = AXIS2_PLACEMENT_3D ( 'NONE', #4227, #1872, #1816 ) ; +#4303 = FILL_AREA_STYLE_COLOUR ( '', #3967 ) ; +#4304 = ORIENTED_EDGE ( 'NONE', *, *, #2319, .T. ) ; +#4305 = CARTESIAN_POINT ( 'NONE', ( -0.8571796769726917100, 3.250000000000227400, -0.9500000000000423700 ) ) ; +#4306 = EDGE_CURVE ( 'NONE', #4943, #4362, #590, .T. ) ; +#4307 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 1.298089913141610200, -3.660576115180942800E-014 ) ) ; +#4308 = EDGE_LOOP ( 'NONE', ( #4651, #2973, #4906, #1247 ) ) ; +#4309 = VERTEX_POINT ( 'NONE', #3319 ) ; +#4310 = ORIENTED_EDGE ( 'NONE', *, *, #842, .T. ) ; +#4311 = ADVANCED_FACE ( 'NONE', ( #4143 ), #4983, .F. ) ; +#4312 = CARTESIAN_POINT ( 'NONE', ( -1.214566258198710900, -0.07273958541535903400, -8.316489680117236100 ) ) ; +#4313 = VECTOR ( 'NONE', #2670, 1000.000000000000000 ) ; +#4314 = VERTEX_POINT ( 'NONE', #2561 ) ; +#4315 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002429200, 3.350000000000211500, -0.9500000000000409200 ) ) ; +#4316 = EDGE_CURVE ( 'NONE', #2285, #3559, #3052, .T. ) ; +#4317 = AXIS2_PLACEMENT_3D ( 'NONE', #1174, #2389, #42 ) ; +#4318 = FACE_OUTER_BOUND ( 'NONE', #3106, .T. ) ; +#4319 = ORIENTED_EDGE ( 'NONE', *, *, #4554, .T. ) ; +#4320 = ORIENTED_EDGE ( 'NONE', *, *, #745, .F. ) ; +#4321 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4322 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000218800, 4.200000000000189400, -4.250000000000066600 ) ) ; +#4323 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#4324 = EDGE_CURVE ( 'NONE', #3294, #1434, #3632, .T. ) ; +#4325 = LINE ( 'NONE', #4322, #1126 ) ; +#4326 = CARTESIAN_POINT ( 'NONE', ( -1.825000000000004200, 0.09000000000023535000, -8.600000000000013900 ) ) ; +#4327 = DIRECTION ( 'NONE', ( -2.639228045337950800E-016, 0.9990482215818578000, -0.04361938736533712400 ) ) ; +#4328 = DIRECTION ( 'NONE', ( -7.329817504127328300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4329 = LINE ( 'NONE', #2419, #2178 ) ; +#4330 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930754400E-015 ) ) ; +#4331 = AXIS2_PLACEMENT_3D ( 'NONE', #715, #3964, #752 ) ; +#4332 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 4.200000000000235500, -5.898059818321144100E-014 ) ) ; +#4333 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000246300, 4.705000000000227400, -0.8000000000000611100 ) ) ; +#4334 = ORIENTED_EDGE ( 'NONE', *, *, #2654, .F. ) ; +#4335 = ADVANCED_FACE ( 'NONE', ( #1168 ), #1718, .F. ) ; +#4336 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000230200, -0.09999999999979557200, -2.700000000000024200 ) ) ; +#4337 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 2.776239569296743900, -7.600000000000002300 ) ) ; +#4338 = VERTEX_POINT ( 'NONE', #2574 ) ; +#4339 = EDGE_CURVE ( 'NONE', #244, #661, #3282, .T. ) ; +#4340 = CYLINDRICAL_SURFACE ( 'NONE', #3584, 0.09999999999999592500 ) ; +#4341 = ADVANCED_FACE ( 'NONE', ( #4238 ), #4600, .F. ) ; +#4342 = CARTESIAN_POINT ( 'NONE', ( 3.150000000000208600, 5.500000000000172300, -6.000000000000087000 ) ) ; +#4343 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#4344 = LINE ( 'NONE', #4337, #1651 ) ; +#4345 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -7.281636885445248400E-015 ) ) ; +#4346 = VECTOR ( 'NONE', #775, 1000.000000000000000 ) ; +#4347 = EDGE_CURVE ( 'NONE', #1041, #884, #3980, .T. ) ; +#4348 = EDGE_CURVE ( 'NONE', #3340, #961, #3150, .T. ) ; +#4349 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000252100, 1.710477983563044100, -0.08005065776185686700 ) ) ; +#4350 = FACE_OUTER_BOUND ( 'NONE', #2250, .T. ) ; +#4351 = VECTOR ( 'NONE', #2387, 1000.000000000000000 ) ; +#4352 = ORIENTED_EDGE ( 'NONE', *, *, #2510, .T. ) ; +#4353 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000001897400, 0.3995241107910975100, -8.204742650103801400 ) ) ; +#4354 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000205800, 2.850000000000227500, -6.000000000000047100 ) ) ; +#4355 = LINE ( 'NONE', #5172, #4228 ) ; +#4356 = ORIENTED_EDGE ( 'NONE', *, *, #1210, .T. ) ; +#4357 = EDGE_CURVE ( 'NONE', #3064, #2205, #380, .T. ) ; +#4358 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000246300, 4.705000000000227400, -0.8000000000000611100 ) ) ; +#4359 = VECTOR ( 'NONE', #2364, 1000.000000000000000 ) ; +#4360 = AXIS2_PLACEMENT_3D ( 'NONE', #4764, #2813, #4389 ) ; +#4361 = FACE_OUTER_BOUND ( 'NONE', #2600, .T. ) ; +#4362 = VERTEX_POINT ( 'NONE', #605 ) ; +#4363 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 1.710477983563044100, -3.919373068745948000E-014 ) ) ; +#4364 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 6.263144656875306400E-015 ) ) ; +#4365 = PLANE ( 'NONE', #2775 ) ; +#4366 = FACE_OUTER_BOUND ( 'NONE', #1092, .T. ) ; +#4367 = FACE_OUTER_BOUND ( 'NONE', #1793, .T. ) ; +#4368 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999750700, 4.200000000000189400, 1.040834085586084300E-014 ) ) ; +#4369 = LINE ( 'NONE', #851, #3288 ) ; +#4370 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#4371 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252400, 1.298089913141610200, -0.08005065776186022500 ) ) ; +#4372 = ORIENTED_EDGE ( 'NONE', *, *, #212, .T. ) ; +#4373 = ORIENTED_EDGE ( 'NONE', *, *, #1825, .F. ) ; +#4374 = ORIENTED_EDGE ( 'NONE', *, *, #384, .T. ) ; +#4375 = AXIS2_PLACEMENT_3D ( 'NONE', #1604, #1976, #3586 ) ; +#4376 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4706 ) ) ; +#4377 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000201400, 0.5696839565364602000, -6.600000000000043200 ) ) ; +#4378 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000201400, -0.02974497641265105500, -6.573828367580842000 ) ) ; +#4379 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000244100, 2.267192902524094400E-013, -1.044399185738740000 ) ) ; +#4380 = ORIENTED_EDGE ( 'NONE', *, *, #2113, .F. ) ; +#4381 = ORIENTED_EDGE ( 'NONE', *, *, #3469, .F. ) ; +#4382 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865476800 ) ) ; +#4383 = EDGE_CURVE ( 'NONE', #1098, #313, #3457, .T. ) ; +#4384 = DIRECTION ( 'NONE', ( 7.390057102693798800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4385 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000202300, 2.750000000000227400, -6.500000000000048000 ) ) ; +#4386 = VECTOR ( 'NONE', #3575, 1000.000000000000000 ) ; +#4387 = EDGE_LOOP ( 'NONE', ( #2043, #1717, #4171, #2987 ) ) ; +#4388 = VERTEX_POINT ( 'NONE', #1010 ) ; +#4389 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4390 = EDGE_LOOP ( 'NONE', ( #4492, #3761, #3078, #1686 ) ) ; +#4391 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000242700, 3.250000000000227400, -0.9500000000000452500 ) ) ; +#4392 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252400, 1.710477983563044100, -0.08005065776186022500 ) ) ; +#4393 = VECTOR ( 'NONE', #288, 999.9999999999998900 ) ; +#4394 = ORIENTED_EDGE ( 'NONE', *, *, #1671, .F. ) ; +#4395 = EDGE_CURVE ( 'NONE', #4476, #3024, #914, .T. ) ; +#4396 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#4397 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4398 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.7071067811865962000, 0.7071067811864987200 ) ) ; +#4399 = VECTOR ( 'NONE', #558, 1000.000000000000000 ) ; +#4400 = FACE_OUTER_BOUND ( 'NONE', #4387, .T. ) ; +#4401 = AXIS2_PLACEMENT_3D ( 'NONE', #1870, #2868, #4910 ) ; +#4402 = ADVANCED_FACE ( 'NONE', ( #4224 ), #4570, .F. ) ; +#4403 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000244000, 2.266977906954246500E-013, -1.044399185738743400 ) ) ; +#4404 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 9.531447670202194300E-017, -1.000000000000000000 ) ) ; +#4405 = DIRECTION ( 'NONE', ( 7.299578983070721100E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4406 = DIRECTION ( 'NONE', ( -5.374889246193779500E-017, -1.000000000000000000, 1.024619699438383000E-014 ) ) ; +#4407 = ORIENTED_EDGE ( 'NONE', *, *, #1818, .F. ) ; +#4408 = VERTEX_POINT ( 'NONE', #2196 ) ; +#4409 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201356800E-017, 7.391429510507072300E-015 ) ) ; +#4410 = AXIS2_PLACEMENT_3D ( 'NONE', #201, #2909, #1391 ) ; +#4411 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000218800, 4.200000000000190200, -4.250000000000066600 ) ) ; +#4412 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#4413 = VERTEX_POINT ( 'NONE', #2138 ) ; +#4414 = CIRCLE ( 'NONE', #4741, 0.6000000000000007500 ) ; +#4415 = DIRECTION ( 'NONE', ( -1.000000000000000000, 7.627114208151728300E-029, 7.281636885445248400E-015 ) ) ; +#4416 = PLANE ( 'NONE', #2713 ) ; +#4417 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4418 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4419 = EDGE_CURVE ( 'NONE', #1165, #2205, #799, .T. ) ; +#4420 = VECTOR ( 'NONE', #2762, 1000.000000000000000 ) ; +#4421 = VECTOR ( 'NONE', #3963, 1000.000000000000000 ) ; +#4422 = CARTESIAN_POINT ( 'NONE', ( -1.825000000000004200, 0.09000000000023535000, -8.600000000000013900 ) ) ; +#4423 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#4424 = CARTESIAN_POINT ( 'NONE', ( 1.824999999999996000, 0.09000000000023490600, -8.600000000000013900 ) ) ; +#4425 = FILL_AREA_STYLE_COLOUR ( '', #2705 ) ; +#4426 = ORIENTED_EDGE ( 'NONE', *, *, #5026, .T. ) ; +#4427 = DIRECTION ( 'NONE', ( -5.374889246202299800E-017, 1.000000000000000000, -2.911889426288178300E-031 ) ) ; +#4428 = EDGE_CURVE ( 'NONE', #3128, #2435, #2877, .T. ) ; +#4429 = ORIENTED_EDGE ( 'NONE', *, *, #427, .F. ) ; +#4430 = EDGE_CURVE ( 'NONE', #4944, #4592, #1129, .T. ) ; +#4431 = CARTESIAN_POINT ( 'NONE', ( 3.750000000000207400, 4.705000000000227400, -5.415000000000082600 ) ) ; +#4432 = PLANE ( 'NONE', #4958 ) ; +#4433 = VECTOR ( 'NONE', #133, 1000.000000000000000 ) ; +#4434 = ORIENTED_EDGE ( 'NONE', *, *, #3638, .F. ) ; +#4435 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 1.047445008332814600E-014 ) ) ; +#4436 = ADVANCED_FACE ( 'NONE', ( #3969 ), #4189, .F. ) ; +#4437 = LINE ( 'NONE', #4921, #1669 ) ; +#4438 = EDGE_CURVE ( 'NONE', #4758, #846, #2905, .T. ) ; +#4439 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, -1.000000000000000000, 3.913799179032202200E-031 ) ) ; +#4440 = ORIENTED_EDGE ( 'NONE', *, *, #3831, .F. ) ; +#4441 = DIRECTION ( 'NONE', ( 8.374527125405327500E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4442 = AXIS2_PLACEMENT_3D ( 'NONE', #1938, #2667, #303 ) ; +#4443 = ORIENTED_EDGE ( 'NONE', *, *, #2833, .F. ) ; +#4444 = VECTOR ( 'NONE', #246, 1000.000000000000000 ) ; +#4445 = CARTESIAN_POINT ( 'NONE', ( -3.950000000000212000, 2.550000000000228500, -5.415000000000084400 ) ) ; +#4446 = ORIENTED_EDGE ( 'NONE', *, *, #3422, .T. ) ; +#4447 = ORIENTED_EDGE ( 'NONE', *, *, #2474, .T. ) ; +#4448 = AXIS2_PLACEMENT_3D ( 'NONE', #5184, #3089, #4737 ) ; +#4449 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002065000, 3.350000000000193700, -4.250000000000047100 ) ) ; +#4450 = ORIENTED_EDGE ( 'NONE', *, *, #1524, .F. ) ; +#4451 = ORIENTED_EDGE ( 'NONE', *, *, #5126, .F. ) ; +#4453 = VERTEX_POINT ( 'NONE', #3066 ) ; +#4452 = DIRECTION ( 'NONE', ( 7.228014483236740900E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4454 = CARTESIAN_POINT ( 'NONE', ( 3.150000000000208600, 1.726049858596923100E-013, -6.000000000000087000 ) ) ; +#4455 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#4456 = EDGE_CURVE ( 'NONE', #11, #3820, #2779, .T. ) ; +#4457 = LINE ( 'NONE', #3836, #3104 ) ; +#4458 = ORIENTED_EDGE ( 'NONE', *, *, #1724, .T. ) ; +#4459 = ORIENTED_EDGE ( 'NONE', *, *, #3799, .F. ) ; +#4460 = ORIENTED_EDGE ( 'NONE', *, *, #3123, .F. ) ; +#4461 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#4462 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252900, 1.298089913141610200, -3.660576115180942800E-014 ) ) ; +#4463 = CARTESIAN_POINT ( 'NONE', ( -3.750000000000207400, 4.705000000000227400, -5.415000000000082600 ) ) ; +#4464 = LINE ( 'NONE', #647, #155 ) ; +#4465 = ORIENTED_EDGE ( 'NONE', *, *, #772, .T. ) ; +#4466 = ORIENTED_EDGE ( 'NONE', *, *, #684, .F. ) ; +#4467 = DIRECTION ( 'NONE', ( -7.409566345325542500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4468 = ADVANCED_FACE ( 'NONE', ( #1085 ), #5104, .F. ) ; +#4469 = EDGE_CURVE ( 'NONE', #3520, #3353, #2582, .T. ) ; +#4470 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#4471 = LINE ( 'NONE', #764, #1631 ) ; +#4472 = EDGE_CURVE ( 'NONE', #2666, #1550, #4833, .T. ) ; +#4473 = VECTOR ( 'NONE', #2841, 1000.000000000000000 ) ; +#4474 = AXIS2_PLACEMENT_3D ( 'NONE', #2432, #4813, #430 ) ; +#4475 = DIRECTION ( 'NONE', ( -7.228014483236687300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4476 = VERTEX_POINT ( 'NONE', #1106 ) ; +#4477 = PLANE ( 'NONE', #3184 ) ; +#4478 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#4479 = ORIENTED_EDGE ( 'NONE', *, *, #1065, .T. ) ; +#4480 = ORIENTED_EDGE ( 'NONE', *, *, #4818, .T. ) ; +#4481 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999802700, 1.552470013214318400E-013, -7.599999999999981900 ) ) ; +#4482 = VECTOR ( 'NONE', #1998, 1000.000000000000100 ) ; +#4483 = LINE ( 'NONE', #850, #2194 ) ; +#4484 = STYLED_ITEM ( 'NONE', ( #175 ), #4877 ) ; +#4485 = LINE ( 'NONE', #442, #3136 ) ; +#4486 = ADVANCED_FACE ( 'NONE', ( #2151 ), #5070, .F. ) ; +#4487 = LINE ( 'NONE', #2686, #1296 ) ; +#4488 = ORIENTED_EDGE ( 'NONE', *, *, #325, .T. ) ; +#4489 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002015100, 0.5000000000001660900, -6.600000000000010300 ) ) ; +#4490 = EDGE_CURVE ( 'NONE', #3834, #3239, #3120, .T. ) ; +#4491 = VECTOR ( 'NONE', #3713, 1000.000000000000000 ) ; +#4492 = ORIENTED_EDGE ( 'NONE', *, *, #2405, .T. ) ; +#4493 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000218800, 2.225000000000189700, -4.850000000000038700 ) ) ; +#4494 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#4495 = FACE_OUTER_BOUND ( 'NONE', #4918, .T. ) ; +#4496 = VERTEX_POINT ( 'NONE', #4249 ) ; +#4497 = EDGE_CURVE ( 'NONE', #4408, #1672, #1859, .T. ) ; +#4498 = AXIS2_PLACEMENT_3D ( 'NONE', #1635, #2383, #3977 ) ; +#4499 = ORIENTED_EDGE ( 'NONE', *, *, #1954, .F. ) ; +#4500 = LINE ( 'NONE', #985, #2346 ) ; +#4501 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000242700, 2.257084401334521500E-013, -1.170808264217958000 ) ) ; +#4502 = CIRCLE ( 'NONE', #1282, 0.2500000000000000000 ) ; +#4503 = PLANE ( 'NONE', #4073 ) ; +#4504 = PLANE ( 'NONE', #3326 ) ; +#4505 = DIRECTION ( 'NONE', ( 5.374889246193463900E-017, 1.000000000000000000, -1.067853519814894600E-014 ) ) ; +#4506 = ORIENTED_EDGE ( 'NONE', *, *, #589, .F. ) ; +#4507 = ORIENTED_EDGE ( 'NONE', *, *, #4278, .T. ) ; +#4508 = PLANE ( 'NONE', #27 ) ; +#4509 = ORIENTED_EDGE ( 'NONE', *, *, #4284, .T. ) ; +#4510 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999802700, 2.776239569296745200, -7.600000000000005900 ) ) ; +#4511 = ADVANCED_FACE ( 'NONE', ( #1406 ), #2212, .T. ) ; +#4512 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999748800, 1.551771277612313300E-013, -7.599999999999971200 ) ) ; +#4513 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999793800, 5.500000000000172300, -6.000000000000036400 ) ) ; +#4514 = CARTESIAN_POINT ( 'NONE', ( 1.300000000000234300, 4.200000000000235500, -5.898059818321144100E-014 ) ) ; +#4515 = ORIENTED_EDGE ( 'NONE', *, *, #2891, .F. ) ; +#4516 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000246700, 4.355000000000233100, -5.261941203825680100 ) ) ; +#4517 = LINE ( 'NONE', #1541, #4191 ) ; +#4518 = ORIENTED_EDGE ( 'NONE', *, *, #821, .F. ) ; +#4519 = ORIENTED_EDGE ( 'NONE', *, *, #3054, .T. ) ; +#4520 = EDGE_CURVE ( 'NONE', #3133, #5118, #1951, .T. ) ; +#4521 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201231700E-017, -7.281636885445248400E-015 ) ) ; +#4522 = FACE_OUTER_BOUND ( 'NONE', #121, .T. ) ; +#4523 = EDGE_LOOP ( 'NONE', ( #4107, #4951, #10, #2674 ) ) ; +#4524 = CARTESIAN_POINT ( 'NONE', ( 3.750000000000207400, 4.705000000000227400, -5.415000000000082600 ) ) ; +#4525 = VECTOR ( 'NONE', #3267, 1000.000000000000000 ) ; +#4526 = EDGE_CURVE ( 'NONE', #379, #3202, #1201, .T. ) ; +#4527 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999997715000, 4.200000000000190200, -4.250000000000048800 ) ) ; +#4528 = EDGE_CURVE ( 'NONE', #476, #3920, #573, .T. ) ; +#4529 = DIRECTION ( 'NONE', ( 1.971276677246343200E-016, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#4530 = PLANE ( 'NONE', #3617 ) ; +#4531 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249600E-017, 0.0000000000000000000 ) ) ; +#4532 = EDGE_CURVE ( 'NONE', #3772, #3646, #2344, .T. ) ; +#4533 = ADVANCED_FACE ( 'NONE', ( #3962 ), #1087, .F. ) ; +#4534 = ORIENTED_EDGE ( 'NONE', *, *, #2704, .F. ) ; +#4535 = AXIS2_PLACEMENT_3D ( 'NONE', #100, #2057, #3291 ) ; +#4536 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252000, 0.4000000000002256800, -4.163336342344337000E-014 ) ) ; +#4537 = FACE_OUTER_BOUND ( 'NONE', #2096, .T. ) ; +#4538 = DIRECTION ( 'NONE', ( -5.374889246201249000E-017, 1.000000000000000000, -3.913799179032202200E-031 ) ) ; +#4539 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246202300400E-017, 0.0000000000000000000 ) ) ; +#4540 = ORIENTED_EDGE ( 'NONE', *, *, #4078, .F. ) ; +#4541 = ORIENTED_EDGE ( 'NONE', *, *, #4946, .F. ) ; +#4542 = LINE ( 'NONE', #857, #3452 ) ; +#4543 = AXIS2_PLACEMENT_3D ( 'NONE', #2141, #562, #2564 ) ; +#4544 = VECTOR ( 'NONE', #3500, 1000.000000000000000 ) ; +#4545 = LINE ( 'NONE', #4699, #176 ) ; +#4546 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 5.500000000000155400, -7.600000000000029000 ) ) ; +#4547 = AXIS2_PLACEMENT_3D ( 'NONE', #1583, #4412, #1169 ) ; +#4548 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000251100, -0.09999999999979573800, -0.2000000000000242700 ) ) ; +#4549 = VERTEX_POINT ( 'NONE', #3443 ) ; +#4550 = LINE ( 'NONE', #4966, #1661 ) ; +#4551 = ORIENTED_EDGE ( 'NONE', *, *, #3898, .T. ) ; +#4552 = ORIENTED_EDGE ( 'NONE', *, *, #4818, .F. ) ; +#4553 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.7071067811866513800, 0.7071067811864437700 ) ) ; +#4554 = EDGE_CURVE ( 'NONE', #374, #3862, #3459, .T. ) ; +#4555 = LINE ( 'NONE', #965, #3472 ) ; +#4556 = VECTOR ( 'NONE', #1273, 1000.000000000000000 ) ; +#4557 = ORIENTED_EDGE ( 'NONE', *, *, #2395, .F. ) ; +#4558 = ADVANCED_FACE ( 'NONE', ( #2406 ), #3103, .F. ) ; +#4559 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000230700, 2.100000000000236300, -2.900000000000021200 ) ) ; +#4560 = ORIENTED_EDGE ( 'NONE', *, *, #241, .T. ) ; +#4561 = VECTOR ( 'NONE', #564, 1000.000000000000000 ) ; +#4562 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#4563 = EDGE_CURVE ( 'NONE', #2541, #3920, #1527, .T. ) ; +#4564 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude3', #4772 ) ; +#4565 = ORIENTED_EDGE ( 'NONE', *, *, #4419, .F. ) ; +#4566 = ORIENTED_EDGE ( 'NONE', *, *, #557, .F. ) ; +#4567 = ORIENTED_EDGE ( 'NONE', *, *, #2456, .T. ) ; +#4568 = PLANE ( 'NONE', #2867 ) ; +#4569 = VERTEX_POINT ( 'NONE', #3178 ) ; +#4570 = PLANE ( 'NONE', #2130 ) ; +#4571 = ORIENTED_EDGE ( 'NONE', *, *, #3865, .T. ) ; +#4572 = LINE ( 'NONE', #3284, #2040 ) ; +#4573 = EDGE_LOOP ( 'NONE', ( #1561, #3377, #2144, #2252 ) ) ; +#4574 = ORIENTED_EDGE ( 'NONE', *, *, #389, .T. ) ; +#4575 = PRODUCT ( 'S2B-PH-SM4-TB(LF)(SN)', 'S2B-PH-SM4-TB(LF)(SN)', '', ( #3832 ) ) ; +#4576 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000230700, 0.4000000000002100800, -2.900000000000023900 ) ) ; +#4577 = AXIS2_PLACEMENT_3D ( 'NONE', #2159, #1382, #3776 ) ; +#4578 = VECTOR ( 'NONE', #2514, 1000.000000000000000 ) ; +#4579 = ORIENTED_EDGE ( 'NONE', *, *, #1663, .T. ) ; +#4580 = VERTEX_POINT ( 'NONE', #1948 ) ; +#4581 = PLANE ( 'NONE', #399 ) ; +#4582 = LINE ( 'NONE', #3904, #836 ) ; +#4583 = ADVANCED_FACE ( 'NONE', ( #4601 ), #3943, .F. ) ; +#4584 = EDGE_CURVE ( 'NONE', #943, #916, #3388, .T. ) ; +#4585 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000239600, 2.850000000000227500, -1.350000000000045400 ) ) ; +#4586 = FACE_OUTER_BOUND ( 'NONE', #645, .T. ) ; +#4587 = EDGE_CURVE ( 'NONE', #3486, #500, #728, .T. ) ; +#4588 = AXIS2_PLACEMENT_3D ( 'NONE', #3454, #5099, #5089 ) ; +#4589 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002395900, 3.350000000000227500, -1.350000000000041600 ) ) ; +#4590 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000189800, -0.09999999999983200100, -8.182932956421137000 ) ) ; +#4591 = ORIENTED_EDGE ( 'NONE', *, *, #1663, .F. ) ; +#4592 = VERTEX_POINT ( 'NONE', #5125 ) ; +#4593 = CARTESIAN_POINT ( 'NONE', ( -0.8571796769726367500, -0.01754293278778021300, -8.586914183790408800 ) ) ; +#4594 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.037329745435896800E-014 ) ) ; +#4595 = DIRECTION ( 'NONE', ( -7.228014483236740900E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4596 = VERTEX_POINT ( 'NONE', #778 ) ; +#4597 = LINE ( 'NONE', #1263, #363 ) ; +#4598 = LINE ( 'NONE', #3588, #4720 ) ; +#4599 = VERTEX_POINT ( 'NONE', #1578 ) ; +#4600 = PLANE ( 'NONE', #4577 ) ; +#4601 = FACE_OUTER_BOUND ( 'NONE', #5047, .T. ) ; +#4602 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000218900, 3.350000000000175900, -4.250000000000041700 ) ) ; +#4603 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#4604 = VECTOR ( 'NONE', #3909, 1000.000000000000000 ) ; +#4605 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2340 ), #71 ) ; +#4606 = DIRECTION ( 'NONE', ( -7.243900229353696500E-015, -9.531447670202232500E-017, 1.000000000000000000 ) ) ; +#4607 = LINE ( 'NONE', #2856, #4292 ) ; +#4608 = EDGE_LOOP ( 'NONE', ( #3608, #95, #2532, #1535 ) ) ; +#4609 = EDGE_CURVE ( 'NONE', #769, #819, #4285, .T. ) ; +#4610 = FACE_OUTER_BOUND ( 'NONE', #2230, .T. ) ; +#4611 = LINE ( 'NONE', #1199, #129 ) ; +#4612 = ORIENTED_EDGE ( 'NONE', *, *, #4956, .F. ) ; +#4613 = LINE ( 'NONE', #859, #563 ) ; +#4614 = DIRECTION ( 'NONE', ( -5.374889246202360800E-017, 1.000000000000000000, 7.282397625204285800E-017 ) ) ; +#4615 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 5.500000000000234500, -7.285838599102589800E-014 ) ) ; +#4616 = VECTOR ( 'NONE', #2968, 1000.000000000000000 ) ; +#4617 = EDGE_CURVE ( 'NONE', #2882, #941, #2198, .T. ) ; +#4618 = ORIENTED_EDGE ( 'NONE', *, *, #3236, .F. ) ; +#4619 = DIRECTION ( 'NONE', ( 2.639228045337950800E-016, 0.9990482215818578000, -0.04361938736533712400 ) ) ; +#4620 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1883, 'distance_accuracy_value', 'NONE'); +#4621 = ORIENTED_EDGE ( 'NONE', *, *, #1814, .T. ) ; +#4622 = ORIENTED_EDGE ( 'NONE', *, *, #4176, .F. ) ; +#4623 = VERTEX_POINT ( 'NONE', #1931 ) ; +#4624 = EDGE_CURVE ( 'NONE', #1402, #2914, #4219, .T. ) ; +#4625 = DIRECTION ( 'NONE', ( -7.274646834741446700E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4626 = ORIENTED_EDGE ( 'NONE', *, *, #4348, .F. ) ; +#4627 = ORIENTED_EDGE ( 'NONE', *, *, #4649, .F. ) ; +#4628 = ADVANCED_FACE ( 'NONE', ( #1947 ), #5160, .F. ) ; +#4629 = LINE ( 'NONE', #1693, #2169 ) ; +#4630 = VERTEX_POINT ( 'NONE', #4349 ) ; +#4631 = ORIENTED_EDGE ( 'NONE', *, *, #782, .T. ) ; +#4632 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000229900, -0.09999999999979555800, -2.700000000000020600 ) ) ; +#4633 = DIRECTION ( 'NONE', ( 7.228014483236740900E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4634 = LINE ( 'NONE', #2094, #339 ) ; +#4635 = ORIENTED_EDGE ( 'NONE', *, *, #2622, .F. ) ; +#4636 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000238300, 3.100000000000214600, -1.900000000000014800 ) ) ; +#4637 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000252500, 2.100000000000236300, -3.828702780027107000E-014 ) ) ; +#4638 = VECTOR ( 'NONE', #4819, 1000.000000000000000 ) ; +#4639 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000242700, 2.950000000000227100, -0.9500000000000452500 ) ) ; +#4640 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#4641 = EDGE_CURVE ( 'NONE', #3590, #1269, #4975, .T. ) ; +#4642 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246202299800E-017, 8.365839057930754400E-015 ) ) ; +#4643 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999803600, 5.500000000000173200, -7.600000000000007600 ) ) ; +#4644 = ORIENTED_EDGE ( 'NONE', *, *, #650, .T. ) ; +#4645 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299200E-017, 8.365839057930752800E-015 ) ) ; +#4646 = ORIENTED_EDGE ( 'NONE', *, *, #1801, .F. ) ; +#4647 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#4648 = ADVANCED_FACE ( 'NONE', ( #1652 ), #795, .T. ) ; +#4649 = EDGE_CURVE ( 'NONE', #2279, #4938, #1882, .T. ) ; +#4650 = ORIENTED_EDGE ( 'NONE', *, *, #1281, .T. ) ; +#4651 = ORIENTED_EDGE ( 'NONE', *, *, #62, .T. ) ; +#4652 = LINE ( 'NONE', #1559, #602 ) ; +#4653 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.7071067811865536800, -0.7071067811865412400 ) ) ; +#4654 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000241900, -0.09999999999979564100, -1.270808264217946800 ) ) ; +#4655 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999770600, 2.038300084272748300E-013, -2.999999999999983600 ) ) ; +#4656 = LINE ( 'NONE', #1861, #1084 ) ; +#4657 = LINE ( 'NONE', #3644, #2129 ) ; +#4658 = EDGE_CURVE ( 'NONE', #935, #912, #4849, .T. ) ; +#4659 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000218900, 2.850000000000209700, -4.250000000000041700 ) ) ; +#4660 = CARTESIAN_POINT ( 'NONE', ( -3.750000000000230000, 4.705000000000228300, -2.715000000000083300 ) ) ; +#4661 = VECTOR ( 'NONE', #1842, 1000.000000000000000 ) ; +#4662 = ORIENTED_EDGE ( 'NONE', *, *, #3316, .F. ) ; +#4663 = ORIENTED_EDGE ( 'NONE', *, *, #188, .T. ) ; +#4664 = ORIENTED_EDGE ( 'NONE', *, *, #1845, .F. ) ; +#4665 = FILL_AREA_STYLE ('',( #657 ) ) ; +#4666 = PLANE ( 'NONE', #1431 ) ; +#4667 = LINE ( 'NONE', #2736, #3915 ) ; +#4668 = ORIENTED_EDGE ( 'NONE', *, *, #1980, .F. ) ; +#4669 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000244900, -0.09999999999979568300, -0.9443991857387211700 ) ) ; +#4670 = VECTOR ( 'NONE', #172, 1000.000000000000000 ) ; +#4671 = VERTEX_POINT ( 'NONE', #421 ) ; +#4672 = EDGE_CURVE ( 'NONE', #3705, #3128, #856, .T. ) ; +#4673 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000252000, 0.5400000000002356200, -3.478290138553275700E-014 ) ) ; +#4674 = ORIENTED_EDGE ( 'NONE', *, *, #3356, .F. ) ; +#4675 = VECTOR ( 'NONE', #33, 1000.000000000000100 ) ; +#4676 = ORIENTED_EDGE ( 'NONE', *, *, #2331, .F. ) ; +#4677 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999763100, 2.800000000000218800, -1.650000000000011500 ) ) ; +#4678 = EDGE_CURVE ( 'NONE', #2501, #204, #116, .T. ) ; +#4679 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#4680 = EDGE_CURVE ( 'NONE', #1117, #1102, #4485, .T. ) ; +#4681 = AXIS2_PLACEMENT_3D ( 'NONE', #2906, #3296, #3315 ) ; +#4682 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999795000, 0.09000000000023572500, -5.999999999999978700 ) ) ; +#4683 = ADVANCED_FACE ( 'NONE', ( #3013 ), #1226, .T. ) ; +#4684 = ORIENTED_EDGE ( 'NONE', *, *, #665, .T. ) ; +#4685 = ORIENTED_EDGE ( 'NONE', *, *, #3730, .T. ) ; +#4686 = ORIENTED_EDGE ( 'NONE', *, *, #3560, .F. ) ; +#4687 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4688 = PLANE ( 'NONE', #2257 ) ; +#4689 = CIRCLE ( 'NONE', #2147, 0.2500000000000000000 ) ; +#4690 = ORIENTED_EDGE ( 'NONE', *, *, #4395, .F. ) ; +#4691 = ORIENTED_EDGE ( 'NONE', *, *, #3853, .T. ) ; +#4692 = ORIENTED_EDGE ( 'NONE', *, *, #414, .T. ) ; +#4693 = EDGE_CURVE ( 'NONE', #3646, #991, #4101, .T. ) ; +#4694 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.7071067811865962000, 0.7071067811864987200 ) ) ; +#4695 = AXIS2_PLACEMENT_3D ( 'NONE', #457, #3228, #2391 ) ; +#4696 = ORIENTED_EDGE ( 'NONE', *, *, #2527, .T. ) ; +#4697 = ORIENTED_EDGE ( 'NONE', *, *, #4641, .T. ) ; +#4698 = EDGE_LOOP ( 'NONE', ( #3817, #2154, #4795, #948, #1800, #1855 ) ) ; +#4699 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000251100, 0.4000000000002044100, -2.900000000000025700 ) ) ; +#4700 = AXIS2_PLACEMENT_3D ( 'NONE', #2348, #323, #4321 ) ; +#4701 = VECTOR ( 'NONE', #3742, 1000.000000000000000 ) ; +#4702 = LINE ( 'NONE', #4788, #2240 ) ; +#4703 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000205800, 0.5696839565364602000, -6.000000000000047100 ) ) ; +#4704 = VECTOR ( 'NONE', #1101, 1000.000000000000000 ) ; +#4705 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#4706 = STYLED_ITEM ( 'NONE', ( #2761 ), #5177 ) ; +#4707 = CARTESIAN_POINT ( 'NONE', ( -1.142820323027737200, -0.01754293278778015100, -8.586914183790412400 ) ) ; +#4708 = ADVANCED_FACE ( 'NONE', ( #367 ), #1292, .T. ) ; +#4709 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 0.1000000000002270000, -2.910707410969268500E-014 ) ) ; +#4710 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 2.100000000000236300, -4.163336342344337700E-014 ) ) ; +#4711 = ORIENTED_EDGE ( 'NONE', *, *, #1665, .F. ) ; +#4712 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3547, 'distance_accuracy_value', 'NONE'); +#4713 = EDGE_CURVE ( 'NONE', #3435, #1188, #4159, .T. ) ; +#4714 = ORIENTED_EDGE ( 'NONE', *, *, #4924, .F. ) ; +#4715 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201352500E-017, -7.395763429917407300E-015 ) ) ; +#4716 = ORIENTED_EDGE ( 'NONE', *, *, #4357, .T. ) ; +#4717 = LINE ( 'NONE', #4385, #2947 ) ; +#4718 = PLANE ( 'NONE', #2614 ) ; +#4719 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.188166764367676100E-016, 7.281636885445246800E-015 ) ) ; +#4720 = VECTOR ( 'NONE', #1271, 1000.000000000000000 ) ; +#4721 = ORIENTED_EDGE ( 'NONE', *, *, #1124, .T. ) ; +#4722 = EDGE_CURVE ( 'NONE', #2847, #2703, #2068, .T. ) ; +#4723 = LINE ( 'NONE', #4820, #909 ) ; +#4724 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 5.500000000000155400, -7.600000000000029000 ) ) ; +#4725 = AXIS2_PLACEMENT_3D ( 'NONE', #2633, #5064, #223 ) ; +#4726 = DIRECTION ( 'NONE', ( 8.365839057930752800E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4727 = LINE ( 'NONE', #2664, #970 ) ; +#4728 = EDGE_LOOP ( 'NONE', ( #152, #2097, #115, #2280 ) ) ; +#4729 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000228400, 0.1000000000002044400, -2.900000000000023900 ) ) ; +#4730 = LINE ( 'NONE', #1289, #247 ) ; +#4731 = ORIENTED_EDGE ( 'NONE', *, *, #1696, .F. ) ; +#4732 = FACE_OUTER_BOUND ( 'NONE', #2916, .T. ) ; +#4733 = DIRECTION ( 'NONE', ( 2.639228045337950800E-016, 0.9990482215818578000, -0.04361938736533712400 ) ) ; +#4734 = VECTOR ( 'NONE', #4965, 1000.000000000000000 ) ; +#4735 = VECTOR ( 'NONE', #1509, 1000.000000000000000 ) ; +#4736 = ORIENTED_EDGE ( 'NONE', *, *, #3430, .T. ) ; +#4737 = DIRECTION ( 'NONE', ( -7.589415207398840300E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4738 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002508400, 5.500000000000234500, -5.898059818321144100E-014 ) ) ; +#4739 = ADVANCED_FACE ( 'NONE', ( #2131 ), #828, .F. ) ; +#4740 = VECTOR ( 'NONE', #1280, 1000.000000000000000 ) ; +#4741 = AXIS2_PLACEMENT_3D ( 'NONE', #2059, #614, #2940 ) ; +#4742 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811865474600, 0.7071067811865476800 ) ) ; +#4743 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000244000, 2.266977906954246500E-013, -1.044399185738743400 ) ) ; +#4744 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000202300, 2.750000000000227400, -6.500000000000048000 ) ) ; +#4745 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#4746 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4747 = EDGE_CURVE ( 'NONE', #3293, #4408, #2324, .T. ) ; +#4748 = VERTEX_POINT ( 'NONE', #4431 ) ; +#4749 = ORIENTED_EDGE ( 'NONE', *, *, #4490, .T. ) ; +#4750 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 5.500000000000214900, -2.000000000000045300 ) ) ; +#4751 = DIRECTION ( 'NONE', ( -6.938893903907228400E-015, -1.040834085586084300E-014, -1.000000000000000000 ) ) ; +#4752 = ORIENTED_EDGE ( 'NONE', *, *, #3384, .F. ) ; +#4753 = VERTEX_POINT ( 'NONE', #1599 ) ; +#4754 = EDGE_LOOP ( 'NONE', ( #4574, #90, #5097, #3941 ) ) ; +#4755 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000228500, 2.100000000000236300, -2.900000000000020800 ) ) ; +#4756 = EDGE_CURVE ( 'NONE', #2983, #4136, #3897, .T. ) ; +#4757 = VECTOR ( 'NONE', #1310, 1000.000000000000000 ) ; +#4758 = VERTEX_POINT ( 'NONE', #4825 ) ; +#4759 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999771500, 1.552577510999242300E-013, -7.599999999999971200 ) ) ; +#4760 = ORIENTED_EDGE ( 'NONE', *, *, #1506, .F. ) ; +#4761 = PLANE ( 'NONE', #3451 ) ; +#4762 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252400, 1.298089913141610200, -0.08005065776186022500 ) ) ; +#4763 = DIRECTION ( 'NONE', ( -5.374889246193700600E-017, -1.000000000000000000, 1.032988979366341300E-014 ) ) ; +#4764 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 0.7000000000002343200, -2.428612866367529900E-014 ) ) ; +#4765 = LINE ( 'NONE', #4512, #1812 ) ; +#4766 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4767 = AXIS2_PLACEMENT_3D ( 'NONE', #2497, #1656, #915 ) ; +#4768 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4769 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000229900, -0.09999999999979555800, -2.700000000000020600 ) ) ; +#4770 = CARTESIAN_POINT ( 'NONE', ( -0.8571796769726917100, 2.950000000000227100, -0.9500000000000423700 ) ) ; +#4771 = PLANE ( 'NONE', #2442 ) ; +#4772 = CLOSED_SHELL ( 'NONE', ( #3350, #1053, #4270, #2526, #758, #3488, #4110, #2729, #1380, #5131, #2306, #3596, #321, #4468, #4648, #4817 ) ) ; +#4773 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#4774 = VECTOR ( 'NONE', #4198, 1000.000000000000100 ) ; +#4775 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000252500, 0.1000000000002270300, -2.576073848652038200E-014 ) ) ; +#4776 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 7.395763429917407300E-015 ) ) ; +#4777 = PLANE ( 'NONE', #829 ) ; +#4778 = ORIENTED_EDGE ( 'NONE', *, *, #3323, .T. ) ; +#4779 = ORIENTED_EDGE ( 'NONE', *, *, #3269, .T. ) ; +#4780 = LINE ( 'NONE', #117, #1468 ) ; +#4781 = EDGE_CURVE ( 'NONE', #2065, #406, #240, .T. ) ; +#4782 = EDGE_CURVE ( 'NONE', #2247, #4549, #4723, .T. ) ; +#4783 = VECTOR ( 'NONE', #1582, 1000.000000000000000 ) ; +#4784 = ORIENTED_EDGE ( 'NONE', *, *, #4223, .F. ) ; +#4785 = VECTOR ( 'NONE', #2985, 1000.000000000000000 ) ; +#4786 = DIRECTION ( 'NONE', ( 8.365839057930752800E-015, -6.263144656875306400E-015, -1.000000000000000000 ) ) ; +#4787 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000239600, 2.850000000000227500, -1.350000000000045400 ) ) ; +#4788 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 3.350000000000235500, -2.428612866367529900E-014 ) ) ; +#4789 = ADVANCED_FACE ( 'NONE', ( #2834 ), #3576, .F. ) ; +#4790 = ORIENTED_EDGE ( 'NONE', *, *, #4532, .T. ) ; +#4791 = EDGE_CURVE ( 'NONE', #1467, #420, #4717, .T. ) ; +#4792 = PLANE ( 'NONE', #4695 ) ; +#4793 = VECTOR ( 'NONE', #3417, 1000.000000000000000 ) ; +#4794 = EDGE_LOOP ( 'NONE', ( #3526, #1385, #3275, #2368, #2445, #4626 ) ) ; +#4795 = ORIENTED_EDGE ( 'NONE', *, *, #2533, .T. ) ; +#4796 = CARTESIAN_POINT ( 'NONE', ( -2.300000000000246700, 4.355000000000233100, -5.261941203825680100 ) ) ; +#4797 = DIRECTION ( 'NONE', ( 7.274646834741446700E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4798 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000212100, 4.705000000000227400, -5.415000000000077300 ) ) ; +#4799 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000201400, 0.4697791343782779500, -6.595638061263509900 ) ) ; +#4800 = VECTOR ( 'NONE', #2894, 1000.000000000000100 ) ; +#4801 = AXIS2_PLACEMENT_3D ( 'NONE', #5058, #646, #1876 ) ; +#4802 = ORIENTED_EDGE ( 'NONE', *, *, #4791, .F. ) ; +#4803 = DIRECTION ( 'NONE', ( -8.352372291740183800E-015, 3.212450881438532200E-016, 1.000000000000000000 ) ) ; +#4804 = ORIENTED_EDGE ( 'NONE', *, *, #2286, .F. ) ; +#4805 = FACE_OUTER_BOUND ( 'NONE', #876, .T. ) ; +#4806 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 2.100000000000236300, -4.163336342344337700E-014 ) ) ; +#4807 = CARTESIAN_POINT ( 'NONE', ( -1.825000000000004200, 0.09000000000023535000, -6.000000000000007100 ) ) ; +#4808 = ORIENTED_EDGE ( 'NONE', *, *, #4469, .F. ) ; +#4809 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000229900, 4.705000000000228300, -2.715000000000077100 ) ) ; +#4810 = DIRECTION ( 'NONE', ( -5.877535321837361700E-015, 0.7071067811864988300, -0.7071067811865963100 ) ) ; +#4811 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.04361938736533603500, 0.9990482215818578000 ) ) ; +#4812 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000002196500, 4.200000000000232900, -0.2300000000000408100 ) ) ; +#4813 = DIRECTION ( 'NONE', ( 5.374889246193937200E-017, 1.000000000000000000, -1.001794390543951200E-014 ) ) ; +#4814 = EDGE_LOOP ( 'NONE', ( #685, #720, #2744, #2424 ) ) ; +#4815 = EDGE_LOOP ( 'NONE', ( #1400, #4802, #4518, #2038 ) ) ; +#4816 = ORIENTED_EDGE ( 'NONE', *, *, #3157, .T. ) ; +#4817 = ADVANCED_FACE ( 'NONE', ( #2764 ), #4777, .F. ) ; +#4818 = EDGE_CURVE ( 'NONE', #4135, #4967, #3763, .T. ) ; +#4819 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.047445008332814600E-014 ) ) ; +#4820 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 1.569924745759010400E-013, -7.599999999999971200 ) ) ; +#4821 = LINE ( 'NONE', #4363, #402 ) ; +#4822 = EDGE_LOOP ( 'NONE', ( #2284, #4690, #2271, #1787 ) ) ; +#4823 = DIRECTION ( 'NONE', ( 7.409566345325542500E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4824 = ORIENTED_EDGE ( 'NONE', *, *, #1602, .F. ) ; +#4825 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000246700, 4.355000000000233100, -0.07500000000005592500 ) ) ; +#4826 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, -1.047445008332814600E-014, -1.000000000000000000 ) ) ; +#4827 = VERTEX_POINT ( 'NONE', #401 ) ; +#4828 = PLANE ( 'NONE', #360 ) ; +#4829 = VERTEX_POINT ( 'NONE', #3152 ) ; +#4830 = EDGE_CURVE ( 'NONE', #3546, #4279, #547, .T. ) ; +#4831 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000252100, 1.710477983563044100, -0.08005065776185686700 ) ) ; +#4832 = VECTOR ( 'NONE', #2513, 1000.000000000000000 ) ; +#4833 = CIRCLE ( 'NONE', #205, 0.2500000000000000000 ) ; +#4834 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000239600, 3.350000000000227500, -1.350000000000045400 ) ) ; +#4835 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999751500, 3.350000000000233700, -1.040834085586084300E-014 ) ) ; +#4836 = LINE ( 'NONE', #328, #3372 ) ; +#4837 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000252500, 0.1000000000002270300, -2.576073848652038200E-014 ) ) ; +#4838 = VERTEX_POINT ( 'NONE', #3599 ) ; +#4839 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252400, 1.710477983563044100, -0.08005065776186022500 ) ) ; +#4840 = DIRECTION ( 'NONE', ( 7.395763429917407300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4841 = ADVANCED_FACE ( 'NONE', ( #2255 ), #3953, .T. ) ; +#4842 = ORIENTED_EDGE ( 'NONE', *, *, #5121, .F. ) ; +#4843 = LINE ( 'NONE', #2862, #724 ) ; +#4844 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000212100, 3.420000000000227700, -5.415000000000077300 ) ) ; +#4845 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999783600, 4.200000000000190200, -4.250000000000028400 ) ) ; +#4846 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000207700, 3.420000000000228200, -5.415000000000077300 ) ) ; +#4847 = EDGE_CURVE ( 'NONE', #1550, #1402, #4153, .T. ) ; +#4848 = LINE ( 'NONE', #2326, #5165 ) ; +#4849 = LINE ( 'NONE', #14, #3515 ) ; +#4850 = DIRECTION ( 'NONE', ( 8.374527125405327500E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4851 = CARTESIAN_POINT ( 'NONE', ( 1.142820323027737200, -0.01754293278778022700, -8.586914183790412400 ) ) ; +#4852 = DIRECTION ( 'NONE', ( -2.639228045337950800E-016, -0.9990482215818578000, 0.04361938736533712400 ) ) ; +#4853 = LINE ( 'NONE', #981, #4105 ) ; +#4854 = EDGE_LOOP ( 'NONE', ( #2731, #3301, #1848, #2860, #5142, #2839, #2539, #3902 ) ) ; +#4855 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000215600, 2.225000000000186200, -4.850000000000043200 ) ) ; +#4856 = VERTEX_POINT ( 'NONE', #385 ) ; +#4857 = EDGE_CURVE ( 'NONE', #2599, #819, #4652, .T. ) ; +#4858 = AXIS2_PLACEMENT_3D ( 'NONE', #4220, #664, #2999 ) ; +#4859 = LINE ( 'NONE', #411, #2239 ) ; +#4860 = VERTEX_POINT ( 'NONE', #4016 ) ; +#4861 = LINE ( 'NONE', #606, #5116 ) ; +#4862 = EDGE_CURVE ( 'NONE', #2356, #2229, #4968, .T. ) ; +#4863 = CARTESIAN_POINT ( 'NONE', ( 0.8571796769726366400, 0.2821715336867768300, -8.600000000000010300 ) ) ; +#4864 = VECTOR ( 'NONE', #2824, 1000.000000000000000 ) ; +#4865 = ORIENTED_EDGE ( 'NONE', *, *, #3698, .F. ) ; +#4866 = DIRECTION ( 'NONE', ( -5.374889246202300400E-017, -1.000000000000000000, 4.501215578837055200E-031 ) ) ; +#4867 = PRODUCT_DEFINITION_CONTEXT ( 'detailed design', #1078, 'design' ) ; +#4868 = LINE ( 'NONE', #485, #4556 ) ; +#4869 = ADVANCED_FACE ( 'NONE', ( #492 ), #4365, .F. ) ; +#4870 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4871 = ORIENTED_EDGE ( 'NONE', *, *, #1632, .F. ) ; +#4872 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000251100, -0.09999999999979573800, -0.2000000000000242700 ) ) ; +#4873 = AXIS2_PLACEMENT_3D ( 'NONE', #3760, #2125, #1783 ) ; +#4874 = ORIENTED_EDGE ( 'NONE', *, *, #2286, .T. ) ; +#4875 = ORIENTED_EDGE ( 'NONE', *, *, #4960, .F. ) ; +#4876 = ORIENTED_EDGE ( 'NONE', *, *, #1818, .T. ) ; +#4877 = MANIFOLD_SOLID_BREP ( 'NONE', #1616 ) ; +#4878 = EDGE_CURVE ( 'NONE', #3181, #5009, #4030, .T. ) ; +#4879 = ORIENTED_EDGE ( 'NONE', *, *, #4347, .T. ) ; +#4880 = ORIENTED_EDGE ( 'NONE', *, *, #2312, .F. ) ; +#4881 = VERTEX_POINT ( 'NONE', #4513 ) ; +#4882 = PLANE ( 'NONE', #4273 ) ; +#4883 = PLANE ( 'NONE', #5145 ) ; +#4884 = LINE ( 'NONE', #1851, #273 ) ; +#4885 = CARTESIAN_POINT ( 'NONE', ( -3.050000000000252100, 1.710477983563044100, -0.08005065776185686700 ) ) ; +#4886 = EDGE_LOOP ( 'NONE', ( #4140, #1680, #4466, #1420 ) ) ; +#4887 = VERTEX_POINT ( 'NONE', #1968 ) ; +#4888 = ORIENTED_EDGE ( 'NONE', *, *, #3592, .T. ) ; +#4889 = EDGE_CURVE ( 'NONE', #2342, #5021, #3509, .T. ) ; +#4890 = EDGE_CURVE ( 'NONE', #3004, #1552, #1650, .T. ) ; +#4891 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246202299800E-017, 8.365839057930752800E-015 ) ) ; +#4892 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000205800, 2.850000000000227500, -6.000000000000047100 ) ) ; +#4893 = VECTOR ( 'NONE', #2661, 1000.000000000000000 ) ; +#4894 = ORIENTED_EDGE ( 'NONE', *, *, #2568, .F. ) ; +#4895 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000201400, 0.5696839565364602000, -6.600000000000043200 ) ) ; +#4896 = EDGE_CURVE ( 'NONE', #3343, #3808, #428, .T. ) ; +#4897 = LINE ( 'NONE', #8, #3254 ) ; +#4898 = AXIS2_PLACEMENT_3D ( 'NONE', #1695, #4907, #4029 ) ; +#4899 = DIRECTION ( 'NONE', ( 5.417580331251687100E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4900 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 8.352372291740183800E-015 ) ) ; +#4901 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000228400, 2.100000000000236300, -2.900000000000023900 ) ) ; +#4902 = ORIENTED_EDGE ( 'NONE', *, *, #1281, .F. ) ; +#4903 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999806100, 2.348635717332176500E-013, -1.734723475976807100E-014 ) ) ; +#4904 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.047445008332814600E-014, 1.000000000000000000 ) ) ; +#4905 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#4906 = ORIENTED_EDGE ( 'NONE', *, *, #936, .F. ) ; +#4907 = DIRECTION ( 'NONE', ( 1.508901352800680500E-015, 0.9797983948295244700, 0.1999877633493794500 ) ) ; +#4908 = VERTEX_POINT ( 'NONE', #2487 ) ; +#4909 = PLANE ( 'NONE', #3394 ) ; +#4910 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.110525862004698600E-014 ) ) ; +#4911 = ORIENTED_EDGE ( 'NONE', *, *, #4924, .T. ) ; +#4912 = FACE_OUTER_BOUND ( 'NONE', #1190, .T. ) ; +#4913 = LINE ( 'NONE', #3932, #3137 ) ; +#4914 = LINE ( 'NONE', #4197, #5106 ) ; +#4915 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000236500, 4.355000000000233100, -2.000000000000070600 ) ) ; +#4916 = CARTESIAN_POINT ( 'NONE', ( -3.750000000000207400, 3.420000000000228200, -5.415000000000082600 ) ) ; +#4917 = EDGE_CURVE ( 'NONE', #3359, #3677, #1521, .T. ) ; +#4918 = EDGE_LOOP ( 'NONE', ( #2058, #3545, #2106, #1577 ) ) ; +#4919 = ADVANCED_FACE ( 'NONE', ( #794 ), #2525, .F. ) ; +#4920 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#4921 = CARTESIAN_POINT ( 'NONE', ( -0.7499999999997792900, 3.350000000000175900, -4.250000000000028400 ) ) ; +#4922 = FACE_OUTER_BOUND ( 'NONE', #3928, .T. ) ; +#4923 = ORIENTED_EDGE ( 'NONE', *, *, #4084, .F. ) ; +#4924 = EDGE_CURVE ( 'NONE', #132, #3294, #1759, .T. ) ; +#4925 = ORIENTED_EDGE ( 'NONE', *, *, #212, .F. ) ; +#4926 = LINE ( 'NONE', #104, #1780 ) ; +#4927 = CYLINDRICAL_SURFACE ( 'NONE', #997, 0.5999999999999963100 ) ; +#4928 = ORIENTED_EDGE ( 'NONE', *, *, #1399, .T. ) ; +#4929 = EDGE_LOOP ( 'NONE', ( #2261, #983, #182, #1731, #582, #3999, #612, #3479, #92, #902, #2678, #3830, #4622, #4618 ) ) ; +#4930 = VECTOR ( 'NONE', #1224, 1000.000000000000000 ) ; +#4931 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000238300, 3.100000000000216800, -1.650000000000059200 ) ) ; +#4932 = EDGE_CURVE ( 'NONE', #934, #2409, #3892, .T. ) ; +#4933 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999757300, 2.263814136149732800E-013, -0.7999999999999778400 ) ) ; +#4934 = DIRECTION ( 'NONE', ( -5.877535321837823200E-015, 0.7071067811864437700, -0.7071067811866513800 ) ) ; +#4935 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246193700600E-017, -5.552201356632754200E-031 ) ) ; +#4936 = ORIENTED_EDGE ( 'NONE', *, *, #3437, .F. ) ; +#4937 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000228500, 0.1000000000002044700, -2.900000000000020800 ) ) ; +#4938 = VERTEX_POINT ( 'NONE', #3699 ) ; +#4939 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000202100, 2.750000000000227400, -6.500000000000048000 ) ) ; +#4940 = ORIENTED_EDGE ( 'NONE', *, *, #2181, .T. ) ; +#4941 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.5000000000000137700, -0.8660254037844306000 ) ) ; +#4942 = VECTOR ( 'NONE', #136, 1000.000000000000100 ) ; +#4943 = VERTEX_POINT ( 'NONE', #137 ) ; +#4944 = VERTEX_POINT ( 'NONE', #4493 ) ; +#4945 = ADVANCED_FACE ( 'NONE', ( #3067 ), #520, .T. ) ; +#4946 = EDGE_CURVE ( 'NONE', #337, #17, #4843, .T. ) ; +#4947 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.024619699438383000E-014, 1.000000000000000000 ) ) ; +#4948 = DIRECTION ( 'NONE', ( 7.178166107490281200E-015, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4949 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999764400, 3.100000000000217200, -1.650000000000008100 ) ) ; +#4950 = VECTOR ( 'NONE', #225, 1000.000000000000000 ) ; +#4951 = ORIENTED_EDGE ( 'NONE', *, *, #2881, .F. ) ; +#4952 = ORIENTED_EDGE ( 'NONE', *, *, #1017, .F. ) ; +#4953 = ORIENTED_EDGE ( 'NONE', *, *, #2079, .T. ) ; +#4954 = LINE ( 'NONE', #4863, #1332 ) ; +#4955 = LINE ( 'NONE', #814, #1389 ) ; +#4956 = EDGE_CURVE ( 'NONE', #3044, #912, #4597, .T. ) ; +#4957 = EDGE_CURVE ( 'NONE', #1645, #17, #2888, .T. ) ; +#4958 = AXIS2_PLACEMENT_3D ( 'NONE', #1189, #4826, #3161 ) ; +#4959 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000202100, 0.5696839565364600900, -6.500000000000047100 ) ) ; +#4960 = EDGE_CURVE ( 'NONE', #3464, #3024, #51, .T. ) ; +#4961 = AXIS2_PLACEMENT_3D ( 'NONE', #2404, #4786, #2800 ) ; +#4962 = ORIENTED_EDGE ( 'NONE', *, *, #1463, .F. ) ; +#4963 = CARTESIAN_POINT ( 'NONE', ( 3.950000000000252000, 4.430000000000232400, -7.552851220967920100E-014 ) ) ; +#4964 = DIRECTION ( 'NONE', ( -0.2515875261947533900, -0.2754668179662824700, -0.9278048010560924200 ) ) ; +#4965 = DIRECTION ( 'NONE', ( -7.329817504127328300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4966 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000238300, 2.550000000000216100, -1.900000000000053400 ) ) ; +#4967 = VERTEX_POINT ( 'NONE', #4103 ) ; +#4968 = LINE ( 'NONE', #3543, #4482 ) ; +#4969 = AXIS2_PLACEMENT_3D ( 'NONE', #1748, #1421, #2939 ) ; +#4970 = ADVANCED_FACE ( 'NONE', ( #3580 ), #3277, .F. ) ; +#4971 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999756800, 4.705000000000227400, -0.8000000000000298000 ) ) ; +#4972 = VECTOR ( 'NONE', #2282, 1000.000000000000000 ) ; +#4973 = VECTOR ( 'NONE', #308, 1000.000000000000000 ) ; +#4974 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000189800, 0.3995241107910975100, -8.204742650103805000 ) ) ; +#4975 = LINE ( 'NONE', #407, #4037 ) ; +#4976 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.110525862004698600E-014 ) ) ; +#4977 = EDGE_CURVE ( 'NONE', #4827, #1675, #4780, .T. ) ; +#4978 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1586 ), #345 ) ; +#4979 = DIRECTION ( 'NONE', ( 3.594270536425345300E-015, -0.8660254037844307100, 0.5000000000000138800 ) ) ; +#4980 = LINE ( 'NONE', #2148, #858 ) ; +#4981 = EDGE_LOOP ( 'NONE', ( #2870, #1777, #2550, #2810 ) ) ; +#4982 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#4983 = PLANE ( 'NONE', #3997 ) ; +#4984 = FACE_OUTER_BOUND ( 'NONE', #130, .T. ) ; +#4985 = ORIENTED_EDGE ( 'NONE', *, *, #1436, .T. ) ; +#4986 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000218700, 2.850000000000227500, -4.250000000000027500 ) ) ; +#4987 = EDGE_CURVE ( 'NONE', #1820, #3299, #4542, .T. ) ; +#4988 = VECTOR ( 'NONE', #3565, 1000.000000000000000 ) ; +#4989 = FACE_OUTER_BOUND ( 'NONE', #3624, .T. ) ; +#4990 = LINE ( 'NONE', #5084, #5117 ) ; +#4991 = ORIENTED_EDGE ( 'NONE', *, *, #3730, .F. ) ; +#4992 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4993 = DIRECTION ( 'NONE', ( 5.374889246201249000E-017, 1.000000000000000000, -3.913799179032202200E-031 ) ) ; +#4994 = ORIENTED_EDGE ( 'NONE', *, *, #4722, .F. ) ; +#4995 = LINE ( 'NONE', #4750, #2351 ) ; +#4996 = EDGE_CURVE ( 'NONE', #1467, #971, #4414, .T. ) ; +#4997 = ORIENTED_EDGE ( 'NONE', *, *, #2464, .F. ) ; +#4998 = ORIENTED_EDGE ( 'NONE', *, *, #3158, .T. ) ; +#4999 = AXIS2_PLACEMENT_3D ( 'NONE', #4097, #4505, #1703 ) ; +#5000 = ADVANCED_FACE ( 'NONE', ( #4912 ), #4340, .F. ) ; +#5001 = VERTEX_POINT ( 'NONE', #3361 ) ; +#5002 = ORIENTED_EDGE ( 'NONE', *, *, #2510, .F. ) ; +#5003 = ORIENTED_EDGE ( 'NONE', *, *, #1496, .T. ) ; +#5004 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999750600, 5.500000000000172300, -3.122502256758252800E-014 ) ) ; +#5005 = VERTEX_POINT ( 'NONE', #3376 ) ; +#5006 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.067853519814894600E-014, -1.000000000000000000 ) ) ; +#5007 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#5008 = FACE_OUTER_BOUND ( 'NONE', #4216, .T. ) ; +#5009 = VERTEX_POINT ( 'NONE', #1279 ) ; +#5010 = ORIENTED_EDGE ( 'NONE', *, *, #3061, .T. ) ; +#5011 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000242700, 2.950000000000227100, -0.9500000000000452500 ) ) ; +#5012 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5013 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002047300, 3.700000000000172900, -6.000000000000050600 ) ) ; +#5014 = AXIS2_PLACEMENT_3D ( 'NONE', #433, #2352, #1557 ) ; +#5015 = AXIS2_PLACEMENT_3D ( 'NONE', #3297, #901, #1646 ) ; +#5016 = LINE ( 'NONE', #3252, #4133 ) ; +#5017 = VERTEX_POINT ( 'NONE', #4971 ) ; +#5018 = ORIENTED_EDGE ( 'NONE', *, *, #514, .T. ) ; +#5019 = ORIENTED_EDGE ( 'NONE', *, *, #1443, .F. ) ; +#5020 = VECTOR ( 'NONE', #2056, 1000.000000000000000 ) ; +#5021 = VERTEX_POINT ( 'NONE', #1752 ) ; +#5022 = EDGE_CURVE ( 'NONE', #5005, #3268, #662, .T. ) ; +#5023 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -7.282397625204285800E-017, 1.000000000000000000 ) ) ; +#5024 = FACE_OUTER_BOUND ( 'NONE', #3243, .T. ) ; +#5025 = DIRECTION ( 'NONE', ( 5.374889246193937200E-017, 1.000000000000000000, -1.001794390543951200E-014 ) ) ; +#5026 = EDGE_CURVE ( 'NONE', #1832, #3423, #234, .T. ) ; +#5027 = FILL_AREA_STYLE_COLOUR ( '', #3197 ) ; +#5028 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#5029 = PLANE ( 'NONE', #2226 ) ; +#5030 = ORIENTED_EDGE ( 'NONE', *, *, #2796, .F. ) ; +#5031 = AXIS2_PLACEMENT_3D ( 'NONE', #4377, #751, #1149 ) ; +#5032 = VECTOR ( 'NONE', #169, 1000.000000000000000 ) ; +#5033 = ORIENTED_EDGE ( 'NONE', *, *, #671, .T. ) ; +#5034 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #2912 ) ; +#5035 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 7.337680618045060300E-015 ) ) ; +#5036 = ORIENTED_EDGE ( 'NONE', *, *, #3017, .F. ) ; +#5037 = VECTOR ( 'NONE', #1914, 1000.000000000000000 ) ; +#5038 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000252900, 2.100000000000236300, -4.163336342344337700E-014 ) ) ; +#5039 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999795000, 3.700000000000171200, -6.000000000000017800 ) ) ; +#5040 = LINE ( 'NONE', #353, #1472 ) ; +#5041 = FACE_OUTER_BOUND ( 'NONE', #2799, .T. ) ; +#5042 = VECTOR ( 'NONE', #4174, 1000.000000000000000 ) ; +#5043 = ORIENTED_EDGE ( 'NONE', *, *, #4045, .T. ) ; +#5044 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000245800, 2.349211679515083700E-013, -2.081668171172168500E-014 ) ) ; +#5045 = FILL_AREA_STYLE ('',( #2632 ) ) ; +#5046 = FACE_OUTER_BOUND ( 'NONE', #1628, .T. ) ; +#5047 = EDGE_LOOP ( 'NONE', ( #3995, #1322, #4091, #4253 ) ) ; +#5048 = EDGE_CURVE ( 'NONE', #3261, #5009, #423, .T. ) ; +#5049 = LINE ( 'NONE', #3913, #3718 ) ; +#5050 = VERTEX_POINT ( 'NONE', #2578 ) ; +#5051 = ADVANCED_FACE ( 'NONE', ( #1581 ), #2959, .F. ) ; +#5052 = ORIENTED_EDGE ( 'NONE', *, *, #4078, .T. ) ; +#5053 = FACE_OUTER_BOUND ( 'NONE', #2956, .T. ) ; +#5054 = CARTESIAN_POINT ( 'NONE', ( -2.449999999999749700, 0.4000000000002361100, 1.387778780781445700E-014 ) ) ; +#5055 = DIRECTION ( 'NONE', ( -7.228014483236740900E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5056 = LINE ( 'NONE', #2157, #1721 ) ; +#5057 = EDGE_CURVE ( 'NONE', #1428, #846, #2192, .T. ) ; +#5058 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000241800, -0.09999999999979566900, -1.270808264217950100 ) ) ; +#5059 = EDGE_CURVE ( 'NONE', #2127, #476, #1940, .T. ) ; +#5060 = ORIENTED_EDGE ( 'NONE', *, *, #1554, .F. ) ; +#5061 = FACE_OUTER_BOUND ( 'NONE', #2620, .T. ) ; +#5062 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249600E-017, 0.0000000000000000000 ) ) ; +#5063 = EDGE_LOOP ( 'NONE', ( #396, #4304, #4055, #3655, #2584, #4289 ) ) ; +#5064 = DIRECTION ( 'NONE', ( 5.374889246201249600E-017, -1.000000000000000000, 3.858184781859579000E-031 ) ) ; +#5065 = EDGE_CURVE ( 'NONE', #2545, #1008, #540, .T. ) ; +#5066 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.188166764367676100E-016, 0.0000000000000000000 ) ) ; +#5067 = DIRECTION ( 'NONE', ( 0.2515875261947534400, -0.1935550669973274100, 0.9482827387983313600 ) ) ; +#5068 = ORIENTED_EDGE ( 'NONE', *, *, #3592, .F. ) ; +#5069 = ORIENTED_EDGE ( 'NONE', *, *, #2051, .F. ) ; +#5070 = PLANE ( 'NONE', #4302 ) ; +#5071 = LINE ( 'NONE', #1493, #1000 ) ; +#5072 = ORIENTED_EDGE ( 'NONE', *, *, #3497, .T. ) ; +#5073 = ORIENTED_EDGE ( 'NONE', *, *, #4532, .F. ) ; +#5074 = ORIENTED_EDGE ( 'NONE', *, *, #552, .F. ) ; +#5075 = AXIS2_PLACEMENT_3D ( 'NONE', #4743, #394, #3910 ) ; +#5076 = SURFACE_STYLE_USAGE ( .BOTH. , #2245 ) ; +#5077 = LINE ( 'NONE', #3666, #2624 ) ; +#5078 = EDGE_LOOP ( 'NONE', ( #4459, #5068, #3968, #1285 ) ) ; +#5079 = EDGE_LOOP ( 'NONE', ( #1597, #2076, #3112, #2390, #1803, #4991, #4936, #1440, #2509, #679, #3415 ) ) ; +#5080 = ADVANCED_FACE ( 'NONE', ( #3886 ), #1355, .F. ) ; +#5081 = ORIENTED_EDGE ( 'NONE', *, *, #2145, .T. ) ; +#5082 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, -1.435412096445492200E-030, 1.000000000000000000 ) ) ; +#5083 = SURFACE_SIDE_STYLE ('',( #955 ) ) ; +#5084 = CARTESIAN_POINT ( 'NONE', ( 3.150000000000196600, 5.500000000000155400, -7.600000000000080500 ) ) ; +#5085 = AXIS2_PLACEMENT_3D ( 'NONE', #4043, #2482, #111 ) ; +#5086 = VECTOR ( 'NONE', #4899, 1000.000000000000000 ) ; +#5087 = LINE ( 'NONE', #2801, #3253 ) ; +#5088 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000252400, 1.298089913141610200, -0.08005065776186022500 ) ) ; +#5089 = DIRECTION ( 'NONE', ( -7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5090 = EDGE_CURVE ( 'NONE', #4309, #1689, #1340, .T. ) ; +#5091 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000228400, 2.100000000000236300, -2.900000000000023900 ) ) ; +#5092 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5093 = EDGE_CURVE ( 'NONE', #4580, #1785, #292, .T. ) ; +#5094 = DIRECTION ( 'NONE', ( 1.000000000000000000, 5.374889246201249000E-017, 7.281636885445248400E-015 ) ) ; +#5095 = VERTEX_POINT ( 'NONE', #4576 ) ; +#5096 = DIRECTION ( 'NONE', ( 7.228014483236687300E-015, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5097 = ORIENTED_EDGE ( 'NONE', *, *, #4520, .F. ) ; +#5098 = VECTOR ( 'NONE', #3994, 1000.000000000000000 ) ; +#5099 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201249000E-017, -7.281636885445248400E-015 ) ) ; +#5100 = LINE ( 'NONE', #3126, #3708 ) ; +#5101 = LINE ( 'NONE', #1375, #2260 ) ; +#5102 = VECTOR ( 'NONE', #4330, 1000.000000000000000 ) ; +#5103 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2660, 'distance_accuracy_value', 'NONE'); +#5104 = PLANE ( 'NONE', #660 ) ; +#5105 = PRESENTATION_STYLE_ASSIGNMENT (( #5076 ) ) ; +#5106 = VECTOR ( 'NONE', #3766, 1000.000000000000000 ) ; +#5107 = ORIENTED_EDGE ( 'NONE', *, *, #3706, .F. ) ; +#5108 = ORIENTED_EDGE ( 'NONE', *, *, #3613, .F. ) ; +#5109 = CARTESIAN_POINT ( 'NONE', ( -0.7500000000002015100, 0.5696839565364602000, -6.600000000000039600 ) ) ; +#5110 = ADVANCED_FACE ( 'NONE', ( #4537 ), #2518, .F. ) ; +#5111 = AXIS2_PLACEMENT_3D ( 'NONE', #5181, #2339, #4733 ) ; +#5112 = VECTOR ( 'NONE', #4062, 1000.000000000000000 ) ; +#5113 = EDGE_LOOP ( 'NONE', ( #5069, #293, #4460, #3719 ) ) ; +#5114 = LINE ( 'NONE', #1592, #2206 ) ; +#5115 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.606225440719261700E-016, 1.000000000000000000 ) ) ; +#5116 = VECTOR ( 'NONE', #198, 1000.000000000000000 ) ; +#5117 = VECTOR ( 'NONE', #2202, 1000.000000000000000 ) ; +#5118 = VERTEX_POINT ( 'NONE', #548 ) ; +#5119 = DIRECTION ( 'NONE', ( 1.000000000000000000, -5.374889246201231700E-017, -7.281636885445248400E-015 ) ) ; +#5120 = CARTESIAN_POINT ( 'NONE', ( -3.450000000000245800, 0.4000000000002279000, -0.7999999999999778400 ) ) ; +#5121 = EDGE_CURVE ( 'NONE', #4408, #4908, #2522, .T. ) ; +#5122 = VECTOR ( 'NONE', #2778, 1000.000000000000000 ) ; +#5123 = LINE ( 'NONE', #4709, #3399 ) ; +#5124 = VERTEX_POINT ( 'NONE', #567 ) ; +#5125 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000215600, 0.7000000000001965800, -4.850000000000019200 ) ) ; +#5126 = EDGE_CURVE ( 'NONE', #2100, #3820, #905, .T. ) ; +#5127 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000242700, 3.250000000000227400, -0.9500000000000452500 ) ) ; +#5128 = ORIENTED_EDGE ( 'NONE', *, *, #1912, .F. ) ; +#5129 = ORIENTED_EDGE ( 'NONE', *, *, #2695, .F. ) ; +#5130 = ORIENTED_EDGE ( 'NONE', *, *, #4528, .F. ) ; +#5131 = ADVANCED_FACE ( 'NONE', ( #5162 ), #595, .F. ) ; +#5132 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999749800, 5.500000000000234500, -4.163336342344337000E-014 ) ) ; +#5133 = VECTOR ( 'NONE', #2621, 1000.000000000000000 ) ; +#5134 = ORIENTED_EDGE ( 'NONE', *, *, #1691, .F. ) ; +#5135 = ORIENTED_EDGE ( 'NONE', *, *, #1565, .T. ) ; +#5136 = EDGE_CURVE ( 'NONE', #3677, #2285, #4277, .T. ) ; +#5137 = ADVANCED_FACE ( 'NONE', ( #3703 ), #4237, .T. ) ; +#5138 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000237400, 3.100000000000216800, -1.650000000000053900 ) ) ; +#5139 = VECTOR ( 'NONE', #5119, 1000.000000000000000 ) ; +#5140 = ORIENTED_EDGE ( 'NONE', *, *, #3908, .T. ) ; +#5141 = ORIENTED_EDGE ( 'NONE', *, *, #248, .T. ) ; +#5142 = ORIENTED_EDGE ( 'NONE', *, *, #2565, .T. ) ; +#5143 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000205800, 2.850000000000227500, -6.000000000000047100 ) ) ; +#5144 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.188166764367676100E-016, -0.0000000000000000000 ) ) ; +#5145 = AXIS2_PLACEMENT_3D ( 'NONE', #4489, #2484, #3684 ) ; +#5146 = LINE ( 'NONE', #448, #1860 ) ; +#5147 = ORIENTED_EDGE ( 'NONE', *, *, #3947, .F. ) ; +#5148 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000239600, 3.350000000000227500, -1.350000000000045400 ) ) ; +#5149 = LINE ( 'NONE', #2296, #653 ) ; +#5150 = CARTESIAN_POINT ( 'NONE', ( -1.299999999999763800, 5.500000000000204300, -2.000000000000053700 ) ) ; +#5151 = EDGE_CURVE ( 'NONE', #4860, #1008, #3447, .T. ) ; +#5152 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000242700, 2.257084401334521500E-013, -1.170808264217958000 ) ) ; +#5153 = CARTESIAN_POINT ( 'NONE', ( 2.450000000000240400, 0.4000000000002274500, -2.428612866367529900E-014 ) ) ; +#5154 = CARTESIAN_POINT ( 'NONE', ( 3.450000000000241800, -0.09999999999979566900, -1.270808264217950100 ) ) ; +#5155 = CARTESIAN_POINT ( 'NONE', ( -3.949999999999795000, 5.500000000000171400, -6.000000000000034600 ) ) ; +#5156 = EDGE_LOOP ( 'NONE', ( #233, #319, #670, #4663 ) ) ; +#5157 = EDGE_CURVE ( 'NONE', #3520, #3834, #3264, .T. ) ; +#5158 = EDGE_CURVE ( 'NONE', #1079, #3973, #4025, .T. ) ; +#5159 = ORIENTED_EDGE ( 'NONE', *, *, #1845, .T. ) ; +#5160 = PLANE ( 'NONE', #2851 ) ; +#5161 = ORIENTED_EDGE ( 'NONE', *, *, #2349, .T. ) ; +#5162 = FACE_OUTER_BOUND ( 'NONE', #2048, .T. ) ; +#5163 = PLANE ( 'NONE', #4233 ) ; +#5164 = ADVANCED_FACE ( 'NONE', ( #4094 ), #3039, .F. ) ; +#5165 = VECTOR ( 'NONE', #2735, 1000.000000000000000 ) ; +#5166 = ORIENTED_EDGE ( 'NONE', *, *, #4917, .F. ) ; +#5167 = ORIENTED_EDGE ( 'NONE', *, *, #1379, .T. ) ; +#5168 = EDGE_CURVE ( 'NONE', #1188, #3464, #2062, .T. ) ; +#5169 = VECTOR ( 'NONE', #2758, 1000.000000000000000 ) ; +#5170 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000250300, 0.7000000000002343200, -2.428612866367529900E-014 ) ) ; +#5171 = DIRECTION ( 'NONE', ( 7.281636885445248400E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5172 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999750700, 0.7000000000001842500, -4.850000000000028100 ) ) ; +#5173 = LINE ( 'NONE', #3511, #2645 ) ; +#5174 = LINE ( 'NONE', #3448, #4604 ) ; +#5175 = VERTEX_POINT ( 'NONE', #4636 ) ; +#5176 = DIRECTION ( 'NONE', ( 0.2515875261947397900, 0.1935550669973273600, -0.9482827387983350200 ) ) ; +#5177 = MANIFOLD_SOLID_BREP ( 'Mirror2', #1612 ) ; +#5178 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999763600, 0.07689437438255455900, -1.999999999999991300 ) ) ; +#5179 = VECTOR ( 'NONE', #486, 1000.000000000000000 ) ; +#5180 = ORIENTED_EDGE ( 'NONE', *, *, #1157, .T. ) ; +#5181 = CARTESIAN_POINT ( 'NONE', ( -0.8571796769726364200, 0.2821715336867768300, -8.600000000000010300 ) ) ; +#5182 = LINE ( 'NONE', #2372, #3530 ) ; +#5183 = ORIENTED_EDGE ( 'NONE', *, *, #2585, .T. ) ; +#5184 = CARTESIAN_POINT ( 'NONE', ( 0.7500000000002015100, 0.5696839565364602000, -6.600000000000039600 ) ) ; +ENDSEC; +END-ISO-10303-21; diff --git a/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/how-to-import.htm b/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/how-to-import.htm new file mode 100644 index 0000000..19e484d --- /dev/null +++ b/Hardware/FabReader2/Library/S2B-PH-SM4-TB_LF__SN_/how-to-import.htm @@ -0,0 +1 @@ + Page Redirection If you are not redirected automatically, follow this link to the import guide. \ No newline at end of file diff --git a/Hardware/FabReader2/Library/ST25R3911B-AQFT/License.txt b/Hardware/FabReader2/Library/ST25R3911B-AQFT/License.txt new file mode 100644 index 0000000..9cb6384 --- /dev/null +++ b/Hardware/FabReader2/Library/ST25R3911B-AQFT/License.txt @@ -0,0 +1,24 @@ +BY ACCESSING OR USING THESE SYMBOLS & FOOTPRINTS ("MODELS"), YOU ARE ACKNOWLEDGING THAT YOU HAVE READ, FULLY UNDERSTAND AND AGREE TO THESE TERMS AND CONDITIONS (the "Agreement"), WHICH CONSTITUTE A BINDING AGREEMENT BETWEEN YOU AND SNAPEDA, INC., ENTERED INTO ON THE DATE OF SUCH OCCURRENCE (the "Effective Date"). IF YOU ARE ACCESSING OR USING THESE FILES ON BEHALF OF AN ENTITY, YOU REPRESENT THAT YOU HAVE THE RIGHT, AUTHORITY, AND CAPACITY TO BIND SUCH ENTITY TO THIS AGREEMENT AND HEREBY DO SO. IF YOU DO NOT AGREE WITH ANY OF THE TERMS OR CONDITIONS OF THIS AGREEMENT, YOU MUST NOT USE ANY PART OF THESE MODELS. + +1. Design License + +You and your sub-licensees are hereby licensed to design, manufacture, use and distribute, circuit board designs and circuit boards formed by combining Models provided by SnapEDA with other circuit elements of your choosing. You may then convey such combinations under licensing terms of your choice.  + +Individual Models remain the intellectual property of SnapEDA, Inc. You shall not (and shall not permit or encourage any third party to) to do any of the following : + +(a) sell, assign, lease, lend, rent, issue, sublicense, make available, or otherwise distribute to any third party, or publicly perform, display or communicate, the Models (for example, by uploading Models to another website or software application);
 +(b) remove, alter, or conceal, any copyright, trademark, or other proprietary rights notice or legend displayed or contained in the individual Models. + +For further clarity, once integrated into a schematic design or PCB layout, Models may be modified freely for the purpose of designing a circuit board.  + + +2. Limitation of Liability + +IN NO EVENT WILL SNAPEDA OR OUR SUBSIDIARIES, AGENTS, SUCCESSORS, THIRD PARTY PROVIDERS, AND/OR ANY OF THE FOREGOING ENTITIES' RESPECTIVE DIRECTORS, OFFICERS, EMPLOYEES, AGENTS, REPRESENTATIVES, CUSTOMERS, SUPPLIERS, OR LICENSORS BE RESPONSIBLE OR LIABLE UNDER, OR OTHERWISE IN CONNECTION WITH THIS AGREEMENT, FOR: + +(a) ANY CONSEQUENTIAL, INDIRECT, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES; +(b) ANY LOSS OF PROFITS, LOSS OF BUSINESS, LOSS OF REVENUE, OR LOSS OF ANTICIPATED SAVINGS; +(c) ANY LOSS OF, OR DAMAGE TO, DATA, REPUTATION, OR GOODWILL; AND/OR +(d) THE COST OF PROCURING ANY SUBSTITUTE GOODS OR SERVICES. + +THE COMBINED AGGREGATE LIABILITY OF SNAPEDA AND ALL SNAPEDA CONTENT AFFILIATES UNDER, OR OTHERWISE IN CONNECTION WITH, THIS AGREEMENT SHALL NOT EXCEED THE TOTAL AMOUNT OF FEES RECEIVED BY SNAPEDA FROM YOU IN THE PREVIOUS TWELVE (12) MONTHS. THE FOREGOING EXCLUSIONS AND LIMITATIONS SHALL APPLY: (a) EVEN IF SNAPEDA OR ANY SNAPEDA CONTENT AFFILIATE HAS BEEN ADVISED, OR SHOULD HAVE BEEN AWARE, OF THE POSSIBILITY OF LOSSES, DAMAGES, OR COSTS; (b) EVEN IF ANY REMEDY IN THIS AGREEMENT FAILS OF ITS ESSENTIAL PURPOSE; AND (c) REGARDLESS OF THE THEORY OR BASIS OF LIABILITY (INCLUDING WITHOUT LIMITATION BREACH OF CONTRACT, TORT, NEGLIGENCE, AND STRICT LIABILITY). \ No newline at end of file diff --git a/Hardware/FabReader2/Library/ST25R3911B-AQFT/QFN50P500X500X100-33N.kicad_mod b/Hardware/FabReader2/Library/ST25R3911B-AQFT/QFN50P500X500X100-33N.kicad_mod new file mode 100644 index 0000000..62b4b19 --- /dev/null +++ b/Hardware/FabReader2/Library/ST25R3911B-AQFT/QFN50P500X500X100-33N.kicad_mod @@ -0,0 +1,69 @@ + +(module QFN50P500X500X100-33N (layer F.Cu) (tedit 6269D679) + (descr "") + (fp_text reference REF** (at -0.165 -4.74 0) (layer F.SilkS) + (effects (font (size 1.0 1.0) (thickness 0.15))) + ) + (fp_text value QFN50P500X500X100-33N (at 9.995 4.74 0) (layer F.Fab) + (effects (font (size 1.0 1.0) (thickness 0.15))) + ) + (pad 9 smd roundrect (roundrect_rratio 0.03) (at -1.75 2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 10 smd roundrect (roundrect_rratio 0.03) (at -1.25 2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 11 smd roundrect (roundrect_rratio 0.03) (at -0.75 2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 12 smd roundrect (roundrect_rratio 0.03) (at -0.25 2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 13 smd roundrect (roundrect_rratio 0.03) (at 0.25 2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 14 smd roundrect (roundrect_rratio 0.03) (at 0.75 2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 15 smd roundrect (roundrect_rratio 0.03) (at 1.25 2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 16 smd roundrect (roundrect_rratio 0.03) (at 1.75 2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 25 smd roundrect (roundrect_rratio 0.03) (at 1.75 -2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 26 smd roundrect (roundrect_rratio 0.03) (at 1.25 -2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 27 smd roundrect (roundrect_rratio 0.03) (at 0.75 -2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 28 smd roundrect (roundrect_rratio 0.03) (at 0.25 -2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 29 smd roundrect (roundrect_rratio 0.03) (at -0.25 -2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 30 smd roundrect (roundrect_rratio 0.03) (at -0.75 -2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 31 smd roundrect (roundrect_rratio 0.03) (at -1.25 -2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 32 smd roundrect (roundrect_rratio 0.03) (at -1.75 -2.45 90.0) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 1 smd roundrect (roundrect_rratio 0.03) (at -2.45 -1.75) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 2 smd roundrect (roundrect_rratio 0.03) (at -2.45 -1.25) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 3 smd roundrect (roundrect_rratio 0.03) (at -2.45 -0.75) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 4 smd roundrect (roundrect_rratio 0.03) (at -2.45 -0.25) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 5 smd roundrect (roundrect_rratio 0.03) (at -2.45 0.25) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 6 smd roundrect (roundrect_rratio 0.03) (at -2.45 0.75) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 7 smd roundrect (roundrect_rratio 0.03) (at -2.45 1.25) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 8 smd roundrect (roundrect_rratio 0.03) (at -2.45 1.75) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 17 smd roundrect (roundrect_rratio 0.03) (at 2.45 1.75) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 18 smd roundrect (roundrect_rratio 0.03) (at 2.45 1.25) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 19 smd roundrect (roundrect_rratio 0.03) (at 2.45 0.75) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 20 smd roundrect (roundrect_rratio 0.03) (at 2.45 0.25) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 21 smd roundrect (roundrect_rratio 0.03) (at 2.45 -0.25) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 22 smd roundrect (roundrect_rratio 0.03) (at 2.45 -0.75) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 23 smd roundrect (roundrect_rratio 0.03) (at 2.45 -1.25) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 24 smd roundrect (roundrect_rratio 0.03) (at 2.45 -1.75) (size 0.81 0.26) (layers F.Cu F.Mask F.Paste)) + (pad 33 smd rect (at 0.0 0.0) (size 3.5 3.5) (layers F.Cu F.Mask)) + (fp_poly + (pts + (xy -1.11 -1.11) + (xy 1.11 -1.11) + (xy 1.11 1.11) + (xy -1.11 1.11) + ) (layer F.Paste) (width 0.01) + ) + (fp_circle (center -3.475 -1.75) (end -3.375 -1.75) (layer F.SilkS) (width 0.2)) + (fp_circle (center -3.475 -1.75) (end -3.375 -1.75) (layer F.Fab) (width 0.2)) + (fp_line (start 2.5 2.5) (end -2.5 2.5) (layer F.Fab) (width 0.127)) + (fp_line (start 2.5 -2.5) (end -2.5 -2.5) (layer F.Fab) (width 0.127)) + (fp_line (start 2.5 2.5) (end 2.5 -2.5) (layer F.Fab) (width 0.127)) + (fp_line (start -2.5 2.5) (end -2.5 -2.5) (layer F.Fab) (width 0.127)) + (fp_line (start 2.5 2.5) (end 2.2 2.5) (layer F.SilkS) (width 0.127)) + (fp_line (start 2.5 -2.5) (end 2.2 -2.5) (layer F.SilkS) (width 0.127)) + (fp_line (start -2.5 2.5) (end -2.2 2.5) (layer F.SilkS) (width 0.127)) + (fp_line (start -2.5 -2.5) (end -2.2 -2.5) (layer F.SilkS) (width 0.127)) + (fp_line (start 2.5 2.5) (end 2.5 2.2) (layer F.SilkS) (width 0.127)) + (fp_line (start 2.5 -2.5) (end 2.5 -2.2) (layer F.SilkS) (width 0.127)) + (fp_line (start -2.5 2.5) (end -2.5 2.2) (layer F.SilkS) (width 0.127)) + (fp_line (start -2.5 -2.5) (end -2.5 -2.2) (layer F.SilkS) (width 0.127)) + (fp_line (start -3.105 3.105) (end 3.105 3.105) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.105 -3.105) (end 3.105 -3.105) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.105 3.105) (end -3.105 -3.105) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.105 3.105) (end 3.105 -3.105) (layer F.CrtYd) (width 0.05)) +) \ No newline at end of file diff --git a/Hardware/FabReader2/Library/ST25R3911B-AQFT/ST25R3911B-AQFT.kicad_sym b/Hardware/FabReader2/Library/ST25R3911B-AQFT/ST25R3911B-AQFT.kicad_sym new file mode 100644 index 0000000..3775517 --- /dev/null +++ b/Hardware/FabReader2/Library/ST25R3911B-AQFT/ST25R3911B-AQFT.kicad_sym @@ -0,0 +1,268 @@ +(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor) + (symbol "ST25R3911B-AQFT" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) + (property "Reference" "U" (id 0) (at -15.24 31.242 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Value" "ST25R3911B-AQFT" (id 1) (at -15.24 -35.56 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Footprint" "QFN50P500X500X100-33N" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "Datasheet" "" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "E_MAX" "5.0" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "BODY_DIAMETER" "" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "B_MIN" "0.18" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "THERMAL_PAD" "" (id 7) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "E_MIN" "5.0" (id 8) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "BALL_COLUMNS" "" (id 9) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "BALL_ROWS" "" (id 10) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "L_MIN" "0.3" (id 11) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "PARTREV" "6" (id 12) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "B_MAX" "0.3" (id 13) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "MANUFACTURER" "ST Microelectronics" (id 14) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "DMAX" "" (id 15) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "EMAX" "" (id 16) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "D_MAX" "5.0" (id 17) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "PIN_COUNT_D" "8.0" (id 18) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "L_NOM" "0.4" (id 19) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "SNAPEDA_PACKAGE_ID" "" (id 20) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "E2_NOM" "3.5" (id 21) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "IPC" "" (id 22) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "JEDEC" "" (id 23) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "STANDARD" "IPC 7351B" (id 24) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "PINS" "" (id 25) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "D2_NOM" "3.5" (id 26) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "PIN_COLUMNS" "" (id 27) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "L_MAX" "0.5" (id 28) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "D_NOM" "5.0" (id 29) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "DMIN" "" (id 30) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "ENOM" "0.5" (id 31) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "PIN_COUNT_E" "8.0" (id 32) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "D_MIN" "5.0" (id 33) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "EMIN" "" (id 34) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "DNOM" "" (id 35) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "E_NOM" "5.0" (id 36) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "PACKAGE_TYPE" "" (id 37) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "A_MAX" "1.0" (id 38) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "VACANCIES" "" (id 39) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "B_NOM" "0.24" (id 40) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "ki_locked" "" (id 41) (at 0 0 0) + (effects (font (size 1.27 1.27))) + ) + (symbol "ST25R3911B-AQFT_0_0" + (rectangle (start -15.24 -33.02) (end 15.24 30.48) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type background)) + ) + (pin power_in line (at 20.32 27.94 180) (length 5.08) + (name "VDD_IO" (effects (font (size 1.016 1.016)))) + (number "1" (effects (font (size 1.016 1.016)))) + ) + (pin output line (at 20.32 20.32 180) (length 5.08) + (name "RFO1" (effects (font (size 1.016 1.016)))) + (number "10" (effects (font (size 1.016 1.016)))) + ) + (pin output line (at 20.32 17.78 180) (length 5.08) + (name "RFO2" (effects (font (size 1.016 1.016)))) + (number "11" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 20.32 -27.94 180) (length 5.08) + (name "VSN_RF" (effects (font (size 1.016 1.016)))) + (number "12" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 20.32 -2.54 180) (length 5.08) + (name "TRIM1_3" (effects (font (size 1.016 1.016)))) + (number "13" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 20.32 -5.08 180) (length 5.08) + (name "TRIM2_3" (effects (font (size 1.016 1.016)))) + (number "14" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 20.32 2.54 180) (length 5.08) + (name "TRIM1_2" (effects (font (size 1.016 1.016)))) + (number "15" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 20.32 0 180) (length 5.08) + (name "TRIM2_2" (effects (font (size 1.016 1.016)))) + (number "16" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 20.32 7.62 180) (length 5.08) + (name "TRIM1_1" (effects (font (size 1.016 1.016)))) + (number "17" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 20.32 5.08 180) (length 5.08) + (name "TRIM2_1" (effects (font (size 1.016 1.016)))) + (number "18" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 20.32 12.7 180) (length 5.08) + (name "TRIM1_0" (effects (font (size 1.016 1.016)))) + (number "19" (effects (font (size 1.016 1.016)))) + ) + (pin output line (at -20.32 2.54 0) (length 5.08) + (name "CSO" (effects (font (size 1.016 1.016)))) + (number "2" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at 20.32 10.16 180) (length 5.08) + (name "TRIM2_0" (effects (font (size 1.016 1.016)))) + (number "20" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 20.32 -30.48 180) (length 5.08) + (name "VSS" (effects (font (size 1.016 1.016)))) + (number "21" (effects (font (size 1.016 1.016)))) + ) + (pin input line (at -20.32 20.32 0) (length 5.08) + (name "RFI1" (effects (font (size 1.016 1.016)))) + (number "22" (effects (font (size 1.016 1.016)))) + ) + (pin input line (at -20.32 17.78 0) (length 5.08) + (name "RFI2" (effects (font (size 1.016 1.016)))) + (number "23" (effects (font (size 1.016 1.016)))) + ) + (pin bidirectional line (at -20.32 -20.32 0) (length 5.08) + (name "AGD" (effects (font (size 1.016 1.016)))) + (number "24" (effects (font (size 1.016 1.016)))) + ) + (pin input line (at -20.32 5.08 0) (length 5.08) + (name "CSI" (effects (font (size 1.016 1.016)))) + (number "25" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 20.32 -22.86 180) (length 5.08) + (name "VSN_A" (effects (font (size 1.016 1.016)))) + (number "26" (effects (font (size 1.016 1.016)))) + ) + (pin output line (at -20.32 -12.7 0) (length 5.08) + (name "IRQ" (effects (font (size 1.016 1.016)))) + (number "27" (effects (font (size 1.016 1.016)))) + ) + (pin output clock (at -20.32 -15.24 0) (length 5.08) + (name "MCU_CLK" (effects (font (size 1.016 1.016)))) + (number "28" (effects (font (size 1.016 1.016)))) + ) + (pin output line (at -20.32 -5.08 0) (length 5.08) + (name "MISO" (effects (font (size 1.016 1.016)))) + (number "29" (effects (font (size 1.016 1.016)))) + ) + (pin output line (at 20.32 -12.7 180) (length 5.08) + (name "VSP_D" (effects (font (size 1.016 1.016)))) + (number "3" (effects (font (size 1.016 1.016)))) + ) + (pin input line (at -20.32 -7.62 0) (length 5.08) + (name "MOSI" (effects (font (size 1.016 1.016)))) + (number "30" (effects (font (size 1.016 1.016)))) + ) + (pin input clock (at -20.32 -10.16 0) (length 5.08) + (name "SCLK" (effects (font (size 1.016 1.016)))) + (number "31" (effects (font (size 1.016 1.016)))) + ) + (pin input line (at -20.32 -2.54 0) (length 5.08) + (name "~{SS}" (effects (font (size 1.016 1.016)))) + (number "32" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 20.32 -30.48 180) (length 5.08) + (name "VSS" (effects (font (size 1.016 1.016)))) + (number "33" (effects (font (size 1.016 1.016)))) + ) + (pin output line (at -20.32 10.16 0) (length 5.08) + (name "XTO" (effects (font (size 1.016 1.016)))) + (number "4" (effects (font (size 1.016 1.016)))) + ) + (pin input line (at -20.32 12.7 0) (length 5.08) + (name "XTI" (effects (font (size 1.016 1.016)))) + (number "5" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 20.32 -25.4 180) (length 5.08) + (name "VSN_D" (effects (font (size 1.016 1.016)))) + (number "6" (effects (font (size 1.016 1.016)))) + ) + (pin output line (at 20.32 -10.16 180) (length 5.08) + (name "VSP_A" (effects (font (size 1.016 1.016)))) + (number "7" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 20.32 25.4 180) (length 5.08) + (name "VDD" (effects (font (size 1.016 1.016)))) + (number "8" (effects (font (size 1.016 1.016)))) + ) + (pin output line (at 20.32 -15.24 180) (length 5.08) + (name "VSP_RF" (effects (font (size 1.016 1.016)))) + (number "9" (effects (font (size 1.016 1.016)))) + ) + ) + ) +) diff --git a/Hardware/FabReader2/Library/ST25R3911B-AQFT/ST25R3911B-AQFT.lib b/Hardware/FabReader2/Library/ST25R3911B-AQFT/ST25R3911B-AQFT.lib new file mode 100644 index 0000000..85099f6 --- /dev/null +++ b/Hardware/FabReader2/Library/ST25R3911B-AQFT/ST25R3911B-AQFT.lib @@ -0,0 +1,88 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +#(c) SnapEDA 2016 (snapeda.com) +#This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Design Exception 1.0 +# +# ST25R3911B-AQFT +# +DEF ST25R3911B-AQFT U 0 40 Y Y 1 L N +F0 "U" -600 1230 50 H V L BNN +F1 "ST25R3911B-AQFT" -600 -1400 50 H V L BNN +F2 "QFN50P500X500X100-33N" 0 0 50 H I L BNN +F3 "" 0 0 50 H I L BNN +F4 "5.0" 0 0 50 H I L BNN "E_MAX" +F5 "" 0 0 50 H I L BNN "BODY_DIAMETER" +F6 "0.18" 0 0 50 H I L BNN "B_MIN" +F7 "" 0 0 50 H I L BNN "THERMAL_PAD" +F8 "5.0" 0 0 50 H I L BNN "E_MIN" +F9 "" 0 0 50 H I L BNN "BALL_COLUMNS" +F10 "" 0 0 50 H I L BNN "BALL_ROWS" +F11 "0.3" 0 0 50 H I L BNN "L_MIN" +F12 "6" 0 0 50 H I L BNN "PARTREV" +F13 "0.3" 0 0 50 H I L BNN "B_MAX" +F14 "ST Microelectronics" 0 0 50 H I L BNN "MANUFACTURER" +F15 "" 0 0 50 H I L BNN "DMAX" +F16 "" 0 0 50 H I L BNN "EMAX" +F17 "5.0" 0 0 50 H I L BNN "D_MAX" +F18 "8.0" 0 0 50 H I L BNN "PIN_COUNT_D" +F19 "0.4" 0 0 50 H I L BNN "L_NOM" +F20 "" 0 0 50 H I L BNN "SNAPEDA_PACKAGE_ID" +F21 "3.5" 0 0 50 H I L BNN "E2_NOM" +F22 "" 0 0 50 H I L BNN "IPC" +F23 "" 0 0 50 H I L BNN "JEDEC" +F24 "IPC 7351B" 0 0 50 H I L BNN "STANDARD" +F25 "" 0 0 50 H I L BNN "PINS" +F26 "3.5" 0 0 50 H I L BNN "D2_NOM" +F27 "" 0 0 50 H I L BNN "PIN_COLUMNS" +F28 "0.5" 0 0 50 H I L BNN "L_MAX" +F29 "5.0" 0 0 50 H I L BNN "D_NOM" +F30 "" 0 0 50 H I L BNN "DMIN" +F31 "0.5" 0 0 50 H I L BNN "ENOM" +F32 "8.0" 0 0 50 H I L BNN "PIN_COUNT_E" +F33 "5.0" 0 0 50 H I L BNN "D_MIN" +F34 "" 0 0 50 H I L BNN "EMIN" +F35 "" 0 0 50 H I L BNN "DNOM" +F36 "5.0" 0 0 50 H I L BNN "E_NOM" +F37 "" 0 0 50 H I L BNN "PACKAGE_TYPE" +F38 "1.0" 0 0 50 H I L BNN "A_MAX" +F39 "" 0 0 50 H I L BNN "VACANCIES" +F40 "0.24" 0 0 50 H I L BNN "B_NOM" +DRAW +S -600 -1300 600 1200 0 0 10 f +X VDD_IO 1 800 1100 200 L 40 40 0 0 W +X CSO 2 -800 100 200 R 40 40 0 0 O +X VSP_D 3 800 -500 200 L 40 40 0 0 O +X XTO 4 -800 400 200 R 40 40 0 0 O +X XTI 5 -800 500 200 R 40 40 0 0 I +X VSN_D 6 800 -1000 200 L 40 40 0 0 W +X VSP_A 7 800 -400 200 L 40 40 0 0 O +X VDD 8 800 1000 200 L 40 40 0 0 W +X VSP_RF 9 800 -600 200 L 40 40 0 0 O +X RFO1 10 800 800 200 L 40 40 0 0 O +X RFO2 11 800 700 200 L 40 40 0 0 O +X TRIM1_3 13 800 -100 200 L 40 40 0 0 B +X VSN_RF 12 800 -1100 200 L 40 40 0 0 W +X TRIM2_3 14 800 -200 200 L 40 40 0 0 B +X TRIM1_2 15 800 100 200 L 40 40 0 0 B +X TRIM2_2 16 800 0 200 L 40 40 0 0 B +X TRIM1_1 17 800 300 200 L 40 40 0 0 B +X TRIM2_1 18 800 200 200 L 40 40 0 0 B +X TRIM1_0 19 800 500 200 L 40 40 0 0 B +X TRIM2_0 20 800 400 200 L 40 40 0 0 B +X VSS 21 800 -1200 200 L 40 40 0 0 W +X VSS 33 800 -1200 200 L 40 40 0 0 W +X RFI1 22 -800 800 200 R 40 40 0 0 I +X RFI2 23 -800 700 200 R 40 40 0 0 I +X AGD 24 -800 -800 200 R 40 40 0 0 B +X CSI 25 -800 200 200 R 40 40 0 0 I +X VSN_A 26 800 -900 200 L 40 40 0 0 W +X IRQ 27 -800 -500 200 R 40 40 0 0 O +X MCU_CLK 28 -800 -600 200 R 40 40 0 0 O C +X MISO 29 -800 -200 200 R 40 40 0 0 O +X MOSI 30 -800 -300 200 R 40 40 0 0 I +X SCLK 31 -800 -400 200 R 40 40 0 0 I C +X ~SS 32 -800 -100 200 R 40 40 0 0 I +ENDDRAW +ENDDEF +# +# End Library \ No newline at end of file diff --git a/Hardware/FabReader2/Library/ST25R3911B-AQFT/how-to-import.htm b/Hardware/FabReader2/Library/ST25R3911B-AQFT/how-to-import.htm new file mode 100644 index 0000000..19e484d --- /dev/null +++ b/Hardware/FabReader2/Library/ST25R3911B-AQFT/how-to-import.htm @@ -0,0 +1 @@ + Page Redirection If you are not redirected automatically, follow this link to the import guide. \ No newline at end of file diff --git a/Hardware/FabReader2/Library/TPS63060DSCT/CONV_TPS63060DSCT.kicad_mod b/Hardware/FabReader2/Library/TPS63060DSCT/CONV_TPS63060DSCT.kicad_mod new file mode 100644 index 0000000..a864cfd --- /dev/null +++ b/Hardware/FabReader2/Library/TPS63060DSCT/CONV_TPS63060DSCT.kicad_mod @@ -0,0 +1,2304 @@ + +(module CONV_TPS63060DSCT (layer F.Cu) (tedit 6269D6CD) + (descr "") + (fp_text reference REF** (at 0.132 -2.7064 0) (layer F.SilkS) + (effects (font (size 0.64 0.64) (thickness 0.15))) + ) + (fp_text value CONV_TPS63060DSCT (at 5.0088 2.7064 0) (layer F.Fab) + (effects (font (size 0.64 0.64) (thickness 0.15))) + ) + (pad 1 smd custom (at -1.475 -1.0) (size 0.5 0.2) (layers F.Cu) + (zone_connect 0) (options (clearance outline) (anchor rect)) + (primitives + (gr_poly + (pts + (xy -0.425 -0.14) + (xy -0.425 0.14) + (xy 0.285 0.14) + (xy 0.292 0.14) + (xy 0.3 0.139) + (xy 0.307 0.138) + (xy 0.314 0.137) + (xy 0.321 0.135) + (xy 0.328 0.133) + (xy 0.335 0.131) + (xy 0.342 0.128) + (xy 0.349 0.125) + (xy 0.355 0.121) + (xy 0.361 0.117) + (xy 0.367 0.113) + (xy 0.373 0.109) + (xy 0.379 0.104) + (xy 0.384 0.099) + (xy 0.389 0.094) + (xy 0.394 0.088) + (xy 0.398 0.082) + (xy 0.402 0.076) + (xy 0.406 0.07) + (xy 0.41 0.064) + (xy 0.413 0.057) + (xy 0.416 0.05) + (xy 0.418 0.043) + (xy 0.42 0.036) + (xy 0.422 0.029) + (xy 0.423 0.022) + (xy 0.424 0.015) + (xy 0.425 0.007) + (xy 0.425 0.0) + (xy 0.425 -0.007) + (xy 0.424 -0.015) + (xy 0.423 -0.022) + (xy 0.422 -0.029) + (xy 0.42 -0.036) + (xy 0.418 -0.043) + (xy 0.416 -0.05) + (xy 0.413 -0.057) + (xy 0.41 -0.064) + (xy 0.406 -0.07) + (xy 0.402 -0.076) + (xy 0.398 -0.082) + (xy 0.394 -0.088) + (xy 0.389 -0.094) + (xy 0.384 -0.099) + (xy 0.379 -0.104) + (xy 0.373 -0.109) + (xy 0.367 -0.113) + (xy 0.361 -0.117) + (xy 0.355 -0.121) + (xy 0.349 -0.125) + (xy 0.342 -0.128) + (xy 0.335 -0.131) + (xy 0.328 -0.133) + (xy 0.321 -0.135) + (xy 0.314 -0.137) + (xy 0.307 -0.138) + (xy 0.3 -0.139) + (xy 0.292 -0.14) + (xy 0.285 -0.14) + (xy -0.425 -0.14) + ) (width 0.01) + ) + ) + ) + (pad 13 thru_hole circle (at 0.5 -0.5) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 12 thru_hole circle (at -0.5 -0.5) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 15 thru_hole circle (at 0.0 0.0) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 14 thru_hole circle (at -0.5 0.5) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (pad 11 smd custom (at 0.0 0.0) (size 0.5 0.5) (layers F.Cu) + (zone_connect 0) (options (clearance outline) (anchor rect)) + (primitives + (gr_poly + (pts + (xy -0.85 -1.075) + (xy -0.725 -1.075) + (xy -0.725 -1.775) + (xy -0.475 -1.775) + (xy -0.475 -1.075) + (xy -0.325 -1.075) + (xy -0.325 -1.775) + (xy -0.075 -1.775) + (xy -0.075 -1.075) + (xy 0.075 -1.075) + (xy 0.075 -1.775) + (xy 0.325 -1.775) + (xy 0.325 -1.075) + (xy 0.475 -1.075) + (xy 0.475 -1.775) + (xy 0.725 -1.775) + (xy 0.725 -1.075) + (xy 0.85 -1.075) + (xy 0.85 1.075) + (xy 0.725 1.075) + (xy 0.725 1.775) + (xy 0.475 1.775) + (xy 0.475 1.075) + (xy 0.325 1.075) + (xy 0.325 1.775) + (xy 0.075 1.775) + (xy 0.075 1.075) + (xy -0.075 1.075) + (xy -0.075 1.775) + (xy -0.325 1.775) + (xy -0.325 1.075) + (xy -0.475 1.075) + (xy -0.475 1.775) + (xy -0.725 1.775) + (xy -0.725 1.075) + (xy -0.85 1.075) + ) (width 0.01) + ) + ) + ) + (pad 2 smd custom (at -1.475 -0.5) (size 0.5 0.2) (layers F.Cu) + (zone_connect 0) (options (clearance outline) (anchor rect)) + (primitives + (gr_poly + (pts + (xy -0.425 -0.14) + (xy -0.425 0.14) + (xy 0.285 0.14) + (xy 0.292 0.14) + (xy 0.3 0.139) + (xy 0.307 0.138) + (xy 0.314 0.137) + (xy 0.321 0.135) + (xy 0.328 0.133) + (xy 0.335 0.131) + (xy 0.342 0.128) + (xy 0.349 0.125) + (xy 0.355 0.121) + (xy 0.361 0.117) + (xy 0.367 0.113) + (xy 0.373 0.109) + (xy 0.379 0.104) + (xy 0.384 0.099) + (xy 0.389 0.094) + (xy 0.394 0.088) + (xy 0.398 0.082) + (xy 0.402 0.076) + (xy 0.406 0.07) + (xy 0.41 0.064) + (xy 0.413 0.057) + (xy 0.416 0.05) + (xy 0.418 0.043) + (xy 0.42 0.036) + (xy 0.422 0.029) + (xy 0.423 0.022) + (xy 0.424 0.015) + (xy 0.425 0.007) + (xy 0.425 0.0) + (xy 0.425 -0.007) + (xy 0.424 -0.015) + (xy 0.423 -0.022) + (xy 0.422 -0.029) + (xy 0.42 -0.036) + (xy 0.418 -0.043) + (xy 0.416 -0.05) + (xy 0.413 -0.057) + (xy 0.41 -0.064) + (xy 0.406 -0.07) + (xy 0.402 -0.076) + (xy 0.398 -0.082) + (xy 0.394 -0.088) + (xy 0.389 -0.094) + (xy 0.384 -0.099) + (xy 0.379 -0.104) + (xy 0.373 -0.109) + (xy 0.367 -0.113) + (xy 0.361 -0.117) + (xy 0.355 -0.121) + (xy 0.349 -0.125) + (xy 0.342 -0.128) + (xy 0.335 -0.131) + (xy 0.328 -0.133) + (xy 0.321 -0.135) + (xy 0.314 -0.137) + (xy 0.307 -0.138) + (xy 0.3 -0.139) + (xy 0.292 -0.14) + (xy 0.285 -0.14) + (xy -0.425 -0.14) + ) (width 0.01) + ) + ) + ) + (pad 3 smd custom (at -1.475 0.0) (size 0.5 0.2) (layers F.Cu) + (zone_connect 0) (options (clearance outline) (anchor rect)) + (primitives + (gr_poly + (pts + (xy -0.425 -0.14) + (xy -0.425 0.14) + (xy 0.285 0.14) + (xy 0.292 0.14) + (xy 0.3 0.139) + (xy 0.307 0.138) + (xy 0.314 0.137) + (xy 0.321 0.135) + (xy 0.328 0.133) + (xy 0.335 0.131) + (xy 0.342 0.128) + (xy 0.349 0.125) + (xy 0.355 0.121) + (xy 0.361 0.117) + (xy 0.367 0.113) + (xy 0.373 0.109) + (xy 0.379 0.104) + (xy 0.384 0.099) + (xy 0.389 0.094) + (xy 0.394 0.088) + (xy 0.398 0.082) + (xy 0.402 0.076) + (xy 0.406 0.07) + (xy 0.41 0.064) + (xy 0.413 0.057) + (xy 0.416 0.05) + (xy 0.418 0.043) + (xy 0.42 0.036) + (xy 0.422 0.029) + (xy 0.423 0.022) + (xy 0.424 0.015) + (xy 0.425 0.007) + (xy 0.425 0.0) + (xy 0.425 -0.007) + (xy 0.424 -0.015) + (xy 0.423 -0.022) + (xy 0.422 -0.029) + (xy 0.42 -0.036) + (xy 0.418 -0.043) + (xy 0.416 -0.05) + (xy 0.413 -0.057) + (xy 0.41 -0.064) + (xy 0.406 -0.07) + (xy 0.402 -0.076) + (xy 0.398 -0.082) + (xy 0.394 -0.088) + (xy 0.389 -0.094) + (xy 0.384 -0.099) + (xy 0.379 -0.104) + (xy 0.373 -0.109) + (xy 0.367 -0.113) + (xy 0.361 -0.117) + (xy 0.355 -0.121) + (xy 0.349 -0.125) + (xy 0.342 -0.128) + (xy 0.335 -0.131) + (xy 0.328 -0.133) + (xy 0.321 -0.135) + (xy 0.314 -0.137) + (xy 0.307 -0.138) + (xy 0.3 -0.139) + (xy 0.292 -0.14) + (xy 0.285 -0.14) + (xy -0.425 -0.14) + ) (width 0.01) + ) + ) + ) + (pad 4 smd custom (at -1.475 0.5) (size 0.5 0.2) (layers F.Cu) + (zone_connect 0) (options (clearance outline) (anchor rect)) + (primitives + (gr_poly + (pts + (xy -0.425 -0.14) + (xy -0.425 0.14) + (xy 0.285 0.14) + (xy 0.292 0.14) + (xy 0.3 0.139) + (xy 0.307 0.138) + (xy 0.314 0.137) + (xy 0.321 0.135) + (xy 0.328 0.133) + (xy 0.335 0.131) + (xy 0.342 0.128) + (xy 0.349 0.125) + (xy 0.355 0.121) + (xy 0.361 0.117) + (xy 0.367 0.113) + (xy 0.373 0.109) + (xy 0.379 0.104) + (xy 0.384 0.099) + (xy 0.389 0.094) + (xy 0.394 0.088) + (xy 0.398 0.082) + (xy 0.402 0.076) + (xy 0.406 0.07) + (xy 0.41 0.064) + (xy 0.413 0.057) + (xy 0.416 0.05) + (xy 0.418 0.043) + (xy 0.42 0.036) + (xy 0.422 0.029) + (xy 0.423 0.022) + (xy 0.424 0.015) + (xy 0.425 0.007) + (xy 0.425 0.0) + (xy 0.425 -0.007) + (xy 0.424 -0.015) + (xy 0.423 -0.022) + (xy 0.422 -0.029) + (xy 0.42 -0.036) + (xy 0.418 -0.043) + (xy 0.416 -0.05) + (xy 0.413 -0.057) + (xy 0.41 -0.064) + (xy 0.406 -0.07) + (xy 0.402 -0.076) + (xy 0.398 -0.082) + (xy 0.394 -0.088) + (xy 0.389 -0.094) + (xy 0.384 -0.099) + (xy 0.379 -0.104) + (xy 0.373 -0.109) + (xy 0.367 -0.113) + (xy 0.361 -0.117) + (xy 0.355 -0.121) + (xy 0.349 -0.125) + (xy 0.342 -0.128) + (xy 0.335 -0.131) + (xy 0.328 -0.133) + (xy 0.321 -0.135) + (xy 0.314 -0.137) + (xy 0.307 -0.138) + (xy 0.3 -0.139) + (xy 0.292 -0.14) + (xy 0.285 -0.14) + (xy -0.425 -0.14) + ) (width 0.01) + ) + ) + ) + (pad 5 smd custom (at -1.475 1.0) (size 0.5 0.2) (layers F.Cu) + (zone_connect 0) (options (clearance outline) (anchor rect)) + (primitives + (gr_poly + (pts + (xy -0.425 -0.14) + (xy -0.425 0.14) + (xy 0.285 0.14) + (xy 0.292 0.14) + (xy 0.3 0.139) + (xy 0.307 0.138) + (xy 0.314 0.137) + (xy 0.321 0.135) + (xy 0.328 0.133) + (xy 0.335 0.131) + (xy 0.342 0.128) + (xy 0.349 0.125) + (xy 0.355 0.121) + (xy 0.361 0.117) + (xy 0.367 0.113) + (xy 0.373 0.109) + (xy 0.379 0.104) + (xy 0.384 0.099) + (xy 0.389 0.094) + (xy 0.394 0.088) + (xy 0.398 0.082) + (xy 0.402 0.076) + (xy 0.406 0.07) + (xy 0.41 0.064) + (xy 0.413 0.057) + (xy 0.416 0.05) + (xy 0.418 0.043) + (xy 0.42 0.036) + (xy 0.422 0.029) + (xy 0.423 0.022) + (xy 0.424 0.015) + (xy 0.425 0.007) + (xy 0.425 0.0) + (xy 0.425 -0.007) + (xy 0.424 -0.015) + (xy 0.423 -0.022) + (xy 0.422 -0.029) + (xy 0.42 -0.036) + (xy 0.418 -0.043) + (xy 0.416 -0.05) + (xy 0.413 -0.057) + (xy 0.41 -0.064) + (xy 0.406 -0.07) + (xy 0.402 -0.076) + (xy 0.398 -0.082) + (xy 0.394 -0.088) + (xy 0.389 -0.094) + (xy 0.384 -0.099) + (xy 0.379 -0.104) + (xy 0.373 -0.109) + (xy 0.367 -0.113) + (xy 0.361 -0.117) + (xy 0.355 -0.121) + (xy 0.349 -0.125) + (xy 0.342 -0.128) + (xy 0.335 -0.131) + (xy 0.328 -0.133) + (xy 0.321 -0.135) + (xy 0.314 -0.137) + (xy 0.307 -0.138) + (xy 0.3 -0.139) + (xy 0.292 -0.14) + (xy 0.285 -0.14) + (xy -0.425 -0.14) + ) (width 0.01) + ) + ) + ) + (pad 6 smd custom (at 1.475 1.0 180.0) (size 0.5 0.2) (layers F.Cu) + (zone_connect 0) (options (clearance outline) (anchor rect)) + (primitives + (gr_poly + (pts + (xy 0.425 -0.14) + (xy 0.425 0.14) + (xy -0.285 0.14) + (xy -0.292 0.14) + (xy -0.3 0.139) + (xy -0.307 0.138) + (xy -0.314 0.137) + (xy -0.321 0.135) + (xy -0.328 0.133) + (xy -0.335 0.131) + (xy -0.342 0.128) + (xy -0.349 0.125) + (xy -0.355 0.121) + (xy -0.361 0.117) + (xy -0.367 0.113) + (xy -0.373 0.109) + (xy -0.379 0.104) + (xy -0.384 0.099) + (xy -0.389 0.094) + (xy -0.394 0.088) + (xy -0.398 0.082) + (xy -0.402 0.076) + (xy -0.406 0.07) + (xy -0.41 0.064) + (xy -0.413 0.057) + (xy -0.416 0.05) + (xy -0.418 0.043) + (xy -0.42 0.036) + (xy -0.422 0.029) + (xy -0.423 0.022) + (xy -0.424 0.015) + (xy -0.425 0.007) + (xy -0.425 0.0) + (xy -0.425 -0.007) + (xy -0.424 -0.015) + (xy -0.423 -0.022) + (xy -0.422 -0.029) + (xy -0.42 -0.036) + (xy -0.418 -0.043) + (xy -0.416 -0.05) + (xy -0.413 -0.057) + (xy -0.41 -0.064) + (xy -0.406 -0.07) + (xy -0.402 -0.076) + (xy -0.398 -0.082) + (xy -0.394 -0.088) + (xy -0.389 -0.094) + (xy -0.384 -0.099) + (xy -0.379 -0.104) + (xy -0.373 -0.109) + (xy -0.367 -0.113) + (xy -0.361 -0.117) + (xy -0.355 -0.121) + (xy -0.349 -0.125) + (xy -0.342 -0.128) + (xy -0.335 -0.131) + (xy -0.328 -0.133) + (xy -0.321 -0.135) + (xy -0.314 -0.137) + (xy -0.307 -0.138) + (xy -0.3 -0.139) + (xy -0.292 -0.14) + (xy -0.285 -0.14) + (xy 0.425 -0.14) + ) (width 0.01) + ) + ) + ) + (pad 7 smd custom (at 1.475 0.5 180.0) (size 0.5 0.2) (layers F.Cu) + (zone_connect 0) (options (clearance outline) (anchor rect)) + (primitives + (gr_poly + (pts + (xy 0.425 -0.14) + (xy 0.425 0.14) + (xy -0.285 0.14) + (xy -0.292 0.14) + (xy -0.3 0.139) + (xy -0.307 0.138) + (xy -0.314 0.137) + (xy -0.321 0.135) + (xy -0.328 0.133) + (xy -0.335 0.131) + (xy -0.342 0.128) + (xy -0.349 0.125) + (xy -0.355 0.121) + (xy -0.361 0.117) + (xy -0.367 0.113) + (xy -0.373 0.109) + (xy -0.379 0.104) + (xy -0.384 0.099) + (xy -0.389 0.094) + (xy -0.394 0.088) + (xy -0.398 0.082) + (xy -0.402 0.076) + (xy -0.406 0.07) + (xy -0.41 0.064) + (xy -0.413 0.057) + (xy -0.416 0.05) + (xy -0.418 0.043) + (xy -0.42 0.036) + (xy -0.422 0.029) + (xy -0.423 0.022) + (xy -0.424 0.015) + (xy -0.425 0.007) + (xy -0.425 0.0) + (xy -0.425 -0.007) + (xy -0.424 -0.015) + (xy -0.423 -0.022) + (xy -0.422 -0.029) + (xy -0.42 -0.036) + (xy -0.418 -0.043) + (xy -0.416 -0.05) + (xy -0.413 -0.057) + (xy -0.41 -0.064) + (xy -0.406 -0.07) + (xy -0.402 -0.076) + (xy -0.398 -0.082) + (xy -0.394 -0.088) + (xy -0.389 -0.094) + (xy -0.384 -0.099) + (xy -0.379 -0.104) + (xy -0.373 -0.109) + (xy -0.367 -0.113) + (xy -0.361 -0.117) + (xy -0.355 -0.121) + (xy -0.349 -0.125) + (xy -0.342 -0.128) + (xy -0.335 -0.131) + (xy -0.328 -0.133) + (xy -0.321 -0.135) + (xy -0.314 -0.137) + (xy -0.307 -0.138) + (xy -0.3 -0.139) + (xy -0.292 -0.14) + (xy -0.285 -0.14) + (xy 0.425 -0.14) + ) (width 0.01) + ) + ) + ) + (pad 8 smd custom (at 1.475 0.0 180.0) (size 0.5 0.2) (layers F.Cu) + (zone_connect 0) (options (clearance outline) (anchor rect)) + (primitives + (gr_poly + (pts + (xy 0.425 -0.14) + (xy 0.425 0.14) + (xy -0.285 0.14) + (xy -0.292 0.14) + (xy -0.3 0.139) + (xy -0.307 0.138) + (xy -0.314 0.137) + (xy -0.321 0.135) + (xy -0.328 0.133) + (xy -0.335 0.131) + (xy -0.342 0.128) + (xy -0.349 0.125) + (xy -0.355 0.121) + (xy -0.361 0.117) + (xy -0.367 0.113) + (xy -0.373 0.109) + (xy -0.379 0.104) + (xy -0.384 0.099) + (xy -0.389 0.094) + (xy -0.394 0.088) + (xy -0.398 0.082) + (xy -0.402 0.076) + (xy -0.406 0.07) + (xy -0.41 0.064) + (xy -0.413 0.057) + (xy -0.416 0.05) + (xy -0.418 0.043) + (xy -0.42 0.036) + (xy -0.422 0.029) + (xy -0.423 0.022) + (xy -0.424 0.015) + (xy -0.425 0.007) + (xy -0.425 0.0) + (xy -0.425 -0.007) + (xy -0.424 -0.015) + (xy -0.423 -0.022) + (xy -0.422 -0.029) + (xy -0.42 -0.036) + (xy -0.418 -0.043) + (xy -0.416 -0.05) + (xy -0.413 -0.057) + (xy -0.41 -0.064) + (xy -0.406 -0.07) + (xy -0.402 -0.076) + (xy -0.398 -0.082) + (xy -0.394 -0.088) + (xy -0.389 -0.094) + (xy -0.384 -0.099) + (xy -0.379 -0.104) + (xy -0.373 -0.109) + (xy -0.367 -0.113) + (xy -0.361 -0.117) + (xy -0.355 -0.121) + (xy -0.349 -0.125) + (xy -0.342 -0.128) + (xy -0.335 -0.131) + (xy -0.328 -0.133) + (xy -0.321 -0.135) + (xy -0.314 -0.137) + (xy -0.307 -0.138) + (xy -0.3 -0.139) + (xy -0.292 -0.14) + (xy -0.285 -0.14) + (xy 0.425 -0.14) + ) (width 0.01) + ) + ) + ) + (pad 9 smd custom (at 1.475 -0.5 180.0) (size 0.5 0.2) (layers F.Cu) + (zone_connect 0) (options (clearance outline) (anchor rect)) + (primitives + (gr_poly + (pts + (xy 0.425 -0.14) + (xy 0.425 0.14) + (xy -0.285 0.14) + (xy -0.292 0.14) + (xy -0.3 0.139) + (xy -0.307 0.138) + (xy -0.314 0.137) + (xy -0.321 0.135) + (xy -0.328 0.133) + (xy -0.335 0.131) + (xy -0.342 0.128) + (xy -0.349 0.125) + (xy -0.355 0.121) + (xy -0.361 0.117) + (xy -0.367 0.113) + (xy -0.373 0.109) + (xy -0.379 0.104) + (xy -0.384 0.099) + (xy -0.389 0.094) + (xy -0.394 0.088) + (xy -0.398 0.082) + (xy -0.402 0.076) + (xy -0.406 0.07) + (xy -0.41 0.064) + (xy -0.413 0.057) + (xy -0.416 0.05) + (xy -0.418 0.043) + (xy -0.42 0.036) + (xy -0.422 0.029) + (xy -0.423 0.022) + (xy -0.424 0.015) + (xy -0.425 0.007) + (xy -0.425 0.0) + (xy -0.425 -0.007) + (xy -0.424 -0.015) + (xy -0.423 -0.022) + (xy -0.422 -0.029) + (xy -0.42 -0.036) + (xy -0.418 -0.043) + (xy -0.416 -0.05) + (xy -0.413 -0.057) + (xy -0.41 -0.064) + (xy -0.406 -0.07) + (xy -0.402 -0.076) + (xy -0.398 -0.082) + (xy -0.394 -0.088) + (xy -0.389 -0.094) + (xy -0.384 -0.099) + (xy -0.379 -0.104) + (xy -0.373 -0.109) + (xy -0.367 -0.113) + (xy -0.361 -0.117) + (xy -0.355 -0.121) + (xy -0.349 -0.125) + (xy -0.342 -0.128) + (xy -0.335 -0.131) + (xy -0.328 -0.133) + (xy -0.321 -0.135) + (xy -0.314 -0.137) + (xy -0.307 -0.138) + (xy -0.3 -0.139) + (xy -0.292 -0.14) + (xy -0.285 -0.14) + (xy 0.425 -0.14) + ) (width 0.01) + ) + ) + ) + (pad 10 smd custom (at 1.475 -1.0 180.0) (size 0.5 0.2) (layers F.Cu) + (zone_connect 0) (options (clearance outline) (anchor rect)) + (primitives + (gr_poly + (pts + (xy 0.425 -0.14) + (xy 0.425 0.14) + (xy -0.285 0.14) + (xy -0.292 0.14) + (xy -0.3 0.139) + (xy -0.307 0.138) + (xy -0.314 0.137) + (xy -0.321 0.135) + (xy -0.328 0.133) + (xy -0.335 0.131) + (xy -0.342 0.128) + (xy -0.349 0.125) + (xy -0.355 0.121) + (xy -0.361 0.117) + (xy -0.367 0.113) + (xy -0.373 0.109) + (xy -0.379 0.104) + (xy -0.384 0.099) + (xy -0.389 0.094) + (xy -0.394 0.088) + (xy -0.398 0.082) + (xy -0.402 0.076) + (xy -0.406 0.07) + (xy -0.41 0.064) + (xy -0.413 0.057) + (xy -0.416 0.05) + (xy -0.418 0.043) + (xy -0.42 0.036) + (xy -0.422 0.029) + (xy -0.423 0.022) + (xy -0.424 0.015) + (xy -0.425 0.007) + (xy -0.425 0.0) + (xy -0.425 -0.007) + (xy -0.424 -0.015) + (xy -0.423 -0.022) + (xy -0.422 -0.029) + (xy -0.42 -0.036) + (xy -0.418 -0.043) + (xy -0.416 -0.05) + (xy -0.413 -0.057) + (xy -0.41 -0.064) + (xy -0.406 -0.07) + (xy -0.402 -0.076) + (xy -0.398 -0.082) + (xy -0.394 -0.088) + (xy -0.389 -0.094) + (xy -0.384 -0.099) + (xy -0.379 -0.104) + (xy -0.373 -0.109) + (xy -0.367 -0.113) + (xy -0.361 -0.117) + (xy -0.355 -0.121) + (xy -0.349 -0.125) + (xy -0.342 -0.128) + (xy -0.335 -0.131) + (xy -0.328 -0.133) + (xy -0.321 -0.135) + (xy -0.314 -0.137) + (xy -0.307 -0.138) + (xy -0.3 -0.139) + (xy -0.292 -0.14) + (xy -0.285 -0.14) + (xy 0.425 -0.14) + ) (width 0.01) + ) + ) + ) + (pad 16 thru_hole circle (at 0.5 0.5) (size 0.4 0.4) (drill 0.3) (layers *.Cu)) + (fp_line (start -1.5 -1.5) (end 1.5 -1.5) (layer F.Fab) (width 0.127)) + (fp_line (start 1.5 -1.5) (end 1.5 1.5) (layer F.Fab) (width 0.127)) + (fp_line (start 1.5 1.5) (end -1.5 1.5) (layer F.Fab) (width 0.127)) + (fp_line (start -1.5 1.5) (end -1.5 -1.5) (layer F.Fab) (width 0.127)) + (fp_line (start -2.15 -2.025) (end -2.15 2.025) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.15 2.025) (end 2.15 2.025) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.15 2.025) (end 2.15 -2.025) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.15 -2.025) (end -2.15 -2.025) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.5 -1.5) (end -1.045 -1.5) (layer F.SilkS) (width 0.127)) + (fp_line (start 1.045 -1.5) (end 1.5 -1.5) (layer F.SilkS) (width 0.127)) + (fp_line (start -1.5 1.5) (end -1.045 1.5) (layer F.SilkS) (width 0.127)) + (fp_line (start 1.045 1.5) (end 1.5 1.5) (layer F.SilkS) (width 0.127)) + (fp_poly + (pts + (xy -1.875 -1.115) + (xy -1.875 -0.885) + (xy -1.215 -0.885) + (xy -1.209 -0.885) + (xy -1.203 -0.884) + (xy -1.196 -0.885) + (xy -1.189 -0.885) + (xy -1.182 -0.886) + (xy -1.176 -0.887) + (xy -1.169 -0.889) + (xy -1.163 -0.891) + (xy -1.157 -0.893) + (xy -1.15 -0.895) + (xy -1.144 -0.898) + (xy -1.138 -0.902) + (xy -1.133 -0.905) + (xy -1.127 -0.909) + (xy -1.122 -0.913) + (xy -1.117 -0.917) + (xy -1.112 -0.922) + (xy -1.107 -0.927) + (xy -1.103 -0.932) + (xy -1.099 -0.937) + (xy -1.095 -0.943) + (xy -1.092 -0.948) + (xy -1.088 -0.954) + (xy -1.085 -0.96) + (xy -1.083 -0.967) + (xy -1.081 -0.973) + (xy -1.079 -0.979) + (xy -1.077 -0.986) + (xy -1.076 -0.992) + (xy -1.075 -1.0) + (xy -1.076 -1.008) + (xy -1.077 -1.014) + (xy -1.079 -1.021) + (xy -1.081 -1.027) + (xy -1.083 -1.033) + (xy -1.085 -1.04) + (xy -1.088 -1.046) + (xy -1.092 -1.052) + (xy -1.095 -1.057) + (xy -1.099 -1.063) + (xy -1.103 -1.068) + (xy -1.107 -1.073) + (xy -1.112 -1.078) + (xy -1.117 -1.083) + (xy -1.122 -1.087) + (xy -1.127 -1.091) + (xy -1.133 -1.095) + (xy -1.138 -1.098) + (xy -1.144 -1.102) + (xy -1.15 -1.105) + (xy -1.157 -1.107) + (xy -1.163 -1.109) + (xy -1.169 -1.111) + (xy -1.176 -1.113) + (xy -1.182 -1.114) + (xy -1.189 -1.115) + (xy -1.196 -1.115) + (xy -1.203 -1.116) + (xy -1.209 -1.115) + (xy -1.215 -1.115) + (xy -1.875 -1.115) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy -1.875 -0.615) + (xy -1.875 -0.385) + (xy -1.215 -0.385) + (xy -1.209 -0.385) + (xy -1.203 -0.384) + (xy -1.196 -0.385) + (xy -1.189 -0.385) + (xy -1.182 -0.386) + (xy -1.176 -0.387) + (xy -1.169 -0.389) + (xy -1.163 -0.391) + (xy -1.157 -0.393) + (xy -1.15 -0.395) + (xy -1.144 -0.398) + (xy -1.138 -0.402) + (xy -1.133 -0.405) + (xy -1.127 -0.409) + (xy -1.122 -0.413) + (xy -1.117 -0.417) + (xy -1.112 -0.422) + (xy -1.107 -0.427) + (xy -1.103 -0.432) + (xy -1.099 -0.437) + (xy -1.095 -0.443) + (xy -1.092 -0.448) + (xy -1.088 -0.454) + (xy -1.085 -0.46) + (xy -1.083 -0.467) + (xy -1.081 -0.473) + (xy -1.079 -0.479) + (xy -1.077 -0.486) + (xy -1.076 -0.492) + (xy -1.075 -0.5) + (xy -1.076 -0.508) + (xy -1.077 -0.514) + (xy -1.079 -0.521) + (xy -1.081 -0.527) + (xy -1.083 -0.533) + (xy -1.085 -0.54) + (xy -1.088 -0.546) + (xy -1.092 -0.552) + (xy -1.095 -0.557) + (xy -1.099 -0.563) + (xy -1.103 -0.568) + (xy -1.107 -0.573) + (xy -1.112 -0.578) + (xy -1.117 -0.583) + (xy -1.122 -0.587) + (xy -1.127 -0.591) + (xy -1.133 -0.595) + (xy -1.138 -0.598) + (xy -1.144 -0.602) + (xy -1.15 -0.605) + (xy -1.157 -0.607) + (xy -1.163 -0.609) + (xy -1.169 -0.611) + (xy -1.176 -0.613) + (xy -1.182 -0.614) + (xy -1.189 -0.615) + (xy -1.196 -0.615) + (xy -1.203 -0.616) + (xy -1.209 -0.615) + (xy -1.215 -0.615) + (xy -1.875 -0.615) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy -1.875 -0.115) + (xy -1.875 0.115) + (xy -1.215 0.115) + (xy -1.209 0.115) + (xy -1.203 0.116) + (xy -1.196 0.115) + (xy -1.189 0.115) + (xy -1.182 0.114) + (xy -1.176 0.113) + (xy -1.169 0.111) + (xy -1.163 0.109) + (xy -1.157 0.107) + (xy -1.15 0.105) + (xy -1.144 0.102) + (xy -1.138 0.098) + (xy -1.133 0.095) + (xy -1.127 0.091) + (xy -1.122 0.087) + (xy -1.117 0.083) + (xy -1.112 0.078) + (xy -1.107 0.073) + (xy -1.103 0.068) + (xy -1.099 0.063) + (xy -1.095 0.057) + (xy -1.092 0.052) + (xy -1.088 0.046) + (xy -1.085 0.04) + (xy -1.083 0.033) + (xy -1.081 0.027) + (xy -1.079 0.021) + (xy -1.077 0.014) + (xy -1.076 0.008) + (xy -1.075 0.0) + (xy -1.076 -0.008) + (xy -1.077 -0.014) + (xy -1.079 -0.021) + (xy -1.081 -0.027) + (xy -1.083 -0.033) + (xy -1.085 -0.04) + (xy -1.088 -0.046) + (xy -1.092 -0.052) + (xy -1.095 -0.057) + (xy -1.099 -0.063) + (xy -1.103 -0.068) + (xy -1.107 -0.073) + (xy -1.112 -0.078) + (xy -1.117 -0.083) + (xy -1.122 -0.087) + (xy -1.127 -0.091) + (xy -1.133 -0.095) + (xy -1.138 -0.098) + (xy -1.144 -0.102) + (xy -1.15 -0.105) + (xy -1.157 -0.107) + (xy -1.163 -0.109) + (xy -1.169 -0.111) + (xy -1.176 -0.113) + (xy -1.182 -0.114) + (xy -1.189 -0.115) + (xy -1.196 -0.115) + (xy -1.203 -0.116) + (xy -1.209 -0.115) + (xy -1.215 -0.115) + (xy -1.875 -0.115) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy -1.875 0.385) + (xy -1.875 0.615) + (xy -1.215 0.615) + (xy -1.209 0.615) + (xy -1.203 0.616) + (xy -1.196 0.615) + (xy -1.189 0.615) + (xy -1.182 0.614) + (xy -1.176 0.613) + (xy -1.169 0.611) + (xy -1.163 0.609) + (xy -1.157 0.607) + (xy -1.15 0.605) + (xy -1.144 0.602) + (xy -1.138 0.598) + (xy -1.133 0.595) + (xy -1.127 0.591) + (xy -1.122 0.587) + (xy -1.117 0.583) + (xy -1.112 0.578) + (xy -1.107 0.573) + (xy -1.103 0.568) + (xy -1.099 0.563) + (xy -1.095 0.557) + (xy -1.092 0.552) + (xy -1.088 0.546) + (xy -1.085 0.54) + (xy -1.083 0.533) + (xy -1.081 0.527) + (xy -1.079 0.521) + (xy -1.077 0.514) + (xy -1.076 0.508) + (xy -1.075 0.5) + (xy -1.076 0.492) + (xy -1.077 0.486) + (xy -1.079 0.479) + (xy -1.081 0.473) + (xy -1.083 0.467) + (xy -1.085 0.46) + (xy -1.088 0.454) + (xy -1.092 0.448) + (xy -1.095 0.443) + (xy -1.099 0.437) + (xy -1.103 0.432) + (xy -1.107 0.427) + (xy -1.112 0.422) + (xy -1.117 0.417) + (xy -1.122 0.413) + (xy -1.127 0.409) + (xy -1.133 0.405) + (xy -1.138 0.402) + (xy -1.144 0.398) + (xy -1.15 0.395) + (xy -1.157 0.393) + (xy -1.163 0.391) + (xy -1.169 0.389) + (xy -1.176 0.387) + (xy -1.182 0.386) + (xy -1.189 0.385) + (xy -1.196 0.385) + (xy -1.203 0.384) + (xy -1.209 0.385) + (xy -1.215 0.385) + (xy -1.875 0.385) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy -1.875 0.885) + (xy -1.875 1.115) + (xy -1.215 1.115) + (xy -1.209 1.115) + (xy -1.203 1.116) + (xy -1.196 1.115) + (xy -1.189 1.115) + (xy -1.182 1.114) + (xy -1.176 1.113) + (xy -1.169 1.111) + (xy -1.163 1.109) + (xy -1.157 1.107) + (xy -1.15 1.105) + (xy -1.144 1.102) + (xy -1.138 1.098) + (xy -1.133 1.095) + (xy -1.127 1.091) + (xy -1.122 1.087) + (xy -1.117 1.083) + (xy -1.112 1.078) + (xy -1.107 1.073) + (xy -1.103 1.068) + (xy -1.099 1.063) + (xy -1.095 1.057) + (xy -1.092 1.052) + (xy -1.088 1.046) + (xy -1.085 1.04) + (xy -1.083 1.033) + (xy -1.081 1.027) + (xy -1.079 1.021) + (xy -1.077 1.014) + (xy -1.076 1.008) + (xy -1.075 1.0) + (xy -1.076 0.992) + (xy -1.077 0.986) + (xy -1.079 0.979) + (xy -1.081 0.973) + (xy -1.083 0.967) + (xy -1.085 0.96) + (xy -1.088 0.954) + (xy -1.092 0.948) + (xy -1.095 0.943) + (xy -1.099 0.937) + (xy -1.103 0.932) + (xy -1.107 0.927) + (xy -1.112 0.922) + (xy -1.117 0.917) + (xy -1.122 0.913) + (xy -1.127 0.909) + (xy -1.133 0.905) + (xy -1.138 0.902) + (xy -1.144 0.898) + (xy -1.15 0.895) + (xy -1.157 0.893) + (xy -1.163 0.891) + (xy -1.169 0.889) + (xy -1.176 0.887) + (xy -1.182 0.886) + (xy -1.189 0.885) + (xy -1.196 0.885) + (xy -1.203 0.884) + (xy -1.209 0.885) + (xy -1.215 0.885) + (xy -1.875 0.885) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy 1.875 -1.115) + (xy 1.875 -0.885) + (xy 1.215 -0.885) + (xy 1.209 -0.885) + (xy 1.203 -0.884) + (xy 1.196 -0.885) + (xy 1.189 -0.885) + (xy 1.182 -0.886) + (xy 1.176 -0.887) + (xy 1.169 -0.889) + (xy 1.163 -0.891) + (xy 1.157 -0.893) + (xy 1.15 -0.895) + (xy 1.144 -0.898) + (xy 1.138 -0.902) + (xy 1.133 -0.905) + (xy 1.127 -0.909) + (xy 1.122 -0.913) + (xy 1.117 -0.917) + (xy 1.112 -0.922) + (xy 1.107 -0.927) + (xy 1.103 -0.932) + (xy 1.099 -0.937) + (xy 1.095 -0.943) + (xy 1.092 -0.948) + (xy 1.088 -0.954) + (xy 1.085 -0.96) + (xy 1.083 -0.967) + (xy 1.081 -0.973) + (xy 1.079 -0.979) + (xy 1.077 -0.986) + (xy 1.076 -0.992) + (xy 1.075 -1.0) + (xy 1.076 -1.008) + (xy 1.077 -1.014) + (xy 1.079 -1.021) + (xy 1.081 -1.027) + (xy 1.083 -1.033) + (xy 1.085 -1.04) + (xy 1.088 -1.046) + (xy 1.092 -1.052) + (xy 1.095 -1.057) + (xy 1.099 -1.063) + (xy 1.103 -1.068) + (xy 1.107 -1.073) + (xy 1.112 -1.078) + (xy 1.117 -1.083) + (xy 1.122 -1.087) + (xy 1.127 -1.091) + (xy 1.133 -1.095) + (xy 1.138 -1.098) + (xy 1.144 -1.102) + (xy 1.15 -1.105) + (xy 1.157 -1.107) + (xy 1.163 -1.109) + (xy 1.169 -1.111) + (xy 1.176 -1.113) + (xy 1.182 -1.114) + (xy 1.189 -1.115) + (xy 1.196 -1.115) + (xy 1.203 -1.116) + (xy 1.209 -1.115) + (xy 1.215 -1.115) + (xy 1.875 -1.115) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy 1.875 -0.615) + (xy 1.875 -0.385) + (xy 1.215 -0.385) + (xy 1.209 -0.385) + (xy 1.203 -0.384) + (xy 1.196 -0.385) + (xy 1.189 -0.385) + (xy 1.182 -0.386) + (xy 1.176 -0.387) + (xy 1.169 -0.389) + (xy 1.163 -0.391) + (xy 1.157 -0.393) + (xy 1.15 -0.395) + (xy 1.144 -0.398) + (xy 1.138 -0.402) + (xy 1.133 -0.405) + (xy 1.127 -0.409) + (xy 1.122 -0.413) + (xy 1.117 -0.417) + (xy 1.112 -0.422) + (xy 1.107 -0.427) + (xy 1.103 -0.432) + (xy 1.099 -0.437) + (xy 1.095 -0.443) + (xy 1.092 -0.448) + (xy 1.088 -0.454) + (xy 1.085 -0.46) + (xy 1.083 -0.467) + (xy 1.081 -0.473) + (xy 1.079 -0.479) + (xy 1.077 -0.486) + (xy 1.076 -0.492) + (xy 1.075 -0.5) + (xy 1.076 -0.508) + (xy 1.077 -0.514) + (xy 1.079 -0.521) + (xy 1.081 -0.527) + (xy 1.083 -0.533) + (xy 1.085 -0.54) + (xy 1.088 -0.546) + (xy 1.092 -0.552) + (xy 1.095 -0.557) + (xy 1.099 -0.563) + (xy 1.103 -0.568) + (xy 1.107 -0.573) + (xy 1.112 -0.578) + (xy 1.117 -0.583) + (xy 1.122 -0.587) + (xy 1.127 -0.591) + (xy 1.133 -0.595) + (xy 1.138 -0.598) + (xy 1.144 -0.602) + (xy 1.15 -0.605) + (xy 1.157 -0.607) + (xy 1.163 -0.609) + (xy 1.169 -0.611) + (xy 1.176 -0.613) + (xy 1.182 -0.614) + (xy 1.189 -0.615) + (xy 1.196 -0.615) + (xy 1.203 -0.616) + (xy 1.209 -0.615) + (xy 1.215 -0.615) + (xy 1.875 -0.615) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy 1.875 -0.115) + (xy 1.875 0.115) + (xy 1.215 0.115) + (xy 1.209 0.115) + (xy 1.203 0.116) + (xy 1.196 0.115) + (xy 1.189 0.115) + (xy 1.182 0.114) + (xy 1.176 0.113) + (xy 1.169 0.111) + (xy 1.163 0.109) + (xy 1.157 0.107) + (xy 1.15 0.105) + (xy 1.144 0.102) + (xy 1.138 0.098) + (xy 1.133 0.095) + (xy 1.127 0.091) + (xy 1.122 0.087) + (xy 1.117 0.083) + (xy 1.112 0.078) + (xy 1.107 0.073) + (xy 1.103 0.068) + (xy 1.099 0.063) + (xy 1.095 0.057) + (xy 1.092 0.052) + (xy 1.088 0.046) + (xy 1.085 0.04) + (xy 1.083 0.033) + (xy 1.081 0.027) + (xy 1.079 0.021) + (xy 1.077 0.014) + (xy 1.076 0.008) + (xy 1.075 0.0) + (xy 1.076 -0.008) + (xy 1.077 -0.014) + (xy 1.079 -0.021) + (xy 1.081 -0.027) + (xy 1.083 -0.033) + (xy 1.085 -0.04) + (xy 1.088 -0.046) + (xy 1.092 -0.052) + (xy 1.095 -0.057) + (xy 1.099 -0.063) + (xy 1.103 -0.068) + (xy 1.107 -0.073) + (xy 1.112 -0.078) + (xy 1.117 -0.083) + (xy 1.122 -0.087) + (xy 1.127 -0.091) + (xy 1.133 -0.095) + (xy 1.138 -0.098) + (xy 1.144 -0.102) + (xy 1.15 -0.105) + (xy 1.157 -0.107) + (xy 1.163 -0.109) + (xy 1.169 -0.111) + (xy 1.176 -0.113) + (xy 1.182 -0.114) + (xy 1.189 -0.115) + (xy 1.196 -0.115) + (xy 1.203 -0.116) + (xy 1.209 -0.115) + (xy 1.215 -0.115) + (xy 1.875 -0.115) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy 1.875 0.385) + (xy 1.875 0.615) + (xy 1.215 0.615) + (xy 1.209 0.615) + (xy 1.203 0.616) + (xy 1.196 0.615) + (xy 1.189 0.615) + (xy 1.182 0.614) + (xy 1.176 0.613) + (xy 1.169 0.611) + (xy 1.163 0.609) + (xy 1.157 0.607) + (xy 1.15 0.605) + (xy 1.144 0.602) + (xy 1.138 0.598) + (xy 1.133 0.595) + (xy 1.127 0.591) + (xy 1.122 0.587) + (xy 1.117 0.583) + (xy 1.112 0.578) + (xy 1.107 0.573) + (xy 1.103 0.568) + (xy 1.099 0.563) + (xy 1.095 0.557) + (xy 1.092 0.552) + (xy 1.088 0.546) + (xy 1.085 0.54) + (xy 1.083 0.533) + (xy 1.081 0.527) + (xy 1.079 0.521) + (xy 1.077 0.514) + (xy 1.076 0.508) + (xy 1.075 0.5) + (xy 1.076 0.492) + (xy 1.077 0.486) + (xy 1.079 0.479) + (xy 1.081 0.473) + (xy 1.083 0.467) + (xy 1.085 0.46) + (xy 1.088 0.454) + (xy 1.092 0.448) + (xy 1.095 0.443) + (xy 1.099 0.437) + (xy 1.103 0.432) + (xy 1.107 0.427) + (xy 1.112 0.422) + (xy 1.117 0.417) + (xy 1.122 0.413) + (xy 1.127 0.409) + (xy 1.133 0.405) + (xy 1.138 0.402) + (xy 1.144 0.398) + (xy 1.15 0.395) + (xy 1.157 0.393) + (xy 1.163 0.391) + (xy 1.169 0.389) + (xy 1.176 0.387) + (xy 1.182 0.386) + (xy 1.189 0.385) + (xy 1.196 0.385) + (xy 1.203 0.384) + (xy 1.209 0.385) + (xy 1.215 0.385) + (xy 1.875 0.385) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy 1.875 0.885) + (xy 1.875 1.115) + (xy 1.215 1.115) + (xy 1.209 1.115) + (xy 1.203 1.116) + (xy 1.196 1.115) + (xy 1.189 1.115) + (xy 1.182 1.114) + (xy 1.176 1.113) + (xy 1.169 1.111) + (xy 1.163 1.109) + (xy 1.157 1.107) + (xy 1.15 1.105) + (xy 1.144 1.102) + (xy 1.138 1.098) + (xy 1.133 1.095) + (xy 1.127 1.091) + (xy 1.122 1.087) + (xy 1.117 1.083) + (xy 1.112 1.078) + (xy 1.107 1.073) + (xy 1.103 1.068) + (xy 1.099 1.063) + (xy 1.095 1.057) + (xy 1.092 1.052) + (xy 1.088 1.046) + (xy 1.085 1.04) + (xy 1.083 1.033) + (xy 1.081 1.027) + (xy 1.079 1.021) + (xy 1.077 1.014) + (xy 1.076 1.008) + (xy 1.075 1.0) + (xy 1.076 0.992) + (xy 1.077 0.986) + (xy 1.079 0.979) + (xy 1.081 0.973) + (xy 1.083 0.967) + (xy 1.085 0.96) + (xy 1.088 0.954) + (xy 1.092 0.948) + (xy 1.095 0.943) + (xy 1.099 0.937) + (xy 1.103 0.932) + (xy 1.107 0.927) + (xy 1.112 0.922) + (xy 1.117 0.917) + (xy 1.122 0.913) + (xy 1.127 0.909) + (xy 1.133 0.905) + (xy 1.138 0.902) + (xy 1.144 0.898) + (xy 1.15 0.895) + (xy 1.157 0.893) + (xy 1.163 0.891) + (xy 1.169 0.889) + (xy 1.176 0.887) + (xy 1.182 0.886) + (xy 1.189 0.885) + (xy 1.196 0.885) + (xy 1.203 0.884) + (xy 1.209 0.885) + (xy 1.215 0.885) + (xy 1.875 0.885) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy -1.97 -1.21) + (xy -1.97 -0.79) + (xy -1.19 -0.79) + (xy -1.179 -0.79) + (xy -1.168 -0.791) + (xy -1.157 -0.793) + (xy -1.146 -0.795) + (xy -1.136 -0.797) + (xy -1.125 -0.8) + (xy -1.115 -0.804) + (xy -1.105 -0.808) + (xy -1.095 -0.813) + (xy -1.085 -0.818) + (xy -1.076 -0.824) + (xy -1.067 -0.83) + (xy -1.058 -0.837) + (xy -1.049 -0.844) + (xy -1.042 -0.852) + (xy -1.034 -0.859) + (xy -1.027 -0.868) + (xy -1.02 -0.877) + (xy -1.014 -0.886) + (xy -1.008 -0.895) + (xy -1.003 -0.905) + (xy -0.998 -0.915) + (xy -0.994 -0.925) + (xy -0.99 -0.935) + (xy -0.987 -0.946) + (xy -0.985 -0.956) + (xy -0.983 -0.967) + (xy -0.981 -0.978) + (xy -0.98 -0.989) + (xy -0.98 -1.0) + (xy -0.98 -1.011) + (xy -0.981 -1.022) + (xy -0.983 -1.033) + (xy -0.985 -1.044) + (xy -0.987 -1.054) + (xy -0.99 -1.065) + (xy -0.994 -1.075) + (xy -0.998 -1.085) + (xy -1.003 -1.095) + (xy -1.008 -1.105) + (xy -1.014 -1.114) + (xy -1.02 -1.123) + (xy -1.027 -1.132) + (xy -1.034 -1.141) + (xy -1.042 -1.148) + (xy -1.049 -1.156) + (xy -1.058 -1.163) + (xy -1.067 -1.17) + (xy -1.076 -1.176) + (xy -1.085 -1.182) + (xy -1.095 -1.187) + (xy -1.105 -1.192) + (xy -1.115 -1.196) + (xy -1.125 -1.2) + (xy -1.136 -1.203) + (xy -1.146 -1.205) + (xy -1.157 -1.207) + (xy -1.168 -1.209) + (xy -1.179 -1.21) + (xy -1.19 -1.21) + (xy -1.97 -1.21) + ) (layer F.Mask) (width 0.01) + ) + (fp_poly + (pts + (xy -1.97 -0.71) + (xy -1.97 -0.29) + (xy -1.19 -0.29) + (xy -1.179 -0.29) + (xy -1.168 -0.291) + (xy -1.157 -0.293) + (xy -1.146 -0.295) + (xy -1.136 -0.297) + (xy -1.125 -0.3) + (xy -1.115 -0.304) + (xy -1.105 -0.308) + (xy -1.095 -0.313) + (xy -1.085 -0.318) + (xy -1.076 -0.324) + (xy -1.067 -0.33) + (xy -1.058 -0.337) + (xy -1.049 -0.344) + (xy -1.042 -0.352) + (xy -1.034 -0.359) + (xy -1.027 -0.368) + (xy -1.02 -0.377) + (xy -1.014 -0.386) + (xy -1.008 -0.395) + (xy -1.003 -0.405) + (xy -0.998 -0.415) + (xy -0.994 -0.425) + (xy -0.99 -0.435) + (xy -0.987 -0.446) + (xy -0.985 -0.456) + (xy -0.983 -0.467) + (xy -0.981 -0.478) + (xy -0.98 -0.489) + (xy -0.98 -0.5) + (xy -0.98 -0.511) + (xy -0.981 -0.522) + (xy -0.983 -0.533) + (xy -0.985 -0.544) + (xy -0.987 -0.554) + (xy -0.99 -0.565) + (xy -0.994 -0.575) + (xy -0.998 -0.585) + (xy -1.003 -0.595) + (xy -1.008 -0.605) + (xy -1.014 -0.614) + (xy -1.02 -0.623) + (xy -1.027 -0.632) + (xy -1.034 -0.641) + (xy -1.042 -0.648) + (xy -1.049 -0.656) + (xy -1.058 -0.663) + (xy -1.067 -0.67) + (xy -1.076 -0.676) + (xy -1.085 -0.682) + (xy -1.095 -0.687) + (xy -1.105 -0.692) + (xy -1.115 -0.696) + (xy -1.125 -0.7) + (xy -1.136 -0.703) + (xy -1.146 -0.705) + (xy -1.157 -0.707) + (xy -1.168 -0.709) + (xy -1.179 -0.71) + (xy -1.19 -0.71) + (xy -1.97 -0.71) + ) (layer F.Mask) (width 0.01) + ) + (fp_poly + (pts + (xy -1.97 -0.21) + (xy -1.97 0.21) + (xy -1.19 0.21) + (xy -1.179 0.21) + (xy -1.168 0.209) + (xy -1.157 0.207) + (xy -1.146 0.205) + (xy -1.136 0.203) + (xy -1.125 0.2) + (xy -1.115 0.196) + (xy -1.105 0.192) + (xy -1.095 0.187) + (xy -1.085 0.182) + (xy -1.076 0.176) + (xy -1.067 0.17) + (xy -1.058 0.163) + (xy -1.049 0.156) + (xy -1.042 0.148) + (xy -1.034 0.141) + (xy -1.027 0.132) + (xy -1.02 0.123) + (xy -1.014 0.114) + (xy -1.008 0.105) + (xy -1.003 0.095) + (xy -0.998 0.085) + (xy -0.994 0.075) + (xy -0.99 0.065) + (xy -0.987 0.054) + (xy -0.985 0.044) + (xy -0.983 0.033) + (xy -0.981 0.022) + (xy -0.98 0.011) + (xy -0.98 0.0) + (xy -0.98 -0.011) + (xy -0.981 -0.022) + (xy -0.983 -0.033) + (xy -0.985 -0.044) + (xy -0.987 -0.054) + (xy -0.99 -0.065) + (xy -0.994 -0.075) + (xy -0.998 -0.085) + (xy -1.003 -0.095) + (xy -1.008 -0.105) + (xy -1.014 -0.114) + (xy -1.02 -0.123) + (xy -1.027 -0.132) + (xy -1.034 -0.141) + (xy -1.042 -0.148) + (xy -1.049 -0.156) + (xy -1.058 -0.163) + (xy -1.067 -0.17) + (xy -1.076 -0.176) + (xy -1.085 -0.182) + (xy -1.095 -0.187) + (xy -1.105 -0.192) + (xy -1.115 -0.196) + (xy -1.125 -0.2) + (xy -1.136 -0.203) + (xy -1.146 -0.205) + (xy -1.157 -0.207) + (xy -1.168 -0.209) + (xy -1.179 -0.21) + (xy -1.19 -0.21) + (xy -1.97 -0.21) + ) (layer F.Mask) (width 0.01) + ) + (fp_poly + (pts + (xy -1.97 0.29) + (xy -1.97 0.71) + (xy -1.19 0.71) + (xy -1.179 0.71) + (xy -1.168 0.709) + (xy -1.157 0.707) + (xy -1.146 0.705) + (xy -1.136 0.703) + (xy -1.125 0.7) + (xy -1.115 0.696) + (xy -1.105 0.692) + (xy -1.095 0.687) + (xy -1.085 0.682) + (xy -1.076 0.676) + (xy -1.067 0.67) + (xy -1.058 0.663) + (xy -1.049 0.656) + (xy -1.042 0.648) + (xy -1.034 0.641) + (xy -1.027 0.632) + (xy -1.02 0.623) + (xy -1.014 0.614) + (xy -1.008 0.605) + (xy -1.003 0.595) + (xy -0.998 0.585) + (xy -0.994 0.575) + (xy -0.99 0.565) + (xy -0.987 0.554) + (xy -0.985 0.544) + (xy -0.983 0.533) + (xy -0.981 0.522) + (xy -0.98 0.511) + (xy -0.98 0.5) + (xy -0.98 0.489) + (xy -0.981 0.478) + (xy -0.983 0.467) + (xy -0.985 0.456) + (xy -0.987 0.446) + (xy -0.99 0.435) + (xy -0.994 0.425) + (xy -0.998 0.415) + (xy -1.003 0.405) + (xy -1.008 0.395) + (xy -1.014 0.386) + (xy -1.02 0.377) + (xy -1.027 0.368) + (xy -1.034 0.359) + (xy -1.042 0.352) + (xy -1.049 0.344) + (xy -1.058 0.337) + (xy -1.067 0.33) + (xy -1.076 0.324) + (xy -1.085 0.318) + (xy -1.095 0.313) + (xy -1.105 0.308) + (xy -1.115 0.304) + (xy -1.125 0.3) + (xy -1.136 0.297) + (xy -1.146 0.295) + (xy -1.157 0.293) + (xy -1.168 0.291) + (xy -1.179 0.29) + (xy -1.19 0.29) + (xy -1.97 0.29) + ) (layer F.Mask) (width 0.01) + ) + (fp_poly + (pts + (xy -1.97 0.79) + (xy -1.97 1.21) + (xy -1.19 1.21) + (xy -1.179 1.21) + (xy -1.168 1.209) + (xy -1.157 1.207) + (xy -1.146 1.205) + (xy -1.136 1.203) + (xy -1.125 1.2) + (xy -1.115 1.196) + (xy -1.105 1.192) + (xy -1.095 1.187) + (xy -1.085 1.182) + (xy -1.076 1.176) + (xy -1.067 1.17) + (xy -1.058 1.163) + (xy -1.049 1.156) + (xy -1.042 1.148) + (xy -1.034 1.141) + (xy -1.027 1.132) + (xy -1.02 1.123) + (xy -1.014 1.114) + (xy -1.008 1.105) + (xy -1.003 1.095) + (xy -0.998 1.085) + (xy -0.994 1.075) + (xy -0.99 1.065) + (xy -0.987 1.054) + (xy -0.985 1.044) + (xy -0.983 1.033) + (xy -0.981 1.022) + (xy -0.98 1.011) + (xy -0.98 1.0) + (xy -0.98 0.989) + (xy -0.981 0.978) + (xy -0.983 0.967) + (xy -0.985 0.956) + (xy -0.987 0.946) + (xy -0.99 0.935) + (xy -0.994 0.925) + (xy -0.998 0.915) + (xy -1.003 0.905) + (xy -1.008 0.895) + (xy -1.014 0.886) + (xy -1.02 0.877) + (xy -1.027 0.868) + (xy -1.034 0.859) + (xy -1.042 0.852) + (xy -1.049 0.844) + (xy -1.058 0.837) + (xy -1.067 0.83) + (xy -1.076 0.824) + (xy -1.085 0.818) + (xy -1.095 0.813) + (xy -1.105 0.808) + (xy -1.115 0.804) + (xy -1.125 0.8) + (xy -1.136 0.797) + (xy -1.146 0.795) + (xy -1.157 0.793) + (xy -1.168 0.791) + (xy -1.179 0.79) + (xy -1.19 0.79) + (xy -1.97 0.79) + ) (layer F.Mask) (width 0.01) + ) + (fp_poly + (pts + (xy 1.97 -1.21) + (xy 1.97 -0.79) + (xy 1.19 -0.79) + (xy 1.179 -0.79) + (xy 1.168 -0.791) + (xy 1.157 -0.793) + (xy 1.146 -0.795) + (xy 1.136 -0.797) + (xy 1.125 -0.8) + (xy 1.115 -0.804) + (xy 1.105 -0.808) + (xy 1.095 -0.813) + (xy 1.085 -0.818) + (xy 1.076 -0.824) + (xy 1.067 -0.83) + (xy 1.058 -0.837) + (xy 1.049 -0.844) + (xy 1.042 -0.852) + (xy 1.034 -0.859) + (xy 1.027 -0.868) + (xy 1.02 -0.877) + (xy 1.014 -0.886) + (xy 1.008 -0.895) + (xy 1.003 -0.905) + (xy 0.998 -0.915) + (xy 0.994 -0.925) + (xy 0.99 -0.935) + (xy 0.987 -0.946) + (xy 0.985 -0.956) + (xy 0.983 -0.967) + (xy 0.981 -0.978) + (xy 0.98 -0.989) + (xy 0.98 -1.0) + (xy 0.98 -1.011) + (xy 0.981 -1.022) + (xy 0.983 -1.033) + (xy 0.985 -1.044) + (xy 0.987 -1.054) + (xy 0.99 -1.065) + (xy 0.994 -1.075) + (xy 0.998 -1.085) + (xy 1.003 -1.095) + (xy 1.008 -1.105) + (xy 1.014 -1.114) + (xy 1.02 -1.123) + (xy 1.027 -1.132) + (xy 1.034 -1.141) + (xy 1.042 -1.148) + (xy 1.049 -1.156) + (xy 1.058 -1.163) + (xy 1.067 -1.17) + (xy 1.076 -1.176) + (xy 1.085 -1.182) + (xy 1.095 -1.187) + (xy 1.105 -1.192) + (xy 1.115 -1.196) + (xy 1.125 -1.2) + (xy 1.136 -1.203) + (xy 1.146 -1.205) + (xy 1.157 -1.207) + (xy 1.168 -1.209) + (xy 1.179 -1.21) + (xy 1.19 -1.21) + (xy 1.97 -1.21) + ) (layer F.Mask) (width 0.01) + ) + (fp_poly + (pts + (xy 1.97 -0.71) + (xy 1.97 -0.29) + (xy 1.19 -0.29) + (xy 1.179 -0.29) + (xy 1.168 -0.291) + (xy 1.157 -0.293) + (xy 1.146 -0.295) + (xy 1.136 -0.297) + (xy 1.125 -0.3) + (xy 1.115 -0.304) + (xy 1.105 -0.308) + (xy 1.095 -0.313) + (xy 1.085 -0.318) + (xy 1.076 -0.324) + (xy 1.067 -0.33) + (xy 1.058 -0.337) + (xy 1.049 -0.344) + (xy 1.042 -0.352) + (xy 1.034 -0.359) + (xy 1.027 -0.368) + (xy 1.02 -0.377) + (xy 1.014 -0.386) + (xy 1.008 -0.395) + (xy 1.003 -0.405) + (xy 0.998 -0.415) + (xy 0.994 -0.425) + (xy 0.99 -0.435) + (xy 0.987 -0.446) + (xy 0.985 -0.456) + (xy 0.983 -0.467) + (xy 0.981 -0.478) + (xy 0.98 -0.489) + (xy 0.98 -0.5) + (xy 0.98 -0.511) + (xy 0.981 -0.522) + (xy 0.983 -0.533) + (xy 0.985 -0.544) + (xy 0.987 -0.554) + (xy 0.99 -0.565) + (xy 0.994 -0.575) + (xy 0.998 -0.585) + (xy 1.003 -0.595) + (xy 1.008 -0.605) + (xy 1.014 -0.614) + (xy 1.02 -0.623) + (xy 1.027 -0.632) + (xy 1.034 -0.641) + (xy 1.042 -0.648) + (xy 1.049 -0.656) + (xy 1.058 -0.663) + (xy 1.067 -0.67) + (xy 1.076 -0.676) + (xy 1.085 -0.682) + (xy 1.095 -0.687) + (xy 1.105 -0.692) + (xy 1.115 -0.696) + (xy 1.125 -0.7) + (xy 1.136 -0.703) + (xy 1.146 -0.705) + (xy 1.157 -0.707) + (xy 1.168 -0.709) + (xy 1.179 -0.71) + (xy 1.19 -0.71) + (xy 1.97 -0.71) + ) (layer F.Mask) (width 0.01) + ) + (fp_poly + (pts + (xy 1.97 -0.21) + (xy 1.97 0.21) + (xy 1.19 0.21) + (xy 1.179 0.21) + (xy 1.168 0.209) + (xy 1.157 0.207) + (xy 1.146 0.205) + (xy 1.136 0.203) + (xy 1.125 0.2) + (xy 1.115 0.196) + (xy 1.105 0.192) + (xy 1.095 0.187) + (xy 1.085 0.182) + (xy 1.076 0.176) + (xy 1.067 0.17) + (xy 1.058 0.163) + (xy 1.049 0.156) + (xy 1.042 0.148) + (xy 1.034 0.141) + (xy 1.027 0.132) + (xy 1.02 0.123) + (xy 1.014 0.114) + (xy 1.008 0.105) + (xy 1.003 0.095) + (xy 0.998 0.085) + (xy 0.994 0.075) + (xy 0.99 0.065) + (xy 0.987 0.054) + (xy 0.985 0.044) + (xy 0.983 0.033) + (xy 0.981 0.022) + (xy 0.98 0.011) + (xy 0.98 0.0) + (xy 0.98 -0.011) + (xy 0.981 -0.022) + (xy 0.983 -0.033) + (xy 0.985 -0.044) + (xy 0.987 -0.054) + (xy 0.99 -0.065) + (xy 0.994 -0.075) + (xy 0.998 -0.085) + (xy 1.003 -0.095) + (xy 1.008 -0.105) + (xy 1.014 -0.114) + (xy 1.02 -0.123) + (xy 1.027 -0.132) + (xy 1.034 -0.141) + (xy 1.042 -0.148) + (xy 1.049 -0.156) + (xy 1.058 -0.163) + (xy 1.067 -0.17) + (xy 1.076 -0.176) + (xy 1.085 -0.182) + (xy 1.095 -0.187) + (xy 1.105 -0.192) + (xy 1.115 -0.196) + (xy 1.125 -0.2) + (xy 1.136 -0.203) + (xy 1.146 -0.205) + (xy 1.157 -0.207) + (xy 1.168 -0.209) + (xy 1.179 -0.21) + (xy 1.19 -0.21) + (xy 1.97 -0.21) + ) (layer F.Mask) (width 0.01) + ) + (fp_poly + (pts + (xy 1.97 0.29) + (xy 1.97 0.71) + (xy 1.19 0.71) + (xy 1.179 0.71) + (xy 1.168 0.709) + (xy 1.157 0.707) + (xy 1.146 0.705) + (xy 1.136 0.703) + (xy 1.125 0.7) + (xy 1.115 0.696) + (xy 1.105 0.692) + (xy 1.095 0.687) + (xy 1.085 0.682) + (xy 1.076 0.676) + (xy 1.067 0.67) + (xy 1.058 0.663) + (xy 1.049 0.656) + (xy 1.042 0.648) + (xy 1.034 0.641) + (xy 1.027 0.632) + (xy 1.02 0.623) + (xy 1.014 0.614) + (xy 1.008 0.605) + (xy 1.003 0.595) + (xy 0.998 0.585) + (xy 0.994 0.575) + (xy 0.99 0.565) + (xy 0.987 0.554) + (xy 0.985 0.544) + (xy 0.983 0.533) + (xy 0.981 0.522) + (xy 0.98 0.511) + (xy 0.98 0.5) + (xy 0.98 0.489) + (xy 0.981 0.478) + (xy 0.983 0.467) + (xy 0.985 0.456) + (xy 0.987 0.446) + (xy 0.99 0.435) + (xy 0.994 0.425) + (xy 0.998 0.415) + (xy 1.003 0.405) + (xy 1.008 0.395) + (xy 1.014 0.386) + (xy 1.02 0.377) + (xy 1.027 0.368) + (xy 1.034 0.359) + (xy 1.042 0.352) + (xy 1.049 0.344) + (xy 1.058 0.337) + (xy 1.067 0.33) + (xy 1.076 0.324) + (xy 1.085 0.318) + (xy 1.095 0.313) + (xy 1.105 0.308) + (xy 1.115 0.304) + (xy 1.125 0.3) + (xy 1.136 0.297) + (xy 1.146 0.295) + (xy 1.157 0.293) + (xy 1.168 0.291) + (xy 1.179 0.29) + (xy 1.19 0.29) + (xy 1.97 0.29) + ) (layer F.Mask) (width 0.01) + ) + (fp_poly + (pts + (xy 1.97 0.79) + (xy 1.97 1.21) + (xy 1.19 1.21) + (xy 1.179 1.21) + (xy 1.168 1.209) + (xy 1.157 1.207) + (xy 1.146 1.205) + (xy 1.136 1.203) + (xy 1.125 1.2) + (xy 1.115 1.196) + (xy 1.105 1.192) + (xy 1.095 1.187) + (xy 1.085 1.182) + (xy 1.076 1.176) + (xy 1.067 1.17) + (xy 1.058 1.163) + (xy 1.049 1.156) + (xy 1.042 1.148) + (xy 1.034 1.141) + (xy 1.027 1.132) + (xy 1.02 1.123) + (xy 1.014 1.114) + (xy 1.008 1.105) + (xy 1.003 1.095) + (xy 0.998 1.085) + (xy 0.994 1.075) + (xy 0.99 1.065) + (xy 0.987 1.054) + (xy 0.985 1.044) + (xy 0.983 1.033) + (xy 0.981 1.022) + (xy 0.98 1.011) + (xy 0.98 1.0) + (xy 0.98 0.989) + (xy 0.981 0.978) + (xy 0.983 0.967) + (xy 0.985 0.956) + (xy 0.987 0.946) + (xy 0.99 0.935) + (xy 0.994 0.925) + (xy 0.998 0.915) + (xy 1.003 0.905) + (xy 1.008 0.895) + (xy 1.014 0.886) + (xy 1.02 0.877) + (xy 1.027 0.868) + (xy 1.034 0.859) + (xy 1.042 0.852) + (xy 1.049 0.844) + (xy 1.058 0.837) + (xy 1.067 0.83) + (xy 1.076 0.824) + (xy 1.085 0.818) + (xy 1.095 0.813) + (xy 1.105 0.808) + (xy 1.115 0.804) + (xy 1.125 0.8) + (xy 1.136 0.797) + (xy 1.146 0.795) + (xy 1.157 0.793) + (xy 1.168 0.791) + (xy 1.179 0.79) + (xy 1.19 0.79) + (xy 1.97 0.79) + ) (layer F.Mask) (width 0.01) + ) + (fp_poly + (pts + (xy -0.92 -1.145) + (xy -0.795 -1.145) + (xy -0.795 -1.845) + (xy -0.405 -1.845) + (xy -0.405 -1.145) + (xy -0.395 -1.145) + (xy -0.395 -1.845) + (xy -0.005 -1.845) + (xy -0.005 -1.145) + (xy 0.005 -1.145) + (xy 0.005 -1.845) + (xy 0.395 -1.845) + (xy 0.395 -1.145) + (xy 0.405 -1.145) + (xy 0.405 -1.845) + (xy 0.795 -1.845) + (xy 0.795 -1.145) + (xy 0.92 -1.145) + (xy 0.92 1.145) + (xy 0.795 1.145) + (xy 0.795 1.845) + (xy 0.405 1.845) + (xy 0.405 1.145) + (xy 0.395 1.145) + (xy 0.395 1.845) + (xy 0.005 1.845) + (xy 0.005 1.145) + (xy -0.005 1.145) + (xy -0.005 1.845) + (xy -0.395 1.845) + (xy -0.395 1.145) + (xy -0.405 1.145) + (xy -0.405 1.845) + (xy -0.795 1.845) + (xy -0.795 1.145) + (xy -0.92 1.145) + ) (layer F.Mask) (width 0.01) + ) + (fp_poly + (pts + (xy -0.76 -1.01) + (xy -0.11 -1.01) + (xy -0.11 -0.11) + (xy -0.76 -0.11) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy -0.76 0.11) + (xy -0.11 0.11) + (xy -0.11 1.01) + (xy -0.76 1.01) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy 0.11 -1.01) + (xy 0.76 -1.01) + (xy 0.76 -0.11) + (xy 0.11 -0.11) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy 0.11 0.11) + (xy 0.76 0.11) + (xy 0.76 1.01) + (xy 0.11 1.01) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy -0.315 -1.76) + (xy -0.085 -1.76) + (xy -0.085 -1.16) + (xy -0.315 -1.16) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy -0.715 -1.76) + (xy -0.485 -1.76) + (xy -0.485 -1.16) + (xy -0.715 -1.16) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy 0.085 -1.76) + (xy 0.315 -1.76) + (xy 0.315 -1.16) + (xy 0.085 -1.16) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy 0.485 -1.76) + (xy 0.715 -1.76) + (xy 0.715 -1.16) + (xy 0.485 -1.16) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy -0.715 1.16) + (xy -0.485 1.16) + (xy -0.485 1.76) + (xy -0.715 1.76) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy -0.315 1.16) + (xy -0.085 1.16) + (xy -0.085 1.76) + (xy -0.315 1.76) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy 0.085 1.16) + (xy 0.315 1.16) + (xy 0.315 1.76) + (xy 0.085 1.76) + ) (layer F.Paste) (width 0.01) + ) + (fp_poly + (pts + (xy 0.485 1.16) + (xy 0.715 1.16) + (xy 0.715 1.76) + (xy 0.485 1.76) + ) (layer F.Paste) (width 0.01) + ) + (fp_line (start -1.5 -1.5) (end -1.5 -1.46) (layer F.SilkS) (width 0.127)) + (fp_line (start 1.5 -1.5) (end 1.5 -1.46) (layer F.SilkS) (width 0.127)) + (fp_line (start 1.5 1.5) (end 1.5 1.46) (layer F.SilkS) (width 0.127)) + (fp_line (start -1.5 1.5) (end -1.5 1.46) (layer F.SilkS) (width 0.127)) + (fp_circle (center -2.4 -1.12) (end -2.32 -1.12) (layer F.SilkS) (width 0.16)) + (fp_circle (center -2.4 -1.12) (end -2.32 -1.12) (layer F.Fab) (width 0.16)) +) \ No newline at end of file diff --git a/Hardware/FabReader2/Library/TPS63060DSCT/License.txt b/Hardware/FabReader2/Library/TPS63060DSCT/License.txt new file mode 100644 index 0000000..9cb6384 --- /dev/null +++ b/Hardware/FabReader2/Library/TPS63060DSCT/License.txt @@ -0,0 +1,24 @@ +BY ACCESSING OR USING THESE SYMBOLS & FOOTPRINTS ("MODELS"), YOU ARE ACKNOWLEDGING THAT YOU HAVE READ, FULLY UNDERSTAND AND AGREE TO THESE TERMS AND CONDITIONS (the "Agreement"), WHICH CONSTITUTE A BINDING AGREEMENT BETWEEN YOU AND SNAPEDA, INC., ENTERED INTO ON THE DATE OF SUCH OCCURRENCE (the "Effective Date"). IF YOU ARE ACCESSING OR USING THESE FILES ON BEHALF OF AN ENTITY, YOU REPRESENT THAT YOU HAVE THE RIGHT, AUTHORITY, AND CAPACITY TO BIND SUCH ENTITY TO THIS AGREEMENT AND HEREBY DO SO. IF YOU DO NOT AGREE WITH ANY OF THE TERMS OR CONDITIONS OF THIS AGREEMENT, YOU MUST NOT USE ANY PART OF THESE MODELS. + +1. Design License + +You and your sub-licensees are hereby licensed to design, manufacture, use and distribute, circuit board designs and circuit boards formed by combining Models provided by SnapEDA with other circuit elements of your choosing. You may then convey such combinations under licensing terms of your choice.  + +Individual Models remain the intellectual property of SnapEDA, Inc. You shall not (and shall not permit or encourage any third party to) to do any of the following : + +(a) sell, assign, lease, lend, rent, issue, sublicense, make available, or otherwise distribute to any third party, or publicly perform, display or communicate, the Models (for example, by uploading Models to another website or software application);
 +(b) remove, alter, or conceal, any copyright, trademark, or other proprietary rights notice or legend displayed or contained in the individual Models. + +For further clarity, once integrated into a schematic design or PCB layout, Models may be modified freely for the purpose of designing a circuit board.  + + +2. Limitation of Liability + +IN NO EVENT WILL SNAPEDA OR OUR SUBSIDIARIES, AGENTS, SUCCESSORS, THIRD PARTY PROVIDERS, AND/OR ANY OF THE FOREGOING ENTITIES' RESPECTIVE DIRECTORS, OFFICERS, EMPLOYEES, AGENTS, REPRESENTATIVES, CUSTOMERS, SUPPLIERS, OR LICENSORS BE RESPONSIBLE OR LIABLE UNDER, OR OTHERWISE IN CONNECTION WITH THIS AGREEMENT, FOR: + +(a) ANY CONSEQUENTIAL, INDIRECT, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES; +(b) ANY LOSS OF PROFITS, LOSS OF BUSINESS, LOSS OF REVENUE, OR LOSS OF ANTICIPATED SAVINGS; +(c) ANY LOSS OF, OR DAMAGE TO, DATA, REPUTATION, OR GOODWILL; AND/OR +(d) THE COST OF PROCURING ANY SUBSTITUTE GOODS OR SERVICES. + +THE COMBINED AGGREGATE LIABILITY OF SNAPEDA AND ALL SNAPEDA CONTENT AFFILIATES UNDER, OR OTHERWISE IN CONNECTION WITH, THIS AGREEMENT SHALL NOT EXCEED THE TOTAL AMOUNT OF FEES RECEIVED BY SNAPEDA FROM YOU IN THE PREVIOUS TWELVE (12) MONTHS. THE FOREGOING EXCLUSIONS AND LIMITATIONS SHALL APPLY: (a) EVEN IF SNAPEDA OR ANY SNAPEDA CONTENT AFFILIATE HAS BEEN ADVISED, OR SHOULD HAVE BEEN AWARE, OF THE POSSIBILITY OF LOSSES, DAMAGES, OR COSTS; (b) EVEN IF ANY REMEDY IN THIS AGREEMENT FAILS OF ITS ESSENTIAL PURPOSE; AND (c) REGARDLESS OF THE THEORY OR BASIS OF LIABILITY (INCLUDING WITHOUT LIMITATION BREACH OF CONTRACT, TORT, NEGLIGENCE, AND STRICT LIABILITY). \ No newline at end of file diff --git a/Hardware/FabReader2/Library/TPS63060DSCT/TPS63060DSCT.kicad_sym b/Hardware/FabReader2/Library/TPS63060DSCT/TPS63060DSCT.kicad_sym new file mode 100644 index 0000000..fbca49c --- /dev/null +++ b/Hardware/FabReader2/Library/TPS63060DSCT/TPS63060DSCT.kicad_sym @@ -0,0 +1,81 @@ +(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor) + (symbol "TPS63060DSCT" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) + (property "Reference" "U" (id 0) (at -12.7 18.542 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Value" "TPS63060DSCT" (id 1) (at -12.7 -18.542 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Footprint" "CONV_TPS63060DSCT" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "Datasheet" "" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "PARTREV" "B" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "MANUFACTURER" "Texas Instruments" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "MAXIMUM_PACKAGE_HEIGHT" "0.8 mm" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "STANDARD" "Manufacturer Recommendations" (id 7) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "ki_locked" "" (id 8) (at 0 0 0) + (effects (font (size 1.27 1.27))) + ) + (symbol "TPS63060DSCT_0_0" + (rectangle (start -12.7 -17.78) (end 12.7 17.78) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type background)) + ) + (pin passive line (at -17.78 -5.08 0) (length 5.08) + (name "L1" (effects (font (size 1.016 1.016)))) + (number "1" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -17.78 -7.62 0) (length 5.08) + (name "L2" (effects (font (size 1.016 1.016)))) + (number "10" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -15.24 180) (length 5.08) + (name "PGND" (effects (font (size 1.016 1.016)))) + (number "11" (effects (font (size 1.016 1.016)))) + ) + (pin input line (at -17.78 15.24 0) (length 5.08) + (name "VIN" (effects (font (size 1.016 1.016)))) + (number "2" (effects (font (size 1.016 1.016)))) + ) + (pin input line (at -17.78 10.16 0) (length 5.08) + (name "EN" (effects (font (size 1.016 1.016)))) + (number "3" (effects (font (size 1.016 1.016)))) + ) + (pin input line (at -17.78 5.08 0) (length 5.08) + (name "PS/SYNC" (effects (font (size 1.016 1.016)))) + (number "4" (effects (font (size 1.016 1.016)))) + ) + (pin output line (at 17.78 5.08 180) (length 5.08) + (name "PG" (effects (font (size 1.016 1.016)))) + (number "5" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -17.78 0 0) (length 5.08) + (name "VAUX" (effects (font (size 1.016 1.016)))) + (number "6" (effects (font (size 1.016 1.016)))) + ) + (pin power_in line (at 17.78 -12.7 180) (length 5.08) + (name "GND" (effects (font (size 1.016 1.016)))) + (number "7" (effects (font (size 1.016 1.016)))) + ) + (pin input line (at 17.78 10.16 180) (length 5.08) + (name "FB" (effects (font (size 1.016 1.016)))) + (number "8" (effects (font (size 1.016 1.016)))) + ) + (pin output line (at 17.78 15.24 180) (length 5.08) + (name "VOUT" (effects (font (size 1.016 1.016)))) + (number "9" (effects (font (size 1.016 1.016)))) + ) + ) + ) +) diff --git a/Hardware/FabReader2/Library/TPS63060DSCT/TPS63060DSCT.lib b/Hardware/FabReader2/Library/TPS63060DSCT/TPS63060DSCT.lib new file mode 100644 index 0000000..2be0fa8 --- /dev/null +++ b/Hardware/FabReader2/Library/TPS63060DSCT/TPS63060DSCT.lib @@ -0,0 +1,33 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +#(c) SnapEDA 2016 (snapeda.com) +#This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Design Exception 1.0 +# +# TPS63060DSCT +# +DEF TPS63060DSCT U 0 40 Y Y 1 L N +F0 "U" -500 730 50 H V L BNN +F1 "TPS63060DSCT" -500 -730 50 H V L BNN +F2 "CONV_TPS63060DSCT" 0 0 50 H I L BNN +F3 "" 0 0 50 H I L BNN +F4 "B" 0 0 50 H I L BNN "PARTREV" +F5 "Texas Instruments" 0 0 50 H I L BNN "MANUFACTURER" +F6 "0.8 mm" 0 0 50 H I L BNN "MAXIMUM_PACKAGE_HEIGHT" +F7 "Manufacturer Recommendations" 0 0 50 H I L BNN "STANDARD" +DRAW +S -500 -700 500 700 0 0 10 f +X VAUX 6 -700 0 200 R 40 40 0 0 P +X GND 7 700 -500 200 L 40 40 0 0 W +X PGND 11 700 -600 200 L 40 40 0 0 W +X VIN 2 -700 600 200 R 40 40 0 0 I +X EN 3 -700 400 200 R 40 40 0 0 I +X VOUT 9 700 600 200 L 40 40 0 0 O +X PS/SYNC 4 -700 200 200 R 40 40 0 0 I +X PG 5 700 200 200 L 40 40 0 0 O +X L1 1 -700 -200 200 R 40 40 0 0 P +X L2 10 -700 -300 200 R 40 40 0 0 P +X FB 8 700 400 200 L 40 40 0 0 I +ENDDRAW +ENDDEF +# +# End Library \ No newline at end of file diff --git a/Hardware/FabReader2/Library/TPS63060DSCT/TPS63060DSCT.step b/Hardware/FabReader2/Library/TPS63060DSCT/TPS63060DSCT.step new file mode 100644 index 0000000..f316940 --- /dev/null +++ b/Hardware/FabReader2/Library/TPS63060DSCT/TPS63060DSCT.step @@ -0,0 +1,7322 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP214' ), + '1' ); +FILE_NAME ('DSC10 (4207393 e 01 11).STEP', + '2020-09-23T17:29:04', + ( '' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2017', + '' ); +FILE_SCHEMA (( 'AUTOMOTIVE_DESIGN' )); +ENDSEC; + +DATA; +#1 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2 = ORIENTED_EDGE ( 'NONE', *, *, #5857, .F. ) ; +#3 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, 0.1199999999999996600 ) ) ; +#4 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6 = ORIENTED_EDGE ( 'NONE', *, *, #5681, .T. ) ; +#7 = EDGE_CURVE ( 'NONE', #1529, #4480, #537, .T. ) ; +#8 = EDGE_CURVE ( 'NONE', #5711, #514, #6380, .T. ) ; +#9 = EDGE_CURVE ( 'NONE', #1902, #751, #3062, .T. ) ; +#10 = ADVANCED_FACE ( 'NONE', ( #2802 ), #6725, .F. ) ; +#11 = VERTEX_POINT ( 'NONE', #258 ) ; +#12 = STYLED_ITEM ( 'NONE', ( #2333 ), #4427 ) ; +#13 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.120000000000000100 ) ) ; +#14 = LINE ( 'NONE', #706, #6014 ) ; +#15 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, -0.3800000000000004500 ) ) ; +#16 = AXIS2_PLACEMENT_3D ( 'NONE', #549, #2218, #2790 ) ; +#17 = ORIENTED_EDGE ( 'NONE', *, *, #2077, .F. ) ; +#18 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#19 = FILL_AREA_STYLE ('',( #6136 ) ) ; +#20 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.2000000000000000900, 1.075000000000000000 ) ) ; +#21 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, 0.9999999999999997800 ) ) ; +#22 = AXIS2_PLACEMENT_3D ( 'NONE', #4873, #880, #2004 ) ; +#23 = EDGE_CURVE ( 'NONE', #610, #4109, #1485, .T. ) ; +#24 = VERTEX_POINT ( 'NONE', #3621 ) ; +#25 = VERTEX_POINT ( 'NONE', #1984 ) ; +#26 = LINE ( 'NONE', #6309, #536 ) ; +#27 = ORIENTED_EDGE ( 'NONE', *, *, #5431, .T. ) ; +#28 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, -0.1200000000000000900 ) ) ; +#29 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.8800000000000003400 ) ) ; +#30 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#31 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#32 = AXIS2_PLACEMENT_3D ( 'NONE', #1583, #6207, #6772 ) ; +#33 = ORIENTED_EDGE ( 'NONE', *, *, #2459, .F. ) ; +#34 = SURFACE_SIDE_STYLE ('',( #1297 ) ) ; +#35 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#36 = ORIENTED_EDGE ( 'NONE', *, *, #6238, .T. ) ; +#37 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#38 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#39 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#40 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3946, 'distance_accuracy_value', 'NONE'); +#41 = ADVANCED_FACE ( 'NONE', ( #197 ), #281, .T. ) ; +#42 = VERTEX_POINT ( 'NONE', #3681 ) ; +#43 = VECTOR ( 'NONE', #2840, 1000.000000000000000 ) ; +#44 = VECTOR ( 'NONE', #6485, 1000.000000000000000 ) ; +#45 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#46 = LINE ( 'NONE', #5448, #5325 ) ; +#47 = EDGE_CURVE ( 'NONE', #555, #4363, #2363, .T. ) ; +#48 = EDGE_CURVE ( 'NONE', #5508, #7304, #2101, .T. ) ; +#49 = EDGE_CURVE ( 'NONE', #6084, #1053, #6902, .T. ) ; +#50 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#51 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.1199999999999996600 ) ) ; +#52 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#53 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#54 = VERTEX_POINT ( 'NONE', #4741 ) ; +#55 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#56 = LINE ( 'NONE', #6011, #5075 ) ; +#57 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#58 = ORIENTED_EDGE ( 'NONE', *, *, #5683, .F. ) ; +#59 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#60 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#61 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#62 = VECTOR ( 'NONE', #2222, 1000.000000000000000 ) ; +#63 = ORIENTED_EDGE ( 'NONE', *, *, #463, .T. ) ; +#64 = PLANE ( 'NONE', #4583 ) ; +#65 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.05000000000000012800, 1.074999999999999700 ) ) ; +#66 = SURFACE_STYLE_FILL_AREA ( #1785 ) ; +#67 = ORIENTED_EDGE ( 'NONE', *, *, #4140, .T. ) ; +#68 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, -0.0000000000000000000, -1.500000000000000000 ) ) ; +#69 = FILL_AREA_STYLE ('',( #2870 ) ) ; +#70 = EDGE_LOOP ( 'NONE', ( #2067, #7145, #7230, #1552 ) ) ; +#71 = SURFACE_STYLE_FILL_AREA ( #1920 ) ; +#72 = ORIENTED_EDGE ( 'NONE', *, *, #6616, .F. ) ; +#73 = STYLED_ITEM ( 'NONE', ( #5791 ), #1463 ) ; +#74 = CARTESIAN_POINT ( 'NONE', ( -1.471417234087468300E-016, 0.05000000000000000300, -0.3799999999999998400 ) ) ; +#75 = FACE_OUTER_BOUND ( 'NONE', #4405, .T. ) ; +#76 = PLANE ( 'NONE', #384 ) ; +#77 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, 0.6199999999999996600 ) ) ; +#78 = VERTEX_POINT ( 'NONE', #6452 ) ; +#79 = ORIENTED_EDGE ( 'NONE', *, *, #7123, .F. ) ; +#80 = ADVANCED_FACE ( 'NONE', ( #1579 ), #5866, .F. ) ; +#81 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, 1.119999999999999400 ) ) ; +#82 = ORIENTED_EDGE ( 'NONE', *, *, #5153, .T. ) ; +#83 = VERTEX_POINT ( 'NONE', #4214 ) ; +#84 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#85 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#86 = EDGE_CURVE ( 'NONE', #7055, #3201, #4684, .T. ) ; +#87 = FILL_AREA_STYLE_COLOUR ( '', #7283 ) ; +#88 = EDGE_LOOP ( 'NONE', ( #2237, #838, #5110, #5733, #509, #2433, #6123, #1086, #795, #3380, #1478, #5465, #866, #6443, #1655, #3659, #4860, #1160, #6076, #5498 ) ) ; +#89 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#90 = ORIENTED_EDGE ( 'NONE', *, *, #3259, .T. ) ; +#91 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999998200, 0.0000000000000000000, 1.074999999999999700 ) ) ; +#92 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 2.940894014733149000, -1.075000000000000200 ) ) ; +#93 = SURFACE_SIDE_STYLE ('',( #3629 ) ) ; +#94 = EDGE_LOOP ( 'NONE', ( #2709, #5373, #214, #2932 ) ) ; +#95 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7032 ), #7269 ) ; +#96 = EDGE_CURVE ( 'NONE', #5025, #3664, #1222, .T. ) ; +#97 = EDGE_CURVE ( 'NONE', #727, #11, #3422, .T. ) ; +#98 = EDGE_CURVE ( 'NONE', #2090, #1911, #5403, .T. ) ; +#99 = ORIENTED_EDGE ( 'NONE', *, *, #4914, .T. ) ; +#100 = AXIS2_PLACEMENT_3D ( 'NONE', #2451, #1351, #1845 ) ; +#101 = VERTEX_POINT ( 'NONE', #933 ) ; +#102 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#103 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.8000000000000000400, -0.9250000000000004900 ) ) ; +#104 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, 0.6199999999999996600 ) ) ; +#105 = CIRCLE ( 'NONE', #2607, 0.1750000000000000200 ) ; +#106 = PRESENTATION_STYLE_ASSIGNMENT (( #5566 ) ) ; +#107 = AXIS2_PLACEMENT_3D ( 'NONE', #5735, #2357, #1253 ) ; +#108 = ORIENTED_EDGE ( 'NONE', *, *, #5273, .F. ) ; +#109 = ORIENTED_EDGE ( 'NONE', *, *, #6566, .F. ) ; +#110 = ORIENTED_EDGE ( 'NONE', *, *, #7075, .T. ) ; +#111 = VECTOR ( 'NONE', #3721, 1000.000000000000000 ) ; +#112 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.2000000000000000900, 1.074999999999999500 ) ) ; +#113 = PRESENTATION_STYLE_ASSIGNMENT (( #1383 ) ) ; +#114 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4540 ) ) ; +#115 = ADVANCED_FACE ( 'NONE', ( #883 ), #7136, .F. ) ; +#116 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#117 = DIRECTION ( 'NONE', ( -1.275531967630005200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#118 = ORIENTED_EDGE ( 'NONE', *, *, #5824, .T. ) ; +#119 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#120 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#121 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, -1.000000000000000200 ) ) ; +#122 = VECTOR ( 'NONE', #5470, 1000.000000000000000 ) ; +#123 = FACE_OUTER_BOUND ( 'NONE', #931, .T. ) ; +#124 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#125 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#126 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 0.2000000000000000900, -1.075000000000000200 ) ) ; +#127 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1582, 'distance_accuracy_value', 'NONE'); +#128 = ORIENTED_EDGE ( 'NONE', *, *, #3513, .F. ) ; +#129 = VECTOR ( 'NONE', #5584, 1000.000000000000000 ) ; +#130 = LINE ( 'NONE', #4883, #3357 ) ; +#131 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#132 = FACE_OUTER_BOUND ( 'NONE', #945, .T. ) ; +#133 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#134 = SURFACE_STYLE_FILL_AREA ( #6622 ) ; +#135 = EDGE_LOOP ( 'NONE', ( #2632, #3742, #4113, #1649 ) ) ; +#136 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#137 = LINE ( 'NONE', #3127, #3809 ) ; +#138 = VECTOR ( 'NONE', #6568, 1000.000000000000000 ) ; +#139 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3114 ), #5282 ) ; +#140 = EDGE_CURVE ( 'NONE', #757, #1397, #5047, .T. ) ; +#141 = EDGE_CURVE ( 'NONE', #101, #1814, #1399, .T. ) ; +#142 = EDGE_CURVE ( 'NONE', #3923, #7103, #284, .T. ) ; +#143 = LINE ( 'NONE', #4613, #5976 ) ; +#144 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#145 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#146 = SURFACE_SIDE_STYLE ('',( #4026 ) ) ; +#147 = ORIENTED_EDGE ( 'NONE', *, *, #3212, .T. ) ; +#148 = ADVANCED_FACE ( 'NONE', ( #7250 ), #3706, .T. ) ; +#149 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2181 ), #6945 ) ; +#150 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.05000000000000012800, 1.075000000000000000 ) ) ; +#151 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#152 = FACE_OUTER_BOUND ( 'NONE', #5722, .T. ) ; +#153 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.8000000000000000400, 0.0000000000000000000 ) ) ; +#155 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#154 = LINE ( 'NONE', #1671, #3642 ) ; +#156 = ORIENTED_EDGE ( 'NONE', *, *, #3537, .F. ) ; +#157 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#158 = VERTEX_POINT ( 'NONE', #6017 ) ; +#159 = STYLED_ITEM ( 'NONE', ( #6833 ), #2364 ) ; +#160 = EDGE_CURVE ( 'NONE', #3239, #355, #5038, .T. ) ; +#161 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#162 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.0000000000000000000, -1.074999999999999700 ) ) ; +#163 = ORIENTED_EDGE ( 'NONE', *, *, #7260, .T. ) ; +#164 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#165 = ORIENTED_EDGE ( 'NONE', *, *, #4364, .T. ) ; +#166 = LINE ( 'NONE', #5568, #5821 ) ; +#167 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#168 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7099 ) ) ; +#169 = PLANE ( 'NONE', #3256 ) ; +#170 = ORIENTED_EDGE ( 'NONE', *, *, #3020, .T. ) ; +#171 = ORIENTED_EDGE ( 'NONE', *, *, #2449, .F. ) ; +#172 = PLANE ( 'NONE', #1613 ) ; +#173 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5469, 'distance_accuracy_value', 'NONE'); +#174 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude5', #4513 ) ; +#175 = ORIENTED_EDGE ( 'NONE', *, *, #2786, .F. ) ; +#176 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 0.2000000000000000900, 1.074999999999999700 ) ) ; +#177 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#178 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 2.940894014733149000, -1.075000000000000000 ) ) ; +#179 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#180 = ORIENTED_EDGE ( 'NONE', *, *, #6852, .F. ) ; +#181 = ORIENTED_EDGE ( 'NONE', *, *, #5285, .T. ) ; +#182 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#183 = EDGE_CURVE ( 'NONE', #1216, #7141, #6717, .T. ) ; +#184 = EDGE_CURVE ( 'NONE', #7019, #6959, #1390, .T. ) ; +#185 = VERTEX_POINT ( 'NONE', #955 ) ; +#186 = VERTEX_POINT ( 'NONE', #445 ) ; +#187 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.8799999999999998900 ) ) ; +#188 = STYLED_ITEM ( 'NONE', ( #4448 ), #3711 ) ; +#189 = CYLINDRICAL_SURFACE ( 'NONE', #4266, 0.1750000000000000200 ) ; +#190 = FILL_AREA_STYLE ('',( #1288 ) ) ; +#191 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#192 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, -1.000000000000000200 ) ) ; +#193 = SURFACE_STYLE_USAGE ( .BOTH. , #6939 ) ; +#194 = EDGE_LOOP ( 'NONE', ( #2109, #6010, #1683, #1746 ) ) ; +#195 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7032 ) ) ; +#196 = ORIENTED_EDGE ( 'NONE', *, *, #314, .F. ) ; +#197 = FACE_OUTER_BOUND ( 'NONE', #1986, .T. ) ; +#198 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#199 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.6697073557013986100, -1.074999999999999700 ) ) ; +#200 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, 1.119999999999999700 ) ) ; +#201 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 0.6199999999999995500 ) ) ; +#202 = VERTEX_POINT ( 'NONE', #2071 ) ; +#203 = LINE ( 'NONE', #6034, #6385 ) ; +#204 = VECTOR ( 'NONE', #6841, 1000.000000000000000 ) ; +#205 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#206 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#207 = AXIS2_PLACEMENT_3D ( 'NONE', #5363, #7101, #876 ) ; +#208 = PLANE ( 'NONE', #3485 ) ; +#209 = VECTOR ( 'NONE', #4355, 1000.000000000000000 ) ; +#210 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -1.445602896647339200E-016 ) ) ; +#211 = SURFACE_SIDE_STYLE ('',( #1966 ) ) ; +#212 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -1.445602896647339200E-016 ) ) ; +#213 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, -0.8800000000000003400 ) ) ; +#214 = ORIENTED_EDGE ( 'NONE', *, *, #2412, .F. ) ; +#215 = SURFACE_STYLE_FILL_AREA ( #2142 ) ; +#216 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, -2.168404344971008900E-016 ) ) ; +#217 = FACE_OUTER_BOUND ( 'NONE', #6083, .T. ) ; +#218 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, 0.3799999999999998900 ) ) ; +#219 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#220 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#221 = VECTOR ( 'NONE', #5657, 1000.000000000000000 ) ; +#222 = EDGE_CURVE ( 'NONE', #4202, #4096, #1046, .T. ) ; +#223 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7127, 'distance_accuracy_value', 'NONE'); +#224 = EDGE_LOOP ( 'NONE', ( #6581, #6882, #533, #6557 ) ) ; +#225 = VECTOR ( 'NONE', #1189, 1000.000000000000000 ) ; +#226 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2510 ), #865 ) ; +#227 = LINE ( 'NONE', #2165, #6332 ) ; +#228 = DIRECTION ( 'NONE', ( -3.872150616019654900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#229 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, -1.120000000000000100 ) ) ; +#230 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #365 ) ) ; +#231 = EDGE_CURVE ( 'NONE', #6587, #7290, #2539, .T. ) ; +#232 = EDGE_LOOP ( 'NONE', ( #6637, #1215, #318, #641 ) ) ; +#233 = EDGE_CURVE ( 'NONE', #2997, #585, #4960, .T. ) ; +#234 = EDGE_CURVE ( 'NONE', #6198, #5552, #5396, .T. ) ; +#235 = FACE_OUTER_BOUND ( 'NONE', #3302, .T. ) ; +#236 = LINE ( 'NONE', #178, #5811 ) ; +#237 = ORIENTED_EDGE ( 'NONE', *, *, #2909, .T. ) ; +#238 = VECTOR ( 'NONE', #6000, 1000.000000000000000 ) ; +#239 = FILL_AREA_STYLE_COLOUR ( '', #1089 ) ; +#240 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#241 = VECTOR ( 'NONE', #6126, 1000.000000000000000 ) ; +#242 = ORIENTED_EDGE ( 'NONE', *, *, #7073, .F. ) ; +#243 = ORIENTED_EDGE ( 'NONE', *, *, #234, .T. ) ; +#244 = DIRECTION ( 'NONE', ( -3.872150616019654900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#245 = PLANE ( 'NONE', #3504 ) ; +#246 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#247 = VERTEX_POINT ( 'NONE', #351 ) ; +#248 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#249 = ORIENTED_EDGE ( 'NONE', *, *, #825, .F. ) ; +#250 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4117 ), #4492 ) ; +#251 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, -0.3800000000000004500 ) ) ; +#252 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#253 = ORIENTED_EDGE ( 'NONE', *, *, #2328, .T. ) ; +#254 = VERTEX_POINT ( 'NONE', #3244 ) ; +#255 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#256 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3142 ) ) ; +#257 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#258 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.04999999999999999600, 0.1199999999999995500 ) ) ; +#259 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, -0.1200000000000000900 ) ) ; +#260 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#261 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4213, 'distance_accuracy_value', 'NONE'); +#262 = ORIENTED_EDGE ( 'NONE', *, *, #3647, .F. ) ; +#263 = VERTEX_POINT ( 'NONE', #1601 ) ; +#264 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#265 = ORIENTED_EDGE ( 'NONE', *, *, #3894, .F. ) ; +#266 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#267 = SURFACE_SIDE_STYLE ('',( #2124 ) ) ; +#268 = EDGE_LOOP ( 'NONE', ( #6414, #1106, #3489, #6597 ) ) ; +#269 = ORIENTED_EDGE ( 'NONE', *, *, #3788, .F. ) ; +#270 = EDGE_CURVE ( 'NONE', #6250, #5179, #3495, .T. ) ; +#271 = EDGE_CURVE ( 'NONE', #657, #2997, #3780, .T. ) ; +#272 = CYLINDRICAL_SURFACE ( 'NONE', #6697, 0.1199999999999998800 ) ; +#273 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, -0.1200000000000000900 ) ) ; +#274 = EDGE_CURVE ( 'NONE', #2888, #3382, #5217, .T. ) ; +#275 = FILL_AREA_STYLE_COLOUR ( '', #7157 ) ; +#276 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#277 = ORIENTED_EDGE ( 'NONE', *, *, #6935, .F. ) ; +#278 = ADVANCED_FACE ( 'NONE', ( #2014 ), #6715, .T. ) ; +#279 = ORIENTED_EDGE ( 'NONE', *, *, #1771, .T. ) ; +#280 = ORIENTED_EDGE ( 'NONE', *, *, #917, .T. ) ; +#281 = PLANE ( 'NONE', #7302 ) ; +#282 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#283 = VECTOR ( 'NONE', #1924, 1000.000000000000000 ) ; +#284 = CIRCLE ( 'NONE', #7247, 0.1199999999999998800 ) ; +#285 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#286 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5113 ), #2528 ) ; +#287 = ORIENTED_EDGE ( 'NONE', *, *, #98, .T. ) ; +#288 = VECTOR ( 'NONE', #1027, 1000.000000000000000 ) ; +#289 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4158 ) ) ; +#290 = FILL_AREA_STYLE ('',( #5902 ) ) ; +#291 = FILL_AREA_STYLE ('',( #3608 ) ) ; +#292 = VECTOR ( 'NONE', #2426, 1000.000000000000000 ) ; +#293 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#294 = AXIS2_PLACEMENT_3D ( 'NONE', #7178, #3773, #4351 ) ; +#295 = FILL_AREA_STYLE_COLOUR ( '', #363 ) ; +#296 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#297 = PRESENTATION_STYLE_ASSIGNMENT (( #4537 ) ) ; +#298 = AXIS2_PLACEMENT_3D ( 'NONE', #2570, #6550, #3126 ) ; +#299 = CIRCLE ( 'NONE', #4815, 0.1199999999999998800 ) ; +#300 = SURFACE_SIDE_STYLE ('',( #4001 ) ) ; +#301 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#302 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#303 = SURFACE_SIDE_STYLE ('',( #2825 ) ) ; +#304 = VERTEX_POINT ( 'NONE', #4434 ) ; +#305 = LINE ( 'NONE', #802, #5429 ) ; +#306 = LINE ( 'NONE', #2917, #6145 ) ; +#307 = PLANE ( 'NONE', #3225 ) ; +#308 = ADVANCED_FACE ( 'NONE', ( #789 ), #189, .F. ) ; +#309 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, -0.8800000000000004500 ) ) ; +#310 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#311 = ORIENTED_EDGE ( 'NONE', *, *, #274, .F. ) ; +#312 = VECTOR ( 'NONE', #5829, 1000.000000000000000 ) ; +#313 = SURFACE_STYLE_FILL_AREA ( #1718 ) ; +#314 = EDGE_CURVE ( 'NONE', #6149, #4948, #3227, .T. ) ; +#315 = VECTOR ( 'NONE', #5776, 1000.000000000000000 ) ; +#316 = STYLED_ITEM ( 'NONE', ( #1806 ), #3429 ) ; +#317 = LINE ( 'NONE', #5700, #5357 ) ; +#318 = ORIENTED_EDGE ( 'NONE', *, *, #2369, .T. ) ; +#319 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#320 = PRESENTATION_STYLE_ASSIGNMENT (( #3508 ) ) ; +#321 = VERTEX_POINT ( 'NONE', #103 ) ; +#322 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#323 = VECTOR ( 'NONE', #120, 1000.000000000000000 ) ; +#324 = PRODUCT ( 'DSC10 (4207393 e 01 11)', 'DSC10 (4207393 e 01 11)', '', ( #1139 ) ) ; +#325 = SURFACE_SIDE_STYLE ('',( #7000 ) ) ; +#326 = AXIS2_PLACEMENT_3D ( 'NONE', #3963, #598, #6798 ) ; +#327 = VECTOR ( 'NONE', #6561, 1000.000000000000000 ) ; +#328 = PLANE ( 'NONE', #733 ) ; +#329 = ORIENTED_EDGE ( 'NONE', *, *, #3844, .F. ) ; +#330 = PLANE ( 'NONE', #22 ) ; +#331 = PRESENTATION_STYLE_ASSIGNMENT (( #3534 ) ) ; +#332 = ORIENTED_EDGE ( 'NONE', *, *, #4901, .F. ) ; +#333 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#334 = LINE ( 'NONE', #5591, #3847 ) ; +#335 = ADVANCED_FACE ( 'NONE', ( #619 ), #6304, .F. ) ; +#336 = ORIENTED_EDGE ( 'NONE', *, *, #4376, .T. ) ; +#337 = ORIENTED_EDGE ( 'NONE', *, *, #2228, .F. ) ; +#338 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.1200000000000000900 ) ) ; +#339 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#340 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#341 = STYLED_ITEM ( 'NONE', ( #2408 ), #814 ) ; +#342 = VERTEX_POINT ( 'NONE', #6324 ) ; +#343 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#344 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, -0.3800000000000003400 ) ) ; +#345 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2831, 'distance_accuracy_value', 'NONE'); +#346 = ADVANCED_FACE ( 'NONE', ( #2883 ), #1207, .T. ) ; +#347 = ORIENTED_EDGE ( 'NONE', *, *, #6616, .T. ) ; +#348 = FILL_AREA_STYLE_COLOUR ( '', #3354 ) ; +#349 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#351 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, -1.120000000000000100 ) ) ; +#350 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#352 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#353 = ORIENTED_EDGE ( 'NONE', *, *, #367, .T. ) ; +#354 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, 0.1199999999999995500 ) ) ; +#355 = VERTEX_POINT ( 'NONE', #4034 ) ; +#356 = LINE ( 'NONE', #4496, #4678 ) ; +#357 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6558 ) ) ; +#358 = ORIENTED_EDGE ( 'NONE', *, *, #5840, .T. ) ; +#359 = FILL_AREA_STYLE_COLOUR ( '', #4605 ) ; +#360 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#361 = ORIENTED_EDGE ( 'NONE', *, *, #2017, .F. ) ; +#362 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5603 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6496, #6570, #3091 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#363 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#364 = ADVANCED_FACE ( 'NONE', ( #1211 ), #1130, .T. ) ; +#365 = STYLED_ITEM ( 'NONE', ( #572 ), #7211 ) ; +#366 = EDGE_CURVE ( 'NONE', #4562, #2683, #3049, .T. ) ; +#367 = EDGE_CURVE ( 'NONE', #4554, #3783, #2438, .T. ) ; +#368 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#369 = EDGE_CURVE ( 'NONE', #6674, #1470, #531, .T. ) ; +#370 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#371 = VERTEX_POINT ( 'NONE', #5132 ) ; +#372 = PRESENTATION_STYLE_ASSIGNMENT (( #3981 ) ) ; +#373 = SURFACE_SIDE_STYLE ('',( #6227 ) ) ; +#374 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6789 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #794, #220, #6370 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#375 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#377 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#376 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#378 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005700E-016 ) ) ; +#379 = PLANE ( 'NONE', #1421 ) ; +#380 = PLANE ( 'NONE', #6347 ) ; +#381 = LINE ( 'NONE', #426, #209 ) ; +#382 = VECTOR ( 'NONE', #5523, 1000.000000000000000 ) ; +#383 = AXIS2_PLACEMENT_3D ( 'NONE', #1034, #5756, #6879 ) ; +#384 = AXIS2_PLACEMENT_3D ( 'NONE', #651, #4514, #1198 ) ; +#385 = ORIENTED_EDGE ( 'NONE', *, *, #874, .F. ) ; +#386 = ADVANCED_FACE ( 'NONE', ( #5487 ), #5760, .T. ) ; +#387 = EDGE_CURVE ( 'NONE', #1469, #6948, #4402, .T. ) ; +#388 = VECTOR ( 'NONE', #1114, 1000.000000000000000 ) ; +#389 = FILL_AREA_STYLE_COLOUR ( '', #37 ) ; +#390 = VECTOR ( 'NONE', #3241, 1000.000000000000000 ) ; +#391 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1565, 'distance_accuracy_value', 'NONE'); +#392 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, 0.8799999999999998900 ) ) ; +#393 = ORIENTED_EDGE ( 'NONE', *, *, #3539, .T. ) ; +#394 = LINE ( 'NONE', #4358, #6051 ) ; +#395 = SURFACE_SIDE_STYLE ('',( #3175 ) ) ; +#396 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6217 ) ) ; +#397 = SURFACE_SIDE_STYLE ('',( #4325 ) ) ; +#398 = EDGE_LOOP ( 'NONE', ( #3301, #1183, #5771, #6096 ) ) ; +#399 = STYLED_ITEM ( 'NONE', ( #5935 ), #278 ) ; +#400 = VECTOR ( 'NONE', #790, 1000.000000000000000 ) ; +#401 = LINE ( 'NONE', #2810, #487 ) ; +#402 = SURFACE_STYLE_USAGE ( .BOTH. , #3756 ) ; +#403 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#404 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#405 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, -0.0000000000000000000, -1.075000000000000200 ) ) ; +#406 = ADVANCED_FACE ( 'NONE', ( #7236 ), #1109, .F. ) ; +#407 = VECTOR ( 'NONE', #4061, 1000.000000000000000 ) ; +#408 = ORIENTED_EDGE ( 'NONE', *, *, #2225, .F. ) ; +#409 = EDGE_LOOP ( 'NONE', ( #5101, #705, #764, #1049 ) ) ; +#410 = LINE ( 'NONE', #5338, #6251 ) ; +#411 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#412 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, -0.3800000000000004500 ) ) ; +#413 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.6199999999999996600 ) ) ; +#414 = EDGE_CURVE ( 'NONE', #5408, #3923, #2003, .T. ) ; +#415 = ORIENTED_EDGE ( 'NONE', *, *, #825, .T. ) ; +#416 = EDGE_CURVE ( 'NONE', #5672, #7055, #864, .T. ) ; +#417 = EDGE_CURVE ( 'NONE', #3487, #6901, #1040, .T. ) ; +#418 = ORIENTED_EDGE ( 'NONE', *, *, #4397, .F. ) ; +#419 = STYLED_ITEM ( 'NONE', ( #6651 ), #4332 ) ; +#420 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#421 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, -0.6200000000000001100 ) ) ; +#422 = ORIENTED_EDGE ( 'NONE', *, *, #648, .F. ) ; +#423 = ORIENTED_EDGE ( 'NONE', *, *, #7034, .T. ) ; +#424 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6205 ), #2662 ) ; +#425 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#427 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, 0.8799999999999998900 ) ) ; +#426 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#428 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#429 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.3800000000000003400 ) ) ; +#430 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654900E-016 ) ) ; +#431 = VERTEX_POINT ( 'NONE', #6351 ) ; +#432 = PLANE ( 'NONE', #2239 ) ; +#433 = ORIENTED_EDGE ( 'NONE', *, *, #414, .F. ) ; +#434 = SURFACE_STYLE_USAGE ( .BOTH. , #3158 ) ; +#435 = ORIENTED_EDGE ( 'NONE', *, *, #3643, .F. ) ; +#436 = STYLED_ITEM ( 'NONE', ( #4800 ), #1447 ) ; +#437 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4248, 'distance_accuracy_value', 'NONE'); +#438 = ADVANCED_FACE ( 'NONE', ( #6365 ), #1867, .F. ) ; +#439 = ORIENTED_EDGE ( 'NONE', *, *, #4234, .T. ) ; +#440 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #39, 'distance_accuracy_value', 'NONE'); +#441 = ORIENTED_EDGE ( 'NONE', *, *, #5435, .T. ) ; +#442 = VERTEX_POINT ( 'NONE', #4153 ) ; +#443 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#445 = CARTESIAN_POINT ( 'NONE', ( -0.7000000000000000700, 0.0000000000000000000, -1.075000000000000200 ) ) ; +#444 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, 0.1199999999999995500 ) ) ; +#446 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#447 = FACE_OUTER_BOUND ( 'NONE', #3920, .T. ) ; +#448 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, 1.119999999999999400 ) ) ; +#449 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 1.119999999999999400 ) ) ; +#450 = ORIENTED_EDGE ( 'NONE', *, *, #6341, .F. ) ; +#451 = ORIENTED_EDGE ( 'NONE', *, *, #871, .F. ) ; +#452 = ORIENTED_EDGE ( 'NONE', *, *, #2123, .F. ) ; +#453 = EDGE_CURVE ( 'NONE', #634, #5759, #6889, .T. ) ; +#454 = SURFACE_STYLE_FILL_AREA ( #2621 ) ; +#455 = FILL_AREA_STYLE_COLOUR ( '', #2585 ) ; +#456 = PLANE ( 'NONE', #6673 ) ; +#457 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#458 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5235 ), #7126 ) ; +#459 = ORIENTED_EDGE ( 'NONE', *, *, #5326, .T. ) ; +#460 = FACE_OUTER_BOUND ( 'NONE', #5781, .T. ) ; +#461 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #440 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #39, #5692, #2167 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#462 = EDGE_CURVE ( 'NONE', #4484, #3994, #14, .T. ) ; +#463 = EDGE_CURVE ( 'NONE', #4777, #3687, #1653, .T. ) ; +#464 = PLANE ( 'NONE', #516 ) ; +#465 = EDGE_CURVE ( 'NONE', #4953, #7248, #2349, .T. ) ; +#466 = ORIENTED_EDGE ( 'NONE', *, *, #5100, .F. ) ; +#467 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, 0.9999999999999997800 ) ) ; +#468 = FACE_OUTER_BOUND ( 'NONE', #1451, .T. ) ; +#469 = LINE ( 'NONE', #449, #4793 ) ; +#470 = SURFACE_SIDE_STYLE ('',( #993 ) ) ; +#471 = SURFACE_STYLE_USAGE ( .BOTH. , #6667 ) ; +#472 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#473 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#474 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#475 = ADVANCED_FACE ( 'NONE', ( #2171 ), #5242, .F. ) ; +#476 = ORIENTED_EDGE ( 'NONE', *, *, #3022, .F. ) ; +#477 = LINE ( 'NONE', #5114, #2115 ) ; +#478 = FACE_OUTER_BOUND ( 'NONE', #4508, .T. ) ; +#479 = FILL_AREA_STYLE ('',( #5044 ) ) ; +#480 = VECTOR ( 'NONE', #6481, 1000.000000000000000 ) ; +#481 = AXIS2_PLACEMENT_3D ( 'NONE', #2718, #5000, #6696 ) ; +#482 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#483 = ORIENTED_EDGE ( 'NONE', *, *, #1324, .T. ) ; +#484 = ORIENTED_EDGE ( 'NONE', *, *, #6296, .T. ) ; +#485 = LINE ( 'NONE', #6151, #5001 ) ; +#486 = LINE ( 'NONE', #3442, #1805 ) ; +#487 = VECTOR ( 'NONE', #4469, 1000.000000000000000 ) ; +#488 = ORIENTED_EDGE ( 'NONE', *, *, #3667, .F. ) ; +#489 = STYLED_ITEM ( 'NONE', ( #5171 ), #1791 ) ; +#490 = FACE_OUTER_BOUND ( 'NONE', #6174, .T. ) ; +#491 = LINE ( 'NONE', #1055, #2138 ) ; +#492 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#493 = ORIENTED_EDGE ( 'NONE', *, *, #522, .T. ) ; +#494 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#495 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#496 = ORIENTED_EDGE ( 'NONE', *, *, #3895, .F. ) ; +#497 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#498 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, -0.3800000000000004500 ) ) ; +#499 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#500 = VERTEX_POINT ( 'NONE', #6922 ) ; +#501 = ORIENTED_EDGE ( 'NONE', *, *, #4570, .T. ) ; +#502 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#503 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#504 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, -0.1200000000000000900 ) ) ; +#505 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5050 ), #3490 ) ; +#506 = EDGE_CURVE ( 'NONE', #342, #1366, #702, .T. ) ; +#507 = EDGE_CURVE ( 'NONE', #5817, #2244, #1404, .T. ) ; +#508 = EDGE_CURVE ( 'NONE', #901, #7125, #719, .T. ) ; +#509 = ORIENTED_EDGE ( 'NONE', *, *, #5596, .T. ) ; +#510 = ORIENTED_EDGE ( 'NONE', *, *, #3061, .F. ) ; +#511 = ADVANCED_FACE ( 'NONE', ( #2192 ), #2723, .T. ) ; +#512 = AXIS2_PLACEMENT_3D ( 'NONE', #121, #6836, #1219 ) ; +#513 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#514 = VERTEX_POINT ( 'NONE', #1368 ) ; +#515 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, -1.000000000000000200 ) ) ; +#516 = AXIS2_PLACEMENT_3D ( 'NONE', #6635, #2749, #5561 ) ; +#518 = FILL_AREA_STYLE_COLOUR ( '', #5675 ) ; +#517 = SURFACE_SIDE_STYLE ('',( #3703 ) ) ; +#519 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#520 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2395 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5443, #2051, #2496 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#521 = VERTEX_POINT ( 'NONE', #2532 ) ; +#522 = EDGE_CURVE ( 'NONE', #583, #525, #3332, .T. ) ; +#523 = FILL_AREA_STYLE_COLOUR ( '', #3913 ) ; +#524 = PRESENTATION_STYLE_ASSIGNMENT (( #5228 ) ) ; +#525 = VERTEX_POINT ( 'NONE', #5949 ) ; +#526 = ORIENTED_EDGE ( 'NONE', *, *, #2891, .F. ) ; +#527 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, 1.119999999999999400 ) ) ; +#528 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.0000000000000000000, -1.075000000000000000 ) ) ; +#529 = ORIENTED_EDGE ( 'NONE', *, *, #971, .F. ) ; +#530 = LINE ( 'NONE', #6171, #1571 ) ; +#531 = LINE ( 'NONE', #2823, #6812 ) ; +#532 = ORIENTED_EDGE ( 'NONE', *, *, #6006, .T. ) ; +#533 = ORIENTED_EDGE ( 'NONE', *, *, #5198, .F. ) ; +#534 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#535 = AXIS2_PLACEMENT_3D ( 'NONE', #5084, #661, #2335 ) ; +#536 = VECTOR ( 'NONE', #3540, 1000.000000000000000 ) ; +#537 = LINE ( 'NONE', #5943, #3149 ) ; +#538 = PLANE ( 'NONE', #1786 ) ; +#539 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#540 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, -0.5000000000000002200 ) ) ; +#541 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 2.940894014733149000, -1.075000000000000000 ) ) ; +#542 = ORIENTED_EDGE ( 'NONE', *, *, #1898, .T. ) ; +#543 = LINE ( 'NONE', #2186, #6552 ) ; +#544 = VECTOR ( 'NONE', #4127, 1000.000000000000000 ) ; +#545 = ADVANCED_FACE ( 'NONE', ( #2641 ), #1394, .T. ) ; +#546 = SURFACE_SIDE_STYLE ('',( #5353 ) ) ; +#547 = EDGE_CURVE ( 'NONE', #1078, #1315, #3596, .T. ) ; +#548 = EDGE_CURVE ( 'NONE', #851, #54, #4331, .T. ) ; +#549 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, -1.000000000000000200 ) ) ; +#550 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#551 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -2.168404344971008900E-016 ) ) ; +#552 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, -1.120000000000000100 ) ) ; +#553 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.6697073557013986100, 1.074999999999999700 ) ) ; +#554 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #188 ), #3585 ) ; +#555 = VERTEX_POINT ( 'NONE', #6514 ) ; +#556 = LINE ( 'NONE', #5644, #5959 ) ; +#557 = VECTOR ( 'NONE', #2158, 1000.000000000000000 ) ; +#558 = STYLED_ITEM ( 'NONE', ( #4624 ), #5449 ) ; +#559 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -1.120000000000000100 ) ) ; +#560 = ORIENTED_EDGE ( 'NONE', *, *, #7075, .F. ) ; +#561 = ORIENTED_EDGE ( 'NONE', *, *, #1857, .F. ) ; +#562 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#563 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#564 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005500E-016 ) ) ; +#565 = FACE_OUTER_BOUND ( 'NONE', #1035, .T. ) ; +#566 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#567 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#568 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#569 = LINE ( 'NONE', #6346, #7011 ) ; +#570 = FILL_AREA_STYLE ('',( #6778 ) ) ; +#571 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3251, 'distance_accuracy_value', 'NONE'); +#572 = PRESENTATION_STYLE_ASSIGNMENT (( #5565 ) ) ; +#573 = ORIENTED_EDGE ( 'NONE', *, *, #5906, .T. ) ; +#574 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.1200000000000000900 ) ) ; +#575 = VECTOR ( 'NONE', #3658, 1000.000000000000000 ) ; +#576 = FACE_OUTER_BOUND ( 'NONE', #770, .T. ) ; +#577 = LINE ( 'NONE', #5590, #3008 ) ; +#578 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2811 ) ) ; +#579 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#580 = PLANE ( 'NONE', #1869 ) ; +#581 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#582 = LINE ( 'NONE', #6445, #1630 ) ; +#583 = VERTEX_POINT ( 'NONE', #843 ) ; +#584 = SURFACE_STYLE_FILL_AREA ( #4075 ) ; +#585 = VERTEX_POINT ( 'NONE', #7068 ) ; +#586 = CYLINDRICAL_SURFACE ( 'NONE', #5950, 0.1499999999999999700 ) ; +#587 = ADVANCED_FACE ( 'NONE', ( #3511 ), #3083, .T. ) ; +#588 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#589 = VECTOR ( 'NONE', #1491, 1000.000000000000000 ) ; +#590 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 1.119999999999999700 ) ) ; +#591 = ORIENTED_EDGE ( 'NONE', *, *, #734, .F. ) ; +#592 = VECTOR ( 'NONE', #4657, 1000.000000000000000 ) ; +#593 = ORIENTED_EDGE ( 'NONE', *, *, #6296, .F. ) ; +#594 = FILL_AREA_STYLE ('',( #6229 ) ) ; +#595 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#596 = CLOSED_SHELL ( 'NONE', ( #5915, #438, #6556, #2775, #1678, #6626 ) ) ; +#597 = EDGE_CURVE ( 'NONE', #1078, #3033, #1307, .T. ) ; +#598 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#599 = VERTEX_POINT ( 'NONE', #614 ) ; +#600 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#601 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#602 = VERTEX_POINT ( 'NONE', #5116 ) ; +#603 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#604 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#605 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #365 ), #1323 ) ; +#606 = ORIENTED_EDGE ( 'NONE', *, *, #1121, .F. ) ; +#607 = EDGE_CURVE ( 'NONE', #1356, #6917, #7164, .T. ) ; +#608 = EDGE_CURVE ( 'NONE', #2173, #5451, #3153, .T. ) ; +#609 = EDGE_CURVE ( 'NONE', #4461, #3129, #6981, .T. ) ; +#610 = VERTEX_POINT ( 'NONE', #1734 ) ; +#611 = AXIS2_PLACEMENT_3D ( 'NONE', #246, #5244, #5271 ) ; +#612 = SURFACE_SIDE_STYLE ('',( #990 ) ) ; +#613 = SURFACE_SIDE_STYLE ('',( #1660 ) ) ; +#614 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, -1.120000000000000100 ) ) ; +#615 = ORIENTED_EDGE ( 'NONE', *, *, #607, .F. ) ; +#616 = AXIS2_PLACEMENT_3D ( 'NONE', #2117, #5653, #3328 ) ; +#617 = ORIENTED_EDGE ( 'NONE', *, *, #231, .F. ) ; +#618 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, -0.6200000000000001100 ) ) ; +#619 = FACE_OUTER_BOUND ( 'NONE', #6457, .T. ) ; +#620 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#621 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#622 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4540 ), #2342 ) ; +#623 = ADVANCED_FACE ( 'NONE', ( #6031 ), #3366, .T. ) ; +#624 = VERTEX_POINT ( 'NONE', #5639 ) ; +#625 = ORIENTED_EDGE ( 'NONE', *, *, #1948, .F. ) ; +#626 = LINE ( 'NONE', #1498, #1921 ) ; +#627 = VECTOR ( 'NONE', #2112, 1000.000000000000000 ) ; +#628 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 2.940894014733149000, -0.9409215920651650100 ) ) ; +#629 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 1.119999999999999700 ) ) ; +#630 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, -0.6200000000000001100 ) ) ; +#631 = DIRECTION ( 'NONE', ( -6.318483184191612600E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#632 = ORIENTED_EDGE ( 'NONE', *, *, #7217, .T. ) ; +#633 = STYLED_ITEM ( 'NONE', ( #5796 ), #1991 ) ; +#634 = VERTEX_POINT ( 'NONE', #2778 ) ; +#635 = DIRECTION ( 'NONE', ( 3.872150616019654900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#636 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, -1.120000000000000100 ) ) ; +#637 = ORIENTED_EDGE ( 'NONE', *, *, #773, .T. ) ; +#638 = VECTOR ( 'NONE', #6066, 1000.000000000000000 ) ; +#639 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#640 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2736 ) ) ; +#641 = ORIENTED_EDGE ( 'NONE', *, *, #2890, .F. ) ; +#642 = FACE_OUTER_BOUND ( 'NONE', #7245, .T. ) ; +#643 = VECTOR ( 'NONE', #1414, 1000.000000000000000 ) ; +#644 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.2000000000000000900, 1.075000000000000000 ) ) ; +#645 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #913 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5543, #1535, #1503 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#646 = LINE ( 'NONE', #2732, #3257 ) ; +#647 = EDGE_CURVE ( 'NONE', #3201, #5759, #3867, .T. ) ; +#648 = EDGE_CURVE ( 'NONE', #6298, #624, #4556, .T. ) ; +#649 = EDGE_CURVE ( 'NONE', #4587, #5558, #1347, .T. ) ; +#650 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#651 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.4999999999999997800 ) ) ; +#652 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#653 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#654 = VERTEX_POINT ( 'NONE', #15 ) ; +#655 = ADVANCED_FACE ( 'NONE', ( #1714 ), #4483, .T. ) ; +#656 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4298 ) ) ; +#657 = VERTEX_POINT ( 'NONE', #2260 ) ; +#658 = LINE ( 'NONE', #4215, #4907 ) ; +#659 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, -0.8800000000000004500 ) ) ; +#660 = LINE ( 'NONE', #2910, #5883 ) ; +#661 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#662 = CIRCLE ( 'NONE', #6359, 0.1199999999999998800 ) ; +#663 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#664 = PRESENTATION_STYLE_ASSIGNMENT (( #1258 ) ) ; +#665 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2441, 'distance_accuracy_value', 'NONE'); +#666 = AXIS2_PLACEMENT_3D ( 'NONE', #5120, #1712, #6260 ) ; +#667 = ORIENTED_EDGE ( 'NONE', *, *, #892, .F. ) ; +#668 = LINE ( 'NONE', #2422, #3825 ) ; +#669 = FACE_OUTER_BOUND ( 'NONE', #2268, .T. ) ; +#670 = EDGE_LOOP ( 'NONE', ( #510, #5128, #6456, #4060 ) ) ; +#671 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#672 = CIRCLE ( 'NONE', #383, 0.1199999999999998800 ) ; +#673 = VECTOR ( 'NONE', #3813, 1000.000000000000000 ) ; +#674 = ORIENTED_EDGE ( 'NONE', *, *, #2652, .F. ) ; +#675 = CYLINDRICAL_SURFACE ( 'NONE', #6434, 0.1199999999999998800 ) ; +#676 = ORIENTED_EDGE ( 'NONE', *, *, #3018, .T. ) ; +#677 = AXIS2_PLACEMENT_3D ( 'NONE', #5488, #5661, #4173 ) ; +#678 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#679 = SURFACE_STYLE_FILL_AREA ( #3498 ) ; +#680 = SURFACE_STYLE_USAGE ( .BOTH. , #2947 ) ; +#681 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#682 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5847 ) ) ; +#683 = EDGE_LOOP ( 'NONE', ( #156, #1631, #2421, #615 ) ) ; +#684 = VERTEX_POINT ( 'NONE', #3928 ) ; +#685 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#686 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654900E-016 ) ) ; +#687 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#688 = EDGE_LOOP ( 'NONE', ( #1647, #6248, #3418, #6435 ) ) ; +#689 = ORIENTED_EDGE ( 'NONE', *, *, #3513, .T. ) ; +#690 = EDGE_CURVE ( 'NONE', #3655, #83, #3922, .T. ) ; +#691 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#692 = ADVANCED_FACE ( 'NONE', ( #5257 ), #5634, .T. ) ; +#693 = EDGE_LOOP ( 'NONE', ( #109, #6348, #277, #170 ) ) ; +#694 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#695 = AXIS2_PLACEMENT_3D ( 'NONE', #2509, #7093, #340 ) ; +#696 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.3800000000000003400 ) ) ; +#697 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#698 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#699 = ORIENTED_EDGE ( 'NONE', *, *, #6379, .F. ) ; +#700 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #18, 'distance_accuracy_value', 'NONE'); +#701 = AXIS2_PLACEMENT_3D ( 'NONE', #3672, #5462, #6029 ) ; +#702 = LINE ( 'NONE', #199, #6538 ) ; +#703 = ORIENTED_EDGE ( 'NONE', *, *, #5859, .T. ) ; +#704 = ORIENTED_EDGE ( 'NONE', *, *, #3160, .T. ) ; +#705 = ORIENTED_EDGE ( 'NONE', *, *, #2037, .T. ) ; +#706 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 1.499999999999999600 ) ) ; +#707 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#708 = SURFACE_STYLE_USAGE ( .BOTH. , #6923 ) ; +#709 = FACE_OUTER_BOUND ( 'NONE', #194, .T. ) ; +#710 = AXIS2_PLACEMENT_3D ( 'NONE', #3155, #4881, #941 ) ; +#711 = EDGE_LOOP ( 'NONE', ( #4289, #180, #1489, #2 ) ) ; +#712 = ORIENTED_EDGE ( 'NONE', *, *, #6105, .T. ) ; +#713 = FILL_AREA_STYLE_COLOUR ( '', #3820 ) ; +#714 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3026 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6737, #6792, #3900 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#715 = FILL_AREA_STYLE_COLOUR ( '', #563 ) ; +#716 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#717 = ORIENTED_EDGE ( 'NONE', *, *, #2611, .T. ) ; +#718 = FACE_OUTER_BOUND ( 'NONE', #6627, .T. ) ; +#719 = LINE ( 'NONE', #2403, #7258 ) ; +#720 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#721 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654900E-016 ) ) ; +#722 = ORIENTED_EDGE ( 'NONE', *, *, #6748, .T. ) ; +#723 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, -1.000000000000000200 ) ) ; +#724 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#725 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.0000000000000000000, 1.074999999999999700 ) ) ; +#726 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6736 ), #1090 ) ; +#727 = VERTEX_POINT ( 'NONE', #2201 ) ; +#728 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#729 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#730 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4049 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4070, #698, #4644 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#731 = VECTOR ( 'NONE', #2055, 1000.000000000000000 ) ; +#732 = PRESENTATION_STYLE_ASSIGNMENT (( #2731 ) ) ; +#733 = AXIS2_PLACEMENT_3D ( 'NONE', #953, #2050, #6033 ) ; +#734 = EDGE_CURVE ( 'NONE', #6754, #3456, #2760, .T. ) ; +#735 = EDGE_CURVE ( 'NONE', #4680, #3725, #4284, .T. ) ; +#736 = EDGE_CURVE ( 'NONE', #6926, #968, #3737, .T. ) ; +#737 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#738 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4934 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #474, #5497, #2074 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#739 = ORIENTED_EDGE ( 'NONE', *, *, #5826, .T. ) ; +#740 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#741 = VECTOR ( 'NONE', #1875, 1000.000000000000000 ) ; +#742 = LINE ( 'NONE', #4749, #5085 ) ; +#743 = PRESENTATION_STYLE_ASSIGNMENT (( #5645 ) ) ; +#744 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#745 = LINE ( 'NONE', #6451, #3450 ) ; +#746 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, -0.8800000000000003400 ) ) ; +#747 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -5.042800802258161100E-017 ) ) ; +#748 = ORIENTED_EDGE ( 'NONE', *, *, #4283, .T. ) ; +#749 = VECTOR ( 'NONE', #3224, 1000.000000000000000 ) ; +#750 = VECTOR ( 'NONE', #5688, 1000.000000000000000 ) ; +#751 = VERTEX_POINT ( 'NONE', #2336 ) ; +#752 = FACE_OUTER_BOUND ( 'NONE', #5870, .T. ) ; +#753 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3807 ) ) ; +#754 = EDGE_CURVE ( 'NONE', #4219, #4372, #1085, .T. ) ; +#755 = VECTOR ( 'NONE', #6484, 1000.000000000000000 ) ; +#756 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#757 = VERTEX_POINT ( 'NONE', #636 ) ; +#758 = FILL_AREA_STYLE_COLOUR ( '', #2655 ) ; +#759 = LINE ( 'NONE', #131, #407 ) ; +#760 = ORIENTED_EDGE ( 'NONE', *, *, #4180, .T. ) ; +#761 = SURFACE_STYLE_USAGE ( .BOTH. , #3024 ) ; +#762 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#763 = ORIENTED_EDGE ( 'NONE', *, *, #6194, .T. ) ; +#764 = ORIENTED_EDGE ( 'NONE', *, *, #5100, .T. ) ; +#765 = AXIS2_PLACEMENT_3D ( 'NONE', #4463, #1028, #3861 ) ; +#766 = ORIENTED_EDGE ( 'NONE', *, *, #5102, .T. ) ; +#767 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#768 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#769 = DIRECTION ( 'NONE', ( -5.042800802258161100E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#770 = EDGE_LOOP ( 'NONE', ( #964, #5009, #2348, #1274 ) ) ; +#771 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#772 = EDGE_CURVE ( 'NONE', #4772, #4986, #2590, .T. ) ; +#773 = EDGE_CURVE ( 'NONE', #3167, #1773, #4726, .T. ) ; +#774 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, -1.120000000000000100 ) ) ; +#775 = EDGE_CURVE ( 'NONE', #5912, #4363, #4108, .T. ) ; +#776 = ORIENTED_EDGE ( 'NONE', *, *, #2036, .T. ) ; +#777 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 1.119999999999999400 ) ) ; +#778 = ORIENTED_EDGE ( 'NONE', *, *, #2126, .T. ) ; +#779 = AXIS2_PLACEMENT_3D ( 'NONE', #3733, #1433, #6507 ) ; +#780 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#781 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#782 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#783 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, 0.8799999999999998900 ) ) ; +#784 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#785 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #119, 'distance_accuracy_value', 'NONE'); +#786 = ORIENTED_EDGE ( 'NONE', *, *, #1202, .F. ) ; +#787 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5474 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2258, #4559, #6840 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#788 = ORIENTED_EDGE ( 'NONE', *, *, #4182, .T. ) ; +#789 = FACE_OUTER_BOUND ( 'NONE', #4630, .T. ) ; +#790 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#791 = ORIENTED_EDGE ( 'NONE', *, *, #5139, .F. ) ; +#792 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#793 = PLANE ( 'NONE', #1831 ) ; +#794 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#795 = ORIENTED_EDGE ( 'NONE', *, *, #1769, .T. ) ; +#796 = LINE ( 'NONE', #2206, #2280 ) ; +#797 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#798 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3086 ), #4985 ) ; +#799 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, -0.3800000000000003400 ) ) ; +#800 = VERTEX_POINT ( 'NONE', #4652 ) ; +#801 = CIRCLE ( 'NONE', #2247, 0.1750000000000000200 ) ; +#802 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.1200000000000000900 ) ) ; +#803 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -0.3800000000000004500 ) ) ; +#804 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#805 = FILL_AREA_STYLE ('',( #5337 ) ) ; +#806 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.1200000000000000900 ) ) ; +#807 = ORIENTED_EDGE ( 'NONE', *, *, #5772, .F. ) ; +#808 = VECTOR ( 'NONE', #5655, 1000.000000000000000 ) ; +#809 = VECTOR ( 'NONE', #6350, 1000.000000000000000 ) ; +#810 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#811 = LINE ( 'NONE', #2759, #388 ) ; +#812 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#813 = VECTOR ( 'NONE', #3954, 1000.000000000000000 ) ; +#814 = ADVANCED_FACE ( 'NONE', ( #2492, #1528 ), #3459, .T. ) ; +#815 = VECTOR ( 'NONE', #2119, 1000.000000000000000 ) ; +#816 = EDGE_CURVE ( 'NONE', #2425, #6862, #236, .T. ) ; +#817 = ORIENTED_EDGE ( 'NONE', *, *, #1314, .T. ) ; +#818 = VECTOR ( 'NONE', #6480, 1000.000000000000000 ) ; +#819 = VECTOR ( 'NONE', #4683, 1000.000000000000000 ) ; +#820 = FACE_OUTER_BOUND ( 'NONE', #4280, .T. ) ; +#821 = VECTOR ( 'NONE', #3180, 1000.000000000000000 ) ; +#822 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#823 = SURFACE_STYLE_USAGE ( .BOTH. , #325 ) ; +#824 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3552 ), #4095 ) ; +#825 = EDGE_CURVE ( 'NONE', #1470, #521, #3546, .T. ) ; +#826 = ORIENTED_EDGE ( 'NONE', *, *, #2017, .T. ) ; +#827 = LINE ( 'NONE', #2754, #1003 ) ; +#828 = EDGE_CURVE ( 'NONE', #6762, #371, #7018, .T. ) ; +#829 = PRESENTATION_STYLE_ASSIGNMENT (( #2362 ) ) ; +#830 = ORIENTED_EDGE ( 'NONE', *, *, #4663, .F. ) ; +#831 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 5.842640687119285300, 1.499999999999999600 ) ) ; +#832 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#833 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#834 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.04999999999999999600, 0.8799999999999998900 ) ) ; +#835 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#836 = CIRCLE ( 'NONE', #4532, 0.1199999999999998800 ) ; +#837 = LINE ( 'NONE', #629, #3544 ) ; +#838 = ORIENTED_EDGE ( 'NONE', *, *, #3746, .F. ) ; +#839 = EDGE_LOOP ( 'NONE', ( #4928, #3059, #6634, #4640 ) ) ; +#840 = STYLED_ITEM ( 'NONE', ( #2950 ), #6695 ) ; +#841 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, -1.120000000000000100 ) ) ; +#842 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#843 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.0000000000000000000, 1.075000000000000000 ) ) ; +#844 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#845 = VERTEX_POINT ( 'NONE', #104 ) ; +#846 = ORIENTED_EDGE ( 'NONE', *, *, #234, .F. ) ; +#847 = AXIS2_PLACEMENT_3D ( 'NONE', #499, #4442, #5597 ) ; +#848 = LINE ( 'NONE', #2863, #5017 ) ; +#849 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#850 = SURFACE_SIDE_STYLE ('',( #5216 ) ) ; +#851 = VERTEX_POINT ( 'NONE', #126 ) ; +#852 = CLOSED_SHELL ( 'NONE', ( #3048, #1595, #4242, #3210, #2920, #5595 ) ) ; +#853 = SURFACE_SIDE_STYLE ('',( #2656 ) ) ; +#854 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #489 ), #3238 ) ; +#855 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#856 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#857 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#858 = ORIENTED_EDGE ( 'NONE', *, *, #1564, .F. ) ; +#859 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#860 = ORIENTED_EDGE ( 'NONE', *, *, #1475, .T. ) ; +#861 = PLANE ( 'NONE', #2903 ) ; +#862 = SURFACE_STYLE_USAGE ( .BOTH. , #3605 ) ; +#863 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#864 = LINE ( 'NONE', #1178, #3678 ) ; +#865 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6373 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2326, #5176, #6883 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#866 = ORIENTED_EDGE ( 'NONE', *, *, #6341, .T. ) ; +#867 = VERTEX_POINT ( 'NONE', #2880 ) ; +#868 = ADVANCED_FACE ( 'NONE', ( #5093 ), #6305, .T. ) ; +#869 = ORIENTED_EDGE ( 'NONE', *, *, #1145, .T. ) ; +#870 = EDGE_CURVE ( 'NONE', #3315, #3583, #6075, .T. ) ; +#871 = EDGE_CURVE ( 'NONE', #6553, #6374, #1880, .T. ) ; +#872 = CYLINDRICAL_SURFACE ( 'NONE', #3885, 0.1199999999999998800 ) ; +#873 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, -0.8800000000000003400 ) ) ; +#874 = EDGE_CURVE ( 'NONE', #1764, #2267, #2057, .T. ) ; +#875 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2311, 'distance_accuracy_value', 'NONE'); +#876 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#877 = VERTEX_POINT ( 'NONE', #2404 ) ; +#878 = ORIENTED_EDGE ( 'NONE', *, *, #97, .T. ) ; +#879 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.2000000000000000100, 1.074999999999999700 ) ) ; +#881 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, -0.5000000000000002200 ) ) ; +#880 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#882 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#883 = FACE_OUTER_BOUND ( 'NONE', #4485, .T. ) ; +#884 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#885 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 0.0000000000000000000, -0.7909215920651651000 ) ) ; +#886 = ORIENTED_EDGE ( 'NONE', *, *, #366, .F. ) ; +#887 = VECTOR ( 'NONE', #2094, 1000.000000000000000 ) ; +#888 = VECTOR ( 'NONE', #3395, 1000.000000000000000 ) ; +#889 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5062 ), #7233 ) ; +#890 = PLANE ( 'NONE', #710 ) ; +#891 = ADVANCED_FACE ( 'NONE', ( #7197 ), #5836, .F. ) ; +#892 = EDGE_CURVE ( 'NONE', #4130, #5489, #4273, .T. ) ; +#893 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.2000000000000000900, 1.075000000000000000 ) ) ; +#894 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#895 = ORIENTED_EDGE ( 'NONE', *, *, #6240, .F. ) ; +#896 = LINE ( 'NONE', #2791, #5419 ) ; +#897 = PRESENTATION_STYLE_ASSIGNMENT (( #2062 ) ) ; +#898 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#899 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5702 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5411, #6525, #4867 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#900 = DIRECTION ( 'NONE', ( 1.275531967630005700E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#901 = VERTEX_POINT ( 'NONE', #1916 ) ; +#902 = FACE_OUTER_BOUND ( 'NONE', #5292, .T. ) ; +#903 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6508 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1952, #5415, #6430 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#904 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#905 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.04999999999999969700, -1.500000000000000000 ) ) ; +#906 = ADVANCED_FACE ( 'NONE', ( #6589 ), #793, .F. ) ; +#907 = ORIENTED_EDGE ( 'NONE', *, *, #7173, .T. ) ; +#908 = VECTOR ( 'NONE', #539, 1000.000000000000000 ) ; +#909 = CIRCLE ( 'NONE', #3953, 0.1750000000000000200 ) ; +#910 = VECTOR ( 'NONE', #5822, 1000.000000000000000 ) ; +#911 = PLANE ( 'NONE', #3761 ) ; +#912 = SURFACE_SIDE_STYLE ('',( #3336 ) ) ; +#913 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5543, 'distance_accuracy_value', 'NONE'); +#914 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#915 = ORIENTED_EDGE ( 'NONE', *, *, #959, .T. ) ; +#916 = LINE ( 'NONE', #5068, #2934 ) ; +#917 = EDGE_CURVE ( 'NONE', #7304, #1826, #1428, .T. ) ; +#918 = EDGE_CURVE ( 'NONE', #1814, #6926, #6500, .T. ) ; +#919 = EDGE_CURVE ( 'NONE', #2197, #5552, #5002, .T. ) ; +#920 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6758 ), #3207 ) ; +#921 = LINE ( 'NONE', #2220, #6681 ) ; +#922 = ORIENTED_EDGE ( 'NONE', *, *, #1771, .F. ) ; +#923 = LINE ( 'NONE', #1894, #1624 ) ; +#924 = VECTOR ( 'NONE', #6947, 1000.000000000000000 ) ; +#925 = ORIENTED_EDGE ( 'NONE', *, *, #6213, .F. ) ; +#926 = CARTESIAN_POINT ( 'NONE', ( 1.471417234087468300E-016, 0.05000000000000000300, -0.3799999999999998400 ) ) ; +#927 = FACE_OUTER_BOUND ( 'NONE', #6182, .T. ) ; +#928 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#929 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2808 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2191, #6826, #5648 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#930 = VECTOR ( 'NONE', #5317, 1000.000000000000000 ) ; +#931 = EDGE_LOOP ( 'NONE', ( #1895, #4152, #1370, #5380 ) ) ; +#933 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, 0.8799999999999998900 ) ) ; +#932 = SURFACE_STYLE_USAGE ( .BOTH. , #5996 ) ; +#934 = SURFACE_SIDE_STYLE ('',( #1322 ) ) ; +#935 = LINE ( 'NONE', #3630, #400 ) ; +#936 = ORIENTED_EDGE ( 'NONE', *, *, #96, .F. ) ; +#937 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#938 = LINE ( 'NONE', #1716, #4843 ) ; +#939 = ORIENTED_EDGE ( 'NONE', *, *, #4375, .F. ) ; +#940 = VERTEX_POINT ( 'NONE', #5879 ) ; +#941 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#942 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#943 = FILL_AREA_STYLE_COLOUR ( '', #1788 ) ; +#944 = AXIS2_PLACEMENT_3D ( 'NONE', #1239, #191, #3447 ) ; +#945 = EDGE_LOOP ( 'NONE', ( #6825, #1402, #3509, #1975 ) ) ; +#946 = ADVANCED_FACE ( 'NONE', ( #3727 ), #4722, .T. ) ; +#947 = ORIENTED_EDGE ( 'NONE', *, *, #609, .F. ) ; +#948 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#949 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#950 = VERTEX_POINT ( 'NONE', #5297 ) ; +#951 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, -0.6200000000000001100 ) ) ; +#952 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'part', '', ( #324 ) ) ; +#953 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 5.842640687119285300, 1.499999999999999600 ) ) ; +#955 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.05000000000000012800, 1.074999999999999700 ) ) ; +#954 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#956 = ORIENTED_EDGE ( 'NONE', *, *, #2893, .F. ) ; +#957 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#958 = ORIENTED_EDGE ( 'NONE', *, *, #6141, .T. ) ; +#959 = EDGE_CURVE ( 'NONE', #1315, #5135, #742, .T. ) ; +#960 = DIRECTION ( 'NONE', ( -6.318483184191612600E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#961 = ORIENTED_EDGE ( 'NONE', *, *, #3278, .T. ) ; +#962 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#963 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#964 = ORIENTED_EDGE ( 'NONE', *, *, #140, .F. ) ; +#965 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2361 ), #2561 ) ; +#966 = VECTOR ( 'NONE', #949, 1000.000000000000000 ) ; +#967 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6025, 'distance_accuracy_value', 'NONE'); +#968 = VERTEX_POINT ( 'NONE', #5377 ) ; +#969 = STYLED_ITEM ( 'NONE', ( #3823 ), #7149 ) ; +#970 = EDGE_CURVE ( 'NONE', #7015, #6901, #3184, .T. ) ; +#971 = EDGE_CURVE ( 'NONE', #4106, #254, #916, .T. ) ; +#972 = EDGE_CURVE ( 'NONE', #1543, #3066, #3533, .T. ) ; +#973 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#974 = EDGE_LOOP ( 'NONE', ( #1663, #2156, #3965, #4776 ) ) ; +#975 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1962, 'distance_accuracy_value', 'NONE'); +#976 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#977 = STYLED_ITEM ( 'NONE', ( #1264 ), #4903 ) ; +#978 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#979 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#980 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 0.05000000000000012800, -0.6409215920651651900 ) ) ; +#981 = ORIENTED_EDGE ( 'NONE', *, *, #1237, .F. ) ; +#982 = SURFACE_STYLE_FILL_AREA ( #6549 ) ; +#983 = VECTOR ( 'NONE', #1548, 1000.000000000000000 ) ; +#984 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4245 ), #6436 ) ; +#985 = ADVANCED_FACE ( 'NONE', ( #2400 ), #3911, .F. ) ; +#986 = SURFACE_STYLE_USAGE ( .BOTH. , #5421 ) ; +#987 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#988 = VECTOR ( 'NONE', #1992, 1000.000000000000000 ) ; +#989 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#990 = SURFACE_STYLE_FILL_AREA ( #3978 ) ; +#991 = SURFACE_STYLE_USAGE ( .BOTH. , #5605 ) ; +#992 = AXIS2_PLACEMENT_3D ( 'NONE', #1953, #5390, #5968 ) ; +#993 = SURFACE_STYLE_FILL_AREA ( #4849 ) ; +#994 = ORIENTED_EDGE ( 'NONE', *, *, #5578, .F. ) ; +#995 = VECTOR ( 'NONE', #1384, 1000.000000000000000 ) ; +#996 = LINE ( 'NONE', #3538, #6850 ) ; +#997 = LINE ( 'NONE', #644, #6851 ) ; +#998 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 0.05000000000000012800, -0.7909215920651651000 ) ) ; +#999 = PRESENTATION_STYLE_ASSIGNMENT (( #5321 ) ) ; +#1000 = SURFACE_SIDE_STYLE ('',( #4085 ) ) ; +#1001 = FILL_AREA_STYLE_COLOUR ( '', #2567 ) ; +#1002 = EDGE_LOOP ( 'NONE', ( #1702, #5181, #4598, #5418 ) ) ; +#1003 = VECTOR ( 'NONE', #7271, 1000.000000000000000 ) ; +#1004 = VECTOR ( 'NONE', #5058, 1000.000000000000000 ) ; +#1005 = ORIENTED_EDGE ( 'NONE', *, *, #2603, .F. ) ; +#1006 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2972 ), #6048 ) ; +#1007 = LINE ( 'NONE', #6982, #3190 ) ; +#1008 = FILL_AREA_STYLE ('',( #455 ) ) ; +#1009 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, 0.3799999999999998900 ) ) ; +#1010 = DIRECTION ( 'NONE', ( 3.872150616019654400E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1011 = VECTOR ( 'NONE', #2700, 1000.000000000000000 ) ; +#1012 = AXIS2_PLACEMENT_3D ( 'NONE', #5442, #5994, #3705 ) ; +#1013 = VECTOR ( 'NONE', #6834, 1000.000000000000000 ) ; +#1014 = EDGE_CURVE ( 'NONE', #442, #2314, #401, .T. ) ; +#1015 = ORIENTED_EDGE ( 'NONE', *, *, #1996, .F. ) ; +#1016 = EDGE_CURVE ( 'NONE', #247, #1927, #4633, .T. ) ; +#1017 = EDGE_CURVE ( 'NONE', #2261, #3222, #2049, .T. ) ; +#1018 = ORIENTED_EDGE ( 'NONE', *, *, #3405, .F. ) ; +#1019 = PRESENTATION_STYLE_ASSIGNMENT (( #3518 ) ) ; +#1020 = ADVANCED_FACE ( 'NONE', ( #6765 ), #4490, .T. ) ; +#1021 = AXIS2_PLACEMENT_3D ( 'NONE', #5457, #6172, #2793 ) ; +#1022 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1023 = EDGE_LOOP ( 'NONE', ( #6026, #2454, #4956, #2169 ) ) ; +#1024 = ORIENTED_EDGE ( 'NONE', *, *, #4141, .F. ) ; +#1025 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#1026 = STYLED_ITEM ( 'NONE', ( #2455 ), #6147 ) ; +#1028 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1027 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1029 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.3800000000000003400 ) ) ; +#1030 = ORIENTED_EDGE ( 'NONE', *, *, #1373, .F. ) ; +#1031 = ORIENTED_EDGE ( 'NONE', *, *, #2123, .T. ) ; +#1032 = AXIS2_PLACEMENT_3D ( 'NONE', #3959, #3398, #1739 ) ; +#1033 = PLANE ( 'NONE', #481 ) ; +#1034 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, -1.000000000000000200 ) ) ; +#1035 = EDGE_LOOP ( 'NONE', ( #1378, #5610, #2151, #2604 ) ) ; +#1036 = PLANE ( 'NONE', #6308 ) ; +#1037 = ORIENTED_EDGE ( 'NONE', *, *, #4159, .F. ) ; +#1038 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.0000000000000000000, -1.075000000000000000 ) ) ; +#1039 = AXIS2_PLACEMENT_3D ( 'NONE', #6791, #3458, #4560 ) ; +#1040 = LINE ( 'NONE', #6391, #6184 ) ; +#1041 = FILL_AREA_STYLE ('',( #4429 ) ) ; +#1042 = VERTEX_POINT ( 'NONE', #6236 ) ; +#1043 = ORIENTED_EDGE ( 'NONE', *, *, #4422, .F. ) ; +#1044 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.5000000000000002200 ) ) ; +#1045 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1046 = LINE ( 'NONE', #7108, #2444 ) ; +#1047 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.8000000000000003800, 1.499999999999999600 ) ) ; +#1048 = ADVANCED_FACE ( 'NONE', ( #4819 ), #1033, .T. ) ; +#1049 = ORIENTED_EDGE ( 'NONE', *, *, #3491, .F. ) ; +#1050 = EDGE_LOOP ( 'NONE', ( #925, #3816, #1248, #5846 ) ) ; +#1051 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, 1.119999999999999400 ) ) ; +#1052 = EDGE_CURVE ( 'NONE', #6432, #610, #3455, .T. ) ; +#1053 = VERTEX_POINT ( 'NONE', #574 ) ; +#1054 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.6999999999999999600, -1.100000000000000500 ) ) ; +#1055 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 1.499999999999999600 ) ) ; +#1056 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 1.499999999999999600 ) ) ; +#1057 = STYLED_ITEM ( 'NONE', ( #999 ), #3691 ) ; +#1058 = LINE ( 'NONE', #4972, #887 ) ; +#1059 = PLANE ( 'NONE', #4827 ) ; +#1060 = LINE ( 'NONE', #6832, #4982 ) ; +#1062 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.5000000000000002200 ) ) ; +#1061 = FILL_AREA_STYLE_COLOUR ( '', #3152 ) ; +#1063 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.2000000000000000100, 1.074999999999999700 ) ) ; +#1064 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, 0.1199999999999996600 ) ) ; +#1065 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, 0.3799999999999998900 ) ) ; +#1066 = SURFACE_STYLE_USAGE ( .BOTH. , #3985 ) ; +#1067 = AXIS2_PLACEMENT_3D ( 'NONE', #4952, #2647, #6022 ) ; +#1068 = FACE_OUTER_BOUND ( 'NONE', #4732, .T. ) ; +#1069 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, -1.120000000000000100 ) ) ; +#1070 = SURFACE_STYLE_FILL_AREA ( #5022 ) ; +#1071 = AXIS2_PLACEMENT_3D ( 'NONE', #153, #4103, #6326 ) ; +#1072 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654900E-016 ) ) ; +#1073 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1074 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1075 = ORIENTED_EDGE ( 'NONE', *, *, #1769, .F. ) ; +#1076 = VECTOR ( 'NONE', #2294, 1000.000000000000000 ) ; +#1077 = ADVANCED_FACE ( 'NONE', ( #669 ), #5622, .T. ) ; +#1078 = VERTEX_POINT ( 'NONE', #2170 ) ; +#1079 = VECTOR ( 'NONE', #4048, 1000.000000000000000 ) ; +#1080 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, 0.3799999999999998900 ) ) ; +#1081 = LINE ( 'NONE', #1688, #3914 ) ; +#1082 = ORIENTED_EDGE ( 'NONE', *, *, #5824, .F. ) ; +#1083 = PLANE ( 'NONE', #32 ) ; +#1084 = VECTOR ( 'NONE', #3166, 1000.000000000000000 ) ; +#1085 = LINE ( 'NONE', #1757, #3013 ) ; +#1086 = ORIENTED_EDGE ( 'NONE', *, *, #1770, .T. ) ; +#1087 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1088 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1089 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1090 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5056 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5546, #5970, #248 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1091 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7184, 'distance_accuracy_value', 'NONE'); +#1092 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1093 = VECTOR ( 'NONE', #2016, 1000.000000000000000 ) ; +#1094 = AXIS2_PLACEMENT_3D ( 'NONE', #5896, #6454, #302 ) ; +#1095 = ORIENTED_EDGE ( 'NONE', *, *, #2273, .T. ) ; +#1096 = VERTEX_POINT ( 'NONE', #3866 ) ; +#1097 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, -0.3800000000000003400 ) ) ; +#1098 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, -0.0000000000000000000, -0.6409215920651651900 ) ) ; +#1099 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#1100 = SURFACE_STYLE_USAGE ( .BOTH. , #3329 ) ; +#1101 = STYLED_ITEM ( 'NONE', ( #5439 ), #7243 ) ; +#1102 = EDGE_CURVE ( 'NONE', #186, #4948, #1873, .T. ) ; +#1103 = EDGE_CURVE ( 'NONE', #1911, #4132, #2741, .T. ) ; +#1104 = EDGE_CURVE ( 'NONE', #514, #4320, #2388, .T. ) ; +#1105 = EDGE_LOOP ( 'NONE', ( #4832, #1759, #6219, #1573 ) ) ; +#1106 = ORIENTED_EDGE ( 'NONE', *, *, #6974, .T. ) ; +#1107 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4767 ) ) ; +#1108 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#1109 = PLANE ( 'NONE', #3677 ) ; +#1110 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1111 = ORIENTED_EDGE ( 'NONE', *, *, #1729, .F. ) ; +#1112 = AXIS2_PLACEMENT_3D ( 'NONE', #3989, #2297, #678 ) ; +#1113 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1114 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005500E-016 ) ) ; +#1115 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#1116 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.5000000000000002200 ) ) ; +#1117 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 2.940894014733149000, 1.075000000000000000 ) ) ; +#1118 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4164 ), #4834 ) ; +#1119 = ADVANCED_FACE ( 'NONE', ( #4007 ), #5143, .F. ) ; +#1120 = ORIENTED_EDGE ( 'NONE', *, *, #1188, .F. ) ; +#1121 = EDGE_CURVE ( 'NONE', #4207, #3295, #3445, .T. ) ; +#1122 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.6697073557013986100, -1.074999999999999700 ) ) ; +#1123 = ORIENTED_EDGE ( 'NONE', *, *, #5918, .T. ) ; +#1124 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 0.2000000000000000900, -0.9409215920651650100 ) ) ; +#1125 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 2.940894014733149000, 1.075000000000000000 ) ) ; +#1126 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1127 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1128 = FILL_AREA_STYLE ('',( #6191 ) ) ; +#1129 = EDGE_LOOP ( 'NONE', ( #2246, #5592, #5937, #6282 ) ) ; +#1130 = CYLINDRICAL_SURFACE ( 'NONE', #535, 0.1199999999999998800 ) ; +#1131 = AXIS2_PLACEMENT_3D ( 'NONE', #2113, #6036, #6551 ) ; +#1132 = ORIENTED_EDGE ( 'NONE', *, *, #919, .F. ) ; +#1133 = VERTEX_POINT ( 'NONE', #6877 ) ; +#1134 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1135 = AXIS2_PLACEMENT_3D ( 'NONE', #3979, #4601, #588 ) ; +#1136 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1137 = VECTOR ( 'NONE', #2658, 1000.000000000000000 ) ; +#1138 = ORIENTED_EDGE ( 'NONE', *, *, #1492, .T. ) ; +#1139 = PRODUCT_CONTEXT ( 'NONE', #492, 'mechanical' ) ; +#1140 = PLANE ( 'NONE', #666 ) ; +#1141 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1142 = ORIENTED_EDGE ( 'NONE', *, *, #3645, .F. ) ; +#1143 = FILL_AREA_STYLE_COLOUR ( '', #6249 ) ; +#1144 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1145 = EDGE_CURVE ( 'NONE', #4986, #24, #7274, .T. ) ; +#1146 = EDGE_CURVE ( 'NONE', #431, #4023, #2926, .T. ) ; +#1147 = EDGE_CURVE ( 'NONE', #5913, #7055, #4264, .T. ) ; +#1148 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.6697073557013986100, 1.074999999999999700 ) ) ; +#1149 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.0000000000000000000, -1.075000000000000000 ) ) ; +#1150 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, -1.500000000000000400 ) ) ; +#1151 = FILL_AREA_STYLE ('',( #4552 ) ) ; +#1152 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6685 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1410, #6530, #3685 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1153 = ADVANCED_FACE ( 'NONE', ( #1336 ), #4609, .F. ) ; +#1154 = ORIENTED_EDGE ( 'NONE', *, *, #6377, .T. ) ; +#1155 = LINE ( 'NONE', #6269, #43 ) ; +#1156 = FACE_OUTER_BOUND ( 'NONE', #4603, .T. ) ; +#1157 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1026 ), #6112 ) ; +#1158 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#1159 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1160 = ORIENTED_EDGE ( 'NONE', *, *, #6970, .F. ) ; +#1161 = FACE_OUTER_BOUND ( 'NONE', #5810, .T. ) ; +#1162 = LINE ( 'NONE', #2500, #480 ) ; +#1163 = SURFACE_STYLE_USAGE ( .BOTH. , #1816 ) ; +#1164 = ORIENTED_EDGE ( 'NONE', *, *, #6854, .T. ) ; +#1165 = VECTOR ( 'NONE', #1942, 1000.000000000000000 ) ; +#1166 = VECTOR ( 'NONE', #136, 1000.000000000000000 ) ; +#1167 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #436 ) ) ; +#1168 = SURFACE_STYLE_FILL_AREA ( #2347 ) ; +#1169 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, -0.5000000000000002200 ) ) ; +#1170 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 0.1199999999999995500 ) ) ; +#1171 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#1172 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.318483184191612600E-017 ) ) ; +#1173 = ORIENTED_EDGE ( 'NONE', *, *, #4234, .F. ) ; +#1174 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#1175 = VECTOR ( 'NONE', #6846, 1000.000000000000000 ) ; +#1176 = ORIENTED_EDGE ( 'NONE', *, *, #7123, .T. ) ; +#1177 = VECTOR ( 'NONE', #3597, 1000.000000000000000 ) ; +#1178 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#1179 = LINE ( 'NONE', #4548, #7022 ) ; +#1180 = VECTOR ( 'NONE', #2118, 1000.000000000000000 ) ; +#1181 = VERTEX_POINT ( 'NONE', #1793 ) ; +#1182 = VECTOR ( 'NONE', #737, 1000.000000000000000 ) ; +#1183 = ORIENTED_EDGE ( 'NONE', *, *, #775, .F. ) ; +#1184 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3449, 'distance_accuracy_value', 'NONE'); +#1185 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, -0.8800000000000003400 ) ) ; +#1186 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.1999999999999999800, 1.074999999999999700 ) ) ; +#1187 = ORIENTED_EDGE ( 'NONE', *, *, #1870, .T. ) ; +#1188 = EDGE_CURVE ( 'NONE', #7208, #185, #7010, .T. ) ; +#1189 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1191 = ORIENTED_EDGE ( 'NONE', *, *, #4760, .T. ) ; +#1190 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #621, 'distance_accuracy_value', 'NONE'); +#1192 = ADVANCED_FACE ( 'NONE', ( #1958 ), #3007, .T. ) ; +#1193 = VECTOR ( 'NONE', #6824, 1000.000000000000000 ) ; +#1194 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#1195 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2082 ) ) ; +#1196 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1197 = ORIENTED_EDGE ( 'NONE', *, *, #647, .T. ) ; +#1198 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1199 = ORIENTED_EDGE ( 'NONE', *, *, #4058, .F. ) ; +#1200 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1201 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #558 ) ) ; +#1202 = EDGE_CURVE ( 'NONE', #371, #6721, #6664, .T. ) ; +#1203 = EDGE_CURVE ( 'NONE', #2068, #3664, #7097, .T. ) ; +#1204 = VERTEX_POINT ( 'NONE', #5123 ) ; +#1205 = STYLED_ITEM ( 'NONE', ( #4297 ), #4468 ) ; +#1206 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 0.0000000000000000000, -0.6409215920651651900 ) ) ; +#1207 = PLANE ( 'NONE', #1135 ) ; +#1208 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1209 = AXIS2_PLACEMENT_3D ( 'NONE', #2193, #1, #5626 ) ; +#1210 = ORIENTED_EDGE ( 'NONE', *, *, #2909, .F. ) ; +#1211 = FACE_OUTER_BOUND ( 'NONE', #5752, .T. ) ; +#1212 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, 0.1199999999999996600 ) ) ; +#1213 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1214 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3806 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2475, #3042, #3579 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1215 = ORIENTED_EDGE ( 'NONE', *, *, #1727, .T. ) ; +#1216 = VERTEX_POINT ( 'NONE', #4020 ) ; +#1217 = PRESENTATION_STYLE_ASSIGNMENT (( #4253 ) ) ; +#1218 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1219 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1220 = EDGE_LOOP ( 'NONE', ( #830, #5803, #3873, #4210 ) ) ; +#1221 = EDGE_LOOP ( 'NONE', ( #606, #3986, #1142, #6864 ) ) ; +#1222 = LINE ( 'NONE', #4314, #4505 ) ; +#1223 = ADVANCED_FACE ( 'NONE', ( #6325 ), #6266, .T. ) ; +#1224 = SURFACE_SIDE_STYLE ('',( #1467 ) ) ; +#1225 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1226 = ORIENTED_EDGE ( 'NONE', *, *, #5859, .F. ) ; +#1227 = LINE ( 'NONE', #6714, #2372 ) ; +#1228 = AXIS2_PLACEMENT_3D ( 'NONE', #5371, #4744, #4765 ) ; +#1229 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.05000000000000012800, -1.074999999999999700 ) ) ; +#1230 = EDGE_LOOP ( 'NONE', ( #1818, #5581, #6224, #171 ) ) ; +#1231 = LINE ( 'NONE', #1983, #4430 ) ; +#1232 = LINE ( 'NONE', #4797, #44 ) ; +#1233 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1234 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3114 ) ) ; +#1235 = EDGE_CURVE ( 'NONE', #3261, #6630, #997, .T. ) ; +#1236 = EDGE_CURVE ( 'NONE', #4752, #1353, #5343, .T. ) ; +#1237 = EDGE_CURVE ( 'NONE', #7103, #1181, #1420, .T. ) ; +#1238 = FILL_AREA_STYLE_COLOUR ( '', #2129 ) ; +#1239 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, -2.168404344971008900E-016 ) ) ; +#1240 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1241 = ORIENTED_EDGE ( 'NONE', *, *, #4958, .T. ) ; +#1242 = PRESENTATION_STYLE_ASSIGNMENT (( #5615 ) ) ; +#1243 = CIRCLE ( 'NONE', #3821, 0.1199999999999998800 ) ; +#1244 = AXIS2_PLACEMENT_3D ( 'NONE', #6679, #3255, #4955 ) ; +#1245 = PRESENTATION_STYLE_ASSIGNMENT (( #1291 ) ) ; +#1246 = FACE_OUTER_BOUND ( 'NONE', #1691, .T. ) ; +#1247 = AXIS2_PLACEMENT_3D ( 'NONE', #5742, #1733, #2878 ) ; +#1248 = ORIENTED_EDGE ( 'NONE', *, *, #690, .T. ) ; +#1249 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1250 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1251 = VECTOR ( 'NONE', #4042, 1000.000000000000000 ) ; +#1252 = FILL_AREA_STYLE_COLOUR ( '', #4917 ) ; +#1253 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1254 = AXIS2_PLACEMENT_3D ( 'NONE', #998, #6115, #6135 ) ; +#1255 = EDGE_CURVE ( 'NONE', #1053, #7248, #305, .T. ) ; +#1256 = CIRCLE ( 'NONE', #7171, 0.1199999999999998800 ) ; +#1257 = VERTEX_POINT ( 'NONE', #2998 ) ; +#1258 = SURFACE_STYLE_USAGE ( .BOTH. , #4681 ) ; +#1259 = LINE ( 'NONE', #354, #7109 ) ; +#1260 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, 0.1199999999999996600 ) ) ; +#1261 = FACE_OUTER_BOUND ( 'NONE', #2470, .T. ) ; +#1262 = VECTOR ( 'NONE', #503, 1000.000000000000000 ) ; +#1263 = ORIENTED_EDGE ( 'NONE', *, *, #4131, .F. ) ; +#1264 = PRESENTATION_STYLE_ASSIGNMENT (( #708 ) ) ; +#1265 = VECTOR ( 'NONE', #3876, 1000.000000000000000 ) ; +#1266 = VERTEX_POINT ( 'NONE', #6381 ) ; +#1267 = AXIS2_PLACEMENT_3D ( 'NONE', #515, #1633, #5608 ) ; +#1268 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1269 = VECTOR ( 'NONE', #3199, 1000.000000000000000 ) ; +#1270 = FILL_AREA_STYLE_COLOUR ( '', #2945 ) ; +#1271 = FILL_AREA_STYLE ('',( #5922 ) ) ; +#1272 = STYLED_ITEM ( 'NONE', ( #5304 ), #174 ) ; +#1273 = VERTEX_POINT ( 'NONE', #5863 ) ; +#1274 = ORIENTED_EDGE ( 'NONE', *, *, #3999, .F. ) ; +#1275 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1276 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1277 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #2927, #7186 ) ; +#1278 = ORIENTED_EDGE ( 'NONE', *, *, #387, .F. ) ; +#1279 = ORIENTED_EDGE ( 'NONE', *, *, #6932, .F. ) ; +#1280 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#1281 = EDGE_CURVE ( 'NONE', #4679, #1919, #4806, .T. ) ; +#1282 = EDGE_CURVE ( 'NONE', #4777, #5659, #1517, .T. ) ; +#1283 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.04999999999999999600, 0.3799999999999998900 ) ) ; +#1284 = EDGE_CURVE ( 'NONE', #2006, #4226, #3903, .T. ) ; +#1285 = VERTEX_POINT ( 'NONE', #3516 ) ; +#1286 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2361 ) ) ; +#1287 = VERTEX_POINT ( 'NONE', #4685 ) ; +#1288 = FILL_AREA_STYLE_COLOUR ( '', #2843 ) ; +#1289 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1290 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1291 = SURFACE_STYLE_USAGE ( .BOTH. , #4692 ) ; +#1292 = ORIENTED_EDGE ( 'NONE', *, *, #4663, .T. ) ; +#1293 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1680 ) ) ; +#1294 = EDGE_LOOP ( 'NONE', ( #2018, #4913, #5392, #4935 ) ) ; +#1295 = ORIENTED_EDGE ( 'NONE', *, *, #4019, .F. ) ; +#1296 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#1297 = SURFACE_STYLE_FILL_AREA ( #6886 ) ; +#1298 = VERTEX_POINT ( 'NONE', #5889 ) ; +#1299 = VERTEX_POINT ( 'NONE', #3567 ) ; +#1300 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1301 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#1302 = AXIS2_PLACEMENT_3D ( 'NONE', #467, #2642, #1555 ) ; +#1303 = FILL_AREA_STYLE ('',( #3933 ) ) ; +#1304 = CARTESIAN_POINT ( 'NONE', ( -1.371196865202255700E-016, 0.05000000000000000300, 1.075000000000000000 ) ) ; +#1305 = SURFACE_STYLE_USAGE ( .BOTH. , #3548 ) ; +#1306 = EDGE_LOOP ( 'NONE', ( #878, #2921, #3845, #1881 ) ) ; +#1307 = LINE ( 'NONE', #590, #2281 ) ; +#1308 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1309 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1687, 'distance_accuracy_value', 'NONE'); +#1310 = ORIENTED_EDGE ( 'NONE', *, *, #140, .T. ) ; +#1311 = PRESENTATION_STYLE_ASSIGNMENT (( #5318 ) ) ; +#1312 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1313 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1314 = EDGE_CURVE ( 'NONE', #2197, #867, #4546, .T. ) ; +#1315 = VERTEX_POINT ( 'NONE', #187 ) ; +#1316 = LINE ( 'NONE', #5757, #3431 ) ; +#1317 = FACE_OUTER_BOUND ( 'NONE', #70, .T. ) ; +#1318 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1319 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1057 ), #5630 ) ; +#1320 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#1321 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#1322 = SURFACE_STYLE_FILL_AREA ( #3221 ) ; +#1323 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3754 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #425, #3170, #6114 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1324 = EDGE_CURVE ( 'NONE', #3566, #1495, #3627, .T. ) ; +#1325 = EDGE_CURVE ( 'NONE', #2580, #25, #2837, .T. ) ; +#1326 = EDGE_CURVE ( 'NONE', #845, #4587, #662, .T. ) ; +#1327 = LINE ( 'NONE', #4167, #3811 ) ; +#1328 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.8000000000000000400, -1.100000000000000500 ) ) ; +#1329 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1330 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1331 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, 0.1199999999999995500 ) ) ; +#1332 = FILL_AREA_STYLE_COLOUR ( '', #5964 ) ; +#1333 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6062 ), #461 ) ; +#1334 = ORIENTED_EDGE ( 'NONE', *, *, #2227, .F. ) ; +#1335 = PRESENTATION_STYLE_ASSIGNMENT (( #4788 ) ) ; +#1336 = FACE_OUTER_BOUND ( 'NONE', #1221, .T. ) ; +#1337 = VECTOR ( 'NONE', #1604, 1000.000000000000000 ) ; +#1338 = VECTOR ( 'NONE', #7215, 1000.000000000000000 ) ; +#1339 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3036 ), #2098 ) ; +#1340 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1341 = FILL_AREA_STYLE ('',( #4695 ) ) ; +#1342 = SURFACE_STYLE_FILL_AREA ( #3001 ) ; +#1343 = DIRECTION ( 'NONE', ( 3.872150616019654900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1344 = PLANE ( 'NONE', #4369 ) ; +#1345 = ORIENTED_EDGE ( 'NONE', *, *, #3610, .F. ) ; +#1346 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1347 = LINE ( 'NONE', #3980, #750 ) ; +#1348 = ORIENTED_EDGE ( 'NONE', *, *, #3259, .F. ) ; +#1349 = FACE_OUTER_BOUND ( 'NONE', #4148, .T. ) ; +#1350 = CIRCLE ( 'NONE', #4931, 0.1750000000000000200 ) ; +#1351 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1352 = LINE ( 'NONE', #3231, #6154 ) ; +#1353 = VERTEX_POINT ( 'NONE', #4187 ) ; +#1354 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#1355 = PRESENTATION_STYLE_ASSIGNMENT (( #6952 ) ) ; +#1356 = VERTEX_POINT ( 'NONE', #1321 ) ; +#1357 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 0.3799999999999998900 ) ) ; +#1358 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 0.3799999999999998900 ) ) ; +#1359 = ADVANCED_FACE ( 'NONE', ( #820 ), #1903, .T. ) ; +#1360 = STYLED_ITEM ( 'NONE', ( #732 ), #2011 ) ; +#1361 = EDGE_LOOP ( 'NONE', ( #5890, #3910, #1030, #1120 ) ) ; +#1362 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1363 = VERTEX_POINT ( 'NONE', #6423 ) ; +#1364 = VECTOR ( 'NONE', #6671, 1000.000000000000000 ) ; +#1365 = VERTEX_POINT ( 'NONE', #1358 ) ; +#1366 = VERTEX_POINT ( 'NONE', #5331 ) ; +#1367 = DIRECTION ( 'NONE', ( 3.872150616019654900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1368 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#1369 = AXIS2_PLACEMENT_3D ( 'NONE', #4477, #6787, #30 ) ; +#1370 = ORIENTED_EDGE ( 'NONE', *, *, #3790, .T. ) ; +#1371 = STYLED_ITEM ( 'NONE', ( #4619 ), #7279 ) ; +#1372 = EDGE_CURVE ( 'NONE', #54, #6143, #2122, .T. ) ; +#1373 = EDGE_CURVE ( 'NONE', #185, #3838, #3089, .T. ) ; +#1374 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, -0.6200000000000001100 ) ) ; +#1375 = EDGE_CURVE ( 'NONE', #2779, #751, #1600, .T. ) ; +#1376 = ORIENTED_EDGE ( 'NONE', *, *, #2271, .T. ) ; +#1377 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.6199999999999996600 ) ) ; +#1378 = ORIENTED_EDGE ( 'NONE', *, *, #3696, .F. ) ; +#1379 = DIRECTION ( 'NONE', ( 1.275531967630005700E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1380 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5203 ), #4428 ) ; +#1381 = SURFACE_STYLE_FILL_AREA ( #2305 ) ; +#1383 = SURFACE_STYLE_USAGE ( .BOTH. , #3657 ) ; +#1382 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -0.1200000000000000900 ) ) ; +#1384 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1385 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.0000000000000000000, 1.074999999999999700 ) ) ; +#1386 = EDGE_LOOP ( 'NONE', ( #337, #2794, #6799, #1710 ) ) ; +#1387 = AXIS2_PLACEMENT_3D ( 'NONE', #6004, #1493, #3693 ) ; +#1388 = ORIENTED_EDGE ( 'NONE', *, *, #1326, .T. ) ; +#1389 = LINE ( 'NONE', #6728, #4150 ) ; +#1390 = CIRCLE ( 'NONE', #298, 0.1499999999999999700 ) ; +#1391 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6119 ) ) ; +#1392 = ORIENTED_EDGE ( 'NONE', *, *, #3202, .F. ) ; +#1393 = PLANE ( 'NONE', #5972 ) ; +#1394 = PLANE ( 'NONE', #4636 ) ; +#1395 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, 0.3799999999999998900 ) ) ; +#1396 = ORIENTED_EDGE ( 'NONE', *, *, #5154, .F. ) ; +#1397 = VERTEX_POINT ( 'NONE', #229 ) ; +#1398 = SURFACE_STYLE_FILL_AREA ( #1303 ) ; +#1399 = LINE ( 'NONE', #427, #1929 ) ; +#1400 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1401 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1402 = ORIENTED_EDGE ( 'NONE', *, *, #1668, .T. ) ; +#1403 = PRESENTATION_STYLE_ASSIGNMENT (( #4258 ) ) ; +#1404 = LINE ( 'NONE', #1807, #544 ) ; +#1405 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5263, 'distance_accuracy_value', 'NONE'); +#1406 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2643 ) ) ; +#1408 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1407 = SURFACE_STYLE_USAGE ( .BOTH. , #6527 ) ; +#1409 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, 0.6199999999999995500 ) ) ; +#1410 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1411 = LINE ( 'NONE', #4575, #808 ) ; +#1412 = FACE_OUTER_BOUND ( 'NONE', #4489, .T. ) ; +#1413 = ADVANCED_FACE ( 'NONE', ( #4535 ), #4309, .F. ) ; +#1414 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1415 = VECTOR ( 'NONE', #3392, 1000.000000000000000 ) ; +#1416 = PLANE ( 'NONE', #6009 ) ; +#1417 = EDGE_CURVE ( 'NONE', #5558, #2379, #4898, .T. ) ; +#1418 = LINE ( 'NONE', #1456, #2301 ) ; +#1419 = SURFACE_STYLE_FILL_AREA ( #6735 ) ; +#1420 = LINE ( 'NONE', #5170, #4087 ) ; +#1421 = AXIS2_PLACEMENT_3D ( 'NONE', #1432, #3103, #6529 ) ; +#1422 = PLANE ( 'NONE', #6761 ) ; +#1423 = ADVANCED_FACE ( 'NONE', ( #6052 ), #6545, .F. ) ; +#1424 = FILL_AREA_STYLE ('',( #6573 ) ) ; +#1425 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1742 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2043, #2562, #5486 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1426 = EDGE_LOOP ( 'NONE', ( #5402, #2697, #6645, #2982 ) ) ; +#1427 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#1428 = LINE ( 'NONE', #746, #6237 ) ; +#1429 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, 0.4999999999999997800 ) ) ; +#1430 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1431 = FILL_AREA_STYLE_COLOUR ( '', #740 ) ; +#1432 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, 1.119999999999999400 ) ) ; +#1433 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1434 = VECTOR ( 'NONE', #1669, 1000.000000000000000 ) ; +#1435 = LINE ( 'NONE', #4419, #4022 ) ; +#1436 = ORIENTED_EDGE ( 'NONE', *, *, #7090, .T. ) ; +#1437 = VECTOR ( 'NONE', #2954, 1000.000000000000000 ) ; +#1438 = ORIENTED_EDGE ( 'NONE', *, *, #1417, .T. ) ; +#1439 = VECTOR ( 'NONE', #3476, 1000.000000000000000 ) ; +#1440 = STYLED_ITEM ( 'NONE', ( #5541 ), #6734 ) ; +#1441 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1442 = SURFACE_STYLE_USAGE ( .BOTH. , #912 ) ; +#1443 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7036, 'distance_accuracy_value', 'NONE'); +#1444 = LINE ( 'NONE', #3133, #6781 ) ; +#1445 = ORIENTED_EDGE ( 'NONE', *, *, #3018, .F. ) ; +#1446 = EDGE_LOOP ( 'NONE', ( #4804, #2768, #3108, #3502 ) ) ; +#1447 = MANIFOLD_SOLID_BREP ( 'LPattern4[7]', #1590 ) ; +#1448 = ADVANCED_FACE ( 'NONE', ( #3176 ), #3143, .F. ) ; +#1449 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1450 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1451 = EDGE_LOOP ( 'NONE', ( #2956, #279, #2544, #2009 ) ) ; +#1452 = ORIENTED_EDGE ( 'NONE', *, *, #5284, .F. ) ; +#1453 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1454 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1455 = FILL_AREA_STYLE_COLOUR ( '', #3792 ) ; +#1456 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#1457 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1458 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#1459 = ORIENTED_EDGE ( 'NONE', *, *, #416, .F. ) ; +#1460 = ORIENTED_EDGE ( 'NONE', *, *, #1666, .F. ) ; +#1461 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #399 ) ) ; +#1462 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -0.6200000000000001100 ) ) ; +#1463 = ADVANCED_FACE ( 'NONE', ( #4077 ), #2918, .F. ) ; +#1464 = ORIENTED_EDGE ( 'NONE', *, *, #2126, .F. ) ; +#1465 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1466 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#1467 = SURFACE_STYLE_FILL_AREA ( #3481 ) ; +#1468 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6845 ) ) ; +#1469 = VERTEX_POINT ( 'NONE', #3676 ) ; +#1470 = VERTEX_POINT ( 'NONE', #2660 ) ; +#1471 = STYLED_ITEM ( 'NONE', ( #2202 ), #5650 ) ; +#1472 = EDGE_CURVE ( 'NONE', #3456, #371, #6919, .T. ) ; +#1473 = EDGE_CURVE ( 'NONE', #1365, #5408, #2382, .T. ) ; +#1474 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1475 = EDGE_CURVE ( 'NONE', #5451, #2490, #2735, .T. ) ; +#1476 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, 0.8799999999999998900 ) ) ; +#1477 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1478 = ORIENTED_EDGE ( 'NONE', *, *, #608, .F. ) ; +#1479 = AXIS2_PLACEMENT_3D ( 'NONE', #2782, #2188, #6233 ) ; +#1480 = ORIENTED_EDGE ( 'NONE', *, *, #828, .T. ) ; +#1481 = SURFACE_STYLE_USAGE ( .BOTH. , #6134 ) ; +#1483 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1482 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1484 = VECTOR ( 'NONE', #84, 1000.000000000000000 ) ; +#1485 = LINE ( 'NONE', #4166, #2021 ) ; +#1486 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1487 = AXIS2_PLACEMENT_3D ( 'NONE', #1725, #117, #2344 ) ; +#1488 = ADVANCED_FACE ( 'NONE', ( #4700 ), #7224, .T. ) ; +#1489 = ORIENTED_EDGE ( 'NONE', *, *, #4378, .F. ) ; +#1490 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5454 ) ) ; +#1491 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1492 = EDGE_CURVE ( 'NONE', #7077, #1469, #7092, .T. ) ; +#1493 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1494 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#1495 = VERTEX_POINT ( 'NONE', #4382 ) ; +#1496 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1497 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6598 ) ) ; +#1498 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#1499 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2471, 'distance_accuracy_value', 'NONE'); +#1500 = ORIENTED_EDGE ( 'NONE', *, *, #6614, .F. ) ; +#1501 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#1502 = VECTOR ( 'NONE', #1866, 1000.000000000000000 ) ; +#1503 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1505 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1504 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1506 = FILL_AREA_STYLE_COLOUR ( '', #55 ) ; +#1507 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.8000000000000000400, -1.275000000000000600 ) ) ; +#1508 = ORIENTED_EDGE ( 'NONE', *, *, #1236, .T. ) ; +#1509 = LINE ( 'NONE', #3707, #5876 ) ; +#1510 = LINE ( 'NONE', #4915, #4709 ) ; +#1511 = FACE_OUTER_BOUND ( 'NONE', #1566, .T. ) ; +#1512 = PLANE ( 'NONE', #1067 ) ; +#1513 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1514 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.04999999999999999600, -1.120000000000000100 ) ) ; +#1515 = ORIENTED_EDGE ( 'NONE', *, *, #5954, .T. ) ; +#1516 = FACE_OUTER_BOUND ( 'NONE', #3945, .T. ) ; +#1517 = LINE ( 'NONE', #2961, #6757 ) ; +#1518 = EDGE_CURVE ( 'NONE', #4219, #2261, #3718, .T. ) ; +#1519 = LINE ( 'NONE', #2762, #5445 ) ; +#1520 = EDGE_CURVE ( 'NONE', #4417, #2068, #6574, .T. ) ; +#1521 = EDGE_CURVE ( 'NONE', #3043, #968, #1243, .T. ) ; +#1522 = ADVANCED_FACE ( 'NONE', ( #902 ), #3168, .F. ) ; +#1523 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #419 ) ) ; +#1524 = ORIENTED_EDGE ( 'NONE', *, *, #2611, .F. ) ; +#1525 = VECTOR ( 'NONE', #2946, 1000.000000000000000 ) ; +#1526 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, 0.3799999999999998900 ) ) ; +#1527 = VECTOR ( 'NONE', #1126, 1000.000000000000000 ) ; +#1528 = FACE_OUTER_BOUND ( 'NONE', #4137, .T. ) ; +#1529 = VERTEX_POINT ( 'NONE', #1501 ) ; +#1530 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1531 = VECTOR ( 'NONE', #5868, 1000.000000000000000 ) ; +#1532 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -2.168404344971008900E-016 ) ) ; +#1533 = AXIS2_PLACEMENT_3D ( 'NONE', #7049, #5376, #4720 ) ; +#1534 = LINE ( 'NONE', #4025, #3105 ) ; +#1535 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1536 = ORIENTED_EDGE ( 'NONE', *, *, #1577, .F. ) ; +#1538 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, -0.1200000000000000900 ) ) ; +#1537 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1539 = FILL_AREA_STYLE_COLOUR ( '', #5703 ) ; +#1540 = ORIENTED_EDGE ( 'NONE', *, *, #1622, .T. ) ; +#1541 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#1542 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#1543 = VERTEX_POINT ( 'NONE', #1580 ) ; +#1544 = ORIENTED_EDGE ( 'NONE', *, *, #6586, .T. ) ; +#1545 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1756, 'distance_accuracy_value', 'NONE'); +#1546 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -0.1200000000000000900 ) ) ; +#1547 = LINE ( 'NONE', #20, #1819 ) ; +#1548 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#1549 = SURFACE_STYLE_USAGE ( .BOTH. , #5478 ) ; +#1550 = AXIS2_PLACEMENT_3D ( 'NONE', #2161, #6090, #3858 ) ; +#1551 = ORIENTED_EDGE ( 'NONE', *, *, #607, .T. ) ; +#1552 = ORIENTED_EDGE ( 'NONE', *, *, #1372, .F. ) ; +#1553 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1554 = CLOSED_SHELL ( 'NONE', ( #4189, #5709, #335, #3722, #1359, #5063 ) ) ; +#1555 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1556 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1557 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, 0.6199999999999996600 ) ) ; +#1558 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, -1.120000000000000100 ) ) ; +#1559 = ORIENTED_EDGE ( 'NONE', *, *, #754, .T. ) ; +#1560 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 0.6199999999999995500 ) ) ; +#1561 = SURFACE_STYLE_USAGE ( .BOTH. , #3300 ) ; +#1562 = ADVANCED_FACE ( 'NONE', ( #3522 ), #6621, .F. ) ; +#1563 = ORIENTED_EDGE ( 'NONE', *, *, #5728, .T. ) ; +#1564 = EDGE_CURVE ( 'NONE', #1053, #202, #6074, .T. ) ; +#1565 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1566 = EDGE_LOOP ( 'NONE', ( #1909, #5680, #3625, #4024 ) ) ; +#1567 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1568 = FILL_AREA_STYLE ('',( #943 ) ) ; +#1569 = ORIENTED_EDGE ( 'NONE', *, *, #5522, .F. ) ; +#1570 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6146 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5969, #4949, #4339 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1571 = VECTOR ( 'NONE', #1698, 1000.000000000000000 ) ; +#1572 = SURFACE_STYLE_FILL_AREA ( #4408 ) ; +#1573 = ORIENTED_EDGE ( 'NONE', *, *, #6105, .F. ) ; +#1574 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #558 ), #1425 ) ; +#1575 = EDGE_CURVE ( 'NONE', #4752, #7141, #5441, .T. ) ; +#1576 = VERTEX_POINT ( 'NONE', #7201 ) ; +#1577 = EDGE_CURVE ( 'NONE', #4775, #2780, #4817, .T. ) ; +#1578 = VERTEX_POINT ( 'NONE', #3297 ) ; +#1579 = FACE_OUTER_BOUND ( 'NONE', #4621, .T. ) ; +#1580 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, 1.119999999999999400 ) ) ; +#1582 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1581 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.04999999999999969700, -1.500000000000000000 ) ) ; +#1583 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.9999999999999997800 ) ) ; +#1584 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.6697073557013986100, -1.074999999999999700 ) ) ; +#1585 = ORIENTED_EDGE ( 'NONE', *, *, #7090, .F. ) ; +#1586 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #840 ), #5397 ) ; +#1587 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1588 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #437 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4248, #7013, #4748 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1589 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.1999999999999999800, -1.074999999999999700 ) ) ; +#1590 = CLOSED_SHELL ( 'NONE', ( #2578, #6534, #906, #1192, #3470, #1971 ) ) ; +#1591 = SURFACE_STYLE_FILL_AREA ( #2548 ) ; +#1592 = FILL_AREA_STYLE_COLOUR ( '', #5542 ) ; +#1593 = CIRCLE ( 'NONE', #3799, 0.1199999999999998800 ) ; +#1594 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, -1.120000000000000100 ) ) ; +#1595 = ADVANCED_FACE ( 'NONE', ( #2312 ), #4097, .T. ) ; +#1596 = VECTOR ( 'NONE', #457, 1000.000000000000000 ) ; +#1597 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1598 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.6697073557013986100, 1.074999999999999700 ) ) ; +#1599 = EDGE_LOOP ( 'NONE', ( #5525, #2012, #5094, #2257 ) ) ; +#1600 = LINE ( 'NONE', #1877, #5076 ) ; +#1601 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, -0.1200000000000000900 ) ) ; +#1602 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#1603 = SURFACE_SIDE_STYLE ('',( #5164 ) ) ; +#1604 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1605 = SURFACE_STYLE_USAGE ( .BOTH. , #4950 ) ; +#1606 = PRESENTATION_STYLE_ASSIGNMENT (( #6291 ) ) ; +#1607 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1608 = ORIENTED_EDGE ( 'NONE', *, *, #6238, .F. ) ; +#1609 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, 0.8799999999999998900 ) ) ; +#1610 = FACE_OUTER_BOUND ( 'NONE', #6088, .T. ) ; +#1611 = LINE ( 'NONE', #5096, #3827 ) ; +#1612 = VECTOR ( 'NONE', #5651, 1000.000000000000000 ) ; +#1613 = AXIS2_PLACEMENT_3D ( 'NONE', #6938, #4123, #652 ) ; +#1614 = LINE ( 'NONE', #2713, #4718 ) ; +#1615 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 0.8799999999999998900 ) ) ; +#1616 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1617 = VECTOR ( 'NONE', #3713, 1000.000000000000000 ) ; +#1618 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1101 ), #4139 ) ; +#1619 = LINE ( 'NONE', #3947, #5809 ) ; +#1620 = EDGE_CURVE ( 'NONE', #6553, #6447, #485, .T. ) ; +#1621 = ORIENTED_EDGE ( 'NONE', *, *, #5906, .F. ) ; +#1622 = EDGE_CURVE ( 'NONE', #3382, #4772, #5891, .T. ) ; +#1623 = EDGE_CURVE ( 'NONE', #1363, #555, #827, .T. ) ; +#1624 = VECTOR ( 'NONE', #6440, 1000.000000000000000 ) ; +#1625 = VECTOR ( 'NONE', #6175, 1000.000000000000000 ) ; +#1626 = VERTEX_POINT ( 'NONE', #5034 ) ; +#1627 = STYLED_ITEM ( 'NONE', ( #6489 ), #4222 ) ; +#1628 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, -1.120000000000000100 ) ) ; +#1629 = ORIENTED_EDGE ( 'NONE', *, *, #3491, .T. ) ; +#1630 = VECTOR ( 'NONE', #3584, 1000.000000000000000 ) ; +#1631 = ORIENTED_EDGE ( 'NONE', *, *, #2210, .T. ) ; +#1632 = LINE ( 'NONE', #1542, #1364 ) ; +#1633 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1634 = AXIS2_PLACEMENT_3D ( 'NONE', #4674, #1275, #2402 ) ; +#1635 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1637 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -0.3800000000000004500 ) ) ; +#1636 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -1.120000000000000100 ) ) ; +#1638 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, 0.6199999999999996600 ) ) ; +#1639 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 0.1199999999999995500 ) ) ; +#1640 = ORIENTED_EDGE ( 'NONE', *, *, #2228, .T. ) ; +#1641 = ORIENTED_EDGE ( 'NONE', *, *, #2978, .F. ) ; +#1642 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #53, 'distance_accuracy_value', 'NONE'); +#1643 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2629 ), #2015 ) ; +#1644 = ADVANCED_FACE ( 'NONE', ( #6927 ), #6164, .F. ) ; +#1645 = EDGE_CURVE ( 'NONE', #254, #4202, #4272, .T. ) ; +#1646 = PLANE ( 'NONE', #1209 ) ; +#1647 = ORIENTED_EDGE ( 'NONE', *, *, #7172, .T. ) ; +#1648 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, 0.3799999999999998900 ) ) ; +#1649 = ORIENTED_EDGE ( 'NONE', *, *, #7260, .F. ) ; +#1650 = ORIENTED_EDGE ( 'NONE', *, *, #5327, .T. ) ; +#1651 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1652 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6736 ) ) ; +#1653 = CIRCLE ( 'NONE', #4311, 0.1750000000000000200 ) ; +#1654 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#1655 = ORIENTED_EDGE ( 'NONE', *, *, #5431, .F. ) ; +#1656 = ORIENTED_EDGE ( 'NONE', *, *, #5681, .F. ) ; +#1657 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, -0.8800000000000003400 ) ) ; +#1658 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#1659 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1660 = SURFACE_STYLE_FILL_AREA ( #2905 ) ; +#1661 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1662 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1663 = ORIENTED_EDGE ( 'NONE', *, *, #1052, .T. ) ; +#1664 = ORIENTED_EDGE ( 'NONE', *, *, #5051, .F. ) ; +#1665 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1666 = EDGE_CURVE ( 'NONE', #4207, #6158, #4453, .T. ) ; +#1667 = EDGE_CURVE ( 'NONE', #3295, #6674, #668, .T. ) ; +#1668 = EDGE_CURVE ( 'NONE', #1133, #4680, #5535, .T. ) ; +#1669 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1670 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1671 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.6697073557013986100, 1.074999999999999700 ) ) ; +#1672 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1673 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -0.3800000000000004500 ) ) ; +#1674 = AXIS2_PLACEMENT_3D ( 'NONE', #1907, #2552, #6070 ) ; +#1675 = ORIENTED_EDGE ( 'NONE', *, *, #3790, .F. ) ; +#1676 = LINE ( 'NONE', #2620, #2190 ) ; +#1677 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#1678 = ADVANCED_FACE ( 'NONE', ( #2933 ), #6402, .T. ) ; +#1679 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7190, 'distance_accuracy_value', 'NONE'); +#1680 = STYLED_ITEM ( 'NONE', ( #5892 ), #5029 ) ; +#1681 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#1682 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, 1.119999999999999700 ) ) ; +#1683 = ORIENTED_EDGE ( 'NONE', *, *, #4520, .T. ) ; +#1684 = LINE ( 'NONE', #4238, #4782 ) ; +#1685 = CYLINDRICAL_SURFACE ( 'NONE', #1387, 0.1750000000000000200 ) ; +#1686 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1687 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1688 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -1.120000000000000100 ) ) ; +#1689 = SURFACE_SIDE_STYLE ('',( #4650 ) ) ; +#1690 = DIRECTION ( 'NONE', ( -1.275531967630005200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1691 = EDGE_LOOP ( 'NONE', ( #3121, #4841 ) ) ; +#1692 = LINE ( 'NONE', #3631, #4170 ) ; +#1693 = VECTOR ( 'NONE', #3805, 1000.000000000000000 ) ; +#1694 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7131 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6476, #6498, #4784 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1695 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#1696 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.05000000000000012800, -1.074999999999999700 ) ) ; +#1697 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1698 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1699 = VECTOR ( 'NONE', #2072, 1000.000000000000000 ) ; +#1700 = FACE_OUTER_BOUND ( 'NONE', #2337, .T. ) ; +#1701 = VECTOR ( 'NONE', #4519, 1000.000000000000000 ) ; +#1702 = ORIENTED_EDGE ( 'NONE', *, *, #6891, .F. ) ; +#1703 = VECTOR ( 'NONE', #4643, 1000.000000000000000 ) ; +#1704 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1705 = LINE ( 'NONE', #3486, #225 ) ; +#1706 = FILL_AREA_STYLE_COLOUR ( '', #3771 ) ; +#1707 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #700 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #18, #6177, #1635 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1708 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1709 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#1710 = ORIENTED_EDGE ( 'NONE', *, *, #2612, .F. ) ; +#1711 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1712 = DIRECTION ( 'NONE', ( -3.872150616019654400E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1713 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#1714 = FACE_OUTER_BOUND ( 'NONE', #5768, .T. ) ; +#1715 = ORIENTED_EDGE ( 'NONE', *, *, #6934, .F. ) ; +#1716 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.6697073557013986100, 1.074999999999999700 ) ) ; +#1717 = EDGE_CURVE ( 'NONE', #6256, #1576, #3280, .T. ) ; +#1718 = FILL_AREA_STYLE ('',( #1143 ) ) ; +#1719 = ADVANCED_FACE ( 'NONE', ( #3094 ), #6957, .F. ) ; +#1720 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, 0.8799999999999998900 ) ) ; +#1721 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2082 ), #1570 ) ; +#1722 = EDGE_LOOP ( 'NONE', ( #1191, #1392, #2084, #3702 ) ) ; +#1723 = VECTOR ( 'NONE', #3419, 1000.000000000000000 ) ; +#1724 = EDGE_LOOP ( 'NONE', ( #6516, #3417, #6200, #2213 ) ) ; +#1725 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 2.940894014733149000, 1.075000000000000000 ) ) ; +#1726 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1727 = EDGE_CURVE ( 'NONE', #1298, #5238, #1803, .T. ) ; +#1728 = EDGE_CURVE ( 'NONE', #3131, #3725, #4631, .T. ) ; +#1729 = EDGE_CURVE ( 'NONE', #525, #7219, #4192, .T. ) ; +#1730 = VERTEX_POINT ( 'NONE', #6384 ) ; +#1731 = EDGE_LOOP ( 'NONE', ( #1536, #3289, #3695, #3390 ) ) ; +#1732 = AXIS2_PLACEMENT_3D ( 'NONE', #541, #2243, #38 ) ; +#1733 = DIRECTION ( 'NONE', ( 3.872150616019654900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1734 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, -0.0000000000000000000, -1.074999999999999700 ) ) ; +#1735 = ORIENTED_EDGE ( 'NONE', *, *, #5596, .F. ) ; +#1736 = ORIENTED_EDGE ( 'NONE', *, *, #233, .T. ) ; +#1737 = AXIS2_PLACEMENT_3D ( 'NONE', #6189, #3870, #6727 ) ; +#1738 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6156, 'distance_accuracy_value', 'NONE'); +#1739 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1740 = PLANE ( 'NONE', #1956 ) ; +#1741 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 2.940894014733149000, 1.075000000000000000 ) ) ; +#1742 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2043, 'distance_accuracy_value', 'NONE'); +#1743 = AXIS2_PLACEMENT_3D ( 'NONE', #3334, #1708, #6202 ) ; +#1744 = ORIENTED_EDGE ( 'NONE', *, *, #96, .T. ) ; +#1745 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 2.940894014733149000, 1.075000000000000000 ) ) ; +#1746 = ORIENTED_EDGE ( 'NONE', *, *, #4705, .T. ) ; +#1747 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, -0.5000000000000002200 ) ) ; +#1748 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1749 = PLANE ( 'NONE', #1369 ) ; +#1750 = ORIENTED_EDGE ( 'NONE', *, *, #3215, .T. ) ; +#1751 = VECTOR ( 'NONE', #2879, 1000.000000000000000 ) ; +#1752 = STYLED_ITEM ( 'NONE', ( #2381 ), #2026 ) ; +#1753 = ADVANCED_FACE ( 'NONE', ( #1610 ), #3005, .F. ) ; +#1754 = ORIENTED_EDGE ( 'NONE', *, *, #1997, .T. ) ; +#1755 = EDGE_LOOP ( 'NONE', ( #1031, #2189, #1640, #5569 ) ) ; +#1756 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1757 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, 1.119999999999999700 ) ) ; +#1758 = LINE ( 'NONE', #6636, #5495 ) ; +#1759 = ORIENTED_EDGE ( 'NONE', *, *, #7033, .F. ) ; +#1760 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#1761 = EDGE_LOOP ( 'NONE', ( #2827, #6089, #6770, #5230 ) ) ; +#1762 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, -0.6200000000000001100 ) ) ; +#1763 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4908 ) ) ; +#1764 = VERTEX_POINT ( 'NONE', #6937 ) ; +#1765 = FILL_AREA_STYLE_COLOUR ( '', #5526 ) ; +#1766 = VECTOR ( 'NONE', #1483, 1000.000000000000000 ) ; +#1767 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#1768 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2199 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5894, #780, #4641 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1769 = EDGE_CURVE ( 'NONE', #6429, #2386, #2663, .T. ) ; +#1770 = EDGE_CURVE ( 'NONE', #1299, #6429, #3817, .T. ) ; +#1771 = EDGE_CURVE ( 'NONE', #901, #263, #2047, .T. ) ; +#1772 = DIRECTION ( 'NONE', ( -5.042800802258161100E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1773 = VERTEX_POINT ( 'NONE', #3031 ) ; +#1774 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999982500, 0.2000000000000000900, -1.075000000000000200 ) ) ; +#1775 = VECTOR ( 'NONE', #3194, 1000.000000000000000 ) ; +#1776 = FILL_AREA_STYLE_COLOUR ( '', #3290 ) ; +#1777 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.8000000000000003800, -1.500000000000000400 ) ) ; +#1778 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3793 ) ) ; +#1779 = MANIFOLD_SOLID_BREP ( 'LPattern4[5]', #1554 ) ; +#1780 = ORIENTED_EDGE ( 'NONE', *, *, #4809, .F. ) ; +#1781 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#1782 = SURFACE_STYLE_FILL_AREA ( #4247 ) ; +#1783 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3036 ) ) ; +#1784 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#1785 = FILL_AREA_STYLE ('',( #1828 ) ) ; +#1786 = AXIS2_PLACEMENT_3D ( 'NONE', #6794, #2729, #3298 ) ; +#1787 = FACE_OUTER_BOUND ( 'NONE', #2850, .T. ) ; +#1788 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#1789 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1790 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, 1.119999999999999700 ) ) ; +#1791 = ADVANCED_FACE ( 'NONE', ( #4622 ), #1906, .T. ) ; +#1792 = EDGE_LOOP ( 'NONE', ( #2143, #5122, #2040, #3139 ) ) ; +#1793 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.04999999999999999600, 0.6199999999999995500 ) ) ; +#1794 = LINE ( 'NONE', #2497, #6492 ) ; +#1795 = VECTOR ( 'NONE', #6132, 1000.000000000000000 ) ; +#1796 = LINE ( 'NONE', #5667, #5077 ) ; +#1797 = AXIS2_PLACEMENT_3D ( 'NONE', #3753, #6133, #7150 ) ; +#1798 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.2000000000000000900, 1.075000000000000000 ) ) ; +#1799 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1800 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1801 = CIRCLE ( 'NONE', #3745, 0.1199999999999998800 ) ; +#1802 = VERTEX_POINT ( 'NONE', #3595 ) ; +#1803 = LINE ( 'NONE', #4713, #3635 ) ; +#1804 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3926 ) ) ; +#1805 = VECTOR ( 'NONE', #5724, 1000.000000000000000 ) ; +#1806 = PRESENTATION_STYLE_ASSIGNMENT (( #7110 ) ) ; +#1807 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#1808 = VECTOR ( 'NONE', #4395, 1000.000000000000000 ) ; +#1810 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, 0.1199999999999996600 ) ) ; +#1809 = VECTOR ( 'NONE', #6858, 1000.000000000000000 ) ; +#1811 = ORIENTED_EDGE ( 'NONE', *, *, #4607, .T. ) ; +#1812 = EDGE_LOOP ( 'NONE', ( #2407, #637, #2104, #699 ) ) ; +#1813 = LINE ( 'NONE', #1462, #327 ) ; +#1814 = VERTEX_POINT ( 'NONE', #1928 ) ; +#1815 = EDGE_CURVE ( 'NONE', #6166, #6198, #6662, .T. ) ; +#1816 = SURFACE_SIDE_STYLE ('',( #5623 ) ) ; +#1817 = LINE ( 'NONE', #5276, #3555 ) ; +#1818 = ORIENTED_EDGE ( 'NONE', *, *, #6444, .F. ) ; +#1819 = VECTOR ( 'NONE', #3340, 1000.000000000000000 ) ; +#1820 = PLANE ( 'NONE', #7072 ) ; +#1821 = ORIENTED_EDGE ( 'NONE', *, *, #2516, .T. ) ; +#1822 = SURFACE_STYLE_USAGE ( .BOTH. , #6881 ) ; +#1823 = VERTEX_POINT ( 'NONE', #5920 ) ; +#1824 = PLANE ( 'NONE', #6331 ) ; +#1825 = AXIS2_PLACEMENT_3D ( 'NONE', #319, #343, #4252 ) ; +#1826 = VERTEX_POINT ( 'NONE', #5369 ) ; +#1827 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1828 = FILL_AREA_STYLE_COLOUR ( '', #157 ) ; +#1829 = ORIENTED_EDGE ( 'NONE', *, *, #3893, .F. ) ; +#1830 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.04999999999999999600, -0.8800000000000004500 ) ) ; +#1831 = AXIS2_PLACEMENT_3D ( 'NONE', #200, #1343, #5320 ) ; +#1832 = EDGE_LOOP ( 'NONE', ( #2965, #2591, #5394, #2358 ) ) ; +#1833 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1834 = LINE ( 'NONE', #52, #3318 ) ; +#1835 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1836 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#1837 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1838 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1839 = EDGE_LOOP ( 'NONE', ( #5986, #5476, #243, #1132 ) ) ; +#1840 = ORIENTED_EDGE ( 'NONE', *, *, #522, .F. ) ; +#1841 = VECTOR ( 'NONE', #370, 1000.000000000000000 ) ; +#1842 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#1843 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1844 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -0.6200000000000001100 ) ) ; +#1845 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1846 = ORIENTED_EDGE ( 'NONE', *, *, #141, .F. ) ; +#1847 = EDGE_CURVE ( 'NONE', #602, #950, #5248, .T. ) ; +#1848 = CYLINDRICAL_SURFACE ( 'NONE', #3376, 0.1199999999999998800 ) ; +#1849 = SURFACE_STYLE_FILL_AREA ( #3668 ) ; +#1850 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, -0.8800000000000004500 ) ) ; +#1851 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2972 ) ) ; +#1852 = ORIENTED_EDGE ( 'NONE', *, *, #919, .T. ) ; +#1853 = LINE ( 'NONE', #3603, #6338 ) ; +#1854 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1855 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1101 ) ) ; +#1856 = EDGE_CURVE ( 'NONE', #1287, #2173, #658, .T. ) ; +#1857 = EDGE_CURVE ( 'NONE', #2490, #6375, #3531, .T. ) ; +#1858 = EDGE_CURVE ( 'NONE', #4795, #431, #5712, .T. ) ; +#1859 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1860 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1861 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1862 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1863 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3507, 'distance_accuracy_value', 'NONE'); +#1864 = ORIENTED_EDGE ( 'NONE', *, *, #5956, .T. ) ; +#1865 = ORIENTED_EDGE ( 'NONE', *, *, #6379, .T. ) ; +#1866 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1867 = PLANE ( 'NONE', #4848 ) ; +#1868 = LINE ( 'NONE', #5557, #815 ) ; +#1869 = AXIS2_PLACEMENT_3D ( 'NONE', #1125, #6243, #4121 ) ; +#1870 = EDGE_CURVE ( 'NONE', #6393, #3574, #1794, .T. ) ; +#1871 = ORIENTED_EDGE ( 'NONE', *, *, #3022, .T. ) ; +#1872 = VECTOR ( 'NONE', #1922, 1000.000000000000000 ) ; +#1873 = LINE ( 'NONE', #6723, #3096 ) ; +#1874 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1875 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1876 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1877 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, -0.3800000000000003400 ) ) ; +#1878 = FACE_OUTER_BOUND ( 'NONE', #3964, .T. ) ; +#1879 = ORIENTED_EDGE ( 'NONE', *, *, #1282, .T. ) ; +#1880 = LINE ( 'NONE', #6352, #2849 ) ; +#1881 = ORIENTED_EDGE ( 'NONE', *, *, #3202, .T. ) ; +#1882 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #489 ) ) ; +#1883 = SURFACE_STYLE_USAGE ( .BOTH. , #4712 ) ; +#1884 = PLANE ( 'NONE', #1094 ) ; +#1885 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#1886 = STYLED_ITEM ( 'NONE', ( #2551 ), #148 ) ; +#1887 = VERTEX_POINT ( 'NONE', #782 ) ; +#1888 = ORIENTED_EDGE ( 'NONE', *, *, #1847, .F. ) ; +#1889 = PRESENTATION_STYLE_ASSIGNMENT (( #680 ) ) ; +#1890 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#1891 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1892 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#1893 = SURFACE_STYLE_USAGE ( .BOTH. , #5852 ) ; +#1894 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#1895 = ORIENTED_EDGE ( 'NONE', *, *, #6615, .F. ) ; +#1896 = EDGE_LOOP ( 'NONE', ( #3525, #617, #3824, #1715 ) ) ; +#1897 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1898 = EDGE_CURVE ( 'NONE', #1287, #6393, #4991, .T. ) ; +#1899 = EDGE_CURVE ( 'NONE', #5689, #3783, #2214, .T. ) ; +#1900 = EDGE_CURVE ( 'NONE', #2090, #4465, #3268, .T. ) ; +#1901 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, -0.8800000000000004500 ) ) ; +#1902 = VERTEX_POINT ( 'NONE', #2005 ) ; +#1903 = PLANE ( 'NONE', #3565 ) ; +#1904 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #419 ), #1152 ) ; +#1905 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#1906 = PLANE ( 'NONE', #992 ) ; +#1907 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, -0.8800000000000004500 ) ) ; +#1908 = PLANE ( 'NONE', #4578 ) ; +#1909 = ORIENTED_EDGE ( 'NONE', *, *, #1237, .T. ) ; +#1910 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6205 ) ) ; +#1911 = VERTEX_POINT ( 'NONE', #6431 ) ; +#1912 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, 1.119999999999999400 ) ) ; +#1913 = EDGE_LOOP ( 'NONE', ( #6491, #1279, #1544, #5036 ) ) ; +#1914 = FILL_AREA_STYLE_COLOUR ( '', #4880 ) ; +#1915 = ADVANCED_FACE ( 'NONE', ( #3182 ), #4852, .F. ) ; +#1916 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, -0.1200000000000000900 ) ) ; +#1917 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1918 = ORIENTED_EDGE ( 'NONE', *, *, #222, .F. ) ; +#1919 = VERTEX_POINT ( 'NONE', #4894 ) ; +#1920 = FILL_AREA_STYLE ('',( #5324 ) ) ; +#1921 = VECTOR ( 'NONE', #5990, 1000.000000000000000 ) ; +#1922 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#1923 = VECTOR ( 'NONE', #6623, 1000.000000000000000 ) ; +#1924 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1925 = ORIENTED_EDGE ( 'NONE', *, *, #597, .F. ) ; +#1926 = ORIENTED_EDGE ( 'NONE', *, *, #2868, .F. ) ; +#1927 = VERTEX_POINT ( 'NONE', #1558 ) ; +#1928 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, 0.8799999999999998900 ) ) ; +#1929 = VECTOR ( 'NONE', #4874, 1000.000000000000000 ) ; +#1930 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.0000000000000000000, 1.075000000000000000 ) ) ; +#1931 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1932 = ORIENTED_EDGE ( 'NONE', *, *, #959, .F. ) ; +#1933 = LINE ( 'NONE', #6988, #5505 ) ; +#1934 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#1935 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654900E-016 ) ) ; +#1936 = PLANE ( 'NONE', #4754 ) ; +#1937 = EDGE_CURVE ( 'NONE', #3871, #4562, #1509, .T. ) ; +#1938 = EDGE_LOOP ( 'NONE', ( #5572, #6268, #3236, #5575 ) ) ; +#1939 = CIRCLE ( 'NONE', #4057, 0.1199999999999998800 ) ; +#1940 = FACE_OUTER_BOUND ( 'NONE', #2292, .T. ) ; +#1941 = VECTOR ( 'NONE', #7256, 1000.000000000000000 ) ; +#1942 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1943 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#1944 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #567, 'distance_accuracy_value', 'NONE'); +#1945 = ORIENTED_EDGE ( 'NONE', *, *, #3303, .T. ) ; +#1946 = FACE_OUTER_BOUND ( 'NONE', #5559, .T. ) ; +#1947 = ADVANCED_FACE ( 'NONE', ( #6582 ), #2622, .F. ) ; +#1948 = EDGE_CURVE ( 'NONE', #2182, #3019, #1418, .T. ) ; +#1949 = EDGE_CURVE ( 'NONE', #1315, #3784, #4708, .T. ) ; +#1950 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.1199999999999996600 ) ) ; +#1952 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1951 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1953 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 0.8799999999999998900 ) ) ; +#1954 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1955 = FILL_AREA_STYLE_COLOUR ( '', #3800 ) ; +#1956 = AXIS2_PLACEMENT_3D ( 'NONE', #3320, #1088, #6278 ) ; +#1957 = ORIENTED_EDGE ( 'NONE', *, *, #4520, .F. ) ; +#1958 = FACE_OUTER_BOUND ( 'NONE', #4330, .T. ) ; +#1959 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#1960 = AXIS2_PLACEMENT_3D ( 'NONE', #1912, #767, #5901 ) ; +#1961 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#1962 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1963 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1964 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#1965 = ORIENTED_EDGE ( 'NONE', *, *, #3116, .T. ) ; +#1966 = SURFACE_STYLE_FILL_AREA ( #5201 ) ; +#1967 = VECTOR ( 'NONE', #2290, 1000.000000000000000 ) ; +#1968 = VERTEX_POINT ( 'NONE', #5446 ) ; +#1969 = VECTOR ( 'NONE', #333, 1000.000000000000000 ) ; +#1970 = STYLED_ITEM ( 'NONE', ( #6733 ), #623 ) ; +#1971 = ADVANCED_FACE ( 'NONE', ( #2204 ), #6093, .T. ) ; +#1972 = LINE ( 'NONE', #2719, #5985 ) ; +#1973 = ORIENTED_EDGE ( 'NONE', *, *, #7124, .F. ) ; +#1974 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1975 = ORIENTED_EDGE ( 'NONE', *, *, #1728, .F. ) ; +#1976 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1977 = FACE_OUTER_BOUND ( 'NONE', #135, .T. ) ; +#1978 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1979 = LINE ( 'NONE', #6099, #1093 ) ; +#1980 = AXIS2_PLACEMENT_3D ( 'NONE', #7137, #446, #3731 ) ; +#1981 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1982 = ORIENTED_EDGE ( 'NONE', *, *, #6471, .T. ) ; +#1984 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.1199999999999996600 ) ) ; +#1983 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.6697073557013986100, -1.074999999999999700 ) ) ; +#1985 = SURFACE_STYLE_USAGE ( .BOTH. , #6453 ) ; +#1986 = EDGE_LOOP ( 'NONE', ( #5267, #2442, #5309, #1123 ) ) ; +#1987 = FACE_OUTER_BOUND ( 'NONE', #6467, .T. ) ; +#1988 = ORIENTED_EDGE ( 'NONE', *, *, #366, .T. ) ; +#1989 = VERTEX_POINT ( 'NONE', #905 ) ; +#1990 = PLANE ( 'NONE', #6908 ) ; +#1991 = ADVANCED_FACE ( 'NONE', ( #3526 ), #4387, .F. ) ; +#1992 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1993 = SURFACE_SIDE_STYLE ('',( #4627 ) ) ; +#1994 = ORIENTED_EDGE ( 'NONE', *, *, #6932, .T. ) ; +#1995 = AXIS2_PLACEMENT_3D ( 'NONE', #1328, #4090, #762 ) ; +#1996 = EDGE_CURVE ( 'NONE', #500, #4752, #137, .T. ) ; +#1997 = EDGE_CURVE ( 'NONE', #4122, #2075, #6998, .T. ) ; +#1998 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, 0.1199999999999995500 ) ) ; +#1999 = EDGE_CURVE ( 'NONE', #355, #2197, #394, .T. ) ; +#2000 = ORIENTED_EDGE ( 'NONE', *, *, #4522, .T. ) ; +#2001 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#2002 = STYLED_ITEM ( 'NONE', ( #5706 ), #3939 ) ; +#2003 = LINE ( 'NONE', #218, #5210 ) ; +#2004 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2005 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, -0.6200000000000001100 ) ) ; +#2006 = VERTEX_POINT ( 'NONE', #1063 ) ; +#2007 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.6999999999999999600, -0.9250000000000004900 ) ) ; +#2008 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 0.2000000000000000900, -1.075000000000000200 ) ) ; +#2009 = ORIENTED_EDGE ( 'NONE', *, *, #4364, .F. ) ; +#2010 = AXIS2_PLACEMENT_3D ( 'NONE', #216, #5980, #812 ) ; +#2011 = ADVANCED_FACE ( 'NONE', ( #1161 ), #6179, .T. ) ; +#2012 = ORIENTED_EDGE ( 'NONE', *, *, #1103, .F. ) ; +#2013 = VECTOR ( 'NONE', #2818, 1000.000000000000000 ) ; +#2014 = FACE_OUTER_BOUND ( 'NONE', #2789, .T. ) ; +#2015 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2078 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4486, #3879, #2241 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2016 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2017 = EDGE_CURVE ( 'NONE', #2120, #2493, #5332, .T. ) ; +#2018 = ORIENTED_EDGE ( 'NONE', *, *, #5285, .F. ) ; +#2019 = SURFACE_STYLE_USAGE ( .BOTH. , #267 ) ; +#2020 = ORIENTED_EDGE ( 'NONE', *, *, #5858, .T. ) ; +#2021 = VECTOR ( 'NONE', #2462, 1000.000000000000000 ) ; +#2022 = PLANE ( 'NONE', #701 ) ; +#2023 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2168 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1330, #6505, #6528 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2024 = ORIENTED_EDGE ( 'NONE', *, *, #5728, .F. ) ; +#2025 = LINE ( 'NONE', #3171, #7078 ) ; +#2026 = ADVANCED_FACE ( 'NONE', ( #3437 ), #2031, .F. ) ; +#2027 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2643 ), #3393 ) ; +#2028 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#2029 = FACE_OUTER_BOUND ( 'NONE', #2150, .T. ) ; +#2030 = ORIENTED_EDGE ( 'NONE', *, *, #1521, .T. ) ; +#2031 = CYLINDRICAL_SURFACE ( 'NONE', #2494, 0.1199999999999998800 ) ; +#2032 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, 0.6199999999999995500 ) ) ; +#2033 = LINE ( 'NONE', #1628, #129 ) ; +#2034 = PRESENTATION_STYLE_ASSIGNMENT (( #2618 ) ) ; +#2035 = FACE_OUTER_BOUND ( 'NONE', #4080, .T. ) ; +#2036 = EDGE_CURVE ( 'NONE', #101, #5658, #556, .T. ) ; +#2037 = EDGE_CURVE ( 'NONE', #5599, #5194, #6394, .T. ) ; +#2038 = EDGE_CURVE ( 'NONE', #2899, #610, #811, .T. ) ; +#2039 = ADVANCED_FACE ( 'NONE', ( #4796 ), #1083, .F. ) ; +#2040 = ORIENTED_EDGE ( 'NONE', *, *, #2699, .T. ) ; +#2041 = AXIS2_PLACEMENT_3D ( 'NONE', #3150, #7158, #3708 ) ; +#2042 = FACE_OUTER_BOUND ( 'NONE', #7028, .T. ) ; +#2043 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2044 = VECTOR ( 'NONE', #5701, 1000.000000000000000 ) ; +#2045 = SURFACE_STYLE_USAGE ( .BOTH. , #853 ) ; +#2046 = EDGE_LOOP ( 'NONE', ( #2716, #2056, #5924, #858 ) ) ; +#2047 = LINE ( 'NONE', #259, #7192 ) ; +#2048 = LINE ( 'NONE', #6495, #1872 ) ; +#2049 = LINE ( 'NONE', #1609, #5983 ) ; +#2050 = DIRECTION ( 'NONE', ( -1.445602896647339200E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2051 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2052 = VECTOR ( 'NONE', #473, 1000.000000000000000 ) ; +#2053 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2054 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2055 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2056 = ORIENTED_EDGE ( 'NONE', *, *, #2557, .F. ) ; +#2057 = LINE ( 'NONE', #5808, #5721 ) ; +#2058 = CLOSED_SHELL ( 'NONE', ( #1119, #6912, #6847, #2106, #7079, #41 ) ) ; +#2059 = VECTOR ( 'NONE', #3572, 1000.000000000000000 ) ; +#2060 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2061 = ADVANCED_FACE ( 'NONE', ( #6045 ), #5665, .F. ) ; +#2062 = SURFACE_STYLE_USAGE ( .BOTH. , #4954 ) ; +#2063 = VERTEX_POINT ( 'NONE', #7229 ) ; +#2064 = VERTEX_POINT ( 'NONE', #3371 ) ; +#2065 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2811 ), #5504 ) ; +#2066 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2067 = ORIENTED_EDGE ( 'NONE', *, *, #548, .F. ) ; +#2068 = VERTEX_POINT ( 'NONE', #2242 ) ; +#2069 = AXIS2_PLACEMENT_3D ( 'NONE', #5613, #2240, #6228 ) ; +#2071 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.1199999999999996600 ) ) ; +#2070 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, -0.6200000000000001100 ) ) ; +#2072 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2073 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2074 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2075 = VERTEX_POINT ( 'NONE', #6823 ) ; +#2076 = ADVANCED_FACE ( 'NONE', ( #1787 ), #1140, .T. ) ; +#2077 = EDGE_CURVE ( 'NONE', #158, #2779, #2375, .T. ) ; +#2078 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4486, 'distance_accuracy_value', 'NONE'); +#2079 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2080 = ORIENTED_EDGE ( 'NONE', *, *, #508, .T. ) ; +#2081 = FILL_AREA_STYLE_COLOUR ( '', #4348 ) ; +#2082 = STYLED_ITEM ( 'NONE', ( #5539 ), #3360 ) ; +#2083 = VERTEX_POINT ( 'NONE', #65 ) ; +#2084 = ORIENTED_EDGE ( 'NONE', *, *, #6279, .T. ) ; +#2085 = EDGE_CURVE ( 'NONE', #1042, #4795, #1411, .T. ) ; +#2086 = EDGE_CURVE ( 'NONE', #3389, #3957, #1060, .T. ) ; +#2087 = EDGE_CURVE ( 'NONE', #3871, #1042, #5158, .T. ) ; +#2088 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#2089 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2090 = VERTEX_POINT ( 'NONE', #3916 ) ; +#2091 = STYLED_ITEM ( 'NONE', ( #664 ), #4649 ) ; +#2092 = ORIENTED_EDGE ( 'NONE', *, *, #649, .F. ) ; +#2093 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2095 = SURFACE_SIDE_STYLE ('',( #6287 ) ) ; +#2094 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2096 = CIRCLE ( 'NONE', #5427, 0.1199999999999998800 ) ; +#2097 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.04999999999999999600, -0.6200000000000001100 ) ) ; +#2098 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6404 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5424, #5456, #1465 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2099 = ORIENTED_EDGE ( 'NONE', *, *, #6241, .T. ) ; +#2100 = ORIENTED_EDGE ( 'NONE', *, *, #5953, .F. ) ; +#2101 = LINE ( 'NONE', #5895, #6027 ) ; +#2102 = AXIS2_PLACEMENT_3D ( 'NONE', #5086, #2285, #2858 ) ; +#2103 = EDGE_CURVE ( 'NONE', #751, #654, #2912, .T. ) ; +#2104 = ORIENTED_EDGE ( 'NONE', *, *, #3942, .T. ) ; +#2105 = VECTOR ( 'NONE', #2649, 1000.000000000000000 ) ; +#2106 = ADVANCED_FACE ( 'NONE', ( #642 ), #6314, .T. ) ; +#2107 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.2000000000000000100, 1.074999999999999700 ) ) ; +#2108 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1752 ) ) ; +#2109 = ORIENTED_EDGE ( 'NONE', *, *, #2225, .T. ) ; +#2110 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2112 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2111 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005700E-016 ) ) ; +#2113 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 2.940894014733149000, -1.075000000000000000 ) ) ; +#2114 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#2115 = VECTOR ( 'NONE', #2776, 1000.000000000000000 ) ; +#2116 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2510 ) ) ; +#2117 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, -2.168404344971008900E-016 ) ) ; +#2118 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2119 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2120 = VERTEX_POINT ( 'NONE', #3425 ) ; +#2121 = LINE ( 'NONE', #6356, #4545 ) ; +#2122 = LINE ( 'NONE', #6914, #4626 ) ; +#2123 = EDGE_CURVE ( 'NONE', #5900, #3874, #896, .T. ) ; +#2124 = SURFACE_STYLE_FILL_AREA ( #291 ) ; +#2125 = EDGE_CURVE ( 'NONE', #5759, #5893, #3888, .T. ) ; +#2126 = EDGE_CURVE ( 'NONE', #2705, #186, #4073, .T. ) ; +#2127 = LINE ( 'NONE', #2254, #4812 ) ; +#2128 = ORIENTED_EDGE ( 'NONE', *, *, #465, .F. ) ; +#2129 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#2130 = ORIENTED_EDGE ( 'NONE', *, *, #870, .F. ) ; +#2131 = SURFACE_STYLE_FILL_AREA ( #6915 ) ; +#2132 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2133 = VERTEX_POINT ( 'NONE', #4549 ) ; +#2134 = VECTOR ( 'NONE', #285, 1000.000000000000000 ) ; +#2135 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, 0.9999999999999997800 ) ) ; +#2136 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2181 ) ) ; +#2137 = VECTOR ( 'NONE', #4165, 1000.000000000000000 ) ; +#2138 = VECTOR ( 'NONE', #6216, 1000.000000000000000 ) ; +#2139 = ORIENTED_EDGE ( 'NONE', *, *, #3115, .T. ) ; +#2141 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2140 = SURFACE_STYLE_USAGE ( .BOTH. , #5493 ) ; +#2142 = FILL_AREA_STYLE ('',( #3934 ) ) ; +#2143 = ORIENTED_EDGE ( 'NONE', *, *, #3160, .F. ) ; +#2144 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.3800000000000003400 ) ) ; +#2145 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 2.940894014733149000, -1.075000000000000200 ) ) ; +#2146 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2766 ), #2529 ) ; +#2147 = ADVANCED_FACE ( 'NONE', ( #6993 ), #5070, .T. ) ; +#2148 = SURFACE_STYLE_USAGE ( .BOTH. , #546 ) ; +#2149 = PRESENTATION_STYLE_ASSIGNMENT (( #3785 ) ) ; +#2150 = EDGE_LOOP ( 'NONE', ( #3774, #7238, #6738, #7139 ) ) ; +#2151 = ORIENTED_EDGE ( 'NONE', *, *, #3591, .T. ) ; +#2152 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2153 = VECTOR ( 'NONE', #620, 1000.000000000000000 ) ; +#2154 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2155 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2156 = ORIENTED_EDGE ( 'NONE', *, *, #2038, .F. ) ; +#2157 = ORIENTED_EDGE ( 'NONE', *, *, #7218, .F. ) ; +#2158 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2159 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3926 ), #2546 ) ; +#2160 = ORIENTED_EDGE ( 'NONE', *, *, #3535, .T. ) ; +#2161 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, 0.9999999999999997800 ) ) ; +#2163 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2162 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2164 = SURFACE_STYLE_USAGE ( .BOTH. , #1603 ) ; +#2165 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#2166 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2167 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2168 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1330, 'distance_accuracy_value', 'NONE'); +#2169 = ORIENTED_EDGE ( 'NONE', *, *, #2125, .F. ) ; +#2170 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 1.119999999999999700 ) ) ; +#2171 = FACE_OUTER_BOUND ( 'NONE', #2596, .T. ) ; +#2172 = EDGE_CURVE ( 'NONE', #3743, #3710, #1155, .T. ) ; +#2173 = VERTEX_POINT ( 'NONE', #1695 ) ; +#2174 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2175 = ORIENTED_EDGE ( 'NONE', *, *, #4837, .F. ) ; +#2176 = AXIS2_PLACEMENT_3D ( 'NONE', #540, #4388, #7231 ) ; +#2177 = VECTOR ( 'NONE', #2694, 1000.000000000000000 ) ; +#2178 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2179 = ADVANCED_FACE ( 'NONE', ( #5600 ), #76, .F. ) ; +#2180 = EDGE_LOOP ( 'NONE', ( #6050, #4391, #1164, #2020, #6653, #2820, #739, #2774, #6962, #529, #2352, #7295, #1524, #5042, #2203, #6235, #3466, #3882, #1736, #5739, #2430, #5466, #4566, #6788 ) ) ; +#2181 = STYLED_ITEM ( 'NONE', ( #7273 ), #5560 ) ; +#2182 = VERTEX_POINT ( 'NONE', #1774 ) ; +#2183 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -1.120000000000000100 ) ) ; +#2184 = VECTOR ( 'NONE', #1905, 1000.000000000000000 ) ; +#2185 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, -0.5000000000000002200 ) ) ; +#2187 = SURFACE_SIDE_STYLE ('',( #1572 ) ) ; +#2186 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 0.1199999999999995500 ) ) ; +#2188 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2189 = ORIENTED_EDGE ( 'NONE', *, *, #3258, .F. ) ; +#2190 = VECTOR ( 'NONE', #4336, 1000.000000000000000 ) ; +#2191 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2192 = FACE_OUTER_BOUND ( 'NONE', #3683, .T. ) ; +#2193 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#2194 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, 0.6199999999999995500 ) ) ; +#2195 = LINE ( 'NONE', #3740, #983 ) ; +#2196 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.2000000000000000900, 1.075000000000000000 ) ) ; +#2197 = VERTEX_POINT ( 'NONE', #2325 ) ; +#2198 = SURFACE_STYLE_FILL_AREA ( #1424 ) ; +#2199 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5894, 'distance_accuracy_value', 'NONE'); +#2200 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2201 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, 0.1199999999999996600 ) ) ; +#2202 = PRESENTATION_STYLE_ASSIGNMENT (( #5642 ) ) ; +#2203 = ORIENTED_EDGE ( 'NONE', *, *, #4810, .T. ) ; +#2204 = FACE_OUTER_BOUND ( 'NONE', #3060, .T. ) ; +#2205 = FACE_OUTER_BOUND ( 'NONE', #839, .T. ) ; +#2206 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.0000000000000000000, -1.075000000000000000 ) ) ; +#2207 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, 0.1199999999999995500 ) ) ; +#2208 = SURFACE_SIDE_STYLE ('',( #5984 ) ) ; +#2209 = LINE ( 'NONE', #604, #6400 ) ; +#2210 = EDGE_CURVE ( 'NONE', #3576, #3261, #1316, .T. ) ; +#2211 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2212 = ADVANCED_FACE ( 'NONE', ( #5694 ), #580, .T. ) ; +#2213 = ORIENTED_EDGE ( 'NONE', *, *, #1102, .F. ) ; +#2214 = LINE ( 'NONE', #3622, #3626 ) ; +#2215 = VECTOR ( 'NONE', #5841, 1000.000000000000000 ) ; +#2216 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4908 ), #362 ) ; +#2217 = LINE ( 'NONE', #6137, #2052 ) ; +#2218 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2219 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2220 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#2221 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2222 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2223 = FACE_OUTER_BOUND ( 'NONE', #5820, .T. ) ; +#2224 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1471 ) ) ; +#2225 = EDGE_CURVE ( 'NONE', #2826, #555, #1939, .T. ) ; +#2226 = ORIENTED_EDGE ( 'NONE', *, *, #4081, .T. ) ; +#2227 = EDGE_CURVE ( 'NONE', #6959, #6143, #2558, .T. ) ; +#2228 = EDGE_CURVE ( 'NONE', #6511, #4225, #6913, .T. ) ; +#2229 = VECTOR ( 'NONE', #5207, 1000.000000000000000 ) ; +#2230 = ORIENTED_EDGE ( 'NONE', *, *, #6971, .F. ) ; +#2231 = VECTOR ( 'NONE', #1308, 1000.000000000000000 ) ; +#2232 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2233 = SURFACE_SIDE_STYLE ('',( #1381 ) ) ; +#2234 = SURFACE_STYLE_USAGE ( .BOTH. , #4529 ) ; +#2235 = VERTEX_POINT ( 'NONE', #6016 ) ; +#2236 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2237 = ORIENTED_EDGE ( 'NONE', *, *, #6104, .T. ) ; +#2238 = FACE_OUTER_BOUND ( 'NONE', #5274, .T. ) ; +#2239 = AXIS2_PLACEMENT_3D ( 'NONE', #2630, #4856, #6044 ) ; +#2240 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2241 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2242 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, 0.8799999999999998900 ) ) ; +#2243 = DIRECTION ( 'NONE', ( 1.275531967630005700E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2244 = VERTEX_POINT ( 'NONE', #3125 ) ; +#2245 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#2246 = ORIENTED_EDGE ( 'NONE', *, *, #4472, .F. ) ; +#2247 = AXIS2_PLACEMENT_3D ( 'NONE', #7135, #3680, #376 ) ; +#2248 = EDGE_CURVE ( 'NONE', #6547, #186, #1231, .T. ) ; +#2249 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2250 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#2251 = EDGE_LOOP ( 'NONE', ( #4673, #3975, #3488, #6292 ) ) ; +#2252 = DIRECTION ( 'NONE', ( -6.318483184191612600E-017, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2253 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, 0.8799999999999998900 ) ) ; +#2254 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.6697073557013986100, -1.074999999999999700 ) ) ; +#2255 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1360 ) ) ; +#2256 = ADVANCED_FACE ( 'NONE', ( #4169 ), #4290, .T. ) ; +#2257 = ORIENTED_EDGE ( 'NONE', *, *, #4761, .T. ) ; +#2258 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2259 = SURFACE_STYLE_USAGE ( .BOTH. , #613 ) ; +#2260 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -0.6200000000000001100 ) ) ; +#2261 = VERTEX_POINT ( 'NONE', #5367 ) ; +#2262 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#2263 = PRESENTATION_STYLE_ASSIGNMENT (( #2856 ) ) ; +#2264 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2265 = SURFACE_STYLE_USAGE ( .BOTH. , #3907 ) ; +#2266 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2724, 'distance_accuracy_value', 'NONE'); +#2267 = VERTEX_POINT ( 'NONE', #7107 ) ; +#2268 = EDGE_LOOP ( 'NONE', ( #6984, #2898, #3324, #1111 ) ) ; +#2269 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2270 = EDGE_CURVE ( 'NONE', #7220, #5157, #3067, .T. ) ; +#2271 = EDGE_CURVE ( 'NONE', #2235, #5194, #1684, .T. ) ; +#2272 = VECTOR ( 'NONE', #2615, 1000.000000000000000 ) ; +#2273 = EDGE_CURVE ( 'NONE', #5659, #6607, #801, .T. ) ; +#2274 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2275 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2276 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2277 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2278 = EDGE_LOOP ( 'NONE', ( #5074, #5830, #6275, #7040 ) ) ; +#2279 = ORIENTED_EDGE ( 'NONE', *, *, #4423, .F. ) ; +#2280 = VECTOR ( 'NONE', #564, 1000.000000000000000 ) ; +#2281 = VECTOR ( 'NONE', #6819, 1000.000000000000000 ) ; +#2282 = AXIS2_PLACEMENT_3D ( 'NONE', #1842, #2354, #5806 ) ; +#2283 = PLANE ( 'NONE', #5490 ) ; +#2284 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2285 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2286 = ORIENTED_EDGE ( 'NONE', *, *, #6705, .T. ) ; +#2287 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6827 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4564, #4536, #5643 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2288 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2289 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.04999999999999999600, -0.1200000000000000900 ) ) ; +#2290 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2291 = ADVANCED_FACE ( 'NONE', ( #460 ), #330, .F. ) ; +#2292 = EDGE_LOOP ( 'NONE', ( #886, #2969, #3174, #4854 ) ) ; +#2293 = PRESENTATION_STYLE_ASSIGNMENT (( #6461 ) ) ; +#2294 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2295 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2296 = AXIS2_PLACEMENT_3D ( 'NONE', #1745, #5725, #4569 ) ; +#2297 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2298 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2299 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, -0.8800000000000003400 ) ) ; +#2300 = SURFACE_SIDE_STYLE ('',( #1168 ) ) ; +#2301 = VECTOR ( 'NONE', #378, 1000.000000000000000 ) ; +#2302 = VECTOR ( 'NONE', #2543, 1000.000000000000000 ) ; +#2303 = FACE_OUTER_BOUND ( 'NONE', #693, .T. ) ; +#2304 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude6', #6167 ) ; +#2305 = FILL_AREA_STYLE ('',( #1706 ) ) ; +#2306 = VECTOR ( 'NONE', #4084, 1000.000000000000000 ) ; +#2307 = SURFACE_STYLE_USAGE ( .BOTH. , #5765 ) ; +#2308 = LINE ( 'NONE', #6613, #821 ) ; +#2309 = PRESENTATION_STYLE_ASSIGNMENT (( #5219 ) ) ; +#2310 = ORIENTED_EDGE ( 'NONE', *, *, #5102, .F. ) ; +#2311 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2312 = FACE_OUTER_BOUND ( 'NONE', #1832, .T. ) ; +#2313 = LINE ( 'NONE', #6311, #1967 ) ; +#2314 = VERTEX_POINT ( 'NONE', #7154 ) ; +#2315 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#2316 = LINE ( 'NONE', #4317, #1269 ) ; +#2317 = EDGE_CURVE ( 'NONE', #1543, #101, #3601, .T. ) ; +#2318 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2319 = SURFACE_STYLE_FILL_AREA ( #1008 ) ; +#2320 = AXIS2_PLACEMENT_3D ( 'NONE', #4750, #844, #4858 ) ; +#2321 = VECTOR ( 'NONE', #3426, 1000.000000000000000 ) ; +#2322 = ORIENTED_EDGE ( 'NONE', *, *, #1147, .F. ) ; +#2323 = ORIENTED_EDGE ( 'NONE', *, *, #5198, .T. ) ; +#2324 = CARTESIAN_POINT ( 'NONE', ( 3.407492542097295500E-016, 0.05000000000000000300, -0.8799999999999998900 ) ) ; +#2325 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, 0.3799999999999998900 ) ) ; +#2326 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2327 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.04999999999999999600, -1.120000000000000100 ) ) ; +#2328 = EDGE_CURVE ( 'NONE', #4413, #78, #4515, .T. ) ; +#2329 = EDGE_CURVE ( 'NONE', #1578, #2493, #5146, .T. ) ; +#2330 = SURFACE_STYLE_FILL_AREA ( #5475 ) ; +#2331 = ORIENTED_EDGE ( 'NONE', *, *, #3943, .T. ) ; +#2332 = ORIENTED_EDGE ( 'NONE', *, *, #6566, .T. ) ; +#2333 = PRESENTATION_STYLE_ASSIGNMENT (( #1605 ) ) ; +#2334 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, 0.8799999999999998900 ) ) ; +#2335 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2336 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, -0.3800000000000003400 ) ) ; +#2337 = EDGE_LOOP ( 'NONE', ( #269, #1176, #2806, #1459 ) ) ; +#2338 = ORIENTED_EDGE ( 'NONE', *, *, #2087, .F. ) ; +#2339 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #840 ) ) ; +#2340 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2341 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, 0.1199999999999995500 ) ) ; +#2342 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3951 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4415, #3940, #6780 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2343 = ORIENTED_EDGE ( 'NONE', *, *, #773, .F. ) ; +#2344 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#2345 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, -1.500000000000000400 ) ) ; +#2346 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.6697073557013986100, 1.074999999999999700 ) ) ; +#2347 = FILL_AREA_STYLE ('',( #5779 ) ) ; +#2348 = ORIENTED_EDGE ( 'NONE', *, *, #1016, .T. ) ; +#2349 = CIRCLE ( 'NONE', #4455, 0.1199999999999998800 ) ; +#2350 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1360 ), #3097 ) ; +#2351 = ORIENTED_EDGE ( 'NONE', *, *, #6749, .F. ) ; +#2352 = ORIENTED_EDGE ( 'NONE', *, *, #6810, .T. ) ; +#2353 = ORIENTED_EDGE ( 'NONE', *, *, #5693, .T. ) ; +#2354 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2355 = DIRECTION ( 'NONE', ( 6.318483184191612600E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2356 = DIRECTION ( 'NONE', ( 1.275531967630005700E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2357 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2358 = ORIENTED_EDGE ( 'NONE', *, *, #48, .F. ) ; +#2359 = VERTEX_POINT ( 'NONE', #7206 ) ; +#2360 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, -1.120000000000000100 ) ) ; +#2361 = STYLED_ITEM ( 'NONE', ( #3830 ), #3296 ) ; +#2362 = SURFACE_STYLE_USAGE ( .BOTH. , #6280 ) ; +#2363 = LINE ( 'NONE', #4823, #6125 ) ; +#2364 = ADVANCED_FACE ( 'NONE', ( #2029 ), #4385, .F. ) ; +#2365 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, 0.9999999999999997800 ) ) ; +#2366 = AXIS2_PLACEMENT_3D ( 'NONE', #4786, #4872, #5965 ) ; +#2367 = EDGE_CURVE ( 'NONE', #6417, #3871, #4978, .T. ) ; +#2368 = EDGE_CURVE ( 'NONE', #2063, #185, #381, .T. ) ; +#2369 = EDGE_CURVE ( 'NONE', #5238, #1902, #7169, .T. ) ; +#2370 = FILL_AREA_STYLE ('',( #2391 ) ) ; +#2371 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2372 = VECTOR ( 'NONE', #2803, 1000.000000000000000 ) ; +#2373 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2487 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3949, #5073, #5 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2374 = ORIENTED_EDGE ( 'NONE', *, *, #6297, .T. ) ; +#2375 = CIRCLE ( 'NONE', #6872, 0.1199999999999998800 ) ; +#2376 = AXIS2_PLACEMENT_3D ( 'NONE', #6408, #198, #4126 ) ; +#2377 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2378 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4158 ), #2287 ) ; +#2379 = VERTEX_POINT ( 'NONE', #4407 ) ; +#2380 = EDGE_CURVE ( 'NONE', #3957, #6256, #1058, .T. ) ; +#2381 = PRESENTATION_STYLE_ASSIGNMENT (( #4994 ) ) ; +#2382 = LINE ( 'NONE', #4333, #390 ) ; +#2383 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2384 = FACE_OUTER_BOUND ( 'NONE', #1230, .T. ) ; +#2385 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#2386 = VERTEX_POINT ( 'NONE', #1581 ) ; +#2387 = VECTOR ( 'NONE', #6108, 1000.000000000000000 ) ; +#2388 = LINE ( 'NONE', #45, #3270 ) ; +#2389 = PRESENTATION_STYLE_ASSIGNMENT (( #6537 ) ) ; +#2390 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1752 ), #2772 ) ; +#2391 = FILL_AREA_STYLE_COLOUR ( '', #6148 ) ; +#2392 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2393 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.04999999999999969700, 1.500000000000000000 ) ) ; +#2394 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2395 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5443, 'distance_accuracy_value', 'NONE'); +#2396 = LINE ( 'NONE', #6015, #4451 ) ; +#2397 = ORIENTED_EDGE ( 'NONE', *, *, #5534, .F. ) ; +#2398 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1272 ), #5082 ) ; +#2399 = VECTOR ( 'NONE', #3587, 1000.000000000000000 ) ; +#2400 = FACE_OUTER_BOUND ( 'NONE', #3865, .T. ) ; +#2401 = LINE ( 'NONE', #3881, #6504 ) ; +#2402 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2403 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, -0.1200000000000000900 ) ) ; +#2404 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.04999999999999969700, 1.500000000000000000 ) ) ; +#2406 = PLANE ( 'NONE', #4241 ) ; +#2405 = VECTOR ( 'NONE', #3305, 1000.000000000000000 ) ; +#2407 = ORIENTED_EDGE ( 'NONE', *, *, #5580, .F. ) ; +#2408 = PRESENTATION_STYLE_ASSIGNMENT (( #2307 ) ) ; +#2409 = ORIENTED_EDGE ( 'NONE', *, *, #1667, .T. ) ; +#2410 = VECTOR ( 'NONE', #2060, 1000.000000000000000 ) ; +#2411 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2412 = EDGE_CURVE ( 'NONE', #6955, #1287, #2815, .T. ) ; +#2413 = ORIENTED_EDGE ( 'NONE', *, *, #2848, .F. ) ; +#2414 = EDGE_CURVE ( 'NONE', #2267, #2064, #6732, .T. ) ; +#2415 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2416 = EDGE_CURVE ( 'NONE', #6143, #4413, #3510, .T. ) ; +#2417 = FACE_OUTER_BOUND ( 'NONE', #1761, .T. ) ; +#2418 = ORIENTED_EDGE ( 'NONE', *, *, #2868, .T. ) ; +#2419 = CIRCLE ( 'NONE', #2854, 0.1199999999999998800 ) ; +#2420 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, 0.6199999999999996600 ) ) ; +#2421 = ORIENTED_EDGE ( 'NONE', *, *, #6614, .T. ) ; +#2422 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#2423 = ORIENTED_EDGE ( 'NONE', *, *, #6951, .T. ) ; +#2424 = AXIS2_PLACEMENT_3D ( 'NONE', #6446, #5251, #206 ) ; +#2425 = VERTEX_POINT ( 'NONE', #6666 ) ; +#2426 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2427 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 2.940894014733149000, -0.6409215920651651900 ) ) ; +#2428 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2429 = PLANE ( 'NONE', #611 ) ; +#2430 = ORIENTED_EDGE ( 'NONE', *, *, #6703, .F. ) ; +#2431 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2110, 'distance_accuracy_value', 'NONE'); +#2432 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.3800000000000003400 ) ) ; +#2433 = ORIENTED_EDGE ( 'NONE', *, *, #6810, .F. ) ; +#2434 = STYLED_ITEM ( 'NONE', ( #6843 ), #1413 ) ; +#2435 = PLANE ( 'NONE', #6466 ) ; +#2436 = ORIENTED_EDGE ( 'NONE', *, *, #5197, .F. ) ; +#2437 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, 0.4999999999999997800 ) ) ; +#2438 = LINE ( 'NONE', #6866, #5666 ) ; +#2439 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2440 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2441 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2442 = ORIENTED_EDGE ( 'NONE', *, *, #1577, .T. ) ; +#2443 = ORIENTED_EDGE ( 'NONE', *, *, #5917, .F. ) ; +#2444 = VECTOR ( 'NONE', #2712, 1000.000000000000000 ) ; +#2445 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.8000000000000000400, -1.275000000000000600 ) ) ; +#2446 = ORIENTED_EDGE ( 'NONE', *, *, #3116, .F. ) ; +#2447 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2448 = ORIENTED_EDGE ( 'NONE', *, *, #7034, .F. ) ; +#2449 = EDGE_CURVE ( 'NONE', #1365, #6976, #2025, .T. ) ; +#2450 = PRESENTATION_STYLE_ASSIGNMENT (( #862 ) ) ; +#2451 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#2452 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #188 ) ) ; +#2453 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, -0.5000000000000002200 ) ) ; +#2454 = ORIENTED_EDGE ( 'NONE', *, *, #6656, .T. ) ; +#2455 = PRESENTATION_STYLE_ASSIGNMENT (( #3205 ) ) ; +#2456 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#2457 = STYLED_ITEM ( 'NONE', ( #5971 ), #7261 ) ; +#2458 = EDGE_CURVE ( 'NONE', #5658, #3043, #2983, .T. ) ; +#2459 = EDGE_CURVE ( 'NONE', #6158, #3145, #203, .T. ) ; +#2460 = EDGE_CURVE ( 'NONE', #1285, #2425, #1676, .T. ) ; +#2461 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2462 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2463 = SURFACE_STYLE_USAGE ( .BOTH. , #4197 ) ; +#2464 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2465 = ORIENTED_EDGE ( 'NONE', *, *, #2992, .T. ) ; +#2466 = LINE ( 'NONE', #5785, #5952 ) ; +#2467 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6991 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4976, #4340, #5550 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2468 = FACE_OUTER_BOUND ( 'NONE', #2046, .T. ) ; +#2469 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, 1.119999999999999700 ) ) ; +#2470 = EDGE_LOOP ( 'NONE', ( #5923, #2574, #3648, #5632 ) ) ; +#2471 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2472 = LINE ( 'NONE', #2822, #3897 ) ; +#2473 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2474 = PRESENTATION_STYLE_ASSIGNMENT (( #823 ) ) ; +#2475 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2476 = FILL_AREA_STYLE_COLOUR ( '', #1959 ) ; +#2477 = SURFACE_STYLE_FILL_AREA ( #7144 ) ; +#2478 = AXIS2_PLACEMENT_3D ( 'NONE', #1892, #3578, #1843 ) ; +#2479 = SURFACE_STYLE_FILL_AREA ( #6980 ) ; +#2480 = LINE ( 'NONE', #7027, #2215 ) ; +#2481 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2482 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2483 = CYLINDRICAL_SURFACE ( 'NONE', #2320, 0.1199999999999998800 ) ; +#2484 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2485 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2486 = VECTOR ( 'NONE', #653, 1000.000000000000000 ) ; +#2487 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3949, 'distance_accuracy_value', 'NONE'); +#2488 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2489 = FACE_OUTER_BOUND ( 'NONE', #5314, .T. ) ; +#2490 = VERTEX_POINT ( 'NONE', #2644 ) ; +#2491 = FACE_OUTER_BOUND ( 'NONE', #1361, .T. ) ; +#2492 = FACE_BOUND ( 'NONE', #4177, .T. ) ; +#2493 = VERTEX_POINT ( 'NONE', #2665 ) ; +#2494 = AXIS2_PLACEMENT_3D ( 'NONE', #6690, #7254, #2781 ) ; +#2495 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#2496 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2497 = CARTESIAN_POINT ( 'NONE', ( 1.371196865202256400E-016, 0.05000000000000000300, -1.075000000000000000 ) ) ; +#2498 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1553, 'distance_accuracy_value', 'NONE'); +#2499 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.1199999999999996600 ) ) ; +#2500 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#2501 = VECTOR ( 'NONE', #579, 1000.000000000000000 ) ; +#2502 = ORIENTED_EDGE ( 'NONE', *, *, #5537, .F. ) ; +#2503 = FACE_OUTER_BOUND ( 'NONE', #224, .T. ) ; +#2504 = EDGE_LOOP ( 'NONE', ( #3462, #6, #2598, #5933 ) ) ; +#2505 = LINE ( 'NONE', #2896, #323 ) ; +#2506 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.0000000000000000000, -1.500000000000000000 ) ) ; +#2507 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2508 = ADVANCED_FACE ( 'NONE', ( #718 ), #1848, .F. ) ; +#2509 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 1.119999999999999700 ) ) ; +#2510 = STYLED_ITEM ( 'NONE', ( #1889 ), #3122 ) ; +#2511 = ORIENTED_EDGE ( 'NONE', *, *, #5537, .T. ) ; +#2512 = ORIENTED_EDGE ( 'NONE', *, *, #4859, .T. ) ; +#2513 = ORIENTED_EDGE ( 'NONE', *, *, #7021, .T. ) ; +#2514 = VECTOR ( 'NONE', #2763, 1000.000000000000000 ) ; +#2515 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #969 ), #6053 ) ; +#2516 = EDGE_CURVE ( 'NONE', #2780, #4554, #4510, .T. ) ; +#2517 = EDGE_CURVE ( 'NONE', #4669, #6862, #796, .T. ) ; +#2518 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.2050252531694165800, -0.9250000000000004900 ) ) ; +#2519 = EDGE_CURVE ( 'NONE', #5711, #4791, #5500, .T. ) ; +#2520 = ORIENTED_EDGE ( 'NONE', *, *, #271, .F. ) ; +#2521 = ORIENTED_EDGE ( 'NONE', *, *, #6241, .F. ) ; +#2522 = SURFACE_SIDE_STYLE ('',( #2198 ) ) ; +#2524 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#2523 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2525 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, 0.6199999999999995500 ) ) ; +#2526 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.1999999999999999800, 1.074999999999999700 ) ) ; +#2527 = ORIENTED_EDGE ( 'NONE', *, *, #3749, .T. ) ; +#2528 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2498 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1553, #3875, #513 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2529 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5375 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5279, #4757, #4209 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2530 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#2531 = VERTEX_POINT ( 'NONE', #6740 ) ; +#2532 = CARTESIAN_POINT ( 'NONE', ( -0.3000000000000002700, 0.2000000000000000900, 1.074999999999999700 ) ) ; +#2533 = PLANE ( 'NONE', #695 ) ; +#2534 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5513, 'distance_accuracy_value', 'NONE'); +#2535 = ORIENTED_EDGE ( 'NONE', *, *, #4616, .T. ) ; +#2536 = ORIENTED_EDGE ( 'NONE', *, *, #4180, .F. ) ; +#2537 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2538 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 1.119999999999999700 ) ) ; +#2539 = LINE ( 'NONE', #3836, #4591 ) ; +#2540 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #73 ), #1694 ) ; +#2541 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654900E-016 ) ) ; +#2542 = ADVANCED_FACE ( 'NONE', ( #5140 ), #7163, .F. ) ; +#2543 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2544 = ORIENTED_EDGE ( 'NONE', *, *, #5273, .T. ) ; +#2545 = ORIENTED_EDGE ( 'NONE', *, *, #735, .F. ) ; +#2546 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6061 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3955, #5206, #768 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2547 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2549 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2548 = FILL_AREA_STYLE ('',( #4822 ) ) ; +#2550 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#2551 = PRESENTATION_STYLE_ASSIGNMENT (( #3757 ) ) ; +#2552 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2553 = ORIENTED_EDGE ( 'NONE', *, *, #6473, .F. ) ; +#2554 = VECTOR ( 'NONE', #2693, 1000.000000000000000 ) ; +#2555 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, 0.1199999999999996600 ) ) ; +#2556 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#2557 = EDGE_CURVE ( 'NONE', #4588, #6084, #5685, .T. ) ; +#2558 = LINE ( 'NONE', #3729, #3076 ) ; +#2559 = LINE ( 'NONE', #5637, #4525 ) ; +#2560 = ADVANCED_FACE ( 'NONE', ( #2722 ), #6771, .T. ) ; +#2561 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2949 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3660, #7005, #4825 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2562 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2563 = PLANE ( 'NONE', #5277 ) ; +#2564 = FILL_AREA_STYLE ('',( #5253 ) ) ; +#2565 = VECTOR ( 'NONE', #3794, 1000.000000000000000 ) ; +#2566 = AXIS2_PLACEMENT_3D ( 'NONE', #2385, #2958, #133 ) ; +#2567 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2568 = SURFACE_SIDE_STYLE ('',( #5348 ) ) ; +#2570 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 0.2000000000000000900, -0.7909215920651651000 ) ) ; +#2569 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2571 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2572 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#2573 = SURFACE_STYLE_FILL_AREA ( #6065 ) ; +#2574 = ORIENTED_EDGE ( 'NONE', *, *, #1899, .T. ) ; +#2575 = LINE ( 'NONE', #849, #6999 ) ; +#2576 = SURFACE_STYLE_FILL_AREA ( #69 ) ; +#2577 = SURFACE_STYLE_FILL_AREA ( #5426 ) ; +#2578 = ADVANCED_FACE ( 'NONE', ( #4069 ), #538, .F. ) ; +#2579 = FILL_AREA_STYLE_COLOUR ( '', #4886 ) ; +#2580 = VERTEX_POINT ( 'NONE', #4506 ) ; +#2581 = VECTOR ( 'NONE', #1289, 1000.000000000000000 ) ; +#2582 = LINE ( 'NONE', #2518, #1165 ) ; +#2583 = LINE ( 'NONE', #2696, #4547 ) ; +#2584 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5554 ), #4884 ) ; +#2585 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2586 = PRESENTATION_STYLE_ASSIGNMENT (( #3848 ) ) ; +#2587 = ORIENTED_EDGE ( 'NONE', *, *, #2557, .T. ) ; +#2588 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2589 = SURFACE_STYLE_FILL_AREA ( #5670 ) ; +#2590 = LINE ( 'NONE', #6369, #1437 ) ; +#2591 = ORIENTED_EDGE ( 'NONE', *, *, #6473, .T. ) ; +#2592 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, -0.3800000000000003400 ) ) ; +#2593 = VECTOR ( 'NONE', #884, 1000.000000000000000 ) ; +#2594 = FACE_OUTER_BOUND ( 'NONE', #4781, .T. ) ; +#2595 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2596 = EDGE_LOOP ( 'NONE', ( #791, #6313, #2864, #7160 ) ) ; +#2597 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654900E-016 ) ) ; +#2598 = ORIENTED_EDGE ( 'NONE', *, *, #3537, .T. ) ; +#2599 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 2.940894014733149000, -1.075000000000000000 ) ) ; +#2600 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2601 = ADVANCED_FACE ( 'NONE', ( #4879 ), #64, .T. ) ; +#2602 = ORIENTED_EDGE ( 'NONE', *, *, #1645, .T. ) ; +#2603 = EDGE_CURVE ( 'NONE', #1257, #5672, #1227, .T. ) ; +#2604 = ORIENTED_EDGE ( 'NONE', *, *, #1668, .F. ) ; +#2605 = FILL_AREA_STYLE ('',( #4366 ) ) ; +#2606 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2607 = AXIS2_PLACEMENT_3D ( 'NONE', #7287, #2842, #3992 ) ; +#2608 = ORIENTED_EDGE ( 'NONE', *, *, #4324, .F. ) ; +#2609 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1471 ), #1707 ) ; +#2610 = ORIENTED_EDGE ( 'NONE', *, *, #2848, .T. ) ; +#2611 = EDGE_CURVE ( 'NONE', #1204, #3775, #6559, .T. ) ; +#2612 = EDGE_CURVE ( 'NONE', #4225, #2580, #543, .T. ) ; +#2613 = SURFACE_SIDE_STYLE ('',( #5519 ) ) ; +#2614 = EDGE_CURVE ( 'NONE', #2888, #5157, #5046, .T. ) ; +#2615 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2616 = ADVANCED_FACE ( 'NONE', ( #4244 ), #5911, .T. ) ; +#2617 = EDGE_LOOP ( 'NONE', ( #332, #3520, #703, #6643 ) ) ; +#2618 = SURFACE_STYLE_USAGE ( .BOTH. , #5018 ) ; +#2619 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1205 ), #4383 ) ; +#2621 = FILL_AREA_STYLE ('',( #6035 ) ) ; +#2620 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#2622 = PLANE ( 'NONE', #3388 ) ; +#2623 = ORIENTED_EDGE ( 'NONE', *, *, #3161, .F. ) ; +#2624 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, -0.0000000000000000000, -1.500000000000000000 ) ) ; +#2625 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2626 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1440 ), #4770 ) ; +#2627 = ORIENTED_EDGE ( 'NONE', *, *, #1900, .F. ) ; +#2628 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2571, 'distance_accuracy_value', 'NONE'); +#2629 = STYLED_ITEM ( 'NONE', ( #6211 ), #2508 ) ; +#2630 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#2631 = EDGE_CURVE ( 'NONE', #5135, #4308, #2973, .T. ) ; +#2632 = ORIENTED_EDGE ( 'NONE', *, *, #5329, .F. ) ; +#2633 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, -1.500000000000000400 ) ) ; +#2634 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, 0.8799999999999998900 ) ) ; +#2635 = ORIENTED_EDGE ( 'NONE', *, *, #1937, .F. ) ; +#2636 = SURFACE_STYLE_FILL_AREA ( #5628 ) ; +#2637 = ADVANCED_FACE ( 'NONE', ( #4682 ), #208, .T. ) ; +#2638 = VERTEX_POINT ( 'NONE', #799 ) ; +#2639 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6598 ), #2999 ) ; +#2640 = ORIENTED_EDGE ( 'NONE', *, *, #2517, .F. ) ; +#2641 = FACE_OUTER_BOUND ( 'NONE', #2504, .T. ) ; +#2642 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2643 = STYLED_ITEM ( 'NONE', ( #7148 ), #386 ) ; +#2645 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2644 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#2646 = SURFACE_STYLE_USAGE ( .BOTH. , #5547 ) ; +#2647 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2648 = ORIENTED_EDGE ( 'NONE', *, *, #5433, .T. ) ; +#2649 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2650 = CIRCLE ( 'NONE', #3464, 0.1199999999999998800 ) ; +#2651 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2652 = EDGE_CURVE ( 'NONE', #3323, #3483, #7249, .T. ) ; +#2653 = EDGE_CURVE ( 'NONE', #5913, #2133, #4875, .T. ) ; +#2654 = EDGE_CURVE ( 'NONE', #3566, #7103, #6203, .T. ) ; +#2655 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#2656 = SURFACE_STYLE_FILL_AREA ( #5936 ) ; +#2657 = SURFACE_SIDE_STYLE ('',( #1419 ) ) ; +#2658 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2659 = VECTOR ( 'NONE', #3519, 1000.000000000000000 ) ; +#2660 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#2661 = VECTOR ( 'NONE', #1556, 1000.000000000000000 ) ; +#2662 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4310 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6647, #3135, #339 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2663 = LINE ( 'NONE', #2345, #1703 ) ; +#2664 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2666 = SURFACE_SIDE_STYLE ('',( #454 ) ) ; +#2665 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, 0.6199999999999996600 ) ) ; +#2667 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2668 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.3799999999999998900 ) ) ; +#2669 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -2.168404344971008900E-016 ) ) ; +#2670 = LINE ( 'NONE', #553, #6584 ) ; +#2671 = ADVANCED_FACE ( 'NONE', ( #6724 ), #7029, .F. ) ; +#2672 = LINE ( 'NONE', #4666, #4629 ) ; +#2673 = ORIENTED_EDGE ( 'NONE', *, *, #142, .T. ) ; +#2674 = PRESENTATION_STYLE_ASSIGNMENT (( #1822 ) ) ; +#2675 = VECTOR ( 'NONE', #5619, 1000.000000000000000 ) ; +#2676 = VECTOR ( 'NONE', #724, 1000.000000000000000 ) ; +#2677 = ORIENTED_EDGE ( 'NONE', *, *, #5979, .F. ) ; +#2678 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.6697073557013986100, 1.074999999999999700 ) ) ; +#2679 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2680 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2681 = VECTOR ( 'NONE', #1772, 1000.000000000000000 ) ; +#2682 = LINE ( 'NONE', #1099, #2405 ) ; +#2683 = VERTEX_POINT ( 'NONE', #4012 ) ; +#2684 = SURFACE_STYLE_FILL_AREA ( #4155 ) ; +#2685 = VERTEX_POINT ( 'NONE', #1185 ) ; +#2686 = AXIS2_PLACEMENT_3D ( 'NONE', #2437, #5281, #167 ) ; +#2687 = VECTOR ( 'NONE', #6318, 1000.000000000000000 ) ; +#2688 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005500E-016 ) ) ; +#2689 = ORIENTED_EDGE ( 'NONE', *, *, #6425, .T. ) ; +#2690 = ORIENTED_EDGE ( 'NONE', *, *, #972, .T. ) ; +#2691 = LINE ( 'NONE', #3983, #2153 ) ; +#2692 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#2694 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2693 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2695 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2696 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#2697 = ORIENTED_EDGE ( 'NONE', *, *, #6471, .F. ) ; +#2698 = VERTEX_POINT ( 'NONE', #5305 ) ; +#2699 = EDGE_CURVE ( 'NONE', #1826, #5117, #7071, .T. ) ; +#2700 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#2701 = EDGE_LOOP ( 'NONE', ( #2513, #6699, #3475, #1994 ) ) ; +#2702 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2703 = PLANE ( 'NONE', #1244 ) ; +#2704 = ADVANCED_FACE ( 'NONE', ( #4239 ), #5860, .T. ) ; +#2705 = VERTEX_POINT ( 'NONE', #5747 ) ; +#2706 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #7133 ) ) ; +#2707 = EDGE_CURVE ( 'NONE', #304, #2638, #26, .T. ) ; +#2708 = FILL_AREA_STYLE_COLOUR ( '', #4534 ) ; +#2709 = ORIENTED_EDGE ( 'NONE', *, *, #1870, .F. ) ; +#2710 = ORIENTED_EDGE ( 'NONE', *, *, #47, .F. ) ; +#2711 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2712 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2713 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -0.6200000000000001100 ) ) ; +#2714 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1440 ) ) ; +#2715 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1917, 'distance_accuracy_value', 'NONE'); +#2716 = ORIENTED_EDGE ( 'NONE', *, *, #49, .F. ) ; +#2717 = ORIENTED_EDGE ( 'NONE', *, *, #3341, .T. ) ; +#2718 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#2719 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000400, 5.842640687119285300, -1.500000000000000400 ) ) ; +#2720 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 0.3799999999999998900 ) ) ; +#2721 = ORIENTED_EDGE ( 'NONE', *, *, #1235, .F. ) ; +#2722 = FACE_OUTER_BOUND ( 'NONE', #1220, .T. ) ; +#2723 = CYLINDRICAL_SURFACE ( 'NONE', #3469, 0.1750000000000000200 ) ; +#2724 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2725 = AXIS2_PLACEMENT_3D ( 'NONE', #3474, #145, #2371 ) ; +#2726 = EDGE_LOOP ( 'NONE', ( #7095, #6849, #817, #5054 ) ) ; +#2727 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.2000000000000000900, 1.075000000000000000 ) ) ; +#2728 = VECTOR ( 'NONE', #124, 1000.000000000000000 ) ; +#2730 = FILL_AREA_STYLE ('',( #518 ) ) ; +#2729 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2731 = SURFACE_STYLE_USAGE ( .BOTH. , #3905 ) ; +#2732 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, -0.8800000000000003400 ) ) ; +#2733 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#2734 = ADVANCED_FACE ( 'NONE', ( #5848 ), #2435, .F. ) ; +#2735 = LINE ( 'NONE', #1025, #5239 ) ; +#2736 = STYLED_ITEM ( 'NONE', ( #6124 ), #2671 ) ; +#2737 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2738 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.2000000000000000100, -1.074999999999999700 ) ) ; +#2739 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, 0.6199999999999996600 ) ) ; +#2740 = EDGE_LOOP ( 'NONE', ( #4768, #6744, #5090, #4037 ) ) ; +#2741 = LINE ( 'NONE', #6335, #5975 ) ; +#2742 = AXIS2_PLACEMENT_3D ( 'NONE', #2692, #7226, #2711 ) ; +#2743 = EDGE_CURVE ( 'NONE', #442, #4923, #6378, .T. ) ; +#2744 = EDGE_CURVE ( 'NONE', #6862, #583, #4504, .T. ) ; +#2745 = EDGE_CURVE ( 'NONE', #6357, #585, #6299, .T. ) ; +#2746 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2595, 'distance_accuracy_value', 'NONE'); +#2747 = AXIS2_PLACEMENT_3D ( 'NONE', #31, #5629, #581 ) ; +#2748 = ORIENTED_EDGE ( 'NONE', *, *, #4662, .T. ) ; +#2749 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2750 = LINE ( 'NONE', #1260, #1175 ) ; +#2751 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2752 = LINE ( 'NONE', #1047, #6407 ) ; +#2753 = MANIFOLD_SOLID_BREP ( 'LPattern4[6]', #6271 ) ; +#2754 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.6200000000000001100 ) ) ; +#2755 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4970 ) ) ; +#2756 = LINE ( 'NONE', #3666, #6583 ) ; +#2757 = ORIENTED_EDGE ( 'NONE', *, *, #1102, .T. ) ; +#2758 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#2759 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.0000000000000000000, -1.075000000000000000 ) ) ; +#2760 = LINE ( 'NONE', #2824, #1265 ) ; +#2761 = ORIENTED_EDGE ( 'NONE', *, *, #6470, .F. ) ; +#2762 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#2763 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2764 = LINE ( 'NONE', #1331, #1177 ) ; +#2765 = SURFACE_SIDE_STYLE ('',( #2589 ) ) ; +#2766 = STYLED_ITEM ( 'NONE', ( #3697 ), #2637 ) ; +#2767 = LINE ( 'NONE', #6629, #7121 ) ; +#2768 = ORIENTED_EDGE ( 'NONE', *, *, #5916, .F. ) ; +#2769 = ORIENTED_EDGE ( 'NONE', *, *, #1857, .T. ) ; +#2770 = SURFACE_STYLE_FILL_AREA ( #3759 ) ; +#2771 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, 1.119999999999999400 ) ) ; +#2772 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5151 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #566, #3837, #1659 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2773 = EDGE_LOOP ( 'NONE', ( #4500, #4845, #6353, #79, #58, #2721, #4557, #1656, #4582, #7146, #311, #3768, #4211, #1015, #1024, #3738, #4031, #5845, #4967, #4135, #128, #3500, #2859, #5563, #5662, #5258, #591, #4654, #3808, #3931, #2157, #3055, #2343, #7301, #3233, #435, #5941, #667 ) ) ; +#2774 = ORIENTED_EDGE ( 'NONE', *, *, #5286, .T. ) ; +#2775 = ADVANCED_FACE ( 'NONE', ( #3054 ), #272, .T. ) ; +#2776 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2777 = AXIS2_PLACEMENT_3D ( 'NONE', #4356, #4337, #5494 ) ; +#2778 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 0.2000000000000000900, 1.074999999999999700 ) ) ; +#2779 = VERTEX_POINT ( 'NONE', #2592 ) ; +#2780 = VERTEX_POINT ( 'NONE', #4329 ) ; +#2781 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2782 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#2783 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2784 = ORIENTED_EDGE ( 'NONE', *, *, #1575, .F. ) ; +#2785 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2786 = EDGE_CURVE ( 'NONE', #1814, #3043, #4228, .T. ) ; +#2787 = EDGE_CURVE ( 'NONE', #1773, #6432, #626, .T. ) ; +#2788 = EDGE_CURVE ( 'NONE', #24, #1356, #4863, .T. ) ; +#2789 = EDGE_LOOP ( 'NONE', ( #5982, #3144, #3760, #2610 ) ) ; +#2790 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2791 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, -0.1200000000000000900 ) ) ; +#2792 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#2793 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2794 = ORIENTED_EDGE ( 'NONE', *, *, #6279, .F. ) ; +#2795 = ORIENTED_EDGE ( 'NONE', *, *, #5578, .T. ) ; +#2796 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4870 ) ) ; +#2797 = ORIENTED_EDGE ( 'NONE', *, *, #6951, .F. ) ; +#2798 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2799 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2800 = FILL_AREA_STYLE_COLOUR ( '', #1677 ) ; +#2801 = PRESENTATION_STYLE_ASSIGNMENT (( #5382 ) ) ; +#2802 = FACE_OUTER_BOUND ( 'NONE', #4990, .T. ) ; +#2803 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2804 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2805 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.04999999999999999600, 0.8799999999999998900 ) ) ; +#2806 = ORIENTED_EDGE ( 'NONE', *, *, #1147, .T. ) ; +#2807 = SURFACE_STYLE_USAGE ( .BOTH. , #2765 ) ; +#2808 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2191, 'distance_accuracy_value', 'NONE'); +#2809 = ADVANCED_FACE ( 'NONE', ( #6716 ), #2563, .T. ) ; +#2810 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, -1.500000000000000400 ) ) ; +#2811 = STYLED_ITEM ( 'NONE', ( #6675 ), #1719 ) ; +#2812 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, 1.119999999999999700 ) ) ; +#2813 = VERTEX_POINT ( 'NONE', #3701 ) ; +#2814 = SURFACE_SIDE_STYLE ('',( #5782 ) ) ; +#2815 = LINE ( 'NONE', #6689, #4690 ) ; +#2816 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.6199999999999996600 ) ) ; +#2817 = SURFACE_STYLE_FILL_AREA ( #5503 ) ; +#2818 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2819 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2820 = ORIENTED_EDGE ( 'NONE', *, *, #2631, .T. ) ; +#2821 = FACE_OUTER_BOUND ( 'NONE', #711, .T. ) ; +#2822 = CARTESIAN_POINT ( 'NONE', ( -1.371196865202255700E-016, 0.05000000000000000300, 1.075000000000000000 ) ) ; +#2823 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#2824 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#2825 = SURFACE_STYLE_FILL_AREA ( #4790 ) ; +#2826 = VERTEX_POINT ( 'NONE', #344 ) ; +#2827 = ORIENTED_EDGE ( 'NONE', *, *, #5155, .F. ) ; +#2828 = FILL_AREA_STYLE ('',( #7251 ) ) ; +#2829 = FILL_AREA_STYLE ('',( #1061 ) ) ; +#2830 = SURFACE_STYLE_FILL_AREA ( #1568 ) ; +#2831 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2832 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#2833 = PRESENTATION_STYLE_ASSIGNMENT (( #5177 ) ) ; +#2834 = EDGE_CURVE ( 'NONE', #657, #800, #3872, .T. ) ; +#2835 = ORIENTED_EDGE ( 'NONE', *, *, #3581, .F. ) ; +#2836 = SURFACE_STYLE_FILL_AREA ( #7004 ) ; +#2837 = LINE ( 'NONE', #6997, #2306 ) ; +#2838 = AXIS2_PLACEMENT_3D ( 'NONE', #5616, #6741, #2114 ) ; +#2839 = LINE ( 'NONE', #3206, #4899 ) ; +#2840 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2841 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.04999999999999969700, -1.500000000000000000 ) ) ; +#2842 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2843 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2844 = EDGE_CURVE ( 'NONE', #4109, #5003, #3688, .T. ) ; +#2845 = ORIENTED_EDGE ( 'NONE', *, *, #6569, .T. ) ; +#2846 = EDGE_CURVE ( 'NONE', #1887, #1764, #5934, .T. ) ; +#2847 = SURFACE_STYLE_FILL_AREA ( #805 ) ; +#2848 = EDGE_CURVE ( 'NONE', #3483, #4587, #5766, .T. ) ; +#2849 = VECTOR ( 'NONE', #2928, 1000.000000000000000 ) ; +#2850 = EDGE_LOOP ( 'NONE', ( #423, #7037, #4576, #4964 ) ) ; +#2851 = FACE_OUTER_BOUND ( 'NONE', #1294, .T. ) ; +#2852 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4212, 'distance_accuracy_value', 'NONE'); +#2853 = ADVANCED_FACE ( 'NONE', ( #709 ), #872, .F. ) ; +#2854 = AXIS2_PLACEMENT_3D ( 'NONE', #1116, #3962, #6742 ) ; +#2855 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#2856 = SURFACE_STYLE_USAGE ( .BOTH. , #2233 ) ; +#2857 = LINE ( 'NONE', #1798, #4637 ) ; +#2858 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2859 = ORIENTED_EDGE ( 'NONE', *, *, #2846, .F. ) ; +#2860 = ORIENTED_EDGE ( 'NONE', *, *, #2367, .F. ) ; +#2861 = AXIS2_PLACEMENT_3D ( 'NONE', #1961, #3039, #6437 ) ; +#2862 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2863 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, 0.1199999999999995500 ) ) ; +#2864 = ORIENTED_EDGE ( 'NONE', *, *, #3789, .T. ) ; +#2865 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 0.2000000000000000900, -1.075000000000000200 ) ) ; +#2866 = EDGE_LOOP ( 'NONE', ( #5354, #936, #722, #5837 ) ) ; +#2867 = STYLED_ITEM ( 'NONE', ( #5987 ), #891 ) ; +#2868 = EDGE_CURVE ( 'NONE', #5854, #78, #6458, .T. ) ; +#2869 = LINE ( 'NONE', #2832, #6876 ) ; +#2870 = FILL_AREA_STYLE_COLOUR ( '', #2481 ) ; +#2871 = PLANE ( 'NONE', #1487 ) ; +#2872 = ORIENTED_EDGE ( 'NONE', *, *, #1492, .F. ) ; +#2873 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, -0.3800000000000003400 ) ) ; +#2874 = ORIENTED_EDGE ( 'NONE', *, *, #5053, .T. ) ; +#2875 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2876 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #785 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #119, #2392, #1218 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2877 = ORIENTED_EDGE ( 'NONE', *, *, #1645, .F. ) ; +#2878 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654900E-016 ) ) ; +#2879 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2880 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, 0.6199999999999996600 ) ) ; +#2881 = ORIENTED_EDGE ( 'NONE', *, *, #2968, .F. ) ; +#2882 = ORIENTED_EDGE ( 'NONE', *, *, #5916, .T. ) ; +#2883 = FACE_OUTER_BOUND ( 'NONE', #1306, .T. ) ; +#2884 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#2885 = AXIS2_PLACEMENT_3D ( 'NONE', #6859, #6897, #4691 ) ; +#2886 = ADVANCED_FACE ( 'NONE', ( #447 ), #3189, .T. ) ; +#2887 = ORIENTED_EDGE ( 'NONE', *, *, #6416, .F. ) ; +#2888 = VERTEX_POINT ( 'NONE', #7176 ) ; +#2889 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2457 ) ) ; +#2890 = EDGE_CURVE ( 'NONE', #158, #1902, #4769, .T. ) ; +#2891 = EDGE_CURVE ( 'NONE', #3583, #845, #6371, .T. ) ; +#2892 = VECTOR ( 'NONE', #1530, 1000.000000000000000 ) ; +#2893 = EDGE_CURVE ( 'NONE', #2531, #684, #1758, .T. ) ; +#2894 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, -0.6200000000000001100 ) ) ; +#2895 = FILL_AREA_STYLE_COLOUR ( '', #1713 ) ; +#2896 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000400, 0.05000000000000000300, 1.500000000000000000 ) ) ; +#2897 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 1.499999999999999600 ) ) ; +#2898 = ORIENTED_EDGE ( 'NONE', *, *, #507, .T. ) ; +#2899 = VERTEX_POINT ( 'NONE', #4136 ) ; +#2900 = ORIENTED_EDGE ( 'NONE', *, *, #6855, .F. ) ; +#2901 = VECTOR ( 'NONE', #6448, 1000.000000000000000 ) ; +#2902 = VECTOR ( 'NONE', #3030, 1000.000000000000000 ) ; +#2903 = AXIS2_PLACEMENT_3D ( 'NONE', #6513, #4220, #1935 ) ; +#2904 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2905 = FILL_AREA_STYLE ('',( #4528 ) ) ; +#2906 = EDGE_LOOP ( 'NONE', ( #3468, #165, #1376, #4030 ) ) ; +#2907 = VECTOR ( 'NONE', #6479, 1000.000000000000000 ) ; +#2908 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#2909 = EDGE_CURVE ( 'NONE', #6926, #1543, #3967, .T. ) ; +#2910 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 1.499999999999999600 ) ) ; +#2911 = ORIENTED_EDGE ( 'NONE', *, *, #1375, .F. ) ; +#2912 = LINE ( 'NONE', #5677, #7263 ) ; +#2913 = VECTOR ( 'NONE', #4600, 1000.000000000000000 ) ; +#2914 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#2915 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2434 ), #5218 ) ; +#2916 = FILL_AREA_STYLE ('',( #6345 ) ) ; +#2917 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#2918 = CYLINDRICAL_SURFACE ( 'NONE', #6267, 0.1199999999999998800 ) ; +#2919 = VECTOR ( 'NONE', #240, 1000.000000000000000 ) ; +#2920 = ADVANCED_FACE ( 'NONE', ( #5303 ), #6178, .F. ) ; +#2921 = ORIENTED_EDGE ( 'NONE', *, *, #5625, .F. ) ; +#2922 = PRESENTATION_STYLE_ASSIGNMENT (( #4974 ) ) ; +#2923 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.3799999999999998900 ) ) ; +#2924 = CYLINDRICAL_SURFACE ( 'NONE', #5386, 0.1199999999999998800 ) ; +#2925 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.2050252531694165800, -1.100000000000000500 ) ) ; +#2926 = LINE ( 'NONE', #3988, #6064 ) ; +#2927 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #324, .NOT_KNOWN. ) ; +#2928 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2929 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2930 = VECTOR ( 'NONE', #6750, 1000.000000000000000 ) ; +#2931 = VECTOR ( 'NONE', #1616, 1000.000000000000000 ) ; +#2932 = ORIENTED_EDGE ( 'NONE', *, *, #5139, .T. ) ; +#2933 = FACE_OUTER_BOUND ( 'NONE', #3852, .T. ) ; +#2934 = VECTOR ( 'NONE', #7282, 1000.000000000000000 ) ; +#2935 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.3800000000000003400 ) ) ; +#2936 = EDGE_CURVE ( 'NONE', #800, #6948, #3234, .T. ) ; +#2937 = PLANE ( 'NONE', #3704 ) ; +#2938 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.4999999999999997800 ) ) ; +#2939 = FACE_OUTER_BOUND ( 'NONE', #1446, .T. ) ; +#2940 = ORIENTED_EDGE ( 'NONE', *, *, #3159, .F. ) ; +#2941 = LINE ( 'NONE', #2008, #749 ) ; +#2942 = VECTOR ( 'NONE', #35, 1000.000000000000000 ) ; +#2943 = ORIENTED_EDGE ( 'NONE', *, *, #3118, .F. ) ; +#2944 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#2945 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#2946 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2947 = SURFACE_SIDE_STYLE ('',( #679 ) ) ; +#2948 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2949 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3660, 'distance_accuracy_value', 'NONE'); +#2950 = PRESENTATION_STYLE_ASSIGNMENT (( #986 ) ) ; +#2951 = EDGE_LOOP ( 'NONE', ( #4671, #6831, #6106, #4943 ) ) ; +#2952 = ORIENTED_EDGE ( 'NONE', *, *, #3766, .T. ) ; +#2953 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, 0.1199999999999995500 ) ) ; +#2954 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2955 = EDGE_LOOP ( 'NONE', ( #6893, #1629, #118, #922 ) ) ; +#2956 = ORIENTED_EDGE ( 'NONE', *, *, #508, .F. ) ; +#2957 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#2958 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2959 = AXIS2_PLACEMENT_3D ( 'NONE', #5347, #1963, #2473 ) ; +#2960 = ORIENTED_EDGE ( 'NONE', *, *, #5232, .T. ) ; +#2961 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.6999999999999999600, -0.9250000000000004900 ) ) ; +#2962 = PLANE ( 'NONE', #3652 ) ; +#2963 = EDGE_LOOP ( 'NONE', ( #5016, #632, #6327, #4237 ) ) ; +#2964 = ORIENTED_EDGE ( 'NONE', *, *, #4808, .T. ) ; +#2965 = ORIENTED_EDGE ( 'NONE', *, *, #5825, .F. ) ; +#2966 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.04999999999999999600, -0.1200000000000000900 ) ) ; +#2967 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#2968 = EDGE_CURVE ( 'NONE', #4647, #442, #530, .T. ) ; +#2969 = ORIENTED_EDGE ( 'NONE', *, *, #6103, .T. ) ; +#2970 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4066, 'distance_accuracy_value', 'NONE'); +#2971 = ORIENTED_EDGE ( 'NONE', *, *, #1520, .T. ) ; +#2972 = STYLED_ITEM ( 'NONE', ( #6972 ), #3104 ) ; +#2973 = LINE ( 'NONE', #777, #5225 ) ; +#2974 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -1.445602896647339200E-016 ) ) ; +#2975 = VECTOR ( 'NONE', #3051, 1000.000000000000000 ) ; +#2976 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2977 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2457 ), #645 ) ; +#2978 = EDGE_CURVE ( 'NONE', #4933, #3424, #105, .T. ) ; +#2979 = EDGE_CURVE ( 'NONE', #5761, #6100, #7241, .T. ) ; +#2980 = EDGE_CURVE ( 'NONE', #1626, #2267, #5395, .T. ) ; +#2981 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#2982 = ORIENTED_EDGE ( 'NONE', *, *, #870, .T. ) ; +#2983 = LINE ( 'NONE', #3219, #4157 ) ; +#2984 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2985 = STYLED_ITEM ( 'NONE', ( #331 ), #4836 ) ; +#2986 = ORIENTED_EDGE ( 'NONE', *, *, #6342, .T. ) ; +#2987 = FACE_OUTER_BOUND ( 'NONE', #1755, .T. ) ; +#2988 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2989 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2990 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2629 ) ) ; +#2991 = ORIENTED_EDGE ( 'NONE', *, *, #1052, .F. ) ; +#2992 = EDGE_CURVE ( 'NONE', #3483, #5247, #2096, .T. ) ; +#2993 = VECTOR ( 'NONE', #5835, 1000.000000000000000 ) ; +#2994 = PLANE ( 'NONE', #6302 ) ; +#2995 = LINE ( 'NONE', #857, #6049 ) ; +#2996 = FILL_AREA_STYLE ('',( #758 ) ) ; +#2997 = VERTEX_POINT ( 'NONE', #4518 ) ; +#2998 = CARTESIAN_POINT ( 'NONE', ( -0.4999999999999998900, 0.0000000000000000000, 1.074999999999999700 ) ) ; +#2999 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1738 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6156, #2695, #6669 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3000 = SURFACE_STYLE_FILL_AREA ( #6403 ) ; +#3001 = FILL_AREA_STYLE ('',( #1238 ) ) ; +#3002 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.2000000000000000100, 1.074999999999999700 ) ) ; +#3003 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3004 = EDGE_LOOP ( 'NONE', ( #1846, #776, #5351, #175 ) ) ; +#3005 = CYLINDRICAL_SURFACE ( 'NONE', #2725, 0.1199999999999998800 ) ; +#3006 = AXIS2_PLACEMENT_3D ( 'NONE', #1538, #4893, #4973 ) ; +#3007 = CYLINDRICAL_SURFACE ( 'NONE', #4844, 0.1199999999999998800 ) ; +#3008 = VECTOR ( 'NONE', #5567, 1000.000000000000000 ) ; +#3009 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000400, 5.842640687119285300, 1.500000000000000000 ) ) ; +#3010 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -5.042800802258161100E-017 ) ) ; +#3011 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, -1.000000000000000200 ) ) ; +#3012 = ORIENTED_EDGE ( 'NONE', *, *, #4376, .F. ) ; +#3013 = VECTOR ( 'NONE', #707, 1000.000000000000000 ) ; +#3014 = ORIENTED_EDGE ( 'NONE', *, *, #453, .T. ) ; +#3015 = SURFACE_STYLE_FILL_AREA ( #5447 ) ; +#3016 = LINE ( 'NONE', #628, #315 ) ; +#3017 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3018 = EDGE_CURVE ( 'NONE', #6674, #6063, #1389, .T. ) ; +#3019 = VERTEX_POINT ( 'NONE', #2738 ) ; +#3020 = EDGE_CURVE ( 'NONE', #7290, #5958, #4410, .T. ) ; +#3021 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3022 = EDGE_CURVE ( 'NONE', #851, #6250, #1834, .T. ) ; +#3023 = ORIENTED_EDGE ( 'NONE', *, *, #3452, .T. ) ; +#3024 = SURFACE_SIDE_STYLE ('',( #3326 ) ) ; +#3025 = LINE ( 'NONE', #92, #3463 ) ; +#3026 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6737, 'distance_accuracy_value', 'NONE'); +#3027 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, 0.4999999999999997800 ) ) ; +#3028 = AXIS2_PLACEMENT_3D ( 'NONE', #6555, #3172, #3709 ) ; +#3029 = ORIENTED_EDGE ( 'NONE', *, *, #97, .F. ) ; +#3030 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3031 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.1999999999999999800, -1.074999999999999700 ) ) ; +#3033 = VERTEX_POINT ( 'NONE', #3891 ) ; +#3032 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #729, 'distance_accuracy_value', 'NONE'); +#3034 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.2000000000000000100, 1.074999999999999700 ) ) ; +#3035 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, 1.119999999999999700 ) ) ; +#3036 = STYLED_ITEM ( 'NONE', ( #4517 ), #6187 ) ; +#3037 = EDGE_LOOP ( 'NONE', ( #1780, #6329, #6274, #947 ) ) ; +#3038 = ORIENTED_EDGE ( 'NONE', *, *, #4045, .F. ) ; +#3039 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3040 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3041 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3042 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3043 = VERTEX_POINT ( 'NONE', #2253 ) ; +#3044 = ORIENTED_EDGE ( 'NONE', *, *, #4046, .T. ) ; +#3045 = SURFACE_STYLE_USAGE ( .BOTH. , #4585 ) ; +#3046 = EDGE_LOOP ( 'NONE', ( #6113, #3012, #4868, #3976 ) ) ; +#3047 = SURFACE_SIDE_STYLE ('',( #5705 ) ) ; +#3048 = ADVANCED_FACE ( 'NONE', ( #3140 ), #4551, .F. ) ; +#3049 = CIRCLE ( 'NONE', #1039, 0.1199999999999998800 ) ; +#3050 = FILL_AREA_STYLE ('',( #5335 ) ) ; +#3051 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3052 = ORIENTED_EDGE ( 'NONE', *, *, #1281, .F. ) ; +#3053 = VERTEX_POINT ( 'NONE', #1171 ) ; +#3054 = FACE_OUTER_BOUND ( 'NONE', #2955, .T. ) ; +#3055 = ORIENTED_EDGE ( 'NONE', *, *, #2787, .F. ) ; +#3056 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3057 = SURFACE_STYLE_USAGE ( .BOTH. , #4774 ) ; +#3058 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3059 = ORIENTED_EDGE ( 'NONE', *, *, #4572, .T. ) ; +#3060 = EDGE_LOOP ( 'NONE', ( #3561, #7212, #6366, #6130 ) ) ; +#3061 = EDGE_CURVE ( 'NONE', #3487, #4219, #356, .T. ) ; +#3062 = CIRCLE ( 'NONE', #6180, 0.1199999999999998800 ) ; +#3063 = AXIS2_PLACEMENT_3D ( 'NONE', #413, #1010, #1466 ) ; +#3064 = SURFACE_STYLE_USAGE ( .BOTH. , #6418 ) ; +#3065 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -0.6200000000000001100 ) ) ; +#3066 = VERTEX_POINT ( 'NONE', #527 ) ; +#3067 = LINE ( 'NONE', #3099, #2907 ) ; +#3068 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#3069 = AXIS2_PLACEMENT_3D ( 'NONE', #2733, #6263, #2783 ) ; +#3070 = EDGE_CURVE ( 'NONE', #5111, #5817, #6319, .T. ) ; +#3071 = FILL_AREA_STYLE_COLOUR ( '', #57 ) ; +#3072 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -0.1200000000000000900 ) ) ; +#3073 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000100, -1.074999999999999700 ) ) ; +#3074 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#3075 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, 0.3799999999999998900 ) ) ; +#3076 = VECTOR ( 'NONE', #1482, 1000.000000000000000 ) ; +#3077 = VECTOR ( 'NONE', #842, 1000.000000000000000 ) ; +#3078 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4190 ) ) ; +#3079 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6820 ), #5925 ) ; +#3080 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3081 = ORIENTED_EDGE ( 'NONE', *, *, #2086, .T. ) ; +#3082 = LINE ( 'NONE', #5713, #813 ) ; +#3083 = PLANE ( 'NONE', #3868 ) ; +#3084 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.8800000000000003400 ) ) ; +#3085 = LINE ( 'NONE', #1494, #5963 ) ; +#3086 = STYLED_ITEM ( 'NONE', ( #5715 ), #1153 ) ; +#3087 = EDGE_LOOP ( 'NONE', ( #4906, #6790, #422, #2887 ) ) ; +#3088 = VECTOR ( 'NONE', #833, 1000.000000000000000 ) ; +#3089 = LINE ( 'NONE', #1304, #4353 ) ; +#3090 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 0.2000000000000000900, -0.9409215920651650100 ) ) ; +#3091 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3092 = FACE_OUTER_BOUND ( 'NONE', #5641, .T. ) ; +#3093 = ORIENTED_EDGE ( 'NONE', *, *, #2085, .T. ) ; +#3094 = FACE_OUTER_BOUND ( 'NONE', #88, .T. ) ; +#3095 = SURFACE_STYLE_FILL_AREA ( #5141 ) ; +#3096 = VECTOR ( 'NONE', #5774, 1000.000000000000000 ) ; +#3097 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1309 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1687, #3299, #3862 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3098 = FILL_AREA_STYLE ('',( #7082 ) ) ; +#3100 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3099 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#3101 = LINE ( 'NONE', #1064, #7193 ) ; +#3102 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -0.8800000000000004500 ) ) ; +#3103 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3104 = ADVANCED_FACE ( 'NONE', ( #2987 ), #1749, .T. ) ; +#3105 = VECTOR ( 'NONE', #5174, 1000.000000000000000 ) ; +#3106 = VECTOR ( 'NONE', #2275, 1000.000000000000000 ) ; +#3107 = ORIENTED_EDGE ( 'NONE', *, *, #2367, .T. ) ; +#3108 = ORIENTED_EDGE ( 'NONE', *, *, #6444, .T. ) ; +#3109 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, -1.120000000000000100 ) ) ; +#3110 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3111 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6098 ), #6564 ) ; +#3112 = ORIENTED_EDGE ( 'NONE', *, *, #6657, .F. ) ; +#3113 = ORIENTED_EDGE ( 'NONE', *, *, #3739, .F. ) ; +#3114 = STYLED_ITEM ( 'NONE', ( #2309 ), #7050 ) ; +#3115 = EDGE_CURVE ( 'NONE', #5190, #2705, #3025, .T. ) ; +#3116 = EDGE_CURVE ( 'NONE', #1266, #3887, #3384, .T. ) ; +#3117 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#3118 = EDGE_CURVE ( 'NONE', #3222, #3487, #5991, .T. ) ; +#3119 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, -2.168404344971008900E-016 ) ) ; +#3120 = ORIENTED_EDGE ( 'NONE', *, *, #3212, .F. ) ; +#3121 = ORIENTED_EDGE ( 'NONE', *, *, #7033, .T. ) ; +#3122 = ADVANCED_FACE ( 'NONE', ( #1977 ), #172, .F. ) ; +#3123 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1627 ), #6477 ) ; +#3124 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.0000000000000000000, 1.074999999999999700 ) ) ; +#3126 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3125 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#3127 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.2000000000000000900, 1.075000000000000000 ) ) ; +#3128 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3129 = VERTEX_POINT ( 'NONE', #4092 ) ; +#3130 = AXIS2_PLACEMENT_3D ( 'NONE', #412, #3767, #1513 ) ; +#3131 = VERTEX_POINT ( 'NONE', #3427 ) ; +#3132 = AXIS2_PLACEMENT_3D ( 'NONE', #1760, #2485, #252 ) ; +#3133 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 0.2000000000000000900, -0.6409215920651651900 ) ) ; +#3134 = ORIENTED_EDGE ( 'NONE', *, *, #5580, .T. ) ; +#3135 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3136 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3137 = ORIENTED_EDGE ( 'NONE', *, *, #1815, .F. ) ; +#3138 = ADVANCED_FACE ( 'NONE', ( #75 ), #1824, .F. ) ; +#3139 = ORIENTED_EDGE ( 'NONE', *, *, #4542, .F. ) ; +#3140 = FACE_OUTER_BOUND ( 'NONE', #5307, .T. ) ; +#3141 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.8000000000000000400, -1.100000000000000500 ) ) ; +#3142 = STYLED_ITEM ( 'NONE', ( #1335 ), #1779 ) ; +#3143 = PLANE ( 'NONE', #3423 ) ; +#3144 = ORIENTED_EDGE ( 'NONE', *, *, #4044, .F. ) ; +#3145 = VERTEX_POINT ( 'NONE', #2393 ) ; +#3146 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5847 ), #6221 ) ; +#3147 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3148 = VECTOR ( 'NONE', #2862, 1000.000000000000000 ) ; +#3149 = VECTOR ( 'NONE', #1408, 1000.000000000000000 ) ; +#3150 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -1.120000000000000100 ) ) ; +#3151 = ORIENTED_EDGE ( 'NONE', *, *, #3359, .F. ) ; +#3152 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3153 = LINE ( 'NONE', #6766, #204 ) ; +#3154 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1827, 'distance_accuracy_value', 'NONE'); +#3155 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#3156 = ADVANCED_FACE ( 'NONE', ( #6161 ), #4612, .T. ) ; +#3157 = PLANE ( 'NONE', #3130 ) ; +#3158 = SURFACE_SIDE_STYLE ('',( #2830 ) ) ; +#3159 = EDGE_CURVE ( 'NONE', #3710, #42, #6684, .T. ) ; +#3160 = EDGE_CURVE ( 'NONE', #7223, #599, #3650, .T. ) ; +#3161 = EDGE_CURVE ( 'NONE', #585, #5900, #2505, .T. ) ; +#3162 = VERTEX_POINT ( 'NONE', #2299 ) ; +#3163 = FACE_OUTER_BOUND ( 'NONE', #2278, .T. ) ; +#3164 = STYLED_ITEM ( 'NONE', ( #7180 ), #4319 ) ; +#3165 = FILL_AREA_STYLE ('',( #6594 ) ) ; +#3166 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3167 = VERTEX_POINT ( 'NONE', #3448 ) ; +#3168 = PLANE ( 'NONE', #1797 ) ; +#3169 = VECTOR ( 'NONE', #266, 1000.000000000000000 ) ; +#3170 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3171 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 0.6199999999999995500 ) ) ; +#3172 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3173 = ADVANCED_FACE ( 'NONE', ( #6259 ), #586, .T. ) ; +#3174 = ORIENTED_EDGE ( 'NONE', *, *, #1858, .T. ) ; +#3175 = SURFACE_STYLE_FILL_AREA ( #2996 ) ; +#3176 = FACE_OUTER_BOUND ( 'NONE', #5422, .T. ) ; +#3177 = LINE ( 'NONE', #1673, #1701 ) ; +#3178 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3179 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 0.05000000000000012800, -0.9409215920651650100 ) ) ; +#3180 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3181 = VERTEX_POINT ( 'NONE', #4789 ) ; +#3182 = FACE_OUTER_BOUND ( 'NONE', #2740, .T. ) ; +#3183 = LINE ( 'NONE', #5233, #6493 ) ; +#3184 = LINE ( 'NONE', #3841, #4099 ) ; +#3185 = STYLED_ITEM ( 'NONE', ( #4615 ), #1448 ) ; +#3186 = CYLINDRICAL_SURFACE ( 'NONE', #6193, 0.1199999999999998800 ) ; +#3187 = ORIENTED_EDGE ( 'NONE', *, *, #5825, .T. ) ; +#3188 = EDGE_LOOP ( 'NONE', ( #2351, #6869, #2418, #5294 ) ) ; +#3189 = PLANE ( 'NONE', #4416 ) ; +#3190 = VECTOR ( 'NONE', #5496, 1000.000000000000000 ) ; +#3191 = VECTOR ( 'NONE', #6142, 1000.000000000000000 ) ; +#3192 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.2000000000000000900, 1.074999999999999500 ) ) ; +#3193 = ORIENTED_EDGE ( 'NONE', *, *, #6935, .T. ) ; +#3195 = FILL_AREA_STYLE ('',( #6067 ) ) ; +#3194 = DIRECTION ( 'NONE', ( 6.318483184191612600E-017, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3196 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3197 = LINE ( 'NONE', #4179, #5104 ) ; +#3198 = EDGE_LOOP ( 'NONE', ( #3112, #6571, #766, #4977 ) ) ; +#3199 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3200 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3201 = VERTEX_POINT ( 'NONE', #1385 ) ; +#3202 = EDGE_CURVE ( 'NONE', #25, #727, #3557, .T. ) ; +#3203 = EDGE_LOOP ( 'NONE', ( #3044, #7151, #5684, #1871, #7129, #7266, #3582, #393, #2527, #4501, #4648, #3420, #3023, #27, #2374, #6405, #5301, #4660, #860, #4120, #4015, #3193, #3081, #6694, #4491, #5138, #6967, #5011, #6018, #5200, #2409, #4156, #415, #6885, #3878, #4380, #2795, #7240 ) ) ; +#3204 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654900E-016 ) ) ; +#3205 = SURFACE_STYLE_USAGE ( .BOTH. , #4342 ) ; +#3206 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#3207 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1944 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #567, #3935, #4507 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3208 = ORIENTED_EDGE ( 'NONE', *, *, #3749, .F. ) ; +#3209 = ORIENTED_EDGE ( 'NONE', *, *, #4571, .T. ) ; +#3210 = ADVANCED_FACE ( 'NONE', ( #4642 ), #6506, .F. ) ; +#3211 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4870 ), #3996 ) ; +#3212 = EDGE_CURVE ( 'NONE', #3412, #4096, #410, .T. ) ; +#3213 = EDGE_CURVE ( 'NONE', #7113, #2120, #6415, .T. ) ; +#3214 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.05000000000000012800, 1.074999999999999700 ) ) ; +#3215 = EDGE_CURVE ( 'NONE', #3295, #3181, #5723, .T. ) ; +#3216 = ORIENTED_EDGE ( 'NONE', *, *, #5731, .T. ) ; +#3217 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3032 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #729, #3484, #6310 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3218 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.6999999999999999600, -1.100000000000000500 ) ) ; +#3220 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3219 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, 0.8799999999999998900 ) ) ; +#3221 = FILL_AREA_STYLE ('',( #1506 ) ) ; +#3222 = VERTEX_POINT ( 'NONE', #783 ) ; +#3223 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3224 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3225 = AXIS2_PLACEMENT_3D ( 'NONE', #2555, #1367, #4794 ) ; +#3226 = ORIENTED_EDGE ( 'NONE', *, *, #23, .F. ) ; +#3227 = LINE ( 'NONE', #1158, #1751 ) ; +#3228 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2867 ), #1214 ) ; +#3229 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.6697073557013986100, -1.074999999999999700 ) ) ; +#3230 = ORIENTED_EDGE ( 'NONE', *, *, #2744, .T. ) ; +#3231 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#3232 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, 0.6199999999999996600 ) ) ; +#3233 = ORIENTED_EDGE ( 'NONE', *, *, #4224, .F. ) ; +#3234 = LINE ( 'NONE', #630, #5133 ) ; +#3235 = ORIENTED_EDGE ( 'NONE', *, *, #1847, .T. ) ; +#3236 = ORIENTED_EDGE ( 'NONE', *, *, #6970, .T. ) ; +#3237 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3238 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4498 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3570, #7083, #5997 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3239 = VERTEX_POINT ( 'NONE', #1409 ) ; +#3240 = VECTOR ( 'NONE', #5330, 1000.000000000000000 ) ; +#3241 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3242 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#3244 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000400, 0.8000000000000003800, 1.500000000000000000 ) ) ; +#3243 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3245 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#3246 = FILL_AREA_STYLE_COLOUR ( '', #5556 ) ; +#3247 = ORIENTED_EDGE ( 'NONE', *, *, #1417, .F. ) ; +#3248 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3249 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5471, 'distance_accuracy_value', 'NONE'); +#3250 = ADVANCED_FACE ( 'NONE', ( #1349 ), #1884, .F. ) ; +#3251 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3252 = STYLED_ITEM ( 'NONE', ( #1019 ), #3173 ) ; +#3253 = SURFACE_SIDE_STYLE ('',( #7203 ) ) ; +#3254 = LINE ( 'NONE', #2334, #2728 ) ; +#3255 = DIRECTION ( 'NONE', ( -1.275531967630005200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3256 = AXIS2_PLACEMENT_3D ( 'NONE', #5843, #716, #1859 ) ; +#3257 = VECTOR ( 'NONE', #4389, 1000.000000000000000 ) ; +#3258 = EDGE_CURVE ( 'NONE', #6511, #3874, #4728, .T. ) ; +#3259 = EDGE_CURVE ( 'NONE', #78, #3887, #4287, .T. ) ; +#3260 = EDGE_CURVE ( 'NONE', #4758, #800, #5355, .T. ) ; +#3261 = VERTEX_POINT ( 'NONE', #2526 ) ; +#3262 = SURFACE_STYLE_FILL_AREA ( #3399 ) ; +#3263 = AXIS2_PLACEMENT_3D ( 'NONE', #3551, #4198, #4668 ) ; +#3264 = PLANE ( 'NONE', #5240 ) ; +#3265 = VECTOR ( 'NONE', #2984, 1000.000000000000000 ) ; +#3266 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3267 = ORIENTED_EDGE ( 'NONE', *, *, #5534, .T. ) ; +#3268 = LINE ( 'NONE', #3102, #3364 ) ; +#3269 = LINE ( 'NONE', #3770, #138 ) ; +#3270 = VECTOR ( 'NONE', #1233, 1000.000000000000000 ) ; +#3271 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3273 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -0.3800000000000004500 ) ) ; +#3272 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.0000000000000000000, -1.500000000000000000 ) ) ; +#3274 = VECTOR ( 'NONE', #6208, 1000.000000000000000 ) ; +#3275 = PLANE ( 'NONE', #6575 ) ; +#3276 = FACE_OUTER_BOUND ( 'NONE', #1023, .T. ) ; +#3277 = AXIS2_PLACEMENT_3D ( 'NONE', #5664, #6822, #1711 ) ; +#3278 = EDGE_CURVE ( 'NONE', #5499, #4897, #7200, .T. ) ; +#3279 = VERTEX_POINT ( 'NONE', #834 ) ; +#3280 = LINE ( 'NONE', #5800, #1525 ) ; +#3281 = ORIENTED_EDGE ( 'NONE', *, *, #1375, .T. ) ; +#3282 = SURFACE_STYLE_FILL_AREA ( #5770 ) ; +#3283 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3284 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.2000000000000000100, -1.074999999999999700 ) ) ; +#3285 = FACE_OUTER_BOUND ( 'NONE', #6731, .T. ) ; +#3286 = LINE ( 'NONE', #29, #1809 ) ; +#3287 = ORIENTED_EDGE ( 'NONE', *, *, #7162, .F. ) ; +#3288 = CIRCLE ( 'NONE', #5019, 0.1750000000000000200 ) ; +#3289 = ORIENTED_EDGE ( 'NONE', *, *, #6644, .T. ) ; +#3290 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3291 = ADVANCED_FACE ( 'NONE', ( #752 ), #6433, .T. ) ; +#3292 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, -1.500000000000000400 ) ) ; +#3293 = LINE ( 'NONE', #1546, #5814 ) ; +#3294 = EDGE_LOOP ( 'NONE', ( #6340, #5907, #2964, #717 ) ) ; +#3295 = VERTEX_POINT ( 'NONE', #3034 ) ; +#3296 = MANIFOLD_SOLID_BREP ( 'LPattern4[8]', #5255 ) ; +#3297 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, 0.6199999999999996600 ) ) ; +#3298 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3299 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3300 = SURFACE_SIDE_STYLE ('',( #1070 ) ) ; +#3301 = ORIENTED_EDGE ( 'NONE', *, *, #47, .T. ) ; +#3302 = EDGE_LOOP ( 'NONE', ( #2835, #5223, #4842, #5738 ) ) ; +#3303 = EDGE_CURVE ( 'NONE', #4023, #1042, #2764, .T. ) ; +#3304 = ORIENTED_EDGE ( 'NONE', *, *, #2517, .T. ) ; +#3305 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005700E-016 ) ) ; +#3306 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 2.940894014733149000, 1.075000000000000000 ) ) ; +#3307 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#3308 = AXIS2_PLACEMENT_3D ( 'NONE', #6641, #5515, #3906 ) ; +#3309 = ORIENTED_EDGE ( 'NONE', *, *, #3494, .F. ) ; +#3310 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1680 ), #3451 ) ; +#3311 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 0.1199999999999995500 ) ) ; +#3312 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3313 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3314 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3315 = VERTEX_POINT ( 'NONE', #6578 ) ; +#3316 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3317 = DIRECTION ( 'NONE', ( 3.872150616019654400E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3318 = VECTOR ( 'NONE', #3973, 1000.000000000000000 ) ; +#3319 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, 0.4999999999999997800 ) ) ; +#3320 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, -0.6200000000000001100 ) ) ; +#3321 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#3322 = ADVANCED_FACE ( 'NONE', ( #2851 ), #5312, .F. ) ; +#3323 = VERTEX_POINT ( 'NONE', #6037 ) ; +#3324 = ORIENTED_EDGE ( 'NONE', *, *, #6213, .T. ) ; +#3325 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.9999999999999997800 ) ) ; +#3326 = SURFACE_STYLE_FILL_AREA ( #6995 ) ; +#3327 = ORIENTED_EDGE ( 'NONE', *, *, #6855, .T. ) ; +#3328 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3329 = SURFACE_SIDE_STYLE ('',( #2636 ) ) ; +#3330 = PLANE ( 'NONE', #2747 ) ; +#3331 = ORIENTED_EDGE ( 'NONE', *, *, #5286, .F. ) ; +#3332 = LINE ( 'NONE', #4204, #5231 ) ; +#3333 = SURFACE_STYLE_USAGE ( .BOTH. , #612 ) ; +#3334 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -2.168404344971008900E-016 ) ) ; +#3335 = ORIENTED_EDGE ( 'NONE', *, *, #4141, .T. ) ; +#3336 = SURFACE_STYLE_FILL_AREA ( #7120 ) ; +#3337 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 0.1199999999999995500 ) ) ; +#3338 = SURFACE_SIDE_STYLE ('',( #215 ) ) ; +#3339 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005700E-016 ) ) ; +#3340 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#3341 = EDGE_CURVE ( 'NONE', #5003, #684, #7020, .T. ) ; +#3342 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, 0.6199999999999995500 ) ) ; +#3343 = ORIENTED_EDGE ( 'NONE', *, *, #5979, .T. ) ; +#3344 = VECTOR ( 'NONE', #5589, 1000.000000000000000 ) ; +#3345 = VECTOR ( 'NONE', #6086, 1000.000000000000000 ) ; +#3346 = AXIS2_PLACEMENT_3D ( 'NONE', #192, #1290, #2875 ) ; +#3347 = SURFACE_STYLE_FILL_AREA ( #7138 ) ; +#3348 = PLANE ( 'NONE', #616 ) ; +#3349 = FILL_AREA_STYLE ('',( #5106 ) ) ; +#3350 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000400, 0.05000000000000000300, 1.500000000000000000 ) ) ; +#3351 = SHAPE_DEFINITION_REPRESENTATION ( #7066, #5650 ) ; +#3352 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.0000000000000000000, -1.500000000000000000 ) ) ; +#3353 = VECTOR ( 'NONE', #3700, 1000.000000000000000 ) ; +#3354 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3355 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #969 ) ) ; +#3356 = EDGE_CURVE ( 'NONE', #3033, #1730, #1007, .T. ) ; +#3357 = VECTOR ( 'NONE', #963, 1000.000000000000000 ) ; +#3358 = EDGE_CURVE ( 'NONE', #4772, #4897, #2316, .T. ) ; +#3359 = EDGE_CURVE ( 'NONE', #3588, #7168, #4110, .T. ) ; +#3360 = ADVANCED_FACE ( 'NONE', ( #3925 ), #4359, .T. ) ; +#3361 = FACE_OUTER_BOUND ( 'NONE', #4414, .T. ) ; +#3362 = STYLED_ITEM ( 'NONE', ( #320 ), #4887 ) ; +#3363 = ORIENTED_EDGE ( 'NONE', *, *, #4000, .T. ) ; +#3364 = VECTOR ( 'NONE', #3682, 1000.000000000000000 ) ; +#3365 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, 0.8799999999999998900 ) ) ; +#3366 = PLANE ( 'NONE', #1743 ) ; +#3367 = VECTOR ( 'NONE', #182, 1000.000000000000000 ) ; +#3368 = LINE ( 'NONE', #6395, #1723 ) ; +#3369 = ORIENTED_EDGE ( 'NONE', *, *, #4957, .F. ) ; +#3370 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3371 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.0000000000000000000, -1.500000000000000000 ) ) ; +#3372 = LINE ( 'NONE', #2245, #4456 ) ; +#3373 = EDGE_LOOP ( 'NONE', ( #5192, #3335, #6412, #418 ) ) ; +#3374 = FILL_AREA_STYLE ('',( #3246 ) ) ; +#3375 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3376 = AXIS2_PLACEMENT_3D ( 'NONE', #1044, #6091, #3370 ) ; +#3377 = EDGE_CURVE ( 'NONE', #6587, #6784, #3639, .T. ) ; +#3378 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, -0.6200000000000001100 ) ) ; +#3379 = FACE_OUTER_BOUND ( 'NONE', #6449, .T. ) ; +#3380 = ORIENTED_EDGE ( 'NONE', *, *, #5326, .F. ) ; +#3381 = CIRCLE ( 'NONE', #3457, 0.1199999999999998800 ) ; +#3382 = VERTEX_POINT ( 'NONE', #4895 ) ; +#3383 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 0.6199999999999995500 ) ) ; +#3384 = LINE ( 'NONE', #5221, #1439 ) ; +#3385 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3386 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.05000000000000012800, -1.074999999999999700 ) ) ; +#3387 = SURFACE_STYLE_USAGE ( .BOTH. , #5679 ) ; +#3388 = AXIS2_PLACEMENT_3D ( 'NONE', #6606, #6069, #7207 ) ; +#3389 = VERTEX_POINT ( 'NONE', #6608 ) ; +#3390 = ORIENTED_EDGE ( 'NONE', *, *, #2516, .F. ) ; +#3391 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6577, 'distance_accuracy_value', 'NONE'); +#3392 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3393 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #7221 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2284, #3394, #60 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3394 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3395 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3396 = ORIENTED_EDGE ( 'NONE', *, *, #1518, .F. ) ; +#3397 = ORIENTED_EDGE ( 'NONE', *, *, #4542, .T. ) ; +#3398 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3399 = FILL_AREA_STYLE ('',( #3960 ) ) ; +#3400 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, -0.1200000000000000900 ) ) ; +#3401 = ADVANCED_FACE ( 'NONE', ( #927 ), #379, .F. ) ; +#3402 = ORIENTED_EDGE ( 'NONE', *, *, #3356, .F. ) ; +#3403 = EDGE_CURVE ( 'NONE', #1802, #2705, #6068, .T. ) ; +#3404 = EDGE_CURVE ( 'NONE', #7125, #5599, #1259, .T. ) ; +#3405 = EDGE_CURVE ( 'NONE', #11, #5408, #3536, .T. ) ; +#3406 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3407 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#3408 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3409 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#3410 = VERTEX_POINT ( 'NONE', #2572 ) ; +#3411 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2002 ), #2373 ) ; +#3412 = VERTEX_POINT ( 'NONE', #4929 ) ; +#3413 = ORIENTED_EDGE ( 'NONE', *, *, #6342, .F. ) ; +#3414 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -0.6200000000000001100 ) ) ; +#3415 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3416 = VECTOR ( 'NONE', #4865, 1000.000000000000000 ) ; +#3417 = ORIENTED_EDGE ( 'NONE', *, *, #4224, .T. ) ; +#3418 = ORIENTED_EDGE ( 'NONE', *, *, #49, .T. ) ; +#3419 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3420 = ORIENTED_EDGE ( 'NONE', *, *, #1948, .T. ) ; +#3421 = VECTOR ( 'NONE', #5436, 1000.000000000000000 ) ; +#3422 = LINE ( 'NONE', #4764, #2184 ) ; +#3423 = AXIS2_PLACEMENT_3D ( 'NONE', #5385, #1978, #4813 ) ; +#3424 = VERTEX_POINT ( 'NONE', #2007 ) ; +#3425 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, 0.6199999999999995500 ) ) ; +#3426 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3427 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, 0.3799999999999998900 ) ) ; +#3428 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3429 = ADVANCED_FACE ( 'NONE', ( #5183 ), #6554, .F. ) ; +#3430 = ORIENTED_EDGE ( 'NONE', *, *, #1475, .F. ) ; +#3431 = VECTOR ( 'NONE', #6317, 1000.000000000000000 ) ; +#3432 = CIRCLE ( 'NONE', #6712, 0.1199999999999998800 ) ; +#3433 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3434 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3435 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 2.940894014733149000, -1.075000000000000000 ) ) ; +#3436 = FACE_OUTER_BOUND ( 'NONE', #6524, .T. ) ; +#3437 = FACE_OUTER_BOUND ( 'NONE', #3547, .T. ) ; +#3438 = LINE ( 'NONE', #6128, #6230 ) ; +#3439 = FILL_AREA_STYLE ('',( #5815 ) ) ; +#3440 = VECTOR ( 'NONE', #2464, 1000.000000000000000 ) ; +#3441 = EDGE_CURVE ( 'NONE', #2173, #1989, #4100, .T. ) ; +#3442 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#3443 = ORIENTED_EDGE ( 'NONE', *, *, #5481, .F. ) ; +#3444 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.2000000000000000900, 1.075000000000000000 ) ) ; +#3445 = LINE ( 'NONE', #3444, #4447 ) ; +#3446 = STYLED_ITEM ( 'NONE', ( #5520 ), #3864 ) ; +#3447 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3448 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#3449 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3450 = VECTOR ( 'NONE', #210, 1000.000000000000000 ) ; +#3451 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1190 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #621, #4511, #1607 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3452 = EDGE_CURVE ( 'NONE', #3019, #4647, #2583, .T. ) ; +#3453 = ORIENTED_EDGE ( 'NONE', *, *, #463, .F. ) ; +#3454 = VECTOR ( 'NONE', #6710, 1000.000000000000000 ) ; +#3455 = LINE ( 'NONE', #1122, #3636 ) ; +#3456 = VERTEX_POINT ( 'NONE', #3839 ) ; +#3457 = AXIS2_PLACEMENT_3D ( 'NONE', #6376, #4634, #6873 ) ; +#3458 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3459 = PLANE ( 'NONE', #1071 ) ; +#3460 = ORIENTED_EDGE ( 'NONE', *, *, #98, .F. ) ; +#3461 = LINE ( 'NONE', #5229, #1182 ) ; +#3462 = ORIENTED_EDGE ( 'NONE', *, *, #1145, .F. ) ; +#3463 = VECTOR ( 'NONE', #6361, 1000.000000000000000 ) ; +#3464 = AXIS2_PLACEMENT_3D ( 'NONE', #264, #4218, #6987 ) ; +#3465 = LINE ( 'NONE', #5947, #930 ) ; +#3466 = ORIENTED_EDGE ( 'NONE', *, *, #2834, .F. ) ; +#3467 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3468 = ORIENTED_EDGE ( 'NONE', *, *, #3404, .F. ) ; +#3469 = AXIS2_PLACEMENT_3D ( 'NONE', #2925, #2988, #6486 ) ; +#3470 = ADVANCED_FACE ( 'NONE', ( #4275 ), #4975, .T. ) ; +#3471 = LINE ( 'NONE', #2957, #3367 ) ; +#3472 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.2000000000000000100, 1.074999999999999700 ) ) ; +#3473 = ORIENTED_EDGE ( 'NONE', *, *, #918, .F. ) ; +#3474 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.9999999999999997800 ) ) ; +#3475 = ORIENTED_EDGE ( 'NONE', *, *, #648, .T. ) ; +#3476 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3477 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3478 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #7182, 'distance_accuracy_value', 'NONE'); +#3479 = ORIENTED_EDGE ( 'NONE', *, *, #2786, .T. ) ; +#3480 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#3481 = FILL_AREA_STYLE ('',( #5296 ) ) ; +#3482 = DIRECTION ( 'NONE', ( 5.042800802258161100E-017, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3483 = VERTEX_POINT ( 'NONE', #2668 ) ; +#3484 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3485 = AXIS2_PLACEMENT_3D ( 'NONE', #4185, #4780, #3614 ) ; +#3486 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.0000000000000000000, -1.500000000000000000 ) ) ; +#3487 = VERTEX_POINT ( 'NONE', #448 ) ; +#3488 = ORIENTED_EDGE ( 'NONE', *, *, #6470, .T. ) ; +#3489 = ORIENTED_EDGE ( 'NONE', *, *, #1815, .T. ) ; +#3490 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5097 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1454, #3147, #5919 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3491 = EDGE_CURVE ( 'NONE', #2698, #6306, #3101, .T. ) ; +#3492 = EDGE_CURVE ( 'NONE', #2638, #6354, #3730, .T. ) ; +#3493 = VECTOR ( 'NONE', #2088, 1000.000000000000000 ) ; +#3494 = EDGE_CURVE ( 'NONE', #4656, #2068, #2217, .T. ) ; +#3495 = LINE ( 'NONE', #6116, #6117 ) ; +#3496 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3497 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3498 = FILL_AREA_STYLE ('',( #1270 ) ) ; +#3499 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 0.2000000000000000900, -0.6409215920651651900 ) ) ; +#3500 = ORIENTED_EDGE ( 'NONE', *, *, #4184, .F. ) ; +#3501 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1642 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #53, #2155, #3974 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3502 = ORIENTED_EDGE ( 'NONE', *, *, #1473, .T. ) ; +#3503 = ORIENTED_EDGE ( 'NONE', *, *, #4424, .F. ) ; +#3504 = AXIS2_PLACEMENT_3D ( 'NONE', #3786, #4303, #7091 ) ; +#3505 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3506 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 2.940894014733149000, 1.074999999999999700 ) ) ; +#3507 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3508 = SURFACE_STYLE_USAGE ( .BOTH. , #3580 ) ; +#3509 = ORIENTED_EDGE ( 'NONE', *, *, #735, .T. ) ; +#3510 = CIRCLE ( 'NONE', #1254, 0.1499999999999999700 ) ; +#3511 = FACE_OUTER_BOUND ( 'NONE', #4580, .T. ) ; +#3512 = AXIS2_PLACEMENT_3D ( 'NONE', #1169, #6288, #1748 ) ; +#3513 = EDGE_CURVE ( 'NONE', #5834, #1285, #1519, .T. ) ; +#3514 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.1999999999999999800, 1.074999999999999700 ) ) ; +#3515 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3516 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#3517 = AXIS2_PLACEMENT_3D ( 'NONE', #1029, #3317, #3880 ) ; +#3518 = SURFACE_STYLE_USAGE ( .BOTH. , #146 ) ; +#3519 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3520 = ORIENTED_EDGE ( 'NONE', *, *, #3739, .T. ) ; +#3521 = LINE ( 'NONE', #1108, #5165 ) ; +#3522 = FACE_OUTER_BOUND ( 'NONE', #6460, .T. ) ; +#3523 = AXIS2_PLACEMENT_3D ( 'NONE', #5115, #1136, #3434 ) ; +#3524 = FACE_OUTER_BOUND ( 'NONE', #6518, .T. ) ; +#3525 = ORIENTED_EDGE ( 'NONE', *, *, #3020, .F. ) ; +#3526 = FACE_OUTER_BOUND ( 'NONE', #5946, .T. ) ; +#3527 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3528 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 0.2000000000000000900, -0.7909215920651651000 ) ) ; +#3529 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.6999999999999999600, -1.100000000000000500 ) ) ; +#3530 = ORIENTED_EDGE ( 'NONE', *, *, #2744, .F. ) ; +#3531 = LINE ( 'NONE', #3073, #3088 ) ; +#3532 = VECTOR ( 'NONE', #4134, 1000.000000000000000 ) ; +#3533 = LINE ( 'NONE', #1051, #1612 ) ; +#3534 = SURFACE_STYLE_USAGE ( .BOTH. , #5909 ) ; +#3535 = EDGE_CURVE ( 'NONE', #4202, #1299, #2752, .T. ) ; +#3536 = LINE ( 'NONE', #3684, #5087 ) ; +#3537 = EDGE_CURVE ( 'NONE', #3576, #1356, #227, .T. ) ; +#3538 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000400, 0.05000000000000000300, 1.500000000000000000 ) ) ; +#3539 = EDGE_CURVE ( 'NONE', #4320, #1096, #577, .T. ) ; +#3540 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3541 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3542 = PRESENTATION_STYLE_ASSIGNMENT (( #1305 ) ) ; +#3543 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3164 ) ) ; +#3544 = VECTOR ( 'NONE', #6244, 1000.000000000000000 ) ; +#3545 = ORIENTED_EDGE ( 'NONE', *, *, #6294, .T. ) ; +#3546 = LINE ( 'NONE', #2967, #924 ) ; +#3547 = EDGE_LOOP ( 'NONE', ( #67, #1925, #5999, #4746 ) ) ; +#3548 = SURFACE_SIDE_STYLE ('',( #7014 ) ) ; +#3549 = FILL_AREA_STYLE_COLOUR ( '', #6328 ) ; +#3550 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3551 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, 0.9999999999999997800 ) ) ; +#3552 = STYLED_ITEM ( 'NONE', ( #5172 ), #5184 ) ; +#3553 = LINE ( 'NONE', #2678, #2410 ) ; +#3554 = ORIENTED_EDGE ( 'NONE', *, *, #4000, .F. ) ; +#3555 = VECTOR ( 'NONE', #205, 1000.000000000000000 ) ; +#3556 = ORIENTED_EDGE ( 'NONE', *, *, #2743, .F. ) ; +#3557 = LINE ( 'NONE', #2499, #6599 ) ; +#3558 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -0.1200000000000000900 ) ) ; +#3559 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 6.318483184191612600E-017 ) ) ; +#3560 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3561 = ORIENTED_EDGE ( 'NONE', *, *, #1518, .T. ) ; +#3562 = ORIENTED_EDGE ( 'NONE', *, *, #6811, .T. ) ; +#3563 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3564 = PLANE ( 'NONE', #6388 ) ; +#3565 = AXIS2_PLACEMENT_3D ( 'NONE', #3027, #4138, #1833 ) ; +#3566 = VERTEX_POINT ( 'NONE', #6670 ) ; +#3567 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.8000000000000003800, -1.500000000000000400 ) ) ; +#3568 = ORIENTED_EDGE ( 'NONE', *, *, #5481, .T. ) ; +#3569 = PLANE ( 'NONE', #1995 ) ; +#3570 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3571 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6929, 'distance_accuracy_value', 'NONE'); +#3572 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3573 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3574 = VERTEX_POINT ( 'NONE', #4411 ) ; +#3575 = ORIENTED_EDGE ( 'NONE', *, *, #1146, .F. ) ; +#3576 = VERTEX_POINT ( 'NONE', #7209 ) ; +#3577 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, -1.120000000000000100 ) ) ; +#3578 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3579 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3580 = SURFACE_SIDE_STYLE ('',( #5732 ) ) ; +#3581 = EDGE_CURVE ( 'NONE', #1887, #1626, #5885, .T. ) ; +#3582 = ORIENTED_EDGE ( 'NONE', *, *, #1104, .T. ) ; +#3583 = VERTEX_POINT ( 'NONE', #1560 ) ; +#3584 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3585 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2715 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1917, #4270, #360 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3586 = VECTOR ( 'NONE', #6245, 1000.000000000000000 ) ; +#3587 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3588 = VERTEX_POINT ( 'NONE', #2144 ) ; +#3589 = EDGE_CURVE ( 'NONE', #5599, #2698, #2401, .T. ) ; +#3590 = EDGE_CURVE ( 'NONE', #5912, #1363, #1614, .T. ) ; +#3591 = EDGE_CURVE ( 'NONE', #2493, #4680, #4909, .T. ) ; +#3592 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3593 = ORIENTED_EDGE ( 'NONE', *, *, #4397, .T. ) ; +#3594 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#3595 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, -0.0000000000000000000, -0.9409215920651650100 ) ) ; +#3596 = CIRCLE ( 'NONE', #2959, 0.1199999999999998800 ) ; +#3597 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3598 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#3599 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2985 ), #4002 ) ; +#3600 = ORIENTED_EDGE ( 'NONE', *, *, #2038, .T. ) ; +#3601 = LINE ( 'NONE', #3656, #638 ) ; +#3602 = LINE ( 'NONE', #6080, #2105 ) ; +#3603 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.6199999999999996600 ) ) ; +#3604 = FILL_AREA_STYLE_COLOUR ( '', #3798 ) ; +#3605 = SURFACE_SIDE_STYLE ('',( #6386 ) ) ; +#3606 = ADVANCED_FACE ( 'NONE', ( #6150 ), #5039, .T. ) ; +#3607 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000400, 5.842640687119285300, 1.500000000000000000 ) ) ; +#3608 = FILL_AREA_STYLE_COLOUR ( '', #1602 ) ; +#3609 = MANIFOLD_SOLID_BREP ( 'LPattern4[4]', #6683 ) ; +#3610 = EDGE_CURVE ( 'NONE', #1911, #5777, #1081, .T. ) ; +#3611 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3612 = LINE ( 'NONE', #3480, #988 ) ; +#3613 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.6199999999999996600 ) ) ; +#3614 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#3615 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3616 = PRESENTATION_STYLE_ASSIGNMENT (( #2164 ) ) ; +#3617 = LINE ( 'NONE', #4527, #6918 ) ; +#3618 = LINE ( 'NONE', #3409, #6060 ) ; +#3619 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, -0.1200000000000000900 ) ) ; +#3621 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#3620 = FILL_AREA_STYLE ('',( #7038 ) ) ; +#3622 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, -0.3800000000000004500 ) ) ; +#3623 = CARTESIAN_POINT ( 'NONE', ( -1.371196865202255700E-016, 0.05000000000000000300, 1.075000000000000000 ) ) ; +#3624 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -0.1200000000000000900 ) ) ; +#3625 = ORIENTED_EDGE ( 'NONE', *, *, #5480, .T. ) ; +#3626 = VECTOR ( 'NONE', #7060, 1000.000000000000000 ) ; +#3627 = CIRCLE ( 'NONE', #5887, 0.1199999999999998800 ) ; +#3628 = LINE ( 'NONE', #3787, #5718 ) ; +#3629 = SURFACE_STYLE_FILL_AREA ( #1151 ) ; +#3630 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, -1.120000000000000100 ) ) ; +#3631 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, 1.119999999999999700 ) ) ; +#3632 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3633 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3634 = ORIENTED_EDGE ( 'NONE', *, *, #4283, .F. ) ; +#3635 = VECTOR ( 'NONE', #1799, 1000.000000000000000 ) ; +#3636 = VECTOR ( 'NONE', #1587, 1000.000000000000000 ) ; +#3637 = ORIENTED_EDGE ( 'NONE', *, *, #3452, .F. ) ; +#3638 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3252 ), #730 ) ; +#3639 = LINE ( 'NONE', #3758, #6777 ) ; +#3640 = FACE_OUTER_BOUND ( 'NONE', #6620, .T. ) ; +#3641 = AXIS2_PLACEMENT_3D ( 'NONE', #2981, #7002, #4687 ) ; +#3642 = VECTOR ( 'NONE', #7239, 1000.000000000000000 ) ; +#3643 = EDGE_CURVE ( 'NONE', #5190, #6547, #5805, .T. ) ; +#3644 = ORIENTED_EDGE ( 'NONE', *, *, #816, .F. ) ; +#3645 = EDGE_CURVE ( 'NONE', #3181, #6158, #6759, .T. ) ; +#3646 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3647 = EDGE_CURVE ( 'NONE', #5215, #654, #1796, .T. ) ; +#3648 = ORIENTED_EDGE ( 'NONE', *, *, #6809, .T. ) ; +#3649 = FILL_AREA_STYLE ('',( #6522 ) ) ; +#3650 = LINE ( 'NONE', #5758, #2687 ) ; +#3651 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3652 = AXIS2_PLACEMENT_3D ( 'NONE', #5313, #6455, #2394 ) ; +#3653 = FACE_OUTER_BOUND ( 'NONE', #4735, .T. ) ; +#3654 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -2.168404344971008900E-016 ) ) ; +#3655 = VERTEX_POINT ( 'NONE', #6019 ) ; +#3657 = SURFACE_SIDE_STYLE ('',( #3698 ) ) ; +#3656 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, 1.119999999999999400 ) ) ; +#3658 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3659 = ORIENTED_EDGE ( 'NONE', *, *, #2968, .T. ) ; +#3660 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3661 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3662 = AXIS2_PLACEMENT_3D ( 'NONE', #942, #962, #6562 ) ; +#3663 = EDGE_LOOP ( 'NONE', ( #5453, #6276, #3575, #6632 ) ) ; +#3664 = VERTEX_POINT ( 'NONE', #2805 ) ; +#3665 = AXIS2_PLACEMENT_3D ( 'NONE', #5734, #5699, #6786 ) ; +#3666 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -0.1200000000000000900 ) ) ; +#3667 = EDGE_CURVE ( 'NONE', #3957, #3412, #5798, .T. ) ; +#3668 = FILL_AREA_STYLE ('',( #1914 ) ) ; +#3669 = DIRECTION ( 'NONE', ( -1.275531967630005200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3670 = ORIENTED_EDGE ( 'NONE', *, *, #270, .F. ) ; +#3671 = ADVANCED_FACE ( 'NONE', ( #5529 ), #2533, .T. ) ; +#3672 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#3673 = STYLED_ITEM ( 'NONE', ( #2474 ), #1423 ) ; +#3674 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3675 = ORIENTED_EDGE ( 'NONE', *, *, #6006, .F. ) ; +#3676 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.6200000000000001100 ) ) ; +#3677 = AXIS2_PLACEMENT_3D ( 'NONE', #2427, #3559, #2355 ) ; +#3678 = VECTOR ( 'NONE', #5743, 1000.000000000000000 ) ; +#3679 = SURFACE_STYLE_USAGE ( .BOTH. , #300 ) ; +#3681 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, -1.120000000000000100 ) ) ; +#3680 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3682 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3683 = EDGE_LOOP ( 'NONE', ( #1641, #2960, #6942, #1452 ) ) ; +#3684 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000400, 0.05000000000000000300, 1.500000000000000000 ) ) ; +#3685 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3686 = ORIENTED_EDGE ( 'NONE', *, *, #2270, .T. ) ; +#3687 = VERTEX_POINT ( 'NONE', #5981 ) ; +#3688 = LINE ( 'NONE', #7128, #6286 ) ; +#3689 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#3690 = PLANE ( 'NONE', #1960 ) ; +#3691 = ADVANCED_FACE ( 'NONE', ( #4181 ), #1416, .F. ) ; +#3692 = ORIENTED_EDGE ( 'NONE', *, *, #4423, .T. ) ; +#3693 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3694 = FILL_AREA_STYLE ('',( #5904 ) ) ; +#3695 = ORIENTED_EDGE ( 'NONE', *, *, #4472, .T. ) ; +#3696 = EDGE_CURVE ( 'NONE', #1578, #1133, #4088, .T. ) ; +#3697 = PRESENTATION_STYLE_ASSIGNMENT (( #3045 ) ) ; +#3698 = SURFACE_STYLE_FILL_AREA ( #5368 ) ; +#3699 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6758 ) ) ; +#3700 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3701 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.04999999999999969700, 1.500000000000000000 ) ) ; +#3702 = ORIENTED_EDGE ( 'NONE', *, *, #3258, .T. ) ; +#3703 = SURFACE_STYLE_FILL_AREA ( #2829 ) ; +#3704 = AXIS2_PLACEMENT_3D ( 'NONE', #1741, #4635, #4114 ) ; +#3705 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3706 = PLANE ( 'NONE', #2777 ) ; +#3707 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, -0.1200000000000000900 ) ) ; +#3708 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3709 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3710 = VERTEX_POINT ( 'NONE', #3719 ) ; +#3711 = ADVANCED_FACE ( 'NONE', ( #6494 ), #1344, .F. ) ; +#3712 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #694, 'distance_accuracy_value', 'NONE'); +#3713 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3714 = EDGE_LOOP ( 'NONE', ( #5769, #4745, #542, #3675 ) ) ; +#3715 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3716 = FILL_AREA_STYLE ('',( #389 ) ) ; +#3717 = FACE_OUTER_BOUND ( 'NONE', #3198, .T. ) ; +#3718 = CIRCLE ( 'NONE', #1550, 0.1199999999999998800 ) ; +#3719 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, -0.8800000000000003400 ) ) ; +#3720 = AXIS2_PLACEMENT_3D ( 'NONE', #6439, #3010, #6989 ) ; +#3721 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3722 = ADVANCED_FACE ( 'NONE', ( #565 ), #2483, .T. ) ; +#3723 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3724 = VECTOR ( 'NONE', #4354, 1000.000000000000000 ) ; +#3725 = VERTEX_POINT ( 'NONE', #1395 ) ; +#3726 = VECTOR ( 'NONE', #6472, 1000.000000000000000 ) ; +#3727 = FACE_OUTER_BOUND ( 'NONE', #4861, .T. ) ; +#3728 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, 0.3799999999999998900 ) ) ; +#3729 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 2.940894014733149000, -0.9409215920651650100 ) ) ; +#3730 = CIRCLE ( 'NONE', #2176, 0.1199999999999998800 ) ; +#3731 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3732 = SURFACE_STYLE_USAGE ( .BOTH. , #6625 ) ; +#3733 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -2.168404344971008900E-016 ) ) ; +#3734 = CYLINDRICAL_SURFACE ( 'NONE', #3641, 0.1199999999999998800 ) ; +#3735 = ORIENTED_EDGE ( 'NONE', *, *, #3589, .T. ) ; +#3736 = LINE ( 'NONE', #4723, #6157 ) ; +#3737 = LINE ( 'NONE', #1682, #7115 ) ; +#3738 = ORIENTED_EDGE ( 'NONE', *, *, #5103, .F. ) ; +#3739 = EDGE_CURVE ( 'NONE', #3687, #6607, #6399, .T. ) ; +#3740 = CARTESIAN_POINT ( 'NONE', ( -3.407492542097295500E-016, 0.05000000000000000300, -0.8799999999999998900 ) ) ; +#3741 = AXIS2_PLACEMENT_3D ( 'NONE', #5362, #4161, #6277 ) ; +#3742 = ORIENTED_EDGE ( 'NONE', *, *, #4809, .T. ) ; +#3743 = VERTEX_POINT ( 'NONE', #3084 ) ; +#3744 = ADVANCED_FACE ( 'NONE', ( #6853 ), #1936, .T. ) ; +#3745 = AXIS2_PLACEMENT_3D ( 'NONE', #4739, #1268, #3496 ) ; +#3746 = EDGE_CURVE ( 'NONE', #514, #950, #2308, .T. ) ; +#3747 = EDGE_CURVE ( 'NONE', #342, #1887, #6668, .T. ) ; +#3748 = SURFACE_STYLE_USAGE ( .BOTH. , #395 ) ; +#3749 = EDGE_CURVE ( 'NONE', #1096, #6553, #3628, .T. ) ; +#3750 = FILL_AREA_STYLE ('',( #295 ) ) ; +#3751 = ORIENTED_EDGE ( 'NONE', *, *, #5669, .T. ) ; +#3752 = ORIENTED_EDGE ( 'NONE', *, *, #6043, .F. ) ; +#3753 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, 0.4999999999999997800 ) ) ; +#3754 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #425, 'distance_accuracy_value', 'NONE'); +#3755 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4365 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6392, #2929, #2989 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3756 = SURFACE_SIDE_STYLE ('',( #134 ) ) ; +#3757 = SURFACE_STYLE_USAGE ( .BOTH. , #2666 ) ; +#3758 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 2.940894014733149000, -1.075000000000000000 ) ) ; +#3759 = FILL_AREA_STYLE ('',( #5516 ) ) ; +#3760 = ORIENTED_EDGE ( 'NONE', *, *, #2652, .T. ) ; +#3761 = AXIS2_PLACEMENT_3D ( 'NONE', #1054, #3886, #3283 ) ; +#3762 = EDGE_LOOP ( 'NONE', ( #450, #532, #1187, #2952 ) ) ; +#3763 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3478 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7182, #5512, #6605 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3764 = SURFACE_SIDE_STYLE ('',( #2330 ) ) ; +#3765 = CLOSED_SHELL ( 'NONE', ( #4579, #692, #2734, #6120, #5383, #4997 ) ) ; +#3766 = EDGE_CURVE ( 'NONE', #3574, #3834, #3810, .T. ) ; +#3767 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3768 = ORIENTED_EDGE ( 'NONE', *, *, #4281, .F. ) ; +#3769 = ORIENTED_EDGE ( 'NONE', *, *, #222, .T. ) ; +#3770 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, -0.8800000000000003400 ) ) ; +#3771 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3772 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, 1.119999999999999700 ) ) ; +#3773 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3774 = ORIENTED_EDGE ( 'NONE', *, *, #2519, .F. ) ; +#3775 = VERTEX_POINT ( 'NONE', #1514 ) ; +#3776 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #399 ), #5420 ) ; +#3777 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, -0.8800000000000004500 ) ) ; +#3778 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3779 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3780 = LINE ( 'NONE', #1637, #3968 ) ; +#3781 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3782 = ADVANCED_FACE ( 'NONE', ( #1511 ), #4984, .T. ) ; +#3783 = VERTEX_POINT ( 'NONE', #7166 ) ; +#3784 = VERTEX_POINT ( 'NONE', #2634 ) ; +#3785 = SURFACE_STYLE_USAGE ( .BOTH. , #3764 ) ; +#3786 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.8800000000000003400 ) ) ; +#3787 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#3788 = EDGE_CURVE ( 'NONE', #6604, #5672, #2839, .T. ) ; +#3789 = EDGE_CURVE ( 'NONE', #4235, #3834, #3085, .T. ) ; +#3790 = EDGE_CURVE ( 'NONE', #940, #6166, #4617, .T. ) ; +#3791 = ORIENTED_EDGE ( 'NONE', *, *, #5379, .T. ) ; +#3792 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3793 = STYLED_ITEM ( 'NONE', ( #1245 ), #4255 ) ; +#3794 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3795 = ORIENTED_EDGE ( 'NONE', *, *, #3581, .T. ) ; +#3796 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3797 = VECTOR ( 'NONE', #3971, 1000.000000000000000 ) ; +#3798 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3799 = AXIS2_PLACEMENT_3D ( 'NONE', #723, #3505, #744 ) ; +#3800 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3801 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3802 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, 0.4999999999999997800 ) ) ; +#3803 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.8799999999999998900 ) ) ; +#3804 = DIRECTION ( 'NONE', ( 1.275531967630005700E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3805 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3806 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2475, 'distance_accuracy_value', 'NONE'); +#3807 = STYLED_ITEM ( 'NONE', ( #4250 ), #2179 ) ; +#3808 = ORIENTED_EDGE ( 'NONE', *, *, #4572, .F. ) ; +#3809 = VECTOR ( 'NONE', #404, 1000.000000000000000 ) ; +#3810 = LINE ( 'NONE', #5524, #1596 ) ; +#3811 = VECTOR ( 'NONE', #1838, 1000.000000000000000 ) ; +#3812 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3813 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#3814 = LINE ( 'NONE', #5413, #4176 ) ; +#3815 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3816 = ORIENTED_EDGE ( 'NONE', *, *, #5103, .T. ) ; +#3817 = LINE ( 'NONE', #6360, #4004 ) ; +#3818 = LINE ( 'NONE', #1301, #3726 ) ; +#3819 = VECTOR ( 'NONE', #6954, 1000.000000000000000 ) ; +#3820 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3821 = AXIS2_PLACEMENT_3D ( 'NONE', #2135, #6601, #5586 ) ; +#3822 = ADVANCED_FACE ( 'NONE', ( #6488 ), #4367, .F. ) ; +#3823 = PRESENTATION_STYLE_ASSIGNMENT (( #6548 ) ) ; +#3824 = ORIENTED_EDGE ( 'NONE', *, *, #3377, .T. ) ; +#3825 = VECTOR ( 'NONE', #4068, 1000.000000000000000 ) ; +#3826 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#3827 = VECTOR ( 'NONE', #7277, 1000.000000000000000 ) ; +#3828 = VECTOR ( 'NONE', #6214, 1000.000000000000000 ) ; +#3829 = ORIENTED_EDGE ( 'NONE', *, *, #6056, .T. ) ; +#3830 = PRESENTATION_STYLE_ASSIGNMENT (( #2463 ) ) ; +#3831 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3832 = CIRCLE ( 'NONE', #5293, 0.1199999999999998800 ) ; +#3833 = FILL_AREA_STYLE_COLOUR ( '', #4094 ) ; +#3834 = VERTEX_POINT ( 'NONE', #6102 ) ; +#3836 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#3835 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 0.05000000000000000300, 5.370710706562872900E-017 ) ) ; +#3837 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3838 = VERTEX_POINT ( 'NONE', #4344 ) ; +#3839 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#3840 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3841 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, 1.119999999999999400 ) ) ; +#3842 = FACE_OUTER_BOUND ( 'NONE', #5533, .T. ) ; +#3843 = ORIENTED_EDGE ( 'NONE', *, *, #6749, .T. ) ; +#3844 = EDGE_CURVE ( 'NONE', #599, #6535, #130, .T. ) ; +#3845 = ORIENTED_EDGE ( 'NONE', *, *, #1325, .T. ) ; +#3846 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.0000000000000000000, -1.075000000000000000 ) ) ; +#3847 = VECTOR ( 'NONE', #430, 1000.000000000000000 ) ; +#3848 = SURFACE_STYLE_USAGE ( .BOTH. , #3253 ) ; +#3849 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.05000000000000012800, 1.074999999999999700 ) ) ; +#3850 = AXIS2_PLACEMENT_3D ( 'NONE', #392, #2651, #3815 ) ; +#3851 = EDGE_LOOP ( 'NONE', ( #6706, #3545, #4059, #1396 ) ) ; +#3852 = EDGE_LOOP ( 'NONE', ( #108, #1082, #466, #6007 ) ) ; +#3853 = STYLED_ITEM ( 'NONE', ( #829 ), #5142 ) ; +#3854 = EDGE_CURVE ( 'NONE', #3389, #2083, #1868, .T. ) ; +#3855 = PLANE ( 'NONE', #6253 ) ; +#3856 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3778, 'distance_accuracy_value', 'NONE'); +#3857 = ORIENTED_EDGE ( 'NONE', *, *, #1997, .F. ) ; +#3858 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3859 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2985 ) ) ; +#3861 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3860 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3862 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3863 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, 1.119999999999999700 ) ) ; +#3864 = ADVANCED_FACE ( 'NONE', ( #2303 ), #2703, .F. ) ; +#3865 = EDGE_LOOP ( 'NONE', ( #1173, #2175, #5635, #6420 ) ) ; +#3866 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.2000000000000000100, -1.074999999999999700 ) ) ; +#3867 = LINE ( 'NONE', #5607, #6708 ) ; +#3868 = AXIS2_PLACEMENT_3D ( 'NONE', #1062, #1110, #3415 ) ; +#3869 = ORIENTED_EDGE ( 'NONE', *, *, #6720, .T. ) ; +#3870 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3871 = VERTEX_POINT ( 'NONE', #4399 ) ; +#3872 = LINE ( 'NONE', #3065, #2272 ) ; +#3873 = ORIENTED_EDGE ( 'NONE', *, *, #2614, .T. ) ; +#3874 = VERTEX_POINT ( 'NONE', #504 ) ; +#3875 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3876 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3877 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3878 = ORIENTED_EDGE ( 'NONE', *, *, #4837, .T. ) ; +#3879 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3880 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#3881 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, 0.1199999999999996600 ) ) ; +#3882 = ORIENTED_EDGE ( 'NONE', *, *, #271, .T. ) ; +#3883 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3884 = PLANE ( 'NONE', #6293 ) ; +#3885 = AXIS2_PLACEMENT_3D ( 'NONE', #5464, #7054, #5407 ) ; +#3886 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3887 = VERTEX_POINT ( 'NONE', #3849 ) ; +#3888 = LINE ( 'NONE', #1098, #6646 ) ; +#3889 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3890 = LINE ( 'NONE', #4773, #3169 ) ; +#3891 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, 1.119999999999999700 ) ) ; +#3892 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3893 = EDGE_CURVE ( 'NONE', #3664, #3583, #6321, .T. ) ; +#3894 = EDGE_CURVE ( 'NONE', #6256, #3129, #3438, .T. ) ; +#3895 = EDGE_CURVE ( 'NONE', #7168, #5912, #3177, .T. ) ; +#3896 = ADVANCED_FACE ( 'NONE', ( #478 ), #6055, .T. ) ; +#3897 = VECTOR ( 'NONE', #6817, 1000.000000000000000 ) ; +#3898 = AXIS2_PLACEMENT_3D ( 'NONE', #6860, #1172, #4594 ) ; +#3899 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3900 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3901 = ORIENTED_EDGE ( 'NONE', *, *, #6054, .F. ) ; +#3902 = LINE ( 'NONE', #2107, #2387 ) ; +#3903 = LINE ( 'NONE', #4163, #3819 ) ; +#3904 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#3905 = SURFACE_SIDE_STYLE ('',( #7272 ) ) ; +#3906 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#3907 = SURFACE_SIDE_STYLE ('',( #313 ) ) ; +#3908 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #40 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3946, #2298, #3385 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3909 = EDGE_CURVE ( 'NONE', #7113, #1578, #5888, .T. ) ; +#3910 = ORIENTED_EDGE ( 'NONE', *, *, #5522, .T. ) ; +#3911 = PLANE ( 'NONE', #6677 ) ; +#3912 = LINE ( 'NONE', #4659, #6764 ) ; +#3913 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3914 = VECTOR ( 'NONE', #6796, 1000.000000000000000 ) ; +#3915 = DIRECTION ( 'NONE', ( 3.872150616019654900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3916 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -0.8800000000000004500 ) ) ; +#3917 = FILL_AREA_STYLE_COLOUR ( '', #3883 ) ; +#3918 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3919 = CIRCLE ( 'NONE', #4392, 0.1199999999999998800 ) ; +#3920 = EDGE_LOOP ( 'NONE', ( #1037, #689, #6871, #4481 ) ) ; +#3921 = PRESENTATION_STYLE_ASSIGNMENT (( #2807 ) ) ; +#3922 = LINE ( 'NONE', #4457, #1625 ) ; +#3923 = VERTEX_POINT ( 'NONE', #1648 ) ; +#3924 = STYLED_ITEM ( 'NONE', ( #1242 ), #2039 ) ; +#3925 = FACE_OUTER_BOUND ( 'NONE', #1599, .T. ) ; +#3926 = STYLED_ITEM ( 'NONE', ( #2263 ), #406 ) ; +#3927 = VECTOR ( 'NONE', #6612, 1000.000000000000000 ) ; +#3928 = CARTESIAN_POINT ( 'NONE', ( -0.1000000000000000500, 0.0000000000000000000, -1.075000000000000200 ) ) ; +#3929 = ORIENTED_EDGE ( 'NONE', *, *, #387, .T. ) ; +#3930 = VECTOR ( 'NONE', #797, 1000.000000000000000 ) ; +#3931 = ORIENTED_EDGE ( 'NONE', *, *, #7173, .F. ) ; +#3932 = VECTOR ( 'NONE', #595, 1000.000000000000000 ) ; +#3933 = FILL_AREA_STYLE_COLOUR ( '', #3877 ) ; +#3934 = FILL_AREA_STYLE_COLOUR ( '', #4987 ) ; +#3935 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3936 = ORIENTED_EDGE ( 'NONE', *, *, #1255, .F. ) ; +#3937 = PLANE ( 'NONE', #326 ) ; +#3938 = EDGE_LOOP ( 'NONE', ( #1388, #2413, #2465, #1982 ) ) ; +#3939 = ADVANCED_FACE ( 'NONE', ( #4711 ), #3330, .F. ) ; +#3940 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3941 = EDGE_CURVE ( 'NONE', #3222, #7015, #4996, .T. ) ; +#3942 = EDGE_CURVE ( 'NONE', #1773, #2899, #2127, .T. ) ; +#3943 = EDGE_CURVE ( 'NONE', #1096, #4596, #4089, .T. ) ; +#3944 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3945 = EDGE_LOOP ( 'NONE', ( #6542, #5842, #593, #6774 ) ) ; +#3946 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3947 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.2000000000000000100, -1.074999999999999700 ) ) ; +#3948 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3949 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3950 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3164 ), #5485 ) ; +#3951 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4415, 'distance_accuracy_value', 'NONE'); +#3952 = ORIENTED_EDGE ( 'NONE', *, *, #547, .F. ) ; +#3953 = AXIS2_PLACEMENT_3D ( 'NONE', #3141, #368, #1400 ) ; +#3954 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3955 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#3956 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.8800000000000003400 ) ) ; +#3957 = VERTEX_POINT ( 'NONE', #3307 ) ; +#3958 = EDGE_LOOP ( 'NONE', ( #196, #6782, #3134, #6619 ) ) ; +#3959 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#3960 = FILL_AREA_STYLE_COLOUR ( '', #4440 ) ; +#3961 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#3962 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3963 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#3964 = EDGE_LOOP ( 'NONE', ( #3216, #5341, #560, #6186 ) ) ; +#3965 = ORIENTED_EDGE ( 'NONE', *, *, #3942, .F. ) ; +#3966 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3967 = LINE ( 'NONE', #3772, #6896 ) ; +#3968 = VECTOR ( 'NONE', #5588, 1000.000000000000000 ) ; +#3969 = AXIS2_PLACEMENT_3D ( 'NONE', #4890, #1379, #2001 ) ; +#3970 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3971 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3972 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3973 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005700E-016 ) ) ; +#3974 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3975 = ORIENTED_EDGE ( 'NONE', *, *, #4761, .F. ) ; +#3976 = ORIENTED_EDGE ( 'NONE', *, *, #5199, .F. ) ; +#3977 = ADVANCED_FACE ( 'NONE', ( #5618 ), #5601, .F. ) ; +#3978 = FILL_AREA_STYLE ('',( #5161 ) ) ; +#3979 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.1199999999999996600 ) ) ; +#3980 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, 0.3799999999999998900 ) ) ; +#3981 = SURFACE_STYLE_USAGE ( .BOTH. , #4462 ) ; +#3982 = SURFACE_SIDE_STYLE ('',( #3262 ) ) ; +#3983 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 1.499999999999999600 ) ) ; +#3984 = EDGE_CURVE ( 'NONE', #1366, #1626, #4628, .T. ) ; +#3985 = SURFACE_SIDE_STYLE ('',( #4632 ) ) ; +#3986 = ORIENTED_EDGE ( 'NONE', *, *, #1666, .T. ) ; +#3987 = CYLINDRICAL_SURFACE ( 'NONE', #2010, 0.1199999999999998800 ) ; +#3988 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, 0.1199999999999996600 ) ) ; +#3989 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, -0.3800000000000004500 ) ) ; +#3990 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, -1.000000000000000200 ) ) ; +#3991 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 0.3799999999999998900 ) ) ; +#3992 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3993 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000400, 0.05000000000000000300, 1.500000000000000000 ) ) ; +#3994 = VERTEX_POINT ( 'NONE', #4420 ) ; +#3995 = LINE ( 'NONE', #5660, #7267 ) ; +#3996 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #223 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7127, #4282, #4328 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#3997 = EDGE_CURVE ( 'NONE', #5817, #525, #2670, .T. ) ; +#3998 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#3999 = EDGE_CURVE ( 'NONE', #1397, #1927, #4900, .T. ) ; +#4000 = EDGE_CURVE ( 'NONE', #6367, #877, #7276, .T. ) ; +#4001 = SURFACE_STYLE_FILL_AREA ( #3050 ) ; +#4002 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5708 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #756, #1897, #1300 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4003 = ORIENTED_EDGE ( 'NONE', *, *, #3404, .T. ) ; +#4004 = VECTOR ( 'NONE', #3497, 1000.000000000000000 ) ; +#4005 = LINE ( 'NONE', #2432, #3532 ) ; +#4006 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4007 = FACE_OUTER_BOUND ( 'NONE', #1731, .T. ) ; +#4008 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#4009 = VECTOR ( 'NONE', #3428, 1000.000000000000000 ) ; +#4010 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4245 ) ) ; +#4011 = VERTEX_POINT ( 'NONE', #5801 ) ; +#4012 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, 0.1199999999999996600 ) ) ; +#4013 = VECTOR ( 'NONE', #1860, 1000.000000000000000 ) ; +#4014 = VECTOR ( 'NONE', #164, 1000.000000000000000 ) ; +#4015 = ORIENTED_EDGE ( 'NONE', *, *, #231, .T. ) ; +#4016 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4017 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5252 ) ) ; +#4018 = ADVANCED_FACE ( 'NONE', ( #3276 ), #5028, .T. ) ; +#4019 = EDGE_CURVE ( 'NONE', #1273, #3775, #5079, .T. ) ; +#4020 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000000000, 0.0000000000000000000, 1.075000000000000000 ) ) ; +#4021 = LINE ( 'NONE', #2324, #2501 ) ; +#4022 = VECTOR ( 'NONE', #6127, 1000.000000000000000 ) ; +#4023 = VERTEX_POINT ( 'NONE', #6273 ) ; +#4024 = ORIENTED_EDGE ( 'NONE', *, *, #2654, .T. ) ; +#4025 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.8800000000000003400 ) ) ; +#4026 = SURFACE_STYLE_FILL_AREA ( #2916 ) ; +#4027 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4028 = CIRCLE ( 'NONE', #2861, 0.1199999999999998800 ) ; +#4029 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5562 ) ) ; +#4030 = ORIENTED_EDGE ( 'NONE', *, *, #2037, .F. ) ; +#4031 = ORIENTED_EDGE ( 'NONE', *, *, #507, .F. ) ; +#4032 = LINE ( 'NONE', #68, #2514 ) ; +#4033 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, -0.3800000000000003400 ) ) ; +#4034 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, 0.3799999999999998900 ) ) ; +#4035 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 0.6199999999999995500 ) ) ; +#4036 = EDGE_LOOP ( 'NONE', ( #2511, #1973, #1154, #2689 ) ) ; +#4037 = ORIENTED_EDGE ( 'NONE', *, *, #4279, .T. ) ; +#4038 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, -0.3800000000000004500 ) ) ; +#4039 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2736 ), #6801 ) ; +#4040 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4041 = ORIENTED_EDGE ( 'NONE', *, *, #6797, .F. ) ; +#4042 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4043 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1371 ) ) ; +#4044 = EDGE_CURVE ( 'NONE', #3323, #5558, #4265, .T. ) ; +#4045 = EDGE_CURVE ( 'NONE', #6374, #4596, #2209, .T. ) ; +#4046 = EDGE_CURVE ( 'NONE', #5854, #7019, #569, .T. ) ; +#4047 = PLANE ( 'NONE', #1112 ) ; +#4048 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.445602896647339200E-016 ) ) ; +#4049 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4070, 'distance_accuracy_value', 'NONE'); +#4050 = EDGE_LOOP ( 'NONE', ( #1460, #6944, #573, #33 ) ) ; +#4051 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1627 ) ) ; +#4052 = ADVANCED_FACE ( 'NONE', ( #4186 ), #6916, .T. ) ; +#4053 = ORIENTED_EDGE ( 'NONE', *, *, #3895, .T. ) ; +#4054 = AXIS2_PLACEMENT_3D ( 'NONE', #5081, #1134, #1651 ) ; +#4055 = ORIENTED_EDGE ( 'NONE', *, *, #1017, .F. ) ; +#4056 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4057 = AXIS2_PLACEMENT_3D ( 'NONE', #2185, #4850, #1430 ) ; +#4058 = EDGE_CURVE ( 'NONE', #6375, #2386, #306, .T. ) ; +#4059 = ORIENTED_EDGE ( 'NONE', *, *, #506, .T. ) ; +#4060 = ORIENTED_EDGE ( 'NONE', *, *, #754, .F. ) ; +#4061 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4062 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, -1.120000000000000100 ) ) ; +#4063 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4064 = SURFACE_STYLE_USAGE ( .BOTH. , #5795 ) ; +#4065 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3673 ), #899 ) ; +#4066 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4067 = ORIENTED_EDGE ( 'NONE', *, *, #6427, .F. ) ; +#4068 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4069 = FACE_OUTER_BOUND ( 'NONE', #4232, .T. ) ; +#4070 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4071 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4072 = AXIS2_PLACEMENT_3D ( 'NONE', #5336, #7059, #804 ) ; +#4073 = LINE ( 'NONE', #1149, #7087 ) ; +#4074 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, -2.168404344971008900E-016 ) ) ; +#4075 = FILL_AREA_STYLE ('',( #1252 ) ) ; +#4076 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, -0.0000000000000000000, -1.500000000000000000 ) ) ; +#4077 = FACE_OUTER_BOUND ( 'NONE', #2251, .T. ) ; +#4078 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #482, 'distance_accuracy_value', 'NONE'); +#4079 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4080 = EDGE_LOOP ( 'NONE', ( #5518, #5129, #4396, #778, #2757, #3209, #1865, #3600, #7191, #5812, #2717, #3267, #1480, #6173, #7130, #6465, #7161, #5027, #4370, #3304, #3230, #493, #7291, #3751, #3593, #7213, #2353, #3686, #760, #961, #7297, #5212, #1551, #4523, #6030, #4766, #7052, #1197 ) ) ; +#4081 = EDGE_CURVE ( 'NONE', #4596, #602, #143, .T. ) ; +#4082 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 0.8799999999999998900 ) ) ; +#4083 = MANIFOLD_SOLID_BREP ( 'LPattern4[3]', #596 ) ; +#4084 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#4085 = SURFACE_STYLE_FILL_AREA ( #4292 ) ; +#4086 = FACE_OUTER_BOUND ( 'NONE', #2726, .T. ) ; +#4087 = VECTOR ( 'NONE', #2456, 1000.000000000000000 ) ; +#4088 = CIRCLE ( 'NONE', #5008, 0.1199999999999998800 ) ; +#4089 = LINE ( 'NONE', #5049, #4450 ) ; +#4090 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4091 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4092 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.04999999999999969700, 1.500000000000000000 ) ) ; +#4093 = PLANE ( 'NONE', #6977 ) ; +#4094 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4095 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6468 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5818, #5193, #5793 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4096 = VERTEX_POINT ( 'NONE', #2897 ) ; +#4097 = CYLINDRICAL_SURFACE ( 'NONE', #1267, 0.1199999999999998800 ) ; +#4098 = LINE ( 'NONE', #5328, #2399 ) ; +#4099 = VECTOR ( 'NONE', #5098, 1000.000000000000000 ) ; +#4100 = LINE ( 'NONE', #7275, #1337 ) ; +#4101 = PLANE ( 'NONE', #2282 ) ; +#4102 = LINE ( 'NONE', #1148, #6153 ) ; +#4103 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4105 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 2.940894014733149000, -1.075000000000000000 ) ) ; +#4104 = VECTOR ( 'NONE', #4476, 1000.000000000000000 ) ; +#4106 = VERTEX_POINT ( 'NONE', #1777 ) ; +#4107 = LINE ( 'NONE', #6905, #5092 ) ; +#4108 = LINE ( 'NONE', #1844, #6773 ) ; +#4109 = VERTEX_POINT ( 'NONE', #6362 ) ; +#4110 = LINE ( 'NONE', #429, #238 ) ; +#4111 = LINE ( 'NONE', #841, #5264 ) ; +#4112 = PLANE ( 'NONE', #6152 ) ; +#4113 = ORIENTED_EDGE ( 'NONE', *, *, #5731, .F. ) ; +#4114 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#4115 = VECTOR ( 'NONE', #2411, 1000.000000000000000 ) ; +#4116 = ORIENTED_EDGE ( 'NONE', *, *, #1284, .F. ) ; +#4117 = STYLED_ITEM ( 'NONE', ( #7105 ), #985 ) ; +#4118 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, 0.4999999999999997800 ) ) ; +#4119 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#4120 = ORIENTED_EDGE ( 'NONE', *, *, #6240, .T. ) ; +#4121 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#4122 = VERTEX_POINT ( 'NONE', #5127 ) ; +#4123 = DIRECTION ( 'NONE', ( -1.275531967630005200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4124 = DIRECTION ( 'NONE', ( -3.872150616019654900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4125 = ORIENTED_EDGE ( 'NONE', *, *, #86, .F. ) ; +#4126 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4127 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4128 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4129 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4130 = VERTEX_POINT ( 'NONE', #3499 ) ; +#4131 = EDGE_CURVE ( 'NONE', #4011, #7304, #6140, .T. ) ; +#4132 = VERTEX_POINT ( 'NONE', #2327 ) ; +#4133 = AXIS2_PLACEMENT_3D ( 'NONE', #1320, #1876, #2976 ) ; +#4134 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4135 = ORIENTED_EDGE ( 'NONE', *, *, #2460, .F. ) ; +#4136 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, -0.0000000000000000000, -1.074999999999999700 ) ) ; +#4137 = EDGE_LOOP ( 'NONE', ( #3791, #6499, #2602, #2160 ) ) ; +#4138 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4139 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #173 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5469, #4992, #4971 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4140 = EDGE_CURVE ( 'NONE', #3784, #3033, #4443, .T. ) ; +#4141 = EDGE_CURVE ( 'NONE', #3655, #500, #3618, .T. ) ; +#4142 = EDGE_CURVE ( 'NONE', #867, #940, #5166, .T. ) ; +#4143 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#4144 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4145 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1141, 'distance_accuracy_value', 'NONE'); +#4146 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, 0.6199999999999995500 ) ) ; +#4147 = DIRECTION ( 'NONE', ( 3.872150616019654400E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4148 = EDGE_LOOP ( 'NONE', ( #6688, #2024, #2436, #5222 ) ) ; +#4149 = EDGE_LOOP ( 'NONE', ( #4688, #5905, #7067, #237 ) ) ; +#4150 = VECTOR ( 'NONE', #3408, 1000.000000000000000 ) ; +#4151 = VECTOR ( 'NONE', #4291, 1000.000000000000000 ) ; +#4152 = ORIENTED_EDGE ( 'NONE', *, *, #4142, .T. ) ; +#4153 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.04999999999999969700, -1.500000000000000000 ) ) ; +#4154 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4155 = FILL_AREA_STYLE ('',( #4697 ) ) ; +#4156 = ORIENTED_EDGE ( 'NONE', *, *, #369, .T. ) ; +#4157 = VECTOR ( 'NONE', #4924, 1000.000000000000000 ) ; +#4158 = STYLED_ITEM ( 'NONE', ( #372 ), #2542 ) ; +#4159 = EDGE_CURVE ( 'NONE', #5834, #2064, #4618, .T. ) ; +#4160 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4161 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4162 = ORIENTED_EDGE ( 'NONE', *, *, #7172, .F. ) ; +#4163 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#4164 = STYLED_ITEM ( 'NONE', ( #297 ), #2076 ) ; +#4165 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4166 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, -0.0000000000000000000, -1.500000000000000000 ) ) ; +#4167 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#4168 = ORIENTED_EDGE ( 'NONE', *, *, #6828, .T. ) ; +#4169 = FACE_OUTER_BOUND ( 'NONE', #6996, .T. ) ; +#4170 = VECTOR ( 'NONE', #2556, 1000.000000000000000 ) ; +#4171 = SURFACE_SIDE_STYLE ('',( #6307 ) ) ; +#4172 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4173 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654900E-016 ) ) ; +#4174 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4175 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2054, 'distance_accuracy_value', 'NONE'); +#4176 = VECTOR ( 'NONE', #2547, 1000.000000000000000 ) ; +#4177 = EDGE_LOOP ( 'NONE', ( #5374, #1226 ) ) ; +#4178 = CIRCLE ( 'NONE', #2424, 0.1199999999999998800 ) ; +#4179 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -1.120000000000000100 ) ) ; +#4180 = EDGE_CURVE ( 'NONE', #5157, #5499, #4538, .T. ) ; +#4181 = FACE_OUTER_BOUND ( 'NONE', #4050, .T. ) ; +#4182 = EDGE_CURVE ( 'NONE', #6948, #6357, #299, .T. ) ; +#4183 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4184 = EDGE_CURVE ( 'NONE', #1764, #5834, #1327, .T. ) ; +#4185 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.1199999999999996600 ) ) ; +#4186 = FACE_OUTER_BOUND ( 'NONE', #5898, .T. ) ; +#4187 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#4188 = LINE ( 'NONE', #1950, #6591 ) ; +#4189 = ADVANCED_FACE ( 'NONE', ( #132 ), #2962, .F. ) ; +#4190 = STYLED_ITEM ( 'NONE', ( #6920 ), #4393 ) ; +#4191 = ORIENTED_EDGE ( 'NONE', *, *, #5327, .F. ) ; +#4192 = LINE ( 'NONE', #1836, #312 ) ; +#4193 = ORIENTED_EDGE ( 'NONE', *, *, #1235, .T. ) ; +#4194 = PLANE ( 'NONE', #1012 ) ; +#4195 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4196 = FILL_AREA_STYLE_COLOUR ( '', #1346 ) ; +#4197 = SURFACE_SIDE_STYLE ('',( #6077 ) ) ; +#4198 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4199 = LINE ( 'NONE', #893, #673 ) ; +#4200 = ORIENTED_EDGE ( 'NONE', *, *, #3941, .F. ) ; +#4201 = FACE_OUTER_BOUND ( 'NONE', #1896, .T. ) ; +#4202 = VERTEX_POINT ( 'NONE', #6387 ) ; +#4203 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4204 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.0000000000000000000, 1.075000000000000000 ) ) ; +#4205 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#4206 = ORIENTED_EDGE ( 'NONE', *, *, #7218, .T. ) ; +#4207 = VERTEX_POINT ( 'NONE', #5339 ) ; +#4208 = LINE ( 'NONE', #5040, #1193 ) ; +#4209 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4210 = ORIENTED_EDGE ( 'NONE', *, *, #2270, .F. ) ; +#4211 = ORIENTED_EDGE ( 'NONE', *, *, #1236, .F. ) ; +#4212 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4214 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#4213 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4215 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#4216 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#4217 = ORIENTED_EDGE ( 'NONE', *, *, #4665, .F. ) ; +#4218 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4219 = VERTEX_POINT ( 'NONE', #3035 ) ; +#4220 = DIRECTION ( 'NONE', ( -3.872150616019654900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4221 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 2.940894014733149000, -1.075000000000000200 ) ) ; +#4222 = ADVANCED_FACE ( 'NONE', ( #5521 ), #1908, .T. ) ; +#4223 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4224 = EDGE_CURVE ( 'NONE', #6547, #6149, #1162, .T. ) ; +#4225 = VERTEX_POINT ( 'NONE', #3624 ) ; +#4226 = VERTEX_POINT ( 'NONE', #5869 ) ; +#4227 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3446 ) ) ; +#4228 = LINE ( 'NONE', #1476, #966 ) ; +#4229 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4230 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.3799999999999998900 ) ) ; +#4231 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 1.499999999999999600 ) ) ; +#4232 = EDGE_LOOP ( 'NONE', ( #4055, #748, #5202, #4200 ) ) ; +#4233 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3571 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6929, #3515, #3467 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4234 = EDGE_CURVE ( 'NONE', #1529, #2063, #4803, .T. ) ; +#4235 = VERTEX_POINT ( 'NONE', #260 ) ; +#4236 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4237 = ORIENTED_EDGE ( 'NONE', *, *, #3909, .T. ) ; +#4238 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, 0.1199999999999995500 ) ) ; +#4239 = FACE_OUTER_BOUND ( 'NONE', #5988, .T. ) ; +#4240 = SURFACE_STYLE_USAGE ( .BOTH. , #303 ) ; +#4241 = AXIS2_PLACEMENT_3D ( 'NONE', #155, #2377, #5880 ) ; +#4242 = ADVANCED_FACE ( 'NONE', ( #5792 ), #4093, .F. ) ; +#4243 = ORIENTED_EDGE ( 'NONE', *, *, #2172, .F. ) ; +#4244 = FACE_OUTER_BOUND ( 'NONE', #2773, .T. ) ; +#4245 = STYLED_ITEM ( 'NONE', ( #2149 ), #6652 ) ; +#4246 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654900E-016 ) ) ; +#4247 = FILL_AREA_STYLE ('',( #3604 ) ) ; +#4248 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4249 = AXIS2_PLACEMENT_3D ( 'NONE', #3378, #3966, #89 ) ; +#4250 = PRESENTATION_STYLE_ASSIGNMENT (( #4494 ) ) ; +#4251 = VECTOR ( 'NONE', #1249, 1000.000000000000000 ) ; +#4252 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4253 = SURFACE_STYLE_USAGE ( .BOTH. , #850 ) ; +#4254 = ORIENTED_EDGE ( 'NONE', *, *, #7, .F. ) ; +#4255 = ADVANCED_FACE ( 'NONE', ( #7001 ), #4715, .F. ) ; +#4256 = FILL_AREA_STYLE ('',( #715 ) ) ; +#4257 = SURFACE_STYLE_FILL_AREA ( #1271 ) ; +#4259 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4258 = SURFACE_STYLE_USAGE ( .BOTH. , #6503 ) ; +#4260 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, -2.168404344971008900E-016 ) ) ; +#4261 = SURFACE_SIDE_STYLE ('',( #5260 ) ) ; +#4262 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4263 = PRESENTATION_STYLE_ASSIGNMENT (( #3748 ) ) ; +#4264 = LINE ( 'NONE', #6894, #1166 ) ; +#4265 = LINE ( 'NONE', #2720, #2486 ) ; +#4266 = AXIS2_PLACEMENT_3D ( 'NONE', #5037, #6042, #2178 ) ; +#4267 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3136, 'distance_accuracy_value', 'NONE'); +#4268 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#4269 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4270 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4271 = VERTEX_POINT ( 'NONE', #5237 ) ; +#4272 = LINE ( 'NONE', #5844, #1079 ) ; +#4273 = CIRCLE ( 'NONE', #5652, 0.1499999999999999700 ) ; +#4274 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3252 ) ) ; +#4275 = FACE_OUTER_BOUND ( 'NONE', #4878, .T. ) ; +#4276 = ADVANCED_FACE ( 'NONE', ( #3524 ), #380, .T. ) ; +#4277 = FACE_OUTER_BOUND ( 'NONE', #3663, .T. ) ; +#4278 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1371 ), #4421 ) ; +#4279 = EDGE_CURVE ( 'NONE', #6875, #2314, #2995, .T. ) ; +#4280 = EDGE_LOOP ( 'NONE', ( #2545, #4445, #361, #2310 ) ) ; +#4281 = EDGE_CURVE ( 'NONE', #1353, #2888, #5873, .T. ) ; +#4282 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4283 = EDGE_CURVE ( 'NONE', #2261, #1823, #6223, .T. ) ; +#4284 = LINE ( 'NONE', #1080, #1004 ) ; +#4285 = ORIENTED_EDGE ( 'NONE', *, *, #184, .F. ) ; +#4286 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 2.940894014733149000, -1.075000000000000000 ) ) ; +#4287 = LINE ( 'NONE', #3623, #6865 ) ; +#4288 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3793 ), #4710 ) ; +#4289 = ORIENTED_EDGE ( 'NONE', *, *, #1016, .F. ) ; +#4291 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#4290 = PLANE ( 'NONE', #5594 ) ; +#4292 = FILL_AREA_STYLE ('',( #1539 ) ) ; +#4293 = LINE ( 'NONE', #2360, #592 ) ; +#4294 = ORIENTED_EDGE ( 'NONE', *, *, #4378, .T. ) ; +#4295 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4296 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4297 = PRESENTATION_STYLE_ASSIGNMENT (( #6261 ) ) ; +#4298 = STYLED_ITEM ( 'NONE', ( #2293 ), #6041 ) ; +#4299 = EDGE_LOOP ( 'NONE', ( #5649, #6687, #280, #3287 ) ) ; +#4300 = EDGE_LOOP ( 'NONE', ( #3869, #2080, #4003, #3735 ) ) ; +#4301 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4302 = ADVANCED_FACE ( 'NONE', ( #2035 ), #5945, .T. ) ; +#4303 = DIRECTION ( 'NONE', ( -3.872150616019654400E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4304 = ORIENTED_EDGE ( 'NONE', *, *, #3278, .F. ) ; +#4305 = ORIENTED_EDGE ( 'NONE', *, *, #6828, .F. ) ; +#4306 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4307 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5562 ), #4403 ) ; +#4308 = VERTEX_POINT ( 'NONE', #4877 ) ; +#4309 = PLANE ( 'NONE', #3969 ) ; +#4310 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6647, 'distance_accuracy_value', 'NONE'); +#4311 = AXIS2_PLACEMENT_3D ( 'NONE', #5269, #1312, #1250 ) ; +#4312 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4314 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 0.8799999999999998900 ) ) ; +#4313 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4315 = SURFACE_STYLE_USAGE ( .BOTH. , #1000 ) ; +#4316 = ORIENTED_EDGE ( 'NONE', *, *, #5858, .F. ) ; +#4317 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.6697073557013986100, 1.074999999999999700 ) ) ; +#4318 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4319 = ADVANCED_FACE ( 'NONE', ( #2468 ), #6579, .F. ) ; +#4320 = VERTEX_POINT ( 'NONE', #7111 ) ; +#4321 = ORIENTED_EDGE ( 'NONE', *, *, #4509, .T. ) ; +#4322 = ORIENTED_EDGE ( 'NONE', *, *, #4081, .F. ) ; +#4323 = EDGE_CURVE ( 'NONE', #4791, #5179, #4702, .T. ) ; +#4324 = EDGE_CURVE ( 'NONE', #2075, #4417, #46, .T. ) ; +#4325 = SURFACE_STYLE_FILL_AREA ( #3750 ) ; +#4326 = EDGE_CURVE ( 'NONE', #355, #6198, #5697, .T. ) ; +#4327 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6707 ) ) ; +#4328 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4329 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, -0.6200000000000001100 ) ) ; +#4330 = EDGE_LOOP ( 'NONE', ( #3396, #1559, #4568, #3634 ) ) ; +#4331 = LINE ( 'NONE', #4221, #4512 ) ; +#4332 = ADVANCED_FACE ( 'NONE', ( #2384 ), #6001, .T. ) ; +#4333 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 0.3799999999999998900 ) ) ; +#4334 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7133 ), #929 ) ; +#4335 = FILL_AREA_STYLE_COLOUR ( '', #4531 ) ; +#4337 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4336 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005700E-016 ) ) ; +#4338 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 1.119999999999999400 ) ) ; +#4339 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4340 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4341 = ORIENTED_EDGE ( 'NONE', *, *, #1203, .F. ) ; +#4342 = SURFACE_SIDE_STYLE ('',( #5234 ) ) ; +#4343 = LINE ( 'NONE', #659, #2993 ) ; +#4344 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.05000000000000012800, 1.074999999999999700 ) ) ; +#4345 = VECTOR ( 'NONE', #4853, 1000.000000000000000 ) ; +#4346 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3673 ) ) ; +#4347 = ADVANCED_FACE ( 'NONE', ( #3436 ), #6692, .T. ) ; +#4348 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4349 = SURFACE_STYLE_USAGE ( .BOTH. , #2657 ) ; +#4350 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#4351 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4352 = EDGE_LOOP ( 'NONE', ( #3107, #4743, #1988, #2748 ) ) ; +#4353 = VECTOR ( 'NONE', #5914, 1000.000000000000000 ) ; +#4354 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4356 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -0.6200000000000001100 ) ) ; +#4355 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4357 = VECTOR ( 'NONE', #7255, 1000.000000000000000 ) ; +#4358 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, 0.3799999999999998900 ) ) ; +#4359 = PLANE ( 'NONE', #2041 ) ; +#4360 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4027, 'distance_accuracy_value', 'NONE'); +#4361 = ORIENTED_EDGE ( 'NONE', *, *, #2036, .F. ) ; +#4362 = FACE_OUTER_BOUND ( 'NONE', #2963, .T. ) ; +#4363 = VERTEX_POINT ( 'NONE', #2097 ) ; +#4364 = EDGE_CURVE ( 'NONE', #7125, #2235, #6482, .T. ) ; +#4365 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6392, 'distance_accuracy_value', 'NONE'); +#4366 = FILL_AREA_STYLE_COLOUR ( '', #161 ) ; +#4367 = PLANE ( 'NONE', #3850 ) ; +#4368 = CIRCLE ( 'NONE', #16, 0.1199999999999998800 ) ; +#4369 = AXIS2_PLACEMENT_3D ( 'NONE', #4205, #4223, #310 ) ; +#4370 = ORIENTED_EDGE ( 'NONE', *, *, #6005, .T. ) ; +#4371 = LINE ( 'NONE', #4701, #3930 ) ; +#4372 = VERTEX_POINT ( 'NONE', #3863 ) ; +#4373 = SURFACE_STYLE_FILL_AREA ( #4667 ) ; +#4374 = AXIS2_PLACEMENT_3D ( 'NONE', #4488, #1662, #2211 ) ; +#4375 = EDGE_CURVE ( 'NONE', #2780, #5689, #4892, .T. ) ; +#4376 = EDGE_CURVE ( 'NONE', #4122, #5025, #469, .T. ) ; +#4377 = CARTESIAN_POINT ( 'NONE', ( 4.646580739223590900E-017, 0.05000000000000000300, 0.1200000000000001300 ) ) ; +#4378 = EDGE_CURVE ( 'NONE', #6610, #2685, #646, .T. ) ; +#4379 = ORIENTED_EDGE ( 'NONE', *, *, #892, .T. ) ; +#4380 = ORIENTED_EDGE ( 'NONE', *, *, #7, .T. ) ; +#4381 = VECTOR ( 'NONE', #5095, 1000.000000000000000 ) ; +#4382 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.3799999999999998900 ) ) ; +#4383 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4145 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1141, #1661, #2264 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4384 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.2000000000000000100, 1.074999999999999700 ) ) ; +#4386 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.0000000000000000000, 1.075000000000000000 ) ) ; +#4385 = PLANE ( 'NONE', #6585 ) ; +#4387 = PLANE ( 'NONE', #1131 ) ; +#4388 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#4389 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#4390 = ORIENTED_EDGE ( 'NONE', *, *, #5155, .T. ) ; +#4391 = ORIENTED_EDGE ( 'NONE', *, *, #2449, .T. ) ; +#4392 = AXIS2_PLACEMENT_3D ( 'NONE', #6726, #4981, #5005 ) ; +#4393 = ADVANCED_FACE ( 'NONE', ( #6396 ), #3275, .T. ) ; +#4394 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2867 ) ) ; +#4395 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4396 = ORIENTED_EDGE ( 'NONE', *, *, #3403, .T. ) ; +#4397 = EDGE_CURVE ( 'NONE', #83, #1216, #1632, .T. ) ; +#4398 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 0.3799999999999998900 ) ) ; +#4399 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, -0.1200000000000000900 ) ) ; +#4400 = ORIENTED_EDGE ( 'NONE', *, *, #5577, .F. ) ; +#4401 = ORIENTED_EDGE ( 'NONE', *, *, #2654, .F. ) ; +#4402 = LINE ( 'NONE', #6222, #6372 ) ; +#4403 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3391 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6577, #5514, #4926 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4404 = ORIENTED_EDGE ( 'NONE', *, *, #3358, .T. ) ; +#4405 = EDGE_LOOP ( 'NONE', ( #2446, #994, #3343, #2797 ) ) ; +#4406 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 0.2000000000000000900, -1.075000000000000200 ) ) ; +#4408 = FILL_AREA_STYLE ('',( #5614 ) ) ; +#4407 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 0.1199999999999994400 ) ) ; +#4409 = SURFACE_SIDE_STYLE ('',( #4614 ) ) ; +#4410 = LINE ( 'NONE', #3306, #6196 ) ; +#4411 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.05000000000000012800, -1.074999999999999700 ) ) ; +#4412 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#4413 = VERTEX_POINT ( 'NONE', #980 ) ; +#4414 = EDGE_LOOP ( 'NONE', ( #5033, #6961, #1043, #4053, #6661, #501, #2627, #287, #6821, #6210, #6343, #6949, #3769, #2099, #3857, #336, #1744, #4727, #2130, #2512, #5035, #1438, #6097, #2587 ) ) ; +#4415 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4416 = AXIS2_PLACEMENT_3D ( 'NONE', #4350, #973, #2066 ) ; +#4417 = VERTEX_POINT ( 'NONE', #6160 ) ; +#4418 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.05000000000000012800, -1.075000000000000000 ) ) ; +#4419 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, 0.8799999999999998900 ) ) ; +#4420 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, -0.3800000000000005600 ) ) ; +#4421 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2431 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2110, #5511, #2093 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4422 = EDGE_CURVE ( 'NONE', #7168, #3994, #166, .T. ) ; +#4423 = EDGE_CURVE ( 'NONE', #5179, #54, #4475, .T. ) ; +#4424 = EDGE_CURVE ( 'NONE', #2779, #5215, #334, .T. ) ; +#4425 = VERTEX_POINT ( 'NONE', #1507 ) ; +#4426 = SURFACE_STYLE_FILL_AREA ( #3620 ) ; +#4427 = ADVANCED_FACE ( 'NONE', ( #1987 ), #5461, .F. ) ; +#4428 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1184 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3449, #1200, #2277 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4429 = FILL_AREA_STYLE_COLOUR ( '', #728 ) ; +#4430 = VECTOR ( 'NONE', #350, 1000.000000000000000 ) ; +#4431 = LINE ( 'NONE', #5850, #2913 ) ; +#4432 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4970 ), #6983 ) ; +#4433 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #3904 ) ; +#4434 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, -0.3800000000000003400 ) ) ; +#4435 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4436 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4437 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4438 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5454 ), #520 ) ; +#4439 = ORIENTED_EDGE ( 'NONE', *, *, #4182, .F. ) ; +#4440 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4441 = PRESENTATION_STYLE_ASSIGNMENT (( #991 ) ) ; +#4442 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4443 = CIRCLE ( 'NONE', #3263, 0.1199999999999998800 ) ; +#4444 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005500E-016 ) ) ; +#4445 = ORIENTED_EDGE ( 'NONE', *, *, #3591, .F. ) ; +#4446 = LINE ( 'NONE', #7246, #6398 ) ; +#4447 = VECTOR ( 'NONE', #4544, 1000.000000000000000 ) ; +#4448 = PRESENTATION_STYLE_ASSIGNMENT (( #2019 ) ) ; +#4449 = AXIS2_PLACEMENT_3D ( 'NONE', #5564, #4989, #3831 ) ; +#4450 = VECTOR ( 'NONE', #2819, 1000.000000000000000 ) ; +#4451 = VECTOR ( 'NONE', #257, 1000.000000000000000 ) ; +#4452 = ORIENTED_EDGE ( 'NONE', *, *, #1667, .F. ) ; +#4453 = LINE ( 'NONE', #5261, #2581 ) ; +#4454 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#4455 = AXIS2_PLACEMENT_3D ( 'NONE', #6368, #4651, #6904 ) ; +#4456 = VECTOR ( 'NONE', #3375, 1000.000000000000000 ) ; +#4457 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#4458 = LINE ( 'NONE', #2250, #5726 ) ; +#4459 = FACE_OUTER_BOUND ( 'NONE', #268, .T. ) ; +#4460 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4461 = VERTEX_POINT ( 'NONE', #6642 ) ; +#4463 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 0.3799999999999998900 ) ) ; +#4462 = SURFACE_SIDE_STYLE ('',( #5855 ) ) ; +#4464 = FILL_AREA_STYLE ('',( #5020 ) ) ; +#4465 = VERTEX_POINT ( 'NONE', #7232 ) ; +#4466 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, -0.6200000000000001100 ) ) ; +#4467 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, 0.1199999999999996600 ) ) ; +#4468 = ADVANCED_FACE ( 'NONE', ( #5740 ), #7210, .T. ) ; +#4469 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4470 = FACE_OUTER_BOUND ( 'NONE', #4885, .T. ) ; +#4471 = ORIENTED_EDGE ( 'NONE', *, *, #3941, .T. ) ; +#4472 = EDGE_CURVE ( 'NONE', #6354, #4554, #6519, .T. ) ; +#4473 = LINE ( 'NONE', #2315, #5266 ) ; +#4474 = ORIENTED_EDGE ( 'NONE', *, *, #3943, .F. ) ; +#4475 = LINE ( 'NONE', #6118, #7298 ) ; +#4476 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -1.445602896647339200E-016 ) ) ; +#4477 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -0.1200000000000000900 ) ) ; +#4478 = FILL_AREA_STYLE_COLOUR ( '', #3998 ) ; +#4479 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4175 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2054, #4876, #1457 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4480 = VERTEX_POINT ( 'NONE', #5646 ) ; +#4481 = ORIENTED_EDGE ( 'NONE', *, *, #6005, .F. ) ; +#4482 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4483 = PLANE ( 'NONE', #2102 ) ; +#4484 = VERTEX_POINT ( 'NONE', #2289 ) ; +#4485 = EDGE_LOOP ( 'NONE', ( #2635, #6021, #3093, #6709 ) ) ; +#4486 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4487 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#4488 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#4489 = EDGE_LOOP ( 'NONE', ( #2322, #6258, #4321, #4125 ) ) ; +#4490 = PLANE ( 'NONE', #6442 ) ; +#4491 = ORIENTED_EDGE ( 'NONE', *, *, #1717, .T. ) ; +#4492 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #571 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3251, #6183, #1665 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4493 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, -1.120000000000000100 ) ) ; +#4494 = SURFACE_STYLE_USAGE ( .BOTH. , #2814 ) ; +#4495 = PLANE ( 'NONE', #7278 ) ; +#4496 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, 1.119999999999999700 ) ) ; +#4497 = EDGE_LOOP ( 'NONE', ( #1932, #3952, #3413, #5064 ) ) ; +#4498 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3570, 'distance_accuracy_value', 'NONE'); +#4499 = ADVANCED_FACE ( 'NONE', ( #2238 ), #5121, .T. ) ; +#4500 = ORIENTED_EDGE ( 'NONE', *, *, #6656, .F. ) ; +#4501 = ORIENTED_EDGE ( 'NONE', *, *, #1620, .T. ) ; +#4502 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4503 = SURFACE_STYLE_USAGE ( .BOTH. , #34 ) ; +#4504 = LINE ( 'NONE', #6544, #3421 ) ; +#4505 = VECTOR ( 'NONE', #5444, 1000.000000000000000 ) ; +#4506 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 0.1199999999999995500 ) ) ; +#4507 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4508 = EDGE_LOOP ( 'NONE', ( #6501, #1852, #5875, #5974 ) ) ; +#4509 = EDGE_CURVE ( 'NONE', #2133, #3201, #938, .T. ) ; +#4510 = LINE ( 'NONE', #618, #6907 ) ; +#4511 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4512 = VECTOR ( 'NONE', #3041, 1000.000000000000000 ) ; +#4513 = CLOSED_SHELL ( 'NONE', ( #6181, #1448, #4785, #5213, #4887, #4836, #5184, #1915, #1423, #1413, #3429, #1947, #3122, #1153, #5142, #5029, #891, #7170, #1562, #7211, #1719, #814, #3360, #1463, #6085, #3711, #5560, #4222, #7050, #4468, #3173, #6041, #1991, #4903, #3864, #406, #4961, #5636, #2011, #2508, #587, #278, #5449, #7149, #2179, #4052, #2256, #2026, #1020, #1791, #1753, #3671, #2039, #148, #2853, #2076, #2291, #3104, #346, #7119, #623, #4393, #4427, #2637, #4319, #6334, #3782, #2542, #4332, #308, #6734, #3138, #985, #7243, #80, #475, #6147, #6695, #2061, #3977, #3939, #3691, #2671, #4255, #6652, #4649, #2364 ) ) ; +#4514 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4515 = LINE ( 'NONE', #3835, #1775 ) ; +#4516 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.1999999999999999800, -1.074999999999999700 ) ) ; +#4517 = PRESENTATION_STYLE_ASSIGNMENT (( #1442 ) ) ; +#4518 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -0.3800000000000004500 ) ) ; +#4519 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4520 = EDGE_CURVE ( 'NONE', #1363, #3588, #2419, .T. ) ; +#4521 = EDGE_CURVE ( 'NONE', #521, #7208, #1547, .T. ) ; +#4522 = EDGE_CURVE ( 'NONE', #2359, #4122, #7214, .T. ) ; +#4523 = ORIENTED_EDGE ( 'NONE', *, *, #4912, .T. ) ; +#4524 = VECTOR ( 'NONE', #6190, 1000.000000000000000 ) ; +#4525 = VECTOR ( 'NONE', #2200, 1000.000000000000000 ) ; +#4526 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6062 ) ) ; +#4527 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#4528 = FILL_AREA_STYLE_COLOUR ( '', #6109 ) ; +#4529 = SURFACE_SIDE_STYLE ('',( #5410 ) ) ; +#4530 = VECTOR ( 'NONE', #4826, 1000.000000000000000 ) ; +#4531 = COLOUR_RGB ( '',1.000000000000000000, 1.000000000000000000, 1.000000000000000000 ) ; +#4532 = AXIS2_PLACEMENT_3D ( 'NONE', #1747, #601, #3944 ) ; +#4533 = ORIENTED_EDGE ( 'NONE', *, *, #2745, .F. ) ; +#4534 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4535 = FACE_OUTER_BOUND ( 'NONE', #5861, .T. ) ; +#4536 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4537 = SURFACE_STYLE_USAGE ( .BOTH. , #3982 ) ; +#4538 = LINE ( 'NONE', #784, #3440 ) ; +#4539 = PLANE ( 'NONE', #3069 ) ; +#4540 = STYLED_ITEM ( 'NONE', ( #5624 ), #1020 ) ; +#4541 = ADVANCED_FACE ( 'NONE', ( #5908 ), #5668, .T. ) ; +#4542 = EDGE_CURVE ( 'NONE', #599, #5117, #4208, .T. ) ; +#4543 = ORIENTED_EDGE ( 'NONE', *, *, #9, .T. ) ; +#4544 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#4545 = VECTOR ( 'NONE', #671, 1000.000000000000000 ) ; +#4546 = CIRCLE ( 'NONE', #2686, 0.1199999999999998800 ) ; +#4547 = VECTOR ( 'NONE', #497, 1000.000000000000000 ) ; +#4548 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, 0.6199999999999995500 ) ) ; +#4549 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.1999999999999999800, 1.074999999999999700 ) ) ; +#4550 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, 0.1199999999999995500 ) ) ; +#4551 = PLANE ( 'NONE', #7167 ) ; +#4552 = FILL_AREA_STYLE_COLOUR ( '', #1597 ) ; +#4553 = FACE_OUTER_BOUND ( 'NONE', #1426, .T. ) ; +#4554 = VERTEX_POINT ( 'NONE', #6844 ) ; +#4555 = LINE ( 'NONE', #3991, #1527 ) ; +#4556 = LINE ( 'NONE', #3956, #2942 ) ; +#4557 = ORIENTED_EDGE ( 'NONE', *, *, #2210, .F. ) ; +#4558 = AXIS2_PLACEMENT_3D ( 'NONE', #3245, #4435, #6231 ) ; +#4559 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4560 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4561 = LINE ( 'NONE', #1097, #1011 ) ; +#4562 = VERTEX_POINT ( 'NONE', #3400 ) ; +#4563 = ORIENTED_EDGE ( 'NONE', *, *, #3377, .F. ) ; +#4564 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4565 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.05000000000000012800, -1.074999999999999700 ) ) ; +#4566 = ORIENTED_EDGE ( 'NONE', *, *, #5625, .T. ) ; +#4567 = PLANE ( 'NONE', #2566 ) ; +#4568 = ORIENTED_EDGE ( 'NONE', *, *, #5052, .T. ) ; +#4569 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#4570 = EDGE_CURVE ( 'NONE', #4363, #4465, #2691, .T. ) ; +#4571 = EDGE_CURVE ( 'NONE', #4948, #4271, #4032, .T. ) ; +#4572 = EDGE_CURVE ( 'NONE', #4871, #2531, #2869, .T. ) ; +#4573 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#4574 = ORIENTED_EDGE ( 'NONE', *, *, #548, .T. ) ; +#4575 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, -0.1200000000000000900 ) ) ; +#4576 = ORIENTED_EDGE ( 'NONE', *, *, #3359, .T. ) ; +#4577 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4578 = AXIS2_PLACEMENT_3D ( 'NONE', #7006, #4147, #3598 ) ; +#4579 = ADVANCED_FACE ( 'NONE', ( #7043 ), #1740, .F. ) ; +#4580 = EDGE_LOOP ( 'NONE', ( #7187, #2872, #1585, #2520 ) ) ; +#4581 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4582 = ORIENTED_EDGE ( 'NONE', *, *, #772, .F. ) ; +#4583 = AXIS2_PLACEMENT_3D ( 'NONE', #2758, #5136, #3316 ) ; +#4584 = ORIENTED_EDGE ( 'NONE', *, *, #3643, .T. ) ; +#4585 = SURFACE_SIDE_STYLE ('',( #1398 ) ) ; +#4586 = PLANE ( 'NONE', #6532 ) ; +#4587 = VERTEX_POINT ( 'NONE', #1065 ) ; +#4588 = VERTEX_POINT ( 'NONE', #1639 ) ; +#4589 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4590 = VECTOR ( 'NONE', #1450, 1000.000000000000000 ) ; +#4591 = VECTOR ( 'NONE', #7253, 1000.000000000000000 ) ; +#4592 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4593 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4594 = DIRECTION ( 'NONE', ( 6.318483184191612600E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4595 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4, 'distance_accuracy_value', 'NONE'); +#4596 = VERTEX_POINT ( 'NONE', #4565 ) ; +#4597 = ORIENTED_EDGE ( 'NONE', *, *, #2707, .T. ) ; +#4598 = ORIENTED_EDGE ( 'NONE', *, *, #1575, .T. ) ; +#4599 = ORIENTED_EDGE ( 'NONE', *, *, #7074, .F. ) ; +#4600 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4601 = DIRECTION ( 'NONE', ( 3.872150616019654400E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4602 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4603 = EDGE_LOOP ( 'NONE', ( #3052, #3829, #4294, #5265 ) ) ; +#4604 = SURFACE_STYLE_FILL_AREA ( #5545 ) ; +#4605 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4606 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654900E-016 ) ) ; +#4607 = EDGE_CURVE ( 'NONE', #6417, #4023, #848, .T. ) ; +#4608 = LINE ( 'NONE', #792, #643 ) ; +#4609 = PLANE ( 'NONE', #2296 ) ; +#4610 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.05000000000000000300, -4.286380681919435300E-017 ) ) ; +#4611 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4612 = PLANE ( 'NONE', #2885 ) ; +#4613 = CARTESIAN_POINT ( 'NONE', ( 1.371196865202256400E-016, 0.05000000000000000300, -1.075000000000000000 ) ) ; +#4614 = SURFACE_STYLE_FILL_AREA ( #19 ) ; +#4615 = PRESENTATION_STYLE_ASSIGNMENT (( #5468 ) ) ; +#4616 = EDGE_CURVE ( 'NONE', #3456, #7116, #3471, .T. ) ; +#4617 = LINE ( 'NONE', #3232, #1338 ) ; +#4618 = LINE ( 'NONE', #5832, #2919 ) ; +#4619 = PRESENTATION_STYLE_ASSIGNMENT (( #4944 ) ) ; +#4620 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6252 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1318, #771, #4160 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4621 = EDGE_LOOP ( 'NONE', ( #451, #3208, #2331, #3038 ) ) ; +#4622 = FACE_OUTER_BOUND ( 'NONE', #2866, .T. ) ; +#4623 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4624 = PRESENTATION_STYLE_ASSIGNMENT (( #7147 ) ) ; +#4625 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4626 = VECTOR ( 'NONE', #3541, 1000.000000000000000 ) ; +#4627 = SURFACE_STYLE_FILL_AREA ( #3694 ) ; +#4628 = LINE ( 'NONE', #528, #6497 ) ; +#4629 = VECTOR ( 'NONE', #4143, 1000.000000000000000 ) ; +#4630 = EDGE_LOOP ( 'NONE', ( #3113, #3453, #1879, #1095 ) ) ; +#4631 = LINE ( 'NONE', #5867, #7016 ) ; +#4632 = SURFACE_STYLE_FILL_AREA ( #570 ) ; +#4633 = LINE ( 'NONE', #1069, #3828 ) ; +#4634 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4635 = DIRECTION ( 'NONE', ( -1.275531967630005200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4636 = AXIS2_PLACEMENT_3D ( 'NONE', #5319, #3632, #4172 ) ; +#4637 = VECTOR ( 'NONE', #650, 1000.000000000000000 ) ; +#4638 = LINE ( 'NONE', #1170, #2321 ) ; +#4639 = ORIENTED_EDGE ( 'NONE', *, *, #1372, .T. ) ; +#4640 = ORIENTED_EDGE ( 'NONE', *, *, #3341, .F. ) ; +#4641 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4642 = FACE_OUTER_BOUND ( 'NONE', #1792, .T. ) ; +#4643 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4644 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4645 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#4646 = FACE_OUTER_BOUND ( 'NONE', #4300, .T. ) ; +#4647 = VERTEX_POINT ( 'NONE', #5748 ) ; +#4648 = ORIENTED_EDGE ( 'NONE', *, *, #4703, .T. ) ; +#4649 = ADVANCED_FACE ( 'NONE', ( #2042 ), #4112, .F. ) ; +#4650 = SURFACE_STYLE_FILL_AREA ( #3374 ) ; +#4651 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4652 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.04999999999999999600, -0.6200000000000001100 ) ) ; +#4653 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.6999999999999999600, -1.275000000000000600 ) ) ; +#4654 = ORIENTED_EDGE ( 'NONE', *, *, #6197, .F. ) ; +#4655 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1272 ) ) ; +#4656 = VERTEX_POINT ( 'NONE', #6330 ) ; +#4657 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4658 = AXIS2_PLACEMENT_3D ( 'NONE', #3074, #856, #1954 ) ; +#4659 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.2050252531694165800, -1.275000000000000600 ) ) ; +#4660 = ORIENTED_EDGE ( 'NONE', *, *, #608, .T. ) ; +#4661 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4662 = EDGE_CURVE ( 'NONE', #2683, #6417, #6783, .T. ) ; +#4663 = EDGE_CURVE ( 'NONE', #1353, #7220, #7296, .T. ) ; +#4664 = ORIENTED_EDGE ( 'NONE', *, *, #1472, .F. ) ; +#4665 = EDGE_CURVE ( 'NONE', #3775, #6100, #4293, .T. ) ; +#4666 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.3800000000000003400 ) ) ; +#4667 = FILL_AREA_STYLE ('',( #1776 ) ) ; +#4668 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4669 = VERTEX_POINT ( 'NONE', #162 ) ; +#4670 = VECTOR ( 'NONE', #1276, 1000.000000000000000 ) ; +#4671 = ORIENTED_EDGE ( 'NONE', *, *, #2369, .F. ) ; +#4672 = AXIS2_PLACEMENT_3D ( 'NONE', #6046, #4269, #4882 ) ; +#4673 = ORIENTED_EDGE ( 'NONE', *, *, #3159, .T. ) ; +#4674 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.8000000000000000400, -1.100000000000000500 ) ) ; +#4675 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4676 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#4677 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4678 = VECTOR ( 'NONE', #5149, 1000.000000000000000 ) ; +#4679 = VERTEX_POINT ( 'NONE', #1850 ) ; +#4680 = VERTEX_POINT ( 'NONE', #5191 ) ; +#4681 = SURFACE_SIDE_STYLE ('',( #3282 ) ) ; +#4682 = FACE_OUTER_BOUND ( 'NONE', #4036, .T. ) ; +#4683 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4684 = LINE ( 'NONE', #5310, #2902 ) ; +#4685 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.2000000000000000100, -1.074999999999999700 ) ) ; +#4686 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3924 ) ) ; +#4687 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4688 = ORIENTED_EDGE ( 'NONE', *, *, #2317, .T. ) ; +#4689 = SURFACE_STYLE_USAGE ( .BOTH. , #211 ) ; +#4690 = VECTOR ( 'NONE', #2111, 1000.000000000000000 ) ; +#4691 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#4692 = SURFACE_SIDE_STYLE ('',( #4257 ) ) ; +#4693 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3154 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1827, #3527, #5878 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4694 = VECTOR ( 'NONE', #1537, 1000.000000000000000 ) ; +#4695 = FILL_AREA_STYLE_COLOUR ( '', #2908 ) ; +#4696 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, 0.3799999999999998900 ) ) ; +#4697 = FILL_AREA_STYLE_COLOUR ( '', #4831 ) ; +#4698 = ORIENTED_EDGE ( 'NONE', *, *, #4957, .T. ) ; +#4699 = LINE ( 'NONE', #1681, #1415 ) ; +#4700 = FACE_OUTER_BOUND ( 'NONE', #1050, .T. ) ; +#4701 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -0.8800000000000004500 ) ) ; +#4702 = LINE ( 'NONE', #6038, #731 ) ; +#4703 = EDGE_CURVE ( 'NONE', #6447, #2182, #4473, .T. ) ; +#4704 = EDGE_CURVE ( 'NONE', #1968, #5647, #4927, .T. ) ; +#4705 = EDGE_CURVE ( 'NONE', #3588, #2826, #6411, .T. ) ; +#4706 = EDGE_LOOP ( 'NONE', ( #1445, #4452, #1750, #807 ) ) ; +#4707 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4708 = LINE ( 'NONE', #3803, #7188 ) ; +#4709 = VECTOR ( 'NONE', #1496, 1000.000000000000000 ) ; +#4710 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1405 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5263, #1862, #4296 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4711 = FACE_OUTER_BOUND ( 'NONE', #4706, .T. ) ; +#4712 = SURFACE_SIDE_STYLE ('',( #1342 ) ) ; +#4713 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, -0.6200000000000001100 ) ) ; +#4714 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4715 = PLANE ( 'NONE', #5582 ) ; +#4716 = ORIENTED_EDGE ( 'NONE', *, *, #5693, .F. ) ; +#4717 = LINE ( 'NONE', #7053, #819 ) ; +#4718 = VECTOR ( 'NONE', #5549, 1000.000000000000000 ) ; +#4719 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4720 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4721 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4722 = PLANE ( 'NONE', #3720 ) ; +#4723 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#4724 = EDGE_LOOP ( 'NONE', ( #1569, #249, #2286, #7177 ) ) ; +#4725 = PRESENTATION_STYLE_ASSIGNMENT (( #2265 ) ) ; +#4726 = LINE ( 'NONE', #4008, #2676 ) ; +#4727 = ORIENTED_EDGE ( 'NONE', *, *, #3893, .T. ) ; +#4728 = LINE ( 'NONE', #806, #2134 ) ; +#4729 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4847, 'distance_accuracy_value', 'NONE'); +#4730 = SURFACE_STYLE_FILL_AREA ( #2605 ) ; +#4731 = SURFACE_SIDE_STYLE ('',( #5459 ) ) ; +#4732 = EDGE_LOOP ( 'NONE', ( #5663, #1278, #6176, #6225 ) ) ; +#4733 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4734 = VECTOR ( 'NONE', #1789, 1000.000000000000000 ) ; +#4735 = EDGE_LOOP ( 'NONE', ( #488, #5358, #4857, #1664 ) ) ; +#4736 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4729 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4847, #1453, #1477 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4737 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4738 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4739 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, -1.000000000000000200 ) ) ; +#4740 = EDGE_LOOP ( 'NONE', ( #1345, #3460, #4846, #2761 ) ) ; +#4741 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 0.05000000000000012800, -1.075000000000000200 ) ) ; +#4742 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.2000000000000000100, -1.074999999999999700 ) ) ; +#4743 = ORIENTED_EDGE ( 'NONE', *, *, #1937, .T. ) ; +#4744 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4745 = ORIENTED_EDGE ( 'NONE', *, *, #1856, .F. ) ; +#4746 = ORIENTED_EDGE ( 'NONE', *, *, #1949, .T. ) ; +#4747 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.2000000000000000100, -1.074999999999999700 ) ) ; +#4748 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4749 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 0.8799999999999998900 ) ) ; +#4750 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, 0.4999999999999997800 ) ) ; +#4751 = EDGE_CURVE ( 'NONE', #3410, #4207, #759, .T. ) ; +#4752 = VERTEX_POINT ( 'NONE', #3514 ) ; +#4753 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#4754 = AXIS2_PLACEMENT_3D ( 'NONE', #5930, #3669, #5378 ) ; +#4755 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4756 = EDGE_LOOP ( 'NONE', ( #4041, #5370, #5746, #1263 ) ) ; +#4757 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4758 = VERTEX_POINT ( 'NONE', #1830 ) ; +#4759 = AXIS2_PLACEMENT_3D ( 'NONE', #1998, #1449, #2588 ) ; +#4760 = EDGE_CURVE ( 'NONE', #3874, #727, #3381, .T. ) ; +#4761 = EDGE_CURVE ( 'NONE', #5777, #42, #3368, .T. ) ; +#4762 = EDGE_CURVE ( 'NONE', #654, #5238, #6943, .T. ) ; +#4763 = PLANE ( 'NONE', #4807 ) ; +#4764 = CARTESIAN_POINT ( 'NONE', ( -4.646580739223590900E-017, 0.05000000000000000300, 0.1200000000000001300 ) ) ; +#4765 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4766 = ORIENTED_EDGE ( 'NONE', *, *, #416, .T. ) ; +#4767 = STYLED_ITEM ( 'NONE', ( #1355 ), #4785 ) ; +#4768 = ORIENTED_EDGE ( 'NONE', *, *, #1014, .F. ) ; +#4769 = LINE ( 'NONE', #421, #1137 ) ; +#4770 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #391 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1565, #2152, #502 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4771 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4772 = VERTEX_POINT ( 'NONE', #1186 ) ; +#4773 = CARTESIAN_POINT ( 'NONE', ( 1.371196865202256400E-016, 0.05000000000000000300, -1.075000000000000000 ) ) ; +#4774 = SURFACE_SIDE_STYLE ('',( #1849 ) ) ; +#4775 = VERTEX_POINT ( 'NONE', #1762 ) ; +#4776 = ORIENTED_EDGE ( 'NONE', *, *, #2787, .T. ) ; +#4777 = VERTEX_POINT ( 'NONE', #6910 ) ; +#4778 = AXIS2_PLACEMENT_3D ( 'NONE', #6965, #3560, #219 ) ; +#4779 = FILL_AREA_STYLE ('',( #6333 ) ) ; +#4780 = DIRECTION ( 'NONE', ( -3.872150616019654400E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4781 = EDGE_LOOP ( 'NONE', ( #561, #3430, #459, #1199 ) ) ; +#4782 = VECTOR ( 'NONE', #1951, 1000.000000000000000 ) ; +#4783 = FACE_OUTER_BOUND ( 'NONE', #6672, .T. ) ; +#4784 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4785 = ADVANCED_FACE ( 'NONE', ( #1878 ), #4586, .F. ) ; +#4786 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.6199999999999996600 ) ) ; +#4787 = FILL_AREA_STYLE_COLOUR ( '', #4063 ) ; +#4788 = SURFACE_STYLE_USAGE ( .BOTH. , #5944 ) ; +#4789 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.05000000000000012800, 1.074999999999999700 ) ) ; +#4790 = FILL_AREA_STYLE ('',( #7062 ) ) ; +#4791 = VERTEX_POINT ( 'NONE', #5302 ) ; +#4792 = LINE ( 'NONE', #4033, #5695 ) ; +#4793 = VECTOR ( 'NONE', #2166, 1000.000000000000000 ) ; +#4794 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654900E-016 ) ) ; +#4795 = VERTEX_POINT ( 'NONE', #6469 ) ; +#4796 = FACE_OUTER_BOUND ( 'NONE', #3046, .T. ) ; +#4797 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#4798 = VECTOR ( 'NONE', #2132, 1000.000000000000000 ) ; +#4799 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4800 = PRESENTATION_STYLE_ASSIGNMENT (( #2045 ) ) ; +#4801 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4802 = SURFACE_STYLE_FILL_AREA ( #5108 ) ; +#4803 = LINE ( 'NONE', #1885, #3265 ) ; +#4804 = ORIENTED_EDGE ( 'NONE', *, *, #414, .T. ) ; +#4805 = VECTOR ( 'NONE', #1474, 1000.000000000000000 ) ; +#4806 = LINE ( 'NONE', #6930, #910 ) ; +#4807 = AXIS2_PLACEMENT_3D ( 'NONE', #831, #5387, #5365 ) ; +#4808 = EDGE_CURVE ( 'NONE', #5761, #1204, #3197, .T. ) ; +#4809 = EDGE_CURVE ( 'NONE', #1576, #4461, #1817, .T. ) ; +#4810 = EDGE_CURVE ( 'NONE', #6298, #4758, #4371, .T. ) ; +#4811 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4812 = VECTOR ( 'NONE', #1074, 1000.000000000000000 ) ; +#4813 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4814 = FACE_OUTER_BOUND ( 'NONE', #1913, .T. ) ; +#4815 = AXIS2_PLACEMENT_3D ( 'NONE', #7042, #1931, #3573 ) ; +#4816 = ORIENTED_EDGE ( 'NONE', *, *, #2745, .T. ) ; +#4817 = LINE ( 'NONE', #951, #5180 ) ; +#4818 = FACE_OUTER_BOUND ( 'NONE', #6002, .T. ) ; +#4819 = FACE_OUTER_BOUND ( 'NONE', #3851, .T. ) ; +#4820 = ORIENTED_EDGE ( 'NONE', *, *, #4184, .T. ) ; +#4821 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4823 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, -0.6200000000000001100 ) ) ; +#4822 = FILL_AREA_STYLE_COLOUR ( '', #3611 ) ; +#4824 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#4825 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4826 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4827 = AXIS2_PLACEMENT_3D ( 'NONE', #2183, #3237, #7222 ) ; +#4828 = LINE ( 'NONE', #6169, #5897 ) ; +#4829 = LINE ( 'NONE', #5107, #7289 ) ; +#4830 = ORIENTED_EDGE ( 'NONE', *, *, #1900, .T. ) ; +#4831 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4832 = ORIENTED_EDGE ( 'NONE', *, *, #5232, .F. ) ; +#4833 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3633, 'distance_accuracy_value', 'NONE'); +#4834 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #345 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2831, #2804, #6795 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4835 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#4836 = ADVANCED_FACE ( 'NONE', ( #6257 ), #2994, .F. ) ; +#4837 = EDGE_CURVE ( 'NONE', #7208, #1529, #582, .T. ) ; +#4838 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#4839 = SURFACE_SIDE_STYLE ('',( #2577 ) ) ; +#4840 = LINE ( 'NONE', #4747, #755 ) ; +#4841 = ORIENTED_EDGE ( 'NONE', *, *, #2978, .T. ) ; +#4842 = ORIENTED_EDGE ( 'NONE', *, *, #874, .T. ) ; +#4843 = VECTOR ( 'NONE', #6209, 1000.000000000000000 ) ; +#4844 = AXIS2_PLACEMENT_3D ( 'NONE', #2365, #6800, #600 ) ; +#4845 = ORIENTED_EDGE ( 'NONE', *, *, #6194, .F. ) ; +#4846 = ORIENTED_EDGE ( 'NONE', *, *, #6426, .F. ) ; +#4847 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4848 = AXIS2_PLACEMENT_3D ( 'NONE', #2953, #4675, #6964 ) ; +#4849 = FILL_AREA_STYLE ('',( #3071 ) ) ; +#4851 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#4850 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4852 = PLANE ( 'NONE', #6087 ) ; +#4853 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#4854 = ORIENTED_EDGE ( 'NONE', *, *, #5053, .F. ) ; +#4855 = ADVANCED_FACE ( 'NONE', ( #5998 ), #5884, .T. ) ; +#4856 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4857 = ORIENTED_EDGE ( 'NONE', *, *, #3854, .T. ) ; +#4858 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4859 = EDGE_CURVE ( 'NONE', #3315, #3323, #5010, .T. ) ; +#4860 = ORIENTED_EDGE ( 'NONE', *, *, #1014, .T. ) ; +#4861 = EDGE_LOOP ( 'NONE', ( #3644, #99, #4698, #3530 ) ) ; +#4862 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1057 ) ) ; +#4863 = LINE ( 'NONE', #7076, #4590 ) ; +#4864 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#4865 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4866 = ADVANCED_FACE ( 'NONE', ( #2417 ), #2406, .T. ) ; +#4867 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4868 = ORIENTED_EDGE ( 'NONE', *, *, #4522, .F. ) ; +#4869 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1113, 'distance_accuracy_value', 'NONE'); +#4870 = STYLED_ITEM ( 'NONE', ( #4263 ), #5417 ) ; +#4871 = VERTEX_POINT ( 'NONE', #4753 ) ; +#4872 = DIRECTION ( 'NONE', ( -3.872150616019654400E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4874 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4873 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.5000000000000002200 ) ) ; +#4875 = LINE ( 'NONE', #6474, #2901 ) ; +#4876 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4877 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 1.119999999999999400 ) ) ; +#4878 = EDGE_LOOP ( 'NONE', ( #6546, #6121, #3752, #4962 ) ) ; +#4879 = FACE_OUTER_BOUND ( 'NONE', #3373, .T. ) ; +#4880 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4881 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4882 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4883 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, -1.120000000000000100 ) ) ; +#4884 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6281 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5929, #4799, #2507 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4885 = EDGE_LOOP ( 'NONE', ( #2943, #4471, #6155, #5043 ) ) ; +#4886 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#4887 = ADVANCED_FACE ( 'NONE', ( #2503 ), #2429, .F. ) ; +#4888 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4889 = ORIENTED_EDGE ( 'NONE', *, *, #4959, .T. ) ; +#4890 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 2.940894014733149000, -1.075000000000000000 ) ) ; +#4891 = LINE ( 'NONE', #3826, #557 ) ; +#4892 = LINE ( 'NONE', #498, #1693 ) ; +#4893 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#4894 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, -0.8800000000000003400 ) ) ; +#4895 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.1999999999999999800, 1.074999999999999700 ) ) ; +#4896 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4897 = VERTEX_POINT ( 'NONE', #725 ) ; +#4898 = LINE ( 'NONE', #4231, #2302 ) ; +#4899 = VECTOR ( 'NONE', #914, 1000.000000000000000 ) ; +#4900 = LINE ( 'NONE', #1594, #2931 ) ; +#4901 = EDGE_CURVE ( 'NONE', #3687, #4777, #3288, .T. ) ; +#4902 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, 0.6199999999999995500 ) ) ; +#4903 = ADVANCED_FACE ( 'NONE', ( #4201 ), #6410, .F. ) ; +#4904 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.05000000000000012800, 1.074999999999999700 ) ) ; +#4905 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4906 = ORIENTED_EDGE ( 'NONE', *, *, #4808, .F. ) ; +#4907 = VECTOR ( 'NONE', #4824, 1000.000000000000000 ) ; +#4908 = STYLED_ITEM ( 'NONE', ( #2801 ), #2753 ) ; +#4909 = CIRCLE ( 'NONE', #7024, 0.1199999999999998800 ) ; +#4910 = STYLED_ITEM ( 'NONE', ( #4998 ), #7064 ) ; +#4911 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4912 = EDGE_CURVE ( 'NONE', #6917, #1257, #5452, .T. ) ; +#4913 = ORIENTED_EDGE ( 'NONE', *, *, #3999, .T. ) ; +#4914 = EDGE_CURVE ( 'NONE', #2425, #5111, #3736, .T. ) ; +#4915 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 0.8799999999999998900 ) ) ; +#4916 = EDGE_CURVE ( 'NONE', #6149, #3167, #923, .T. ) ; +#4917 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4918 = ORIENTED_EDGE ( 'NONE', *, *, #5954, .F. ) ; +#4919 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#4920 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4921 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2091 ) ) ; +#4922 = LINE ( 'NONE', #4902, #589 ) ; +#4923 = VERTEX_POINT ( 'NONE', #5298 ) ; +#4925 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4924 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4926 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4927 = LINE ( 'NONE', #85, #5899 ) ; +#4928 = ORIENTED_EDGE ( 'NONE', *, *, #5153, .F. ) ; +#4929 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.04999999999999969700, 1.500000000000000000 ) ) ; +#4930 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4931 = AXIS2_PLACEMENT_3D ( 'NONE', #5676, #50, #3970 ) ; +#4932 = ADVANCED_FACE ( 'NONE', ( #5633 ), #675, .T. ) ; +#4933 = VERTEX_POINT ( 'NONE', #4653 ) ; +#4935 = ORIENTED_EDGE ( 'NONE', *, *, #6056, .F. ) ; +#4934 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #474, 'distance_accuracy_value', 'NONE'); +#4936 = AXIS2_PLACEMENT_3D ( 'NONE', #3435, #2356, #4676 ) ; +#4937 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.2000000000000000100, -1.074999999999999700 ) ) ; +#4938 = EDGE_CURVE ( 'NONE', #4132, #6429, #4107, .T. ) ; +#4939 = ORIENTED_EDGE ( 'NONE', *, *, #4901, .T. ) ; +#4940 = ORIENTED_EDGE ( 'NONE', *, *, #3997, .T. ) ; +#4941 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4942 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4164 ) ) ; +#4943 = ORIENTED_EDGE ( 'NONE', *, *, #9, .F. ) ; +#4944 = SURFACE_STYLE_USAGE ( .BOTH. , #7181 ) ; +#4946 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, 0.6199999999999995500 ) ) ; +#4945 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#4947 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4948 = VERTEX_POINT ( 'NONE', #4076 ) ; +#4949 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4950 = SURFACE_SIDE_STYLE ('',( #2770 ) ) ; +#4951 = ORIENTED_EDGE ( 'NONE', *, *, #5730, .T. ) ; +#4952 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#4953 = VERTEX_POINT ( 'NONE', #1810 ) ; +#4954 = SURFACE_SIDE_STYLE ('',( #2817 ) ) ; +#4955 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#4956 = ORIENTED_EDGE ( 'NONE', *, *, #5953, .T. ) ; +#4957 = EDGE_CURVE ( 'NONE', #5111, #583, #3461, .T. ) ; +#4958 = EDGE_CURVE ( 'NONE', #5489, #5190, #2941, .T. ) ; +#4959 = EDGE_CURVE ( 'NONE', #3382, #5499, #5359, .T. ) ; +#4960 = LINE ( 'NONE', #3273, #6543 ) ; +#4961 = ADVANCED_FACE ( 'NONE', ( #6595 ), #3937, .F. ) ; +#4962 = ORIENTED_EDGE ( 'NONE', *, *, #970, .F. ) ; +#4963 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2002 ) ) ; +#4964 = ORIENTED_EDGE ( 'NONE', *, *, #4422, .T. ) ; +#4965 = FILL_AREA_STYLE_COLOUR ( '', #6654 ) ; +#4966 = ORIENTED_EDGE ( 'NONE', *, *, #5840, .F. ) ; +#4967 = ORIENTED_EDGE ( 'NONE', *, *, #4914, .F. ) ; +#4968 = MANIFOLD_SOLID_BREP ( 'LPattern4[1]', #2058 ) ; +#4969 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4970 = STYLED_ITEM ( 'NONE', ( #1311 ), #6085 ) ; +#4971 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#4973 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#4972 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#4974 = SURFACE_STYLE_USAGE ( .BOTH. , #934 ) ; +#4975 = PLANE ( 'NONE', #3308 ) ; +#4976 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#4977 = ORIENTED_EDGE ( 'NONE', *, *, #3213, .F. ) ; +#4978 = LINE ( 'NONE', #444, #4694 ) ; +#4979 = LINE ( 'NONE', #2633, #382 ) ; +#4980 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2766 ) ) ; +#4981 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#4982 = VECTOR ( 'NONE', #6857, 1000.000000000000000 ) ; +#4983 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 1.499999999999999600 ) ) ; +#4984 = PLANE ( 'NONE', #3063 ) ; +#4985 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3712 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #694, #5195, #6358 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#4986 = VERTEX_POINT ( 'NONE', #3321 ) ; +#4987 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#4988 = DIRECTION ( 'NONE', ( 1.275531967630005700E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#4989 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#4990 = EDGE_LOOP ( 'NONE', ( #2100, #4379, #3327, #242 ) ) ; +#4991 = LINE ( 'NONE', #4742, #575 ) ; +#4992 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#4993 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#4994 = SURFACE_STYLE_USAGE ( .BOTH. , #3338 ) ; +#4995 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#4996 = LINE ( 'NONE', #6701, #6856 ) ; +#4997 = ADVANCED_FACE ( 'NONE', ( #7196 ), #4539, .T. ) ; +#4998 = PRESENTATION_STYLE_ASSIGNMENT (( #1883 ) ) ; +#4999 = EDGE_LOOP ( 'NONE', ( #6531, #2874, #6024, #6262 ) ) ; +#5000 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5001 = VECTOR ( 'NONE', #3314, 1000.000000000000000 ) ; +#5002 = LINE ( 'NONE', #4696, #5804 ) ; +#5003 = VERTEX_POINT ( 'NONE', #5024 ) ; +#5004 = EDGE_CURVE ( 'NONE', #3053, #4109, #3372, .T. ) ; +#5005 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5006 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5007 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5008 = AXIS2_PLACEMENT_3D ( 'NONE', #6487, #894, #7051 ) ; +#5009 = ORIENTED_EDGE ( 'NONE', *, *, #6567, .T. ) ; +#5010 = LINE ( 'NONE', #201, #7114 ) ; +#5011 = ORIENTED_EDGE ( 'NONE', *, *, #5917, .T. ) ; +#5012 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5013 = AXIS2_PLACEMENT_3D ( 'NONE', #21, #6743, #7303 ) ; +#5014 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5015 = ORIENTED_EDGE ( 'NONE', *, *, #2329, .F. ) ; +#5016 = ORIENTED_EDGE ( 'NONE', *, *, #3696, .T. ) ; +#5017 = VECTOR ( 'NONE', #2383, 1000.000000000000000 ) ; +#5018 = SURFACE_SIDE_STYLE ('',( #5067 ) ) ; +#5019 = AXIS2_PLACEMENT_3D ( 'NONE', #3529, #4129, #1225 ) ; +#5020 = FILL_AREA_STYLE_COLOUR ( '', #3715 ) ; +#5021 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5022 = FILL_AREA_STYLE ('',( #1001 ) ) ; +#5023 = ORIENTED_EDGE ( 'NONE', *, *, #2460, .T. ) ; +#5024 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, -0.0000000000000000000, -1.500000000000000000 ) ) ; +#5025 = VERTEX_POINT ( 'NONE', #6162 ) ; +#5026 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 0.6199999999999995500 ) ) ; +#5027 = ORIENTED_EDGE ( 'NONE', *, *, #2414, .T. ) ; +#5028 = PLANE ( 'NONE', #3898 ) ; +#5029 = ADVANCED_FACE ( 'NONE', ( #4818 ), #3884, .F. ) ; +#5030 = EDGE_LOOP ( 'NONE', ( #7026, #5473, #3795, #6816 ) ) ; +#5031 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5032 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, -0.5000000000000002200 ) ) ; +#5033 = ORIENTED_EDGE ( 'NONE', *, *, #6517, .T. ) ; +#5034 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.0000000000000000000, -1.075000000000000000 ) ) ; +#5035 = ORIENTED_EDGE ( 'NONE', *, *, #4044, .T. ) ; +#5036 = ORIENTED_EDGE ( 'NONE', *, *, #2979, .T. ) ; +#5037 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.6999999999999999600, -1.100000000000000500 ) ) ; +#5038 = LINE ( 'NONE', #4946, #1923 ) ; +#5039 = PLANE ( 'NONE', #2838 ) ; +#5040 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, -1.120000000000000100 ) ) ; +#5041 = PLANE ( 'NONE', #4374 ) ; +#5042 = ORIENTED_EDGE ( 'NONE', *, *, #6416, .T. ) ; +#5043 = ORIENTED_EDGE ( 'NONE', *, *, #417, .F. ) ; +#5044 = FILL_AREA_STYLE_COLOUR ( '', #5249 ) ; +#5045 = AXIS2_PLACEMENT_3D ( 'NONE', #3990, #4154, #5851 ) ; +#5046 = LINE ( 'NONE', #2262, #3240 ) ; +#5047 = LINE ( 'NONE', #7155, #1766 ) ; +#5048 = PLANE ( 'NONE', #107 ) ; +#5049 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.2000000000000000100, -1.074999999999999700 ) ) ; +#5050 = STYLED_ITEM ( 'NONE', ( #3542 ), #7119 ) ; +#5051 = EDGE_CURVE ( 'NONE', #3412, #2083, #1611, .T. ) ; +#5052 = EDGE_CURVE ( 'NONE', #4372, #1823, #6413, .T. ) ; +#5053 = EDGE_CURVE ( 'NONE', #2683, #431, #5720, .T. ) ; +#5054 = ORIENTED_EDGE ( 'NONE', *, *, #6615, .T. ) ; +#5055 = VECTOR ( 'NONE', #5690, 1000.000000000000000 ) ; +#5056 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5546, 'distance_accuracy_value', 'NONE'); +#5057 = AXIS2_PLACEMENT_3D ( 'NONE', #885, #3661, #1486 ) ; +#5058 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5059 = CIRCLE ( 'NONE', #4672, 0.1750000000000000200 ) ; +#5060 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1026 ) ) ; +#5061 = FILL_AREA_STYLE ('',( #7156 ) ) ; +#5062 = STYLED_ITEM ( 'NONE', ( #6039 ), #2304 ) ; +#5063 = ADVANCED_FACE ( 'NONE', ( #4362 ), #5041, .T. ) ; +#5064 = ORIENTED_EDGE ( 'NONE', *, *, #2631, .F. ) ; +#5065 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5066 = FACE_OUTER_BOUND ( 'NONE', #4352, .T. ) ; +#5067 = SURFACE_STYLE_FILL_AREA ( #1041 ) ; +#5068 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000400, 0.8000000000000003800, 1.500000000000000000 ) ) ; +#5069 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.05000000000000012800, -1.074999999999999700 ) ) ; +#5070 = PLANE ( 'NONE', #3665 ) ; +#5071 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5072 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5073 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5074 = ORIENTED_EDGE ( 'NONE', *, *, #5730, .F. ) ; +#5075 = VECTOR ( 'NONE', #7174, 1000.000000000000000 ) ; +#5076 = VECTOR ( 'NONE', #4661, 1000.000000000000000 ) ; +#5077 = VECTOR ( 'NONE', #1800, 1000.000000000000000 ) ; +#5078 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3924 ), #5463 ) ; +#5079 = LINE ( 'NONE', #3993, #4009 ) ; +#5080 = ORIENTED_EDGE ( 'NONE', *, *, #7175, .F. ) ; +#5081 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, 0.6199999999999995500 ) ) ; +#5082 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2534 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5513, #377, #6092 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5083 = FACE_OUTER_BOUND ( 'NONE', #2951, .T. ) ; +#5084 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, 0.9999999999999997800 ) ) ; +#5085 = VECTOR ( 'NONE', #4602, 1000.000000000000000 ) ; +#5086 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#5087 = VECTOR ( 'NONE', #2073, 1000.000000000000000 ) ; +#5088 = FACE_OUTER_BOUND ( 'NONE', #1722, .T. ) ; +#5089 = LINE ( 'NONE', #51, #1013 ) ; +#5090 = ORIENTED_EDGE ( 'NONE', *, *, #6054, .T. ) ; +#5091 = SURFACE_STYLE_USAGE ( .BOTH. , #517 ) ; +#5092 = VECTOR ( 'NONE', #4677, 1000.000000000000000 ) ; +#5093 = FACE_OUTER_BOUND ( 'NONE', #6363, .T. ) ; +#5094 = ORIENTED_EDGE ( 'NONE', *, *, #3610, .T. ) ; +#5095 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#5096 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#5097 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1454, 'distance_accuracy_value', 'NONE'); +#5098 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5099 = LINE ( 'NONE', #4937, #5364 ) ; +#5100 = EDGE_CURVE ( 'NONE', #5194, #6306, #2750, .T. ) ; +#5101 = ORIENTED_EDGE ( 'NONE', *, *, #3589, .F. ) ; +#5102 = EDGE_CURVE ( 'NONE', #3725, #2120, #7017, .T. ) ; +#5103 = EDGE_CURVE ( 'NONE', #2244, #3655, #486, .T. ) ; +#5104 = VECTOR ( 'NONE', #1874, 1000.000000000000000 ) ; +#5105 = ORIENTED_EDGE ( 'NONE', *, *, #1520, .F. ) ; +#5106 = FILL_AREA_STYLE_COLOUR ( '', #1781 ) ; +#5107 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, -1.500000000000000400 ) ) ; +#5108 = FILL_AREA_STYLE ('',( #4478 ) ) ; +#5109 = STYLED_ITEM ( 'NONE', ( #1606 ), #4052 ) ; +#5110 = ORIENTED_EDGE ( 'NONE', *, *, #8, .F. ) ; +#5111 = VERTEX_POINT ( 'NONE', #112 ) ; +#5112 = ADVANCED_FACE ( 'NONE', ( #235 ), #4567, .T. ) ; +#5113 = STYLED_ITEM ( 'NONE', ( #4441 ), #5636 ) ; +#5114 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, -0.3800000000000004500 ) ) ; +#5115 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.2050252531694165800, -1.100000000000000500 ) ) ; +#5116 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.05000000000000012800, -1.074999999999999700 ) ) ; +#5117 = VERTEX_POINT ( 'NONE', #4062 ) ; +#5118 = ORIENTED_EDGE ( 'NONE', *, *, #647, .F. ) ; +#5119 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5120 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.3800000000000003400 ) ) ; +#5121 = PLANE ( 'NONE', #5160 ) ; +#5122 = ORIENTED_EDGE ( 'NONE', *, *, #7162, .T. ) ; +#5123 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -1.120000000000000100 ) ) ; +#5124 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3185 ) ) ; +#5125 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#5126 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.4999999999999997800 ) ) ; +#5127 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 1.119999999999999400 ) ) ; +#5128 = ORIENTED_EDGE ( 'NONE', *, *, #417, .T. ) ; +#5129 = ORIENTED_EDGE ( 'NONE', *, *, #7073, .T. ) ; +#5130 = ORIENTED_EDGE ( 'NONE', *, *, #6705, .F. ) ; +#5131 = PLANE ( 'NONE', #1247 ) ; +#5132 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.0000000000000000000, -1.500000000000000000 ) ) ; +#5133 = VECTOR ( 'NONE', #1726, 1000.000000000000000 ) ; +#5134 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5135 = VERTEX_POINT ( 'NONE', #4082 ) ; +#5136 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5137 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5138 = ORIENTED_EDGE ( 'NONE', *, *, #5329, .T. ) ; +#5139 = EDGE_CURVE ( 'NONE', #6955, #3574, #2313, .T. ) ; +#5140 = FACE_OUTER_BOUND ( 'NONE', #6793, .T. ) ; +#5141 = FILL_AREA_STYLE ('',( #87 ) ) ; +#5142 = ADVANCED_FACE ( 'NONE', ( #2491 ), #2937, .F. ) ; +#5143 = PLANE ( 'NONE', #4249 ) ; +#5144 = STYLED_ITEM ( 'NONE', ( #5334 ), #3782 ) ; +#5145 = ORIENTED_EDGE ( 'NONE', *, *, #736, .F. ) ; +#5146 = LINE ( 'NONE', #1557, #288 ) ; +#5147 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5148 = FACE_OUTER_BOUND ( 'NONE', #6899, .T. ) ; +#5149 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654900E-016 ) ) ; +#5150 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5151 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #566, 'distance_accuracy_value', 'NONE'); +#5152 = AXIS2_PLACEMENT_3D ( 'NONE', #774, #3646, #293 ) ; +#5153 = EDGE_CURVE ( 'NONE', #4871, #5003, #3183, .T. ) ; +#5154 = EDGE_CURVE ( 'NONE', #6721, #1366, #1705, .T. ) ; +#5155 = EDGE_CURVE ( 'NONE', #6754, #6762, #2121, .T. ) ; +#5156 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3021, 'distance_accuracy_value', 'NONE'); +#5157 = VERTEX_POINT ( 'NONE', #691 ) ; +#5158 = LINE ( 'NONE', #28, #3797 ) ; +#5159 = LINE ( 'NONE', #5268, #6648 ) ; +#5160 = AXIS2_PLACEMENT_3D ( 'NONE', #5691, #5617, #568 ) ; +#5161 = FILL_AREA_STYLE_COLOUR ( '', #6320 ) ; +#5162 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, 0.6199999999999996600 ) ) ; +#5163 = EDGE_LOOP ( 'NONE', ( #5544, #3443, #2000, #1754 ) ) ; +#5164 = SURFACE_STYLE_FILL_AREA ( #4464 ) ; +#5165 = VECTOR ( 'NONE', #4482, 1000.000000000000000 ) ; +#5166 = LINE ( 'NONE', #77, #2659 ) ; +#5167 = PLANE ( 'NONE', #6013 ) ; +#5168 = AXIS2_PLACEMENT_3D ( 'NONE', #3607, #6463, #2428 ) ; +#5169 = EDGE_LOOP ( 'NONE', ( #5189, #1540, #4404, #4304 ) ) ; +#5170 = CARTESIAN_POINT ( 'NONE', ( -2.400733381932186300E-016, 0.05000000000000000300, 0.6200000000000001100 ) ) ; +#5171 = PRESENTATION_STYLE_ASSIGNMENT (( #1985 ) ) ; +#5172 = PRESENTATION_STYLE_ASSIGNMENT (( #1163 ) ) ; +#5173 = VECTOR ( 'NONE', #6515, 1000.000000000000000 ) ; +#5174 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5175 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, -0.5000000000000002200 ) ) ; +#5176 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5177 = SURFACE_STYLE_USAGE ( .BOTH. , #93 ) ; +#5178 = FACE_OUTER_BOUND ( 'NONE', #1129, .T. ) ; +#5179 = VERTEX_POINT ( 'NONE', #1229 ) ; +#5180 = VECTOR ( 'NONE', #7299, 1000.000000000000000 ) ; +#5181 = ORIENTED_EDGE ( 'NONE', *, *, #1996, .T. ) ; +#5182 = AXIS2_PLACEMENT_3D ( 'NONE', #5220, #4611, #4091 ) ; +#5183 = FACE_OUTER_BOUND ( 'NONE', #94, .T. ) ; +#5184 = ADVANCED_FACE ( 'NONE', ( #6588 ), #5167, .F. ) ; +#5185 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000400, 0.05000000000000000300, 1.500000000000000000 ) ) ; +#5186 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654900E-016 ) ) ; +#5187 = LINE ( 'NONE', #2944, #2137 ) ; +#5188 = FACE_OUTER_BOUND ( 'NONE', #1724, .T. ) ; +#5189 = ORIENTED_EDGE ( 'NONE', *, *, #4959, .F. ) ; +#5190 = VERTEX_POINT ( 'NONE', #2865 ) ; +#5191 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, 0.3799999999999998900 ) ) ; +#5192 = ORIENTED_EDGE ( 'NONE', *, *, #690, .F. ) ; +#5193 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5194 = VERTEX_POINT ( 'NONE', #2341 ) ; +#5195 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5196 = AXIS2_PLACEMENT_3D ( 'NONE', #3218, #7204, #3801 ) ; +#5197 = EDGE_CURVE ( 'NONE', #968, #3066, #5714, .T. ) ; +#5198 = EDGE_CURVE ( 'NONE', #2063, #2813, #660, .T. ) ; +#5199 = EDGE_CURVE ( 'NONE', #4656, #2359, #4178, .T. ) ; +#5200 = ORIENTED_EDGE ( 'NONE', *, *, #1121, .T. ) ; +#5201 = FILL_AREA_STYLE ('',( #3549 ) ) ; +#5202 = ORIENTED_EDGE ( 'NONE', *, *, #6195, .T. ) ; +#5203 = STYLED_ITEM ( 'NONE', ( #2833 ), #4083 ) ; +#5204 = ORIENTED_EDGE ( 'NONE', *, *, #6079, .T. ) ; +#5205 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5113 ) ) ; +#5206 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5207 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#5208 = FILL_AREA_STYLE ('',( #6966 ) ) ; +#5209 = ORIENTED_EDGE ( 'NONE', *, *, #4570, .F. ) ; +#5210 = VECTOR ( 'NONE', #151, 1000.000000000000000 ) ; +#5211 = FILL_AREA_STYLE ('',( #1765 ) ) ; +#5212 = ORIENTED_EDGE ( 'NONE', *, *, #2788, .T. ) ; +#5213 = ADVANCED_FACE ( 'NONE', ( #1516 ), #3564, .F. ) ; +#5214 = ORIENTED_EDGE ( 'NONE', *, *, #2416, .F. ) ; +#5215 = VERTEX_POINT ( 'NONE', #251 ) ; +#5216 = SURFACE_STYLE_FILL_AREA ( #3649 ) ; +#5217 = LINE ( 'NONE', #7228, #2177 ) ; +#5218 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2852 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4212, #296, #7031 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5219 = SURFACE_STYLE_USAGE ( .BOTH. , #6428 ) ; +#5220 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 5.842640687119285300, -1.500000000000000400 ) ) ; +#5221 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.2000000000000000100, 1.074999999999999700 ) ) ; +#5222 = ORIENTED_EDGE ( 'NONE', *, *, #1521, .F. ) ; +#5223 = ORIENTED_EDGE ( 'NONE', *, *, #2846, .T. ) ; +#5224 = STYLED_ITEM ( 'NONE', ( #524 ), #475 ) ; +#5225 = VECTOR ( 'NONE', #639, 1000.000000000000000 ) ; +#5226 = ORIENTED_EDGE ( 'NONE', *, *, #6058, .T. ) ; +#5227 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.1999999999999999800, 1.074999999999999700 ) ) ; +#5228 = SURFACE_STYLE_USAGE ( .BOTH. , #1224 ) ; +#5229 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 2.940894014733149000, 1.075000000000000000 ) ) ; +#5230 = ORIENTED_EDGE ( 'NONE', *, *, #828, .F. ) ; +#5231 = VECTOR ( 'NONE', #5903, 1000.000000000000000 ) ; +#5232 = EDGE_CURVE ( 'NONE', #4933, #4425, #3912, .T. ) ; +#5233 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#5234 = SURFACE_STYLE_FILL_AREA ( #3716 ) ; +#5235 = STYLED_ITEM ( 'NONE', ( #2389 ), #3671 ) ; +#5236 = SURFACE_STYLE_USAGE ( .BOTH. , #6290 ) ; +#5237 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, -0.0000000000000000000, -1.500000000000000000 ) ) ; +#5238 = VERTEX_POINT ( 'NONE', #1374 ) ; +#5239 = VECTOR ( 'NONE', #4920, 1000.000000000000000 ) ; +#5240 = AXIS2_PLACEMENT_3D ( 'NONE', #7293, #4988, #420 ) ; +#5241 = VECTOR ( 'NONE', #2688, 1000.000000000000000 ) ; +#5242 = PLANE ( 'NONE', #2478 ) ; +#5243 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#5244 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5245 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5246 = SURFACE_STYLE_FILL_AREA ( #6665 ) ; +#5247 = VERTEX_POINT ( 'NONE', #3613 ) ; +#5248 = LINE ( 'NONE', #2550, #818 ) ; +#5249 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5250 = VECTOR ( 'NONE', #3339, 1000.000000000000000 ) ; +#5251 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5252 = STYLED_ITEM ( 'NONE', ( #6560 ), #587 ) ; +#5253 = FILL_AREA_STYLE_COLOUR ( '', #5961 ) ; +#5254 = FACE_OUTER_BOUND ( 'NONE', #6192, .T. ) ; +#5255 = CLOSED_SHELL ( 'NONE', ( #3822, #364, #6572, #3401, #3250, #1223 ) ) ; +#5256 = VECTOR ( 'NONE', #179, 1000.000000000000000 ) ; +#5257 = FACE_OUTER_BOUND ( 'NONE', #6541, .T. ) ; +#5258 = ORIENTED_EDGE ( 'NONE', *, *, #4616, .F. ) ; +#5259 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5260 = SURFACE_STYLE_FILL_AREA ( #7084 ) ; +#5261 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.2000000000000000100, 1.074999999999999700 ) ) ; +#5262 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5263 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5264 = VECTOR ( 'NONE', #3080, 1000.000000000000000 ) ; +#5265 = ORIENTED_EDGE ( 'NONE', *, *, #5433, .F. ) ; +#5266 = VECTOR ( 'NONE', #6355, 1000.000000000000000 ) ; +#5267 = ORIENTED_EDGE ( 'NONE', *, *, #6971, .T. ) ; +#5268 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#5269 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.6999999999999999600, -1.100000000000000500 ) ) ; +#5270 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#5271 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5272 = CLOSED_SHELL ( 'NONE', ( #511, #386, #7064, #7279 ) ) ; +#5273 = EDGE_CURVE ( 'NONE', #263, #2235, #7009, .T. ) ; +#5274 = EDGE_LOOP ( 'NONE', ( #5366, #763, #3014, #5118 ) ) ; +#5275 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1045, 'distance_accuracy_value', 'NONE'); +#5276 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.2000000000000000100, 1.074999999999999700 ) ) ; +#5277 = AXIS2_PLACEMENT_3D ( 'NONE', #4286, #900, #1943 ) ; +#5278 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5279 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5280 = ORIENTED_EDGE ( 'NONE', *, *, #2614, .F. ) ; +#5281 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5282 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2970 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4066, #6401, #5259 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5283 = ORIENTED_EDGE ( 'NONE', *, *, #6079, .F. ) ; +#5284 = EDGE_CURVE ( 'NONE', #3424, #321, #2582, .T. ) ; +#5285 = EDGE_CURVE ( 'NONE', #1397, #4679, #4098, .T. ) ; +#5286 = EDGE_CURVE ( 'NONE', #1730, #6367, #996, .T. ) ; +#5287 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#5288 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5289 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5290 = EDGE_LOOP ( 'NONE', ( #4305, #2648, #7065, #6814 ) ) ; +#5291 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2091 ), #3217 ) ; +#5292 = EDGE_LOOP ( 'NONE', ( #846, #3137, #1675, #5080 ) ) ; +#5293 = AXIS2_PLACEMENT_3D ( 'NONE', #551, #5656, #1073 ) ; +#5294 = ORIENTED_EDGE ( 'NONE', *, *, #2328, .F. ) ; +#5295 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.04999999999999969700, 1.500000000000000000 ) ) ; +#5296 = FILL_AREA_STYLE_COLOUR ( '', #3312 ) ; +#5297 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.04999999999999969700, -1.500000000000000000 ) ) ; +#5298 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.05000000000000012800, -1.074999999999999700 ) ) ; +#5299 = EDGE_CURVE ( 'NONE', #3838, #2813, #3818, .T. ) ; +#5300 = ORIENTED_EDGE ( 'NONE', *, *, #5682, .F. ) ; +#5301 = ORIENTED_EDGE ( 'NONE', *, *, #1856, .T. ) ; +#5302 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.04999999999999969700, -1.500000000000000000 ) ) ; +#5303 = FACE_OUTER_BOUND ( 'NONE', #4756, .T. ) ; +#5304 = PRESENTATION_STYLE_ASSIGNMENT (( #7183 ) ) ; +#5305 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, 0.1199999999999996600 ) ) ; +#5306 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5307 = EDGE_LOOP ( 'NONE', ( #329, #3397, #5745, #2553 ) ) ; +#5308 = AXIS2_PLACEMENT_3D ( 'NONE', #4260, #282, #882 ) ; +#5309 = ORIENTED_EDGE ( 'NONE', *, *, #4375, .T. ) ; +#5310 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#5311 = VECTOR ( 'NONE', #5119, 1000.000000000000000 ) ; +#5312 = PLANE ( 'NONE', #1674 ) ; +#5313 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, 0.3799999999999998900 ) ) ; +#5314 = EDGE_LOOP ( 'NONE', ( #1608, #6441, #5491, #1005 ) ) ; +#5315 = VECTOR ( 'NONE', #4945, 1000.000000000000000 ) ; +#5316 = VECTOR ( 'NONE', #6536, 1000.000000000000000 ) ; +#5317 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#5318 = SURFACE_STYLE_USAGE ( .BOTH. , #4171 ) ; +#5319 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#5320 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654900E-016 ) ) ; +#5321 = SURFACE_STYLE_USAGE ( .BOTH. , #4839 ) ; +#5322 = ORIENTED_EDGE ( 'NONE', *, *, #4859, .F. ) ; +#5323 = CIRCLE ( 'NONE', #1634, 0.1750000000000000200 ) ; +#5324 = FILL_AREA_STYLE_COLOUR ( '', #2236 ) ; +#5325 = VECTOR ( 'NONE', #5372, 1000.000000000000000 ) ; +#5326 = EDGE_CURVE ( 'NONE', #5451, #2386, #2480, .T. ) ; +#5327 = EDGE_CURVE ( 'NONE', #7077, #6357, #4005, .T. ) ; +#5328 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, -0.8800000000000004500 ) ) ; +#5329 = EDGE_CURVE ( 'NONE', #1576, #2006, #2048, .T. ) ; +#5330 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5331 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000001600, 0.0000000000000000000, -1.075000000000000000 ) ) ; +#5332 = LINE ( 'NONE', #1638, #908 ) ; +#5333 = AXIS2_PLACEMENT_3D ( 'NONE', #2145, #957, #4437 ) ; +#5334 = PRESENTATION_STYLE_ASSIGNMENT (( #434 ) ) ; +#5335 = FILL_AREA_STYLE_COLOUR ( '', #4905 ) ; +#5336 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 2.940894014733149000, -0.7909215920651651000 ) ) ; +#5337 = FILL_AREA_STYLE_COLOUR ( '', #1174 ) ; +#5338 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 1.499999999999999600 ) ) ; +#5339 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.2000000000000000900, 1.075000000000000000 ) ) ; +#5340 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4298 ), #5741 ) ; +#5341 = ORIENTED_EDGE ( 'NONE', *, *, #609, .T. ) ; +#5342 = SURFACE_STYLE_FILL_AREA ( #4779 ) ; +#5343 = LINE ( 'NONE', #1767, #5612 ) ; +#5344 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5345 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3807 ), #3908 ) ; +#5346 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.1999999999999999800, -1.074999999999999700 ) ) ; +#5347 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.9999999999999997800 ) ) ; +#5348 = SURFACE_STYLE_FILL_AREA ( #3098 ) ; +#5349 = ADVANCED_FACE ( 'NONE', ( #576 ), #6973, .F. ) ; +#5350 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.6999999999999999600, -1.275000000000000600 ) ) ; +#5351 = ORIENTED_EDGE ( 'NONE', *, *, #2458, .T. ) ; +#5352 = VECTOR ( 'NONE', #976, 1000.000000000000000 ) ; +#5353 = SURFACE_STYLE_FILL_AREA ( #479 ) ; +#5354 = ORIENTED_EDGE ( 'NONE', *, *, #1203, .T. ) ; +#5355 = LINE ( 'NONE', #5921, #2059 ) ; +#5356 = VECTOR ( 'NONE', #4573, 1000.000000000000000 ) ; +#5357 = VECTOR ( 'NONE', #603, 1000.000000000000000 ) ; +#5358 = ORIENTED_EDGE ( 'NONE', *, *, #2086, .F. ) ; +#5359 = LINE ( 'NONE', #2346, #1084 ) ; +#5360 = CLOSED_SHELL ( 'NONE', ( #5349, #3322, #5751, #4932, #6023, #6265 ) ) ; +#5361 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2434 ) ) ; +#5362 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#5363 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 2.940894014733149000, -1.075000000000000000 ) ) ; +#5364 = VECTOR ( 'NONE', #3178, 1000.000000000000000 ) ; +#5365 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5366 = ORIENTED_EDGE ( 'NONE', *, *, #4509, .F. ) ; +#5368 = FILL_AREA_STYLE ('',( #4787 ) ) ; +#5367 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, 0.8799999999999998900 ) ) ; +#5369 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, -0.8800000000000004500 ) ) ; +#5370 = ORIENTED_EDGE ( 'NONE', *, *, #2699, .F. ) ; +#5371 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, -0.8800000000000004500 ) ) ; +#5372 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#5373 = ORIENTED_EDGE ( 'NONE', *, *, #1898, .F. ) ; +#5374 = ORIENTED_EDGE ( 'NONE', *, *, #2273, .F. ) ; +#5375 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5279, 'distance_accuracy_value', 'NONE'); +#5376 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5377 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, 1.119999999999999700 ) ) ; +#5378 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#5379 = EDGE_CURVE ( 'NONE', #1299, #4106, #4717, .T. ) ; +#5380 = ORIENTED_EDGE ( 'NONE', *, *, #6974, .F. ) ; +#5381 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3446 ), #5775 ) ; +#5382 = SURFACE_STYLE_USAGE ( .BOTH. , #397 ) ; +#5383 = ADVANCED_FACE ( 'NONE', ( #5083 ), #5886, .F. ) ; +#5384 = ORIENTED_EDGE ( 'NONE', *, *, #4704, .F. ) ; +#5385 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#5386 = AXIS2_PLACEMENT_3D ( 'NONE', #5406, #4306, #898 ) ; +#5387 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5389 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5388 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 1.119999999999999700 ) ) ; +#5390 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5391 = FILL_AREA_STYLE_COLOUR ( '', #7292 ) ; +#5392 = ORIENTED_EDGE ( 'NONE', *, *, #5857, .T. ) ; +#5393 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1205 ) ) ; +#5394 = ORIENTED_EDGE ( 'NONE', *, *, #4131, .T. ) ; +#5395 = LINE ( 'NONE', #3352, #2013 ) ; +#5396 = LINE ( 'NONE', #6576, #627 ) ; +#5397 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6940 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2079, #4301, #6078 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5398 = FILL_AREA_STYLE_COLOUR ( '', #5014 ) ; +#5399 = ORIENTED_EDGE ( 'NONE', *, *, #3590, .F. ) ; +#5400 = SURFACE_SIDE_STYLE ('',( #1782 ) ) ; +#5401 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#5402 = ORIENTED_EDGE ( 'NONE', *, *, #2891, .T. ) ; +#5403 = LINE ( 'NONE', #7003, #6300 ) ; +#5404 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1970 ), #714 ) ; +#5405 = ADVANCED_FACE ( 'NONE', ( #4086 ), #1422, .T. ) ; +#5406 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.4999999999999997800 ) ) ; +#5407 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5408 = VERTEX_POINT ( 'NONE', #1283 ) ; +#5409 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5410 = SURFACE_STYLE_FILL_AREA ( #5716 ) ; +#5411 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5412 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1441, 'distance_accuracy_value', 'NONE'); +#5413 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#5415 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5414 = FILL_AREA_STYLE_COLOUR ( '', #6131 ) ; +#5416 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5417 = MANIFOLD_SOLID_BREP ( 'LPattern4[2]', #3765 ) ; +#5418 = ORIENTED_EDGE ( 'NONE', *, *, #183, .F. ) ; +#5419 = VECTOR ( 'NONE', #2219, 1000.000000000000000 ) ; +#5420 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #127 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1582, #494, #2141 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5421 = SURFACE_SIDE_STYLE ('',( #4730 ) ) ; +#5422 = EDGE_LOOP ( 'NONE', ( #2226, #3235, #6012, #6283 ) ) ; +#5423 = ADVANCED_FACE ( 'NONE', ( #217 ), #6057, .F. ) ; +#5424 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5425 = VECTOR ( 'NONE', #3899, 1000.000000000000000 ) ; +#5426 = FILL_AREA_STYLE ('',( #2476 ) ) ; +#5427 = AXIS2_PLACEMENT_3D ( 'NONE', #5126, #2276, #3948 ) ; +#5428 = LINE ( 'NONE', #4384, #5609 ) ; +#5429 = VECTOR ( 'NONE', #4707, 1000.000000000000000 ) ; +#5430 = AXIS2_PLACEMENT_3D ( 'NONE', #6978, #2461, #5865 ) ; +#5431 = EDGE_CURVE ( 'NONE', #4647, #4235, #2575, .T. ) ; +#5432 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5433 = EDGE_CURVE ( 'NONE', #1919, #2685, #3269, .T. ) ; +#5434 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#5435 = EDGE_CURVE ( 'NONE', #5135, #3279, #1510, .T. ) ; +#5436 = DIRECTION ( 'NONE', ( 5.042800802258161100E-017, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5437 = PRESENTATION_STYLE_ASSIGNMENT (( #3387 ) ) ; +#5438 = FILL_AREA_STYLE_COLOUR ( '', #5243 ) ; +#5439 = PRESENTATION_STYLE_ASSIGNMENT (( #1481 ) ) ; +#5440 = ORIENTED_EDGE ( 'NONE', *, *, #5826, .F. ) ; +#5441 = LINE ( 'NONE', #1598, #5352 ) ; +#5442 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#5444 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5443 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5445 = VECTOR ( 'NONE', #4436, 1000.000000000000000 ) ; +#5446 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.04999999999999969700, 1.500000000000000000 ) ) ; +#5447 = FILL_AREA_STYLE ('',( #7185 ) ) ; +#5448 = CARTESIAN_POINT ( 'NONE', ( 4.336808689942013300E-016, 0.05000000000000000300, 1.120000000000000100 ) ) ; +#5449 = ADVANCED_FACE ( 'NONE', ( #6144 ), #2924, .F. ) ; +#5450 = LINE ( 'NONE', #1615, #1434 ) ; +#5451 = VERTEX_POINT ( 'NONE', #5434 ) ; +#5452 = LINE ( 'NONE', #5788, #5256 ) ; +#5453 = ORIENTED_EDGE ( 'NONE', *, *, #2085, .F. ) ; +#5454 = STYLED_ITEM ( 'NONE', ( #5951 ), #2256 ) ; +#5455 = EDGE_CURVE ( 'NONE', #321, #4425, #909, .T. ) ; +#5456 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5457 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, 0.4999999999999997800 ) ) ; +#5458 = ORIENTED_EDGE ( 'NONE', *, *, #462, .F. ) ; +#5459 = SURFACE_STYLE_FILL_AREA ( #3439 ) ; +#5460 = ORIENTED_EDGE ( 'NONE', *, *, #1949, .F. ) ; +#5461 = CYLINDRICAL_SURFACE ( 'NONE', #7179, 0.1199999999999998800 ) ; +#5462 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5463 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5275 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1045, #472, #7300 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5464 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.5000000000000002200 ) ) ; +#5465 = ORIENTED_EDGE ( 'NONE', *, *, #3441, .T. ) ; +#5466 = ORIENTED_EDGE ( 'NONE', *, *, #2612, .T. ) ; +#5467 = ADVANCED_FACE ( 'NONE', ( #1700 ), #2022, .T. ) ; +#5468 = SURFACE_STYLE_USAGE ( .BOTH. , #373 ) ; +#5469 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5470 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5471 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5472 = ORIENTED_EDGE ( 'NONE', *, *, #3539, .F. ) ; +#5473 = ORIENTED_EDGE ( 'NONE', *, *, #3747, .T. ) ; +#5474 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2258, 'distance_accuracy_value', 'NONE'); +#5475 = FILL_AREA_STYLE ('',( #5398 ) ) ; +#5476 = ORIENTED_EDGE ( 'NONE', *, *, #4326, .T. ) ; +#5477 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, 0.3799999999999998900 ) ) ; +#5478 = SURFACE_SIDE_STYLE ('',( #2477 ) ) ; +#5479 = EDGE_CURVE ( 'NONE', #6250, #5711, #5704, .T. ) ; +#5480 = EDGE_CURVE ( 'NONE', #6976, #3566, #56, .T. ) ; +#5481 = EDGE_CURVE ( 'NONE', #2359, #4417, #6226, .T. ) ; +#5482 = EDGE_LOOP ( 'NONE', ( #1334, #4285, #3843, #5214 ) ) ; +#5483 = ADVANCED_FACE ( 'NONE', ( #2205 ), #7098, .T. ) ; +#5484 = ORIENTED_EDGE ( 'NONE', *, *, #736, .T. ) ; +#5485 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3249 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5471, #3128, #2600 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5486 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5487 = FACE_OUTER_BOUND ( 'NONE', #1105, .T. ) ; +#5488 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, 0.1199999999999996600 ) ) ; +#5489 = VERTEX_POINT ( 'NONE', #3090 ) ; +#5490 = AXIS2_PLACEMENT_3D ( 'NONE', #534, #2798, #4502 ) ; +#5491 = ORIENTED_EDGE ( 'NONE', *, *, #3788, .T. ) ; +#5492 = PLANE ( 'NONE', #2742 ) ; +#5494 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5493 = SURFACE_SIDE_STYLE ('',( #4604 ) ) ; +#5495 = VECTOR ( 'NONE', #3860, 1000.000000000000000 ) ; +#5496 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#5497 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5498 = ORIENTED_EDGE ( 'NONE', *, *, #871, .T. ) ; +#5499 = VERTEX_POINT ( 'NONE', #5955 ) ; +#5500 = LINE ( 'NONE', #1658, #5593 ) ; +#5501 = VECTOR ( 'NONE', #1159, 1000.000000000000000 ) ; +#5502 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#5503 = FILL_AREA_STYLE ('',( #359 ) ) ; +#5504 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6600 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5288, #4144, #697 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5505 = VECTOR ( 'NONE', #4838, 1000.000000000000000 ) ; +#5506 = CARTESIAN_POINT ( 'NONE', ( 2.400733381932186300E-016, 0.05000000000000000300, 0.6200000000000001100 ) ) ; +#5507 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4811, 'distance_accuracy_value', 'NONE'); +#5508 = VERTEX_POINT ( 'NONE', #873 ) ; +#5509 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5510 = LINE ( 'NONE', #309, #5316 ) ; +#5511 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5513 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5512 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5514 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5515 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5516 = FILL_AREA_STYLE_COLOUR ( '', #685 ) ; +#5517 = ADVANCED_FACE ( 'NONE', ( #6756 ), #3264, .T. ) ; +#5518 = ORIENTED_EDGE ( 'NONE', *, *, #2125, .T. ) ; +#5519 = SURFACE_STYLE_FILL_AREA ( #3165 ) ; +#5520 = PRESENTATION_STYLE_ASSIGNMENT (( #1549 ) ) ; +#5521 = FACE_OUTER_BOUND ( 'NONE', #2701, .T. ) ; +#5522 = EDGE_CURVE ( 'NONE', #521, #3838, #3902, .T. ) ; +#5523 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5524 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#5525 = ORIENTED_EDGE ( 'NONE', *, *, #5577, .T. ) ; +#5526 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5527 = VECTOR ( 'NONE', #5696, 1000.000000000000000 ) ; +#5528 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5144 ) ) ; +#5529 = FACE_OUTER_BOUND ( 'NONE', #5163, .T. ) ; +#5530 = CIRCLE ( 'NONE', #5430, 0.1499999999999999700 ) ; +#5531 = AXIS2_PLACEMENT_3D ( 'NONE', #2453, #2415, #6397 ) ; +#5532 = EDGE_CURVE ( 'NONE', #1298, #158, #4446, .T. ) ; +#5533 = EDGE_LOOP ( 'NONE', ( #1210, #5484, #6512, #6122 ) ) ; +#5534 = EDGE_CURVE ( 'NONE', #684, #6762, #5877, .T. ) ; +#5535 = LINE ( 'NONE', #5778, #4013 ) ; +#5536 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, 0.1199999999999995500 ) ) ; +#5537 = EDGE_CURVE ( 'NONE', #2379, #4953, #7096, .T. ) ; +#5538 = ORIENTED_EDGE ( 'NONE', *, *, #597, .T. ) ; +#5539 = PRESENTATION_STYLE_ASSIGNMENT (( #3732 ) ) ; +#5540 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #12 ), #738 ) ; +#5541 = PRESENTATION_STYLE_ASSIGNMENT (( #7285 ) ) ; +#5542 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5543 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5544 = ORIENTED_EDGE ( 'NONE', *, *, #4324, .T. ) ; +#5546 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5545 = FILL_AREA_STYLE ('',( #5414 ) ) ; +#5547 = SURFACE_SIDE_STYLE ('',( #2479 ) ) ; +#5548 = ORIENTED_EDGE ( 'NONE', *, *, #2414, .F. ) ; +#5549 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5550 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5551 = AXIS2_PLACEMENT_3D ( 'NONE', #7237, #3915, #6188 ) ; +#5552 = VERTEX_POINT ( 'NONE', #1526 ) ; +#5553 = ORIENTED_EDGE ( 'NONE', *, *, #4323, .T. ) ; +#5554 = STYLED_ITEM ( 'NONE', ( #2450 ), #511 ) ; +#5555 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 2.940894014733149000, -0.6409215920651651900 ) ) ; +#5556 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5557 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000100, 1.074999999999999700 ) ) ; +#5558 = VERTEX_POINT ( 'NONE', #6658 ) ; +#5559 = EDGE_LOOP ( 'NONE', ( #704, #7281, #3187, #3562 ) ) ; +#5560 = ADVANCED_FACE ( 'NONE', ( #5611 ), #1059, .T. ) ; +#5561 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5562 = STYLED_ITEM ( 'NONE', ( #6323 ), #1915 ) ; +#5563 = ORIENTED_EDGE ( 'NONE', *, *, #3747, .F. ) ; +#5564 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.5000000000000002200 ) ) ; +#5565 = SURFACE_STYLE_USAGE ( .BOTH. , #470 ) ; +#5566 = SURFACE_STYLE_USAGE ( .BOTH. , #2187 ) ; +#5567 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005700E-016 ) ) ; +#5568 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -0.3800000000000004500 ) ) ; +#5569 = ORIENTED_EDGE ( 'NONE', *, *, #6703, .T. ) ; +#5570 = SURFACE_STYLE_USAGE ( .BOTH. , #6747 ) ; +#5571 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.0000000000000000000, -1.074999999999999700 ) ) ; +#5572 = ORIENTED_EDGE ( 'NONE', *, *, #6569, .F. ) ; +#5573 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005700E-016 ) ) ; +#5574 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5575 = ORIENTED_EDGE ( 'NONE', *, *, #4279, .F. ) ; +#5576 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4869 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1113, #3271, #4460 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5577 = EDGE_CURVE ( 'NONE', #42, #4132, #2033, .T. ) ; +#5578 = EDGE_CURVE ( 'NONE', #4480, #1266, #4891, .T. ) ; +#5579 = VECTOR ( 'NONE', #1976, 1000.000000000000000 ) ; +#5580 = EDGE_CURVE ( 'NONE', #3167, #4271, #5604, .T. ) ; +#5581 = ORIENTED_EDGE ( 'NONE', *, *, #1324, .F. ) ; +#5582 = AXIS2_PLACEMENT_3D ( 'NONE', #1458, #2625, #4262 ) ; +#5583 = ORIENTED_EDGE ( 'NONE', *, *, #6426, .T. ) ; +#5584 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5585 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5586 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5587 = SURFACE_SIDE_STYLE ('',( #6752 ) ) ; +#5588 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5589 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5590 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#5591 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, -0.3800000000000003400 ) ) ; +#5592 = ORIENTED_EDGE ( 'NONE', *, *, #3492, .F. ) ; +#5593 = VECTOR ( 'NONE', #6206, 1000.000000000000000 ) ; +#5594 = AXIS2_PLACEMENT_3D ( 'NONE', #5388, #5966, #301 ) ; +#5595 = ADVANCED_FACE ( 'NONE', ( #1946 ), #464, .T. ) ; +#5596 = EDGE_CURVE ( 'NONE', #4791, #1273, #6745, .T. ) ; +#5597 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5598 = SURFACE_SIDE_STYLE ('',( #2319 ) ) ; +#5599 = VERTEX_POINT ( 'NONE', #5536 ) ; +#5600 = FACE_OUTER_BOUND ( 'NONE', #5849, .T. ) ; +#5601 = PLANE ( 'NONE', #6247 ) ; +#5602 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3086 ) ) ; +#5603 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6496, 'distance_accuracy_value', 'NONE'); +#5604 = LINE ( 'NONE', #4454, #3345 ) ; +#5605 = SURFACE_SIDE_STYLE ('',( #5960 ) ) ; +#5606 = AXIS2_PLACEMENT_3D ( 'NONE', #5162, #635, #5186 ) ; +#5607 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.0000000000000000000, 1.075000000000000000 ) ) ; +#5608 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5609 = VECTOR ( 'NONE', #978, 1000.000000000000000 ) ; +#5610 = ORIENTED_EDGE ( 'NONE', *, *, #2329, .T. ) ; +#5611 = FACE_OUTER_BOUND ( 'NONE', #3294, .T. ) ; +#5612 = VECTOR ( 'NONE', #5306, 1000.000000000000000 ) ; +#5613 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5614 = FILL_AREA_STYLE_COLOUR ( '', #5134 ) ; +#5615 = SURFACE_STYLE_USAGE ( .BOTH. , #4409 ) ; +#5616 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 2.940894014733149000, 1.075000000000000000 ) ) ; +#5617 = DIRECTION ( 'NONE', ( -1.275531967630005200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5618 = FACE_OUTER_BOUND ( 'NONE', #4724, .T. ) ; +#5619 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5620 = LINE ( 'NONE', #4406, #5881 ) ; +#5621 = ORIENTED_EDGE ( 'NONE', *, *, #7035, .F. ) ; +#5622 = PLANE ( 'NONE', #847 ) ; +#5623 = SURFACE_STYLE_FILL_AREA ( #5211 ) ; +#5624 = PRESENTATION_STYLE_ASSIGNMENT (( #2148 ) ) ; +#5625 = EDGE_CURVE ( 'NONE', #2580, #11, #5790, .T. ) ; +#5626 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5627 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#5628 = FILL_AREA_STYLE ('',( #3917 ) ) ; +#5629 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5630 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4833 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3633, #6464, #4801 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5631 = VECTOR ( 'NONE', #3407, 1000.000000000000000 ) ; +#5632 = ORIENTED_EDGE ( 'NONE', *, *, #2707, .F. ) ; +#5633 = FACE_OUTER_BOUND ( 'NONE', #5290, .T. ) ; +#5634 = CYLINDRICAL_SURFACE ( 'NONE', #6168, 0.1199999999999998800 ) ; +#5635 = ORIENTED_EDGE ( 'NONE', *, *, #1188, .T. ) ; +#5636 = ADVANCED_FACE ( 'NONE', ( #1068 ), #3855, .T. ) ; +#5637 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#5638 = FACE_OUTER_BOUND ( 'NONE', #409, .T. ) ; +#5639 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.8800000000000003400 ) ) ; +#5640 = ORIENTED_EDGE ( 'NONE', *, *, #6427, .T. ) ; +#5641 = EDGE_LOOP ( 'NONE', ( #385, #4820, #7198, #5548 ) ) ; +#5642 = SURFACE_STYLE_USAGE ( .BOTH. , #5587 ) ; +#5643 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5644 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, 0.8799999999999998900 ) ) ; +#5645 = SURFACE_STYLE_USAGE ( .BOTH. , #2208 ) ; +#5646 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#5647 = VERTEX_POINT ( 'NONE', #3214 ) ; +#5648 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5649 = ORIENTED_EDGE ( 'NONE', *, *, #6811, .F. ) ; +#5650 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'DSC10 (4207393 e 01 11)', ( #6187, #5750, #4968, #5417, #4083, #3609, #1779, #2753, #1447, #3296, #7261, #174, #2304, #2069 ), #5576 ) ; +#5651 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5652 = AXIS2_PLACEMENT_3D ( 'NONE', #3528, #1313, #4128 ) ; +#5653 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#5654 = EDGE_LOOP ( 'NONE', ( #1500, #4193, #36, #5673 ) ) ; +#5655 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5656 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#5657 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654900E-016 ) ) ; +#5658 = VERTEX_POINT ( 'NONE', #3365 ) ; +#5659 = VERTEX_POINT ( 'NONE', #7195 ) ; +#5660 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.2000000000000000900, 1.075000000000000000 ) ) ; +#5661 = DIRECTION ( 'NONE', ( -3.872150616019654900E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5662 = ORIENTED_EDGE ( 'NONE', *, *, #6294, .F. ) ; +#5663 = ORIENTED_EDGE ( 'NONE', *, *, #2936, .T. ) ; +#5664 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.4999999999999997800 ) ) ; +#5665 = PLANE ( 'NONE', #4558 ) ; +#5666 = VECTOR ( 'NONE', #4581, 1000.000000000000000 ) ; +#5667 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, -0.3800000000000004500 ) ) ; +#5668 = PLANE ( 'NONE', #1732 ) ; +#5669 = EDGE_CURVE ( 'NONE', #7219, #83, #4699, .T. ) ; +#5670 = FILL_AREA_STYLE ('',( #6234 ) ) ; +#5671 = ADVANCED_FACE ( 'NONE', ( #5066 ), #2283, .T. ) ; +#5672 = VERTEX_POINT ( 'NONE', #2855 ) ; +#5673 = ORIENTED_EDGE ( 'NONE', *, *, #4912, .F. ) ; +#5674 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5675 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5676 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.6999999999999999600, -1.100000000000000500 ) ) ; +#5677 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, -0.3800000000000003400 ) ) ; +#5678 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -0.8800000000000004500 ) ) ; +#5679 = SURFACE_SIDE_STYLE ('',( #6924 ) ) ; +#5680 = ORIENTED_EDGE ( 'NONE', *, *, #6854, .F. ) ; +#5681 = EDGE_CURVE ( 'NONE', #4986, #3576, #3082, .T. ) ; +#5682 = EDGE_CURVE ( 'NONE', #1266, #5854, #3995, .T. ) ; +#5683 = EDGE_CURVE ( 'NONE', #6630, #6604, #3521, .T. ) ; +#5684 = ORIENTED_EDGE ( 'NONE', *, *, #7216, .T. ) ; +#5685 = LINE ( 'NONE', #3337, #5311 ) ; +#5686 = AXIS2_PLACEMENT_3D ( 'NONE', #4105, #747, #769 ) ; +#5687 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#5688 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5689 = VERTEX_POINT ( 'NONE', #6201 ) ; +#5690 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5691 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 2.940894014733149000, 1.075000000000000000 ) ) ; +#5692 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5693 = EDGE_CURVE ( 'NONE', #7141, #7220, #3617, .T. ) ; +#5694 = FACE_OUTER_BOUND ( 'NONE', #5654, .T. ) ; +#5695 = VECTOR ( 'NONE', #686, 1000.000000000000000 ) ; +#5696 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5697 = LINE ( 'NONE', #3075, #4345 ) ; +#5698 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#5699 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5700 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, -0.0000000000000000000, -1.500000000000000000 ) ) ; +#5701 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -1.445602896647339200E-016 ) ) ; +#5702 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5411, 'distance_accuracy_value', 'NONE'); +#5703 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5704 = LINE ( 'NONE', #3117, #3353 ) ; +#5705 = SURFACE_STYLE_FILL_AREA ( #4256 ) ; +#5706 = PRESENTATION_STYLE_ASSIGNMENT (( #7288 ) ) ; +#5707 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3142 ), #2023 ) ; +#5708 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #756, 'distance_accuracy_value', 'NONE'); +#5709 = ADVANCED_FACE ( 'NONE', ( #3717 ), #6763, .F. ) ; +#5710 = VECTOR ( 'NONE', #7058, 1000.000000000000000 ) ; +#5711 = VERTEX_POINT ( 'NONE', #5687 ) ; +#5712 = CIRCLE ( 'NONE', #5308, 0.1199999999999998800 ) ; +#5713 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#5714 = LINE ( 'NONE', #1790, #6663 ) ; +#5715 = PRESENTATION_STYLE_ASSIGNMENT (( #4064 ) ) ; +#5716 = FILL_AREA_STYLE ('',( #2800 ) ) ; +#5717 = VECTOR ( 'NONE', #7069, 1000.000000000000000 ) ; +#5718 = VECTOR ( 'NONE', #6081, 1000.000000000000000 ) ; +#5719 = ORIENTED_EDGE ( 'NONE', *, *, #1281, .T. ) ; +#5720 = LINE ( 'NONE', #4467, #2675 ) ; +#5721 = VECTOR ( 'NONE', #687, 1000.000000000000000 ) ; +#5722 = EDGE_LOOP ( 'NONE', ( #63, #4939 ) ) ; +#5723 = LINE ( 'NONE', #3002, #2231 ) ; +#5724 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5725 = DIRECTION ( 'NONE', ( -1.275531967630005200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5726 = VECTOR ( 'NONE', #1196, 1000.000000000000000 ) ; +#5727 = LINE ( 'NONE', #6751, #1262 ) ; +#5728 = EDGE_CURVE ( 'NONE', #3066, #5658, #6220, .T. ) ; +#5729 = EDGE_LOOP ( 'NONE', ( #4584, #5882, #1464, #7045 ) ) ; +#5730 = EDGE_CURVE ( 'NONE', #5215, #1298, #477, .T. ) ; +#5731 = EDGE_CURVE ( 'NONE', #5647, #4461, #2472, .T. ) ; +#5732 = SURFACE_STYLE_FILL_AREA ( #5208 ) ; +#5733 = ORIENTED_EDGE ( 'NONE', *, *, #2519, .T. ) ; +#5734 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#5735 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#5736 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5737 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5109 ) ) ; +#5738 = ORIENTED_EDGE ( 'NONE', *, *, #2980, .F. ) ; +#5739 = ORIENTED_EDGE ( 'NONE', *, *, #3161, .T. ) ; +#5740 = FACE_OUTER_BOUND ( 'NONE', #3087, .T. ) ; +#5741 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #975 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1962, #5948, #3056 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5742 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, -0.8800000000000003400 ) ) ; +#5743 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5744 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.0000000000000000000, -1.500000000000000000 ) ) ; +#5745 = ORIENTED_EDGE ( 'NONE', *, *, #6797, .T. ) ; +#5746 = ORIENTED_EDGE ( 'NONE', *, *, #917, .F. ) ; +#5747 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, -0.0000000000000000000, -1.075000000000000200 ) ) ; +#5748 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#5749 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#5750 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude3[2]', #852 ) ; +#5751 = ADVANCED_FACE ( 'NONE', ( #1156 ), #5131, .F. ) ; +#5752 = EDGE_LOOP ( 'NONE', ( #3473, #3479, #2030, #5145 ) ) ; +#5753 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#5754 = ORIENTED_EDGE ( 'NONE', *, *, #3213, .T. ) ; +#5755 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6909 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5992, #276, #928 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5756 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#5757 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#5758 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, -0.8800000000000004500 ) ) ; +#5759 = VERTEX_POINT ( 'NONE', #6303 ) ; +#5760 = CYLINDRICAL_SURFACE ( 'NONE', #3523, 0.1750000000000000200 ) ; +#5761 = VERTEX_POINT ( 'NONE', #559 ) ; +#5762 = EDGE_LOOP ( 'NONE', ( #3120, #6892, #2332, #6475, #5204, #6953, #1075, #7070, #4400, #2940, #6073, #5209, #2710, #408, #2448, #5458, #4162, #2128, #2502, #3247, #2092, #6722, #526, #1829, #4341, #5105, #2608, #2521 ) ) ; +#5763 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5764 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5765 = SURFACE_SIDE_STYLE ('',( #66 ) ) ; +#5766 = LINE ( 'NONE', #4230, #5579 ) ; +#5767 = SURFACE_STYLE_FILL_AREA ( #2730 ) ; +#5768 = EDGE_LOOP ( 'NONE', ( #2991, #4206, #7244, #3226 ) ) ; +#5769 = ORIENTED_EDGE ( 'NONE', *, *, #3441, .F. ) ; +#5770 = FILL_AREA_STYLE ('',( #713 ) ) ; +#5771 = ORIENTED_EDGE ( 'NONE', *, *, #3590, .T. ) ; +#5772 = EDGE_CURVE ( 'NONE', #6063, #3181, #2559, .T. ) ; +#5773 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#5774 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#5775 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6986 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2680, #6047, #6631 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5776 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5777 = VERTEX_POINT ( 'NONE', #13 ) ; +#5778 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, 0.3799999999999998900 ) ) ; +#5779 = FILL_AREA_STYLE_COLOUR ( '', #5245 ) ; +#5780 = ADVANCED_FACE ( 'NONE', ( #1412 ), #4101, .T. ) ; +#5781 = EDGE_LOOP ( 'NONE', ( #5399, #496, #3151, #1957 ) ) ; +#5782 = SURFACE_STYLE_FILL_AREA ( #3349 ) ; +#5783 = LINE ( 'NONE', #2923, #1502 ) ; +#5784 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4767 ), #4620 ) ; +#5785 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 2.940894014733149000, -0.6409215920651651900 ) ) ; +#5786 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5787 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5788 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.0000000000000000000, 1.075000000000000000 ) ) ; +#5789 = ORIENTED_EDGE ( 'NONE', *, *, #3746, .T. ) ; +#5790 = LINE ( 'NONE', #3311, #4798 ) ; +#5791 = PRESENTATION_STYLE_ASSIGNMENT (( #7132 ) ) ; +#5792 = FACE_OUTER_BOUND ( 'NONE', #4299, .T. ) ; +#5793 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5794 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #341 ) ) ; +#5795 = SURFACE_SIDE_STYLE ('',( #2576 ) ) ; +#5796 = PRESENTATION_STYLE_ASSIGNMENT (( #4315 ) ) ; +#5797 = VECTOR ( 'NONE', #6284, 1000.000000000000000 ) ; +#5798 = LINE ( 'NONE', #2792, #2930 ) ; +#5799 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5800 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#5801 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, -1.120000000000000100 ) ) ; +#5802 = LINE ( 'NONE', #3242, #2661 ) ; +#5803 = ORIENTED_EDGE ( 'NONE', *, *, #4281, .T. ) ; +#5804 = VECTOR ( 'NONE', #6409, 1000.000000000000000 ) ; +#5805 = LINE ( 'NONE', #1115, #5250 ) ; +#5806 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5807 = LINE ( 'NONE', #5555, #3191 ) ; +#5808 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#5809 = VECTOR ( 'NONE', #5147, 1000.000000000000000 ) ; +#5810 = EDGE_LOOP ( 'NONE', ( #4816, #6968, #1436, #1650 ) ) ; +#5811 = VECTOR ( 'NONE', #5787, 1000.000000000000000 ) ; +#5812 = ORIENTED_EDGE ( 'NONE', *, *, #2844, .T. ) ; +#5813 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6558 ), #903 ) ; +#5814 = VECTOR ( 'NONE', #3812, 1000.000000000000000 ) ; +#5815 = FILL_AREA_STYLE_COLOUR ( '', #4911 ) ; +#5816 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6098 ) ) ; +#5817 = VERTEX_POINT ( 'NONE', #5227 ) ; +#5818 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5819 = VECTOR ( 'NONE', #4079, 1000.000000000000000 ) ; +#5820 = EDGE_LOOP ( 'NONE', ( #6880, #712 ) ) ; +#5821 = VECTOR ( 'NONE', #3840, 1000.000000000000000 ) ; +#5822 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654900E-016 ) ) ; +#5823 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5050 ) ) ; +#5824 = EDGE_CURVE ( 'NONE', #6306, #263, #3432, .T. ) ; +#5825 = EDGE_CURVE ( 'NONE', #6535, #5508, #1593, .T. ) ; +#5826 = EDGE_CURVE ( 'NONE', #4308, #1730, #4431, .T. ) ; +#5827 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, 0.6199999999999995500 ) ) ; +#5828 = EDGE_LOOP ( 'NONE', ( #110, #265, #6802, #6138, #147, #1918, #2877, #5226, #3363, #2677, #4254, #439, #2323, #5130, #5938, #676, #484, #1621, #2443, #358 ) ) ; +#5829 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5830 = ORIENTED_EDGE ( 'NONE', *, *, #3647, .T. ) ; +#5831 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5832 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#5833 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4190 ), #2467 ) ; +#5834 = VERTEX_POINT ( 'NONE', #1784 ) ; +#5835 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5836 = PLANE ( 'NONE', #5168 ) ; +#5837 = ORIENTED_EDGE ( 'NONE', *, *, #3494, .T. ) ; +#5838 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4313, 'distance_accuracy_value', 'NONE'); +#5839 = ORIENTED_EDGE ( 'NONE', *, *, #6339, .F. ) ; +#5840 = EDGE_CURVE ( 'NONE', #4226, #1968, #5871, .T. ) ; +#5841 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5842 = ORIENTED_EDGE ( 'NONE', *, *, #2459, .T. ) ; +#5843 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, -0.5000000000000002200 ) ) ; +#5844 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.8000000000000003800, 1.499999999999999600 ) ) ; +#5845 = ORIENTED_EDGE ( 'NONE', *, *, #3070, .F. ) ; +#5846 = ORIENTED_EDGE ( 'NONE', *, *, #5669, .F. ) ; +#5847 = STYLED_ITEM ( 'NONE', ( #6628 ), #346 ) ; +#5848 = FACE_OUTER_BOUND ( 'NONE', #7008, .T. ) ; +#5849 = EDGE_LOOP ( 'NONE', ( #674, #5322, #5839, #7194 ) ) ; +#5850 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 1.119999999999999400 ) ) ; +#5851 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5852 = SURFACE_SIDE_STYLE ('',( #584 ) ) ; +#5853 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5854 = VERTEX_POINT ( 'NONE', #176 ) ; +#5855 = SURFACE_STYLE_FILL_AREA ( #594 ) ; +#5856 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#5857 = EDGE_CURVE ( 'NONE', #1927, #6610, #4343, .T. ) ; +#5858 = EDGE_CURVE ( 'NONE', #1181, #3279, #7265, .T. ) ; +#5859 = EDGE_CURVE ( 'NONE', #6607, #5659, #5323, .T. ) ; +#5860 = PLANE ( 'NONE', #4133 ) ; +#5861 = EDGE_LOOP ( 'NONE', ( #895, #2769, #5283, #4563 ) ) ; +#5862 = LINE ( 'NONE', #3009, #6985 ) ; +#5863 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000400, 0.05000000000000000300, -1.500000000000000400 ) ) ; +#5864 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6707 ), #3501 ) ; +#5865 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5866 = PLANE ( 'NONE', #6602 ) ; +#5867 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, 0.3799999999999998900 ) ) ; +#5868 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#5869 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#5870 = EDGE_LOOP ( 'NONE', ( #5280, #6617, #4889, #2536 ) ) ; +#5871 = LINE ( 'NONE', #6921, #292 ) ; +#5872 = STYLED_ITEM ( 'NONE', ( #6842 ), #5750 ) ; +#5873 = LINE ( 'NONE', #2028, #6316 ) ; +#5874 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#5875 = ORIENTED_EDGE ( 'NONE', *, *, #7175, .T. ) ; +#5876 = VECTOR ( 'NONE', #3196, 1000.000000000000000 ) ; +#5877 = LINE ( 'NONE', #1038, #5241 ) ; +#5878 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5879 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, 0.6199999999999996600 ) ) ; +#5880 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5881 = VECTOR ( 'NONE', #4312, 1000.000000000000000 ) ; +#5882 = ORIENTED_EDGE ( 'NONE', *, *, #2248, .T. ) ; +#5883 = VECTOR ( 'NONE', #2974, 1000.000000000000000 ) ; +#5884 = PLANE ( 'NONE', #100 ) ; +#5885 = LINE ( 'NONE', #1584, #4357 ) ; +#5886 = PLANE ( 'NONE', #5531 ) ; +#5887 = AXIS2_PLACEMENT_3D ( 'NONE', #2938, #1854, #4738 ) ; +#5888 = LINE ( 'NONE', #2739, #221 ) ; +#5889 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, -0.6200000000000001100 ) ) ; +#5890 = ORIENTED_EDGE ( 'NONE', *, *, #4521, .F. ) ; +#5891 = LINE ( 'NONE', #2727, #3454 ) ; +#5892 = PRESENTATION_STYLE_ASSIGNMENT (( #1066 ) ) ; +#5893 = VERTEX_POINT ( 'NONE', #1206 ) ; +#5894 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5895 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, -0.8800000000000003400 ) ) ; +#5896 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, 0.9999999999999997800 ) ) ; +#5897 = VECTOR ( 'NONE', #1072, 1000.000000000000000 ) ; +#5898 = EDGE_LOOP ( 'NONE', ( #1515, #5460, #915, #441 ) ) ; +#5899 = VECTOR ( 'NONE', #6890, 1000.000000000000000 ) ; +#5900 = VERTEX_POINT ( 'NONE', #2966 ) ; +#5901 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5902 = FILL_AREA_STYLE_COLOUR ( '', #6739 ) ; +#5903 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#5904 = FILL_AREA_STYLE_COLOUR ( '', #5432 ) ; +#5905 = ORIENTED_EDGE ( 'NONE', *, *, #141, .T. ) ; +#5906 = EDGE_CURVE ( 'NONE', #3410, #3145, #5159, .T. ) ; +#5907 = ORIENTED_EDGE ( 'NONE', *, *, #2979, .F. ) ; +#5908 = FACE_OUTER_BOUND ( 'NONE', #6693, .T. ) ; +#5909 = SURFACE_SIDE_STYLE ('',( #71 ) ) ; +#5910 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5144 ), #6285 ) ; +#5911 = PLANE ( 'NONE', #3132 ) ; +#5912 = VERTEX_POINT ( 'NONE', #6390 ) ; +#5913 = VERTEX_POINT ( 'NONE', #6963 ) ; +#5914 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#5915 = ADVANCED_FACE ( 'NONE', ( #468 ), #6946, .F. ) ; +#5916 = EDGE_CURVE ( 'NONE', #1495, #3923, #5783, .T. ) ; +#5917 = EDGE_CURVE ( 'NONE', #4226, #3410, #6315, .T. ) ; +#5918 = EDGE_CURVE ( 'NONE', #5689, #304, #4792, .T. ) ; +#5919 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5920 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, 0.8799999999999998900 ) ) ; +#5921 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000400, 0.05000000000000000300, 1.500000000000000000 ) ) ; +#5922 = FILL_AREA_STYLE_COLOUR ( '', #2737 ) ; +#5923 = ORIENTED_EDGE ( 'NONE', *, *, #5918, .F. ) ; +#5924 = ORIENTED_EDGE ( 'NONE', *, *, #6377, .F. ) ; +#5925 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4078 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #482, #5006, #2154 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#5926 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4969, 'distance_accuracy_value', 'NONE'); +#5927 = ORIENTED_EDGE ( 'NONE', *, *, #2890, .T. ) ; +#5928 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, -1.000000000000000200 ) ) ; +#5929 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5930 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 2.940894014733149000, 1.075000000000000000 ) ) ; +#5931 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5554 ) ) ; +#5932 = ORIENTED_EDGE ( 'NONE', *, *, #3260, .F. ) ; +#5933 = ORIENTED_EDGE ( 'NONE', *, *, #2788, .F. ) ; +#5934 = LINE ( 'NONE', #4919, #3416 ) ; +#5935 = PRESENTATION_STYLE_ASSIGNMENT (( #471 ) ) ; +#5936 = FILL_AREA_STYLE ('',( #5438 ) ) ; +#5937 = ORIENTED_EDGE ( 'NONE', *, *, #6809, .F. ) ; +#5938 = ORIENTED_EDGE ( 'NONE', *, *, #369, .F. ) ; +#5939 = STYLED_ITEM ( 'NONE', ( #2922 ), #1947 ) ; +#5940 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#5941 = ORIENTED_EDGE ( 'NONE', *, *, #4958, .F. ) ; +#5943 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#5942 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5944 = SURFACE_SIDE_STYLE ('',( #2836 ) ) ; +#5945 = PLANE ( 'NONE', #5057 ) ; +#5946 = EDGE_LOOP ( 'NONE', ( #2279, #3670, #476, #4574 ) ) ; +#5947 = CARTESIAN_POINT ( 'NONE', ( -1.371196865202255700E-016, 0.05000000000000000300, 1.075000000000000000 ) ) ; +#5948 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5949 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.0000000000000000000, 1.074999999999999700 ) ) ; +#5950 = AXIS2_PLACEMENT_3D ( 'NONE', #6958, #1861, #3550 ) ; +#5951 = PRESENTATION_STYLE_ASSIGNMENT (( #1407 ) ) ; +#5952 = VECTOR ( 'NONE', #5763, 1000.000000000000000 ) ; +#5953 = EDGE_CURVE ( 'NONE', #4130, #5893, #2466, .T. ) ; +#5954 = EDGE_CURVE ( 'NONE', #3279, #3784, #3254, .T. ) ; +#5955 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.0000000000000000000, 1.075000000000000000 ) ) ; +#5956 = EDGE_CURVE ( 'NONE', #7116, #6721, #3612, .T. ) ; +#5957 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5958 = VERTEX_POINT ( 'NONE', #150 ) ; +#5959 = VECTOR ( 'NONE', #519, 1000.000000000000000 ) ; +#5960 = SURFACE_STYLE_FILL_AREA ( #7270 ) ; +#5961 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5962 = AXIS2_PLACEMENT_3D ( 'NONE', #6898, #4577, #5150 ) ; +#5963 = VECTOR ( 'NONE', #6649, 1000.000000000000000 ) ; +#5964 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#5965 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#5967 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5966 = DIRECTION ( 'NONE', ( 3.872150616019654400E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#5968 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#5969 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5970 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#5971 = PRESENTATION_STYLE_ASSIGNMENT (( #402 ) ) ; +#5972 = AXIS2_PLACEMENT_3D ( 'NONE', #5928, #1891, #2447 ) ; +#5973 = ADVANCED_FACE ( 'NONE', ( #123 ), #861, .F. ) ; +#5974 = ORIENTED_EDGE ( 'NONE', *, *, #4142, .F. ) ; +#5975 = VECTOR ( 'NONE', #2269, 1000.000000000000000 ) ; +#5976 = VECTOR ( 'NONE', #4645, 1000.000000000000000 ) ; +#5977 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6119 ), #6950 ) ; +#5978 = PLANE ( 'NONE', #6071 ) ; +#5979 = EDGE_CURVE ( 'NONE', #4480, #877, #4608, .T. ) ; +#5980 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5981 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.6999999999999999600, -1.275000000000000600 ) ) ; +#5982 = ORIENTED_EDGE ( 'NONE', *, *, #649, .T. ) ; +#5983 = VECTOR ( 'NONE', #2785, 1000.000000000000000 ) ; +#5984 = SURFACE_STYLE_FILL_AREA ( #6775 ) ; +#5985 = VECTOR ( 'NONE', #7262, 1000.000000000000000 ) ; +#5986 = ORIENTED_EDGE ( 'NONE', *, *, #1999, .F. ) ; +#5987 = PRESENTATION_STYLE_ASSIGNMENT (( #1893 ) ) ; +#5988 = EDGE_LOOP ( 'NONE', ( #6838, #7086, #869, #5621 ) ) ; +#5989 = AXIS2_PLACEMENT_3D ( 'NONE', #5753, #1144, #4589 ) ; +#5990 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005700E-016 ) ) ; +#5991 = LINE ( 'NONE', #2771, #7030 ) ; +#5992 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#5993 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5224 ) ) ; +#5994 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5995 = ORIENTED_EDGE ( 'NONE', *, *, #2077, .T. ) ; +#5996 = SURFACE_SIDE_STYLE ('',( #4426 ) ) ; +#5997 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#5998 = FACE_OUTER_BOUND ( 'NONE', #683, .T. ) ; +#5999 = ORIENTED_EDGE ( 'NONE', *, *, #547, .T. ) ; +#6000 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#6001 = PLANE ( 'NONE', #3028 ) ; +#6002 = EDGE_LOOP ( 'NONE', ( #5300, #1965, #1348, #1926 ) ) ; +#6003 = ORIENTED_EDGE ( 'NONE', *, *, #2844, .F. ) ; +#6004 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.6999999999999999600, -1.100000000000000500 ) ) ; +#6005 = EDGE_CURVE ( 'NONE', #2064, #4669, #6839, .T. ) ; +#6006 = EDGE_CURVE ( 'NONE', #1989, #6393, #1232, .T. ) ; +#6007 = ORIENTED_EDGE ( 'NONE', *, *, #2271, .F. ) ; +#6008 = ADVANCED_FACE ( 'NONE', ( #1940 ), #3987, .T. ) ; +#6009 = AXIS2_PLACEMENT_3D ( 'NONE', #5401, #863, #6563 ) ; +#6010 = ORIENTED_EDGE ( 'NONE', *, *, #1623, .F. ) ; +#6011 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.6199999999999996600 ) ) ; +#6012 = ORIENTED_EDGE ( 'NONE', *, *, #6104, .F. ) ; +#6013 = AXIS2_PLACEMENT_3D ( 'NONE', #5749, #2318, #1213 ) ; +#6014 = VECTOR ( 'NONE', #4721, 1000.000000000000000 ) ; +#6015 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.6664761515876239700, -0.8800000000000004500 ) ) ; +#6017 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, -0.6200000000000001100 ) ) ; +#6016 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, -0.1200000000000000900 ) ) ; +#6018 = ORIENTED_EDGE ( 'NONE', *, *, #4751, .T. ) ; +#6019 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#6020 = SURFACE_STYLE_USAGE ( .BOTH. , #7085 ) ; +#6021 = ORIENTED_EDGE ( 'NONE', *, *, #2087, .T. ) ; +#6022 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6023 = ADVANCED_FACE ( 'NONE', ( #2821 ), #1393, .T. ) ; +#6024 = ORIENTED_EDGE ( 'NONE', *, *, #1146, .T. ) ; +#6025 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6026 = ORIENTED_EDGE ( 'NONE', *, *, #453, .F. ) ; +#6027 = VECTOR ( 'NONE', #2549, 1000.000000000000000 ) ; +#6028 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1970 ) ) ; +#6029 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6030 = ORIENTED_EDGE ( 'NONE', *, *, #2603, .T. ) ; +#6031 = FACE_OUTER_BOUND ( 'NONE', #1386, .T. ) ; +#6032 = SURFACE_STYLE_USAGE ( .BOTH. , #3047 ) ; +#6033 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.445602896647339200E-016 ) ) ; +#6035 = FILL_AREA_STYLE_COLOUR ( '', #5585 ) ; +#6034 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#6036 = DIRECTION ( 'NONE', ( 1.275531967630005700E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6037 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 0.3799999999999998900 ) ) ; +#6038 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#6039 = PRESENTATION_STYLE_ASSIGNMENT (( #932 ) ) ; +#6040 = FACE_OUTER_BOUND ( 'NONE', #2617, .T. ) ; +#6041 = ADVANCED_FACE ( 'NONE', ( #1317 ), #6438, .F. ) ; +#6042 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#6043 = EDGE_CURVE ( 'NONE', #6901, #4372, #1692, .T. ) ; +#6044 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6045 = FACE_OUTER_BOUND ( 'NONE', #3714, .T. ) ; +#6046 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.8000000000000000400, -1.100000000000000500 ) ) ; +#6047 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6048 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4595 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4, #5072, #1672 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6049 = VECTOR ( 'NONE', #4896, 1000.000000000000000 ) ; +#6050 = ORIENTED_EDGE ( 'NONE', *, *, #1473, .F. ) ; +#6051 = VECTOR ( 'NONE', #979, 1000.000000000000000 ) ; +#6052 = FACE_OUTER_BOUND ( 'NONE', #6593, .T. ) ; +#6053 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2746 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2595, #349, #904 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6054 = EDGE_CURVE ( 'NONE', #4923, #6875, #3890, .T. ) ; +#6055 = CYLINDRICAL_SURFACE ( 'NONE', #1021, 0.1199999999999998800 ) ; +#6056 = EDGE_CURVE ( 'NONE', #4679, #6610, #5510, .T. ) ; +#6057 = PLANE ( 'NONE', #4759 ) ; +#6058 = EDGE_CURVE ( 'NONE', #254, #6367, #5862, .T. ) ; +#6059 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 2.940894014733149000, 1.074999999999999700 ) ) ; +#6060 = VECTOR ( 'NONE', #3477, 1000.000000000000000 ) ; +#6061 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #3955, 'distance_accuracy_value', 'NONE'); +#6062 = STYLED_ITEM ( 'NONE', ( #3921 ), #4961 ) ; +#6063 = VERTEX_POINT ( 'NONE', #5295 ) ; +#6064 = VECTOR ( 'NONE', #116, 1000.000000000000000 ) ; +#6065 = FILL_AREA_STYLE ('',( #4335 ) ) ; +#6067 = FILL_AREA_STYLE_COLOUR ( '', #3689 ) ; +#6066 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6068 = LINE ( 'NONE', #405, #1969 ) ; +#6069 = DIRECTION ( 'NONE', ( 1.275531967630005700E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6070 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6071 = AXIS2_PLACEMENT_3D ( 'NONE', #4835, #4771, #859 ) ; +#6072 = LINE ( 'NONE', #2495, #6861 ) ; +#6073 = ORIENTED_EDGE ( 'NONE', *, *, #6141, .F. ) ; +#6074 = CIRCLE ( 'NONE', #7242, 0.1199999999999998800 ) ; +#6075 = LINE ( 'NONE', #4035, #6596 ) ; +#6076 = ORIENTED_EDGE ( 'NONE', *, *, #1620, .F. ) ; +#6077 = SURFACE_STYLE_FILL_AREA ( #7061 ) ; +#6078 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6079 = EDGE_CURVE ( 'NONE', #6784, #6375, #1933, .T. ) ; +#6080 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, -0.1200000000000000900 ) ) ; +#6081 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#6082 = LINE ( 'NONE', #4610, #2681 ) ; +#6083 = EDGE_LOOP ( 'NONE', ( #2860, #1811, #1945, #2338 ) ) ; +#6084 = VERTEX_POINT ( 'NONE', #3558 ) ; +#6085 = ADVANCED_FACE ( 'NONE', ( #5148 ), #245, .T. ) ; +#6086 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6087 = AXIS2_PLACEMENT_3D ( 'NONE', #6640, #2667, #6624 ) ; +#6088 = EDGE_LOOP ( 'NONE', ( #2971, #3309, #6676, #3568 ) ) ; +#6089 = ORIENTED_EDGE ( 'NONE', *, *, #734, .T. ) ; +#6090 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6092 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6091 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6093 = PLANE ( 'NONE', #1980 ) ; +#6094 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654900E-016 ) ) ; +#6095 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -0.1200000000000000900 ) ) ; +#6096 = ORIENTED_EDGE ( 'NONE', *, *, #1623, .T. ) ; +#6097 = ORIENTED_EDGE ( 'NONE', *, *, #6425, .F. ) ; +#6098 = STYLED_ITEM ( 'NONE', ( #1217 ), #2853 ) ; +#6099 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, -0.6200000000000001100 ) ) ; +#6100 = VERTEX_POINT ( 'NONE', #3577 ) ; +#6101 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#6102 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.04999999999999969700, -1.500000000000000000 ) ) ; +#6103 = EDGE_CURVE ( 'NONE', #4562, #4795, #3602, .T. ) ; +#6104 = EDGE_CURVE ( 'NONE', #6374, #950, #4979, .T. ) ; +#6105 = EDGE_CURVE ( 'NONE', #4425, #321, #5059, .T. ) ; +#6106 = ORIENTED_EDGE ( 'NONE', *, *, #2103, .F. ) ; +#6107 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5203 ) ) ; +#6108 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6109 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#6110 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#6111 = ORIENTED_EDGE ( 'NONE', *, *, #4140, .F. ) ; +#6112 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1679 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7190, #2679, #987 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6113 = ORIENTED_EDGE ( 'NONE', *, *, #6748, .F. ) ; +#6114 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6116 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.2000000000000000100, -1.074999999999999700 ) ) ; +#6115 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6117 = VECTOR ( 'NONE', #2163, 1000.000000000000000 ) ; +#6118 = CARTESIAN_POINT ( 'NONE', ( 1.371196865202256400E-016, 0.05000000000000000300, -1.075000000000000000 ) ) ; +#6119 = STYLED_ITEM ( 'NONE', ( #1403 ), #2291 ) ; +#6120 = ADVANCED_FACE ( 'NONE', ( #3163 ), #3157, .F. ) ; +#6121 = ORIENTED_EDGE ( 'NONE', *, *, #5052, .F. ) ; +#6122 = ORIENTED_EDGE ( 'NONE', *, *, #972, .F. ) ; +#6123 = ORIENTED_EDGE ( 'NONE', *, *, #5379, .F. ) ; +#6124 = PRESENTATION_STYLE_ASSIGNMENT (( #761 ) ) ; +#6125 = VECTOR ( 'NONE', #5967, 1000.000000000000000 ) ; +#6126 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6127 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6128 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#6129 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #7099 ), #6878 ) ; +#6130 = ORIENTED_EDGE ( 'NONE', *, *, #3061, .T. ) ; +#6131 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#6132 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#6133 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6134 = SURFACE_SIDE_STYLE ('',( #5246 ) ) ; +#6135 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6136 = FILL_AREA_STYLE_COLOUR ( '', #5065 ) ; +#6137 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.8799999999999998900 ) ) ; +#6138 = ORIENTED_EDGE ( 'NONE', *, *, #3667, .T. ) ; +#6139 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6140 = CIRCLE ( 'NONE', #512, 0.1199999999999998800 ) ; +#6141 = EDGE_CURVE ( 'NONE', #4465, #3710, #2195, .T. ) ; +#6142 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6143 = VERTEX_POINT ( 'NONE', #3179 ) ; +#6144 = FACE_OUTER_BOUND ( 'NONE', #3938, .T. ) ; +#6145 = VECTOR ( 'NONE', #681, 1000.000000000000000 ) ; +#6146 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5969, 'distance_accuracy_value', 'NONE'); +#6147 = ADVANCED_FACE ( 'NONE', ( #4783 ), #7165, .F. ) ; +#6148 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#6149 = VERTEX_POINT ( 'NONE', #6101 ) ; +#6150 = FACE_OUTER_BOUND ( 'NONE', #1002, .T. ) ; +#6151 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#6152 = AXIS2_PLACEMENT_3D ( 'NONE', #1280, #2340, #4016 ) ; +#6153 = VECTOR ( 'NONE', #3406, 1000.000000000000000 ) ; +#6154 = VECTOR ( 'NONE', #2174, 1000.000000000000000 ) ; +#6155 = ORIENTED_EDGE ( 'NONE', *, *, #970, .T. ) ; +#6156 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6157 = VECTOR ( 'NONE', #3482, 1000.000000000000000 ) ; +#6158 = VERTEX_POINT ( 'NONE', #4904 ) ; +#6159 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6160 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, 1.119999999999999700 ) ) ; +#6161 = FACE_OUTER_BOUND ( 'NONE', #5729, .T. ) ; +#6162 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 0.8799999999999998900 ) ) ; +#6163 = AXIS2_PLACEMENT_3D ( 'NONE', #2469, #244, #4246 ) ; +#6164 = PLANE ( 'NONE', #677 ) ; +#6165 = LINE ( 'NONE', #4268, #1617 ) ; +#6166 = VERTEX_POINT ( 'NONE', #2032 ) ; +#6167 = CLOSED_SHELL ( 'NONE', ( #5517, #4541, #2809, #3156, #6884, #3606, #3744, #2212, #2616, #4302, #10, #4347, #868, #946, #4499, #4018, #7140, #5467, #5780, #2704, #545, #4855, #6813, #2560, #3291, #1077, #1488, #2601, #6462, #6590, #2147, #5112, #7094, #2886, #4866, #6520, #1048, #655, #4276, #5483 ) ) ; +#6168 = AXIS2_PLACEMENT_3D ( 'NONE', #5032, #2751, #3313 ) ; +#6169 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, -0.8800000000000003400 ) ) ; +#6170 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6171 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#6172 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6173 = ORIENTED_EDGE ( 'NONE', *, *, #1202, .T. ) ; +#6174 = EDGE_LOOP ( 'NONE', ( #2784, #1508, #1292, #4716 ) ) ; +#6175 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6176 = ORIENTED_EDGE ( 'NONE', *, *, #6704, .T. ) ; +#6177 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6178 = PLANE ( 'NONE', #5045 ) ; +#6179 = PLANE ( 'NONE', #3517 ) ; +#6180 = AXIS2_PLACEMENT_3D ( 'NONE', #881, #1329, #3100 ) ; +#6181 = ADVANCED_FACE ( 'NONE', ( #6040 ), #1685, .F. ) ; +#6182 = EDGE_LOOP ( 'NONE', ( #6349, #2690, #1563, #4361 ) ) ; +#6183 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6184 = VECTOR ( 'NONE', #177, 1000.000000000000000 ) ; +#6185 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6845 ), #7305 ) ; +#6186 = ORIENTED_EDGE ( 'NONE', *, *, #4704, .T. ) ; +#6187 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude3[1]', #5360 ) ; +#6188 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -3.872150616019654900E-016 ) ) ; +#6189 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#6190 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#6191 = FILL_AREA_STYLE_COLOUR ( '', #5344 ) ; +#6192 = EDGE_LOOP ( 'NONE', ( #4168, #1310, #181, #5719 ) ) ; +#6193 = AXIS2_PLACEMENT_3D ( 'NONE', #3654, #1981, #7106 ) ; +#6194 = EDGE_CURVE ( 'NONE', #2133, #634, #4199, .T. ) ; +#6195 = EDGE_CURVE ( 'NONE', #1823, #7015, #1435, .T. ) ; +#6196 = VECTOR ( 'NONE', #1127, 1000.000000000000000 ) ; +#6197 = EDGE_CURVE ( 'NONE', #2531, #6754, #2682, .T. ) ; +#6198 = VERTEX_POINT ( 'NONE', #5477 ) ; +#6199 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #977 ), #374 ) ; +#6200 = ORIENTED_EDGE ( 'NONE', *, *, #314, .T. ) ; +#6201 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, -0.3800000000000004500 ) ) ; +#6202 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#6203 = LINE ( 'NONE', #1377, #3148 ) ; +#6204 = VECTOR ( 'NONE', #4259, 1000.000000000000000 ) ; +#6205 = STYLED_ITEM ( 'NONE', ( #897 ), #6181 ) ; +#6206 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6207 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6208 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#6209 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6210 = ORIENTED_EDGE ( 'NONE', *, *, #4938, .T. ) ; +#6211 = PRESENTATION_STYLE_ASSIGNMENT (( #5091 ) ) ; +#6212 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #159 ) ) ; +#6213 = EDGE_CURVE ( 'NONE', #2244, #7219, #1352, .T. ) ; +#6214 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6215 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005500E-016 ) ) ; +#6216 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6217 = STYLED_ITEM ( 'NONE', ( #2674 ), #1753 ) ; +#6218 = ADVANCED_FACE ( 'NONE', ( #4459 ), #1036, .F. ) ; +#6219 = ORIENTED_EDGE ( 'NONE', *, *, #5284, .T. ) ; +#6220 = LINE ( 'NONE', #81, #5425 ) ; +#6221 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1545 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1756, #5764, #125 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6222 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.6200000000000001100 ) ) ; +#6223 = LINE ( 'NONE', #6609, #4530 ) ; +#6224 = ORIENTED_EDGE ( 'NONE', *, *, #5480, .F. ) ; +#6225 = ORIENTED_EDGE ( 'NONE', *, *, #2834, .T. ) ; +#6226 = LINE ( 'NONE', #2538, #4805 ) ; +#6227 = SURFACE_STYLE_FILL_AREA ( #7080 ) ; +#6228 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6229 = FILL_AREA_STYLE_COLOUR ( '', #5409 ) ; +#6230 = VECTOR ( 'NONE', #5574, 1000.000000000000000 ) ; +#6231 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6232 = CARTESIAN_POINT ( 'NONE', ( -1.371196865202255700E-016, 0.05000000000000000300, 1.075000000000000000 ) ) ; +#6233 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#6234 = FILL_AREA_STYLE_COLOUR ( '', #495 ) ; +#6235 = ORIENTED_EDGE ( 'NONE', *, *, #3260, .T. ) ; +#6236 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, -0.1200000000000000900 ) ) ; +#6237 = VECTOR ( 'NONE', #5270, 1000.000000000000000 ) ; +#6238 = EDGE_CURVE ( 'NONE', #6630, #1257, #154, .T. ) ; +#6239 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#6240 = EDGE_CURVE ( 'NONE', #2490, #6587, #921, .T. ) ; +#6241 = EDGE_CURVE ( 'NONE', #4096, #2075, #491, .T. ) ; +#6242 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 0.2000000000000000900, -0.6409215920651651900 ) ) ; +#6243 = DIRECTION ( 'NONE', ( -1.275531967630005200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6244 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#6245 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6246 = SURFACE_SIDE_STYLE ('',( #4802 ) ) ; +#6247 = AXIS2_PLACEMENT_3D ( 'NONE', #6806, #6753, #5007 ) ; +#6248 = ORIENTED_EDGE ( 'NONE', *, *, #6517, .F. ) ; +#6249 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#6250 = VERTEX_POINT ( 'NONE', #3284 ) ; +#6251 = VECTOR ( 'NONE', #212, 1000.000000000000000 ) ; +#6252 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1318, 'distance_accuracy_value', 'NONE'); +#6253 = AXIS2_PLACEMENT_3D ( 'NONE', #3414, #3433, #2232 ) ; +#6254 = LINE ( 'NONE', #3229, #3927 ) ; +#6255 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#6256 = VERTEX_POINT ( 'NONE', #6700 ) ; +#6257 = FACE_OUTER_BOUND ( 'NONE', #5762, .T. ) ; +#6258 = ORIENTED_EDGE ( 'NONE', *, *, #2653, .T. ) ; +#6259 = FACE_OUTER_BOUND ( 'NONE', #5482, .T. ) ; +#6260 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#6261 = SURFACE_STYLE_USAGE ( .BOTH. , #1689 ) ; +#6262 = ORIENTED_EDGE ( 'NONE', *, *, #4607, .F. ) ; +#6263 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6264 = ORIENTED_EDGE ( 'NONE', *, *, #142, .F. ) ; +#6265 = ADVANCED_FACE ( 'NONE', ( #5254 ), #7286, .T. ) ; +#6266 = PLANE ( 'NONE', #5989 ) ; +#6267 = AXIS2_PLACEMENT_3D ( 'NONE', #3068, #3723, #3615 ) ; +#6268 = ORIENTED_EDGE ( 'NONE', *, *, #4703, .F. ) ; +#6269 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.8800000000000003400 ) ) ; +#6270 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, -0.6200000000000001100 ) ) ; +#6271 = CLOSED_SHELL ( 'NONE', ( #6301, #3896, #5973, #6218, #1522, #5405 ) ) ; +#6272 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6273 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, 0.1199999999999995500 ) ) ; +#6274 = ORIENTED_EDGE ( 'NONE', *, *, #3894, .T. ) ; +#6275 = ORIENTED_EDGE ( 'NONE', *, *, #4762, .T. ) ; +#6276 = ORIENTED_EDGE ( 'NONE', *, *, #3303, .F. ) ; +#6277 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6278 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6279 = EDGE_CURVE ( 'NONE', #25, #6511, #3832, .T. ) ; +#6280 = SURFACE_SIDE_STYLE ('',( #3095 ) ) ; +#6281 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5929, 'distance_accuracy_value', 'NONE'); +#6282 = ORIENTED_EDGE ( 'NONE', *, *, #367, .F. ) ; +#6283 = ORIENTED_EDGE ( 'NONE', *, *, #4045, .T. ) ; +#6284 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6285 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #967 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #6025, #2606, #989 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6286 = VECTOR ( 'NONE', #3674, 1000.000000000000000 ) ; +#6287 = SURFACE_STYLE_FILL_AREA ( #3195 ) ; +#6288 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6289 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#6290 = SURFACE_SIDE_STYLE ('',( #4373 ) ) ; +#6291 = SURFACE_STYLE_USAGE ( .BOTH. , #2300 ) ; +#6292 = ORIENTED_EDGE ( 'NONE', *, *, #2172, .T. ) ; +#6293 = AXIS2_PLACEMENT_3D ( 'NONE', #1117, #1690, #6719 ) ; +#6294 = EDGE_CURVE ( 'NONE', #7116, #342, #5727, .T. ) ; +#6295 = ORIENTED_EDGE ( 'NONE', *, *, #3492, .T. ) ; +#6296 = EDGE_CURVE ( 'NONE', #6063, #3145, #6510, .T. ) ; +#6297 = EDGE_CURVE ( 'NONE', #4235, #6955, #6768, .T. ) ; +#6298 = VERTEX_POINT ( 'NONE', #7264 ) ; +#6299 = LINE ( 'NONE', #926, #1841 ) ; +#6300 = VECTOR ( 'NONE', #3220, 1000.000000000000000 ) ; +#6301 = ADVANCED_FACE ( 'NONE', ( #7025 ), #456, .F. ) ; +#6302 = AXIS2_PLACEMENT_3D ( 'NONE', #7023, #6969, #3563 ) ; +#6303 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 0.0000000000000000000, 1.074999999999999700 ) ) ; +#6304 = PLANE ( 'NONE', #5606 ) ; +#6305 = PLANE ( 'NONE', #4936 ) ; +#6306 = VERTEX_POINT ( 'NONE', #3 ) ; +#6307 = SURFACE_STYLE_FILL_AREA ( #290 ) ; +#6308 = AXIS2_PLACEMENT_3D ( 'NONE', #2194, #5071, #3889 ) ; +#6309 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, -0.3800000000000003400 ) ) ; +#6310 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6311 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.2000000000000000100, -1.074999999999999700 ) ) ; +#6312 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4117 ) ) ; +#6313 = ORIENTED_EDGE ( 'NONE', *, *, #6297, .F. ) ; +#6314 = CYLINDRICAL_SURFACE ( 'NONE', #3512, 0.1199999999999998800 ) ; +#6315 = LINE ( 'NONE', #1296, #4251 ) ; +#6316 = VECTOR ( 'NONE', #835, 1000.000000000000000 ) ; +#6317 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6318 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6319 = LINE ( 'NONE', #2196, #4524 ) ; +#6320 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#6321 = LINE ( 'NONE', #6729, #62 ) ; +#6322 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6217 ), #2876 ) ; +#6323 = PRESENTATION_STYLE_ASSIGNMENT (( #2646 ) ) ; +#6324 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.1999999999999999800, -1.074999999999999700 ) ) ; +#6325 = FACE_OUTER_BOUND ( 'NONE', #4149, .T. ) ; +#6326 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6327 = ORIENTED_EDGE ( 'NONE', *, *, #6657, .T. ) ; +#6328 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#6329 = ORIENTED_EDGE ( 'NONE', *, *, #1717, .F. ) ; +#6330 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.8799999999999998900 ) ) ; +#6331 = AXIS2_PLACEMENT_3D ( 'NONE', #720, #4593, #5831 ) ; +#6332 = VECTOR ( 'NONE', #5021, 1000.000000000000000 ) ; +#6333 = FILL_AREA_STYLE_COLOUR ( '', #6406 ) ; +#6334 = ADVANCED_FACE ( 'NONE', ( #2939 ), #4495, .T. ) ; +#6335 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -1.120000000000000100 ) ) ; +#6336 = LINE ( 'NONE', #4493, #241 ) ; +#6337 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #4910 ) ) ; +#6338 = VECTOR ( 'NONE', #810, 1000.000000000000000 ) ; +#6339 = EDGE_CURVE ( 'NONE', #5247, #3315, #6592, .T. ) ; +#6340 = ORIENTED_EDGE ( 'NONE', *, *, #4665, .T. ) ; +#6341 = EDGE_CURVE ( 'NONE', #1989, #3834, #4829, .T. ) ; +#6342 = EDGE_CURVE ( 'NONE', #4308, #1078, #837, .T. ) ; +#6343 = ORIENTED_EDGE ( 'NONE', *, *, #1770, .F. ) ; +#6344 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, 1.119999999999999400 ) ) ; +#6345 = FILL_AREA_STYLE_COLOUR ( '', #5012 ) ; +#6346 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 0.2000000000000000900, -0.6409215920651651900 ) ) ; +#6347 = AXIS2_PLACEMENT_3D ( 'NONE', #7159, #937, #4318 ) ; +#6348 = ORIENTED_EDGE ( 'NONE', *, *, #3854, .F. ) ; +#6349 = ORIENTED_EDGE ( 'NONE', *, *, #2317, .F. ) ; +#6350 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6351 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, 0.1199999999999996600 ) ) ; +#6352 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#6353 = ORIENTED_EDGE ( 'NONE', *, *, #2653, .F. ) ; +#6354 = VERTEX_POINT ( 'NONE', #6270 ) ; +#6355 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6356 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.6697073557013986100, -1.074999999999999700 ) ) ; +#6357 = VERTEX_POINT ( 'NONE', #2873 ) ; +#6358 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6359 = AXIS2_PLACEMENT_3D ( 'NONE', #4118, #255, #6975 ) ; +#6360 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 5.842640687119285300, -1.500000000000000400 ) ) ; +#6361 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6362 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, -0.0000000000000000000, -1.500000000000000000 ) ) ; +#6363 = EDGE_LOOP ( 'NONE', ( #6389, #5023, #7143, #2640 ) ) ; +#6364 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5224 ), #4693 ) ; +#6365 = FACE_OUTER_BOUND ( 'NONE', #2906, .T. ) ; +#6366 = ORIENTED_EDGE ( 'NONE', *, *, #3118, .T. ) ; +#6367 = VERTEX_POINT ( 'NONE', #3350 ) ; +#6368 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, -2.168404344971008900E-016 ) ) ; +#6369 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#6370 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6371 = LINE ( 'NONE', #5506, #3493 ) ; +#6372 = VECTOR ( 'NONE', #2799, 1000.000000000000000 ) ; +#6373 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2326, 'distance_accuracy_value', 'NONE'); +#6374 = VERTEX_POINT ( 'NONE', #2841 ) ; +#6375 = VERTEX_POINT ( 'NONE', #3386 ) ; +#6376 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, -2.168404344971008900E-016 ) ) ; +#6377 = EDGE_CURVE ( 'NONE', #202, #4588, #5089, .T. ) ; +#6378 = LINE ( 'NONE', #7100, #111 ) ; +#6379 = EDGE_CURVE ( 'NONE', #4271, #2899, #317, .T. ) ; +#6380 = LINE ( 'NONE', #2524, #2975 ) ; +#6381 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.2000000000000000900, 1.074999999999999700 ) ) ; +#6382 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #316 ) ) ; +#6383 = ORIENTED_EDGE ( 'NONE', *, *, #7124, .T. ) ; +#6384 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.04999999999999999600, 1.119999999999999400 ) ) ; +#6385 = VECTOR ( 'NONE', #1504, 1000.000000000000000 ) ; +#6386 = SURFACE_STYLE_FILL_AREA ( #1341 ) ; +#6387 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.8000000000000003800, 1.499999999999999600 ) ) ; +#6388 = AXIS2_PLACEMENT_3D ( 'NONE', #1354, #4755, #2484 ) ; +#6389 = ORIENTED_EDGE ( 'NONE', *, *, #6659, .F. ) ; +#6390 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -0.6200000000000001100 ) ) ; +#6391 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, 1.119999999999999400 ) ) ; +#6392 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6393 = VERTEX_POINT ( 'NONE', #1696 ) ; +#6394 = LINE ( 'NONE', #2207, #3344 ) ; +#6395 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.120000000000000100 ) ) ; +#6396 = FACE_OUTER_BOUND ( 'NONE', #688, .T. ) ; +#6397 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6398 = VECTOR ( 'NONE', #1022, 1000.000000000000000 ) ; +#6399 = LINE ( 'NONE', #5350, #5717 ) ; +#6400 = VECTOR ( 'NONE', #1240, 1000.000000000000000 ) ; +#6401 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6402 = PLANE ( 'NONE', #944 ) ; +#6403 = FILL_AREA_STYLE ('',( #1332 ) ) ; +#6404 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5424, 'distance_accuracy_value', 'NONE'); +#6405 = ORIENTED_EDGE ( 'NONE', *, *, #2412, .T. ) ; +#6406 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#6407 = VECTOR ( 'NONE', #6159, 1000.000000000000000 ) ; +#6408 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, -0.1200000000000000900 ) ) ; +#6409 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6411 = LINE ( 'NONE', #2935, #4734 ) ; +#6410 = PLANE ( 'NONE', #5686 ) ; +#6412 = ORIENTED_EDGE ( 'NONE', *, *, #6891, .T. ) ; +#6413 = CIRCLE ( 'NONE', #5013, 0.1199999999999998800 ) ; +#6414 = ORIENTED_EDGE ( 'NONE', *, *, #160, .F. ) ; +#6415 = LINE ( 'NONE', #4146, #7117 ) ; +#6416 = EDGE_CURVE ( 'NONE', #1204, #6298, #6868, .T. ) ; +#6417 = VERTEX_POINT ( 'NONE', #4550 ) ; +#6418 = SURFACE_SIDE_STYLE ('',( #5342 ) ) ; +#6419 = VECTOR ( 'NONE', #4606, 1000.000000000000000 ) ; +#6420 = ORIENTED_EDGE ( 'NONE', *, *, #2368, .F. ) ; +#6421 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, -0.3800000000000003400 ) ) ; +#6422 = PRESENTATION_STYLE_ASSIGNMENT (( #5236 ) ) ; +#6423 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -0.6200000000000001100 ) ) ; +#6424 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6565 ) ) ; +#6425 = EDGE_CURVE ( 'NONE', #4588, #2379, #4638, .T. ) ; +#6426 = EDGE_CURVE ( 'NONE', #3743, #2090, #3286, .T. ) ; +#6427 = EDGE_CURVE ( 'NONE', #3019, #4923, #1619, .T. ) ; +#6428 = SURFACE_SIDE_STYLE ('',( #6767 ) ) ; +#6429 = VERTEX_POINT ( 'NONE', #1150 ) ; +#6430 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6431 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -1.120000000000000100 ) ) ; +#6432 = VERTEX_POINT ( 'NONE', #4516 ) ; +#6433 = PLANE ( 'NONE', #4658 ) ; +#6434 = AXIS2_PLACEMENT_3D ( 'NONE', #3011, #6990, #4174 ) ; +#6435 = ORIENTED_EDGE ( 'NONE', *, *, #1255, .T. ) ; +#6436 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5412 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1441, #411, #7142 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6437 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6438 = PLANE ( 'NONE', #1533 ) ; +#6439 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 2.940894014733149000, -1.075000000000000000 ) ) ; +#6440 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6441 = ORIENTED_EDGE ( 'NONE', *, *, #5683, .T. ) ; +#6442 = AXIS2_PLACEMENT_3D ( 'NONE', #3325, #1092, #2249 ) ; +#6443 = ORIENTED_EDGE ( 'NONE', *, *, #3789, .F. ) ; +#6444 = EDGE_CURVE ( 'NONE', #1495, #1365, #4555, .T. ) ; +#6445 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#6446 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 0.9999999999999997800 ) ) ; +#6447 = VERTEX_POINT ( 'NONE', #6289 ) ; +#6448 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6449 = EDGE_LOOP ( 'NONE', ( #4664, #2535, #1864, #786 ) ) ; +#6450 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5939 ) ) ; +#6451 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 1.499999999999999600 ) ) ; +#6452 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 0.05000000000000000300, 1.074999999999999700 ) ) ; +#6453 = SURFACE_SIDE_STYLE ('',( #2847 ) ) ; +#6454 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6455 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6456 = ORIENTED_EDGE ( 'NONE', *, *, #6043, .T. ) ; +#6457 = EDGE_LOOP ( 'NONE', ( #7234, #5754, #826, #5015 ) ) ; +#6458 = LINE ( 'NONE', #6059, #2892 ) ; +#6459 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5262, 'distance_accuracy_value', 'NONE'); +#6460 = EDGE_LOOP ( 'NONE', ( #1735, #5553, #3692, #4639, #6888, #253, #90, #2423, #3554, #3331, #3402, #6111, #4918, #4316, #981, #6264, #433, #1018, #3029, #7152, #452, #2623, #4533, #4439, #6682, #5932, #7046, #4599, #4217, #1295 ) ) ; +#6461 = SURFACE_STYLE_USAGE ( .BOTH. , #5400 ) ; +#6462 = ADVANCED_FACE ( 'NONE', ( #5188 ), #5048, .T. ) ; +#6463 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6464 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6465 = ORIENTED_EDGE ( 'NONE', *, *, #3984, .T. ) ; +#6466 = AXIS2_PLACEMENT_3D ( 'NONE', #6421, #228, #2541 ) ; +#6467 = EDGE_LOOP ( 'NONE', ( #6807, #3936, #6992, #6383 ) ) ; +#6468 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5818, 'distance_accuracy_value', 'NONE'); +#6469 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.0000000000000000000, -0.1200000000000000900 ) ) ; +#6470 = EDGE_CURVE ( 'NONE', #5777, #3743, #2650, .T. ) ; +#6471 = EDGE_CURVE ( 'NONE', #5247, #845, #1853, .T. ) ; +#6472 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6473 = EDGE_CURVE ( 'NONE', #6535, #4011, #935, .T. ) ; +#6474 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#6475 = ORIENTED_EDGE ( 'NONE', *, *, #6934, .T. ) ; +#6476 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6477 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #665 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2441, #5289, #3003 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6478 = PLANE ( 'NONE', #2366 ) ; +#6479 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6480 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6481 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6482 = LINE ( 'NONE', #6718, #1941 ) ; +#6483 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #159 ), #3763 ) ; +#6484 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6485 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6486 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6487 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, 0.4999999999999997800 ) ) ; +#6488 = FACE_OUTER_BOUND ( 'NONE', #3004, .T. ) ; +#6489 = PRESENTATION_STYLE_ASSIGNMENT (( #193 ) ) ; +#6490 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#6491 = ORIENTED_EDGE ( 'NONE', *, *, #7074, .T. ) ; +#6492 = VECTOR ( 'NONE', #7039, 1000.000000000000000 ) ; +#6493 = VECTOR ( 'NONE', #4040, 1000.000000000000000 ) ; +#6494 = FACE_OUTER_BOUND ( 'NONE', #4740, .T. ) ; +#6495 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 0.2000000000000000900, 1.075000000000000000 ) ) ; +#6496 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6497 = VECTOR ( 'NONE', #4444, 1000.000000000000000 ) ; +#6498 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6499 = ORIENTED_EDGE ( 'NONE', *, *, #971, .T. ) ; +#6500 = CIRCLE ( 'NONE', #4778, 0.1199999999999998800 ) ; +#6501 = ORIENTED_EDGE ( 'NONE', *, *, #1314, .F. ) ; +#6502 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, -0.1200000000000000900 ) ) ; +#6503 = SURFACE_SIDE_STYLE ('',( #982 ) ) ; +#6504 = VECTOR ( 'NONE', #6094, 1000.000000000000000 ) ; +#6505 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6506 = PLANE ( 'NONE', #1228 ) ; +#6507 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6508 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1952, 'distance_accuracy_value', 'NONE'); +#6509 = LINE ( 'NONE', #5026, #1808 ) ; +#6510 = LINE ( 'NONE', #4983, #4104 ) ; +#6511 = VERTEX_POINT ( 'NONE', #338 ) ; +#6512 = ORIENTED_EDGE ( 'NONE', *, *, #5197, .T. ) ; +#6513 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.6664761515876239700, 0.6199999999999996600 ) ) ; +#6514 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, -0.6200000000000001100 ) ) ; +#6515 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005700E-016 ) ) ; +#6516 = ORIENTED_EDGE ( 'NONE', *, *, #2248, .F. ) ; +#6517 = EDGE_CURVE ( 'NONE', #6084, #4484, #2756, .T. ) ; +#6518 = EDGE_LOOP ( 'NONE', ( #6933, #907, #82, #6003 ) ) ; +#6519 = LINE ( 'NONE', #4466, #3932 ) ; +#6520 = ADVANCED_FACE ( 'NONE', ( #3379 ), #5978, .T. ) ; +#6521 = AXIS2_PLACEMENT_3D ( 'NONE', #2599, #3804, #1541 ) ; +#6522 = FILL_AREA_STYLE_COLOUR ( '', #2537 ) ; +#6523 = ORIENTED_EDGE ( 'NONE', *, *, #2103, .T. ) ; +#6524 = EDGE_LOOP ( 'NONE', ( #2900, #1241, #2139, #7063 ) ) ; +#6525 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6526 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3853 ) ) ; +#6527 = SURFACE_SIDE_STYLE ('',( #1591 ) ) ; +#6528 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6529 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6530 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6531 = ORIENTED_EDGE ( 'NONE', *, *, #4662, .F. ) ; +#6532 = AXIS2_PLACEMENT_3D ( 'NONE', #5856, #2482, #3017 ) ; +#6533 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6534 = ADVANCED_FACE ( 'NONE', ( #4470 ), #3690, .F. ) ; +#6535 = VERTEX_POINT ( 'NONE', #3109 ) ; +#6536 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6537 = SURFACE_STYLE_USAGE ( .BOTH. , #1993 ) ; +#6538 = VECTOR ( 'NONE', #4625, 1000.000000000000000 ) ; +#6539 = EDGE_LOOP ( 'NONE', ( #4951, #6713, #5995, #6936 ) ) ; +#6540 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1863 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3507, #4056, #6867 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6541 = EDGE_LOOP ( 'NONE', ( #17, #5927, #4543, #2911 ) ) ; +#6542 = ORIENTED_EDGE ( 'NONE', *, *, #3645, .T. ) ; +#6543 = VECTOR ( 'NONE', #4993, 1000.000000000000000 ) ; +#6544 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.0000000000000000000, -1.075000000000000000 ) ) ; +#6545 = PLANE ( 'NONE', #207 ) ; +#6546 = ORIENTED_EDGE ( 'NONE', *, *, #6195, .F. ) ; +#6547 = VERTEX_POINT ( 'NONE', #5346 ) ; +#6548 = SURFACE_STYLE_USAGE ( .BOTH. , #2568 ) ; +#6550 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6549 = FILL_AREA_STYLE ('',( #1455 ) ) ; +#6551 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#6552 = VECTOR ( 'NONE', #1686, 1000.000000000000000 ) ; +#6553 = VERTEX_POINT ( 'NONE', #1934 ) ; +#6554 = PLANE ( 'NONE', #6521 ) ; +#6555 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.4999999999999997800 ) ) ; +#6556 = ADVANCED_FACE ( 'NONE', ( #5638 ), #307, .F. ) ; +#6557 = ORIENTED_EDGE ( 'NONE', *, *, #2368, .T. ) ; +#6558 = STYLED_ITEM ( 'NONE', ( #113 ), #80 ) ; +#6559 = LINE ( 'NONE', #1636, #5055 ) ; +#6560 = PRESENTATION_STYLE_ASSIGNMENT (( #3057 ) ) ; +#6561 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6562 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6563 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6564 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5507 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4811, #1401, #5957 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6565 = STYLED_ITEM ( 'NONE', ( #7007 ), #7170 ) ; +#6566 = EDGE_CURVE ( 'NONE', #2083, #5958, #3465, .T. ) ; +#6567 = EDGE_CURVE ( 'NONE', #757, #247, #4111, .T. ) ; +#6568 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6569 = EDGE_CURVE ( 'NONE', #2182, #6875, #4840, .T. ) ; +#6570 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6571 = ORIENTED_EDGE ( 'NONE', *, *, #1728, .T. ) ; +#6572 = ADVANCED_FACE ( 'NONE', ( #3842 ), #7089, .F. ) ; +#6573 = FILL_AREA_STYLE_COLOUR ( '', #7268 ) ; +#6574 = CIRCLE ( 'NONE', #1302, 0.1199999999999998800 ) ; +#6575 = AXIS2_PLACEMENT_3D ( 'NONE', #6095, #4995, #4930 ) ; +#6576 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, 0.3799999999999998900 ) ) ; +#6577 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6578 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, 0.6199999999999995500 ) ) ; +#6579 = PLANE ( 'NONE', #779 ) ; +#6580 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5872 ), #787 ) ; +#6581 = ORIENTED_EDGE ( 'NONE', *, *, #1373, .T. ) ; +#6582 = FACE_OUTER_BOUND ( 'NONE', #6711, .T. ) ; +#6583 = VECTOR ( 'NONE', #4203, 1000.000000000000000 ) ; +#6584 = VECTOR ( 'NONE', #3892, 1000.000000000000000 ) ; +#6585 = AXIS2_PLACEMENT_3D ( 'NONE', #7227, #3243, #954 ) ; +#6586 = EDGE_CURVE ( 'NONE', #624, #5761, #4028, .T. ) ; +#6587 = VERTEX_POINT ( 'NONE', #2530 ) ; +#6588 = FACE_OUTER_BOUND ( 'NONE', #3762, .T. ) ; +#6589 = FACE_OUTER_BOUND ( 'NONE', #670, .T. ) ; +#6590 = ADVANCED_FACE ( 'NONE', ( #7294 ), #1990, .T. ) ; +#6591 = VECTOR ( 'NONE', #5940, 1000.000000000000000 ) ; +#6592 = LINE ( 'NONE', #2816, #5631 ) ; +#6593 = EDGE_LOOP ( 'NONE', ( #5472, #347, #4322, #4474 ) ) ; +#6594 = FILL_AREA_STYLE_COLOUR ( '', #562 ) ; +#6595 = FACE_OUTER_BOUND ( 'NONE', #3203, .T. ) ; +#6596 = VECTOR ( 'NONE', #663, 1000.000000000000000 ) ; +#6597 = ORIENTED_EDGE ( 'NONE', *, *, #4326, .F. ) ; +#6598 = STYLED_ITEM ( 'NONE', ( #3616 ), #2061 ) ; +#6599 = VECTOR ( 'NONE', #4714, 1000.000000000000000 ) ; +#6600 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5288, 'distance_accuracy_value', 'NONE'); +#6601 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6602 = AXIS2_PLACEMENT_3D ( 'NONE', #4851, #2439, #781 ) ; +#6603 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.04999999999999999600, -0.1200000000000000900 ) ) ; +#6604 = VERTEX_POINT ( 'NONE', #1890 ) ; +#6605 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6606 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 2.940894014733149000, -1.075000000000000000 ) ) ; +#6607 = VERTEX_POINT ( 'NONE', #2445 ) ; +#6608 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000100, 1.074999999999999700 ) ) ; +#6609 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, 0.8799999999999998900 ) ) ; +#6610 = VERTEX_POINT ( 'NONE', #7048 ) ; +#6611 = ORIENTED_EDGE ( 'NONE', *, *, #6644, .F. ) ; +#6612 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6613 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#6614 = EDGE_CURVE ( 'NONE', #3261, #6917, #3553, .T. ) ; +#6615 = EDGE_CURVE ( 'NONE', #867, #3239, #2767, .T. ) ; +#6616 = EDGE_CURVE ( 'NONE', #4320, #602, #5099, .T. ) ; +#6617 = ORIENTED_EDGE ( 'NONE', *, *, #274, .T. ) ; +#6618 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4360 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4027, #2948, #4071 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6619 = ORIENTED_EDGE ( 'NONE', *, *, #4571, .F. ) ; +#6620 = EDGE_LOOP ( 'NONE', ( #939, #1821, #353, #7257 ) ) ; +#6621 = PLANE ( 'NONE', #294 ) ; +#6622 = FILL_AREA_STYLE ('',( #7153 ) ) ; +#6623 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6624 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6625 = SURFACE_SIDE_STYLE ('',( #3015 ) ) ; +#6626 = ADVANCED_FACE ( 'NONE', ( #4646 ), #890, .T. ) ; +#6627 = EDGE_LOOP ( 'NONE', ( #788, #4191, #1138, #3929 ) ) ; +#6628 = PRESENTATION_STYLE_ASSIGNMENT (( #2259 ) ) ; +#6629 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, 0.6199999999999996600 ) ) ; +#6630 = VERTEX_POINT ( 'NONE', #7189 ) ; +#6631 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6632 = ORIENTED_EDGE ( 'NONE', *, *, #1858, .F. ) ; +#6633 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3185 ), #5755 ) ; +#6634 = ORIENTED_EDGE ( 'NONE', *, *, #2893, .T. ) ; +#6635 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#6636 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.6697073557013986100, -1.074999999999999700 ) ) ; +#6637 = ORIENTED_EDGE ( 'NONE', *, *, #5532, .F. ) ; +#6638 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6639 = PLANE ( 'NONE', #5196 ) ; +#6640 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#6641 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.0000000000000000000, 0.9999999999999997800 ) ) ; +#6642 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.05000000000000012800, 1.074999999999999700 ) ) ; +#6643 = ORIENTED_EDGE ( 'NONE', *, *, #1282, .F. ) ; +#6644 = EDGE_CURVE ( 'NONE', #4775, #6354, #1979, .T. ) ; +#6645 = ORIENTED_EDGE ( 'NONE', *, *, #6339, .T. ) ; +#6646 = VECTOR ( 'NONE', #2252, 1000.000000000000000 ) ; +#6647 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6648 = VECTOR ( 'NONE', #102, 1000.000000000000000 ) ; +#6649 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6650 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5235 ) ) ; +#6651 = PRESENTATION_STYLE_ASSIGNMENT (( #4240 ) ) ; +#6652 = ADVANCED_FACE ( 'NONE', ( #3653 ), #432, .F. ) ; +#6653 = ORIENTED_EDGE ( 'NONE', *, *, #5435, .F. ) ; +#6654 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#6655 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3853 ), #4233 ) ; +#6656 = EDGE_CURVE ( 'NONE', #634, #4130, #1444, .T. ) ; +#6657 = EDGE_CURVE ( 'NONE', #3131, #7113, #4922, .T. ) ; +#6658 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.04999999999999999600, 0.3799999999999998900 ) ) ; +#6659 = EDGE_CURVE ( 'NONE', #1285, #4669, #6254, .T. ) ; +#6660 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6661 = ORIENTED_EDGE ( 'NONE', *, *, #775, .T. ) ; +#6662 = LINE ( 'NONE', #2525, #995 ) ; +#6663 = VECTOR ( 'NONE', #5773, 1000.000000000000000 ) ; +#6664 = LINE ( 'NONE', #6829, #1251 ) ; +#6665 = FILL_AREA_STYLE ('',( #3833 ) ) ; +#6667 = SURFACE_SIDE_STYLE ('',( #5767 ) ) ; +#6666 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#6668 = LINE ( 'NONE', #1964, #5173 ) ; +#6669 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6670 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.6199999999999996600 ) ) ; +#6671 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6672 = EDGE_LOOP ( 'NONE', ( #2881, #3637, #5640, #3556 ) ) ; +#6673 = AXIS2_PLACEMENT_3D ( 'NONE', #1009, #1567, #6170 ) ; +#6674 = VERTEX_POINT ( 'NONE', #5502 ) ; +#6675 = PRESENTATION_STYLE_ASSIGNMENT (( #4689 ) ) ; +#6676 = ORIENTED_EDGE ( 'NONE', *, *, #5199, .T. ) ; +#6677 = AXIS2_PLACEMENT_3D ( 'NONE', #7259, #5674, #6139 ) ; +#6678 = FILL_AREA_STYLE ('',( #1592 ) ) ; +#6679 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 2.940894014733149000, 1.075000000000000000 ) ) ; +#6680 = LINE ( 'NONE', #74, #5356 ) ; +#6681 = VECTOR ( 'NONE', #5573, 1000.000000000000000 ) ; +#6682 = ORIENTED_EDGE ( 'NONE', *, *, #2936, .F. ) ; +#6683 = CLOSED_SHELL ( 'NONE', ( #115, #6008, #1644, #5423, #6779, #5671 ) ) ; +#6684 = CIRCLE ( 'NONE', #3346, 0.1199999999999998800 ) ; +#6685 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1410, 'distance_accuracy_value', 'NONE'); +#6686 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5939 ), #7057 ) ; +#6687 = ORIENTED_EDGE ( 'NONE', *, *, #48, .T. ) ; +#6688 = ORIENTED_EDGE ( 'NONE', *, *, #2458, .F. ) ; +#6689 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 0.2000000000000000900, -1.075000000000000000 ) ) ; +#6690 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.9999999999999997800 ) ) ; +#6691 = FILL_AREA_STYLE_COLOUR ( '', #6239 ) ; +#6692 = PLANE ( 'NONE', #5333 ) ; +#6693 = EDGE_LOOP ( 'NONE', ( #956, #6874, #4390, #2397 ) ) ; +#6694 = ORIENTED_EDGE ( 'NONE', *, *, #2380, .T. ) ; +#6695 = ADVANCED_FACE ( 'NONE', ( #2594 ), #1512, .F. ) ; +#6696 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6697 = AXIS2_PLACEMENT_3D ( 'NONE', #3119, #322, #4888 ) ; +#6698 = PLANE ( 'NONE', #5551 ) ; +#6699 = ORIENTED_EDGE ( 'NONE', *, *, #4810, .F. ) ; +#6700 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#6701 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, 0.8799999999999998900 ) ) ; +#6702 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #4910 ), #1768 ) ; +#6703 = EDGE_CURVE ( 'NONE', #4225, #5900, #3293, .T. ) ; +#6704 = EDGE_CURVE ( 'NONE', #1469, #657, #1813, .T. ) ; +#6705 = EDGE_CURVE ( 'NONE', #1470, #2813, #6165, .T. ) ; +#6706 = ORIENTED_EDGE ( 'NONE', *, *, #5956, .F. ) ; +#6707 = STYLED_ITEM ( 'NONE', ( #5437 ), #3977 ) ; +#6708 = VECTOR ( 'NONE', #6255, 1000.000000000000000 ) ; +#6709 = ORIENTED_EDGE ( 'NONE', *, *, #6103, .F. ) ; +#6710 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005200E-016 ) ) ; +#6711 = EDGE_LOOP ( 'NONE', ( #3901, #4067, #625, #2845 ) ) ; +#6712 = AXIS2_PLACEMENT_3D ( 'NONE', #4074, #2904, #4623 ) ; +#6713 = ORIENTED_EDGE ( 'NONE', *, *, #5532, .T. ) ; +#6715 = PLANE ( 'NONE', #765 ) ; +#6714 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#6716 = FACE_OUTER_BOUND ( 'NONE', #5030, .T. ) ; +#6717 = LINE ( 'NONE', #4386, #4151 ) ; +#6718 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, -0.1200000000000000900 ) ) ; +#6719 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#6720 = EDGE_CURVE ( 'NONE', #2698, #901, #3919, .T. ) ; +#6721 = VERTEX_POINT ( 'NONE', #7118 ) ; +#6722 = ORIENTED_EDGE ( 'NONE', *, *, #1326, .F. ) ; +#6723 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, -0.0000000000000000000, -1.500000000000000000 ) ) ; +#6724 = FACE_OUTER_BOUND ( 'NONE', #6906, .T. ) ; +#6725 = CYLINDRICAL_SURFACE ( 'NONE', #4072, 0.1499999999999999700 ) ; +#6726 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, -2.168404344971008900E-016 ) ) ; +#6727 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6728 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#6729 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 1.499999999999999600 ) ) ; +#6730 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #436 ), #4736 ) ; +#6731 = EDGE_LOOP ( 'NONE', ( #4940, #1840, #3369, #7205 ) ) ; +#6732 = LINE ( 'NONE', #3272, #2554 ) ; +#6733 = PRESENTATION_STYLE_ASSIGNMENT (( #2234 ) ) ; +#6734 = ADVANCED_FACE ( 'NONE', ( #152 ), #911, .T. ) ; +#6735 = FILL_AREA_STYLE ('',( #2708 ) ) ; +#6736 = STYLED_ITEM ( 'NONE', ( #106 ), #308 ) ; +#6737 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6738 = ORIENTED_EDGE ( 'NONE', *, *, #270, .T. ) ; +#6739 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#6740 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.1999999999999999800, -1.074999999999999700 ) ) ; +#6741 = DIRECTION ( 'NONE', ( -1.275531967630005200E-016, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6742 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6743 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#6744 = ORIENTED_EDGE ( 'NONE', *, *, #2743, .T. ) ; +#6745 = LINE ( 'NONE', #3292, #2565 ) ; +#6746 = VECTOR ( 'NONE', #3651, 1000.000000000000000 ) ; +#6747 = SURFACE_SIDE_STYLE ('',( #6863 ) ) ; +#6748 = EDGE_CURVE ( 'NONE', #5025, #4656, #5450, .T. ) ; +#6749 = EDGE_CURVE ( 'NONE', #7019, #4413, #5807, .T. ) ; +#6750 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6751 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#6752 = SURFACE_STYLE_FILL_AREA ( #2828 ) ; +#6753 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6754 = VERTEX_POINT ( 'NONE', #1589 ) ; +#6755 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#6756 = FACE_OUTER_BOUND ( 'NONE', #974, .T. ) ; +#6757 = VECTOR ( 'NONE', #2488, 1000.000000000000000 ) ; +#6758 = STYLED_ITEM ( 'NONE', ( #743 ), #3609 ) ; +#6759 = LINE ( 'NONE', #6232, #3274 ) ; +#6760 = LINE ( 'NONE', #6502, #5710 ) ; +#6761 = AXIS2_PLACEMENT_3D ( 'NONE', #4864, #1974, #4229 ) ; +#6762 = VERTEX_POINT ( 'NONE', #5571 ) ; +#6763 = PLANE ( 'NONE', #4054 ) ; +#6764 = VECTOR ( 'NONE', #4183, 1000.000000000000000 ) ; +#6765 = FACE_OUTER_BOUND ( 'NONE', #4497, .T. ) ; +#6766 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#6767 = SURFACE_STYLE_FILL_AREA ( #2370 ) ; +#6768 = LINE ( 'NONE', #5627, #1180 ) ; +#6769 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #492 ) ; +#6770 = ORIENTED_EDGE ( 'NONE', *, *, #1472, .T. ) ; +#6771 = PLANE ( 'NONE', #1032 ) ; +#6772 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6773 = VECTOR ( 'NONE', #1208, 1000.000000000000000 ) ; +#6774 = ORIENTED_EDGE ( 'NONE', *, *, #5772, .T. ) ; +#6775 = FILL_AREA_STYLE ('',( #6691 ) ) ; +#6776 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 1.119999999999999700 ) ) ; +#6777 = VECTOR ( 'NONE', #5416, 1000.000000000000000 ) ; +#6778 = FILL_AREA_STYLE_COLOUR ( '', #1427 ) ; +#6779 = ADVANCED_FACE ( 'NONE', ( #4277 ), #3348, .F. ) ; +#6780 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6781 = VECTOR ( 'NONE', #960, 1000.000000000000000 ) ; +#6782 = ORIENTED_EDGE ( 'NONE', *, *, #4916, .T. ) ; +#6783 = LINE ( 'NONE', #1212, #6419 ) ; +#6784 = VERTEX_POINT ( 'NONE', #4418 ) ; +#6785 = AXIS2_PLACEMENT_3D ( 'NONE', #6110, #3266, #3796 ) ; +#6786 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6787 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6788 = ORIENTED_EDGE ( 'NONE', *, *, #3405, .T. ) ; +#6790 = ORIENTED_EDGE ( 'NONE', *, *, #6586, .F. ) ; +#6789 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #794, 'distance_accuracy_value', 'NONE'); +#6791 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, -2.168404344971008900E-016 ) ) ; +#6792 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6793 = EDGE_LOOP ( 'NONE', ( #2673, #4401, #483, #2882 ) ) ; +#6794 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.6664761515876239700, 0.8799999999999998900 ) ) ; +#6795 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6796 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6797 = EDGE_CURVE ( 'NONE', #5117, #4011, #6336, .T. ) ; +#6798 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6799 = ORIENTED_EDGE ( 'NONE', *, *, #1325, .F. ) ; +#6800 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6801 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #875 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2311, #4737, #2288 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6802 = ORIENTED_EDGE ( 'NONE', *, *, #2380, .F. ) ; +#6803 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6804 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6805 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -1.120000000000000100 ) ) ; +#6806 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999900, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#6807 = ORIENTED_EDGE ( 'NONE', *, *, #465, .T. ) ; +#6808 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1443 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7036, #4821, #4236 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6809 = EDGE_CURVE ( 'NONE', #3783, #2638, #4561, .T. ) ; +#6810 = EDGE_CURVE ( 'NONE', #4106, #1273, #1972, .T. ) ; +#6811 = EDGE_CURVE ( 'NONE', #5508, #7223, #4828, .T. ) ; +#6812 = VECTOR ( 'NONE', #4006, 1000.000000000000000 ) ; +#6813 = ADVANCED_FACE ( 'NONE', ( #490 ), #1646, .T. ) ; +#6814 = ORIENTED_EDGE ( 'NONE', *, *, #6567, .F. ) ; +#6815 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #12 ) ) ; +#6816 = ORIENTED_EDGE ( 'NONE', *, *, #3984, .F. ) ; +#6817 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 1.275531967630005200E-016 ) ) ; +#6818 = FILL_AREA_STYLE_COLOUR ( '', #3961 ) ; +#6819 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6820 = STYLED_ITEM ( 'NONE', ( #2586 ), #6334 ) ; +#6821 = ORIENTED_EDGE ( 'NONE', *, *, #1103, .T. ) ; +#6822 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#6823 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 1.119999999999999400 ) ) ; +#6824 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6825 = ORIENTED_EDGE ( 'NONE', *, *, #7217, .F. ) ; +#6826 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#6827 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4564, 'distance_accuracy_value', 'NONE'); +#6828 = EDGE_CURVE ( 'NONE', #1919, #757, #4368, .T. ) ; +#6829 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.0000000000000000000, -1.500000000000000000 ) ) ; +#6830 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, 0.8799999999999998900 ) ) ; +#6831 = ORIENTED_EDGE ( 'NONE', *, *, #4762, .F. ) ; +#6832 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#6833 = PRESENTATION_STYLE_ASSIGNMENT (( #2140 ) ) ; +#6834 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#6835 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6836 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6837 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #633 ) ) ; +#6838 = ORIENTED_EDGE ( 'NONE', *, *, #3358, .F. ) ; +#6839 = LINE ( 'NONE', #2506, #3077 ) ; +#6840 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6841 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#6842 = PRESENTATION_STYLE_ASSIGNMENT (( #3333 ) ) ; +#6843 = PRESENTATION_STYLE_ASSIGNMENT (( #6032 ) ) ; +#6844 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, -0.6200000000000001100 ) ) ; +#6845 = STYLED_ITEM ( 'NONE', ( #6422 ), #3138 ) ; +#6846 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#6847 = ADVANCED_FACE ( 'NONE', ( #1261 ), #6698, .F. ) ; +#6848 = FACE_OUTER_BOUND ( 'NONE', #5828, .T. ) ; +#6849 = ORIENTED_EDGE ( 'NONE', *, *, #1999, .T. ) ; +#6850 = VECTOR ( 'NONE', #4733, 1000.000000000000000 ) ; +#6851 = VECTOR ( 'NONE', #1194, 1000.000000000000000 ) ; +#6852 = EDGE_CURVE ( 'NONE', #2685, #247, #672, .T. ) ; +#6853 = FACE_OUTER_BOUND ( 'NONE', #5169, .T. ) ; +#6854 = EDGE_CURVE ( 'NONE', #6976, #1181, #6509, .T. ) ; +#6855 = EDGE_CURVE ( 'NONE', #5489, #1802, #3016, .T. ) ; +#6856 = VECTOR ( 'NONE', #3918, 1000.000000000000000 ) ; +#6857 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6858 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#6859 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 2.940894014733149000, -1.075000000000000000 ) ) ; +#6860 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 2.940894014733149000, -0.6409215920651651900 ) ) ; +#6861 = VECTOR ( 'NONE', #3592, 1000.000000000000000 ) ; +#6862 = VERTEX_POINT ( 'NONE', #3846 ) ; +#6863 = SURFACE_STYLE_FILL_AREA ( #7235 ) ; +#6864 = ORIENTED_EDGE ( 'NONE', *, *, #3215, .F. ) ; +#6865 = VECTOR ( 'NONE', #4216, 1000.000000000000000 ) ; +#6866 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, -0.3800000000000004500 ) ) ; +#6867 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6868 = LINE ( 'NONE', #5678, #3106 ) ; +#6869 = ORIENTED_EDGE ( 'NONE', *, *, #4046, .F. ) ; +#6870 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#6871 = ORIENTED_EDGE ( 'NONE', *, *, #6659, .T. ) ; +#6872 = AXIS2_PLACEMENT_3D ( 'NONE', #5175, #1670, #2274 ) ; +#6873 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6874 = ORIENTED_EDGE ( 'NONE', *, *, #6197, .T. ) ; +#6875 = VERTEX_POINT ( 'NONE', #5069 ) ; +#6876 = VECTOR ( 'NONE', #5137, 1000.000000000000000 ) ; +#6877 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, 0.3799999999999998900 ) ) ; +#6878 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5926 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4969, #6660, #2089 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6879 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6880 = ORIENTED_EDGE ( 'NONE', *, *, #5455, .T. ) ; +#6881 = SURFACE_SIDE_STYLE ('',( #2131 ) ) ; +#6882 = ORIENTED_EDGE ( 'NONE', *, *, #5299, .T. ) ; +#6883 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#6884 = ADVANCED_FACE ( 'NONE', ( #3285 ), #2871, .T. ) ; +#6885 = ORIENTED_EDGE ( 'NONE', *, *, #4521, .T. ) ; +#6886 = FILL_AREA_STYLE ('',( #6818 ) ) ; +#6887 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6888 = ORIENTED_EDGE ( 'NONE', *, *, #2416, .T. ) ; +#6889 = LINE ( 'NONE', #3506, #4670 ) ; +#6890 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6891 = EDGE_CURVE ( 'NONE', #500, #1216, #4102, .T. ) ; +#6892 = ORIENTED_EDGE ( 'NONE', *, *, #5051, .T. ) ; +#6893 = ORIENTED_EDGE ( 'NONE', *, *, #6720, .F. ) ; +#6894 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.6697073557013986100, 1.500000000000000000 ) ) ; +#6895 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #316 ), #4479 ) ; +#6896 = VECTOR ( 'NONE', #2597, 1000.000000000000000 ) ; +#6897 = DIRECTION ( 'NONE', ( 1.275531967630005700E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6898 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, 0.8799999999999998900 ) ) ; +#6899 = EDGE_LOOP ( 'NONE', ( #958, #4243, #5583, #4830 ) ) ; +#6900 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3552 ) ) ; +#6901 = VERTEX_POINT ( 'NONE', #6344 ) ; +#6902 = LINE ( 'NONE', #3072, #6204 ) ; +#6903 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #3362 ), #3755 ) ; +#6904 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6905 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, 1.499999999999999600 ) ) ; +#6906 = EDGE_LOOP ( 'NONE', ( #4966, #4116, #163, #5384 ) ) ; +#6907 = VECTOR ( 'NONE', #2162, 1000.000000000000000 ) ; +#6908 = AXIS2_PLACEMENT_3D ( 'NONE', #5874, #4719, #6533 ) ; +#6909 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5992, 'distance_accuracy_value', 'NONE'); +#6910 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.6999999999999999600, -0.9250000000000004900 ) ) ; +#6911 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #341 ), #6540 ) ; +#6912 = ADVANCED_FACE ( 'NONE', ( #3640 ), #4047, .F. ) ; +#6913 = LINE ( 'NONE', #1382, #122 ) ; +#6914 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#6915 = FILL_AREA_STYLE ('',( #2895 ) ) ; +#6916 = PLANE ( 'NONE', #5962 ) ; +#6917 = VERTEX_POINT ( 'NONE', #91 ) ; +#6918 = VECTOR ( 'NONE', #1704, 1000.000000000000000 ) ; +#6919 = LINE ( 'NONE', #7056, #6746 ) ; +#6920 = PRESENTATION_STYLE_ASSIGNMENT (( #1561 ) ) ; +#6921 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#6922 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.1999999999999999800, 1.074999999999999700 ) ) ; +#6923 = SURFACE_SIDE_STYLE ('',( #2684 ) ) ; +#6924 = SURFACE_STYLE_FILL_AREA ( #1128 ) ; +#6925 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3856 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3778, #2645, #4925 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6926 = VERTEX_POINT ( 'NONE', #2812 ) ; +#6927 = FACE_OUTER_BOUND ( 'NONE', #4999, .T. ) ; +#6928 = PRESENTATION_STYLE_ASSIGNMENT (( #3064 ) ) ; +#6929 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#6930 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.1999999999999999800, -0.8800000000000003400 ) ) ; +#6931 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #6565 ), #6808 ) ; +#6932 = EDGE_CURVE ( 'NONE', #624, #3162, #1534, .T. ) ; +#6933 = ORIENTED_EDGE ( 'NONE', *, *, #5004, .F. ) ; +#6934 = EDGE_CURVE ( 'NONE', #5958, #6784, #6082, .T. ) ; +#6935 = EDGE_CURVE ( 'NONE', #7290, #3389, #2857, .T. ) ; +#6936 = ORIENTED_EDGE ( 'NONE', *, *, #4424, .T. ) ; +#6937 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.1999999999999999800, -1.500000000000000000 ) ) ; +#6938 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999997600, 2.940894014733149000, 1.075000000000000000 ) ) ; +#6939 = SURFACE_SIDE_STYLE ('',( #3000 ) ) ; +#6940 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2079, 'distance_accuracy_value', 'NONE'); +#6941 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #977 ) ) ; +#6942 = ORIENTED_EDGE ( 'NONE', *, *, #5455, .F. ) ; +#6943 = LINE ( 'NONE', #4038, #4115 ) ; +#6944 = ORIENTED_EDGE ( 'NONE', *, *, #4751, .F. ) ; +#6945 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2266 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2724, #4941, #5031 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6946 = PLANE ( 'NONE', #2376 ) ; +#6947 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6948 = VERTEX_POINT ( 'NONE', #2894 ) ; +#6949 = ORIENTED_EDGE ( 'NONE', *, *, #3535, .F. ) ; +#6950 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5838 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4313, #2569, #5942 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6951 = EDGE_CURVE ( 'NONE', #3887, #877, #7112, .T. ) ; +#6952 = SURFACE_STYLE_USAGE ( .BOTH. , #4731 ) ; +#6953 = ORIENTED_EDGE ( 'NONE', *, *, #4058, .T. ) ; +#6954 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#6955 = VERTEX_POINT ( 'NONE', #5698 ) ; +#6956 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2628 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2571, #4947, #428 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6957 = PLANE ( 'NONE', #5182 ) ; +#6958 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, 2.940894014733149000, -0.7909215920651651000 ) ) ; +#6959 = VERTEX_POINT ( 'NONE', #1124 ) ; +#6960 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1886 ) ) ; +#6961 = ORIENTED_EDGE ( 'NONE', *, *, #462, .T. ) ; +#6962 = ORIENTED_EDGE ( 'NONE', *, *, #6058, .F. ) ; +#6963 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#6964 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6965 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.1999999999999999800, 0.9999999999999997800 ) ) ; +#6966 = FILL_AREA_STYLE_COLOUR ( '', #6870 ) ; +#6967 = ORIENTED_EDGE ( 'NONE', *, *, #1284, .T. ) ; +#6968 = ORIENTED_EDGE ( 'NONE', *, *, #233, .F. ) ; +#6969 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#6970 = EDGE_CURVE ( 'NONE', #6447, #2314, #4458, .T. ) ; +#6971 = EDGE_CURVE ( 'NONE', #304, #4775, #836, .T. ) ; +#6972 = PRESENTATION_STYLE_ASSIGNMENT (( #1100 ) ) ; +#6973 = PLANE ( 'NONE', #5152 ) ; +#6974 = EDGE_CURVE ( 'NONE', #3239, #6166, #1179, .T. ) ; +#6975 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6976 = VERTEX_POINT ( 'NONE', #3383 ) ; +#6977 = AXIS2_PLACEMENT_3D ( 'NONE', #213, #4124, #721 ) ; +#6978 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000003100, -0.0000000000000000000, -0.7909215920651651000 ) ) ; +#6979 = ORIENTED_EDGE ( 'NONE', *, *, #1104, .F. ) ; +#6980 = FILL_AREA_STYLE ('',( #1431 ) ) ; +#6981 = LINE ( 'NONE', #61, #5501 ) ; +#6982 = CARTESIAN_POINT ( 'NONE', ( -4.336808689942013300E-016, 0.05000000000000000300, 1.120000000000000100 ) ) ; +#6983 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1499 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2471, #3040, #7012 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#6984 = ORIENTED_EDGE ( 'NONE', *, *, #3997, .F. ) ; +#6985 = VECTOR ( 'NONE', #1340, 1000.000000000000000 ) ; +#6986 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2680, 'distance_accuracy_value', 'NONE'); +#6987 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#6988 = CARTESIAN_POINT ( 'NONE', ( 1.371196865202256400E-016, 0.05000000000000000300, -1.075000000000000000 ) ) ; +#6989 = DIRECTION ( 'NONE', ( -5.042800802258161100E-017, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6990 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6991 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #4976, 'distance_accuracy_value', 'NONE'); +#6992 = ORIENTED_EDGE ( 'NONE', *, *, #1564, .T. ) ; +#6993 = FACE_OUTER_BOUND ( 'NONE', #1812, .T. ) ; +#6994 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #73 ) ) ; +#6995 = FILL_AREA_STYLE ('',( #275 ) ) ; +#6996 = EDGE_LOOP ( 'NONE', ( #7122, #5440, #2986, #5538 ) ) ; +#6997 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, 0.1199999999999996600 ) ) ; +#6998 = LINE ( 'NONE', #4338, #1699 ) ; +#6999 = VECTOR ( 'NONE', #948, 1000.000000000000000 ) ; +#7000 = SURFACE_STYLE_FILL_AREA ( #2564 ) ; +#7001 = FACE_OUTER_BOUND ( 'NONE', #3037, .T. ) ; +#7002 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7003 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.2000000000000000100, -0.8800000000000004500 ) ) ; +#7004 = FILL_AREA_STYLE ('',( #4196 ) ) ; +#7005 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7006 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.2000000000000000100, -0.8800000000000003400 ) ) ; +#7007 = PRESENTATION_STYLE_ASSIGNMENT (( #3679 ) ) ; +#7008 = EDGE_LOOP ( 'NONE', ( #3503, #3281, #6523, #262 ) ) ; +#7009 = LINE ( 'NONE', #273, #741 ) ; +#7010 = LINE ( 'NONE', #3472, #1076 ) ; +#7011 = VECTOR ( 'NONE', #631, 1000.000000000000000 ) ; +#7012 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7013 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7014 = SURFACE_STYLE_FILL_AREA ( #190 ) ; +#7015 = VERTEX_POINT ( 'NONE', #6830 ) ; +#7016 = VECTOR ( 'NONE', #2440, 1000.000000000000000 ) ; +#7017 = LINE ( 'NONE', #3342, #4014 ) ; +#7018 = LINE ( 'NONE', #5744, #2229 ) ; +#7019 = VERTEX_POINT ( 'NONE', #6242 ) ; +#7020 = LINE ( 'NONE', #2624, #2593 ) ; +#7021 = EDGE_CURVE ( 'NONE', #3162, #4758, #4021, .T. ) ; +#7022 = VECTOR ( 'NONE', #4592, 1000.000000000000000 ) ; +#7023 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#7024 = AXIS2_PLACEMENT_3D ( 'NONE', #3319, #4487, #1087 ) ; +#7025 = FACE_OUTER_BOUND ( 'NONE', #1839, .T. ) ; +#7026 = ORIENTED_EDGE ( 'NONE', *, *, #506, .F. ) ; +#7027 = CARTESIAN_POINT ( 'NONE', ( 0.7000000000000000700, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#7028 = EDGE_LOOP ( 'NONE', ( #72, #6979, #5789, #1888 ) ) ; +#7029 = PLANE ( 'NONE', #3741 ) ; +#7030 = VECTOR ( 'NONE', #2221, 1000.000000000000000 ) ; +#7031 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7032 = STYLED_ITEM ( 'NONE', ( #6928 ), #5213 ) ; +#7033 = EDGE_CURVE ( 'NONE', #3424, #4933, #1350, .T. ) ; +#7034 = EDGE_CURVE ( 'NONE', #3994, #2826, #6680, .T. ) ; +#7035 = EDGE_CURVE ( 'NONE', #4897, #24, #5187, .T. ) ; +#7036 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7037 = ORIENTED_EDGE ( 'NONE', *, *, #4705, .F. ) ; +#7038 = FILL_AREA_STYLE_COLOUR ( '', #3248 ) ; +#7039 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#7040 = ORIENTED_EDGE ( 'NONE', *, *, #1727, .F. ) ; +#7041 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#7042 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.04999999999999999600, -0.5000000000000002200 ) ) ; +#7043 = FACE_OUTER_BOUND ( 'NONE', #232, .T. ) ; +#7044 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #3362 ) ) ; +#7045 = ORIENTED_EDGE ( 'NONE', *, *, #3115, .F. ) ; +#7046 = ORIENTED_EDGE ( 'NONE', *, *, #7021, .F. ) ; +#7047 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #6820 ) ) ; +#7048 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, -0.8800000000000004500 ) ) ; +#7049 = CARTESIAN_POINT ( 'NONE', ( -0.8500000000000002000, 2.940894014733149000, -1.075000000000000200 ) ) ; +#7050 = ADVANCED_FACE ( 'NONE', ( #4814 ), #3734, .F. ) ; +#7051 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7052 = ORIENTED_EDGE ( 'NONE', *, *, #86, .T. ) ; +#7053 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.8000000000000003800, -1.500000000000000400 ) ) ; +#7054 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7055 = VERTEX_POINT ( 'NONE', #144 ) ; +#7056 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#7057 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1091 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #7184, #3779, #2053 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7058 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7059 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7060 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#7061 = FILL_AREA_STYLE ('',( #239 ) ) ; +#7062 = FILL_AREA_STYLE_COLOUR ( '', #2295 ) ; +#7063 = ORIENTED_EDGE ( 'NONE', *, *, #3403, .F. ) ; +#7064 = ADVANCED_FACE ( 'NONE', ( #2223 ), #3569, .T. ) ; +#7065 = ORIENTED_EDGE ( 'NONE', *, *, #6852, .T. ) ; +#7066 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #1277 ) ; +#7067 = ORIENTED_EDGE ( 'NONE', *, *, #918, .T. ) ; +#7068 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.04999999999999999600, -0.3800000000000004500 ) ) ; +#7069 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#7070 = ORIENTED_EDGE ( 'NONE', *, *, #4938, .F. ) ; +#7071 = LINE ( 'NONE', #1901, #1484 ) ; +#7072 = AXIS2_PLACEMENT_3D ( 'NONE', #5287, #5799, #1835 ) ; +#7073 = EDGE_CURVE ( 'NONE', #5893, #1802, #5530, .T. ) ; +#7074 = EDGE_CURVE ( 'NONE', #6100, #3162, #1801, .T. ) ; +#7075 = EDGE_CURVE ( 'NONE', #1968, #3129, #745, .T. ) ; +#7076 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#7077 = VERTEX_POINT ( 'NONE', #696 ) ; +#7078 = VECTOR ( 'NONE', #7252, 1000.000000000000000 ) ; +#7079 = ADVANCED_FACE ( 'NONE', ( #5178 ), #169, .T. ) ; +#7080 = FILL_AREA_STYLE ('',( #348 ) ) ; +#7081 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5109 ), #6618 ) ; +#7082 = FILL_AREA_STYLE_COLOUR ( '', #1709 ) ; +#7083 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#7084 = FILL_AREA_STYLE ('',( #5391 ) ) ; +#7085 = SURFACE_SIDE_STYLE ('',( #3347 ) ) ; +#7086 = ORIENTED_EDGE ( 'NONE', *, *, #772, .T. ) ; +#7087 = VECTOR ( 'NONE', #6215, 1000.000000000000000 ) ; +#7088 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5062 ) ) ; +#7089 = PLANE ( 'NONE', #6163 ) ; +#7090 = EDGE_CURVE ( 'NONE', #2997, #7077, #2672, .T. ) ; +#7091 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#7092 = CIRCLE ( 'NONE', #4449, 0.1199999999999998800 ) ; +#7093 = DIRECTION ( 'NONE', ( -3.872150616019654400E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7094 = ADVANCED_FACE ( 'NONE', ( #3092 ), #1820, .T. ) ; +#7095 = ORIENTED_EDGE ( 'NONE', *, *, #160, .T. ) ; +#7096 = LINE ( 'NONE', #4377, #1795 ) ; +#7097 = LINE ( 'NONE', #1720, #5527 ) ; +#7098 = PLANE ( 'NONE', #1825 ) ; +#7099 = STYLED_ITEM ( 'NONE', ( #2034 ), #1562 ) ; +#7100 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#7101 = DIRECTION ( 'NONE', ( 1.275531967630005700E-016, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7102 = FACE_OUTER_BOUND ( 'NONE', #1938, .T. ) ; +#7103 = VERTEX_POINT ( 'NONE', #2420 ) ; +#7104 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1886 ), #6925 ) ; +#7105 = PRESENTATION_STYLE_ASSIGNMENT (( #5570 ) ) ; +#7106 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7108 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 5.842640687119285300, 1.499999999999999600 ) ) ; +#7107 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.0000000000000000000, -1.500000000000000000 ) ) ; +#7109 = VECTOR ( 'NONE', #4295, 1000.000000000000000 ) ; +#7110 = SURFACE_STYLE_USAGE ( .BOTH. , #4261 ) ; +#7111 = CARTESIAN_POINT ( 'NONE', ( -0.4999999999999997800, 0.2000000000000000900, -1.075000000000000200 ) ) ; +#7112 = LINE ( 'NONE', #5125, #7202 ) ; +#7113 = VERTEX_POINT ( 'NONE', #5827 ) ; +#7114 = VECTOR ( 'NONE', #5853, 1000.000000000000000 ) ; +#7115 = VECTOR ( 'NONE', #6887, 1000.000000000000000 ) ; +#7116 = VERTEX_POINT ( 'NONE', #4119 ) ; +#7117 = VECTOR ( 'NONE', #7041, 1000.000000000000000 ) ; +#7118 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.0000000000000000000, -1.500000000000000000 ) ) ; +#7119 = ADVANCED_FACE ( 'NONE', ( #5088 ), #3186, .F. ) ; +#7120 = FILL_AREA_STYLE ('',( #2579 ) ) ; +#7121 = VECTOR ( 'NONE', #3204, 1000.000000000000000 ) ; +#7122 = ORIENTED_EDGE ( 'NONE', *, *, #3356, .T. ) ; +#7123 = EDGE_CURVE ( 'NONE', #6604, #5913, #6072, .T. ) ; +#7124 = EDGE_CURVE ( 'NONE', #202, #4953, #4188, .T. ) ; +#7125 = VERTEX_POINT ( 'NONE', #3619 ) ; +#7126 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #4267 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3136, #3058, #3110 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7127 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7128 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, -0.0000000000000000000, -1.500000000000000000 ) ) ; +#7129 = ORIENTED_EDGE ( 'NONE', *, *, #5479, .T. ) ; +#7130 = ORIENTED_EDGE ( 'NONE', *, *, #5154, .T. ) ; +#7131 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #6476, 'distance_accuracy_value', 'NONE'); +#7132 = SURFACE_STYLE_USAGE ( .BOTH. , #2522 ) ; +#7133 = STYLED_ITEM ( 'NONE', ( #4725 ), #4968 ) ; +#7134 = CARTESIAN_POINT ( 'NONE', ( 0.3000000000000000400, 0.0000000000000000000, 1.500000000000000000 ) ) ; +#7136 = PLANE ( 'NONE', #3006 ) ; +#7135 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.8000000000000000400, -1.100000000000000500 ) ) ; +#7137 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, -1.000000000000000200 ) ) ; +#7138 = FILL_AREA_STYLE ('',( #1955 ) ) ; +#7139 = ORIENTED_EDGE ( 'NONE', *, *, #4323, .F. ) ; +#7140 = ADVANCED_FACE ( 'NONE', ( #2489 ), #4194, .T. ) ; +#7141 = VERTEX_POINT ( 'NONE', #3124 ) ; +#7142 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7143 = ORIENTED_EDGE ( 'NONE', *, *, #816, .T. ) ; +#7144 = FILL_AREA_STYLE ('',( #2081 ) ) ; +#7145 = ORIENTED_EDGE ( 'NONE', *, *, #7216, .F. ) ; +#7146 = ORIENTED_EDGE ( 'NONE', *, *, #1622, .F. ) ; +#7147 = SURFACE_STYLE_USAGE ( .BOTH. , #2613 ) ; +#7148 = PRESENTATION_STYLE_ASSIGNMENT (( #4503 ) ) ; +#7149 = ADVANCED_FACE ( 'NONE', ( #4553 ), #6478, .T. ) ; +#7150 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#7151 = ORIENTED_EDGE ( 'NONE', *, *, #184, .T. ) ; +#7152 = ORIENTED_EDGE ( 'NONE', *, *, #4760, .F. ) ; +#7153 = FILL_AREA_STYLE_COLOUR ( '', #1697 ) ; +#7155 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.1999999999999999800, -1.120000000000000100 ) ) ; +#7154 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.04999999999999969700, -1.500000000000000000 ) ) ; +#7156 = FILL_AREA_STYLE_COLOUR ( '', #6755 ) ; +#7157 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#7158 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7159 = CARTESIAN_POINT ( 'NONE', ( -0.09999999999999999200, 0.6697073557013986100, -1.500000000000000000 ) ) ; +#7160 = ORIENTED_EDGE ( 'NONE', *, *, #3766, .F. ) ; +#7161 = ORIENTED_EDGE ( 'NONE', *, *, #2980, .T. ) ; +#7162 = EDGE_CURVE ( 'NONE', #7223, #1826, #2396, .T. ) ; +#7163 = CYLINDRICAL_SURFACE ( 'NONE', #3277, 0.1199999999999998800 ) ; +#7164 = LINE ( 'NONE', #1654, #888 ) ; +#7165 = PLANE ( 'NONE', #3662 ) ; +#7166 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.0000000000000000000, -0.3800000000000004500 ) ) ; +#7167 = AXIS2_PLACEMENT_3D ( 'NONE', #552, #6272, #6835 ) ; +#7168 = VERTEX_POINT ( 'NONE', #803 ) ; +#7169 = LINE ( 'NONE', #2070, #5315 ) ; +#7170 = ADVANCED_FACE ( 'NONE', ( #3361 ), #4763, .F. ) ; +#7171 = AXIS2_PLACEMENT_3D ( 'NONE', #1429, #375, #2664 ) ; +#7172 = EDGE_CURVE ( 'NONE', #7248, #4484, #6760, .T. ) ; +#7173 = EDGE_CURVE ( 'NONE', #3053, #4871, #3814, .T. ) ; +#7174 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 3.872150616019654400E-016 ) ) ; +#7175 = EDGE_CURVE ( 'NONE', #5552, #940, #1256, .T. ) ; +#7176 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#7177 = ORIENTED_EDGE ( 'NONE', *, *, #5299, .F. ) ; +#7178 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.05000000000000000300, 0.0000000000000000000 ) ) ; +#7179 = AXIS2_PLACEMENT_3D ( 'NONE', #2669, #3200, #3781 ) ; +#7180 = PRESENTATION_STYLE_ASSIGNMENT (( #6020 ) ) ; +#7181 = SURFACE_SIDE_STYLE ('',( #2573 ) ) ; +#7183 = SURFACE_STYLE_USAGE ( .BOTH. , #2095 ) ; +#7182 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7184 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7185 = FILL_AREA_STYLE_COLOUR ( '', #4195 ) ; +#7186 = PRODUCT_DEFINITION_CONTEXT ( 'detailed design', #3904, 'design' ) ; +#7187 = ORIENTED_EDGE ( 'NONE', *, *, #6704, .F. ) ; +#7188 = VECTOR ( 'NONE', #352, 1000.000000000000000 ) ; +#7189 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.1999999999999999800, 1.074999999999999700 ) ) ; +#7190 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#7191 = ORIENTED_EDGE ( 'NONE', *, *, #23, .T. ) ; +#7192 = VECTOR ( 'NONE', #1362, 1000.000000000000000 ) ; +#7193 = VECTOR ( 'NONE', #3223, 1000.000000000000000 ) ; +#7194 = ORIENTED_EDGE ( 'NONE', *, *, #2992, .F. ) ; +#7195 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.8000000000000000400, -0.9250000000000004900 ) ) ; +#7196 = FACE_OUTER_BOUND ( 'NONE', #6539, .T. ) ; +#7197 = FACE_OUTER_BOUND ( 'NONE', #2180, .T. ) ; +#7198 = ORIENTED_EDGE ( 'NONE', *, *, #4159, .T. ) ; +#7199 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #633 ), #6956 ) ; +#7200 = LINE ( 'NONE', #1930, #1531 ) ; +#7201 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.2000000000000000900, 1.075000000000000000 ) ) ; +#7202 = VECTOR ( 'NONE', #6803, 1000.000000000000000 ) ; +#7203 = SURFACE_STYLE_FILL_AREA ( #6678 ) ; +#7204 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#7205 = ORIENTED_EDGE ( 'NONE', *, *, #3070, .T. ) ; +#7206 = CARTESIAN_POINT ( 'NONE', ( 1.219999999999999800, 0.2000000000000000100, 1.119999999999999700 ) ) ; +#7207 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -1.275531967630005700E-016 ) ) ; +#7208 = VERTEX_POINT ( 'NONE', #879 ) ; +#7209 = CARTESIAN_POINT ( 'NONE', ( -0.2999999999999999300, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#7210 = PLANE ( 'NONE', #1479 ) ; +#7211 = ADVANCED_FACE ( 'NONE', ( #6848 ), #328, .F. ) ; +#7212 = ORIENTED_EDGE ( 'NONE', *, *, #1017, .T. ) ; +#7213 = ORIENTED_EDGE ( 'NONE', *, *, #183, .T. ) ; +#7214 = LINE ( 'NONE', #6776, #4381 ) ; +#7215 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -3.872150616019654400E-016 ) ) ; +#7216 = EDGE_CURVE ( 'NONE', #6959, #851, #5620, .T. ) ; +#7217 = EDGE_CURVE ( 'NONE', #1133, #3131, #7280, .T. ) ; +#7218 = EDGE_CURVE ( 'NONE', #6432, #3053, #5802, .T. ) ; +#7219 = VERTEX_POINT ( 'NONE', #443 ) ; +#7220 = VERTEX_POINT ( 'NONE', #7134 ) ; +#7221 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2284, 'distance_accuracy_value', 'NONE'); +#7222 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7223 = VERTEX_POINT ( 'NONE', #3777 ) ; +#7224 = PLANE ( 'NONE', #6785 ) ; +#7225 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #5872 ) ) ; +#7226 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7228 = CARTESIAN_POINT ( 'NONE', ( 0.1000000000000000500, 0.1999999999999999800, 1.500000000000000000 ) ) ; +#7227 = CARTESIAN_POINT ( 'NONE', ( -0.6999999999999999600, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#7229 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.04999999999999969700, 1.500000000000000000 ) ) ; +#7230 = ORIENTED_EDGE ( 'NONE', *, *, #2227, .T. ) ; +#7231 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7232 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999999600, 0.05000000000000000300, -0.8800000000000005600 ) ) ; +#7233 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #261 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #4213, #832, #2523 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7234 = ORIENTED_EDGE ( 'NONE', *, *, #3909, .F. ) ; +#7235 = FILL_AREA_STYLE ('',( #523 ) ) ; +#7236 = FACE_OUTER_BOUND ( 'NONE', #3188, .T. ) ; +#7237 = CARTESIAN_POINT ( 'NONE', ( -1.219999999999999800, 0.6664761515876239700, -0.3800000000000003400 ) ) ; +#7238 = ORIENTED_EDGE ( 'NONE', *, *, #5479, .F. ) ; +#7239 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7240 = ORIENTED_EDGE ( 'NONE', *, *, #5682, .T. ) ; +#7241 = LINE ( 'NONE', #6805, #3586 ) ; +#7242 = AXIS2_PLACEMENT_3D ( 'NONE', #1532, #5509, #6638 ) ; +#7243 = ADVANCED_FACE ( 'NONE', ( #7102 ), #5492, .F. ) ; +#7244 = ORIENTED_EDGE ( 'NONE', *, *, #5004, .T. ) ; +#7245 = EDGE_LOOP ( 'NONE', ( #2230, #4597, #6295, #6611 ) ) ; +#7246 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.1999999999999999800, -0.6200000000000001100 ) ) ; +#7247 = AXIS2_PLACEMENT_3D ( 'NONE', #3802, #1505, #403 ) ; +#7248 = VERTEX_POINT ( 'NONE', #6603 ) ; +#7249 = LINE ( 'NONE', #1357, #283 ) ; +#7250 = FACE_OUTER_BOUND ( 'NONE', #398, .T. ) ; +#7251 = FILL_AREA_STYLE_COLOUR ( '', #6490 ) ; +#7253 = DIRECTION ( 'NONE', ( 5.042800802258161100E-017, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#7252 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#7254 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7255 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7256 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#7257 = ORIENTED_EDGE ( 'NONE', *, *, #1899, .F. ) ; +#7258 = VECTOR ( 'NONE', #5786, 1000.000000000000000 ) ; +#7259 = CARTESIAN_POINT ( 'NONE', ( -0.5000000000000000000, 0.2000000000000000100, 1.500000000000000000 ) ) ; +#7260 = EDGE_CURVE ( 'NONE', #2006, #5647, #5428, .T. ) ; +#7261 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude5', #5272 ) ; +#7262 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#7263 = VECTOR ( 'NONE', #550, 1000.000000000000000 ) ; +#7264 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 0.2000000000000000100, -0.8800000000000004500 ) ) ; +#7265 = LINE ( 'NONE', #5185, #809 ) ; +#7266 = ORIENTED_EDGE ( 'NONE', *, *, #8, .T. ) ; +#7267 = VECTOR ( 'NONE', #59, 1000.000000000000000 ) ; +#7268 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#7269 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #5156 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #3021, #822, #5278 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#7270 = FILL_AREA_STYLE ('',( #4965 ) ) ; +#7271 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7272 = SURFACE_STYLE_FILL_AREA ( #5061 ) ; +#7273 = PRESENTATION_STYLE_ASSIGNMENT (( #4349 ) ) ; +#7274 = LINE ( 'NONE', #2914, #5797 ) ; +#7275 = CARTESIAN_POINT ( 'NONE', ( 0.5000000000000001100, 0.2000000000000000100, -1.500000000000000000 ) ) ; +#7276 = LINE ( 'NONE', #1056, #2044 ) ; +#7277 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7278 = AXIS2_PLACEMENT_3D ( 'NONE', #4398, #2702, #3972 ) ; +#7279 = ADVANCED_FACE ( 'NONE', ( #1246 ), #6639, .F. ) ; +#7280 = LINE ( 'NONE', #3728, #3724 ) ; +#7281 = ORIENTED_EDGE ( 'NONE', *, *, #3844, .T. ) ; +#7282 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#7283 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#7284 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #5252 ), #1588 ) ; +#7285 = SURFACE_STYLE_USAGE ( .BOTH. , #5598 ) ; +#7286 = PLANE ( 'NONE', #1737 ) ; +#7287 = CARTESIAN_POINT ( 'NONE', ( -1.099999999999999900, 0.6999999999999999600, -1.100000000000000500 ) ) ; +#7288 = SURFACE_STYLE_USAGE ( .BOTH. , #6246 ) ; +#7289 = VECTOR ( 'NONE', #6804, 1000.000000000000000 ) ; +#7290 = VERTEX_POINT ( 'NONE', #3192 ) ; +#7291 = ORIENTED_EDGE ( 'NONE', *, *, #1729, .T. ) ; +#7292 = COLOUR_RGB ( '',0.2509803921568627400, 0.2509803921568627400, 0.2509803921568627400 ) ; +#7293 = CARTESIAN_POINT ( 'NONE', ( 0.8499999999999996400, 2.940894014733149000, -1.075000000000000000 ) ) ; +#7294 = FACE_OUTER_BOUND ( 'NONE', #3958, .T. ) ; +#7295 = ORIENTED_EDGE ( 'NONE', *, *, #4019, .T. ) ; +#7296 = LINE ( 'NONE', #2884, #5819 ) ; +#7297 = ORIENTED_EDGE ( 'NONE', *, *, #7035, .T. ) ; +#7298 = VECTOR ( 'NONE', #4412, 1000.000000000000000 ) ; +#7299 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#7300 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#7301 = ORIENTED_EDGE ( 'NONE', *, *, #4916, .F. ) ; +#7302 = AXIS2_PLACEMENT_3D ( 'NONE', #3594, #5389, #855 ) ; +#7303 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#7304 = VERTEX_POINT ( 'NONE', #1657 ) ; +#7305 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #6459 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5262, #1837, #5736 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +ENDSEC; +END-ISO-10303-21; diff --git a/Hardware/FabReader2/Library/TPS63060DSCT/how-to-import.htm b/Hardware/FabReader2/Library/TPS63060DSCT/how-to-import.htm new file mode 100644 index 0000000..19e484d --- /dev/null +++ b/Hardware/FabReader2/Library/TPS63060DSCT/how-to-import.htm @@ -0,0 +1 @@ + Page Redirection If you are not redirected automatically, follow this link to the import guide. \ No newline at end of file diff --git a/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/License.txt b/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/License.txt new file mode 100644 index 0000000..9cb6384 --- /dev/null +++ b/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/License.txt @@ -0,0 +1,24 @@ +BY ACCESSING OR USING THESE SYMBOLS & FOOTPRINTS ("MODELS"), YOU ARE ACKNOWLEDGING THAT YOU HAVE READ, FULLY UNDERSTAND AND AGREE TO THESE TERMS AND CONDITIONS (the "Agreement"), WHICH CONSTITUTE A BINDING AGREEMENT BETWEEN YOU AND SNAPEDA, INC., ENTERED INTO ON THE DATE OF SUCH OCCURRENCE (the "Effective Date"). IF YOU ARE ACCESSING OR USING THESE FILES ON BEHALF OF AN ENTITY, YOU REPRESENT THAT YOU HAVE THE RIGHT, AUTHORITY, AND CAPACITY TO BIND SUCH ENTITY TO THIS AGREEMENT AND HEREBY DO SO. IF YOU DO NOT AGREE WITH ANY OF THE TERMS OR CONDITIONS OF THIS AGREEMENT, YOU MUST NOT USE ANY PART OF THESE MODELS. + +1. Design License + +You and your sub-licensees are hereby licensed to design, manufacture, use and distribute, circuit board designs and circuit boards formed by combining Models provided by SnapEDA with other circuit elements of your choosing. You may then convey such combinations under licensing terms of your choice.  + +Individual Models remain the intellectual property of SnapEDA, Inc. You shall not (and shall not permit or encourage any third party to) to do any of the following : + +(a) sell, assign, lease, lend, rent, issue, sublicense, make available, or otherwise distribute to any third party, or publicly perform, display or communicate, the Models (for example, by uploading Models to another website or software application);
 +(b) remove, alter, or conceal, any copyright, trademark, or other proprietary rights notice or legend displayed or contained in the individual Models. + +For further clarity, once integrated into a schematic design or PCB layout, Models may be modified freely for the purpose of designing a circuit board.  + + +2. Limitation of Liability + +IN NO EVENT WILL SNAPEDA OR OUR SUBSIDIARIES, AGENTS, SUCCESSORS, THIRD PARTY PROVIDERS, AND/OR ANY OF THE FOREGOING ENTITIES' RESPECTIVE DIRECTORS, OFFICERS, EMPLOYEES, AGENTS, REPRESENTATIVES, CUSTOMERS, SUPPLIERS, OR LICENSORS BE RESPONSIBLE OR LIABLE UNDER, OR OTHERWISE IN CONNECTION WITH THIS AGREEMENT, FOR: + +(a) ANY CONSEQUENTIAL, INDIRECT, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES; +(b) ANY LOSS OF PROFITS, LOSS OF BUSINESS, LOSS OF REVENUE, OR LOSS OF ANTICIPATED SAVINGS; +(c) ANY LOSS OF, OR DAMAGE TO, DATA, REPUTATION, OR GOODWILL; AND/OR +(d) THE COST OF PROCURING ANY SUBSTITUTE GOODS OR SERVICES. + +THE COMBINED AGGREGATE LIABILITY OF SNAPEDA AND ALL SNAPEDA CONTENT AFFILIATES UNDER, OR OTHERWISE IN CONNECTION WITH, THIS AGREEMENT SHALL NOT EXCEED THE TOTAL AMOUNT OF FEES RECEIVED BY SNAPEDA FROM YOU IN THE PREVIOUS TWELVE (12) MONTHS. THE FOREGOING EXCLUSIONS AND LIMITATIONS SHALL APPLY: (a) EVEN IF SNAPEDA OR ANY SNAPEDA CONTENT AFFILIATE HAS BEEN ADVISED, OR SHOULD HAVE BEEN AWARE, OF THE POSSIBILITY OF LOSSES, DAMAGES, OR COSTS; (b) EVEN IF ANY REMEDY IN THIS AGREEMENT FAILS OF ITS ESSENTIAL PURPOSE; AND (c) REGARDLESS OF THE THEORY OR BASIS OF LIABILITY (INCLUDING WITHOUT LIMITATION BREACH OF CONTRACT, TORT, NEGLIGENCE, AND STRICT LIABILITY). \ No newline at end of file diff --git a/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/SW_TS04-66-95-BK-260-SMT.kicad_mod b/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/SW_TS04-66-95-BK-260-SMT.kicad_mod new file mode 100644 index 0000000..1bb9f7a --- /dev/null +++ b/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/SW_TS04-66-95-BK-260-SMT.kicad_mod @@ -0,0 +1,28 @@ + +(module SW_TS04-66-95-BK-260-SMT (layer F.Cu) (tedit 6269D6C4) + (descr "") + (fp_text reference REF** (at -2.675 -4.385 0) (layer F.SilkS) + (effects (font (size 1.0 1.0) (thickness 0.15))) + ) + (fp_text value SW_TS04-66-95-BK-260-SMT (at 9.39 4.385 0) (layer F.Fab) + (effects (font (size 1.0 1.0) (thickness 0.15))) + ) + (pad 2 smd rect (at -4.55 2.25) (size 2.1 1.4) (layers F.Cu F.Mask F.Paste)) + (pad 1 smd rect (at -4.55 -2.25) (size 2.1 1.4) (layers F.Cu F.Mask F.Paste)) + (pad 3 smd rect (at 4.55 -2.25) (size 2.1 1.4) (layers F.Cu F.Mask F.Paste)) + (pad 4 smd rect (at 4.55 2.25) (size 2.1 1.4) (layers F.Cu F.Mask F.Paste)) + (fp_line (start -3.0 -3.0) (end -3.0 3.0) (layer F.Fab) (width 0.127)) + (fp_line (start -3.0 3.0) (end 3.0 3.0) (layer F.Fab) (width 0.127)) + (fp_line (start 3.0 3.0) (end 3.0 -3.0) (layer F.Fab) (width 0.127)) + (fp_line (start 3.0 -3.0) (end -3.0 -3.0) (layer F.Fab) (width 0.127)) + (fp_line (start -3.0 -3.0) (end -3.0 3.0) (layer F.SilkS) (width 0.127)) + (fp_line (start -3.0 3.0) (end 3.0 3.0) (layer F.SilkS) (width 0.127)) + (fp_line (start 3.0 3.0) (end 3.0 -3.0) (layer F.SilkS) (width 0.127)) + (fp_line (start 3.0 -3.0) (end -3.0 -3.0) (layer F.SilkS) (width 0.127)) + (fp_line (start -5.85 -3.25) (end -5.85 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.85 3.25) (end 5.85 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.85 3.25) (end 5.85 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.85 -3.25) (end -5.85 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_circle (center -6.25 -2.25) (end -6.15 -2.25) (layer F.SilkS) (width 0.2)) + (fp_circle (center -6.25 -2.25) (end -6.15 -2.25) (layer F.Fab) (width 0.2)) +) \ No newline at end of file diff --git a/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/TS04-66-95-BK-260-SMT.kicad_sym b/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/TS04-66-95-BK-260-SMT.kicad_sym new file mode 100644 index 0000000..24e71ed --- /dev/null +++ b/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/TS04-66-95-BK-260-SMT.kicad_sym @@ -0,0 +1,174 @@ +(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor) + (symbol "TS04-66-95-BK-260-SMT" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "S" (id 0) (at -7.62 8.382 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Value" "TS04-66-95-BK-260-SMT" (id 1) (at -7.62 -8.382 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + ) + (property "Footprint" "SW_TS04-66-95-BK-260-SMT" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "Datasheet" "" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "PARTREV" "1.0" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "STANDARD" "Manufacturer Recommendations" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "MANUFACTURER" "CUI Devices" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left bottom) hide) + ) + (property "ki_locked" "" (id 7) (at 0 0 0) + (effects (font (size 1.27 1.27))) + ) + (symbol "TS04-66-95-BK-260-SMT_0_0" + (circle (center 0 -1.905) (radius 0.635) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -7.62 -7.62) + (xy 7.62 -7.62) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -7.62 -5.08) + (xy -7.62 -7.62) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -7.62 5.08) + (xy -7.62 -5.08) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -7.62 7.62) + (xy -7.62 5.08) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 -5.08) + (xy -7.62 -5.08) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 -5.08) + (xy 7.62 -5.08) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 -2.54) + (xy 0 -5.08) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 5.08) + (xy -7.62 5.08) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 5.08) + (xy 0 2.54) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 5.08) + (xy 7.62 5.08) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.635 -2.2352) + (xy 2.54 1.27) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 7.62 -7.62) + (xy 7.62 -5.08) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 7.62 -5.08) + (xy 7.62 5.08) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 7.62 5.08) + (xy 7.62 7.62) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 7.62 7.62) + (xy -7.62 7.62) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (circle (center 0 1.905) (radius 0.635) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (pin passive line (at -12.7 5.08 0) (length 5.08) + (name "~" (effects (font (size 1.016 1.016)))) + (number "1" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at -12.7 -5.08 0) (length 5.08) + (name "~" (effects (font (size 1.016 1.016)))) + (number "2" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at 12.7 5.08 180) (length 5.08) + (name "~" (effects (font (size 1.016 1.016)))) + (number "3" (effects (font (size 1.016 1.016)))) + ) + (pin passive line (at 12.7 -5.08 180) (length 5.08) + (name "~" (effects (font (size 1.016 1.016)))) + (number "4" (effects (font (size 1.016 1.016)))) + ) + ) + ) +) diff --git a/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/TS04-66-95-BK-260-SMT.lib b/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/TS04-66-95-BK-260-SMT.lib new file mode 100644 index 0000000..95a2ab0 --- /dev/null +++ b/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/TS04-66-95-BK-260-SMT.lib @@ -0,0 +1,41 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +#(c) SnapEDA 2016 (snapeda.com) +#This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Design Exception 1.0 +# +# TS04-66-95-BK-260-SMT +# +DEF TS04-66-95-BK-260-SMT S 0 40 Y N 1 L N +F0 "S" -300 330 50 H V L BNN +F1 "TS04-66-95-BK-260-SMT" -300 -330 50 H V L BNN +F2 "SW_TS04-66-95-BK-260-SMT" 0 0 50 H I L BNN +F3 "" 0 0 50 H I L BNN +F4 "1.0" 0 0 50 H I L BNN "PARTREV" +F5 "Manufacturer Recommendations" 0 0 50 H I L BNN "STANDARD" +F6 "CUI Devices" 0 0 50 H I L BNN "MANUFACTURER" +DRAW +P 2 0 0 10 0 200 0 100 N +P 2 0 0 10 0 -100 0 -200 N +P 2 0 0 10 -300 300 -300 200 N +P 2 0 0 10 -300 200 -300 -200 N +P 2 0 0 10 -300 -200 -300 -300 N +P 2 0 0 10 -300 -300 300 -300 N +P 2 0 0 10 300 -300 300 -200 N +P 2 0 0 10 300 -200 300 200 N +P 2 0 0 10 300 200 300 300 N +P 2 0 0 10 300 300 -300 300 N +P 2 0 0 10 0 200 -300 200 N +P 2 0 0 10 0 200 300 200 N +P 2 0 0 10 0 -200 -300 -200 N +P 2 0 0 10 0 -200 300 -200 N +C 0 -75 25 0 0 10 N +C 0 75 25 0 0 10 N +P 2 0 0 10 25 -88 100 50 N +X ~ 1 -500 200 200 R 40 40 0 0 P +X ~ 2 -500 -200 200 R 40 40 0 0 P +X ~ 3 500 200 200 L 40 40 0 0 P +X ~ 4 500 -200 200 L 40 40 0 0 P +ENDDRAW +ENDDEF +# +# End Library \ No newline at end of file diff --git a/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/how-to-import.htm b/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/how-to-import.htm new file mode 100644 index 0000000..19e484d --- /dev/null +++ b/Hardware/FabReader2/Library/TS04-66-95-BK-260-SMT/how-to-import.htm @@ -0,0 +1 @@ + Page Redirection If you are not redirected automatically, follow this link to the import guide. \ No newline at end of file diff --git a/Hardware/FabReader2/sym-lib-table b/Hardware/FabReader2/sym-lib-table new file mode 100644 index 0000000..490b851 --- /dev/null +++ b/Hardware/FabReader2/sym-lib-table @@ -0,0 +1,10 @@ +(sym_lib_table + (lib (name "2305018-2")(type "KiCad")(uri "${KIPRJMOD}/Library/2305018-2/2305018-2.kicad_sym")(options "")(descr "")) + (lib (name "CMI-9705-0380-SMT-TR")(type "KiCad")(uri "${KIPRJMOD}/Library/CMI-9705-0380-SMT-TR/CMI-9705-0380-SMT-TR.kicad_sym")(options "")(descr "")) + (lib (name "DW01A")(type "KiCad")(uri "${KIPRJMOD}/Library/DW01A/DW01A.kicad_sym")(options "")(descr "")) + (lib (name "ESP32-C3-WROOM-02-H4")(type "KiCad")(uri "${KIPRJMOD}/Library/ESP32-C3-WROOM-02-H4/ESP32-C3-WROOM-02-H4.kicad_sym")(options "")(descr "")) + (lib (name "S2B-PH-SM4-TB_LF__SN_")(type "KiCad")(uri "${KIPRJMOD}/Library/S2B-PH-SM4-TB_LF__SN_/S2B-PH-SM4-TB_LF__SN_.kicad_sym")(options "")(descr "")) + (lib (name "ST25R3911B-AQFT")(type "KiCad")(uri "${KIPRJMOD}/Library/ST25R3911B-AQFT/ST25R3911B-AQFT.kicad_sym")(options "")(descr "")) + (lib (name "TPS63060DSCT")(type "KiCad")(uri "${KIPRJMOD}/Library/TPS63060DSCT/TPS63060DSCT.kicad_sym")(options "")(descr "")) + (lib (name "TS04-66-95-BK-260-SMT")(type "KiCad")(uri "${KIPRJMOD}/Library/TS04-66-95-BK-260-SMT/TS04-66-95-BK-260-SMT.kicad_sym")(options "")(descr "")) +) diff --git a/Software/CMakeLists.txt b/Software/CMakeLists.txt new file mode 100644 index 0000000..a0a2ae6 --- /dev/null +++ b/Software/CMakeLists.txt @@ -0,0 +1,73 @@ +#THIS FILE IS AUTO GENERATED FROM THE TEMPLATE! DO NOT CHANGE! +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_VERSION 1) +cmake_minimum_required(VERSION 3.21) + +# specify cross compilers and tools +set(CMAKE_C_COMPILER arm-none-eabi-gcc) +set(CMAKE_CXX_COMPILER arm-none-eabi-g++) +set(CMAKE_ASM_COMPILER arm-none-eabi-gcc) +set(CMAKE_AR arm-none-eabi-ar) +set(CMAKE_OBJCOPY arm-none-eabi-objcopy) +set(CMAKE_OBJDUMP arm-none-eabi-objdump) +set(SIZE arm-none-eabi-size) +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +# project settings +project(FabReader2 C CXX ASM) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_C_STANDARD 11) + +#Uncomment for hardware floating point +#add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING) +#add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16) +#add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16) + +#Uncomment for software floating point +#add_compile_options(-mfloat-abi=soft) + +add_compile_options(-mcpu=cortex-m4 -mthumb -mthumb-interwork) +add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0) + +# uncomment to mitigate c++17 absolute addresses warnings +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-register") + +# Enable assembler files preprocessing +add_compile_options($<$:-x$assembler-with-cpp>) + +if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release") + message(STATUS "Maximum optimization for speed") + add_compile_options(-Ofast) +elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo") + message(STATUS "Maximum optimization for speed, debug info included") + add_compile_options(-Ofast -g) +elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel") + message(STATUS "Maximum optimization for size") + add_compile_options(-Os) +else () + message(STATUS "Minimal optimization, debug info included") + add_compile_options(-Og -g) +endif () + +include_directories(Core/Inc Drivers/STM32F3xx_HAL_Driver/Inc Drivers/STM32F3xx_HAL_Driver/Inc/Legacy Drivers/CMSIS/Device/ST/STM32F3xx/Include Drivers/CMSIS/Include) + +add_definitions(-DDEBUG -DUSE_HAL_DRIVER -DSTM32F303xE) + +file(GLOB_RECURSE SOURCES "Core/*.*" "Drivers/*.*") + +set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/STM32F303RETX_FLASH.ld) + +add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map) +add_link_options(-mcpu=cortex-m4 -mthumb -mthumb-interwork) +add_link_options(-T ${LINKER_SCRIPT}) + +add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT}) + +set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex) +set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin) + +add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD + COMMAND ${CMAKE_OBJCOPY} -Oihex $ ${HEX_FILE} + COMMAND ${CMAKE_OBJCOPY} -Obinary $ ${BIN_FILE} + COMMENT "Building ${HEX_FILE} +Building ${BIN_FILE}") diff --git a/Software/CMakeLists_template.txt b/Software/CMakeLists_template.txt new file mode 100644 index 0000000..a7472b5 --- /dev/null +++ b/Software/CMakeLists_template.txt @@ -0,0 +1,72 @@ +#${templateWarning} +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_VERSION 1) +${cmakeRequiredVersion} +# specify cross compilers and tools +set(CMAKE_C_COMPILER arm-none-eabi-gcc) +set(CMAKE_CXX_COMPILER arm-none-eabi-g++) +set(CMAKE_ASM_COMPILER arm-none-eabi-gcc) +set(CMAKE_AR arm-none-eabi-ar) +set(CMAKE_OBJCOPY arm-none-eabi-objcopy) +set(CMAKE_OBJDUMP arm-none-eabi-objdump) +set(SIZE arm-none-eabi-size) +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +# project settings +project(${projectName} C CXX ASM) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_C_STANDARD 11) + +#Uncomment for hardware floating point +#add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING) +#add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16) +#add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16) + +#Uncomment for software floating point +#add_compile_options(-mfloat-abi=soft) + +add_compile_options(-mcpu=${mcpu} -mthumb -mthumb-interwork) +add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0) + +# uncomment to mitigate c++17 absolute addresses warnings +#set(CMAKE_CXX_FLAGS "$${CMAKE_CXX_FLAGS} -Wno-register") + +# Enable assembler files preprocessing +add_compile_options($<$:-x$assembler-with-cpp>) + +if ("$${CMAKE_BUILD_TYPE}" STREQUAL "Release") + message(STATUS "Maximum optimization for speed") + add_compile_options(-Ofast) +elseif ("$${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo") + message(STATUS "Maximum optimization for speed, debug info included") + add_compile_options(-Ofast -g) +elseif ("$${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel") + message(STATUS "Maximum optimization for size") + add_compile_options(-Os) +else () + message(STATUS "Minimal optimization, debug info included") + add_compile_options(-Og -g) +endif () + +include_directories(${includes}) + +add_definitions(${defines}) + +file(GLOB_RECURSE SOURCES ${sources}) + +set(LINKER_SCRIPT $${CMAKE_SOURCE_DIR}/${linkerScript}) + +add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=$${PROJECT_BINARY_DIR}/$${PROJECT_NAME}.map) +add_link_options(-mcpu=${mcpu} -mthumb -mthumb-interwork) +add_link_options(-T $${LINKER_SCRIPT}) + +add_executable($${PROJECT_NAME}.elf $${SOURCES} $${LINKER_SCRIPT}) + +set(HEX_FILE $${PROJECT_BINARY_DIR}/$${PROJECT_NAME}.hex) +set(BIN_FILE $${PROJECT_BINARY_DIR}/$${PROJECT_NAME}.bin) + +add_custom_command(TARGET $${PROJECT_NAME}.elf POST_BUILD + COMMAND $${CMAKE_OBJCOPY} -Oihex $ $${HEX_FILE} + COMMAND $${CMAKE_OBJCOPY} -Obinary $ $${BIN_FILE} + COMMENT "Building $${HEX_FILE} +Building $${BIN_FILE}") diff --git a/Software/Core/Inc/demo.h b/Software/Core/Inc/demo.h new file mode 100644 index 0000000..79b564f --- /dev/null +++ b/Software/Core/Inc/demo.h @@ -0,0 +1,62 @@ +/** + ****************************************************************************** + * + * COPYRIGHT(c) 2017 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/*! \file + * + * \author + * + * \brief Demo functionality header file + * + */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __DEMO_H +#define __DEMO_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "platform.h" +#include "st_errno.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ + +/* Exported functions ------------------------------------------------------- */ +bool demoIni( void ); +extern void demoCycle(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __DEMO_H */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Core/Inc/demo_ce.h b/Software/Core/Inc/demo_ce.h new file mode 100644 index 0000000..6bb2d90 --- /dev/null +++ b/Software/Core/Inc/demo_ce.h @@ -0,0 +1,127 @@ +/** + ****************************************************************************** + * @file demo_ce.h + * @author MMY Application Team + * @brief Implementation of Common CardEmulation parts + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef DEMO_CE_H +#define DEMO_CE_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "platform.h" + +/** @addtogroup X-CUBE-NFC6_Applications + * @brief Sample applications for X-NUCLEO-NFC06A1 STM32 expansion boards. + * @{ + */ + +/** @addtogroup CardEmulation + * @{ + */ + +/** @defgroup CE_CardEmul + * @brief Card Emulation management functions + * @{ + */ + + +/* Exported constants --------------------------------------------------------*/ +/* T3T Information Block Bytes offset */ +#define T3T_INFBLK_VER_OFFSET 0 +#define T3T_INFBLK_NBR_OFFSET 1 +#define T3T_INFBLK_NBW_OFFSET 2 +#define T3T_INFBLK_NMAXB_OFFSET 3 +#define T3T_INFBLK_WRITEFLAG_OFFSET 9 +#define T3T_INFBLK_RWFLAG_OFFSET 10 +#define T3T_INFBLK_LN_OFFSET 11 +#define T3T_INFBCK_CHECKSUM_OFFSET 14 + +/* T3T Information Block WriteFlag values */ +#define T3T_WRITEFLAG_OFF 0x00 +#define T3T_WRITEFLAG_ON 0x0F + +/* T3T COMMAND OFFSET */ +#define T3T_CHECK_RESP_CMD_OFFSET 0 +#define T3T_CHECK_RESP_NFCID2_OFFSET 1 +#define T3T_CHECK_RESP_SF1_OFFSET 9 +#define T3T_CHECK_RESP_SF2_OFFSET 10 +#define T3T_CHECK_RESP_NOB_OFFSET 11 +#define T3T_CHECK_RESP_DATA_OFFSET 12 +#define T3T_UPDATE_RESP_CMD_OFFSET 0 +#define T3T_UPDATE_RESP_NFCID2_OFFSET 1 +#define T3T_UPDATE_RESP_SF1_OFFSET 9 +#define T3T_UPDATE_RESP_SF2_OFFSET 10 + +/* External variables --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +/** @defgroup CE_CardEmul_Exported_functions + * @{ + */ +void demoCeInit(uint8_t* nfcfNfcid); +uint16_t demoCeT3T(uint8_t *rxData, uint16_t rxDataLen, uint8_t *txBuf, uint16_t txBufLen ); +uint16_t demoCeT4T(uint8_t *rxData, uint16_t rxDataLen, uint8_t *txBuf, uint16_t txBufLen ); + + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus + } +#endif + +#endif /* DEMO_CE_H */ + +/******************* (C) COPYRIGHT 2018 STMicroelectronics *****END OF FILE****/ diff --git a/Software/Core/Inc/logger.h b/Software/Core/Inc/logger.h new file mode 100644 index 0000000..bb21870 --- /dev/null +++ b/Software/Core/Inc/logger.h @@ -0,0 +1,96 @@ +/****************************************************************************** + * @attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ +/* + * PROJECT: + * $Revision: $ + * LANGUAGE: ANSI C + */ + +/*! \file + * + * \author + * + * \brief serial output log declaration file + * + */ +/*! + * + * This driver provides a printf-like way to output log messages + * via the UART interface. It makes use of the uart driver. + * + * API: + * - Write a log message to UART output: #DEBUG + */ + +#ifndef LOGGER_H +#define LOGGER_H + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "platform.h" + +/* +****************************************************************************** +* DEFINES +****************************************************************************** +*/ +#define LOGGER_ON 1 +#define LOGGER_OFF 0 + +/*! + ***************************************************************************** + * \brief Writes out a formated string via UART interface + * + * This function is used to write a formated string via the UART interface. + * + ***************************************************************************** + */ +extern void logUsartInit(UART_HandleTypeDef *husart); + +/*! + ***************************************************************************** + * \brief Writes out a formated string via UART interface + * + * This function is used to write a formated string via the UART interface. + * + ***************************************************************************** + */ +extern int logUsart(const char* format, ...); + +/*! + ***************************************************************************** + * \brief helper to convert hex data into formated string + * + * \param[in] data : pointer to buffer to be dumped. + * + * \param[in] dataLen : buffer length + * + * \return hex formated string + * + ***************************************************************************** + */ +extern char* hex2Str(unsigned char * data, size_t dataLen); + +#endif /* LOGGER_H */ + diff --git a/Software/Core/Inc/main.h b/Software/Core/Inc/main.h new file mode 100644 index 0000000..ab0d1d4 --- /dev/null +++ b/Software/Core/Inc/main.h @@ -0,0 +1,80 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @attention + * + * Copyright (c) 2022 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +#define B1_Pin GPIO_PIN_13 +#define B1_GPIO_Port GPIOC +#define USART_TX_Pin GPIO_PIN_2 +#define USART_TX_GPIO_Port GPIOA +#define USART_RX_Pin GPIO_PIN_3 +#define USART_RX_GPIO_Port GPIOA +#define TMS_Pin GPIO_PIN_13 +#define TMS_GPIO_Port GPIOA +#define TCK_Pin GPIO_PIN_14 +#define TCK_GPIO_Port GPIOA +#define SWO_Pin GPIO_PIN_3 +#define SWO_GPIO_Port GPIOB +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/Software/Core/Inc/ndef_dump.h b/Software/Core/Inc/ndef_dump.h new file mode 100644 index 0000000..5df4424 --- /dev/null +++ b/Software/Core/Inc/ndef_dump.h @@ -0,0 +1,247 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief NDEF message dump utils header file + * + */ + +#ifndef NDEF_DUMP_H +#define NDEF_DUMP_H + + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "platform.h" +#include "ndef_record.h" +#include "ndef_message.h" +#include "ndef_types.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + + +/*! + ***************************************************************************** + * Dump an NDEF record + * + * This function dumps an NDEF record in a formatted readable style + * The verbose selector enables more or less dump output. + * + * \param[in] record + * \param[in] verbose + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordDump(const ndefRecord* record, bool verbose); + +/*! + ***************************************************************************** + * Dump an NDEF message + * + * This function dumps an NDEF message in a formatted readable style + * The verbose selector enables more or less dump output. + * + * \param[in] message + * \param[in] verbose + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefMessageDump(const ndefMessage* message, bool verbose); + +/*! + ***************************************************************************** + * Dump an Empty type + * + * \param[in] empty: Type to dump + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefEmptyTypeDump(const ndefType* empty); + +/*! + ***************************************************************************** + * Dump a Device Information RTD well-known type + * + * \param[in] devInfo: Well-known type to dump + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRtdDeviceInfoDump(const ndefType* devInfo); + +/*! + ***************************************************************************** + * Dump a Text RTD well-known type + * + * \param[in] text: Well-known type to dump + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRtdTextDump(const ndefType* text); + +/*! + ***************************************************************************** + * Dump a URI RTD well-known type + * + * \param[in] uri: Well-known type to dump + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRtdUriDump(const ndefType* uri); + +/*! + ***************************************************************************** + * Dump an External RTD type + * + * \param[in] ext: Well-known type to dump + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRtdAarDump(const ndefType* ext); + +/*! + ***************************************************************************** + * Dump a Media type + * + * \param[in] media: Media type to dump + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefMediaTypeDump(const ndefType* media); + +/*! + ***************************************************************************** + * Dump a vCard Media type + * + * \param[in] vCard: vCard to dump + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefMediaVCardDump(const ndefType* vCard); + +/*! + ***************************************************************************** + * Dump a Wifi Media type + * + * \param[in] wifi: Wifi parameters to dump + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefMediaWifiDump(const ndefType* wifi); + +/*! + ***************************************************************************** + * Dump a well-known type + * + * \param[in] record: Record to dump + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordDumpType(const ndefRecord* record); + +/*! + ***************************************************************************** + * Dump a raw buffer stored in a ndefBuffer + * + * This function dumps a raw buffer in a formatted style + * + * \param[in] string: Message displayed before the buffer + * \param[in] bufPayload: Payload buffer to display + * \param[in] verbose Increase the lenght displayed + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefBufferDump(const char* string, const ndefConstBuffer* bufPayload, bool verbose); + +/*! + ***************************************************************************** + * Dump a raw buffer stored in a ndefBuffer + * + * This function dumps a raw buffer in a formatted style + * + * \param[in] prefix: String displayed before the buffer + * \param[in] bufPayload: Payload buffer to display + * \param[in] suffix: String displayed after the buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefBufferPrint(const char* prefix, const ndefConstBuffer* bufPayload, const char* suffix); + +/*! + ***************************************************************************** + * Dump a raw buffer stored in a ndefBuffer8 + * + * This function dumps a raw buffer in a formatted style + * + * \param[in] prefix: String displayed before the buffer + * \param[in] bufPayload: Payload buffer to display + * \param[in] suffix: String displayed after the buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefBuffer8Print(const char* prefix, const ndefConstBuffer8* bufPayload, const char* suffix); + + +#endif /* NDEF_DUMP_H */ diff --git a/Software/Core/Inc/platform.h b/Software/Core/Inc/platform.h new file mode 100644 index 0000000..fdb041d --- /dev/null +++ b/Software/Core/Inc/platform.h @@ -0,0 +1,201 @@ +/****************************************************************************** + * @attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ +/*! \file + * + * \author + * + * \brief Platform header file. Defining platform independent functionality. + * + */ + + +/* + * PROJECT: + * $Revision: $ + * LANGUAGE: ISO C99 + */ + +/*! \file platform.h + * + * \author Gustavo Patricio + * + * \brief Platform specific definition layer + * + * This should contain all platform and hardware specifics such as + * GPIO assignment, system resources, locks, IRQs, etc + * + * Each distinct platform/system/board must provide this definitions + * for all SW layers to use + * + */ + +#ifndef PLATFORM_H +#define PLATFORM_H + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#ifdef STM32L476xx +#include "stm32l4xx_hal.h" +#else +#include "stm32f4xx_hal.h" +#endif + +#include +#include +#include + +#include "spi.h" +#include "timer.h" +#include "../../../../../../Downloads/STM32CubeExpansion_NFC5_V2.0.0 2/Projects/STM32F401RE-Nucleo/Applications/PollingTagDetect/Inc/main.h" +#include "logger.h" + + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ +#define ST25R391X_SS_PIN SPI1_CS_Pin /*!< GPIO pin used for ST25R3911 SPI SS */ +#define ST25R391X_SS_PORT SPI1_CS_GPIO_Port /*!< GPIO port used for ST25R3911 SPI SS port */ + +#define ST25R391X_INT_PIN IRQ_3911_Pin /*!< GPIO pin used for ST25R3911 External Interrupt */ +#define ST25R391X_INT_PORT IRQ_3911_GPIO_Port /*!< GPIO port used for ST25R3911 External Interrupt */ + +#ifdef LED_FIELD_Pin +#define PLATFORM_LED_FIELD_PIN LED_FIELD_Pin /*!< GPIO pin used as field LED */ +#endif + +#ifdef LED_FIELD_GPIO_Port +#define PLATFORM_LED_FIELD_PORT LED_FIELD_GPIO_Port /*!< GPIO port used as field LED */ +#endif + + +#define PLATFORM_LED_A_PIN LED_A_Pin /*!< GPIO pin used for LED A */ +#define PLATFORM_LED_A_PORT LED_A_GPIO_Port /*!< GPIO port used for LED A */ +#define PLATFORM_LED_B_PIN LED_B_Pin /*!< GPIO pin used for LED B */ +#define PLATFORM_LED_B_PORT LED_B_GPIO_Port /*!< GPIO port used for LED B */ +#define PLATFORM_LED_F_PIN LED_F_Pin /*!< GPIO pin used for LED F */ +#define PLATFORM_LED_F_PORT LED_F_GPIO_Port /*!< GPIO port used for LED F */ +#define PLATFORM_LED_V_PIN LED_V_Pin /*!< GPIO pin used for LED V */ +#define PLATFORM_LED_V_PORT LED_V_GPIO_Port /*!< GPIO port used for LED V */ +#define PLATFORM_LED_AP2P_PIN LED_AP2P_Pin /*!< GPIO pin used for LED AP2P */ +#define PLATFORM_LED_AP2P_PORT LED_AP2P_GPIO_Port /*!< GPIO port used for LED AP2P*/ + +#define PLATFORM_USER_BUTTON_PIN B1_Pin /*!< GPIO pin user button */ +#define PLATFORM_USER_BUTTON_PORT B1_GPIO_Port /*!< GPIO port user button */ + + +/* +****************************************************************************** +* GLOBAL MACROS +****************************************************************************** +*/ +#define platformProtectST25R391xComm() do{ globalCommProtectCnt++; __DSB();NVIC_DisableIRQ(EXTI0_IRQn);__DSB();__ISB();}while(0) /*!< Protect unique access to ST25R391x communication channel - IRQ disable on single thread environment (MCU) ; Mutex lock on a multi thread environment */ +#define platformUnprotectST25R391xComm() do{ if (--globalCommProtectCnt==0U) {NVIC_EnableIRQ(EXTI0_IRQn);} }while(0) /*!< Unprotect unique access to ST25R391x communication channel - IRQ enable on a single thread environment (MCU) ; Mutex unlock on a multi thread environment */ + +#define platformProtectST25R391xIrqStatus() platformProtectST25R391xComm() /*!< Protect unique access to IRQ status var - IRQ disable on single thread environment (MCU) ; Mutex lock on a multi thread environment */ +#define platformUnprotectST25R391xIrqStatus() platformUnprotectST25R391xComm() /*!< Unprotect the IRQ status var - IRQ enable on a single thread environment (MCU) ; Mutex unlock on a multi thread environment */ + +#define platformProtectWorker() /* Protect RFAL Worker/Task/Process from concurrent execution on multi thread platforms */ +#define platformUnprotectWorker() /* Unprotect RFAL Worker/Task/Process from concurrent execution on multi thread platforms */ + + +#define platformIrqST25R3911SetCallback( cb ) +#define platformIrqST25R3911PinInitialize() + +#define platformIrqST25R3916SetCallback( cb ) +#define platformIrqST25R3916PinInitialize() + + +#define platformLedsInitialize() /*!< Initializes the pins used as LEDs to outputs*/ + +#define platformLedOff( port, pin ) platformGpioClear((port), (pin)) /*!< Turns the given LED Off */ +#define platformLedOn( port, pin ) platformGpioSet((port), (pin)) /*!< Turns the given LED On */ +#define platformLedToogle( port, pin ) platformGpioToogle((port), (pin)) /*!< Toogle the given LED */ + +#define platformGpioSet( port, pin ) HAL_GPIO_WritePin(port, pin, GPIO_PIN_SET) /*!< Turns the given GPIO High */ +#define platformGpioClear( port, pin ) HAL_GPIO_WritePin(port, pin, GPIO_PIN_RESET) /*!< Turns the given GPIO Low */ +#define platformGpioToogle( port, pin ) HAL_GPIO_TogglePin(port, pin) /*!< Toogles the given GPIO */ +#define platformGpioIsHigh( port, pin ) (HAL_GPIO_ReadPin(port, pin) == GPIO_PIN_SET) /*!< Checks if the given LED is High */ +#define platformGpioIsLow( port, pin ) (!platformGpioIsHigh(port, pin)) /*!< Checks if the given LED is Low */ + +#define platformTimerCreate( t ) timerCalculateTimer(t) /*!< Create a timer with the given time (ms) */ +#define platformTimerIsExpired( timer ) timerIsExpired(timer) /*!< Checks if the given timer is expired */ +#define platformDelay( t ) HAL_Delay( t ) /*!< Performs a delay for the given time (ms) */ + +#define platformGetSysTick() HAL_GetTick() /*!< Get System Tick ( 1 tick = 1 ms) */ + +#define platformSpiSelect() platformGpioClear( ST25R391X_SS_PORT, ST25R391X_SS_PIN ) /*!< SPI SS\CS: Chip|Slave Select */ +#define platformSpiDeselect() platformGpioSet( ST25R391X_SS_PORT, ST25R391X_SS_PIN ) /*!< SPI SS\CS: Chip|Slave Deselect */ +#define platformSpiTxRx( txBuf, rxBuf, len ) spiTxRx( (txBuf), (rxBuf), (len) ) /*!< SPI transceive */ + + +#define platformI2CTx( txBuf, len ) /*!< I2C Transmit */ +#define platformI2CRx( txBuf, len ) /*!< I2C Receive */ +#define platformI2CStart() /*!< I2C Start condition */ +#define platformI2CStop() /*!< I2C Stop condition */ +#define platformI2CRepeatStart() /*!< I2C Repeat Start */ +#define platformI2CSlaveAddrWR(add) /*!< I2C Slave address for Write operation */ +#define platformI2CSlaveAddrRD(add) /*!< I2C Slave address for Read operation */ + +#define platformLog(...) logUsart(__VA_ARGS__) /*!< Log method */ + +/* +****************************************************************************** +* GLOBAL VARIABLES +****************************************************************************** +*/ +extern uint8_t globalCommProtectCnt; /* Global Protection Counter provided per platform - instantiated in main.c */ + +/* +****************************************************************************** +* RFAL FEATURES CONFIGURATION +****************************************************************************** +*/ + +#define RFAL_FEATURE_LISTEN_MODE false /*!< Enable/Disable RFAL support for Listen Mode */ +#define RFAL_FEATURE_WAKEUP_MODE true /*!< Enable/Disable RFAL support for the Wake-Up mode */ +#define RFAL_FEATURE_NFCA true /*!< Enable/Disable RFAL support for NFC-A (ISO14443A) */ +#define RFAL_FEATURE_NFCB true /*!< Enable/Disable RFAL support for NFC-B (ISO14443B) */ +#define RFAL_FEATURE_NFCF true /*!< Enable/Disable RFAL support for NFC-F (FeliCa) */ +#define RFAL_FEATURE_NFCV true /*!< Enable/Disable RFAL support for NFC-V (ISO15693) */ +#define RFAL_FEATURE_T1T true /*!< Enable/Disable RFAL support for T1T (Topaz) */ +#define RFAL_FEATURE_T2T true /*!< Enable/Disable RFAL support for T2T */ +#define RFAL_FEATURE_T4T true /*!< Enable/Disable RFAL support for T4T */ +#define RFAL_FEATURE_ST25TB true /*!< Enable/Disable RFAL support for ST25TB */ +#define RFAL_FEATURE_ST25xV true /*!< Enable/Disable RFAL support for ST25TV/ST25DV */ +#define RFAL_FEATURE_DYNAMIC_ANALOG_CONFIG false /*!< Enable/Disable Analog Configs to be dynamically updated (RAM) */ +#define RFAL_FEATURE_DYNAMIC_POWER false /*!< Enable/Disable RFAL dynamic power support */ +#define RFAL_FEATURE_ISO_DEP true /*!< Enable/Disable RFAL support for ISO-DEP (ISO14443-4) */ +#define RFAL_FEATURE_ISO_DEP_POLL true /*!< Enable/Disable RFAL support for Poller mode (PCD) ISO-DEP (ISO14443-4) */ +#define RFAL_FEATURE_ISO_DEP_LISTEN false /*!< Enable/Disable RFAL support for Listen mode (PICC) ISO-DEP (ISO14443-4) */ +#define RFAL_FEATURE_NFC_DEP true /*!< Enable/Disable RFAL support for NFC-DEP (NFCIP1/P2P) */ + + +#define RFAL_FEATURE_ISO_DEP_IBLOCK_MAX_LEN 256U /*!< ISO-DEP I-Block max length. Please use values as defined by rfalIsoDepFSx */ +#define RFAL_FEATURE_ISO_DEP_APDU_MAX_LEN 1024U /*!< ISO-DEP APDU max length. Please use multiples of I-Block max length */ + +#endif /* PLATFORM_H */ + + diff --git a/Software/Core/Inc/spi.h b/Software/Core/Inc/spi.h new file mode 100644 index 0000000..267663d --- /dev/null +++ b/Software/Core/Inc/spi.h @@ -0,0 +1,104 @@ +/** + ****************************************************************************** + * COPYRIGHT(c) 2016 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** +*/ +/*! \file + * + * \author + * + * \brief SPI communication header file + * + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __spi_H +#define __spi_H + +/* Includes ------------------------------------------------------------------*/ +#include "platform.h" + +/*! + ***************************************************************************** + * \brief Initalize SPI + * + * This function initalize the SPI handle. + * + * \param[in] hspi : pointer to initalized SPI block + * + ***************************************************************************** + */ +void spiInit(SPI_HandleTypeDef *hspi); + +/*! + ***************************************************************************** + * \brief Set SPI CS line + * + * \param[in] ssPort : pointer CS gpio port + * + * \param[in] ssPin : CS pin + * + * \return : none + * + ***************************************************************************** + */ +void spiSelect(GPIO_TypeDef *ssPort, uint16_t ssPin); + +/*! + ***************************************************************************** + * \brief Reset SPI CS line + * + * \param[in] ssPort : pointer CS gpio port + * + * \param[in] ssPin : CS pin + * + * \return : none + * + ***************************************************************************** + */ +void spiDeselect(GPIO_TypeDef *ssPort, uint16_t ssPin); + +/*! + ***************************************************************************** + * \brief Transmit Receive data + * + * This funtion transmits first no of "length" bytes from "txData" and tries + * then to receive "length" bytes. + * + * \param[in] txData : pointer to buffer to be transmitted. + * + * \param[out] rxData : pointer to buffer to be received. + * + * \param[in] length : buffer length + * + * \return : HAL error code + * + ***************************************************************************** + */ +HAL_StatusTypeDef spiTxRx(const uint8_t *txData, uint8_t *rxData, uint16_t length); + +#endif /*__spi_H */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Core/Inc/stm32f3xx_hal_conf.h b/Software/Core/Inc/stm32f3xx_hal_conf.h new file mode 100644 index 0000000..7ee4a2a --- /dev/null +++ b/Software/Core/Inc/stm32f3xx_hal_conf.h @@ -0,0 +1,359 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f3xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_HAL_CONF_H +#define __STM32F3xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ + +#define HAL_MODULE_ENABLED + /*#define HAL_ADC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_CAN_MODULE_ENABLED */ +/*#define HAL_CEC_MODULE_ENABLED */ +/*#define HAL_NAND_MODULE_ENABLED */ +/*#define HAL_NOR_MODULE_ENABLED */ +/*#define HAL_PCCARD_MODULE_ENABLED */ +/*#define HAL_SRAM_MODULE_ENABLED */ +/*#define HAL_HRTIM_MODULE_ENABLED */ +/*#define HAL_OPAMP_MODULE_ENABLED */ +/*#define HAL_SDADC_MODULE_ENABLED */ +/*#define HAL_TSC_MODULE_ENABLED */ +/*#define HAL_COMP_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_DAC_MODULE_ENABLED */ +/*#define HAL_I2S_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_LCD_MODULE_ENABLED */ +/*#define HAL_LPTIM_MODULE_ENABLED */ +/*#define HAL_RNG_MODULE_ENABLED */ +/*#define HAL_RTC_MODULE_ENABLED */ +#define HAL_SPI_MODULE_ENABLED +/*#define HAL_TIM_MODULE_ENABLED */ +/*#define HAL_UART_MODULE_ENABLED */ +/*#define HAL_USART_MODULE_ENABLED */ +/*#define HAL_IRDA_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +/*#define HAL_SMBUS_MODULE_ENABLED */ +/*#define HAL_WWDG_MODULE_ENABLED */ +/*#define HAL_PCD_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED +#define HAL_I2C_MODULE_ENABLED +/* ########################## HSE/HSI Values adaptation ##################### */ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +/** + * @brief In the following line adjust the External High Speed oscillator (HSE) Startup + * Timeout value + */ +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief In the following line adjust the Internal High Speed oscillator (HSI) Startup + * Timeout value + */ +#if !defined (HSI_STARTUP_TIMEOUT) + #define HSI_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for HSI start up */ +#endif /* HSI_STARTUP_TIMEOUT */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE ((uint32_t)40000) +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz + The real value may vary depending on the variations + in voltage and temperature. */ +/** + * @brief External Low Speed oscillator (LSE) value. + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE ((uint32_t)32768) /*!< Value of the External Low Speed oscillator in Hz */ +#endif /* LSE_VALUE */ + +/** + * @brief Time out for LSE start up value in ms. + */ +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/** + * @brief External clock source for I2S peripheral + * This value is used by the I2S HAL module to compute the I2S clock source + * frequency, this source is inserted directly through I2S_CKIN pad. + * - External clock generated through external PLL component on EVAL 303 (based on MCO or crystal) + * - External clock not generated on EVAL 373 + */ +#if !defined (EXTERNAL_CLOCK_VALUE) + #define EXTERNAL_CLOCK_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz*/ +#endif /* EXTERNAL_CLOCK_VALUE */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ + +#define VDD_VALUE ((uint32_t)3300) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY ((uint32_t)0) /*!< tick interrupt priority (lowest by default) */ +#define USE_RTOS 0 +#define PREFETCH_ENABLE 1 +#define INSTRUCTION_CACHE_ENABLE 0 +#define DATA_CACHE_ENABLE 0 +#define USE_SPI_CRC 0U + +#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ +#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ +#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ +#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ +#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ +#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ +#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ +#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ +#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ +#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ +#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U /* HRTIM register callback disabled */ +#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ +#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ +#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ +#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ +#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* OPAMP register callback disabled */ +#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ +#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ +#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ +#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ +#define USE_HAL_TSC_REGISTER_CALLBACKS 0U /* TSC register callback disabled */ +#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32f3xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f3xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f3xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f3xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f3xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f3xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f3xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #include "stm32f3xx_hal_can_legacy.h" +#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f3xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_COMP_MODULE_ENABLED + #include "stm32f3xx_hal_comp.h" +#endif /* HAL_COMP_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f3xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f3xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f3xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f3xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f3xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f3xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED + #include "stm32f3xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_HRTIM_MODULE_ENABLED + #include "stm32f3xx_hal_hrtim.h" +#endif /* HAL_HRTIM_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f3xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f3xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f3xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f3xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_OPAMP_MODULE_ENABLED + #include "stm32f3xx_hal_opamp.h" +#endif /* HAL_OPAMP_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f3xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f3xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f3xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SDADC_MODULE_ENABLED + #include "stm32f3xx_hal_sdadc.h" +#endif /* HAL_SDADC_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f3xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32f3xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f3xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f3xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_TSC_MODULE_ENABLED + #include "stm32f3xx_hal_tsc.h" +#endif /* HAL_TSC_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f3xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f3xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f3xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F3xx_HAL_CONF_H */ diff --git a/Software/Core/Inc/stm32f3xx_it.h b/Software/Core/Inc/stm32f3xx_it.h new file mode 100644 index 0000000..01fd19c --- /dev/null +++ b/Software/Core/Inc/stm32f3xx_it.h @@ -0,0 +1,66 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f3xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + * Copyright (c) 2022 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_IT_H +#define __STM32F3xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F3xx_IT_H */ diff --git a/Software/Core/Inc/usart.h b/Software/Core/Inc/usart.h new file mode 100644 index 0000000..80e7c3e --- /dev/null +++ b/Software/Core/Inc/usart.h @@ -0,0 +1,64 @@ +/** + ****************************************************************************** + * COPYRIGHT(c) 2016 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** +*/ +/*! \file + * + * \author + * + * \brief UART communication header file + * + */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __usart_H +#define __usart_H +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "platform.h" + +void UsartInit(UART_HandleTypeDef *husart); +uint8_t UsartTxByte(uint8_t data); +uint8_t UsartTx(uint8_t *data, uint16_t dataLen); +uint8_t UsartRx(uint8_t *data, uint16_t *dataLen); + +#ifdef __cplusplus +} +#endif +#endif /*__usart_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Core/Src/demo.c b/Software/Core/Src/demo.c new file mode 100644 index 0000000..a81e9af --- /dev/null +++ b/Software/Core/Src/demo.c @@ -0,0 +1,651 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/*! \file + * + * \author + * + * \brief Demo application + * + * This demo shows how to poll for several types of NFC cards/devices and how + * to exchange data with these devices, using the RFAL library. + * + * This demo does not fully implement the activities according to the standards, + * it performs the required to communicate with a card/device and retrieve + * its UID. Also blocking methods are used for data exchange which may lead to + * long periods of blocking CPU/MCU. + * For standard compliant example please refer to the Examples provided + * with the RFAL library. + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "demo.h" +#include "utils.h" +#include "rfal_nfc.h" + +#if defined(ST25R3916) && defined(RFAL_FEATURE_LISTEN_MODE) +#include "demo_ce.h" +#endif + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ + +/* Definition of possible states the demo state machine could have */ +#define DEMO_ST_NOTINIT 0 /*!< Demo State: Not initialized */ +#define DEMO_ST_START_DISCOVERY 1 /*!< Demo State: Start Discovery */ +#define DEMO_ST_DISCOVERY 2 /*!< Demo State: Discovery */ + +#define DEMO_NFCV_BLOCK_LEN 4 /*!< NFCV Block len */ + +#define DEMO_NFCV_USE_SELECT_MODE false /*!< NFCV demonstrate select mode */ +#define DEMO_NFCV_WRITE_TAG false /*!< NFCV demonstrate Write Single Block */ + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + +/* P2P communication data */ +static uint8_t NFCID3[] = {0x01, 0xFE, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A}; +static uint8_t GB[] = {0x46, 0x66, 0x6d, 0x01, 0x01, 0x11, 0x02, 0x02, 0x07, 0x80, 0x03, 0x02, 0x00, 0x03, 0x04, 0x01, 0x32, 0x07, 0x01, 0x03}; + +/* APDUs communication data */ +static uint8_t ndefSelectApp[] = { 0x00, 0xA4, 0x04, 0x00, 0x07, 0xD2, 0x76, 0x00, 0x00, 0x85, 0x01, 0x01, 0x00 }; +static uint8_t ccSelectFile[] = { 0x00, 0xA4, 0x00, 0x0C, 0x02, 0xE1, 0x03}; +static uint8_t readBynary[] = { 0x00, 0xB0, 0x00, 0x00, 0x0F }; +/*static uint8_t ppseSelectApp[] = { 0x00, 0xA4, 0x04, 0x00, 0x0E, 0x32, 0x50, 0x41, 0x59, 0x2E, 0x53, 0x59, 0x53, 0x2E, 0x44, 0x44, 0x46, 0x30, 0x31, 0x00 };*/ + +/* P2P communication data */ +static uint8_t ndefLLCPSYMM[] = {0x00, 0x00}; +static uint8_t ndefInit[] = {0x05, 0x20, 0x06, 0x0F, 0x75, 0x72, 0x6E, 0x3A, 0x6E, 0x66, 0x63, 0x3A, 0x73, 0x6E, 0x3A, 0x73, 0x6E, 0x65, 0x70, 0x02, 0x02, 0x07, 0x80, 0x05, 0x01, 0x02}; +static uint8_t ndefUriSTcom[] = {0x13, 0x20, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x19, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x12, 0x55, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d}; + +#if defined(ST25R3916) && defined(RFAL_FEATURE_LISTEN_MODE) +/* NFC-A CE config */ +static uint8_t ceNFCA_NFCID[] = {0x02, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; /* NFCID / UID (7 bytes) */ +static uint8_t ceNFCA_SENS_RES[] = {0x44, 0x00}; /* SENS_RES / ATQA */ +static uint8_t ceNFCA_SEL_RES = 0x20; /* SEL_RES / SAK */ + +/* NFC-F CE config */ +static uint8_t ceNFCF_nfcid2[] = {0x02, 0xFE, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; +static uint8_t ceNFCF_SC[] = {0x12, 0xFC}; +static uint8_t ceNFCF_SENSF_RES[] = {0x01, /* SENSF_RES */ + 0x02, 0xFE, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, /* NFCID2 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, /* PAD0, PAD01, MRTIcheck, MRTIupdate, PAD2 */ + 0x00, 0x00 }; /* RD */ +#endif /* RFAL_FEATURE_LISTEN_MODE */ + + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ +static rfalNfcDiscoverParam discParam; +static uint8_t state = DEMO_ST_NOTINIT; + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +static void demoP2P( void ); +static void demoAPDU( void ); +static void demoNfcv( rfalNfcvListenDevice *nfcvDev ); +static void demoNfcf( rfalNfcfListenDevice *nfcfDev ); +static void demoCE( rfalNfcDevice *nfcDev ); +static void demoNotif( rfalNfcState st ); +ReturnCode demoTransceiveBlocking( uint8_t *txBuf, uint16_t txBufSize, uint8_t **rxBuf, uint16_t **rcvLen, uint32_t fwt ); + + + +/*! + ***************************************************************************** + * \brief Demo Notification + * + * This function receives the event notifications from RFAL + ***************************************************************************** + */ +static void demoNotif( rfalNfcState st ) +{ + uint8_t devCnt; + rfalNfcDevice *dev; + + + if( st == RFAL_NFC_STATE_WAKEUP_MODE ) + { + platformLog("Wake Up mode started \r\n"); + } + else if( st == RFAL_NFC_STATE_POLL_TECHDETECT ) + { + platformLog("Wake Up mode terminated. Polling for devices \r\n"); + } + else if( st == RFAL_NFC_STATE_POLL_SELECT ) + { + /* Multiple devices were found, activate first of them */ + rfalNfcGetDevicesFound( &dev, &devCnt ); + rfalNfcSelect( 0 ); + + platformLog("Multiple Tags detected: %d \r\n", devCnt); + } +} + +/*! + ***************************************************************************** + * \brief Demo Ini + * + * This function Initializes the required layers for the demo + * + * \return true : Initialization ok + * \return false : Initialization failed + ***************************************************************************** + */ +bool demoIni( void ) +{ + ReturnCode err; + + err = rfalNfcInitialize(); + if( err == ERR_NONE ) + { + discParam.compMode = RFAL_COMPLIANCE_MODE_NFC; + discParam.devLimit = 1U; + discParam.nfcfBR = RFAL_BR_212; + discParam.ap2pBR = RFAL_BR_424; + + ST_MEMCPY( &discParam.nfcid3, NFCID3, sizeof(NFCID3) ); + ST_MEMCPY( &discParam.GB, GB, sizeof(GB) ); + discParam.GBLen = sizeof(GB); + + discParam.notifyCb = demoNotif; + discParam.totalDuration = 1000U; + discParam.wakeupEnabled = false; + discParam.wakeupConfigDefault = true; + discParam.techs2Find = ( RFAL_NFC_POLL_TECH_A | RFAL_NFC_POLL_TECH_B | RFAL_NFC_POLL_TECH_F | RFAL_NFC_POLL_TECH_V | RFAL_NFC_POLL_TECH_ST25TB ); + +#if defined(ST25R3911) || defined(ST25R3916) + discParam.techs2Find |= RFAL_NFC_POLL_TECH_AP2P; +#endif /* ST25R95 */ + + +#if defined(ST25R3916) + + /* Set configuration for NFC-A CE */ + ST_MEMCPY( discParam.lmConfigPA.SENS_RES, ceNFCA_SENS_RES, RFAL_LM_SENS_RES_LEN ); /* Set SENS_RES / ATQA */ + ST_MEMCPY( discParam.lmConfigPA.nfcid, ceNFCA_NFCID, RFAL_NFCID2_LEN ); /* Set NFCID / UID */ + discParam.lmConfigPA.nfcidLen = RFAL_LM_NFCID_LEN_07; /* Set NFCID length to 7 bytes */ + discParam.lmConfigPA.SEL_RES = ceNFCA_SEL_RES; /* Set SEL_RES / SAK */ + + /* Set configuration for NFC-F CE */ + ST_MEMCPY( discParam.lmConfigPF.SC, ceNFCF_SC, RFAL_LM_SENSF_SC_LEN ); /* Set System Code */ + ST_MEMCPY( &ceNFCF_SENSF_RES[RFAL_NFCF_LENGTH_LEN], ceNFCF_nfcid2, RFAL_LM_SENSF_RES_LEN ); /* Load NFCID2 on SENSF_RES */ + ST_MEMCPY( discParam.lmConfigPF.SENSF_RES, ceNFCF_SENSF_RES, RFAL_LM_SENSF_RES_LEN ); /* Set SENSF_RES / Poll Response */ + + discParam.techs2Find |= ( RFAL_NFC_LISTEN_TECH_A | RFAL_NFC_LISTEN_TECH_F ); + +#endif /* ST25R95 */ + + state = DEMO_ST_START_DISCOVERY; + return true; + } + return false; +} + +/*! + ***************************************************************************** + * \brief Demo Cycle + * + * This function executes the demo state machine. + * It must be called periodically + ***************************************************************************** + */ +void demoCycle( void ) +{ + static rfalNfcDevice *nfcDevice; + + rfalNfcWorker(); /* Run RFAL worker periodically */ + + /*******************************************************************************/ + /* Check if USER button is pressed */ + if( platformGpioIsLow(PLATFORM_USER_BUTTON_PORT, PLATFORM_USER_BUTTON_PIN)) + { + discParam.wakeupEnabled = !discParam.wakeupEnabled; /* enable/disable wakeup */ + state = DEMO_ST_START_DISCOVERY; /* restart loop */ + platformLog("Toggling Wake Up mode %s\r\n", discParam.wakeupEnabled ? "ON": "OFF"); + + /* Debounce button */ + while( platformGpioIsLow(PLATFORM_USER_BUTTON_PORT, PLATFORM_USER_BUTTON_PIN) ); + } + + + switch( state ) + { + /*******************************************************************************/ + case DEMO_ST_START_DISCOVERY: + + platformLedOff(PLATFORM_LED_A_PORT, PLATFORM_LED_A_PIN); + platformLedOff(PLATFORM_LED_B_PORT, PLATFORM_LED_B_PIN); + platformLedOff(PLATFORM_LED_F_PORT, PLATFORM_LED_F_PIN); + platformLedOff(PLATFORM_LED_V_PORT, PLATFORM_LED_V_PIN); + platformLedOff(PLATFORM_LED_AP2P_PORT, PLATFORM_LED_AP2P_PIN); + platformLedOff(PLATFORM_LED_FIELD_PORT, PLATFORM_LED_FIELD_PIN); + + rfalNfcDeactivate( false ); + rfalNfcDiscover( &discParam ); + + state = DEMO_ST_DISCOVERY; + break; + + /*******************************************************************************/ + case DEMO_ST_DISCOVERY: + + if( rfalNfcIsDevActivated( rfalNfcGetState() ) ) + { + rfalNfcGetActiveDevice( &nfcDevice ); + + switch( nfcDevice->type ) + { + /*******************************************************************************/ + case RFAL_NFC_LISTEN_TYPE_NFCA: + + platformLedOn(PLATFORM_LED_A_PORT, PLATFORM_LED_A_PIN); + switch( nfcDevice->dev.nfca.type ) + { + case RFAL_NFCA_T1T: + platformLog("ISO14443A/Topaz (NFC-A T1T) TAG found. UID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen ) ); + break; + + case RFAL_NFCA_T4T: + platformLog("NFCA Passive ISO-DEP device found. UID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen ) ); + + demoAPDU(); + break; + + case RFAL_NFCA_T4T_NFCDEP: + case RFAL_NFCA_NFCDEP: + platformLog("NFCA Passive P2P device found. NFCID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen ) ); + + demoP2P(); + break; + + default: + platformLog("ISO14443A/NFC-A card found. UID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen ) ); + break; + } + break; + + /*******************************************************************************/ + case RFAL_NFC_LISTEN_TYPE_NFCB: + + platformLog("ISO14443B/NFC-B card found. UID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen ) ); + platformLedOn(PLATFORM_LED_B_PORT, PLATFORM_LED_B_PIN); + + if( rfalNfcbIsIsoDepSupported( &nfcDevice->dev.nfcb ) ) + { + demoAPDU(); + } + break; + + /*******************************************************************************/ + case RFAL_NFC_LISTEN_TYPE_NFCF: + + if( rfalNfcfIsNfcDepSupported( &nfcDevice->dev.nfcf ) ) + { + platformLog("NFCF Passive P2P device found. NFCID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen ) ); + demoP2P(); + } + else + { + platformLog("Felica/NFC-F card found. UID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen )); + + demoNfcf( &nfcDevice->dev.nfcf ); + } + + platformLedOn(PLATFORM_LED_F_PORT, PLATFORM_LED_F_PIN); + break; + + /*******************************************************************************/ + case RFAL_NFC_LISTEN_TYPE_NFCV: + { + uint8_t devUID[RFAL_NFCV_UID_LEN]; + + ST_MEMCPY( devUID, nfcDevice->nfcid, nfcDevice->nfcidLen ); /* Copy the UID into local var */ + REVERSE_BYTES( devUID, RFAL_NFCV_UID_LEN ); /* Reverse the UID for display purposes */ + platformLog("ISO15693/NFC-V card found. UID: %s\r\n", hex2Str(devUID, RFAL_NFCV_UID_LEN)); + + platformLedOn(PLATFORM_LED_V_PORT, PLATFORM_LED_V_PIN); + + demoNfcv( &nfcDevice->dev.nfcv ); + } + break; + + /*******************************************************************************/ + case RFAL_NFC_LISTEN_TYPE_ST25TB: + + platformLog("ST25TB card found. UID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen )); + platformLedOn(PLATFORM_LED_B_PORT, PLATFORM_LED_B_PIN); + break; + + /*******************************************************************************/ + case RFAL_NFC_LISTEN_TYPE_AP2P: + + platformLog("NFC Active P2P device found. NFCID3: %s\r\n", hex2Str(nfcDevice->nfcid, nfcDevice->nfcidLen)); + platformLedOn(PLATFORM_LED_AP2P_PORT, PLATFORM_LED_AP2P_PIN); + + demoP2P(); + break; + + /*******************************************************************************/ + case RFAL_NFC_POLL_TYPE_NFCA: + case RFAL_NFC_POLL_TYPE_NFCF: + + platformLog("Activated in CE %s mode.\r\n", (nfcDevice->type == RFAL_NFC_POLL_TYPE_NFCA) ? "NFC-A" : "NFC-F"); + platformLedOn( ((nfcDevice->type == RFAL_NFC_POLL_TYPE_NFCA) ? PLATFORM_LED_A_PORT : PLATFORM_LED_F_PORT), + ((nfcDevice->type == RFAL_NFC_POLL_TYPE_NFCA) ? PLATFORM_LED_A_PIN : PLATFORM_LED_F_PIN) ); + + demoCE( nfcDevice ); + break; + + /*******************************************************************************/ + default: + break; + } + + rfalNfcDeactivate( false ); + platformDelay( 500 ); + state = DEMO_ST_START_DISCOVERY; + } + break; + + /*******************************************************************************/ + case DEMO_ST_NOTINIT: + default: + break; + } +} + +static void demoCE( rfalNfcDevice *nfcDev ) +{ +#if defined(ST25R3916) && defined(RFAL_FEATURE_LISTEN_MODE) + + ReturnCode err; + uint8_t *rxData; + uint16_t *rcvLen; + uint8_t txBuf[100]; + uint16_t txLen; + + demoCeInit( ceNFCF_nfcid2 ); + + do + { + rfalNfcWorker(); + + switch( rfalNfcGetState() ) + { + case RFAL_NFC_STATE_ACTIVATED: + err = demoTransceiveBlocking( NULL, 0, &rxData, &rcvLen, 0); + break; + + case RFAL_NFC_STATE_DATAEXCHANGE: + case RFAL_NFC_STATE_DATAEXCHANGE_DONE: + + txLen = ( (nfcDev->type == RFAL_NFC_POLL_TYPE_NFCA) ? demoCeT4T( rxData, *rcvLen, txBuf, sizeof(txBuf) ): demoCeT3T( rxData, *rcvLen, txBuf, sizeof(txBuf) ) ); + err = demoTransceiveBlocking( txBuf, txLen, &rxData, &rcvLen, RFAL_FWT_NONE ); + break; + + case RFAL_NFC_STATE_LISTEN_SLEEP: + default: + break; + } + } + while( (err == ERR_NONE) || (err == ERR_SLEEP_REQ) ); + +#endif /* RFAL_FEATURE_LISTEN_MODE */ +} + +/*! + ***************************************************************************** + * \brief Demo NFC-F + * + * Example how to exchange read and write blocks on a NFC-F tag + * + ***************************************************************************** + */ +static void demoNfcf( rfalNfcfListenDevice *nfcfDev ) +{ + ReturnCode err; + uint8_t buf[ (RFAL_NFCF_NFCID2_LEN + RFAL_NFCF_CMD_LEN + (3*RFAL_NFCF_BLOCK_LEN)) ]; + uint16_t rcvLen; + rfalNfcfServ srv = RFAL_NFCF_SERVICECODE_RDWR; + rfalNfcfBlockListElem bl[3]; + rfalNfcfServBlockListParam servBlock; + //uint8_t wrData[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF }; + + servBlock.numServ = 1; /* Only one Service to be used */ + servBlock.servList = &srv; /* Service Code: NDEF is Read/Writeable */ + servBlock.numBlock = 1; /* Only one block to be used */ + servBlock.blockList = bl; + bl[0].conf = RFAL_NFCF_BLOCKLISTELEM_LEN; /* Two-byte Block List Element */ + bl[0].blockNum = 0x0001; /* Block: NDEF Data */ + + err = rfalNfcfPollerCheck( nfcfDev->sensfRes.NFCID2, &servBlock, buf, sizeof(buf), &rcvLen); + platformLog(" Check Block: %s Data: %s \r\n", (err != ERR_NONE) ? "FAIL": "OK", (err != ERR_NONE) ? "" : hex2Str( &buf[1], RFAL_NFCF_BLOCK_LEN) ); + + #if 0 /* Writing example */ + err = rfalNfcfPollerUpdate( nfcfDev->sensfRes.NFCID2, &servBlock, buf , sizeof(buf), wrData, buf, sizeof(buf) ); + platformLog(" Update Block: %s Data: %s \r\n", (err != ERR_NONE) ? "FAIL": "OK", (err != ERR_NONE) ? "" : hex2Str( wrData, RFAL_NFCF_BLOCK_LEN) ); + err = rfalNfcfPollerCheck( nfcfDev->sensfRes.NFCID2, &servBlock, buf, sizeof(buf), &rcvLen); + platformLog(" Check Block: %s Data: %s \r\n", (err != ERR_NONE) ? "FAIL": "OK", (err != ERR_NONE) ? "" : hex2Str( &buf[1], RFAL_NFCF_BLOCK_LEN) ); + #endif +} + +/*! + ***************************************************************************** + * \brief Demo NFC-V Exchange + * + * Example how to exchange read and write blocks on a NFC-V tag + * + ***************************************************************************** + */ +static void demoNfcv( rfalNfcvListenDevice *nfcvDev ) +{ + ReturnCode err; + uint16_t rcvLen; + uint8_t blockNum = 1; + uint8_t rxBuf[ 1 + DEMO_NFCV_BLOCK_LEN + RFAL_CRC_LEN ]; /* Flags + Block Data + CRC */ + uint8_t * uid; +#if DEMO_NFCV_WRITE_TAG + uint8_t wrData[DEMO_NFCV_BLOCK_LEN] = { 0x11, 0x22, 0x33, 0x99 }; /* Write block example */ +#endif + + + uid = nfcvDev->InvRes.UID; + + #if DEMO_NFCV_USE_SELECT_MODE + /* + * Activate selected state + */ + err = rfalNfcvPollerSelect(RFAL_NFCV_REQ_FLAG_DEFAULT, nfcvDev->InvRes.UID ); + platformLog(" Select %s \r\n", (err != ERR_NONE) ? "FAIL (revert to addressed mode)": "OK" ); + if( err == ERR_NONE ) + { + uid = NULL; + } + #endif + + /* + * Read block using Read Single Block command + * with addressed mode (uid != NULL) or selected mode (uid == NULL) + */ + err = rfalNfcvPollerReadSingleBlock(RFAL_NFCV_REQ_FLAG_DEFAULT, uid, blockNum, rxBuf, sizeof(rxBuf), &rcvLen); + platformLog(" Read Block: %s %s\r\n", (err != ERR_NONE) ? "FAIL": "OK Data:", (err != ERR_NONE) ? "" : hex2Str( &rxBuf[1], DEMO_NFCV_BLOCK_LEN)); + + #if DEMO_NFCV_WRITE_TAG /* Writing example */ + err = rfalNfcvPollerWriteSingleBlock(RFAL_NFCV_REQ_FLAG_DEFAULT, uid, blockNum, wrData, sizeof(wrData)); + platformLog(" Write Block: %s Data: %s\r\n", (err != ERR_NONE) ? "FAIL": "OK", hex2Str( wrData, DEMO_NFCV_BLOCK_LEN) ); + err = rfalNfcvPollerReadSingleBlock(RFAL_NFCV_REQ_FLAG_DEFAULT, uid, blockNum, rxBuf, sizeof(rxBuf), &rcvLen); + platformLog(" Read Block: %s %s\r\n", (err != ERR_NONE) ? "FAIL": "OK Data:", (err != ERR_NONE) ? "" : hex2Str( &rxBuf[1], DEMO_NFCV_BLOCK_LEN)); + #endif +} + + +/*! + ***************************************************************************** + * \brief Demo P2P Exchange + * + * Sends a NDEF URI record 'http://www.ST.com' via NFC-DEP (P2P) protocol. + * + * This method sends a set of static predefined frames which tries to establish + * a LLCP connection, followed by the NDEF record, and then keeps sending + * LLCP SYMM packets to maintain the connection. + * + * + ***************************************************************************** + */ +void demoP2P( void ) +{ + uint16_t *rxLen; + uint8_t *rxData; + ReturnCode err; + + platformLog(" Initalize device .. "); + err = demoTransceiveBlocking( ndefInit, sizeof(ndefInit), &rxData, &rxLen, RFAL_FWT_NONE); + if( err != ERR_NONE ) + { + platformLog("failed."); + return; + } + platformLog("succeeded.\r\n"); + + platformLog(" Push NDEF Uri: www.ST.com .. "); + err = demoTransceiveBlocking( ndefUriSTcom, sizeof(ndefUriSTcom), &rxData, &rxLen, RFAL_FWT_NONE); + if( err != ERR_NONE ) + { + platformLog("failed."); + return; + } + platformLog("succeeded.\r\n"); + + + platformLog(" Device present, maintaining connection "); + while(err == ERR_NONE) + { + err = demoTransceiveBlocking( ndefLLCPSYMM, sizeof(ndefLLCPSYMM), &rxData, &rxLen, RFAL_FWT_NONE); + platformLog("."); + platformDelay(50); + } + platformLog("\r\n Device removed.\r\n"); +} + + +/*! + ***************************************************************************** + * \brief Demo APDUs Exchange + * + * Example how to exchange a set of predefined APDUs with PICC. The NDEF + * application will be selected and then CC will be selected and read. + * + ***************************************************************************** + */ +void demoAPDU( void ) +{ + ReturnCode err; + uint16_t *rxLen; + uint8_t *rxData; + + + /* Exchange APDU: NDEF Tag Application Select command */ + err = demoTransceiveBlocking( ndefSelectApp, sizeof(ndefSelectApp), &rxData, &rxLen, RFAL_FWT_NONE ); + platformLog(" Select NDEF Application: %s Data: %s\r\n", (err != ERR_NONE) ? "FAIL": "OK", hex2Str( rxData, *rxLen) ); + + if( (err == ERR_NONE) && rxData[0] == 0x90 && rxData[1] == 0x00) + { + /* Exchange APDU: Select Capability Container File */ + err = demoTransceiveBlocking( ccSelectFile, sizeof(ccSelectFile), &rxData, &rxLen, RFAL_FWT_NONE ); + platformLog(" Select CC: %s Data: %s\r\n", (err != ERR_NONE) ? "FAIL": "OK", hex2Str( rxData, *rxLen) ); + + /* Exchange APDU: Read Capability Container File */ + err = demoTransceiveBlocking( readBynary, sizeof(readBynary), &rxData, &rxLen, RFAL_FWT_NONE ); + platformLog(" Read CC: %s Data: %s\r\n", (err != ERR_NONE) ? "FAIL": "OK", hex2Str( rxData, *rxLen) ); + } +} + + +/*! + ***************************************************************************** + * \brief Demo Blocking Transceive + * + * Helper function to send data in a blocking manner via the rfalNfc module + * + * \warning A protocol transceive handles long timeouts (several seconds), + * transmission errors and retransmissions which may lead to a long period of + * time where the MCU/CPU is blocked in this method. + * This is a demo implementation, for a non-blocking usage example please + * refer to the Examples available with RFAL + * + * \param[in] txBuf : data to be transmitted + * \param[in] txBufSize : size of the data to be transmited + * \param[out] rxData : location where the received data has been placed + * \param[out] rcvLen : number of data bytes received + * \param[in] fwt : FWT to be used (only for RF frame interface, + * otherwise use RFAL_FWT_NONE) + * + * + * \return ERR_PARAM : Invalid parameters + * \return ERR_TIMEOUT : Timeout error + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error, activation successful + * + ***************************************************************************** + */ +ReturnCode demoTransceiveBlocking( uint8_t *txBuf, uint16_t txBufSize, uint8_t **rxData, uint16_t **rcvLen, uint32_t fwt ) +{ + ReturnCode err; + + err = rfalNfcDataExchangeStart( txBuf, txBufSize, rxData, rcvLen, fwt ); + if( err == ERR_NONE ) + { + do{ + rfalNfcWorker(); + err = rfalNfcDataExchangeGetStatus(); + } + while( err == ERR_BUSY ); + } + return err; +} + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Core/Src/demo_ce.c b/Software/Core/Src/demo_ce.c new file mode 100644 index 0000000..96e1a54 --- /dev/null +++ b/Software/Core/Src/demo_ce.c @@ -0,0 +1,672 @@ +/** + ****************************************************************************** + * @file demo_ce.c + * @author MMY Application Team + * @brief Body function to manage card emul mode + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "demo_ce.h" +#include "utils.h" +#include "st_errno.h" +#include "rfal_rf.h" +#include "rfal_nfca.h" +#include "rfal_nfcf.h" + +/** @addtogroup X-CUBE-NFC6_Applications + * @{ + */ + +/** @addtogroup CardEmulation + * @{ + */ + +/** @addtogroup CE_CardEmul + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/** @defgroup CE_CardEmul_Private_Typedef + * @{ + */ +enum States +{ + STATE_IDLE = 0, /*!< Emulated Tag state idle */ + STATE_APP_SELECTED = 1, /*!< Emulated Tag state application selected */ + STATE_CC_SELECTED = 2, /*!< Emulated Tag state CCFile selected */ + STATE_FID_SELECTED = 3, /*!< Emulated Tag state FileID selected */ +}; +/** + * @} + */ + +/* Private define ------------------------------------------------------------*/ +/** @defgroup CE_CardEmul_Private_Define + * @{ + */ + +#define NDEF_SIZE 0xFFFE /*!< Max NDEF size emulated */ +#define T4T_CLA_00 0x00 /*!< CLA value for type 4 command */ +#define T4T_INS_SELECT 0xA4 /*!< INS value for select command */ +#define T4T_INS_READ 0xB0 /*!< INS value for reabbinary command */ +#define T4T_INS_UPDATE 0xD6 /*!< INS value for update command */ +#define FID_CC 0xE103 /*!< File ID number for CCFile */ +#define FID_NDEF 0xE104 /*!< File ID number for NDEF file */ +#define T3T_BLOCK_SIZE 0x10 /*!< Block size in Type 3 Tag */ +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @defgroup CE_CardEmul_Private_Variables + * @{ + */ +static uint8_t gNfcfNfcid[RFAL_NFCF_NFCID2_LEN]; +static uint8_t ndefFile[2048]; /*!< Buffer to store NDEF File */ +static int8_t nState = STATE_IDLE; /*!< Type 4 tag emulation status */ +static int32_t nSelectedIdx = -1; /*!< current file selected */ +static int32_t nFiles = 2; /*!< Number of file emulated */ + + +/** + * CCLEN : Indicates the size of this CC File
+ * T4T_VNo : Indicates the Mapping Version
+ * MLe high : Max R-APDU size
+ * MLc high : Max C-APDU size
+ * NDEF FCI T: Indicates the NDEF-File_Ctrl_TLV
+ * NDEF FCI L: The length of the V-field
+ * NDEF FCI V1: NDEF File Identifier
+ * NDEF FCI V2: NDEF File size
+ * NDEF FCI V3: NDEF Read AC
+ * NDEF FCI V4: NDEF Write AC
+ */ +static uint8_t ccfile[] = { + 0x00, 0x0F, /* CCLEN */ + 0x20, /* T4T_VNo */ + 0x00, 0x7F, /* MLe */ + 0x00, 0x7F, /* MLc */ + 0x04, /* T */ + 0x06, /* L */ + (FID_NDEF & 0xFF00) >> 8, (FID_NDEF & 0x00FF), /* V1 */ + (NDEF_SIZE & 0xFF00) >> 8, (NDEF_SIZE & 0x00FF), /* V2 */ + 0x00, /* V3 */ + 0x00 /* V4 */ +}; + +static uint32_t pdwFileSize[] = {sizeof(ccfile), NDEF_SIZE}; /*!< Current emulated files size */ + +/** + * NDEF length
+ * NDEF Header: MB,ME,SR,Well known Type
+ * NDEF type length
+ * NDEF payload length
+ * NDEF Type : URI
+ * NDEF URI abreviation field : http://www.
+ * NDEF URI string : st.com/st25r
+ * NDEF URI string : st.com/st25-demo
+ */ +static const uint8_t ndef_uri[] = { 0x00, 0x15, /* NDEF length */ + 0xD1, /* NDEF Header */ + 0x01, /* NDEF type length */ + 0x11, /* NDEF payload length */ + 0x55, /* NDEF Type */ + 0x01, /* NDEF URI abreviation field */ + 0x73, 0x74, 0x2E, 0x63, 0x6F, /* NDEF URI string */ + 0x6D, 0x2F, 0x73, 0x74, 0x32, + 0x35, 0x2D, 0x64, 0x65, 0x6D, 0x6F }; + +/** + * Ver : Indicates the NDEF mapping versiom
+ * Nbr : Indicates the number of blocks that can be read
+ * Nbw : Indicates the number of blocks that can be written
+ * NmaxB : Indicates the maximum number of blocks available for NDEF data
+ * WriteFlag : Indicates whether a previous NDEF write procedure has finished or not
+ * RWFlag : Indicates data can be updated or not
+ * Ln : Is the size of the actual stored NDEF data in bytes
+ * Checksum : allows the Reader/Writer to check whether the Attribute Data are correct
+ */ +static uint8_t InformationBlock[] = { 0x10, /* Ver */ + 0x0F, /* Nbr */ + 0x0D, /* Nbw */ + 0x00, 0x0F, /* NmaxB */ + 0x00, 0x00, 0x00, 0x00, /* RFU */ + 0x00, /* WriteFlag */ + 0x01, /* RWFlag */ + 0x00, 0x00, 0x15, /* Ln */ + 0x00, 0x51 /* Checksum */ + }; +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup CE_CardEmul_Private_Functions + * @{ + */ + +/** + ***************************************************************************** + * @brief Compare 2 commands supplied in parameters + * + * @param[in] cmd : pointer to the received command. + * @param[in] find : pointer to the avalaible command. + * @param[in] len : length of the available command. + * + * @retval True : Same command. + * @retval False : Different command. + ***************************************************************************** + */ +static bool cmdCompare(uint8_t *cmd, uint8_t *find, uint16_t len) +{ + for(int i = 0; i < 20; i++) + { + if(!memcmp(&cmd[i],find, len)) + { + return true; + } + } + return false; +} + +/** + ***************************************************************************** + * @brief Manage the T4T Select answer to the reader + * + * @param[in] cmdData : pointer to the received command. + * @param[out] rspData : pointer to the answer to send. + * + * @return Answer size. + ***************************************************************************** + */ +static uint16_t demoCeT4TSelect(uint8_t *cmdData, uint8_t *rspData) +{ + bool success = false; + /* + * Cmd: CLA(1) | INS(1) | P1(1) | P2(1) | Lc(1) | Data(n) | [Le(1)] + * Rsp: [FCI(n)] | SW12 + * + * Select App by Name NDEF: 00 A4 04 00 07 D2 76 00 00 85 01 01 00 + * Select App by Name NDEF 4 ST: 00 A4 04 00 07 A0 00 00 00 03 00 00 00 + * Select CC FID: 00 A4 00 0C 02 xx xx + * Select NDEF FID: 00 A4 00 0C 02 xx xx + */ + + uint8_t aid[] = {0xD2, 0x76, 0x00, 0x00, 0x85, 0x01, 0x01}; + uint8_t fidCC[] = {FID_CC >> 8 , FID_CC & 0xFF}; + uint8_t fidNDEF[] = {FID_NDEF >> 8, FID_NDEF & 0xFF}; + uint8_t selectFileId[] = {0xA4, 0x00, 0x0C, 0x02, 0x00, 0x01 }; + + if(cmdCompare( cmdData, aid, sizeof(aid))) + { /* Select Appli */ + nState = STATE_APP_SELECTED; + success = true; + } + else if((nState >= STATE_APP_SELECTED) && cmdCompare(cmdData, fidCC, sizeof(fidCC))) + { /* Select CC */ + nState = STATE_CC_SELECTED; + nSelectedIdx = 0; + success = true; + } + else if((nState >= STATE_APP_SELECTED) && (cmdCompare(cmdData,fidNDEF,sizeof(fidNDEF)) || cmdCompare(cmdData,selectFileId,sizeof(selectFileId)))) + { /* Select NDEF */ + nState = STATE_FID_SELECTED; + nSelectedIdx = 1; + success = true; + } + else + { + nState = STATE_IDLE; + } + + rspData[0] = (success ? (char)0x90 : 0x6A); + rspData[1] = (success ? (char)0x00 : 0x82); + + return 2; +} + +/** + ***************************************************************************** + * @brief Manage the T4T Read answer to the reader + * + * @param[in] cmdData : pointer to the received command. + * @param[out] rspData : pointer to the answer to send. + * + * @return Answer size. + ***************************************************************************** + */ +static uint16_t demoCeT4TRead(uint8_t *cmdData, uint8_t *rspData) +{ + /* + * Cmd: CLA(1) | INS(1) | P1(1).. offset inside file high | P2(1).. offset inside file high | Le(1).. nBytes to read + * Rsp: BytesRead | SW12 + */ + unsigned short offset = (cmdData[2] << 8) | cmdData[3]; + unsigned short toRead = cmdData[4]; + uint8_t * ppbMemory; + + /* Any file selected */ + if(nSelectedIdx < 0 || nSelectedIdx >= nFiles) + { + rspData[0] = ((char)0x6A); + rspData[1] = ((char)0x82); + return 2; + } + + /* offset + length exceed file size */ + if((unsigned long)(offset + toRead) > pdwFileSize[nSelectedIdx]) + { + toRead = pdwFileSize[nSelectedIdx] - offset; + } + + ppbMemory = (nSelectedIdx == 0 ? ccfile : ndefFile); + /* read data */ + memcpy(rspData, &ppbMemory[offset], toRead); + + rspData[toRead] = ((char)0x90); + rspData[toRead+1] = ((char)0x00); + return toRead + 2; +} + +/** + ***************************************************************************** + * @brief Manage the T4T Update answer to the reader + * + * @param[in] cmdData : pointer to the received command. + * @param[in] rspData : pointer to the answer to send. + * + * @return Answer size. + ***************************************************************************** + */ +static uint16_t demoCeT4TUpdate(uint8_t *cmdData, uint8_t *rspData) +{ + uint32_t offset = (cmdData[2] << 8) | cmdData[3]; + uint32_t length = cmdData[4]; + + if(nSelectedIdx != 1) + { + rspData[0] = ((char)0x6A); + rspData[1] = ((char)0x82); + return 2; + } + + if((unsigned long)(offset + length) > pdwFileSize[nSelectedIdx]) + { + rspData[0] = ((char)0x62); + rspData[1] = ((char)0x82); + return 2; + } + + memcpy((ndefFile + offset), &cmdData[5], length); + + rspData[0] = ((char)0x90); + rspData[1] = ((char)0x00); + return 2; +} + +/** + ***************************************************************************** + * @brief Manage the T4T Read answer to the reader + * + * @param[in] cmdData : pointer to the received command. + * @param[out] rspData : pointer to the answer to send. + * + * @return Answer size. + ***************************************************************************** + */ +static uint16_t demoCeT3TCheck(uint8_t *cmdData, uint8_t *rspData) +{ + /* + * Cmd: cmd | NFCID2 | NoS | Service code list | NoB | Block list + * Rsp: rsp | NFCID2 | Status Flag 1 | Status Flag 2 | NoB | Block Data + */ + uint8_t *block; + uint16_t blocknb[256]; + uint32_t idx = 0; + uint32_t cnt = 0; + uint32_t nbmax = 0; + + /* Command response */ + rspData[idx++] = RFAL_NFCF_CMD_READ_WITHOUT_ENCRYPTION + 1; + + /* NFCID 2 bytes */ + if( ST_BYTECMP( gNfcfNfcid, &cmdData[ RFAL_NFCF_LENGTH_LEN + RFAL_NFCF_CMD_LEN ], RFAL_NFCF_NFCID2_LEN ) == 0 ) + { + ST_MEMCPY( &rspData[idx], &gNfcfNfcid, RFAL_NFCF_NFCID2_LEN ); + idx += RFAL_NFCF_NFCID2_LEN; + } + else + { + /* If NFCID2 in command is different, no answer */ + return 0; + } + + /* Check for command errors */ + if( (cmdData[10] != 1) || ((cmdData[11] != 0x09) && (cmdData[11] != 0x0B)) + || (cmdData[13] == 0) || (cmdData[13] > InformationBlock[1]) ) + { + rspData[idx++] = 0xFF; + rspData[idx++] = 0xFF; + return idx; + } + else + { + rspData[idx++] = 0x00; + rspData[idx++] = 0x00; + } + + /* Nob */ + rspData[idx++] = cmdData[13]; + + /* Retrieving block to read */ + block = &cmdData[14]; + for( cnt = 0; cnt < cmdData[13]; cnt++ ) + { + /* Check block list element size */ + if( *block & 0x80 ) + { + /* 2-byte Block List element */ + blocknb[cnt] = *(block + 1); + block += 2; + } + else + { + /* 3-byte Block List element */ + blocknb[cnt] = *(block + 1); + blocknb[cnt] <<= 8; + blocknb[cnt] |= *(block + 2); + block += 3; + } + + /* Return error if Blocknb > NmaxB */ + nbmax = InformationBlock[3]; + nbmax = (nbmax << 8) | InformationBlock[4]; + if( blocknb[cnt] > nbmax ) + { + rspData[idx - 3] = 0xFF; + rspData[idx - 2] = 0x70; + return (idx - 1); + } + } + + for( cnt = 0; cnt < cmdData[13]; cnt++ ) + { + if( blocknb[cnt] == 0x0000 ) + { + /* Read information block */ + ST_MEMCPY( &rspData[idx], InformationBlock, sizeof(InformationBlock)); + idx += sizeof(InformationBlock); + } + else + { + /* Read ndef block */ + ST_MEMCPY( &rspData[idx], &ndefFile[2 + ((blocknb[cnt] - 1) * T3T_BLOCK_SIZE) ], T3T_BLOCK_SIZE); + idx += T3T_BLOCK_SIZE; + } + } + + return idx; +} + +/** + ***************************************************************************** + * @brief Manage the T3T Update answer to the reader + * + * @param[in] cmdData : pointer to the received command. + * @param[in] rspData : pointer to the answer to send. + * + * @return Answer size. + ***************************************************************************** + */ +static uint16_t demoCeT3TUpdate(uint8_t *cmdData, uint8_t *rspData) +{ + /* + * Cmd: cmd | NFCID2 | NoS | Service code list | NoB | Block list | Block Data + * Rsp: rsp | NFCID2 | Status Flag 1 | Status Flag 2 + */ + uint8_t *block; + uint16_t blocknb[256]; + uint32_t idx = 0; + uint32_t cnt = 0; + uint32_t nbmax = 0; + + /* Command response */ + rspData[idx++] = RFAL_NFCF_CMD_WRITE_WITHOUT_ENCRYPTION + 1; + + /* NFCID 2 bytes */ + if( ST_BYTECMP( gNfcfNfcid, &cmdData[ RFAL_NFCF_LENGTH_LEN + RFAL_NFCF_CMD_LEN ], RFAL_NFCF_NFCID2_LEN ) == 0 ) + { + ST_MEMCPY( &rspData[idx], gNfcfNfcid, RFAL_NFCF_NFCID2_LEN ); + idx += RFAL_NFCF_NFCID2_LEN; + } + else + { + /* If NFCID2 in command is different, no answer */ + return 0; + } + + /* Check for command errors */ + if( (cmdData[10] != 1) || (cmdData[11] != 0x09) + || (cmdData[13] == 0) || (cmdData[13] > InformationBlock[2]) ) + { + rspData[idx++] = 0xFF; + rspData[idx++] = 0xFF; + return idx; + } + else + { + rspData[idx++] = 0x00; + rspData[idx++] = 0x00; + } + + + /* Retrieving block to read */ + block = &cmdData[14]; + for( cnt = 0; cnt < cmdData[13]; cnt++ ) + { + /* Check block list element size */ + if( *block & 0x80 ) + { + /* 2-byte Block List element */ + blocknb[cnt] = *(block + 1); + block += 2; + } + else + { + /* 3-byte Block List element */ + blocknb[cnt] = *(block + 1); + blocknb[cnt] <<= 8; + blocknb[cnt] |= *(block + 2); + block += 3; + } + /* Return error if Blocknb > NmaxB */ + nbmax = InformationBlock[3]; + nbmax = (nbmax << 8) | InformationBlock[4]; + if( blocknb[cnt] > nbmax ) + { + rspData[idx - 2] = 0xFF; + rspData[idx - 1] = 0x70; + return idx; + } + } + + for( cnt = 0; cnt < cmdData[13]; cnt++ ) + { + if( blocknb[cnt] == 0x0000 ) + { + /* Write information block */ + ST_MEMCPY( InformationBlock, block, T3T_BLOCK_SIZE); + block += T3T_BLOCK_SIZE; + } + else + { + /* Read ndef block */ + ST_MEMCPY( &ndefFile[2 + ((blocknb[cnt] - 1) * T3T_BLOCK_SIZE) ], block, T3T_BLOCK_SIZE); + block += T3T_BLOCK_SIZE; + } + } + + /* Status flag answer */ + rspData[idx++] = 0x00; + rspData[idx++] = 0x00; + + return idx; +} + + +/** + ***************************************************************************** + * @brief Demo CE Initialize + * + * Initializes the demo CE + * + * @param[in] nfcfNfcid : The NFCID to be used in T3T CE. + * + * @return None + ***************************************************************************** + */ +void demoCeInit( uint8_t* nfcfNfcid ) +{ + ST_MEMCPY(gNfcfNfcid, nfcfNfcid, RFAL_NFCF_NFCID2_LEN ); + ST_MEMCPY(ndefFile, (uint8_t *)ndef_uri, sizeof(ndef_uri) ); +} + +/** + ***************************************************************************** + * @brief Demo CE T3T + * + * Parses the received command and computes the response to be sent back to + * the Reader + * + * @param[in] rxData : pointer to the received command. + * @param[in] rxDataLen : length of the received command. + * @param[in] txBuf : pointer to where the response will be placed. + * @param[in] txBufLen : size of txBuf. + * + * @return Response size. + ***************************************************************************** + */ +uint16_t demoCeT4T(uint8_t *rxData, uint16_t rxDataLen, uint8_t *txBuf, uint16_t txBufLen ) +{ + if( (rxData == NULL) || (rxDataLen < 4) || (txBuf == NULL) || (txBufLen < 2) ) + { + return 0; + } + + if(rxData[0] == T4T_CLA_00) + { + switch(rxData[1]) + { + case T4T_INS_SELECT: + return demoCeT4TSelect(rxData, txBuf); + + case T4T_INS_READ: + return demoCeT4TRead(rxData, txBuf); + + case T4T_INS_UPDATE: + return demoCeT4TUpdate(rxData, txBuf); + + default: + break; + } + } + + /* Function not supported ... */ + txBuf[0] = ((char)0x68); + txBuf[1] = ((char)0x00); + return 2; +} + +/** + ***************************************************************************** + * @brief Demo CE T3T + * + * Parses the received command and computes the response to be sent back to + * the Reader + * + * @param[in] rxData : pointer to the received command. + * @param[in] rxDataLen : length of the received command. + * @param[in] txBuf : pointer to where the response will be placed. + * @param[in] txBufLen : size of txBuf. + * + * @return Response size. + ***************************************************************************** + */ +uint16_t demoCeT3T(uint8_t *rxData, uint16_t rxDataLen, uint8_t *txBuf, uint16_t txBufLen ) +{ + if( (rxData == NULL) || (rxDataLen < 4) || (txBuf == NULL) || (txBufLen < 2) ) + { + return 0; + } + + switch(rxData[1]) + { + case RFAL_NFCF_CMD_READ_WITHOUT_ENCRYPTION: + return demoCeT3TCheck(rxData, txBuf); + + case RFAL_NFCF_CMD_WRITE_WITHOUT_ENCRYPTION: + return demoCeT3TUpdate(rxData, txBuf); + + default: + break; + } + + /* Function not supported ... */ + txBuf[0] = ((char)0xFF); + txBuf[1] = ((char)0xFF); + return 2; +} + + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Core/Src/logger.c b/Software/Core/Src/logger.c new file mode 100644 index 0000000..76f006f --- /dev/null +++ b/Software/Core/Src/logger.c @@ -0,0 +1,157 @@ +/****************************************************************************** + * @attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ +/* + * PROJECT: + * $Revision: $ + * LANGUAGE: ANSI C + */ + +/*! \file + * + * \author + * + * \brief Debug log output utility implementation. + * + */ + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "usart.h" +#include "logger.h" +#include "st_errno.h" +#include "utils.h" +#include +#include +#include + +/* +****************************************************************************** +* LOCAL DEFINES +****************************************************************************** +*/ + + +#if (USE_LOGGER == LOGGER_ON) + +#define MAX_HEX_STR 4 +#define MAX_HEX_STR_LENGTH 128 +char hexStr[MAX_HEX_STR][MAX_HEX_STR_LENGTH]; +uint8_t hexStrIdx = 0; +#endif /* #if USE_LOGGER == LOGGER_ON */ + +#define USART_TIMEOUT 1000 + +UART_HandleTypeDef *pLogUsart = 0; +uint8_t logUsartTx(uint8_t *data, uint16_t dataLen); + +/** + * @brief This function initalize the UART handle. + * @param husart : already initalized handle to USART HW + * @retval none : + */ +void logUsartInit(UART_HandleTypeDef *husart) +{ + pLogUsart = husart; +} + +/** + * @brief This function Transmit data via USART + * @param data : data to be transmitted + * @param dataLen : length of data to be transmitted + * @retval ERR_INVALID_HANDLE : in case the SPI HW is not initalized yet + * @retval others : HAL status + */ +uint8_t logUsartTx(uint8_t *data, uint16_t dataLen) +{ + if(pLogUsart == 0) + return ERR_INVALID_HANDLE; + + return HAL_UART_Transmit(pLogUsart, data, dataLen, USART_TIMEOUT); +} + +int logUsart(const char* format, ...) +{ + #if (USE_LOGGER == LOGGER_ON) + { + #define LOG_BUFFER_SIZE 256 + char buf[LOG_BUFFER_SIZE]; + va_list argptr; + va_start(argptr, format); + int cnt = vsnprintf(buf, LOG_BUFFER_SIZE, format, argptr); + va_end(argptr); + + /* */ + logUsartTx((uint8_t*)buf, strlen(buf)); + return cnt; + } + #else + { + return 0; + } + #endif /* #if USE_LOGGER == LOGGER_ON */ +} + +/* */ + +char* hex2Str(unsigned char * data, size_t dataLen) +{ + #if (USE_LOGGER == LOGGER_ON) + { + unsigned char * pin = data; + const char * hex = "0123456789ABCDEF"; + char * pout = hexStr[hexStrIdx]; + uint8_t i = 0; + uint8_t idx = hexStrIdx; + size_t len; + + if(dataLen == 0) + { + pout[0] = 0; + } + else + { + /* Trim data that doesn't fit in buffer */ + len = MIN( dataLen , (MAX_HEX_STR_LENGTH / 2) ); + + for(; i < (len - 1); ++i) + { + *pout++ = hex[(*pin>>4)&0xF]; + *pout++ = hex[(*pin++)&0xF]; + } + *pout++ = hex[(*pin>>4)&0xF]; + *pout++ = hex[(*pin)&0xF]; + *pout = 0; + } + + hexStrIdx++; + hexStrIdx %= MAX_HEX_STR; + + return hexStr[idx]; + } + #else + { + return NULL; + } + #endif /* #if USE_LOGGER == LOGGER_ON */ +} diff --git a/Software/Core/Src/main.c b/Software/Core/Src/main.c new file mode 100644 index 0000000..08e86d9 --- /dev/null +++ b/Software/Core/Src/main.c @@ -0,0 +1,269 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + * Copyright (c) 2022 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ + SPI_HandleTypeDef hspi1; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_SPI1_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_SPI1_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; + RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief SPI1 Initialization Function + * @param None + * @retval None + */ +static void MX_SPI1_Init(void) +{ + + /* USER CODE BEGIN SPI1_Init 0 */ + + /* USER CODE END SPI1_Init 0 */ + + /* USER CODE BEGIN SPI1_Init 1 */ + + /* USER CODE END SPI1_Init 1 */ + /* SPI1 parameter configuration*/ + hspi1.Instance = SPI1; + hspi1.Init.Mode = SPI_MODE_MASTER; + hspi1.Init.Direction = SPI_DIRECTION_2LINES; + hspi1.Init.DataSize = SPI_DATASIZE_4BIT; + hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi1.Init.NSS = SPI_NSS_SOFT; + hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4; + hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi1.Init.TIMode = SPI_TIMODE_DISABLE; + hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi1.Init.CRCPolynomial = 7; + hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; + hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; + if (HAL_SPI_Init(&hspi1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN SPI1_Init 2 */ + + /* USER CODE END SPI1_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOF_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_8, GPIO_PIN_RESET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6, GPIO_PIN_RESET); + + /*Configure GPIO pin : B1_Pin */ + GPIO_InitStruct.Pin = B1_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pins : PA1 PA4 PA8 */ + GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_8; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /*Configure GPIO pins : USART_TX_Pin USART_RX_Pin */ + GPIO_InitStruct.Pin = USART_TX_Pin|USART_RX_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF7_USART2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /*Configure GPIO pins : PB0 PB4 PB5 PB6 */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + { + } + /* USER CODE END Error_Handler_Debug */ +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ diff --git a/Software/Core/Src/ndef_demo.c b/Software/Core/Src/ndef_demo.c new file mode 100644 index 0000000..d6e373b --- /dev/null +++ b/Software/Core/Src/ndef_demo.c @@ -0,0 +1,1103 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ +/*! \file + * + * \author + * + * \brief Demo application + * + * This demo shows how to poll for several types of NFC cards/devices and how + * to exchange data with these devices, using the RFAL library. + * + * This demo does not fully implement the activities according to the standards, + * it performs the required to communicate with a card/device and retrieve + * its UID. Also blocking methods are used for data exchange which may lead to + * long periods of blocking CPU/MCU. + * For standard compliant example please refer to the Examples provided + * with the RFAL library. + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "demo.h" +#include "utils.h" +#include "rfal_nfc.h" +#include "ndef_poller.h" +#include "ndef_t2t.h" +#include "ndef_t4t.h" +#include "ndef_t5t.h" +#include "ndef_message.h" +#include "ndef_types_rtd.h" +#include "ndef_dump.h" + + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ + +/* Definition of possible states the demo state machine could have */ +#define DEMO_ST_NOTINIT 0 /*!< Demo State: Not initialized */ +#define DEMO_ST_START_DISCOVERY 1 /*!< Demo State: Start Discovery */ +#define DEMO_ST_DISCOVERY 2 /*!< Demo State: Discovery */ + +#define NDEF_DEMO_READ 0U /*!< NDEF menu read */ +#define NDEF_DEMO_WRITE_MSG1 1U /*!< NDEF menu write 1 record */ +#define NDEF_DEMO_WRITE_MSG2 2U /*!< NDEF menu write 2 records */ +#define NDEF_DEMO_FORMAT_TAG 3U /*!< NDEF menu format tag */ +#if NDEF_FEATURE_ALL +#define NDEF_DEMO_MAX_FEATURES 4U /*!< Number of menu items */ +#else +#define NDEF_DEMO_MAX_FEATURES 1U /*!< Number of menu items */ +#endif /* NDEF_FEATURE_ALL */ +#define NDEF_WRITE_FORMAT_TIMEOUT 10000U /*!< When write or format mode is selected, demo returns back to read mode after a timeout */ +#define NDEF_LED_BLINK_DURATION 250U /*!< Led blink duration */ + +#define DEMO_RAW_MESSAGE_BUF_LEN 8192 /*!< Raw message buffer len */ + +#define DEMO_ST_MANUFACTURER_ID 0x02U /*!< ST Manufacturer ID */ + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + +/* P2P communication data */ +static uint8_t NFCID3[] = {0x01, 0xFE, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A}; +static uint8_t GB[] = {0x46, 0x66, 0x6d, 0x01, 0x01, 0x11, 0x02, 0x02, 0x07, 0x80, 0x03, 0x02, 0x00, 0x03, 0x04, 0x01, 0x32, 0x07, 0x01, 0x03}; + +#if defined(ST25R3916) && defined(RFAL_FEATURE_LISTEN_MODE) +/* NFC-A CE config */ +static uint8_t ceNFCA_NFCID[] = {0x02, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; /* NFCID / UID (7 bytes) */ +static uint8_t ceNFCA_SENS_RES[] = {0x44, 0x00}; /* SENS_RES / ATQA */ +static uint8_t ceNFCA_SEL_RES = 0x20; /* SEL_RES / SAK */ + +/* NFC-F CE config */ +static uint8_t ceNFCF_nfcid2[] = {0x02, 0xFE, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; +static uint8_t ceNFCF_SC[] = {0x12, 0xFC}; +static uint8_t ceNFCF_SENSF_RES[] = {0x01, /* SENSF_RES */ + 0x02, 0xFE, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, /* NFCID2 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, /* PAD0, PAD01, MRTIcheck, MRTIupdate, PAD2 */ + 0x00, 0x00 }; /* RD */ +#endif /* RFAL_FEATURE_LISTEN_MODE */ + +/* P2P communication data */ +static uint8_t ndefLLCPSYMM[] = {0x00, 0x00}; +static uint8_t ndefInit[] = {0x05, 0x20, 0x06, 0x0F, 0x75, 0x72, 0x6E, 0x3A, 0x6E, 0x66, 0x63, 0x3A, 0x73, 0x6E, 0x3A, 0x73, 0x6E, 0x65, 0x70, 0x02, 0x02, 0x07, 0x80, 0x05, 0x01, 0x02}; +static const uint8_t ndefSnepPrefix[] = { 0x13, 0x20, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00 }; +static const uint8_t URL[] = "st.com"; +static ndefConstBuffer bufURL = { URL, sizeof(URL) - 1 }; +static uint8_t ndefUriBuffer[255]; + +static uint8_t *ndefStates[] = +{ + (uint8_t *)"INVALID", + (uint8_t *)"INITIALIZED", + (uint8_t *)"READ/WRITE", + (uint8_t *)"READ-ONLY" +}; + +static const uint8_t *ndefDemoFeatureDescription[NDEF_DEMO_MAX_FEATURES] = +{ + (uint8_t *)"1. Tap a tag to read its content", +#if NDEF_FEATURE_ALL + (uint8_t *)"2. Present a tag to write a Text record", + (uint8_t *)"3. Present a tag to write a URI record and an Android Application record", + (uint8_t *)"4. Present an ST tag to format", +#endif /* NDEF_FEATURE_ALL */ +}; + +#if NDEF_FEATURE_ALL +static uint8_t ndefURI[] = "st.com"; +static uint8_t ndefTEXT[] = "Welcome to ST NDEF demo"; +static uint8_t ndefTextLangCode[] = "en"; + +static uint8_t ndefAndroidPackName[] = "com.st.st25nfc"; +#endif /* NDEF_FEATURE_ALL */ + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + +static rfalNfcDiscoverParam discParam; +static uint8_t state = DEMO_ST_NOTINIT; + +static ndefContext ndefCtx; +static uint8_t ndefDemoFeature = NDEF_DEMO_READ; +static uint8_t ndefDemoPrevFeature = 0xFF; +static bool verbose = false; + +static uint8_t rawMessageBuf[DEMO_RAW_MESSAGE_BUF_LEN]; + +static uint32_t timer; +static uint32_t timerLed; +static bool ledOn; + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +static void demoNdef(rfalNfcDevice *nfcDevice); +static void ndefCCDump(ndefContext *ctx); +static void ndefDumpSysInfo(ndefContext *ctx); + +#if NDEF_FEATURE_ALL +static bool ndefIsSTTag(ndefContext *ctx); +static void LedNotificationWriteDone(void); +#endif /* NDEF_FEATURE_ALL */ + +static void demoP2P( void ); +ReturnCode demoTransceiveBlocking( uint8_t *txBuf, uint16_t txBufSize, uint8_t **rxBuf, uint16_t **rcvLen, uint32_t fwt ); + +static void ledsOn(void); +static void ledsOff(void); + +/*! + ***************************************************************************** + * \brief Check user button + * + * This function check whethe the user button has been pressed + ***************************************************************************** + */ + +static void checkUserButton(void) +{ + /* Check if USER button is pressed */ + if( platformGpioIsLow(PLATFORM_USER_BUTTON_PORT, PLATFORM_USER_BUTTON_PIN)) + { + ndefDemoFeature++; + ndefDemoFeature %= NDEF_DEMO_MAX_FEATURES; + + ledsOff(); + ndefDemoPrevFeature = ndefDemoFeature; + platformLog("%s\r\n", ndefDemoFeatureDescription[ndefDemoFeature]); + /* Debounce button */ + while( platformGpioIsLow(PLATFORM_USER_BUTTON_PORT, PLATFORM_USER_BUTTON_PIN) ); + if( ndefDemoFeature != NDEF_DEMO_READ ) + { + timer = platformTimerCreate(NDEF_WRITE_FORMAT_TIMEOUT); + timerLed = platformTimerCreate(NDEF_LED_BLINK_DURATION); + } + } +} + +/*! + ***************************************************************************** + * \brief Show usage + * + * This function displays usage information + ***************************************************************************** + */ +static void ndefShowDemoUsage() +{ +#if NDEF_FEATURE_ALL + uint32_t i; + + platformLog("Use the User button to cycle among the different modes:\r\n"); + for (i = 0; i < SIZEOF_ARRAY(ndefDemoFeatureDescription); i++) + { + platformLog("%s\r\n", ndefDemoFeatureDescription[i]); + } + platformLog("In Write or Format mode (menu 2, 3 or 4), the demo returns to Read mode (menu 1) if no tag detected after %d seconds\r\n\n", NDEF_WRITE_FORMAT_TIMEOUT/1000); +#endif /* NDEF_FEATURE_ALL */ +} + +/*! + ***************************************************************************** + * \brief Demo Ini + * + * This function Initializes the required layers for the demo + * + * \return true : Initialization ok + * \return false : Initialization failed + ***************************************************************************** + */ +bool demoIni( void ) +{ + ReturnCode err; + +#if defined(STM32L476xx) + if( (CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk) != 0) + { + verbose = true; + } +#endif + ndefShowDemoUsage(); + + err = rfalNfcInitialize(); + if( err == ERR_NONE ) + { + discParam.compMode = RFAL_COMPLIANCE_MODE_NFC; + discParam.devLimit = 1U; + discParam.nfcfBR = RFAL_BR_212; + discParam.ap2pBR = RFAL_BR_424; + + ST_MEMCPY( &discParam.nfcid3, NFCID3, sizeof(NFCID3) ); + ST_MEMCPY( &discParam.GB, GB, sizeof(GB) ); + discParam.GBLen = sizeof(GB); + + discParam.notifyCb = NULL; + discParam.totalDuration = 1000U; + discParam.wakeupEnabled = false; + discParam.wakeupConfigDefault = true; + discParam.techs2Find = ( RFAL_NFC_POLL_TECH_A | RFAL_NFC_POLL_TECH_B | RFAL_NFC_POLL_TECH_F | RFAL_NFC_POLL_TECH_V | RFAL_NFC_POLL_TECH_ST25TB ); +#if defined(ST25R3911) || defined(ST25R3916) + discParam.techs2Find |= RFAL_NFC_POLL_TECH_AP2P; +#endif /* ST25R3911 || ST25R3916 */ + + +#if defined(ST25R3916) + + /* Set configuration for NFC-A CE */ + ST_MEMCPY( discParam.lmConfigPA.SENS_RES, ceNFCA_SENS_RES, RFAL_LM_SENS_RES_LEN ); /* Set SENS_RES / ATQA */ + ST_MEMCPY( discParam.lmConfigPA.nfcid, ceNFCA_NFCID, RFAL_NFCID2_LEN ); /* Set NFCID / UID */ + discParam.lmConfigPA.nfcidLen = RFAL_LM_NFCID_LEN_07; /* Set NFCID length to 7 bytes */ + discParam.lmConfigPA.SEL_RES = ceNFCA_SEL_RES; /* Set SEL_RES / SAK */ + + /* Set configuration for NFC-F CE */ + ST_MEMCPY( discParam.lmConfigPF.SC, ceNFCF_SC, RFAL_LM_SENSF_SC_LEN ); /* Set System Code */ + ST_MEMCPY( &ceNFCF_SENSF_RES[RFAL_NFCF_LENGTH_LEN], ceNFCF_nfcid2, RFAL_LM_SENSF_RES_LEN ); /* Load NFCID2 on SENSF_RES */ + ST_MEMCPY( discParam.lmConfigPF.SENSF_RES, ceNFCF_SENSF_RES, RFAL_LM_SENSF_RES_LEN ); /* Set SENSF_RES / Poll Response */ + + discParam.techs2Find |= ( RFAL_NFC_LISTEN_TECH_A | RFAL_NFC_LISTEN_TECH_F ); + +#endif /* ST25R3916 */ + + state = DEMO_ST_START_DISCOVERY; + return true; + } + return false; +} + +/*! + ***************************************************************************** + * \brief Demo Cycle + * + * This function executes the demo state machine. + * It must be called periodically + ***************************************************************************** + */ +void demoCycle( void ) +{ + static rfalNfcDevice *nfcDevice; + + rfalNfcaSensRes sensRes; + rfalNfcaSelRes selRes; + + rfalNfcbSensbRes sensbRes; + uint8_t sensbResLen; + + uint8_t devCnt = 0; + rfalFeliCaPollRes cardList[1]; + uint8_t collisions = 0U; + rfalNfcfSensfRes* sensfRes; + + rfalNfcvInventoryRes invRes; + uint16_t rcvdLen; + + rfalNfcWorker(); /* Run RFAL worker periodically */ + + if( (ndefDemoFeature != NDEF_DEMO_READ) && (platformTimerIsExpired(timer)) ) + { + platformLog("Timer expired, back to Read mode...\r\n"); + ndefDemoFeature = NDEF_DEMO_READ; + } + + if( ndefDemoFeature != ndefDemoPrevFeature ) + { + ndefDemoPrevFeature = ndefDemoFeature; + platformLog("%s\r\n", ndefDemoFeatureDescription[ndefDemoFeature]); + } + + if( ndefDemoFeature != NDEF_DEMO_READ ) + { + if( platformTimerIsExpired(timerLed) ) + { + timerLed = platformTimerCreate(NDEF_LED_BLINK_DURATION); + ledOn = !ledOn; + } + if( ledOn ) + { + ledsOn(); + } + else + { + ledsOff(); + } + } + + checkUserButton(); + + switch( state ) + { + /*******************************************************************************/ + case DEMO_ST_START_DISCOVERY: + ledsOff(); + + rfalNfcDeactivate( false ); + rfalNfcDiscover( &discParam ); + + state = DEMO_ST_DISCOVERY; + break; + + /*******************************************************************************/ + case DEMO_ST_DISCOVERY: + if( rfalNfcIsDevActivated( rfalNfcGetState() ) ) + { + rfalNfcGetActiveDevice( &nfcDevice ); + + ledsOff(); + platformDelay(50); + ndefDemoPrevFeature = 0xFF; /* Force the display of the prompt */ + switch( nfcDevice->type ) + { + /*******************************************************************************/ + case RFAL_NFC_LISTEN_TYPE_NFCA: + + platformLedOn(PLATFORM_LED_A_PORT, PLATFORM_LED_A_PIN); + switch( nfcDevice->dev.nfca.type ) + { + case RFAL_NFCA_T1T: + platformLog("ISO14443A/Topaz (NFC-A T1T) TAG found. UID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen ) ); + rfalNfcaPollerSleep(); + break; + + case RFAL_NFCA_T4T: + platformLog("NFCA Passive ISO-DEP device found. UID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen ) ); + demoNdef(nfcDevice); + rfalIsoDepDeselect(); + break; + + case RFAL_NFCA_T4T_NFCDEP: + case RFAL_NFCA_NFCDEP: + platformLog("NFCA Passive P2P device found. NFCID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen ) ); + demoP2P(); + break; + + default: + platformLog("ISO14443A/NFC-A card found. UID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen ) ); + demoNdef(nfcDevice); + rfalNfcaPollerSleep(); + break; + } + /* Loop until tag is removed from the field */ + platformLog("Operation completed\r\nTag can be removed from the field\r\n"); + rfalNfcaPollerInitialize(); + while( rfalNfcaPollerCheckPresence(RFAL_14443A_SHORTFRAME_CMD_WUPA, &sensRes) == ERR_NONE ) + { + if( ((nfcDevice->dev.nfca.type == RFAL_NFCA_T1T) && (!rfalNfcaIsSensResT1T(&sensRes ))) || + ((nfcDevice->dev.nfca.type != RFAL_NFCA_T1T) && (rfalNfcaPollerSelect(nfcDevice->dev.nfca.nfcId1, nfcDevice->dev.nfca.nfcId1Len, &selRes) != ERR_NONE)) ) + { + break; + } + rfalNfcaPollerSleep(); + platformDelay(130); + } + break; + + /*******************************************************************************/ + case RFAL_NFC_LISTEN_TYPE_NFCB: + + platformLog("ISO14443B/NFC-B card found. UID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen ) ); + platformLedOn(PLATFORM_LED_B_PORT, PLATFORM_LED_B_PIN); + + if( rfalNfcbIsIsoDepSupported( &nfcDevice->dev.nfcb ) ) + { + demoNdef(nfcDevice); + rfalIsoDepDeselect(); + } + else + { + rfalNfcbPollerSleep(nfcDevice->dev.nfcb.sensbRes.nfcid0); + } + /* Loop until tag is removed from the field */ + platformLog("Operation completed\r\nTag can be removed from the field\r\n"); + rfalNfcbPollerInitialize(); + while( rfalNfcbPollerCheckPresence(RFAL_NFCB_SENS_CMD_ALLB_REQ, RFAL_NFCB_SLOT_NUM_1, &sensbRes, &sensbResLen) == ERR_NONE ) + { + if( ST_BYTECMP(sensbRes.nfcid0, nfcDevice->dev.nfcb.sensbRes.nfcid0, RFAL_NFCB_NFCID0_LEN) != 0 ) + { + break; + } + rfalNfcbPollerSleep(nfcDevice->dev.nfcb.sensbRes.nfcid0); + platformDelay(130); + } + break; + + /*******************************************************************************/ + case RFAL_NFC_LISTEN_TYPE_NFCF: + + if( rfalNfcfIsNfcDepSupported( &nfcDevice->dev.nfcf ) ) + { + platformLog("NFCF Passive P2P device found. NFCID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen ) ); + demoP2P(); + } + else + { + platformLog("Felica/NFC-F card found. UID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen )); + demoNdef(nfcDevice); + } + + platformLedOn(PLATFORM_LED_F_PORT, PLATFORM_LED_F_PIN); + /* Loop until tag is removed from the field */ + platformLog("Operation completed\r\nTag can be removed from the field\r\n"); + devCnt = 1; + rfalNfcfPollerInitialize( RFAL_BR_212 ); + while (rfalNfcfPollerPoll( RFAL_FELICA_1_SLOT, RFAL_NFCF_SYSTEMCODE, RFAL_FELICA_POLL_RC_NO_REQUEST, cardList, &devCnt, &collisions ) == ERR_NONE) + { + /* Skip the length field byte */ + sensfRes = (rfalNfcfSensfRes*)&((uint8_t *)cardList)[1]; + if( ST_BYTECMP(sensfRes->NFCID2, nfcDevice->dev.nfcf.sensfRes.NFCID2, RFAL_NFCF_NFCID2_LEN) != 0 ) + { + break; + } + platformDelay(130); + } + break; + + /*******************************************************************************/ + case RFAL_NFC_LISTEN_TYPE_NFCV: + { + uint8_t devUID[RFAL_NFCV_UID_LEN]; + + ST_MEMCPY( devUID, nfcDevice->nfcid, nfcDevice->nfcidLen ); /* Copy the UID into local var */ + REVERSE_BYTES( devUID, RFAL_NFCV_UID_LEN ); /* Reverse the UID for display purposes */ + platformLog("ISO15693/NFC-V card found. UID: %s\r\n", hex2Str(devUID, RFAL_NFCV_UID_LEN)); + + platformLedOn(PLATFORM_LED_V_PORT, PLATFORM_LED_V_PIN); + + demoNdef(nfcDevice); + + /* Loop until tag is removed from the field */ + platformLog("Operation completed\r\nTag can be removed from the field\r\n"); + rfalNfcvPollerInitialize(); + while (rfalNfcvPollerInventory( RFAL_NFCV_NUM_SLOTS_1, RFAL_NFCV_UID_LEN * 8U, nfcDevice->dev.nfcv.InvRes.UID, &invRes, &rcvdLen) == ERR_NONE) + { + platformDelay(130); + } + } + break; + + /*******************************************************************************/ + case RFAL_NFC_LISTEN_TYPE_ST25TB: + + platformLog("ST25TB card found. UID: %s\r\n", hex2Str( nfcDevice->nfcid, nfcDevice->nfcidLen )); + platformLedOn(PLATFORM_LED_B_PORT, PLATFORM_LED_B_PIN); + break; + + /*******************************************************************************/ + case RFAL_NFC_LISTEN_TYPE_AP2P: + + platformLog("NFC Active P2P device found. NFCID3: %s\r\n", hex2Str(nfcDevice->nfcid, nfcDevice->nfcidLen)); + platformLedOn(PLATFORM_LED_AP2P_PORT, PLATFORM_LED_AP2P_PIN); + + demoP2P(); + break; + + /*******************************************************************************/ + default: + break; + } + + rfalNfcDeactivate( false ); + platformDelay( 500 ); + state = DEMO_ST_START_DISCOVERY; + } + break; + + /*******************************************************************************/ + case DEMO_ST_NOTINIT: + default: + break; + } +} + + +/*! + ***************************************************************************** + * \brief Demo P2P Exchange + * + * Sends a NDEF URI record 'http://www.ST.com' via NFC-DEP (P2P) protocol. + * + * This method sends a set of static predefined frames which tries to establish + * a LLCP connection, followed by the NDEF record, and then keeps sending + * LLCP SYMM packets to maintain the connection. + * + * + ***************************************************************************** + */ +void demoP2P( void ) +{ + uint16_t *rxLen; + uint8_t *rxData; + ReturnCode err; + + ndefBuffer bufPayload; + ndefMessage message; + ndefRecord record; + ndefType uri; + + platformLog(" Initalize device .. "); + err = demoTransceiveBlocking( ndefInit, sizeof(ndefInit), &rxData, &rxLen, RFAL_FWT_NONE); + if( err != ERR_NONE ) + { + platformLog("failed."); + return; + } + platformLog("succeeded.\r\n"); + + err = ndefRtdUri(&uri, NDEF_URI_PREFIX_HTTP_WWW, &bufURL); + err |= ndefRtdUriToRecord(&uri, &record); + + err |= ndefMessageInit(&message); + err |= ndefMessageAppend(&message, &record); /* To get MB and ME bits set */ + + /* Build the SNEP buffer made of the prefix, the length byte and the record */ + ST_MEMCPY(ndefUriBuffer, ndefSnepPrefix, sizeof(ndefSnepPrefix)); + + /* Skip 1 byte for length byte */ + bufPayload.buffer = ndefUriBuffer + sizeof(ndefSnepPrefix) + 1; + bufPayload.length = sizeof(ndefUriBuffer) - sizeof(ndefSnepPrefix); + err |= ndefMessageEncode(&message, &bufPayload); + + ndefUriBuffer[sizeof(ndefSnepPrefix)] = bufPayload.length; + + bufPayload.buffer = ndefUriBuffer; + bufPayload.length = sizeof(ndefSnepPrefix) + 1 + bufPayload.length; + + if( err != ERR_NONE ) + { + platformLog("NDEF message creation failed\r\n", err); + return; + } + + ndefBufferDump("URL converted to SNEP:\r\n", (ndefConstBuffer*)&bufPayload, true); + + platformLog(" Push NDEF Uri: www.ST.com .. "); + err = demoTransceiveBlocking(bufPayload.buffer, bufPayload.length, &rxData, &rxLen, RFAL_FWT_NONE); + if( err != ERR_NONE ) + { + platformLog("failed."); + return; + } + platformLog("succeeded.\r\n"); + + + platformLog(" Device present, maintaining connection "); + while(err == ERR_NONE) + { + err = demoTransceiveBlocking( ndefLLCPSYMM, sizeof(ndefLLCPSYMM), &rxData, &rxLen, RFAL_FWT_NONE); + platformLog("."); + platformDelay(50); + } + platformLog("\r\n Device removed.\r\n"); +} + + +/*! + ***************************************************************************** + * \brief Demo Blocking Transceive + * + * Helper function to send data in a blocking manner via the rfalNfc module + * + * \warning A protocol transceive handles long timeouts (several seconds), + * transmission errors and retransmissions which may lead to a long period of + * time where the MCU/CPU is blocked in this method. + * This is a demo implementation, for a non-blocking usage example please + * refer to the Examples available with RFAL + * + * \param[in] txBuf : data to be transmitted + * \param[in] txBufSize : size of the data to be transmited + * \param[out] rxData : location where the received data has been placed + * \param[out] rcvLen : number of data bytes received + * \param[in] fwt : FWT to be used (only for RF frame interface, + * otherwise use RFAL_FWT_NONE) + * + * + * \return ERR_PARAM : Invalid parameters + * \return ERR_TIMEOUT : Timeout error + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error, activation successful + * + ***************************************************************************** + */ +ReturnCode demoTransceiveBlocking( uint8_t *txBuf, uint16_t txBufSize, uint8_t **rxData, uint16_t **rcvLen, uint32_t fwt ) +{ + ReturnCode err; + + err = rfalNfcDataExchangeStart( txBuf, txBufSize, rxData, rcvLen, fwt ); + if( err == ERR_NONE ) + { + do{ + rfalNfcWorker(); + err = rfalNfcDataExchangeGetStatus(); + } + while( err == ERR_BUSY ); + } + return err; +} + +static void demoNdef(rfalNfcDevice *pNfcDevice) +{ + ReturnCode err; + ndefMessage message; + uint32_t rawMessageLen; + ndefInfo info; + ndefBuffer bufRawMessage; + ndefConstBuffer bufConstRawMessage; + +#if NDEF_FEATURE_ALL + ndefRecord record1; + ndefRecord record2; + + ndefType text; + ndefType uri; + ndefType aar; + + ndefConstBuffer8 bufTextLangCode; + ndefConstBuffer bufTextLangText; + ndefConstBuffer bufUri; + ndefConstBuffer bufAndroidPackName; +#endif /* NDEF_FEATURE_ALL */ + + + /* + * Perform NDEF Context Initialization + */ + err = ndefPollerContextInitialization(&ndefCtx, pNfcDevice); + if( err != ERR_NONE ) + { + platformLog("NDEF NOT DETECTED (ndefPollerContextInitialization returns %d)\r\n", err); + return; + } + + if( verbose & (pNfcDevice->type == RFAL_NFC_LISTEN_TYPE_NFCV) ) + { + ndefDumpSysInfo(&ndefCtx); + } + + /* + * Perform NDEF Detect procedure + */ + err = ndefPollerNdefDetect(&ndefCtx, &info); + if( err != ERR_NONE ) + { + platformLog("NDEF NOT DETECTED (ndefPollerNdefDetect returns %d)\r\n", err); + if( ndefDemoFeature != NDEF_DEMO_FORMAT_TAG) + { + return; + } + } + else + { + platformLog("%s NDEF detected.\r\n", ndefStates[info.state]); + ndefCCDump(&ndefCtx); + + if( verbose ) + { + platformLog("NDEF Len: %d, Offset=%d\r\n", ndefCtx.messageLen, ndefCtx.messageOffset); + } + } + + switch( ndefDemoFeature ) + { + /* + * Demonstrate how to read the NDEF message from the Tag + */ + case NDEF_DEMO_READ: + if( info.state == NDEF_STATE_INITIALIZED ) + { + /* Nothing to read... */ + return; + } + err = ndefPollerReadRawMessage(&ndefCtx, rawMessageBuf, sizeof(rawMessageBuf), &rawMessageLen); + if( err != ERR_NONE ) + { + platformLog("NDEF message cannot be read (ndefPollerReadRawMessage returns %d)\r\n", err); + return; + } + if( verbose ) + { + bufRawMessage.buffer = rawMessageBuf; + bufRawMessage.length = rawMessageLen; + ndefBufferDump(" NDEF Content", (ndefConstBuffer*)&bufRawMessage, verbose); + } + bufConstRawMessage.buffer = rawMessageBuf; + bufConstRawMessage.length = rawMessageLen; + err = ndefMessageDecode(&bufConstRawMessage, &message); + if( err != ERR_NONE ) + { + platformLog("NDEF message cannot be decoded (ndefMessageDecode returns %d)\r\n", err); + return; + } + err = ndefMessageDump(&message, verbose); + if( err != ERR_NONE ) + { + platformLog("NDEF message cannot be displayed (ndefMessageDump returns %d)\r\n", err); + return; + } + break; + +#if NDEF_FEATURE_ALL + /* + * Demonstrate how to encode a text record and write the message to the tag + */ + case NDEF_DEMO_WRITE_MSG1: + ndefDemoFeature = NDEF_DEMO_READ; /* returns to READ mode after write */ + err = ndefMessageInit(&message); /* Initialize message structure */ + bufTextLangCode.buffer = ndefTextLangCode; + bufTextLangCode.length = strlen((char *)ndefTextLangCode); + + bufTextLangText.buffer = ndefTEXT; + bufTextLangText.length = strlen((char *)ndefTEXT); + + err |= ndefRtdText(&text, TEXT_ENCODING_UTF8, &bufTextLangCode, &bufTextLangText); /* Initialize Text type structure */ + err |= ndefRtdTextToRecord(&text, &record1); /* Encode Text Record */ + err |= ndefMessageAppend(&message, &record1); /* Append Text record to message */ + if( err != ERR_NONE ) + { + platformLog("Message creation failed\r\n", err); + return; + } + err = ndefPollerWriteMessage(&ndefCtx, &message); /* Write message */ + if( err != ERR_NONE ) + { + platformLog("Message cannot be written (ndefPollerWriteMessage return %d)\r\n", err); + return; + } + platformLog("Wrote 1 record to the Tag\r\n"); + if( verbose ) + { + /* Dump raw message */ + bufRawMessage.buffer = rawMessageBuf; + bufRawMessage.length = sizeof(rawMessageBuf); + err = ndefMessageEncode(&message, &bufRawMessage); + if( err == ERR_NONE ) + { + ndefBufferDump("Raw message", (ndefConstBuffer*)&bufRawMessage, verbose); + } + } + LedNotificationWriteDone(); + break; + + /* + * Demonstrate how to encode a URI record and a AAR record, how to encode the message to a raw buffer and then how to write the raw buffer + */ + case NDEF_DEMO_WRITE_MSG2: + ndefDemoFeature = NDEF_DEMO_READ; /* returns to READ mode after write */ + err = ndefMessageInit(&message); /* Initialize message structure */ + bufUri.buffer = ndefURI; + bufUri.length = strlen((char *)ndefURI); + err |= ndefRtdUri(&uri, NDEF_URI_PREFIX_HTTP_WWW, &bufUri); /* Initialize URI type structure */ + err |= ndefRtdUriToRecord(&uri, &record1); /* Encode URI Record */ + + bufAndroidPackName.buffer = ndefAndroidPackName; + bufAndroidPackName.length = sizeof(ndefAndroidPackName) - 1U; + err |= ndefRtdAar(&aar, &bufAndroidPackName); /* Initialize AAR type structure */ + err |= ndefRtdAarToRecord(&aar, &record2); /* Encode AAR record */ + + err |= ndefMessageAppend(&message, &record1); /* Append URI to message */ + err |= ndefMessageAppend(&message, &record2); /* Append AAR to message (record #2 is an example of preformatted record) */ + + bufRawMessage.buffer = rawMessageBuf; + bufRawMessage.length = sizeof(rawMessageBuf); + err |= ndefMessageEncode(&message, &bufRawMessage); /* Encode the message to the raw buffer */ + if( err != ERR_NONE ) + { + platformLog("Raw message creation failed\r\n", err); + return; + } + err = ndefPollerWriteRawMessage(&ndefCtx, bufRawMessage.buffer, bufRawMessage.length); + if( err != ERR_NONE ) + { + platformLog("Message cannot be written (ndefPollerWriteRawMessage return %d)\r\n", err); + return; + } + platformLog("Wrote 2 records to the Tag\r\n"); + if( verbose ) + { + /* Dump raw message */ + ndefBufferDump("Raw message", (ndefConstBuffer*)&bufRawMessage, verbose); + } + LedNotificationWriteDone(); + break; + + /* + * Demonstrate how to format a Tag + */ + case NDEF_DEMO_FORMAT_TAG: + ndefDemoFeature = NDEF_DEMO_READ; + if( !ndefIsSTTag(&ndefCtx) ) + { + platformLog("Manufacturer ID not found or not an ST tag. Format aborted \r\n"); + return; + } + platformLog("Formatting Tag...\r\n"); + /* Format Tag */ + err = ndefPollerTagFormat(&ndefCtx, NULL, 0); + if( err != ERR_NONE ) + { + platformLog("Tag cannot be formatted (ndefPollerTagFormat returns %d)\r\n", err); + return; + } + platformLog("Tag formatted\r\n"); + LedNotificationWriteDone(); + break; +#endif /* NDEF_FEATURE_ALL */ + + default: + ndefDemoFeature = NDEF_DEMO_READ; + break; + } + return; +} + +static void ndefT2TCCDump(ndefContext *ctx) +{ + ndefConstBuffer bufCcBuf; + + platformLog(" * Magic: %2.2Xh Version: %d.%d Size: %d (%d bytes) \r\n * readAccess: %2.2xh writeAccess: %2.2xh \r\n", ctx->cc.t2t.magicNumber, ctx->cc.t2t.majorVersion, ctx->cc.t2t.minorVersion, ctx->cc.t2t.size, ctx->cc.t2t.size * 8U, ctx->cc.t2t.readAccess, ctx->cc.t2t.writeAccess); + bufCcBuf.buffer = ctx->ccBuf; + bufCcBuf.length = 4; + ndefBufferDump(" CC Raw Data", &bufCcBuf, verbose); + +} + +static void ndefT3TAIBDump(ndefContext *ctx) +{ + ndefConstBuffer bufCcBuf; + + platformLog(" * Version: %d.%d Size: %d (%d bytes) NbR: %d NbW: %d\r\n * WriteFlag: %2.2xh RWFlag: %2.2xh \r\n", ctx->cc.t3t.majorVersion, ctx->cc.t3t.minorVersion, ctx->cc.t3t.nMaxB, ctx->cc.t3t.nMaxB * 16U, ctx->cc.t3t.nbR, ctx->cc.t3t.nbW, ctx->cc.t3t.writeFlag, ctx->cc.t3t.rwFlag); + bufCcBuf.buffer = ctx->ccBuf; + bufCcBuf.length = 16; + ndefBufferDump(" CC Raw Data", &bufCcBuf, verbose); +} + +static void ndefT4TCCDump(ndefContext *ctx) +{ + ndefConstBuffer bufCcBuf; + + platformLog(" * CCLEN: %d T4T_VNo: %xh MLe: %d MLc: %d FileId: %2.2x%2.2xh FileSize: %d\r\n * readAccess: %2.2xh writeAccess: %2.2xh\r\n", ctx->cc.t4t.ccLen, ctx->cc.t4t.vNo, ctx->cc.t4t.mLe, ctx->cc.t4t.mLc, ctx->cc.t4t.fileId[0], ctx->cc.t4t.fileId[1],ctx->cc.t4t.fileSize, ctx->cc.t4t.readAccess, ctx->cc.t4t.writeAccess); + bufCcBuf.buffer = ctx->ccBuf; + bufCcBuf.length = ctx->cc.t4t.ccLen; + ndefBufferDump(" CC File Raw Data", &bufCcBuf, verbose); +} + +static void ndefT5TCCDump(ndefContext *ctx) +{ + ndefConstBuffer bufCcBuf; + + platformLog(" * Block Length: %d\r\n", ctx->subCtx.t5t.blockLen); + platformLog(" * %d bytes CC\r\n * Magic: %2.2Xh Version: %d.%d MLEN: %d (%d bytes) \r\n * readAccess: %2.2xh writeAccess: %2.2xh \r\n", ctx->cc.t5t.ccLen, ctx->cc.t5t.magicNumber, ctx->cc.t5t.majorVersion, ctx->cc.t5t.minorVersion, ctx->cc.t5t.memoryLen, ctx->cc.t5t.memoryLen * 8U, ctx->cc.t5t.readAccess, ctx->cc.t5t.writeAccess); + platformLog(" * [%c] Special Frame\r\n", ctx->cc.t5t.specialFrame ? 'X' : ' '); + platformLog(" * [%c] Multiple block Read\r\n", ctx->cc.t5t.multipleBlockRead ? 'X' : ' '); + platformLog(" * [%c] Lock Block\r\n", ctx->cc.t5t.lockBlock ? 'X' : ' '); + bufCcBuf.buffer = ctx->ccBuf; + bufCcBuf.length = ctx->cc.t5t.ccLen; + ndefBufferDump(" CC Raw Data", &bufCcBuf, verbose); +} + +static void ndefCCDump(ndefContext *ctx) +{ + if( (ctx == NULL) || !verbose) + { + return; + } + platformLog("%s", (ctx->device.type == RFAL_NFC_LISTEN_TYPE_NFCF) ? "NDEF Attribute Information Block\r\n" : "NDEF Capability Container\r\n"); + switch( ctx->device.type ) + { + case RFAL_NFC_LISTEN_TYPE_NFCA: + switch( ctx->device.dev.nfca.type ) + { + case RFAL_NFCA_T2T: + ndefT2TCCDump(ctx); + break; + case RFAL_NFCA_T4T: + ndefT4TCCDump(ctx); + break; + default: + break; + } + break; + case RFAL_NFC_LISTEN_TYPE_NFCB: + ndefT4TCCDump(ctx); + break; + case RFAL_NFC_LISTEN_TYPE_NFCF: + ndefT3TAIBDump(ctx); + break; + case RFAL_NFC_LISTEN_TYPE_NFCV: + ndefT5TCCDump(ctx); + break; + default: + break; + } +} + +static void ndefDumpSysInfo(ndefContext *ctx) +{ + ndefSystemInformation *sysInfo; + + if( (ctx == NULL) || !verbose) + { + return; + } + + if( !ctx->subCtx.t5t.sysInfoSupported ) + { + return; + } + + sysInfo = &ctx->subCtx.t5t.sysInfo; + platformLog("System Information\r\n"); + platformLog(" * %d byte(s) memory addressing\r\n", ndefT5TSysInfoMOIValue(sysInfo->infoFlags) + 1); + if( ndefT5TSysInfoDFSIDPresent(sysInfo->infoFlags) ) + { + platformLog(" * DFSID=%2.2Xh\r\n", sysInfo->DFSID); + } + if( ndefT5TSysInfoAFIPresent(sysInfo->infoFlags) ) + { + platformLog(" * AFI=%2.2Xh\r\n", sysInfo->AFI); + } + if( ndefT5TSysInfoMemSizePresent(sysInfo->infoFlags) ) + { + platformLog(" * %d blocks, %d bytes per block\r\n", sysInfo->numberOfBlock, sysInfo->blockSize); + } + if( ndefT5TSysInfoICRefPresent(sysInfo->infoFlags) ) + { + platformLog(" * ICRef=%2.2xh\r\n", sysInfo->ICRef); + } + if( ndefT5TSysInfoCmdListPresent(sysInfo->infoFlags) ) + { + platformLog(" * [%c] ReadSingleBlock \r\n", ndefT5TSysInfoReadSingleBlockSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] WriteSingleBlock \r\n", ndefT5TSysInfoWriteSingleBlockSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] LockSingleBlock \r\n", ndefT5TSysInfoLockSingleBlockSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] ReadMultipleBlocks \r\n", ndefT5TSysInfoReadMultipleBlocksSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] WriteMultipleBlocks \r\n", ndefT5TSysInfoWriteMultipleBlocksSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] Select \r\n", ndefT5TSysInfoSelectSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] ResetToReady \r\n", ndefT5TSysInfoResetToReadySupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] GetMultipleBlockSecStatus \r\n", ndefT5TSysInfoGetMultipleBlockSecStatusSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] WriteAFI \r\n", ndefT5TSysInfoWriteAFISupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] LockAFI \r\n", ndefT5TSysInfoLockAFISupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] WriteDSFID \r\n", ndefT5TSysInfoWriteDSFIDSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] LockDSFID \r\n", ndefT5TSysInfoLockDSFIDSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] GetSystemInformation \r\n", ndefT5TSysInfoGetSystemInformationSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] CustomCmds \r\n", ndefT5TSysInfoCustomCmdsSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] FastReadMultipleBlocks \r\n", ndefT5TSysInfoFastReadMultipleBlocksSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] ExtReadSingleBlock \r\n", ndefT5TSysInfoExtReadSingleBlockSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] ExtWriteSingleBlock \r\n", ndefT5TSysInfoExtWriteSingleBlockSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] ExtLockSingleBlock \r\n", ndefT5TSysInfoExtLockSingleBlockSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] ExtReadMultipleBlocks \r\n", ndefT5TSysInfoExtReadMultipleBlocksSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] ExtWriteMultipleBlocks \r\n", ndefT5TSysInfoExtWriteMultipleBlocksSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] ExtGetMultipleBlockSecStatus \r\n", ndefT5TSysInfoExtGetMultipleBlockSecStatusSupported(sysInfo->supportedCmd) ? 'X' : ' '); + platformLog(" * [%c] FastExtendedReadMultipleBlocks \r\n", ndefT5TSysInfoFastExtendedReadMultipleBlocksSupported(sysInfo->supportedCmd) ? 'X' : ' '); + } + return; +} + +#if NDEF_FEATURE_ALL +static bool ndefIsSTTag(ndefContext *ctx) +{ + bool ret = false; + +#if defined(STM32L476xx) //FIXME: temporary code to enable format tag from any manufacturer + if( (CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk) != 0) + { + ret = true; + } +#endif + if( ctx == NULL ) + { + return ret; + } + switch (ctx->device.type) + { + case RFAL_NFC_LISTEN_TYPE_NFCA: + if( (ctx->device.dev.nfca.nfcId1Len != 4) && (ctx->device.dev.nfca.nfcId1[0] == 0x02 ) ) + { + ret = true; + } + break; + case RFAL_NFC_LISTEN_TYPE_NFCF: + break; + case RFAL_NFC_LISTEN_TYPE_NFCB: + break; + case RFAL_NFC_LISTEN_TYPE_NFCV: + if( ctx->device.dev.nfcv.InvRes.UID[6] == 0x02 ) + { + ret = true; + } + break; + default: + break; + } + return (ret); +} +#endif /* NDEF_FEATURE_ALL */ + +#if NDEF_FEATURE_ALL +static void LedNotificationWriteDone(void) +{ + uint32_t i; + + for (i = 0; i < 3; i++) + { + ledsOn(); + platformDelay(100); + + ledsOff(); + platformDelay(100); + } +} + +static void ledsOn(void) +{ + platformLedOn(PLATFORM_LED_A_PORT, PLATFORM_LED_A_PIN); + platformLedOn(PLATFORM_LED_B_PORT, PLATFORM_LED_B_PIN); + platformLedOn(PLATFORM_LED_F_PORT, PLATFORM_LED_F_PIN); + platformLedOn(PLATFORM_LED_V_PORT, PLATFORM_LED_V_PIN); + platformLedOn(PLATFORM_LED_AP2P_PORT, PLATFORM_LED_AP2P_PIN); + platformLedOn(PLATFORM_LED_FIELD_PORT, PLATFORM_LED_FIELD_PIN); +} + +static void ledsOff(void) +{ + platformLedOff(PLATFORM_LED_A_PORT, PLATFORM_LED_A_PIN); + platformLedOff(PLATFORM_LED_B_PORT, PLATFORM_LED_B_PIN); + platformLedOff(PLATFORM_LED_F_PORT, PLATFORM_LED_F_PIN); + platformLedOff(PLATFORM_LED_V_PORT, PLATFORM_LED_V_PIN); + platformLedOff(PLATFORM_LED_AP2P_PORT, PLATFORM_LED_AP2P_PIN); + platformLedOff(PLATFORM_LED_FIELD_PORT, PLATFORM_LED_FIELD_PIN); +} + +#endif /* NDEF_FEATURE_ALL */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Core/Src/ndef_dump.c b/Software/Core/Src/ndef_dump.c new file mode 100644 index 0000000..f14d90a --- /dev/null +++ b/Software/Core/Src/ndef_dump.c @@ -0,0 +1,721 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief NDEF message dump utils + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "platform.h" +#include "st_errno.h" +#include "utils.h" +#include "ndef_record.h" +#include "ndef_message.h" +#include "ndef_types_rtd.h" +#include "ndef_types_mime.h" +#include "ndef_dump.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +/*! Table to associate enums to pointer to function */ +typedef struct +{ + ndefTypeId typeId; /*!< NDEF type Id */ + ReturnCode (*dump)(const ndefType* type); /*!< Pointer to dump function */ +} ndefTypeDumpTable; + + +static const ndefTypeDumpTable typeDumpTable[] = +{ + { NDEF_TYPE_EMPTY, ndefEmptyTypeDump }, + { NDEF_TYPE_RTD_DEVICE_INFO, ndefRtdDeviceInfoDump }, + { NDEF_TYPE_RTD_TEXT, ndefRtdTextDump }, + { NDEF_TYPE_RTD_URI, ndefRtdUriDump }, + { NDEF_TYPE_RTD_AAR, ndefRtdAarDump }, + { NDEF_TYPE_MEDIA_VCARD, ndefMediaVCardDump }, + { NDEF_TYPE_MEDIA_WIFI, ndefMediaWifiDump }, +}; + + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + + +/*****************************************************************************/ +static bool isPrintableASCII(const uint8_t* str, uint32_t strLen) +{ + uint32_t i; + + if ((str == NULL) || (strLen == 0)) + { + return false; + } + + for (i = 0; i < strLen; i++) + { + if ((str[i] < 0x20) || (str[i] > 0x7E)) + { + return false; + } + } + + return true; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordDump(const ndefRecord* record, bool verbose) +{ + static uint32_t index; + const uint8_t *ndefTNFNames[] = + { + (uint8_t *)"Empty", + (uint8_t *)"NFC Forum well-known type [NFC RTD]", + (uint8_t *)"Media-type as defined in RFC 2046", + (uint8_t *)"Absolute URI as defined in RFC 3986", + (uint8_t *)"NFC Forum external type [NFC RTD]", + (uint8_t *)"Unknown", + (uint8_t *)"Unchanged", + (uint8_t *)"Reserved" + }; + uint8_t* headerSR = (uint8_t*)""; + ReturnCode err; + + if (record == NULL) + { + platformLog("No record\r\n"); + return ERR_NONE; + } + + if (ndefHeaderIsSetMB(record)) + { + index = 1U; + } + else + { + index++; + } + + if (verbose == true) + { + headerSR = (uint8_t*)(ndefHeaderIsSetSR(record) ? " - Short Record" : " - Standard Record"); + } + + platformLog("Record #%d%s\r\n", index, headerSR); + + /* Well-known type dump */ + err = ndefRecordDumpType(record); + if (verbose == true) + { + /* Raw dump */ + //platformLog(" MB:%d ME:%d CF:%d SR:%d IL:%d TNF:%d\r\n", ndefHeaderMB(record), ndefHeaderME(record), ndefHeaderCF(record), ndefHeaderSR(record), ndefHeaderIL(record), ndefHeaderTNF(record)); + platformLog(" MB ME CF SR IL TNF\r\n"); + platformLog(" %d %d %d %d %d %d\r\n", ndefHeaderMB(record), ndefHeaderME(record), ndefHeaderCF(record), ndefHeaderSR(record), ndefHeaderIL(record), ndefHeaderTNF(record)); + } + if ( (err != ERR_NONE) || (verbose == true) ) + { + platformLog(" Type Name Format: %s\r\n", ndefTNFNames[ndefHeaderTNF(record)]); + + uint8_t tnf; + ndefConstBuffer8 bufRecordType; + ndefRecordGetType(record, &tnf, &bufRecordType); + if ( (tnf == NDEF_TNF_EMPTY) && (bufRecordType.length == 0U) ) + { + platformLog(" Empty NDEF record\r\n"); + } + else + { + ndefBuffer8Print(" Type: \"", &bufRecordType, "\"\r\n"); + } + + if (ndefHeaderIsSetIL(record)) + { + /* ID Length bit set */ + ndefConstBuffer8 bufRecordId; + ndefRecordGetId(record, &bufRecordId); + ndefBuffer8Print(" ID: \"", &bufRecordId, "\"\r\n"); + } + + ndefConstBuffer bufRecordPayload; + ndefRecordGetPayload(record, &bufRecordPayload); + ndefBufferDump(" Payload:", &bufRecordPayload, verbose); + } + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefMessageDump(const ndefMessage* message, bool verbose) +{ + ReturnCode err; + ndefRecord* record; + + if (message == NULL) + { + platformLog("Empty NDEF message\r\n"); + return ERR_NONE; + } + else + { + platformLog("Decoding NDEF message\r\n"); + } + + record = ndefMessageGetFirstRecord(message); + + while (record != NULL) + { + err = ndefRecordDump(record, verbose); + if (err != ERR_NONE) + { + return err; + } + record = ndefMessageGetNextRecord(record); + } + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefEmptyTypeDump(const ndefType* empty) +{ + if (empty == NULL) + { + return ERR_PARAM; + } + + if (empty->id != NDEF_TYPE_EMPTY) + { + return ERR_PARAM; + } + + platformLog(" Empty record\r\n"); + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRtdDeviceInfoDump(const ndefType* devInfo) +{ + ndefTypeRtdDeviceInfo devInfoData; + uint32_t type; + uint32_t i; + + const uint8_t* ndefDeviceInfoName[] = + { + (uint8_t*)"Manufacturer", + (uint8_t*)"Model", + (uint8_t*)"Device", + (uint8_t*)"UUID", + (uint8_t*)"Firmware version", + }; + + if (devInfo == NULL) + { + return ERR_PARAM; + } + + if (devInfo->id != NDEF_TYPE_RTD_DEVICE_INFO) + { + return ERR_PARAM; + } + + ndefGetRtdDeviceInfo(devInfo, &devInfoData); + + platformLog(" Device Information:\r\n"); + + for (type = 0; type < NDEF_DEVICE_INFO_TYPE_COUNT; type++) + { + if (devInfoData.devInfo[type].buffer != NULL) + { + platformLog(" - %s: ", ndefDeviceInfoName[devInfoData.devInfo[type].type]); + + if (type != NDEF_DEVICE_INFO_UUID) + { + for (i = 0; i < devInfoData.devInfo[type].length; i++) + { + platformLog("%c", devInfoData.devInfo[type].buffer[i]); /* character */ + } + } + else + { + for (i = 0; i < devInfoData.devInfo[type].length; i++) + { + platformLog("%.2X", devInfoData.devInfo[type].buffer[i]); /* hex number */ + } + } + platformLog("\r\n"); + } + } + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRtdTextDump(const ndefType* text) +{ + uint8_t utfEncoding; + ndefConstBuffer8 bufLanguageCode; + ndefConstBuffer bufSentence; + + if (text == NULL) + { + return ERR_PARAM; + } + + if (text->id != NDEF_TYPE_RTD_TEXT) + { + return ERR_PARAM; + } + + ndefGetRtdText(text, &utfEncoding, &bufLanguageCode, &bufSentence); + + ndefBufferPrint(" Text: \"", &bufSentence, ""); + + platformLog("\" (%s,", utfEncoding == TEXT_ENCODING_UTF8 ? "UTF8" : "UTF16"); + + ndefBuffer8Print(" language code \"", &bufLanguageCode, "\")\r\n"); + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRtdUriDump(const ndefType* uri) +{ + ndefConstBuffer bufProtocol; + ndefConstBuffer bufUriString; + + if (uri == NULL) + { + return ERR_PARAM; + } + + if (uri->id != NDEF_TYPE_RTD_URI) + { + return ERR_PARAM; + } + + ndefGetRtdUri(uri, &bufProtocol, &bufUriString); + + ndefBufferPrint("URI: (", &bufProtocol, ")"); + ndefBufferPrint("", &bufUriString, "\r\n"); + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRtdAarDump(const ndefType* aar) +{ + ndefConstBuffer bufAarString; + + if (aar == NULL) + { + return ERR_PARAM; + } + + if (aar->id != NDEF_TYPE_RTD_AAR) + { + return ERR_PARAM; + } + + ndefGetRtdAar(aar, &bufAarString); + + ndefBufferPrint(" AAR Package: ", &bufAarString, "\r\n"); + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefMediaTypeDump(const ndefType* media) +{ + ndefConstBuffer8 bufType; + ndefConstBuffer bufPayload; + + if (media == NULL) + { + return ERR_PARAM; + } + + if (media->id != NDEF_TYPE_MEDIA) + { + return ERR_PARAM; + } + + ndefGetMedia(media, &bufType, &bufPayload); + + ndefBuffer8Print(" Media Type: ", &bufType, "\r\n"); + ndefBufferPrint(" Payload: ", &bufPayload, "\r\n"); + + return ERR_NONE; +} + + +/*****************************************************************************/ +static ReturnCode ndefMediaVCardTranslate(const ndefConstBuffer* bufText, ndefConstBuffer* bufTranslation) +{ + typedef struct { + uint8_t* vCardString; + uint8_t* english; + } ndefTranslate; + + const ndefTranslate translate[] = + { + { (uint8_t*)"N" , (uint8_t*)"Name" }, + { (uint8_t*)"FN" , (uint8_t*)"Formatted Name" }, + { (uint8_t*)"ADR" , (uint8_t*)"Address" }, + { (uint8_t*)"TEL" , (uint8_t*)"Phone" }, + { (uint8_t*)"EMAIL" , (uint8_t*)"Email" }, + { (uint8_t*)"TITLE" , (uint8_t*)"Title" }, + { (uint8_t*)"ORG" , (uint8_t*)"Org" }, + { (uint8_t*)"URL" , (uint8_t*)"URL" }, + { (uint8_t*)"PHOTO" , (uint8_t*)"Photo" }, + }; + + uint32_t i; + + if ( (bufText == NULL) || (bufTranslation == NULL) ) + { + return ERR_PROTO; + } + + for (i = 0; i < SIZEOF_ARRAY(translate); i++) + { + if (ST_BYTECMP(bufText->buffer, translate[i].vCardString, strlen((char*)translate[i].vCardString)) == 0) + { + bufTranslation->buffer = translate[i].english; + bufTranslation->length = strlen((char*)translate[i].english); + + return ERR_NONE; + } + } + + bufTranslation->buffer = bufText->buffer; + bufTranslation->length = bufText->length; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefMediaVCardDump(const ndefType* vCard) +{ + ndefConstBuffer bufTypeN = { (uint8_t*)"N", strlen((char*)"N") }; + ndefConstBuffer bufTypeFN = { (uint8_t*)"FN", strlen((char*)"FN") }; + ndefConstBuffer bufTypeADR = { (uint8_t*)"ADR", strlen((char*)"ADR") }; + ndefConstBuffer bufTypeTEL = { (uint8_t*)"TEL", strlen((char*)"TEL") }; + ndefConstBuffer bufTypeEMAIL = { (uint8_t*)"EMAIL", strlen((char*)"EMAIL") }; + ndefConstBuffer bufTypeTITLE = { (uint8_t*)"TITLE", strlen((char*)"TITLE") }; + ndefConstBuffer bufTypeORG = { (uint8_t*)"ORG", strlen((char*)"ORG") }; + ndefConstBuffer bufTypeURL = { (uint8_t*)"URL", strlen((char*)"URL") }; + ndefConstBuffer bufTypePHOTO = { (uint8_t*)"PHOTO", strlen((char*)"PHOTO") }; + + const ndefConstBuffer* bufVCardField[] = { + &bufTypeN , + &bufTypeFN , + &bufTypeADR , + &bufTypeTEL , + &bufTypeEMAIL, + &bufTypeTITLE, + &bufTypeORG , + &bufTypeURL , + &bufTypePHOTO, + }; + + uint32_t i; + const ndefConstBuffer* bufType; + ndefConstBuffer bufSubType; + ndefConstBuffer bufValue; + + if (vCard == NULL) + { + return ERR_PARAM; + } + + if (vCard->id != NDEF_TYPE_MEDIA_VCARD) + { + return ERR_PARAM; + } + + platformLog(" vCard decoded: \r\n"); + + for (i = 0; i < SIZEOF_ARRAY(bufVCardField); i++) + { + /* Requesting vCard field */ + bufType = bufVCardField[i]; + + /* Get information from vCard */ + ndefGetVCard(vCard, bufType, &bufSubType, &bufValue); + + if (bufValue.buffer != NULL) + { + ndefConstBuffer bufTypeTranslate; + ndefMediaVCardTranslate(bufType, &bufTypeTranslate); + + /* Type */ + ndefBufferPrint(" ", &bufTypeTranslate, ""); + + /* Subtype, if any */ + if (bufSubType.buffer != NULL) + { + ndefBufferPrint(" (", &bufSubType, ")"); + } + + /* Value */ + if (ST_BYTECMP(bufType->buffer, bufTypePHOTO.buffer, bufTypePHOTO.length) != 0) + { + ndefBufferPrint(": ", &bufValue, "\r\n"); + } + else + { + platformLog("Photo: \r\n"); + } + } + } + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefMediaWifiDump(const ndefType* wifi) +{ + ndefTypeWifi wifiConfig; + + if (wifi == NULL) + { + return ERR_PARAM; + } + + if (wifi->id != NDEF_TYPE_MEDIA_WIFI) + { + return ERR_PARAM; + } + + ndefGetWifi(wifi, &wifiConfig); + + platformLog(" Wifi config: \r\n"); + ndefBufferDump(" Network SSID:", &wifiConfig.bufNetworkSSID, false); + ndefBufferDump(" Network Key:", &wifiConfig.bufNetworkKey, false); + platformLog(" Authentication: %d\r\n", wifiConfig.authentication); + platformLog(" Encryption: %d\r\n", wifiConfig.encryption); + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordDumpType(const ndefRecord* record) +{ + ReturnCode err; + ndefType type; + uint32_t i; + + err = ndefRecordToType(record, &type); + if (err != ERR_NONE) + { + return err; + } + + for (i = 0; i < SIZEOF_ARRAY(typeDumpTable); i++) + { + if (type.id == typeDumpTable[i].typeId) + { + /* Call the appropriate function to the matching record type */ + if (typeDumpTable[i].dump != NULL) + { + return typeDumpTable[i].dump(&type); + } + } + } + + return ERR_NOT_IMPLEMENTED; +} + + +/*****************************************************************************/ +static ReturnCode ndefBufferDumpLine(const uint8_t* buffer, const uint32_t offset, uint32_t lineLength, uint32_t remaining) +{ + uint32_t j; + + if (buffer == NULL) + { + return ERR_PARAM; + } + + platformLog(" [%.4X] ", offset); + + /* Dump hex data */ + for (j = 0; j < remaining; j++) + { + platformLog("%.2X ", buffer[offset + j]); + } + /* Fill hex section if needed */ + for (j = 0; j < lineLength - remaining; j++) + { + platformLog(" "); + } + + /* Dump characters */ + platformLog("|"); + for (j = 0; j < remaining; j++) + { + /* Dump only ASCII characters, otherwise replace with a '.' */ + platformLog("%2c", isPrintableASCII(&buffer[offset + j], 1) ? buffer[offset + j] : '.'); + } + /* Fill ASCII section if needed */ + for (j = 0; j < lineLength - remaining; j++) + { + platformLog(" "); + } + platformLog(" |\r\n"); + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefBufferDump(const char* string, const ndefConstBuffer* bufPayload, bool verbose) +{ + uint32_t bufferLengthMax = 32; + const uint32_t lineLength = 8; + uint32_t displayed; + uint32_t remaining; + uint32_t offset; + + if ( (string == NULL) || (bufPayload == NULL) ) + { + return ERR_PARAM; + } + + displayed = bufPayload->length; + remaining = bufPayload->length; + + platformLog("%s (length %d)\r\n", string, bufPayload->length); + if (bufPayload->buffer == NULL) + { + platformLog(" \r\n"); + return ERR_NONE; + } + + if (verbose == true) + { + bufferLengthMax = 256; + } + if (bufPayload->length > bufferLengthMax) + { + /* Truncate output */ + displayed = bufferLengthMax; + } + + for (offset = 0; offset < displayed; offset += lineLength) + { + ndefBufferDumpLine(bufPayload->buffer, offset, lineLength, remaining > lineLength ? lineLength : remaining); + remaining -= lineLength; + } + + if (displayed < bufPayload->length) + { + platformLog(" ... (truncated)\r\n"); + } + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefBufferPrint(const char* prefix, const ndefConstBuffer* bufString, const char* suffix) +{ + uint32_t i; + + if ( (prefix == NULL) || (bufString == NULL) || (bufString->buffer == NULL) || (suffix == NULL)) + { + return ERR_PARAM; + } + + platformLog("%s", prefix); + for (i = 0; i < bufString->length; i++) + { + platformLog("%c", bufString->buffer[i]); + } + platformLog("%s", suffix); + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefBuffer8Print(const char* prefix, const ndefConstBuffer8* bufString, const char* suffix) +{ + ndefConstBuffer buf; + + if (bufString == NULL) + { + return ERR_PARAM; + } + + buf.buffer = bufString->buffer; + buf.length = bufString->length; + + return ndefBufferPrint(prefix, &buf, suffix); +} diff --git a/Software/Core/Src/ndef_example_wrapper.c b/Software/Core/Src/ndef_example_wrapper.c new file mode 100644 index 0000000..50b3acd --- /dev/null +++ b/Software/Core/Src/ndef_example_wrapper.c @@ -0,0 +1,105 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ +/*! \file + * + * \author + * + * \brief Demo application + * + * This demo shows how to poll for several types of NFC cards/devices and how + * to exchange data with these devices, using the RFAL library. + * + * This demo does not fully implement the activities according to the standards, + * it performs the required to communicate with a card/device and retrieve + * its UID. Also blocking methods are used for data exchange which may lead to + * long periods of blocking CPU/MCU. + * For standard compliant example please refer to the Examples provided + * with the RFAL library. + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "demo.h" + +/*! NDEF read usage example */ +extern void ndefExampleRead(void); + +/*! NDEF write usage example */ +extern void ndefExampleWrite(void); + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ +static bool bWrite = false; + +/*! + ***************************************************************************** + * \brief Demo Ini + * + * \return true once initialized + * + * This function Initializes the required layers for the demo + ***************************************************************************** + */ +bool demoIni( void ) +{ + if( platformGpioIsLow(PLATFORM_USER_BUTTON_PORT, PLATFORM_USER_BUTTON_PIN)) + { + bWrite = !bWrite; + platformLog("Write: %s\r\n", bWrite ? "ON": "OFF"); + /* Debounce button */ + while( platformGpioIsLow(PLATFORM_USER_BUTTON_PORT, PLATFORM_USER_BUTTON_PIN) ); + } + return (true); +} + +/*! + ***************************************************************************** + * \brief Demo Cycle + * + * This function executes the demo state machine. + * It must be called periodically + ***************************************************************************** + */ +void demoCycle( void ) +{ + if( !bWrite ) + { + ndefExampleRead(); + } + else + { + ndefExampleWrite(); + } +} +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Core/Src/spi.c b/Software/Core/Src/spi.c new file mode 100644 index 0000000..8792a1a --- /dev/null +++ b/Software/Core/Src/spi.c @@ -0,0 +1,96 @@ +/** + ****************************************************************************** + * + * COPYRIGHT(c) 2016 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** +*/ + +/*! \file + * + * \author + * + * \brief SPI communication handling implementation. + * + */ + +/* Includes ------------------------------------------------------------------*/ + +#include "spi.h" +#include "st_errno.h" +#include "string.h" + +#define SPI_TIMEOUT 1000 +#define SPI_BUF_LEN 97 + + +static uint8_t txBuf[SPI_BUF_LEN]; +static uint8_t rxBuf[SPI_BUF_LEN]; + +SPI_HandleTypeDef *pSpi = 0; + + +void spiInit(SPI_HandleTypeDef *hspi) +{ + pSpi = hspi; + + /* enabling SPI block will put SCLK to output, guaranteeing proper state when spiSelect() gets called */ + __HAL_SPI_ENABLE(hspi); +} + +void spiSelect(GPIO_TypeDef *ssPort, uint16_t ssPin) +{ + HAL_GPIO_WritePin(ssPort, ssPin, GPIO_PIN_RESET); +} + +void spiDeselect(GPIO_TypeDef *ssPort, uint16_t ssPin) +{ + HAL_GPIO_WritePin(ssPort, ssPin, GPIO_PIN_SET); +} + +HAL_StatusTypeDef spiTxRx(const uint8_t *txData, uint8_t *rxData, uint16_t length) +{ + if(pSpi == 0) + return HAL_ERROR; + + if(length > SPI_BUF_LEN) + { + return HAL_ERROR; + } + + /* Initialize Tx data*/ + if(txData != NULL) + { + memcpy(txBuf, txData, length ); + } + else + { + memset(txBuf, 0x00, length ); + } + + return HAL_SPI_TransmitReceive(pSpi, txBuf, (rxData != NULL) ? rxData : rxBuf, length, SPI_TIMEOUT); +} + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Core/Src/stm32f3xx_hal_msp.c b/Software/Core/Src/stm32f3xx_hal_msp.c new file mode 100644 index 0000000..c5e8d95 --- /dev/null +++ b/Software/Core/Src/stm32f3xx_hal_msp.c @@ -0,0 +1,150 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f3xx_hal_msp.c + * @brief This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + * Copyright (c) 2022 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief SPI MSP Initialization +* This function configures the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hspi->Instance==SPI1) + { + /* USER CODE BEGIN SPI1_MspInit 0 */ + + /* USER CODE END SPI1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_SPI1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**SPI1 GPIO Configuration + PA5 ------> SPI1_SCK + PA6 ------> SPI1_MISO + PA7 ------> SPI1_MOSI + */ + GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN SPI1_MspInit 1 */ + + /* USER CODE END SPI1_MspInit 1 */ + } + +} + +/** +* @brief SPI MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) +{ + if(hspi->Instance==SPI1) + { + /* USER CODE BEGIN SPI1_MspDeInit 0 */ + + /* USER CODE END SPI1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_SPI1_CLK_DISABLE(); + + /**SPI1 GPIO Configuration + PA5 ------> SPI1_SCK + PA6 ------> SPI1_MISO + PA7 ------> SPI1_MOSI + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7); + + /* USER CODE BEGIN SPI1_MspDeInit 1 */ + + /* USER CODE END SPI1_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/Software/Core/Src/stm32f3xx_it.c b/Software/Core/Src/stm32f3xx_it.c new file mode 100644 index 0000000..24517fa --- /dev/null +++ b/Software/Core/Src/stm32f3xx_it.c @@ -0,0 +1,203 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f3xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + * Copyright (c) 2022 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f3xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ + +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M4 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + while (1) + { + } + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Pre-fetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32F3xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32f3xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/Software/Core/Src/syscalls.c b/Software/Core/Src/syscalls.c new file mode 100644 index 0000000..fadb992 --- /dev/null +++ b/Software/Core/Src/syscalls.c @@ -0,0 +1,155 @@ +/** + ****************************************************************************** + * @file syscalls.c + * @author Auto-generated by STM32CubeIDE + * @brief STM32CubeIDE Minimal System calls file + * + * For more information about which c-functions + * need which of these lowlevel functions + * please consult the Newlib libc-manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2022 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include +#include +#include +#include +#include +#include +#include + + +/* Variables */ +extern int __io_putchar(int ch) __attribute__((weak)); +extern int __io_getchar(void) __attribute__((weak)); + + +char *__env[1] = { 0 }; +char **environ = __env; + + +/* Functions */ +void initialise_monitor_handles() +{ +} + +int _getpid(void) +{ + return 1; +} + +int _kill(int pid, int sig) +{ + errno = EINVAL; + return -1; +} + +void _exit (int status) +{ + _kill(status, -1); + while (1) {} /* Make sure we hang here */ +} + +__attribute__((weak)) int _read(int file, char *ptr, int len) +{ + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + *ptr++ = __io_getchar(); + } + +return len; +} + +__attribute__((weak)) int _write(int file, char *ptr, int len) +{ + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + __io_putchar(*ptr++); + } + return len; +} + +int _close(int file) +{ + return -1; +} + + +int _fstat(int file, struct stat *st) +{ + st->st_mode = S_IFCHR; + return 0; +} + +int _isatty(int file) +{ + return 1; +} + +int _lseek(int file, int ptr, int dir) +{ + return 0; +} + +int _open(char *path, int flags, ...) +{ + /* Pretend like we always fail */ + return -1; +} + +int _wait(int *status) +{ + errno = ECHILD; + return -1; +} + +int _unlink(char *name) +{ + errno = ENOENT; + return -1; +} + +int _times(struct tms *buf) +{ + return -1; +} + +int _stat(char *file, struct stat *st) +{ + st->st_mode = S_IFCHR; + return 0; +} + +int _link(char *old, char *new) +{ + errno = EMLINK; + return -1; +} + +int _fork(void) +{ + errno = EAGAIN; + return -1; +} + +int _execve(char *name, char **argv, char **env) +{ + errno = ENOMEM; + return -1; +} diff --git a/Software/Core/Src/sysmem.c b/Software/Core/Src/sysmem.c new file mode 100644 index 0000000..54081ac --- /dev/null +++ b/Software/Core/Src/sysmem.c @@ -0,0 +1,79 @@ +/** + ****************************************************************************** + * @file sysmem.c + * @author Generated by STM32CubeIDE + * @brief STM32CubeIDE System Memory calls file + * + * For more information about which C functions + * need which of these lowlevel functions + * please consult the newlib libc manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2022 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include + +/** + * Pointer to the current high watermark of the heap usage + */ +static uint8_t *__sbrk_heap_end = NULL; + +/** + * @brief _sbrk() allocates memory to the newlib heap and is used by malloc + * and others from the C library + * + * @verbatim + * ############################################################################ + * # .data # .bss # newlib heap # MSP stack # + * # # # # Reserved by _Min_Stack_Size # + * ############################################################################ + * ^-- RAM start ^-- _end _estack, RAM end --^ + * @endverbatim + * + * This implementation starts allocating at the '_end' linker symbol + * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack + * The implementation considers '_estack' linker symbol to be RAM end + * NOTE: If the MSP stack, at any point during execution, grows larger than the + * reserved size, please increase the '_Min_Stack_Size'. + * + * @param incr Memory size + * @return Pointer to allocated memory + */ +void *_sbrk(ptrdiff_t incr) +{ + extern uint8_t _end; /* Symbol defined in the linker script */ + extern uint8_t _estack; /* Symbol defined in the linker script */ + extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ + const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; + const uint8_t *max_heap = (uint8_t *)stack_limit; + uint8_t *prev_heap_end; + + /* Initialize heap end at first call */ + if (NULL == __sbrk_heap_end) + { + __sbrk_heap_end = &_end; + } + + /* Protect heap from growing into the reserved MSP stack */ + if (__sbrk_heap_end + incr > max_heap) + { + errno = ENOMEM; + return (void *)-1; + } + + prev_heap_end = __sbrk_heap_end; + __sbrk_heap_end += incr; + + return (void *)prev_heap_end; +} diff --git a/Software/Core/Src/system_stm32f3xx.c b/Software/Core/Src/system_stm32f3xx.c new file mode 100644 index 0000000..495dd8d --- /dev/null +++ b/Software/Core/Src/system_stm32f3xx.c @@ -0,0 +1,291 @@ +/** + ****************************************************************************** + * @file system_stm32f3xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File. + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f3xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (8 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f3xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. This file configures the system clock as follows: + *============================================================================= + * Supported STM32F3xx device + *----------------------------------------------------------------------------- + * System Clock source | HSI + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 8000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 8000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 1 + *----------------------------------------------------------------------------- + * USB Clock | DISABLE + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f3xx_system + * @{ + */ + +/** @addtogroup STM32F3xx_System_Private_Includes + * @{ + */ + +#include "stm32f3xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F3xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F3xx_System_Private_Defines + * @{ + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)8000000) /*!< Default value of the External oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)8000000) /*!< Default value of the Internal oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSI_VALUE */ + +/* Note: Following vector table addresses must be defined in line with linker + configuration. */ +/*!< Uncomment the following line if you need to relocate the vector table + anywhere in Flash or Sram, else the vector table is kept at the automatic + remap of boot address selected */ +/* #define USER_VECT_TAB_ADDRESS */ + +#if defined(USER_VECT_TAB_ADDRESS) +/*!< Uncomment the following line if you need to relocate your vector Table + in Sram else user remap will be done in Flash. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS SRAM_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +#endif /* VECT_TAB_SRAM */ +#endif /* USER_VECT_TAB_ADDRESS */ + +/******************************************************************************/ +/** + * @} + */ + +/** @addtogroup STM32F3xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F3xx_System_Private_Variables + * @{ + */ + /* This variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock there is no need to + call the 2 first functions listed above, since SystemCoreClock variable is + updated automatically. + */ +uint32_t SystemCoreClock = 8000000; + +const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; +const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; + +/** + * @} + */ + +/** @addtogroup STM32F3xx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F3xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * @param None + * @retval None + */ +void SystemInit(void) +{ +/* FPU settings --------------------------------------------------------------*/ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ +#endif + + /* Configure the Vector Table location -------------------------------------*/ +#if defined(USER_VECT_TAB_ADDRESS) + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#endif /* USER_VECT_TAB_ADDRESS */ +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f3xx_hal.h file (default value + * 8 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f3xx_hal.h file (default value + * 8 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate (void) +{ + uint32_t tmp = 0, pllmull = 0, pllsource = 0, predivfactor = 0; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case RCC_CFGR_SWS_HSI: /* HSI used as system clock */ + SystemCoreClock = HSI_VALUE; + break; + case RCC_CFGR_SWS_HSE: /* HSE used as system clock */ + SystemCoreClock = HSE_VALUE; + break; + case RCC_CFGR_SWS_PLL: /* PLL used as system clock */ + /* Get PLL clock source and multiplication factor ----------------------*/ + pllmull = RCC->CFGR & RCC_CFGR_PLLMUL; + pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; + pllmull = ( pllmull >> 18) + 2; + +#if defined (STM32F302xE) || defined (STM32F303xE) || defined (STM32F398xx) + predivfactor = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1; + if (pllsource == RCC_CFGR_PLLSRC_HSE_PREDIV) + { + /* HSE oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSE_VALUE / predivfactor) * pllmull; + } + else + { + /* HSI oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSI_VALUE / predivfactor) * pllmull; + } +#else + if (pllsource == RCC_CFGR_PLLSRC_HSI_DIV2) + { + /* HSI oscillator clock divided by 2 selected as PLL clock entry */ + SystemCoreClock = (HSI_VALUE >> 1) * pllmull; + } + else + { + predivfactor = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1; + /* HSE oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSE_VALUE / predivfactor) * pllmull; + } +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ + break; + default: /* HSI used as system clock */ + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK clock frequency ----------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK clock frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff --git a/Software/Core/Src/usart.c b/Software/Core/Src/usart.c new file mode 100644 index 0000000..029d5d4 --- /dev/null +++ b/Software/Core/Src/usart.c @@ -0,0 +1,109 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/*! \file + * + * \author + * + * \brief UART communication handling implementation. + * + */ + +/* Includes ------------------------------------------------------------------*/ + +#include "usart.h" +#include "st_errno.h" + +#define USART_TIMEOUT 1000 + +UART_HandleTypeDef *pUsart = 0; + +/** + * @brief This function initalize the UART handle. + * @param husart : already initalized handle to USART HW + * @retval none : + */ +void UsartInit(UART_HandleTypeDef *husart) +{ + pUsart = husart; +} + +/** + * @brief This function Transmit one data byte via USART + * @param data : data to be transmitted + * @retval ERR_INVALID_HANDLE : in case the SPI HW is not initalized yet + * @retval others : HAL status + */ +uint8_t UsartTxByte(uint8_t data) +{ + if(pUsart == 0) + return ERR_INVALID_HANDLE; + + return HAL_UART_Transmit(pUsart, &data, 1, USART_TIMEOUT); +} + +/** + * @brief This function Transmit data via USART + * @param data : data to be transmitted + * @param dataLen : length of data to be transmitted + * @retval ERR_INVALID_HANDLE : in case the SPI HW is not initalized yet + * @retval others : HAL status + */ +uint8_t UsartTx(uint8_t *data, uint16_t dataLen) +{ + if(pUsart == 0) + return ERR_INVALID_HANDLE; + + return HAL_UART_Transmit(pUsart, data, dataLen, USART_TIMEOUT); +} + +/** + * @brief This function Receive data via USART + * @param data : data where received data shall be stored + * @param dataLen : length of received data + * @retval ERR_INVALID_HANDLE : in case the SPI HW is not initalized yet + * @retval others : HAL status + */ +uint8_t UsartRx(uint8_t *data, uint16_t *dataLen) +{ + uint8_t err = ERR_NONE; + + if(pUsart == 0) + return ERR_INVALID_HANDLE; + + for(uint8_t i = 0; i < *dataLen; i++) { + err |= HAL_UART_Receive(pUsart, &data[i], 1, USART_TIMEOUT); + if(data[i] == 0) { + *dataLen = i; + } + } + return err; +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Core/Startup/startup_stm32f303retx.s b/Software/Core/Startup/startup_stm32f303retx.s new file mode 100644 index 0000000..45037a9 --- /dev/null +++ b/Software/Core/Startup/startup_stm32f303retx.s @@ -0,0 +1,492 @@ +/** + ****************************************************************************** + * @file startup_stm32f303xe.s + * @author MCD Application Team + * @brief STM32F303xE devices vector table for GCC toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address, + * - Configure the clock system + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M4 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + + .syntax unified + .cpu cortex-m4 + .fpu softvfp + .thumb + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +.equ BootRAM, 0xF1E0F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + ldr sp, =_estack /* Atollic update: set stack pointer */ + +/* Copy the data segment initializers from flash to SRAM */ + ldr r0, =_sdata + ldr r1, =_edata + ldr r2, =_sidata + movs r3, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r4, [r2, r3] + str r4, [r0, r3] + adds r3, r3, #4 + +LoopCopyDataInit: + adds r4, r0, r3 + cmp r4, r1 + bcc CopyDataInit + +/* Zero fill the bss segment. */ + ldr r2, =_sbss + ldr r4, =_ebss + movs r3, #0 + b LoopFillZerobss + +FillZerobss: + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + cmp r2, r4 + bcc FillZerobss + +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex-M4. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMP_STAMP_IRQHandler + .word RTC_WKUP_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_TSC_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_2_IRQHandler + .word USB_HP_CAN_TX_IRQHandler + .word USB_LP_CAN_RX0_IRQHandler + .word CAN_RX1_IRQHandler + .word CAN_SCE_IRQHandler + .word EXTI9_5_IRQHandler + .word TIM1_BRK_TIM15_IRQHandler + .word TIM1_UP_TIM16_IRQHandler + .word TIM1_TRG_COM_TIM17_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTC_Alarm_IRQHandler + .word USBWakeUp_IRQHandler + .word TIM8_BRK_IRQHandler + .word TIM8_UP_IRQHandler + .word TIM8_TRG_COM_IRQHandler + .word TIM8_CC_IRQHandler + .word ADC3_IRQHandler + .word FMC_IRQHandler + .word 0 + .word 0 + .word SPI3_IRQHandler + .word UART4_IRQHandler + .word UART5_IRQHandler + .word TIM6_DAC_IRQHandler + .word TIM7_IRQHandler + .word DMA2_Channel1_IRQHandler + .word DMA2_Channel2_IRQHandler + .word DMA2_Channel3_IRQHandler + .word DMA2_Channel4_IRQHandler + .word DMA2_Channel5_IRQHandler + .word ADC4_IRQHandler + .word 0 + .word 0 + .word COMP1_2_3_IRQHandler + .word COMP4_5_6_IRQHandler + .word COMP7_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word I2C3_EV_IRQHandler + .word I2C3_ER_IRQHandler + .word USB_HP_IRQHandler + .word USB_LP_IRQHandler + .word USBWakeUp_RMP_IRQHandler + .word TIM20_BRK_IRQHandler + .word TIM20_UP_IRQHandler + .word TIM20_TRG_COM_IRQHandler + .word TIM20_CC_IRQHandler + .word FPU_IRQHandler + .word 0 + .word 0 + .word SPI4_IRQHandler + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMP_STAMP_IRQHandler + .thumb_set TAMP_STAMP_IRQHandler,Default_Handler + + .weak RTC_WKUP_IRQHandler + .thumb_set RTC_WKUP_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak RCC_IRQHandler + .thumb_set RCC_IRQHandler,Default_Handler + + .weak EXTI0_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_TSC_IRQHandler + .thumb_set EXTI2_TSC_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_2_IRQHandler + .thumb_set ADC1_2_IRQHandler,Default_Handler + + .weak USB_HP_CAN_TX_IRQHandler + .thumb_set USB_HP_CAN_TX_IRQHandler,Default_Handler + + .weak USB_LP_CAN_RX0_IRQHandler + .thumb_set USB_LP_CAN_RX0_IRQHandler,Default_Handler + + .weak CAN_RX1_IRQHandler + .thumb_set CAN_RX1_IRQHandler,Default_Handler + + .weak CAN_SCE_IRQHandler + .thumb_set CAN_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM15_IRQHandler + .thumb_set TIM1_BRK_TIM15_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM16_IRQHandler + .thumb_set TIM1_UP_TIM16_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM17_IRQHandler + .thumb_set TIM1_TRG_COM_TIM17_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTC_Alarm_IRQHandler + .thumb_set RTC_Alarm_IRQHandler,Default_Handler + + .weak USBWakeUp_IRQHandler + .thumb_set USBWakeUp_IRQHandler,Default_Handler + + .weak TIM8_BRK_IRQHandler + .thumb_set TIM8_BRK_IRQHandler,Default_Handler + + .weak TIM8_UP_IRQHandler + .thumb_set TIM8_UP_IRQHandler,Default_Handler + + .weak TIM8_TRG_COM_IRQHandler + .thumb_set TIM8_TRG_COM_IRQHandler,Default_Handler + + .weak TIM8_CC_IRQHandler + .thumb_set TIM8_CC_IRQHandler,Default_Handler + + .weak ADC3_IRQHandler + .thumb_set ADC3_IRQHandler,Default_Handler + + .weak FMC_IRQHandler + .thumb_set FMC_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Channel1_IRQHandler + .thumb_set DMA2_Channel1_IRQHandler,Default_Handler + + .weak DMA2_Channel2_IRQHandler + .thumb_set DMA2_Channel2_IRQHandler,Default_Handler + + .weak DMA2_Channel3_IRQHandler + .thumb_set DMA2_Channel3_IRQHandler,Default_Handler + + .weak DMA2_Channel4_IRQHandler + .thumb_set DMA2_Channel4_IRQHandler,Default_Handler + + .weak DMA2_Channel5_IRQHandler + .thumb_set DMA2_Channel5_IRQHandler,Default_Handler + + .weak ADC4_IRQHandler + .thumb_set ADC4_IRQHandler,Default_Handler + + .weak COMP1_2_3_IRQHandler + .thumb_set COMP1_2_3_IRQHandler,Default_Handler + + .weak COMP4_5_6_IRQHandler + .thumb_set COMP4_5_6_IRQHandler,Default_Handler + + .weak COMP7_IRQHandler + .thumb_set COMP7_IRQHandler,Default_Handler + + .weak I2C3_EV_IRQHandler + .thumb_set I2C3_EV_IRQHandler,Default_Handler + + .weak I2C3_ER_IRQHandler + .thumb_set I2C3_ER_IRQHandler,Default_Handler + + .weak USB_HP_IRQHandler + .thumb_set USB_HP_IRQHandler,Default_Handler + + .weak USB_LP_IRQHandler + .thumb_set USB_LP_IRQHandler,Default_Handler + + .weak USBWakeUp_RMP_IRQHandler + .thumb_set USBWakeUp_RMP_IRQHandler,Default_Handler + + .weak TIM20_BRK_IRQHandler + .thumb_set TIM20_BRK_IRQHandler,Default_Handler + + .weak TIM20_UP_IRQHandler + .thumb_set TIM20_UP_IRQHandler,Default_Handler + + .weak TIM20_TRG_COM_IRQHandler + .thumb_set TIM20_TRG_COM_IRQHandler,Default_Handler + + .weak TIM20_CC_IRQHandler + .thumb_set TIM20_CC_IRQHandler,Default_Handler + + .weak FPU_IRQHandler + .thumb_set FPU_IRQHandler,Default_Handler + + .weak SPI4_IRQHandler + .thumb_set SPI4_IRQHandler,Default_Handler +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/BSP/Components/ST25R3911/Release_Notes.html b/Software/Drivers/BSP/Components/ST25R3911/Release_Notes.html new file mode 100644 index 0000000..cefbfb6 --- /dev/null +++ b/Software/Drivers/BSP/Components/ST25R3911/Release_Notes.html @@ -0,0 +1,177 @@ + + + + + + + + + + + + + Release Notes for ST25R3911 Driver + + + + + + + + + +
+


+

+
+ + + + + + +
+ + + + + + + + + +
+

Back to Release page

+
+

Release +Notes for ST25R3911 driver

+

Copyright +2017 STMicroelectronics

+

+
+

 

+ + + + + + +
+

Update +History

+ + +

V1.0.0 +/ 15-March-2017

+

Main +Changes

+ + +
    +
  • First +official release.
  • +
+ +

License
+

+
Redistribution +and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met:
+
+
    +
  1. Redistributions +of source code must retain the above copyright notice, this list of +conditions and the following disclaimer.
  2. +
  3. Redistributions +in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution.
  4. +
  5. Neither the +name of STMicroelectronics nor the names of its contributors may be +used to endorse or promote products derived
    +
  6. +
+        +from this software without specific prior written permission.
+
+ THIS +SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE.
+

+ +
+
+

For +complete documentation on STM32 Microcontrollers +visit www.st.com/STM32

+
+

+
+
+

 

+
+ + \ No newline at end of file diff --git a/Software/Drivers/BSP/Components/ST25R3911/st25r3911.c b/Software/Drivers/BSP/Components/ST25R3911/st25r3911.c new file mode 100644 index 0000000..366f9cd --- /dev/null +++ b/Software/Drivers/BSP/Components/ST25R3911/st25r3911.c @@ -0,0 +1,655 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: ST25R3911 firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author Ulrich Herrmann + * + * \brief ST25R3911 high level interface + * + */ + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ + +#include "st25r3911.h" +#include "st25r3911_com.h" +#include "st25r3911_interrupt.h" +#include "utils.h" + +/* +****************************************************************************** +* LOCAL DEFINES +****************************************************************************** +*/ + +#define ST25R3911_OSC_STABLE_TIMEOUT 10U /*!< Timeout for Oscillator to get stable, datasheet: 700us, take 5 ms */ +#define ST25R3911_CA_TIMEOUT 10U /*!< Timeout for Collision Avoidance command */ +#define ST25R3911_TOUT_CALIBRATE_CAP_SENSOR 4U /*!< Max duration Calibrate Capacitive Sensor command Datasheet: 3ms */ + +/* +****************************************************************************** +* LOCAL CONSTANTS +****************************************************************************** +*/ + +/* +****************************************************************************** +* LOCAL VARIABLES +****************************************************************************** +*/ +static uint32_t st25r3911NoResponseTime_64fcs; + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ +static ReturnCode st25r3911ExecuteCommandAndGetResult(uint8_t cmd, uint8_t resreg, uint8_t sleeptime, uint8_t* result); + +/* +****************************************************************************** +* GLOBAL FUNCTIONS +****************************************************************************** +*/ + +void st25r3911TxRxOn( void ) +{ + st25r3911SetRegisterBits(ST25R3911_REG_OP_CONTROL, (ST25R3911_REG_OP_CONTROL_rx_en | ST25R3911_REG_OP_CONTROL_tx_en) ); +} + +void st25r3911TxRxOff( void ) +{ + st25r3911ClrRegisterBits(ST25R3911_REG_OP_CONTROL, (ST25R3911_REG_OP_CONTROL_rx_en | ST25R3911_REG_OP_CONTROL_tx_en) ); +} + + +void st25r3911OscOn( void ) +{ + /* Check if oscillator is already turned on and stable */ + /* Use ST25R3911_REG_OP_CONTROL_en instead of ST25R3911_REG_AUX_DISPLAY_osc_ok to be on the safe side */ + if( !st25r3911CheckReg( ST25R3911_REG_OP_CONTROL, ST25R3911_REG_OP_CONTROL_en, ST25R3911_REG_OP_CONTROL_en ) ) + { + /* Clear any eventual previous oscillator IRQ */ + st25r3911GetInterrupt( ST25R3911_IRQ_MASK_OSC ); + + /* enable oscillator frequency stable interrupt */ + st25r3911EnableInterrupts(ST25R3911_IRQ_MASK_OSC); + + /* enable oscillator and regulator output */ + st25r3911ModifyRegister(ST25R3911_REG_OP_CONTROL, 0x00, ST25R3911_REG_OP_CONTROL_en); + + /* wait for the oscillator interrupt */ + st25r3911WaitForInterruptsTimed(ST25R3911_IRQ_MASK_OSC, ST25R3911_OSC_STABLE_TIMEOUT); + st25r3911DisableInterrupts(ST25R3911_IRQ_MASK_OSC); + } + +} + + +void st25r3911Initialize(void) +{ + uint16_t vdd_mV; + + /* first, reset the st25r3911 */ + st25r3911ExecuteCommand(ST25R3911_CMD_SET_DEFAULT); + + /* Set Operation Control Register to default value */ + st25r3911WriteRegister(ST25R3911_REG_OP_CONTROL, 0x00); + + /* enable pull downs on miso line */ + st25r3911ModifyRegister(ST25R3911_REG_IO_CONF2, 0, + ST25R3911_REG_IO_CONF2_miso_pd1 | + ST25R3911_REG_IO_CONF2_miso_pd2); + + /* after reset all interrupts are enabled. so disable them at first */ + st25r3911DisableInterrupts(ST25R3911_IRQ_MASK_ALL); + /* and clear them, just to be sure... */ + st25r3911ClearInterrupts(); + + st25r3911OscOn(); + + /* Measure vdd and set sup3V bit accordingly */ + vdd_mV = st25r3911MeasureVoltage(ST25R3911_REG_REGULATOR_CONTROL_mpsv_vdd); + + st25r3911ModifyRegister(ST25R3911_REG_IO_CONF2, + ST25R3911_REG_IO_CONF2_sup3V, + (uint8_t)((vdd_mV < 3600U)?ST25R3911_REG_IO_CONF2_sup3V:0U)); + + /* Make sure Transmitter and Receiver are disabled */ + st25r3911TxRxOff(); + + return; +} + +void st25r3911Deinitialize(void) +{ + st25r3911DisableInterrupts(ST25R3911_IRQ_MASK_ALL); + + /* Disabe Tx and Rx, Keep OSC */ + st25r3911TxRxOff(); + + return; +} + +ReturnCode st25r3911AdjustRegulators(uint16_t* result_mV) +{ + uint8_t result; + uint8_t io_conf2; + ReturnCode err = ERR_NONE; + + /* Reset logic and set regulated voltages to be defined by result of Adjust Regulators command */ + st25r3911SetRegisterBits( ST25R3911_REG_REGULATOR_CONTROL, ST25R3911_REG_REGULATOR_CONTROL_reg_s ); + st25r3911ClrRegisterBits( ST25R3911_REG_REGULATOR_CONTROL, ST25R3911_REG_REGULATOR_CONTROL_reg_s ); + + st25r3911ExecuteCommandAndGetResult(ST25R3911_CMD_ADJUST_REGULATORS, + ST25R3911_REG_REGULATOR_RESULT, + 5, + &result); + + st25r3911ReadRegister(ST25R3911_REG_IO_CONF2, &io_conf2); + + result >>= ST25R3911_REG_REGULATOR_RESULT_shift_reg; + result -= 5U; + if (result_mV != NULL) + { + if((io_conf2 & ST25R3911_REG_IO_CONF2_sup3V) != 0U) + { + *result_mV = 2400; + *result_mV += (uint16_t)result * 100U; + } + else + { + *result_mV = 3900; + *result_mV += (uint16_t)result * 120U; + } + } + return err; +} + +void st25r3911MeasureAmplitude(uint8_t* result) +{ + st25r3911ExecuteCommandAndGetResult(ST25R3911_CMD_MEASURE_AMPLITUDE, + ST25R3911_REG_AD_RESULT, + 10, + result); +} + +void st25r3911MeasurePhase(uint8_t* result) +{ + st25r3911ExecuteCommandAndGetResult(ST25R3911_CMD_MEASURE_PHASE, + ST25R3911_REG_AD_RESULT, + 10, + result); +} + +void st25r3911MeasureCapacitance(uint8_t* result) +{ + st25r3911ExecuteCommandAndGetResult(ST25R3911_CMD_MEASURE_CAPACITANCE, + ST25R3911_REG_AD_RESULT, + 10, + result); +} + +void st25r3911CalibrateAntenna(uint8_t* result) +{ + st25r3911ExecuteCommandAndGetResult(ST25R3911_CMD_CALIBRATE_ANTENNA, + ST25R3911_REG_ANT_CAL_RESULT, + 10, + result); +} + +void st25r3911CalibrateModulationDepth(uint8_t* result) +{ + st25r3911ExecuteCommandAndGetResult(ST25R3911_CMD_CALIBRATE_MODULATION, + ST25R3911_REG_AM_MOD_DEPTH_RESULT, + 10, + result); +} + + +ReturnCode st25r3911CalibrateCapacitiveSensor(uint8_t* result) +{ + ReturnCode ret; + uint8_t res; + + /* Clear Manual calibration values to enable automatic calibration mode */ + st25r3911ClrRegisterBits( ST25R3911_REG_CAP_SENSOR_CONTROL, ST25R3916_REG_CAP_SENSOR_CONTROL_mask_cs_mcal ); + + /* Execute automatic calibration */ + ret = st25r3911ExecuteCommandAndGetResult( ST25R3911_CMD_CALIBRATE_C_SENSOR, ST25R3911_REG_CAP_SENSOR_RESULT, ST25R3911_TOUT_CALIBRATE_CAP_SENSOR, &res ); + + /* Check wether the calibration was successull */ + if( ((res & ST25R3911_REG_CAP_SENSOR_RESULT_cs_cal_end) != ST25R3911_REG_CAP_SENSOR_RESULT_cs_cal_end) || + ((res & ST25R3911_REG_CAP_SENSOR_RESULT_cs_cal_err) == ST25R3911_REG_CAP_SENSOR_RESULT_cs_cal_err) || (ret != ERR_NONE) ) + { + return ERR_IO; + } + + if( result != NULL ) + { + (*result) = (uint8_t)(res >> ST25R3911_REG_CAP_SENSOR_CONTROL_shift_cs_mcal); + } + + return ERR_NONE; +} + + +ReturnCode st25r3911SetBitrate(uint8_t txRate, uint8_t rxRate) +{ + uint8_t reg; + + st25r3911ReadRegister(ST25R3911_REG_BIT_RATE, ®); + if (rxRate != ST25R3911_BR_DO_NOT_SET) + { + if(rxRate > ST25R3911_BR_3390) + { + return ERR_PARAM; + } + else + { + reg = (uint8_t)(reg & ~ST25R3911_REG_BIT_RATE_mask_rxrate); /* MISRA 10.3 */ + reg |= rxRate << ST25R3911_REG_BIT_RATE_shift_rxrate; + } + } + if (txRate != ST25R3911_BR_DO_NOT_SET) + { + if(txRate > ST25R3911_BR_6780) + { + return ERR_PARAM; + } + else + { + reg = (uint8_t)(reg & ~ST25R3911_REG_BIT_RATE_mask_txrate); /* MISRA 10.3 */ + reg |= txRate<> ST25R3911_REG_FIFO_RX_STATUS2_shift_fifo_lb); +} + +uint32_t st25r3911GetNoResponseTime_64fcs(void) +{ + return st25r3911NoResponseTime_64fcs; +} + +void st25r3911StartGPTimer_8fcs(uint16_t gpt_8fcs, uint8_t trigger_source) +{ + st25r3911SetGPTime_8fcs(gpt_8fcs); + + st25r3911ModifyRegister(ST25R3911_REG_GPT_CONTROL, + ST25R3911_REG_GPT_CONTROL_gptc_mask, + trigger_source); + if (trigger_source == 0U) + { + st25r3911ExecuteCommand(ST25R3911_CMD_START_GP_TIMER); + } + + return; +} + +void st25r3911SetGPTime_8fcs(uint16_t gpt_8fcs) +{ + st25r3911WriteRegister(ST25R3911_REG_GPT1, (uint8_t)(gpt_8fcs >> 8)); + st25r3911WriteRegister(ST25R3911_REG_GPT2, (uint8_t)(gpt_8fcs & 0xffU)); + + return; +} + +bool st25r3911CheckReg( uint8_t reg, uint8_t mask, uint8_t value ) +{ + uint8_t regVal; + + regVal = 0; + st25r3911ReadRegister( reg, ®Val ); + + return ((regVal & mask) == value ); +} + + +bool st25r3911CheckChipID( uint8_t *rev ) +{ + uint8_t ID; + + ID = 0; + st25r3911ReadRegister( ST25R3911_REG_IC_IDENTITY, &ID ); + + /* Check if IC Identity Register contains ST25R3911's IC type code */ + if( (ID & ST25R3911_REG_IC_IDENTITY_mask_ic_type) != ST25R3911_REG_IC_IDENTITY_ic_type ) + { + return false; + } + + if(rev != NULL) + { + *rev = (ID & ST25R3911_REG_IC_IDENTITY_mask_ic_rev); + } + + return true; +} + +ReturnCode st25r3911SetNoResponseTime_64fcs(uint32_t nrt_64fcs) +{ + ReturnCode err = ERR_NONE; + uint8_t nrt_step = 0; + uint32_t noResponseTime_64fcs = nrt_64fcs; /* MISRA 17.8: Use intermediate variable */ + + st25r3911NoResponseTime_64fcs = noResponseTime_64fcs; + if (noResponseTime_64fcs > (uint32_t)0xFFFFU) + { + nrt_step = ST25R3911_REG_GPT_CONTROL_nrt_step; + noResponseTime_64fcs = (noResponseTime_64fcs + 63U) / 64U; + if (noResponseTime_64fcs > (uint32_t)0xFFFFU) + { + noResponseTime_64fcs = 0xFFFFU; + err = ERR_PARAM; + } + st25r3911NoResponseTime_64fcs = 64U * noResponseTime_64fcs; + } + + st25r3911ModifyRegister(ST25R3911_REG_GPT_CONTROL, ST25R3911_REG_GPT_CONTROL_nrt_step, nrt_step); + st25r3911WriteRegister(ST25R3911_REG_NO_RESPONSE_TIMER1, (uint8_t)(noResponseTime_64fcs >> 8)); + st25r3911WriteRegister(ST25R3911_REG_NO_RESPONSE_TIMER2, (uint8_t)(noResponseTime_64fcs & 0xffU)); + + return err; +} + +ReturnCode st25r3911SetStartNoResponseTime_64fcs(uint32_t nrt_64fcs) +{ + ReturnCode err; + + err = st25r3911SetNoResponseTime_64fcs( nrt_64fcs ); + if(err == ERR_NONE) + { + st25r3911ExecuteCommand(ST25R3911_CMD_START_NO_RESPONSE_TIMER); + } + + return err; +} + +ReturnCode st25r3911PerformCollisionAvoidance( uint8_t FieldONCmd, uint8_t pdThreshold, uint8_t caThreshold, uint8_t nTRFW ) +{ + uint8_t treMask; + uint32_t irqs; + + if( (FieldONCmd != ST25R3911_CMD_INITIAL_RF_COLLISION) && + (FieldONCmd != ST25R3911_CMD_RESPONSE_RF_COLLISION_0) && + (FieldONCmd != ST25R3911_CMD_RESPONSE_RF_COLLISION_N) ) + { + return ERR_PARAM; + } + + /* Check if new thresholds are to be applied */ + if( (pdThreshold != ST25R3911_THRESHOLD_DO_NOT_SET) || (caThreshold != ST25R3911_THRESHOLD_DO_NOT_SET) ) + { + treMask = 0; + + if(pdThreshold != ST25R3911_THRESHOLD_DO_NOT_SET) + { + treMask |= ST25R3911_REG_FIELD_THRESHOLD_mask_trg; + } + + if(caThreshold != ST25R3911_THRESHOLD_DO_NOT_SET) + { + treMask |= ST25R3911_REG_FIELD_THRESHOLD_mask_rfe; + } + + /* Set Detection Threshold and|or Collision Avoidance Threshold */ + st25r3911ChangeRegisterBits( ST25R3911_REG_FIELD_THRESHOLD, treMask, (pdThreshold & ST25R3911_REG_FIELD_THRESHOLD_mask_trg) | (caThreshold & ST25R3911_REG_FIELD_THRESHOLD_mask_rfe ) ); + } + + /* Set n x TRFW */ + st25r3911ModifyRegister(ST25R3911_REG_AUX, ST25R3911_REG_AUX_mask_nfc_n, (nTRFW & ST25R3911_REG_AUX_mask_nfc_n) ); + + /* Enable and clear CA specific interrupts and execute command */ + st25r3911EnableInterrupts( (ST25R3911_IRQ_MASK_CAC | ST25R3911_IRQ_MASK_CAT) ); + st25r3911GetInterrupt( (ST25R3911_IRQ_MASK_CAC | ST25R3911_IRQ_MASK_CAT) ); + + st25r3911ExecuteCommand(FieldONCmd); + + irqs = st25r3911WaitForInterruptsTimed(ST25R3911_IRQ_MASK_CAC | ST25R3911_IRQ_MASK_CAT, ST25R3911_CA_TIMEOUT ); + + /* Clear any previous External Field events and disable CA specific interrupts */ + st25r3911GetInterrupt( (ST25R3911_IRQ_MASK_EOF | ST25R3911_IRQ_MASK_EON) ); + st25r3911DisableInterrupts(ST25R3911_IRQ_MASK_CAC | ST25R3911_IRQ_MASK_CAT); + + + if((ST25R3911_IRQ_MASK_CAC & irqs) != 0U) /* Collision occurred */ + { + return ERR_RF_COLLISION; + } + + if((ST25R3911_IRQ_MASK_CAT & irqs) != 0U) /* No Collision detected, Field On */ + { + return ERR_NONE; + } + + /* No interrupt detected */ + return ERR_INTERNAL; +} + +ReturnCode st25r3911GetRegsDump(uint8_t* resRegDump, uint8_t* sizeRegDump) +{ + uint8_t regIt; + uint8_t regDump[ST25R3911_REG_IC_IDENTITY+1U]; + + if(!sizeRegDump || !resRegDump) + { + return ERR_PARAM; + } + + for( regIt = ST25R3911_REG_IO_CONF1; regIt < SIZEOF_ARRAY(regDump); regIt++ ) + { + st25r3911ReadRegister(regIt, ®Dump[regIt] ); + } + + *sizeRegDump = MIN(*sizeRegDump, regIt); + if( *sizeRegDump > 0U ) /* MISRA 21.18 */ + { + ST_MEMCPY(resRegDump, regDump, *sizeRegDump ); + } + + return ERR_NONE; +} + + +void st25r3911SetNumTxBits( uint32_t nBits ) +{ + st25r3911WriteRegister(ST25R3911_REG_NUM_TX_BYTES2, (uint8_t)((nBits >> 0) & 0xffU)); + st25r3911WriteRegister(ST25R3911_REG_NUM_TX_BYTES1, (uint8_t)((nBits >> 8) & 0xffU)); +} + + +bool st25r3911IsCmdValid( uint8_t cmd ) +{ + if( !((cmd >= ST25R3911_CMD_SET_DEFAULT) && (cmd <= ST25R3911_CMD_ANALOG_PRESET)) && + !((cmd >= ST25R3911_CMD_MASK_RECEIVE_DATA) && (cmd <= ST25R3911_CMD_CLEAR_RSSI)) && + !((cmd >= ST25R3911_CMD_TRANSPARENT_MODE) && (cmd <= ST25R3911_CMD_START_NO_RESPONSE_TIMER)) && + !((cmd >= ST25R3911_CMD_TEST_CLEARA) && (cmd <= ST25R3911_CMD_FUSE_PPROM)) ) + { + return false; + } + return true; +} + +ReturnCode st25r3911StreamConfigure(const struct st25r3911StreamConfig *config) +{ + uint8_t smd = 0; + uint8_t mode; + + if (config->useBPSK != 0U) + { + mode = ST25R3911_REG_MODE_om_bpsk_stream; + if ((config->din<2U) || (config->din>4U)) /* not in fc/4 .. fc/16 */ + { + return ERR_PARAM; + } + smd |= (4U - config->din) << ST25R3911_REG_STREAM_MODE_shift_scf; + + } + else + { + mode = ST25R3911_REG_MODE_om_subcarrier_stream; + if ((config->din<3U) || (config->din>6U)) /* not in fc/8 .. fc/64 */ + { + return ERR_PARAM; + } + smd |= (6U - config->din) << ST25R3911_REG_STREAM_MODE_shift_scf; + if (config->report_period_length == 0U) + { + return ERR_PARAM; + } + } + + if ((config->dout<1U) || (config->dout>7U)) /* not in fc/2 .. fc/128 */ + { + return ERR_PARAM; + } + smd |= (7U - config->dout) << ST25R3911_REG_STREAM_MODE_shift_stx; + + if (config->report_period_length > 3U) + { + return ERR_PARAM; + } + smd |= config->report_period_length << ST25R3911_REG_STREAM_MODE_shift_scp; + + st25r3911WriteRegister(ST25R3911_REG_STREAM_MODE, smd); + st25r3911ChangeRegisterBits(ST25R3911_REG_MODE, ST25R3911_REG_MODE_mask_om, mode); + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode st25r3911GetRSSI( uint16_t *amRssi, uint16_t *pmRssi ) +{ + /*******************************************************************************/ + /* MISRA 8.9 An object should be defined at block scope if its identifier only appears in a single function */ + /*< ST25R3911 RSSI Display Reg values:0 1 2 3 4 5 6 7 8 9 a b c d e f */ + const uint16_t st25r3911Rssi2mV[] = { 0 ,20 ,27 ,37 ,52 ,72 ,99 ,136 ,190 ,262 ,357 ,500 ,686 ,950, 0, 0 }; + + /* ST25R3911 2/3 stage gain reduction [dB] 0 0 0 0 0 3 6 9 12 15 18 na na na na na */ + const uint16_t st25r3911Gain2Percent[] = { 100, 100, 100, 100, 100, 141, 200, 281, 398, 562, 794, 1, 1, 1, 1, 1 }; + /*******************************************************************************/ + + uint8_t rssi; + uint8_t gainRed; + + st25r3911ReadRegister( ST25R3911_REG_RSSI_RESULT, &rssi ); + st25r3911ReadRegister( ST25R3911_REG_GAIN_RED_STATE, &gainRed ); + + if( amRssi != NULL ) + { + *amRssi = (uint16_t) ( ( (uint32_t)st25r3911Rssi2mV[ (rssi >> ST25R3911_REG_RSSI_RESULT_shift_rssi_am) ] * (uint32_t)st25r3911Gain2Percent[ (gainRed >> ST25R3911_REG_GAIN_RED_STATE_shift_gs_am) ] ) / 100U ); + } + + if( pmRssi != NULL ) + { + *pmRssi = (uint16_t) ( ( (uint32_t)st25r3911Rssi2mV[ (rssi & ST25R3911_REG_RSSI_RESULT_mask_rssi_pm) ] * (uint32_t)st25r3911Gain2Percent[ (gainRed & ST25R3911_REG_GAIN_RED_STATE_mask_gs_pm) ] ) / 100U ); + } + + return ERR_NONE; +} + +/* +****************************************************************************** +* LOCAL FUNCTIONS +****************************************************************************** +*/ +/*! + ***************************************************************************** + * \brief Executes a direct command and returns the result + * + * This function executes the direct command given by \a cmd waits for + * \a sleeptime for I_dct and returns the result read from register \a resreg. + * No checking of the validity of the cmd is performed. + * + * \param[in] cmd: direct command to execute. + * \param[in] resreg: Address of the register containing the result. + * \param[in] sleeptime: time in milliseconds to wait before reading the result. + * \param[out] result: 8 bit long result + * + ***************************************************************************** + */ +static ReturnCode st25r3911ExecuteCommandAndGetResult(uint8_t cmd, uint8_t resreg, uint8_t sleeptime, uint8_t* result) +{ + + st25r3911EnableInterrupts(ST25R3911_IRQ_MASK_DCT); + st25r3911GetInterrupt(ST25R3911_IRQ_MASK_DCT); + st25r3911ExecuteCommand(cmd); + st25r3911WaitForInterruptsTimed(ST25R3911_IRQ_MASK_DCT, sleeptime); + st25r3911DisableInterrupts(ST25R3911_IRQ_MASK_DCT); + + /* read out the result if the pointer is not NULL */ + if (result != NULL) + { + st25r3911ReadRegister(resreg, result); + } + + return ERR_NONE; +} diff --git a/Software/Drivers/BSP/Components/ST25R3911/st25r3911.h b/Software/Drivers/BSP/Components/ST25R3911/st25r3911.h new file mode 100644 index 0000000..3a81b34 --- /dev/null +++ b/Software/Drivers/BSP/Components/ST25R3911/st25r3911.h @@ -0,0 +1,601 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: ST25R3911 firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author Ulrich Herrmann + * + * \brief ST25R3911 declaration file + * + * API: + * - Initialize ST25R3911 driver: #st25r3911Initialize + * - Deinitialize ST25R3911 driver: #st25r3911Deinitialize + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-HAL + * \brief RFAL Hardware Abstraction Layer + * @{ + * + * \addtogroup ST25R3911 + * \brief RFAL ST25R3911 Driver + * @{ + * + * \addtogroup ST25R3911_Driver + * \brief RFAL ST25R3911 Driver + * @{ + * + */ + +#ifndef ST25R3911_H +#define ST25R3911_H + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "platform.h" +#include "st_errno.h" + +/* +****************************************************************************** +* GLOBAL DATATYPES +****************************************************************************** +*/ + +/*! Parameters how the stream mode should work */ +struct st25r3911StreamConfig { + uint8_t useBPSK; /*!< 0: subcarrier, 1:BPSK */ + uint8_t din; /*!< the divider for the in subcarrier frequency: fc/2^din */ + uint8_t dout; /*!< the divider for the in subcarrier frequency fc/2^dout */ + uint8_t report_period_length; /*!< the length of the reporting period 2^report_period_length */ +}; + + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ +#define ST25R3911_FDT_NONE 0x00U /*!< Value indicating not to perform FDT */ + +#define MS_TO_64FCS(A) ((A) * 212U) /*!< Converts from ms to 64/fc steps */ +#define MS_FROM_64FCS(A) ((A) / 212U) /*!< Converts from 64/fc steps to ms */ + +/* ST25R3911 direct commands */ +#define ST25R3911_CMD_SET_DEFAULT 0xC1U /*!< Puts the chip in default state (same as after power-up) */ +#define ST25R3911_CMD_CLEAR_FIFO 0xC2U /*!< Stops all activities and clears FIFO */ +#define ST25R3911_CMD_TRANSMIT_WITH_CRC 0xC4U /*!< Transmit with CRC */ +#define ST25R3911_CMD_TRANSMIT_WITHOUT_CRC 0xC5U /*!< Transmit without CRC */ +#define ST25R3911_CMD_TRANSMIT_REQA 0xC6U /*!< Transmit REQA */ +#define ST25R3911_CMD_TRANSMIT_WUPA 0xC7U /*!< Transmit WUPA */ +#define ST25R3911_CMD_INITIAL_RF_COLLISION 0xC8U /*!< NFC transmit with Initial RF Collision Avoidance */ +#define ST25R3911_CMD_RESPONSE_RF_COLLISION_N 0xC9U /*!< NFC transmit with Response RF Collision Avoidance */ +#define ST25R3911_CMD_RESPONSE_RF_COLLISION_0 0xCAU /*!< NFC transmit with Response RF Collision Avoidance with n=0 */ +#define ST25R3911_CMD_NORMAL_NFC_MODE 0xCBU /*!< NFC switch to normal NFC mode */ +#define ST25R3911_CMD_ANALOG_PRESET 0xCCU /*!< Analog Preset */ +#define ST25R3911_CMD_MASK_RECEIVE_DATA 0xD0U /*!< Mask recive data */ +#define ST25R3911_CMD_UNMASK_RECEIVE_DATA 0xD1U /*!< Unmask recive data */ +#define ST25R3911_CMD_MEASURE_AMPLITUDE 0xD3U /*!< Measure singal amplitude on RFI inputs */ +#define ST25R3911_CMD_SQUELCH 0xD4U /*!< Squelch */ +#define ST25R3911_CMD_CLEAR_SQUELCH 0xD5U /*!< Clear Squelch */ +#define ST25R3911_CMD_ADJUST_REGULATORS 0xD6U /*!< Adjust regulators */ +#define ST25R3911_CMD_CALIBRATE_MODULATION 0xD7U /*!< Calibrate modulation depth */ +#define ST25R3911_CMD_CALIBRATE_ANTENNA 0xD8U /*!< Calibrate antenna */ +#define ST25R3911_CMD_MEASURE_PHASE 0xD9U /*!< Measure phase between RFO and RFI signal */ +#define ST25R3911_CMD_CLEAR_RSSI 0xDAU /*!< clear RSSI bits and restart the measurement */ +#define ST25R3911_CMD_TRANSPARENT_MODE 0xDCU /*!< Transparent mode */ +#define ST25R3911_CMD_CALIBRATE_C_SENSOR 0xDDU /*!< Calibrate the capacitive sensor */ +#define ST25R3911_CMD_MEASURE_CAPACITANCE 0xDEU /*!< Measure capacitance */ +#define ST25R3911_CMD_MEASURE_VDD 0xDFU /*!< Measure power supply voltage */ +#define ST25R3911_CMD_START_GP_TIMER 0xE0U /*!< Start the general purpose timer */ +#define ST25R3911_CMD_START_WUP_TIMER 0xE1U /*!< Start the wake-up timer */ +#define ST25R3911_CMD_START_MASK_RECEIVE_TIMER 0xE2U /*!< Start the mask-receive timer */ +#define ST25R3911_CMD_START_NO_RESPONSE_TIMER 0xE3U /*!< Start the no-repsonse timer */ +#define ST25R3911_CMD_TEST_CLEARA 0xFAU /*!< Clear Test register */ +#define ST25R3911_CMD_TEST_CLEARB 0xFBU /*!< Clear Test register */ +#define ST25R3911_CMD_TEST_ACCESS 0xFCU /*!< Enable R/W access to the test registers */ +#define ST25R3911_CMD_LOAD_PPROM 0xFDU /*!< Load data from the poly fuses to RAM */ +#define ST25R3911_CMD_FUSE_PPROM 0xFEU /*!< Fuse poly fuses with data from the RAM */ + + +#define ST25R3911_FIFO_DEPTH 96U /*!< Depth of FIFO */ + +#define ST25R3911_THRESHOLD_DO_NOT_SET 0xFFU /*!< Indicates not to change this Threshold */ + +#define ST25R3911_BR_DO_NOT_SET 0xFFU /*!< Indicates not to change this Bit Rate */ +#define ST25R3911_BR_106 0x00U /*!< ST25R3911 Bit Rate 106 kbit/s (fc/128) */ +#define ST25R3911_BR_212 0x01U /*!< ST25R3911 Bit Rate 212 kbit/s (fc/64) */ +#define ST25R3911_BR_424 0x02U /*!< ST25R3911 Bit Rate 424 kbit/s (fc/32) */ +#define ST25R3911_BR_848 0x03U /*!< ST25R3911 Bit Rate 848 kbit/s (fc/16) */ +#define ST25R3911_BR_1695 0x04U /*!< ST25R3911 Bit Rate 1696 kbit/s (fc/8) */ +#define ST25R3911_BR_3390 0x05U /*!< ST25R3911 Bit Rate 3390 kbit/s (fc/4) */ +#define ST25R3911_BR_6780 0x06U /*!< ST25R3911 Bit Rate 6780 kbit/s (fc/2) */ + +/* +****************************************************************************** +* GLOBAL MACROS +****************************************************************************** +*/ + +/*! Checks if General Purpose Timer is still running by reading gpt_on flag */ +#define st25r3911IsGPTRunning( ) ( st25r3911CheckReg(ST25R3911_REG_REGULATOR_RESULT, ST25R3911_REG_REGULATOR_RESULT_gpt_on, ST25R3911_REG_REGULATOR_RESULT_gpt_on) ) + +/*! Checks if CRC is configured to be in FIFO */ +#define st25r3911IsCRCinFIFO( ) ( st25r3911CheckReg(ST25R3911_REG_AUX, ST25R3911_REG_AUX_crc_2_fifo, ST25R3911_REG_AUX_crc_2_fifo) ) + +/*! Checks if External Filed is detected by reading ST25R3911 External Field + * Detector output */ +#define st25r3911IsExtFieldOn() ( st25r3911CheckReg(ST25R3911_REG_AUX_DISPLAY, ST25R3911_REG_AUX_DISPLAY_efd_o, ST25R3911_REG_AUX_DISPLAY_efd_o ) ) + +/*! Checks if Transmitter is enabled (Field On) */ +#define st25r3911IsTxEnabled() ( st25r3911CheckReg(ST25R3911_REG_OP_CONTROL, ST25R3911_REG_OP_CONTROL_tx_en, ST25R3911_REG_OP_CONTROL_tx_en ) ) + +/*! Turn Off Tx (Field Off) */ +#define st25r3911TxOff() st25r3911ClrRegisterBits(ST25R3911_REG_OP_CONTROL, ST25R3911_REG_OP_CONTROL_tx_en ); + +/*! Checks if last FIFO byte is complete */ +#define st25r3911IsLastFIFOComplete() st25r3911CheckReg( ST25R3911_REG_FIFO_RX_STATUS2, ST25R3911_REG_FIFO_RX_STATUS2_mask_fifo_lb, 0 ) + +/*! Checks if the Oscillator is enabled */ +#define st25r3911IsOscOn() st25r3911CheckReg( ST25R3911_REG_OP_CONTROL, ST25R3911_REG_OP_CONTROL_en, ST25R3911_REG_OP_CONTROL_en ) + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +/*! + ***************************************************************************** + * \brief Turn on Oscillator and Regulator + * + * This function turn on oscillator and regulator and wait for the oscillator to + * become stable. + * + ***************************************************************************** + */ +extern void st25r3911OscOn( void ); + +/*! + ***************************************************************************** + * \brief Turn On Tx and Rx + * + * This function turns On Tx and Rx (Field On) + * + ***************************************************************************** + */ +extern void st25r3911TxRxOn( void ); + +/*! + ***************************************************************************** + * \brief Turn Off Tx and Rx + * + * This function turns Off Tx and Rx (Field Off) + * + ***************************************************************************** + */ +extern void st25r3911TxRxOff( void ); + +/*! + ***************************************************************************** + * \brief Initialise ST25R3911 driver + * + * This function initialises the ST25R3911 driver. + * + ***************************************************************************** + */ +extern void st25r3911Initialize( void ); + +/*! + ***************************************************************************** + * \brief Deinitialize ST25R3911 driver + * + * Calling this function deinitializes the ST25R3911 driver. + * + ***************************************************************************** + */ +extern void st25r3911Deinitialize( void ); + + +/*! + ***************************************************************************** + * \brief Sets the bitrate registers + * + * This function sets the bitrate register for rx and tx + * + * \param txRate : speed is 2^txrate * 106 kb/s + * 0xff : don't set txrate + * \param rxRate : speed is 2^rxrate * 106 kb/s + * 0xff : don't set rxrate + * + * \return ERR_NONE : No error, both bit rates were set + * \return ERR_PARAM: At least one bit rate was invalid + * + ***************************************************************************** + */ +extern ReturnCode st25r3911SetBitrate( uint8_t txRate, uint8_t rxRate ); + +/*! + ***************************************************************************** + * \brief Adjusts supply regulators according to the current supply voltage + * + * On this function the power level is measured in maximum load conditions and + * the regulated voltage reference is set to 250mV below this level. + * Execution of this function lasts arround 5ms. + * + * The regulated voltages will be set to the result of Adjust Regulators + * + * \param [out] result_mV : Result of calibration in milliVolts. + * + * \return ERR_IO : Error during communication with ST25R3911. + * \return ERR_NONE : No error. + * + ***************************************************************************** + */ +extern ReturnCode st25r3911AdjustRegulators( uint16_t* result_mV ); + +/*! + ***************************************************************************** + * \brief Measure Amplitude + * + * This function measured the amplitude on the RFI inputs and stores the + * result in parameter \a result. + * + * \param[out] result: 8 bit long result of RF measurement. + * + ***************************************************************************** + */ +extern void st25r3911MeasureAmplitude( uint8_t* result ); + +/*! + ***************************************************************************** + * \brief Measure Capacitance + * + * This function performs the capacitance measurement and stores the + * result in parameter \a result. + * + * \param[out] result: 8 bit long result of RF measurement. + * + ***************************************************************************** + */ +extern void st25r3911MeasureCapacitance( uint8_t* result ); + +/*! + ***************************************************************************** + * \brief Measure Voltage + * + * This function measures the voltage on one of VDD and VSP_* + * result in parameter \a result. + * + * \param[in] mpsv : one of ST25R3911_REG_REGULATOR_CONTROL_mpsv_vdd + * ST25R3911_REG_REGULATOR_CONTROL_mpsv_vsp_rf + * ST25R3911_REG_REGULATOR_CONTROL_mpsv_vsp_a + * or ST25R3911_REG_REGULATOR_CONTROL_mpsv_vsp_d + * + * \return the measured voltage raw values + * + ***************************************************************************** + */ +extern uint8_t st25r3911MeasurePowerSupply( uint8_t mpsv ); + +/*! + ***************************************************************************** + * \brief Measure Voltage + * + * This function measures the voltage on one of VDD and VSP_* + * result in parameter \a result. + * + * \param[in] mpsv : one of ST25R3911_REG_REGULATOR_CONTROL_mpsv_vdd + * ST25R3911_REG_REGULATOR_CONTROL_mpsv_vsp_rf + * ST25R3911_REG_REGULATOR_CONTROL_mpsv_vsp_a + * or ST25R3911_REG_REGULATOR_CONTROL_mpsv_vsp_d + * + * \return the measured voltage in mV + * + ***************************************************************************** + */ +extern uint16_t st25r3911MeasureVoltage( uint8_t mpsv ); + +/*! + ***************************************************************************** + * \brief Calibrate antenna + * + * This function is used to calibrate the antenna using a special sequence. + * The result is stored in the \a result parameter. + * + * \param[out] result: 8 bit long result of antenna calibration algorithm. + * + ***************************************************************************** + */ +extern void st25r3911CalibrateAntenna( uint8_t* result ); + +/*! + ***************************************************************************** + * \brief Measure Phase + * + * This function performs a Phase measurement. + * The result is stored in the \a result parameter. + * + * \param[out] result: 8 bit long result of the measurement. + * + ***************************************************************************** + */ +extern void st25r3911MeasurePhase( uint8_t* result ); + +/*! + ***************************************************************************** + * \brief Calibrate modulation depth + * + * This function is used to calibrate the modulation depth using a special sequence. + * The result is stored in the \a result parameter. + * + * \param[out] result: 8 bit long result of antenna calibration algorithm. + * + ***************************************************************************** + */ +extern void st25r3911CalibrateModulationDepth( uint8_t* result ); + + +/*! + ***************************************************************************** + * \brief Calibrate Capacitive Sensor + * + * This function performs automatic calibration of the capacitive sensor + * and stores the result in parameter \a result. + * + * \warning To avoid interference with Xtal oscillator and reader magnetic + * field, it is strongly recommended to perform calibration + * in Power-down mode only. + * This method does not modify the Oscillator nor transmitter state, + * these should be configured before by user. + * + * \param[out] result: 5 bit long result of the calibration. + * Binary weighted, step 0.1 pF, max 3.1 pF + * + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_IO : The calibration was not successful + * \return ERR_NONE : No error + * + ***************************************************************************** + */ +extern ReturnCode st25r3911CalibrateCapacitiveSensor( uint8_t* result ); + +/*! + ***************************************************************************** + * \brief set no response time + * + * This function executes sets the no response time to the defines value + * + * \param nrt_64fcs : no response time in 64/fc = 4.72us + * completion interrupt + * + * \return ERR_PARAM : if time is too large + */ +extern ReturnCode st25r3911SetNoResponseTime_64fcs( uint32_t nrt_64fcs ); + +/*! + ***************************************************************************** + * \brief set no response time + * + * This function executes sets and immediately start the no response timer + * to the defines value + * This is used when needs to add more time before timeout whitout Tx + * + * \param nrt_64fcs : no response time in 64/fc = 4.72us + * completion interrupt + * + * \return ERR_PARAM : if time is too large + */ +extern ReturnCode st25r3911SetStartNoResponseTime_64fcs( uint32_t nrt_64fcs ); + +/*! + ***************************************************************************** + * \brief Perform Collision Avoidance + * + * Performs Collision Avoidance with the given threshold and with the + * n number of TRFW + * + * \param[in] FieldONCmd : Field ON command to be executed ST25R3911_CMD_INITIAL_RF_COLLISION + * or ST25R3911_CMD_RESPONSE_RF_COLLISION_0/N + * \param[in] pdThreshold : Peer Detection Threshold (ST25R3916_REG_FIELD_THRESHOLD_trg_xx) + * 0xff : don't set Threshold (ST25R3916_THRESHOLD_DO_NOT_SET) + * \param[in] caThreshold : Collision Avoidance Threshold (ST25R3916_REG_FIELD_THRESHOLD_rfe_xx) + * 0xff : don't set Threshold (ST25R3916_THRESHOLD_DO_NOT_SET) + * \param[in] nTRFW : Number of TRFW + * + * \return ERR_NONE : no collision detected + * \return ERR_RF_COLLISION : collision detected + */ +extern ReturnCode st25r3911PerformCollisionAvoidance( uint8_t FieldONCmd, uint8_t pdThreshold, uint8_t caThreshold, uint8_t nTRFW ); + + +/*! + ***************************************************************************** + * \brief Get amount of bits of the last FIFO byte if incomplete + * + * Gets the number of bits of the last FIFO byte if incomplete + * + * \return the number of bits of the last FIFO byte if incomplete, 0 if + * the last byte is complete + * + ***************************************************************************** + */ +extern uint8_t st25r3911GetNumFIFOLastBits( void ); + +/*! + ***************************************************************************** + * \brief Get NRT time + * + * This returns the last value set on the NRT + * + * \warning it does not reads chip register, just the sw var that contains the + * last value set before + * + * \return the value of the NRT + */ +extern uint32_t st25r3911GetNoResponseTime_64fcs( void ); + +/*! + ***************************************************************************** + * \brief set general purpose timer timeout + * + * This function sets the proper registers but does not start the timer actually + * + * \param gpt_8fcs : general purpose timer timeout in 8/fc = 590ns + * + */ +extern void st25r3911SetGPTime_8fcs( uint16_t gpt_8fcs ); +/*! + ***************************************************************************** + * \brief Starts GPT with given timeout + * + * This function starts the general purpose timer with the given timeout + * + * \param gpt_8fcs : general purpose timer timeout in 8/fc = 590ns + * \param trigger_source : no trigger, start of Rx, end of Rx, end of Tx in NFC mode + */ +extern void st25r3911StartGPTimer_8fcs( uint16_t gpt_8fcs, uint8_t trigger_source ); + +/*! + ***************************************************************************** + * \brief Checks if register contains a expected value + * + * This function checks if the given reg contains a value that once masked + * equals the expected value + * + * \param reg : the register to check the value + * \param mask : the mask apply on register value + * \param value : expected value to be compared to + * + * \return true when reg contains the expected value | false otherwise + */ +bool st25r3911CheckReg( uint8_t reg, uint8_t mask, uint8_t value ); + +/*! + ***************************************************************************** + * \brief Sets the number Tx Bits + * + * Sets ST25R3911 internal registers with correct number of complete bytes and + * bits to be sent + * + * \param nBits : the number bits to be transmitted + ***************************************************************************** + */ +void st25r3911SetNumTxBits( uint32_t nBits ); + +/*! + ***************************************************************************** + * \brief Check Identity + * + * Checks if the chip ID is as expected. + * + * 5 bit IC type code for ST25R3911: 00001 + * The 3 lsb contain the IC revision code + * + * + * \param[out] rev : the IC revision code + * + * \return true when IC type is as expected + * + ***************************************************************************** + */ +bool st25r3911CheckChipID( uint8_t *rev ); + +/*! + ***************************************************************************** + * \brief Check if command is valid + * + * Checks if the given command is a valid ST25R3911 command + * + * \param[in] cmd: Command to check + * + * \return true if is a valid command + * \return false otherwise + * + ***************************************************************************** + */ +bool st25r3911IsCmdValid( uint8_t cmd ); + +/*! + ***************************************************************************** + * \brief Configure the stream mode of ST25R3911 + * + * This function initializes the stream with the given parameters + * + * \param[in] config : all settings for bitrates, type, etc. + + * \return ERR_NONE : No error, stream mode driver initialized. + * + ***************************************************************************** + */ +extern ReturnCode st25r3911StreamConfigure( const struct st25r3911StreamConfig *config ); + +/*! + ***************************************************************************** + * \brief Retrieves all internal registers from st25r3911 + */ +extern ReturnCode st25r3911GetRegsDump( uint8_t* resRegDump, uint8_t* sizeRegDump ); + + +/*! + ***************************************************************************** + * \brief Gets the RSSI values + * + * This function gets the RSSI value of the previous reception taking into + * account the gain reductions that were used. + * RSSI value for both AM and PM channel can be retrieved. + * + * \param[out] amRssi: the RSSI on the AM channel expressed in mV + * \param[out] pmRssi: the RSSI on the PM channel expressed in mV + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NONE : No error + * + ***************************************************************************** + */ +ReturnCode st25r3911GetRSSI( uint16_t *amRssi, uint16_t *pmRssi ); + + +#endif /* ST25R3911_H */ + +/** + * @} + * + * @} + * + * @} + * + * @} + */ + diff --git a/Software/Drivers/BSP/Components/ST25R3911/st25r3911_com.c b/Software/Drivers/BSP/Components/ST25R3911/st25r3911_com.c new file mode 100644 index 0000000..30a5ddd --- /dev/null +++ b/Software/Drivers/BSP/Components/ST25R3911/st25r3911_com.c @@ -0,0 +1,457 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: ST25R3911 firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author Ulrich Herrmann + * + * \brief Implementation of ST25R3911 communication. + * + */ + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "st25r3911_com.h" +#include "st25r3911.h" +#include "utils.h" + + +/* +****************************************************************************** +* LOCAL DEFINES +****************************************************************************** +*/ + +#define ST25R3911_WRITE_MODE (0U) /*!< ST25R3911 SPI Operation Mode: Write */ +#define ST25R3911_READ_MODE (1U << 6) /*!< ST25R3911 SPI Operation Mode: Read */ +#define ST25R3911_FIFO_LOAD (2U << 6) /*!< ST25R3911 SPI Operation Mode: FIFO Load */ +#define ST25R3911_FIFO_READ (0xBFU) /*!< ST25R3911 SPI Operation Mode: FIFO Read */ +#define ST25R3911_CMD_MODE (3U << 6) /*!< ST25R3911 SPI Operation Mode: Direct Command */ + +#define ST25R3911_CMD_LEN (1U) /*!< ST25R3911 CMD length */ +#define ST25R3911_BUF_LEN (ST25R3911_CMD_LEN+ST25R3911_FIFO_DEPTH) /*!< ST25R3911 communication buffer: CMD + FIFO length */ + +/* +****************************************************************************** +* LOCAL VARIABLES +****************************************************************************** +*/ + +#ifdef ST25R391X_COM_SINGLETXRX +static uint8_t comBuf[ST25R3911_BUF_LEN]; /*!< ST25R3911 communication buffer */ +#endif /* ST25R391X_COM_SINGLETXRX */ + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +static inline void st25r3911CheckFieldSetLED(uint8_t value) +{ + if ((ST25R3911_REG_OP_CONTROL_tx_en & value) != 0U) + { +#ifdef PLATFORM_LED_FIELD_PIN + platformLedOn( PLATFORM_LED_FIELD_PORT, PLATFORM_LED_FIELD_PIN ); + } + else + { + platformLedOff( PLATFORM_LED_FIELD_PORT, PLATFORM_LED_FIELD_PIN ); +#endif /* PLATFORM_LED_FIELD_PIN */ + } +} + + +/* +****************************************************************************** +* GLOBAL FUNCTIONS +****************************************************************************** +*/ +void st25r3911ReadRegister(uint8_t reg, uint8_t* value) +{ +#ifdef ST25R391X_COM_SINGLETXRX + uint8_t* buf = comBuf; +#else /* ST25R391X_COM_SINGLETXRX */ + uint8_t buf[2]; +#endif /* ST25R391X_COM_SINGLETXRX */ + + platformProtectST25R391xComm(); + platformSpiSelect(); + + buf[0] = (reg | ST25R3911_READ_MODE); + buf[1] = 0; + + platformSpiTxRx(buf, buf, 2); + + if(value != NULL) + { + *value = buf[1]; + } + + platformSpiDeselect(); + platformUnprotectST25R391xComm(); + + return; +} + + +void st25r3911ReadMultipleRegisters(uint8_t reg, uint8_t* values, uint8_t length) +{ +#if !defined(ST25R391X_COM_SINGLETXRX) + uint8_t cmd = (reg | ST25R3911_READ_MODE); +#endif /* !ST25R391X_COM_SINGLETXRX */ + + if (length > 0U) + { + platformProtectST25R391xComm(); + platformSpiSelect(); + +#ifdef ST25R391X_COM_SINGLETXRX + + ST_MEMSET( comBuf, 0x00, MIN( (ST25R3911_CMD_LEN + (uint32_t)length), ST25R3911_BUF_LEN ) ); + comBuf[0] = (reg | ST25R3911_READ_MODE); + + platformSpiTxRx(comBuf, comBuf, MIN( (ST25R3911_CMD_LEN + length), ST25R3911_BUF_LEN ) ); /* Transceive as a single SPI call */ + ST_MEMCPY( values, &comBuf[ST25R3911_CMD_LEN], MIN( length, ST25R3911_BUF_LEN - ST25R3911_CMD_LEN ) ); /* Copy from local buf to output buffer and skip cmd byte */ + +#else /* ST25R391X_COM_SINGLETXRX */ + + /* Since the result comes one byte later, let's first transmit the adddress with discarding the result */ + platformSpiTxRx(&cmd, NULL, ST25R3911_CMD_LEN); + platformSpiTxRx(NULL, values, length); + +#endif /* ST25R391X_COM_SINGLETXRX */ + + platformSpiDeselect(); + platformUnprotectST25R391xComm(); + } + + return; +} + +void st25r3911ReadTestRegister(uint8_t reg, uint8_t* value) +{ + +#ifdef ST25R391X_COM_SINGLETXRX + uint8_t* buf = comBuf; +#else /* ST25R391X_COM_SINGLETXRX */ + uint8_t buf[3]; +#endif /* ST25R391X_COM_SINGLETXRX */ + + platformProtectST25R391xComm(); + platformSpiSelect(); + + buf[0] = ST25R3911_CMD_TEST_ACCESS; + buf[1] = (reg | ST25R3911_READ_MODE); + buf[2] = 0x00; + + platformSpiTxRx(buf, buf, 3); + + if(value != NULL) + { + *value = buf[2]; + } + + platformSpiDeselect(); + platformUnprotectST25R391xComm(); + + return; +} + +void st25r3911WriteTestRegister(uint8_t reg, uint8_t value) +{ +#ifdef ST25R391X_COM_SINGLETXRX + uint8_t* buf = comBuf; +#else /* ST25R391X_COM_SINGLETXRX */ + uint8_t buf[3]; +#endif /* ST25R391X_COM_SINGLETXRX */ + + platformProtectST25R391xComm(); + platformSpiSelect(); + + buf[0] = ST25R3911_CMD_TEST_ACCESS; + buf[1] = (reg | ST25R3911_WRITE_MODE); + buf[2] = value; + + platformSpiTxRx(buf, NULL, 3); + + platformSpiDeselect(); + platformUnprotectST25R391xComm(); + + return; +} + +void st25r3911WriteRegister(uint8_t reg, uint8_t value) +{ +#ifdef ST25R391X_COM_SINGLETXRX + uint8_t* buf = comBuf; +#else /* ST25R391X_COM_SINGLETXRX */ + uint8_t buf[2]; +#endif /* ST25R391X_COM_SINGLETXRX */ + + if (ST25R3911_REG_OP_CONTROL == reg) + { + st25r3911CheckFieldSetLED(value); + } + + platformProtectST25R391xComm(); + platformSpiSelect(); + + buf[0] = reg | ST25R3911_WRITE_MODE; + buf[1] = value; + + platformSpiTxRx(buf, NULL, 2); + + platformSpiDeselect(); + platformUnprotectST25R391xComm(); + + return; +} + +void st25r3911ClrRegisterBits( uint8_t reg, uint8_t clr_mask ) +{ + uint8_t tmp; + + st25r3911ReadRegister(reg, &tmp); + tmp &= ~clr_mask; + st25r3911WriteRegister(reg, tmp); + + return; +} + + +void st25r3911SetRegisterBits( uint8_t reg, uint8_t set_mask ) +{ + uint8_t tmp; + + st25r3911ReadRegister(reg, &tmp); + tmp |= set_mask; + st25r3911WriteRegister(reg, tmp); + + return; +} + +void st25r3911ChangeRegisterBits(uint8_t reg, uint8_t valueMask, uint8_t value) +{ + st25r3911ModifyRegister(reg, valueMask, (valueMask & value) ); +} + +void st25r3911ModifyRegister(uint8_t reg, uint8_t clr_mask, uint8_t set_mask) +{ + uint8_t tmp; + + st25r3911ReadRegister(reg, &tmp); + + /* mask out the bits we don't want to change */ + tmp &= ~clr_mask; + /* set the new value */ + tmp |= set_mask; + st25r3911WriteRegister(reg, tmp); + + return; +} + +void st25r3911ChangeTestRegisterBits( uint8_t reg, uint8_t valueMask, uint8_t value ) +{ + uint8_t rdVal; + uint8_t wrVal; + + /* Read current reg value */ + st25r3911ReadTestRegister(reg, &rdVal); + + /* Compute new value */ + wrVal = (rdVal & ~valueMask); + wrVal |= (value & valueMask); + + /* Write new reg value */ + st25r3911WriteTestRegister(reg, wrVal ); + + return; +} + +void st25r3911WriteMultipleRegisters(uint8_t reg, const uint8_t* values, uint8_t length) +{ +#if !defined(ST25R391X_COM_SINGLETXRX) + uint8_t cmd = (reg | ST25R3911_WRITE_MODE); +#endif /* !ST25R391X_COM_SINGLETXRX */ + + if ((reg <= ST25R3911_REG_OP_CONTROL) && ((reg+length) >= ST25R3911_REG_OP_CONTROL)) + { + st25r3911CheckFieldSetLED(values[ST25R3911_REG_OP_CONTROL-reg]); + } + + if (length > 0U) + { + /* make this operation atomic */ + platformProtectST25R391xComm(); + platformSpiSelect(); + +#ifdef ST25R391X_COM_SINGLETXRX + + comBuf[0] = (reg | ST25R3911_WRITE_MODE); + ST_MEMCPY( &comBuf[ST25R3911_CMD_LEN], values, MIN( length, ST25R3911_BUF_LEN - ST25R3911_CMD_LEN ) ); + + platformSpiTxRx( comBuf, NULL, MIN( (ST25R3911_CMD_LEN + length), ST25R3911_BUF_LEN ) ); + +#else /*ST25R391X_COM_SINGLETXRX*/ + + platformSpiTxRx( &cmd, NULL, ST25R3911_CMD_LEN ); + platformSpiTxRx( values, NULL, length ); + +#endif /*ST25R391X_COM_SINGLETXRX*/ + + platformSpiDeselect(); + platformUnprotectST25R391xComm(); + } + + return; +} + + +void st25r3911WriteFifo(const uint8_t* values, uint8_t length) +{ +#if !defined(ST25R391X_COM_SINGLETXRX) + uint8_t cmd = ST25R3911_FIFO_LOAD; +#endif /* !ST25R391X_COM_SINGLETXRX */ + + if (length > 0U) + { + platformProtectST25R391xComm(); + platformSpiSelect(); + +#ifdef ST25R391X_COM_SINGLETXRX + + comBuf[0] = ST25R3911_FIFO_LOAD; + ST_MEMCPY( &comBuf[ST25R3911_CMD_LEN], values, MIN( length, ST25R3911_BUF_LEN - ST25R3911_CMD_LEN ) ); + + platformSpiTxRx( comBuf, NULL, MIN( (ST25R3911_CMD_LEN + length), ST25R3911_BUF_LEN ) ); + +#else /*ST25R391X_COM_SINGLETXRX*/ + + platformSpiTxRx( &cmd, NULL, ST25R3911_CMD_LEN ); + platformSpiTxRx( values, NULL, length ); + +#endif /*ST25R391X_COM_SINGLETXRX*/ + + platformSpiDeselect(); + platformUnprotectST25R391xComm(); + } + + return; +} + +void st25r3911ReadFifo(uint8_t* buf, uint8_t length) +{ +#if !defined(ST25R391X_COM_SINGLETXRX) + uint8_t cmd = ST25R3911_FIFO_READ; +#endif /* !ST25R391X_COM_SINGLETXRX */ + + if(length > 0U) + { + platformProtectST25R391xComm(); + platformSpiSelect(); + +#ifdef ST25R391X_COM_SINGLETXRX + + ST_MEMSET( comBuf, 0x00, MIN( (ST25R3911_CMD_LEN + (uint32_t)length), ST25R3911_BUF_LEN ) ); + comBuf[0] = ST25R3911_FIFO_READ; + + platformSpiTxRx( comBuf, comBuf, MIN( (ST25R3911_CMD_LEN + length), ST25R3911_BUF_LEN ) ); /* Transceive as a single SPI call */ + ST_MEMCPY( buf, &comBuf[ST25R3911_CMD_LEN], MIN( length, ST25R3911_BUF_LEN - ST25R3911_CMD_LEN ) ); /* Copy from local buf to output buffer and skip cmd byte */ + +#else /*ST25R391X_COM_SINGLETXRX*/ + + platformSpiTxRx( &cmd, NULL, ST25R3911_CMD_LEN ); + platformSpiTxRx( NULL, buf, length ); + +#endif /*ST25R391X_COM_SINGLETXRX*/ + + platformSpiDeselect(); + platformUnprotectST25R391xComm(); + } + + return; +} + +void st25r3911ExecuteCommand( uint8_t cmd ) +{ + uint8_t tmpCmd; /* MISRA 17.8 */ + +#ifdef PLATFORM_LED_FIELD_PIN + if ( (cmd >= ST25R3911_CMD_TRANSMIT_WITH_CRC) && (cmd <= ST25R3911_CMD_RESPONSE_RF_COLLISION_0)) + { + platformLedOff(PLATFORM_LED_FIELD_PORT, PLATFORM_LED_FIELD_PIN); + } +#endif /* PLATFORM_LED_FIELD_PIN */ + + tmpCmd = (cmd | ST25R3911_CMD_MODE); + + platformProtectST25R391xComm(); + platformSpiSelect(); + + platformSpiTxRx( &tmpCmd, NULL, ST25R3911_CMD_LEN ); + + platformSpiDeselect(); + platformUnprotectST25R391xComm(); + + return; +} + + +void st25r3911ExecuteCommands(const uint8_t *cmds, uint8_t length) +{ + platformProtectST25R391xComm(); + platformSpiSelect(); + + platformSpiTxRx( cmds, NULL, length ); + + platformSpiDeselect(); + platformUnprotectST25R391xComm(); + + return; +} + +bool st25r3911IsRegValid( uint8_t reg ) +{ + if( !(( (int16_t)reg >= (int16_t)ST25R3911_REG_IO_CONF1) && (reg <= ST25R3911_REG_CAPACITANCE_MEASURE_RESULT)) && (reg != ST25R3911_REG_IC_IDENTITY) ) + { + return false; + } + return true; +} + +/* +****************************************************************************** +* LOCAL FUNCTIONS +****************************************************************************** +*/ + diff --git a/Software/Drivers/BSP/Components/ST25R3911/st25r3911_com.h b/Software/Drivers/BSP/Components/ST25R3911/st25r3911_com.h new file mode 100644 index 0000000..c5f540f --- /dev/null +++ b/Software/Drivers/BSP/Components/ST25R3911/st25r3911_com.h @@ -0,0 +1,816 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: ST25R3911 firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author Ulrich Herrmann + * + * \brief ST25R3911 communication declaration file + * + */ +/*! + * This driver provides basic abstraction for communication with the ST25R3911. + * It uses the SPI driver for interfacing with the ST25R3911. + * + * API: + * - Read Register: #st25r3911ReadRegister + * - Modify Register: #st25r3911ModifyRegister + * - Write Register: #st25r3911WriteRegister + * - Write Multiple Registers: #st25r3911WriteMultipleRegisters + * - Load ST25R3911 FIFO with data: #st25r3911WriteFifo + * - Read from ST25R3911 FIFO: #st25r3911ReadFifo + * - Execute direct command: #st25r3911ExecuteCommand + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-HAL + * \brief RFAL Hardware Abstraction Layer + * @{ + * + * \addtogroup ST25R3911 + * \brief RFAL ST25R3911 Driver + * @{ + * + * \addtogroup ST25R3911_Com + * \brief RFAL ST25R3911 Communication + * @{ + * + */ + +#ifndef ST25R3911_COM_H +#define ST25R3911_COM_H + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "platform.h" +#include "st_errno.h" + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ + +#define ST25R3911_FIFO_STATUS_LEN 2 /*!< Number of FIFO Status Register */ + + + + +#define ST25R3911_REG_IO_CONF1 0x00U /*!< RW IO Configuration Register 1 */ +#define ST25R3911_REG_IO_CONF2 0x01U /*!< RW IO Configuration Register 2 */ + +#define ST25R3911_REG_OP_CONTROL 0x02U /*!< RW Operation Control Register */ +#define ST25R3911_REG_MODE 0x03U /*!< RW Mode Definition Register */ +#define ST25R3911_REG_BIT_RATE 0x04U /*!< RW Bit Rate Definition Register */ + +#define ST25R3911_REG_ISO14443A_NFC 0x05U /*!< RW ISO14443A and NFC 106 kBit/s Settings Register */ +#define ST25R3911_REG_ISO14443B_1 0x06U /*!< RW ISO14443B Settings Register 1 */ +#define ST25R3911_REG_ISO14443B_2 0x07U /*!< RW ISO14443B Settings Register 2 */ +#define ST25R3911_REG_STREAM_MODE 0x08U /*!< RW Stream Mode Definition Register */ +#define ST25R3911_REG_AUX 0x09U /*!< RW Auxiliary Definition Register */ +#define ST25R3911_REG_RX_CONF1 0x0AU /*!< RW Receiver Configuration Register 1 */ +#define ST25R3911_REG_RX_CONF2 0x0BU /*!< RW Receiver Configuration Register 2 */ +#define ST25R3911_REG_RX_CONF3 0x0CU /*!< RW Receiver Configuration Register 3 */ +#define ST25R3911_REG_RX_CONF4 0x0DU /*!< RW Receiver Configuration Register 4 */ + +#define ST25R3911_REG_MASK_RX_TIMER 0x0EU /*!< RW Mask Receive Timer Register */ +#define ST25R3911_REG_NO_RESPONSE_TIMER1 0x0FU /*!< RW No-response Timer Register 1 */ +#define ST25R3911_REG_NO_RESPONSE_TIMER2 0x10U /*!< RW No-response Timer Register 2 */ +#define ST25R3911_REG_GPT_CONTROL 0x11U /*!< RW General Purpose Timer Control Register */ +#define ST25R3911_REG_GPT1 0x12U /*!< RW General Purpose Timer Register 1 */ +#define ST25R3911_REG_GPT2 0x13U /*!< RW General Purpose Timer Register 2 */ + +#define ST25R3911_REG_IRQ_MASK_MAIN 0x14U /*!< RW Mask Main Interrupt Register */ +#define ST25R3911_REG_IRQ_MASK_TIMER_NFC 0x15U /*!< RW Mask Timer and NFC Interrupt Register */ +#define ST25R3911_REG_IRQ_MASK_ERROR_WUP 0x16U /*!< RW Mask Error and Wake-up Interrupt Register */ +#define ST25R3911_REG_IRQ_MAIN 0x17U /*!< R Main Interrupt Register */ +#define ST25R3911_REG_IRQ_TIMER_NFC 0x18U /*!< R Timer and NFC Interrupt Register */ +#define ST25R3911_REG_IRQ_ERROR_WUP 0x19U /*!< R Error and Wake-up Interrupt Register */ +#define ST25R3911_REG_FIFO_RX_STATUS1 0x1AU /*!< R FIFO RX Status Register 1 */ +#define ST25R3911_REG_FIFO_RX_STATUS2 0x1BU /*!< R FIFO RX Status Register 2 */ +#define ST25R3911_REG_COLLISION_STATUS 0x1CU /*!< R Collision Display Register */ + +#define ST25R3911_REG_NUM_TX_BYTES1 0x1DU /*!< RW Number of Transmitted Bytes Register 1 */ +#define ST25R3911_REG_NUM_TX_BYTES2 0x1EU /*!< RW Number of Transmitted Bytes Register 2 */ + +#define ST25R3911_REG_NFCIP1_BIT_RATE 0x1FU /*!< R NFCIP Bit Rate Detection Display Register */ + +#define ST25R3911_REG_AD_RESULT 0x20U /*!< R A/D Converter Output Register */ + +#define ST25R3911_REG_ANT_CAL_CONTROL 0x21U /*!< RW Antenna Calibration Control Register */ +#define ST25R3911_REG_ANT_CAL_TARGET 0x22U /*!< RW Antenna Calibration Target Register */ +#define ST25R3911_REG_ANT_CAL_RESULT 0x23U /*!< R Antenna Calibration Display Register */ + +#define ST25R3911_REG_AM_MOD_DEPTH_CONTROL 0x24U /*!< RW AM Modulation Depth Control Register */ +#define ST25R3911_REG_AM_MOD_DEPTH_RESULT 0x25U /*!< R AM Modulation Depth Display Register */ +#define ST25R3911_REG_RFO_AM_ON_LEVEL 0x26U /*!< RW RFO AM Modulation (On) Level Definition Register */ +#define ST25R3911_REG_RFO_AM_OFF_LEVEL 0x27U /*!< RW RFO Normal (AM Off) Level Definition Register */ + +#define ST25R3911_REG_FIELD_THRESHOLD 0x29U /*!< RW External Field Detector Threshold Register */ + +#define ST25R3911_REG_REGULATOR_CONTROL 0x2AU /*!< RW Regulated Voltage Control Register */ +#define ST25R3911_REG_REGULATOR_RESULT 0x2BU /*!< R Regulator Display Register */ + +#define ST25R3911_REG_RSSI_RESULT 0x2CU /*!< R RSSI Display Register*/ +#define ST25R3911_REG_GAIN_RED_STATE 0x2DU /*!< R Gain Reduction State Register*/ + +#define ST25R3911_REG_CAP_SENSOR_CONTROL 0x2EU /*!< RW Capacitive Sensor Control Register */ +#define ST25R3911_REG_CAP_SENSOR_RESULT 0x2FU /*!< R Capacitive Sensor Display Register */ + +#define ST25R3911_REG_AUX_DISPLAY 0x30U /*!< R Auxiliary Display Register */ + +#define ST25R3911_REG_WUP_TIMER_CONTROL 0x31U /*!< RW Wake-up Timer Control Register */ +#define ST25R3911_REG_AMPLITUDE_MEASURE_CONF 0x32U /*!< RW Amplitude Measurement Configuration Register */ +#define ST25R3911_REG_AMPLITUDE_MEASURE_REF 0x33U /*!< RW Amplitude Measurement Reference Register */ +#define ST25R3911_REG_AMPLITUDE_MEASURE_AA_RESULT 0x34U /*!< R Amplitude Measurement Auto Averaging Display Register */ +#define ST25R3911_REG_AMPLITUDE_MEASURE_RESULT 0x35U /*!< R Amplitude Measurement Display Register */ +#define ST25R3911_REG_PHASE_MEASURE_CONF 0x36U /*!< RW Phase Measurement Configuration Register */ +#define ST25R3911_REG_PHASE_MEASURE_REF 0x37U /*!< RW Phase Measurement Reference Register */ +#define ST25R3911_REG_PHASE_MEASURE_AA_RESULT 0x38U /*!< R Phase Measurement Auto Averaging Display Register */ +#define ST25R3911_REG_PHASE_MEASURE_RESULT 0x39U /*!< R Phase Measurement Display Register */ +#define ST25R3911_REG_CAPACITANCE_MEASURE_CONF 0x3AU /*!< RW Capacitance Measurement Configuration Register */ +#define ST25R3911_REG_CAPACITANCE_MEASURE_REF 0x3BU /*!< RW Capacitance Measurement Reference Register */ +#define ST25R3911_REG_CAPACITANCE_MEASURE_AA_RESULT 0x3CU /*!< R Capacitance Measurement Auto Averaging Display Register */ +#define ST25R3911_REG_CAPACITANCE_MEASURE_RESULT 0x3DU /*!< R Capacitance Measurement Display Register */ + +#define ST25R3911_REG_IC_IDENTITY 0x3FU /*!< R Chip Id: 0 for old silicon, v2 silicon: 0x09 */ + + +/*! Register bit definitions \cond DOXYGEN_SUPRESS */ + +#define ST25R3911_REG_IO_CONF1_lf_clk_off (1U<<0) +#define ST25R3911_REG_IO_CONF1_out_cl0 (1U<<1) +#define ST25R3911_REG_IO_CONF1_out_cl1 (1U<<2) +#define ST25R3911_REG_IO_CONF1_mask_out_cl (3U<<1) +#define ST25R3911_REG_IO_CONF1_osc (1U<<3) +#define ST25R3911_REG_IO_CONF1_fifo_lt (1U<<4) +#define ST25R3911_REG_IO_CONF1_fifo_lt_32bytes (0U<<4) +#define ST25R3911_REG_IO_CONF1_fifo_lt_16bytes (1U<<4) +#define ST25R3911_REG_IO_CONF1_fifo_lr (1U<<5) +#define ST25R3911_REG_IO_CONF1_fifo_lr_64bytes (0U<<5) +#define ST25R3911_REG_IO_CONF1_fifo_lr_80bytes (1U<<5) +#define ST25R3911_REG_IO_CONF1_rfo2 (1U<<6) +#define ST25R3911_REG_IO_CONF1_single (1U<<7) +#define ST25R3911_REG_IO_CONF2_slow_up (1U<<0) +#define ST25R3911_REG_IO_CONF2_io_18 (1U<<2) +#define ST25R3911_REG_IO_CONF2_miso_pd1 (1U<<3) +#define ST25R3911_REG_IO_CONF2_miso_pd2 (1U<<4) +#define ST25R3911_REG_IO_CONF2_vspd_off (1U<<6) +#define ST25R3911_REG_IO_CONF2_sup3V (1U<<7) +#define ST25R3911_REG_OP_CONTROL_wu (1U<<2) +#define ST25R3911_REG_OP_CONTROL_tx_en (1U<<3) +#define ST25R3911_REG_OP_CONTROL_rx_man (1U<<4) +#define ST25R3911_REG_OP_CONTROL_rx_chn (1U<<5) +#define ST25R3911_REG_OP_CONTROL_rx_en (1U<<6) +#define ST25R3911_REG_OP_CONTROL_en (1U<<7) +#define ST25R3911_REG_MODE_nfc_ar (1U<<0) +#define ST25R3911_REG_MODE_nfc_ar_on (1U<<0) +#define ST25R3911_REG_MODE_nfc_ar_off (0U<<0) +#define ST25R3911_REG_MODE_mask_om (0xfU<<3) +#define ST25R3911_REG_MODE_om_nfc (0x0U<<3) +#define ST25R3911_REG_MODE_om_iso14443a (0x1U<<3) +#define ST25R3911_REG_MODE_om_iso14443b (0x2U<<3) +#define ST25R3911_REG_MODE_om_felica (0x3U<<3) +#define ST25R3911_REG_MODE_om_topaz (0x4U<<3) +#define ST25R3911_REG_MODE_om_subcarrier_stream (0xeU<<3) +#define ST25R3911_REG_MODE_om_bpsk_stream (0xfU<<3) +#define ST25R3911_REG_MODE_om_bit_rate_detection (0x0U<<3) +#define ST25R3911_REG_MODE_om_nfcip1_normal_mode (0x1U<<3) +#define ST25R3911_REG_MODE_targ (1U<<7) +#define ST25R3911_REG_MODE_targ_targ (1U<<7) +#define ST25R3911_REG_MODE_targ_init (0U<<7) +#define ST25R3911_REG_BIT_RATE_mask_txrate (0xfU<<4) +#define ST25R3911_REG_BIT_RATE_shift_txrate (4U) +#define ST25R3911_REG_BIT_RATE_txrate_106 (0x0U<<4) +#define ST25R3911_REG_BIT_RATE_txrate_212 (0x1U<<4) +#define ST25R3911_REG_BIT_RATE_txrate_424 (0x2U<<4) +#define ST25R3911_REG_BIT_RATE_txrate_848 (0x3U<<4) +#define ST25R3911_REG_BIT_RATE_txrate_1695 (0x4U<<4) +#define ST25R3911_REG_BIT_RATE_txrate_3390 (0x5U<<4) +#define ST25R3911_REG_BIT_RATE_txrate_6780 (0x6U<<4) +#define ST25R3911_REG_BIT_RATE_mask_rxrate (0xfU<<0) +#define ST25R3911_REG_BIT_RATE_shift_rxrate (0U) +#define ST25R3911_REG_BIT_RATE_rxrate_106 (0x0U<<0) +#define ST25R3911_REG_BIT_RATE_rxrate_212 (0x1U<<0) +#define ST25R3911_REG_BIT_RATE_rxrate_424 (0x2U<<0) +#define ST25R3911_REG_BIT_RATE_rxrate_848 (0x3U<<0) +#define ST25R3911_REG_BIT_RATE_rxrate_1695 (0x4U<<0) +#define ST25R3911_REG_BIT_RATE_rxrate_3390 (0x5U<<0) +#define ST25R3911_REG_BIT_RATE_rxrate_6780 (0x6U<<0) +#define ST25R3911_REG_ISO14443A_NFC_antcl (1U<<0) +#define ST25R3911_REG_ISO14443A_NFC_mask_p_len (0xfU<<1) +#define ST25R3911_REG_ISO14443A_NFC_shift_p_len (1U) +#define ST25R3911_REG_ISO14443A_NFC_nfc_f0 (1U<<5) +#define ST25R3911_REG_ISO14443A_NFC_nfc_f0_off (0U<<5) +#define ST25R3911_REG_ISO14443A_NFC_no_rx_par (1U<<6) +#define ST25R3911_REG_ISO14443A_NFC_no_rx_par_off (0U<<6) +#define ST25R3911_REG_ISO14443A_NFC_no_tx_par (1U<<7) +#define ST25R3911_REG_ISO14443A_NFC_no_tx_par_off (0U<<7) +#define ST25R3911_REG_ISO14443B_1_mask_eof (1U<<2) +#define ST25R3911_REG_ISO14443B_1_eof_10etu (0U<<2) +#define ST25R3911_REG_ISO14443B_1_eof_11etu (1U<<2) +#define ST25R3911_REG_ISO14443B_1_mask_sof (3U<<3) +#define ST25R3911_REG_ISO14443B_1_mask_sof_0 (1U<<4) +#define ST25R3911_REG_ISO14443B_1_sof_0_10etu (0U<<4) +#define ST25R3911_REG_ISO14443B_1_sof_0_11etu (1U<<4) +#define ST25R3911_REG_ISO14443B_1_mask_sof_1 (1U<<3) +#define ST25R3911_REG_ISO14443B_1_sof_1_2etu (0U<<3) +#define ST25R3911_REG_ISO14443B_1_sof_2_3etu (1U<<3) +#define ST25R3911_REG_ISO14443B_1_mask_egt (7U<<5) +#define ST25R3911_REG_ISO14443B_1_shift_egt (5U) +#define ST25R3911_REG_ISO14443B_2_eof_12 (1U<<3) +#define ST25R3911_REG_ISO14443B_2_eof_12_10to11etu (0U<<3) +#define ST25R3911_REG_ISO14443B_2_eof_12_10to12etu (1U<<3) +#define ST25R3911_REG_ISO14443B_2_no_eof (1U<<4) +#define ST25R3911_REG_ISO14443B_2_no_sof (1U<<5) +#define ST25R3911_REG_ISO14443B_2_mask_tr1 (3U<<6) +#define ST25R3911_REG_ISO14443B_2_shift_tr1 (6U) +#define ST25R3911_REG_ISO14443B_2_tr1_0 (1U<<6) +#define ST25R3911_REG_ISO14443B_2_tr1_1 (1U<<7) +#define ST25R3911_REG_ISO14443B_2_tr1_80fs80fs (0U<<6) +#define ST25R3911_REG_ISO14443B_2_tr1_64fs32fs (1U<<6) +#define ST25R3911_REG_STREAM_MODE_mask_stx (7U<<0) +#define ST25R3911_REG_STREAM_MODE_shift_stx (0U) +#define ST25R3911_REG_STREAM_MODE_stx_106 (0U<<0) +#define ST25R3911_REG_STREAM_MODE_stx_212 (1U<<0) +#define ST25R3911_REG_STREAM_MODE_stx_424 (2U<<0) +#define ST25R3911_REG_STREAM_MODE_stx_848 (3U<<0) +#define ST25R3911_REG_STREAM_MODE_stx_1695 (4U<<0) +#define ST25R3911_REG_STREAM_MODE_stx_3390 (5U<<0) +#define ST25R3911_REG_STREAM_MODE_stx_6780 (6U<<0) +#define ST25R3911_REG_STREAM_MODE_mask_scp (3U<<3) +#define ST25R3911_REG_STREAM_MODE_shift_scp (3U) +#define ST25R3911_REG_STREAM_MODE_scp_1pulse (0U<<3) +#define ST25R3911_REG_STREAM_MODE_scp_2pulses (1U<<3) +#define ST25R3911_REG_STREAM_MODE_scp_4pulses (2U<<3) +#define ST25R3911_REG_STREAM_MODE_scp_8pulses (3U<<3) +#define ST25R3911_REG_STREAM_MODE_mask_scf (3U<<5) +#define ST25R3911_REG_STREAM_MODE_shift_scf (5U) +#define ST25R3911_REG_STREAM_MODE_scf_bpsk848 (0U<<5) +#define ST25R3911_REG_STREAM_MODE_scf_bpsk1695 (1U<<5) +#define ST25R3911_REG_STREAM_MODE_scf_bpsk3390 (2U<<5) +#define ST25R3911_REG_STREAM_MODE_scf_bpsk106 (3U<<5) +#define ST25R3911_REG_STREAM_MODE_scf_sc212 (0U<<5) +#define ST25R3911_REG_STREAM_MODE_scf_sc424 (1U<<5) +#define ST25R3911_REG_STREAM_MODE_scf_sc848 (2U<<5) +#define ST25R3911_REG_STREAM_MODE_scf_sc1695 (3U<<5) +#define ST25R3911_REG_AUX_mask_nfc_n (3U<<0) +#define ST25R3911_REG_AUX_nfc_n0 (1U<<0) +#define ST25R3911_REG_AUX_nfc_n1 (1U<<1) +#define ST25R3911_REG_AUX_rx_tol (1U<<2) +#define ST25R3911_REG_AUX_ook_hr (1U<<3) +#define ST25R3911_REG_AUX_en_fd (1U<<4) +#define ST25R3911_REG_AUX_tr_am (1U<<5) +#define ST25R3911_REG_AUX_crc_2_fifo (1U<<6) +#define ST25R3911_REG_AUX_no_crc_rx (1U<<7) +#define ST25R3911_REG_RX_CONF1_z12k (1U<<0) +#define ST25R3911_REG_RX_CONF1_h80 (1U<<1) +#define ST25R3911_REG_RX_CONF1_h200 (1U<<2) +#define ST25R3911_REG_RX_CONF1_mask_lp (7U<<3) +#define ST25R3911_REG_RX_CONF1_lp_1200khz (0U<<3) +#define ST25R3911_REG_RX_CONF1_lp_600khz (1U<<3) +#define ST25R3911_REG_RX_CONF1_lp_300khz (2U<<3) +#define ST25R3911_REG_RX_CONF1_lp_2000khz (4U<<3) +#define ST25R3911_REG_RX_CONF1_lp_7000khz (5U<<3) +#define ST25R3911_REG_RX_CONF1_amd_sel (1U<<6) +#define ST25R3911_REG_RX_CONF1_ch_sel (1U<<7) +#define ST25R3911_REG_RX_CONF2_sqm_dyn (1U<<1) +#define ST25R3911_REG_RX_CONF2_agc_alg (1U<<2) +#define ST25R3911_REG_RX_CONF2_agc_m (1U<<3) +#define ST25R3911_REG_RX_CONF2_agc_en (1U<<4) +#define ST25R3911_REG_RX_CONF2_lf_en (1U<<5) +#define ST25R3911_REG_RX_CONF2_lf_op (1U<<6) +#define ST25R3911_REG_RX_CONF2_rx_lp (1U<<7) +#define ST25R3911_REG_RX_CONF3_rg_nfc (1U<<0) +#define ST25R3911_REG_RX_CONF3_lim (1U<<1) +#define ST25R3911_REG_RX_CONF3_shift_rg1_pm (2U) +#define ST25R3911_REG_RX_CONF3_mask_rg1_pm (0x7U<<2) +#define ST25R3911_REG_RX_CONF3_rg1_pm0 (1U<<2) +#define ST25R3911_REG_RX_CONF3_rg1_pm1 (1U<<3) +#define ST25R3911_REG_RX_CONF3_rg1_pm2 (1U<<4) +#define ST25R3911_REG_RX_CONF3_shift_rg1_am (5U) +#define ST25R3911_REG_RX_CONF3_mask_rg1_am (0x7U<<5) +#define ST25R3911_REG_RX_CONF3_rg1_am0 (1U<<5) +#define ST25R3911_REG_RX_CONF3_rg1_am1 (1U<<6) +#define ST25R3911_REG_RX_CONF3_rg1_am2 (1U<<7) +#define ST25R3911_REG_RX_CONF4_shift_rg2_pm (0U) +#define ST25R3911_REG_RX_CONF4_mask_rg2_pm (0xfU<<0) +#define ST25R3911_REG_RX_CONF4_rg2_pm0 (1U<<0) +#define ST25R3911_REG_RX_CONF4_rg2_pm1 (1U<<1) +#define ST25R3911_REG_RX_CONF4_rg2_pm2 (1U<<2) +#define ST25R3911_REG_RX_CONF4_rg2_pm3 (1U<<3) +#define ST25R3911_REG_RX_CONF4_shift_rg2_am (4U) +#define ST25R3911_REG_RX_CONF4_mask_rg2_am (0xfU<<4) +#define ST25R3911_REG_RX_CONF4_rg2_am0 (1U<<4) +#define ST25R3911_REG_RX_CONF4_rg2_am1 (1U<<5) +#define ST25R3911_REG_RX_CONF4_rg2_am2 (1U<<6) +#define ST25R3911_REG_RX_CONF4_rg2_am3 (1U<<7) +#define ST25R3911_REG_GPT_CONTROL_nrt_step (1U<<0) +#define ST25R3911_REG_GPT_CONTROL_nrt_emv (1U<<1) +#define ST25R3911_REG_GPT_CONTROL_gptc0 (1U<<5) +#define ST25R3911_REG_GPT_CONTROL_gptc1 (1U<<6) +#define ST25R3911_REG_GPT_CONTROL_gptc2 (1U<<7) +#define ST25R3911_REG_GPT_CONTROL_gptc_mask (0x7U<<5) +#define ST25R3911_REG_GPT_CONTROL_gptc_no_trigger (0x0U<<5) +#define ST25R3911_REG_GPT_CONTROL_gptc_erx (0x1U<<5) +#define ST25R3911_REG_GPT_CONTROL_gptc_srx (0x2U<<5) +#define ST25R3911_REG_GPT_CONTROL_gptc_etx_nfc (0x3U<<5) +#define ST25R3911_REG_FIFO_RX_STATUS2_np_lb (1U<<0) +#define ST25R3911_REG_FIFO_RX_STATUS2_mask_fifo_lb (7U<<1) +#define ST25R3911_REG_FIFO_RX_STATUS2_shift_fifo_lb (1U) +#define ST25R3911_REG_FIFO_RX_STATUS2_fifo_lb0 (1U<<1) +#define ST25R3911_REG_FIFO_RX_STATUS2_fifo_lb1 (1U<<2) +#define ST25R3911_REG_FIFO_RX_STATUS2_fifo_lb2 (1U<<3) +#define ST25R3911_REG_FIFO_RX_STATUS2_fifo_ncp (1U<<4) +#define ST25R3911_REG_FIFO_RX_STATUS2_fifo_ovr (1U<<5) +#define ST25R3911_REG_FIFO_RX_STATUS2_fifo_unf (1U<<6) +#define ST25R3911_REG_COLLISION_STATUS_c_pb (1U<<0) +#define ST25R3911_REG_COLLISION_STATUS_mask_c_bit (3U<<1) +#define ST25R3911_REG_COLLISION_STATUS_shift_c_bit (1U) +#define ST25R3911_REG_COLLISION_STATUS_mask_c_byte (0xfU<<4) +#define ST25R3911_REG_COLLISION_STATUS_shift_c_byte (4U) +#define ST25R3911_ST25R3911_REG_NFCIP1_BIT_RATE_nfc_rate0 (1U<<4) +#define ST25R3911_ST25R3911_REG_NFCIP1_BIT_RATE_nfc_rate1 (1U<<5) +#define ST25R3911_ST25R3911_REG_NFCIP1_BIT_RATE_nfc_rate2 (1U<<6) +#define ST25R3911_ST25R3911_REG_NFCIP1_BIT_RATE_nfc_rate3 (1U<<7) +#define ST25R3911_REG_NFCIP1_BIT_RATE_nfc_rate_mask (0xfU<<4) +#define ST25R3911_REG_NFCIP1_BIT_RATE_nfc_rate_shift (4U) +#define ST25R3911_REG_ANT_CAL_CONTROL_mask_tre (0xfU<<3) +#define ST25R3911_REG_ANT_CAL_CONTROL_shift_tre (3U) +#define ST25R3911_REG_ANT_CAL_CONTROL_tre_0 (1U<<3) +#define ST25R3911_REG_ANT_CAL_CONTROL_tre_1 (1U<<4) +#define ST25R3911_REG_ANT_CAL_CONTROL_tre_2 (1U<<5) +#define ST25R3911_REG_ANT_CAL_CONTROL_tre_3 (1U<<6) +#define ST25R3911_REG_ANT_CAL_CONTROL_trim_s (1U<<7) +#define ST25R3911_REG_ANT_CAL_RESULT_tri_err (1U<<3) +#define ST25R3911_REG_ANT_CAL_RESULT_tri_0 (1U<<4) +#define ST25R3911_REG_ANT_CAL_RESULT_tri_1 (1U<<5) +#define ST25R3911_REG_ANT_CAL_RESULT_tri_2 (1U<<6) +#define ST25R3911_REG_ANT_CAL_RESULT_tri_3 (1U<<7) +#define ST25R3911_REG_AM_MOD_DEPTH_CONTROL_mask_mod (0x3fU<<1) +#define ST25R3911_REG_AM_MOD_DEPTH_CONTROL_shift_mod (1U) +#define ST25R3911_REG_AM_MOD_DEPTH_CONTROL_mod_8percent (0xbU<<1) +#define ST25R3911_REG_AM_MOD_DEPTH_CONTROL_mod_10percent (0xeU<<1) +#define ST25R3911_REG_AM_MOD_DEPTH_CONTROL_mod_14percent (0x14U<<1) +#define ST25R3911_REG_AM_MOD_DEPTH_CONTROL_mod_20percent (0x20U<<1) +#define ST25R3911_REG_AM_MOD_DEPTH_CONTROL_mod_25percent (0x2aU<<1) +#define ST25R3911_REG_AM_MOD_DEPTH_CONTROL_mod_30percent (0x37U<<1) +#define ST25R3911_REG_AM_MOD_DEPTH_CONTROL_mod_33percent (0x3fU<<1) +#define ST25R3911_REG_AM_MOD_DEPTH_CONTROL_am_s (1U<<7) +#define ST25R3911_REG_RFO_AM_MOD_LEVEL_dram0 (1U<<0) +#define ST25R3911_REG_RFO_AM_MOD_LEVEL_dram1 (1U<<1) +#define ST25R3911_REG_RFO_AM_MOD_LEVEL_dram2 (1U<<2) +#define ST25R3911_REG_RFO_AM_MOD_LEVEL_dram3 (1U<<3) +#define ST25R3911_REG_RFO_AM_MOD_LEVEL_dram4 (1U<<4) +#define ST25R3911_REG_RFO_AM_MOD_LEVEL_dram5 (1U<<5) +#define ST25R3911_REG_RFO_AM_MOD_LEVEL_dram6 (1U<<6) +#define ST25R3911_REG_RFO_AM_MOD_LEVEL_dram7 (1U<<7) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_t0 (1U<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_t1 (1U<<1) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_t2 (1U<<2) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_t3 (1U<<3) +#define ST25R3911_REG_FIELD_THRESHOLD_trg_l0 (1U<<4) +#define ST25R3911_REG_FIELD_THRESHOLD_trg_l1 (1U<<5) +#define ST25R3911_REG_FIELD_THRESHOLD_trg_l2 (1U<<6) +#define ST25R3911_REG_FIELD_THRESHOLD_mask_trg (0x07U<<4) +#define ST25R3911_REG_FIELD_THRESHOLD_trg_75mV (0x00U<<4) +#define ST25R3911_REG_FIELD_THRESHOLD_trg_105mV (0x01U<<4) +#define ST25R3911_REG_FIELD_THRESHOLD_trg_150mV (0x02U<<4) +#define ST25R3911_REG_FIELD_THRESHOLD_trg_205mV (0x03U<<4) +#define ST25R3911_REG_FIELD_THRESHOLD_trg_290mV (0x04U<<4) +#define ST25R3911_REG_FIELD_THRESHOLD_trg_400mV (0x05U<<4) +#define ST25R3911_REG_FIELD_THRESHOLD_trg_560mV (0x06U<<4) +#define ST25R3911_REG_FIELD_THRESHOLD_trg_800mV (0x07U<<4) +#define ST25R3911_REG_FIELD_THRESHOLD_mask_rfe (0x0FU<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_75mV (0x00U<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_105mV (0x01U<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_150mV (0x02U<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_205mV (0x03U<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_290mV (0x04U<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_400mV (0x05U<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_560mV (0x06U<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_800mV (0x07U<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_25mV (0x08U<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_33mV (0x09U<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_47mV (0x0AU<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_64mV (0x0BU<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_90mV (0x0CU<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_125mV (0x0DU<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_175mV (0x0EU<<0) +#define ST25R3911_REG_FIELD_THRESHOLD_rfe_250mV (0x0FU<<0) +#define ST25R3911_REG_REGULATOR_CONTROL_shift_mpsv (1U) +#define ST25R3911_REG_REGULATOR_CONTROL_mask_mpsv (3U<<1) +#define ST25R3911_REG_REGULATOR_CONTROL_mpsv_vdd (0U<<1) +#define ST25R3911_REG_REGULATOR_CONTROL_mpsv_vsp_a (1U<<1) +#define ST25R3911_REG_REGULATOR_CONTROL_mpsv_vsp_d (2U<<1) +#define ST25R3911_REG_REGULATOR_CONTROL_mpsv_vsp_rf (3U<<1) +#define ST25R3911_REG_REGULATOR_CONTROL_mask_rege (0xfU<<3) +#define ST25R3911_REG_REGULATOR_CONTROL_shift_rege (3U) +#define ST25R3911_REG_REGULATOR_CONTROL_reg_s (1U<<7) +#define ST25R3911_REG_REGULATOR_RESULT_mrt_on (1U<<0) +#define ST25R3911_REG_REGULATOR_RESULT_nrt_on (1U<<1) +#define ST25R3911_REG_REGULATOR_RESULT_gpt_on (1U<<2) +#define ST25R3911_REG_REGULATOR_RESULT_mask_reg (0xfU<<4) +#define ST25R3911_REG_REGULATOR_RESULT_shift_reg (4U) +#define ST25R3911_REG_REGULATOR_RESULT_reg_0 (1U<<4) +#define ST25R3911_REG_REGULATOR_RESULT_reg_1 (1U<<5) +#define ST25R3911_REG_REGULATOR_RESULT_reg_2 (1U<<6) +#define ST25R3911_REG_REGULATOR_RESULT_reg_3 (1U<<7) +#define ST25R3911_REG_RSSI_RESULT_mask_rssi_pm (0xfU) +#define ST25R3911_REG_RSSI_RESULT_shift_rssi_pm (0U) +#define ST25R3911_REG_RSSI_RESULT_rssi_pm0 (1U<<0) +#define ST25R3911_REG_RSSI_RESULT_rssi_pm1 (1U<<1) +#define ST25R3911_REG_RSSI_RESULT_rssi_pm2 (1U<<2) +#define ST25R3911_REG_RSSI_RESULT_rssi_pm3 (1U<<3) +#define ST25R3911_REG_RSSI_RESULT_mask_rssi_am (0xfU<<4) +#define ST25R3911_REG_RSSI_RESULT_shift_rssi_am (4U) +#define ST25R3911_REG_RSSI_RESULT_rssi_am_0 (1U<<4) +#define ST25R3911_REG_RSSI_RESULT_rssi_am_1 (1U<<5) +#define ST25R3911_REG_RSSI_RESULT_rssi_am_2 (1U<<6) +#define ST25R3911_REG_RSSI_RESULT_rssi_am_3 (1U<<7) +#define ST25R3911_REG_GAIN_RED_STATE_mask_gs_pm (0xfU) +#define ST25R3911_REG_GAIN_RED_STATE_shift_gs_pm (0U) +#define ST25R3911_REG_GAIN_RED_STATE_gs_pm_0 (1U<<0) +#define ST25R3911_REG_GAIN_RED_STATE_gs_pm_1 (1U<<1) +#define ST25R3911_REG_GAIN_RED_STATE_gs_pm_2 (1U<<2) +#define ST25R3911_REG_GAIN_RED_STATE_gs_pm_3 (1U<<3) +#define ST25R3911_REG_GAIN_RED_STATE_mask_gs_am (0xfU<<4) +#define ST25R3911_REG_GAIN_RED_STATE_shift_gs_am (4U) +#define ST25R3911_REG_GAIN_RED_STATE_gs_am_0 (1U<<4) +#define ST25R3911_REG_GAIN_RED_STATE_gs_am_1 (1U<<5) +#define ST25R3911_REG_GAIN_RED_STATE_gs_am_2 (1U<<6) +#define ST25R3911_REG_GAIN_RED_STATE_gs_am_3 (1U<<7) +#define ST25R3911_REG_CAP_SENSOR_CONTROL_cs_g0 (1U<<0) +#define ST25R3911_REG_CAP_SENSOR_CONTROL_cs_g1 (1U<<1) +#define ST25R3911_REG_CAP_SENSOR_CONTROL_cs_g2 (1U<<2) +#define ST25R3911_REG_CAP_SENSOR_CONTROL_mask_cs_g (7U<<0) +#define ST25R3911_REG_CAP_SENSOR_CONTROL_cs_mcal0 (1U<<3) +#define ST25R3911_REG_CAP_SENSOR_CONTROL_cs_mcal1 (1U<<4) +#define ST25R3911_REG_CAP_SENSOR_CONTROL_cs_mcal2 (1U<<5) +#define ST25R3911_REG_CAP_SENSOR_CONTROL_cs_mcal3 (1U<<6) +#define ST25R3911_REG_CAP_SENSOR_CONTROL_cs_mcal4 (1U<<7) +#define ST25R3916_REG_CAP_SENSOR_CONTROL_mask_cs_mcal (0x1fU<<3) +#define ST25R3911_REG_CAP_SENSOR_CONTROL_shift_cs_mcal (3U) +#define ST25R3911_REG_CAP_SENSOR_RESULT_cs_cal_err (1U<<1) +#define ST25R3911_REG_CAP_SENSOR_RESULT_cs_cal_end (1U<<2) +#define ST25R3911_REG_CAP_SENSOR_RESULT_cs_cal0 (1U<<3) +#define ST25R3911_REG_CAP_SENSOR_RESULT_cs_cal1 (1U<<4) +#define ST25R3911_REG_CAP_SENSOR_RESULT_cs_cal2 (1U<<5) +#define ST25R3911_REG_CAP_SENSOR_RESULT_cs_cal3 (1U<<6) +#define ST25R3911_REG_CAP_SENSOR_RESULT_cs_cal4 (1U<<7) +#define ST25R3911_REG_AUX_DISPLAY_mrt_on (1U<<0) +#define ST25R3911_REG_AUX_DISPLAY_nrt_on (1U<<1) +#define ST25R3911_REG_AUX_DISPLAY_gpt_on (1U<<2) +#define ST25R3911_REG_AUX_DISPLAY_rx_on (1U<<3) +#define ST25R3911_REG_AUX_DISPLAY_osc_ok (1U<<4) +#define ST25R3911_REG_AUX_DISPLAY_tx_on (1U<<5) +#define ST25R3911_REG_AUX_DISPLAY_efd_o (1U<<6) +#define ST25R3911_REG_AUX_DISPLAY_a_cha (1U<<7) +#define ST25R3911_REG_WUP_TIMER_CONTROL_wcap (1U<<0) +#define ST25R3911_REG_WUP_TIMER_CONTROL_wph (1U<<1) +#define ST25R3911_REG_WUP_TIMER_CONTROL_wam (1U<<2) +#define ST25R3911_REG_WUP_TIMER_CONTROL_wto (1U<<3) +#define ST25R3911_REG_WUP_TIMER_CONTROL_wut0 (1U<<4) +#define ST25R3911_REG_WUP_TIMER_CONTROL_wut1 (1U<<5) +#define ST25R3911_REG_WUP_TIMER_CONTROL_wut2 (1U<<6) +#define ST25R3911_REG_WUP_TIMER_CONTROL_shift_wut (4U) +#define ST25R3911_REG_WUP_TIMER_CONTROL_wur (1U<<7) +#define ST25R3911_REG_AMPLITUDE_MEASURE_CONF_am_ae (1U<<0) +#define ST25R3911_REG_AMPLITUDE_MEASURE_CONF_am_aew0 (1U<<1) +#define ST25R3911_REG_AMPLITUDE_MEASURE_CONF_am_aew1 (1U<<2) +#define ST25R3911_REG_AMPLITUDE_MEASURE_CONF_shift_am_aew (1U) +#define ST25R3911_REG_AMPLITUDE_MEASURE_CONF_mask_am_aew (3U<<1) +#define ST25R3911_REG_AMPLITUDE_MEASURE_CONF_am_aam (1U<<3) +#define ST25R3911_REG_AMPLITUDE_MEASURE_CONF_am_d0 (1U<<4) +#define ST25R3911_REG_AMPLITUDE_MEASURE_CONF_am_d1 (1U<<5) +#define ST25R3911_REG_AMPLITUDE_MEASURE_CONF_am_d2 (1U<<6) +#define ST25R3911_REG_AMPLITUDE_MEASURE_CONF_am_d3 (1U<<7) +#define ST25R3911_REG_AMPLITUDE_MEASURE_CONF_shift_am_d (4U) +#define ST25R3911_REG_PHASE_MEASURE_CONF_pm_ae (1U<<0) +#define ST25R3911_REG_PHASE_MEASURE_CONF_pm_aew0 (1U<<1) +#define ST25R3911_REG_PHASE_MEASURE_CONF_pm_aew1 (1U<<2) +#define ST25R3911_REG_PHASE_MEASURE_CONF_shift_pm_aew (1U) +#define ST25R3911_REG_PHASE_MEASURE_CONF_mask_pm_aew (3U<<1) +#define ST25R3911_REG_PHASE_MEASURE_CONF_pm_aam (1U<<3) +#define ST25R3911_REG_PHASE_MEASURE_CONF_pm_d0 (1U<<4) +#define ST25R3911_REG_PHASE_MEASURE_CONF_pm_d1 (1U<<5) +#define ST25R3911_REG_PHASE_MEASURE_CONF_pm_d2 (1U<<6) +#define ST25R3911_REG_PHASE_MEASURE_CONF_pm_d3 (1U<<7) +#define ST25R3911_REG_PHASE_MEASURE_CONF_shift_pm_d (4U) +#define ST25R3911_REG_CAPACITANCE_MEASURE_CONF_cm_ae (1U<<0) +#define ST25R3911_REG_CAPACITANCE_MEASURE_CONF_cm_aew0 (1U<<1) +#define ST25R3911_REG_CAPACITANCE_MEASURE_CONF_cm_aew1 (1U<<2) +#define ST25R3911_REG_CAPACITANCE_MEASURE_CONF_shift_cm_aew (1U) +#define ST25R3911_REG_CAPACITANCE_MEASURE_CONF_mask_cm_aew (3U<<1) +#define ST25R3911_REG_CAPACITANCE_MEASURE_CONF_cm_aam (1U<<3) +#define ST25R3911_REG_CAPACITANCE_MEASURE_CONF_cm_d0 (1U<<4) +#define ST25R3911_REG_CAPACITANCE_MEASURE_CONF_cm_d1 (1U<<5) +#define ST25R3911_REG_CAPACITANCE_MEASURE_CONF_cm_d2 (1U<<6) +#define ST25R3911_REG_CAPACITANCE_MEASURE_CONF_cm_d3 (1U<<7) +#define ST25R3911_REG_CAPACITANCE_MEASURE_CONF_shift_cm_d (4U) +#define ST25R3911_REG_IC_IDENTITY_v2 (0x09U) +#define ST25R3911_REG_IC_IDENTITY_ic_type (1U<<3) +#define ST25R3911_REG_IC_IDENTITY_mask_ic_type (0x1FU<<3) +#define ST25R3911_REG_IC_IDENTITY_shift_ic_type (3U) +#define ST25R3911_REG_IC_IDENTITY_mask_ic_rev (7U) + +/*! \endcond DOXYGEN_SUPRESS */ + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ +/*! + ***************************************************************************** + * \brief Returns the content of a register within the ST25R3911 + * + * This function is used to read out the content of ST25R3911 registers. + * + * \param[in] reg: Address of register to read. + * \param[out] value: Returned value. + * + ***************************************************************************** + */ +extern void st25r3911ReadRegister(uint8_t reg, uint8_t* value); + +/*! + ***************************************************************************** + * \brief Writes a given value to a register within the ST25R3911 + * + * This function is used to write \a value to address \a reg within the ST25R3911. + * + * \param[in] reg: Address of the register to write. + * \param[in] value: Value to be written. + * + ***************************************************************************** + */ +extern void st25r3911WriteRegister(uint8_t reg, uint8_t value); + +/*! + ***************************************************************************** + * \brief Cleart bits on Register + * + * This function clears the given bitmask on the register + * + * \warning This method does not guarantee consistency of register content + * when called from multiple contexts (task, ISR, thread) + * + * \param[in] reg: Address of the register clear + * \param[in] clr_mask: Bitmask of bit to be cleared + * + ***************************************************************************** + */ +extern void st25r3911ClrRegisterBits( uint8_t reg, uint8_t clr_mask ); + + +/*! + ***************************************************************************** + * \brief Set bits on Register + * + * This function sets the given bitmask on the register + * + * \warning This method does not guarantee consistency of register content + * when called from multiple contexts (task, ISR, thread) + * + * \param[in] reg: Address of the register clear + * \param[in] set_mask: Bitmask of bit to be cleared + * + ***************************************************************************** + */ +extern void st25r3911SetRegisterBits( uint8_t reg, uint8_t set_mask ); + + +/*! + ***************************************************************************** + * \brief Changes the given bits on a ST25R3911 register + * + * This function is used if only a particular bits should be changed within + * an ST25R3911 register. + * + * \warning This method does not guarantee consistency of register content + * when called from multiple contexts (task, ISR, thread) + * + * \param[in] reg: Address of the register to write. + * \param[in] valueMask: bitmask of bits to be changed + * \param[in] value: the bits to be written on the enabled valueMask bits + * + ***************************************************************************** + */ +extern void st25r3911ChangeRegisterBits(uint8_t reg, uint8_t valueMask, uint8_t value); + +/*! + ***************************************************************************** + * \brief Read a test register within the ST25R3911 + * + * This function is used to read the content of test address \a reg within the ST25R3911. + * + * \param[in] reg: Address of the register to read. + * \param[out] value: Returned read. + * + ***************************************************************************** + */ +extern void st25r3911ReadTestRegister(uint8_t reg, uint8_t* value); + +/*! + ***************************************************************************** + * \brief Writes a given value to a test register within the ST25R3911 + * + * This function is used to write \a value to test address \a reg within the ST25R3911. + * + * \param[in] reg: Address of the register to write. + * \param[in] value: Value to be written. + * + ***************************************************************************** + */ +extern void st25r3911WriteTestRegister(uint8_t reg, uint8_t value); + +/*! + ***************************************************************************** + * \brief Modifies a value within a ST25R3911 register + * + * This function is used if only a particular bits should be changed within + * an ST25R3911 register. + * + * \warning This method does not guarantee consistency of register content + * when called from multiple contexts (task, ISR, thread) + * + * \param[in] reg: Address of the register to write. + * \param[in] clr_mask: bitmask of bits to be cleared to 0. + * \param[in] set_mask: bitmask of bits to be set to 1. + * + ***************************************************************************** + */ +extern void st25r3911ModifyRegister(uint8_t reg, uint8_t clr_mask, uint8_t set_mask); + + +/*! + ***************************************************************************** + * \brief Changes the given bits on a ST25R3911 Test register + * + * This function is used if only a particular bits should be changed within + * an ST25R3916 register. + * + * \param[in] reg: Address of the Test register to change. + * \param[in] valueMask: bitmask of bits to be changed + * \param[in] value: the bits to be written on the enabled valueMask bits + * + * \warning This method does not guarantee consistency of register content + * when called from multiple contexts (task, ISR, thread) + + * \return ERR_NONE : Operation successful + * \return ERR_PARAM : Invalid parameter + * \return ERR_SEND : Transmission error or acknowledge not received + ***************************************************************************** + */ +extern void st25r3911ChangeTestRegisterBits( uint8_t reg, uint8_t valueMask, uint8_t value ); + +/*! + ***************************************************************************** + * \brief Writes multiple values to ST25R3911 registers + * + * This function is used to write multiple values to the ST25R3911 using the + * auto-increment feature. That is, after each write the address pointer + * inside the ST25R3911 gets incremented automatically. + * + * \param[in] reg: Address of the frist register to write. + * \param[in] values: pointer to a buffer containing the values to be written. + * \param[in] length: Number of values to be written. + * + ***************************************************************************** + */ +extern void st25r3911WriteMultipleRegisters(uint8_t reg, const uint8_t* values, uint8_t length); + +/*! + ***************************************************************************** + * \brief Reads from multiple ST25R3911 registers + * + * This function is used to read from multiple registers using the + * auto-increment feature. That is, after each read the address pointer + * inside the ST25R3911 gets incremented automatically. + * + * \param[in] reg: Address of the frist register to read from. + * \param[in] values: pointer to a buffer where the result shall be written to. + * \param[in] length: Number of registers to be read out. + * + ***************************************************************************** + */ +extern void st25r3911ReadMultipleRegisters(uint8_t reg, uint8_t* values, uint8_t length); + +/*! + ***************************************************************************** + * \brief Writes values to ST25R3911 FIFO + * + * This function needs to be called in order to write to the ST25R3911 FIFO. + * + * \param[in] values: pointer to a buffer containing the values to be written + * to the FIFO. + * \param[in] length: Number of values to be written. + * + ***************************************************************************** + */ +extern void st25r3911WriteFifo(const uint8_t* values, uint8_t length); + +/*! + ***************************************************************************** + * \brief Read values from ST25R3911 FIFO + * + * This function needs to be called in order to read from ST25R3911 FIFO. + * + * \param[out] buf: pointer to a buffer where the FIFO content shall be + * written to. + * \param[in] length: Number of bytes to read. (= size of \a buf) + * \note: This function doesn't check whether \a length is really the + * number of available bytes in FIFO + * + ***************************************************************************** + */ +extern void st25r3911ReadFifo(uint8_t* buf, uint8_t length); + +/*! + ***************************************************************************** + * \brief Execute a direct command + * + * This function is used to start so-called direct command. These commands + * are implemented inside the chip and each command has unique code (see + * datasheet). + * + * \param[in] cmd : code of the direct command to be executed. + * + ***************************************************************************** + */ +extern void st25r3911ExecuteCommand(uint8_t cmd); + +/*! + ***************************************************************************** + * \brief Execute several direct commands + * + * This function is used to start so-called direct command. These commands + * are implemented inside the chip and each command has unique code (see + * datasheet). + * + * \param[in] cmds : codes of the direct command to be executed. + * \param[in] length : number of commands to be executed + * + ***************************************************************************** + */ +extern void st25r3911ExecuteCommands(const uint8_t *cmds, uint8_t length); + +/*! + ***************************************************************************** + * \brief Check if register ID is valid + * + * Checks if the given register ID a valid ST25R3911 register + * + * \param[in] reg: Address of register to check + * + * \return true if is a valid register ID + * \return false otherwise + * + ***************************************************************************** + */ +extern bool st25r3911IsRegValid( uint8_t reg ); + +#endif /* ST25R3911_COM_H */ + +/** + * @} + * + * @} + * + * @} + * + * @} + */ + diff --git a/Software/Drivers/BSP/Components/ST25R3911/st25r3911_interrupt.c b/Software/Drivers/BSP/Components/ST25R3911/st25r3911_interrupt.c new file mode 100644 index 0000000..abb3082 --- /dev/null +++ b/Software/Drivers/BSP/Components/ST25R3911/st25r3911_interrupt.c @@ -0,0 +1,249 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: ST25R3911 firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author Ulrich Herrmann + * + * \brief ST25R3911 Interrupt handling + * + */ + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "st25r3911_interrupt.h" +#include "st25r3911_com.h" +#include "st25r3911.h" +#include "st_errno.h" +#include "utils.h" + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ + +/*! Length of the interrupt registers */ +#define ST25R3911_INT_REGS_LEN ( (ST25R3911_REG_IRQ_ERROR_WUP - ST25R3911_REG_IRQ_MAIN) + 1U ) + +/* + ****************************************************************************** + * LOCAL DATA TYPES + ****************************************************************************** + */ + +/*! Holds current and previous interrupt callback pointer as well as current Interrupt status and mask */ +typedef struct +{ + void (*prevCallback)(void); /*!< call back function for 3911 interrupt */ + void (*callback)(void); /*!< call back function for 3911 interrupt */ + uint32_t status; /*!< latest interrupt status */ + uint32_t mask; /*!< Interrupt mask. Negative mask = ST25R3911 mask regs */ +}t_st25r3911Interrupt; + +/* +****************************************************************************** +* GLOBAL VARIABLES +****************************************************************************** +*/ + +static volatile t_st25r3911Interrupt st25r3911interrupt; /*!< Instance of ST25R3911 interrupt */ + +/* +****************************************************************************** +* GLOBAL FUNCTIONS +****************************************************************************** +*/ +void st25r3911InitInterrupts( void ) +{ + platformIrqST25R3911PinInitialize(); + platformIrqST25R3911SetCallback( st25r3911Isr ); + + st25r3911interrupt.callback = NULL; + st25r3911interrupt.prevCallback = NULL; + st25r3911interrupt.status = ST25R3911_IRQ_MASK_NONE; + st25r3911interrupt.mask = ST25R3911_IRQ_MASK_NONE; + + /* Initialize LEDs if existing and defined */ + platformLedsInitialize(); + +#ifdef PLATFORM_LED_RX_PIN + platformLedOff( PLATFORM_LED_RX_PORT, PLATFORM_LED_RX_PIN ); +#endif /* PLATFORM_LED_RX_PIN */ + +#ifdef PLATFORM_LED_FIELD_PIN + platformLedOff( PLATFORM_LED_FIELD_PORT, PLATFORM_LED_FIELD_PIN ); +#endif /* PLATFORM_LED_FIELD_PIN */ +} + +void st25r3911Isr( void ) +{ + st25r3911CheckForReceivedInterrupts(); + + if (NULL != st25r3911interrupt.callback) + { + st25r3911interrupt.callback(); + } +} + +void st25r3911CheckForReceivedInterrupts( void ) +{ + uint8_t iregs[ST25R3911_INT_REGS_LEN]; + uint32_t irqStatus; + + irqStatus = ST25R3911_IRQ_MASK_NONE; + ST_MEMSET( iregs, (int32_t)(ST25R3911_IRQ_MASK_ALL & 0xFFU), ST25R3911_INT_REGS_LEN ); /* MISRA 10.3 */ + + /* In case the IRQ is Edge (not Level) triggered read IRQs until done */ + while( platformGpioIsHigh( ST25R391X_INT_PORT, ST25R391X_INT_PIN ) ) + { + st25r3911ReadMultipleRegisters(ST25R3911_REG_IRQ_MAIN, iregs, sizeof(iregs)); + +#ifdef PLATFORM_LED_FIELD_PIN + if ((iregs[0] & ST25R3911_IRQ_MASK_TXE) != 0U) + { + platformLedOn( PLATFORM_LED_FIELD_PORT, PLATFORM_LED_FIELD_PIN ); + } +#endif /* PLATFORM_LED_FIELD_PIN */ + +#ifdef PLATFORM_LED_RX_PIN + if ((iregs[0] & ST25R3911_IRQ_MASK_RXS) != 0) + { + platformLedOn( PLATFORM_LED_RX_PORT, PLATFORM_LED_RX_PIN ); + } + if (((iregs[0] & ST25R3911_IRQ_MASK_RXE) != 0) || ((iregs[1] & (ST25R3911_IRQ_MASK_NRE >> 8)) != 0)) /* In rare cases there is rxs but not rxe, then we have nre */ + { + platformLedOff( PLATFORM_LED_RX_PORT, PLATFORM_LED_RX_PIN ); + } +#endif /* PLATFORM_LED_RX_PIN */ + + irqStatus |= (uint32_t)iregs[0]; + irqStatus |= (uint32_t)iregs[1]<<8; + irqStatus |= (uint32_t)iregs[2]<<16; + } + + /* Forward all interrupts, even masked ones to application. */ + platformProtectST25R391xIrqStatus(); + st25r3911interrupt.status |= irqStatus; + platformUnprotectST25R391xIrqStatus(); +} + + +void st25r3911ModifyInterrupts(uint32_t clr_mask, uint32_t set_mask) +{ + uint8_t i; + uint32_t old_mask; + uint32_t new_mask; + + old_mask = st25r3911interrupt.mask; + new_mask = (~old_mask & set_mask) | (old_mask & clr_mask); + st25r3911interrupt.mask &= ~clr_mask; + st25r3911interrupt.mask |= set_mask; + for (i=0; i<3U ; i++) + { + if (((new_mask >> (i*8U)) & 0xffU) == 0U) { + continue; + } + st25r3911WriteRegister((ST25R3911_REG_IRQ_MASK_MAIN + i), (uint8_t)((st25r3911interrupt.mask>>(i*8U))&0xffU)); + } + return; +} + + +uint32_t st25r3911WaitForInterruptsTimed(uint32_t mask, uint16_t tmo) +{ + uint32_t tmr; + uint32_t status; + + tmr = platformTimerCreate(tmo); + do + { + status = (st25r3911interrupt.status & mask); + } while( ( !platformTimerIsExpired( tmr ) || (tmo == 0U)) && (status == 0U) ); + + status = st25r3911interrupt.status & mask; + + platformProtectST25R391xIrqStatus(); + st25r3911interrupt.status &= ~status; + platformUnprotectST25R391xIrqStatus(); + + return status; +} + +uint32_t st25r3911GetInterrupt(uint32_t mask) +{ + uint32_t irqs; + + irqs = (st25r3911interrupt.status & mask); + if (irqs != ST25R3911_IRQ_MASK_NONE) + { + platformProtectST25R391xIrqStatus(); + st25r3911interrupt.status &= ~irqs; + platformUnprotectST25R391xIrqStatus(); + } + return irqs; +} + +void st25r3911EnableInterrupts(uint32_t mask) +{ + st25r3911ModifyInterrupts(mask,0); +} + +void st25r3911DisableInterrupts(uint32_t mask) +{ + st25r3911ModifyInterrupts(0,mask); +} + +void st25r3911ClearInterrupts( void ) +{ + uint8_t iregs[3]; + + st25r3911ReadMultipleRegisters(ST25R3911_REG_IRQ_MAIN, iregs, 3); + + platformProtectST25R391xIrqStatus(); + st25r3911interrupt.status = 0; + platformUnprotectST25R391xIrqStatus(); + return; +} + +void st25r3911IRQCallbackSet( void (*cb)(void) ) +{ + st25r3911interrupt.prevCallback = st25r3911interrupt.callback; + st25r3911interrupt.callback = cb; +} + +void st25r3911IRQCallbackRestore( void ) +{ + st25r3911interrupt.callback = st25r3911interrupt.prevCallback; + st25r3911interrupt.prevCallback = NULL; +} + diff --git a/Software/Drivers/BSP/Components/ST25R3911/st25r3911_interrupt.h b/Software/Drivers/BSP/Components/ST25R3911/st25r3911_interrupt.h new file mode 100644 index 0000000..f133d3f --- /dev/null +++ b/Software/Drivers/BSP/Components/ST25R3911/st25r3911_interrupt.h @@ -0,0 +1,250 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: ST25R3911 firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author Ulrich Herrmann + * + * \brief ST25R3911 Interrupt header file + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-HAL + * \brief RFAL Hardware Abstraction Layer + * @{ + * + * \addtogroup ST25R3911 + * \brief RFAL ST25R3911 Driver + * @{ + * + * \addtogroup ST25R3911_Interrupt + * \brief RFAL ST25R3911 Interrupt + * @{ + * + */ + +#ifndef ST25R3911_INTERRUPT_H +#define ST25R3911_INTERRUPT_H + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "platform.h" + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ + +/* Main interrupt register. */ +#define ST25R3911_IRQ_MASK_ALL (uint32_t)(0xFFFFFFU) /*!< All ST25R3911 interrupt sources */ +#define ST25R3911_IRQ_MASK_NONE (uint32_t)(0U) /*!< No ST25R3911 interrupt source */ +#define ST25R3911_IRQ_MASK_OSC (uint32_t)(0x80U) /*!< ST25R3911 oscillator stable interrupt */ +#define ST25R3911_IRQ_MASK_FWL (uint32_t)(0x40U) /*!< ST25R3911 FIFO water level interrupt */ +#define ST25R3911_IRQ_MASK_RXS (uint32_t)(0x20U) /*!< ST25R3911 start of receive interrupt */ +#define ST25R3911_IRQ_MASK_RXE (uint32_t)(0x10U) /*!< ST25R3911 end of receive interrupt */ +#define ST25R3911_IRQ_MASK_TXE (uint32_t)(0x08U) /*!< ST25R3911 end of transmission interrupt */ +#define ST25R3911_IRQ_MASK_COL (uint32_t)(0x04U) /*!< ST25R3911 bit collision interrupt */ + +/* Timer and NFC interrupt register. */ +#define ST25R3911_IRQ_MASK_DCT (uint32_t)(0x8000U) /*!< ST25R3911 termination of direct command interrupt */ +#define ST25R3911_IRQ_MASK_NRE (uint32_t)(0x4000U) /*!< ST25R3911 no-response timer expired interrupt */ +#define ST25R3911_IRQ_MASK_GPE (uint32_t)(0x2000U) /*!< ST25R3911 general purpose timer expired interrupt */ +#define ST25R3911_IRQ_MASK_EON (uint32_t)(0x1000U) /*!< ST25R3911 external field on interrupt */ +#define ST25R3911_IRQ_MASK_EOF (uint32_t)(0x0800U) /*!< ST25R3911 external field off interrupt */ +#define ST25R3911_IRQ_MASK_CAC (uint32_t)(0x0400U) /*!< ST25R3911 collision during RF collision avoidance interrupt */ +#define ST25R3911_IRQ_MASK_CAT (uint32_t)(0x0200U) /*!< ST25R3911 minimum guard time expired interrupt */ +#define ST25R3911_IRQ_MASK_NFCT (uint32_t)(0x0100U) /*!< ST25R3911 initiator bit rate recognized interrupt */ + +/* Error and wake-up interrupt register. */ +#define ST25R3911_IRQ_MASK_CRC (uint32_t)(0x800000U) /*!< ST25R3911 CRC error interrupt */ +#define ST25R3911_IRQ_MASK_PAR (uint32_t)(0x400000U) /*!< ST25R3911 parity error interrupt */ +#define ST25R3911_IRQ_MASK_ERR2 (uint32_t)(0x200000U) /*!< ST25R3911 soft framing error interrupt */ +#define ST25R3911_IRQ_MASK_ERR1 (uint32_t)(0x100000U) /*!< ST25R3911 hard framing error interrupt */ +#define ST25R3911_IRQ_MASK_WT (uint32_t)(0x080000U) /*!< ST25R3911 wake-up interrupt */ +#define ST25R3911_IRQ_MASK_WAM (uint32_t)(0x040000U) /*!< ST25R3911 wake-up due to amplitude interrupt */ +#define ST25R3911_IRQ_MASK_WPH (uint32_t)(0x020000U) /*!< ST25R3911 wake-up due to phase interrupt */ +#define ST25R3911_IRQ_MASK_WCAP (uint32_t)(0x010000U) /*!< ST25R3911 wake-up due to capacitance measurement */ + + +#define ST25R3911_IRQ_MASK_TIM (0x02U) /*!< additional interrupts in ST25R3911_REG_IRQ_TIMER_NFC */ +#define ST25R3911_IRQ_MASK_ERR (0x01U) /*!< additional interrupts in ST25R3911_REG_IRQ_ERROR_WUP */ + + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + + +/*! + ***************************************************************************** + * \brief Wait until an ST25R3911 interrupt occurs + * + * This function is used to access the ST25R3911 interrupt flags. Use this + * to wait for max. \a tmo milliseconds for the \b first interrupt indicated + * with mask \a mask to occur. + * + * \param[in] mask : mask indicating the interrupts to wait for. + * \param[in] tmo : time in milliseconds until timeout occurs. If set to 0 + * the functions waits forever. + * + * \return : 0 if timeout occurred otherwise a mask indicating the cleared + * interrupts. + * + ***************************************************************************** + */ +extern uint32_t st25r3911WaitForInterruptsTimed(uint32_t mask, uint16_t tmo); + +/*! + ***************************************************************************** + * \brief Get status for the given interrupt + * + * This function is used to check whether the interrupt given by \a mask + * has occurred. If yes the interrupt gets cleared. This function returns + * only status bits which are inside \a mask. + * + * \param[in] mask : mask indicating the interrupt to check for. + * + * \return the mask of the interrupts occurred + * + ***************************************************************************** + */ +extern uint32_t st25r3911GetInterrupt(uint32_t mask); + + +/*! + ***************************************************************************** + * \brief Init the 3911 interrupt + * + * This function initiates the 3911 interrupts. + * + ***************************************************************************** + */ +extern void st25r3911InitInterrupts( void ); + + +/*! + ***************************************************************************** + * \brief Modifies the Interrupt + * + * This function modifies the interrupt + * + * \param[in] clr_mask : bit mask to be cleared on the interrupt mask + * \param[in] set_mask : bit mask to be set on the interrupt mask + ***************************************************************************** + */ +extern void st25r3911ModifyInterrupts(uint32_t clr_mask, uint32_t set_mask); + + +/*! + ***************************************************************************** + * \brief Checks received interrupts + * + * Checks received interrupts and saves the result into global params + ***************************************************************************** + */ +extern void st25r3911CheckForReceivedInterrupts( void ); + + +/*! + ***************************************************************************** + * \brief ISR Service routine + * + * This function modifies the interrupt + ***************************************************************************** + */ +extern void st25r3911Isr( void ); + +/*! + ***************************************************************************** + * \brief Enable a given ST25R3911 Interrupt source + * + * This function enables all interrupts given by \a mask, + * ST25R3911_IRQ_MASK_ALL enables all interrupts. + * + * \param[in] mask: mask indicating the interrupts to be enabled + * + ***************************************************************************** + */ +extern void st25r3911EnableInterrupts(uint32_t mask); + +/*! + ***************************************************************************** + * \brief Disable one or more a given ST25R3911 Interrupt sources + * + * This function disables all interrupts given by \a mask. 0xff disables all. + * + * \param[in] mask: mask indicating the interrupts to be disabled. + * + ***************************************************************************** + */ +extern void st25r3911DisableInterrupts(uint32_t mask); + +/*! + ***************************************************************************** + * \brief Clear all st25r3911 irq flags + * + ***************************************************************************** + */ +extern void st25r3911ClearInterrupts(void); + +/*! + ***************************************************************************** + * \brief Sets IRQ callback for the ST25R3911 interrupt + * + ***************************************************************************** + */ +extern void st25r3911IRQCallbackSet(void (*cb)(void)); + +/*! + ***************************************************************************** + * \brief Sets IRQ callback for the ST25R3911 interrupt + * + ***************************************************************************** + */ +extern void st25r3911IRQCallbackRestore(void); + +#endif /* ST25R3911_ISR_H */ + +/** + * @} + * + * @} + * + * @} + * + * @} + */ diff --git a/Software/Drivers/BSP/Components/ST25R3911/st_errno.h b/Software/Drivers/BSP/Components/ST25R3911/st_errno.h new file mode 100644 index 0000000..e3f051d --- /dev/null +++ b/Software/Drivers/BSP/Components/ST25R3911/st_errno.h @@ -0,0 +1,165 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: STxxxx firmware + * LANGUAGE: ISO C99 + */ + +/*! \file st_errno.h + * + * \author + * + * \brief Main error codes + * + */ + +#ifndef ST_ERRNO_H +#define ST_ERRNO_H + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ + + +/* +****************************************************************************** +* GLOBAL DATA TYPES +****************************************************************************** +*/ + +typedef uint16_t ReturnCode; /*!< Standard Return Code type from function. */ + +/* +****************************************************************************** +* DEFINES +****************************************************************************** +*/ + + +/* + * Error codes to be used within the application. + * They are represented by an uint8_t + */ + +#define ERR_NONE ((ReturnCode)0U) /*!< no error occurred */ +#define ERR_NOMEM ((ReturnCode)1U) /*!< not enough memory to perform the requested operation */ +#define ERR_BUSY ((ReturnCode)2U) /*!< device or resource busy */ +#define ERR_IO ((ReturnCode)3U) /*!< generic IO error */ +#define ERR_TIMEOUT ((ReturnCode)4U) /*!< error due to timeout */ +#define ERR_REQUEST ((ReturnCode)5U) /*!< invalid request or requested function can't be executed at the moment */ +#define ERR_NOMSG ((ReturnCode)6U) /*!< No message of desired type */ +#define ERR_PARAM ((ReturnCode)7U) /*!< Parameter error */ +#define ERR_SYSTEM ((ReturnCode)8U) /*!< System error */ +#define ERR_FRAMING ((ReturnCode)9U) /*!< Framing error */ +#define ERR_OVERRUN ((ReturnCode)10U) /*!< lost one or more received bytes */ +#define ERR_PROTO ((ReturnCode)11U) /*!< protocol error */ +#define ERR_INTERNAL ((ReturnCode)12U) /*!< Internal Error */ +#define ERR_AGAIN ((ReturnCode)13U) /*!< Call again */ +#define ERR_MEM_CORRUPT ((ReturnCode)14U) /*!< memory corruption */ +#define ERR_NOT_IMPLEMENTED ((ReturnCode)15U) /*!< not implemented */ +#define ERR_PC_CORRUPT ((ReturnCode)16U) /*!< Program Counter has been manipulated or spike/noise trigger illegal operation */ +#define ERR_SEND ((ReturnCode)17U) /*!< error sending*/ +#define ERR_IGNORE ((ReturnCode)18U) /*!< indicates error detected but to be ignored */ +#define ERR_SEMANTIC ((ReturnCode)19U) /*!< indicates error in state machine (unexpected cmd) */ +#define ERR_SYNTAX ((ReturnCode)20U) /*!< indicates error in state machine (unknown cmd) */ +#define ERR_CRC ((ReturnCode)21U) /*!< crc error */ +#define ERR_NOTFOUND ((ReturnCode)22U) /*!< transponder not found */ +#define ERR_NOTUNIQUE ((ReturnCode)23U) /*!< transponder not unique - more than one transponder in field */ +#define ERR_NOTSUPP ((ReturnCode)24U) /*!< requested operation not supported */ +#define ERR_WRITE ((ReturnCode)25U) /*!< write error */ +#define ERR_FIFO ((ReturnCode)26U) /*!< fifo over or underflow error */ +#define ERR_PAR ((ReturnCode)27U) /*!< parity error */ +#define ERR_DONE ((ReturnCode)28U) /*!< transfer has already finished */ +#define ERR_RF_COLLISION ((ReturnCode)29U) /*!< collision error (Bit Collision or during RF Collision avoidance ) */ +#define ERR_HW_OVERRUN ((ReturnCode)30U) /*!< lost one or more received bytes */ +#define ERR_RELEASE_REQ ((ReturnCode)31U) /*!< device requested release */ +#define ERR_SLEEP_REQ ((ReturnCode)32U) /*!< device requested sleep */ +#define ERR_WRONG_STATE ((ReturnCode)33U) /*!< incorrent state for requested operation */ +#define ERR_MAX_RERUNS ((ReturnCode)34U) /*!< blocking procedure reached maximum runs */ +#define ERR_DISABLED ((ReturnCode)35U) /*!< operation aborted due to disabled configuration */ +#define ERR_HW_MISMATCH ((ReturnCode)36U) /*!< expected hw do not match */ +#define ERR_LINK_LOSS ((ReturnCode)37U) /*!< Other device's field didn't behave as expected: turned off by Initiator in Passive mode, or AP2P did not turn on field */ +#define ERR_INVALID_HANDLE ((ReturnCode)38U) /*!< invalid or not initalized device handle */ + +#define ERR_INCOMPLETE_BYTE ((ReturnCode)40U) /*!< Incomplete byte rcvd */ +#define ERR_INCOMPLETE_BYTE_01 ((ReturnCode)41U) /*!< Incomplete byte rcvd - 1 bit */ +#define ERR_INCOMPLETE_BYTE_02 ((ReturnCode)42U) /*!< Incomplete byte rcvd - 2 bit */ +#define ERR_INCOMPLETE_BYTE_03 ((ReturnCode)43U) /*!< Incomplete byte rcvd - 3 bit */ +#define ERR_INCOMPLETE_BYTE_04 ((ReturnCode)44U) /*!< Incomplete byte rcvd - 4 bit */ +#define ERR_INCOMPLETE_BYTE_05 ((ReturnCode)45U) /*!< Incomplete byte rcvd - 5 bit */ +#define ERR_INCOMPLETE_BYTE_06 ((ReturnCode)46U) /*!< Incomplete byte rcvd - 6 bit */ +#define ERR_INCOMPLETE_BYTE_07 ((ReturnCode)47U) /*!< Incomplete byte rcvd - 7 bit */ + + + + +/* General Sub-category number */ +#define ERR_GENERIC_GRP (0x0000) /*!< Reserved value for generic error no */ +#define ERR_WARN_GRP (0x0100) /*!< Errors which are not expected in normal operation */ +#define ERR_PROCESS_GRP (0x0200) /*!< Processes management errors */ +#define ERR_SIO_GRP (0x0800) /*!< SIO errors due to logging */ +#define ERR_RINGBUF_GRP (0x0900) /*!< Ring Buffer errors */ +#define ERR_MQ_GRP (0x0A00) /*!< MQ errors */ +#define ERR_TIMER_GRP (0x0B00) /*!< Timer errors */ +#define ERR_RFAL_GRP (0x0C00) /*!< RFAL errors */ +#define ERR_UART_GRP (0x0D00) /*!< UART errors */ +#define ERR_SPI_GRP (0x0E00) /*!< SPI errors */ +#define ERR_I2C_GRP (0x0F00) /*!< I2c errors */ + + +#define ERR_INSERT_SIO_GRP(x) (ERR_SIO_GRP | (x)) /*!< Insert the SIO grp */ +#define ERR_INSERT_RINGBUF_GRP(x) (ERR_RINGBUF_GRP | (x)) /*!< Insert the Ring Buffer grp */ +#define ERR_INSERT_RFAL_GRP(x) (ERR_RFAL_GRP | (x)) /*!< Insert the RFAL grp */ +#define ERR_INSERT_SPI_GRP(x) (ERR_SPI_GRP | (x)) /*!< Insert the spi grp */ +#define ERR_INSERT_I2C_GRP(x) (ERR_I2C_GRP | (x)) /*!< Insert the i2c grp */ +#define ERR_INSERT_UART_GRP(x) (ERR_UART_GRP | (x)) /*!< Insert the uart grp */ +#define ERR_INSERT_TIMER_GRP(x) (ERR_TIMER_GRP | (x)) /*!< Insert the timer grp */ +#define ERR_INSERT_MQ_GRP(x) (ERR_MQ_GRP | (x)) /*!< Insert the mq grp */ +#define ERR_INSERT_PROCESS_GRP(x) (ERR_PROCESS_GRP | (x)) /*!< Insert the process grp */ +#define ERR_INSERT_WARN_GRP(x) (ERR_WARN_GRP | (x)) /*!< Insert the i2c grp */ +#define ERR_INSERT_GENERIC_GRP(x) (ERR_GENERIC_GRP | (x)) /*!< Insert the generic grp */ + + +/* +****************************************************************************** +* GLOBAL MACROS +****************************************************************************** +*/ + +#define ERR_NO_MASK(x) ((uint16_t)(x) & 0x00FFU) /*!< Mask the error number */ + + + +/*! Common code to exit a function with the error if function f return error */ +#define EXIT_ON_ERR(r, f) \ + (r) = (f); \ + if (ERR_NONE != (r)) \ + { \ + return (r); \ + } + +#endif /* ST_ERRNO_H */ + diff --git a/Software/Drivers/BSP/Components/ST25R3911/timer.c b/Software/Drivers/BSP/Components/ST25R3911/timer.c new file mode 100644 index 0000000..b13c7a5 --- /dev/null +++ b/Software/Drivers/BSP/Components/ST25R3911/timer.c @@ -0,0 +1,121 @@ +/****************************************************************************** + * @attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ +/* + * PROJECT: ST25R391x firmware + * $Revision: $ + * LANGUAGE: ANSI C + */ + +/*! \file timer.c + * + * \brief SW Timer implementation + * + * \author Gustavo Patricio + * + * This module makes use of a System Tick in millisconds and provides + * an abstraction for SW timers + * + */ + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "timer.h" + + +/* +****************************************************************************** +* LOCAL DEFINES +****************************************************************************** +*/ + +/* +****************************************************************************** +* LOCAL VARIABLES +****************************************************************************** +*/ + +static uint32_t timerStopwatchTick; + +/* +****************************************************************************** +* GLOBAL FUNCTIONS +****************************************************************************** +*/ + + +/*******************************************************************************/ +uint32_t timerCalculateTimer( uint16_t time ) +{ + return (platformGetSysTick() + time); +} + + +/*******************************************************************************/ +bool timerIsExpired( uint32_t timer ) +{ + uint32_t uDiff; + int32_t sDiff; + + uDiff = (timer - platformGetSysTick()); /* Calculate the diff between the timers */ + sDiff = uDiff; /* Convert the diff to a signed var */ + /* Having done this has two side effects: + * 1) all differences smaller than -(2^31) ms (~25d) will become positive + * Signaling not expired: acceptable! + * 2) Time roll-over case will be handled correctly: super! + */ + + /* Check if the given timer has expired already */ + if( sDiff < 0 ) + { + return true; + } + + return false; +} + + +/*******************************************************************************/ +void timerDelay( uint16_t tOut ) +{ + uint32_t t; + + /* Calculate the timer and wait blocking until is running */ + t = timerCalculateTimer( tOut ); + while( timerIsRunning(t) ); +} + + +/*******************************************************************************/ +void timerStopwatchStart( void ) +{ + timerStopwatchTick = platformGetSysTick(); +} + + +/*******************************************************************************/ +uint32_t timerStopwatchMeasure( void ) +{ + return (uint32_t)(platformGetSysTick() - timerStopwatchTick); +} + diff --git a/Software/Drivers/BSP/Components/ST25R3911/timer.h b/Software/Drivers/BSP/Components/ST25R3911/timer.h new file mode 100644 index 0000000..4446d45 --- /dev/null +++ b/Software/Drivers/BSP/Components/ST25R3911/timer.h @@ -0,0 +1,128 @@ +/****************************************************************************** + * @attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ +/* + * PROJECT: ST25R391x firmware + * $Revision: $ + * LANGUAGE: ANSI C + */ + +/*! \file timer.h + * + * \brief SW Timer implementation header file + * + * This module makes use of a System Tick in millisconds and provides + * an abstraction for SW timers + * + */ + + + /* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "platform.h" + +/* +****************************************************************************** +* GLOBAL MACROS +****************************************************************************** +*/ +#define timerIsRunning(t) (!timerIsExpired(t)) + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ + + /*! + ***************************************************************************** + * \brief Calculate Timer + * + * This method calculates when the timer will be expired given the amount + * time in milliseconds /a tOut. + * Once the timer has been calculated it will then be used to check when + * it expires. + * + * \see timersIsExpired + * + * \param[in] time : time/duration in Milliseconds for the timer + * + * \return u32 : The new timer calculated based on the given time + ***************************************************************************** + */ +uint32_t timerCalculateTimer( uint16_t time ); + + +/*! + ***************************************************************************** + * \brief Checks if a Timer is Expired + * + * This method checks if a timer has already expired. + * Based on the given timer previously calculated it checks if this timer + * has already elapsed + * + * \see timersCalculateTimer + * + * \param[in] timer : the timer to check + * + * \return true : timer has already expired + * \return false : timer is still running + ***************************************************************************** + */ +bool timerIsExpired( uint32_t timer ); + + + /*! + ***************************************************************************** + * \brief Performs a Delay + * + * This method performs a delay for the given amount of time in Milliseconds + * + * \param[in] time : time/duration in Milliseconds of the delay + * + ***************************************************************************** + */ +void timerDelay( uint16_t time ); + + +/*! + ***************************************************************************** + * \brief Stopwatch start + * + * This method initiates the stopwatch to later measure the time in ms + * + ***************************************************************************** + */ +void timerStopwatchStart( void ); + + +/*! + ***************************************************************************** + * \brief Stopwatch Measure + * + * This method returns the elapsed time in ms since the stopwatch was initiated + * + * \return The time in ms since the stopwatch was started + ***************************************************************************** + */ +uint32_t timerStopwatchMeasure( void ); diff --git a/Software/Drivers/BSP/Components/ST25R3911/utils.h b/Software/Drivers/BSP/Components/ST25R3911/utils.h new file mode 100644 index 0000000..ba16770 --- /dev/null +++ b/Software/Drivers/BSP/Components/ST25R3911/utils.h @@ -0,0 +1,111 @@ + +/****************************************************************************** + * @attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: NFCC firmware + * $Revision: $ + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author Ulrich Herrmann + * + * \brief Common and helpful macros + * + */ + +#ifndef UTILS_H +#define UTILS_H + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include + +/* +****************************************************************************** +* GLOBAL MACROS +****************************************************************************** +*/ +/*! + * this macro evaluates an error variable \a ERR against an error code \a EC. + * in case it is not equal it jumps to the given label \a LABEL. + */ +#define EVAL_ERR_NE_GOTO(EC, ERR, LABEL) \ + if ((EC) != (ERR)) goto LABEL; + +/*! + * this macro evaluates an error variable \a ERR against an error code \a EC. + * in case it is equal it jumps to the given label \a LABEL. + */ +#define EVAL_ERR_EQ_GOTO(EC, ERR, LABEL) \ + if ((EC) == (ERR)) goto LABEL; + +#define SIZEOF_ARRAY(a) (sizeof(a) / sizeof((a)[0])) /*!< Compute the size of an array */ +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) /*!< Return the maximum of the 2 values */ +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) /*!< Return the minimum of the 2 values */ +#define BITMASK_1 (0x01) /*!< Bit mask for lsb bit */ +#define BITMASK_2 (0x03) /*!< Bit mask for two lsb bits */ +#define BITMASK_3 (0x07) /*!< Bit mask for three lsb bits */ +#define BITMASK_4 (0x0F) /*!< Bit mask for four lsb bits */ +#define U16TOU8(a) ((a) & 0x00FF) /*!< Cast 16-bit unsigned to 8-bit unsigned */ +#define GETU16(a) (((uint16_t)(a)[0] << 8) | (uint16_t)(a)[1])/*!< Cast two Big Endian 8-bits byte array to 16-bits unsigned */ +#define GETU32(a) (((uint32_t)(a)[0] << 24) | ((uint32_t)(a)[1] << 16) | ((uint32_t)(a)[2] << 8) | ((uint32_t)(a)[3])) /*!< Cast four Big Endian 8-bit byte array to 32-bit unsigned */ + +#define REVERSE_BYTES(pData, nDataSize) \ + {unsigned char swap, *lo = ((unsigned char *)(pData)), *hi = ((unsigned char *)(pData)) + (nDataSize) - 1; \ + while (lo < hi) { swap = *lo; *lo++ = *hi; *hi-- = swap; }} + +#ifdef __CSMC__ +/* STM8 COSMIC */ +#define ST_MEMMOVE(s1,s2,n) memmove(s1,s2,n) /*!< map memmove to string library code */ +static inline void * ST_MEMCPY(void *s1, const void *s2, uint32_t n) { return memcpy(s1,s2,(uint16_t)n); } /* PRQA S 0431 # MISRA 1.1 - string.h from Cosmic only provides functions with low qualified parameters */ +#define ST_MEMSET(s1,c,n) memset(s1,(char)(c),n) /*!< map memset to string library code */ +static inline int32_t ST_BYTECMP(void *s1, const void *s2, uint32_t n) { return (int32_t)memcmp(s1,s2,(uint16_t)n); } /* PRQA S 0431 # MISRA 1.1 - string.h from Cosmic only provides functions with low qualified parameters */ + +#else /* __CSMC__ */ + +#define ST_MEMMOVE memmove /*!< map memmove to string library code */ +#define ST_MEMCPY memcpy /*!< map memcpy to string library code */ +#define ST_MEMSET memset /*!< map memset to string library code */ +#define ST_BYTECMP memcmp /*!< map bytecmp to string library code */ +#endif /* __CSMC__ */ + +#define NO_WARNING(v) ((void) (v)) /*!< Macro to suppress compiler warning */ + + +#ifndef NULL + #define NULL (void*)0 /*!< represents a NULL pointer */ +#endif /* !NULL */ + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +#endif /* UTILS_H */ + diff --git a/Software/Drivers/BSP/NFC05A1/Release_Notes.html b/Software/Drivers/BSP/NFC05A1/Release_Notes.html new file mode 100644 index 0000000..14c714d --- /dev/null +++ b/Software/Drivers/BSP/NFC05A1/Release_Notes.html @@ -0,0 +1,180 @@ + + + + + + + + + + + + Release Notes for X-NUCLEO-NFC03A1 STM32 Expansion Board + + + + + + + + + + +
+


+

+
+ + + + + + +
+ + + + + + + + + +
+

Back to Release page

+
+

Release +Notes for X-NUCLEO-NFC05A1 STM32 Expansion Board

+

Copyright +2017 STMicroelectronics

+

+
+

 

+ + + + + + +
+ +

Update +History

+ +

V1.0.0 +/ 15-March-2017

+

Main +Changes

+ + + + + +
    +
  • First +official release.
  • +
+ +

License
+

+
Redistribution +and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met:
+
+
    +
  1. Redistributions +of source code must retain the above copyright notice, this list of +conditions and the following disclaimer.
  2. +
  3. Redistributions +in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution.
  4. +
  5. Neither the +name of STMicroelectronics nor the names of its contributors may be +used to endorse or promote products derived
    +
  6. +
+        +from this software without specific prior written permission.
+
+ THIS +SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE.
+

+ +
+
+

For +complete documentation on STM32 Microcontrollers +visit www.st.com/STM32

+
+

+
+
+

 

+
+ + \ No newline at end of file diff --git a/Software/Drivers/BSP/NFC05A1/led.c b/Software/Drivers/BSP/NFC05A1/led.c new file mode 100644 index 0000000..27c80fc --- /dev/null +++ b/Software/Drivers/BSP/NFC05A1/led.c @@ -0,0 +1,145 @@ +/****************************************************************************** + * @attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ +/* + * PROJECT: ST25R3911 firmware + * $Revision: $ + * LANGUAGE: ANSI C + */ + +/*! \file + * + * \author + * + * \brief Implementation for controlling shield LEDs functionality + * + */ + +/*! + * + */ + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#ifdef STM32L476xx +#include "stm32l4xx.h" +#else +#include "stm32f4xx.h" +#endif + +#include "led.h" +#include "main.h" + +volatile uint16_t msLedA = 0; +volatile uint16_t msLedB = 0; +volatile uint16_t msLedF = 0; +volatile uint16_t msLedV = 0; +volatile uint16_t msLedAP2P = 0; + +void ledOn(st25R3911Led_t Led) +{ + switch(Led){ + case LED_A: HAL_GPIO_WritePin(LED_A_GPIO_Port , LED_A_Pin , GPIO_PIN_SET); break; + case LED_B: HAL_GPIO_WritePin(LED_B_GPIO_Port , LED_B_Pin , GPIO_PIN_SET); break; + case LED_F: HAL_GPIO_WritePin(LED_F_GPIO_Port , LED_F_Pin , GPIO_PIN_SET); break; + case LED_V: HAL_GPIO_WritePin(LED_V_GPIO_Port , LED_V_Pin , GPIO_PIN_SET); break; + case LED_AP2P: HAL_GPIO_WritePin(LED_AP2P_GPIO_Port , LED_AP2P_Pin , GPIO_PIN_SET); break; + default: + break; + } +} + +void ledOff(st25R3911Led_t Led) +{ + switch(Led){ + case LED_A: HAL_GPIO_WritePin(LED_A_GPIO_Port , LED_A_Pin , GPIO_PIN_RESET); break; + case LED_B: HAL_GPIO_WritePin(LED_B_GPIO_Port , LED_B_Pin , GPIO_PIN_RESET); break; + case LED_F: HAL_GPIO_WritePin(LED_F_GPIO_Port , LED_F_Pin , GPIO_PIN_RESET); break; + case LED_V: HAL_GPIO_WritePin(LED_V_GPIO_Port , LED_V_Pin , GPIO_PIN_RESET); break; + case LED_AP2P: HAL_GPIO_WritePin(LED_AP2P_GPIO_Port , LED_AP2P_Pin , GPIO_PIN_RESET); break; + default: + break; + } +} + +void ledToggle(st25R3911Led_t Led) +{ + switch(Led){ + case LED_A: HAL_GPIO_TogglePin(LED_A_GPIO_Port , LED_A_Pin ); break; + case LED_B: HAL_GPIO_TogglePin(LED_B_GPIO_Port , LED_B_Pin ); break; + case LED_F: HAL_GPIO_TogglePin(LED_F_GPIO_Port , LED_F_Pin ); break; + case LED_V: HAL_GPIO_TogglePin(LED_V_GPIO_Port , LED_V_Pin ); break; + case LED_AP2P: HAL_GPIO_TogglePin(LED_AP2P_GPIO_Port , LED_AP2P_Pin ); break; + default: + break; + } +} + + + +void ledOnOff(st25R3911Led_t Led, uint32_t delay) +{ + ledOn(Led); + + switch(Led){ + case LED_A: msLedA = delay; break; + case LED_B: msLedB = delay; break; + case LED_F: msLedF = delay; break; + case LED_V: msLedV = delay; break; + case LED_AP2P: msLedAP2P = delay; break; + default: + break; + } +} +void ledFeedbackHandler() +{ + if(msLedA > 0){ + msLedA--; + if(msLedA == 0) + ledOff(LED_A); + } + + if(msLedB > 0){ + msLedB--; + if(msLedB == 0) + ledOff(LED_B); + } + + if(msLedF > 0){ + msLedF--; + if(msLedF == 0) + ledOff(LED_F); + } + + if(msLedV > 0){ + msLedV--; + if(msLedV == 0) + ledOff(LED_V); + } + + if(msLedAP2P > 0){ + msLedAP2P--; + if(msLedAP2P == 0) + ledOff(LED_AP2P); + } +} diff --git a/Software/Drivers/BSP/NFC05A1/led.h b/Software/Drivers/BSP/NFC05A1/led.h new file mode 100644 index 0000000..f077431 --- /dev/null +++ b/Software/Drivers/BSP/NFC05A1/led.h @@ -0,0 +1,81 @@ +/****************************************************************************** + * @attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ +/* + * PROJECT: ST25R3911 firmware + * $Revision: $ + * LANGUAGE: ANSI C + */ + +/*! \file + * + * \author + * + * \brief Module for controlling shield LEDs + * + */ +/*! + * + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef LED_H +#define LED_H + +/* Includes ------------------------------------------------------------------*/ +#include "stdint.h" + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ +extern volatile uint16_t msLedA; +extern volatile uint16_t msLedB; +extern volatile uint16_t msLedF; +extern volatile uint16_t msLedV; +extern volatile uint16_t msLedAP2P; + + +typedef enum +{ + LED_A = 0x1, + LED_B = 0x2, + LED_F = 0x3, + LED_V = 0x4, + LED_AP2P = 0x5, +}st25R3911Led_t; + +/* +****************************************************************************** +* GLOBAL MACROS +****************************************************************************** +*/ + +void ledOn(st25R3911Led_t Led); +void ledOff(st25R3911Led_t Led); +void ledToggle(st25R3911Led_t Led); + +#define VISUAL_FEEDBACK_DELAY 600 +void ledOnOff(st25R3911Led_t Led, uint32_t delay); +void ledFeedbackHandler(void); + +#endif /* LED_H */ + diff --git a/Software/Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f303xe.h b/Software/Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f303xe.h new file mode 100644 index 0000000..bbe098d --- /dev/null +++ b/Software/Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f303xe.h @@ -0,0 +1,15340 @@ +/** + ****************************************************************************** + * @file stm32f303xe.h + * @author MCD Application Team + * @brief CMSIS STM32F303xE Devices Peripheral Access Layer Header File. + * + * This file contains: + * - Data structures and the address mapping for all peripherals + * - Peripheral's registers declarations and bits definition + * - Macros to access peripheral's registers hardware + * + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS_Device + * @{ + */ + +/** @addtogroup stm32f303xe + * @{ + */ + +#ifndef __STM32F303xE_H +#define __STM32F303xE_H + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/** @addtogroup Configuration_section_for_CMSIS + * @{ + */ + +/** + * @brief Configuration of the Cortex-M4 Processor and Core Peripherals + */ +#define __CM4_REV 0x0001U /*!< Core revision r0p1 */ +#define __MPU_PRESENT 1U /*!< STM32F303xE devices provide an MPU */ +#define __NVIC_PRIO_BITS 4U /*!< STM32F303xE devices use 4 Bits for the Priority Levels */ +#define __Vendor_SysTickConfig 0U /*!< Set to 1 if different SysTick Config is used */ +#define __FPU_PRESENT 1U /*!< STM32F303xE devices provide an FPU */ + +/** + * @} + */ + +/** @addtogroup Peripheral_interrupt_number_definition + * @{ + */ + +/** + * @brief STM32F303xE devices Interrupt Number Definition, according to the selected device + * in @ref Library_configuration_section + */ +typedef enum +{ +/****** Cortex-M4 Processor Exceptions Numbers ****************************************************************/ + NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ + HardFault_IRQn = -13, /*!< 3 Cortex-M4 Hard Fault Interrupt */ + MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */ +/****** STM32 specific Interrupt Numbers **********************************************************************/ + WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ + PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */ + TAMP_STAMP_IRQn = 2, /*!< Tamper and TimeStamp interrupts through the EXTI line 19 */ + RTC_WKUP_IRQn = 3, /*!< RTC Wakeup interrupt through the EXTI line 20 */ + FLASH_IRQn = 4, /*!< FLASH global Interrupt */ + RCC_IRQn = 5, /*!< RCC global Interrupt */ + EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */ + EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */ + EXTI2_TSC_IRQn = 8, /*!< EXTI Line2 Interrupt and Touch Sense Controller Interrupt */ + EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */ + EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */ + DMA1_Channel1_IRQn = 11, /*!< DMA1 Channel 1 Interrupt */ + DMA1_Channel2_IRQn = 12, /*!< DMA1 Channel 2 Interrupt */ + DMA1_Channel3_IRQn = 13, /*!< DMA1 Channel 3 Interrupt */ + DMA1_Channel4_IRQn = 14, /*!< DMA1 Channel 4 Interrupt */ + DMA1_Channel5_IRQn = 15, /*!< DMA1 Channel 5 Interrupt */ + DMA1_Channel6_IRQn = 16, /*!< DMA1 Channel 6 Interrupt */ + DMA1_Channel7_IRQn = 17, /*!< DMA1 Channel 7 Interrupt */ + ADC1_2_IRQn = 18, /*!< ADC1 & ADC2 Interrupts */ + USB_HP_CAN_TX_IRQn = 19, /*!< USB Device High Priority or CAN TX Interrupts */ + USB_LP_CAN_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN RX0 Interrupts */ + CAN_RX1_IRQn = 21, /*!< CAN RX1 Interrupt */ + CAN_SCE_IRQn = 22, /*!< CAN SCE Interrupt */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_TIM15_IRQn = 24, /*!< TIM1 Break and TIM15 Interrupts */ + TIM1_UP_TIM16_IRQn = 25, /*!< TIM1 Update and TIM16 Interrupts */ + TIM1_TRG_COM_TIM17_IRQn = 26, /*!< TIM1 Trigger and Commutation and TIM17 Interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt & EXTI Line23 Interrupt (I2C1 wakeup) */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt & EXTI Line24 Interrupt (I2C2 wakeup) */ + I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt & EXTI Line25 Interrupt (USART1 wakeup) */ + USART2_IRQn = 38, /*!< USART2 global Interrupt & EXTI Line26 Interrupt (USART2 wakeup) */ + USART3_IRQn = 39, /*!< USART3 global Interrupt & EXTI Line28 Interrupt (USART3 wakeup) */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTC_Alarm_IRQn = 41, /*!< RTC Alarm (A and B) through EXTI Line 17 Interrupt */ + USBWakeUp_IRQn = 42, /*!< USB Wakeup Interrupt */ + TIM8_BRK_IRQn = 43, /*!< TIM8 Break Interrupt */ + TIM8_UP_IRQn = 44, /*!< TIM8 Update Interrupt */ + TIM8_TRG_COM_IRQn = 45, /*!< TIM8 Trigger and Commutation Interrupt */ + TIM8_CC_IRQn = 46, /*!< TIM8 Capture Compare Interrupt */ + ADC3_IRQn = 47, /*!< ADC3 global Interrupt */ + FMC_IRQn = 48, /*!< FMC global Interrupt */ + SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ + UART4_IRQn = 52, /*!< UART4 global Interrupt & EXTI Line34 Interrupt (UART4 wakeup) */ + UART5_IRQn = 53, /*!< UART5 global Interrupt & EXTI Line35 Interrupt (UART5 wakeup) */ + TIM6_DAC_IRQn = 54, /*!< TIM6 global and DAC underrun error Interrupt */ + TIM7_IRQn = 55, /*!< TIM7 global Interrupt */ + DMA2_Channel1_IRQn = 56, /*!< DMA2 Channel 1 global Interrupt */ + DMA2_Channel2_IRQn = 57, /*!< DMA2 Channel 2 global Interrupt */ + DMA2_Channel3_IRQn = 58, /*!< DMA2 Channel 3 global Interrupt */ + DMA2_Channel4_IRQn = 59, /*!< DMA2 Channel 4 global Interrupt */ + DMA2_Channel5_IRQn = 60, /*!< DMA2 Channel 5 global Interrupt */ + ADC4_IRQn = 61, /*!< ADC4 global Interrupt */ + COMP1_2_3_IRQn = 64, /*!< COMP1, COMP2 and COMP3 global Interrupt via EXTI Line21, 22 and 29*/ + COMP4_5_6_IRQn = 65, /*!< COMP4, COMP5 and COMP6 global Interrupt via EXTI Line30, 31 and 32*/ + COMP7_IRQn = 66, /*!< COMP7 global Interrupt via EXTI Line33 */ + I2C3_EV_IRQn = 72, /*!< I2C3 event interrupt */ + I2C3_ER_IRQn = 73, /*!< I2C3 Error Interrupt */ + USB_HP_IRQn = 74, /*!< USB High Priority global Interrupt */ + USB_LP_IRQn = 75, /*!< USB Low Priority global Interrupt */ + USBWakeUp_RMP_IRQn = 76, /*!< USB Wakeup Interrupt remap */ + TIM20_BRK_IRQn = 77, /*!< TIM20 Break Interrupt */ + TIM20_UP_IRQn = 78, /*!< TIM20 Update Interrupt */ + TIM20_TRG_COM_IRQn = 79, /*!< TIM20 Trigger and Commutation Interrupt */ + TIM20_CC_IRQn = 80, /*!< TIM20 Capture Compare Interrupt */ + FPU_IRQn = 81, /*!< Floating point Interrupt */ + SPI4_IRQn = 84, /*!< SPI4 global Interrupt */ +} IRQn_Type; + +/** + * @} + */ + +#include "core_cm4.h" /* Cortex-M4 processor and core peripherals */ +#include "system_stm32f3xx.h" /* STM32F3xx System Header */ +#include + +/** @addtogroup Peripheral_registers_structures + * @{ + */ + +/** + * @brief Analog to Digital Converter + */ + +typedef struct +{ + __IO uint32_t ISR; /*!< ADC Interrupt and Status Register, Address offset: 0x00 */ + __IO uint32_t IER; /*!< ADC Interrupt Enable Register, Address offset: 0x04 */ + __IO uint32_t CR; /*!< ADC control register, Address offset: 0x08 */ + __IO uint32_t CFGR; /*!< ADC Configuration register, Address offset: 0x0C */ + uint32_t RESERVED0; /*!< Reserved, 0x010 */ + __IO uint32_t SMPR1; /*!< ADC sample time register 1, Address offset: 0x14 */ + __IO uint32_t SMPR2; /*!< ADC sample time register 2, Address offset: 0x18 */ + uint32_t RESERVED1; /*!< Reserved, 0x01C */ + __IO uint32_t TR1; /*!< ADC watchdog threshold register 1, Address offset: 0x20 */ + __IO uint32_t TR2; /*!< ADC watchdog threshold register 2, Address offset: 0x24 */ + __IO uint32_t TR3; /*!< ADC watchdog threshold register 3, Address offset: 0x28 */ + uint32_t RESERVED2; /*!< Reserved, 0x02C */ + __IO uint32_t SQR1; /*!< ADC regular sequence register 1, Address offset: 0x30 */ + __IO uint32_t SQR2; /*!< ADC regular sequence register 2, Address offset: 0x34 */ + __IO uint32_t SQR3; /*!< ADC regular sequence register 3, Address offset: 0x38 */ + __IO uint32_t SQR4; /*!< ADC regular sequence register 4, Address offset: 0x3C */ + __IO uint32_t DR; /*!< ADC regular data register, Address offset: 0x40 */ + uint32_t RESERVED3; /*!< Reserved, 0x044 */ + uint32_t RESERVED4; /*!< Reserved, 0x048 */ + __IO uint32_t JSQR; /*!< ADC injected sequence register, Address offset: 0x4C */ + uint32_t RESERVED5[4]; /*!< Reserved, 0x050 - 0x05C */ + __IO uint32_t OFR1; /*!< ADC offset register 1, Address offset: 0x60 */ + __IO uint32_t OFR2; /*!< ADC offset register 2, Address offset: 0x64 */ + __IO uint32_t OFR3; /*!< ADC offset register 3, Address offset: 0x68 */ + __IO uint32_t OFR4; /*!< ADC offset register 4, Address offset: 0x6C */ + uint32_t RESERVED6[4]; /*!< Reserved, 0x070 - 0x07C */ + __IO uint32_t JDR1; /*!< ADC injected data register 1, Address offset: 0x80 */ + __IO uint32_t JDR2; /*!< ADC injected data register 2, Address offset: 0x84 */ + __IO uint32_t JDR3; /*!< ADC injected data register 3, Address offset: 0x88 */ + __IO uint32_t JDR4; /*!< ADC injected data register 4, Address offset: 0x8C */ + uint32_t RESERVED7[4]; /*!< Reserved, 0x090 - 0x09C */ + __IO uint32_t AWD2CR; /*!< ADC Analog Watchdog 2 Configuration Register, Address offset: 0xA0 */ + __IO uint32_t AWD3CR; /*!< ADC Analog Watchdog 3 Configuration Register, Address offset: 0xA4 */ + uint32_t RESERVED8; /*!< Reserved, 0x0A8 */ + uint32_t RESERVED9; /*!< Reserved, 0x0AC */ + __IO uint32_t DIFSEL; /*!< ADC Differential Mode Selection Register, Address offset: 0xB0 */ + __IO uint32_t CALFACT; /*!< ADC Calibration Factors, Address offset: 0xB4 */ + +} ADC_TypeDef; + +typedef struct +{ + __IO uint32_t CSR; /*!< ADC Common status register, Address offset: ADC1/3 base address + 0x300 */ + uint32_t RESERVED; /*!< Reserved, ADC1/3 base address + 0x304 */ + __IO uint32_t CCR; /*!< ADC common control register, Address offset: ADC1/3 base address + 0x308 */ + __IO uint32_t CDR; /*!< ADC common regular data register for dual + AND triple modes, Address offset: ADC1/3 base address + 0x30C */ +} ADC_Common_TypeDef; + +/** + * @brief Controller Area Network TxMailBox + */ +typedef struct +{ + __IO uint32_t TIR; /*!< CAN TX mailbox identifier register */ + __IO uint32_t TDTR; /*!< CAN mailbox data length control and time stamp register */ + __IO uint32_t TDLR; /*!< CAN mailbox data low register */ + __IO uint32_t TDHR; /*!< CAN mailbox data high register */ +} CAN_TxMailBox_TypeDef; + +/** + * @brief Controller Area Network FIFOMailBox + */ +typedef struct +{ + __IO uint32_t RIR; /*!< CAN receive FIFO mailbox identifier register */ + __IO uint32_t RDTR; /*!< CAN receive FIFO mailbox data length control and time stamp register */ + __IO uint32_t RDLR; /*!< CAN receive FIFO mailbox data low register */ + __IO uint32_t RDHR; /*!< CAN receive FIFO mailbox data high register */ +} CAN_FIFOMailBox_TypeDef; + +/** + * @brief Controller Area Network FilterRegister + */ +typedef struct +{ + __IO uint32_t FR1; /*!< CAN Filter bank register 1 */ + __IO uint32_t FR2; /*!< CAN Filter bank register 1 */ +} CAN_FilterRegister_TypeDef; + +/** + * @brief Controller Area Network + */ +typedef struct +{ + __IO uint32_t MCR; /*!< CAN master control register, Address offset: 0x00 */ + __IO uint32_t MSR; /*!< CAN master status register, Address offset: 0x04 */ + __IO uint32_t TSR; /*!< CAN transmit status register, Address offset: 0x08 */ + __IO uint32_t RF0R; /*!< CAN receive FIFO 0 register, Address offset: 0x0C */ + __IO uint32_t RF1R; /*!< CAN receive FIFO 1 register, Address offset: 0x10 */ + __IO uint32_t IER; /*!< CAN interrupt enable register, Address offset: 0x14 */ + __IO uint32_t ESR; /*!< CAN error status register, Address offset: 0x18 */ + __IO uint32_t BTR; /*!< CAN bit timing register, Address offset: 0x1C */ + uint32_t RESERVED0[88]; /*!< Reserved, 0x020 - 0x17F */ + CAN_TxMailBox_TypeDef sTxMailBox[3]; /*!< CAN Tx MailBox, Address offset: 0x180 - 0x1AC */ + CAN_FIFOMailBox_TypeDef sFIFOMailBox[2]; /*!< CAN FIFO MailBox, Address offset: 0x1B0 - 0x1CC */ + uint32_t RESERVED1[12]; /*!< Reserved, 0x1D0 - 0x1FF */ + __IO uint32_t FMR; /*!< CAN filter master register, Address offset: 0x200 */ + __IO uint32_t FM1R; /*!< CAN filter mode register, Address offset: 0x204 */ + uint32_t RESERVED2; /*!< Reserved, 0x208 */ + __IO uint32_t FS1R; /*!< CAN filter scale register, Address offset: 0x20C */ + uint32_t RESERVED3; /*!< Reserved, 0x210 */ + __IO uint32_t FFA1R; /*!< CAN filter FIFO assignment register, Address offset: 0x214 */ + uint32_t RESERVED4; /*!< Reserved, 0x218 */ + __IO uint32_t FA1R; /*!< CAN filter activation register, Address offset: 0x21C */ + uint32_t RESERVED5[8]; /*!< Reserved, 0x220-0x23F */ + CAN_FilterRegister_TypeDef sFilterRegister[28]; /*!< CAN Filter Register, Address offset: 0x240-0x31C */ +} CAN_TypeDef; + +/** + * @brief Analog Comparators + */ +typedef struct +{ + __IO uint32_t CSR; /*!< COMP control and status register, Address offset: 0x00 */ +} COMP_TypeDef; + +typedef struct +{ + __IO uint32_t CSR; /*!< COMP control and status register, used for bits common to several COMP instances, Address offset: 0x00 */ +} COMP_Common_TypeDef; + +/** + * @brief CRC calculation unit + */ + +typedef struct +{ + __IO uint32_t DR; /*!< CRC Data register, Address offset: 0x00 */ + __IO uint8_t IDR; /*!< CRC Independent data register, Address offset: 0x04 */ + uint8_t RESERVED0; /*!< Reserved, 0x05 */ + uint16_t RESERVED1; /*!< Reserved, 0x06 */ + __IO uint32_t CR; /*!< CRC Control register, Address offset: 0x08 */ + uint32_t RESERVED2; /*!< Reserved, 0x0C */ + __IO uint32_t INIT; /*!< Initial CRC value register, Address offset: 0x10 */ + __IO uint32_t POL; /*!< CRC polynomial register, Address offset: 0x14 */ +} CRC_TypeDef; + +/** + * @brief Digital to Analog Converter + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DAC control register, Address offset: 0x00 */ + __IO uint32_t SWTRIGR; /*!< DAC software trigger register, Address offset: 0x04 */ + __IO uint32_t DHR12R1; /*!< DAC channel1 12-bit right-aligned data holding register, Address offset: 0x08 */ + __IO uint32_t DHR12L1; /*!< DAC channel1 12-bit left aligned data holding register, Address offset: 0x0C */ + __IO uint32_t DHR8R1; /*!< DAC channel1 8-bit right aligned data holding register, Address offset: 0x10 */ + __IO uint32_t DHR12R2; /*!< DAC channel2 12-bit right aligned data holding register, Address offset: 0x14 */ + __IO uint32_t DHR12L2; /*!< DAC channel2 12-bit left aligned data holding register, Address offset: 0x18 */ + __IO uint32_t DHR8R2; /*!< DAC channel2 8-bit right-aligned data holding register, Address offset: 0x1C */ + __IO uint32_t DHR12RD; /*!< Dual DAC 12-bit right-aligned data holding register, Address offset: 0x20 */ + __IO uint32_t DHR12LD; /*!< DUAL DAC 12-bit left aligned data holding register, Address offset: 0x24 */ + __IO uint32_t DHR8RD; /*!< DUAL DAC 8-bit right aligned data holding register, Address offset: 0x28 */ + __IO uint32_t DOR1; /*!< DAC channel1 data output register, Address offset: 0x2C */ + __IO uint32_t DOR2; /*!< DAC channel2 data output register, Address offset: 0x30 */ + __IO uint32_t SR; /*!< DAC status register, Address offset: 0x34 */ +} DAC_TypeDef; + +/** + * @brief Debug MCU + */ + +typedef struct +{ + __IO uint32_t IDCODE; /*!< MCU device ID code, Address offset: 0x00 */ + __IO uint32_t CR; /*!< Debug MCU configuration register, Address offset: 0x04 */ + __IO uint32_t APB1FZ; /*!< Debug MCU APB1 freeze register, Address offset: 0x08 */ + __IO uint32_t APB2FZ; /*!< Debug MCU APB2 freeze register, Address offset: 0x0C */ +}DBGMCU_TypeDef; + +/** + * @brief DMA Controller + */ + +typedef struct +{ + __IO uint32_t CCR; /*!< DMA channel x configuration register */ + __IO uint32_t CNDTR; /*!< DMA channel x number of data register */ + __IO uint32_t CPAR; /*!< DMA channel x peripheral address register */ + __IO uint32_t CMAR; /*!< DMA channel x memory address register */ +} DMA_Channel_TypeDef; + +typedef struct +{ + __IO uint32_t ISR; /*!< DMA interrupt status register, Address offset: 0x00 */ + __IO uint32_t IFCR; /*!< DMA interrupt flag clear register, Address offset: 0x04 */ +} DMA_TypeDef; + +/** + * @brief External Interrupt/Event Controller + */ + +typedef struct +{ + __IO uint32_t IMR; /*!
© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.
+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f3xx + * @{ + */ + +#ifndef __STM32F3xx_H +#define __STM32F3xx_H + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/** @addtogroup Library_configuration_section + * @{ + */ + +/** + * @brief STM32 Family + */ +#if !defined (STM32F3) +#define STM32F3 +#endif /* STM32F3 */ + +/* Uncomment the line below according to the target STM32 device used in your + application + */ + +#if !defined (STM32F301x8) && !defined (STM32F302x8) && !defined (STM32F318xx) && \ + !defined (STM32F302xC) && !defined (STM32F303xC) && !defined (STM32F358xx) && \ + !defined (STM32F303x8) && !defined (STM32F334x8) && !defined (STM32F328xx) && \ + !defined (STM32F302xE) && !defined (STM32F303xE) && !defined (STM32F398xx) && \ + !defined (STM32F373xC) && !defined (STM32F378xx) + + /* #define STM32F301x8 */ /*!< STM32F301K6, STM32F301K8, STM32F301C6, STM32F301C8, + STM32F301R6 and STM32F301R8 Devices */ + /* #define STM32F302x8 */ /*!< STM32F302K6, STM32F302K8, STM32F302C6, STM32F302C8, + STM32F302R6 and STM32F302R8 Devices */ + /* #define STM32F302xC */ /*!< STM32F302CB, STM32F302CC, STM32F302RB, STM32F302RC, + STM32F302VB and STM32F302VC Devices */ + /* #define STM32F302xE */ /*!< STM32F302RE, STM32F302VE, STM32F302ZE, STM32F302RD, + STM32F302VD and STM32F302ZD Devices */ + /* #define STM32F303x8 */ /*!< STM32F303K6, STM32F303K8, STM32F303C6, STM32F303C8, + STM32F303R6 and STM32F303R8 Devices */ + /* #define STM32F303xC */ /*!< STM32F303CB, STM32F303CC, STM32F303RB, STM32F303RC, + STM32F303VB and STM32F303VC Devices */ + /* #define STM32F303xE */ /*!< STM32F303RE, STM32F303VE, STM32F303ZE, STM32F303RD, + STM32F303VD and STM32F303ZD Devices */ + /* #define STM32F373xC */ /*!< STM32F373C8, STM32F373CB, STM32F373CC, + STM32F373R8, STM32F373RB, STM32F373RC, + STM32F373V8, STM32F373VB and STM32F373VC Devices */ + /* #define STM32F334x8 */ /*!< STM32F334K4, STM32F334K6, STM32F334K8, + STM32F334C4, STM32F334C6, STM32F334C8, + STM32F334R4, STM32F334R6 and STM32F334R8 Devices */ + /* #define STM32F318xx */ /*!< STM32F318K8, STM32F318C8: STM32F301x8 with regulator off: STM32F318xx Devices */ + /* #define STM32F328xx */ /*!< STM32F328C8, STM32F328R8: STM32F334x8 with regulator off: STM32F328xx Devices */ + /* #define STM32F358xx */ /*!< STM32F358CC, STM32F358RC, STM32F358VC: STM32F303xC with regulator off: STM32F358xx Devices */ + /* #define STM32F378xx */ /*!< STM32F378CC, STM32F378RC, STM32F378VC: STM32F373xC with regulator off: STM32F378xx Devices */ + /* #define STM32F398xx */ /*!< STM32F398VE: STM32F303xE with regulator off: STM32F398xx Devices */ +#endif + +/* Tip: To avoid modifying this file each time you need to switch between these + devices, you can define the device in your toolchain compiler preprocessor. + */ +#if !defined (USE_HAL_DRIVER) +/** + * @brief Comment the line below if you will not use the peripherals drivers. + In this case, these drivers will not be included and the application code will + be based on direct access to peripherals registers + */ + /*#define USE_HAL_DRIVER */ +#endif /* USE_HAL_DRIVER */ + +/** + * @brief CMSIS Device version number V2.3.6 + */ +#define __STM32F3_CMSIS_VERSION_MAIN (0x02) /*!< [31:24] main version */ +#define __STM32F3_CMSIS_VERSION_SUB1 (0x03) /*!< [23:16] sub1 version */ +#define __STM32F3_CMSIS_VERSION_SUB2 (0x06) /*!< [15:8] sub2 version */ +#define __STM32F3_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */ +#define __STM32F3_CMSIS_VERSION ((__STM32F3_CMSIS_VERSION_MAIN << 24)\ + |(__STM32F3_CMSIS_VERSION_SUB1 << 16)\ + |(__STM32F3_CMSIS_VERSION_SUB2 << 8 )\ + |(__STM32F3_CMSIS_VERSION_RC)) + +/** + * @} + */ + +/** @addtogroup Device_Included + * @{ + */ + +#if defined(STM32F301x8) + #include "stm32f301x8.h" +#elif defined(STM32F302x8) + #include "stm32f302x8.h" +#elif defined(STM32F302xC) + #include "stm32f302xc.h" +#elif defined(STM32F302xE) + #include "stm32f302xe.h" +#elif defined(STM32F303x8) + #include "stm32f303x8.h" +#elif defined(STM32F303xC) + #include "stm32f303xc.h" +#elif defined(STM32F303xE) + #include "stm32f303xe.h" +#elif defined(STM32F373xC) + #include "stm32f373xc.h" +#elif defined(STM32F334x8) + #include "stm32f334x8.h" +#elif defined(STM32F318xx) + #include "stm32f318xx.h" +#elif defined(STM32F328xx) + #include "stm32f328xx.h" +#elif defined(STM32F358xx) + #include "stm32f358xx.h" +#elif defined(STM32F378xx) + #include "stm32f378xx.h" +#elif defined(STM32F398xx) + #include "stm32f398xx.h" +#else + #error "Please select first the target STM32F3xx device used in your application (in stm32f3xx.h file)" +#endif + +/** + * @} + */ + +/** @addtogroup Exported_types + * @{ + */ +typedef enum +{ + RESET = 0U, + SET = !RESET +} FlagStatus, ITStatus; + +typedef enum +{ + DISABLE = 0U, + ENABLE = !DISABLE +} FunctionalState; +#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) + +typedef enum +{ + SUCCESS = 0U, + ERROR = !SUCCESS +} ErrorStatus; + +/** + * @} + */ + + +/** @addtogroup Exported_macros + * @{ + */ +#define SET_BIT(REG, BIT) ((REG) |= (BIT)) + +#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT)) + +#define READ_BIT(REG, BIT) ((REG) & (BIT)) + +#define CLEAR_REG(REG) ((REG) = (0x0)) + +#define WRITE_REG(REG, VAL) ((REG) = (VAL)) + +#define READ_REG(REG) ((REG)) + +#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK))) + +#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL))) + +/* Use of CMSIS compiler intrinsics for register exclusive access */ +/* Atomic 32-bit register access macro to set one or several bits */ +#define ATOMIC_SET_BIT(REG, BIT) \ + do { \ + uint32_t val; \ + do { \ + val = __LDREXW((__IO uint32_t *)&(REG)) | (BIT); \ + } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \ + } while(0) + +/* Atomic 32-bit register access macro to clear one or several bits */ +#define ATOMIC_CLEAR_BIT(REG, BIT) \ + do { \ + uint32_t val; \ + do { \ + val = __LDREXW((__IO uint32_t *)&(REG)) & ~(BIT); \ + } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \ + } while(0) + +/* Atomic 32-bit register access macro to clear and set one or several bits */ +#define ATOMIC_MODIFY_REG(REG, CLEARMSK, SETMASK) \ + do { \ + uint32_t val; \ + do { \ + val = (__LDREXW((__IO uint32_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \ + } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \ + } while(0) + +/* Atomic 16-bit register access macro to set one or several bits */ +#define ATOMIC_SETH_BIT(REG, BIT) \ + do { \ + uint16_t val; \ + do { \ + val = __LDREXH((__IO uint16_t *)&(REG)) | (BIT); \ + } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \ + } while(0) + +/* Atomic 16-bit register access macro to clear one or several bits */ +#define ATOMIC_CLEARH_BIT(REG, BIT) \ + do { \ + uint16_t val; \ + do { \ + val = __LDREXH((__IO uint16_t *)&(REG)) & ~(BIT); \ + } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \ + } while(0) + +/* Atomic 16-bit register access macro to clear and set one or several bits */ +#define ATOMIC_MODIFYH_REG(REG, CLEARMSK, SETMASK) \ + do { \ + uint16_t val; \ + do { \ + val = (__LDREXH((__IO uint16_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \ + } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \ + } while(0) + +/** + * @} + */ + +#if defined (USE_HAL_DRIVER) + #include "stm32f3xx_hal.h" +#endif /* USE_HAL_DRIVER */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __STM32F3xx_H */ +/** + * @} + */ + +/** + * @} + */ + + + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/CMSIS/Device/ST/STM32F3xx/Include/system_stm32f3xx.h b/Software/Drivers/CMSIS/Device/ST/STM32F3xx/Include/system_stm32f3xx.h new file mode 100644 index 0000000..da544ae --- /dev/null +++ b/Software/Drivers/CMSIS/Device/ST/STM32F3xx/Include/system_stm32f3xx.h @@ -0,0 +1,106 @@ +/** + ****************************************************************************** + * @file system_stm32f3xx.h + * @author MCD Application Team + * @brief CMSIS Cortex-M4 Device System Source File for STM32F3xx devices. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f3xx_system + * @{ + */ + +/** + * @brief Define to prevent recursive inclusion + */ +#ifndef __SYSTEM_STM32F3XX_H +#define __SYSTEM_STM32F3XX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/** @addtogroup STM32F3xx_System_Includes + * @{ + */ + +/** + * @} + */ + + +/** @addtogroup STM32F3xx_System_Exported_types + * @{ + */ + /* This variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 3) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) by calling HAL API function HAL_RCC_ClockConfig() + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ +extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ +extern const uint8_t AHBPrescTable[16]; /*!< AHB prescalers table values */ +extern const uint8_t APBPrescTable[8]; /*!< APB prescalers table values */ + + +/** + * @} + */ + +/** @addtogroup STM32F3xx_System_Exported_Constants + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F3xx_System_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F3xx_System_Exported_Functions + * @{ + */ + +extern void SystemInit(void); +extern void SystemCoreClockUpdate(void); +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /*__SYSTEM_STM32F3XX_H */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/CMSIS/Device/ST/STM32F3xx/License.md b/Software/Drivers/CMSIS/Device/ST/STM32F3xx/License.md new file mode 100644 index 0000000..2d1eee1 --- /dev/null +++ b/Software/Drivers/CMSIS/Device/ST/STM32F3xx/License.md @@ -0,0 +1,83 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: +1.You must give any other recipients of the Work or Derivative Works a copy of this License; and +2.You must cause any modified files to carry prominent notices stating that You changed the files; and +3.You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and +4.If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: + + Copyright [2019] [STMicroelectronics] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Software/Drivers/CMSIS/Include/cmsis_armcc.h b/Software/Drivers/CMSIS/Include/cmsis_armcc.h new file mode 100644 index 0000000..7d751fb --- /dev/null +++ b/Software/Drivers/CMSIS/Include/cmsis_armcc.h @@ -0,0 +1,865 @@ +/**************************************************************************//** + * @file cmsis_armcc.h + * @brief CMSIS compiler ARMCC (Arm Compiler 5) header file + * @version V5.0.4 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_ARMCC_H +#define __CMSIS_ARMCC_H + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 400677) + #error "Please use Arm Compiler Toolchain V4.0.677 or later!" +#endif + +/* CMSIS compiler control architecture macros */ +#if ((defined (__TARGET_ARCH_6_M ) && (__TARGET_ARCH_6_M == 1)) || \ + (defined (__TARGET_ARCH_6S_M ) && (__TARGET_ARCH_6S_M == 1)) ) + #define __ARM_ARCH_6M__ 1 +#endif + +#if (defined (__TARGET_ARCH_7_M ) && (__TARGET_ARCH_7_M == 1)) + #define __ARM_ARCH_7M__ 1 +#endif + +#if (defined (__TARGET_ARCH_7E_M) && (__TARGET_ARCH_7E_M == 1)) + #define __ARM_ARCH_7EM__ 1 +#endif + + /* __ARM_ARCH_8M_BASE__ not applicable */ + /* __ARM_ARCH_8M_MAIN__ not applicable */ + + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE __inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static __inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE static __forceinline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __declspec(noreturn) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed)) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT __packed struct +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION __packed union +#endif +#ifndef __UNALIGNED_UINT32 /* deprecated */ + #define __UNALIGNED_UINT32(x) (*((__packed uint32_t *)(x))) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #define __UNALIGNED_UINT16_WRITE(addr, val) ((*((__packed uint16_t *)(addr))) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #define __UNALIGNED_UINT16_READ(addr) (*((const __packed uint16_t *)(addr))) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #define __UNALIGNED_UINT32_WRITE(addr, val) ((*((__packed uint32_t *)(addr))) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #define __UNALIGNED_UINT32_READ(addr) (*((const __packed uint32_t *)(addr))) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +/* intrinsic void __enable_irq(); */ + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +/* intrinsic void __disable_irq(); */ + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_INLINE uint32_t __get_CONTROL(void) +{ + register uint32_t __regControl __ASM("control"); + return(__regControl); +} + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + register uint32_t __regControl __ASM("control"); + __regControl = control; +} + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_INLINE uint32_t __get_IPSR(void) +{ + register uint32_t __regIPSR __ASM("ipsr"); + return(__regIPSR); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_INLINE uint32_t __get_APSR(void) +{ + register uint32_t __regAPSR __ASM("apsr"); + return(__regAPSR); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_INLINE uint32_t __get_xPSR(void) +{ + register uint32_t __regXPSR __ASM("xpsr"); + return(__regXPSR); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + return(__regProcessStackPointer); +} + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + __regProcessStackPointer = topOfProcStack; +} + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + return(__regMainStackPointer); +} + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + __regMainStackPointer = topOfMainStack; +} + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + register uint32_t __regPriMask __ASM("primask"); + return(__regPriMask); +} + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + register uint32_t __regPriMask __ASM("primask"); + __regPriMask = (priMask); +} + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __enable_fault_irq __enable_fiq + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __disable_fault_irq __disable_fiq + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + register uint32_t __regBasePri __ASM("basepri"); + return(__regBasePri); +} + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) +{ + register uint32_t __regBasePri __ASM("basepri"); + __regBasePri = (basePri & 0xFFU); +} + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + register uint32_t __regBasePriMax __ASM("basepri_max"); + __regBasePriMax = (basePri & 0xFFU); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + return(__regFaultMask); +} + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + __regFaultMask = (faultMask & (uint32_t)1U); +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ + + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +__STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) + register uint32_t __regfpscr __ASM("fpscr"); + return(__regfpscr); +#else + return(0U); +#endif +} + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) + register uint32_t __regfpscr __ASM("fpscr"); + __regfpscr = (fpscr); +#else + (void)fpscr; +#endif +} + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __nop + + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI __wfi + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __wfe + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __sev + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +#define __ISB() do {\ + __schedule_barrier();\ + __isb(0xF);\ + __schedule_barrier();\ + } while (0U) + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() do {\ + __schedule_barrier();\ + __dsb(0xF);\ + __schedule_barrier();\ + } while (0U) + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() do {\ + __schedule_barrier();\ + __dmb(0xF);\ + __schedule_barrier();\ + } while (0U) + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV __rev + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) +{ + rev16 r0, r0 + bx lr +} +#endif + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int16_t __REVSH(int16_t value) +{ + revsh r0, r0 + bx lr +} +#endif + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +#define __ROR __ror + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __breakpoint(value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + #define __RBIT __rbit +#else +__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ + + result = value; /* r will be reversed bits of v; first get LSB of v */ + for (value >>= 1U; value != 0U; value >>= 1U) + { + result <<= 1U; + result |= value & 1U; + s--; + } + result <<= s; /* shift when v's highest bits are zero */ + return result; +} +#endif + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ __clz + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) +#else + #define __LDREXB(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint8_t ) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) +#else + #define __LDREXH(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint16_t) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) +#else + #define __LDREXW(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint32_t ) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXB(value, ptr) __strex(value, ptr) +#else + #define __STREXB(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXH(value, ptr) __strex(value, ptr) +#else + #define __STREXH(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXW(value, ptr) __strex(value, ptr) +#else + #define __STREXW(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __clrex + + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __ssat + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __usat + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value) +{ + rrx r0, r0 + bx lr +} +#endif + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDRBT(ptr) ((uint8_t ) __ldrt(ptr)) + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDRHT(ptr) ((uint16_t) __ldrt(ptr)) + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDRT(ptr) ((uint32_t ) __ldrt(ptr)) + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRBT(value, ptr) __strt(value, ptr) + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRHT(value, ptr) __strt(value, ptr) + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRT(value, ptr) __strt(value, ptr) + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + +#define __SADD8 __sadd8 +#define __QADD8 __qadd8 +#define __SHADD8 __shadd8 +#define __UADD8 __uadd8 +#define __UQADD8 __uqadd8 +#define __UHADD8 __uhadd8 +#define __SSUB8 __ssub8 +#define __QSUB8 __qsub8 +#define __SHSUB8 __shsub8 +#define __USUB8 __usub8 +#define __UQSUB8 __uqsub8 +#define __UHSUB8 __uhsub8 +#define __SADD16 __sadd16 +#define __QADD16 __qadd16 +#define __SHADD16 __shadd16 +#define __UADD16 __uadd16 +#define __UQADD16 __uqadd16 +#define __UHADD16 __uhadd16 +#define __SSUB16 __ssub16 +#define __QSUB16 __qsub16 +#define __SHSUB16 __shsub16 +#define __USUB16 __usub16 +#define __UQSUB16 __uqsub16 +#define __UHSUB16 __uhsub16 +#define __SASX __sasx +#define __QASX __qasx +#define __SHASX __shasx +#define __UASX __uasx +#define __UQASX __uqasx +#define __UHASX __uhasx +#define __SSAX __ssax +#define __QSAX __qsax +#define __SHSAX __shsax +#define __USAX __usax +#define __UQSAX __uqsax +#define __UHSAX __uhsax +#define __USAD8 __usad8 +#define __USADA8 __usada8 +#define __SSAT16 __ssat16 +#define __USAT16 __usat16 +#define __UXTB16 __uxtb16 +#define __UXTAB16 __uxtab16 +#define __SXTB16 __sxtb16 +#define __SXTAB16 __sxtab16 +#define __SMUAD __smuad +#define __SMUADX __smuadx +#define __SMLAD __smlad +#define __SMLADX __smladx +#define __SMLALD __smlald +#define __SMLALDX __smlaldx +#define __SMUSD __smusd +#define __SMUSDX __smusdx +#define __SMLSD __smlsd +#define __SMLSDX __smlsdx +#define __SMLSLD __smlsld +#define __SMLSLDX __smlsldx +#define __SEL __sel +#define __QADD __qadd +#define __QSUB __qsub + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +#define __SMMLA(ARG1,ARG2,ARG3) ( (int32_t)((((int64_t)(ARG1) * (ARG2)) + \ + ((int64_t)(ARG3) << 32U) ) >> 32U)) + +#endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_ARMCC_H */ diff --git a/Software/Drivers/CMSIS/Include/cmsis_armclang.h b/Software/Drivers/CMSIS/Include/cmsis_armclang.h new file mode 100644 index 0000000..d8031b0 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/cmsis_armclang.h @@ -0,0 +1,1869 @@ +/**************************************************************************//** + * @file cmsis_armclang.h + * @brief CMSIS compiler armclang (Arm Compiler 6) header file + * @version V5.0.4 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ + +#ifndef __CMSIS_ARMCLANG_H +#define __CMSIS_ARMCLANG_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __ARM_COMPAT_H +#include /* Compatibility header for Arm Compiler 5 intrinsics */ +#endif + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE __inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static __inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT32 /* deprecated */ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +/* intrinsic void __enable_irq(); see arm_compat.h */ + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +/* intrinsic void __disable_irq(); see arm_compat.h */ + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __enable_fault_irq __enable_fiq /* see arm_compat.h */ + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __disable_fault_irq __disable_fiq /* see arm_compat.h */ + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + +/** + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return result; +#endif +} + +#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return result; +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr +#else +#define __get_FPSCR() ((uint32_t)0U) +#endif + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#define __set_FPSCR __builtin_arm_set_fpscr +#else +#define __set_FPSCR(x) ((void)(x)) +#endif + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __builtin_arm_nop + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI __builtin_arm_wfi + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __builtin_arm_wfe + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __builtin_arm_sev + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +#define __ISB() __builtin_arm_isb(0xF); + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __builtin_arm_dsb(0xF); + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __builtin_arm_dmb(0xF); + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV(value) __builtin_bswap32(value) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV16(value) __ROR(__REV(value), 16) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REVSH(value) (int16_t)__builtin_bswap16(value) + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT __builtin_arm_rbit + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ (uint8_t)__builtin_clz + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDREXB (uint8_t)__builtin_arm_ldrex + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDREXH (uint16_t)__builtin_arm_ldrex + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDREXW (uint32_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB (uint32_t)__builtin_arm_strex + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXH (uint32_t)__builtin_arm_strex + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXW (uint32_t)__builtin_arm_strex + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __builtin_arm_clrex + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __builtin_arm_ssat + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __builtin_arm_usat + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDAEXB (uint8_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDAEXH (uint16_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDAEX (uint32_t)__builtin_arm_ldaex + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXB (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXH (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEX (uint32_t)__builtin_arm_stlex + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + +__STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SSAT16(ARG1,ARG2) \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +#define __USAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint32_t __SEL (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QADD( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +#if 0 +#define __PKHBT(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) +#endif + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#endif /* (__ARM_FEATURE_DSP == 1) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_ARMCLANG_H */ diff --git a/Software/Drivers/CMSIS/Include/cmsis_compiler.h b/Software/Drivers/CMSIS/Include/cmsis_compiler.h new file mode 100644 index 0000000..79a2cac --- /dev/null +++ b/Software/Drivers/CMSIS/Include/cmsis_compiler.h @@ -0,0 +1,266 @@ +/**************************************************************************//** + * @file cmsis_compiler.h + * @brief CMSIS compiler generic header file + * @version V5.0.4 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_COMPILER_H +#define __CMSIS_COMPILER_H + +#include + +/* + * Arm Compiler 4/5 + */ +#if defined ( __CC_ARM ) + #include "cmsis_armcc.h" + + +/* + * Arm Compiler 6 (armclang) + */ +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #include "cmsis_armclang.h" + + +/* + * GNU Compiler + */ +#elif defined ( __GNUC__ ) + #include "cmsis_gcc.h" + + +/* + * IAR Compiler + */ +#elif defined ( __ICCARM__ ) + #include + + +/* + * TI Arm Compiler + */ +#elif defined ( __TI_ARM__ ) + #include + + #ifndef __ASM + #define __ASM __asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + #define __NO_RETURN __attribute__((noreturn)) + #endif + #ifndef __USED + #define __USED __attribute__((used)) + #endif + #ifndef __WEAK + #define __WEAK __attribute__((weak)) + #endif + #ifndef __PACKED + #define __PACKED __attribute__((packed)) + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed)) + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed)) + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + + +/* + * TASKING Compiler + */ +#elif defined ( __TASKING__ ) + /* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + + #ifndef __ASM + #define __ASM __asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + #define __NO_RETURN __attribute__((noreturn)) + #endif + #ifndef __USED + #define __USED __attribute__((used)) + #endif + #ifndef __WEAK + #define __WEAK __attribute__((weak)) + #endif + #ifndef __PACKED + #define __PACKED __packed__ + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __packed__ + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION union __packed__ + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + struct __packed__ T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #define __ALIGNED(x) __align(x) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + + +/* + * COSMIC Compiler + */ +#elif defined ( __CSMC__ ) + #include + + #ifndef __ASM + #define __ASM _asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + // NO RETURN is automatically detected hence no warning here + #define __NO_RETURN + #endif + #ifndef __USED + #warning No compiler specific solution for __USED. __USED is ignored. + #define __USED + #endif + #ifndef __WEAK + #define __WEAK __weak + #endif + #ifndef __PACKED + #define __PACKED @packed + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT @packed struct + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION @packed union + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + @packed struct T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored. + #define __ALIGNED(x) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + + +#else + #error Unknown compiler. +#endif + + +#endif /* __CMSIS_COMPILER_H */ + diff --git a/Software/Drivers/CMSIS/Include/cmsis_gcc.h b/Software/Drivers/CMSIS/Include/cmsis_gcc.h new file mode 100644 index 0000000..1bd41a4 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/cmsis_gcc.h @@ -0,0 +1,2085 @@ +/**************************************************************************//** + * @file cmsis_gcc.h + * @brief CMSIS compiler GCC header file + * @version V5.0.4 + * @date 09. April 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_GCC_H +#define __CMSIS_GCC_H + +/* ignore some GCC warnings */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +/* Fallback for __has_builtin */ +#ifndef __has_builtin + #define __has_builtin(x) (0) +#endif + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT32 /* deprecated */ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) :: "memory"); + return(result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + +/** + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return result; +#endif +} + +#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return result; +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#if __has_builtin(__builtin_arm_get_fpscr) +// Re-enable using built-in when GCC has been fixed +// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) + /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ + return __builtin_arm_get_fpscr(); +#else + uint32_t result; + + __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); + return(result); +#endif +#else + return(0U); +#endif +} + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#if __has_builtin(__builtin_arm_set_fpscr) +// Re-enable using built-in when GCC has been fixed +// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) + /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ + __builtin_arm_set_fpscr(fpscr); +#else + __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc", "memory"); +#endif +#else + (void)fpscr; +#endif +} + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_RW_REG(r) "+l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_RW_REG(r) "+r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP() __ASM volatile ("nop") + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI() __ASM volatile ("wfi") + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE() __ASM volatile ("wfe") + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV() __ASM volatile ("sev") + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +__STATIC_FORCEINLINE void __ISB(void) +{ + __ASM volatile ("isb 0xF":::"memory"); +} + + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__STATIC_FORCEINLINE void __DSB(void) +{ + __ASM volatile ("dsb 0xF":::"memory"); +} + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +__STATIC_FORCEINLINE void __DMB(void) +{ + __ASM volatile ("dmb 0xF":::"memory"); +} + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __REV(uint32_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) + return __builtin_bswap32(value); +#else + uint32_t result; + + __ASM volatile ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; +#endif +} + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; +} + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE int16_t __REVSH(int16_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + return (int16_t)__builtin_bswap16(value); +#else + int16_t result; + + __ASM volatile ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; +#endif +} + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) + __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); +#else + uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ + + result = value; /* r will be reversed bits of v; first get LSB of v */ + for (value >>= 1U; value != 0U; value >>= 1U) + { + result <<= 1U; + result |= value & 1U; + s--; + } + result <<= s; /* shift when v's highest bits are zero */ +#endif + return result; +} + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ (uint8_t)__builtin_clz + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDREXB(volatile uint8_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDREXH(volatile uint16_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + return(result); +} + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + return(result); +} + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +__STATIC_FORCEINLINE void __CLREX(void) +{ + __ASM volatile ("clrex" ::: "memory"); +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] ARG1 Value to be saturated + \param [in] ARG2 Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(ARG1,ARG2) \ +__extension__ \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] ARG1 Value to be saturated + \param [in] ARG2 Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(ARG1,ARG2) \ + __extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrbt %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrht %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); + return(result); +} + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + +__STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SSAT16(ARG1,ARG2) \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +#define __USAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint32_t __SEL (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QADD( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +#if 0 +#define __PKHBT(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) +#endif + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#endif /* (__ARM_FEATURE_DSP == 1) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#pragma GCC diagnostic pop + +#endif /* __CMSIS_GCC_H */ diff --git a/Software/Drivers/CMSIS/Include/cmsis_iccarm.h b/Software/Drivers/CMSIS/Include/cmsis_iccarm.h new file mode 100644 index 0000000..3c90a2c --- /dev/null +++ b/Software/Drivers/CMSIS/Include/cmsis_iccarm.h @@ -0,0 +1,935 @@ +/**************************************************************************//** + * @file cmsis_iccarm.h + * @brief CMSIS compiler ICCARM (IAR Compiler for Arm) header file + * @version V5.0.7 + * @date 19. June 2018 + ******************************************************************************/ + +//------------------------------------------------------------------------------ +// +// Copyright (c) 2017-2018 IAR Systems +// +// Licensed under the Apache License, Version 2.0 (the "License") +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//------------------------------------------------------------------------------ + + +#ifndef __CMSIS_ICCARM_H__ +#define __CMSIS_ICCARM_H__ + +#ifndef __ICCARM__ + #error This file should only be compiled by ICCARM +#endif + +#pragma system_include + +#define __IAR_FT _Pragma("inline=forced") __intrinsic + +#if (__VER__ >= 8000000) + #define __ICCARM_V8 1 +#else + #define __ICCARM_V8 0 +#endif + +#ifndef __ALIGNED + #if __ICCARM_V8 + #define __ALIGNED(x) __attribute__((aligned(x))) + #elif (__VER__ >= 7080000) + /* Needs IAR language extensions */ + #define __ALIGNED(x) __attribute__((aligned(x))) + #else + #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored. + #define __ALIGNED(x) + #endif +#endif + + +/* Define compiler macros for CPU architecture, used in CMSIS 5. + */ +#if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ || __ARM_ARCH_8M_BASE__ || __ARM_ARCH_8M_MAIN__ +/* Macros already defined */ +#else + #if defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8M_BASELINE__) + #define __ARM_ARCH_8M_BASE__ 1 + #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M' + #if __ARM_ARCH == 6 + #define __ARM_ARCH_6M__ 1 + #elif __ARM_ARCH == 7 + #if __ARM_FEATURE_DSP + #define __ARM_ARCH_7EM__ 1 + #else + #define __ARM_ARCH_7M__ 1 + #endif + #endif /* __ARM_ARCH */ + #endif /* __ARM_ARCH_PROFILE == 'M' */ +#endif + +/* Alternativ core deduction for older ICCARM's */ +#if !defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7EM__) && \ + !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__) + #if defined(__ARM6M__) && (__CORE__ == __ARM6M__) + #define __ARM_ARCH_6M__ 1 + #elif defined(__ARM7M__) && (__CORE__ == __ARM7M__) + #define __ARM_ARCH_7M__ 1 + #elif defined(__ARM7EM__) && (__CORE__ == __ARM7EM__) + #define __ARM_ARCH_7EM__ 1 + #elif defined(__ARM8M_BASELINE__) && (__CORE == __ARM8M_BASELINE__) + #define __ARM_ARCH_8M_BASE__ 1 + #elif defined(__ARM8M_MAINLINE__) && (__CORE == __ARM8M_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8EM_MAINLINE__) && (__CORE == __ARM8EM_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #else + #error "Unknown target." + #endif +#endif + + + +#if defined(__ARM_ARCH_6M__) && __ARM_ARCH_6M__==1 + #define __IAR_M0_FAMILY 1 +#elif defined(__ARM_ARCH_8M_BASE__) && __ARM_ARCH_8M_BASE__==1 + #define __IAR_M0_FAMILY 1 +#else + #define __IAR_M0_FAMILY 0 +#endif + + +#ifndef __ASM + #define __ASM __asm +#endif + +#ifndef __INLINE + #define __INLINE inline +#endif + +#ifndef __NO_RETURN + #if __ICCARM_V8 + #define __NO_RETURN __attribute__((__noreturn__)) + #else + #define __NO_RETURN _Pragma("object_attribute=__noreturn") + #endif +#endif + +#ifndef __PACKED + #if __ICCARM_V8 + #define __PACKED __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED __packed + #endif +#endif + +#ifndef __PACKED_STRUCT + #if __ICCARM_V8 + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_STRUCT __packed struct + #endif +#endif + +#ifndef __PACKED_UNION + #if __ICCARM_V8 + #define __PACKED_UNION union __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_UNION __packed union + #endif +#endif + +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif + +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif + +#ifndef __FORCEINLINE + #define __FORCEINLINE _Pragma("inline=forced") +#endif + +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE +#endif + +#ifndef __UNALIGNED_UINT16_READ +#pragma language=save +#pragma language=extended +__IAR_FT uint16_t __iar_uint16_read(void const *ptr) +{ + return *(__packed uint16_t*)(ptr); +} +#pragma language=restore +#define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR) +#endif + + +#ifndef __UNALIGNED_UINT16_WRITE +#pragma language=save +#pragma language=extended +__IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) +{ + *(__packed uint16_t*)(ptr) = val;; +} +#pragma language=restore +#define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32_READ +#pragma language=save +#pragma language=extended +__IAR_FT uint32_t __iar_uint32_read(void const *ptr) +{ + return *(__packed uint32_t*)(ptr); +} +#pragma language=restore +#define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR) +#endif + +#ifndef __UNALIGNED_UINT32_WRITE +#pragma language=save +#pragma language=extended +__IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) +{ + *(__packed uint32_t*)(ptr) = val;; +} +#pragma language=restore +#define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32 /* deprecated */ +#pragma language=save +#pragma language=extended +__packed struct __iar_u32 { uint32_t v; }; +#pragma language=restore +#define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v) +#endif + +#ifndef __USED + #if __ICCARM_V8 + #define __USED __attribute__((used)) + #else + #define __USED _Pragma("__root") + #endif +#endif + +#ifndef __WEAK + #if __ICCARM_V8 + #define __WEAK __attribute__((weak)) + #else + #define __WEAK _Pragma("__weak") + #endif +#endif + + +#ifndef __ICCARM_INTRINSICS_VERSION__ + #define __ICCARM_INTRINSICS_VERSION__ 0 +#endif + +#if __ICCARM_INTRINSICS_VERSION__ == 2 + + #if defined(__CLZ) + #undef __CLZ + #endif + #if defined(__REVSH) + #undef __REVSH + #endif + #if defined(__RBIT) + #undef __RBIT + #endif + #if defined(__SSAT) + #undef __SSAT + #endif + #if defined(__USAT) + #undef __USAT + #endif + + #include "iccarm_builtin.h" + + #define __disable_fault_irq __iar_builtin_disable_fiq + #define __disable_irq __iar_builtin_disable_interrupt + #define __enable_fault_irq __iar_builtin_enable_fiq + #define __enable_irq __iar_builtin_enable_interrupt + #define __arm_rsr __iar_builtin_rsr + #define __arm_wsr __iar_builtin_wsr + + + #define __get_APSR() (__arm_rsr("APSR")) + #define __get_BASEPRI() (__arm_rsr("BASEPRI")) + #define __get_CONTROL() (__arm_rsr("CONTROL")) + #define __get_FAULTMASK() (__arm_rsr("FAULTMASK")) + + #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) + #define __get_FPSCR() (__arm_rsr("FPSCR")) + #define __set_FPSCR(VALUE) (__arm_wsr("FPSCR", (VALUE))) + #else + #define __get_FPSCR() ( 0 ) + #define __set_FPSCR(VALUE) ((void)VALUE) + #endif + + #define __get_IPSR() (__arm_rsr("IPSR")) + #define __get_MSP() (__arm_rsr("MSP")) + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + #define __get_MSPLIM() (0U) + #else + #define __get_MSPLIM() (__arm_rsr("MSPLIM")) + #endif + #define __get_PRIMASK() (__arm_rsr("PRIMASK")) + #define __get_PSP() (__arm_rsr("PSP")) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __get_PSPLIM() (0U) + #else + #define __get_PSPLIM() (__arm_rsr("PSPLIM")) + #endif + + #define __get_xPSR() (__arm_rsr("xPSR")) + + #define __set_BASEPRI(VALUE) (__arm_wsr("BASEPRI", (VALUE))) + #define __set_BASEPRI_MAX(VALUE) (__arm_wsr("BASEPRI_MAX", (VALUE))) + #define __set_CONTROL(VALUE) (__arm_wsr("CONTROL", (VALUE))) + #define __set_FAULTMASK(VALUE) (__arm_wsr("FAULTMASK", (VALUE))) + #define __set_MSP(VALUE) (__arm_wsr("MSP", (VALUE))) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + #define __set_MSPLIM(VALUE) ((void)(VALUE)) + #else + #define __set_MSPLIM(VALUE) (__arm_wsr("MSPLIM", (VALUE))) + #endif + #define __set_PRIMASK(VALUE) (__arm_wsr("PRIMASK", (VALUE))) + #define __set_PSP(VALUE) (__arm_wsr("PSP", (VALUE))) + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __set_PSPLIM(VALUE) ((void)(VALUE)) + #else + #define __set_PSPLIM(VALUE) (__arm_wsr("PSPLIM", (VALUE))) + #endif + + #define __TZ_get_CONTROL_NS() (__arm_rsr("CONTROL_NS")) + #define __TZ_set_CONTROL_NS(VALUE) (__arm_wsr("CONTROL_NS", (VALUE))) + #define __TZ_get_PSP_NS() (__arm_rsr("PSP_NS")) + #define __TZ_set_PSP_NS(VALUE) (__arm_wsr("PSP_NS", (VALUE))) + #define __TZ_get_MSP_NS() (__arm_rsr("MSP_NS")) + #define __TZ_set_MSP_NS(VALUE) (__arm_wsr("MSP_NS", (VALUE))) + #define __TZ_get_SP_NS() (__arm_rsr("SP_NS")) + #define __TZ_set_SP_NS(VALUE) (__arm_wsr("SP_NS", (VALUE))) + #define __TZ_get_PRIMASK_NS() (__arm_rsr("PRIMASK_NS")) + #define __TZ_set_PRIMASK_NS(VALUE) (__arm_wsr("PRIMASK_NS", (VALUE))) + #define __TZ_get_BASEPRI_NS() (__arm_rsr("BASEPRI_NS")) + #define __TZ_set_BASEPRI_NS(VALUE) (__arm_wsr("BASEPRI_NS", (VALUE))) + #define __TZ_get_FAULTMASK_NS() (__arm_rsr("FAULTMASK_NS")) + #define __TZ_set_FAULTMASK_NS(VALUE)(__arm_wsr("FAULTMASK_NS", (VALUE))) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __TZ_get_PSPLIM_NS() (0U) + #define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE)) + #else + #define __TZ_get_PSPLIM_NS() (__arm_rsr("PSPLIM_NS")) + #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE))) + #endif + + #define __TZ_get_MSPLIM_NS() (__arm_rsr("MSPLIM_NS")) + #define __TZ_set_MSPLIM_NS(VALUE) (__arm_wsr("MSPLIM_NS", (VALUE))) + + #define __NOP __iar_builtin_no_operation + + #define __CLZ __iar_builtin_CLZ + #define __CLREX __iar_builtin_CLREX + + #define __DMB __iar_builtin_DMB + #define __DSB __iar_builtin_DSB + #define __ISB __iar_builtin_ISB + + #define __LDREXB __iar_builtin_LDREXB + #define __LDREXH __iar_builtin_LDREXH + #define __LDREXW __iar_builtin_LDREX + + #define __RBIT __iar_builtin_RBIT + #define __REV __iar_builtin_REV + #define __REV16 __iar_builtin_REV16 + + __IAR_FT int16_t __REVSH(int16_t val) + { + return (int16_t) __iar_builtin_REVSH(val); + } + + #define __ROR __iar_builtin_ROR + #define __RRX __iar_builtin_RRX + + #define __SEV __iar_builtin_SEV + + #if !__IAR_M0_FAMILY + #define __SSAT __iar_builtin_SSAT + #endif + + #define __STREXB __iar_builtin_STREXB + #define __STREXH __iar_builtin_STREXH + #define __STREXW __iar_builtin_STREX + + #if !__IAR_M0_FAMILY + #define __USAT __iar_builtin_USAT + #endif + + #define __WFE __iar_builtin_WFE + #define __WFI __iar_builtin_WFI + + #if __ARM_MEDIA__ + #define __SADD8 __iar_builtin_SADD8 + #define __QADD8 __iar_builtin_QADD8 + #define __SHADD8 __iar_builtin_SHADD8 + #define __UADD8 __iar_builtin_UADD8 + #define __UQADD8 __iar_builtin_UQADD8 + #define __UHADD8 __iar_builtin_UHADD8 + #define __SSUB8 __iar_builtin_SSUB8 + #define __QSUB8 __iar_builtin_QSUB8 + #define __SHSUB8 __iar_builtin_SHSUB8 + #define __USUB8 __iar_builtin_USUB8 + #define __UQSUB8 __iar_builtin_UQSUB8 + #define __UHSUB8 __iar_builtin_UHSUB8 + #define __SADD16 __iar_builtin_SADD16 + #define __QADD16 __iar_builtin_QADD16 + #define __SHADD16 __iar_builtin_SHADD16 + #define __UADD16 __iar_builtin_UADD16 + #define __UQADD16 __iar_builtin_UQADD16 + #define __UHADD16 __iar_builtin_UHADD16 + #define __SSUB16 __iar_builtin_SSUB16 + #define __QSUB16 __iar_builtin_QSUB16 + #define __SHSUB16 __iar_builtin_SHSUB16 + #define __USUB16 __iar_builtin_USUB16 + #define __UQSUB16 __iar_builtin_UQSUB16 + #define __UHSUB16 __iar_builtin_UHSUB16 + #define __SASX __iar_builtin_SASX + #define __QASX __iar_builtin_QASX + #define __SHASX __iar_builtin_SHASX + #define __UASX __iar_builtin_UASX + #define __UQASX __iar_builtin_UQASX + #define __UHASX __iar_builtin_UHASX + #define __SSAX __iar_builtin_SSAX + #define __QSAX __iar_builtin_QSAX + #define __SHSAX __iar_builtin_SHSAX + #define __USAX __iar_builtin_USAX + #define __UQSAX __iar_builtin_UQSAX + #define __UHSAX __iar_builtin_UHSAX + #define __USAD8 __iar_builtin_USAD8 + #define __USADA8 __iar_builtin_USADA8 + #define __SSAT16 __iar_builtin_SSAT16 + #define __USAT16 __iar_builtin_USAT16 + #define __UXTB16 __iar_builtin_UXTB16 + #define __UXTAB16 __iar_builtin_UXTAB16 + #define __SXTB16 __iar_builtin_SXTB16 + #define __SXTAB16 __iar_builtin_SXTAB16 + #define __SMUAD __iar_builtin_SMUAD + #define __SMUADX __iar_builtin_SMUADX + #define __SMMLA __iar_builtin_SMMLA + #define __SMLAD __iar_builtin_SMLAD + #define __SMLADX __iar_builtin_SMLADX + #define __SMLALD __iar_builtin_SMLALD + #define __SMLALDX __iar_builtin_SMLALDX + #define __SMUSD __iar_builtin_SMUSD + #define __SMUSDX __iar_builtin_SMUSDX + #define __SMLSD __iar_builtin_SMLSD + #define __SMLSDX __iar_builtin_SMLSDX + #define __SMLSLD __iar_builtin_SMLSLD + #define __SMLSLDX __iar_builtin_SMLSLDX + #define __SEL __iar_builtin_SEL + #define __QADD __iar_builtin_QADD + #define __QSUB __iar_builtin_QSUB + #define __PKHBT __iar_builtin_PKHBT + #define __PKHTB __iar_builtin_PKHTB + #endif + +#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + + #if __IAR_M0_FAMILY + /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ + #define __CLZ __cmsis_iar_clz_not_active + #define __SSAT __cmsis_iar_ssat_not_active + #define __USAT __cmsis_iar_usat_not_active + #define __RBIT __cmsis_iar_rbit_not_active + #define __get_APSR __cmsis_iar_get_APSR_not_active + #endif + + + #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) + #define __get_FPSCR __cmsis_iar_get_FPSR_not_active + #define __set_FPSCR __cmsis_iar_set_FPSR_not_active + #endif + + #ifdef __INTRINSICS_INCLUDED + #error intrinsics.h is already included previously! + #endif + + #include + + #if __IAR_M0_FAMILY + /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ + #undef __CLZ + #undef __SSAT + #undef __USAT + #undef __RBIT + #undef __get_APSR + + __STATIC_INLINE uint8_t __CLZ(uint32_t data) + { + if (data == 0U) { return 32U; } + + uint32_t count = 0U; + uint32_t mask = 0x80000000U; + + while ((data & mask) == 0U) + { + count += 1U; + mask = mask >> 1U; + } + return count; + } + + __STATIC_INLINE uint32_t __RBIT(uint32_t v) + { + uint8_t sc = 31U; + uint32_t r = v; + for (v >>= 1U; v; v >>= 1U) + { + r <<= 1U; + r |= v & 1U; + sc--; + } + return (r << sc); + } + + __STATIC_INLINE uint32_t __get_APSR(void) + { + uint32_t res; + __asm("MRS %0,APSR" : "=r" (res)); + return res; + } + + #endif + + #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) + #undef __get_FPSCR + #undef __set_FPSCR + #define __get_FPSCR() (0) + #define __set_FPSCR(VALUE) ((void)VALUE) + #endif + + #pragma diag_suppress=Pe940 + #pragma diag_suppress=Pe177 + + #define __enable_irq __enable_interrupt + #define __disable_irq __disable_interrupt + #define __NOP __no_operation + + #define __get_xPSR __get_PSR + + #if (!defined(__ARM_ARCH_6M__) || __ARM_ARCH_6M__==0) + + __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) + { + return __LDREX((unsigned long *)ptr); + } + + __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) + { + return __STREX(value, (unsigned long *)ptr); + } + #endif + + + /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ + #if (__CORTEX_M >= 0x03) + + __IAR_FT uint32_t __RRX(uint32_t value) + { + uint32_t result; + __ASM("RRX %0, %1" : "=r"(result) : "r" (value) : "cc"); + return(result); + } + + __IAR_FT void __set_BASEPRI_MAX(uint32_t value) + { + __asm volatile("MSR BASEPRI_MAX,%0"::"r" (value)); + } + + + #define __enable_fault_irq __enable_fiq + #define __disable_fault_irq __disable_fiq + + + #endif /* (__CORTEX_M >= 0x03) */ + + __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) + { + return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2)); + } + + #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + + __IAR_FT uint32_t __get_MSPLIM(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,MSPLIM" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __set_MSPLIM(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR MSPLIM,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __get_PSPLIM(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,PSPLIM" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __set_PSPLIM(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR PSPLIM,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __TZ_get_CONTROL_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,CONTROL_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_CONTROL_NS(uint32_t value) + { + __asm volatile("MSR CONTROL_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PSP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,PSP_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_PSP_NS(uint32_t value) + { + __asm volatile("MSR PSP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_MSP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,MSP_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_MSP_NS(uint32_t value) + { + __asm volatile("MSR MSP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_SP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,SP_NS" : "=r" (res)); + return res; + } + __IAR_FT void __TZ_set_SP_NS(uint32_t value) + { + __asm volatile("MSR SP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PRIMASK_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,PRIMASK_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_PRIMASK_NS(uint32_t value) + { + __asm volatile("MSR PRIMASK_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_BASEPRI_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,BASEPRI_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_BASEPRI_NS(uint32_t value) + { + __asm volatile("MSR BASEPRI_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_FAULTMASK_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,FAULTMASK_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_FAULTMASK_NS(uint32_t value) + { + __asm volatile("MSR FAULTMASK_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PSPLIM_NS(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,PSPLIM_NS" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __TZ_set_PSPLIM_NS(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR PSPLIM_NS,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __TZ_get_MSPLIM_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,MSPLIM_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_MSPLIM_NS(uint32_t value) + { + __asm volatile("MSR MSPLIM_NS,%0" :: "r" (value)); + } + + #endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ + +#endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + +#define __BKPT(value) __asm volatile ("BKPT %0" : : "i"(value)) + +#if __IAR_M0_FAMILY + __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) + { + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; + } + + __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) + { + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; + } +#endif + +#if (__CORTEX_M >= 0x03) /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ + + __IAR_FT uint8_t __LDRBT(volatile uint8_t *addr) + { + uint32_t res; + __ASM("LDRBT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDRHT(volatile uint16_t *addr) + { + uint32_t res; + __ASM("LDRHT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDRT(volatile uint32_t *addr) + { + uint32_t res; + __ASM("LDRT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return res; + } + + __IAR_FT void __STRBT(uint8_t value, volatile uint8_t *addr) + { + __ASM("STRBT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); + } + + __IAR_FT void __STRHT(uint16_t value, volatile uint16_t *addr) + { + __ASM("STRHT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); + } + + __IAR_FT void __STRT(uint32_t value, volatile uint32_t *addr) + { + __ASM("STRT %1, [%0]" : : "r" (addr), "r" (value) : "memory"); + } + +#endif /* (__CORTEX_M >= 0x03) */ + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + + + __IAR_FT uint8_t __LDAB(volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDAH(volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDA(volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return res; + } + + __IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr) + { + __ASM volatile ("STLB %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr) + { + __ASM volatile ("STLH %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr) + { + __ASM volatile ("STL %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEXB %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEXH %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEX %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + +#endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ + +#undef __IAR_FT +#undef __IAR_M0_FAMILY +#undef __ICCARM_V8 + +#pragma diag_default=Pe940 +#pragma diag_default=Pe177 + +#endif /* __CMSIS_ICCARM_H__ */ diff --git a/Software/Drivers/CMSIS/Include/cmsis_version.h b/Software/Drivers/CMSIS/Include/cmsis_version.h new file mode 100644 index 0000000..ae3f2e3 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/cmsis_version.h @@ -0,0 +1,39 @@ +/**************************************************************************//** + * @file cmsis_version.h + * @brief CMSIS Core(M) Version definitions + * @version V5.0.2 + * @date 19. April 2017 + ******************************************************************************/ +/* + * Copyright (c) 2009-2017 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CMSIS_VERSION_H +#define __CMSIS_VERSION_H + +/* CMSIS Version definitions */ +#define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */ +#define __CM_CMSIS_VERSION_SUB ( 1U) /*!< [15:0] CMSIS Core(M) sub version */ +#define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \ + __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */ +#endif diff --git a/Software/Drivers/CMSIS/Include/core_armv8mbl.h b/Software/Drivers/CMSIS/Include/core_armv8mbl.h new file mode 100644 index 0000000..ec76ab2 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/core_armv8mbl.h @@ -0,0 +1,1918 @@ +/**************************************************************************//** + * @file core_armv8mbl.h + * @brief CMSIS Armv8-M Baseline Core Peripheral Access Layer Header File + * @version V5.0.7 + * @date 22. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_ARMV8MBL_H_GENERIC +#define __CORE_ARMV8MBL_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_ARMv8MBL + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS definitions */ +#define __ARMv8MBL_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __ARMv8MBL_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __ARMv8MBL_CMSIS_VERSION ((__ARMv8MBL_CMSIS_VERSION_MAIN << 16U) | \ + __ARMv8MBL_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M ( 2U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MBL_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_ARMV8MBL_H_DEPENDANT +#define __CORE_ARMV8MBL_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __ARMv8MBL_REV + #define __ARMv8MBL_REV 0x0000U + #warning "__ARMv8MBL_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif + + #ifndef __ETM_PRESENT + #define __ETM_PRESENT 0U + #warning "__ETM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MTB_PRESENT + #define __MTB_PRESENT 0U + #warning "__MTB_PRESENT not defined in device header file; using default!" + #endif + +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group ARMv8MBL */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint32_t IPR[124U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + uint32_t RESERVED0[6U]; + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[809U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Software Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Software Lock Status Register */ + uint32_t RESERVED4[4U]; + __IM uint32_t TYPE; /*!< Offset: 0xFC8 (R/ ) Device Identifier Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_SWOSCALER_Pos 0U /*!< TPI ACPR: SWOSCALER Position */ +#define TPI_ACPR_SWOSCALER_Msk (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/) /*!< TPI ACPR: SWOSCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI Periodic Synchronization Control Register Definitions */ +#define TPI_PSCR_PSCount_Pos 0U /*!< TPI PSCR: PSCount Position */ +#define TPI_PSCR_PSCount_Msk (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/) /*!< TPI PSCR: TPSCount Mask */ + +/* TPI Software Lock Status Register Definitions */ +#define TPI_LSR_nTT_Pos 1U /*!< TPI LSR: Not thirty-two bit. Position */ +#define TPI_LSR_nTT_Msk (0x1UL << TPI_LSR_nTT_Pos) /*!< TPI LSR: Not thirty-two bit. Mask */ + +#define TPI_LSR_SLK_Pos 1U /*!< TPI LSR: Software Lock status Position */ +#define TPI_LSR_SLK_Msk (0x1UL << TPI_LSR_SLK_Pos) /*!< TPI LSR: Software Lock status Mask */ + +#define TPI_LSR_SLI_Pos 0U /*!< TPI LSR: Software Lock implemented Position */ +#define TPI_LSR_SLI_Msk (0x1UL /*<< TPI_LSR_SLI_Pos*/) /*!< TPI LSR: Software Lock implemented Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFO depth Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFO depth Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + uint32_t RESERVED0[7U]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: EN Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: EN Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#endif +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED4[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_DWTENA_Pos 24U /*!< CoreDebug DEMCR: DWTENA Position */ +#define CoreDebug_DEMCR_DWTENA_Msk (1UL << CoreDebug_DEMCR_DWTENA_Pos) /*!< CoreDebug DEMCR: DWTENA Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< Core Debug configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000002UL) /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC_NS->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB_NS->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB_NS->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB_NS->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MBL_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/Software/Drivers/CMSIS/Include/core_armv8mml.h b/Software/Drivers/CMSIS/Include/core_armv8mml.h new file mode 100644 index 0000000..2d0f106 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/core_armv8mml.h @@ -0,0 +1,2927 @@ +/**************************************************************************//** + * @file core_armv8mml.h + * @brief CMSIS Armv8-M Mainline Core Peripheral Access Layer Header File + * @version V5.0.7 + * @date 06. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_ARMV8MML_H_GENERIC +#define __CORE_ARMV8MML_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_ARMv8MML + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS Armv8MML definitions */ +#define __ARMv8MML_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __ARMv8MML_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __ARMv8MML_CMSIS_VERSION ((__ARMv8MML_CMSIS_VERSION_MAIN << 16U) | \ + __ARMv8MML_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (81U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MML_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_ARMV8MML_H_DEPENDANT +#define __CORE_ARMV8MML_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __ARMv8MML_REV + #define __ARMv8MML_REV 0x0000U + #warning "__ARMv8MML_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group ARMv8MML */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED3[92U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + uint32_t RESERVED7[6U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ + __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ + __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ + __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ + uint32_t RESERVED8[1U]; + __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ +#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/* Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ +#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ + +#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ +#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/* Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ +#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ + +#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ +#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/* AHBP Control Register Definitions */ +#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ +#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ + +#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ +#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ + +/* L1 Cache Control Register Definitions */ +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +#define SCB_CACR_ECCEN_Pos 1U /*!< SCB CACR: ECCEN Position */ +#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */ + +#define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ +#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ + +/* AHBS Control Register Definitions */ +#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ +#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ + +#define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ +#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ + +#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ +#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ + +/* Auxiliary Bus Fault Status Register Definitions */ +#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ +#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ + +#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ +#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ + +#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ +#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ + +#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ +#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ + +#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ +#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ + +#define SCB_ABFSR_ITCM_Pos 0U /*!< SCB ABFSR: ITCM Position*/ +#define SCB_ABFSR_ITCM_Msk (1UL /*<< SCB_ABFSR_ITCM_Pos*/) /*!< SCB ABFSR: ITCM Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[4U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[809U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Software Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Software Lock Status Register */ + uint32_t RESERVED4[4U]; + __IM uint32_t TYPE; /*!< Offset: 0xFC8 (R/ ) Device Identifier Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_SWOSCALER_Pos 0U /*!< TPI ACPR: SWOSCALER Position */ +#define TPI_ACPR_SWOSCALER_Msk (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/) /*!< TPI ACPR: SWOSCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI Periodic Synchronization Control Register Definitions */ +#define TPI_PSCR_PSCount_Pos 0U /*!< TPI PSCR: PSCount Position */ +#define TPI_PSCR_PSCount_Msk (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/) /*!< TPI PSCR: TPSCount Mask */ + +/* TPI Software Lock Status Register Definitions */ +#define TPI_LSR_nTT_Pos 1U /*!< TPI LSR: Not thirty-two bit. Position */ +#define TPI_LSR_nTT_Msk (0x1UL << TPI_LSR_nTT_Pos) /*!< TPI LSR: Not thirty-two bit. Mask */ + +#define TPI_LSR_SLK_Pos 1U /*!< TPI LSR: Software Lock status Position */ +#define TPI_LSR_SLK_Msk (0x1UL << TPI_LSR_SLK_Pos) /*!< TPI LSR: Software Lock status Mask */ + +#define TPI_LSR_SLI_Pos 0U /*!< TPI LSR: Software Lock implemented Position */ +#define TPI_LSR_SLI_Msk (0x1UL /*<< TPI_LSR_SLI_Pos*/) /*!< TPI LSR: Software Lock implemented Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFO depth Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFO depth Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED4[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< Core Debug configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000002UL) /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MML_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/Software/Drivers/CMSIS/Include/core_cm0.h b/Software/Drivers/CMSIS/Include/core_cm0.h new file mode 100644 index 0000000..6f82227 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/core_cm0.h @@ -0,0 +1,949 @@ +/**************************************************************************//** + * @file core_cm0.h + * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File + * @version V5.0.5 + * @date 28. May 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM0_H_GENERIC +#define __CORE_CM0_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M0 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM0 definitions */ +#define __CM0_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM0_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM0_CMSIS_VERSION ((__CM0_CMSIS_VERSION_MAIN << 16U) | \ + __CM0_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (0U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0_H_DEPENDANT +#define __CORE_CM0_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0_REV + #define __CM0_REV 0x0000U + #warning "__CM0_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M0 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + Address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)0x0U; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)0x0U; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/Software/Drivers/CMSIS/Include/core_cm0plus.h b/Software/Drivers/CMSIS/Include/core_cm0plus.h new file mode 100644 index 0000000..b9377e8 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/core_cm0plus.h @@ -0,0 +1,1083 @@ +/**************************************************************************//** + * @file core_cm0plus.h + * @brief CMSIS Cortex-M0+ Core Peripheral Access Layer Header File + * @version V5.0.6 + * @date 28. May 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM0PLUS_H_GENERIC +#define __CORE_CM0PLUS_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex-M0+ + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM0+ definitions */ +#define __CM0PLUS_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM0PLUS_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM0PLUS_CMSIS_VERSION ((__CM0PLUS_CMSIS_VERSION_MAIN << 16U) | \ + __CM0PLUS_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (0U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0PLUS_H_DEPENDANT +#define __CORE_CM0PLUS_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0PLUS_REV + #define __CM0PLUS_REV 0x0000U + #warning "__CM0PLUS_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex-M0+ */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 8U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0xFFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M0+ header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0+ */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; + +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/Software/Drivers/CMSIS/Include/core_cm1.h b/Software/Drivers/CMSIS/Include/core_cm1.h new file mode 100644 index 0000000..fd1c407 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/core_cm1.h @@ -0,0 +1,976 @@ +/**************************************************************************//** + * @file core_cm1.h + * @brief CMSIS Cortex-M1 Core Peripheral Access Layer Header File + * @version V1.0.0 + * @date 23. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM1_H_GENERIC +#define __CORE_CM1_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M1 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM1 definitions */ +#define __CM1_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM1_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM1_CMSIS_VERSION ((__CM1_CMSIS_VERSION_MAIN << 16U) | \ + __CM1_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (1U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM1_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM1_H_DEPENDANT +#define __CORE_CM1_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM1_REV + #define __CM1_REV 0x0100U + #warning "__CM1_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M1 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_ITCMUAEN_Pos 4U /*!< ACTLR: Instruction TCM Upper Alias Enable Position */ +#define SCnSCB_ACTLR_ITCMUAEN_Msk (1UL << SCnSCB_ACTLR_ITCMUAEN_Pos) /*!< ACTLR: Instruction TCM Upper Alias Enable Mask */ + +#define SCnSCB_ACTLR_ITCMLAEN_Pos 3U /*!< ACTLR: Instruction TCM Lower Alias Enable Position */ +#define SCnSCB_ACTLR_ITCMLAEN_Msk (1UL << SCnSCB_ACTLR_ITCMLAEN_Pos) /*!< ACTLR: Instruction TCM Lower Alias Enable Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M1 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M1 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M1 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + Address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)0x0U; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)0x0U; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM1_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/Software/Drivers/CMSIS/Include/core_cm23.h b/Software/Drivers/CMSIS/Include/core_cm23.h new file mode 100644 index 0000000..8202a8d --- /dev/null +++ b/Software/Drivers/CMSIS/Include/core_cm23.h @@ -0,0 +1,1993 @@ +/**************************************************************************//** + * @file core_cm23.h + * @brief CMSIS Cortex-M23 Core Peripheral Access Layer Header File + * @version V5.0.7 + * @date 22. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM23_H_GENERIC +#define __CORE_CM23_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M23 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS definitions */ +#define __CM23_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM23_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM23_CMSIS_VERSION ((__CM23_CMSIS_VERSION_MAIN << 16U) | \ + __CM23_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (23U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM23_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM23_H_DEPENDANT +#define __CORE_CM23_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM23_REV + #define __CM23_REV 0x0000U + #warning "__CM23_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif + + #ifndef __ETM_PRESENT + #define __ETM_PRESENT 0U + #warning "__ETM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MTB_PRESENT + #define __MTB_PRESENT 0U + #warning "__MTB_PRESENT not defined in device header file; using default!" + #endif + +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M23 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint32_t IPR[124U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + uint32_t RESERVED0[6U]; + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration Test FIFO Test Data 0 Register Definitions */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */ +#define TPI_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */ +#define TPI_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */ +#define TPI_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */ + +/* TPI Integration Test ATB Control Register 2 Register Definitions */ +#define TPI_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPI ITATBCTR2: AFVALID2S Position */ +#define TPI_ITATBCTR2_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos) /*!< TPI ITATBCTR2: AFVALID2SS Mask */ + +#define TPI_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPI ITATBCTR2: AFVALID1S Position */ +#define TPI_ITATBCTR2_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos) /*!< TPI ITATBCTR2: AFVALID1SS Mask */ + +#define TPI_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPI ITATBCTR2: ATREADY2S Position */ +#define TPI_ITATBCTR2_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPI ITATBCTR2: ATREADY2S Mask */ + +#define TPI_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPI ITATBCTR2: ATREADY1S Position */ +#define TPI_ITATBCTR2_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPI ITATBCTR2: ATREADY1S Mask */ + +/* TPI Integration Test FIFO Test Data 1 Register Definitions */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */ +#define TPI_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */ +#define TPI_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */ +#define TPI_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */ + +/* TPI Integration Test ATB Control Register 0 Definitions */ +#define TPI_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPI ITATBCTR0: AFVALID2S Position */ +#define TPI_ITATBCTR0_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos) /*!< TPI ITATBCTR0: AFVALID2SS Mask */ + +#define TPI_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPI ITATBCTR0: AFVALID1S Position */ +#define TPI_ITATBCTR0_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos) /*!< TPI ITATBCTR0: AFVALID1SS Mask */ + +#define TPI_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPI ITATBCTR0: ATREADY2S Position */ +#define TPI_ITATBCTR0_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPI ITATBCTR0: ATREADY2S Mask */ + +#define TPI_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPI ITATBCTR0: ATREADY1S Position */ +#define TPI_ITATBCTR0_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPI ITATBCTR0: ATREADY1S Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFOSZ Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFOSZ Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + uint32_t RESERVED0[7U]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: EN Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: EN Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#endif +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED4[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_DWTENA_Pos 24U /*!< CoreDebug DEMCR: DWTENA Position */ +#define CoreDebug_DEMCR_DWTENA_Msk (1UL << CoreDebug_DEMCR_DWTENA_Pos) /*!< CoreDebug DEMCR: DWTENA Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< Core Debug configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else +/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for Cortex-M23 */ +/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for Cortex-M23 */ + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000002UL) /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC_NS->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB_NS->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB_NS->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB_NS->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM23_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/Software/Drivers/CMSIS/Include/core_cm3.h b/Software/Drivers/CMSIS/Include/core_cm3.h new file mode 100644 index 0000000..b0dfbd3 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/core_cm3.h @@ -0,0 +1,1941 @@ +/**************************************************************************//** + * @file core_cm3.h + * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File + * @version V5.0.8 + * @date 04. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM3_H_GENERIC +#define __CORE_CM3_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M3 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM3 definitions */ +#define __CM3_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM3_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16U) | \ + __CM3_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (3U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM3_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM3_H_DEPENDANT +#define __CORE_CM3_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM3_REV + #define __CM3_REV 0x0200U + #warning "__CM3_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M3 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#if defined (__CM3_REV) && (__CM3_REV < 0x0201U) /* core r2p1 */ +#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#else +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ +#if defined (__CM3_REV) && (__CM3_REV >= 0x200U) + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1U]; +#endif +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM3_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/Software/Drivers/CMSIS/Include/core_cm33.h b/Software/Drivers/CMSIS/Include/core_cm33.h new file mode 100644 index 0000000..02f82e2 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/core_cm33.h @@ -0,0 +1,3002 @@ +/**************************************************************************//** + * @file core_cm33.h + * @brief CMSIS Cortex-M33 Core Peripheral Access Layer Header File + * @version V5.0.9 + * @date 06. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM33_H_GENERIC +#define __CORE_CM33_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M33 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM33 definitions */ +#define __CM33_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM33_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM33_CMSIS_VERSION ((__CM33_CMSIS_VERSION_MAIN << 16U) | \ + __CM33_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (33U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_PCS_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM33_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM33_H_DEPENDANT +#define __CORE_CM33_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM33_REV + #define __CM33_REV 0x0000U + #warning "__CM33_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M33 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED3[92U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + uint32_t RESERVED7[6U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ + __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ + __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ + __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ + uint32_t RESERVED8[1U]; + __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ +#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/* Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ +#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ + +#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ +#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/* Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ +#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ + +#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ +#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/* AHBP Control Register Definitions */ +#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ +#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ + +#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ +#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ + +/* L1 Cache Control Register Definitions */ +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +#define SCB_CACR_ECCEN_Pos 1U /*!< SCB CACR: ECCEN Position */ +#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */ + +#define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ +#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ + +/* AHBS Control Register Definitions */ +#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ +#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ + +#define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ +#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ + +#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ +#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ + +/* Auxiliary Bus Fault Status Register Definitions */ +#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ +#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ + +#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ +#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ + +#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ +#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ + +#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ +#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ + +#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ +#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ + +#define SCB_ABFSR_ITCM_Pos 0U /*!< SCB ABFSR: ITCM Position*/ +#define SCB_ABFSR_ITCM_Msk (1UL /*<< SCB_ABFSR_ITCM_Pos*/) /*!< SCB ABFSR: ITCM Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[4U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration Test FIFO Test Data 0 Register Definitions */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */ +#define TPI_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */ +#define TPI_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */ +#define TPI_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */ + +/* TPI Integration Test ATB Control Register 2 Register Definitions */ +#define TPI_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPI ITATBCTR2: AFVALID2S Position */ +#define TPI_ITATBCTR2_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos) /*!< TPI ITATBCTR2: AFVALID2SS Mask */ + +#define TPI_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPI ITATBCTR2: AFVALID1S Position */ +#define TPI_ITATBCTR2_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos) /*!< TPI ITATBCTR2: AFVALID1SS Mask */ + +#define TPI_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPI ITATBCTR2: ATREADY2S Position */ +#define TPI_ITATBCTR2_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPI ITATBCTR2: ATREADY2S Mask */ + +#define TPI_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPI ITATBCTR2: ATREADY1S Position */ +#define TPI_ITATBCTR2_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPI ITATBCTR2: ATREADY1S Mask */ + +/* TPI Integration Test FIFO Test Data 1 Register Definitions */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */ +#define TPI_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */ +#define TPI_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */ +#define TPI_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */ + +/* TPI Integration Test ATB Control Register 0 Definitions */ +#define TPI_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPI ITATBCTR0: AFVALID2S Position */ +#define TPI_ITATBCTR0_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos) /*!< TPI ITATBCTR0: AFVALID2SS Mask */ + +#define TPI_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPI ITATBCTR0: AFVALID1S Position */ +#define TPI_ITATBCTR0_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos) /*!< TPI ITATBCTR0: AFVALID1SS Mask */ + +#define TPI_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPI ITATBCTR0: ATREADY2S Position */ +#define TPI_ITATBCTR0_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPI ITATBCTR0: ATREADY2S Mask */ + +#define TPI_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPI ITATBCTR0: ATREADY1S Position */ +#define TPI_ITATBCTR0_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPI ITATBCTR0: ATREADY1S Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFOSZ Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFOSZ Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED4[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< Core Debug configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000002UL) /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM33_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/Software/Drivers/CMSIS/Include/core_cm4.h b/Software/Drivers/CMSIS/Include/core_cm4.h new file mode 100644 index 0000000..308b868 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/core_cm4.h @@ -0,0 +1,2129 @@ +/**************************************************************************//** + * @file core_cm4.h + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File + * @version V5.0.8 + * @date 04. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM4_H_GENERIC +#define __CORE_CM4_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M4 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM4 definitions */ +#define __CM4_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM4_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16U) | \ + __CM4_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (4U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM4_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM4_H_DEPENDANT +#define __CORE_CM4_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM4_REV + #define __CM4_REV 0x0000U + #warning "__CM4_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M4 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISOOFP_Pos 9U /*!< ACTLR: DISOOFP Position */ +#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ + +#define SCnSCB_ACTLR_DISFPCA_Pos 8U /*!< ACTLR: DISFPCA Position */ +#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ +#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ +#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM4_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/Software/Drivers/CMSIS/Include/core_cm7.h b/Software/Drivers/CMSIS/Include/core_cm7.h new file mode 100644 index 0000000..ada6c2a --- /dev/null +++ b/Software/Drivers/CMSIS/Include/core_cm7.h @@ -0,0 +1,2671 @@ +/**************************************************************************//** + * @file core_cm7.h + * @brief CMSIS Cortex-M7 Core Peripheral Access Layer Header File + * @version V5.0.8 + * @date 04. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM7_H_GENERIC +#define __CORE_CM7_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M7 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM7 definitions */ +#define __CM7_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM7_CMSIS_VERSION_SUB ( __CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM7_CMSIS_VERSION ((__CM7_CMSIS_VERSION_MAIN << 16U) | \ + __CM7_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (7U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM7_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM7_H_DEPENDANT +#define __CORE_CM7_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM7_REV + #define __CM7_REV 0x0000U + #warning "__CM7_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DTCM_PRESENT + #define __DTCM_PRESENT 0U + #warning "__DTCM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M7 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[1U]; + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED3[93U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + uint32_t RESERVED7[6U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ + __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ + __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ + __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ + uint32_t RESERVED8[1U]; + __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: Branch prediction enable bit Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: Branch prediction enable bit Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: Instruction cache enable bit Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: Instruction cache enable bit Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: Cache enable bit Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: Cache enable bit Mask */ + +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/* Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ +#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ + +#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ +#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/* Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ +#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ + +#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ +#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/* AHBP Control Register Definitions */ +#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ +#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ + +#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ +#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ + +/* L1 Cache Control Register Definitions */ +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +#define SCB_CACR_ECCEN_Pos 1U /*!< SCB CACR: ECCEN Position */ +#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */ + +#define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ +#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ + +/* AHBS Control Register Definitions */ +#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ +#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ + +#define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ +#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ + +#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ +#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ + +/* Auxiliary Bus Fault Status Register Definitions */ +#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ +#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ + +#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ +#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ + +#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ +#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ + +#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ +#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ + +#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ +#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ + +#define SCB_ABFSR_ITCM_Pos 0U /*!< SCB ABFSR: ITCM Position*/ +#define SCB_ABFSR_ITCM_Msk (1UL /*<< SCB_ABFSR_ITCM_Pos*/) /*!< SCB ABFSR: ITCM Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISITMATBFLUSH_Pos 12U /*!< ACTLR: DISITMATBFLUSH Position */ +#define SCnSCB_ACTLR_DISITMATBFLUSH_Msk (1UL << SCnSCB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define SCnSCB_ACTLR_DISRAMODE_Pos 11U /*!< ACTLR: DISRAMODE Position */ +#define SCnSCB_ACTLR_DISRAMODE_Msk (1UL << SCnSCB_ACTLR_DISRAMODE_Pos) /*!< ACTLR: DISRAMODE Mask */ + +#define SCnSCB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ +#define SCnSCB_ACTLR_FPEXCODIS_Msk (1UL << SCnSCB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED3[981U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and FP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/* Media and FP Feature Register 2 Definitions */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ +#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ +#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = SCB->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## Cache functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_CacheFunctions Cache Functions + \brief Functions that configure Instruction and Data cache. + @{ + */ + +/* Cache Size ID Register Macros */ +#define CCSIDR_WAYS(x) (((x) & SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos) +#define CCSIDR_SETS(x) (((x) & SCB_CCSIDR_NUMSETS_Msk ) >> SCB_CCSIDR_NUMSETS_Pos ) + + +/** + \brief Enable I-Cache + \details Turns on I-Cache + */ +__STATIC_INLINE void SCB_EnableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable I-Cache + \details Turns off I-Cache + */ +__STATIC_INLINE void SCB_DisableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk; /* disable I-Cache */ + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate I-Cache + \details Invalidates I-Cache + */ +__STATIC_INLINE void SCB_InvalidateICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Enable D-Cache + \details Turns on D-Cache + */ +__STATIC_INLINE void SCB_EnableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + __DSB(); + + SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */ + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable D-Cache + \details Turns off D-Cache + */ +__STATIC_INLINE void SCB_DisableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk; /* disable D-Cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate D-Cache + \details Invalidates D-Cache + */ +__STATIC_INLINE void SCB_InvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean D-Cache + \details Cleans D-Cache + */ +__STATIC_INLINE void SCB_CleanDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) | + ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean & Invalidate D-Cache + \details Cleans and Invalidates D-Cache + */ +__STATIC_INLINE void SCB_CleanInvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Invalidate by address + \details Invalidates D-Cache for the given address + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_INLINE void SCB_InvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + int32_t op_size = dsize; + uint32_t op_addr = (uint32_t)addr; + int32_t linesize = 32; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */ + + __DSB(); + + while (op_size > 0) { + SCB->DCIMVAC = op_addr; + op_addr += (uint32_t)linesize; + op_size -= linesize; + } + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Clean by address + \details Cleans D-Cache for the given address + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_INLINE void SCB_CleanDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + int32_t op_size = dsize; + uint32_t op_addr = (uint32_t) addr; + int32_t linesize = 32; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */ + + __DSB(); + + while (op_size > 0) { + SCB->DCCMVAC = op_addr; + op_addr += (uint32_t)linesize; + op_size -= linesize; + } + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Clean and Invalidate by address + \details Cleans and invalidates D_Cache for the given address + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_INLINE void SCB_CleanInvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + int32_t op_size = dsize; + uint32_t op_addr = (uint32_t) addr; + int32_t linesize = 32; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */ + + __DSB(); + + while (op_size > 0) { + SCB->DCCIMVAC = op_addr; + op_addr += (uint32_t)linesize; + op_size -= linesize; + } + + __DSB(); + __ISB(); + #endif +} + + +/*@} end of CMSIS_Core_CacheFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM7_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/Software/Drivers/CMSIS/Include/core_sc000.h b/Software/Drivers/CMSIS/Include/core_sc000.h new file mode 100644 index 0000000..9086c64 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/core_sc000.h @@ -0,0 +1,1022 @@ +/**************************************************************************//** + * @file core_sc000.h + * @brief CMSIS SC000 Core Peripheral Access Layer Header File + * @version V5.0.5 + * @date 28. May 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_SC000_H_GENERIC +#define __CORE_SC000_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup SC000 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS SC000 definitions */ +#define __SC000_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __SC000_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __SC000_CMSIS_VERSION ((__SC000_CMSIS_VERSION_MAIN << 16U) | \ + __SC000_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_SC (000U) /*!< Cortex secure core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC000_H_DEPENDANT +#define __CORE_SC000_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC000_REV + #define __SC000_REV 0x0000U + #warning "__SC000_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group SC000 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + uint32_t RESERVED1[154U]; + __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief SC000 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the SC000 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else +/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for SC000 */ +/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for SC000 */ + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for SC000 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/Software/Drivers/CMSIS/Include/core_sc300.h b/Software/Drivers/CMSIS/Include/core_sc300.h new file mode 100644 index 0000000..665822d --- /dev/null +++ b/Software/Drivers/CMSIS/Include/core_sc300.h @@ -0,0 +1,1915 @@ +/**************************************************************************//** + * @file core_sc300.h + * @brief CMSIS SC300 Core Peripheral Access Layer Header File + * @version V5.0.6 + * @date 04. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_SC300_H_GENERIC +#define __CORE_SC300_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup SC3000 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS SC300 definitions */ +#define __SC300_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __SC300_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __SC300_CMSIS_VERSION ((__SC300_CMSIS_VERSION_MAIN << 16U) | \ + __SC300_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_SC (300U) /*!< Cortex secure core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC300_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC300_H_DEPENDANT +#define __CORE_SC300_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC300_REV + #define __SC300_REV 0x0000U + #warning "__SC300_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group SC300 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED1[129U]; + __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + uint32_t RESERVED1[1U]; +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC300_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/Software/Drivers/CMSIS/Include/mpu_armv7.h b/Software/Drivers/CMSIS/Include/mpu_armv7.h new file mode 100644 index 0000000..7d4b600 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/mpu_armv7.h @@ -0,0 +1,270 @@ +/****************************************************************************** + * @file mpu_armv7.h + * @brief CMSIS MPU API for Armv7-M MPU + * @version V5.0.4 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2017-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef ARM_MPU_ARMV7_H +#define ARM_MPU_ARMV7_H + +#define ARM_MPU_REGION_SIZE_32B ((uint8_t)0x04U) ///!< MPU Region Size 32 Bytes +#define ARM_MPU_REGION_SIZE_64B ((uint8_t)0x05U) ///!< MPU Region Size 64 Bytes +#define ARM_MPU_REGION_SIZE_128B ((uint8_t)0x06U) ///!< MPU Region Size 128 Bytes +#define ARM_MPU_REGION_SIZE_256B ((uint8_t)0x07U) ///!< MPU Region Size 256 Bytes +#define ARM_MPU_REGION_SIZE_512B ((uint8_t)0x08U) ///!< MPU Region Size 512 Bytes +#define ARM_MPU_REGION_SIZE_1KB ((uint8_t)0x09U) ///!< MPU Region Size 1 KByte +#define ARM_MPU_REGION_SIZE_2KB ((uint8_t)0x0AU) ///!< MPU Region Size 2 KBytes +#define ARM_MPU_REGION_SIZE_4KB ((uint8_t)0x0BU) ///!< MPU Region Size 4 KBytes +#define ARM_MPU_REGION_SIZE_8KB ((uint8_t)0x0CU) ///!< MPU Region Size 8 KBytes +#define ARM_MPU_REGION_SIZE_16KB ((uint8_t)0x0DU) ///!< MPU Region Size 16 KBytes +#define ARM_MPU_REGION_SIZE_32KB ((uint8_t)0x0EU) ///!< MPU Region Size 32 KBytes +#define ARM_MPU_REGION_SIZE_64KB ((uint8_t)0x0FU) ///!< MPU Region Size 64 KBytes +#define ARM_MPU_REGION_SIZE_128KB ((uint8_t)0x10U) ///!< MPU Region Size 128 KBytes +#define ARM_MPU_REGION_SIZE_256KB ((uint8_t)0x11U) ///!< MPU Region Size 256 KBytes +#define ARM_MPU_REGION_SIZE_512KB ((uint8_t)0x12U) ///!< MPU Region Size 512 KBytes +#define ARM_MPU_REGION_SIZE_1MB ((uint8_t)0x13U) ///!< MPU Region Size 1 MByte +#define ARM_MPU_REGION_SIZE_2MB ((uint8_t)0x14U) ///!< MPU Region Size 2 MBytes +#define ARM_MPU_REGION_SIZE_4MB ((uint8_t)0x15U) ///!< MPU Region Size 4 MBytes +#define ARM_MPU_REGION_SIZE_8MB ((uint8_t)0x16U) ///!< MPU Region Size 8 MBytes +#define ARM_MPU_REGION_SIZE_16MB ((uint8_t)0x17U) ///!< MPU Region Size 16 MBytes +#define ARM_MPU_REGION_SIZE_32MB ((uint8_t)0x18U) ///!< MPU Region Size 32 MBytes +#define ARM_MPU_REGION_SIZE_64MB ((uint8_t)0x19U) ///!< MPU Region Size 64 MBytes +#define ARM_MPU_REGION_SIZE_128MB ((uint8_t)0x1AU) ///!< MPU Region Size 128 MBytes +#define ARM_MPU_REGION_SIZE_256MB ((uint8_t)0x1BU) ///!< MPU Region Size 256 MBytes +#define ARM_MPU_REGION_SIZE_512MB ((uint8_t)0x1CU) ///!< MPU Region Size 512 MBytes +#define ARM_MPU_REGION_SIZE_1GB ((uint8_t)0x1DU) ///!< MPU Region Size 1 GByte +#define ARM_MPU_REGION_SIZE_2GB ((uint8_t)0x1EU) ///!< MPU Region Size 2 GBytes +#define ARM_MPU_REGION_SIZE_4GB ((uint8_t)0x1FU) ///!< MPU Region Size 4 GBytes + +#define ARM_MPU_AP_NONE 0U ///!< MPU Access Permission no access +#define ARM_MPU_AP_PRIV 1U ///!< MPU Access Permission privileged access only +#define ARM_MPU_AP_URO 2U ///!< MPU Access Permission unprivileged access read-only +#define ARM_MPU_AP_FULL 3U ///!< MPU Access Permission full access +#define ARM_MPU_AP_PRO 5U ///!< MPU Access Permission privileged access read-only +#define ARM_MPU_AP_RO 6U ///!< MPU Access Permission read-only access + +/** MPU Region Base Address Register Value +* +* \param Region The region to be configured, number 0 to 15. +* \param BaseAddress The base address for the region. +*/ +#define ARM_MPU_RBAR(Region, BaseAddress) \ + (((BaseAddress) & MPU_RBAR_ADDR_Msk) | \ + ((Region) & MPU_RBAR_REGION_Msk) | \ + (MPU_RBAR_VALID_Msk)) + +/** +* MPU Memory Access Attributes +* +* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. +* \param IsShareable Region is shareable between multiple bus masters. +* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. +* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. +*/ +#define ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable) \ + ((((TypeExtField ) << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) | \ + (((IsShareable ) << MPU_RASR_S_Pos) & MPU_RASR_S_Msk) | \ + (((IsCacheable ) << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) | \ + (((IsBufferable ) << MPU_RASR_B_Pos) & MPU_RASR_B_Msk)) + +/** +* MPU Region Attribute and Size Register Value +* +* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. +* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. +* \param AccessAttributes Memory access attribution, see \ref ARM_MPU_ACCESS_. +* \param SubRegionDisable Sub-region disable field. +* \param Size Region size of the region to be configured, for example 4K, 8K. +*/ +#define ARM_MPU_RASR_EX(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size) \ + ((((DisableExec ) << MPU_RASR_XN_Pos) & MPU_RASR_XN_Msk) | \ + (((AccessPermission) << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) | \ + (((AccessAttributes) ) & (MPU_RASR_TEX_Msk | MPU_RASR_S_Msk | MPU_RASR_C_Msk | MPU_RASR_B_Msk))) + +/** +* MPU Region Attribute and Size Register Value +* +* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. +* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. +* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. +* \param IsShareable Region is shareable between multiple bus masters. +* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. +* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. +* \param SubRegionDisable Sub-region disable field. +* \param Size Region size of the region to be configured, for example 4K, 8K. +*/ +#define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size) \ + ARM_MPU_RASR_EX(DisableExec, AccessPermission, ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable), SubRegionDisable, Size) + +/** +* MPU Memory Access Attribute for strongly ordered memory. +* - TEX: 000b +* - Shareable +* - Non-cacheable +* - Non-bufferable +*/ +#define ARM_MPU_ACCESS_ORDERED ARM_MPU_ACCESS_(0U, 1U, 0U, 0U) + +/** +* MPU Memory Access Attribute for device memory. +* - TEX: 000b (if non-shareable) or 010b (if shareable) +* - Shareable or non-shareable +* - Non-cacheable +* - Bufferable (if shareable) or non-bufferable (if non-shareable) +* +* \param IsShareable Configures the device memory as shareable or non-shareable. +*/ +#define ARM_MPU_ACCESS_DEVICE(IsShareable) ((IsShareable) ? ARM_MPU_ACCESS_(0U, 1U, 0U, 1U) : ARM_MPU_ACCESS_(2U, 0U, 0U, 0U)) + +/** +* MPU Memory Access Attribute for normal memory. +* - TEX: 1BBb (reflecting outer cacheability rules) +* - Shareable or non-shareable +* - Cacheable or non-cacheable (reflecting inner cacheability rules) +* - Bufferable or non-bufferable (reflecting inner cacheability rules) +* +* \param OuterCp Configures the outer cache policy. +* \param InnerCp Configures the inner cache policy. +* \param IsShareable Configures the memory as shareable or non-shareable. +*/ +#define ARM_MPU_ACCESS_NORMAL(OuterCp, InnerCp, IsShareable) ARM_MPU_ACCESS_((4U | (OuterCp)), IsShareable, ((InnerCp) & 2U), ((InnerCp) & 1U)) + +/** +* MPU Memory Access Attribute non-cacheable policy. +*/ +#define ARM_MPU_CACHEP_NOCACHE 0U + +/** +* MPU Memory Access Attribute write-back, write and read allocate policy. +*/ +#define ARM_MPU_CACHEP_WB_WRA 1U + +/** +* MPU Memory Access Attribute write-through, no write allocate policy. +*/ +#define ARM_MPU_CACHEP_WT_NWA 2U + +/** +* MPU Memory Access Attribute write-back, no write allocate policy. +*/ +#define ARM_MPU_CACHEP_WB_NWA 3U + + +/** +* Struct for a single MPU Region +*/ +typedef struct { + uint32_t RBAR; //!< The region base address register value (RBAR) + uint32_t RASR; //!< The region attribute and size register value (RASR) \ref MPU_RASR +} ARM_MPU_Region_t; + +/** Enable the MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) +{ + __DSB(); + __ISB(); + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif +} + +/** Disable the MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable(void) +{ + __DSB(); + __ISB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; +} + +/** Clear and disable the given MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) +{ + MPU->RNR = rnr; + MPU->RASR = 0U; +} + +/** Configure an MPU region. +* \param rbar Value for RBAR register. +* \param rsar Value for RSAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr) +{ + MPU->RBAR = rbar; + MPU->RASR = rasr; +} + +/** Configure the given MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rsar Value for RSAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr) +{ + MPU->RNR = rnr; + MPU->RBAR = rbar; + MPU->RASR = rasr; +} + +/** Memcopy with strictly ordered memory access, e.g. for register targets. +* \param dst Destination data is copied to. +* \param src Source data is copied from. +* \param len Amount of data words to be copied. +*/ +__STATIC_INLINE void orderedCpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) +{ + uint32_t i; + for (i = 0U; i < len; ++i) + { + dst[i] = src[i]; + } +} + +/** Load the given number of MPU regions from a table. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load(ARM_MPU_Region_t const* table, uint32_t cnt) +{ + const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; + while (cnt > MPU_TYPE_RALIASES) { + orderedCpy(&(MPU->RBAR), &(table->RBAR), MPU_TYPE_RALIASES*rowWordSize); + table += MPU_TYPE_RALIASES; + cnt -= MPU_TYPE_RALIASES; + } + orderedCpy(&(MPU->RBAR), &(table->RBAR), cnt*rowWordSize); +} + +#endif diff --git a/Software/Drivers/CMSIS/Include/mpu_armv8.h b/Software/Drivers/CMSIS/Include/mpu_armv8.h new file mode 100644 index 0000000..99ee9f9 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/mpu_armv8.h @@ -0,0 +1,333 @@ +/****************************************************************************** + * @file mpu_armv8.h + * @brief CMSIS MPU API for Armv8-M MPU + * @version V5.0.4 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2017-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef ARM_MPU_ARMV8_H +#define ARM_MPU_ARMV8_H + +/** \brief Attribute for device memory (outer only) */ +#define ARM_MPU_ATTR_DEVICE ( 0U ) + +/** \brief Attribute for non-cacheable, normal memory */ +#define ARM_MPU_ATTR_NON_CACHEABLE ( 4U ) + +/** \brief Attribute for normal memory (outer and inner) +* \param NT Non-Transient: Set to 1 for non-transient data. +* \param WB Write-Back: Set to 1 to use write-back update policy. +* \param RA Read Allocation: Set to 1 to use cache allocation on read miss. +* \param WA Write Allocation: Set to 1 to use cache allocation on write miss. +*/ +#define ARM_MPU_ATTR_MEMORY_(NT, WB, RA, WA) \ + (((NT & 1U) << 3U) | ((WB & 1U) << 2U) | ((RA & 1U) << 1U) | (WA & 1U)) + +/** \brief Device memory type non Gathering, non Re-ordering, non Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGnRnE (0U) + +/** \brief Device memory type non Gathering, non Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGnRE (1U) + +/** \brief Device memory type non Gathering, Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGRE (2U) + +/** \brief Device memory type Gathering, Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_GRE (3U) + +/** \brief Memory Attribute +* \param O Outer memory attributes +* \param I O == ARM_MPU_ATTR_DEVICE: Device memory attributes, else: Inner memory attributes +*/ +#define ARM_MPU_ATTR(O, I) (((O & 0xFU) << 4U) | (((O & 0xFU) != 0U) ? (I & 0xFU) : ((I & 0x3U) << 2U))) + +/** \brief Normal memory non-shareable */ +#define ARM_MPU_SH_NON (0U) + +/** \brief Normal memory outer shareable */ +#define ARM_MPU_SH_OUTER (2U) + +/** \brief Normal memory inner shareable */ +#define ARM_MPU_SH_INNER (3U) + +/** \brief Memory access permissions +* \param RO Read-Only: Set to 1 for read-only memory. +* \param NP Non-Privileged: Set to 1 for non-privileged memory. +*/ +#define ARM_MPU_AP_(RO, NP) (((RO & 1U) << 1U) | (NP & 1U)) + +/** \brief Region Base Address Register value +* \param BASE The base address bits [31:5] of a memory region. The value is zero extended. Effective address gets 32 byte aligned. +* \param SH Defines the Shareability domain for this memory region. +* \param RO Read-Only: Set to 1 for a read-only memory region. +* \param NP Non-Privileged: Set to 1 for a non-privileged memory region. +* \oaram XN eXecute Never: Set to 1 for a non-executable memory region. +*/ +#define ARM_MPU_RBAR(BASE, SH, RO, NP, XN) \ + ((BASE & MPU_RBAR_BASE_Msk) | \ + ((SH << MPU_RBAR_SH_Pos) & MPU_RBAR_SH_Msk) | \ + ((ARM_MPU_AP_(RO, NP) << MPU_RBAR_AP_Pos) & MPU_RBAR_AP_Msk) | \ + ((XN << MPU_RBAR_XN_Pos) & MPU_RBAR_XN_Msk)) + +/** \brief Region Limit Address Register value +* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended. +* \param IDX The attribute index to be associated with this memory region. +*/ +#define ARM_MPU_RLAR(LIMIT, IDX) \ + ((LIMIT & MPU_RLAR_LIMIT_Msk) | \ + ((IDX << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \ + (MPU_RLAR_EN_Msk)) + +/** +* Struct for a single MPU Region +*/ +typedef struct { + uint32_t RBAR; /*!< Region Base Address Register value */ + uint32_t RLAR; /*!< Region Limit Address Register value */ +} ARM_MPU_Region_t; + +/** Enable the MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) +{ + __DSB(); + __ISB(); + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif +} + +/** Disable the MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable(void) +{ + __DSB(); + __ISB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; +} + +#ifdef MPU_NS +/** Enable the Non-secure MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable_NS(uint32_t MPU_Control) +{ + __DSB(); + __ISB(); + MPU_NS->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB_NS->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif +} + +/** Disable the Non-secure MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable_NS(void) +{ + __DSB(); + __ISB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB_NS->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU_NS->CTRL &= ~MPU_CTRL_ENABLE_Msk; +} +#endif + +/** Set the memory attribute encoding to the given MPU. +* \param mpu Pointer to the MPU to be configured. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttrEx(MPU_Type* mpu, uint8_t idx, uint8_t attr) +{ + const uint8_t reg = idx / 4U; + const uint32_t pos = ((idx % 4U) * 8U); + const uint32_t mask = 0xFFU << pos; + + if (reg >= (sizeof(mpu->MAIR) / sizeof(mpu->MAIR[0]))) { + return; // invalid index + } + + mpu->MAIR[reg] = ((mpu->MAIR[reg] & ~mask) | ((attr << pos) & mask)); +} + +/** Set the memory attribute encoding. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttr(uint8_t idx, uint8_t attr) +{ + ARM_MPU_SetMemAttrEx(MPU, idx, attr); +} + +#ifdef MPU_NS +/** Set the memory attribute encoding to the Non-secure MPU. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttr_NS(uint8_t idx, uint8_t attr) +{ + ARM_MPU_SetMemAttrEx(MPU_NS, idx, attr); +} +#endif + +/** Clear and disable the given MPU region of the given MPU. +* \param mpu Pointer to MPU to be used. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegionEx(MPU_Type* mpu, uint32_t rnr) +{ + mpu->RNR = rnr; + mpu->RLAR = 0U; +} + +/** Clear and disable the given MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) +{ + ARM_MPU_ClrRegionEx(MPU, rnr); +} + +#ifdef MPU_NS +/** Clear and disable the given Non-secure MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion_NS(uint32_t rnr) +{ + ARM_MPU_ClrRegionEx(MPU_NS, rnr); +} +#endif + +/** Configure the given MPU region of the given MPU. +* \param mpu Pointer to MPU to be used. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegionEx(MPU_Type* mpu, uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + mpu->RNR = rnr; + mpu->RBAR = rbar; + mpu->RLAR = rlar; +} + +/** Configure the given MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + ARM_MPU_SetRegionEx(MPU, rnr, rbar, rlar); +} + +#ifdef MPU_NS +/** Configure the given Non-secure MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion_NS(uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + ARM_MPU_SetRegionEx(MPU_NS, rnr, rbar, rlar); +} +#endif + +/** Memcopy with strictly ordered memory access, e.g. for register targets. +* \param dst Destination data is copied to. +* \param src Source data is copied from. +* \param len Amount of data words to be copied. +*/ +__STATIC_INLINE void orderedCpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) +{ + uint32_t i; + for (i = 0U; i < len; ++i) + { + dst[i] = src[i]; + } +} + +/** Load the given number of MPU regions from a table to the given MPU. +* \param mpu Pointer to the MPU registers to be used. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_LoadEx(MPU_Type* mpu, uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; + if (cnt == 1U) { + mpu->RNR = rnr; + orderedCpy(&(mpu->RBAR), &(table->RBAR), rowWordSize); + } else { + uint32_t rnrBase = rnr & ~(MPU_TYPE_RALIASES-1U); + uint32_t rnrOffset = rnr % MPU_TYPE_RALIASES; + + mpu->RNR = rnrBase; + while ((rnrOffset + cnt) > MPU_TYPE_RALIASES) { + uint32_t c = MPU_TYPE_RALIASES - rnrOffset; + orderedCpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), c*rowWordSize); + table += c; + cnt -= c; + rnrOffset = 0U; + rnrBase += MPU_TYPE_RALIASES; + mpu->RNR = rnrBase; + } + + orderedCpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), cnt*rowWordSize); + } +} + +/** Load the given number of MPU regions from a table. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + ARM_MPU_LoadEx(MPU, rnr, table, cnt); +} + +#ifdef MPU_NS +/** Load the given number of MPU regions from a table to the Non-secure MPU. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load_NS(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + ARM_MPU_LoadEx(MPU_NS, rnr, table, cnt); +} +#endif + +#endif + diff --git a/Software/Drivers/CMSIS/Include/tz_context.h b/Software/Drivers/CMSIS/Include/tz_context.h new file mode 100644 index 0000000..d4c1474 --- /dev/null +++ b/Software/Drivers/CMSIS/Include/tz_context.h @@ -0,0 +1,70 @@ +/****************************************************************************** + * @file tz_context.h + * @brief Context Management for Armv8-M TrustZone + * @version V1.0.1 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2017-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef TZ_CONTEXT_H +#define TZ_CONTEXT_H + +#include + +#ifndef TZ_MODULEID_T +#define TZ_MODULEID_T +/// \details Data type that identifies secure software modules called by a process. +typedef uint32_t TZ_ModuleId_t; +#endif + +/// \details TZ Memory ID identifies an allocated memory slot. +typedef uint32_t TZ_MemoryId_t; + +/// Initialize secure context memory system +/// \return execution status (1: success, 0: error) +uint32_t TZ_InitContextSystem_S (void); + +/// Allocate context memory for calling secure software modules in TrustZone +/// \param[in] module identifies software modules called from non-secure mode +/// \return value != 0 id TrustZone memory slot identifier +/// \return value 0 no memory available or internal error +TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module); + +/// Free context memory that was previously allocated with \ref TZ_AllocModuleContext_S +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id); + +/// Load secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_LoadContext_S (TZ_MemoryId_t id); + +/// Store secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_StoreContext_S (TZ_MemoryId_t id); + +#endif // TZ_CONTEXT_H diff --git a/Software/Drivers/CMSIS/LICENSE.txt b/Software/Drivers/CMSIS/LICENSE.txt new file mode 100644 index 0000000..c0ee812 --- /dev/null +++ b/Software/Drivers/CMSIS/LICENSE.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h new file mode 100644 index 0000000..cef98d0 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -0,0 +1,3850 @@ +/** + ****************************************************************************** + * @file stm32_hal_legacy.h + * @author MCD Application Team + * @brief This file contains aliases definition for the STM32Cube HAL constants + * macros and functions maintained for legacy purpose. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2019 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup HAL_AES_Aliased_Defines HAL CRYP Aliased Defines maintained for legacy purpose + * @{ + */ +#define AES_FLAG_RDERR CRYP_FLAG_RDERR +#define AES_FLAG_WRERR CRYP_FLAG_WRERR +#define AES_CLEARFLAG_CCF CRYP_CLEARFLAG_CCF +#define AES_CLEARFLAG_RDERR CRYP_CLEARFLAG_RDERR +#define AES_CLEARFLAG_WRERR CRYP_CLEARFLAG_WRERR +#if defined(STM32U5) +#define CRYP_DATATYPE_32B CRYP_NO_SWAP +#define CRYP_DATATYPE_16B CRYP_HALFWORD_SWAP +#define CRYP_DATATYPE_8B CRYP_BYTE_SWAP +#define CRYP_DATATYPE_1B CRYP_BIT_SWAP +#define CRYP_CCF_CLEAR CRYP_CLEAR_CCF +#define CRYP_ERR_CLEAR CRYP_CLEAR_RWEIF +#endif /* STM32U5 */ +/** + * @} + */ + +/** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose + * @{ + */ +#define ADC_RESOLUTION12b ADC_RESOLUTION_12B +#define ADC_RESOLUTION10b ADC_RESOLUTION_10B +#define ADC_RESOLUTION8b ADC_RESOLUTION_8B +#define ADC_RESOLUTION6b ADC_RESOLUTION_6B +#define OVR_DATA_OVERWRITTEN ADC_OVR_DATA_OVERWRITTEN +#define OVR_DATA_PRESERVED ADC_OVR_DATA_PRESERVED +#define EOC_SINGLE_CONV ADC_EOC_SINGLE_CONV +#define EOC_SEQ_CONV ADC_EOC_SEQ_CONV +#define EOC_SINGLE_SEQ_CONV ADC_EOC_SINGLE_SEQ_CONV +#define REGULAR_GROUP ADC_REGULAR_GROUP +#define INJECTED_GROUP ADC_INJECTED_GROUP +#define REGULAR_INJECTED_GROUP ADC_REGULAR_INJECTED_GROUP +#define AWD_EVENT ADC_AWD_EVENT +#define AWD1_EVENT ADC_AWD1_EVENT +#define AWD2_EVENT ADC_AWD2_EVENT +#define AWD3_EVENT ADC_AWD3_EVENT +#define OVR_EVENT ADC_OVR_EVENT +#define JQOVF_EVENT ADC_JQOVF_EVENT +#define ALL_CHANNELS ADC_ALL_CHANNELS +#define REGULAR_CHANNELS ADC_REGULAR_CHANNELS +#define INJECTED_CHANNELS ADC_INJECTED_CHANNELS +#define SYSCFG_FLAG_SENSOR_ADC ADC_FLAG_SENSOR +#define SYSCFG_FLAG_VREF_ADC ADC_FLAG_VREFINT +#define ADC_CLOCKPRESCALER_PCLK_DIV1 ADC_CLOCK_SYNC_PCLK_DIV1 +#define ADC_CLOCKPRESCALER_PCLK_DIV2 ADC_CLOCK_SYNC_PCLK_DIV2 +#define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 +#define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 +#define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO +#define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 +#define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 +#define ADC_EXTERNALTRIG_EDGE_NONE ADC_EXTERNALTRIGCONVEDGE_NONE +#define ADC_EXTERNALTRIG_EDGE_RISING ADC_EXTERNALTRIGCONVEDGE_RISING +#define ADC_EXTERNALTRIG_EDGE_FALLING ADC_EXTERNALTRIGCONVEDGE_FALLING +#define ADC_EXTERNALTRIG_EDGE_RISINGFALLING ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING +#define ADC_SAMPLETIME_2CYCLE_5 ADC_SAMPLETIME_2CYCLES_5 + +#define HAL_ADC_STATE_BUSY_REG HAL_ADC_STATE_REG_BUSY +#define HAL_ADC_STATE_BUSY_INJ HAL_ADC_STATE_INJ_BUSY +#define HAL_ADC_STATE_EOC_REG HAL_ADC_STATE_REG_EOC +#define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC +#define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL +#define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ +/** + * @} + */ + +/** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + +/** + * @} + */ + +/** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose + * @{ + */ +#define COMP_WINDOWMODE_DISABLED COMP_WINDOWMODE_DISABLE +#define COMP_WINDOWMODE_ENABLED COMP_WINDOWMODE_ENABLE +#define COMP_EXTI_LINE_COMP1_EVENT COMP_EXTI_LINE_COMP1 +#define COMP_EXTI_LINE_COMP2_EVENT COMP_EXTI_LINE_COMP2 +#define COMP_EXTI_LINE_COMP3_EVENT COMP_EXTI_LINE_COMP3 +#define COMP_EXTI_LINE_COMP4_EVENT COMP_EXTI_LINE_COMP4 +#define COMP_EXTI_LINE_COMP5_EVENT COMP_EXTI_LINE_COMP5 +#define COMP_EXTI_LINE_COMP6_EVENT COMP_EXTI_LINE_COMP6 +#define COMP_EXTI_LINE_COMP7_EVENT COMP_EXTI_LINE_COMP7 +#if defined(STM32L0) +#define COMP_LPTIMCONNECTION_ENABLED ((uint32_t)0x00000003U) /*!< COMPX output generic naming: connected to LPTIM input 1 for COMP1, LPTIM input 2 for COMP2 */ +#endif +#define COMP_OUTPUT_COMP6TIM2OCREFCLR COMP_OUTPUT_COMP6_TIM2OCREFCLR +#if defined(STM32F373xC) || defined(STM32F378xx) +#define COMP_OUTPUT_TIM3IC1 COMP_OUTPUT_COMP1_TIM3IC1 +#define COMP_OUTPUT_TIM3OCREFCLR COMP_OUTPUT_COMP1_TIM3OCREFCLR +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32L0) || defined(STM32L4) +#define COMP_WINDOWMODE_ENABLE COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON + +#define COMP_NONINVERTINGINPUT_IO1 COMP_INPUT_PLUS_IO1 +#define COMP_NONINVERTINGINPUT_IO2 COMP_INPUT_PLUS_IO2 +#define COMP_NONINVERTINGINPUT_IO3 COMP_INPUT_PLUS_IO3 +#define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 +#define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 +#define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 + +#define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT +#define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT +#define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT +#define COMP_INVERTINGINPUT_VREFINT COMP_INPUT_MINUS_VREFINT +#define COMP_INVERTINGINPUT_DAC1_CH1 COMP_INPUT_MINUS_DAC1_CH1 +#define COMP_INVERTINGINPUT_DAC1_CH2 COMP_INPUT_MINUS_DAC1_CH2 +#define COMP_INVERTINGINPUT_DAC1 COMP_INPUT_MINUS_DAC1_CH1 +#define COMP_INVERTINGINPUT_DAC2 COMP_INPUT_MINUS_DAC1_CH2 +#define COMP_INVERTINGINPUT_IO1 COMP_INPUT_MINUS_IO1 +#if defined(STM32L0) +/* Issue fixed on STM32L0 COMP driver: only 2 dedicated IO (IO1 and IO2), */ +/* IO2 was wrongly assigned to IO shared with DAC and IO3 was corresponding */ +/* to the second dedicated IO (only for COMP2). */ +#define COMP_INVERTINGINPUT_IO2 COMP_INPUT_MINUS_DAC1_CH2 +#define COMP_INVERTINGINPUT_IO3 COMP_INPUT_MINUS_IO2 +#else +#define COMP_INVERTINGINPUT_IO2 COMP_INPUT_MINUS_IO2 +#define COMP_INVERTINGINPUT_IO3 COMP_INPUT_MINUS_IO3 +#endif +#define COMP_INVERTINGINPUT_IO4 COMP_INPUT_MINUS_IO4 +#define COMP_INVERTINGINPUT_IO5 COMP_INPUT_MINUS_IO5 + +#define COMP_OUTPUTLEVEL_LOW COMP_OUTPUT_LEVEL_LOW +#define COMP_OUTPUTLEVEL_HIGH COMP_OUTPUT_LEVEL_HIGH + +/* Note: Literal "COMP_FLAG_LOCK" kept for legacy purpose. */ +/* To check COMP lock state, use macro "__HAL_COMP_IS_LOCKED()". */ +#if defined(COMP_CSR_LOCK) +#define COMP_FLAG_LOCK COMP_CSR_LOCK +#elif defined(COMP_CSR_COMP1LOCK) +#define COMP_FLAG_LOCK COMP_CSR_COMP1LOCK +#elif defined(COMP_CSR_COMPxLOCK) +#define COMP_FLAG_LOCK COMP_CSR_COMPxLOCK +#endif + +#if defined(STM32L4) +#define COMP_BLANKINGSRCE_TIM1OC5 COMP_BLANKINGSRC_TIM1_OC5_COMP1 +#define COMP_BLANKINGSRCE_TIM2OC3 COMP_BLANKINGSRC_TIM2_OC3_COMP1 +#define COMP_BLANKINGSRCE_TIM3OC3 COMP_BLANKINGSRC_TIM3_OC3_COMP1 +#define COMP_BLANKINGSRCE_TIM3OC4 COMP_BLANKINGSRC_TIM3_OC4_COMP2 +#define COMP_BLANKINGSRCE_TIM8OC5 COMP_BLANKINGSRC_TIM8_OC5_COMP2 +#define COMP_BLANKINGSRCE_TIM15OC1 COMP_BLANKINGSRC_TIM15_OC1_COMP2 +#define COMP_BLANKINGSRCE_NONE COMP_BLANKINGSRC_NONE +#endif + +#if defined(STM32L0) +#define COMP_MODE_HIGHSPEED COMP_POWERMODE_MEDIUMSPEED +#define COMP_MODE_LOWSPEED COMP_POWERMODE_ULTRALOWPOWER +#else +#define COMP_MODE_HIGHSPEED COMP_POWERMODE_HIGHSPEED +#define COMP_MODE_MEDIUMSPEED COMP_POWERMODE_MEDIUMSPEED +#define COMP_MODE_LOWPOWER COMP_POWERMODE_LOWPOWER +#define COMP_MODE_ULTRALOWPOWER COMP_POWERMODE_ULTRALOWPOWER +#endif + +#endif +/** + * @} + */ + +/** @defgroup HAL_CORTEX_Aliased_Defines HAL CORTEX Aliased Defines maintained for legacy purpose + * @{ + */ +#define __HAL_CORTEX_SYSTICKCLK_CONFIG HAL_SYSTICK_CLKSourceConfig +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE +#define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE + +/** + * @} + */ + +/** @defgroup HAL_DAC_Aliased_Defines HAL DAC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define DAC1_CHANNEL_1 DAC_CHANNEL_1 +#define DAC1_CHANNEL_2 DAC_CHANNEL_2 +#define DAC2_CHANNEL_1 DAC_CHANNEL_1 +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 +#define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE +#define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE +#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE + +#if defined(STM32G4) || defined(STM32H7) || defined (STM32U5) +#define DAC_CHIPCONNECT_DISABLE DAC_CHIPCONNECT_EXTERNAL +#define DAC_CHIPCONNECT_ENABLE DAC_CHIPCONNECT_INTERNAL +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) || defined(STM32L5) || defined(STM32H7) || defined(STM32F4) || defined(STM32G4) +#define HAL_DAC_MSP_INIT_CB_ID HAL_DAC_MSPINIT_CB_ID +#define HAL_DAC_MSP_DEINIT_CB_ID HAL_DAC_MSPDEINIT_CB_ID +#endif + +/** + * @} + */ + +/** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose + * @{ + */ +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 +#define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE +#define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#if defined(STM32L4R5xx) || defined(STM32L4R9xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define DMA_REQUEST_DCMI_PSSI DMA_REQUEST_DCMI +#endif + +#endif /* STM32L4 */ + +#if defined(STM32G0) +#define DMA_REQUEST_DAC1_CHANNEL1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC1_CHANNEL2 DMA_REQUEST_DAC1_CH2 +#define DMA_REQUEST_TIM16_TRIG_COM DMA_REQUEST_TIM16_COM +#define DMA_REQUEST_TIM17_TRIG_COM DMA_REQUEST_TIM17_COM + +#define LL_DMAMUX_REQ_TIM16_TRIG_COM LL_DMAMUX_REQ_TIM16_COM +#define LL_DMAMUX_REQ_TIM17_TRIG_COM LL_DMAMUX_REQ_TIM17_COM +#endif + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#define DAC_TRIGGER_LP1_OUT DAC_TRIGGER_LPTIM1_OUT +#define DAC_TRIGGER_LP2_OUT DAC_TRIGGER_LPTIM2_OUT + +#endif /* STM32H7 */ +/** + * @} + */ + +/** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose + * @{ + */ + +#define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE +#define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD +#define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD +#define TYPEPROGRAM_DOUBLEWORD FLASH_TYPEPROGRAM_DOUBLEWORD +#define TYPEERASE_SECTORS FLASH_TYPEERASE_SECTORS +#define TYPEERASE_PAGES FLASH_TYPEERASE_PAGES +#define TYPEERASE_PAGEERASE FLASH_TYPEERASE_PAGES +#define TYPEERASE_MASSERASE FLASH_TYPEERASE_MASSERASE +#define WRPSTATE_DISABLE OB_WRPSTATE_DISABLE +#define WRPSTATE_ENABLE OB_WRPSTATE_ENABLE +#define HAL_FLASH_TIMEOUT_VALUE FLASH_TIMEOUT_VALUE +#define OBEX_PCROP OPTIONBYTE_PCROP +#define OBEX_BOOTCONFIG OPTIONBYTE_BOOTCONFIG +#define PCROPSTATE_DISABLE OB_PCROP_STATE_DISABLE +#define PCROPSTATE_ENABLE OB_PCROP_STATE_ENABLE +#define TYPEERASEDATA_BYTE FLASH_TYPEERASEDATA_BYTE +#define TYPEERASEDATA_HALFWORD FLASH_TYPEERASEDATA_HALFWORD +#define TYPEERASEDATA_WORD FLASH_TYPEERASEDATA_WORD +#define TYPEPROGRAMDATA_BYTE FLASH_TYPEPROGRAMDATA_BYTE +#define TYPEPROGRAMDATA_HALFWORD FLASH_TYPEPROGRAMDATA_HALFWORD +#define TYPEPROGRAMDATA_WORD FLASH_TYPEPROGRAMDATA_WORD +#define TYPEPROGRAMDATA_FASTBYTE FLASH_TYPEPROGRAMDATA_FASTBYTE +#define TYPEPROGRAMDATA_FASTHALFWORD FLASH_TYPEPROGRAMDATA_FASTHALFWORD +#define TYPEPROGRAMDATA_FASTWORD FLASH_TYPEPROGRAMDATA_FASTWORD +#define PAGESIZE FLASH_PAGE_SIZE +#define TYPEPROGRAM_FASTBYTE FLASH_TYPEPROGRAM_BYTE +#define TYPEPROGRAM_FASTHALFWORD FLASH_TYPEPROGRAM_HALFWORD +#define TYPEPROGRAM_FASTWORD FLASH_TYPEPROGRAM_WORD +#define VOLTAGE_RANGE_1 FLASH_VOLTAGE_RANGE_1 +#define VOLTAGE_RANGE_2 FLASH_VOLTAGE_RANGE_2 +#define VOLTAGE_RANGE_3 FLASH_VOLTAGE_RANGE_3 +#define VOLTAGE_RANGE_4 FLASH_VOLTAGE_RANGE_4 +#define TYPEPROGRAM_FAST FLASH_TYPEPROGRAM_FAST +#define TYPEPROGRAM_FAST_AND_LAST FLASH_TYPEPROGRAM_FAST_AND_LAST +#define WRPAREA_BANK1_AREAA OB_WRPAREA_BANK1_AREAA +#define WRPAREA_BANK1_AREAB OB_WRPAREA_BANK1_AREAB +#define WRPAREA_BANK2_AREAA OB_WRPAREA_BANK2_AREAA +#define WRPAREA_BANK2_AREAB OB_WRPAREA_BANK2_AREAB +#define IWDG_STDBY_FREEZE OB_IWDG_STDBY_FREEZE +#define IWDG_STDBY_ACTIVE OB_IWDG_STDBY_RUN +#define IWDG_STOP_FREEZE OB_IWDG_STOP_FREEZE +#define IWDG_STOP_ACTIVE OB_IWDG_STOP_RUN +#define FLASH_ERROR_NONE HAL_FLASH_ERROR_NONE +#define FLASH_ERROR_RD HAL_FLASH_ERROR_RD +#define FLASH_ERROR_PG HAL_FLASH_ERROR_PROG +#define FLASH_ERROR_PGP HAL_FLASH_ERROR_PGS +#define FLASH_ERROR_WRP HAL_FLASH_ERROR_WRP +#define FLASH_ERROR_OPTV HAL_FLASH_ERROR_OPTV +#define FLASH_ERROR_OPTVUSR HAL_FLASH_ERROR_OPTVUSR +#define FLASH_ERROR_PROG HAL_FLASH_ERROR_PROG +#define FLASH_ERROR_OP HAL_FLASH_ERROR_OPERATION +#define FLASH_ERROR_PGA HAL_FLASH_ERROR_PGA +#define FLASH_ERROR_SIZE HAL_FLASH_ERROR_SIZE +#define FLASH_ERROR_SIZ HAL_FLASH_ERROR_SIZE +#define FLASH_ERROR_PGS HAL_FLASH_ERROR_PGS +#define FLASH_ERROR_MIS HAL_FLASH_ERROR_MIS +#define FLASH_ERROR_FAST HAL_FLASH_ERROR_FAST +#define FLASH_ERROR_FWWERR HAL_FLASH_ERROR_FWWERR +#define FLASH_ERROR_NOTZERO HAL_FLASH_ERROR_NOTZERO +#define FLASH_ERROR_OPERATION HAL_FLASH_ERROR_OPERATION +#define FLASH_ERROR_ERS HAL_FLASH_ERROR_ERS +#define OB_WDG_SW OB_IWDG_SW +#define OB_WDG_HW OB_IWDG_HW +#define OB_SDADC12_VDD_MONITOR_SET OB_SDACD_VDD_MONITOR_SET +#define OB_SDADC12_VDD_MONITOR_RESET OB_SDACD_VDD_MONITOR_RESET +#define OB_RAM_PARITY_CHECK_SET OB_SRAM_PARITY_SET +#define OB_RAM_PARITY_CHECK_RESET OB_SRAM_PARITY_RESET +#define IS_OB_SDADC12_VDD_MONITOR IS_OB_SDACD_VDD_MONITOR +#define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 +#define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 +#define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#define FLASH_FLAG_SNECCE_BANK2RR FLASH_FLAG_SNECCERR_BANK2 +#define FLASH_FLAG_DBECCE_BANK2RR FLASH_FLAG_DBECCERR_BANK2 +#define FLASH_FLAG_STRBER_BANK2R FLASH_FLAG_STRBERR_BANK2 +#define FLASH_FLAG_WDW FLASH_FLAG_WBNE +#define OB_WRP_SECTOR_All OB_WRP_SECTOR_ALL +#endif /* STM32H7 */ +#if defined(STM32U5) +#define OB_USER_nRST_STOP OB_USER_NRST_STOP +#define OB_USER_nRST_STDBY OB_USER_NRST_STDBY +#define OB_USER_nRST_SHDW OB_USER_NRST_SHDW +#define OB_USER_nSWBOOT0 OB_USER_NSWBOOT0 +#define OB_USER_nBOOT0 OB_USER_NBOOT0 +#define OB_nBOOT0_RESET OB_NBOOT0_RESET +#define OB_nBOOT0_SET OB_NBOOT0_SET +#endif /* STM32U5 */ + +/** + * @} + */ + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + +/** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose + * @{ + */ + +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB7 I2C_FASTMODEPLUS_PB7 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB8 I2C_FASTMODEPLUS_PB8 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB9 I2C_FASTMODEPLUS_PB9 +#define HAL_SYSCFG_FASTMODEPLUS_I2C1 I2C_FASTMODEPLUS_I2C1 +#define HAL_SYSCFG_FASTMODEPLUS_I2C2 I2C_FASTMODEPLUS_I2C2 +#define HAL_SYSCFG_FASTMODEPLUS_I2C3 I2C_FASTMODEPLUS_I2C3 +#if defined(STM32G4) + +#define HAL_SYSCFG_EnableIOAnalogSwitchBooster HAL_SYSCFG_EnableIOSwitchBooster +#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SYSCFG_DisableIOSwitchBooster +#define HAL_SYSCFG_EnableIOAnalogSwitchVDD HAL_SYSCFG_EnableIOSwitchVDD +#define HAL_SYSCFG_DisableIOAnalogSwitchVDD HAL_SYSCFG_DisableIOSwitchVDD +#endif /* STM32G4 */ + +/** + * @} + */ + + +/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose + * @{ + */ +#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4) +#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE +#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE FMC_NAND_WAIT_FEATURE_ENABLE +#define FMC_NAND_PCC_MEM_BUS_WIDTH_8 FMC_NAND_MEM_BUS_WIDTH_8 +#define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) +#define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE +#define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE +#define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 +#define FMC_NAND_MEM_BUS_WIDTH_16 FMC_NAND_PCC_MEM_BUS_WIDTH_16 +#endif +/** + * @} + */ + +/** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef +#define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef +/** + * @} + */ + +/** @defgroup HAL_GPIO_Aliased_Macros HAL GPIO Aliased Macros maintained for legacy purpose + * @{ + */ +#define GET_GPIO_SOURCE GPIO_GET_INDEX +#define GET_GPIO_INDEX GPIO_GET_INDEX + +#if defined(STM32F4) +#define GPIO_AF12_SDMMC GPIO_AF12_SDIO +#define GPIO_AF12_SDMMC1 GPIO_AF12_SDIO +#endif + +#if defined(STM32F7) +#define GPIO_AF12_SDIO GPIO_AF12_SDMMC1 +#define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 +#endif + +#if defined(STM32L4) +#define GPIO_AF12_SDIO GPIO_AF12_SDMMC1 +#define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 +#endif + +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 + +#if defined (STM32H743xx) || defined (STM32H753xx) || defined (STM32H750xx) || defined (STM32H742xx) || \ + defined (STM32H745xx) || defined (STM32H755xx) || defined (STM32H747xx) || defined (STM32H757xx) +#define GPIO_AF10_OTG2_HS GPIO_AF10_OTG2_FS +#define GPIO_AF10_OTG1_FS GPIO_AF10_OTG1_HS +#define GPIO_AF12_OTG2_FS GPIO_AF12_OTG1_FS +#endif /*STM32H743xx || STM32H753xx || STM32H750xx || STM32H742xx || STM32H745xx || STM32H755xx || STM32H747xx || STM32H757xx */ +#endif /* STM32H7 */ + +#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1 +#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1 +#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1 + +#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32G4) || defined(STM32H7) || defined(STM32WB) || defined(STM32U5) +#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW +#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM +#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH +#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32G4 || STM32H7 || STM32WB || STM32U5*/ + +#if defined(STM32L1) +#define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW +#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM +#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH +#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#endif /* STM32L1 */ + +#if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) +#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW +#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM +#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_HIGH +#endif /* STM32F0 || STM32F3 || STM32F1 */ + +#define GPIO_AF6_DFSDM GPIO_AF6_DFSDM1 +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose + * @{ + */ +#define HRTIM_TIMDELAYEDPROTECTION_DISABLED HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_DEEV7 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 +#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 + +#define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER +#define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER +#define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD +#define __HAL_HRTIM_GetPeriod __HAL_HRTIM_GETPERIOD +#define __HAL_HRTIM_SetClockPrescaler __HAL_HRTIM_SETCLOCKPRESCALER +#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER +#define __HAL_HRTIM_SetCompare __HAL_HRTIM_SETCOMPARE +#define __HAL_HRTIM_GetCompare __HAL_HRTIM_GETCOMPARE + +#if defined(STM32G4) +#define HAL_HRTIM_ExternalEventCounterConfig HAL_HRTIM_ExtEventCounterConfig +#define HAL_HRTIM_ExternalEventCounterEnable HAL_HRTIM_ExtEventCounterEnable +#define HAL_HRTIM_ExternalEventCounterDisable HAL_HRTIM_ExtEventCounterDisable +#define HAL_HRTIM_ExternalEventCounterReset HAL_HRTIM_ExtEventCounterReset +#define HRTIM_TIMEEVENT_A HRTIM_EVENTCOUNTER_A +#define HRTIM_TIMEEVENT_B HRTIM_EVENTCOUNTER_B +#define HRTIM_TIMEEVENTRESETMODE_UNCONDITIONAL HRTIM_EVENTCOUNTER_RSTMODE_UNCONDITIONAL +#define HRTIM_TIMEEVENTRESETMODE_CONDITIONAL HRTIM_EVENTCOUNTER_RSTMODE_CONDITIONAL +#endif /* STM32G4 */ + +#if defined(STM32H7) +#define HRTIM_OUTPUTSET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9 + +#define HRTIM_OUTPUTRESET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9 +#endif /* STM32H7 */ + +#if defined(STM32F3) +/** @brief Constants defining available sources associated to external events. + */ +#define HRTIM_EVENTSRC_1 (0x00000000U) +#define HRTIM_EVENTSRC_2 (HRTIM_EECR1_EE1SRC_0) +#define HRTIM_EVENTSRC_3 (HRTIM_EECR1_EE1SRC_1) +#define HRTIM_EVENTSRC_4 (HRTIM_EECR1_EE1SRC_1 | HRTIM_EECR1_EE1SRC_0) + +/** @brief Constants defining the DLL calibration periods (in micro seconds) + */ +#define HRTIM_CALIBRATIONRATE_7300 0x00000000U +#define HRTIM_CALIBRATIONRATE_910 (HRTIM_DLLCR_CALRTE_0) +#define HRTIM_CALIBRATIONRATE_114 (HRTIM_DLLCR_CALRTE_1) +#define HRTIM_CALIBRATIONRATE_14 (HRTIM_DLLCR_CALRTE_1 | HRTIM_DLLCR_CALRTE_0) + +#endif /* STM32F3 */ +/** + * @} + */ + +/** @defgroup HAL_I2C_Aliased_Defines HAL I2C Aliased Defines maintained for legacy purpose + * @{ + */ +#define I2C_DUALADDRESS_DISABLED I2C_DUALADDRESS_DISABLE +#define I2C_DUALADDRESS_ENABLED I2C_DUALADDRESS_ENABLE +#define I2C_GENERALCALL_DISABLED I2C_GENERALCALL_DISABLE +#define I2C_GENERALCALL_ENABLED I2C_GENERALCALL_ENABLE +#define I2C_NOSTRETCH_DISABLED I2C_NOSTRETCH_DISABLE +#define I2C_NOSTRETCH_ENABLED I2C_NOSTRETCH_ENABLE +#define I2C_ANALOGFILTER_ENABLED I2C_ANALOGFILTER_ENABLE +#define I2C_ANALOGFILTER_DISABLED I2C_ANALOGFILTER_DISABLE +#if defined(STM32F0) || defined(STM32F1) || defined(STM32F3) || defined(STM32G0) || defined(STM32L4) || defined(STM32L1) || defined(STM32F7) +#define HAL_I2C_STATE_MEM_BUSY_TX HAL_I2C_STATE_BUSY_TX +#define HAL_I2C_STATE_MEM_BUSY_RX HAL_I2C_STATE_BUSY_RX +#define HAL_I2C_STATE_MASTER_BUSY_TX HAL_I2C_STATE_BUSY_TX +#define HAL_I2C_STATE_MASTER_BUSY_RX HAL_I2C_STATE_BUSY_RX +#define HAL_I2C_STATE_SLAVE_BUSY_TX HAL_I2C_STATE_BUSY_TX +#define HAL_I2C_STATE_SLAVE_BUSY_RX HAL_I2C_STATE_BUSY_RX +#endif +/** + * @} + */ + +/** @defgroup HAL_IRDA_Aliased_Defines HAL IRDA Aliased Defines maintained for legacy purpose + * @{ + */ +#define IRDA_ONE_BIT_SAMPLE_DISABLED IRDA_ONE_BIT_SAMPLE_DISABLE +#define IRDA_ONE_BIT_SAMPLE_ENABLED IRDA_ONE_BIT_SAMPLE_ENABLE + +/** + * @} + */ + +/** @defgroup HAL_IWDG_Aliased_Defines HAL IWDG Aliased Defines maintained for legacy purpose + * @{ + */ +#define KR_KEY_RELOAD IWDG_KEY_RELOAD +#define KR_KEY_ENABLE IWDG_KEY_ENABLE +#define KR_KEY_EWA IWDG_KEY_WRITE_ACCESS_ENABLE +#define KR_KEY_DWA IWDG_KEY_WRITE_ACCESS_DISABLE +/** + * @} + */ + +/** @defgroup HAL_LPTIM_Aliased_Defines HAL LPTIM Aliased Defines maintained for legacy purpose + * @{ + */ + +#define LPTIM_CLOCKSAMPLETIME_DIRECTTRANSISTION LPTIM_CLOCKSAMPLETIME_DIRECTTRANSITION +#define LPTIM_CLOCKSAMPLETIME_2TRANSISTIONS LPTIM_CLOCKSAMPLETIME_2TRANSITIONS +#define LPTIM_CLOCKSAMPLETIME_4TRANSISTIONS LPTIM_CLOCKSAMPLETIME_4TRANSITIONS +#define LPTIM_CLOCKSAMPLETIME_8TRANSISTIONS LPTIM_CLOCKSAMPLETIME_8TRANSITIONS + +#define LPTIM_CLOCKPOLARITY_RISINGEDGE LPTIM_CLOCKPOLARITY_RISING +#define LPTIM_CLOCKPOLARITY_FALLINGEDGE LPTIM_CLOCKPOLARITY_FALLING +#define LPTIM_CLOCKPOLARITY_BOTHEDGES LPTIM_CLOCKPOLARITY_RISING_FALLING + +#define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION +#define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS + +/* The following 3 definition have also been present in a temporary version of lptim.h */ +/* They need to be renamed also to the right name, just in case */ +#define LPTIM_TRIGSAMPLETIME_2TRANSITION LPTIM_TRIGSAMPLETIME_2TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_4TRANSITION LPTIM_TRIGSAMPLETIME_4TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSITION LPTIM_TRIGSAMPLETIME_8TRANSITIONS + +#if defined(STM32U5) +#define LPTIM_ISR_CC1 LPTIM_ISR_CC1IF +#define LPTIM_ISR_CC2 LPTIM_ISR_CC2IF +#endif /* STM32U5 */ +/** + * @} + */ + +/** @defgroup HAL_NAND_Aliased_Defines HAL NAND Aliased Defines maintained for legacy purpose + * @{ + */ +#define HAL_NAND_Read_Page HAL_NAND_Read_Page_8b +#define HAL_NAND_Write_Page HAL_NAND_Write_Page_8b +#define HAL_NAND_Read_SpareArea HAL_NAND_Read_SpareArea_8b +#define HAL_NAND_Write_SpareArea HAL_NAND_Write_SpareArea_8b + +#define NAND_AddressTypedef NAND_AddressTypeDef + +#define __ARRAY_ADDRESS ARRAY_ADDRESS +#define __ADDR_1st_CYCLE ADDR_1ST_CYCLE +#define __ADDR_2nd_CYCLE ADDR_2ND_CYCLE +#define __ADDR_3rd_CYCLE ADDR_3RD_CYCLE +#define __ADDR_4th_CYCLE ADDR_4TH_CYCLE +/** + * @} + */ + +/** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose + * @{ + */ +#define NOR_StatusTypedef HAL_NOR_StatusTypeDef +#define NOR_SUCCESS HAL_NOR_STATUS_SUCCESS +#define NOR_ONGOING HAL_NOR_STATUS_ONGOING +#define NOR_ERROR HAL_NOR_STATUS_ERROR +#define NOR_TIMEOUT HAL_NOR_STATUS_TIMEOUT + +#define __NOR_WRITE NOR_WRITE +#define __NOR_ADDR_SHIFT NOR_ADDR_SHIFT +/** + * @} + */ + +/** @defgroup HAL_OPAMP_Aliased_Defines HAL OPAMP Aliased Defines maintained for legacy purpose + * @{ + */ + +#define OPAMP_NONINVERTINGINPUT_VP0 OPAMP_NONINVERTINGINPUT_IO0 +#define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 +#define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 +#define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 + +#define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 +#define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 +#define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 + +#define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 +#define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 + +#define IOPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 +#define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 + +#define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 + +#define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32L5) || defined(STM32H7) || defined(STM32G4) +#define HAL_OPAMP_MSP_INIT_CB_ID HAL_OPAMP_MSPINIT_CB_ID +#define HAL_OPAMP_MSP_DEINIT_CB_ID HAL_OPAMP_MSPDEINIT_CB_ID +#endif + +#if defined(STM32L4) || defined(STM32L5) +#define OPAMP_POWERMODE_NORMAL OPAMP_POWERMODE_NORMALPOWER +#elif defined(STM32G4) +#define OPAMP_POWERMODE_NORMAL OPAMP_POWERMODE_NORMALSPEED +#endif + +/** + * @} + */ + +/** @defgroup HAL_I2S_Aliased_Defines HAL I2S Aliased Defines maintained for legacy purpose + * @{ + */ +#define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS + +#if defined(STM32H7) +#define I2S_IT_TXE I2S_IT_TXP +#define I2S_IT_RXNE I2S_IT_RXP + +#define I2S_FLAG_TXE I2S_FLAG_TXP +#define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) +#define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL +#endif +/** + * @} + */ + +/** @defgroup HAL_PCCARD_Aliased_Defines HAL PCCARD Aliased Defines maintained for legacy purpose + * @{ + */ + +/* Compact Flash-ATA registers description */ +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA + +/* Compact Flash-ATA commands */ +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD +#define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD +#define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD + +#define PCCARD_StatusTypedef HAL_PCCARD_StatusTypeDef +#define PCCARD_SUCCESS HAL_PCCARD_STATUS_SUCCESS +#define PCCARD_ONGOING HAL_PCCARD_STATUS_ONGOING +#define PCCARD_ERROR HAL_PCCARD_STATUS_ERROR +#define PCCARD_TIMEOUT HAL_PCCARD_STATUS_TIMEOUT +/** + * @} + */ + +/** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define FORMAT_BIN RTC_FORMAT_BIN +#define FORMAT_BCD RTC_FORMAT_BCD + +#define RTC_ALARMSUBSECONDMASK_None RTC_ALARMSUBSECONDMASK_NONE +#define RTC_TAMPERERASEBACKUP_DISABLED RTC_TAMPER_ERASE_BACKUP_DISABLE +#define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE + +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT + +#define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 + +#define RTC_OUTPUT_REMAP_PC13 RTC_OUTPUT_REMAP_NONE +#define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 +#define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 + +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 + +#if defined(STM32H7) +#define RTC_TAMPCR_TAMPXE RTC_TAMPER_X +#define RTC_TAMPCR_TAMPXIE RTC_TAMPER_X_INTERRUPT + +#define RTC_TAMPER1_INTERRUPT RTC_IT_TAMP1 +#define RTC_TAMPER2_INTERRUPT RTC_IT_TAMP2 +#define RTC_TAMPER3_INTERRUPT RTC_IT_TAMP3 +#define RTC_ALL_TAMPER_INTERRUPT RTC_IT_TAMPALL +#endif /* STM32H7 */ + +/** + * @} + */ + + +/** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose + * @{ + */ +#define SMARTCARD_NACK_ENABLED SMARTCARD_NACK_ENABLE +#define SMARTCARD_NACK_DISABLED SMARTCARD_NACK_DISABLE + +#define SMARTCARD_ONEBIT_SAMPLING_DISABLED SMARTCARD_ONE_BIT_SAMPLE_DISABLE +#define SMARTCARD_ONEBIT_SAMPLING_ENABLED SMARTCARD_ONE_BIT_SAMPLE_ENABLE +#define SMARTCARD_ONEBIT_SAMPLING_DISABLE SMARTCARD_ONE_BIT_SAMPLE_DISABLE +#define SMARTCARD_ONEBIT_SAMPLING_ENABLE SMARTCARD_ONE_BIT_SAMPLE_ENABLE + +#define SMARTCARD_TIMEOUT_DISABLED SMARTCARD_TIMEOUT_DISABLE +#define SMARTCARD_TIMEOUT_ENABLED SMARTCARD_TIMEOUT_ENABLE + +#define SMARTCARD_LASTBIT_DISABLED SMARTCARD_LASTBIT_DISABLE +#define SMARTCARD_LASTBIT_ENABLED SMARTCARD_LASTBIT_ENABLE +/** + * @} + */ + + +/** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose + * @{ + */ +#define SMBUS_DUALADDRESS_DISABLED SMBUS_DUALADDRESS_DISABLE +#define SMBUS_DUALADDRESS_ENABLED SMBUS_DUALADDRESS_ENABLE +#define SMBUS_GENERALCALL_DISABLED SMBUS_GENERALCALL_DISABLE +#define SMBUS_GENERALCALL_ENABLED SMBUS_GENERALCALL_ENABLE +#define SMBUS_NOSTRETCH_DISABLED SMBUS_NOSTRETCH_DISABLE +#define SMBUS_NOSTRETCH_ENABLED SMBUS_NOSTRETCH_ENABLE +#define SMBUS_ANALOGFILTER_ENABLED SMBUS_ANALOGFILTER_ENABLE +#define SMBUS_ANALOGFILTER_DISABLED SMBUS_ANALOGFILTER_DISABLE +#define SMBUS_PEC_DISABLED SMBUS_PEC_DISABLE +#define SMBUS_PEC_ENABLED SMBUS_PEC_ENABLE +#define HAL_SMBUS_STATE_SLAVE_LISTEN HAL_SMBUS_STATE_LISTEN +/** + * @} + */ + +/** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose + * @{ + */ +#define SPI_TIMODE_DISABLED SPI_TIMODE_DISABLE +#define SPI_TIMODE_ENABLED SPI_TIMODE_ENABLE + +#define SPI_CRCCALCULATION_DISABLED SPI_CRCCALCULATION_DISABLE +#define SPI_CRCCALCULATION_ENABLED SPI_CRCCALCULATION_ENABLE + +#define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE +#define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE + +#if defined(STM32H7) + +#define SPI_FLAG_TXE SPI_FLAG_TXP +#define SPI_FLAG_RXNE SPI_FLAG_RXP + +#define SPI_IT_TXE SPI_IT_TXP +#define SPI_IT_RXNE SPI_IT_RXP + +#define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET +#define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET +#define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET +#define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + +/** + * @} + */ + +/** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose + * @{ + */ +#define CCER_CCxE_MASK TIM_CCER_CCxE_MASK +#define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK + +#define TIM_DMABase_CR1 TIM_DMABASE_CR1 +#define TIM_DMABase_CR2 TIM_DMABASE_CR2 +#define TIM_DMABase_SMCR TIM_DMABASE_SMCR +#define TIM_DMABase_DIER TIM_DMABASE_DIER +#define TIM_DMABase_SR TIM_DMABASE_SR +#define TIM_DMABase_EGR TIM_DMABASE_EGR +#define TIM_DMABase_CCMR1 TIM_DMABASE_CCMR1 +#define TIM_DMABase_CCMR2 TIM_DMABASE_CCMR2 +#define TIM_DMABase_CCER TIM_DMABASE_CCER +#define TIM_DMABase_CNT TIM_DMABASE_CNT +#define TIM_DMABase_PSC TIM_DMABASE_PSC +#define TIM_DMABase_ARR TIM_DMABASE_ARR +#define TIM_DMABase_RCR TIM_DMABASE_RCR +#define TIM_DMABase_CCR1 TIM_DMABASE_CCR1 +#define TIM_DMABase_CCR2 TIM_DMABASE_CCR2 +#define TIM_DMABase_CCR3 TIM_DMABASE_CCR3 +#define TIM_DMABase_CCR4 TIM_DMABASE_CCR4 +#define TIM_DMABase_BDTR TIM_DMABASE_BDTR +#define TIM_DMABase_DCR TIM_DMABASE_DCR +#define TIM_DMABase_DMAR TIM_DMABASE_DMAR +#define TIM_DMABase_OR1 TIM_DMABASE_OR1 +#define TIM_DMABase_CCMR3 TIM_DMABASE_CCMR3 +#define TIM_DMABase_CCR5 TIM_DMABASE_CCR5 +#define TIM_DMABase_CCR6 TIM_DMABASE_CCR6 +#define TIM_DMABase_OR2 TIM_DMABASE_OR2 +#define TIM_DMABase_OR3 TIM_DMABASE_OR3 +#define TIM_DMABase_OR TIM_DMABASE_OR + +#define TIM_EventSource_Update TIM_EVENTSOURCE_UPDATE +#define TIM_EventSource_CC1 TIM_EVENTSOURCE_CC1 +#define TIM_EventSource_CC2 TIM_EVENTSOURCE_CC2 +#define TIM_EventSource_CC3 TIM_EVENTSOURCE_CC3 +#define TIM_EventSource_CC4 TIM_EVENTSOURCE_CC4 +#define TIM_EventSource_COM TIM_EVENTSOURCE_COM +#define TIM_EventSource_Trigger TIM_EVENTSOURCE_TRIGGER +#define TIM_EventSource_Break TIM_EVENTSOURCE_BREAK +#define TIM_EventSource_Break2 TIM_EVENTSOURCE_BREAK2 + +#define TIM_DMABurstLength_1Transfer TIM_DMABURSTLENGTH_1TRANSFER +#define TIM_DMABurstLength_2Transfers TIM_DMABURSTLENGTH_2TRANSFERS +#define TIM_DMABurstLength_3Transfers TIM_DMABURSTLENGTH_3TRANSFERS +#define TIM_DMABurstLength_4Transfers TIM_DMABURSTLENGTH_4TRANSFERS +#define TIM_DMABurstLength_5Transfers TIM_DMABURSTLENGTH_5TRANSFERS +#define TIM_DMABurstLength_6Transfers TIM_DMABURSTLENGTH_6TRANSFERS +#define TIM_DMABurstLength_7Transfers TIM_DMABURSTLENGTH_7TRANSFERS +#define TIM_DMABurstLength_8Transfers TIM_DMABURSTLENGTH_8TRANSFERS +#define TIM_DMABurstLength_9Transfers TIM_DMABURSTLENGTH_9TRANSFERS +#define TIM_DMABurstLength_10Transfers TIM_DMABURSTLENGTH_10TRANSFERS +#define TIM_DMABurstLength_11Transfers TIM_DMABURSTLENGTH_11TRANSFERS +#define TIM_DMABurstLength_12Transfers TIM_DMABURSTLENGTH_12TRANSFERS +#define TIM_DMABurstLength_13Transfers TIM_DMABURSTLENGTH_13TRANSFERS +#define TIM_DMABurstLength_14Transfers TIM_DMABURSTLENGTH_14TRANSFERS +#define TIM_DMABurstLength_15Transfers TIM_DMABURSTLENGTH_15TRANSFERS +#define TIM_DMABurstLength_16Transfers TIM_DMABURSTLENGTH_16TRANSFERS +#define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS +#define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS + +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#define IS_TIM_HALL_INTERFACE_INSTANCE IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE +#endif + +#if defined(STM32H7) +#define TIM_TIM1_ETR_COMP1_OUT TIM_TIM1_ETR_COMP1 +#define TIM_TIM1_ETR_COMP2_OUT TIM_TIM1_ETR_COMP2 +#define TIM_TIM8_ETR_COMP1_OUT TIM_TIM8_ETR_COMP1 +#define TIM_TIM8_ETR_COMP2_OUT TIM_TIM8_ETR_COMP2 +#define TIM_TIM2_ETR_COMP1_OUT TIM_TIM2_ETR_COMP1 +#define TIM_TIM2_ETR_COMP2_OUT TIM_TIM2_ETR_COMP2 +#define TIM_TIM3_ETR_COMP1_OUT TIM_TIM3_ETR_COMP1 +#define TIM_TIM1_TI1_COMP1_OUT TIM_TIM1_TI1_COMP1 +#define TIM_TIM8_TI1_COMP2_OUT TIM_TIM8_TI1_COMP2 +#define TIM_TIM2_TI4_COMP1_OUT TIM_TIM2_TI4_COMP1 +#define TIM_TIM2_TI4_COMP2_OUT TIM_TIM2_TI4_COMP2 +#define TIM_TIM2_TI4_COMP1COMP2_OUT TIM_TIM2_TI4_COMP1_COMP2 +#define TIM_TIM3_TI1_COMP1_OUT TIM_TIM3_TI1_COMP1 +#define TIM_TIM3_TI1_COMP2_OUT TIM_TIM3_TI1_COMP2 +#define TIM_TIM3_TI1_COMP1COMP2_OUT TIM_TIM3_TI1_COMP1_COMP2 +#endif + +/** + * @} + */ + +/** @defgroup HAL_TSC_Aliased_Defines HAL TSC Aliased Defines maintained for legacy purpose + * @{ + */ +#define TSC_SYNC_POL_FALL TSC_SYNC_POLARITY_FALLING +#define TSC_SYNC_POL_RISE_HIGH TSC_SYNC_POLARITY_RISING +/** + * @} + */ + +/** @defgroup HAL_UART_Aliased_Defines HAL UART Aliased Defines maintained for legacy purpose + * @{ + */ +#define UART_ONEBIT_SAMPLING_DISABLED UART_ONE_BIT_SAMPLE_DISABLE +#define UART_ONEBIT_SAMPLING_ENABLED UART_ONE_BIT_SAMPLE_ENABLE +#define UART_ONE_BIT_SAMPLE_DISABLED UART_ONE_BIT_SAMPLE_DISABLE +#define UART_ONE_BIT_SAMPLE_ENABLED UART_ONE_BIT_SAMPLE_ENABLE + +#define __HAL_UART_ONEBIT_ENABLE __HAL_UART_ONE_BIT_SAMPLE_ENABLE +#define __HAL_UART_ONEBIT_DISABLE __HAL_UART_ONE_BIT_SAMPLE_DISABLE + +#define __DIV_SAMPLING16 UART_DIV_SAMPLING16 +#define __DIVMANT_SAMPLING16 UART_DIVMANT_SAMPLING16 +#define __DIVFRAQ_SAMPLING16 UART_DIVFRAQ_SAMPLING16 +#define __UART_BRR_SAMPLING16 UART_BRR_SAMPLING16 + +#define __DIV_SAMPLING8 UART_DIV_SAMPLING8 +#define __DIVMANT_SAMPLING8 UART_DIVMANT_SAMPLING8 +#define __DIVFRAQ_SAMPLING8 UART_DIVFRAQ_SAMPLING8 +#define __UART_BRR_SAMPLING8 UART_BRR_SAMPLING8 + +#define __DIV_LPUART UART_DIV_LPUART + +#define UART_WAKEUPMETHODE_IDLELINE UART_WAKEUPMETHOD_IDLELINE +#define UART_WAKEUPMETHODE_ADDRESSMARK UART_WAKEUPMETHOD_ADDRESSMARK + +/** + * @} + */ + + +/** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose + * @{ + */ + +#define USART_CLOCK_DISABLED USART_CLOCK_DISABLE +#define USART_CLOCK_ENABLED USART_CLOCK_ENABLE + +#define USARTNACK_ENABLED USART_NACK_ENABLE +#define USARTNACK_DISABLED USART_NACK_DISABLE +/** + * @} + */ + +/** @defgroup HAL_WWDG_Aliased_Defines HAL WWDG Aliased Defines maintained for legacy purpose + * @{ + */ +#define CFR_BASE WWDG_CFR_BASE + +/** + * @} + */ + +/** @defgroup HAL_CAN_Aliased_Defines HAL CAN Aliased Defines maintained for legacy purpose + * @{ + */ +#define CAN_FilterFIFO0 CAN_FILTER_FIFO0 +#define CAN_FilterFIFO1 CAN_FILTER_FIFO1 +#define CAN_IT_RQCP0 CAN_IT_TME +#define CAN_IT_RQCP1 CAN_IT_TME +#define CAN_IT_RQCP2 CAN_IT_TME +#define INAK_TIMEOUT CAN_TIMEOUT_VALUE +#define SLAK_TIMEOUT CAN_TIMEOUT_VALUE +#define CAN_TXSTATUS_FAILED ((uint8_t)0x00U) +#define CAN_TXSTATUS_OK ((uint8_t)0x01U) +#define CAN_TXSTATUS_PENDING ((uint8_t)0x02U) + +/** + * @} + */ + +/** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose + * @{ + */ + +#define VLAN_TAG ETH_VLAN_TAG +#define MIN_ETH_PAYLOAD ETH_MIN_ETH_PAYLOAD +#define MAX_ETH_PAYLOAD ETH_MAX_ETH_PAYLOAD +#define JUMBO_FRAME_PAYLOAD ETH_JUMBO_FRAME_PAYLOAD +#define MACMIIAR_CR_MASK ETH_MACMIIAR_CR_MASK +#define MACCR_CLEAR_MASK ETH_MACCR_CLEAR_MASK +#define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK +#define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK + +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ +#if defined(STM32F1) +#else +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#endif +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ + +/** + * @} + */ + +/** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose + * @{ + */ +#define HAL_DCMI_ERROR_OVF HAL_DCMI_ERROR_OVR +#define DCMI_IT_OVF DCMI_IT_OVR +#define DCMI_FLAG_OVFRI DCMI_FLAG_OVRRI +#define DCMI_FLAG_OVFMI DCMI_FLAG_OVRMI + +#define HAL_DCMI_ConfigCROP HAL_DCMI_ConfigCrop +#define HAL_DCMI_EnableCROP HAL_DCMI_EnableCrop +#define HAL_DCMI_DisableCROP HAL_DCMI_DisableCrop + +/** + * @} + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) +/** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose + * @{ + */ +#define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 +#define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 + +#define CM_ARGB8888 DMA2D_INPUT_ARGB8888 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_ARGB1555 DMA2D_INPUT_ARGB1555 +#define CM_ARGB4444 DMA2D_INPUT_ARGB4444 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 +/** + * @} + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) || defined(STM32U5) +/** @defgroup DMA2D_Aliases DMA2D API Aliases + * @{ + */ +#define HAL_DMA2D_DisableCLUT HAL_DMA2D_CLUTLoading_Abort /*!< Aliased to HAL_DMA2D_CLUTLoading_Abort + for compatibility with legacy code */ +/** + * @} + */ + +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 || STM32U5 */ + +/** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose + * @{ + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup HAL_CRYP_Aliased_Functions HAL CRYP Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback +/** + * @} + */ + +/** @defgroup HAL_DCACHE_Aliased_Functions HAL DCACHE Aliased Functions maintained for legacy purpose + * @{ + */ + +#if defined(STM32U5) +#define HAL_DCACHE_CleanInvalidateByAddr HAL_DCACHE_CleanInvalidByAddr +#define HAL_DCACHE_CleanInvalidateByAddr_IT HAL_DCACHE_CleanInvalidByAddr_IT +#endif /* STM32U5 */ + +/** + * @} + */ + +#if !defined(STM32F2) +/** @defgroup HASH_alias HASH API alias + * @{ + */ +#define HAL_HASHEx_IRQHandler HAL_HASH_IRQHandler /*!< Redirection for compatibility with legacy code */ +/** + * + * @} + */ +#endif /* STM32F2 */ +/** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef +#define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef +#define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish +#define HAL_HMAC_SHA1_Finish HAL_HASH_SHA1_Finish +#define HAL_HMAC_SHA224_Finish HAL_HASH_SHA224_Finish +#define HAL_HMAC_SHA256_Finish HAL_HASH_SHA256_Finish + +/*HASH Algorithm Selection*/ + +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 +#define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 +#define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 + +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC + +#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY +#define HASH_HMACKeyType_LongKey HASH_HMAC_KEYTYPE_LONGKEY + +#if defined(STM32L4) || defined(STM32L5) || defined(STM32F2) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) + +#define HAL_HASH_MD5_Accumulate HAL_HASH_MD5_Accmlt +#define HAL_HASH_MD5_Accumulate_End HAL_HASH_MD5_Accmlt_End +#define HAL_HASH_MD5_Accumulate_IT HAL_HASH_MD5_Accmlt_IT +#define HAL_HASH_MD5_Accumulate_End_IT HAL_HASH_MD5_Accmlt_End_IT + +#define HAL_HASH_SHA1_Accumulate HAL_HASH_SHA1_Accmlt +#define HAL_HASH_SHA1_Accumulate_End HAL_HASH_SHA1_Accmlt_End +#define HAL_HASH_SHA1_Accumulate_IT HAL_HASH_SHA1_Accmlt_IT +#define HAL_HASH_SHA1_Accumulate_End_IT HAL_HASH_SHA1_Accmlt_End_IT + +#define HAL_HASHEx_SHA224_Accumulate HAL_HASHEx_SHA224_Accmlt +#define HAL_HASHEx_SHA224_Accumulate_End HAL_HASHEx_SHA224_Accmlt_End +#define HAL_HASHEx_SHA224_Accumulate_IT HAL_HASHEx_SHA224_Accmlt_IT +#define HAL_HASHEx_SHA224_Accumulate_End_IT HAL_HASHEx_SHA224_Accmlt_End_IT + +#define HAL_HASHEx_SHA256_Accumulate HAL_HASHEx_SHA256_Accmlt +#define HAL_HASHEx_SHA256_Accumulate_End HAL_HASHEx_SHA256_Accmlt_End +#define HAL_HASHEx_SHA256_Accumulate_IT HAL_HASHEx_SHA256_Accmlt_IT +#define HAL_HASHEx_SHA256_Accumulate_End_IT HAL_HASHEx_SHA256_Accmlt_End_IT + +#endif /* STM32L4 || STM32L5 || STM32F2 || STM32F4 || STM32F7 || STM32H7 */ +/** + * @} + */ + +/** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_EnableDBGSleepMode HAL_DBGMCU_EnableDBGSleepMode +#define HAL_DisableDBGSleepMode HAL_DBGMCU_DisableDBGSleepMode +#define HAL_EnableDBGStopMode HAL_DBGMCU_EnableDBGStopMode +#define HAL_DisableDBGStopMode HAL_DBGMCU_DisableDBGStopMode +#define HAL_EnableDBGStandbyMode HAL_DBGMCU_EnableDBGStandbyMode +#define HAL_DisableDBGStandbyMode HAL_DBGMCU_DisableDBGStandbyMode +#define HAL_DBG_LowPowerConfig(Periph, cmd) (((cmd\ + )==ENABLE)? HAL_DBGMCU_DBG_EnableLowPowerConfig(Periph) : HAL_DBGMCU_DBG_DisableLowPowerConfig(Periph)) +#define HAL_VREFINT_OutputSelect HAL_SYSCFG_VREFINT_OutputSelect +#define HAL_Lock_Cmd(cmd) (((cmd)==ENABLE) ? HAL_SYSCFG_Enable_Lock_VREFINT() : HAL_SYSCFG_Disable_Lock_VREFINT()) +#if defined(STM32L0) +#else +#define HAL_VREFINT_Cmd(cmd) (((cmd)==ENABLE)? HAL_SYSCFG_EnableVREFINT() : HAL_SYSCFG_DisableVREFINT()) +#endif +#define HAL_ADC_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT()) +#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd\ + )==ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor()) +#if defined(STM32H7A3xx) || defined(STM32H7B3xx) || defined(STM32H7B0xx) || defined(STM32H7A3xxQ) || defined(STM32H7B3xxQ) || defined(STM32H7B0xxQ) +#define HAL_EnableSRDomainDBGStopMode HAL_EnableDomain3DBGStopMode +#define HAL_DisableSRDomainDBGStopMode HAL_DisableDomain3DBGStopMode +#define HAL_EnableSRDomainDBGStandbyMode HAL_EnableDomain3DBGStandbyMode +#define HAL_DisableSRDomainDBGStandbyMode HAL_DisableDomain3DBGStandbyMode +#endif /* STM32H7A3xx || STM32H7B3xx || STM32H7B0xx || STM32H7A3xxQ || STM32H7B3xxQ || STM32H7B0xxQ */ + +/** + * @} + */ + +/** @defgroup HAL_FLASH_Aliased_Functions HAL FLASH Aliased Functions maintained for legacy purpose + * @{ + */ +#define FLASH_HalfPageProgram HAL_FLASHEx_HalfPageProgram +#define FLASH_EnableRunPowerDown HAL_FLASHEx_EnableRunPowerDown +#define FLASH_DisableRunPowerDown HAL_FLASHEx_DisableRunPowerDown +#define HAL_DATA_EEPROMEx_Unlock HAL_FLASHEx_DATAEEPROM_Unlock +#define HAL_DATA_EEPROMEx_Lock HAL_FLASHEx_DATAEEPROM_Lock +#define HAL_DATA_EEPROMEx_Erase HAL_FLASHEx_DATAEEPROM_Erase +#define HAL_DATA_EEPROMEx_Program HAL_FLASHEx_DATAEEPROM_Program + +/** + * @} + */ + +/** @defgroup HAL_I2C_Aliased_Functions HAL I2C Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_I2CEx_AnalogFilter_Config HAL_I2CEx_ConfigAnalogFilter +#define HAL_I2CEx_DigitalFilter_Config HAL_I2CEx_ConfigDigitalFilter +#define HAL_FMPI2CEx_AnalogFilter_Config HAL_FMPI2CEx_ConfigAnalogFilter +#define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter + +#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd\ + )==ENABLE)? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus): HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus)) + +#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4) || defined(STM32L1) +#define HAL_I2C_Master_Sequential_Transmit_IT HAL_I2C_Master_Seq_Transmit_IT +#define HAL_I2C_Master_Sequential_Receive_IT HAL_I2C_Master_Seq_Receive_IT +#define HAL_I2C_Slave_Sequential_Transmit_IT HAL_I2C_Slave_Seq_Transmit_IT +#define HAL_I2C_Slave_Sequential_Receive_IT HAL_I2C_Slave_Seq_Receive_IT +#endif /* STM32H7 || STM32WB || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 || STM32L1 */ +#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)|| defined(STM32L1) +#define HAL_I2C_Master_Sequential_Transmit_DMA HAL_I2C_Master_Seq_Transmit_DMA +#define HAL_I2C_Master_Sequential_Receive_DMA HAL_I2C_Master_Seq_Receive_DMA +#define HAL_I2C_Slave_Sequential_Transmit_DMA HAL_I2C_Slave_Seq_Transmit_DMA +#define HAL_I2C_Slave_Sequential_Receive_DMA HAL_I2C_Slave_Seq_Receive_DMA +#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 || STM32L1 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ +/** + * @} + */ + +/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose + * @{ + */ + +#if defined(STM32G0) +#define HAL_PWR_ConfigPVD HAL_PWREx_ConfigPVD +#define HAL_PWR_EnablePVD HAL_PWREx_EnablePVD +#define HAL_PWR_DisablePVD HAL_PWREx_DisablePVD +#define HAL_PWR_PVD_IRQHandler HAL_PWREx_PVD_IRQHandler +#endif +#define HAL_PWR_PVDConfig HAL_PWR_ConfigPVD +#define HAL_PWR_DisableBkUpReg HAL_PWREx_DisableBkUpReg +#define HAL_PWR_DisableFlashPowerDown HAL_PWREx_DisableFlashPowerDown +#define HAL_PWR_DisableVddio2Monitor HAL_PWREx_DisableVddio2Monitor +#define HAL_PWR_EnableBkUpReg HAL_PWREx_EnableBkUpReg +#define HAL_PWR_EnableFlashPowerDown HAL_PWREx_EnableFlashPowerDown +#define HAL_PWR_EnableVddio2Monitor HAL_PWREx_EnableVddio2Monitor +#define HAL_PWR_PVD_PVM_IRQHandler HAL_PWREx_PVD_PVM_IRQHandler +#define HAL_PWR_PVDLevelConfig HAL_PWR_ConfigPVD +#define HAL_PWR_Vddio2Monitor_IRQHandler HAL_PWREx_Vddio2Monitor_IRQHandler +#define HAL_PWR_Vddio2MonitorCallback HAL_PWREx_Vddio2MonitorCallback +#define HAL_PWREx_ActivateOverDrive HAL_PWREx_EnableOverDrive +#define HAL_PWREx_DeactivateOverDrive HAL_PWREx_DisableOverDrive +#define HAL_PWREx_DisableSDADCAnalog HAL_PWREx_DisableSDADC +#define HAL_PWREx_EnableSDADCAnalog HAL_PWREx_EnableSDADC +#define HAL_PWREx_PVMConfig HAL_PWREx_ConfigPVM + +#define PWR_MODE_NORMAL PWR_PVD_MODE_NORMAL +#define PWR_MODE_IT_RISING PWR_PVD_MODE_IT_RISING +#define PWR_MODE_IT_FALLING PWR_PVD_MODE_IT_FALLING +#define PWR_MODE_IT_RISING_FALLING PWR_PVD_MODE_IT_RISING_FALLING +#define PWR_MODE_EVENT_RISING PWR_PVD_MODE_EVENT_RISING +#define PWR_MODE_EVENT_FALLING PWR_PVD_MODE_EVENT_FALLING +#define PWR_MODE_EVENT_RISING_FALLING PWR_PVD_MODE_EVENT_RISING_FALLING + +#define CR_OFFSET_BB PWR_CR_OFFSET_BB +#define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB + +#define DBP_BitNumber DBP_BIT_NUMBER +#define PVDE_BitNumber PVDE_BIT_NUMBER +#define PMODE_BitNumber PMODE_BIT_NUMBER +#define EWUP_BitNumber EWUP_BIT_NUMBER +#define FPDS_BitNumber FPDS_BIT_NUMBER +#define ODEN_BitNumber ODEN_BIT_NUMBER +#define ODSWEN_BitNumber ODSWEN_BIT_NUMBER +#define MRLVDS_BitNumber MRLVDS_BIT_NUMBER +#define LPLVDS_BitNumber LPLVDS_BIT_NUMBER +#define BRE_BitNumber BRE_BIT_NUMBER + +#define PWR_MODE_EVT PWR_PVD_MODE_NORMAL + +/** + * @} + */ + +/** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +/** + * @} + */ + +/** @defgroup HAL_SPI_Aliased_Functions HAL SPI Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo +/** + * @} + */ + +/** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_TIM_DMADelayPulseCplt TIM_DMADelayPulseCplt +#define HAL_TIM_DMAError TIM_DMAError +#define HAL_TIM_DMACaptureCplt TIM_DMACaptureCplt +#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt +#if defined(STM32H7) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) +#define HAL_TIM_SlaveConfigSynchronization HAL_TIM_SlaveConfigSynchro +#define HAL_TIM_SlaveConfigSynchronization_IT HAL_TIM_SlaveConfigSynchro_IT +#define HAL_TIMEx_CommutationCallback HAL_TIMEx_CommutCallback +#define HAL_TIMEx_ConfigCommutationEvent HAL_TIMEx_ConfigCommutEvent +#define HAL_TIMEx_ConfigCommutationEvent_IT HAL_TIMEx_ConfigCommutEvent_IT +#define HAL_TIMEx_ConfigCommutationEvent_DMA HAL_TIMEx_ConfigCommutEvent_DMA +#endif /* STM32H7 || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 */ +/** + * @} + */ + +/** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback +/** + * @} + */ + +/** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig +/** + * @} + */ + + +/** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose + * @{ + */ + +/** + * @} + */ + +/* Exported macros ------------------------------------------------------------*/ + +/** @defgroup HAL_AES_Aliased_Macros HAL CRYP Aliased Macros maintained for legacy purpose + * @{ + */ +#define AES_IT_CC CRYP_IT_CC +#define AES_IT_ERR CRYP_IT_ERR +#define AES_FLAG_CCF CRYP_FLAG_CCF +/** + * @} + */ + +/** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_GET_BOOT_MODE __HAL_SYSCFG_GET_BOOT_MODE +#define __HAL_REMAPMEMORY_FLASH __HAL_SYSCFG_REMAPMEMORY_FLASH +#define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH +#define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM +#define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC +#define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI +#define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK +#define __HAL_GET_FLAG __HAL_SYSCFG_GET_FLAG +#define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG +#define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE +#define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE + +#define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY +#define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 +#define IS_SYSCFG_FASTMODEPLUS_CONFIG IS_I2C_FASTMODEPLUS +#define UFB_MODE_BitNumber UFB_MODE_BIT_NUMBER +#define CMP_PD_BitNumber CMP_PD_BIT_NUMBER + +/** + * @} + */ + + +/** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose + * @{ + */ +#define __ADC_ENABLE __HAL_ADC_ENABLE +#define __ADC_DISABLE __HAL_ADC_DISABLE +#define __HAL_ADC_ENABLING_CONDITIONS ADC_ENABLING_CONDITIONS +#define __HAL_ADC_DISABLING_CONDITIONS ADC_DISABLING_CONDITIONS +#define __HAL_ADC_IS_ENABLED ADC_IS_ENABLE +#define __ADC_IS_ENABLED ADC_IS_ENABLE +#define __HAL_ADC_IS_SOFTWARE_START_REGULAR ADC_IS_SOFTWARE_START_REGULAR +#define __HAL_ADC_IS_SOFTWARE_START_INJECTED ADC_IS_SOFTWARE_START_INJECTED +#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED +#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR ADC_IS_CONVERSION_ONGOING_REGULAR +#define __HAL_ADC_IS_CONVERSION_ONGOING_INJECTED ADC_IS_CONVERSION_ONGOING_INJECTED +#define __HAL_ADC_IS_CONVERSION_ONGOING ADC_IS_CONVERSION_ONGOING +#define __HAL_ADC_CLEAR_ERRORCODE ADC_CLEAR_ERRORCODE + +#define __HAL_ADC_GET_RESOLUTION ADC_GET_RESOLUTION +#define __HAL_ADC_JSQR_RK ADC_JSQR_RK +#define __HAL_ADC_CFGR_AWD1CH ADC_CFGR_AWD1CH_SHIFT +#define __HAL_ADC_CFGR_AWD23CR ADC_CFGR_AWD23CR +#define __HAL_ADC_CFGR_INJECT_AUTO_CONVERSION ADC_CFGR_INJECT_AUTO_CONVERSION +#define __HAL_ADC_CFGR_INJECT_CONTEXT_QUEUE ADC_CFGR_INJECT_CONTEXT_QUEUE +#define __HAL_ADC_CFGR_INJECT_DISCCONTINUOUS ADC_CFGR_INJECT_DISCCONTINUOUS +#define __HAL_ADC_CFGR_REG_DISCCONTINUOUS ADC_CFGR_REG_DISCCONTINUOUS +#define __HAL_ADC_CFGR_DISCONTINUOUS_NUM ADC_CFGR_DISCONTINUOUS_NUM +#define __HAL_ADC_CFGR_AUTOWAIT ADC_CFGR_AUTOWAIT +#define __HAL_ADC_CFGR_CONTINUOUS ADC_CFGR_CONTINUOUS +#define __HAL_ADC_CFGR_OVERRUN ADC_CFGR_OVERRUN +#define __HAL_ADC_CFGR_DMACONTREQ ADC_CFGR_DMACONTREQ +#define __HAL_ADC_CFGR_EXTSEL ADC_CFGR_EXTSEL_SET +#define __HAL_ADC_JSQR_JEXTSEL ADC_JSQR_JEXTSEL_SET +#define __HAL_ADC_OFR_CHANNEL ADC_OFR_CHANNEL +#define __HAL_ADC_DIFSEL_CHANNEL ADC_DIFSEL_CHANNEL +#define __HAL_ADC_CALFACT_DIFF_SET ADC_CALFACT_DIFF_SET +#define __HAL_ADC_CALFACT_DIFF_GET ADC_CALFACT_DIFF_GET +#define __HAL_ADC_TRX_HIGHTHRESHOLD ADC_TRX_HIGHTHRESHOLD + +#define __HAL_ADC_OFFSET_SHIFT_RESOLUTION ADC_OFFSET_SHIFT_RESOLUTION +#define __HAL_ADC_AWD1THRESHOLD_SHIFT_RESOLUTION ADC_AWD1THRESHOLD_SHIFT_RESOLUTION +#define __HAL_ADC_AWD23THRESHOLD_SHIFT_RESOLUTION ADC_AWD23THRESHOLD_SHIFT_RESOLUTION +#define __HAL_ADC_COMMON_REGISTER ADC_COMMON_REGISTER +#define __HAL_ADC_COMMON_CCR_MULTI ADC_COMMON_CCR_MULTI +#define __HAL_ADC_MULTIMODE_IS_ENABLED ADC_MULTIMODE_IS_ENABLE +#define __ADC_MULTIMODE_IS_ENABLED ADC_MULTIMODE_IS_ENABLE +#define __HAL_ADC_NONMULTIMODE_OR_MULTIMODEMASTER ADC_NONMULTIMODE_OR_MULTIMODEMASTER +#define __HAL_ADC_COMMON_ADC_OTHER ADC_COMMON_ADC_OTHER +#define __HAL_ADC_MULTI_SLAVE ADC_MULTI_SLAVE + +#define __HAL_ADC_SQR1_L ADC_SQR1_L_SHIFT +#define __HAL_ADC_JSQR_JL ADC_JSQR_JL_SHIFT +#define __HAL_ADC_JSQR_RK_JL ADC_JSQR_RK_JL +#define __HAL_ADC_CR1_DISCONTINUOUS_NUM ADC_CR1_DISCONTINUOUS_NUM +#define __HAL_ADC_CR1_SCAN ADC_CR1_SCAN_SET +#define __HAL_ADC_CONVCYCLES_MAX_RANGE ADC_CONVCYCLES_MAX_RANGE +#define __HAL_ADC_CLOCK_PRESCALER_RANGE ADC_CLOCK_PRESCALER_RANGE +#define __HAL_ADC_GET_CLOCK_PRESCALER ADC_GET_CLOCK_PRESCALER + +#define __HAL_ADC_SQR1 ADC_SQR1 +#define __HAL_ADC_SMPR1 ADC_SMPR1 +#define __HAL_ADC_SMPR2 ADC_SMPR2 +#define __HAL_ADC_SQR3_RK ADC_SQR3_RK +#define __HAL_ADC_SQR2_RK ADC_SQR2_RK +#define __HAL_ADC_SQR1_RK ADC_SQR1_RK +#define __HAL_ADC_CR2_CONTINUOUS ADC_CR2_CONTINUOUS +#define __HAL_ADC_CR1_DISCONTINUOUS ADC_CR1_DISCONTINUOUS +#define __HAL_ADC_CR1_SCANCONV ADC_CR1_SCANCONV +#define __HAL_ADC_CR2_EOCSelection ADC_CR2_EOCSelection +#define __HAL_ADC_CR2_DMAContReq ADC_CR2_DMAContReq +#define __HAL_ADC_JSQR ADC_JSQR + +#define __HAL_ADC_CHSELR_CHANNEL ADC_CHSELR_CHANNEL +#define __HAL_ADC_CFGR1_REG_DISCCONTINUOUS ADC_CFGR1_REG_DISCCONTINUOUS +#define __HAL_ADC_CFGR1_AUTOOFF ADC_CFGR1_AUTOOFF +#define __HAL_ADC_CFGR1_AUTOWAIT ADC_CFGR1_AUTOWAIT +#define __HAL_ADC_CFGR1_CONTINUOUS ADC_CFGR1_CONTINUOUS +#define __HAL_ADC_CFGR1_OVERRUN ADC_CFGR1_OVERRUN +#define __HAL_ADC_CFGR1_SCANDIR ADC_CFGR1_SCANDIR +#define __HAL_ADC_CFGR1_DMACONTREQ ADC_CFGR1_DMACONTREQ + +/** + * @} + */ + +/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_DHR12R1_ALIGNEMENT DAC_DHR12R1_ALIGNMENT +#define __HAL_DHR12R2_ALIGNEMENT DAC_DHR12R2_ALIGNMENT +#define __HAL_DHR12RD_ALIGNEMENT DAC_DHR12RD_ALIGNMENT +#define IS_DAC_GENERATE_WAVE IS_DAC_WAVE + +/** + * @} + */ + +/** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_FREEZE_TIM1_DBGMCU __HAL_DBGMCU_FREEZE_TIM1 +#define __HAL_UNFREEZE_TIM1_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM1 +#define __HAL_FREEZE_TIM2_DBGMCU __HAL_DBGMCU_FREEZE_TIM2 +#define __HAL_UNFREEZE_TIM2_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM2 +#define __HAL_FREEZE_TIM3_DBGMCU __HAL_DBGMCU_FREEZE_TIM3 +#define __HAL_UNFREEZE_TIM3_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM3 +#define __HAL_FREEZE_TIM4_DBGMCU __HAL_DBGMCU_FREEZE_TIM4 +#define __HAL_UNFREEZE_TIM4_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM4 +#define __HAL_FREEZE_TIM5_DBGMCU __HAL_DBGMCU_FREEZE_TIM5 +#define __HAL_UNFREEZE_TIM5_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM5 +#define __HAL_FREEZE_TIM6_DBGMCU __HAL_DBGMCU_FREEZE_TIM6 +#define __HAL_UNFREEZE_TIM6_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM6 +#define __HAL_FREEZE_TIM7_DBGMCU __HAL_DBGMCU_FREEZE_TIM7 +#define __HAL_UNFREEZE_TIM7_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM7 +#define __HAL_FREEZE_TIM8_DBGMCU __HAL_DBGMCU_FREEZE_TIM8 +#define __HAL_UNFREEZE_TIM8_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM8 + +#define __HAL_FREEZE_TIM9_DBGMCU __HAL_DBGMCU_FREEZE_TIM9 +#define __HAL_UNFREEZE_TIM9_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM9 +#define __HAL_FREEZE_TIM10_DBGMCU __HAL_DBGMCU_FREEZE_TIM10 +#define __HAL_UNFREEZE_TIM10_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM10 +#define __HAL_FREEZE_TIM11_DBGMCU __HAL_DBGMCU_FREEZE_TIM11 +#define __HAL_UNFREEZE_TIM11_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM11 +#define __HAL_FREEZE_TIM12_DBGMCU __HAL_DBGMCU_FREEZE_TIM12 +#define __HAL_UNFREEZE_TIM12_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM12 +#define __HAL_FREEZE_TIM13_DBGMCU __HAL_DBGMCU_FREEZE_TIM13 +#define __HAL_UNFREEZE_TIM13_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM13 +#define __HAL_FREEZE_TIM14_DBGMCU __HAL_DBGMCU_FREEZE_TIM14 +#define __HAL_UNFREEZE_TIM14_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM14 +#define __HAL_FREEZE_CAN2_DBGMCU __HAL_DBGMCU_FREEZE_CAN2 +#define __HAL_UNFREEZE_CAN2_DBGMCU __HAL_DBGMCU_UNFREEZE_CAN2 + + +#define __HAL_FREEZE_TIM15_DBGMCU __HAL_DBGMCU_FREEZE_TIM15 +#define __HAL_UNFREEZE_TIM15_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM15 +#define __HAL_FREEZE_TIM16_DBGMCU __HAL_DBGMCU_FREEZE_TIM16 +#define __HAL_UNFREEZE_TIM16_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM16 +#define __HAL_FREEZE_TIM17_DBGMCU __HAL_DBGMCU_FREEZE_TIM17 +#define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 +#define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC +#define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC +#if defined(STM32H7) +#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 +#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 +#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 +#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else +#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG +#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG +#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG +#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ +#define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT +#define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT +#define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT +#define __HAL_UNFREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT +#define __HAL_FREEZE_I2C3_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C3_TIMEOUT +#define __HAL_UNFREEZE_I2C3_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C3_TIMEOUT +#define __HAL_FREEZE_CAN1_DBGMCU __HAL_DBGMCU_FREEZE_CAN1 +#define __HAL_UNFREEZE_CAN1_DBGMCU __HAL_DBGMCU_UNFREEZE_CAN1 +#define __HAL_FREEZE_LPTIM1_DBGMCU __HAL_DBGMCU_FREEZE_LPTIM1 +#define __HAL_UNFREEZE_LPTIM1_DBGMCU __HAL_DBGMCU_UNFREEZE_LPTIM1 +#define __HAL_FREEZE_LPTIM2_DBGMCU __HAL_DBGMCU_FREEZE_LPTIM2 +#define __HAL_UNFREEZE_LPTIM2_DBGMCU __HAL_DBGMCU_UNFREEZE_LPTIM2 + +/** + * @} + */ + +/** @defgroup HAL_COMP_Aliased_Macros HAL COMP Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32F3) +#define COMP_START __HAL_COMP_ENABLE +#define COMP_STOP __HAL_COMP_DISABLE +#define COMP_LOCK __HAL_COMP_LOCK + +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP6_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP6_EXTI_CLEAR_FLAG()) +# endif +# if defined(STM32F302xE) || defined(STM32F302xC) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP6_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP6_EXTI_CLEAR_FLAG()) +# endif +# if defined(STM32F303xE) || defined(STM32F398xx) || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP7_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP7_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP7_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP7_EXTI_CLEAR_FLAG()) +# endif +# if defined(STM32F373xC) ||defined(STM32F378xx) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP2_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP2_EXTI_CLEAR_FLAG()) +# endif +#else +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP2_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP2_EXTI_CLEAR_FLAG()) +#endif + +#define __HAL_COMP_GET_EXTI_LINE COMP_GET_EXTI_LINE + +#if defined(STM32L0) || defined(STM32L4) +/* Note: On these STM32 families, the only argument of this macro */ +/* is COMP_FLAG_LOCK. */ +/* This macro is replaced by __HAL_COMP_IS_LOCKED with only HAL handle */ +/* argument. */ +#define __HAL_COMP_GET_FLAG(__HANDLE__, __FLAG__) (__HAL_COMP_IS_LOCKED(__HANDLE__)) +#endif +/** + * @} + */ + +#if defined(STM32L0) || defined(STM32L4) +/** @defgroup HAL_COMP_Aliased_Functions HAL COMP Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_COMP_Start_IT HAL_COMP_Start /* Function considered as legacy as EXTI event or IT configuration is done into HAL_COMP_Init() */ +#define HAL_COMP_Stop_IT HAL_COMP_Stop /* Function considered as legacy as EXTI event or IT configuration is done into HAL_COMP_Init() */ +/** + * @} + */ +#endif + +/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose + * @{ + */ + +#define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ + ((WAVE) == DAC_WAVE_NOISE)|| \ + ((WAVE) == DAC_WAVE_TRIANGLE)) + +/** + * @} + */ + +/** @defgroup HAL_FLASH_Aliased_Macros HAL FLASH Aliased Macros maintained for legacy purpose + * @{ + */ + +#define IS_WRPAREA IS_OB_WRPAREA +#define IS_TYPEPROGRAM IS_FLASH_TYPEPROGRAM +#define IS_TYPEPROGRAMFLASH IS_FLASH_TYPEPROGRAM +#define IS_TYPEERASE IS_FLASH_TYPEERASE +#define IS_NBSECTORS IS_FLASH_NBSECTORS +#define IS_OB_WDG_SOURCE IS_OB_IWDG_SOURCE + +/** + * @} + */ + +/** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 +#define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else +#define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ +#define __HAL_I2C_RISE_TIME I2C_RISE_TIME +#define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD +#define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST +#define __HAL_I2C_SPEED I2C_SPEED +#define __HAL_I2C_7BIT_ADD_WRITE I2C_7BIT_ADD_WRITE +#define __HAL_I2C_7BIT_ADD_READ I2C_7BIT_ADD_READ +#define __HAL_I2C_10BIT_ADDRESS I2C_10BIT_ADDRESS +#define __HAL_I2C_10BIT_HEADER_WRITE I2C_10BIT_HEADER_WRITE +#define __HAL_I2C_10BIT_HEADER_READ I2C_10BIT_HEADER_READ +#define __HAL_I2C_MEM_ADD_MSB I2C_MEM_ADD_MSB +#define __HAL_I2C_MEM_ADD_LSB I2C_MEM_ADD_LSB +#define __HAL_I2C_FREQRANGE I2C_FREQRANGE +/** + * @} + */ + +/** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose + * @{ + */ + +#define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE +#define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT + +#if defined(STM32H7) +#define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + +/** + * @} + */ + +/** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __IRDA_DISABLE __HAL_IRDA_DISABLE +#define __IRDA_ENABLE __HAL_IRDA_ENABLE + +#define __HAL_IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE +#define __HAL_IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION +#define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE +#define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION + +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE + + +/** + * @} + */ + + +/** @defgroup HAL_IWDG_Aliased_Macros HAL IWDG Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_IWDG_ENABLE_WRITE_ACCESS IWDG_ENABLE_WRITE_ACCESS +#define __HAL_IWDG_DISABLE_WRITE_ACCESS IWDG_DISABLE_WRITE_ACCESS +/** + * @} + */ + + +/** @defgroup HAL_LPTIM_Aliased_Macros HAL LPTIM Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_LPTIM_ENABLE_INTERRUPT __HAL_LPTIM_ENABLE_IT +#define __HAL_LPTIM_DISABLE_INTERRUPT __HAL_LPTIM_DISABLE_IT +#define __HAL_LPTIM_GET_ITSTATUS __HAL_LPTIM_GET_IT_SOURCE + +/** + * @} + */ + + +/** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose + * @{ + */ +#define __OPAMP_CSR_OPAXPD OPAMP_CSR_OPAXPD +#define __OPAMP_CSR_S3SELX OPAMP_CSR_S3SELX +#define __OPAMP_CSR_S4SELX OPAMP_CSR_S4SELX +#define __OPAMP_CSR_S5SELX OPAMP_CSR_S5SELX +#define __OPAMP_CSR_S6SELX OPAMP_CSR_S6SELX +#define __OPAMP_CSR_OPAXCAL_L OPAMP_CSR_OPAXCAL_L +#define __OPAMP_CSR_OPAXCAL_H OPAMP_CSR_OPAXCAL_H +#define __OPAMP_CSR_OPAXLPM OPAMP_CSR_OPAXLPM +#define __OPAMP_CSR_ALL_SWITCHES OPAMP_CSR_ALL_SWITCHES +#define __OPAMP_CSR_ANAWSELX OPAMP_CSR_ANAWSELX +#define __OPAMP_CSR_OPAXCALOUT OPAMP_CSR_OPAXCALOUT +#define __OPAMP_OFFSET_TRIM_BITSPOSITION OPAMP_OFFSET_TRIM_BITSPOSITION +#define __OPAMP_OFFSET_TRIM_SET OPAMP_OFFSET_TRIM_SET + +/** + * @} + */ + + +/** @defgroup HAL_PWR_Aliased_Macros HAL PWR Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_PVD_EVENT_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_EVENT +#define __HAL_PVD_EVENT_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_EVENT +#define __HAL_PVD_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE +#define __HAL_PVD_EXTI_FALLINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PVD_EXTI_RISINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE +#define __HAL_PVD_EXTI_RISINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE +#define __HAL_PVM_EVENT_DISABLE __HAL_PWR_PVM_EVENT_DISABLE +#define __HAL_PVM_EVENT_ENABLE __HAL_PWR_PVM_EVENT_ENABLE +#define __HAL_PVM_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_DISABLE +#define __HAL_PVM_EXTI_FALLINGTRIGGER_ENABLE __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_ENABLE +#define __HAL_PVM_EXTI_RISINGTRIGGER_DISABLE __HAL_PWR_PVM_EXTI_RISINGTRIGGER_DISABLE +#define __HAL_PVM_EXTI_RISINGTRIGGER_ENABLE __HAL_PWR_PVM_EXTI_RISINGTRIGGER_ENABLE +#define __HAL_PWR_INTERNALWAKEUP_DISABLE HAL_PWREx_DisableInternalWakeUpLine +#define __HAL_PWR_INTERNALWAKEUP_ENABLE HAL_PWREx_EnableInternalWakeUpLine +#define __HAL_PWR_PULL_UP_DOWN_CONFIG_DISABLE HAL_PWREx_DisablePullUpPullDownConfig +#define __HAL_PWR_PULL_UP_DOWN_CONFIG_ENABLE HAL_PWREx_EnablePullUpPullDownConfig +#define __HAL_PWR_PVD_EXTI_CLEAR_EGDE_TRIGGER() do { __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); } while(0) +#define __HAL_PWR_PVD_EXTI_EVENT_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_EVENT +#define __HAL_PWR_PVD_EXTI_EVENT_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_EVENT +#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE +#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE +#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE +#define __HAL_PWR_PVD_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PWR_PVD_EXTI_SET_RISING_EDGE_TRIGGER __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE +#define __HAL_PWR_PVM_DISABLE() do { HAL_PWREx_DisablePVM1();HAL_PWREx_DisablePVM2();HAL_PWREx_DisablePVM3();HAL_PWREx_DisablePVM4(); } while(0) +#define __HAL_PWR_PVM_ENABLE() do { HAL_PWREx_EnablePVM1();HAL_PWREx_EnablePVM2();HAL_PWREx_EnablePVM3();HAL_PWREx_EnablePVM4(); } while(0) +#define __HAL_PWR_SRAM2CONTENT_PRESERVE_DISABLE HAL_PWREx_DisableSRAM2ContentRetention +#define __HAL_PWR_SRAM2CONTENT_PRESERVE_ENABLE HAL_PWREx_EnableSRAM2ContentRetention +#define __HAL_PWR_VDDIO2_DISABLE HAL_PWREx_DisableVddIO2 +#define __HAL_PWR_VDDIO2_ENABLE HAL_PWREx_EnableVddIO2 +#define __HAL_PWR_VDDIO2_EXTI_CLEAR_EGDE_TRIGGER __HAL_PWR_VDDIO2_EXTI_DISABLE_FALLING_EDGE +#define __HAL_PWR_VDDIO2_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_PWR_VDDIO2_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PWR_VDDUSB_DISABLE HAL_PWREx_DisableVddUSB +#define __HAL_PWR_VDDUSB_ENABLE HAL_PWREx_EnableVddUSB + +#if defined (STM32F4) +#define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() +#define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() +#define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() +#else +#define __HAL_PVD_EXTI_CLEAR_FLAG __HAL_PWR_PVD_EXTI_CLEAR_FLAG +#define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT +#define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT +#define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#endif /* STM32F4 */ +/** + * @} + */ + + +/** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose + * @{ + */ + +#define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI +#define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI + +#define HAL_RCC_CCSCallback HAL_RCC_CSSCallback +#define HAL_RC48_EnableBuffer_Cmd(cmd) (((cmd\ + )==ENABLE) ? HAL_RCCEx_EnableHSI48_VREFINT() : HAL_RCCEx_DisableHSI48_VREFINT()) + +#define __ADC_CLK_DISABLE __HAL_RCC_ADC_CLK_DISABLE +#define __ADC_CLK_ENABLE __HAL_RCC_ADC_CLK_ENABLE +#define __ADC_CLK_SLEEP_DISABLE __HAL_RCC_ADC_CLK_SLEEP_DISABLE +#define __ADC_CLK_SLEEP_ENABLE __HAL_RCC_ADC_CLK_SLEEP_ENABLE +#define __ADC_FORCE_RESET __HAL_RCC_ADC_FORCE_RESET +#define __ADC_RELEASE_RESET __HAL_RCC_ADC_RELEASE_RESET +#define __ADC1_CLK_DISABLE __HAL_RCC_ADC1_CLK_DISABLE +#define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE +#define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET +#define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE +#define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE +#define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET +#define __ADC2_RELEASE_RESET __HAL_RCC_ADC2_RELEASE_RESET +#define __ADC3_CLK_DISABLE __HAL_RCC_ADC3_CLK_DISABLE +#define __ADC3_CLK_ENABLE __HAL_RCC_ADC3_CLK_ENABLE +#define __ADC3_FORCE_RESET __HAL_RCC_ADC3_FORCE_RESET +#define __ADC3_RELEASE_RESET __HAL_RCC_ADC3_RELEASE_RESET +#define __AES_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE +#define __AES_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE +#define __AES_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE +#define __AES_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE +#define __AES_FORCE_RESET __HAL_RCC_AES_FORCE_RESET +#define __AES_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET +#define __CRYP_CLK_SLEEP_ENABLE __HAL_RCC_CRYP_CLK_SLEEP_ENABLE +#define __CRYP_CLK_SLEEP_DISABLE __HAL_RCC_CRYP_CLK_SLEEP_DISABLE +#define __CRYP_CLK_ENABLE __HAL_RCC_CRYP_CLK_ENABLE +#define __CRYP_CLK_DISABLE __HAL_RCC_CRYP_CLK_DISABLE +#define __CRYP_FORCE_RESET __HAL_RCC_CRYP_FORCE_RESET +#define __CRYP_RELEASE_RESET __HAL_RCC_CRYP_RELEASE_RESET +#define __AFIO_CLK_DISABLE __HAL_RCC_AFIO_CLK_DISABLE +#define __AFIO_CLK_ENABLE __HAL_RCC_AFIO_CLK_ENABLE +#define __AFIO_FORCE_RESET __HAL_RCC_AFIO_FORCE_RESET +#define __AFIO_RELEASE_RESET __HAL_RCC_AFIO_RELEASE_RESET +#define __AHB_FORCE_RESET __HAL_RCC_AHB_FORCE_RESET +#define __AHB_RELEASE_RESET __HAL_RCC_AHB_RELEASE_RESET +#define __AHB1_FORCE_RESET __HAL_RCC_AHB1_FORCE_RESET +#define __AHB1_RELEASE_RESET __HAL_RCC_AHB1_RELEASE_RESET +#define __AHB2_FORCE_RESET __HAL_RCC_AHB2_FORCE_RESET +#define __AHB2_RELEASE_RESET __HAL_RCC_AHB2_RELEASE_RESET +#define __AHB3_FORCE_RESET __HAL_RCC_AHB3_FORCE_RESET +#define __AHB3_RELEASE_RESET __HAL_RCC_AHB3_RELEASE_RESET +#define __APB1_FORCE_RESET __HAL_RCC_APB1_FORCE_RESET +#define __APB1_RELEASE_RESET __HAL_RCC_APB1_RELEASE_RESET +#define __APB2_FORCE_RESET __HAL_RCC_APB2_FORCE_RESET +#define __APB2_RELEASE_RESET __HAL_RCC_APB2_RELEASE_RESET +#define __BKP_CLK_DISABLE __HAL_RCC_BKP_CLK_DISABLE +#define __BKP_CLK_ENABLE __HAL_RCC_BKP_CLK_ENABLE +#define __BKP_FORCE_RESET __HAL_RCC_BKP_FORCE_RESET +#define __BKP_RELEASE_RESET __HAL_RCC_BKP_RELEASE_RESET +#define __CAN1_CLK_DISABLE __HAL_RCC_CAN1_CLK_DISABLE +#define __CAN1_CLK_ENABLE __HAL_RCC_CAN1_CLK_ENABLE +#define __CAN1_CLK_SLEEP_DISABLE __HAL_RCC_CAN1_CLK_SLEEP_DISABLE +#define __CAN1_CLK_SLEEP_ENABLE __HAL_RCC_CAN1_CLK_SLEEP_ENABLE +#define __CAN1_FORCE_RESET __HAL_RCC_CAN1_FORCE_RESET +#define __CAN1_RELEASE_RESET __HAL_RCC_CAN1_RELEASE_RESET +#define __CAN_CLK_DISABLE __HAL_RCC_CAN1_CLK_DISABLE +#define __CAN_CLK_ENABLE __HAL_RCC_CAN1_CLK_ENABLE +#define __CAN_FORCE_RESET __HAL_RCC_CAN1_FORCE_RESET +#define __CAN_RELEASE_RESET __HAL_RCC_CAN1_RELEASE_RESET +#define __CAN2_CLK_DISABLE __HAL_RCC_CAN2_CLK_DISABLE +#define __CAN2_CLK_ENABLE __HAL_RCC_CAN2_CLK_ENABLE +#define __CAN2_FORCE_RESET __HAL_RCC_CAN2_FORCE_RESET +#define __CAN2_RELEASE_RESET __HAL_RCC_CAN2_RELEASE_RESET +#define __CEC_CLK_DISABLE __HAL_RCC_CEC_CLK_DISABLE +#define __CEC_CLK_ENABLE __HAL_RCC_CEC_CLK_ENABLE +#define __COMP_CLK_DISABLE __HAL_RCC_COMP_CLK_DISABLE +#define __COMP_CLK_ENABLE __HAL_RCC_COMP_CLK_ENABLE +#define __COMP_FORCE_RESET __HAL_RCC_COMP_FORCE_RESET +#define __COMP_RELEASE_RESET __HAL_RCC_COMP_RELEASE_RESET +#define __COMP_CLK_SLEEP_ENABLE __HAL_RCC_COMP_CLK_SLEEP_ENABLE +#define __COMP_CLK_SLEEP_DISABLE __HAL_RCC_COMP_CLK_SLEEP_DISABLE +#define __CEC_FORCE_RESET __HAL_RCC_CEC_FORCE_RESET +#define __CEC_RELEASE_RESET __HAL_RCC_CEC_RELEASE_RESET +#define __CRC_CLK_DISABLE __HAL_RCC_CRC_CLK_DISABLE +#define __CRC_CLK_ENABLE __HAL_RCC_CRC_CLK_ENABLE +#define __CRC_CLK_SLEEP_DISABLE __HAL_RCC_CRC_CLK_SLEEP_DISABLE +#define __CRC_CLK_SLEEP_ENABLE __HAL_RCC_CRC_CLK_SLEEP_ENABLE +#define __CRC_FORCE_RESET __HAL_RCC_CRC_FORCE_RESET +#define __CRC_RELEASE_RESET __HAL_RCC_CRC_RELEASE_RESET +#define __DAC_CLK_DISABLE __HAL_RCC_DAC_CLK_DISABLE +#define __DAC_CLK_ENABLE __HAL_RCC_DAC_CLK_ENABLE +#define __DAC_FORCE_RESET __HAL_RCC_DAC_FORCE_RESET +#define __DAC_RELEASE_RESET __HAL_RCC_DAC_RELEASE_RESET +#define __DAC1_CLK_DISABLE __HAL_RCC_DAC1_CLK_DISABLE +#define __DAC1_CLK_ENABLE __HAL_RCC_DAC1_CLK_ENABLE +#define __DAC1_CLK_SLEEP_DISABLE __HAL_RCC_DAC1_CLK_SLEEP_DISABLE +#define __DAC1_CLK_SLEEP_ENABLE __HAL_RCC_DAC1_CLK_SLEEP_ENABLE +#define __DAC1_FORCE_RESET __HAL_RCC_DAC1_FORCE_RESET +#define __DAC1_RELEASE_RESET __HAL_RCC_DAC1_RELEASE_RESET +#define __DBGMCU_CLK_ENABLE __HAL_RCC_DBGMCU_CLK_ENABLE +#define __DBGMCU_CLK_DISABLE __HAL_RCC_DBGMCU_CLK_DISABLE +#define __DBGMCU_FORCE_RESET __HAL_RCC_DBGMCU_FORCE_RESET +#define __DBGMCU_RELEASE_RESET __HAL_RCC_DBGMCU_RELEASE_RESET +#define __DFSDM_CLK_DISABLE __HAL_RCC_DFSDM_CLK_DISABLE +#define __DFSDM_CLK_ENABLE __HAL_RCC_DFSDM_CLK_ENABLE +#define __DFSDM_CLK_SLEEP_DISABLE __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE +#define __DFSDM_CLK_SLEEP_ENABLE __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE +#define __DFSDM_FORCE_RESET __HAL_RCC_DFSDM_FORCE_RESET +#define __DFSDM_RELEASE_RESET __HAL_RCC_DFSDM_RELEASE_RESET +#define __DMA1_CLK_DISABLE __HAL_RCC_DMA1_CLK_DISABLE +#define __DMA1_CLK_ENABLE __HAL_RCC_DMA1_CLK_ENABLE +#define __DMA1_CLK_SLEEP_DISABLE __HAL_RCC_DMA1_CLK_SLEEP_DISABLE +#define __DMA1_CLK_SLEEP_ENABLE __HAL_RCC_DMA1_CLK_SLEEP_ENABLE +#define __DMA1_FORCE_RESET __HAL_RCC_DMA1_FORCE_RESET +#define __DMA1_RELEASE_RESET __HAL_RCC_DMA1_RELEASE_RESET +#define __DMA2_CLK_DISABLE __HAL_RCC_DMA2_CLK_DISABLE +#define __DMA2_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE +#define __DMA2_CLK_SLEEP_DISABLE __HAL_RCC_DMA2_CLK_SLEEP_DISABLE +#define __DMA2_CLK_SLEEP_ENABLE __HAL_RCC_DMA2_CLK_SLEEP_ENABLE +#define __DMA2_FORCE_RESET __HAL_RCC_DMA2_FORCE_RESET +#define __DMA2_RELEASE_RESET __HAL_RCC_DMA2_RELEASE_RESET +#define __ETHMAC_CLK_DISABLE __HAL_RCC_ETHMAC_CLK_DISABLE +#define __ETHMAC_CLK_ENABLE __HAL_RCC_ETHMAC_CLK_ENABLE +#define __ETHMAC_FORCE_RESET __HAL_RCC_ETHMAC_FORCE_RESET +#define __ETHMAC_RELEASE_RESET __HAL_RCC_ETHMAC_RELEASE_RESET +#define __ETHMACRX_CLK_DISABLE __HAL_RCC_ETHMACRX_CLK_DISABLE +#define __ETHMACRX_CLK_ENABLE __HAL_RCC_ETHMACRX_CLK_ENABLE +#define __ETHMACTX_CLK_DISABLE __HAL_RCC_ETHMACTX_CLK_DISABLE +#define __ETHMACTX_CLK_ENABLE __HAL_RCC_ETHMACTX_CLK_ENABLE +#define __FIREWALL_CLK_DISABLE __HAL_RCC_FIREWALL_CLK_DISABLE +#define __FIREWALL_CLK_ENABLE __HAL_RCC_FIREWALL_CLK_ENABLE +#define __FLASH_CLK_DISABLE __HAL_RCC_FLASH_CLK_DISABLE +#define __FLASH_CLK_ENABLE __HAL_RCC_FLASH_CLK_ENABLE +#define __FLASH_CLK_SLEEP_DISABLE __HAL_RCC_FLASH_CLK_SLEEP_DISABLE +#define __FLASH_CLK_SLEEP_ENABLE __HAL_RCC_FLASH_CLK_SLEEP_ENABLE +#define __FLASH_FORCE_RESET __HAL_RCC_FLASH_FORCE_RESET +#define __FLASH_RELEASE_RESET __HAL_RCC_FLASH_RELEASE_RESET +#define __FLITF_CLK_DISABLE __HAL_RCC_FLITF_CLK_DISABLE +#define __FLITF_CLK_ENABLE __HAL_RCC_FLITF_CLK_ENABLE +#define __FLITF_FORCE_RESET __HAL_RCC_FLITF_FORCE_RESET +#define __FLITF_RELEASE_RESET __HAL_RCC_FLITF_RELEASE_RESET +#define __FLITF_CLK_SLEEP_ENABLE __HAL_RCC_FLITF_CLK_SLEEP_ENABLE +#define __FLITF_CLK_SLEEP_DISABLE __HAL_RCC_FLITF_CLK_SLEEP_DISABLE +#define __FMC_CLK_DISABLE __HAL_RCC_FMC_CLK_DISABLE +#define __FMC_CLK_ENABLE __HAL_RCC_FMC_CLK_ENABLE +#define __FMC_CLK_SLEEP_DISABLE __HAL_RCC_FMC_CLK_SLEEP_DISABLE +#define __FMC_CLK_SLEEP_ENABLE __HAL_RCC_FMC_CLK_SLEEP_ENABLE +#define __FMC_FORCE_RESET __HAL_RCC_FMC_FORCE_RESET +#define __FMC_RELEASE_RESET __HAL_RCC_FMC_RELEASE_RESET +#define __FSMC_CLK_DISABLE __HAL_RCC_FSMC_CLK_DISABLE +#define __FSMC_CLK_ENABLE __HAL_RCC_FSMC_CLK_ENABLE +#define __GPIOA_CLK_DISABLE __HAL_RCC_GPIOA_CLK_DISABLE +#define __GPIOA_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE +#define __GPIOA_CLK_SLEEP_DISABLE __HAL_RCC_GPIOA_CLK_SLEEP_DISABLE +#define __GPIOA_CLK_SLEEP_ENABLE __HAL_RCC_GPIOA_CLK_SLEEP_ENABLE +#define __GPIOA_FORCE_RESET __HAL_RCC_GPIOA_FORCE_RESET +#define __GPIOA_RELEASE_RESET __HAL_RCC_GPIOA_RELEASE_RESET +#define __GPIOB_CLK_DISABLE __HAL_RCC_GPIOB_CLK_DISABLE +#define __GPIOB_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE +#define __GPIOB_CLK_SLEEP_DISABLE __HAL_RCC_GPIOB_CLK_SLEEP_DISABLE +#define __GPIOB_CLK_SLEEP_ENABLE __HAL_RCC_GPIOB_CLK_SLEEP_ENABLE +#define __GPIOB_FORCE_RESET __HAL_RCC_GPIOB_FORCE_RESET +#define __GPIOB_RELEASE_RESET __HAL_RCC_GPIOB_RELEASE_RESET +#define __GPIOC_CLK_DISABLE __HAL_RCC_GPIOC_CLK_DISABLE +#define __GPIOC_CLK_ENABLE __HAL_RCC_GPIOC_CLK_ENABLE +#define __GPIOC_CLK_SLEEP_DISABLE __HAL_RCC_GPIOC_CLK_SLEEP_DISABLE +#define __GPIOC_CLK_SLEEP_ENABLE __HAL_RCC_GPIOC_CLK_SLEEP_ENABLE +#define __GPIOC_FORCE_RESET __HAL_RCC_GPIOC_FORCE_RESET +#define __GPIOC_RELEASE_RESET __HAL_RCC_GPIOC_RELEASE_RESET +#define __GPIOD_CLK_DISABLE __HAL_RCC_GPIOD_CLK_DISABLE +#define __GPIOD_CLK_ENABLE __HAL_RCC_GPIOD_CLK_ENABLE +#define __GPIOD_CLK_SLEEP_DISABLE __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE +#define __GPIOD_CLK_SLEEP_ENABLE __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE +#define __GPIOD_FORCE_RESET __HAL_RCC_GPIOD_FORCE_RESET +#define __GPIOD_RELEASE_RESET __HAL_RCC_GPIOD_RELEASE_RESET +#define __GPIOE_CLK_DISABLE __HAL_RCC_GPIOE_CLK_DISABLE +#define __GPIOE_CLK_ENABLE __HAL_RCC_GPIOE_CLK_ENABLE +#define __GPIOE_CLK_SLEEP_DISABLE __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE +#define __GPIOE_CLK_SLEEP_ENABLE __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE +#define __GPIOE_FORCE_RESET __HAL_RCC_GPIOE_FORCE_RESET +#define __GPIOE_RELEASE_RESET __HAL_RCC_GPIOE_RELEASE_RESET +#define __GPIOF_CLK_DISABLE __HAL_RCC_GPIOF_CLK_DISABLE +#define __GPIOF_CLK_ENABLE __HAL_RCC_GPIOF_CLK_ENABLE +#define __GPIOF_CLK_SLEEP_DISABLE __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE +#define __GPIOF_CLK_SLEEP_ENABLE __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE +#define __GPIOF_FORCE_RESET __HAL_RCC_GPIOF_FORCE_RESET +#define __GPIOF_RELEASE_RESET __HAL_RCC_GPIOF_RELEASE_RESET +#define __GPIOG_CLK_DISABLE __HAL_RCC_GPIOG_CLK_DISABLE +#define __GPIOG_CLK_ENABLE __HAL_RCC_GPIOG_CLK_ENABLE +#define __GPIOG_CLK_SLEEP_DISABLE __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE +#define __GPIOG_CLK_SLEEP_ENABLE __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE +#define __GPIOG_FORCE_RESET __HAL_RCC_GPIOG_FORCE_RESET +#define __GPIOG_RELEASE_RESET __HAL_RCC_GPIOG_RELEASE_RESET +#define __GPIOH_CLK_DISABLE __HAL_RCC_GPIOH_CLK_DISABLE +#define __GPIOH_CLK_ENABLE __HAL_RCC_GPIOH_CLK_ENABLE +#define __GPIOH_CLK_SLEEP_DISABLE __HAL_RCC_GPIOH_CLK_SLEEP_DISABLE +#define __GPIOH_CLK_SLEEP_ENABLE __HAL_RCC_GPIOH_CLK_SLEEP_ENABLE +#define __GPIOH_FORCE_RESET __HAL_RCC_GPIOH_FORCE_RESET +#define __GPIOH_RELEASE_RESET __HAL_RCC_GPIOH_RELEASE_RESET +#define __I2C1_CLK_DISABLE __HAL_RCC_I2C1_CLK_DISABLE +#define __I2C1_CLK_ENABLE __HAL_RCC_I2C1_CLK_ENABLE +#define __I2C1_CLK_SLEEP_DISABLE __HAL_RCC_I2C1_CLK_SLEEP_DISABLE +#define __I2C1_CLK_SLEEP_ENABLE __HAL_RCC_I2C1_CLK_SLEEP_ENABLE +#define __I2C1_FORCE_RESET __HAL_RCC_I2C1_FORCE_RESET +#define __I2C1_RELEASE_RESET __HAL_RCC_I2C1_RELEASE_RESET +#define __I2C2_CLK_DISABLE __HAL_RCC_I2C2_CLK_DISABLE +#define __I2C2_CLK_ENABLE __HAL_RCC_I2C2_CLK_ENABLE +#define __I2C2_CLK_SLEEP_DISABLE __HAL_RCC_I2C2_CLK_SLEEP_DISABLE +#define __I2C2_CLK_SLEEP_ENABLE __HAL_RCC_I2C2_CLK_SLEEP_ENABLE +#define __I2C2_FORCE_RESET __HAL_RCC_I2C2_FORCE_RESET +#define __I2C2_RELEASE_RESET __HAL_RCC_I2C2_RELEASE_RESET +#define __I2C3_CLK_DISABLE __HAL_RCC_I2C3_CLK_DISABLE +#define __I2C3_CLK_ENABLE __HAL_RCC_I2C3_CLK_ENABLE +#define __I2C3_CLK_SLEEP_DISABLE __HAL_RCC_I2C3_CLK_SLEEP_DISABLE +#define __I2C3_CLK_SLEEP_ENABLE __HAL_RCC_I2C3_CLK_SLEEP_ENABLE +#define __I2C3_FORCE_RESET __HAL_RCC_I2C3_FORCE_RESET +#define __I2C3_RELEASE_RESET __HAL_RCC_I2C3_RELEASE_RESET +#define __LCD_CLK_DISABLE __HAL_RCC_LCD_CLK_DISABLE +#define __LCD_CLK_ENABLE __HAL_RCC_LCD_CLK_ENABLE +#define __LCD_CLK_SLEEP_DISABLE __HAL_RCC_LCD_CLK_SLEEP_DISABLE +#define __LCD_CLK_SLEEP_ENABLE __HAL_RCC_LCD_CLK_SLEEP_ENABLE +#define __LCD_FORCE_RESET __HAL_RCC_LCD_FORCE_RESET +#define __LCD_RELEASE_RESET __HAL_RCC_LCD_RELEASE_RESET +#define __LPTIM1_CLK_DISABLE __HAL_RCC_LPTIM1_CLK_DISABLE +#define __LPTIM1_CLK_ENABLE __HAL_RCC_LPTIM1_CLK_ENABLE +#define __LPTIM1_CLK_SLEEP_DISABLE __HAL_RCC_LPTIM1_CLK_SLEEP_DISABLE +#define __LPTIM1_CLK_SLEEP_ENABLE __HAL_RCC_LPTIM1_CLK_SLEEP_ENABLE +#define __LPTIM1_FORCE_RESET __HAL_RCC_LPTIM1_FORCE_RESET +#define __LPTIM1_RELEASE_RESET __HAL_RCC_LPTIM1_RELEASE_RESET +#define __LPTIM2_CLK_DISABLE __HAL_RCC_LPTIM2_CLK_DISABLE +#define __LPTIM2_CLK_ENABLE __HAL_RCC_LPTIM2_CLK_ENABLE +#define __LPTIM2_CLK_SLEEP_DISABLE __HAL_RCC_LPTIM2_CLK_SLEEP_DISABLE +#define __LPTIM2_CLK_SLEEP_ENABLE __HAL_RCC_LPTIM2_CLK_SLEEP_ENABLE +#define __LPTIM2_FORCE_RESET __HAL_RCC_LPTIM2_FORCE_RESET +#define __LPTIM2_RELEASE_RESET __HAL_RCC_LPTIM2_RELEASE_RESET +#define __LPUART1_CLK_DISABLE __HAL_RCC_LPUART1_CLK_DISABLE +#define __LPUART1_CLK_ENABLE __HAL_RCC_LPUART1_CLK_ENABLE +#define __LPUART1_CLK_SLEEP_DISABLE __HAL_RCC_LPUART1_CLK_SLEEP_DISABLE +#define __LPUART1_CLK_SLEEP_ENABLE __HAL_RCC_LPUART1_CLK_SLEEP_ENABLE +#define __LPUART1_FORCE_RESET __HAL_RCC_LPUART1_FORCE_RESET +#define __LPUART1_RELEASE_RESET __HAL_RCC_LPUART1_RELEASE_RESET +#define __OPAMP_CLK_DISABLE __HAL_RCC_OPAMP_CLK_DISABLE +#define __OPAMP_CLK_ENABLE __HAL_RCC_OPAMP_CLK_ENABLE +#define __OPAMP_CLK_SLEEP_DISABLE __HAL_RCC_OPAMP_CLK_SLEEP_DISABLE +#define __OPAMP_CLK_SLEEP_ENABLE __HAL_RCC_OPAMP_CLK_SLEEP_ENABLE +#define __OPAMP_FORCE_RESET __HAL_RCC_OPAMP_FORCE_RESET +#define __OPAMP_RELEASE_RESET __HAL_RCC_OPAMP_RELEASE_RESET +#define __OTGFS_CLK_DISABLE __HAL_RCC_OTGFS_CLK_DISABLE +#define __OTGFS_CLK_ENABLE __HAL_RCC_OTGFS_CLK_ENABLE +#define __OTGFS_CLK_SLEEP_DISABLE __HAL_RCC_OTGFS_CLK_SLEEP_DISABLE +#define __OTGFS_CLK_SLEEP_ENABLE __HAL_RCC_OTGFS_CLK_SLEEP_ENABLE +#define __OTGFS_FORCE_RESET __HAL_RCC_OTGFS_FORCE_RESET +#define __OTGFS_RELEASE_RESET __HAL_RCC_OTGFS_RELEASE_RESET +#define __PWR_CLK_DISABLE __HAL_RCC_PWR_CLK_DISABLE +#define __PWR_CLK_ENABLE __HAL_RCC_PWR_CLK_ENABLE +#define __PWR_CLK_SLEEP_DISABLE __HAL_RCC_PWR_CLK_SLEEP_DISABLE +#define __PWR_CLK_SLEEP_ENABLE __HAL_RCC_PWR_CLK_SLEEP_ENABLE +#define __PWR_FORCE_RESET __HAL_RCC_PWR_FORCE_RESET +#define __PWR_RELEASE_RESET __HAL_RCC_PWR_RELEASE_RESET +#define __QSPI_CLK_DISABLE __HAL_RCC_QSPI_CLK_DISABLE +#define __QSPI_CLK_ENABLE __HAL_RCC_QSPI_CLK_ENABLE +#define __QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QSPI_CLK_SLEEP_DISABLE +#define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE +#define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET +#define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + +#define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE +#define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE +#define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE +#define __RNG_CLK_SLEEP_ENABLE __HAL_RCC_RNG_CLK_SLEEP_ENABLE +#define __RNG_FORCE_RESET __HAL_RCC_RNG_FORCE_RESET +#define __RNG_RELEASE_RESET __HAL_RCC_RNG_RELEASE_RESET +#define __SAI1_CLK_DISABLE __HAL_RCC_SAI1_CLK_DISABLE +#define __SAI1_CLK_ENABLE __HAL_RCC_SAI1_CLK_ENABLE +#define __SAI1_CLK_SLEEP_DISABLE __HAL_RCC_SAI1_CLK_SLEEP_DISABLE +#define __SAI1_CLK_SLEEP_ENABLE __HAL_RCC_SAI1_CLK_SLEEP_ENABLE +#define __SAI1_FORCE_RESET __HAL_RCC_SAI1_FORCE_RESET +#define __SAI1_RELEASE_RESET __HAL_RCC_SAI1_RELEASE_RESET +#define __SAI2_CLK_DISABLE __HAL_RCC_SAI2_CLK_DISABLE +#define __SAI2_CLK_ENABLE __HAL_RCC_SAI2_CLK_ENABLE +#define __SAI2_CLK_SLEEP_DISABLE __HAL_RCC_SAI2_CLK_SLEEP_DISABLE +#define __SAI2_CLK_SLEEP_ENABLE __HAL_RCC_SAI2_CLK_SLEEP_ENABLE +#define __SAI2_FORCE_RESET __HAL_RCC_SAI2_FORCE_RESET +#define __SAI2_RELEASE_RESET __HAL_RCC_SAI2_RELEASE_RESET +#define __SDIO_CLK_DISABLE __HAL_RCC_SDIO_CLK_DISABLE +#define __SDIO_CLK_ENABLE __HAL_RCC_SDIO_CLK_ENABLE +#define __SDMMC_CLK_DISABLE __HAL_RCC_SDMMC_CLK_DISABLE +#define __SDMMC_CLK_ENABLE __HAL_RCC_SDMMC_CLK_ENABLE +#define __SDMMC_CLK_SLEEP_DISABLE __HAL_RCC_SDMMC_CLK_SLEEP_DISABLE +#define __SDMMC_CLK_SLEEP_ENABLE __HAL_RCC_SDMMC_CLK_SLEEP_ENABLE +#define __SDMMC_FORCE_RESET __HAL_RCC_SDMMC_FORCE_RESET +#define __SDMMC_RELEASE_RESET __HAL_RCC_SDMMC_RELEASE_RESET +#define __SPI1_CLK_DISABLE __HAL_RCC_SPI1_CLK_DISABLE +#define __SPI1_CLK_ENABLE __HAL_RCC_SPI1_CLK_ENABLE +#define __SPI1_CLK_SLEEP_DISABLE __HAL_RCC_SPI1_CLK_SLEEP_DISABLE +#define __SPI1_CLK_SLEEP_ENABLE __HAL_RCC_SPI1_CLK_SLEEP_ENABLE +#define __SPI1_FORCE_RESET __HAL_RCC_SPI1_FORCE_RESET +#define __SPI1_RELEASE_RESET __HAL_RCC_SPI1_RELEASE_RESET +#define __SPI2_CLK_DISABLE __HAL_RCC_SPI2_CLK_DISABLE +#define __SPI2_CLK_ENABLE __HAL_RCC_SPI2_CLK_ENABLE +#define __SPI2_CLK_SLEEP_DISABLE __HAL_RCC_SPI2_CLK_SLEEP_DISABLE +#define __SPI2_CLK_SLEEP_ENABLE __HAL_RCC_SPI2_CLK_SLEEP_ENABLE +#define __SPI2_FORCE_RESET __HAL_RCC_SPI2_FORCE_RESET +#define __SPI2_RELEASE_RESET __HAL_RCC_SPI2_RELEASE_RESET +#define __SPI3_CLK_DISABLE __HAL_RCC_SPI3_CLK_DISABLE +#define __SPI3_CLK_ENABLE __HAL_RCC_SPI3_CLK_ENABLE +#define __SPI3_CLK_SLEEP_DISABLE __HAL_RCC_SPI3_CLK_SLEEP_DISABLE +#define __SPI3_CLK_SLEEP_ENABLE __HAL_RCC_SPI3_CLK_SLEEP_ENABLE +#define __SPI3_FORCE_RESET __HAL_RCC_SPI3_FORCE_RESET +#define __SPI3_RELEASE_RESET __HAL_RCC_SPI3_RELEASE_RESET +#define __SRAM_CLK_DISABLE __HAL_RCC_SRAM_CLK_DISABLE +#define __SRAM_CLK_ENABLE __HAL_RCC_SRAM_CLK_ENABLE +#define __SRAM1_CLK_SLEEP_DISABLE __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE +#define __SRAM1_CLK_SLEEP_ENABLE __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE +#define __SRAM2_CLK_SLEEP_DISABLE __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE +#define __SRAM2_CLK_SLEEP_ENABLE __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE +#define __SWPMI1_CLK_DISABLE __HAL_RCC_SWPMI1_CLK_DISABLE +#define __SWPMI1_CLK_ENABLE __HAL_RCC_SWPMI1_CLK_ENABLE +#define __SWPMI1_CLK_SLEEP_DISABLE __HAL_RCC_SWPMI1_CLK_SLEEP_DISABLE +#define __SWPMI1_CLK_SLEEP_ENABLE __HAL_RCC_SWPMI1_CLK_SLEEP_ENABLE +#define __SWPMI1_FORCE_RESET __HAL_RCC_SWPMI1_FORCE_RESET +#define __SWPMI1_RELEASE_RESET __HAL_RCC_SWPMI1_RELEASE_RESET +#define __SYSCFG_CLK_DISABLE __HAL_RCC_SYSCFG_CLK_DISABLE +#define __SYSCFG_CLK_ENABLE __HAL_RCC_SYSCFG_CLK_ENABLE +#define __SYSCFG_CLK_SLEEP_DISABLE __HAL_RCC_SYSCFG_CLK_SLEEP_DISABLE +#define __SYSCFG_CLK_SLEEP_ENABLE __HAL_RCC_SYSCFG_CLK_SLEEP_ENABLE +#define __SYSCFG_FORCE_RESET __HAL_RCC_SYSCFG_FORCE_RESET +#define __SYSCFG_RELEASE_RESET __HAL_RCC_SYSCFG_RELEASE_RESET +#define __TIM1_CLK_DISABLE __HAL_RCC_TIM1_CLK_DISABLE +#define __TIM1_CLK_ENABLE __HAL_RCC_TIM1_CLK_ENABLE +#define __TIM1_CLK_SLEEP_DISABLE __HAL_RCC_TIM1_CLK_SLEEP_DISABLE +#define __TIM1_CLK_SLEEP_ENABLE __HAL_RCC_TIM1_CLK_SLEEP_ENABLE +#define __TIM1_FORCE_RESET __HAL_RCC_TIM1_FORCE_RESET +#define __TIM1_RELEASE_RESET __HAL_RCC_TIM1_RELEASE_RESET +#define __TIM10_CLK_DISABLE __HAL_RCC_TIM10_CLK_DISABLE +#define __TIM10_CLK_ENABLE __HAL_RCC_TIM10_CLK_ENABLE +#define __TIM10_FORCE_RESET __HAL_RCC_TIM10_FORCE_RESET +#define __TIM10_RELEASE_RESET __HAL_RCC_TIM10_RELEASE_RESET +#define __TIM11_CLK_DISABLE __HAL_RCC_TIM11_CLK_DISABLE +#define __TIM11_CLK_ENABLE __HAL_RCC_TIM11_CLK_ENABLE +#define __TIM11_FORCE_RESET __HAL_RCC_TIM11_FORCE_RESET +#define __TIM11_RELEASE_RESET __HAL_RCC_TIM11_RELEASE_RESET +#define __TIM12_CLK_DISABLE __HAL_RCC_TIM12_CLK_DISABLE +#define __TIM12_CLK_ENABLE __HAL_RCC_TIM12_CLK_ENABLE +#define __TIM12_FORCE_RESET __HAL_RCC_TIM12_FORCE_RESET +#define __TIM12_RELEASE_RESET __HAL_RCC_TIM12_RELEASE_RESET +#define __TIM13_CLK_DISABLE __HAL_RCC_TIM13_CLK_DISABLE +#define __TIM13_CLK_ENABLE __HAL_RCC_TIM13_CLK_ENABLE +#define __TIM13_FORCE_RESET __HAL_RCC_TIM13_FORCE_RESET +#define __TIM13_RELEASE_RESET __HAL_RCC_TIM13_RELEASE_RESET +#define __TIM14_CLK_DISABLE __HAL_RCC_TIM14_CLK_DISABLE +#define __TIM14_CLK_ENABLE __HAL_RCC_TIM14_CLK_ENABLE +#define __TIM14_FORCE_RESET __HAL_RCC_TIM14_FORCE_RESET +#define __TIM14_RELEASE_RESET __HAL_RCC_TIM14_RELEASE_RESET +#define __TIM15_CLK_DISABLE __HAL_RCC_TIM15_CLK_DISABLE +#define __TIM15_CLK_ENABLE __HAL_RCC_TIM15_CLK_ENABLE +#define __TIM15_CLK_SLEEP_DISABLE __HAL_RCC_TIM15_CLK_SLEEP_DISABLE +#define __TIM15_CLK_SLEEP_ENABLE __HAL_RCC_TIM15_CLK_SLEEP_ENABLE +#define __TIM15_FORCE_RESET __HAL_RCC_TIM15_FORCE_RESET +#define __TIM15_RELEASE_RESET __HAL_RCC_TIM15_RELEASE_RESET +#define __TIM16_CLK_DISABLE __HAL_RCC_TIM16_CLK_DISABLE +#define __TIM16_CLK_ENABLE __HAL_RCC_TIM16_CLK_ENABLE +#define __TIM16_CLK_SLEEP_DISABLE __HAL_RCC_TIM16_CLK_SLEEP_DISABLE +#define __TIM16_CLK_SLEEP_ENABLE __HAL_RCC_TIM16_CLK_SLEEP_ENABLE +#define __TIM16_FORCE_RESET __HAL_RCC_TIM16_FORCE_RESET +#define __TIM16_RELEASE_RESET __HAL_RCC_TIM16_RELEASE_RESET +#define __TIM17_CLK_DISABLE __HAL_RCC_TIM17_CLK_DISABLE +#define __TIM17_CLK_ENABLE __HAL_RCC_TIM17_CLK_ENABLE +#define __TIM17_CLK_SLEEP_DISABLE __HAL_RCC_TIM17_CLK_SLEEP_DISABLE +#define __TIM17_CLK_SLEEP_ENABLE __HAL_RCC_TIM17_CLK_SLEEP_ENABLE +#define __TIM17_FORCE_RESET __HAL_RCC_TIM17_FORCE_RESET +#define __TIM17_RELEASE_RESET __HAL_RCC_TIM17_RELEASE_RESET +#define __TIM2_CLK_DISABLE __HAL_RCC_TIM2_CLK_DISABLE +#define __TIM2_CLK_ENABLE __HAL_RCC_TIM2_CLK_ENABLE +#define __TIM2_CLK_SLEEP_DISABLE __HAL_RCC_TIM2_CLK_SLEEP_DISABLE +#define __TIM2_CLK_SLEEP_ENABLE __HAL_RCC_TIM2_CLK_SLEEP_ENABLE +#define __TIM2_FORCE_RESET __HAL_RCC_TIM2_FORCE_RESET +#define __TIM2_RELEASE_RESET __HAL_RCC_TIM2_RELEASE_RESET +#define __TIM3_CLK_DISABLE __HAL_RCC_TIM3_CLK_DISABLE +#define __TIM3_CLK_ENABLE __HAL_RCC_TIM3_CLK_ENABLE +#define __TIM3_CLK_SLEEP_DISABLE __HAL_RCC_TIM3_CLK_SLEEP_DISABLE +#define __TIM3_CLK_SLEEP_ENABLE __HAL_RCC_TIM3_CLK_SLEEP_ENABLE +#define __TIM3_FORCE_RESET __HAL_RCC_TIM3_FORCE_RESET +#define __TIM3_RELEASE_RESET __HAL_RCC_TIM3_RELEASE_RESET +#define __TIM4_CLK_DISABLE __HAL_RCC_TIM4_CLK_DISABLE +#define __TIM4_CLK_ENABLE __HAL_RCC_TIM4_CLK_ENABLE +#define __TIM4_CLK_SLEEP_DISABLE __HAL_RCC_TIM4_CLK_SLEEP_DISABLE +#define __TIM4_CLK_SLEEP_ENABLE __HAL_RCC_TIM4_CLK_SLEEP_ENABLE +#define __TIM4_FORCE_RESET __HAL_RCC_TIM4_FORCE_RESET +#define __TIM4_RELEASE_RESET __HAL_RCC_TIM4_RELEASE_RESET +#define __TIM5_CLK_DISABLE __HAL_RCC_TIM5_CLK_DISABLE +#define __TIM5_CLK_ENABLE __HAL_RCC_TIM5_CLK_ENABLE +#define __TIM5_CLK_SLEEP_DISABLE __HAL_RCC_TIM5_CLK_SLEEP_DISABLE +#define __TIM5_CLK_SLEEP_ENABLE __HAL_RCC_TIM5_CLK_SLEEP_ENABLE +#define __TIM5_FORCE_RESET __HAL_RCC_TIM5_FORCE_RESET +#define __TIM5_RELEASE_RESET __HAL_RCC_TIM5_RELEASE_RESET +#define __TIM6_CLK_DISABLE __HAL_RCC_TIM6_CLK_DISABLE +#define __TIM6_CLK_ENABLE __HAL_RCC_TIM6_CLK_ENABLE +#define __TIM6_CLK_SLEEP_DISABLE __HAL_RCC_TIM6_CLK_SLEEP_DISABLE +#define __TIM6_CLK_SLEEP_ENABLE __HAL_RCC_TIM6_CLK_SLEEP_ENABLE +#define __TIM6_FORCE_RESET __HAL_RCC_TIM6_FORCE_RESET +#define __TIM6_RELEASE_RESET __HAL_RCC_TIM6_RELEASE_RESET +#define __TIM7_CLK_DISABLE __HAL_RCC_TIM7_CLK_DISABLE +#define __TIM7_CLK_ENABLE __HAL_RCC_TIM7_CLK_ENABLE +#define __TIM7_CLK_SLEEP_DISABLE __HAL_RCC_TIM7_CLK_SLEEP_DISABLE +#define __TIM7_CLK_SLEEP_ENABLE __HAL_RCC_TIM7_CLK_SLEEP_ENABLE +#define __TIM7_FORCE_RESET __HAL_RCC_TIM7_FORCE_RESET +#define __TIM7_RELEASE_RESET __HAL_RCC_TIM7_RELEASE_RESET +#define __TIM8_CLK_DISABLE __HAL_RCC_TIM8_CLK_DISABLE +#define __TIM8_CLK_ENABLE __HAL_RCC_TIM8_CLK_ENABLE +#define __TIM8_CLK_SLEEP_DISABLE __HAL_RCC_TIM8_CLK_SLEEP_DISABLE +#define __TIM8_CLK_SLEEP_ENABLE __HAL_RCC_TIM8_CLK_SLEEP_ENABLE +#define __TIM8_FORCE_RESET __HAL_RCC_TIM8_FORCE_RESET +#define __TIM8_RELEASE_RESET __HAL_RCC_TIM8_RELEASE_RESET +#define __TIM9_CLK_DISABLE __HAL_RCC_TIM9_CLK_DISABLE +#define __TIM9_CLK_ENABLE __HAL_RCC_TIM9_CLK_ENABLE +#define __TIM9_FORCE_RESET __HAL_RCC_TIM9_FORCE_RESET +#define __TIM9_RELEASE_RESET __HAL_RCC_TIM9_RELEASE_RESET +#define __TSC_CLK_DISABLE __HAL_RCC_TSC_CLK_DISABLE +#define __TSC_CLK_ENABLE __HAL_RCC_TSC_CLK_ENABLE +#define __TSC_CLK_SLEEP_DISABLE __HAL_RCC_TSC_CLK_SLEEP_DISABLE +#define __TSC_CLK_SLEEP_ENABLE __HAL_RCC_TSC_CLK_SLEEP_ENABLE +#define __TSC_FORCE_RESET __HAL_RCC_TSC_FORCE_RESET +#define __TSC_RELEASE_RESET __HAL_RCC_TSC_RELEASE_RESET +#define __UART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE +#define __UART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE +#define __UART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __UART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE +#define __UART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET +#define __UART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET +#define __UART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE +#define __UART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE +#define __UART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __UART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE +#define __UART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET +#define __UART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET +#define __USART1_CLK_DISABLE __HAL_RCC_USART1_CLK_DISABLE +#define __USART1_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE +#define __USART1_CLK_SLEEP_DISABLE __HAL_RCC_USART1_CLK_SLEEP_DISABLE +#define __USART1_CLK_SLEEP_ENABLE __HAL_RCC_USART1_CLK_SLEEP_ENABLE +#define __USART1_FORCE_RESET __HAL_RCC_USART1_FORCE_RESET +#define __USART1_RELEASE_RESET __HAL_RCC_USART1_RELEASE_RESET +#define __USART2_CLK_DISABLE __HAL_RCC_USART2_CLK_DISABLE +#define __USART2_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE +#define __USART2_CLK_SLEEP_DISABLE __HAL_RCC_USART2_CLK_SLEEP_DISABLE +#define __USART2_CLK_SLEEP_ENABLE __HAL_RCC_USART2_CLK_SLEEP_ENABLE +#define __USART2_FORCE_RESET __HAL_RCC_USART2_FORCE_RESET +#define __USART2_RELEASE_RESET __HAL_RCC_USART2_RELEASE_RESET +#define __USART3_CLK_DISABLE __HAL_RCC_USART3_CLK_DISABLE +#define __USART3_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE +#define __USART3_CLK_SLEEP_DISABLE __HAL_RCC_USART3_CLK_SLEEP_DISABLE +#define __USART3_CLK_SLEEP_ENABLE __HAL_RCC_USART3_CLK_SLEEP_ENABLE +#define __USART3_FORCE_RESET __HAL_RCC_USART3_FORCE_RESET +#define __USART3_RELEASE_RESET __HAL_RCC_USART3_RELEASE_RESET +#define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE +#define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE +#define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET +#define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET +#define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE +#define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE +#define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET +#define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET +#define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE +#define __USART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE +#define __USART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET +#define __USART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET +#define __USART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE +#define __USART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE +#define __USART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET +#define __USART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET +#define __USB_CLK_DISABLE __HAL_RCC_USB_CLK_DISABLE +#define __USB_CLK_ENABLE __HAL_RCC_USB_CLK_ENABLE +#define __USB_FORCE_RESET __HAL_RCC_USB_FORCE_RESET +#define __USB_CLK_SLEEP_ENABLE __HAL_RCC_USB_CLK_SLEEP_ENABLE +#define __USB_CLK_SLEEP_DISABLE __HAL_RCC_USB_CLK_SLEEP_DISABLE +#define __USB_OTG_FS_CLK_DISABLE __HAL_RCC_USB_OTG_FS_CLK_DISABLE +#define __USB_OTG_FS_CLK_ENABLE __HAL_RCC_USB_OTG_FS_CLK_ENABLE +#define __USB_RELEASE_RESET __HAL_RCC_USB_RELEASE_RESET + +#if defined(STM32H7) +#define __HAL_RCC_WWDG_CLK_DISABLE __HAL_RCC_WWDG1_CLK_DISABLE +#define __HAL_RCC_WWDG_CLK_ENABLE __HAL_RCC_WWDG1_CLK_ENABLE +#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG1_CLK_SLEEP_DISABLE +#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG1_CLK_SLEEP_ENABLE + +#define __HAL_RCC_WWDG_FORCE_RESET ((void)0U) /* Not available on the STM32H7*/ +#define __HAL_RCC_WWDG_RELEASE_RESET ((void)0U) /* Not available on the STM32H7*/ + + +#define __HAL_RCC_WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG1_IS_CLK_ENABLED +#define __HAL_RCC_WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG1_IS_CLK_DISABLED +#endif + +#define __WWDG_CLK_DISABLE __HAL_RCC_WWDG_CLK_DISABLE +#define __WWDG_CLK_ENABLE __HAL_RCC_WWDG_CLK_ENABLE +#define __WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG_CLK_SLEEP_DISABLE +#define __WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG_CLK_SLEEP_ENABLE +#define __WWDG_FORCE_RESET __HAL_RCC_WWDG_FORCE_RESET +#define __WWDG_RELEASE_RESET __HAL_RCC_WWDG_RELEASE_RESET + +#define __TIM21_CLK_ENABLE __HAL_RCC_TIM21_CLK_ENABLE +#define __TIM21_CLK_DISABLE __HAL_RCC_TIM21_CLK_DISABLE +#define __TIM21_FORCE_RESET __HAL_RCC_TIM21_FORCE_RESET +#define __TIM21_RELEASE_RESET __HAL_RCC_TIM21_RELEASE_RESET +#define __TIM21_CLK_SLEEP_ENABLE __HAL_RCC_TIM21_CLK_SLEEP_ENABLE +#define __TIM21_CLK_SLEEP_DISABLE __HAL_RCC_TIM21_CLK_SLEEP_DISABLE +#define __TIM22_CLK_ENABLE __HAL_RCC_TIM22_CLK_ENABLE +#define __TIM22_CLK_DISABLE __HAL_RCC_TIM22_CLK_DISABLE +#define __TIM22_FORCE_RESET __HAL_RCC_TIM22_FORCE_RESET +#define __TIM22_RELEASE_RESET __HAL_RCC_TIM22_RELEASE_RESET +#define __TIM22_CLK_SLEEP_ENABLE __HAL_RCC_TIM22_CLK_SLEEP_ENABLE +#define __TIM22_CLK_SLEEP_DISABLE __HAL_RCC_TIM22_CLK_SLEEP_DISABLE +#define __CRS_CLK_DISABLE __HAL_RCC_CRS_CLK_DISABLE +#define __CRS_CLK_ENABLE __HAL_RCC_CRS_CLK_ENABLE +#define __CRS_CLK_SLEEP_DISABLE __HAL_RCC_CRS_CLK_SLEEP_DISABLE +#define __CRS_CLK_SLEEP_ENABLE __HAL_RCC_CRS_CLK_SLEEP_ENABLE +#define __CRS_FORCE_RESET __HAL_RCC_CRS_FORCE_RESET +#define __CRS_RELEASE_RESET __HAL_RCC_CRS_RELEASE_RESET +#define __RCC_BACKUPRESET_FORCE __HAL_RCC_BACKUPRESET_FORCE +#define __RCC_BACKUPRESET_RELEASE __HAL_RCC_BACKUPRESET_RELEASE + +#define __USB_OTG_FS_FORCE_RESET __HAL_RCC_USB_OTG_FS_FORCE_RESET +#define __USB_OTG_FS_RELEASE_RESET __HAL_RCC_USB_OTG_FS_RELEASE_RESET +#define __USB_OTG_FS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE +#define __USB_OTG_FS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE +#define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE +#define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE +#define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE +#define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE +#define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE +#define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET +#define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET +#define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE +#define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE +#define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE +#define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET +#define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET +#define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE +#define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE +#define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET +#define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET +#define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE +#define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE +#define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET +#define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE +#define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE +#define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE +#define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE +#define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET +#define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET +#define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE +#define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE +#define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET +#define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET +#define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE +#define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE +#define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET +#define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET +#define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE +#define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE +#define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET +#define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET +#define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE +#define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE +#define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET +#define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE +#define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE +#define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET +#define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET +#define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE +#define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE +#define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET +#define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET +#define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE +#define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE +#define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET +#define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET +#define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE +#define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE +#define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE +#define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED +#define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET +#define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET +#define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET +#define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET +#define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE +#define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE +#define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET +#define __DMA2D_RELEASE_RESET __HAL_RCC_DMA2D_RELEASE_RESET +#define __DMA2D_CLK_SLEEP_ENABLE __HAL_RCC_DMA2D_CLK_SLEEP_ENABLE +#define __DMA2D_CLK_SLEEP_DISABLE __HAL_RCC_DMA2D_CLK_SLEEP_DISABLE + +/* alias define maintained for legacy */ +#define __HAL_RCC_OTGFS_FORCE_RESET __HAL_RCC_USB_OTG_FS_FORCE_RESET +#define __HAL_RCC_OTGFS_RELEASE_RESET __HAL_RCC_USB_OTG_FS_RELEASE_RESET + +#define __ADC12_CLK_ENABLE __HAL_RCC_ADC12_CLK_ENABLE +#define __ADC12_CLK_DISABLE __HAL_RCC_ADC12_CLK_DISABLE +#define __ADC34_CLK_ENABLE __HAL_RCC_ADC34_CLK_ENABLE +#define __ADC34_CLK_DISABLE __HAL_RCC_ADC34_CLK_DISABLE +#define __DAC2_CLK_ENABLE __HAL_RCC_DAC2_CLK_ENABLE +#define __DAC2_CLK_DISABLE __HAL_RCC_DAC2_CLK_DISABLE +#define __TIM18_CLK_ENABLE __HAL_RCC_TIM18_CLK_ENABLE +#define __TIM18_CLK_DISABLE __HAL_RCC_TIM18_CLK_DISABLE +#define __TIM19_CLK_ENABLE __HAL_RCC_TIM19_CLK_ENABLE +#define __TIM19_CLK_DISABLE __HAL_RCC_TIM19_CLK_DISABLE +#define __TIM20_CLK_ENABLE __HAL_RCC_TIM20_CLK_ENABLE +#define __TIM20_CLK_DISABLE __HAL_RCC_TIM20_CLK_DISABLE +#define __HRTIM1_CLK_ENABLE __HAL_RCC_HRTIM1_CLK_ENABLE +#define __HRTIM1_CLK_DISABLE __HAL_RCC_HRTIM1_CLK_DISABLE +#define __SDADC1_CLK_ENABLE __HAL_RCC_SDADC1_CLK_ENABLE +#define __SDADC2_CLK_ENABLE __HAL_RCC_SDADC2_CLK_ENABLE +#define __SDADC3_CLK_ENABLE __HAL_RCC_SDADC3_CLK_ENABLE +#define __SDADC1_CLK_DISABLE __HAL_RCC_SDADC1_CLK_DISABLE +#define __SDADC2_CLK_DISABLE __HAL_RCC_SDADC2_CLK_DISABLE +#define __SDADC3_CLK_DISABLE __HAL_RCC_SDADC3_CLK_DISABLE + +#define __ADC12_FORCE_RESET __HAL_RCC_ADC12_FORCE_RESET +#define __ADC12_RELEASE_RESET __HAL_RCC_ADC12_RELEASE_RESET +#define __ADC34_FORCE_RESET __HAL_RCC_ADC34_FORCE_RESET +#define __ADC34_RELEASE_RESET __HAL_RCC_ADC34_RELEASE_RESET +#define __DAC2_FORCE_RESET __HAL_RCC_DAC2_FORCE_RESET +#define __DAC2_RELEASE_RESET __HAL_RCC_DAC2_RELEASE_RESET +#define __TIM18_FORCE_RESET __HAL_RCC_TIM18_FORCE_RESET +#define __TIM18_RELEASE_RESET __HAL_RCC_TIM18_RELEASE_RESET +#define __TIM19_FORCE_RESET __HAL_RCC_TIM19_FORCE_RESET +#define __TIM19_RELEASE_RESET __HAL_RCC_TIM19_RELEASE_RESET +#define __TIM20_FORCE_RESET __HAL_RCC_TIM20_FORCE_RESET +#define __TIM20_RELEASE_RESET __HAL_RCC_TIM20_RELEASE_RESET +#define __HRTIM1_FORCE_RESET __HAL_RCC_HRTIM1_FORCE_RESET +#define __HRTIM1_RELEASE_RESET __HAL_RCC_HRTIM1_RELEASE_RESET +#define __SDADC1_FORCE_RESET __HAL_RCC_SDADC1_FORCE_RESET +#define __SDADC2_FORCE_RESET __HAL_RCC_SDADC2_FORCE_RESET +#define __SDADC3_FORCE_RESET __HAL_RCC_SDADC3_FORCE_RESET +#define __SDADC1_RELEASE_RESET __HAL_RCC_SDADC1_RELEASE_RESET +#define __SDADC2_RELEASE_RESET __HAL_RCC_SDADC2_RELEASE_RESET +#define __SDADC3_RELEASE_RESET __HAL_RCC_SDADC3_RELEASE_RESET + +#define __ADC1_IS_CLK_ENABLED __HAL_RCC_ADC1_IS_CLK_ENABLED +#define __ADC1_IS_CLK_DISABLED __HAL_RCC_ADC1_IS_CLK_DISABLED +#define __ADC12_IS_CLK_ENABLED __HAL_RCC_ADC12_IS_CLK_ENABLED +#define __ADC12_IS_CLK_DISABLED __HAL_RCC_ADC12_IS_CLK_DISABLED +#define __ADC34_IS_CLK_ENABLED __HAL_RCC_ADC34_IS_CLK_ENABLED +#define __ADC34_IS_CLK_DISABLED __HAL_RCC_ADC34_IS_CLK_DISABLED +#define __CEC_IS_CLK_ENABLED __HAL_RCC_CEC_IS_CLK_ENABLED +#define __CEC_IS_CLK_DISABLED __HAL_RCC_CEC_IS_CLK_DISABLED +#define __CRC_IS_CLK_ENABLED __HAL_RCC_CRC_IS_CLK_ENABLED +#define __CRC_IS_CLK_DISABLED __HAL_RCC_CRC_IS_CLK_DISABLED +#define __DAC1_IS_CLK_ENABLED __HAL_RCC_DAC1_IS_CLK_ENABLED +#define __DAC1_IS_CLK_DISABLED __HAL_RCC_DAC1_IS_CLK_DISABLED +#define __DAC2_IS_CLK_ENABLED __HAL_RCC_DAC2_IS_CLK_ENABLED +#define __DAC2_IS_CLK_DISABLED __HAL_RCC_DAC2_IS_CLK_DISABLED +#define __DMA1_IS_CLK_ENABLED __HAL_RCC_DMA1_IS_CLK_ENABLED +#define __DMA1_IS_CLK_DISABLED __HAL_RCC_DMA1_IS_CLK_DISABLED +#define __DMA2_IS_CLK_ENABLED __HAL_RCC_DMA2_IS_CLK_ENABLED +#define __DMA2_IS_CLK_DISABLED __HAL_RCC_DMA2_IS_CLK_DISABLED +#define __FLITF_IS_CLK_ENABLED __HAL_RCC_FLITF_IS_CLK_ENABLED +#define __FLITF_IS_CLK_DISABLED __HAL_RCC_FLITF_IS_CLK_DISABLED +#define __FMC_IS_CLK_ENABLED __HAL_RCC_FMC_IS_CLK_ENABLED +#define __FMC_IS_CLK_DISABLED __HAL_RCC_FMC_IS_CLK_DISABLED +#define __GPIOA_IS_CLK_ENABLED __HAL_RCC_GPIOA_IS_CLK_ENABLED +#define __GPIOA_IS_CLK_DISABLED __HAL_RCC_GPIOA_IS_CLK_DISABLED +#define __GPIOB_IS_CLK_ENABLED __HAL_RCC_GPIOB_IS_CLK_ENABLED +#define __GPIOB_IS_CLK_DISABLED __HAL_RCC_GPIOB_IS_CLK_DISABLED +#define __GPIOC_IS_CLK_ENABLED __HAL_RCC_GPIOC_IS_CLK_ENABLED +#define __GPIOC_IS_CLK_DISABLED __HAL_RCC_GPIOC_IS_CLK_DISABLED +#define __GPIOD_IS_CLK_ENABLED __HAL_RCC_GPIOD_IS_CLK_ENABLED +#define __GPIOD_IS_CLK_DISABLED __HAL_RCC_GPIOD_IS_CLK_DISABLED +#define __GPIOE_IS_CLK_ENABLED __HAL_RCC_GPIOE_IS_CLK_ENABLED +#define __GPIOE_IS_CLK_DISABLED __HAL_RCC_GPIOE_IS_CLK_DISABLED +#define __GPIOF_IS_CLK_ENABLED __HAL_RCC_GPIOF_IS_CLK_ENABLED +#define __GPIOF_IS_CLK_DISABLED __HAL_RCC_GPIOF_IS_CLK_DISABLED +#define __GPIOG_IS_CLK_ENABLED __HAL_RCC_GPIOG_IS_CLK_ENABLED +#define __GPIOG_IS_CLK_DISABLED __HAL_RCC_GPIOG_IS_CLK_DISABLED +#define __GPIOH_IS_CLK_ENABLED __HAL_RCC_GPIOH_IS_CLK_ENABLED +#define __GPIOH_IS_CLK_DISABLED __HAL_RCC_GPIOH_IS_CLK_DISABLED +#define __HRTIM1_IS_CLK_ENABLED __HAL_RCC_HRTIM1_IS_CLK_ENABLED +#define __HRTIM1_IS_CLK_DISABLED __HAL_RCC_HRTIM1_IS_CLK_DISABLED +#define __I2C1_IS_CLK_ENABLED __HAL_RCC_I2C1_IS_CLK_ENABLED +#define __I2C1_IS_CLK_DISABLED __HAL_RCC_I2C1_IS_CLK_DISABLED +#define __I2C2_IS_CLK_ENABLED __HAL_RCC_I2C2_IS_CLK_ENABLED +#define __I2C2_IS_CLK_DISABLED __HAL_RCC_I2C2_IS_CLK_DISABLED +#define __I2C3_IS_CLK_ENABLED __HAL_RCC_I2C3_IS_CLK_ENABLED +#define __I2C3_IS_CLK_DISABLED __HAL_RCC_I2C3_IS_CLK_DISABLED +#define __PWR_IS_CLK_ENABLED __HAL_RCC_PWR_IS_CLK_ENABLED +#define __PWR_IS_CLK_DISABLED __HAL_RCC_PWR_IS_CLK_DISABLED +#define __SYSCFG_IS_CLK_ENABLED __HAL_RCC_SYSCFG_IS_CLK_ENABLED +#define __SYSCFG_IS_CLK_DISABLED __HAL_RCC_SYSCFG_IS_CLK_DISABLED +#define __SPI1_IS_CLK_ENABLED __HAL_RCC_SPI1_IS_CLK_ENABLED +#define __SPI1_IS_CLK_DISABLED __HAL_RCC_SPI1_IS_CLK_DISABLED +#define __SPI2_IS_CLK_ENABLED __HAL_RCC_SPI2_IS_CLK_ENABLED +#define __SPI2_IS_CLK_DISABLED __HAL_RCC_SPI2_IS_CLK_DISABLED +#define __SPI3_IS_CLK_ENABLED __HAL_RCC_SPI3_IS_CLK_ENABLED +#define __SPI3_IS_CLK_DISABLED __HAL_RCC_SPI3_IS_CLK_DISABLED +#define __SPI4_IS_CLK_ENABLED __HAL_RCC_SPI4_IS_CLK_ENABLED +#define __SPI4_IS_CLK_DISABLED __HAL_RCC_SPI4_IS_CLK_DISABLED +#define __SDADC1_IS_CLK_ENABLED __HAL_RCC_SDADC1_IS_CLK_ENABLED +#define __SDADC1_IS_CLK_DISABLED __HAL_RCC_SDADC1_IS_CLK_DISABLED +#define __SDADC2_IS_CLK_ENABLED __HAL_RCC_SDADC2_IS_CLK_ENABLED +#define __SDADC2_IS_CLK_DISABLED __HAL_RCC_SDADC2_IS_CLK_DISABLED +#define __SDADC3_IS_CLK_ENABLED __HAL_RCC_SDADC3_IS_CLK_ENABLED +#define __SDADC3_IS_CLK_DISABLED __HAL_RCC_SDADC3_IS_CLK_DISABLED +#define __SRAM_IS_CLK_ENABLED __HAL_RCC_SRAM_IS_CLK_ENABLED +#define __SRAM_IS_CLK_DISABLED __HAL_RCC_SRAM_IS_CLK_DISABLED +#define __TIM1_IS_CLK_ENABLED __HAL_RCC_TIM1_IS_CLK_ENABLED +#define __TIM1_IS_CLK_DISABLED __HAL_RCC_TIM1_IS_CLK_DISABLED +#define __TIM2_IS_CLK_ENABLED __HAL_RCC_TIM2_IS_CLK_ENABLED +#define __TIM2_IS_CLK_DISABLED __HAL_RCC_TIM2_IS_CLK_DISABLED +#define __TIM3_IS_CLK_ENABLED __HAL_RCC_TIM3_IS_CLK_ENABLED +#define __TIM3_IS_CLK_DISABLED __HAL_RCC_TIM3_IS_CLK_DISABLED +#define __TIM4_IS_CLK_ENABLED __HAL_RCC_TIM4_IS_CLK_ENABLED +#define __TIM4_IS_CLK_DISABLED __HAL_RCC_TIM4_IS_CLK_DISABLED +#define __TIM5_IS_CLK_ENABLED __HAL_RCC_TIM5_IS_CLK_ENABLED +#define __TIM5_IS_CLK_DISABLED __HAL_RCC_TIM5_IS_CLK_DISABLED +#define __TIM6_IS_CLK_ENABLED __HAL_RCC_TIM6_IS_CLK_ENABLED +#define __TIM6_IS_CLK_DISABLED __HAL_RCC_TIM6_IS_CLK_DISABLED +#define __TIM7_IS_CLK_ENABLED __HAL_RCC_TIM7_IS_CLK_ENABLED +#define __TIM7_IS_CLK_DISABLED __HAL_RCC_TIM7_IS_CLK_DISABLED +#define __TIM8_IS_CLK_ENABLED __HAL_RCC_TIM8_IS_CLK_ENABLED +#define __TIM8_IS_CLK_DISABLED __HAL_RCC_TIM8_IS_CLK_DISABLED +#define __TIM12_IS_CLK_ENABLED __HAL_RCC_TIM12_IS_CLK_ENABLED +#define __TIM12_IS_CLK_DISABLED __HAL_RCC_TIM12_IS_CLK_DISABLED +#define __TIM13_IS_CLK_ENABLED __HAL_RCC_TIM13_IS_CLK_ENABLED +#define __TIM13_IS_CLK_DISABLED __HAL_RCC_TIM13_IS_CLK_DISABLED +#define __TIM14_IS_CLK_ENABLED __HAL_RCC_TIM14_IS_CLK_ENABLED +#define __TIM14_IS_CLK_DISABLED __HAL_RCC_TIM14_IS_CLK_DISABLED +#define __TIM15_IS_CLK_ENABLED __HAL_RCC_TIM15_IS_CLK_ENABLED +#define __TIM15_IS_CLK_DISABLED __HAL_RCC_TIM15_IS_CLK_DISABLED +#define __TIM16_IS_CLK_ENABLED __HAL_RCC_TIM16_IS_CLK_ENABLED +#define __TIM16_IS_CLK_DISABLED __HAL_RCC_TIM16_IS_CLK_DISABLED +#define __TIM17_IS_CLK_ENABLED __HAL_RCC_TIM17_IS_CLK_ENABLED +#define __TIM17_IS_CLK_DISABLED __HAL_RCC_TIM17_IS_CLK_DISABLED +#define __TIM18_IS_CLK_ENABLED __HAL_RCC_TIM18_IS_CLK_ENABLED +#define __TIM18_IS_CLK_DISABLED __HAL_RCC_TIM18_IS_CLK_DISABLED +#define __TIM19_IS_CLK_ENABLED __HAL_RCC_TIM19_IS_CLK_ENABLED +#define __TIM19_IS_CLK_DISABLED __HAL_RCC_TIM19_IS_CLK_DISABLED +#define __TIM20_IS_CLK_ENABLED __HAL_RCC_TIM20_IS_CLK_ENABLED +#define __TIM20_IS_CLK_DISABLED __HAL_RCC_TIM20_IS_CLK_DISABLED +#define __TSC_IS_CLK_ENABLED __HAL_RCC_TSC_IS_CLK_ENABLED +#define __TSC_IS_CLK_DISABLED __HAL_RCC_TSC_IS_CLK_DISABLED +#define __UART4_IS_CLK_ENABLED __HAL_RCC_UART4_IS_CLK_ENABLED +#define __UART4_IS_CLK_DISABLED __HAL_RCC_UART4_IS_CLK_DISABLED +#define __UART5_IS_CLK_ENABLED __HAL_RCC_UART5_IS_CLK_ENABLED +#define __UART5_IS_CLK_DISABLED __HAL_RCC_UART5_IS_CLK_DISABLED +#define __USART1_IS_CLK_ENABLED __HAL_RCC_USART1_IS_CLK_ENABLED +#define __USART1_IS_CLK_DISABLED __HAL_RCC_USART1_IS_CLK_DISABLED +#define __USART2_IS_CLK_ENABLED __HAL_RCC_USART2_IS_CLK_ENABLED +#define __USART2_IS_CLK_DISABLED __HAL_RCC_USART2_IS_CLK_DISABLED +#define __USART3_IS_CLK_ENABLED __HAL_RCC_USART3_IS_CLK_ENABLED +#define __USART3_IS_CLK_DISABLED __HAL_RCC_USART3_IS_CLK_DISABLED +#define __USB_IS_CLK_ENABLED __HAL_RCC_USB_IS_CLK_ENABLED +#define __USB_IS_CLK_DISABLED __HAL_RCC_USB_IS_CLK_DISABLED +#define __WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG_IS_CLK_ENABLED +#define __WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG_IS_CLK_DISABLED + +#if defined(STM32L1) +#define __HAL_RCC_CRYP_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE +#define __HAL_RCC_CRYP_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE +#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE +#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE +#define __HAL_RCC_CRYP_FORCE_RESET __HAL_RCC_AES_FORCE_RESET +#define __HAL_RCC_CRYP_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET +#endif /* STM32L1 */ + +#if defined(STM32F4) +#define __HAL_RCC_SDMMC1_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET +#define __HAL_RCC_SDMMC1_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET +#define __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE +#define __HAL_RCC_SDMMC1_CLK_ENABLE __HAL_RCC_SDIO_CLK_ENABLE +#define __HAL_RCC_SDMMC1_CLK_DISABLE __HAL_RCC_SDIO_CLK_DISABLE +#define __HAL_RCC_SDMMC1_IS_CLK_ENABLED __HAL_RCC_SDIO_IS_CLK_ENABLED +#define __HAL_RCC_SDMMC1_IS_CLK_DISABLED __HAL_RCC_SDIO_IS_CLK_DISABLED +#define Sdmmc1ClockSelection SdioClockSelection +#define RCC_PERIPHCLK_SDMMC1 RCC_PERIPHCLK_SDIO +#define RCC_SDMMC1CLKSOURCE_CLK48 RCC_SDIOCLKSOURCE_CK48 +#define RCC_SDMMC1CLKSOURCE_SYSCLK RCC_SDIOCLKSOURCE_SYSCLK +#define __HAL_RCC_SDMMC1_CONFIG __HAL_RCC_SDIO_CONFIG +#define __HAL_RCC_GET_SDMMC1_SOURCE __HAL_RCC_GET_SDIO_SOURCE +#endif + +#if defined(STM32F7) || defined(STM32L4) +#define __HAL_RCC_SDIO_FORCE_RESET __HAL_RCC_SDMMC1_FORCE_RESET +#define __HAL_RCC_SDIO_RELEASE_RESET __HAL_RCC_SDMMC1_RELEASE_RESET +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE +#define __HAL_RCC_SDIO_CLK_ENABLE __HAL_RCC_SDMMC1_CLK_ENABLE +#define __HAL_RCC_SDIO_CLK_DISABLE __HAL_RCC_SDMMC1_CLK_DISABLE +#define __HAL_RCC_SDIO_IS_CLK_ENABLED __HAL_RCC_SDMMC1_IS_CLK_ENABLED +#define __HAL_RCC_SDIO_IS_CLK_DISABLED __HAL_RCC_SDMMC1_IS_CLK_DISABLED +#define SdioClockSelection Sdmmc1ClockSelection +#define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 +#define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#endif + +#if defined(STM32F7) +#define RCC_SDIOCLKSOURCE_CLK48 RCC_SDMMC1CLKSOURCE_CLK48 +#define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK +#endif + +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + +#define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG +#define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG + +#define __RCC_PLLSRC RCC_GET_PLL_OSCSOURCE + +#define IS_RCC_MSIRANGE IS_RCC_MSI_CLOCK_RANGE +#define IS_RCC_RTCCLK_SOURCE IS_RCC_RTCCLKSOURCE +#define IS_RCC_SYSCLK_DIV IS_RCC_HCLK +#define IS_RCC_HCLK_DIV IS_RCC_PCLK +#define IS_RCC_PERIPHCLK IS_RCC_PERIPHCLOCK + +#define RCC_IT_HSI14 RCC_IT_HSI14RDY + +#define RCC_IT_CSSLSE RCC_IT_LSECSS +#define RCC_IT_CSSHSE RCC_IT_CSS + +#define RCC_PLLMUL_3 RCC_PLL_MUL3 +#define RCC_PLLMUL_4 RCC_PLL_MUL4 +#define RCC_PLLMUL_6 RCC_PLL_MUL6 +#define RCC_PLLMUL_8 RCC_PLL_MUL8 +#define RCC_PLLMUL_12 RCC_PLL_MUL12 +#define RCC_PLLMUL_16 RCC_PLL_MUL16 +#define RCC_PLLMUL_24 RCC_PLL_MUL24 +#define RCC_PLLMUL_32 RCC_PLL_MUL32 +#define RCC_PLLMUL_48 RCC_PLL_MUL48 + +#define RCC_PLLDIV_2 RCC_PLL_DIV2 +#define RCC_PLLDIV_3 RCC_PLL_DIV3 +#define RCC_PLLDIV_4 RCC_PLL_DIV4 + +#define IS_RCC_MCOSOURCE IS_RCC_MCO1SOURCE +#define __HAL_RCC_MCO_CONFIG __HAL_RCC_MCO1_CONFIG +#define RCC_MCO_NODIV RCC_MCODIV_1 +#define RCC_MCO_DIV1 RCC_MCODIV_1 +#define RCC_MCO_DIV2 RCC_MCODIV_2 +#define RCC_MCO_DIV4 RCC_MCODIV_4 +#define RCC_MCO_DIV8 RCC_MCODIV_8 +#define RCC_MCO_DIV16 RCC_MCODIV_16 +#define RCC_MCO_DIV32 RCC_MCODIV_32 +#define RCC_MCO_DIV64 RCC_MCODIV_64 +#define RCC_MCO_DIV128 RCC_MCODIV_128 +#define RCC_MCOSOURCE_NONE RCC_MCO1SOURCE_NOCLOCK +#define RCC_MCOSOURCE_LSI RCC_MCO1SOURCE_LSI +#define RCC_MCOSOURCE_LSE RCC_MCO1SOURCE_LSE +#define RCC_MCOSOURCE_SYSCLK RCC_MCO1SOURCE_SYSCLK +#define RCC_MCOSOURCE_HSI RCC_MCO1SOURCE_HSI +#define RCC_MCOSOURCE_HSI14 RCC_MCO1SOURCE_HSI14 +#define RCC_MCOSOURCE_HSI48 RCC_MCO1SOURCE_HSI48 +#define RCC_MCOSOURCE_HSE RCC_MCO1SOURCE_HSE +#define RCC_MCOSOURCE_PLLCLK_DIV1 RCC_MCO1SOURCE_PLLCLK +#define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK +#define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 + +#if defined(STM32L4) || defined(STM32WB) || defined(STM32G0) || defined(STM32G4) || defined(STM32L5) || defined(STM32WL) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#else +#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK +#endif + +#define RCC_USBCLK_PLLSAI1 RCC_USBCLKSOURCE_PLLSAI1 +#define RCC_USBCLK_PLL RCC_USBCLKSOURCE_PLL +#define RCC_USBCLK_MSI RCC_USBCLKSOURCE_MSI +#define RCC_USBCLKSOURCE_PLLCLK RCC_USBCLKSOURCE_PLL +#define RCC_USBPLLCLK_DIV1 RCC_USBCLKSOURCE_PLL +#define RCC_USBPLLCLK_DIV1_5 RCC_USBCLKSOURCE_PLL_DIV1_5 +#define RCC_USBPLLCLK_DIV2 RCC_USBCLKSOURCE_PLL_DIV2 +#define RCC_USBPLLCLK_DIV3 RCC_USBCLKSOURCE_PLL_DIV3 + +#define HSION_BitNumber RCC_HSION_BIT_NUMBER +#define HSION_BITNUMBER RCC_HSION_BIT_NUMBER +#define HSEON_BitNumber RCC_HSEON_BIT_NUMBER +#define HSEON_BITNUMBER RCC_HSEON_BIT_NUMBER +#define MSION_BITNUMBER RCC_MSION_BIT_NUMBER +#define CSSON_BitNumber RCC_CSSON_BIT_NUMBER +#define CSSON_BITNUMBER RCC_CSSON_BIT_NUMBER +#define PLLON_BitNumber RCC_PLLON_BIT_NUMBER +#define PLLON_BITNUMBER RCC_PLLON_BIT_NUMBER +#define PLLI2SON_BitNumber RCC_PLLI2SON_BIT_NUMBER +#define I2SSRC_BitNumber RCC_I2SSRC_BIT_NUMBER +#define RTCEN_BitNumber RCC_RTCEN_BIT_NUMBER +#define RTCEN_BITNUMBER RCC_RTCEN_BIT_NUMBER +#define BDRST_BitNumber RCC_BDRST_BIT_NUMBER +#define BDRST_BITNUMBER RCC_BDRST_BIT_NUMBER +#define RTCRST_BITNUMBER RCC_RTCRST_BIT_NUMBER +#define LSION_BitNumber RCC_LSION_BIT_NUMBER +#define LSION_BITNUMBER RCC_LSION_BIT_NUMBER +#define LSEON_BitNumber RCC_LSEON_BIT_NUMBER +#define LSEON_BITNUMBER RCC_LSEON_BIT_NUMBER +#define LSEBYP_BITNUMBER RCC_LSEBYP_BIT_NUMBER +#define PLLSAION_BitNumber RCC_PLLSAION_BIT_NUMBER +#define TIMPRE_BitNumber RCC_TIMPRE_BIT_NUMBER +#define RMVF_BitNumber RCC_RMVF_BIT_NUMBER +#define RMVF_BITNUMBER RCC_RMVF_BIT_NUMBER +#define RCC_CR2_HSI14TRIM_BitNumber RCC_HSI14TRIM_BIT_NUMBER +#define CR_BYTE2_ADDRESS RCC_CR_BYTE2_ADDRESS +#define CIR_BYTE1_ADDRESS RCC_CIR_BYTE1_ADDRESS +#define CIR_BYTE2_ADDRESS RCC_CIR_BYTE2_ADDRESS +#define BDCR_BYTE0_ADDRESS RCC_BDCR_BYTE0_ADDRESS +#define DBP_TIMEOUT_VALUE RCC_DBP_TIMEOUT_VALUE +#define LSE_TIMEOUT_VALUE RCC_LSE_TIMEOUT_VALUE + +#define CR_HSION_BB RCC_CR_HSION_BB +#define CR_CSSON_BB RCC_CR_CSSON_BB +#define CR_PLLON_BB RCC_CR_PLLON_BB +#define CR_PLLI2SON_BB RCC_CR_PLLI2SON_BB +#define CR_MSION_BB RCC_CR_MSION_BB +#define CSR_LSION_BB RCC_CSR_LSION_BB +#define CSR_LSEON_BB RCC_CSR_LSEON_BB +#define CSR_LSEBYP_BB RCC_CSR_LSEBYP_BB +#define CSR_RTCEN_BB RCC_CSR_RTCEN_BB +#define CSR_RTCRST_BB RCC_CSR_RTCRST_BB +#define CFGR_I2SSRC_BB RCC_CFGR_I2SSRC_BB +#define BDCR_RTCEN_BB RCC_BDCR_RTCEN_BB +#define BDCR_BDRST_BB RCC_BDCR_BDRST_BB +#define CR_HSEON_BB RCC_CR_HSEON_BB +#define CSR_RMVF_BB RCC_CSR_RMVF_BB +#define CR_PLLSAION_BB RCC_CR_PLLSAION_BB +#define DCKCFGR_TIMPRE_BB RCC_DCKCFGR_TIMPRE_BB + +#define __HAL_RCC_CRS_ENABLE_FREQ_ERROR_COUNTER __HAL_RCC_CRS_FREQ_ERROR_COUNTER_ENABLE +#define __HAL_RCC_CRS_DISABLE_FREQ_ERROR_COUNTER __HAL_RCC_CRS_FREQ_ERROR_COUNTER_DISABLE +#define __HAL_RCC_CRS_ENABLE_AUTOMATIC_CALIB __HAL_RCC_CRS_AUTOMATIC_CALIB_ENABLE +#define __HAL_RCC_CRS_DISABLE_AUTOMATIC_CALIB __HAL_RCC_CRS_AUTOMATIC_CALIB_DISABLE +#define __HAL_RCC_CRS_CALCULATE_RELOADVALUE __HAL_RCC_CRS_RELOADVALUE_CALCULATE + +#define __HAL_RCC_GET_IT_SOURCE __HAL_RCC_GET_IT + +#define RCC_CRS_SYNCWARM RCC_CRS_SYNCWARN +#define RCC_CRS_TRIMOV RCC_CRS_TRIMOVF + +#define RCC_PERIPHCLK_CK48 RCC_PERIPHCLK_CLK48 +#define RCC_CK48CLKSOURCE_PLLQ RCC_CLK48CLKSOURCE_PLLQ +#define RCC_CK48CLKSOURCE_PLLSAIP RCC_CLK48CLKSOURCE_PLLSAIP +#define RCC_CK48CLKSOURCE_PLLI2SQ RCC_CLK48CLKSOURCE_PLLI2SQ +#define IS_RCC_CK48CLKSOURCE IS_RCC_CLK48CLKSOURCE +#define RCC_SDIOCLKSOURCE_CK48 RCC_SDIOCLKSOURCE_CLK48 + +#define __HAL_RCC_DFSDM_CLK_ENABLE __HAL_RCC_DFSDM1_CLK_ENABLE +#define __HAL_RCC_DFSDM_CLK_DISABLE __HAL_RCC_DFSDM1_CLK_DISABLE +#define __HAL_RCC_DFSDM_IS_CLK_ENABLED __HAL_RCC_DFSDM1_IS_CLK_ENABLED +#define __HAL_RCC_DFSDM_IS_CLK_DISABLED __HAL_RCC_DFSDM1_IS_CLK_DISABLED +#define __HAL_RCC_DFSDM_FORCE_RESET __HAL_RCC_DFSDM1_FORCE_RESET +#define __HAL_RCC_DFSDM_RELEASE_RESET __HAL_RCC_DFSDM1_RELEASE_RESET +#define __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE __HAL_RCC_DFSDM1_CLK_SLEEP_ENABLE +#define __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE __HAL_RCC_DFSDM1_CLK_SLEEP_DISABLE +#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_ENABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED +#define DfsdmClockSelection Dfsdm1ClockSelection +#define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK +#define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG +#define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 +#if defined(STM32U5) +#define MSIKPLLModeSEL RCC_MSIKPLL_MODE_SEL +#define MSISPLLModeSEL RCC_MSISPLL_MODE_SEL +#define __HAL_RCC_AHB21_CLK_DISABLE __HAL_RCC_AHB2_1_CLK_DISABLE +#define __HAL_RCC_AHB22_CLK_DISABLE __HAL_RCC_AHB2_2_CLK_DISABLE +#define __HAL_RCC_AHB1_CLK_Disable_Clear __HAL_RCC_AHB1_CLK_ENABLE +#define __HAL_RCC_AHB21_CLK_Disable_Clear __HAL_RCC_AHB2_1_CLK_ENABLE +#define __HAL_RCC_AHB22_CLK_Disable_Clear __HAL_RCC_AHB2_2_CLK_ENABLE +#define __HAL_RCC_AHB3_CLK_Disable_Clear __HAL_RCC_AHB3_CLK_ENABLE +#define __HAL_RCC_APB1_CLK_Disable_Clear __HAL_RCC_APB1_CLK_ENABLE +#define __HAL_RCC_APB2_CLK_Disable_Clear __HAL_RCC_APB2_CLK_ENABLE +#define __HAL_RCC_APB3_CLK_Disable_Clear __HAL_RCC_APB3_CLK_ENABLE +#define IS_RCC_MSIPLLModeSelection IS_RCC_MSIPLLMODE_SELECT +#endif +/** + * @} + */ + +/** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose + * @{ + */ +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) + +/** + * @} + */ + +/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined (STM32G0) || defined (STM32L5) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx) || defined (STM32G4) || defined (STM32WL) || defined (STM32U5) +#else +#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif +#define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT +#define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT + +#if defined (STM32F1) +#define __HAL_RTC_EXTI_CLEAR_FLAG(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() + +#define __HAL_RTC_EXTI_ENABLE_IT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_ENABLE_IT() + +#define __HAL_RTC_EXTI_DISABLE_IT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_DISABLE_IT() + +#define __HAL_RTC_EXTI_GET_FLAG(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_GET_FLAG() + +#define __HAL_RTC_EXTI_GENERATE_SWIT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_GENERATE_SWIT() +#else +#define __HAL_RTC_EXTI_CLEAR_FLAG(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_CLEAR_FLAG())) +#define __HAL_RTC_EXTI_ENABLE_IT(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_ENABLE_IT() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_IT())) +#define __HAL_RTC_EXTI_DISABLE_IT(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_DISABLE_IT() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_IT() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_IT())) +#define __HAL_RTC_EXTI_GET_FLAG(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_GET_FLAG() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GET_FLAG() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GET_FLAG())) +#define __HAL_RTC_EXTI_GENERATE_SWIT(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_GENERATE_SWIT() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GENERATE_SWIT() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GENERATE_SWIT())) +#endif /* STM32F1 */ + +#define IS_ALARM IS_RTC_ALARM +#define IS_ALARM_MASK IS_RTC_ALARM_MASK +#define IS_TAMPER IS_RTC_TAMPER +#define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT +#define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE +#define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION +#define IS_TAMPER_PULLUP_STATE IS_RTC_TAMPER_PULLUP_STATE +#define IS_TAMPER_SAMPLING_FREQ IS_RTC_TAMPER_SAMPLING_FREQ +#define IS_TAMPER_TIMESTAMPONTAMPER_DETECTION IS_RTC_TAMPER_TIMESTAMPONTAMPER_DETECTION +#define IS_TAMPER_TRIGGER IS_RTC_TAMPER_TRIGGER +#define IS_WAKEUP_CLOCK IS_RTC_WAKEUP_CLOCK +#define IS_WAKEUP_COUNTER IS_RTC_WAKEUP_COUNTER + +#define __RTC_WRITEPROTECTION_ENABLE __HAL_RTC_WRITEPROTECTION_ENABLE +#define __RTC_WRITEPROTECTION_DISABLE __HAL_RTC_WRITEPROTECTION_DISABLE + +/** + * @} + */ + +/** @defgroup HAL_SD_Aliased_Macros HAL SD/MMC Aliased Macros maintained for legacy purpose + * @{ + */ + +#define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE +#define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS + +#if !defined(STM32F1) && !defined(STM32F2) && !defined(STM32F4) && !defined(STM32F7) && !defined(STM32L1) +#define eMMC_HIGH_VOLTAGE_RANGE EMMC_HIGH_VOLTAGE_RANGE +#define eMMC_DUAL_VOLTAGE_RANGE EMMC_DUAL_VOLTAGE_RANGE +#define eMMC_LOW_VOLTAGE_RANGE EMMC_LOW_VOLTAGE_RANGE + +#define SDMMC_NSpeed_CLK_DIV SDMMC_NSPEED_CLK_DIV +#define SDMMC_HSpeed_CLK_DIV SDMMC_HSPEED_CLK_DIV +#endif + +#if defined(STM32F4) || defined(STM32F2) +#define SD_SDMMC_DISABLED SD_SDIO_DISABLED +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND +/* alias CMSIS */ +#define SDMMC1_IRQn SDIO_IRQn +#define SDMMC1_IRQHandler SDIO_IRQHandler +#endif + +#if defined(STM32F7) || defined(STM32L4) +#define SD_SDIO_DISABLED SD_SDMMC_DISABLED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION +#define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND +#define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT +#define SD_CMD_SDIO_RW_EXTENDED SD_CMD_SDMMC_RW_EXTENDED +#define __HAL_SD_SDIO_ENABLE __HAL_SD_SDMMC_ENABLE +#define __HAL_SD_SDIO_DISABLE __HAL_SD_SDMMC_DISABLE +#define __HAL_SD_SDIO_DMA_ENABLE __HAL_SD_SDMMC_DMA_ENABLE +#define __HAL_SD_SDIO_DMA_DISABL __HAL_SD_SDMMC_DMA_DISABLE +#define __HAL_SD_SDIO_ENABLE_IT __HAL_SD_SDMMC_ENABLE_IT +#define __HAL_SD_SDIO_DISABLE_IT __HAL_SD_SDMMC_DISABLE_IT +#define __HAL_SD_SDIO_GET_FLAG __HAL_SD_SDMMC_GET_FLAG +#define __HAL_SD_SDIO_CLEAR_FLAG __HAL_SD_SDMMC_CLEAR_FLAG +#define __HAL_SD_SDIO_GET_IT __HAL_SD_SDMMC_GET_IT +#define __HAL_SD_SDIO_CLEAR_IT __HAL_SD_SDMMC_CLEAR_IT +#define SDIO_STATIC_FLAGS SDMMC_STATIC_FLAGS +#define SDIO_CMD0TIMEOUT SDMMC_CMD0TIMEOUT +#define SD_SDIO_SEND_IF_COND SD_SDMMC_SEND_IF_COND +/* alias CMSIS for compatibilities */ +#define SDIO_IRQn SDMMC1_IRQn +#define SDIO_IRQHandler SDMMC1_IRQHandler +#endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) || defined(STM32H7) +#define HAL_SD_CardCIDTypedef HAL_SD_CardCIDTypeDef +#define HAL_SD_CardCSDTypedef HAL_SD_CardCSDTypeDef +#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef +#define HAL_SD_CardStateTypedef HAL_SD_CardStateTypeDef +#endif + +#if defined(STM32H7) || defined(STM32L5) +#define HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback HAL_MMCEx_Read_DMADoubleBuf0CpltCallback +#define HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback HAL_MMCEx_Read_DMADoubleBuf1CpltCallback +#define HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback HAL_MMCEx_Write_DMADoubleBuf0CpltCallback +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif +/** + * @} + */ + +/** @defgroup HAL_SMARTCARD_Aliased_Macros HAL SMARTCARD Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __SMARTCARD_ENABLE_IT __HAL_SMARTCARD_ENABLE_IT +#define __SMARTCARD_DISABLE_IT __HAL_SMARTCARD_DISABLE_IT +#define __SMARTCARD_ENABLE __HAL_SMARTCARD_ENABLE +#define __SMARTCARD_DISABLE __HAL_SMARTCARD_DISABLE +#define __SMARTCARD_DMA_REQUEST_ENABLE __HAL_SMARTCARD_DMA_REQUEST_ENABLE +#define __SMARTCARD_DMA_REQUEST_DISABLE __HAL_SMARTCARD_DMA_REQUEST_DISABLE + +#define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE +#define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE + +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE + +/** + * @} + */ + +/** @defgroup HAL_SMBUS_Aliased_Macros HAL SMBUS Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_SMBUS_RESET_CR1 SMBUS_RESET_CR1 +#define __HAL_SMBUS_RESET_CR2 SMBUS_RESET_CR2 +#define __HAL_SMBUS_GENERATE_START SMBUS_GENERATE_START +#define __HAL_SMBUS_GET_ADDR_MATCH SMBUS_GET_ADDR_MATCH +#define __HAL_SMBUS_GET_DIR SMBUS_GET_DIR +#define __HAL_SMBUS_GET_STOP_MODE SMBUS_GET_STOP_MODE +#define __HAL_SMBUS_GET_PEC_MODE SMBUS_GET_PEC_MODE +#define __HAL_SMBUS_GET_ALERT_ENABLED SMBUS_GET_ALERT_ENABLED +/** + * @} + */ + +/** @defgroup HAL_SPI_Aliased_Macros HAL SPI Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_SPI_1LINE_TX SPI_1LINE_TX +#define __HAL_SPI_1LINE_RX SPI_1LINE_RX +#define __HAL_SPI_RESET_CRC SPI_RESET_CRC + +/** + * @} + */ + +/** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_UART_GETCLOCKSOURCE UART_GETCLOCKSOURCE +#define __HAL_UART_MASK_COMPUTATION UART_MASK_COMPUTATION +#define __UART_GETCLOCKSOURCE UART_GETCLOCKSOURCE +#define __UART_MASK_COMPUTATION UART_MASK_COMPUTATION + +#define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD + +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE + +/** + * @} + */ + + +/** @defgroup HAL_USART_Aliased_Macros HAL USART Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __USART_ENABLE_IT __HAL_USART_ENABLE_IT +#define __USART_DISABLE_IT __HAL_USART_DISABLE_IT +#define __USART_ENABLE __HAL_USART_ENABLE +#define __USART_DISABLE __HAL_USART_DISABLE + +#define __HAL_USART_GETCLOCKSOURCE USART_GETCLOCKSOURCE +#define __USART_GETCLOCKSOURCE USART_GETCLOCKSOURCE + +#if defined(STM32F0) || defined(STM32F3) || defined(STM32F7) +#define USART_OVERSAMPLING_16 0x00000000U +#define USART_OVERSAMPLING_8 USART_CR1_OVER8 + +#define IS_USART_OVERSAMPLING(__SAMPLING__) (((__SAMPLING__) == USART_OVERSAMPLING_16) || \ + ((__SAMPLING__) == USART_OVERSAMPLING_8)) +#endif /* STM32F0 || STM32F3 || STM32F7 */ +/** + * @} + */ + +/** @defgroup HAL_USB_Aliased_Macros HAL USB Aliased Macros maintained for legacy purpose + * @{ + */ +#define USB_EXTI_LINE_WAKEUP USB_WAKEUP_EXTI_LINE + +#define USB_FS_EXTI_TRIGGER_RISING_EDGE USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE +#define USB_FS_EXTI_TRIGGER_FALLING_EDGE USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE +#define USB_FS_EXTI_TRIGGER_BOTH_EDGE USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE +#define USB_FS_EXTI_LINE_WAKEUP USB_OTG_FS_WAKEUP_EXTI_LINE + +#define USB_HS_EXTI_TRIGGER_RISING_EDGE USB_OTG_HS_WAKEUP_EXTI_RISING_EDGE +#define USB_HS_EXTI_TRIGGER_FALLING_EDGE USB_OTG_HS_WAKEUP_EXTI_FALLING_EDGE +#define USB_HS_EXTI_TRIGGER_BOTH_EDGE USB_OTG_HS_WAKEUP_EXTI_RISING_FALLING_EDGE +#define USB_HS_EXTI_LINE_WAKEUP USB_OTG_HS_WAKEUP_EXTI_LINE + +#define __HAL_USB_EXTI_ENABLE_IT __HAL_USB_WAKEUP_EXTI_ENABLE_IT +#define __HAL_USB_EXTI_DISABLE_IT __HAL_USB_WAKEUP_EXTI_DISABLE_IT +#define __HAL_USB_EXTI_GET_FLAG __HAL_USB_WAKEUP_EXTI_GET_FLAG +#define __HAL_USB_EXTI_CLEAR_FLAG __HAL_USB_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_USB_EXTI_SET_RISING_EDGE_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_EDGE +#define __HAL_USB_EXTI_SET_FALLING_EDGE_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_FALLING_EDGE +#define __HAL_USB_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE + +#define __HAL_USB_FS_EXTI_ENABLE_IT __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT +#define __HAL_USB_FS_EXTI_DISABLE_IT __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT +#define __HAL_USB_FS_EXTI_GET_FLAG __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG +#define __HAL_USB_FS_EXTI_CLEAR_FLAG __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_USB_FS_EXTI_SET_RISING_EGDE_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE +#define __HAL_USB_FS_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_FALLING_EDGE +#define __HAL_USB_FS_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE +#define __HAL_USB_FS_EXTI_GENERATE_SWIT __HAL_USB_OTG_FS_WAKEUP_EXTI_GENERATE_SWIT + +#define __HAL_USB_HS_EXTI_ENABLE_IT __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_IT +#define __HAL_USB_HS_EXTI_DISABLE_IT __HAL_USB_OTG_HS_WAKEUP_EXTI_DISABLE_IT +#define __HAL_USB_HS_EXTI_GET_FLAG __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG +#define __HAL_USB_HS_EXTI_CLEAR_FLAG __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_USB_HS_EXTI_SET_RISING_EGDE_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE +#define __HAL_USB_HS_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_FALLING_EDGE +#define __HAL_USB_HS_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE +#define __HAL_USB_HS_EXTI_GENERATE_SWIT __HAL_USB_OTG_HS_WAKEUP_EXTI_GENERATE_SWIT + +#define HAL_PCD_ActiveRemoteWakeup HAL_PCD_ActivateRemoteWakeup +#define HAL_PCD_DeActiveRemoteWakeup HAL_PCD_DeActivateRemoteWakeup + +#define HAL_PCD_SetTxFiFo HAL_PCDEx_SetTxFiFo +#define HAL_PCD_SetRxFiFo HAL_PCDEx_SetRxFiFo +/** + * @} + */ + +/** @defgroup HAL_TIM_Aliased_Macros HAL TIM Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_TIM_SetICPrescalerValue TIM_SET_ICPRESCALERVALUE +#define __HAL_TIM_ResetICPrescalerValue TIM_RESET_ICPRESCALERVALUE + +#define TIM_GET_ITSTATUS __HAL_TIM_GET_IT_SOURCE +#define TIM_GET_CLEAR_IT __HAL_TIM_CLEAR_IT + +#define __HAL_TIM_GET_ITSTATUS __HAL_TIM_GET_IT_SOURCE + +#define __HAL_TIM_DIRECTION_STATUS __HAL_TIM_IS_TIM_COUNTING_DOWN +#define __HAL_TIM_PRESCALER __HAL_TIM_SET_PRESCALER +#define __HAL_TIM_SetCounter __HAL_TIM_SET_COUNTER +#define __HAL_TIM_GetCounter __HAL_TIM_GET_COUNTER +#define __HAL_TIM_SetAutoreload __HAL_TIM_SET_AUTORELOAD +#define __HAL_TIM_GetAutoreload __HAL_TIM_GET_AUTORELOAD +#define __HAL_TIM_SetClockDivision __HAL_TIM_SET_CLOCKDIVISION +#define __HAL_TIM_GetClockDivision __HAL_TIM_GET_CLOCKDIVISION +#define __HAL_TIM_SetICPrescaler __HAL_TIM_SET_ICPRESCALER +#define __HAL_TIM_GetICPrescaler __HAL_TIM_GET_ICPRESCALER +#define __HAL_TIM_SetCompare __HAL_TIM_SET_COMPARE +#define __HAL_TIM_GetCompare __HAL_TIM_GET_COMPARE + +#define TIM_BREAKINPUTSOURCE_DFSDM TIM_BREAKINPUTSOURCE_DFSDM1 +/** + * @} + */ + +/** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT +#define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT +#define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG +#define __HAL_ETH_EXTI_CLEAR_FLAG __HAL_ETH_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_ETH_EXTI_SET_RISING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_RISING_EDGE_TRIGGER +#define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER +#define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER + +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE +#define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE +/** + * @} + */ + +/** @defgroup HAL_LTDC_Aliased_Macros HAL LTDC Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG +/** + * @} + */ + +/** @defgroup HAL_SAI_Aliased_Macros HAL SAI Aliased Macros maintained for legacy purpose + * @{ + */ +#define SAI_OUTPUTDRIVE_DISABLED SAI_OUTPUTDRIVE_DISABLE +#define SAI_OUTPUTDRIVE_ENABLED SAI_OUTPUTDRIVE_ENABLE +#define SAI_MASTERDIVIDER_ENABLED SAI_MASTERDIVIDER_ENABLE +#define SAI_MASTERDIVIDER_DISABLED SAI_MASTERDIVIDER_DISABLE +#define SAI_STREOMODE SAI_STEREOMODE +#define SAI_FIFOStatus_Empty SAI_FIFOSTATUS_EMPTY +#define SAI_FIFOStatus_Less1QuarterFull SAI_FIFOSTATUS_LESS1QUARTERFULL +#define SAI_FIFOStatus_1QuarterFull SAI_FIFOSTATUS_1QUARTERFULL +#define SAI_FIFOStatus_HalfFull SAI_FIFOSTATUS_HALFFULL +#define SAI_FIFOStatus_3QuartersFull SAI_FIFOSTATUS_3QUARTERFULL +#define SAI_FIFOStatus_Full SAI_FIFOSTATUS_FULL +#define IS_SAI_BLOCK_MONO_STREO_MODE IS_SAI_BLOCK_MONO_STEREO_MODE +#define SAI_SYNCHRONOUS_EXT SAI_SYNCHRONOUS_EXT_SAI1 +#define SAI_SYNCEXT_IN_ENABLE SAI_SYNCEXT_OUTBLOCKA_ENABLE +/** + * @} + */ + +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#if defined (STM32H7) || defined (STM32G4) || defined (STM32F3) +#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT +#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA +#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart +#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT +#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA +#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop +#endif +/** + * @} + */ + +/** @defgroup HAL_QSPI_Aliased_Macros HAL QSPI Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined (STM32L4) || defined (STM32F4) || defined (STM32F7) || defined(STM32H7) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif /* STM32L4 || STM32F4 || STM32F7 */ +/** + * @} + */ + +/** @defgroup HAL_Generic_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined (STM32F7) +#define ART_ACCLERATOR_ENABLE ART_ACCELERATOR_ENABLE +#endif /* STM32F7 */ +/** + * @} + */ + +/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose + * @{ + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32_HAL_LEGACY */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal.h new file mode 100644 index 0000000..c02cd46 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal.h @@ -0,0 +1,945 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal.h + * @author MCD Application Team + * @brief This file contains all the functions prototypes for the HAL + * module driver. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_HAL_H +#define __STM32F3xx_HAL_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_conf.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup HAL + * @{ + */ + +/* Private macros ------------------------------------------------------------*/ +/** @addtogroup HAL_Private_Macros + * @{ + */ +#define IS_SYSCFG_FASTMODEPLUS(__PIN__) ((((__PIN__) & SYSCFG_FASTMODEPLUS_PB6) == SYSCFG_FASTMODEPLUS_PB6) || \ + (((__PIN__) & SYSCFG_FASTMODEPLUS_PB7) == SYSCFG_FASTMODEPLUS_PB7) || \ + (((__PIN__) & SYSCFG_FASTMODEPLUS_PB8) == SYSCFG_FASTMODEPLUS_PB8) || \ + (((__PIN__) & SYSCFG_FASTMODEPLUS_PB9) == SYSCFG_FASTMODEPLUS_PB9)) +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup HAL_Exported_Constants HAL Exported Constants + * @{ + */ + +/** @defgroup HAL_TICK_FREQ Tick Frequency + * @{ + */ +typedef enum +{ + HAL_TICK_FREQ_10HZ = 100U, + HAL_TICK_FREQ_100HZ = 10U, + HAL_TICK_FREQ_1KHZ = 1U, + HAL_TICK_FREQ_DEFAULT = HAL_TICK_FREQ_1KHZ +} HAL_TickFreqTypeDef; +/** + * @} + */ + +/** + * @} + */ +/** @defgroup HAL_Exported_Constants HAL Exported Constants + * @{ + */ +/** @defgroup SYSCFG_BitAddress_AliasRegion SYSCFG registers bit address in the alias region + * @brief SYSCFG registers bit address in the alias region + * @{ + */ +/* ------------ SYSCFG registers bit address in the alias region -------------*/ +#define SYSCFG_OFFSET (SYSCFG_BASE - PERIPH_BASE) +/* --- CFGR2 Register ---*/ +/* Alias word address of BYP_ADDR_PAR bit */ +#define CFGR2_OFFSET (SYSCFG_OFFSET + 0x18U) +#define BYPADDRPAR_BitNumber 0x04U +#define CFGR2_BYPADDRPAR_BB (PERIPH_BB_BASE + (CFGR2_OFFSET * 32U) + (BYPADDRPAR_BitNumber * 4U)) +/** + * @} + */ + +#if defined(SYSCFG_CFGR1_DMA_RMP) +/** @defgroup HAL_DMA_Remapping HAL DMA Remapping + * Elements values convention: 0xXXYYYYYY + * - YYYYYY : Position in the register + * - XX : Register index + * - 00: CFGR1 register in SYSCFG + * - 01: CFGR3 register in SYSCFG (not available on STM32F373xC/STM32F378xx devices) + * @{ + */ +#define HAL_REMAPDMA_ADC24_DMA2_CH34 (0x00000100U) /*!< ADC24 DMA remap (STM32F303xB/C/E, STM32F358xx and STM32F398xx devices) + 1: Remap (ADC24 DMA requests mapped on DMA2 channels 3 and 4) */ +#define HAL_REMAPDMA_TIM16_DMA1_CH6 (0x00000800U) /*!< TIM16 DMA request remap + 1: Remap (TIM16_CH1 and TIM16_UP DMA requests mapped on DMA1 channel 6) */ +#define HAL_REMAPDMA_TIM17_DMA1_CH7 (0x00001000U) /*!< TIM17 DMA request remap + 1: Remap (TIM17_CH1 and TIM17_UP DMA requests mapped on DMA1 channel 7) */ +#define HAL_REMAPDMA_TIM6_DAC1_CH1_DMA1_CH3 (0x00002000U) /*!< TIM6 and DAC channel1 DMA remap (STM32F303xB/C/E, STM32F358xx and STM32F398xx devices) + 1: Remap (TIM6_UP and DAC_CH1 DMA requests mapped on DMA1 channel 3) */ +#define HAL_REMAPDMA_TIM7_DAC1_CH2_DMA1_CH4 (0x00004000U) /*!< TIM7 and DAC channel2 DMA remap (STM32F303xB/C/E, STM32F358xx and STM32F398xx devices) + 1: Remap (TIM7_UP and DAC_CH2 DMA requests mapped on DMA1 channel 4) */ +#define HAL_REMAPDMA_DAC2_CH1_DMA1_CH5 (0x00008000U) /*!< DAC2 channel1 DMA remap (STM32F303x4/6/8 devices only) + 1: Remap (DAC2_CH1 DMA requests mapped on DMA1 channel 5) */ +#define HAL_REMAPDMA_TIM18_DAC2_CH1_DMA1_CH5 (0x00008000U) /*!< DAC2 channel1 DMA remap (STM32F303x4/6/8 devices only) + 1: Remap (DAC2_CH1 DMA requests mapped on DMA1 channel 5) */ +#if defined(SYSCFG_CFGR3_DMA_RMP) +#if !defined(HAL_REMAP_CFGR3_MASK) +#define HAL_REMAP_CFGR3_MASK (0x01000000U) +#endif + +#define HAL_REMAPDMA_SPI1_RX_DMA1_CH2 (0x01000003U) /*!< SPI1_RX DMA remap (STM32F303x4/6/8 devices only) + 11: Map on DMA1 channel 2 */ +#define HAL_REMAPDMA_SPI1_RX_DMA1_CH4 (0x01000001U) /*!< SPI1_RX DMA remap (STM32F303x4/6/8 devices only) + 01: Map on DMA1 channel 4 */ +#define HAL_REMAPDMA_SPI1_RX_DMA1_CH6 (0x01000002U) /*!< SPI1_RX DMA remap (STM32F303x4/6/8 devices only) + 10: Map on DMA1 channel 6 */ +#define HAL_REMAPDMA_SPI1_TX_DMA1_CH3 (0x0100000CU) /*!< SPI1_TX DMA remap (STM32F303x4/6/8 devices only) + 11: Map on DMA1 channel 3 */ +#define HAL_REMAPDMA_SPI1_TX_DMA1_CH5 (0x01000004U) /*!< SPI1_TX DMA remap (STM32F303x4/6/8 devices only) + 01: Map on DMA1 channel 5 */ +#define HAL_REMAPDMA_SPI1_TX_DMA1_CH7 (0x01000008U) /*!< SPI1_TX DMA remap (STM32F303x4/6/8 devices only) + 10: Map on DMA1 channel 7 */ +#define HAL_REMAPDMA_I2C1_RX_DMA1_CH7 (0x01000030U) /*!< I2C1_RX DMA remap (STM32F303x4/6/8 devices only) + 11: Map on DMA1 channel 7 */ +#define HAL_REMAPDMA_I2C1_RX_DMA1_CH3 (0x01000010U) /*!< I2C1_RX DMA remap (STM32F303x4/6/8 devices only) + 01: Map on DMA1 channel 3 */ +#define HAL_REMAPDMA_I2C1_RX_DMA1_CH5 (0x01000020U) /*!< I2C1_RX DMA remap (STM32F303x4/6/8 devices only) + 10: Map on DMA1 channel 5 */ +#define HAL_REMAPDMA_I2C1_TX_DMA1_CH6 (0x010000C0U) /*!< I2C1_TX DMA remap (STM32F303x4/6/8 devices only) + 11: Map on DMA1 channel 6 */ +#define HAL_REMAPDMA_I2C1_TX_DMA1_CH2 (0x01000040U) /*!< I2C1_TX DMA remap (STM32F303x4/6/8 devices only) + 01: Map on DMA1 channel 2 */ +#define HAL_REMAPDMA_I2C1_TX_DMA1_CH4 (0x01000080U) /*!< I2C1_TX DMA remap (STM32F303x4/6/8 devices only) + 10: Map on DMA1 channel 4 */ +#define HAL_REMAPDMA_ADC2_DMA1_CH2 (0x01000100U) /*!< ADC2 DMA remap + x0: No remap (ADC2 on DMA2) + 10: Map on DMA1 channel 2 */ +#define HAL_REMAPDMA_ADC2_DMA1_CH4 (0x01000300U) /*!< ADC2 DMA remap + 11: Map on DMA1 channel 4 */ +#endif /* SYSCFG_CFGR3_DMA_RMP */ + +#if defined(SYSCFG_CFGR3_DMA_RMP) +#define IS_DMA_REMAP(RMP) ((((RMP) & HAL_REMAPDMA_ADC24_DMA2_CH34) == HAL_REMAPDMA_ADC24_DMA2_CH34) || \ + (((RMP) & HAL_REMAPDMA_TIM16_DMA1_CH6) == HAL_REMAPDMA_TIM16_DMA1_CH6) || \ + (((RMP) & HAL_REMAPDMA_TIM17_DMA1_CH7) == HAL_REMAPDMA_TIM17_DMA1_CH7) || \ + (((RMP) & HAL_REMAPDMA_TIM6_DAC1_CH1_DMA1_CH3) == HAL_REMAPDMA_TIM6_DAC1_CH1_DMA1_CH3) || \ + (((RMP) & HAL_REMAPDMA_TIM7_DAC1_CH2_DMA1_CH4) == HAL_REMAPDMA_TIM7_DAC1_CH2_DMA1_CH4) || \ + (((RMP) & HAL_REMAPDMA_DAC2_CH1_DMA1_CH5) == HAL_REMAPDMA_DAC2_CH1_DMA1_CH5) || \ + (((RMP) & HAL_REMAPDMA_TIM18_DAC2_CH1_DMA1_CH5) == HAL_REMAPDMA_TIM18_DAC2_CH1_DMA1_CH5) || \ + (((RMP) & HAL_REMAPDMA_SPI1_RX_DMA1_CH2) == HAL_REMAPDMA_SPI1_RX_DMA1_CH2) || \ + (((RMP) & HAL_REMAPDMA_SPI1_RX_DMA1_CH4) == HAL_REMAPDMA_SPI1_RX_DMA1_CH4) || \ + (((RMP) & HAL_REMAPDMA_SPI1_RX_DMA1_CH6) == HAL_REMAPDMA_SPI1_RX_DMA1_CH6) || \ + (((RMP) & HAL_REMAPDMA_SPI1_TX_DMA1_CH3) == HAL_REMAPDMA_SPI1_TX_DMA1_CH3) || \ + (((RMP) & HAL_REMAPDMA_SPI1_TX_DMA1_CH5) == HAL_REMAPDMA_SPI1_TX_DMA1_CH5) || \ + (((RMP) & HAL_REMAPDMA_SPI1_TX_DMA1_CH7) == HAL_REMAPDMA_SPI1_TX_DMA1_CH7) || \ + (((RMP) & HAL_REMAPDMA_I2C1_RX_DMA1_CH7) == HAL_REMAPDMA_I2C1_RX_DMA1_CH7) || \ + (((RMP) & HAL_REMAPDMA_I2C1_RX_DMA1_CH3) == HAL_REMAPDMA_I2C1_RX_DMA1_CH3) || \ + (((RMP) & HAL_REMAPDMA_I2C1_RX_DMA1_CH5) == HAL_REMAPDMA_I2C1_RX_DMA1_CH5) || \ + (((RMP) & HAL_REMAPDMA_I2C1_TX_DMA1_CH6) == HAL_REMAPDMA_I2C1_TX_DMA1_CH6) || \ + (((RMP) & HAL_REMAPDMA_I2C1_TX_DMA1_CH2) == HAL_REMAPDMA_I2C1_TX_DMA1_CH2) || \ + (((RMP) & HAL_REMAPDMA_I2C1_TX_DMA1_CH4) == HAL_REMAPDMA_I2C1_TX_DMA1_CH4) || \ + (((RMP) & HAL_REMAPDMA_ADC2_DMA1_CH2) == HAL_REMAPDMA_ADC2_DMA1_CH2) || \ + (((RMP) & HAL_REMAPDMA_ADC2_DMA1_CH4) == HAL_REMAPDMA_ADC2_DMA1_CH4)) +#else +#define IS_DMA_REMAP(RMP) ((((RMP) & HAL_REMAPDMA_ADC24_DMA2_CH34) == HAL_REMAPDMA_ADC24_DMA2_CH34) || \ + (((RMP) & HAL_REMAPDMA_TIM16_DMA1_CH6) == HAL_REMAPDMA_TIM16_DMA1_CH6) || \ + (((RMP) & HAL_REMAPDMA_TIM17_DMA1_CH7) == HAL_REMAPDMA_TIM17_DMA1_CH7) || \ + (((RMP) & HAL_REMAPDMA_TIM6_DAC1_CH1_DMA1_CH3) == HAL_REMAPDMA_TIM6_DAC1_CH1_DMA1_CH3) || \ + (((RMP) & HAL_REMAPDMA_TIM7_DAC1_CH2_DMA1_CH4) == HAL_REMAPDMA_TIM7_DAC1_CH2_DMA1_CH4) || \ + (((RMP) & HAL_REMAPDMA_DAC2_CH1_DMA1_CH5) == HAL_REMAPDMA_DAC2_CH1_DMA1_CH5) || \ + (((RMP) & HAL_REMAPDMA_TIM18_DAC2_CH1_DMA1_CH5) == HAL_REMAPDMA_TIM18_DAC2_CH1_DMA1_CH5)) +#endif /* SYSCFG_CFGR3_DMA_RMP && SYSCFG_CFGR1_DMA_RMP*/ +/** + * @} + */ +#endif /* SYSCFG_CFGR1_DMA_RMP */ + +/** @defgroup HAL_Trigger_Remapping HAL Trigger Remapping + * Elements values convention: 0xXXYYYYYY + * - YYYYYY : Position in the register + * - XX : Register index + * - 00: CFGR1 register in SYSCFG + * - 01: CFGR3 register in SYSCFG + * @{ + */ +#define HAL_REMAPTRIGGER_DAC1_TRIG (0x00000080U) /*!< DAC trigger remap (when TSEL = 001 on STM32F303xB/C and STM32F358xx devices) + 0: No remap (DAC trigger is TIM8_TRGO) + 1: Remap (DAC trigger is TIM3_TRGO) */ +#define HAL_REMAPTRIGGER_TIM1_ITR3 (0x00000040U) /*!< TIM1 ITR3 trigger remap + 0: No remap + 1: Remap (TIM1_TRG3 = TIM17_OC) */ +#if defined(SYSCFG_CFGR3_TRIGGER_RMP) +#if !defined(HAL_REMAP_CFGR3_MASK) +#define HAL_REMAP_CFGR3_MASK (0x01000000U) +#endif +#define HAL_REMAPTRIGGER_DAC1_TRIG3 (0x01010000U) /*!< DAC1_CH1 / DAC1_CH2 Trigger remap + 0: Remap (DAC trigger is TIM15_TRGO) + 1: Remap (DAC trigger is HRTIM1_DAC1_TRIG1) */ +#define HAL_REMAPTRIGGER_DAC1_TRIG5 (0x01020000U) /*!< DAC1_CH1 / DAC1_CH2 Trigger remap + 0: No remap + 1: Remap (DAC trigger is HRTIM1_DAC1_TRIG2) */ +#define IS_HAL_REMAPTRIGGER(RMP) ((((RMP) & HAL_REMAPTRIGGER_DAC1) == HAL_REMAPTRIGGER_DAC1) || \ + (((RMP) & HAL_REMAPTRIGGER_TIM1_ITR3) == HAL_REMAPTRIGGER_TIM1_ITR3) || \ + (((RMP) & HAL_REMAPTRIGGER_DAC1_TRIG3) == HAL_REMAPTRIGGER_DAC1_TRIG3) || \ + (((RMP) & HAL_REMAPTRIGGER_DAC1_TRIG5) == HAL_REMAPTRIGGER_DAC1_TRIG5)) +#else +#define IS_HAL_REMAPTRIGGER(RMP) ((((RMP) & HAL_REMAPTRIGGER_DAC1) == HAL_REMAPTRIGGER_DAC1) || \ + (((RMP) & HAL_REMAPTRIGGER_TIM1_ITR3) == HAL_REMAPTRIGGER_TIM1_ITR3)) +#endif /* SYSCFG_CFGR3_TRIGGER_RMP */ +/** + * @} + */ + +#if defined (STM32F302xE) +/** @defgroup HAL_ADC_Trigger_Remapping HAL ADC Trigger Remapping + * @{ + */ +#define HAL_REMAPADCTRIGGER_ADC12_EXT2 SYSCFG_CFGR4_ADC12_EXT2_RMP /*!< Input trigger of ADC12 regular channel EXT2 + 0: No remap (TIM1_CC3) + 1: Remap (TIM20_TRGO) */ +#define HAL_REMAPADCTRIGGER_ADC12_EXT3 SYSCFG_CFGR4_ADC12_EXT3_RMP /*!< Input trigger of ADC12 regular channel EXT3 + 0: No remap (TIM2_CC2) + 1: Remap (TIM20_TRGO2) */ +#define HAL_REMAPADCTRIGGER_ADC12_EXT5 SYSCFG_CFGR4_ADC12_EXT5_RMP /*!< Input trigger of ADC12 regular channel EXT5 + 0: No remap (TIM4_CC4) + 1: Remap (TIM20_CC1) */ +#define HAL_REMAPADCTRIGGER_ADC12_EXT13 SYSCFG_CFGR4_ADC12_EXT13_RMP /*!< Input trigger of ADC12 regular channel EXT13 + 0: No remap (TIM6_TRGO) + 1: Remap (TIM20_CC2) */ +#define HAL_REMAPADCTRIGGER_ADC12_EXT15 SYSCFG_CFGR4_ADC12_EXT15_RMP /*!< Input trigger of ADC12 regular channel EXT15 + 0: No remap (TIM3_CC4) + 1: Remap (TIM20_CC3) */ +#define HAL_REMAPADCTRIGGER_ADC12_JEXT3 SYSCFG_CFGR4_ADC12_JEXT3_RMP /*!< Input trigger of ADC12 injected channel JEXT3 + 0: No remap (TIM2_CC1) + 1: Remap (TIM20_TRGO) */ +#define HAL_REMAPADCTRIGGER_ADC12_JEXT6 SYSCFG_CFGR4_ADC12_JEXT6_RMP /*!< Input trigger of ADC12 injected channel JEXT6 + 0: No remap (EXTI line 15) + 1: Remap (TIM20_TRGO2) */ +#define HAL_REMAPADCTRIGGER_ADC12_JEXT13 SYSCFG_CFGR4_ADC12_JEXT13_RMP /*!< Input trigger of ADC12 injected channel JEXT13 + 0: No remap (TIM3_CC1) + 1: Remap (TIM20_CC4) */ + +#define IS_HAL_REMAPADCTRIGGER(RMP) ((((RMP) & HAL_REMAPADCTRIGGER_ADC12_EXT2) == HAL_REMAPADCTRIGGER_ADC12_EXT2) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC12_EXT3) == HAL_REMAPADCTRIGGER_ADC12_EXT3) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC12_EXT5) == HAL_REMAPADCTRIGGER_ADC12_EXT5) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC12_EXT13) == HAL_REMAPADCTRIGGER_ADC12_EXT13) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC12_EXT15) == HAL_REMAPADCTRIGGER_ADC12_EXT15) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC12_JEXT3) == HAL_REMAPADCTRIGGER_ADC12_JEXT3) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC12_JEXT6) == HAL_REMAPADCTRIGGER_ADC12_JEXT6) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC12_JEXT13) == HAL_REMAPADCTRIGGER_ADC12_JEXT13)) +/** + * @} + */ +#endif /* STM32F302xE */ + +#if defined (STM32F303xE) || defined (STM32F398xx) +/** @defgroup HAL_ADC_Trigger_Remapping HAL ADC Trigger Remapping + * @{ + */ +#define HAL_REMAPADCTRIGGER_ADC12_EXT2 SYSCFG_CFGR4_ADC12_EXT2_RMP /*!< Input trigger of ADC12 regular channel EXT2 + 0: No remap (TIM1_CC3) + 1: Remap (TIM20_TRGO) */ +#define HAL_REMAPADCTRIGGER_ADC12_EXT3 SYSCFG_CFGR4_ADC12_EXT3_RMP /*!< Input trigger of ADC12 regular channel EXT3 + 0: No remap (TIM2_CC2) + 1: Remap (TIM20_TRGO2) */ +#define HAL_REMAPADCTRIGGER_ADC12_EXT5 SYSCFG_CFGR4_ADC12_EXT5_RMP /*!< Input trigger of ADC12 regular channel EXT5 + 0: No remap (TIM4_CC4) + 1: Remap (TIM20_CC1) */ +#define HAL_REMAPADCTRIGGER_ADC12_EXT13 SYSCFG_CFGR4_ADC12_EXT13_RMP /*!< Input trigger of ADC12 regular channel EXT13 + 0: No remap (TIM6_TRGO) + 1: Remap (TIM20_CC2) */ +#define HAL_REMAPADCTRIGGER_ADC12_EXT15 SYSCFG_CFGR4_ADC12_EXT15_RMP /*!< Input trigger of ADC12 regular channel EXT15 + 0: No remap (TIM3_CC4) + 1: Remap (TIM20_CC3) */ +#define HAL_REMAPADCTRIGGER_ADC12_JEXT3 SYSCFG_CFGR4_ADC12_JEXT3_RMP /*!< Input trigger of ADC12 injected channel JEXT3 + 0: No remap (TIM2_CC1) + 1: Remap (TIM20_TRGO) */ +#define HAL_REMAPADCTRIGGER_ADC12_JEXT6 SYSCFG_CFGR4_ADC12_JEXT6_RMP /*!< Input trigger of ADC12 injected channel JEXT6 + 0: No remap (EXTI line 15) + 1: Remap (TIM20_TRGO2) */ +#define HAL_REMAPADCTRIGGER_ADC12_JEXT13 SYSCFG_CFGR4_ADC12_JEXT13_RMP /*!< Input trigger of ADC12 injected channel JEXT13 + 0: No remap (TIM3_CC1) + 1: Remap (TIM20_CC4) */ +#define HAL_REMAPADCTRIGGER_ADC34_EXT5 SYSCFG_CFGR4_ADC34_EXT5_RMP /*!< Input trigger of ADC34 regular channel EXT5 + 0: No remap (EXTI line 2) + 1: Remap (TIM20_TRGO) */ +#define HAL_REMAPADCTRIGGER_ADC34_EXT6 SYSCFG_CFGR4_ADC34_EXT6_RMP /*!< Input trigger of ADC34 regular channel EXT6 + 0: No remap (TIM4_CC1) + 1: Remap (TIM20_TRGO2) */ +#define HAL_REMAPADCTRIGGER_ADC34_EXT15 SYSCFG_CFGR4_ADC34_EXT15_RMP /*!< Input trigger of ADC34 regular channel EXT15 + 0: No remap (TIM2_CC1) + 1: Remap (TIM20_CC1) */ +#define HAL_REMAPADCTRIGGER_ADC34_JEXT5 SYSCFG_CFGR4_ADC34_JEXT5_RMP /*!< Input trigger of ADC34 injected channel JEXT5 + 0: No remap (TIM4_CC3) + 1: Remap (TIM20_TRGO) */ +#define HAL_REMAPADCTRIGGER_ADC34_JEXT11 SYSCFG_CFGR4_ADC34_JEXT11_RMP /*!< Input trigger of ADC34 injected channel JEXT11 + 0: No remap (TIM1_CC3) + 1: Remap (TIM20_TRGO2) */ +#define HAL_REMAPADCTRIGGER_ADC34_JEXT14 SYSCFG_CFGR4_ADC34_JEXT14_RMP /*!< Input trigger of ADC34 injected channel JEXT14 + 0: No remap (TIM7_TRGO) + 1: Remap (TIM20_CC2) */ + +#define IS_HAL_REMAPADCTRIGGER(RMP) ((((RMP) & HAL_REMAPADCTRIGGER_ADC12_EXT2) == HAL_REMAPADCTRIGGER_ADC12_EXT2) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC12_EXT3) == HAL_REMAPADCTRIGGER_ADC12_EXT3) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC12_EXT5) == HAL_REMAPADCTRIGGER_ADC12_EXT5) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC12_EXT13) == HAL_REMAPADCTRIGGER_ADC12_EXT13) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC12_EXT15) == HAL_REMAPADCTRIGGER_ADC12_EXT15) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC12_JEXT3) == HAL_REMAPADCTRIGGER_ADC12_JEXT3) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC12_JEXT6) == HAL_REMAPADCTRIGGER_ADC12_JEXT6) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC12_JEXT13) == HAL_REMAPADCTRIGGER_ADC12_JEXT13) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC34_EXT5) == HAL_REMAPADCTRIGGER_ADC34_EXT5) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC34_EXT6) == HAL_REMAPADCTRIGGER_ADC34_EXT6) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC34_EXT15) == HAL_REMAPADCTRIGGER_ADC34_EXT15) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC34_JEXT5) == HAL_REMAPADCTRIGGER_ADC34_JEXT5) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC34_JEXT11) == HAL_REMAPADCTRIGGER_ADC34_JEXT11) || \ + (((RMP) & HAL_REMAPADCTRIGGER_ADC34_JEXT14) == HAL_REMAPADCTRIGGER_ADC34_JEXT14)) +/** + * @} + */ +#endif /* STM32F303xE || STM32F398xx */ + +/** @defgroup SYSCFG_FastModePlus_GPIO Fast-mode Plus on GPIO + * @{ + */ + +/** @brief Fast-mode Plus driving capability on a specific GPIO + */ +#if defined(SYSCFG_CFGR1_I2C_PB6_FMP) +#define SYSCFG_FASTMODEPLUS_PB6 ((uint32_t)SYSCFG_CFGR1_I2C_PB6_FMP) /*!< Enable Fast-mode Plus on PB6 */ +#endif /* SYSCFG_CFGR1_I2C_PB6_FMP */ + +#if defined(SYSCFG_CFGR1_I2C_PB7_FMP) +#define SYSCFG_FASTMODEPLUS_PB7 ((uint32_t)SYSCFG_CFGR1_I2C_PB7_FMP) /*!< Enable Fast-mode Plus on PB7 */ +#endif /* SYSCFG_CFGR1_I2C_PB7_FMP */ + +#if defined(SYSCFG_CFGR1_I2C_PB8_FMP) +#define SYSCFG_FASTMODEPLUS_PB8 ((uint32_t)SYSCFG_CFGR1_I2C_PB8_FMP) /*!< Enable Fast-mode Plus on PB8 */ +#endif /* SYSCFG_CFGR1_I2C_PB8_FMP */ + +#if defined(SYSCFG_CFGR1_I2C_PB9_FMP) +#define SYSCFG_FASTMODEPLUS_PB9 ((uint32_t)SYSCFG_CFGR1_I2C_PB9_FMP) /*!< Enable Fast-mode Plus on PB9 */ +#endif /* SYSCFG_CFGR1_I2C_PB9_FMP */ +/** + * @} + */ + +#if defined(SYSCFG_RCR_PAGE0) +/* CCM-SRAM defined */ +/** @defgroup HAL_Page_Write_Protection HAL CCM RAM page write protection + * @{ + */ +#define HAL_SYSCFG_WP_PAGE0 (SYSCFG_RCR_PAGE0) /*!< ICODE SRAM Write protection page 0 */ +#define HAL_SYSCFG_WP_PAGE1 (SYSCFG_RCR_PAGE1) /*!< ICODE SRAM Write protection page 1 */ +#define HAL_SYSCFG_WP_PAGE2 (SYSCFG_RCR_PAGE2) /*!< ICODE SRAM Write protection page 2 */ +#define HAL_SYSCFG_WP_PAGE3 (SYSCFG_RCR_PAGE3) /*!< ICODE SRAM Write protection page 3 */ +#if defined(SYSCFG_RCR_PAGE4) +/* More than 4KB CCM-SRAM defined */ +#define HAL_SYSCFG_WP_PAGE4 (SYSCFG_RCR_PAGE4) /*!< ICODE SRAM Write protection page 4 */ +#define HAL_SYSCFG_WP_PAGE5 (SYSCFG_RCR_PAGE5) /*!< ICODE SRAM Write protection page 5 */ +#define HAL_SYSCFG_WP_PAGE6 (SYSCFG_RCR_PAGE6) /*!< ICODE SRAM Write protection page 6 */ +#define HAL_SYSCFG_WP_PAGE7 (SYSCFG_RCR_PAGE7) /*!< ICODE SRAM Write protection page 7 */ +#endif /* SYSCFG_RCR_PAGE4 */ +#if defined(SYSCFG_RCR_PAGE8) +#define HAL_SYSCFG_WP_PAGE8 (SYSCFG_RCR_PAGE8) /*!< ICODE SRAM Write protection page 8 */ +#define HAL_SYSCFG_WP_PAGE9 (SYSCFG_RCR_PAGE9) /*!< ICODE SRAM Write protection page 9 */ +#define HAL_SYSCFG_WP_PAGE10 (SYSCFG_RCR_PAGE10) /*!< ICODE SRAM Write protection page 10 */ +#define HAL_SYSCFG_WP_PAGE11 (SYSCFG_RCR_PAGE11) /*!< ICODE SRAM Write protection page 11 */ +#define HAL_SYSCFG_WP_PAGE12 (SYSCFG_RCR_PAGE12) /*!< ICODE SRAM Write protection page 12 */ +#define HAL_SYSCFG_WP_PAGE13 (SYSCFG_RCR_PAGE13) /*!< ICODE SRAM Write protection page 13 */ +#define HAL_SYSCFG_WP_PAGE14 (SYSCFG_RCR_PAGE14) /*!< ICODE SRAM Write protection page 14 */ +#define HAL_SYSCFG_WP_PAGE15 (SYSCFG_RCR_PAGE15) /*!< ICODE SRAM Write protection page 15 */ +#endif /* SYSCFG_RCR_PAGE8 */ + +#if defined(SYSCFG_RCR_PAGE8) +#define IS_HAL_SYSCFG_WP_PAGE(__PAGE__) (((__PAGE__) > 0U) && ((__PAGE__) <= 0xFFFFU)) +#elif defined(SYSCFG_RCR_PAGE4) +#define IS_HAL_SYSCFG_WP_PAGE(__PAGE__) (((__PAGE__) > 0U) && ((__PAGE__) <= 0x00FFU)) +#else +#define IS_HAL_SYSCFG_WP_PAGE(__PAGE__) (((__PAGE__) > 0U) && ((__PAGE__) <= 0x000FU)) +#endif /* SYSCFG_RCR_PAGE8 */ +/** + * @} + */ +#endif /* SYSCFG_RCR_PAGE0 */ + +/** @defgroup HAL_SYSCFG_Interrupts HAL SYSCFG Interrupts + * @{ + */ +#define HAL_SYSCFG_IT_FPU_IOC (SYSCFG_CFGR1_FPU_IE_0) /*!< Floating Point Unit Invalid operation Interrupt */ +#define HAL_SYSCFG_IT_FPU_DZC (SYSCFG_CFGR1_FPU_IE_1) /*!< Floating Point Unit Divide-by-zero Interrupt */ +#define HAL_SYSCFG_IT_FPU_UFC (SYSCFG_CFGR1_FPU_IE_2) /*!< Floating Point Unit Underflow Interrupt */ +#define HAL_SYSCFG_IT_FPU_OFC (SYSCFG_CFGR1_FPU_IE_3) /*!< Floating Point Unit Overflow Interrupt */ +#define HAL_SYSCFG_IT_FPU_IDC (SYSCFG_CFGR1_FPU_IE_4) /*!< Floating Point Unit Input denormal Interrupt */ +#define HAL_SYSCFG_IT_FPU_IXC (SYSCFG_CFGR1_FPU_IE_5) /*!< Floating Point Unit Inexact Interrupt */ + +#define IS_HAL_SYSCFG_INTERRUPT(__INTERRUPT__) ((((__INTERRUPT__) & SYSCFG_CFGR1_FPU_IE_0) == SYSCFG_CFGR1_FPU_IE_0) || \ + (((__INTERRUPT__) & SYSCFG_CFGR1_FPU_IE_1) == SYSCFG_CFGR1_FPU_IE_1) || \ + (((__INTERRUPT__) & SYSCFG_CFGR1_FPU_IE_2) == SYSCFG_CFGR1_FPU_IE_2) || \ + (((__INTERRUPT__) & SYSCFG_CFGR1_FPU_IE_3) == SYSCFG_CFGR1_FPU_IE_3) || \ + (((__INTERRUPT__) & SYSCFG_CFGR1_FPU_IE_4) == SYSCFG_CFGR1_FPU_IE_4) || \ + (((__INTERRUPT__) & SYSCFG_CFGR1_FPU_IE_5) == SYSCFG_CFGR1_FPU_IE_5)) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macros -----------------------------------------------------------*/ +/** @defgroup HAL_Exported_Macros HAL Exported Macros + * @{ + */ + +/** @defgroup Debug_MCU_APB1_Freeze Freeze/Unfreeze APB1 Peripherals in Debug mode + * @{ + */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM2_STOP) +#define __HAL_DBGMCU_FREEZE_TIM2() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM2_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM2() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM2_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM2_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_TIM3_STOP) +#define __HAL_DBGMCU_FREEZE_TIM3() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM3_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM3() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM3_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM3_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_TIM4_STOP) +#define __HAL_DBGMCU_FREEZE_TIM4() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM4_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM4() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM4_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM4_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_TIM5_STOP) +#define __HAL_DBGMCU_FREEZE_TIM5() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM5_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM5() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM5_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM5_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_TIM6_STOP) +#define __HAL_DBGMCU_FREEZE_TIM6() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM6_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM6() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM6_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM6_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_TIM7_STOP) +#define __HAL_DBGMCU_FREEZE_TIM7() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM7_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM7() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM7_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM7_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_TIM12_STOP) +#define __HAL_DBGMCU_FREEZE_TIM12() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM12_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM12() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM12_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM12_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_TIM13_STOP) +#define __HAL_DBGMCU_FREEZE_TIM13() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM13_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM13() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM13_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM13_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_TIM14_STOP) +#define __HAL_DBGMCU_FREEZE_TIM14() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM14_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM14() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM14_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM14_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_TIM18_STOP) +#define __HAL_FREEZE_TIM18_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM18_STOP)) +#define __HAL_UNFREEZE_TIM18_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM18_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM14_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_RTC_STOP) +#define __HAL_DBGMCU_FREEZE_RTC() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_RTC_STOP)) +#define __HAL_DBGMCU_UNFREEZE_RTC() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_RTC_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_RTC_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_WWDG_STOP) +#define __HAL_DBGMCU_FREEZE_WWDG() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_WWDG_STOP)) +#define __HAL_DBGMCU_UNFREEZE_WWDG() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_WWDG_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_WWDG_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_IWDG_STOP) +#define __HAL_DBGMCU_FREEZE_IWDG() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_IWDG_STOP)) +#define __HAL_DBGMCU_UNFREEZE_IWDG() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_IWDG_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_IWDG_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT) +#define __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT)) +#endif /* DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT */ + +#if defined(DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT) +#define __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT)) +#endif /* DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT */ + +#if defined(DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT) +#define __HAL_DBGMCU_FREEZE_I2C3_TIMEOUT() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_UNFREEZE_I2C3_TIMEOUT() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT)) +#endif /* DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT */ + +#if defined(DBGMCU_APB1_FZ_DBG_CAN_STOP) +#define __HAL_FREEZE_CAN_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_CAN_STOP)) +#define __HAL_UNFREEZE_CAN_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_CAN_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_CAN_STOP */ +/** + * @} + */ + +/** @defgroup Debug_MCU_APB2_Freeze Freeze/Unfreeze APB2 Peripherals in Debug mode + * @{ + */ +#if defined(DBGMCU_APB2_FZ_DBG_TIM1_STOP) +#define __HAL_DBGMCU_FREEZE_TIM1() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM1_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM1() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM1_STOP)) +#endif /* DBGMCU_APB2_FZ_DBG_TIM1_STOP */ + +#if defined(DBGMCU_APB2_FZ_DBG_TIM8_STOP) +#define __HAL_DBGMCU_FREEZE_TIM8() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM8_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM8() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM8_STOP)) +#endif /* DBGMCU_APB2_FZ_DBG_TIM8_STOP */ + +#if defined(DBGMCU_APB2_FZ_DBG_TIM15_STOP) +#define __HAL_DBGMCU_FREEZE_TIM15() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM15_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM15() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM15_STOP)) +#endif /* DBGMCU_APB2_FZ_DBG_TIM15_STOP */ + +#if defined(DBGMCU_APB2_FZ_DBG_TIM16_STOP) +#define __HAL_DBGMCU_FREEZE_TIM16() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM16_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM16() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM16_STOP)) +#endif /* DBGMCU_APB2_FZ_DBG_TIM16_STOP */ + +#if defined(DBGMCU_APB2_FZ_DBG_TIM17_STOP) +#define __HAL_DBGMCU_FREEZE_TIM17() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM17_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM17() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM17_STOP)) +#endif /* DBGMCU_APB2_FZ_DBG_TIM17_STOP */ + +#if defined(DBGMCU_APB2_FZ_DBG_TIM19_STOP) +#define __HAL_FREEZE_TIM19_DBGMCU() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM19_STOP)) +#define __HAL_UNFREEZE_TIM19_DBGMCU() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM19_STOP)) +#endif /* DBGMCU_APB2_FZ_DBG_TIM19_STOP */ + +#if defined(DBGMCU_APB2_FZ_DBG_TIM20_STOP) +#define __HAL_FREEZE_TIM20_DBGMCU() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM20_STOP)) +#define __HAL_UNFREEZE_TIM20_DBGMCU() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM20_STOP)) +#endif /* DBGMCU_APB2_FZ_DBG_TIM20_STOP */ + +#if defined(DBGMCU_APB2_FZ_DBG_HRTIM1_STOP) +#define __HAL_FREEZE_HRTIM1_DBGMCU() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_HRTIM1_STOP)) +#define __HAL_UNFREEZE_HRTIM1_DBGMCU() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_HRTIM1_STOP)) +#endif /* DBGMCU_APB2_FZ_DBG_HRTIM1_STOP */ +/** + * @} + */ + +/** @defgroup Memory_Mapping_Selection Memory Mapping Selection + * @{ + */ +#if defined(SYSCFG_CFGR1_MEM_MODE) +/** @brief Main Flash memory mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_FLASH() (SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_MEM_MODE)) +#endif /* SYSCFG_CFGR1_MEM_MODE */ + +#if defined(SYSCFG_CFGR1_MEM_MODE_0) +/** @brief System Flash memory mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH() do {SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_MEM_MODE); \ + SYSCFG->CFGR1 |= SYSCFG_CFGR1_MEM_MODE_0; \ + }while(0U) +#endif /* SYSCFG_CFGR1_MEM_MODE_0 */ + +#if defined(SYSCFG_CFGR1_MEM_MODE_0) && defined(SYSCFG_CFGR1_MEM_MODE_1) +/** @brief Embedded SRAM mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_SRAM() do {SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_MEM_MODE); \ + SYSCFG->CFGR1 |= (SYSCFG_CFGR1_MEM_MODE_0 | SYSCFG_CFGR1_MEM_MODE_1); \ + }while(0U) +#endif /* SYSCFG_CFGR1_MEM_MODE_0 && SYSCFG_CFGR1_MEM_MODE_1 */ + +#if defined(SYSCFG_CFGR1_MEM_MODE_2) +#define __HAL_SYSCFG_FMC_BANK() do {SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_MEM_MODE); \ + SYSCFG->CFGR1 |= (SYSCFG_CFGR1_MEM_MODE_2); \ + }while(0U) +#endif /* SYSCFG_CFGR1_MEM_MODE_2 */ +/** + * @} + */ + +/** @defgroup Encoder_Mode Encoder Mode + * @{ + */ +#if defined(SYSCFG_CFGR1_ENCODER_MODE) +/** @brief No Encoder mode + */ +#define __HAL_REMAPENCODER_NONE() (SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_ENCODER_MODE)) +#endif /* SYSCFG_CFGR1_ENCODER_MODE */ + +#if defined(SYSCFG_CFGR1_ENCODER_MODE_0) +/** @brief Encoder mode : TIM2 IC1 and TIM2 IC2 are connected to TIM15 IC1 and TIM15 IC2 respectively + */ +#define __HAL_REMAPENCODER_TIM2() do {SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_ENCODER_MODE); \ + SYSCFG->CFGR1 |= SYSCFG_CFGR1_ENCODER_MODE_0; \ + }while(0U) +#endif /* SYSCFG_CFGR1_ENCODER_MODE_0 */ + +#if defined(SYSCFG_CFGR1_ENCODER_MODE_1) +/** @brief Encoder mode : TIM3 IC1 and TIM3 IC2 are connected to TIM15 IC1 and TIM15 IC2 respectively + */ +#define __HAL_REMAPENCODER_TIM3() do {SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_ENCODER_MODE); \ + SYSCFG->CFGR1 |= SYSCFG_CFGR1_ENCODER_MODE_1; \ + }while(0U) +#endif /* SYSCFG_CFGR1_ENCODER_MODE_1 */ + +#if defined(SYSCFG_CFGR1_ENCODER_MODE_0) && defined(SYSCFG_CFGR1_ENCODER_MODE_1) +/** @brief Encoder mode : TIM4 IC1 and TIM4 IC2 are connected to TIM15 IC1 and TIM15 IC2 (STM32F303xB/C and STM32F358xx devices) + */ +#define __HAL_REMAPENCODER_TIM4() do {SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_ENCODER_MODE); \ + SYSCFG->CFGR1 |= (SYSCFG_CFGR1_ENCODER_MODE_0 | SYSCFG_CFGR1_ENCODER_MODE_1); \ + }while(0U) +#endif /* SYSCFG_CFGR1_ENCODER_MODE_0 && SYSCFG_CFGR1_ENCODER_MODE_1 */ +/** + * @} + */ + +/** @defgroup DMA_Remap_Enable DMA Remap Enable + * @{ + */ +#if defined(SYSCFG_CFGR3_DMA_RMP) && defined(SYSCFG_CFGR1_DMA_RMP) +/** @brief DMA remapping enable/disable macros + * @param __DMA_REMAP__ This parameter can be a value of @ref HAL_DMA_Remapping + */ +#define __HAL_DMA_REMAP_CHANNEL_ENABLE(__DMA_REMAP__) do {assert_param(IS_DMA_REMAP((__DMA_REMAP__))); \ + (((__DMA_REMAP__) & HAL_REMAP_CFGR3_MASK) ? \ + (SYSCFG->CFGR3 |= ((__DMA_REMAP__) & ~HAL_REMAP_CFGR3_MASK)) : \ + (SYSCFG->CFGR1 |= (__DMA_REMAP__))); \ + }while(0U) +#define __HAL_DMA_REMAP_CHANNEL_DISABLE(__DMA_REMAP__) do {assert_param(IS_DMA_REMAP((__DMA_REMAP__))); \ + (((__DMA_REMAP__) & HAL_REMAP_CFGR3_MASK) ? \ + (SYSCFG->CFGR3 &= (~(__DMA_REMAP__) | HAL_REMAP_CFGR3_MASK)) : \ + (SYSCFG->CFGR1 &= ~(__DMA_REMAP__))); \ + }while(0U) +#elif defined(SYSCFG_CFGR1_DMA_RMP) +/** @brief DMA remapping enable/disable macros + * @param __DMA_REMAP__ This parameter can be a value of @ref HAL_DMA_Remapping + */ +#define __HAL_DMA_REMAP_CHANNEL_ENABLE(__DMA_REMAP__) do {assert_param(IS_DMA_REMAP((__DMA_REMAP__))); \ + SYSCFG->CFGR1 |= (__DMA_REMAP__); \ + }while(0U) +#define __HAL_DMA_REMAP_CHANNEL_DISABLE(__DMA_REMAP__) do {assert_param(IS_DMA_REMAP((__DMA_REMAP__))); \ + SYSCFG->CFGR1 &= ~(__DMA_REMAP__); \ + }while(0U) +#endif /* SYSCFG_CFGR3_DMA_RMP || SYSCFG_CFGR1_DMA_RMP */ +/** + * @} + */ + +/** @defgroup FastModePlus_GPIO Fast-mode Plus on GPIO + * @{ + */ +/** @brief Fast-mode Plus driving capability enable/disable macros + * @param __FASTMODEPLUS__ This parameter can be a value of @ref SYSCFG_FastModePlus_GPIO values. + * That you can find above these macros. + */ +#define __HAL_SYSCFG_FASTMODEPLUS_ENABLE(__FASTMODEPLUS__) do {assert_param(IS_SYSCFG_FASTMODEPLUS((__FASTMODEPLUS__)));\ + SET_BIT(SYSCFG->CFGR1, (__FASTMODEPLUS__));\ + }while(0U) + +#define __HAL_SYSCFG_FASTMODEPLUS_DISABLE(__FASTMODEPLUS__) do {assert_param(IS_SYSCFG_FASTMODEPLUS((__FASTMODEPLUS__)));\ + CLEAR_BIT(SYSCFG->CFGR1, (__FASTMODEPLUS__));\ + }while(0U) +/** + * @} + */ + +/** @defgroup Floating_Point_Unit_Interrupts_Enable Floating Point Unit Interrupts Enable + * @{ + */ +/** @brief SYSCFG interrupt enable/disable macros + * @param __INTERRUPT__ This parameter can be a value of @ref HAL_SYSCFG_Interrupts + */ +#define __HAL_SYSCFG_INTERRUPT_ENABLE(__INTERRUPT__) do {assert_param(IS_HAL_SYSCFG_INTERRUPT((__INTERRUPT__))); \ + SYSCFG->CFGR1 |= (__INTERRUPT__); \ + }while(0U) + +#define __HAL_SYSCFG_INTERRUPT_DISABLE(__INTERRUPT__) do {assert_param(IS_HAL_SYSCFG_INTERRUPT((__INTERRUPT__))); \ + SYSCFG->CFGR1 &= ~(__INTERRUPT__); \ + }while(0U) +/** + * @} + */ + +#if defined(SYSCFG_CFGR1_USB_IT_RMP) +/** @defgroup USB_Interrupt_Remap USB Interrupt Remap + * @{ + */ +/** @brief USB interrupt remapping enable/disable macros + */ +#define __HAL_REMAPINTERRUPT_USB_ENABLE() (SYSCFG->CFGR1 |= (SYSCFG_CFGR1_USB_IT_RMP)) +#define __HAL_REMAPINTERRUPT_USB_DISABLE() (SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_USB_IT_RMP)) +/** + * @} + */ +#endif /* SYSCFG_CFGR1_USB_IT_RMP */ + +#if defined(SYSCFG_CFGR1_VBAT) +/** @defgroup VBAT_Monitoring_Enable VBAT Monitoring Enable + * @{ + */ +/** @brief SYSCFG interrupt enable/disable macros + */ +#define __HAL_SYSCFG_VBAT_MONITORING_ENABLE() (SYSCFG->CFGR1 |= (SYSCFG_CFGR1_VBAT)) +#define __HAL_SYSCFG_VBAT_MONITORING_DISABLE() (SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_VBAT)) +/** + * @} + */ +#endif /* SYSCFG_CFGR1_VBAT */ + +#if defined(SYSCFG_CFGR2_LOCKUP_LOCK) +/** @defgroup Cortex_Lockup_Enable Cortex Lockup Enable + * @{ + */ +/** @brief SYSCFG Break Lockup lock + * Enables and locks the connection of Cortex-M4 LOCKUP (Hardfault) output to TIM1/15/16/17 Break input + * @note The selected configuration is locked and can be unlocked by system reset + */ +#define __HAL_SYSCFG_BREAK_LOCKUP_LOCK() do {SYSCFG->CFGR2 &= ~(SYSCFG_CFGR2_LOCKUP_LOCK); \ + SYSCFG->CFGR2 |= SYSCFG_CFGR2_LOCKUP_LOCK; \ + }while(0U) +/** + * @} + */ +#endif /* SYSCFG_CFGR2_LOCKUP_LOCK */ + +#if defined(SYSCFG_CFGR2_PVD_LOCK) +/** @defgroup PVD_Lock_Enable PVD Lock + * @{ + */ +/** @brief SYSCFG Break PVD lock + * Enables and locks the PVD connection with Timer1/8/15/16/17 Break Input, , as well as the PVDE and PLS[2:0] in the PWR_CR register + * @note The selected configuration is locked and can be unlocked by system reset + */ +#define __HAL_SYSCFG_BREAK_PVD_LOCK() do {SYSCFG->CFGR2 &= ~(SYSCFG_CFGR2_PVD_LOCK); \ + SYSCFG->CFGR2 |= SYSCFG_CFGR2_PVD_LOCK; \ + }while(0U) +/** + * @} + */ +#endif /* SYSCFG_CFGR2_PVD_LOCK */ + +#if defined(SYSCFG_CFGR2_SRAM_PARITY_LOCK) +/** @defgroup SRAM_Parity_Lock SRAM Parity Lock + * @{ + */ +/** @brief SYSCFG Break SRAM PARITY lock + * Enables and locks the SRAM_PARITY error signal with Break Input of TIMER1/8/15/16/17 + * @note The selected configuration is locked and can be unlocked by system reset + */ +#define __HAL_SYSCFG_BREAK_SRAMPARITY_LOCK() do {SYSCFG->CFGR2 &= ~(SYSCFG_CFGR2_SRAM_PARITY_LOCK); \ + SYSCFG->CFGR2 |= SYSCFG_CFGR2_SRAM_PARITY_LOCK; \ + }while(0U) +/** + * @} + */ +#endif /* SYSCFG_CFGR2_SRAM_PARITY_LOCK */ + +/** @defgroup Trigger_Remapping_Enable Trigger Remapping Enable + * @{ + */ +#if defined(SYSCFG_CFGR3_TRIGGER_RMP) +/** @brief Trigger remapping enable/disable macros + * @param __TRIGGER_REMAP__ This parameter can be a value of @ref HAL_Trigger_Remapping + */ +#define __HAL_REMAPTRIGGER_ENABLE(__TRIGGER_REMAP__) do {assert_param(IS_HAL_REMAPTRIGGER((__TRIGGER_REMAP__))); \ + (((__TRIGGER_REMAP__) & HAL_REMAP_CFGR3_MASK) ? \ + (SYSCFG->CFGR3 |= ((__TRIGGER_REMAP__) & ~HAL_REMAP_CFGR3_MASK)) : \ + (SYSCFG->CFGR1 |= (__TRIGGER_REMAP__))); \ + }while(0U) +#define __HAL_REMAPTRIGGER_DISABLE(__TRIGGER_REMAP__) do {assert_param(IS_HAL_REMAPTRIGGER((__TRIGGER_REMAP__))); \ + (((__TRIGGER_REMAP__) & HAL_REMAP_CFGR3_MASK) ? \ + (SYSCFG->CFGR3 &= (~(__TRIGGER_REMAP__) | HAL_REMAP_CFGR3_MASK)) : \ + (SYSCFG->CFGR1 &= ~(__TRIGGER_REMAP__))); \ + }while(0U) +#else +/** @brief Trigger remapping enable/disable macros + * @param __TRIGGER_REMAP__ This parameter can be a value of @ref HAL_Trigger_Remapping + */ +#define __HAL_REMAPTRIGGER_ENABLE(__TRIGGER_REMAP__) do {assert_param(IS_HAL_REMAPTRIGGER((__TRIGGER_REMAP__))); \ + (SYSCFG->CFGR1 |= (__TRIGGER_REMAP__)); \ + }while(0U) +#define __HAL_REMAPTRIGGER_DISABLE(__TRIGGER_REMAP__) do {assert_param(IS_HAL_REMAPTRIGGER((__TRIGGER_REMAP__))); \ + (SYSCFG->CFGR1 &= ~(__TRIGGER_REMAP__)); \ + }while(0U) +#endif /* SYSCFG_CFGR3_TRIGGER_RMP */ +/** + * @} + */ + +#if defined (STM32F302xE) || defined (STM32F303xE) || defined (STM32F398xx) +/** @defgroup ADC_Trigger_Remapping_Enable ADC Trigger Remapping Enable + * @{ + */ +/** @brief ADC trigger remapping enable/disable macros + * @param __ADCTRIGGER_REMAP__ This parameter can be a value of @ref HAL_ADC_Trigger_Remapping + */ +#define __HAL_REMAPADCTRIGGER_ENABLE(__ADCTRIGGER_REMAP__) do {assert_param(IS_HAL_REMAPADCTRIGGER((__ADCTRIGGER_REMAP__))); \ + (SYSCFG->CFGR4 |= (__ADCTRIGGER_REMAP__)); \ + }while(0U) +#define __HAL_REMAPADCTRIGGER_DISABLE(__ADCTRIGGER_REMAP__) do {assert_param(IS_HAL_REMAPADCTRIGGER((__ADCTRIGGER_REMAP__))); \ + (SYSCFG->CFGR4 &= ~(__ADCTRIGGER_REMAP__)); \ + }while(0U) +/** + * @} + */ +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ + +#if defined(SYSCFG_CFGR2_BYP_ADDR_PAR) +/** @defgroup RAM_Parity_Check_Disable RAM Parity Check Disable + * @{ + */ +/** + * @brief Parity check on RAM disable macro + * @note Disabling the parity check on RAM locks the configuration bit. + * To re-enable the parity check on RAM perform a system reset. + */ +#define __HAL_SYSCFG_RAM_PARITYCHECK_DISABLE() (*(__IO uint32_t *) CFGR2_BYPADDRPAR_BB = 0x00000001U) +/** + * @} + */ +#endif /* SYSCFG_CFGR2_BYP_ADDR_PAR */ + +#if defined(SYSCFG_RCR_PAGE0) +/** @defgroup CCM_RAM_Page_Write_Protection_Enable CCM RAM page write protection enable + * @{ + */ +/** @brief CCM RAM page write protection enable macro + * @param __PAGE_WP__ This parameter can be a value of @ref HAL_Page_Write_Protection + * @note write protection can only be disabled by a system reset + */ +#define __HAL_SYSCFG_SRAM_WRP_ENABLE(__PAGE_WP__) do {assert_param(IS_HAL_SYSCFG_WP_PAGE((__PAGE_WP__))); \ + SYSCFG->RCR |= (__PAGE_WP__); \ + }while(0U) +/** + * @} + */ +#endif /* SYSCFG_RCR_PAGE0 */ + +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/** @defgroup HAL_Private_Macros HAL Private Macros + * @{ + */ +#define IS_TICKFREQ(FREQ) (((FREQ) == HAL_TICK_FREQ_10HZ) || \ + ((FREQ) == HAL_TICK_FREQ_100HZ) || \ + ((FREQ) == HAL_TICK_FREQ_1KHZ)) +/** + * @} + */ +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup HAL_Exported_Functions HAL Exported Functions + * @{ + */ + +/** @addtogroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions + * @brief Initialization and de-initialization functions + * @{ + */ +/* Initialization and de-initialization functions ******************************/ +HAL_StatusTypeDef HAL_Init(void); +HAL_StatusTypeDef HAL_DeInit(void); +void HAL_MspInit(void); +void HAL_MspDeInit(void); +HAL_StatusTypeDef HAL_InitTick (uint32_t TickPriority); +/** + * @} + */ + +/* Exported variables ---------------------------------------------------------*/ +/** @addtogroup HAL_Exported_Variables + * @{ + */ +extern __IO uint32_t uwTick; +extern uint32_t uwTickPrio; +extern HAL_TickFreqTypeDef uwTickFreq; +/** + * @} + */ + +/** @addtogroup HAL_Exported_Functions_Group2 HAL Control functions + * @brief HAL Control functions + * @{ + */ +/* Peripheral Control functions ************************************************/ +void HAL_IncTick(void); +void HAL_Delay(uint32_t Delay); +void HAL_SuspendTick(void); +void HAL_ResumeTick(void); +uint32_t HAL_GetTick(void); +uint32_t HAL_GetTickPrio(void); +HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq); +HAL_TickFreqTypeDef HAL_GetTickFreq(void); +uint32_t HAL_GetHalVersion(void); +uint32_t HAL_GetREVID(void); +uint32_t HAL_GetDEVID(void); +uint32_t HAL_GetUIDw0(void); +uint32_t HAL_GetUIDw1(void); +uint32_t HAL_GetUIDw2(void); +void HAL_DBGMCU_EnableDBGSleepMode(void); +void HAL_DBGMCU_DisableDBGSleepMode(void); +void HAL_DBGMCU_EnableDBGStopMode(void); +void HAL_DBGMCU_DisableDBGStopMode(void); +void HAL_DBGMCU_EnableDBGStandbyMode(void); +void HAL_DBGMCU_DisableDBGStandbyMode(void); +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F3xx_HAL_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_cortex.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_cortex.h new file mode 100644 index 0000000..3573056 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_cortex.h @@ -0,0 +1,426 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_cortex.h + * @author MCD Application Team + * @brief Header file of CORTEX HAL module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_HAL_CORTEX_H +#define __STM32F3xx_HAL_CORTEX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup CORTEX + * @{ + */ +/* Exported types ------------------------------------------------------------*/ +/** @defgroup CORTEX_Exported_Types CORTEX Exported Types + * @{ + */ + +#if (__MPU_PRESENT == 1U) +/** @defgroup CORTEX_MPU_Region_Initialization_Structure_definition MPU Region Initialization Structure Definition + * @brief MPU Region initialization structure + * @{ + */ +typedef struct +{ + uint8_t Enable; /*!< Specifies the status of the region. + This parameter can be a value of @ref CORTEX_MPU_Region_Enable */ + uint8_t Number; /*!< Specifies the number of the region to protect. + This parameter can be a value of @ref CORTEX_MPU_Region_Number */ + uint32_t BaseAddress; /*!< Specifies the base address of the region to protect. */ + uint8_t Size; /*!< Specifies the size of the region to protect. + This parameter can be a value of @ref CORTEX_MPU_Region_Size */ + uint8_t SubRegionDisable; /*!< Specifies the number of the subregion protection to disable. + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF */ + uint8_t TypeExtField; /*!< Specifies the TEX field level. + This parameter can be a value of @ref CORTEX_MPU_TEX_Levels */ + uint8_t AccessPermission; /*!< Specifies the region access permission type. + This parameter can be a value of @ref CORTEX_MPU_Region_Permission_Attributes */ + uint8_t DisableExec; /*!< Specifies the instruction access status. + This parameter can be a value of @ref CORTEX_MPU_Instruction_Access */ + uint8_t IsShareable; /*!< Specifies the shareability status of the protected region. + This parameter can be a value of @ref CORTEX_MPU_Access_Shareable */ + uint8_t IsCacheable; /*!< Specifies the cacheable status of the region protected. + This parameter can be a value of @ref CORTEX_MPU_Access_Cacheable */ + uint8_t IsBufferable; /*!< Specifies the bufferable status of the protected region. + This parameter can be a value of @ref CORTEX_MPU_Access_Bufferable */ +}MPU_Region_InitTypeDef; +/** + * @} + */ +#endif /* __MPU_PRESENT */ + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants + * @{ + */ + +/** @defgroup CORTEX_Preemption_Priority_Group CORTEX Preemption Priority Group + * @{ + */ +#define NVIC_PRIORITYGROUP_0 (0x00000007U) /*!< 0 bits for pre-emption priority + 4 bits for subpriority */ +#define NVIC_PRIORITYGROUP_1 (0x00000006U) /*!< 1 bits for pre-emption priority + 3 bits for subpriority */ +#define NVIC_PRIORITYGROUP_2 (0x00000005U) /*!< 2 bits for pre-emption priority + 2 bits for subpriority */ +#define NVIC_PRIORITYGROUP_3 (0x00000004U) /*!< 3 bits for pre-emption priority + 1 bits for subpriority */ +#define NVIC_PRIORITYGROUP_4 (0x00000003U) /*!< 4 bits for pre-emption priority + 0 bits for subpriority */ +/** + * @} + */ + +/** @defgroup CORTEX_SysTick_clock_source CORTEX SysTick clock source + * @{ + */ +#define SYSTICK_CLKSOURCE_HCLK_DIV8 (0x00000000U) +#define SYSTICK_CLKSOURCE_HCLK (0x00000004U) +/** + * @} + */ + +#if (__MPU_PRESENT == 1U) +/** @defgroup CORTEX_MPU_HFNMI_PRIVDEF_Control MPU HFNMI and PRIVILEGED Access control + * @{ + */ +#define MPU_HFNMI_PRIVDEF_NONE (0x00000000U) +#define MPU_HARDFAULT_NMI (0x00000002U) +#define MPU_PRIVILEGED_DEFAULT (0x00000004U) +#define MPU_HFNMI_PRIVDEF (0x00000006U) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Enable CORTEX MPU Region Enable + * @{ + */ +#define MPU_REGION_ENABLE ((uint8_t)0x01U) +#define MPU_REGION_DISABLE ((uint8_t)0x00U) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Instruction_Access CORTEX MPU Instruction Access + * @{ + */ +#define MPU_INSTRUCTION_ACCESS_ENABLE ((uint8_t)0x00U) +#define MPU_INSTRUCTION_ACCESS_DISABLE ((uint8_t)0x01U) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Access_Shareable CORTEX MPU Instruction Access Shareable + * @{ + */ +#define MPU_ACCESS_SHAREABLE ((uint8_t)0x01U) +#define MPU_ACCESS_NOT_SHAREABLE ((uint8_t)0x00U) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Access_Cacheable CORTEX MPU Instruction Access Cacheable + * @{ + */ +#define MPU_ACCESS_CACHEABLE ((uint8_t)0x01U) +#define MPU_ACCESS_NOT_CACHEABLE ((uint8_t)0x00U) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Access_Bufferable CORTEX MPU Instruction Access Bufferable + * @{ + */ +#define MPU_ACCESS_BUFFERABLE ((uint8_t)0x01U) +#define MPU_ACCESS_NOT_BUFFERABLE ((uint8_t)0x00U) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_TEX_Levels MPU TEX Levels + * @{ + */ +#define MPU_TEX_LEVEL0 ((uint8_t)0x00U) +#define MPU_TEX_LEVEL1 ((uint8_t)0x01U) +#define MPU_TEX_LEVEL2 ((uint8_t)0x02U) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Size CORTEX MPU Region Size + * @{ + */ +#define MPU_REGION_SIZE_32B ((uint8_t)0x04U) +#define MPU_REGION_SIZE_64B ((uint8_t)0x05U) +#define MPU_REGION_SIZE_128B ((uint8_t)0x06U) +#define MPU_REGION_SIZE_256B ((uint8_t)0x07U) +#define MPU_REGION_SIZE_512B ((uint8_t)0x08U) +#define MPU_REGION_SIZE_1KB ((uint8_t)0x09U) +#define MPU_REGION_SIZE_2KB ((uint8_t)0x0AU) +#define MPU_REGION_SIZE_4KB ((uint8_t)0x0BU) +#define MPU_REGION_SIZE_8KB ((uint8_t)0x0CU) +#define MPU_REGION_SIZE_16KB ((uint8_t)0x0DU) +#define MPU_REGION_SIZE_32KB ((uint8_t)0x0EU) +#define MPU_REGION_SIZE_64KB ((uint8_t)0x0FU) +#define MPU_REGION_SIZE_128KB ((uint8_t)0x10U) +#define MPU_REGION_SIZE_256KB ((uint8_t)0x11U) +#define MPU_REGION_SIZE_512KB ((uint8_t)0x12U) +#define MPU_REGION_SIZE_1MB ((uint8_t)0x13U) +#define MPU_REGION_SIZE_2MB ((uint8_t)0x14U) +#define MPU_REGION_SIZE_4MB ((uint8_t)0x15U) +#define MPU_REGION_SIZE_8MB ((uint8_t)0x16U) +#define MPU_REGION_SIZE_16MB ((uint8_t)0x17U) +#define MPU_REGION_SIZE_32MB ((uint8_t)0x18U) +#define MPU_REGION_SIZE_64MB ((uint8_t)0x19U) +#define MPU_REGION_SIZE_128MB ((uint8_t)0x1AU) +#define MPU_REGION_SIZE_256MB ((uint8_t)0x1BU) +#define MPU_REGION_SIZE_512MB ((uint8_t)0x1CU) +#define MPU_REGION_SIZE_1GB ((uint8_t)0x1DU) +#define MPU_REGION_SIZE_2GB ((uint8_t)0x1EU) +#define MPU_REGION_SIZE_4GB ((uint8_t)0x1FU) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Permission_Attributes CORTEX MPU Region Permission Attributes + * @{ + */ +#define MPU_REGION_NO_ACCESS ((uint8_t)0x00U) +#define MPU_REGION_PRIV_RW ((uint8_t)0x01U) +#define MPU_REGION_PRIV_RW_URO ((uint8_t)0x02U) +#define MPU_REGION_FULL_ACCESS ((uint8_t)0x03U) +#define MPU_REGION_PRIV_RO ((uint8_t)0x05U) +#define MPU_REGION_PRIV_RO_URO ((uint8_t)0x06U) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Number CORTEX MPU Region Number + * @{ + */ +#define MPU_REGION_NUMBER0 ((uint8_t)0x00U) +#define MPU_REGION_NUMBER1 ((uint8_t)0x01U) +#define MPU_REGION_NUMBER2 ((uint8_t)0x02U) +#define MPU_REGION_NUMBER3 ((uint8_t)0x03U) +#define MPU_REGION_NUMBER4 ((uint8_t)0x04U) +#define MPU_REGION_NUMBER5 ((uint8_t)0x05U) +#define MPU_REGION_NUMBER6 ((uint8_t)0x06U) +#define MPU_REGION_NUMBER7 ((uint8_t)0x07U) +/** + * @} + */ +#endif /* __MPU_PRESENT */ + +/** + * @} + */ + +/* Exported Macros -----------------------------------------------------------*/ + + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup CORTEX_Exported_Functions + * @{ + */ + +/** @addtogroup CORTEX_Exported_Functions_Group1 + * @{ + */ +/* Initialization and de-initialization functions *****************************/ +void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup); +void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority); +void HAL_NVIC_EnableIRQ(IRQn_Type IRQn); +void HAL_NVIC_DisableIRQ(IRQn_Type IRQn); +void HAL_NVIC_SystemReset(void); +uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb); +/** + * @} + */ + +/** @addtogroup CORTEX_Exported_Functions_Group2 + * @{ + */ +/* Peripheral Control functions ***********************************************/ +#if (__MPU_PRESENT == 1U) +void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init); +#endif /* __MPU_PRESENT */ +uint32_t HAL_NVIC_GetPriorityGrouping(void); +void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority); +uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn); +void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn); +void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn); +uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn); +void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource); +void HAL_SYSTICK_IRQHandler(void); +void HAL_SYSTICK_Callback(void); +/** + * @} + */ + +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/** @defgroup CORTEX_Private_Macros CORTEX Private Macros + * @{ + */ +#define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PRIORITYGROUP_0) || \ + ((GROUP) == NVIC_PRIORITYGROUP_1) || \ + ((GROUP) == NVIC_PRIORITYGROUP_2) || \ + ((GROUP) == NVIC_PRIORITYGROUP_3) || \ + ((GROUP) == NVIC_PRIORITYGROUP_4)) + +#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x10U) + +#define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < 0x10U) + +#define IS_NVIC_DEVICE_IRQ(IRQ) ((IRQ) >= 0x00) + +/** @defgroup CORTEX_SysTick_clock_source_Macro_Private CORTEX SysTick clock source + * @{ + */ +#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_HCLK) || \ + ((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8)) +/** + * @} + */ + +#if (__MPU_PRESENT == 1U) +#define IS_MPU_REGION_ENABLE(STATE) (((STATE) == MPU_REGION_ENABLE) || \ + ((STATE) == MPU_REGION_DISABLE)) + +#define IS_MPU_INSTRUCTION_ACCESS(STATE) (((STATE) == MPU_INSTRUCTION_ACCESS_ENABLE) || \ + ((STATE) == MPU_INSTRUCTION_ACCESS_DISABLE)) + +#define IS_MPU_ACCESS_SHAREABLE(STATE) (((STATE) == MPU_ACCESS_SHAREABLE) || \ + ((STATE) == MPU_ACCESS_NOT_SHAREABLE)) + +#define IS_MPU_ACCESS_CACHEABLE(STATE) (((STATE) == MPU_ACCESS_CACHEABLE) || \ + ((STATE) == MPU_ACCESS_NOT_CACHEABLE)) + +#define IS_MPU_ACCESS_BUFFERABLE(STATE) (((STATE) == MPU_ACCESS_BUFFERABLE) || \ + ((STATE) == MPU_ACCESS_NOT_BUFFERABLE)) + +#define IS_MPU_TEX_LEVEL(TYPE) (((TYPE) == MPU_TEX_LEVEL0) || \ + ((TYPE) == MPU_TEX_LEVEL1) || \ + ((TYPE) == MPU_TEX_LEVEL2)) + +#define IS_MPU_REGION_PERMISSION_ATTRIBUTE(TYPE) (((TYPE) == MPU_REGION_NO_ACCESS) || \ + ((TYPE) == MPU_REGION_PRIV_RW) || \ + ((TYPE) == MPU_REGION_PRIV_RW_URO) || \ + ((TYPE) == MPU_REGION_FULL_ACCESS) || \ + ((TYPE) == MPU_REGION_PRIV_RO) || \ + ((TYPE) == MPU_REGION_PRIV_RO_URO)) + +#define IS_MPU_REGION_NUMBER(NUMBER) (((NUMBER) == MPU_REGION_NUMBER0) || \ + ((NUMBER) == MPU_REGION_NUMBER1) || \ + ((NUMBER) == MPU_REGION_NUMBER2) || \ + ((NUMBER) == MPU_REGION_NUMBER3) || \ + ((NUMBER) == MPU_REGION_NUMBER4) || \ + ((NUMBER) == MPU_REGION_NUMBER5) || \ + ((NUMBER) == MPU_REGION_NUMBER6) || \ + ((NUMBER) == MPU_REGION_NUMBER7)) + +#define IS_MPU_REGION_SIZE(SIZE) (((SIZE) == MPU_REGION_SIZE_32B) || \ + ((SIZE) == MPU_REGION_SIZE_64B) || \ + ((SIZE) == MPU_REGION_SIZE_128B) || \ + ((SIZE) == MPU_REGION_SIZE_256B) || \ + ((SIZE) == MPU_REGION_SIZE_512B) || \ + ((SIZE) == MPU_REGION_SIZE_1KB) || \ + ((SIZE) == MPU_REGION_SIZE_2KB) || \ + ((SIZE) == MPU_REGION_SIZE_4KB) || \ + ((SIZE) == MPU_REGION_SIZE_8KB) || \ + ((SIZE) == MPU_REGION_SIZE_16KB) || \ + ((SIZE) == MPU_REGION_SIZE_32KB) || \ + ((SIZE) == MPU_REGION_SIZE_64KB) || \ + ((SIZE) == MPU_REGION_SIZE_128KB) || \ + ((SIZE) == MPU_REGION_SIZE_256KB) || \ + ((SIZE) == MPU_REGION_SIZE_512KB) || \ + ((SIZE) == MPU_REGION_SIZE_1MB) || \ + ((SIZE) == MPU_REGION_SIZE_2MB) || \ + ((SIZE) == MPU_REGION_SIZE_4MB) || \ + ((SIZE) == MPU_REGION_SIZE_8MB) || \ + ((SIZE) == MPU_REGION_SIZE_16MB) || \ + ((SIZE) == MPU_REGION_SIZE_32MB) || \ + ((SIZE) == MPU_REGION_SIZE_64MB) || \ + ((SIZE) == MPU_REGION_SIZE_128MB) || \ + ((SIZE) == MPU_REGION_SIZE_256MB) || \ + ((SIZE) == MPU_REGION_SIZE_512MB) || \ + ((SIZE) == MPU_REGION_SIZE_1GB) || \ + ((SIZE) == MPU_REGION_SIZE_2GB) || \ + ((SIZE) == MPU_REGION_SIZE_4GB)) + +#define IS_MPU_SUB_REGION_DISABLE(SUBREGION) ((SUBREGION) < (uint16_t)0x00FFU) +#endif /* __MPU_PRESENT */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup CORTEX_Private_Functions CORTEX Private Functions + * @brief CORTEX private functions + * @{ + */ + +#if (__MPU_PRESENT == 1U) + +void HAL_MPU_Disable(void); +void HAL_MPU_Enable(uint32_t MPU_Control); + +#endif /* __MPU_PRESENT */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F3xx_HAL_CORTEX_H */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_def.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_def.h new file mode 100644 index 0000000..2b794f5 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_def.h @@ -0,0 +1,177 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_def.h + * @author MCD Application Team + * @brief This file contains HAL common defines, enumeration, macros and + * structures definitions. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_HAL_DEF +#define __STM32F3xx_HAL_DEF + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx.h" +#include "Legacy/stm32_hal_legacy.h" +#include + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief HAL Status structures definition + */ +typedef enum +{ + HAL_OK = 0x00U, + HAL_ERROR = 0x01U, + HAL_BUSY = 0x02U, + HAL_TIMEOUT = 0x03 +} HAL_StatusTypeDef; + +/** + * @brief HAL Lock structures definition + */ +typedef enum +{ + HAL_UNLOCKED = 0x00U, + HAL_LOCKED = 0x01 +} HAL_LockTypeDef; + +/* Exported macro ------------------------------------------------------------*/ + +#define UNUSED(X) (void)X /* To avoid gcc/g++ warnings */ + +#define HAL_MAX_DELAY 0xFFFFFFFFU + +#define HAL_IS_BIT_SET(REG, BIT) (((REG) & (BIT)) == BIT) +#define HAL_IS_BIT_CLR(REG, BIT) (((REG) & (BIT)) == 0U) + +#define __HAL_LINKDMA(__HANDLE__, __PPP_DMA_FIELD_, __DMA_HANDLE_) \ + do{ \ + (__HANDLE__)->__PPP_DMA_FIELD_ = &(__DMA_HANDLE_); \ + (__DMA_HANDLE_).Parent = (__HANDLE__); \ + } while(0U) + +/** @brief Reset the Handle's State field. + * @param __HANDLE__ specifies the Peripheral Handle. + * @note This macro can be used for the following purpose: + * - When the Handle is declared as local variable; before passing it as parameter + * to HAL_PPP_Init() for the first time, it is mandatory to use this macro + * to set to 0 the Handle's "State" field. + * Otherwise, "State" field may have any random value and the first time the function + * HAL_PPP_Init() is called, the low level hardware initialization will be missed + * (i.e. HAL_PPP_MspInit() will not be executed). + * - When there is a need to reconfigure the low level hardware: instead of calling + * HAL_PPP_DeInit() then HAL_PPP_Init(), user can make a call to this macro then HAL_PPP_Init(). + * In this later function, when the Handle's "State" field is set to 0, it will execute the function + * HAL_PPP_MspInit() which will reconfigure the low level hardware. + * @retval None + */ +#define __HAL_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = 0U) + +#if (USE_RTOS == 1U) + #error " USE_RTOS should be 0 in the current HAL release " +#else + #define __HAL_LOCK(__HANDLE__) \ + do{ \ + if((__HANDLE__)->Lock == HAL_LOCKED) \ + { \ + return HAL_BUSY; \ + } \ + else \ + { \ + (__HANDLE__)->Lock = HAL_LOCKED; \ + } \ + }while (0U) + + #define __HAL_UNLOCK(__HANDLE__) \ + do{ \ + (__HANDLE__)->Lock = HAL_UNLOCKED; \ + }while (0U) +#endif /* USE_RTOS */ + +#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) /* ARM Compiler V6 */ + #ifndef __weak + #define __weak __attribute__((weak)) + #endif + #ifndef __packed + #define __packed __attribute__((packed)) + #endif +#elif defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */ + #ifndef __weak + #define __weak __attribute__((weak)) + #endif /* __weak */ + #ifndef __packed + #define __packed __attribute__((__packed__)) + #endif /* __packed */ +#endif /* __GNUC__ */ + + +/* Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive "#pragma data_alignment=4" must be used instead */ +#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) /* ARM Compiler V6 */ + #ifndef __ALIGN_BEGIN + #define __ALIGN_BEGIN + #endif + #ifndef __ALIGN_END + #define __ALIGN_END __attribute__ ((aligned (4))) + #endif +#elif defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */ + #ifndef __ALIGN_END + #define __ALIGN_END __attribute__ ((aligned (4))) + #endif /* __ALIGN_END */ + #ifndef __ALIGN_BEGIN + #define __ALIGN_BEGIN + #endif /* __ALIGN_BEGIN */ +#else + #ifndef __ALIGN_END + #define __ALIGN_END + #endif /* __ALIGN_END */ + #ifndef __ALIGN_BEGIN + #if defined (__CC_ARM) /* ARM Compiler V5*/ + #define __ALIGN_BEGIN __align(4) + #elif defined (__ICCARM__) /* IAR Compiler */ + #define __ALIGN_BEGIN + #endif /* __CC_ARM */ + #endif /* __ALIGN_BEGIN */ +#endif /* __GNUC__ */ + +/** + * @brief __NOINLINE definition + */ +#if defined ( __CC_ARM ) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) || defined ( __GNUC__ ) +/* ARM V4/V5 and V6 & GNU Compiler + ------------------------------- +*/ +#define __NOINLINE __attribute__ ( (noinline) ) + +#elif defined ( __ICCARM__ ) +/* ICCARM Compiler + --------------- +*/ +#define __NOINLINE _Pragma("optimize = no_inline") + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ___STM32F3xx_HAL_DEF */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_dma.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_dma.h new file mode 100644 index 0000000..8c4fd1b --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_dma.h @@ -0,0 +1,454 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_dma.h + * @author MCD Application Team + * @brief Header file of DMA HAL module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_HAL_DMA_H +#define __STM32F3xx_HAL_DMA_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup DMA + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Types DMA Exported Types + * @{ + */ + +/** + * @brief DMA Configuration Structure definition + */ +typedef struct +{ + uint32_t Direction; /*!< Specifies if the data will be transferred from memory to peripheral, + from memory to memory or from peripheral to memory. + This parameter can be a value of @ref DMA_Data_transfer_direction */ + + uint32_t PeriphInc; /*!< Specifies whether the Peripheral address register should be incremented or not. + This parameter can be a value of @ref DMA_Peripheral_incremented_mode */ + + uint32_t MemInc; /*!< Specifies whether the memory address register should be incremented or not. + This parameter can be a value of @ref DMA_Memory_incremented_mode */ + + uint32_t PeriphDataAlignment; /*!< Specifies the Peripheral data width. + This parameter can be a value of @ref DMA_Peripheral_data_size */ + + uint32_t MemDataAlignment; /*!< Specifies the Memory data width. + This parameter can be a value of @ref DMA_Memory_data_size */ + + uint32_t Mode; /*!< Specifies the operation mode of the DMAy Channelx. + This parameter can be a value of @ref DMA_mode + @note The circular buffer mode cannot be used if the memory-to-memory + data transfer is configured on the selected Channel */ + + uint32_t Priority; /*!< Specifies the software priority for the DMAy Channelx. + This parameter can be a value of @ref DMA_Priority_level */ +} DMA_InitTypeDef; + +/** + * @brief HAL DMA State structures definition + */ +typedef enum +{ + HAL_DMA_STATE_RESET = 0x00U, /*!< DMA not yet initialized or disabled */ + HAL_DMA_STATE_READY = 0x01U, /*!< DMA initialized and ready for use */ + HAL_DMA_STATE_BUSY = 0x02U, /*!< DMA process is ongoing */ + HAL_DMA_STATE_TIMEOUT = 0x03 /*!< DMA timeout state */ +}HAL_DMA_StateTypeDef; + +/** + * @brief HAL DMA Error Code structure definition + */ +typedef enum +{ + HAL_DMA_FULL_TRANSFER = 0x00U, /*!< Full transfer */ + HAL_DMA_HALF_TRANSFER = 0x01 /*!< Half Transfer */ +}HAL_DMA_LevelCompleteTypeDef; + +/** + * @brief HAL DMA Callback ID structure definition + */ +typedef enum +{ + HAL_DMA_XFER_CPLT_CB_ID = 0x00U, /*!< Full transfer */ + HAL_DMA_XFER_HALFCPLT_CB_ID = 0x01U, /*!< Half transfer */ + HAL_DMA_XFER_ERROR_CB_ID = 0x02U, /*!< Error */ + HAL_DMA_XFER_ABORT_CB_ID = 0x03U, /*!< Abort */ + HAL_DMA_XFER_ALL_CB_ID = 0x04 /*!< All */ +}HAL_DMA_CallbackIDTypeDef; + +/** + * @brief DMA handle Structure definition + */ +typedef struct __DMA_HandleTypeDef +{ + DMA_Channel_TypeDef *Instance; /*!< Register base address */ + + DMA_InitTypeDef Init; /*!< DMA communication parameters */ + + HAL_LockTypeDef Lock; /*!< DMA locking object */ + + HAL_DMA_StateTypeDef State; /*!< DMA transfer state */ + + void *Parent; /*!< Parent object state */ + + void (* XferCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer complete callback */ + + void (* XferHalfCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA Half transfer complete callback */ + + void (* XferErrorCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer error callback */ + + void (* XferAbortCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer abort callback */ + + __IO uint32_t ErrorCode; /*!< DMA Error code */ + + DMA_TypeDef *DmaBaseAddress; /*!< DMA Channel Base Address */ + + uint32_t ChannelIndex; /*!< DMA Channel Index */ +} DMA_HandleTypeDef; +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Constants DMA Exported Constants + * @{ + */ + +/** @defgroup DMA_Error_Code DMA Error Code + * @{ + */ +#define HAL_DMA_ERROR_NONE (0x00000000U) /*!< No error */ +#define HAL_DMA_ERROR_TE (0x00000001U) /*!< Transfer error */ +#define HAL_DMA_ERROR_NO_XFER (0x00000004U) /*!< no ongoin transfer */ +#define HAL_DMA_ERROR_TIMEOUT (0x00000020U) /*!< Timeout error */ +#define HAL_DMA_ERROR_NOT_SUPPORTED (0x00000100U) /*!< Not supported mode */ +/** + * @} + */ + +/** @defgroup DMA_Data_transfer_direction DMA Data transfer direction + * @{ + */ +#define DMA_PERIPH_TO_MEMORY (0x00000000U) /*!< Peripheral to memory direction */ +#define DMA_MEMORY_TO_PERIPH ((uint32_t)DMA_CCR_DIR) /*!< Memory to peripheral direction */ +#define DMA_MEMORY_TO_MEMORY ((uint32_t)DMA_CCR_MEM2MEM) /*!< Memory to memory direction */ + +/** + * @} + */ + +/** @defgroup DMA_Peripheral_incremented_mode DMA Peripheral incremented mode + * @{ + */ +#define DMA_PINC_ENABLE ((uint32_t)DMA_CCR_PINC) /*!< Peripheral increment mode Enable */ +#define DMA_PINC_DISABLE (0x00000000U) /*!< Peripheral increment mode Disable */ +/** + * @} + */ + +/** @defgroup DMA_Memory_incremented_mode DMA Memory incremented mode + * @{ + */ +#define DMA_MINC_ENABLE ((uint32_t)DMA_CCR_MINC) /*!< Memory increment mode Enable */ +#define DMA_MINC_DISABLE (0x00000000U) /*!< Memory increment mode Disable */ +/** + * @} + */ + +/** @defgroup DMA_Peripheral_data_size DMA Peripheral data size + * @{ + */ +#define DMA_PDATAALIGN_BYTE (0x00000000U) /*!< Peripheral data alignment : Byte */ +#define DMA_PDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_PSIZE_0) /*!< Peripheral data alignment : HalfWord */ +#define DMA_PDATAALIGN_WORD ((uint32_t)DMA_CCR_PSIZE_1) /*!< Peripheral data alignment : Word */ +/** + * @} + */ + +/** @defgroup DMA_Memory_data_size DMA Memory data size + * @{ + */ +#define DMA_MDATAALIGN_BYTE (0x00000000U) /*!< Memory data alignment : Byte */ +#define DMA_MDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_MSIZE_0) /*!< Memory data alignment : HalfWord */ +#define DMA_MDATAALIGN_WORD ((uint32_t)DMA_CCR_MSIZE_1) /*!< Memory data alignment : Word */ +/** + * @} + */ + +/** @defgroup DMA_mode DMA mode + * @{ + */ +#define DMA_NORMAL (0x00000000U) /*!< Normal Mode */ +#define DMA_CIRCULAR ((uint32_t)DMA_CCR_CIRC) /*!< Circular Mode */ +/** + * @} + */ + +/** @defgroup DMA_Priority_level DMA Priority level + * @{ + */ +#define DMA_PRIORITY_LOW (0x00000000U) /*!< Priority level : Low */ +#define DMA_PRIORITY_MEDIUM ((uint32_t)DMA_CCR_PL_0) /*!< Priority level : Medium */ +#define DMA_PRIORITY_HIGH ((uint32_t)DMA_CCR_PL_1) /*!< Priority level : High */ +#define DMA_PRIORITY_VERY_HIGH ((uint32_t)DMA_CCR_PL) /*!< Priority level : Very_High */ +/** + * @} + */ + + +/** @defgroup DMA_interrupt_enable_definitions DMA interrupt enable definitions + * @{ + */ +#define DMA_IT_TC ((uint32_t)DMA_CCR_TCIE) +#define DMA_IT_HT ((uint32_t)DMA_CCR_HTIE) +#define DMA_IT_TE ((uint32_t)DMA_CCR_TEIE) +/** + * @} + */ + +/** @defgroup DMA_flag_definitions DMA flag definitions + * @{ + */ +#define DMA_FLAG_GL1 (0x00000001U) +#define DMA_FLAG_TC1 (0x00000002U) +#define DMA_FLAG_HT1 (0x00000004U) +#define DMA_FLAG_TE1 (0x00000008U) +#define DMA_FLAG_GL2 (0x00000010U) +#define DMA_FLAG_TC2 (0x00000020U) +#define DMA_FLAG_HT2 (0x00000040U) +#define DMA_FLAG_TE2 (0x00000080U) +#define DMA_FLAG_GL3 (0x00000100U) +#define DMA_FLAG_TC3 (0x00000200U) +#define DMA_FLAG_HT3 (0x00000400U) +#define DMA_FLAG_TE3 (0x00000800U) +#define DMA_FLAG_GL4 (0x00001000U) +#define DMA_FLAG_TC4 (0x00002000U) +#define DMA_FLAG_HT4 (0x00004000U) +#define DMA_FLAG_TE4 (0x00008000U) +#define DMA_FLAG_GL5 (0x00010000U) +#define DMA_FLAG_TC5 (0x00020000U) +#define DMA_FLAG_HT5 (0x00040000U) +#define DMA_FLAG_TE5 (0x00080000U) +#define DMA_FLAG_GL6 (0x00100000U) +#define DMA_FLAG_TC6 (0x00200000U) +#define DMA_FLAG_HT6 (0x00400000U) +#define DMA_FLAG_TE6 (0x00800000U) +#define DMA_FLAG_GL7 (0x01000000U) +#define DMA_FLAG_TC7 (0x02000000U) +#define DMA_FLAG_HT7 (0x04000000U) +#define DMA_FLAG_TE7 (0x08000000U) +/** + * @} + */ + +/** + * @} + */ + + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup DMA_Exported_Macros DMA Exported Macros + * @{ + */ + +/** @brief Reset DMA handle state + * @param __HANDLE__ DMA handle. + * @retval None + */ +#define __HAL_DMA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DMA_STATE_RESET) + +/** + * @brief Enable the specified DMA Channel. + * @param __HANDLE__ DMA handle + * @retval None + */ +#define __HAL_DMA_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CCR |= DMA_CCR_EN) + +/** + * @brief Disable the specified DMA Channel. + * @param __HANDLE__ DMA handle + * @retval None + */ +#define __HAL_DMA_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CCR &= ~DMA_CCR_EN) + + +/* Interrupt & Flag management */ + +/** + * @brief Enables the specified DMA Channel interrupts. + * @param __HANDLE__ DMA handle + * @param __INTERRUPT__ specifies the DMA interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg DMA_IT_TC: Transfer complete interrupt mask + * @arg DMA_IT_HT: Half transfer complete interrupt mask + * @arg DMA_IT_TE: Transfer error interrupt mask + * @retval None + */ +#define __HAL_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CCR |= (__INTERRUPT__)) + +/** + * @brief Disables the specified DMA Channel interrupts. + * @param __HANDLE__ DMA handle + * @param __INTERRUPT__ specifies the DMA interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg DMA_IT_TC: Transfer complete interrupt mask + * @arg DMA_IT_HT: Half transfer complete interrupt mask + * @arg DMA_IT_TE: Transfer error interrupt mask + * @retval None + */ +#define __HAL_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CCR &= ~(__INTERRUPT__)) + +/** + * @brief Checks whether the specified DMA Channel interrupt is enabled or disabled. + * @param __HANDLE__ DMA handle + * @param __INTERRUPT__ specifies the DMA interrupt source to check. + * This parameter can be one of the following values: + * @arg DMA_IT_TC: Transfer complete interrupt mask + * @arg DMA_IT_HT: Half transfer complete interrupt mask + * @arg DMA_IT_TE: Transfer error interrupt mask + * @retval The state of DMA_IT (SET or RESET). + */ +#define __HAL_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CCR & (__INTERRUPT__))) + +/** + * @brief Returns the number of remaining data units in the current DMAy Channelx transfer. + * @param __HANDLE__ DMA handle + * + * @retval The number of remaining data units in the current DMA Channel transfer. + */ +#define __HAL_DMA_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNDTR) + +/** + * @} + */ + +/* Include DMA HAL Extended module */ +#include "stm32f3xx_hal_dma_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup DMA_Exported_Functions + * @{ + */ + +/** @addtogroup DMA_Exported_Functions_Group1 Initialization and de-initialization functions + * @{ + */ +/* Initialization and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_DeInit (DMA_HandleTypeDef *hdma); +/** + * @} + */ + +/** @addtogroup DMA_Exported_Functions_Group2 Input and Output operation functions + * @{ + */ +/* Input and Output operation functions *****************************************************/ +HAL_StatusTypeDef HAL_DMA_Start (DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout); +void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)( DMA_HandleTypeDef * _hdma)); +HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID); +/** + * @} + */ + +/** @addtogroup DMA_Exported_Functions_Group3 Peripheral State functions + * @{ + */ +/* Peripheral State and Error functions ***************************************/ +HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma); +uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma); +/** + * @} + */ + +/** + * @} + */ +/* Private macros ------------------------------------------------------------*/ +/** @defgroup DMA_Private_Macros DMA Private Macros + * @brief DMA private macros + * @{ + */ + +#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1U) && ((SIZE) < 0x10000U)) + +#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_PERIPH_TO_MEMORY ) || \ + ((DIRECTION) == DMA_MEMORY_TO_PERIPH) || \ + ((DIRECTION) == DMA_MEMORY_TO_MEMORY)) + +#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PINC_ENABLE) || \ + ((STATE) == DMA_PINC_DISABLE)) + +#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MINC_ENABLE) || \ + ((STATE) == DMA_MINC_DISABLE)) + +#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PDATAALIGN_BYTE) || \ + ((SIZE) == DMA_PDATAALIGN_HALFWORD) || \ + ((SIZE) == DMA_PDATAALIGN_WORD)) + +#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MDATAALIGN_BYTE) || \ + ((SIZE) == DMA_MDATAALIGN_HALFWORD) || \ + ((SIZE) == DMA_MDATAALIGN_WORD )) + +#define IS_DMA_MODE(MODE) (((MODE) == DMA_NORMAL ) || \ + ((MODE) == DMA_CIRCULAR)) + +#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_PRIORITY_LOW ) || \ + ((PRIORITY) == DMA_PRIORITY_MEDIUM) || \ + ((PRIORITY) == DMA_PRIORITY_HIGH) || \ + ((PRIORITY) == DMA_PRIORITY_VERY_HIGH)) + +/** + * @} + */ + + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F3xx_HAL_DMA_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_dma_ex.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_dma_ex.h new file mode 100644 index 0000000..c7d839a --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_dma_ex.h @@ -0,0 +1,274 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_dma_ex.h + * @author MCD Application Team + * @brief Header file of DMA HAL extension module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_HAL_DMA_EX_H +#define __STM32F3xx_HAL_DMA_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup DMAEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup DMAEx_Exported_Macros DMA Extended Exported Macros + * @{ + */ +/* Interrupt & Flag management */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) || \ + defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) || \ + defined(STM32F373xC) || defined(STM32F378xx) +/** + * @brief Returns the current DMA Channel transfer complete flag. + * @param __HANDLE__ DMA handle + * @retval The specified transfer complete flag index. + */ +#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TC1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TC5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TC6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_TC7 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TC1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TC2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TC3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TC4 :\ + DMA_FLAG_TC5) + +/** + * @brief Returns the current DMA Channel half transfer complete flag. + * @param __HANDLE__ DMA handle + * @retval The specified half transfer complete flag index. + */ +#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_HT1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_HT5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_HT6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_HT7 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_HT1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_HT2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_HT3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_HT4 :\ + DMA_FLAG_HT5) + +/** + * @brief Returns the current DMA Channel transfer error flag. + * @param __HANDLE__ DMA handle + * @retval The specified transfer error flag index. + */ +#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TE1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TE5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TE6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_TE7 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TE1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TE2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TE3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TE4 :\ + DMA_FLAG_TE5) + +/** + * @brief Return the current DMA Channel Global interrupt flag. + * @param __HANDLE__ DMA handle + * @retval The specified transfer error flag index. + */ +#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_GL1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_GL2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_GL3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_GL4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_GL5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_GL6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_GL7 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_GL1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_GL2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_GL3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_GL4 :\ + DMA_FLAG_GL5) + +/** + * @brief Get the DMA Channel pending flags. + * @param __HANDLE__ DMA handle + * @param __FLAG__ Get the specified flag. + * This parameter can be any combination of the following values: + * @arg DMA_FLAG_TCx: Transfer complete flag + * @arg DMA_FLAG_HTx: Half transfer complete flag + * @arg DMA_FLAG_TEx: Transfer error flag + * Where x can be 1_7 or 1_5 (depending on DMA1 or DMA2) to select the DMA Channel flag. + * @retval The state of FLAG (SET or RESET). + */ +#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__)\ +(((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7)? (DMA2->ISR & (__FLAG__)) :\ + (DMA1->ISR & (__FLAG__))) + +/** + * @brief Clears the DMA Channel pending flags. + * @param __HANDLE__ DMA handle + * @param __FLAG__ specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg DMA_FLAG_TCx: Transfer complete flag + * @arg DMA_FLAG_HTx: Half transfer complete flag + * @arg DMA_FLAG_TEx: Transfer error flag + * Where x can be 1_7 or 1_5 (depending on DMA1 or DMA2) to select the DMA Channel flag. + * @retval None + */ +#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) \ +(((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7)? (DMA2->IFCR = (__FLAG__)) :\ + (DMA1->IFCR = (__FLAG__))) + +/** + * @} + */ + +#else /* STM32F301x8_STM32F302x8_STM32F318xx_STM32F303x8_STM32F334x8_STM32F328xx Product devices */ +/** @defgroup DMA_Low_density_Medium_density_Product_devices DMA Low density and Medium density product devices + * @{ + */ + +/** + * @brief Returns the current DMA Channel transfer complete flag. + * @param __HANDLE__ DMA handle + * @retval The specified transfer complete flag index. + */ +#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TC1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TC5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TC6 :\ + DMA_FLAG_TC7) + +/** + * @brief Returns the current DMA Channel half transfer complete flag. + * @param __HANDLE__ DMA handle + * @retval The specified half transfer complete flag index. + */ +#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_HT1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_HT5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_HT6 :\ + DMA_FLAG_HT7) + +/** + * @brief Returns the current DMA Channel transfer error flag. + * @param __HANDLE__ DMA handle + * @retval The specified transfer error flag index. + */ +#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TE1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TE5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TE6 :\ + DMA_FLAG_TE7) + +/** + * @brief Return the current DMA Channel Global interrupt flag. + * @param __HANDLE__ DMA handle + * @retval The specified transfer error flag index. + */ +#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_GL1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_GL2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_GL3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_GL4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_GL5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_GL6 :\ + DMA_FLAG_GL7) + +/** + * @brief Get the DMA Channel pending flags. + * @param __HANDLE__ DMA handle + * @param __FLAG__ Get the specified flag. + * This parameter can be any combination of the following values: + * @arg DMA_FLAG_TCx: Transfer complete flag + * @arg DMA_FLAG_HTx: Half transfer complete flag + * @arg DMA_FLAG_TEx: Transfer error flag + * Where x can be 1_7 to select the DMA Channel flag. + * @retval The state of FLAG (SET or RESET). + */ + +#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__) (DMA1->ISR & (__FLAG__)) + +/** + * @brief Clears the DMA Channel pending flags. + * @param __HANDLE__ DMA handle + * @param __FLAG__ specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg DMA_FLAG_TCx: Transfer complete flag + * @arg DMA_FLAG_HTx: Half transfer complete flag + * @arg DMA_FLAG_TEx: Transfer error flag + * Where x can be 1_7 to select the DMA Channel flag. + * @retval None + */ +#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (DMA1->IFCR = (__FLAG__)) + +/** + * @} + */ + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F373xC || STM32F378xx */ + +#endif /* __STM32F3xx_HAL_DMA_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_exti.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_exti.h new file mode 100644 index 0000000..c5ac01d --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_exti.h @@ -0,0 +1,404 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_exti.h + * @author MCD Application Team + * @brief Header file of EXTI HAL module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2019 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F3xx_HAL_EXTI_H +#define STM32F3xx_HAL_EXTI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup EXTI EXTI + * @brief EXTI HAL module driver + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup EXTI_Exported_Types EXTI Exported Types + * @{ + */ + +/** + * @brief HAL EXTI common Callback ID enumeration definition + */ +typedef enum +{ + HAL_EXTI_COMMON_CB_ID = 0x00U +} EXTI_CallbackIDTypeDef; + +/** + * @brief EXTI Handle structure definition + */ +typedef struct +{ + uint32_t Line; /*!< Exti line number */ + void (* PendingCallback)(void); /*!< Exti pending callback */ +} EXTI_HandleTypeDef; + +/** + * @brief EXTI Configuration structure definition + */ +typedef struct +{ + uint32_t Line; /*!< The Exti line to be configured. This parameter + can be a value of @ref EXTI_Line */ + uint32_t Mode; /*!< The Exit Mode to be configured for a core. + This parameter can be a combination of @ref EXTI_Mode */ + uint32_t Trigger; /*!< The Exti Trigger to be configured. This parameter + can be a value of @ref EXTI_Trigger */ + uint32_t GPIOSel; /*!< The Exti GPIO multiplexer selection to be configured. + This parameter is only possible for line 0 to 15. It + can be a value of @ref EXTI_GPIOSel */ +} EXTI_ConfigTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup EXTI_Exported_Constants EXTI Exported Constants + * @{ + */ + +/** @defgroup EXTI_Line EXTI Line + * @{ + */ +#define EXTI_LINE_0 (EXTI_GPIO | EXTI_REG1 | 0x00u) /*!< External interrupt line 0 */ +#define EXTI_LINE_1 (EXTI_GPIO | EXTI_REG1 | 0x01u) /*!< External interrupt line 1 */ +#define EXTI_LINE_2 (EXTI_GPIO | EXTI_REG1 | 0x02u) /*!< External interrupt line 2 */ +#define EXTI_LINE_3 (EXTI_GPIO | EXTI_REG1 | 0x03u) /*!< External interrupt line 3 */ +#define EXTI_LINE_4 (EXTI_GPIO | EXTI_REG1 | 0x04u) /*!< External interrupt line 4 */ +#define EXTI_LINE_5 (EXTI_GPIO | EXTI_REG1 | 0x05u) /*!< External interrupt line 5 */ +#define EXTI_LINE_6 (EXTI_GPIO | EXTI_REG1 | 0x06u) /*!< External interrupt line 6 */ +#define EXTI_LINE_7 (EXTI_GPIO | EXTI_REG1 | 0x07u) /*!< External interrupt line 7 */ +#define EXTI_LINE_8 (EXTI_GPIO | EXTI_REG1 | 0x08u) /*!< External interrupt line 8 */ +#define EXTI_LINE_9 (EXTI_GPIO | EXTI_REG1 | 0x09u) /*!< External interrupt line 9 */ +#define EXTI_LINE_10 (EXTI_GPIO | EXTI_REG1 | 0x0Au) /*!< External interrupt line 10 */ +#define EXTI_LINE_11 (EXTI_GPIO | EXTI_REG1 | 0x0Bu) /*!< External interrupt line 11 */ +#define EXTI_LINE_12 (EXTI_GPIO | EXTI_REG1 | 0x0Cu) /*!< External interrupt line 12 */ +#define EXTI_LINE_13 (EXTI_GPIO | EXTI_REG1 | 0x0Du) /*!< External interrupt line 13 */ +#define EXTI_LINE_14 (EXTI_GPIO | EXTI_REG1 | 0x0Eu) /*!< External interrupt line 14 */ +#define EXTI_LINE_15 (EXTI_GPIO | EXTI_REG1 | 0x0Fu) /*!< External interrupt line 15 */ +#define EXTI_LINE_16 (EXTI_CONFIG | EXTI_REG1 | 0x10u) /*!< External interrupt line 16 Connected to the PVD Output */ +#define EXTI_LINE_17 (EXTI_CONFIG | EXTI_REG1 | 0x11u) /*!< External interrupt line 17 Connected to the RTC Alarm event */ + +#if defined(EXTI_IMR_MR18) +#define EXTI_LINE_18 (EXTI_CONFIG | EXTI_REG1 | 0x12u) /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */ +#else +#define EXTI_LINE_18 (EXTI_RESERVED | EXTI_REG1 | 0x12u) +#endif /* EXTI_IMR_MR18 */ + +#define EXTI_LINE_19 (EXTI_CONFIG | EXTI_REG1 | 0x13u) /*!< External interrupt line 19 Connected to the RTC tamper and Timestamps */ +#define EXTI_LINE_20 (EXTI_CONFIG | EXTI_REG1 | 0x14u) /*!< External interrupt line 20 Connected to the RTC wakeup timer */ + +#if defined(EXTI_IMR_MR21) +#define EXTI_LINE_21 (EXTI_CONFIG | EXTI_REG1 | 0x15u) /*!< External interrupt line 21 Connected to the Comparator 1 output */ +#else +#define EXTI_LINE_21 (EXTI_RESERVED | EXTI_REG1 | 0x15u) +#endif /* EXTI_IMR_MR21 */ + +#define EXTI_LINE_22 (EXTI_CONFIG | EXTI_REG1 | 0x16u) /*!< External interrupt line 22 Connected to the Comparator 2 output */ +#define EXTI_LINE_23 (EXTI_DIRECT | EXTI_REG1 | 0x17u) /*!< External interrupt line 23 Connected to the internal I2C1 wakeup event */ + +#if defined(EXTI_IMR_MR24) +#define EXTI_LINE_24 (EXTI_DIRECT | EXTI_REG1 | 0x18u) /*!< External interrupt line 24 Connected to the internal I2C2 wakeup event */ +#else +#define EXTI_LINE_24 (EXTI_RESERVED | EXTI_REG1 | 0x18u) +#endif /* EXTI_IMR_MR24 */ + +#define EXTI_LINE_25 (EXTI_DIRECT | EXTI_REG1 | 0x19u) /*!< External interrupt line 25 Connected to the internal USART1 wakeup event */ + +#if defined(EXTI_IMR_MR26) +#define EXTI_LINE_26 (EXTI_DIRECT | EXTI_REG1 | 0x1Au) /*!< External interrupt line 26 Connected to the internal USART2 wakeup event */ +#else +#define EXTI_LINE_26 (EXTI_RESERVED | EXTI_REG1 | 0x1Au) +#endif /* EXTI_IMR_MR26 */ + +#if defined(EXTI_IMR_MR27) +#define EXTI_LINE_27 (EXTI_DIRECT | EXTI_REG1 | 0x1Bu) /*!< External interrupt line 27 Connected to the internal I2C3 wakeup event */ +#else +#define EXTI_LINE_27 (EXTI_RESERVED | EXTI_REG1 | 0x1Bu) +#endif /* EXTI_IMR_MR27 */ + +#if defined(EXTI_IMR_MR28) +#define EXTI_LINE_28 (EXTI_DIRECT | EXTI_REG1 | 0x1Cu) /*!< External interrupt line 28 Connected to the internal USART3 wakeup event */ +#else +#define EXTI_LINE_28 (EXTI_RESERVED | EXTI_REG1 | 0x1Cu) +#endif /* EXTI_IMR_MR28 */ + +#if defined(EXTI_32_63_SUPPORT) + +#if defined(EXTI_IMR_MR29) +#define EXTI_LINE_29 (EXTI_CONFIG | EXTI_REG1 | 0x1Du) /*!< External interrupt line 29 Connected to the Comparator 3 output */ +#else +#define EXTI_LINE_29 (EXTI_RESERVED | EXTI_REG1 | 0x1Cu) +#endif /* EXTI_IMR_MR29 */ + +#if defined(EXTI_IMR_MR30) +#define EXTI_LINE_30 (EXTI_CONFIG | EXTI_REG1 | 0x1Eu) /*!< External interrupt line 30 Connected to the Comparator 4 output */ +#else +#define EXTI_LINE_30 (EXTI_RESERVED | EXTI_REG1 | 0x1Eu) +#endif /* EXTI_IMR_MR30 */ + +#if defined(EXTI_IMR_MR31) +#define EXTI_LINE_31 (EXTI_CONFIG | EXTI_REG1 | 0x1Fu) /*!< External interrupt line 31 Connected to the Comparator 5 output */ +#else +#define EXTI_LINE_31 (EXTI_RESERVED | EXTI_REG1 | 0x1Fu) +#endif /* EXTI_IMR_MR31 */ + +#define EXTI_LINE_32 (EXTI_CONFIG | EXTI_REG2 | 0x00u) /*!< External interrupt line 32 Connected to the Comparator 6 output */ + +#if defined(EXTI_IMR2_MR33) +#define EXTI_LINE_33 (EXTI_CONFIG | EXTI_REG2 | 0x01u) /*!< External interrupt line 33 Connected to the Comparator 7 output */ +#else +#define EXTI_LINE_33 (EXTI_RESERVED | EXTI_REG2 | 0x01u) +#endif /* EXTI_IMR2_MR33 */ + +#if defined(EXTI_IMR2_MR34) +#define EXTI_LINE_34 (EXTI_DIRECT | EXTI_REG2 | 0x02u) /*!< External interrupt line 34 Connected to the USART4 output */ +#else +#define EXTI_LINE_34 (EXTI_RESERVED | EXTI_REG2 | 0x02u) +#endif /* EXTI_IMR2_MR34 */ + +#if defined(EXTI_IMR2_MR35) +#define EXTI_LINE_35 (EXTI_DIRECT | EXTI_REG2 | 0x03u) /*!< External interrupt line 35 Connected to the USART5 output */ +#else +#define EXTI_LINE_35 (EXTI_RESERVED | EXTI_REG2 | 0x03u) +#endif /* EXTI_IMR2_MR35 */ + +#endif /* EXTI_32_63_SUPPORT */ +/** + * @} + */ + +/** @defgroup EXTI_Mode EXTI Mode + * @{ + */ +#define EXTI_MODE_NONE 0x00000000u +#define EXTI_MODE_INTERRUPT 0x00000001u +#define EXTI_MODE_EVENT 0x00000002u +/** + * @} + */ + +/** @defgroup EXTI_Trigger EXTI Trigger + * @{ + */ +#define EXTI_TRIGGER_NONE 0x00000000u +#define EXTI_TRIGGER_RISING 0x00000001u +#define EXTI_TRIGGER_FALLING 0x00000002u +#define EXTI_TRIGGER_RISING_FALLING (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING) +/** + * @} + */ + +/** @defgroup EXTI_GPIOSel EXTI GPIOSel + * @brief + * @{ + */ +#define EXTI_GPIOA 0x00000000u +#define EXTI_GPIOB 0x00000001u +#define EXTI_GPIOC 0x00000002u +#define EXTI_GPIOD 0x00000003u +#if defined(GPIOE) +#define EXTI_GPIOE 0x00000004u +#endif /* GPIOE */ +#define EXTI_GPIOF 0x00000005u +#if defined(GPIOG) +#define EXTI_GPIOG 0x00000006u +#endif /* GPIOG */ +#if defined(GPIOH) +#define EXTI_GPIOH 0x00000007u +#endif /* GPIOH */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup EXTI_Exported_Macros EXTI Exported Macros + * @{ + */ + +/** + * @} + */ + +/* Private constants --------------------------------------------------------*/ +/** @defgroup EXTI_Private_Constants EXTI Private Constants + * @{ + */ +/** + * @brief EXTI Line property definition + */ +#define EXTI_PROPERTY_SHIFT 24u +#define EXTI_DIRECT (0x01uL << EXTI_PROPERTY_SHIFT) +#define EXTI_CONFIG (0x02uL << EXTI_PROPERTY_SHIFT) +#define EXTI_GPIO ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG) +#define EXTI_RESERVED (0x08uL << EXTI_PROPERTY_SHIFT) +#define EXTI_PROPERTY_MASK (EXTI_DIRECT | EXTI_CONFIG | EXTI_GPIO) + +/** + * @brief EXTI Register and bit usage + */ +#define EXTI_REG_SHIFT 16u +#define EXTI_REG1 (0x00uL << EXTI_REG_SHIFT) +#define EXTI_REG2 (0x01uL << EXTI_REG_SHIFT) +#define EXTI_REG_MASK (EXTI_REG1 | EXTI_REG2) +#define EXTI_PIN_MASK 0x0000001Fu + +/** + * @brief EXTI Mask for interrupt & event mode + */ +#define EXTI_MODE_MASK (EXTI_MODE_EVENT | EXTI_MODE_INTERRUPT) + +/** + * @brief EXTI Mask for trigger possibilities + */ +#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING) + +/** + * @brief EXTI Line number + */ +#if defined(EXTI_32_63_SUPPORT) +#define EXTI_LINE_NB 36uL +#else +#define EXTI_LINE_NB 29uL +#endif /* EXTI_32_63_SUPPORT */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup EXTI_Private_Macros EXTI Private Macros + * @{ + */ +#define IS_EXTI_LINE(__EXTI_LINE__) ((((__EXTI_LINE__) & ~(EXTI_PROPERTY_MASK | EXTI_REG_MASK | EXTI_PIN_MASK)) == 0x00u) && \ + ((((__EXTI_LINE__) & EXTI_PROPERTY_MASK) == EXTI_DIRECT) || \ + (((__EXTI_LINE__) & EXTI_PROPERTY_MASK) == EXTI_CONFIG) || \ + (((__EXTI_LINE__) & EXTI_PROPERTY_MASK) == EXTI_GPIO)) && \ + (((__EXTI_LINE__) & (EXTI_REG_MASK | EXTI_PIN_MASK)) < \ + (((EXTI_LINE_NB / 32u) << EXTI_REG_SHIFT) | (EXTI_LINE_NB % 32u)))) + +#define IS_EXTI_MODE(__EXTI_LINE__) ((((__EXTI_LINE__) & EXTI_MODE_MASK) != 0x00u) && \ + (((__EXTI_LINE__) & ~EXTI_MODE_MASK) == 0x00u)) + +#define IS_EXTI_TRIGGER(__EXTI_LINE__) (((__EXTI_LINE__) & ~EXTI_TRIGGER_MASK) == 0x00u) + +#define IS_EXTI_PENDING_EDGE(__EXTI_LINE__) ((__EXTI_LINE__) == EXTI_TRIGGER_RISING_FALLING) + +#define IS_EXTI_CONFIG_LINE(__EXTI_LINE__) (((__EXTI_LINE__) & EXTI_CONFIG) != 0x00u) + +#if defined(GPIOH) +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOE) || \ + ((__PORT__) == EXTI_GPIOF) || \ + ((__PORT__) == EXTI_GPIOG) || \ + ((__PORT__) == EXTI_GPIOH)) +#elif defined(GPIOE) +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOE) || \ + ((__PORT__) == EXTI_GPIOF)) +#else +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOF)) +#endif /* GPIOE */ + +#define IS_EXTI_GPIO_PIN(__PIN__) ((__PIN__) < 16u) + +/** + * @} + */ + + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup EXTI_Exported_Functions EXTI Exported Functions + * @brief EXTI Exported Functions + * @{ + */ + +/** @defgroup EXTI_Exported_Functions_Group1 Configuration functions + * @brief Configuration functions + * @{ + */ +/* Configuration functions ****************************************************/ +HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig); +HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig); +HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti); +HAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID, void (*pPendingCbfn)(void)); +HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine); +/** + * @} + */ + +/** @defgroup EXTI_Exported_Functions_Group2 IO operation functions + * @brief IO operation functions + * @{ + */ +/* IO operation functions *****************************************************/ +void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti); +uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge); +void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge); +void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F3xx_HAL_EXTI_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_flash.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_flash.h new file mode 100644 index 0000000..0cc9ea8 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_flash.h @@ -0,0 +1,381 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_flash.h + * @author MCD Application Team + * @brief Header file of Flash HAL module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_HAL_FLASH_H +#define __STM32F3xx_HAL_FLASH_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup FLASH + * @{ + */ + +/** @addtogroup FLASH_Private_Constants + * @{ + */ +#define FLASH_TIMEOUT_VALUE (50000U) /* 50 s */ +/** + * @} + */ + +/** @addtogroup FLASH_Private_Macros + * @{ + */ + +#define IS_FLASH_TYPEPROGRAM(VALUE) (((VALUE) == FLASH_TYPEPROGRAM_HALFWORD) || \ + ((VALUE) == FLASH_TYPEPROGRAM_WORD) || \ + ((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD)) + +#define IS_FLASH_LATENCY(__LATENCY__) (((__LATENCY__) == FLASH_LATENCY_0) || \ + ((__LATENCY__) == FLASH_LATENCY_1) || \ + ((__LATENCY__) == FLASH_LATENCY_2)) + +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Types FLASH Exported Types + * @{ + */ + +/** + * @brief FLASH Procedure structure definition + */ +typedef enum +{ + FLASH_PROC_NONE = 0U, + FLASH_PROC_PAGEERASE = 1U, + FLASH_PROC_MASSERASE = 2U, + FLASH_PROC_PROGRAMHALFWORD = 3U, + FLASH_PROC_PROGRAMWORD = 4U, + FLASH_PROC_PROGRAMDOUBLEWORD = 5U +} FLASH_ProcedureTypeDef; + +/** + * @brief FLASH handle Structure definition + */ +typedef struct +{ + __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*!< Internal variable to indicate which procedure is ongoing or not in IT context */ + + __IO uint32_t DataRemaining; /*!< Internal variable to save the remaining pages to erase or half-word to program in IT context */ + + __IO uint32_t Address; /*!< Internal variable to save address selected for program or erase */ + + __IO uint64_t Data; /*!< Internal variable to save data to be programmed */ + + HAL_LockTypeDef Lock; /*!< FLASH locking object */ + + __IO uint32_t ErrorCode; /*!< FLASH error code + This parameter can be a value of @ref FLASH_Error_Codes */ +} FLASH_ProcessTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Constants FLASH Exported Constants + * @{ + */ + +/** @defgroup FLASH_Error_Codes FLASH Error Codes + * @{ + */ + +#define HAL_FLASH_ERROR_NONE 0x00U /*!< No error */ +#define HAL_FLASH_ERROR_PROG 0x01U /*!< Programming error */ +#define HAL_FLASH_ERROR_WRP 0x02U /*!< Write protection error */ + +/** + * @} + */ + +/** @defgroup FLASH_Type_Program FLASH Type Program + * @{ + */ +#define FLASH_TYPEPROGRAM_HALFWORD (0x01U) /*!ACR |= FLASH_ACR_HLFCYA) + +/** + * @brief Disable the FLASH half cycle access. + * @retval None + */ +#define __HAL_FLASH_HALF_CYCLE_ACCESS_DISABLE() (FLASH->ACR &= (~FLASH_ACR_HLFCYA)) + +/** + * @} + */ + +/** @defgroup FLASH_EM_Latency FLASH Latency + * @brief macros to handle FLASH Latency + * @{ + */ + +/** + * @brief Set the FLASH Latency. + * @param __LATENCY__ FLASH Latency + * This parameter can be one of the following values: + * @arg @ref FLASH_LATENCY_0 FLASH Zero Latency cycle + * @arg @ref FLASH_LATENCY_1 FLASH One Latency cycle + * @arg @ref FLASH_LATENCY_2 FLASH Two Latency cycles + * @retval None + */ +#define __HAL_FLASH_SET_LATENCY(__LATENCY__) (FLASH->ACR = (FLASH->ACR&(~FLASH_ACR_LATENCY)) | (__LATENCY__)) + + +/** + * @brief Get the FLASH Latency. + * @retval FLASH Latency + * This parameter can be one of the following values: + * @arg @ref FLASH_LATENCY_0 FLASH Zero Latency cycle + * @arg @ref FLASH_LATENCY_1 FLASH One Latency cycle + * @arg @ref FLASH_LATENCY_2 FLASH Two Latency cycles + */ +#define __HAL_FLASH_GET_LATENCY() (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)) + +/** + * @} + */ + +/** @defgroup FLASH_Prefetch FLASH Prefetch + * @brief macros to handle FLASH Prefetch buffer + * @{ + */ +/** + * @brief Enable the FLASH prefetch buffer. + * @retval None + */ +#define __HAL_FLASH_PREFETCH_BUFFER_ENABLE() (FLASH->ACR |= FLASH_ACR_PRFTBE) + +/** + * @brief Disable the FLASH prefetch buffer. + * @retval None + */ +#define __HAL_FLASH_PREFETCH_BUFFER_DISABLE() (FLASH->ACR &= (~FLASH_ACR_PRFTBE)) + +/** + * @} + */ + +/** @defgroup FLASH_Interrupt FLASH Interrupts + * @brief macros to handle FLASH interrupts + * @{ + */ + +/** + * @brief Enable the specified FLASH interrupt. + * @param __INTERRUPT__ FLASH interrupt + * This parameter can be any combination of the following values: + * @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt + * @arg @ref FLASH_IT_ERR Error Interrupt + * @retval none + */ +#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__) SET_BIT((FLASH->CR), (__INTERRUPT__)) + +/** + * @brief Disable the specified FLASH interrupt. + * @param __INTERRUPT__ FLASH interrupt + * This parameter can be any combination of the following values: + * @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt + * @arg @ref FLASH_IT_ERR Error Interrupt + * @retval none + */ +#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) CLEAR_BIT((FLASH->CR), (uint32_t)(__INTERRUPT__)) + +/** + * @brief Get the specified FLASH flag status. + * @param __FLAG__ specifies the FLASH flag to check. + * This parameter can be one of the following values: + * @arg @ref FLASH_FLAG_BSY FLASH Busy flag + * @arg @ref FLASH_FLAG_EOP FLASH End of Operation flag + * @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag + * @arg @ref FLASH_FLAG_PGERR FLASH Programming error flag + * @retval The new state of __FLAG__ (SET or RESET). + */ +#define __HAL_FLASH_GET_FLAG(__FLAG__) (((FLASH->SR) & (__FLAG__)) == (__FLAG__)) + +/** + * @brief Clear the specified FLASH flag. + * @param __FLAG__ specifies the FLASH flags to clear. + * This parameter can be any combination of the following values: + * @arg @ref FLASH_FLAG_EOP FLASH End of Operation flag + * @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag + * @arg @ref FLASH_FLAG_PGERR FLASH Programming error flag + * @retval none + */ +#define __HAL_FLASH_CLEAR_FLAG(__FLAG__) ((FLASH->SR) = (__FLAG__)) + +/** + * @} + */ + +/** + * @} + */ + +/* Include FLASH HAL Extended module */ +#include "stm32f3xx_hal_flash_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup FLASH_Exported_Functions + * @{ + */ + +/** @addtogroup FLASH_Exported_Functions_Group1 + * @{ + */ +/* IO operation functions *****************************************************/ +HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data); +HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data); + +/* FLASH IRQ handler function */ +void HAL_FLASH_IRQHandler(void); +/* Callbacks in non blocking modes */ +void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue); +void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue); + +/** + * @} + */ + +/** @addtogroup FLASH_Exported_Functions_Group2 + * @{ + */ +/* Peripheral Control functions ***********************************************/ +HAL_StatusTypeDef HAL_FLASH_Unlock(void); +HAL_StatusTypeDef HAL_FLASH_Lock(void); +HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void); +HAL_StatusTypeDef HAL_FLASH_OB_Lock(void); +HAL_StatusTypeDef HAL_FLASH_OB_Launch(void); + +/** + * @} + */ + +/** @addtogroup FLASH_Exported_Functions_Group3 + * @{ + */ +/* Peripheral State and Error functions ***************************************/ +uint32_t HAL_FLASH_GetError(void); + +/** + * @} + */ + +/** + * @} + */ + +/* Private function -------------------------------------------------*/ +/** @addtogroup FLASH_Private_Functions + * @{ + */ +HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F3xx_HAL_FLASH_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_flash_ex.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_flash_ex.h new file mode 100644 index 0000000..f50f968 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_flash_ex.h @@ -0,0 +1,475 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_flash_ex.h + * @author MCD Application Team + * @brief Header file of Flash HAL Extended module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_HAL_FLASH_EX_H +#define __STM32F3xx_HAL_FLASH_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup FLASHEx + * @{ + */ + +/** @addtogroup FLASHEx_Private_Constants + * @{ + */ + +#define FLASH_SIZE_DATA_REGISTER (0x1FFFF7CCU) + +/** + * @} + */ + +/** @addtogroup FLASHEx_Private_Macros + * @{ + */ +#define IS_FLASH_TYPEERASE(VALUE) (((VALUE) == FLASH_TYPEERASE_PAGES) || \ + ((VALUE) == FLASH_TYPEERASE_MASSERASE)) + +#define IS_OPTIONBYTE(VALUE) ((VALUE) <= (OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER | OPTIONBYTE_DATA)) + +#define IS_WRPSTATE(VALUE) (((VALUE) == OB_WRPSTATE_DISABLE) || \ + ((VALUE) == OB_WRPSTATE_ENABLE)) + +#define IS_OB_DATA_ADDRESS(ADDRESS) (((ADDRESS) == OB_DATA_ADDRESS_DATA0) || ((ADDRESS) == OB_DATA_ADDRESS_DATA1)) + +#define IS_OB_RDP_LEVEL(LEVEL) (((LEVEL) == OB_RDP_LEVEL_0) ||\ + ((LEVEL) == OB_RDP_LEVEL_1))/*||\ + ((LEVEL) == OB_RDP_LEVEL_2))*/ + +#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW)) + +#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NO_RST) || ((SOURCE) == OB_STOP_RST)) + +#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NO_RST) || ((SOURCE) == OB_STDBY_RST)) + +#define IS_OB_BOOT1(BOOT1) (((BOOT1) == OB_BOOT1_RESET) || ((BOOT1) == OB_BOOT1_SET)) + +#define IS_OB_VDDA_ANALOG(ANALOG) (((ANALOG) == OB_VDDA_ANALOG_ON) || ((ANALOG) == OB_VDDA_ANALOG_OFF)) + +#define IS_OB_SRAM_PARITY(PARITY) (((PARITY) == OB_SRAM_PARITY_SET) || ((PARITY) == OB_SRAM_PARITY_RESET)) + + +#if defined(FLASH_OBR_SDADC12_VDD_MONITOR) +#define IS_OB_SDACD_VDD_MONITOR(VDD_MONITOR) (((VDD_MONITOR) == OB_SDACD_VDD_MONITOR_SET) || \ + ((VDD_MONITOR) == OB_SDACD_VDD_MONITOR_RESET)) +#endif /* FLASH_OBR_SDADC12_VDD_MONITOR */ + +#define IS_OB_WRP(PAGE) (((PAGE) != 0x0000000U)) + +#if defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) \ + || defined(STM32F373xC) || defined(STM32F378xx) +#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x100U) ? \ + ((ADDRESS) <= 0x0803FFFFU) : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U) ? \ + ((ADDRESS) <= 0x0801FFFFU) : ((ADDRESS) <= 0x0800FFFFU)))) +#endif /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) +#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && ((ADDRESS) <= 0x0807FFFFU)) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ + +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) \ + || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x40U) ? \ + ((ADDRESS) <= 0x0800FFFFU) : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? \ + ((ADDRESS) <= 0x08007FFFU) : ((ADDRESS) <= 0x08003FFFU)))) +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx || */ + /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +#if defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) \ + || defined(STM32F373xC) || defined(STM32F378xx) +#define IS_FLASH_NB_PAGES(ADDRESS,NBPAGES) (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x100U) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1U <= 0x0803FFFFU) : \ + (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1U <= 0x0801FFFFU) : \ + ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1U <= 0x0800FFFFU))) +#endif /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) +#define IS_FLASH_NB_PAGES(ADDRESS,NBPAGES) ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1U <= 0x0807FFFFU) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ + +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) \ + || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define IS_FLASH_NB_PAGES(ADDRESS,NBPAGES) (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x40U) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1U <= 0x0800FFFFU) : \ + (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1U <= 0x08007FFFU) : \ + ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1U <= 0x08003FFFU))) +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx || */ + /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup FLASHEx_Exported_Types FLASHEx Exported Types + * @{ + */ +/** + * @brief FLASH Erase structure definition + */ +typedef struct +{ + uint32_t TypeErase; /*!< TypeErase: Mass erase or page erase. + This parameter can be a value of @ref FLASHEx_Type_Erase */ + + uint32_t PageAddress; /*!< PageAdress: Initial FLASH page address to erase when mass erase is disabled + This parameter must be a number between Min_Data = FLASH_BASE and Max_Data = FLASH_BANK1_END */ + + uint32_t NbPages; /*!< NbPages: Number of pagess to be erased. + This parameter must be a value between Min_Data = 1 and Max_Data = (max number of pages - value of initial page)*/ + +} FLASH_EraseInitTypeDef; + +/** + * @brief FLASH Options bytes program structure definition + */ +typedef struct +{ + uint32_t OptionType; /*!< OptionType: Option byte to be configured. + This parameter can be a value of @ref FLASHEx_OB_Type */ + + uint32_t WRPState; /*!< WRPState: Write protection activation or deactivation. + This parameter can be a value of @ref FLASHEx_OB_WRP_State */ + + uint32_t WRPPage; /*!< WRPPage: specifies the page(s) to be write protected + This parameter can be a value of @ref FLASHEx_OB_Write_Protection */ + + uint8_t RDPLevel; /*!< RDPLevel: Set the read protection level.. + This parameter can be a value of @ref FLASHEx_OB_Read_Protection */ + + uint8_t USERConfig; /*!< USERConfig: Program the FLASH User Option Byte: + IWDG / STOP / STDBY / BOOT1 / VDDA_ANALOG / SRAM_PARITY / SDADC12_VDD_MONITOR + This parameter can be a combination of @ref FLASHEx_OB_IWatchdog, @ref FLASHEx_OB_nRST_STOP, + @ref FLASHEx_OB_nRST_STDBY, @ref FLASHEx_OB_BOOT1, @ref FLASHEx_OB_VDDA_Analog_Monitoring, + @ref FLASHEx_OB_RAM_Parity_Check_Enable. + @if STM32F373xC + And @ref FLASHEx_OB_SDADC12_VDD_MONITOR (only for STM32F373xC & STM32F378xx devices) + @endif + @if STM32F378xx + And @ref FLASHEx_OB_SDADC12_VDD_MONITOR (only for STM32F373xC & STM32F378xx devices) + @endif + */ + + uint32_t DATAAddress; /*!< DATAAddress: Address of the option byte DATA to be programmed + This parameter can be a value of @ref FLASHEx_OB_Data_Address */ + + uint8_t DATAData; /*!< DATAData: Data to be stored in the option byte DATA + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFFU */ +} FLASH_OBProgramInitTypeDef; +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup FLASHEx_Exported_Constants FLASHEx Exported Constants + * @{ + */ + +/** @defgroup FLASHEx_Page_Size FLASHEx Page Size + * @{ + */ +#define FLASH_PAGE_SIZE 0x800 +/** + * @} + */ + +/** @defgroup FLASHEx_Type_Erase FLASH Type Erase + * @{ + */ +#define FLASH_TYPEERASE_PAGES (0x00U) /*!
© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.
+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_HAL_GPIO_H +#define __STM32F3xx_HAL_GPIO_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup GPIO + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup GPIO_Exported_Types GPIO Exported Types + * @{ + */ +/** + * @brief GPIO Init structure definition + */ +typedef struct +{ + uint32_t Pin; /*!< Specifies the GPIO pins to be configured. + This parameter can be any value of @ref GPIO_pins */ + + uint32_t Mode; /*!< Specifies the operating mode for the selected pins. + This parameter can be a value of @ref GPIO_mode */ + + uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins. + This parameter can be a value of @ref GPIO_pull */ + + uint32_t Speed; /*!< Specifies the speed for the selected pins. + This parameter can be a value of @ref GPIO_speed */ + + uint32_t Alternate; /*!< Peripheral to be connected to the selected pins + This parameter can be a value of @ref GPIOEx_Alternate_function_selection */ +}GPIO_InitTypeDef; + +/** + * @brief GPIO Bit SET and Bit RESET enumeration + */ +typedef enum +{ + GPIO_PIN_RESET = 0U, + GPIO_PIN_SET +}GPIO_PinState; +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup GPIO_Exported_Constants GPIO Exported Constants + * @{ + */ +/** @defgroup GPIO_pins GPIO pins + * @{ + */ +#define GPIO_PIN_0 ((uint16_t)0x0001U) /* Pin 0 selected */ +#define GPIO_PIN_1 ((uint16_t)0x0002U) /* Pin 1 selected */ +#define GPIO_PIN_2 ((uint16_t)0x0004U) /* Pin 2 selected */ +#define GPIO_PIN_3 ((uint16_t)0x0008U) /* Pin 3 selected */ +#define GPIO_PIN_4 ((uint16_t)0x0010U) /* Pin 4 selected */ +#define GPIO_PIN_5 ((uint16_t)0x0020U) /* Pin 5 selected */ +#define GPIO_PIN_6 ((uint16_t)0x0040U) /* Pin 6 selected */ +#define GPIO_PIN_7 ((uint16_t)0x0080U) /* Pin 7 selected */ +#define GPIO_PIN_8 ((uint16_t)0x0100U) /* Pin 8 selected */ +#define GPIO_PIN_9 ((uint16_t)0x0200U) /* Pin 9 selected */ +#define GPIO_PIN_10 ((uint16_t)0x0400U) /* Pin 10 selected */ +#define GPIO_PIN_11 ((uint16_t)0x0800U) /* Pin 11 selected */ +#define GPIO_PIN_12 ((uint16_t)0x1000U) /* Pin 12 selected */ +#define GPIO_PIN_13 ((uint16_t)0x2000U) /* Pin 13 selected */ +#define GPIO_PIN_14 ((uint16_t)0x4000U) /* Pin 14 selected */ +#define GPIO_PIN_15 ((uint16_t)0x8000U) /* Pin 15 selected */ +#define GPIO_PIN_All ((uint16_t)0xFFFFU) /* All pins selected */ + +#define GPIO_PIN_MASK (0x0000FFFFU) /* PIN mask for assert test */ +/** + * @} + */ + +/** @defgroup GPIO_mode GPIO mode + * @brief GPIO Configuration Mode + * Elements values convention: 0x00WX00YZ + * - W : EXTI trigger detection on 3 bits + * - X : EXTI mode (IT or Event) on 2 bits + * - Y : Output type (Push Pull or Open Drain) on 1 bit + * - Z : GPIO mode (Input, Output, Alternate or Analog) on 2 bits + * @{ + */ +#define GPIO_MODE_INPUT MODE_INPUT /*!< Input Floating Mode */ +#define GPIO_MODE_OUTPUT_PP (MODE_OUTPUT | OUTPUT_PP) /*!< Output Push Pull Mode */ +#define GPIO_MODE_OUTPUT_OD (MODE_OUTPUT | OUTPUT_OD) /*!< Output Open Drain Mode */ +#define GPIO_MODE_AF_PP (MODE_AF | OUTPUT_PP) /*!< Alternate Function Push Pull Mode */ +#define GPIO_MODE_AF_OD (MODE_AF | OUTPUT_OD) /*!< Alternate Function Open Drain Mode */ + +#define GPIO_MODE_ANALOG MODE_ANALOG /*!< Analog Mode */ + +#define GPIO_MODE_IT_RISING (MODE_INPUT | EXTI_IT | TRIGGER_RISING) /*!< External Interrupt Mode with Rising edge trigger detection */ +#define GPIO_MODE_IT_FALLING (MODE_INPUT | EXTI_IT | TRIGGER_FALLING) /*!< External Interrupt Mode with Falling edge trigger detection */ +#define GPIO_MODE_IT_RISING_FALLING (MODE_INPUT | EXTI_IT | TRIGGER_RISING | TRIGGER_FALLING) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ + +#define GPIO_MODE_EVT_RISING (MODE_INPUT | EXTI_EVT | TRIGGER_RISING) /*!< External Event Mode with Rising edge trigger detection */ +#define GPIO_MODE_EVT_FALLING (MODE_INPUT | EXTI_EVT | TRIGGER_FALLING) /*!< External Event Mode with Falling edge trigger detection */ +#define GPIO_MODE_EVT_RISING_FALLING (MODE_INPUT | EXTI_EVT | TRIGGER_RISING | TRIGGER_FALLING) /*!< External Event Mode with Rising/Falling edge trigger detection */ +/** + * @} + */ + +/** @defgroup GPIO_speed GPIO speed + * @brief GPIO Output Maximum frequency + * @{ + */ +#define GPIO_SPEED_FREQ_LOW (0x00000000U) /*!< range up to 2 MHz, please refer to the product datasheet */ +#define GPIO_SPEED_FREQ_MEDIUM (0x00000001U) /*!< range 4 MHz to 10 MHz, please refer to the product datasheet */ +#define GPIO_SPEED_FREQ_HIGH (0x00000003U) /*!< range 10 MHz to 50 MHz, please refer to the product datasheet */ +/** + * @} + */ + + /** @defgroup GPIO_pull GPIO pull + * @brief GPIO Pull-Up or Pull-Down Activation + * @{ + */ +#define GPIO_NOPULL (0x00000000U) /*!< No Pull-up or Pull-down activation */ +#define GPIO_PULLUP (0x00000001U) /*!< Pull-up activation */ +#define GPIO_PULLDOWN (0x00000002U) /*!< Pull-down activation */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup GPIO_Exported_Macros GPIO Exported Macros + * @{ + */ + +/** + * @brief Check whether the specified EXTI line flag is set or not. + * @param __EXTI_LINE__ specifies the EXTI line flag to check. + * This parameter can be GPIO_PIN_x where x can be(0..15) + * @retval The new state of __EXTI_LINE__ (SET or RESET). + */ +#define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__)) + +/** + * @brief Clear the EXTI's line pending flags. + * @param __EXTI_LINE__ specifies the EXTI lines flags to clear. + * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) + * @retval None + */ +#define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__)) + +/** + * @brief Check whether the specified EXTI line is asserted or not. + * @param __EXTI_LINE__ specifies the EXTI line to check. + * This parameter can be GPIO_PIN_x where x can be(0..15) + * @retval The new state of __EXTI_LINE__ (SET or RESET). + */ +#define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__)) + +/** + * @brief Clear the EXTI's line pending bits. + * @param __EXTI_LINE__ specifies the EXTI lines to clear. + * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) + * @retval None + */ +#define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__)) + +/** + * @brief Generate a Software interrupt on selected EXTI line. + * @param __EXTI_LINE__ specifies the EXTI line to check. + * This parameter can be GPIO_PIN_x where x can be(0..15) + * @retval None + */ +#define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__)) + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup GPIO_Private_Constants GPIO Private Constants + * @{ + */ +#define GPIO_MODE_Pos 0u +#define GPIO_MODE (0x3uL << GPIO_MODE_Pos) +#define MODE_INPUT (0x0uL << GPIO_MODE_Pos) +#define MODE_OUTPUT (0x1uL << GPIO_MODE_Pos) +#define MODE_AF (0x2uL << GPIO_MODE_Pos) +#define MODE_ANALOG (0x3uL << GPIO_MODE_Pos) +#define OUTPUT_TYPE_Pos 4u +#define OUTPUT_TYPE (0x1uL << OUTPUT_TYPE_Pos) +#define OUTPUT_PP (0x0uL << OUTPUT_TYPE_Pos) +#define OUTPUT_OD (0x1uL << OUTPUT_TYPE_Pos) +#define EXTI_MODE_Pos 16u +#define EXTI_MODE (0x3uL << EXTI_MODE_Pos) +#define EXTI_IT (0x1uL << EXTI_MODE_Pos) +#define EXTI_EVT (0x2uL << EXTI_MODE_Pos) +#define TRIGGER_MODE_Pos 20u +#define TRIGGER_MODE (0x7uL << TRIGGER_MODE_Pos) +#define TRIGGER_RISING (0x1uL << TRIGGER_MODE_Pos) +#define TRIGGER_FALLING (0x2uL << TRIGGER_MODE_Pos) +#define TRIGGER_LEVEL (0x4uL << TRIGGER_MODE_Pos) +/** + * @} + */ + +/** @addtogroup GPIO_Private_Macros GPIO Private Macros + * @{ + */ +#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET)) + +#define IS_GPIO_PIN(__PIN__) (((((uint32_t)__PIN__) & GPIO_PIN_MASK) != 0x00U) &&\ + ((((uint32_t)__PIN__) & ~GPIO_PIN_MASK) == 0x00U)) + +#define IS_GPIO_MODE(__MODE__) (((__MODE__) == GPIO_MODE_INPUT) ||\ + ((__MODE__) == GPIO_MODE_OUTPUT_PP) ||\ + ((__MODE__) == GPIO_MODE_OUTPUT_OD) ||\ + ((__MODE__) == GPIO_MODE_AF_PP) ||\ + ((__MODE__) == GPIO_MODE_AF_OD) ||\ + ((__MODE__) == GPIO_MODE_IT_RISING) ||\ + ((__MODE__) == GPIO_MODE_IT_FALLING) ||\ + ((__MODE__) == GPIO_MODE_IT_RISING_FALLING) ||\ + ((__MODE__) == GPIO_MODE_EVT_RISING) ||\ + ((__MODE__) == GPIO_MODE_EVT_FALLING) ||\ + ((__MODE__) == GPIO_MODE_EVT_RISING_FALLING) ||\ + ((__MODE__) == GPIO_MODE_ANALOG)) + +#define IS_GPIO_SPEED(__SPEED__) (((__SPEED__) == GPIO_SPEED_FREQ_LOW) ||\ + ((__SPEED__) == GPIO_SPEED_FREQ_MEDIUM) ||\ + ((__SPEED__) == GPIO_SPEED_FREQ_HIGH)) + +#define IS_GPIO_PULL(__PULL__) (((__PULL__) == GPIO_NOPULL) ||\ + ((__PULL__) == GPIO_PULLUP) || \ + ((__PULL__) == GPIO_PULLDOWN)) +/** + * @} + */ + +/* Include GPIO HAL Extended module */ +#include "stm32f3xx_hal_gpio_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup GPIO_Exported_Functions GPIO Exported Functions + * @{ + */ + +/** @addtogroup GPIO_Exported_Functions_Group1 Initialization/de-initialization functions + * @brief Initialization and Configuration functions + * @{ + */ + +/* Initialization and de-initialization functions *****************************/ +void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); +void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); + +/** + * @} + */ + +/** @addtogroup GPIO_Exported_Functions_Group2 IO operation functions + * @{ + */ + +/* IO operation functions *****************************************************/ +GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); +void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin); +void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F3xx_HAL_GPIO_H */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_gpio_ex.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_gpio_ex.h new file mode 100644 index 0000000..f3b308c --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_gpio_ex.h @@ -0,0 +1,1522 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_gpio_ex.h + * @author MCD Application Team + * @brief Header file of GPIO HAL Extended module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_HAL_GPIO_EX_H +#define __STM32F3xx_HAL_GPIO_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup GPIOEx GPIOEx + * @brief GPIO Extended HAL module driver + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup GPIOEx_Exported_Constants GPIOEx Exported Constants + * @{ + */ + +/** @defgroup GPIOEx_Alternate_function_selection GPIOEx Alternate function selection + * @{ + */ + +#if defined (STM32F302xC) +/*---------------------------------- STM32F302xC ------------------------------*/ +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00U) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00U) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00U) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00U) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF1_TIM16 ((uint8_t)0x01U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF1_TIM17 ((uint8_t)0x01U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /* EVENTOUT Alternate Function mapping */ +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02U) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02U) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM15 ((uint8_t)0x02U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF2_COMP1 ((uint8_t)0x02U) /* COMP1 Alternate Function mapping */ +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /* TSC Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /* TIM15 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_TIM1 ((uint8_t)0x04U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF4_TIM16 ((uint8_t)0x04U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF4_TIM17 ((uint8_t)0x04U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04U) /* I2C2 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05U) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_I2S ((uint8_t)0x05U) /* I2S Alternate Function mapping */ +#define GPIO_AF5_I2S2ext ((uint8_t)0x05U) /* I2S2ext Alternate Function mapping */ +#define GPIO_AF5_IR ((uint8_t)0x05U) /* IR Alternate Function mapping */ +#define GPIO_AF5_UART4 ((uint8_t)0x05U) /* UART4 Alternate Function mapping */ +#define GPIO_AF5_UART5 ((uint8_t)0x05U) /* UART5 Alternate Function mapping */ +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S3ext ((uint8_t)0x06U) /* I2S3ext Alternate Function mapping */ +#define GPIO_AF6_TIM1 ((uint8_t)0x06U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF6_IR ((uint8_t)0x06U) /* IR Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07U) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07U) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07U) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_COMP6 ((uint8_t)0x07U) /* COMP6 Alternate Function mapping */ +#define GPIO_AF7_CAN ((uint8_t)0x07U) /* CAN Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_COMP1 ((uint8_t)0x08U) /* COMP1 Alternate Function mapping */ +#define GPIO_AF8_COMP2 ((uint8_t)0x08U) /* COMP2 Alternate Function mapping */ +#define GPIO_AF8_COMP4 ((uint8_t)0x08U) /* COMP4 Alternate Function mapping */ +#define GPIO_AF8_COMP6 ((uint8_t)0x08U) /* COMP6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN ((uint8_t)0x09U) /* CAN Alternate Function mapping */ +#define GPIO_AF9_TIM1 ((uint8_t)0x09U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF9_TIM15 ((uint8_t)0x09U) /* TIM15 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_TIM2 ((uint8_t)0xAU) /* TIM2 Alternate Function mapping */ +#define GPIO_AF10_TIM3 ((uint8_t)0xAU) /* TIM3 Alternate Function mapping */ +#define GPIO_AF10_TIM4 ((uint8_t)0xAU) /* TIM4 Alternate Function mapping */ +#define GPIO_AF10_TIM17 ((uint8_t)0xAU) /* TIM17 Alternate Function mapping */ +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_TIM1 ((uint8_t)0x0BU) /* TIM1 Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_TIM1 ((uint8_t)0xCU) /* TIM1 Alternate Function mapping */ + +/** + * @brief AF 14 selection + */ + +#define GPIO_AF14_USB ((uint8_t)0x0EU) /* USB Alternate Function mapping */ +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0FU) /* EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) (((AF) <= (uint8_t)0x0CU) || ((AF) == (uint8_t)0x0EU) || ((AF) == (uint8_t)0x0FU)) +/*------------------------------------------------------------------------------------------*/ +#endif /* STM32F302xC */ + +#if defined (STM32F303xC) +/*---------------------------------- STM32F303xC ------------------------------*/ +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00U) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00U) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00U) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00U) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF1_TIM16 ((uint8_t)0x01U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF1_TIM17 ((uint8_t)0x01U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /* EVENTOUT Alternate Function mapping */ +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02U) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02U) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM8 ((uint8_t)0x02U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF2_TIM15 ((uint8_t)0x02U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF2_COMP1 ((uint8_t)0x02U) /* COMP1 Alternate Function mapping */ +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /* TSC Alternate Function mapping */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_COMP7 ((uint8_t)0x03U) /* COMP7 Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /* TIM15 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_TIM1 ((uint8_t)0x04U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF4_TIM8 ((uint8_t)0x04U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF4_TIM16 ((uint8_t)0x04U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF4_TIM17 ((uint8_t)0x04U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04U) /* I2C2 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05U) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_I2S ((uint8_t)0x05U) /* I2S Alternate Function mapping */ +#define GPIO_AF5_I2S2ext ((uint8_t)0x05U) /* I2S2ext Alternate Function mapping */ +#define GPIO_AF5_TIM8 ((uint8_t)0x05U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF5_IR ((uint8_t)0x05U) /* IR Alternate Function mapping */ +#define GPIO_AF5_UART4 ((uint8_t)0x05U) /* UART4 Alternate Function mapping */ +#define GPIO_AF5_UART5 ((uint8_t)0x05U) /* UART5 Alternate Function mapping */ +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S3ext ((uint8_t)0x06U) /* I2S3ext Alternate Function mapping */ +#define GPIO_AF6_TIM1 ((uint8_t)0x06U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF6_TIM8 ((uint8_t)0x06U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF6_IR ((uint8_t)0x06U) /* IR Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07U) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07U) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07U) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_COMP3 ((uint8_t)0x07U) /* COMP3 Alternate Function mapping */ +#define GPIO_AF7_COMP5 ((uint8_t)0x07U) /* COMP5 Alternate Function mapping */ +#define GPIO_AF7_COMP6 ((uint8_t)0x07U) /* COMP6 Alternate Function mapping */ +#define GPIO_AF7_CAN ((uint8_t)0x07U) /* CAN Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_COMP1 ((uint8_t)0x08U) /* COMP1 Alternate Function mapping */ +#define GPIO_AF8_COMP2 ((uint8_t)0x08U) /* COMP2 Alternate Function mapping */ +#define GPIO_AF8_COMP3 ((uint8_t)0x08U) /* COMP3 Alternate Function mapping */ +#define GPIO_AF8_COMP4 ((uint8_t)0x08U) /* COMP4 Alternate Function mapping */ +#define GPIO_AF8_COMP5 ((uint8_t)0x08U) /* COMP5 Alternate Function mapping */ +#define GPIO_AF8_COMP6 ((uint8_t)0x08U) /* COMP6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN ((uint8_t)0x09U) /* CAN Alternate Function mapping */ +#define GPIO_AF9_TIM1 ((uint8_t)0x09U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF9_TIM8 ((uint8_t)0x09U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF9_TIM15 ((uint8_t)0x09U) /* TIM15 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_TIM2 ((uint8_t)0xAU) /* TIM2 Alternate Function mapping */ +#define GPIO_AF10_TIM3 ((uint8_t)0xAU) /* TIM3 Alternate Function mapping */ +#define GPIO_AF10_TIM4 ((uint8_t)0xAU) /* TIM4 Alternate Function mapping */ +#define GPIO_AF10_TIM8 ((uint8_t)0xAU) /* TIM8 Alternate Function mapping */ +#define GPIO_AF10_TIM17 ((uint8_t)0xAU) /* TIM17 Alternate Function mapping */ +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_TIM1 ((uint8_t)0x0BU) /* TIM1 Alternate Function mapping */ +#define GPIO_AF11_TIM8 ((uint8_t)0x0BU) /* TIM8 Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_TIM1 ((uint8_t)0xCU) /* TIM1 Alternate Function mapping */ + +/** + * @brief AF 14 selection + */ + +#define GPIO_AF14_USB ((uint8_t)0x0EU) /* USB Alternate Function mapping */ +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0FU) /* EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) (((AF) <= (uint8_t)0x0CU) || ((AF) == (uint8_t)0x0EU) || ((AF) == (uint8_t)0x0FU)) +/*------------------------------------------------------------------------------------------*/ +#endif /* STM32F303xC */ + +#if defined (STM32F303xE) +/*---------------------------------- STM32F303xE ------------------------------*/ +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00U) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00U) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00U) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00U) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF1_TIM16 ((uint8_t)0x01U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF1_TIM17 ((uint8_t)0x01U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /* EVENTOUT Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02U) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02U) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM8 ((uint8_t)0x02U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF2_TIM15 ((uint8_t)0x02U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF2_COMP1 ((uint8_t)0x02U) /* COMP1 Alternate Function mapping */ +#define GPIO_AF2_I2C3 ((uint8_t)0x02U) /* I2C3 Alternate Function mapping */ +#define GPIO_AF2_TIM20 ((uint8_t)0x02U) /* TIM20 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /* TSC Alternate Function mapping */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_COMP7 ((uint8_t)0x03U) /* COMP7 Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF3_I2C3 ((uint8_t)0x03U) /* I2C3 Alternate Function mapping */ +#define GPIO_AF3_TIM20 ((uint8_t)0x03U) /* TIM20 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_TIM1 ((uint8_t)0x04U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF4_TIM8 ((uint8_t)0x04U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF4_TIM16 ((uint8_t)0x04U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF4_TIM17 ((uint8_t)0x04U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04U) /* I2C2 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05U) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_I2S ((uint8_t)0x05U) /* I2S Alternate Function mapping */ +#define GPIO_AF5_I2S2ext ((uint8_t)0x05U) /* I2S2ext Alternate Function mapping */ +#define GPIO_AF5_TIM8 ((uint8_t)0x05U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF5_IR ((uint8_t)0x05U) /* IR Alternate Function mapping */ +#define GPIO_AF5_UART4 ((uint8_t)0x05U) /* UART4 Alternate Function mapping */ +#define GPIO_AF5_UART5 ((uint8_t)0x05U) /* UART5 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05U) /* SPI4 Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S3ext ((uint8_t)0x06U) /* I2S3ext Alternate Function mapping */ +#define GPIO_AF6_TIM1 ((uint8_t)0x06U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF6_TIM8 ((uint8_t)0x06U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF6_IR ((uint8_t)0x06U) /* IR Alternate Function mapping */ +#define GPIO_AF6_TIM20 ((uint8_t)0x06U) /* TIM20 Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07U) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07U) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07U) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_COMP3 ((uint8_t)0x07U) /* COMP3 Alternate Function mapping */ +#define GPIO_AF7_COMP5 ((uint8_t)0x07U) /* COMP5 Alternate Function mapping */ +#define GPIO_AF7_COMP6 ((uint8_t)0x07U) /* COMP6 Alternate Function mapping */ +#define GPIO_AF7_CAN ((uint8_t)0x07U) /* CAN Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_COMP1 ((uint8_t)0x08U) /* COMP1 Alternate Function mapping */ +#define GPIO_AF8_COMP2 ((uint8_t)0x08U) /* COMP2 Alternate Function mapping */ +#define GPIO_AF8_COMP3 ((uint8_t)0x08U) /* COMP3 Alternate Function mapping */ +#define GPIO_AF8_COMP4 ((uint8_t)0x08U) /* COMP4 Alternate Function mapping */ +#define GPIO_AF8_COMP5 ((uint8_t)0x08U) /* COMP5 Alternate Function mapping */ +#define GPIO_AF8_COMP6 ((uint8_t)0x08U) /* COMP6 Alternate Function mapping */ +#define GPIO_AF8_I2C3 ((uint8_t)0x08U) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN ((uint8_t)0x09U) /* CAN Alternate Function mapping */ +#define GPIO_AF9_TIM1 ((uint8_t)0x09U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF9_TIM8 ((uint8_t)0x09U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF9_TIM15 ((uint8_t)0x09U) /* TIM15 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_TIM2 ((uint8_t)0xAU) /* TIM2 Alternate Function mapping */ +#define GPIO_AF10_TIM3 ((uint8_t)0xAU) /* TIM3 Alternate Function mapping */ +#define GPIO_AF10_TIM4 ((uint8_t)0xAU) /* TIM4 Alternate Function mapping */ +#define GPIO_AF10_TIM8 ((uint8_t)0xAU) /* TIM8 Alternate Function mapping */ +#define GPIO_AF10_TIM17 ((uint8_t)0xAU) /* TIM17 Alternate Function mapping */ +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_TIM1 ((uint8_t)0x0BU) /* TIM1 Alternate Function mapping */ +#define GPIO_AF11_TIM8 ((uint8_t)0x0BU) /* TIM8 Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_TIM1 ((uint8_t)0xCU) /* TIM1 Alternate Function mapping */ +#define GPIO_AF12_FMC ((uint8_t)0xCU) /* FMC Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0xCU) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 14 selection + */ +#define GPIO_AF14_USB ((uint8_t)0x0EU) /* USB Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0FU) /* EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) (((AF) <= (uint8_t)0x0CU) || ((AF) == (uint8_t)0x0EU) || ((AF) == (uint8_t)0x0FU)) +/*------------------------------------------------------------------------------------------*/ +#endif /* STM32F303xE */ + +#if defined (STM32F302xE) +/*---------------------------------- STM32F302xE ------------------------------*/ +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00U) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00U) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00U) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00U) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF1_TIM16 ((uint8_t)0x01U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF1_TIM17 ((uint8_t)0x01U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /* EVENTOUT Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02U) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02U) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM15 ((uint8_t)0x02U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF2_COMP1 ((uint8_t)0x02U) /* COMP1 Alternate Function mapping */ +#define GPIO_AF2_I2C3 ((uint8_t)0x02U) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /* TSC Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF3_I2C3 ((uint8_t)0x03U) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_TIM1 ((uint8_t)0x04U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF4_TIM16 ((uint8_t)0x04U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF4_TIM17 ((uint8_t)0x04U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04U) /* I2C2 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05U) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_I2S ((uint8_t)0x05U) /* I2S Alternate Function mapping */ +#define GPIO_AF5_I2S2ext ((uint8_t)0x05U) /* I2S2ext Alternate Function mapping */ +#define GPIO_AF5_IR ((uint8_t)0x05U) /* IR Alternate Function mapping */ +#define GPIO_AF5_UART4 ((uint8_t)0x05U) /* UART4 Alternate Function mapping */ +#define GPIO_AF5_UART5 ((uint8_t)0x05U) /* UART5 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05U) /* SPI4 Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S3ext ((uint8_t)0x06U) /* I2S3ext Alternate Function mapping */ +#define GPIO_AF6_TIM1 ((uint8_t)0x06U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF6_IR ((uint8_t)0x06U) /* IR Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07U) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07U) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07U) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_COMP6 ((uint8_t)0x07U) /* COMP6 Alternate Function mapping */ +#define GPIO_AF7_CAN ((uint8_t)0x07U) /* CAN Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_COMP1 ((uint8_t)0x08U) /* COMP1 Alternate Function mapping */ +#define GPIO_AF8_COMP2 ((uint8_t)0x08U) /* COMP2 Alternate Function mapping */ +#define GPIO_AF8_COMP4 ((uint8_t)0x08U) /* COMP4 Alternate Function mapping */ +#define GPIO_AF8_COMP6 ((uint8_t)0x08U) /* COMP6 Alternate Function mapping */ +#define GPIO_AF8_I2C3 ((uint8_t)0x08U) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN ((uint8_t)0x09U) /* CAN Alternate Function mapping */ +#define GPIO_AF9_TIM1 ((uint8_t)0x09U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF9_TIM15 ((uint8_t)0x09U) /* TIM15 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_TIM2 ((uint8_t)0xAU) /* TIM2 Alternate Function mapping */ +#define GPIO_AF10_TIM3 ((uint8_t)0xAU) /* TIM3 Alternate Function mapping */ +#define GPIO_AF10_TIM4 ((uint8_t)0xAU) /* TIM4 Alternate Function mapping */ +#define GPIO_AF10_TIM17 ((uint8_t)0xAU) /* TIM17 Alternate Function mapping */ +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_TIM1 ((uint8_t)0x0BU) /* TIM1 Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_TIM1 ((uint8_t)0xCU) /* TIM1 Alternate Function mapping */ +#define GPIO_AF12_FMC ((uint8_t)0xCU) /* FMC Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0xCU) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 14 selection + */ +#define GPIO_AF14_USB ((uint8_t)0x0EU) /* USB Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0FU) /* EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) (((AF) <= (uint8_t)0x0CU) || ((AF) == (uint8_t)0x0EU) || ((AF) == (uint8_t)0x0FU)) +/*------------------------------------------------------------------------------------------*/ +#endif /* STM32F302xE */ + +#if defined (STM32F398xx) +/*---------------------------------- STM32F398xx ------------------------------*/ +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00U) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00U) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00U) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00U) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF1_TIM16 ((uint8_t)0x01U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF1_TIM17 ((uint8_t)0x01U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /* EVENTOUT Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02U) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02U) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM8 ((uint8_t)0x02U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF2_TIM15 ((uint8_t)0x02U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF2_COMP1 ((uint8_t)0x02U) /* COMP1 Alternate Function mapping */ +#define GPIO_AF2_I2C3 ((uint8_t)0x02U) /* I2C3 Alternate Function mapping */ +#define GPIO_AF2_TIM20 ((uint8_t)0x02U) /* TIM20 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /* TSC Alternate Function mapping */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_COMP7 ((uint8_t)0x03U) /* COMP7 Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF3_I2C3 ((uint8_t)0x03U) /* I2C3 Alternate Function mapping */ +#define GPIO_AF3_TIM20 ((uint8_t)0x03U) /* TIM20 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_TIM1 ((uint8_t)0x04U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF4_TIM8 ((uint8_t)0x04U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF4_TIM16 ((uint8_t)0x04U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF4_TIM17 ((uint8_t)0x04U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04U) /* I2C2 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05U) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_I2S ((uint8_t)0x05U) /* I2S Alternate Function mapping */ +#define GPIO_AF5_I2S2ext ((uint8_t)0x05U) /* I2S2ext Alternate Function mapping */ +#define GPIO_AF5_TIM8 ((uint8_t)0x05U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF5_IR ((uint8_t)0x05U) /* IR Alternate Function mapping */ +#define GPIO_AF5_UART4 ((uint8_t)0x05U) /* UART4 Alternate Function mapping */ +#define GPIO_AF5_UART5 ((uint8_t)0x05U) /* UART5 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05U) /* SPI4 Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S3ext ((uint8_t)0x06U) /* I2S3ext Alternate Function mapping */ +#define GPIO_AF6_TIM1 ((uint8_t)0x06U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF6_TIM8 ((uint8_t)0x06U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF6_IR ((uint8_t)0x06U) /* IR Alternate Function mapping */ +#define GPIO_AF6_TIM20 ((uint8_t)0x06U) /* TIM20 Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07U) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07U) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07U) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_COMP3 ((uint8_t)0x07U) /* COMP3 Alternate Function mapping */ +#define GPIO_AF7_COMP5 ((uint8_t)0x07U) /* COMP5 Alternate Function mapping */ +#define GPIO_AF7_COMP6 ((uint8_t)0x07U) /* COMP6 Alternate Function mapping */ +#define GPIO_AF7_CAN ((uint8_t)0x07U) /* CAN Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_COMP1 ((uint8_t)0x08U) /* COMP1 Alternate Function mapping */ +#define GPIO_AF8_COMP2 ((uint8_t)0x08U) /* COMP2 Alternate Function mapping */ +#define GPIO_AF8_COMP3 ((uint8_t)0x08U) /* COMP3 Alternate Function mapping */ +#define GPIO_AF8_COMP4 ((uint8_t)0x08U) /* COMP4 Alternate Function mapping */ +#define GPIO_AF8_COMP5 ((uint8_t)0x08U) /* COMP5 Alternate Function mapping */ +#define GPIO_AF8_COMP6 ((uint8_t)0x08U) /* COMP6 Alternate Function mapping */ +#define GPIO_AF8_I2C3 ((uint8_t)0x08U) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN ((uint8_t)0x09U) /* CAN Alternate Function mapping */ +#define GPIO_AF9_TIM1 ((uint8_t)0x09U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF9_TIM8 ((uint8_t)0x09U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF9_TIM15 ((uint8_t)0x09U) /* TIM15 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_TIM2 ((uint8_t)0xAU) /* TIM2 Alternate Function mapping */ +#define GPIO_AF10_TIM3 ((uint8_t)0xAU) /* TIM3 Alternate Function mapping */ +#define GPIO_AF10_TIM4 ((uint8_t)0xAU) /* TIM4 Alternate Function mapping */ +#define GPIO_AF10_TIM8 ((uint8_t)0xAU) /* TIM8 Alternate Function mapping */ +#define GPIO_AF10_TIM17 ((uint8_t)0xAU) /* TIM17 Alternate Function mapping */ +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_TIM1 ((uint8_t)0x0BU) /* TIM1 Alternate Function mapping */ +#define GPIO_AF11_TIM8 ((uint8_t)0x0BU) /* TIM8 Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_TIM1 ((uint8_t)0xCU) /* TIM1 Alternate Function mapping */ +#define GPIO_AF12_FMC ((uint8_t)0xCU) /* FMC Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0xCU) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0FU) /* EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) (((AF) <= (uint8_t)0x0CU) || ((AF) == (uint8_t)0x0FU)) +/*------------------------------------------------------------------------------------------*/ +#endif /* STM32F398xx */ + +#if defined (STM32F358xx) +/*---------------------------------- STM32F358xx -------------------------------------------*/ +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00U) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00U) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00U) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00U) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF1_TIM16 ((uint8_t)0x01U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF1_TIM17 ((uint8_t)0x01U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /* EVENTOUT Alternate Function mapping */ +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02U) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02U) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM8 ((uint8_t)0x02U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF2_TIM15 ((uint8_t)0x02U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF2_COMP1 ((uint8_t)0x02U) /* COMP1 Alternate Function mapping */ +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /* TSC Alternate Function mapping */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_COMP7 ((uint8_t)0x03U) /* COMP7 Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /* TIM15 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_TIM1 ((uint8_t)0x04U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF4_TIM8 ((uint8_t)0x04U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF4_TIM16 ((uint8_t)0x04U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF4_TIM17 ((uint8_t)0x04U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04U) /* I2C2 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05U) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_I2S ((uint8_t)0x05U) /* I2S Alternate Function mapping */ +#define GPIO_AF5_I2S2ext ((uint8_t)0x05U) /* I2S2ext Alternate Function mapping */ +#define GPIO_AF5_TIM8 ((uint8_t)0x05U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF5_IR ((uint8_t)0x05U) /* IR Alternate Function mapping */ +#define GPIO_AF5_UART4 ((uint8_t)0x05U) /* UART4 Alternate Function mapping */ +#define GPIO_AF5_UART5 ((uint8_t)0x05U) /* UART5 Alternate Function mapping */ +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S3ext ((uint8_t)0x06U) /* I2S3ext Alternate Function mapping */ +#define GPIO_AF6_TIM1 ((uint8_t)0x06U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF6_TIM8 ((uint8_t)0x06U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF6_IR ((uint8_t)0x06U) /* IR Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07U) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07U) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07U) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_COMP3 ((uint8_t)0x07U) /* COMP3 Alternate Function mapping */ +#define GPIO_AF7_COMP5 ((uint8_t)0x07U) /* COMP5 Alternate Function mapping */ +#define GPIO_AF7_COMP6 ((uint8_t)0x07U) /* COMP6 Alternate Function mapping */ +#define GPIO_AF7_CAN ((uint8_t)0x07U) /* CAN Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_COMP1 ((uint8_t)0x08U) /* COMP1 Alternate Function mapping */ +#define GPIO_AF8_COMP2 ((uint8_t)0x08U) /* COMP2 Alternate Function mapping */ +#define GPIO_AF8_COMP3 ((uint8_t)0x08U) /* COMP3 Alternate Function mapping */ +#define GPIO_AF8_COMP4 ((uint8_t)0x08U) /* COMP4 Alternate Function mapping */ +#define GPIO_AF8_COMP5 ((uint8_t)0x08U) /* COMP5 Alternate Function mapping */ +#define GPIO_AF8_COMP6 ((uint8_t)0x08U) /* COMP6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN ((uint8_t)0x09U) /* CAN Alternate Function mapping */ +#define GPIO_AF9_TIM1 ((uint8_t)0x09U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF9_TIM8 ((uint8_t)0x09U) /* TIM8 Alternate Function mapping */ +#define GPIO_AF9_TIM15 ((uint8_t)0x09U) /* TIM15 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_TIM2 ((uint8_t)0xAU) /* TIM2 Alternate Function mapping */ +#define GPIO_AF10_TIM3 ((uint8_t)0xAU) /* TIM3 Alternate Function mapping */ +#define GPIO_AF10_TIM4 ((uint8_t)0xAU) /* TIM4 Alternate Function mapping */ +#define GPIO_AF10_TIM8 ((uint8_t)0xAU) /* TIM8 Alternate Function mapping */ +#define GPIO_AF10_TIM17 ((uint8_t)0xAU) /* TIM17 Alternate Function mapping */ +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_TIM1 ((uint8_t)0x0BU) /* TIM1 Alternate Function mapping */ +#define GPIO_AF11_TIM8 ((uint8_t)0x0BU) /* TIM8 Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_TIM1 ((uint8_t)0xCU) /* TIM1 Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0FU) /* EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) (((AF) <= (uint8_t)0x0CU) || ((AF) == (uint8_t)0x0FU)) +/*------------------------------------------------------------------------------------------*/ +#endif /* STM32F358xx */ + +#if defined (STM32F373xC) +/*---------------------------------- STM32F373xC--------------------------------*/ +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00U) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00U) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00U) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00U) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF1_TIM16 ((uint8_t)0x01U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF1_TIM17 ((uint8_t)0x01U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /* EVENTOUT Alternate Function mapping */ +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02U) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02U) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02U) /* TIM5 Alternate Function mapping */ +#define GPIO_AF2_TIM13 ((uint8_t)0x02U) /* TIM13 Alternate Function mapping */ +#define GPIO_AF2_TIM14 ((uint8_t)0x02U) /* TIM14 Alternate Function mapping */ +#define GPIO_AF2_TIM15 ((uint8_t)0x02U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF2_TIM19 ((uint8_t)0x02U) /* TIM19 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /* TSC Alternate Function mapping */ +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04U) /* I2C2 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05U) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_IR ((uint8_t)0x05U) /* IR Alternate Function mapping */ +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI1 ((uint8_t)0x06U) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_IR ((uint8_t)0x06U) /* IR Alternate Function mapping */ +#define GPIO_AF6_CEC ((uint8_t)0x06U) /* CEC Alternate Function mapping */ +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07U) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07U) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07U) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_CAN ((uint8_t)0x07U) /* CAN Alternate Function mapping */ +#define GPIO_AF7_CEC ((uint8_t)0x07U) /* CEC Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_COMP1 ((uint8_t)0x08U) /* COMP1 Alternate Function mapping */ +#define GPIO_AF8_COMP2 ((uint8_t)0x08U) /* COMP2 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN ((uint8_t)0x09U) /* CAN Alternate Function mapping */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09U) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09U) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09U) /* TIM14 Alternate Function mapping */ +#define GPIO_AF9_TIM15 ((uint8_t)0x09U) /* TIM15 Alternate Function mapping */ +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_TIM2 ((uint8_t)0xAU) /* TIM2 Alternate Function mapping */ +#define GPIO_AF10_TIM3 ((uint8_t)0xAU) /* TIM3 Alternate Function mapping */ +#define GPIO_AF10_TIM4 ((uint8_t)0xAU) /* TIM4 Alternate Function mapping */ +#define GPIO_AF10_TIM12 ((uint8_t)0xAU) /* TIM12 Alternate Function mapping */ +#define GPIO_AF10_TIM17 ((uint8_t)0xAU) /* TIM17 Alternate Function mapping */ +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_TIM19 ((uint8_t)0x0BU) /* TIM19 Alternate Function mapping */ + + +/** + * @brief AF 14 selection + */ +#define GPIO_AF14_USB ((uint8_t)0x0EU) /* USB Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0FU) /* EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) (((AF) <= (uint8_t)0x0BU) || ((AF) == (uint8_t)0x0EU) || ((AF) == (uint8_t)0x0FU)) +/*------------------------------------------------------------------------------------------*/ +#endif /* STM32F373xC */ + + +#if defined (STM32F378xx) +/*---------------------------------------- STM32F378xx--------------------------------------*/ +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00U) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00U) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00U) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00U) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF1_TIM16 ((uint8_t)0x01U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF1_TIM17 ((uint8_t)0x01U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /* EVENTOUT Alternate Function mapping */ +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02U) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02U) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02U) /* TIM5 Alternate Function mapping */ +#define GPIO_AF2_TIM13 ((uint8_t)0x02U) /* TIM13 Alternate Function mapping */ +#define GPIO_AF2_TIM14 ((uint8_t)0x02U) /* TIM14 Alternate Function mapping */ +#define GPIO_AF2_TIM15 ((uint8_t)0x02U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF2_TIM19 ((uint8_t)0x02U) /* TIM19 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /* TSC Alternate Function mapping */ +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04U) /* I2C2 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05U) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_IR ((uint8_t)0x05U) /* IR Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI1 ((uint8_t)0x06U) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_IR ((uint8_t)0x06U) /* IR Alternate Function mapping */ +#define GPIO_AF6_CEC ((uint8_t)0x06U) /* CEC Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07U) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07U) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07U) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_CAN ((uint8_t)0x07U) /* CAN Alternate Function mapping */ +#define GPIO_AF7_CEC ((uint8_t)0x07U) /* CEC Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_COMP1 ((uint8_t)0x08U) /* COMP1 Alternate Function mapping */ +#define GPIO_AF8_COMP2 ((uint8_t)0x08U) /* COMP2 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN ((uint8_t)0x09U) /* CAN Alternate Function mapping */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09U) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09U) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09U) /* TIM14 Alternate Function mapping */ +#define GPIO_AF9_TIM15 ((uint8_t)0x09U) /* TIM15 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_TIM2 ((uint8_t)0xAU) /* TIM2 Alternate Function mapping */ +#define GPIO_AF10_TIM3 ((uint8_t)0xAU) /* TIM3 Alternate Function mapping */ +#define GPIO_AF10_TIM4 ((uint8_t)0xAU) /* TIM4 Alternate Function mapping */ +#define GPIO_AF10_TIM12 ((uint8_t)0xAU) /* TIM12 Alternate Function mapping */ +#define GPIO_AF10_TIM17 ((uint8_t)0xAU) /* TIM17 Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_TIM19 ((uint8_t)0x0BU) /* TIM19 Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0FU) /* EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) (((AF) <= (uint8_t)0x0BU) || ((AF) == (uint8_t)0x0FU)) +/*------------------------------------------------------------------------------------------*/ +#endif /* STM32F378xx */ + +#if defined (STM32F303x8) +/*---------------------------------- STM32F303x8--------------------------------*/ +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00U) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00U) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00U) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF1_TIM16 ((uint8_t)0x01U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF1_TIM17 ((uint8_t)0x01U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /* EVENTOUT Alternate Function mapping */ +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02U) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM15 ((uint8_t)0x02U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF2_TIM16 ((uint8_t)0x02U) /* TIM16 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /* TSC Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_TIM1 ((uint8_t)0x04U) /* TIM1 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05U) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_IR ((uint8_t)0x05U) /* IR Alternate Function mapping */ +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_TIM1 ((uint8_t)0x06U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF6_IR ((uint8_t)0x06U) /* IR Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07U) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07U) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07U) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_GPCOMP6 ((uint8_t)0x07U) /* GPCOMP6 Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_GPCOMP2 ((uint8_t)0x08U) /* GPCOMP2 Alternate Function mapping */ +#define GPIO_AF8_GPCOMP4 ((uint8_t)0x08U) /* GPCOMP4 Alternate Function mapping */ +#define GPIO_AF8_GPCOMP6 ((uint8_t)0x08U) /* GPCOMP6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN ((uint8_t)0x09U) /* CAN Alternate Function mapping */ +#define GPIO_AF9_TIM1 ((uint8_t)0x09U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF9_TIM15 ((uint8_t)0x09U) /* TIM15 Alternate Function mapping */ +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_TIM2 ((uint8_t)0xAU) /* TIM2 Alternate Function mapping */ +#define GPIO_AF10_TIM3 ((uint8_t)0xAU) /* TIM3 Alternate Function mapping */ +#define GPIO_AF10_TIM17 ((uint8_t)0xAU) /* TIM17 Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_TIM1 ((uint8_t)0x0BU) /* TIM1 Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_TIM1 ((uint8_t)0x0CU) /* TIM1 Alternate Function mapping */ + +/** + * @brief AF 13 selection + */ +#define GPIO_AF13_OPAMP2 ((uint8_t)0x0DU) /* OPAMP2 Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0FU) /* EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) (((AF) <= (uint8_t)0x0DU) || ((AF) == (uint8_t)0x0FU)) +/*------------------------------------------------------------------------------------------*/ +#endif /* STM32F303x8 */ + +#if defined (STM32F334x8) || defined (STM32F328xx) +/*---------------------------------- STM32F334x8/STM32F328xx -------------------------------*/ +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00U) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00U) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00U) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF1_TIM16 ((uint8_t)0x01U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF1_TIM17 ((uint8_t)0x01U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /* EVENTOUT Alternate Function mapping */ +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02U) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM15 ((uint8_t)0x02U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF2_TIM16 ((uint8_t)0x02U) /* TIM16 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /* TSC Alternate Function mapping */ +#define GPIO_AF3_HRTIM1 ((uint8_t)0x03U) /* HRTIM1 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_TIM1 ((uint8_t)0x04U) /* TIM1 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05U) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_IR ((uint8_t)0x05U) /* IR Alternate Function mapping */ +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_TIM1 ((uint8_t)0x06U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF6_IR ((uint8_t)0x06U) /* IR Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07U) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07U) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07U) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_GPCOMP6 ((uint8_t)0x07U) /* GPCOMP6 Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_GPCOMP2 ((uint8_t)0x08U) /* GPCOMP2 Alternate Function mapping */ +#define GPIO_AF8_GPCOMP4 ((uint8_t)0x08U) /* GPCOMP4 Alternate Function mapping */ +#define GPIO_AF8_GPCOMP6 ((uint8_t)0x08U) /* GPCOMP6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN ((uint8_t)0x09U) /* CAN Alternate Function mapping */ +#define GPIO_AF9_TIM1 ((uint8_t)0x09U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF9_TIM15 ((uint8_t)0x09U) /* TIM15 Alternate Function mapping */ +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_TIM2 ((uint8_t)0xAU) /* TIM2 Alternate Function mapping */ +#define GPIO_AF10_TIM3 ((uint8_t)0xAU) /* TIM3 Alternate Function mapping */ +#define GPIO_AF10_TIM17 ((uint8_t)0xAU) /* TIM17 Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_TIM1 ((uint8_t)0x0BU) /* TIM1 Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_TIM1 ((uint8_t)0x0CU) /* TIM1 Alternate Function mapping */ +#define GPIO_AF12_HRTIM1 ((uint8_t)0x0CU) /* HRTIM1 Alternate Function mapping */ + +/** + * @brief AF 13 selection + */ +#define GPIO_AF13_OPAMP2 ((uint8_t)0x0DU) /* OPAMP2 Alternate Function mapping */ +#define GPIO_AF13_HRTIM1 ((uint8_t)0x0DU) /* HRTIM1 Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0FU) /* EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) (((AF) <= (uint8_t)0x0DU) || ((AF) == (uint8_t)0x0FU)) +/*------------------------------------------------------------------------------------------*/ +#endif /* STM32F334x8 || STM32F328xx */ + +#if defined (STM32F301x8) || defined (STM32F318xx) +/*---------------------------------- STM32F301x8 / STM32F318xx ------------------------------------------*/ +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00U) /* RTC Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00U) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00U) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00U) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF1_TIM16 ((uint8_t)0x01U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF1_TIM17 ((uint8_t)0x01U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /* EVENTOUT Alternate Function mapping */ +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_I2C3 ((uint8_t)0x02U) /* I2C3 Alternate Function mapping */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM15 ((uint8_t)0x02U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02U) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /* TSC Alternate Function mapping */ +#define GPIO_AF3_I2C3 ((uint8_t)0x03U) /* I2C3 Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /* TIM15 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04U) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_TIM1 ((uint8_t)0x04U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF4_TIM16 ((uint8_t)0x04U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF4_TIM17 ((uint8_t)0x04U) /* TIM17 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05U) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_IR ((uint8_t)0x05U) /* IR Alternate Function mapping */ +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_TIM1 ((uint8_t)0x06U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF6_IR ((uint8_t)0x06U) /* IR Alternate Function mapping */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06U) /* SPI3/I2S3 Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07U) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07U) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07U) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_GPCOMP6 ((uint8_t)0x07U) /* GPCOMP6 Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_I2C3 ((uint8_t)0x08U) /* I2C3 Alternate Function mapping */ +#define GPIO_AF8_GPCOMP2 ((uint8_t)0x08U) /* GPCOMP2 Alternate Function mapping */ +#define GPIO_AF8_GPCOMP4 ((uint8_t)0x08U) /* GPCOMP4 Alternate Function mapping */ +#define GPIO_AF8_GPCOMP6 ((uint8_t)0x08U) /* GPCOMP6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_TIM1 ((uint8_t)0x09U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF9_TIM15 ((uint8_t)0x09U) /* TIM15 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_TIM2 ((uint8_t)0xAU) /* TIM2 Alternate Function mapping */ +#define GPIO_AF10_TIM17 ((uint8_t)0xAU) /* TIM17 Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_TIM1 ((uint8_t)0x0BU) /* TIM1 Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_TIM1 ((uint8_t)0x0CU) /* TIM1 Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0FU) /* EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) (((AF) <= (uint8_t)0x0CU) || ((AF) == (uint8_t)0x0FU)) +/*------------------------------------------------------------------------------------------*/ +#endif /* STM32F301x8 || STM32F318xx */ + +#if defined (STM32F302x8) +/*---------------------------------- STM32F302x8------------------------------------------*/ +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00U) /* RTC Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00U) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00U) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00U) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01U) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF1_TIM16 ((uint8_t)0x01U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF1_TIM17 ((uint8_t)0x01U) /* TIM17 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /* EVENTOUT Alternate Function mapping */ +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_I2C3 ((uint8_t)0x02U) /* I2C3 Alternate Function mapping */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM15 ((uint8_t)0x02U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02U) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /* TSC Alternate Function mapping */ +#define GPIO_AF3_I2C3 ((uint8_t)0x03U) /* I2C3 Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /* TIM15 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04U) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_TIM1 ((uint8_t)0x04U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF4_TIM16 ((uint8_t)0x04U) /* TIM16 Alternate Function mapping */ +#define GPIO_AF4_TIM17 ((uint8_t)0x04U) /* TIM17 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05U) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05U) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_IR ((uint8_t)0x05U) /* IR Alternate Function mapping */ +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_TIM1 ((uint8_t)0x06U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF6_IR ((uint8_t)0x06U) /* IR Alternate Function mapping */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06U) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06U) /* SPI3/I2S3 Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07U) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07U) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07U) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_GPCOMP6 ((uint8_t)0x07U) /* GPCOMP6 Alternate Function mapping */ +#define GPIO_AF7_CAN ((uint8_t)0x07U) /* CAN Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_I2C3 ((uint8_t)0x08U) /* I2C3 Alternate Function mapping */ +#define GPIO_AF8_GPCOMP2 ((uint8_t)0x08U) /* GPCOMP2 Alternate Function mapping */ +#define GPIO_AF8_GPCOMP4 ((uint8_t)0x08U) /* GPCOMP4 Alternate Function mapping */ +#define GPIO_AF8_GPCOMP6 ((uint8_t)0x08U) /* GPCOMP6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_TIM1 ((uint8_t)0x09U) /* TIM1 Alternate Function mapping */ +#define GPIO_AF9_TIM15 ((uint8_t)0x09U) /* TIM15 Alternate Function mapping */ +#define GPIO_AF9_CAN ((uint8_t)0x09U) /* CAN Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_TIM2 ((uint8_t)0xAU) /* TIM2 Alternate Function mapping */ +#define GPIO_AF10_TIM17 ((uint8_t)0xAU) /* TIM17 Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_TIM1 ((uint8_t)0x0BU) /* TIM1 Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_TIM1 ((uint8_t)0x0CU) /* TIM1 Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0FU) /* EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) (((AF) <= (uint8_t)0x0CU) || ((AF) == (uint8_t)0x0FU)) +/*------------------------------------------------------------------------------------------*/ +#endif /* STM32F302x8 */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup GPIOEx_Exported_Macros GPIOEx Exported Macros + * @{ + */ + +/** @defgroup GPIOEx_Get_Port_Index GPIOEx_Get Port Index +* @{ + */ +#if defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) || \ + defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) +#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U : 5U) +#endif /* STM32F303x8 || STM32F334x8 || STM32F328xx || */ + /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) || \ + defined(STM32F373xC) || defined(STM32F378xx) +#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U : 5U) +#endif /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) +#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U :\ + ((__GPIOx__) == (GPIOF))? 5U :\ + ((__GPIOx__) == (GPIOG))? 6U : 7U) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ + +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F3xx_HAL_GPIO_EX_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_i2c.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_i2c.h new file mode 100644 index 0000000..5a4500e --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_i2c.h @@ -0,0 +1,838 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_i2c.h + * @author MCD Application Team + * @brief Header file of I2C HAL module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F3xx_HAL_I2C_H +#define STM32F3xx_HAL_I2C_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup I2C + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup I2C_Exported_Types I2C Exported Types + * @{ + */ + +/** @defgroup I2C_Configuration_Structure_definition I2C Configuration Structure definition + * @brief I2C Configuration Structure definition + * @{ + */ +typedef struct +{ + uint32_t Timing; /*!< Specifies the I2C_TIMINGR_register value. + This parameter calculated by referring to I2C initialization section + in Reference manual */ + + uint32_t OwnAddress1; /*!< Specifies the first device own address. + This parameter can be a 7-bit or 10-bit address. */ + + uint32_t AddressingMode; /*!< Specifies if 7-bit or 10-bit addressing mode is selected. + This parameter can be a value of @ref I2C_ADDRESSING_MODE */ + + uint32_t DualAddressMode; /*!< Specifies if dual addressing mode is selected. + This parameter can be a value of @ref I2C_DUAL_ADDRESSING_MODE */ + + uint32_t OwnAddress2; /*!< Specifies the second device own address if dual addressing mode is selected + This parameter can be a 7-bit address. */ + + uint32_t OwnAddress2Masks; /*!< Specifies the acknowledge mask address second device own address if dual addressing + mode is selected. + This parameter can be a value of @ref I2C_OWN_ADDRESS2_MASKS */ + + uint32_t GeneralCallMode; /*!< Specifies if general call mode is selected. + This parameter can be a value of @ref I2C_GENERAL_CALL_ADDRESSING_MODE */ + + uint32_t NoStretchMode; /*!< Specifies if nostretch mode is selected. + This parameter can be a value of @ref I2C_NOSTRETCH_MODE */ + +} I2C_InitTypeDef; + +/** + * @} + */ + +/** @defgroup HAL_state_structure_definition HAL state structure definition + * @brief HAL State structure definition + * @note HAL I2C State value coding follow below described bitmap :\n + * b7-b6 Error information\n + * 00 : No Error\n + * 01 : Abort (Abort user request on going)\n + * 10 : Timeout\n + * 11 : Error\n + * b5 Peripheral initialization status\n + * 0 : Reset (peripheral not initialized)\n + * 1 : Init done (peripheral initialized and ready to use. HAL I2C Init function called)\n + * b4 (not used)\n + * x : Should be set to 0\n + * b3\n + * 0 : Ready or Busy (No Listen mode ongoing)\n + * 1 : Listen (peripheral in Address Listen Mode)\n + * b2 Intrinsic process state\n + * 0 : Ready\n + * 1 : Busy (peripheral busy with some configuration or internal operations)\n + * b1 Rx state\n + * 0 : Ready (no Rx operation ongoing)\n + * 1 : Busy (Rx operation ongoing)\n + * b0 Tx state\n + * 0 : Ready (no Tx operation ongoing)\n + * 1 : Busy (Tx operation ongoing) + * @{ + */ +typedef enum +{ + HAL_I2C_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized */ + HAL_I2C_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use */ + HAL_I2C_STATE_BUSY = 0x24U, /*!< An internal process is ongoing */ + HAL_I2C_STATE_BUSY_TX = 0x21U, /*!< Data Transmission process is ongoing */ + HAL_I2C_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing */ + HAL_I2C_STATE_LISTEN = 0x28U, /*!< Address Listen Mode is ongoing */ + HAL_I2C_STATE_BUSY_TX_LISTEN = 0x29U, /*!< Address Listen Mode and Data Transmission + process is ongoing */ + HAL_I2C_STATE_BUSY_RX_LISTEN = 0x2AU, /*!< Address Listen Mode and Data Reception + process is ongoing */ + HAL_I2C_STATE_ABORT = 0x60U, /*!< Abort user request ongoing */ + HAL_I2C_STATE_TIMEOUT = 0xA0U, /*!< Timeout state */ + HAL_I2C_STATE_ERROR = 0xE0U /*!< Error */ + +} HAL_I2C_StateTypeDef; + +/** + * @} + */ + +/** @defgroup HAL_mode_structure_definition HAL mode structure definition + * @brief HAL Mode structure definition + * @note HAL I2C Mode value coding follow below described bitmap :\n + * b7 (not used)\n + * x : Should be set to 0\n + * b6\n + * 0 : None\n + * 1 : Memory (HAL I2C communication is in Memory Mode)\n + * b5\n + * 0 : None\n + * 1 : Slave (HAL I2C communication is in Slave Mode)\n + * b4\n + * 0 : None\n + * 1 : Master (HAL I2C communication is in Master Mode)\n + * b3-b2-b1-b0 (not used)\n + * xxxx : Should be set to 0000 + * @{ + */ +typedef enum +{ + HAL_I2C_MODE_NONE = 0x00U, /*!< No I2C communication on going */ + HAL_I2C_MODE_MASTER = 0x10U, /*!< I2C communication is in Master Mode */ + HAL_I2C_MODE_SLAVE = 0x20U, /*!< I2C communication is in Slave Mode */ + HAL_I2C_MODE_MEM = 0x40U /*!< I2C communication is in Memory Mode */ + +} HAL_I2C_ModeTypeDef; + +/** + * @} + */ + +/** @defgroup I2C_Error_Code_definition I2C Error Code definition + * @brief I2C Error Code definition + * @{ + */ +#define HAL_I2C_ERROR_NONE (0x00000000U) /*!< No error */ +#define HAL_I2C_ERROR_BERR (0x00000001U) /*!< BERR error */ +#define HAL_I2C_ERROR_ARLO (0x00000002U) /*!< ARLO error */ +#define HAL_I2C_ERROR_AF (0x00000004U) /*!< ACKF error */ +#define HAL_I2C_ERROR_OVR (0x00000008U) /*!< OVR error */ +#define HAL_I2C_ERROR_DMA (0x00000010U) /*!< DMA transfer error */ +#define HAL_I2C_ERROR_TIMEOUT (0x00000020U) /*!< Timeout error */ +#define HAL_I2C_ERROR_SIZE (0x00000040U) /*!< Size Management error */ +#define HAL_I2C_ERROR_DMA_PARAM (0x00000080U) /*!< DMA Parameter Error */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +#define HAL_I2C_ERROR_INVALID_CALLBACK (0x00000100U) /*!< Invalid Callback error */ +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +#define HAL_I2C_ERROR_INVALID_PARAM (0x00000200U) /*!< Invalid Parameters error */ +/** + * @} + */ + +/** @defgroup I2C_handle_Structure_definition I2C handle Structure definition + * @brief I2C handle Structure definition + * @{ + */ +typedef struct __I2C_HandleTypeDef +{ + I2C_TypeDef *Instance; /*!< I2C registers base address */ + + I2C_InitTypeDef Init; /*!< I2C communication parameters */ + + uint8_t *pBuffPtr; /*!< Pointer to I2C transfer buffer */ + + uint16_t XferSize; /*!< I2C transfer size */ + + __IO uint16_t XferCount; /*!< I2C transfer counter */ + + __IO uint32_t XferOptions; /*!< I2C sequantial transfer options, this parameter can + be a value of @ref I2C_XFEROPTIONS */ + + __IO uint32_t PreviousState; /*!< I2C communication Previous state */ + + HAL_StatusTypeDef(*XferISR)(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources); + /*!< I2C transfer IRQ handler function pointer */ + + DMA_HandleTypeDef *hdmatx; /*!< I2C Tx DMA handle parameters */ + + DMA_HandleTypeDef *hdmarx; /*!< I2C Rx DMA handle parameters */ + + HAL_LockTypeDef Lock; /*!< I2C locking object */ + + __IO HAL_I2C_StateTypeDef State; /*!< I2C communication state */ + + __IO HAL_I2C_ModeTypeDef Mode; /*!< I2C communication mode */ + + __IO uint32_t ErrorCode; /*!< I2C Error code */ + + __IO uint32_t AddrEventCount; /*!< I2C Address Event counter */ + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + void (* MasterTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Master Tx Transfer completed callback */ + void (* MasterRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Master Rx Transfer completed callback */ + void (* SlaveTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Slave Tx Transfer completed callback */ + void (* SlaveRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Slave Rx Transfer completed callback */ + void (* ListenCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Listen Complete callback */ + void (* MemTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Memory Tx Transfer completed callback */ + void (* MemRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Memory Rx Transfer completed callback */ + void (* ErrorCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Error callback */ + void (* AbortCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Abort callback */ + + void (* AddrCallback)(struct __I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode); + /*!< I2C Slave Address Match callback */ + + void (* MspInitCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Msp Init callback */ + void (* MspDeInitCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Msp DeInit callback */ + +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +} I2C_HandleTypeDef; + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +/** + * @brief HAL I2C Callback ID enumeration definition + */ +typedef enum +{ + HAL_I2C_MASTER_TX_COMPLETE_CB_ID = 0x00U, /*!< I2C Master Tx Transfer completed callback ID */ + HAL_I2C_MASTER_RX_COMPLETE_CB_ID = 0x01U, /*!< I2C Master Rx Transfer completed callback ID */ + HAL_I2C_SLAVE_TX_COMPLETE_CB_ID = 0x02U, /*!< I2C Slave Tx Transfer completed callback ID */ + HAL_I2C_SLAVE_RX_COMPLETE_CB_ID = 0x03U, /*!< I2C Slave Rx Transfer completed callback ID */ + HAL_I2C_LISTEN_COMPLETE_CB_ID = 0x04U, /*!< I2C Listen Complete callback ID */ + HAL_I2C_MEM_TX_COMPLETE_CB_ID = 0x05U, /*!< I2C Memory Tx Transfer callback ID */ + HAL_I2C_MEM_RX_COMPLETE_CB_ID = 0x06U, /*!< I2C Memory Rx Transfer completed callback ID */ + HAL_I2C_ERROR_CB_ID = 0x07U, /*!< I2C Error callback ID */ + HAL_I2C_ABORT_CB_ID = 0x08U, /*!< I2C Abort callback ID */ + + HAL_I2C_MSPINIT_CB_ID = 0x09U, /*!< I2C Msp Init callback ID */ + HAL_I2C_MSPDEINIT_CB_ID = 0x0AU /*!< I2C Msp DeInit callback ID */ + +} HAL_I2C_CallbackIDTypeDef; + +/** + * @brief HAL I2C Callback pointer definition + */ +typedef void (*pI2C_CallbackTypeDef)(I2C_HandleTypeDef *hi2c); +/*!< pointer to an I2C callback function */ +typedef void (*pI2C_AddrCallbackTypeDef)(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, + uint16_t AddrMatchCode); +/*!< pointer to an I2C Address Match callback function */ + +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +/** + * @} + */ + +/** + * @} + */ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup I2C_Exported_Constants I2C Exported Constants + * @{ + */ + +/** @defgroup I2C_XFEROPTIONS I2C Sequential Transfer Options + * @{ + */ +#define I2C_FIRST_FRAME ((uint32_t)I2C_SOFTEND_MODE) +#define I2C_FIRST_AND_NEXT_FRAME ((uint32_t)(I2C_RELOAD_MODE | I2C_SOFTEND_MODE)) +#define I2C_NEXT_FRAME ((uint32_t)(I2C_RELOAD_MODE | I2C_SOFTEND_MODE)) +#define I2C_FIRST_AND_LAST_FRAME ((uint32_t)I2C_AUTOEND_MODE) +#define I2C_LAST_FRAME ((uint32_t)I2C_AUTOEND_MODE) +#define I2C_LAST_FRAME_NO_STOP ((uint32_t)I2C_SOFTEND_MODE) + +/* List of XferOptions in usage of : + * 1- Restart condition in all use cases (direction change or not) + */ +#define I2C_OTHER_FRAME (0x000000AAU) +#define I2C_OTHER_AND_LAST_FRAME (0x0000AA00U) +/** + * @} + */ + +/** @defgroup I2C_ADDRESSING_MODE I2C Addressing Mode + * @{ + */ +#define I2C_ADDRESSINGMODE_7BIT (0x00000001U) +#define I2C_ADDRESSINGMODE_10BIT (0x00000002U) +/** + * @} + */ + +/** @defgroup I2C_DUAL_ADDRESSING_MODE I2C Dual Addressing Mode + * @{ + */ +#define I2C_DUALADDRESS_DISABLE (0x00000000U) +#define I2C_DUALADDRESS_ENABLE I2C_OAR2_OA2EN +/** + * @} + */ + +/** @defgroup I2C_OWN_ADDRESS2_MASKS I2C Own Address2 Masks + * @{ + */ +#define I2C_OA2_NOMASK ((uint8_t)0x00U) +#define I2C_OA2_MASK01 ((uint8_t)0x01U) +#define I2C_OA2_MASK02 ((uint8_t)0x02U) +#define I2C_OA2_MASK03 ((uint8_t)0x03U) +#define I2C_OA2_MASK04 ((uint8_t)0x04U) +#define I2C_OA2_MASK05 ((uint8_t)0x05U) +#define I2C_OA2_MASK06 ((uint8_t)0x06U) +#define I2C_OA2_MASK07 ((uint8_t)0x07U) +/** + * @} + */ + +/** @defgroup I2C_GENERAL_CALL_ADDRESSING_MODE I2C General Call Addressing Mode + * @{ + */ +#define I2C_GENERALCALL_DISABLE (0x00000000U) +#define I2C_GENERALCALL_ENABLE I2C_CR1_GCEN +/** + * @} + */ + +/** @defgroup I2C_NOSTRETCH_MODE I2C No-Stretch Mode + * @{ + */ +#define I2C_NOSTRETCH_DISABLE (0x00000000U) +#define I2C_NOSTRETCH_ENABLE I2C_CR1_NOSTRETCH +/** + * @} + */ + +/** @defgroup I2C_MEMORY_ADDRESS_SIZE I2C Memory Address Size + * @{ + */ +#define I2C_MEMADD_SIZE_8BIT (0x00000001U) +#define I2C_MEMADD_SIZE_16BIT (0x00000002U) +/** + * @} + */ + +/** @defgroup I2C_XFERDIRECTION I2C Transfer Direction Master Point of View + * @{ + */ +#define I2C_DIRECTION_TRANSMIT (0x00000000U) +#define I2C_DIRECTION_RECEIVE (0x00000001U) +/** + * @} + */ + +/** @defgroup I2C_RELOAD_END_MODE I2C Reload End Mode + * @{ + */ +#define I2C_RELOAD_MODE I2C_CR2_RELOAD +#define I2C_AUTOEND_MODE I2C_CR2_AUTOEND +#define I2C_SOFTEND_MODE (0x00000000U) +/** + * @} + */ + +/** @defgroup I2C_START_STOP_MODE I2C Start or Stop Mode + * @{ + */ +#define I2C_NO_STARTSTOP (0x00000000U) +#define I2C_GENERATE_STOP (uint32_t)(0x80000000U | I2C_CR2_STOP) +#define I2C_GENERATE_START_READ (uint32_t)(0x80000000U | I2C_CR2_START | I2C_CR2_RD_WRN) +#define I2C_GENERATE_START_WRITE (uint32_t)(0x80000000U | I2C_CR2_START) +/** + * @} + */ + +/** @defgroup I2C_Interrupt_configuration_definition I2C Interrupt configuration definition + * @brief I2C Interrupt definition + * Elements values convention: 0xXXXXXXXX + * - XXXXXXXX : Interrupt control mask + * @{ + */ +#define I2C_IT_ERRI I2C_CR1_ERRIE +#define I2C_IT_TCI I2C_CR1_TCIE +#define I2C_IT_STOPI I2C_CR1_STOPIE +#define I2C_IT_NACKI I2C_CR1_NACKIE +#define I2C_IT_ADDRI I2C_CR1_ADDRIE +#define I2C_IT_RXI I2C_CR1_RXIE +#define I2C_IT_TXI I2C_CR1_TXIE +/** + * @} + */ + +/** @defgroup I2C_Flag_definition I2C Flag definition + * @{ + */ +#define I2C_FLAG_TXE I2C_ISR_TXE +#define I2C_FLAG_TXIS I2C_ISR_TXIS +#define I2C_FLAG_RXNE I2C_ISR_RXNE +#define I2C_FLAG_ADDR I2C_ISR_ADDR +#define I2C_FLAG_AF I2C_ISR_NACKF +#define I2C_FLAG_STOPF I2C_ISR_STOPF +#define I2C_FLAG_TC I2C_ISR_TC +#define I2C_FLAG_TCR I2C_ISR_TCR +#define I2C_FLAG_BERR I2C_ISR_BERR +#define I2C_FLAG_ARLO I2C_ISR_ARLO +#define I2C_FLAG_OVR I2C_ISR_OVR +#define I2C_FLAG_PECERR I2C_ISR_PECERR +#define I2C_FLAG_TIMEOUT I2C_ISR_TIMEOUT +#define I2C_FLAG_ALERT I2C_ISR_ALERT +#define I2C_FLAG_BUSY I2C_ISR_BUSY +#define I2C_FLAG_DIR I2C_ISR_DIR +/** + * @} + */ + +/** + * @} + */ + +/* Exported macros -----------------------------------------------------------*/ + +/** @defgroup I2C_Exported_Macros I2C Exported Macros + * @{ + */ + +/** @brief Reset I2C handle state. + * @param __HANDLE__ specifies the I2C Handle. + * @retval None + */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +#define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) do{ \ + (__HANDLE__)->State = HAL_I2C_STATE_RESET; \ + (__HANDLE__)->MspInitCallback = NULL; \ + (__HANDLE__)->MspDeInitCallback = NULL; \ + } while(0) +#else +#define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_I2C_STATE_RESET) +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + +/** @brief Enable the specified I2C interrupt. + * @param __HANDLE__ specifies the I2C Handle. + * @param __INTERRUPT__ specifies the interrupt source to enable. + * This parameter can be one of the following values: + * @arg @ref I2C_IT_ERRI Errors interrupt enable + * @arg @ref I2C_IT_TCI Transfer complete interrupt enable + * @arg @ref I2C_IT_STOPI STOP detection interrupt enable + * @arg @ref I2C_IT_NACKI NACK received interrupt enable + * @arg @ref I2C_IT_ADDRI Address match interrupt enable + * @arg @ref I2C_IT_RXI RX interrupt enable + * @arg @ref I2C_IT_TXI TX interrupt enable + * + * @retval None + */ +#define __HAL_I2C_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR1 |= (__INTERRUPT__)) + +/** @brief Disable the specified I2C interrupt. + * @param __HANDLE__ specifies the I2C Handle. + * @param __INTERRUPT__ specifies the interrupt source to disable. + * This parameter can be one of the following values: + * @arg @ref I2C_IT_ERRI Errors interrupt enable + * @arg @ref I2C_IT_TCI Transfer complete interrupt enable + * @arg @ref I2C_IT_STOPI STOP detection interrupt enable + * @arg @ref I2C_IT_NACKI NACK received interrupt enable + * @arg @ref I2C_IT_ADDRI Address match interrupt enable + * @arg @ref I2C_IT_RXI RX interrupt enable + * @arg @ref I2C_IT_TXI TX interrupt enable + * + * @retval None + */ +#define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR1 &= (~(__INTERRUPT__))) + +/** @brief Check whether the specified I2C interrupt source is enabled or not. + * @param __HANDLE__ specifies the I2C Handle. + * @param __INTERRUPT__ specifies the I2C interrupt source to check. + * This parameter can be one of the following values: + * @arg @ref I2C_IT_ERRI Errors interrupt enable + * @arg @ref I2C_IT_TCI Transfer complete interrupt enable + * @arg @ref I2C_IT_STOPI STOP detection interrupt enable + * @arg @ref I2C_IT_NACKI NACK received interrupt enable + * @arg @ref I2C_IT_ADDRI Address match interrupt enable + * @arg @ref I2C_IT_RXI RX interrupt enable + * @arg @ref I2C_IT_TXI TX interrupt enable + * + * @retval The new state of __INTERRUPT__ (SET or RESET). + */ +#define __HAL_I2C_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR1 & \ + (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) + +/** @brief Check whether the specified I2C flag is set or not. + * @param __HANDLE__ specifies the I2C Handle. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg @ref I2C_FLAG_TXE Transmit data register empty + * @arg @ref I2C_FLAG_TXIS Transmit interrupt status + * @arg @ref I2C_FLAG_RXNE Receive data register not empty + * @arg @ref I2C_FLAG_ADDR Address matched (slave mode) + * @arg @ref I2C_FLAG_AF Acknowledge failure received flag + * @arg @ref I2C_FLAG_STOPF STOP detection flag + * @arg @ref I2C_FLAG_TC Transfer complete (master mode) + * @arg @ref I2C_FLAG_TCR Transfer complete reload + * @arg @ref I2C_FLAG_BERR Bus error + * @arg @ref I2C_FLAG_ARLO Arbitration lost + * @arg @ref I2C_FLAG_OVR Overrun/Underrun + * @arg @ref I2C_FLAG_PECERR PEC error in reception + * @arg @ref I2C_FLAG_TIMEOUT Timeout or Tlow detection flag + * @arg @ref I2C_FLAG_ALERT SMBus alert + * @arg @ref I2C_FLAG_BUSY Bus busy + * @arg @ref I2C_FLAG_DIR Transfer direction (slave mode) + * + * @retval The new state of __FLAG__ (SET or RESET). + */ +#define I2C_FLAG_MASK (0x0001FFFFU) +#define __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->ISR) & \ + (__FLAG__)) == (__FLAG__)) ? SET : RESET) + +/** @brief Clear the I2C pending flags which are cleared by writing 1 in a specific bit. + * @param __HANDLE__ specifies the I2C Handle. + * @param __FLAG__ specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg @ref I2C_FLAG_TXE Transmit data register empty + * @arg @ref I2C_FLAG_ADDR Address matched (slave mode) + * @arg @ref I2C_FLAG_AF Acknowledge failure received flag + * @arg @ref I2C_FLAG_STOPF STOP detection flag + * @arg @ref I2C_FLAG_BERR Bus error + * @arg @ref I2C_FLAG_ARLO Arbitration lost + * @arg @ref I2C_FLAG_OVR Overrun/Underrun + * @arg @ref I2C_FLAG_PECERR PEC error in reception + * @arg @ref I2C_FLAG_TIMEOUT Timeout or Tlow detection flag + * @arg @ref I2C_FLAG_ALERT SMBus alert + * + * @retval None + */ +#define __HAL_I2C_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__FLAG__) == I2C_FLAG_TXE) ? \ + ((__HANDLE__)->Instance->ISR |= (__FLAG__)) : \ + ((__HANDLE__)->Instance->ICR = (__FLAG__))) + +/** @brief Enable the specified I2C peripheral. + * @param __HANDLE__ specifies the I2C Handle. + * @retval None + */ +#define __HAL_I2C_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE)) + +/** @brief Disable the specified I2C peripheral. + * @param __HANDLE__ specifies the I2C Handle. + * @retval None + */ +#define __HAL_I2C_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE)) + +/** @brief Generate a Non-Acknowledge I2C peripheral in Slave mode. + * @param __HANDLE__ specifies the I2C Handle. + * @retval None + */ +#define __HAL_I2C_GENERATE_NACK(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR2, I2C_CR2_NACK)) +/** + * @} + */ + +/* Include I2C HAL Extended module */ +#include "stm32f3xx_hal_i2c_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup I2C_Exported_Functions + * @{ + */ + +/** @addtogroup I2C_Exported_Functions_Group1 Initialization and de-initialization functions + * @{ + */ +/* Initialization and de-initialization functions******************************/ +HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c); +HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c); + +/* Callbacks Register/UnRegister functions ***********************************/ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +HAL_StatusTypeDef HAL_I2C_RegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID, + pI2C_CallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_I2C_UnRegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID); + +HAL_StatusTypeDef HAL_I2C_RegisterAddrCallback(I2C_HandleTypeDef *hi2c, pI2C_AddrCallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_I2C_UnRegisterAddrCallback(I2C_HandleTypeDef *hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +/** + * @} + */ + +/** @addtogroup I2C_Exported_Functions_Group2 Input and Output operation functions + * @{ + */ +/* IO operation functions ****************************************************/ +/******* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, + uint32_t Timeout); + +/******* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size); + +HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c); +HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c); +HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress); + +/******* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size); + +HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions); +/** + * @} + */ + +/** @addtogroup I2C_IRQ_Handler_and_Callbacks IRQ Handler and Callbacks + * @{ + */ +/******* I2C IRQHandler and Callbacks used in non blocking modes (Interrupt and DMA) */ +void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c); +void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode); +void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c); +/** + * @} + */ + +/** @addtogroup I2C_Exported_Functions_Group3 Peripheral State, Mode and Error functions + * @{ + */ +/* Peripheral State, Mode and Error functions *********************************/ +HAL_I2C_StateTypeDef HAL_I2C_GetState(I2C_HandleTypeDef *hi2c); +HAL_I2C_ModeTypeDef HAL_I2C_GetMode(I2C_HandleTypeDef *hi2c); +uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c); + +/** + * @} + */ + +/** + * @} + */ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup I2C_Private_Constants I2C Private Constants + * @{ + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup I2C_Private_Macro I2C Private Macros + * @{ + */ + +#define IS_I2C_ADDRESSING_MODE(MODE) (((MODE) == I2C_ADDRESSINGMODE_7BIT) || \ + ((MODE) == I2C_ADDRESSINGMODE_10BIT)) + +#define IS_I2C_DUAL_ADDRESS(ADDRESS) (((ADDRESS) == I2C_DUALADDRESS_DISABLE) || \ + ((ADDRESS) == I2C_DUALADDRESS_ENABLE)) + +#define IS_I2C_OWN_ADDRESS2_MASK(MASK) (((MASK) == I2C_OA2_NOMASK) || \ + ((MASK) == I2C_OA2_MASK01) || \ + ((MASK) == I2C_OA2_MASK02) || \ + ((MASK) == I2C_OA2_MASK03) || \ + ((MASK) == I2C_OA2_MASK04) || \ + ((MASK) == I2C_OA2_MASK05) || \ + ((MASK) == I2C_OA2_MASK06) || \ + ((MASK) == I2C_OA2_MASK07)) + +#define IS_I2C_GENERAL_CALL(CALL) (((CALL) == I2C_GENERALCALL_DISABLE) || \ + ((CALL) == I2C_GENERALCALL_ENABLE)) + +#define IS_I2C_NO_STRETCH(STRETCH) (((STRETCH) == I2C_NOSTRETCH_DISABLE) || \ + ((STRETCH) == I2C_NOSTRETCH_ENABLE)) + +#define IS_I2C_MEMADD_SIZE(SIZE) (((SIZE) == I2C_MEMADD_SIZE_8BIT) || \ + ((SIZE) == I2C_MEMADD_SIZE_16BIT)) + +#define IS_TRANSFER_MODE(MODE) (((MODE) == I2C_RELOAD_MODE) || \ + ((MODE) == I2C_AUTOEND_MODE) || \ + ((MODE) == I2C_SOFTEND_MODE)) + +#define IS_TRANSFER_REQUEST(REQUEST) (((REQUEST) == I2C_GENERATE_STOP) || \ + ((REQUEST) == I2C_GENERATE_START_READ) || \ + ((REQUEST) == I2C_GENERATE_START_WRITE) || \ + ((REQUEST) == I2C_NO_STARTSTOP)) + +#define IS_I2C_TRANSFER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_FIRST_FRAME) || \ + ((REQUEST) == I2C_FIRST_AND_NEXT_FRAME) || \ + ((REQUEST) == I2C_NEXT_FRAME) || \ + ((REQUEST) == I2C_FIRST_AND_LAST_FRAME) || \ + ((REQUEST) == I2C_LAST_FRAME) || \ + ((REQUEST) == I2C_LAST_FRAME_NO_STOP) || \ + IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST)) + +#define IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_OTHER_FRAME) || \ + ((REQUEST) == I2C_OTHER_AND_LAST_FRAME)) + +#define I2C_RESET_CR2(__HANDLE__) ((__HANDLE__)->Instance->CR2 &= \ + (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_HEAD10R | \ + I2C_CR2_NBYTES | I2C_CR2_RELOAD | \ + I2C_CR2_RD_WRN))) + +#define I2C_GET_ADDR_MATCH(__HANDLE__) ((uint16_t)(((__HANDLE__)->Instance->ISR & I2C_ISR_ADDCODE) \ + >> 16U)) +#define I2C_GET_DIR(__HANDLE__) ((uint8_t)(((__HANDLE__)->Instance->ISR & I2C_ISR_DIR) \ + >> 16U)) +#define I2C_GET_STOP_MODE(__HANDLE__) ((__HANDLE__)->Instance->CR2 & I2C_CR2_AUTOEND) +#define I2C_GET_OWN_ADDRESS1(__HANDLE__) ((uint16_t)((__HANDLE__)->Instance->OAR1 & I2C_OAR1_OA1)) +#define I2C_GET_OWN_ADDRESS2(__HANDLE__) ((uint16_t)((__HANDLE__)->Instance->OAR2 & I2C_OAR2_OA2)) + +#define IS_I2C_OWN_ADDRESS1(ADDRESS1) ((ADDRESS1) <= 0x000003FFU) +#define IS_I2C_OWN_ADDRESS2(ADDRESS2) ((ADDRESS2) <= (uint16_t)0x00FFU) + +#define I2C_MEM_ADD_MSB(__ADDRESS__) ((uint8_t)((uint16_t)(((uint16_t)((__ADDRESS__) & \ + (uint16_t)(0xFF00U))) >> 8U))) +#define I2C_MEM_ADD_LSB(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FFU)))) + +#define I2C_GENERATE_START(__ADDMODE__,__ADDRESS__) (((__ADDMODE__) == I2C_ADDRESSINGMODE_7BIT) ? \ + (uint32_t)((((uint32_t)(__ADDRESS__) & (I2C_CR2_SADD)) | \ + (I2C_CR2_START) | (I2C_CR2_AUTOEND)) & \ + (~I2C_CR2_RD_WRN)) : \ + (uint32_t)((((uint32_t)(__ADDRESS__) & (I2C_CR2_SADD)) | \ + (I2C_CR2_ADD10) | (I2C_CR2_START)) & \ + (~I2C_CR2_RD_WRN))) + +#define I2C_CHECK_FLAG(__ISR__, __FLAG__) ((((__ISR__) & ((__FLAG__) & I2C_FLAG_MASK)) == \ + ((__FLAG__) & I2C_FLAG_MASK)) ? SET : RESET) +#define I2C_CHECK_IT_SOURCE(__CR1__, __IT__) ((((__CR1__) & (__IT__)) == (__IT__)) ? SET : RESET) +/** + * @} + */ + +/* Private Functions ---------------------------------------------------------*/ +/** @defgroup I2C_Private_Functions I2C Private Functions + * @{ + */ +/* Private functions are defined in stm32f3xx_hal_i2c.c file */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif /* STM32F3xx_HAL_I2C_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_i2c_ex.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_i2c_ex.h new file mode 100644 index 0000000..c6fcfc6 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_i2c_ex.h @@ -0,0 +1,180 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_i2c_ex.h + * @author MCD Application Team + * @brief Header file of I2C HAL Extended module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F3xx_HAL_I2C_EX_H +#define STM32F3xx_HAL_I2C_EX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup I2CEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup I2CEx_Exported_Constants I2C Extended Exported Constants + * @{ + */ + +/** @defgroup I2CEx_Analog_Filter I2C Extended Analog Filter + * @{ + */ +#define I2C_ANALOGFILTER_ENABLE 0x00000000U +#define I2C_ANALOGFILTER_DISABLE I2C_CR1_ANFOFF +/** + * @} + */ + +/** @defgroup I2CEx_FastModePlus I2C Extended Fast Mode Plus + * @{ + */ +#define I2C_FMP_NOT_SUPPORTED 0xAAAA0000U /*!< Fast Mode Plus not supported */ +#define I2C_FASTMODEPLUS_PB6 SYSCFG_CFGR1_I2C_PB6_FMP /*!< Enable Fast Mode Plus on PB6 */ +#define I2C_FASTMODEPLUS_PB7 SYSCFG_CFGR1_I2C_PB7_FMP /*!< Enable Fast Mode Plus on PB7 */ +#define I2C_FASTMODEPLUS_PB8 SYSCFG_CFGR1_I2C_PB8_FMP /*!< Enable Fast Mode Plus on PB8 */ +#define I2C_FASTMODEPLUS_PB9 SYSCFG_CFGR1_I2C_PB9_FMP /*!< Enable Fast Mode Plus on PB9 */ +#define I2C_FASTMODEPLUS_I2C1 SYSCFG_CFGR1_I2C1_FMP /*!< Enable Fast Mode Plus on I2C1 pins */ +#if defined(SYSCFG_CFGR1_I2C2_FMP) +#define I2C_FASTMODEPLUS_I2C2 SYSCFG_CFGR1_I2C2_FMP /*!< Enable Fast Mode Plus on I2C2 pins */ +#else +#define I2C_FASTMODEPLUS_I2C2 (uint32_t)(0x00000200U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus I2C2 not supported */ +#endif /* SYSCFG_CFGR1_I2C2_FMP */ +#if defined(SYSCFG_CFGR1_I2C3_FMP) +#define I2C_FASTMODEPLUS_I2C3 SYSCFG_CFGR1_I2C3_FMP /*!< Enable Fast Mode Plus on I2C3 pins */ +#else +#define I2C_FASTMODEPLUS_I2C3 (uint32_t)(0x00000400U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus I2C3 not supported */ +#endif /* SYSCFG_CFGR1_I2C3_FMP */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup I2CEx_Exported_Macros I2C Extended Exported Macros + * @{ + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup I2CEx_Exported_Functions I2C Extended Exported Functions + * @{ + */ + +/** @addtogroup I2CEx_Exported_Functions_Group1 Filter Mode Functions + * @{ + */ +/* Peripheral Control functions ************************************************/ +HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter); +HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter); +/** + * @} + */ + +/** @addtogroup I2CEx_Exported_Functions_Group2 WakeUp Mode Functions + * @{ + */ +HAL_StatusTypeDef HAL_I2CEx_EnableWakeUp(I2C_HandleTypeDef *hi2c); +HAL_StatusTypeDef HAL_I2CEx_DisableWakeUp(I2C_HandleTypeDef *hi2c); +/** + * @} + */ + +/** @addtogroup I2CEx_Exported_Functions_Group3 Fast Mode Plus Functions + * @{ + */ +void HAL_I2CEx_EnableFastModePlus(uint32_t ConfigFastModePlus); +void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus); +/** + * @} + */ + +/** + * @} + */ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup I2CEx_Private_Constants I2C Extended Private Constants + * @{ + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup I2CEx_Private_Macro I2C Extended Private Macros + * @{ + */ +#define IS_I2C_ANALOG_FILTER(FILTER) (((FILTER) == I2C_ANALOGFILTER_ENABLE) || \ + ((FILTER) == I2C_ANALOGFILTER_DISABLE)) + +#define IS_I2C_DIGITAL_FILTER(FILTER) ((FILTER) <= 0x0000000FU) + +#define IS_I2C_FASTMODEPLUS(__CONFIG__) ((((__CONFIG__) & I2C_FMP_NOT_SUPPORTED) != I2C_FMP_NOT_SUPPORTED) && \ + ((((__CONFIG__) & (I2C_FASTMODEPLUS_PB6)) == I2C_FASTMODEPLUS_PB6) || \ + (((__CONFIG__) & (I2C_FASTMODEPLUS_PB7)) == I2C_FASTMODEPLUS_PB7) || \ + (((__CONFIG__) & (I2C_FASTMODEPLUS_PB8)) == I2C_FASTMODEPLUS_PB8) || \ + (((__CONFIG__) & (I2C_FASTMODEPLUS_PB9)) == I2C_FASTMODEPLUS_PB9) || \ + (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C1)) == I2C_FASTMODEPLUS_I2C1) || \ + (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C2)) == I2C_FASTMODEPLUS_I2C2) || \ + (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C3)) == I2C_FASTMODEPLUS_I2C3))) +/** + * @} + */ + +/* Private Functions ---------------------------------------------------------*/ +/** @defgroup I2CEx_Private_Functions I2C Extended Private Functions + * @{ + */ +/* Private functions are defined in stm32f3xx_hal_i2c_ex.c file */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F3xx_HAL_I2C_EX_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_pwr.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_pwr.h new file mode 100644 index 0000000..5f6d606 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_pwr.h @@ -0,0 +1,219 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_pwr.h + * @author MCD Application Team + * @brief Header file of PWR HAL module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_HAL_PWR_H +#define __STM32F3xx_HAL_PWR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup PWR PWR + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup PWR_Exported_Constants PWR Exported Constants + * @{ + */ + +/** @defgroup PWR_WakeUp_Pins PWR WakeUp Pins + * @{ + */ + +#define PWR_WAKEUP_PIN1 ((uint32_t)PWR_CSR_EWUP1) /*!< Wakeup pin 1U */ +#define PWR_WAKEUP_PIN2 ((uint32_t)PWR_CSR_EWUP2) /*!< Wakeup pin 2U */ +#define PWR_WAKEUP_PIN3 ((uint32_t)PWR_CSR_EWUP3) /*!< Wakeup pin 3U */ +/** + * @} + */ + +/** @defgroup PWR_Regulator_state_in_STOP_mode PWR Regulator state in STOP mode + * @{ + */ +#define PWR_MAINREGULATOR_ON (0x00000000U) /*!< Voltage regulator on during STOP mode */ +#define PWR_LOWPOWERREGULATOR_ON PWR_CR_LPDS /*!< Voltage regulator in low-power mode during STOP mode */ +/** + * @} + */ + +/** @defgroup PWR_SLEEP_mode_entry PWR SLEEP mode entry + * @{ + */ +#define PWR_SLEEPENTRY_WFI ((uint8_t)0x01U) /*!< Wait For Interruption instruction to enter SLEEP mode */ +#define PWR_SLEEPENTRY_WFE ((uint8_t)0x02U) /*!< Wait For Event instruction to enter SLEEP mode */ +/** + * @} + */ + +/** @defgroup PWR_STOP_mode_entry PWR STOP mode entry + * @{ + */ +#define PWR_STOPENTRY_WFI ((uint8_t)0x01U) /*!< Wait For Interruption instruction to enter STOP mode */ +#define PWR_STOPENTRY_WFE ((uint8_t)0x02U) /*!< Wait For Event instruction to enter STOP mode */ +/** + * @} + */ + +/** @defgroup PWR_Flag PWR Flag + * @{ + */ +#define PWR_FLAG_WU PWR_CSR_WUF /*!< Wakeup event from wakeup pin or RTC alarm */ +#define PWR_FLAG_SB PWR_CSR_SBF /*!< Standby flag */ +#define PWR_FLAG_PVDO PWR_CSR_PVDO /*!< Power Voltage Detector output flag */ +#define PWR_FLAG_VREFINTRDY PWR_CSR_VREFINTRDYF /*!< VREFINT reference voltage ready */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup PWR_Exported_Macro PWR Exported Macro + * @{ + */ + +/** @brief Check PWR flag is set or not. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg PWR_FLAG_WU: Wake Up flag. This flag indicates that a wakeup event + * was received from the WKUP pin or from the RTC alarm (Alarm A + * or Alarm B), RTC Tamper event, RTC TimeStamp event or RTC Wakeup. + * An additional wakeup event is detected if the WKUP pin is enabled + * (by setting the EWUP bit) when the WKUP pin level is already high. + * @arg PWR_FLAG_SB: StandBy flag. This flag indicates that the system was + * resumed from StandBy mode. + * @arg PWR_FLAG_PVDO: PVD Output. This flag is valid only if PVD is enabled + * by the HAL_PWR_EnablePVD() function. The PVD is stopped by Standby mode + * For this reason, this bit is equal to 0 after Standby or reset + * until the PVDE bit is set. + * @arg PWR_FLAG_VREFINTRDY: This flag indicates that the internal reference + * voltage VREFINT is ready. + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_PWR_GET_FLAG(__FLAG__) ((PWR->CSR & (__FLAG__)) == (__FLAG__)) + +/** @brief Clear the PWR's pending flags. + * @param __FLAG__ specifies the flag to clear. + * This parameter can be one of the following values: + * @arg PWR_FLAG_WU: Wake Up flag + * @arg PWR_FLAG_SB: StandBy flag + */ +#define __HAL_PWR_CLEAR_FLAG(__FLAG__) (PWR->CR |= (__FLAG__) << 2U) + +/** + * @} + */ + +/* Private macros --------------------------------------------------------*/ +/** @addtogroup PWR_Private_Macros PWR Private Macros + * @{ + */ + +#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \ + ((PIN) == PWR_WAKEUP_PIN2) || \ + ((PIN) == PWR_WAKEUP_PIN3)) + +#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_ON) || \ + ((REGULATOR) == PWR_LOWPOWERREGULATOR_ON)) + +#define IS_PWR_SLEEP_ENTRY(ENTRY) (((ENTRY) == PWR_SLEEPENTRY_WFI) || ((ENTRY) == PWR_SLEEPENTRY_WFE)) + +#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || ((ENTRY) == PWR_STOPENTRY_WFE)) + +/** + * @} + */ + +/* Include PWR HAL Extended module */ +#include "stm32f3xx_hal_pwr_ex.h" + +/* Exported functions --------------------------------------------------------*/ + +/** @addtogroup PWR_Exported_Functions PWR Exported Functions + * @{ + */ + +/** @addtogroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions + * @{ + */ + +/* Initialization and de-initialization functions *****************************/ +void HAL_PWR_DeInit(void); + +/** + * @} + */ + +/** @addtogroup PWR_Exported_Functions_Group2 Peripheral Control functions + * @{ + */ + +/* Peripheral Control functions **********************************************/ +void HAL_PWR_EnableBkUpAccess(void); +void HAL_PWR_DisableBkUpAccess(void); + +/* WakeUp pins configuration functions ****************************************/ +void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx); +void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx); + +/* Low Power modes configuration functions ************************************/ +void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry); +void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry); +void HAL_PWR_EnterSTANDBYMode(void); + +void HAL_PWR_EnableSleepOnExit(void); +void HAL_PWR_DisableSleepOnExit(void); +void HAL_PWR_EnableSEVOnPend(void); +void HAL_PWR_DisableSEVOnPend(void); +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif /* __STM32F3xx_HAL_PWR_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_pwr_ex.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_pwr_ex.h new file mode 100644 index 0000000..9f5b45d --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_pwr_ex.h @@ -0,0 +1,322 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_pwr_ex.h + * @author MCD Application Team + * @brief Header file of PWR HAL Extended module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_HAL_PWR_EX_H +#define __STM32F3xx_HAL_PWR_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup PWREx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup PWREx_Exported_Types PWR Extended Exported Types + * @{ + */ +#if defined(STM32F302xE) || defined(STM32F303xE) || \ + defined(STM32F302xC) || defined(STM32F303xC) || \ + defined(STM32F303x8) || defined(STM32F334x8) || \ + defined(STM32F301x8) || defined(STM32F302x8) || \ + defined(STM32F373xC) +/** + * @brief PWR PVD configuration structure definition + */ +typedef struct +{ + uint32_t PVDLevel; /*!< PVDLevel: Specifies the PVD detection level + This parameter can be a value of @ref PWREx_PVD_detection_level */ + + uint32_t Mode; /*!< Mode: Specifies the operating mode for the selected pins. + This parameter can be a value of @ref PWREx_PVD_Mode */ +}PWR_PVDTypeDef; +#endif /* STM32F302xE || STM32F303xE || */ + /* STM32F302xC || STM32F303xC || */ + /* STM32F303x8 || STM32F334x8 || */ + /* STM32F301x8 || STM32F302x8 || */ + /* STM32F373xC */ + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup PWREx_Exported_Constants PWR Extended Exported Constants + * @{ + */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || \ + defined(STM32F302xC) || defined(STM32F303xC) || \ + defined(STM32F303x8) || defined(STM32F334x8) || \ + defined(STM32F301x8) || defined(STM32F302x8) || \ + defined(STM32F373xC) + +/** @defgroup PWREx_PVD_detection_level PWR Extended PVD detection level + * @{ + */ +#define PWR_PVDLEVEL_0 PWR_CR_PLS_LEV0 /*!< PVD threshold around 2.2 V */ +#define PWR_PVDLEVEL_1 PWR_CR_PLS_LEV1 /*!< PVD threshold around 2.3 V */ +#define PWR_PVDLEVEL_2 PWR_CR_PLS_LEV2 /*!< PVD threshold around 2.4 V */ +#define PWR_PVDLEVEL_3 PWR_CR_PLS_LEV3 /*!< PVD threshold around 2.5 V */ +#define PWR_PVDLEVEL_4 PWR_CR_PLS_LEV4 /*!< PVD threshold around 2.6 V */ +#define PWR_PVDLEVEL_5 PWR_CR_PLS_LEV5 /*!< PVD threshold around 2.7 V */ +#define PWR_PVDLEVEL_6 PWR_CR_PLS_LEV6 /*!< PVD threshold around 2.8 V */ +#define PWR_PVDLEVEL_7 PWR_CR_PLS_LEV7 /*!< PVD threshold around 2.9 V */ +/** + * @} + */ + +/** @defgroup PWREx_PVD_Mode PWR Extended PVD Mode + * @{ + */ +#define PWR_PVD_MODE_NORMAL (0x00000000U) /*!< Basic mode is used */ +#define PWR_PVD_MODE_IT_RISING (0x00010001U) /*!< External Interrupt Mode with Rising edge trigger detection */ +#define PWR_PVD_MODE_IT_FALLING (0x00010002U) /*!< External Interrupt Mode with Falling edge trigger detection */ +#define PWR_PVD_MODE_IT_RISING_FALLING (0x00010003U) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ +#define PWR_PVD_MODE_EVENT_RISING (0x00020001U) /*!< Event Mode with Rising edge trigger detection */ +#define PWR_PVD_MODE_EVENT_FALLING (0x00020002U) /*!< Event Mode with Falling edge trigger detection */ +#define PWR_PVD_MODE_EVENT_RISING_FALLING (0x00020003U) /*!< Event Mode with Rising/Falling edge trigger detection */ +/** + * @} + */ + +#define PWR_EXTI_LINE_PVD EXTI_IMR_MR16 /*!< External interrupt line 16 Connected to the PVD EXTI Line */ + +#endif /* STM32F302xE || STM32F303xE || */ + /* STM32F302xC || STM32F303xC || */ + /* STM32F303x8 || STM32F334x8 || */ + /* STM32F301x8 || STM32F302x8 || */ + /* STM32F373xC */ + +#if defined(STM32F373xC) || defined(STM32F378xx) +/** @defgroup PWREx_SDADC_ANALOGx PWR Extended SDADC ANALOGx + * @{ + */ +#define PWR_SDADC_ANALOG1 ((uint32_t)PWR_CR_ENSD1) /*!< Enable SDADC1 */ +#define PWR_SDADC_ANALOG2 ((uint32_t)PWR_CR_ENSD2) /*!< Enable SDADC2 */ +#define PWR_SDADC_ANALOG3 ((uint32_t)PWR_CR_ENSD3) /*!< Enable SDADC3 */ +/** + * @} + */ +#endif /* STM32F373xC || STM32F378xx */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup PWREx_Exported_Macros PWR Extended Exported Macros + * @{ + */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || \ + defined(STM32F302xC) || defined(STM32F303xC) || \ + defined(STM32F303x8) || defined(STM32F334x8) || \ + defined(STM32F301x8) || defined(STM32F302x8) || \ + defined(STM32F373xC) + +/** + * @brief Enable interrupt on PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_IT() (EXTI->IMR |= (PWR_EXTI_LINE_PVD)) + +/** + * @brief Disable interrupt on PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_IT() (EXTI->IMR &= ~(PWR_EXTI_LINE_PVD)) + +/** + * @brief Generate a Software interrupt on selected EXTI line. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_GENERATE_SWIT() (EXTI->SWIER |= (PWR_EXTI_LINE_PVD)) + +/** + * @brief Enable event on PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_EVENT() (EXTI->EMR |= (PWR_EXTI_LINE_PVD)) + +/** + * @brief Disable event on PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_EVENT() (EXTI->EMR &= ~(PWR_EXTI_LINE_PVD)) + +/** + * @brief Disable the PVD Extended Interrupt Rising Trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD) + +/** + * @brief Disable the PVD Extended Interrupt Falling Trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD) + +/** + * @brief Disable the PVD Extended Interrupt Rising & Falling Trigger. + * @retval None + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE() __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); + +/** + * @brief PVD EXTI line configuration: set falling edge trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE() EXTI->FTSR |= (PWR_EXTI_LINE_PVD) + +/** + * @brief PVD EXTI line configuration: set rising edge trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE() EXTI->RTSR |= (PWR_EXTI_LINE_PVD) + +/** + * @brief Enable the PVD Extended Interrupt Rising & Falling Trigger. + * @retval None + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE() __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE(); + +/** + * @brief Check whether the specified PVD EXTI interrupt flag is set or not. + * @retval EXTI PVD Line Status. + */ +#define __HAL_PWR_PVD_EXTI_GET_FLAG() (EXTI->PR & (PWR_EXTI_LINE_PVD)) + +/** + * @brief Clear the PVD EXTI flag. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_CLEAR_FLAG() (EXTI->PR = (PWR_EXTI_LINE_PVD)) + +#endif /* STM32F302xE || STM32F303xE || */ + /* STM32F302xC || STM32F303xC || */ + /* STM32F303x8 || STM32F334x8 || */ + /* STM32F301x8 || STM32F302x8 || */ + /* STM32F373xC */ + +/** + * @} + */ + +/* Private macros --------------------------------------------------------*/ +/** @addtogroup PWREx_Private_Macros PWR Extended Private Macros + * @{ + */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || \ + defined(STM32F302xC) || defined(STM32F303xC) || \ + defined(STM32F303x8) || defined(STM32F334x8) || \ + defined(STM32F301x8) || defined(STM32F302x8) || \ + defined(STM32F373xC) +#define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLEVEL_0) || ((LEVEL) == PWR_PVDLEVEL_1)|| \ + ((LEVEL) == PWR_PVDLEVEL_2) || ((LEVEL) == PWR_PVDLEVEL_3)|| \ + ((LEVEL) == PWR_PVDLEVEL_4) || ((LEVEL) == PWR_PVDLEVEL_5)|| \ + ((LEVEL) == PWR_PVDLEVEL_6) || ((LEVEL) == PWR_PVDLEVEL_7)) + +#define IS_PWR_PVD_MODE(MODE) (((MODE) == PWR_PVD_MODE_IT_RISING)|| ((MODE) == PWR_PVD_MODE_IT_FALLING) || \ + ((MODE) == PWR_PVD_MODE_IT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING) || \ + ((MODE) == PWR_PVD_MODE_EVENT_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING_FALLING) || \ + ((MODE) == PWR_PVD_MODE_NORMAL)) +#endif /* STM32F302xE || STM32F303xE || */ + /* STM32F302xC || STM32F303xC || */ + /* STM32F303x8 || STM32F334x8 || */ + /* STM32F301x8 || STM32F302x8 || */ + /* STM32F373xC */ + +#if defined(STM32F373xC) || defined(STM32F378xx) +#define IS_PWR_SDADC_ANALOG(SDADC) (((SDADC) == PWR_SDADC_ANALOG1) || \ + ((SDADC) == PWR_SDADC_ANALOG2) || \ + ((SDADC) == PWR_SDADC_ANALOG3)) +#endif /* STM32F373xC || STM32F378xx */ + + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @addtogroup PWREx_Exported_Functions PWR Extended Exported Functions + * @{ + */ + +/** @addtogroup PWREx_Exported_Functions_Group1 Peripheral Extended Control Functions + * @{ + */ +/* Peripheral Extended control functions **************************************/ +#if defined(STM32F302xE) || defined(STM32F303xE) || \ + defined(STM32F302xC) || defined(STM32F303xC) || \ + defined(STM32F303x8) || defined(STM32F334x8) || \ + defined(STM32F301x8) || defined(STM32F302x8) || \ + defined(STM32F373xC) +void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD); +void HAL_PWR_EnablePVD(void); +void HAL_PWR_DisablePVD(void); +void HAL_PWR_PVD_IRQHandler(void); +void HAL_PWR_PVDCallback(void); +#endif /* STM32F302xE || STM32F303xE || */ + /* STM32F302xC || STM32F303xC || */ + /* STM32F303x8 || STM32F334x8 || */ + /* STM32F301x8 || STM32F302x8 || */ + /* STM32F373xC */ + +#if defined(STM32F373xC) || defined(STM32F378xx) +void HAL_PWREx_EnableSDADC(uint32_t Analogx); +void HAL_PWREx_DisableSDADC(uint32_t Analogx); +#endif /* STM32F373xC || STM32F378xx */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F3xx_HAL_PWR_EX_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_rcc.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_rcc.h new file mode 100644 index 0000000..b101ef0 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_rcc.h @@ -0,0 +1,1740 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_rcc.h + * @author MCD Application Team + * @brief Header file of RCC HAL module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_HAL_RCC_H +#define __STM32F3xx_HAL_RCC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup RCC + * @{ + */ + +/** @addtogroup RCC_Private_Constants + * @{ + */ + +/** @defgroup RCC_Timeout RCC Timeout + * @{ + */ + +/* Disable Backup domain write protection state change timeout */ +#define RCC_DBP_TIMEOUT_VALUE (100U) /* 100 ms */ +/* LSE state change timeout */ +#define RCC_LSE_TIMEOUT_VALUE LSE_STARTUP_TIMEOUT +#define CLOCKSWITCH_TIMEOUT_VALUE (5000U) /* 5 s */ +#define HSE_TIMEOUT_VALUE HSE_STARTUP_TIMEOUT +#define HSI_TIMEOUT_VALUE (2U) /* 2 ms (minimum Tick + 1U) */ +#define LSI_TIMEOUT_VALUE (2U) /* 2 ms (minimum Tick + 1U) */ +#define PLL_TIMEOUT_VALUE (2U) /* 2 ms (minimum Tick + 1U) */ +/** + * @} + */ + +/** @defgroup RCC_Register_Offset Register offsets + * @{ + */ +#define RCC_OFFSET (RCC_BASE - PERIPH_BASE) +#define RCC_CR_OFFSET 0x00 +#define RCC_CFGR_OFFSET 0x04 +#define RCC_CIR_OFFSET 0x08 +#define RCC_BDCR_OFFSET 0x20 +#define RCC_CSR_OFFSET 0x24 + +/** + * @} + */ + +/** @defgroup RCC_BitAddress_AliasRegion BitAddress AliasRegion + * @brief RCC registers bit address in the alias region + * @{ + */ +#define RCC_CR_OFFSET_BB (RCC_OFFSET + RCC_CR_OFFSET) +#define RCC_CFGR_OFFSET_BB (RCC_OFFSET + RCC_CFGR_OFFSET) +#define RCC_CIR_OFFSET_BB (RCC_OFFSET + RCC_CIR_OFFSET) +#define RCC_BDCR_OFFSET_BB (RCC_OFFSET + RCC_BDCR_OFFSET) +#define RCC_CSR_OFFSET_BB (RCC_OFFSET + RCC_CSR_OFFSET) + +/* --- CR Register ---*/ +/* Alias word address of HSION bit */ +#define RCC_HSION_BIT_NUMBER POSITION_VAL(RCC_CR_HSION) +#define RCC_CR_HSION_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_HSION_BIT_NUMBER * 4U))) +/* Alias word address of HSEON bit */ +#define RCC_HSEON_BIT_NUMBER POSITION_VAL(RCC_CR_HSEON) +#define RCC_CR_HSEON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_HSEON_BIT_NUMBER * 4U))) +/* Alias word address of CSSON bit */ +#define RCC_CSSON_BIT_NUMBER POSITION_VAL(RCC_CR_CSSON) +#define RCC_CR_CSSON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_CSSON_BIT_NUMBER * 4U))) +/* Alias word address of PLLON bit */ +#define RCC_PLLON_BIT_NUMBER POSITION_VAL(RCC_CR_PLLON) +#define RCC_CR_PLLON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_PLLON_BIT_NUMBER * 4U))) + +/* --- CSR Register ---*/ +/* Alias word address of LSION bit */ +#define RCC_LSION_BIT_NUMBER POSITION_VAL(RCC_CSR_LSION) +#define RCC_CSR_LSION_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (RCC_LSION_BIT_NUMBER * 4U))) + +/* Alias word address of RMVF bit */ +#define RCC_RMVF_BIT_NUMBER POSITION_VAL(RCC_CSR_RMVF) +#define RCC_CSR_RMVF_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (RCC_RMVF_BIT_NUMBER * 4U))) + +/* --- BDCR Registers ---*/ +/* Alias word address of LSEON bit */ +#define RCC_LSEON_BIT_NUMBER POSITION_VAL(RCC_BDCR_LSEON) +#define RCC_BDCR_LSEON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_LSEON_BIT_NUMBER * 4U))) + +/* Alias word address of LSEON bit */ +#define RCC_LSEBYP_BIT_NUMBER POSITION_VAL(RCC_BDCR_LSEBYP) +#define RCC_BDCR_LSEBYP_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_LSEBYP_BIT_NUMBER * 4U))) + +/* Alias word address of RTCEN bit */ +#define RCC_RTCEN_BIT_NUMBER POSITION_VAL(RCC_BDCR_RTCEN) +#define RCC_BDCR_RTCEN_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_RTCEN_BIT_NUMBER * 4U))) + +/* Alias word address of BDRST bit */ +#define RCC_BDRST_BIT_NUMBER POSITION_VAL(RCC_BDCR_BDRST) +#define RCC_BDCR_BDRST_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_BDRST_BIT_NUMBER * 4U))) + +/** + * @} + */ + +/* CR register byte 2 (Bits[23:16]) base address */ +#define RCC_CR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + RCC_CR_OFFSET + 0x02U)) + +/* CIR register byte 1 (Bits[15:8]) base address */ +#define RCC_CIR_BYTE1_ADDRESS ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x01U)) + +/* CIR register byte 2 (Bits[23:16]) base address */ +#define RCC_CIR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x02U)) + +/* Defines used for Flags */ +#define CR_REG_INDEX ((uint8_t)1U) +#define BDCR_REG_INDEX ((uint8_t)2U) +#define CSR_REG_INDEX ((uint8_t)3U) +#define CFGR_REG_INDEX ((uint8_t)4U) + +#define RCC_FLAG_MASK ((uint8_t)0x1FU) + +/** + * @} + */ + +/** @addtogroup RCC_Private_Macros + * @{ + */ +#define IS_RCC_PLLSOURCE(__SOURCE__) (((__SOURCE__) == RCC_PLLSOURCE_HSI) || \ + ((__SOURCE__) == RCC_PLLSOURCE_HSE)) +#define IS_RCC_OSCILLATORTYPE(__OSCILLATOR__) (((__OSCILLATOR__) == RCC_OSCILLATORTYPE_NONE) || \ + (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) || \ + (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) || \ + (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) || \ + (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)) +#define IS_RCC_HSE(__HSE__) (((__HSE__) == RCC_HSE_OFF) || ((__HSE__) == RCC_HSE_ON) || \ + ((__HSE__) == RCC_HSE_BYPASS)) +#define IS_RCC_LSE(__LSE__) (((__LSE__) == RCC_LSE_OFF) || ((__LSE__) == RCC_LSE_ON) || \ + ((__LSE__) == RCC_LSE_BYPASS)) +#define IS_RCC_HSI(__HSI__) (((__HSI__) == RCC_HSI_OFF) || ((__HSI__) == RCC_HSI_ON)) +#define IS_RCC_CALIBRATION_VALUE(__VALUE__) ((__VALUE__) <= 0x1FU) +#define IS_RCC_LSI(__LSI__) (((__LSI__) == RCC_LSI_OFF) || ((__LSI__) == RCC_LSI_ON)) +#define IS_RCC_PLL(__PLL__) (((__PLL__) == RCC_PLL_NONE) || ((__PLL__) == RCC_PLL_OFF) || \ + ((__PLL__) == RCC_PLL_ON)) +#if defined(RCC_CFGR_PLLSRC_HSI_PREDIV) +#define IS_RCC_PREDIV(__PREDIV__) (((__PREDIV__) == RCC_PREDIV_DIV1) || ((__PREDIV__) == RCC_PREDIV_DIV2) || \ + ((__PREDIV__) == RCC_PREDIV_DIV3) || ((__PREDIV__) == RCC_PREDIV_DIV4) || \ + ((__PREDIV__) == RCC_PREDIV_DIV5) || ((__PREDIV__) == RCC_PREDIV_DIV6) || \ + ((__PREDIV__) == RCC_PREDIV_DIV7) || ((__PREDIV__) == RCC_PREDIV_DIV8) || \ + ((__PREDIV__) == RCC_PREDIV_DIV9) || ((__PREDIV__) == RCC_PREDIV_DIV10) || \ + ((__PREDIV__) == RCC_PREDIV_DIV11) || ((__PREDIV__) == RCC_PREDIV_DIV12) || \ + ((__PREDIV__) == RCC_PREDIV_DIV13) || ((__PREDIV__) == RCC_PREDIV_DIV14) || \ + ((__PREDIV__) == RCC_PREDIV_DIV15) || ((__PREDIV__) == RCC_PREDIV_DIV16)) +#else +#define IS_RCC_PLL_DIV(__DIV__) (((__DIV__) == RCC_PLL_DIV2) || \ + ((__DIV__) == RCC_PLL_DIV3) || ((__DIV__) == RCC_PLL_DIV4)) +#endif +#if defined(RCC_CFGR_PLLSRC_HSI_DIV2) +#define IS_RCC_HSE_PREDIV(DIV) (((DIV) == RCC_HSE_PREDIV_DIV1) || ((DIV) == RCC_HSE_PREDIV_DIV2) || \ + ((DIV) == RCC_HSE_PREDIV_DIV3) || ((DIV) == RCC_HSE_PREDIV_DIV4) || \ + ((DIV) == RCC_HSE_PREDIV_DIV5) || ((DIV) == RCC_HSE_PREDIV_DIV6) || \ + ((DIV) == RCC_HSE_PREDIV_DIV7) || ((DIV) == RCC_HSE_PREDIV_DIV8) || \ + ((DIV) == RCC_HSE_PREDIV_DIV9) || ((DIV) == RCC_HSE_PREDIV_DIV10) || \ + ((DIV) == RCC_HSE_PREDIV_DIV11) || ((DIV) == RCC_HSE_PREDIV_DIV12) || \ + ((DIV) == RCC_HSE_PREDIV_DIV13) || ((DIV) == RCC_HSE_PREDIV_DIV14) || \ + ((DIV) == RCC_HSE_PREDIV_DIV15) || ((DIV) == RCC_HSE_PREDIV_DIV16)) +#endif /* RCC_CFGR_PLLSRC_HSI_DIV2 */ + +#define IS_RCC_PLL_MUL(__MUL__) (((__MUL__) == RCC_PLL_MUL2) || ((__MUL__) == RCC_PLL_MUL3) || \ + ((__MUL__) == RCC_PLL_MUL4) || ((__MUL__) == RCC_PLL_MUL5) || \ + ((__MUL__) == RCC_PLL_MUL6) || ((__MUL__) == RCC_PLL_MUL7) || \ + ((__MUL__) == RCC_PLL_MUL8) || ((__MUL__) == RCC_PLL_MUL9) || \ + ((__MUL__) == RCC_PLL_MUL10) || ((__MUL__) == RCC_PLL_MUL11) || \ + ((__MUL__) == RCC_PLL_MUL12) || ((__MUL__) == RCC_PLL_MUL13) || \ + ((__MUL__) == RCC_PLL_MUL14) || ((__MUL__) == RCC_PLL_MUL15) || \ + ((__MUL__) == RCC_PLL_MUL16)) +#define IS_RCC_CLOCKTYPE(CLK) ((((CLK) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) || \ + (((CLK) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) || \ + (((CLK) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) || \ + (((CLK) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)) +#define IS_RCC_SYSCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_SYSCLKSOURCE_HSI) || \ + ((__SOURCE__) == RCC_SYSCLKSOURCE_HSE) || \ + ((__SOURCE__) == RCC_SYSCLKSOURCE_PLLCLK)) +#define IS_RCC_SYSCLKSOURCE_STATUS(__SOURCE__) (((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_HSI) || \ + ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_HSE) || \ + ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_PLLCLK)) +#define IS_RCC_HCLK(__HCLK__) (((__HCLK__) == RCC_SYSCLK_DIV1) || ((__HCLK__) == RCC_SYSCLK_DIV2) || \ + ((__HCLK__) == RCC_SYSCLK_DIV4) || ((__HCLK__) == RCC_SYSCLK_DIV8) || \ + ((__HCLK__) == RCC_SYSCLK_DIV16) || ((__HCLK__) == RCC_SYSCLK_DIV64) || \ + ((__HCLK__) == RCC_SYSCLK_DIV128) || ((__HCLK__) == RCC_SYSCLK_DIV256) || \ + ((__HCLK__) == RCC_SYSCLK_DIV512)) +#define IS_RCC_PCLK(__PCLK__) (((__PCLK__) == RCC_HCLK_DIV1) || ((__PCLK__) == RCC_HCLK_DIV2) || \ + ((__PCLK__) == RCC_HCLK_DIV4) || ((__PCLK__) == RCC_HCLK_DIV8) || \ + ((__PCLK__) == RCC_HCLK_DIV16)) +#define IS_RCC_MCO(__MCO__) ((__MCO__) == RCC_MCO) +#define IS_RCC_RTCCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_RTCCLKSOURCE_NO_CLK) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_LSE) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_LSI) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV32)) +#if defined(RCC_CFGR3_USART2SW) +#define IS_RCC_USART2CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_USART2CLKSOURCE_PCLK1) || \ + ((__SOURCE__) == RCC_USART2CLKSOURCE_SYSCLK) || \ + ((__SOURCE__) == RCC_USART2CLKSOURCE_LSE) || \ + ((__SOURCE__) == RCC_USART2CLKSOURCE_HSI)) +#endif /* RCC_CFGR3_USART2SW */ +#if defined(RCC_CFGR3_USART3SW) +#define IS_RCC_USART3CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_USART3CLKSOURCE_PCLK1) || \ + ((__SOURCE__) == RCC_USART3CLKSOURCE_SYSCLK) || \ + ((__SOURCE__) == RCC_USART3CLKSOURCE_LSE) || \ + ((__SOURCE__) == RCC_USART3CLKSOURCE_HSI)) +#endif /* RCC_CFGR3_USART3SW */ +#define IS_RCC_I2C1CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_I2C1CLKSOURCE_HSI) || \ + ((__SOURCE__) == RCC_I2C1CLKSOURCE_SYSCLK)) + +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup RCC_Exported_Types RCC Exported Types + * @{ + */ + +/** + * @brief RCC PLL configuration structure definition + */ +typedef struct +{ + uint32_t PLLState; /*!< PLLState: The new state of the PLL. + This parameter can be a value of @ref RCC_PLL_Config */ + + uint32_t PLLSource; /*!< PLLSource: PLL entry clock source. + This parameter must be a value of @ref RCC_PLL_Clock_Source */ + + uint32_t PLLMUL; /*!< PLLMUL: Multiplication factor for PLL VCO input clock + This parameter must be a value of @ref RCC_PLL_Multiplication_Factor*/ + +#if defined(RCC_CFGR_PLLSRC_HSI_PREDIV) + uint32_t PREDIV; /*!< PREDIV: Predivision factor for PLL VCO input clock + This parameter must be a value of @ref RCC_PLL_Prediv_Factor */ + +#endif +} RCC_PLLInitTypeDef; + +/** + * @brief RCC Internal/External Oscillator (HSE, HSI, LSE and LSI) configuration structure definition + */ +typedef struct +{ + uint32_t OscillatorType; /*!< The oscillators to be configured. + This parameter can be a value of @ref RCC_Oscillator_Type */ + + uint32_t HSEState; /*!< The new state of the HSE. + This parameter can be a value of @ref RCC_HSE_Config */ + +#if defined(RCC_CFGR_PLLSRC_HSI_DIV2) + uint32_t HSEPredivValue; /*!< The HSE predivision factor value. + This parameter can be a value of @ref RCC_PLL_HSE_Prediv_Factor */ + +#endif /* RCC_CFGR_PLLSRC_HSI_DIV2 */ + uint32_t LSEState; /*!< The new state of the LSE. + This parameter can be a value of @ref RCC_LSE_Config */ + + uint32_t HSIState; /*!< The new state of the HSI. + This parameter can be a value of @ref RCC_HSI_Config */ + + uint32_t HSICalibrationValue; /*!< The HSI calibration trimming value (default is RCC_HSICALIBRATION_DEFAULT). + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x1FU */ + + uint32_t LSIState; /*!< The new state of the LSI. + This parameter can be a value of @ref RCC_LSI_Config */ + + RCC_PLLInitTypeDef PLL; /*!< PLL structure parameters */ + +} RCC_OscInitTypeDef; + +/** + * @brief RCC System, AHB and APB busses clock configuration structure definition + */ +typedef struct +{ + uint32_t ClockType; /*!< The clock to be configured. + This parameter can be a value of @ref RCC_System_Clock_Type */ + + uint32_t SYSCLKSource; /*!< The clock source (SYSCLKS) used as system clock. + This parameter can be a value of @ref RCC_System_Clock_Source */ + + uint32_t AHBCLKDivider; /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK). + This parameter can be a value of @ref RCC_AHB_Clock_Source */ + + uint32_t APB1CLKDivider; /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK). + This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */ + + uint32_t APB2CLKDivider; /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK). + This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */ +} RCC_ClkInitTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup RCC_Exported_Constants RCC Exported Constants + * @{ + */ + +/** @defgroup RCC_PLL_Clock_Source PLL Clock Source + * @{ + */ + +#if defined(RCC_CFGR_PLLSRC_HSI_PREDIV) +#define RCC_PLLSOURCE_HSI RCC_CFGR_PLLSRC_HSI_PREDIV /*!< HSI clock selected as PLL entry clock source */ +#endif /* RCC_CFGR_PLLSRC_HSI_PREDIV */ +#if defined(RCC_CFGR_PLLSRC_HSI_DIV2) +#define RCC_PLLSOURCE_HSI RCC_CFGR_PLLSRC_HSI_DIV2 /*!< HSI clock divided by 2 selected as PLL entry clock source */ +#endif /* RCC_CFGR_PLLSRC_HSI_DIV2 */ +#define RCC_PLLSOURCE_HSE RCC_CFGR_PLLSRC_HSE_PREDIV /*!< HSE clock selected as PLL entry clock source */ + +/** + * @} + */ + +/** @defgroup RCC_Oscillator_Type Oscillator Type + * @{ + */ +#define RCC_OSCILLATORTYPE_NONE (0x00000000U) +#define RCC_OSCILLATORTYPE_HSE (0x00000001U) +#define RCC_OSCILLATORTYPE_HSI (0x00000002U) +#define RCC_OSCILLATORTYPE_LSE (0x00000004U) +#define RCC_OSCILLATORTYPE_LSI (0x00000008U) +/** + * @} + */ + +/** @defgroup RCC_HSE_Config HSE Config + * @{ + */ +#define RCC_HSE_OFF (0x00000000U) /*!< HSE clock deactivation */ +#define RCC_HSE_ON RCC_CR_HSEON /*!< HSE clock activation */ +#define RCC_HSE_BYPASS ((uint32_t)(RCC_CR_HSEBYP | RCC_CR_HSEON)) /*!< External clock source for HSE clock */ +/** + * @} + */ + +/** @defgroup RCC_LSE_Config LSE Config + * @{ + */ +#define RCC_LSE_OFF (0x00000000U) /*!< LSE clock deactivation */ +#define RCC_LSE_ON RCC_BDCR_LSEON /*!< LSE clock activation */ +#define RCC_LSE_BYPASS ((uint32_t)(RCC_BDCR_LSEBYP | RCC_BDCR_LSEON)) /*!< External clock source for LSE clock */ + +/** + * @} + */ + +/** @defgroup RCC_HSI_Config HSI Config + * @{ + */ +#define RCC_HSI_OFF (0x00000000U) /*!< HSI clock deactivation */ +#define RCC_HSI_ON RCC_CR_HSION /*!< HSI clock activation */ + +#define RCC_HSICALIBRATION_DEFAULT (0x10U) /* Default HSI calibration trimming value */ + +/** + * @} + */ + +/** @defgroup RCC_LSI_Config LSI Config + * @{ + */ +#define RCC_LSI_OFF (0x00000000U) /*!< LSI clock deactivation */ +#define RCC_LSI_ON RCC_CSR_LSION /*!< LSI clock activation */ + +/** + * @} + */ + +/** @defgroup RCC_PLL_Config PLL Config + * @{ + */ +#define RCC_PLL_NONE (0x00000000U) /*!< PLL is not configured */ +#define RCC_PLL_OFF (0x00000001U) /*!< PLL deactivation */ +#define RCC_PLL_ON (0x00000002U) /*!< PLL activation */ + +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Type System Clock Type + * @{ + */ +#define RCC_CLOCKTYPE_SYSCLK (0x00000001U) /*!< SYSCLK to configure */ +#define RCC_CLOCKTYPE_HCLK (0x00000002U) /*!< HCLK to configure */ +#define RCC_CLOCKTYPE_PCLK1 (0x00000004U) /*!< PCLK1 to configure */ +#define RCC_CLOCKTYPE_PCLK2 (0x00000008U) /*!< PCLK2 to configure */ + +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Source System Clock Source + * @{ + */ +#define RCC_SYSCLKSOURCE_HSI RCC_CFGR_SW_HSI /*!< HSI selected as system clock */ +#define RCC_SYSCLKSOURCE_HSE RCC_CFGR_SW_HSE /*!< HSE selected as system clock */ +#define RCC_SYSCLKSOURCE_PLLCLK RCC_CFGR_SW_PLL /*!< PLL selected as system clock */ + +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Source_Status System Clock Source Status + * @{ + */ +#define RCC_SYSCLKSOURCE_STATUS_HSI RCC_CFGR_SWS_HSI /*!< HSI used as system clock */ +#define RCC_SYSCLKSOURCE_STATUS_HSE RCC_CFGR_SWS_HSE /*!< HSE used as system clock */ +#define RCC_SYSCLKSOURCE_STATUS_PLLCLK RCC_CFGR_SWS_PLL /*!< PLL used as system clock */ + +/** + * @} + */ + +/** @defgroup RCC_AHB_Clock_Source AHB Clock Source + * @{ + */ +#define RCC_SYSCLK_DIV1 RCC_CFGR_HPRE_DIV1 /*!< SYSCLK not divided */ +#define RCC_SYSCLK_DIV2 RCC_CFGR_HPRE_DIV2 /*!< SYSCLK divided by 2 */ +#define RCC_SYSCLK_DIV4 RCC_CFGR_HPRE_DIV4 /*!< SYSCLK divided by 4 */ +#define RCC_SYSCLK_DIV8 RCC_CFGR_HPRE_DIV8 /*!< SYSCLK divided by 8 */ +#define RCC_SYSCLK_DIV16 RCC_CFGR_HPRE_DIV16 /*!< SYSCLK divided by 16 */ +#define RCC_SYSCLK_DIV64 RCC_CFGR_HPRE_DIV64 /*!< SYSCLK divided by 64 */ +#define RCC_SYSCLK_DIV128 RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */ +#define RCC_SYSCLK_DIV256 RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */ +#define RCC_SYSCLK_DIV512 RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */ + +/** + * @} + */ + +/** @defgroup RCC_APB1_APB2_Clock_Source APB1 APB2 Clock Source + * @{ + */ +#define RCC_HCLK_DIV1 RCC_CFGR_PPRE1_DIV1 /*!< HCLK not divided */ +#define RCC_HCLK_DIV2 RCC_CFGR_PPRE1_DIV2 /*!< HCLK divided by 2 */ +#define RCC_HCLK_DIV4 RCC_CFGR_PPRE1_DIV4 /*!< HCLK divided by 4 */ +#define RCC_HCLK_DIV8 RCC_CFGR_PPRE1_DIV8 /*!< HCLK divided by 8 */ +#define RCC_HCLK_DIV16 RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */ + +/** + * @} + */ + +/** @defgroup RCC_RTC_Clock_Source RTC Clock Source + * @{ + */ +#define RCC_RTCCLKSOURCE_NO_CLK RCC_BDCR_RTCSEL_NOCLOCK /*!< No clock */ +#define RCC_RTCCLKSOURCE_LSE RCC_BDCR_RTCSEL_LSE /*!< LSE oscillator clock used as RTC clock */ +#define RCC_RTCCLKSOURCE_LSI RCC_BDCR_RTCSEL_LSI /*!< LSI oscillator clock used as RTC clock */ +#define RCC_RTCCLKSOURCE_HSE_DIV32 RCC_BDCR_RTCSEL_HSE /*!< HSE oscillator clock divided by 32 used as RTC clock */ +/** + * @} + */ + +/** @defgroup RCC_PLL_Multiplication_Factor RCC PLL Multiplication Factor + * @{ + */ +#define RCC_PLL_MUL2 RCC_CFGR_PLLMUL2 +#define RCC_PLL_MUL3 RCC_CFGR_PLLMUL3 +#define RCC_PLL_MUL4 RCC_CFGR_PLLMUL4 +#define RCC_PLL_MUL5 RCC_CFGR_PLLMUL5 +#define RCC_PLL_MUL6 RCC_CFGR_PLLMUL6 +#define RCC_PLL_MUL7 RCC_CFGR_PLLMUL7 +#define RCC_PLL_MUL8 RCC_CFGR_PLLMUL8 +#define RCC_PLL_MUL9 RCC_CFGR_PLLMUL9 +#define RCC_PLL_MUL10 RCC_CFGR_PLLMUL10 +#define RCC_PLL_MUL11 RCC_CFGR_PLLMUL11 +#define RCC_PLL_MUL12 RCC_CFGR_PLLMUL12 +#define RCC_PLL_MUL13 RCC_CFGR_PLLMUL13 +#define RCC_PLL_MUL14 RCC_CFGR_PLLMUL14 +#define RCC_PLL_MUL15 RCC_CFGR_PLLMUL15 +#define RCC_PLL_MUL16 RCC_CFGR_PLLMUL16 + +/** + * @} + */ + +#if defined(RCC_CFGR_PLLSRC_HSI_PREDIV) +/** @defgroup RCC_PLL_Prediv_Factor RCC PLL Prediv Factor + * @{ + */ + +#define RCC_PREDIV_DIV1 RCC_CFGR2_PREDIV_DIV1 +#define RCC_PREDIV_DIV2 RCC_CFGR2_PREDIV_DIV2 +#define RCC_PREDIV_DIV3 RCC_CFGR2_PREDIV_DIV3 +#define RCC_PREDIV_DIV4 RCC_CFGR2_PREDIV_DIV4 +#define RCC_PREDIV_DIV5 RCC_CFGR2_PREDIV_DIV5 +#define RCC_PREDIV_DIV6 RCC_CFGR2_PREDIV_DIV6 +#define RCC_PREDIV_DIV7 RCC_CFGR2_PREDIV_DIV7 +#define RCC_PREDIV_DIV8 RCC_CFGR2_PREDIV_DIV8 +#define RCC_PREDIV_DIV9 RCC_CFGR2_PREDIV_DIV9 +#define RCC_PREDIV_DIV10 RCC_CFGR2_PREDIV_DIV10 +#define RCC_PREDIV_DIV11 RCC_CFGR2_PREDIV_DIV11 +#define RCC_PREDIV_DIV12 RCC_CFGR2_PREDIV_DIV12 +#define RCC_PREDIV_DIV13 RCC_CFGR2_PREDIV_DIV13 +#define RCC_PREDIV_DIV14 RCC_CFGR2_PREDIV_DIV14 +#define RCC_PREDIV_DIV15 RCC_CFGR2_PREDIV_DIV15 +#define RCC_PREDIV_DIV16 RCC_CFGR2_PREDIV_DIV16 + +/** + * @} + */ + +#endif +#if defined(RCC_CFGR_PLLSRC_HSI_DIV2) +/** @defgroup RCC_PLL_HSE_Prediv_Factor RCC PLL HSE Prediv Factor + * @{ + */ + +#define RCC_HSE_PREDIV_DIV1 RCC_CFGR2_PREDIV_DIV1 +#define RCC_HSE_PREDIV_DIV2 RCC_CFGR2_PREDIV_DIV2 +#define RCC_HSE_PREDIV_DIV3 RCC_CFGR2_PREDIV_DIV3 +#define RCC_HSE_PREDIV_DIV4 RCC_CFGR2_PREDIV_DIV4 +#define RCC_HSE_PREDIV_DIV5 RCC_CFGR2_PREDIV_DIV5 +#define RCC_HSE_PREDIV_DIV6 RCC_CFGR2_PREDIV_DIV6 +#define RCC_HSE_PREDIV_DIV7 RCC_CFGR2_PREDIV_DIV7 +#define RCC_HSE_PREDIV_DIV8 RCC_CFGR2_PREDIV_DIV8 +#define RCC_HSE_PREDIV_DIV9 RCC_CFGR2_PREDIV_DIV9 +#define RCC_HSE_PREDIV_DIV10 RCC_CFGR2_PREDIV_DIV10 +#define RCC_HSE_PREDIV_DIV11 RCC_CFGR2_PREDIV_DIV11 +#define RCC_HSE_PREDIV_DIV12 RCC_CFGR2_PREDIV_DIV12 +#define RCC_HSE_PREDIV_DIV13 RCC_CFGR2_PREDIV_DIV13 +#define RCC_HSE_PREDIV_DIV14 RCC_CFGR2_PREDIV_DIV14 +#define RCC_HSE_PREDIV_DIV15 RCC_CFGR2_PREDIV_DIV15 +#define RCC_HSE_PREDIV_DIV16 RCC_CFGR2_PREDIV_DIV16 + +/** + * @} + */ +#endif /* RCC_CFGR_PLLSRC_HSI_DIV2 */ + +#if defined(RCC_CFGR3_USART2SW) +/** @defgroup RCC_USART2_Clock_Source RCC USART2 Clock Source + * @{ + */ +#define RCC_USART2CLKSOURCE_PCLK1 RCC_CFGR3_USART2SW_PCLK +#define RCC_USART2CLKSOURCE_SYSCLK RCC_CFGR3_USART2SW_SYSCLK +#define RCC_USART2CLKSOURCE_LSE RCC_CFGR3_USART2SW_LSE +#define RCC_USART2CLKSOURCE_HSI RCC_CFGR3_USART2SW_HSI + +/** + * @} + */ +#endif /* RCC_CFGR3_USART2SW */ + +#if defined(RCC_CFGR3_USART3SW) +/** @defgroup RCC_USART3_Clock_Source RCC USART3 Clock Source + * @{ + */ +#define RCC_USART3CLKSOURCE_PCLK1 RCC_CFGR3_USART3SW_PCLK +#define RCC_USART3CLKSOURCE_SYSCLK RCC_CFGR3_USART3SW_SYSCLK +#define RCC_USART3CLKSOURCE_LSE RCC_CFGR3_USART3SW_LSE +#define RCC_USART3CLKSOURCE_HSI RCC_CFGR3_USART3SW_HSI + +/** + * @} + */ +#endif /* RCC_CFGR3_USART3SW */ + +/** @defgroup RCC_I2C1_Clock_Source RCC I2C1 Clock Source + * @{ + */ +#define RCC_I2C1CLKSOURCE_HSI RCC_CFGR3_I2C1SW_HSI +#define RCC_I2C1CLKSOURCE_SYSCLK RCC_CFGR3_I2C1SW_SYSCLK + +/** + * @} + */ +/** @defgroup RCC_MCO_Index MCO Index + * @{ + */ +#define RCC_MCO1 (0x00000000U) +#define RCC_MCO RCC_MCO1 /*!< MCO1 to be compliant with other families with 2 MCOs*/ + +/** + * @} + */ + +/** @defgroup RCC_Interrupt Interrupts + * @{ + */ +#define RCC_IT_LSIRDY ((uint8_t)RCC_CIR_LSIRDYF) /*!< LSI Ready Interrupt flag */ +#define RCC_IT_LSERDY ((uint8_t)RCC_CIR_LSERDYF) /*!< LSE Ready Interrupt flag */ +#define RCC_IT_HSIRDY ((uint8_t)RCC_CIR_HSIRDYF) /*!< HSI Ready Interrupt flag */ +#define RCC_IT_HSERDY ((uint8_t)RCC_CIR_HSERDYF) /*!< HSE Ready Interrupt flag */ +#define RCC_IT_PLLRDY ((uint8_t)RCC_CIR_PLLRDYF) /*!< PLL Ready Interrupt flag */ +#define RCC_IT_CSS ((uint8_t)RCC_CIR_CSSF) /*!< Clock Security System Interrupt flag */ +/** + * @} + */ + +/** @defgroup RCC_Flag Flags + * Elements values convention: XXXYYYYYb + * - YYYYY : Flag position in the register + * - XXX : Register index + * - 001: CR register + * - 010: BDCR register + * - 011: CSR register + * - 100: CFGR register + * @{ + */ +/* Flags in the CR register */ +#define RCC_FLAG_HSIRDY ((uint8_t)((CR_REG_INDEX << 5U) | POSITION_VAL(RCC_CR_HSIRDY))) /*!< Internal High Speed clock ready flag */ +#define RCC_FLAG_HSERDY ((uint8_t)((CR_REG_INDEX << 5U) | POSITION_VAL(RCC_CR_HSERDY))) /*!< External High Speed clock ready flag */ +#define RCC_FLAG_PLLRDY ((uint8_t)((CR_REG_INDEX << 5U) | POSITION_VAL(RCC_CR_PLLRDY))) /*!< PLL clock ready flag */ + +/* Flags in the CSR register */ +#define RCC_FLAG_LSIRDY ((uint8_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_LSIRDY))) /*!< Internal Low Speed oscillator Ready */ +#if defined(RCC_CSR_V18PWRRSTF) +#define RCC_FLAG_V18PWRRST ((uint8_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_V18PWRRSTF))) +#endif +#define RCC_FLAG_OBLRST ((uint8_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_OBLRSTF))) /*!< Options bytes loading reset flag */ +#define RCC_FLAG_PINRST ((uint8_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_PINRSTF))) /*!< PIN reset flag */ +#define RCC_FLAG_PORRST ((uint8_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_PORRSTF))) /*!< POR/PDR reset flag */ +#define RCC_FLAG_SFTRST ((uint8_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_SFTRSTF))) /*!< Software Reset flag */ +#define RCC_FLAG_IWDGRST ((uint8_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_IWDGRSTF))) /*!< Independent Watchdog reset flag */ +#define RCC_FLAG_WWDGRST ((uint8_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_WWDGRSTF))) /*!< Window watchdog reset flag */ +#define RCC_FLAG_LPWRRST ((uint8_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_LPWRRSTF))) /*!< Low-Power reset flag */ + +/* Flags in the BDCR register */ +#define RCC_FLAG_LSERDY ((uint8_t)((BDCR_REG_INDEX << 5U) | POSITION_VAL(RCC_BDCR_LSERDY))) /*!< External Low Speed oscillator Ready */ + +/* Flags in the CFGR register */ +#if defined(RCC_CFGR_MCOF) +#define RCC_FLAG_MCO ((uint8_t)((CFGR_REG_INDEX << 5U) | POSITION_VAL(RCC_CFGR_MCOF))) /*!< Microcontroller Clock Output Flag */ +#endif /* RCC_CFGR_MCOF */ + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ + +/** @defgroup RCC_Exported_Macros RCC Exported Macros + * @{ + */ + +/** @defgroup RCC_AHB_Clock_Enable_Disable RCC AHB Clock Enable Disable + * @brief Enable or disable the AHB peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOA_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOAEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOAEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOB_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOBEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOBEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIODEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIODEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOFEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOFEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DMA1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SRAM_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_SRAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_SRAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_FLITF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TSC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_TSCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_TSCEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_GPIOA_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOAEN)) +#define __HAL_RCC_GPIOB_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOBEN)) +#define __HAL_RCC_GPIOC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOCEN)) +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIODEN)) +#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOFEN)) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_CRCEN)) +#define __HAL_RCC_DMA1_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_DMA1EN)) +#define __HAL_RCC_SRAM_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_SRAMEN)) +#define __HAL_RCC_FLITF_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_FLITFEN)) +#define __HAL_RCC_TSC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_TSCEN)) +/** + * @} + */ + +/** @defgroup RCC_APB1_Clock_Enable_Disable RCC APB1 Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_WWDG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_PWR_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DAC1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DAC1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DAC1EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) +#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN)) +#define __HAL_RCC_WWDG_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_WWDGEN)) +#define __HAL_RCC_USART2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART2EN)) +#define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN)) +#define __HAL_RCC_I2C1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C1EN)) +#define __HAL_RCC_PWR_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_PWREN)) +#define __HAL_RCC_DAC1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DAC1EN)) +/** + * @} + */ + +/** @defgroup RCC_APB2_Clock_Enable_Disable RCC APB2 Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_SYSCFG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SYSCFGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SYSCFGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM15_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM16_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM17_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_SYSCFG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SYSCFGEN)) +#define __HAL_RCC_TIM15_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM15EN)) +#define __HAL_RCC_TIM16_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM16EN)) +#define __HAL_RCC_TIM17_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM17EN)) +#define __HAL_RCC_USART1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_USART1EN)) +/** + * @} + */ + +/** @defgroup RCC_AHB_Peripheral_Clock_Enable_Disable_Status AHB Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOA_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOAEN)) != RESET) +#define __HAL_RCC_GPIOB_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOBEN)) != RESET) +#define __HAL_RCC_GPIOC_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOCEN)) != RESET) +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIODEN)) != RESET) +#define __HAL_RCC_GPIOF_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOFEN)) != RESET) +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) != RESET) +#define __HAL_RCC_DMA1_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) != RESET) +#define __HAL_RCC_SRAM_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_SRAMEN)) != RESET) +#define __HAL_RCC_FLITF_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) != RESET) +#define __HAL_RCC_TSC_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_TSCEN)) != RESET) + +#define __HAL_RCC_GPIOA_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOAEN)) == RESET) +#define __HAL_RCC_GPIOB_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOBEN)) == RESET) +#define __HAL_RCC_GPIOC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOCEN)) == RESET) +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIODEN)) == RESET) +#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOFEN)) == RESET) +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) == RESET) +#define __HAL_RCC_DMA1_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) == RESET) +#define __HAL_RCC_SRAM_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_SRAMEN)) == RESET) +#define __HAL_RCC_FLITF_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) == RESET) +#define __HAL_RCC_TSC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_TSCEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCC_APB1_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET) +#define __HAL_RCC_WWDG_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) != RESET) +#define __HAL_RCC_USART2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) != RESET) +#define __HAL_RCC_USART3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET) +#define __HAL_RCC_I2C1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) != RESET) +#define __HAL_RCC_PWR_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) != RESET) +#define __HAL_RCC_DAC1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DAC1EN)) != RESET) + +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) +#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET) +#define __HAL_RCC_WWDG_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) == RESET) +#define __HAL_RCC_USART2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) == RESET) +#define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET) +#define __HAL_RCC_I2C1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) == RESET) +#define __HAL_RCC_PWR_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) == RESET) +#define __HAL_RCC_DAC1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DAC1EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCC_APB2_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief EGet the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_SYSCFG_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SYSCFGEN)) != RESET) +#define __HAL_RCC_TIM15_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) != RESET) +#define __HAL_RCC_TIM16_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) != RESET) +#define __HAL_RCC_TIM17_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) != RESET) +#define __HAL_RCC_USART1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) != RESET) + +#define __HAL_RCC_SYSCFG_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SYSCFGEN)) == RESET) +#define __HAL_RCC_TIM15_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) == RESET) +#define __HAL_RCC_TIM16_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) == RESET) +#define __HAL_RCC_TIM17_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) == RESET) +#define __HAL_RCC_USART1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCC_AHB_Force_Release_Reset RCC AHB Force Release Reset + * @brief Force or release AHB peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB_FORCE_RESET() (RCC->AHBRSTR = 0xFFFFFFFFU) +#define __HAL_RCC_GPIOA_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOARST)) +#define __HAL_RCC_GPIOB_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOBRST)) +#define __HAL_RCC_GPIOC_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOCRST)) +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIODRST)) +#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOFRST)) +#define __HAL_RCC_TSC_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_TSCRST)) + +#define __HAL_RCC_AHB_RELEASE_RESET() (RCC->AHBRSTR = 0x00000000U) +#define __HAL_RCC_GPIOA_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOARST)) +#define __HAL_RCC_GPIOB_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOBRST)) +#define __HAL_RCC_GPIOC_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOCRST)) +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIODRST)) +#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOFRST)) +#define __HAL_RCC_TSC_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_TSCRST)) +/** + * @} + */ + +/** @defgroup RCC_APB1_Force_Release_Reset RCC APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB1_FORCE_RESET() (RCC->APB1RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_WWDG_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_WWDGRST)) +#define __HAL_RCC_USART2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART2RST)) +#define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_I2C1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C1RST)) +#define __HAL_RCC_PWR_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_PWRRST)) +#define __HAL_RCC_DAC1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DAC1RST)) + +#define __HAL_RCC_APB1_RELEASE_RESET() (RCC->APB1RSTR = 0x00000000U) +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_WWDG_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_WWDGRST)) +#define __HAL_RCC_USART2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART2RST)) +#define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_I2C1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C1RST)) +#define __HAL_RCC_PWR_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_PWRRST)) +#define __HAL_RCC_DAC1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DAC1RST)) +/** + * @} + */ + +/** @defgroup RCC_APB2_Force_Release_Reset RCC APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_SYSCFG_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SYSCFGRST)) +#define __HAL_RCC_TIM15_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM15RST)) +#define __HAL_RCC_TIM16_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM16RST)) +#define __HAL_RCC_TIM17_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM17RST)) +#define __HAL_RCC_USART1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_USART1RST)) + +#define __HAL_RCC_APB2_RELEASE_RESET() (RCC->APB2RSTR = 0x00000000U) +#define __HAL_RCC_SYSCFG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SYSCFGRST)) +#define __HAL_RCC_TIM15_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM15RST)) +#define __HAL_RCC_TIM16_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM16RST)) +#define __HAL_RCC_TIM17_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM17RST)) +#define __HAL_RCC_USART1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART1RST)) +/** + * @} + */ + +/** @defgroup RCC_HSI_Configuration HSI Configuration + * @{ + */ + +/** @brief Macros to enable or disable the Internal High Speed oscillator (HSI). + * @note The HSI is stopped by hardware when entering STOP and STANDBY modes. + * It is used (enabled by hardware) as system clock source after startup + * from Reset, wakeup from STOP and STANDBY mode, or in case of failure + * of the HSE used directly or indirectly as system clock (if the Clock + * Security System CSS is enabled). + * @note HSI can not be stopped if it is used as system clock source. In this case, + * you have to select another source of the system clock then stop the HSI. + * @note After enabling the HSI, the application software should wait on HSIRDY + * flag to be set indicating that HSI clock is stable and can be used as + * system clock source. + * @note When the HSI is stopped, HSIRDY flag goes low after 6 HSI oscillator + * clock cycles. + */ +#define __HAL_RCC_HSI_ENABLE() (*(__IO uint32_t *) RCC_CR_HSION_BB = ENABLE) +#define __HAL_RCC_HSI_DISABLE() (*(__IO uint32_t *) RCC_CR_HSION_BB = DISABLE) + +/** @brief Macro to adjust the Internal High Speed oscillator (HSI) calibration value. + * @note The calibration is used to compensate for the variations in voltage + * and temperature that influence the frequency of the internal HSI RC. + * @param _HSICALIBRATIONVALUE_ specifies the calibration trimming value. + * (default is RCC_HSICALIBRATION_DEFAULT). + * This parameter must be a number between 0 and 0x1F. + */ +#define __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(_HSICALIBRATIONVALUE_) \ + (MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, (uint32_t)(_HSICALIBRATIONVALUE_) << POSITION_VAL(RCC_CR_HSITRIM))) + +/** + * @} + */ + +/** @defgroup RCC_LSI_Configuration LSI Configuration + * @{ + */ + +/** @brief Macro to enable the Internal Low Speed oscillator (LSI). + * @note After enabling the LSI, the application software should wait on + * LSIRDY flag to be set indicating that LSI clock is stable and can + * be used to clock the IWDG and/or the RTC. + */ +#define __HAL_RCC_LSI_ENABLE() (*(__IO uint32_t *) RCC_CSR_LSION_BB = ENABLE) + +/** @brief Macro to disable the Internal Low Speed oscillator (LSI). + * @note LSI can not be disabled if the IWDG is running. + * @note When the LSI is stopped, LSIRDY flag goes low after 6 LSI oscillator + * clock cycles. + */ +#define __HAL_RCC_LSI_DISABLE() (*(__IO uint32_t *) RCC_CSR_LSION_BB = DISABLE) + +/** + * @} + */ + +/** @defgroup RCC_HSE_Configuration HSE Configuration + * @{ + */ + +/** + * @brief Macro to configure the External High Speed oscillator (HSE). + * @note Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not + * supported by this macro. User should request a transition to HSE Off + * first and then HSE On or HSE Bypass. + * @note After enabling the HSE (RCC_HSE_ON or RCC_HSE_Bypass), the application + * software should wait on HSERDY flag to be set indicating that HSE clock + * is stable and can be used to clock the PLL and/or system clock. + * @note HSE state can not be changed if it is used directly or through the + * PLL as system clock. In this case, you have to select another source + * of the system clock then change the HSE state (ex. disable it). + * @note The HSE is stopped by hardware when entering STOP and STANDBY modes. + * @note This function reset the CSSON bit, so if the clock security system(CSS) + * was previously enabled you have to enable it again after calling this + * function. + * @param __STATE__ specifies the new state of the HSE. + * This parameter can be one of the following values: + * @arg @ref RCC_HSE_OFF turn OFF the HSE oscillator, HSERDY flag goes low after + * 6 HSE oscillator clock cycles. + * @arg @ref RCC_HSE_ON turn ON the HSE oscillator + * @arg @ref RCC_HSE_BYPASS HSE oscillator bypassed with external clock + */ +#define __HAL_RCC_HSE_CONFIG(__STATE__) \ + do{ \ + if ((__STATE__) == RCC_HSE_ON) \ + { \ + SET_BIT(RCC->CR, RCC_CR_HSEON); \ + } \ + else if ((__STATE__) == RCC_HSE_OFF) \ + { \ + CLEAR_BIT(RCC->CR, RCC_CR_HSEON); \ + CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); \ + } \ + else if ((__STATE__) == RCC_HSE_BYPASS) \ + { \ + SET_BIT(RCC->CR, RCC_CR_HSEBYP); \ + SET_BIT(RCC->CR, RCC_CR_HSEON); \ + } \ + else \ + { \ + CLEAR_BIT(RCC->CR, RCC_CR_HSEON); \ + CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); \ + } \ + }while(0U) + +/** + * @} + */ + +/** @defgroup RCC_LSE_Configuration LSE Configuration + * @{ + */ + +/** + * @brief Macro to configure the External Low Speed oscillator (LSE). + * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not supported by this macro. + * @note As the LSE is in the Backup domain and write access is denied to + * this domain after reset, you have to enable write access using + * @ref HAL_PWR_EnableBkUpAccess() function before to configure the LSE + * (to be done once after reset). + * @note After enabling the LSE (RCC_LSE_ON or RCC_LSE_BYPASS), the application + * software should wait on LSERDY flag to be set indicating that LSE clock + * is stable and can be used to clock the RTC. + * @param __STATE__ specifies the new state of the LSE. + * This parameter can be one of the following values: + * @arg @ref RCC_LSE_OFF turn OFF the LSE oscillator, LSERDY flag goes low after + * 6 LSE oscillator clock cycles. + * @arg @ref RCC_LSE_ON turn ON the LSE oscillator. + * @arg @ref RCC_LSE_BYPASS LSE oscillator bypassed with external clock. + */ +#define __HAL_RCC_LSE_CONFIG(__STATE__) \ + do{ \ + if ((__STATE__) == RCC_LSE_ON) \ + { \ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + } \ + else if ((__STATE__) == RCC_LSE_OFF) \ + { \ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); \ + } \ + else if ((__STATE__) == RCC_LSE_BYPASS) \ + { \ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); \ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + } \ + else \ + { \ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); \ + } \ + }while(0U) + +/** + * @} + */ + +/** @defgroup RCC_USARTx_Clock_Config RCC USARTx Clock Config + * @{ + */ + +/** @brief Macro to configure the USART1 clock (USART1CLK). + * @param __USART1CLKSOURCE__ specifies the USART1 clock source. + * This parameter can be one of the following values: + @if STM32F302xC + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F303xC + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F358xx + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F302xE + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F303xE + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F398xx + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F373xC + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F378xx + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F301x8 + * @arg @ref RCC_USART1CLKSOURCE_PCLK1 PCLK1 selected as USART1 clock + @endif + @if STM32F302x8 + * @arg @ref RCC_USART1CLKSOURCE_PCLK1 PCLK1 selected as USART1 clock + @endif + @if STM32F318xx + * @arg @ref RCC_USART1CLKSOURCE_PCLK1 PCLK1 selected as USART1 clock + @endif + @if STM32F303x8 + * @arg @ref RCC_USART1CLKSOURCE_PCLK1 PCLK1 selected as USART1 clock + @endif + @if STM32F334x8 + * @arg @ref RCC_USART1CLKSOURCE_PCLK1 PCLK1 selected as USART1 clock + @endif + @if STM32F328xx + * @arg @ref RCC_USART1CLKSOURCE_PCLK1 PCLK1 selected as USART1 clock + @endif + * @arg @ref RCC_USART1CLKSOURCE_HSI HSI selected as USART1 clock + * @arg @ref RCC_USART1CLKSOURCE_SYSCLK System Clock selected as USART1 clock + * @arg @ref RCC_USART1CLKSOURCE_LSE LSE selected as USART1 clock + */ +#define __HAL_RCC_USART1_CONFIG(__USART1CLKSOURCE__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_USART1SW, (uint32_t)(__USART1CLKSOURCE__)) + +/** @brief Macro to get the USART1 clock source. + * @retval The clock source can be one of the following values: + @if STM32F302xC + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F303xC + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F358xx + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F302xE + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F303xE + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F398xx + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F373xC + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F378xx + * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock + @endif + @if STM32F301x8 + * @arg @ref RCC_USART1CLKSOURCE_PCLK1 PCLK1 selected as USART1 clock + @endif + @if STM32F302x8 + * @arg @ref RCC_USART1CLKSOURCE_PCLK1 PCLK1 selected as USART1 clock + @endif + @if STM32F318xx + * @arg @ref RCC_USART1CLKSOURCE_PCLK1 PCLK1 selected as USART1 clock + @endif + @if STM32F303x8 + * @arg @ref RCC_USART1CLKSOURCE_PCLK1 PCLK1 selected as USART1 clock + @endif + @if STM32F334x8 + * @arg @ref RCC_USART1CLKSOURCE_PCLK1 PCLK1 selected as USART1 clock + @endif + @if STM32F328xx + * @arg @ref RCC_USART1CLKSOURCE_PCLK1 PCLK1 selected as USART1 clock + @endif + * @arg @ref RCC_USART1CLKSOURCE_HSI HSI selected as USART1 clock + * @arg @ref RCC_USART1CLKSOURCE_SYSCLK System Clock selected as USART1 clock + * @arg @ref RCC_USART1CLKSOURCE_LSE LSE selected as USART1 clock + */ +#define __HAL_RCC_GET_USART1_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_USART1SW))) + +#if defined(RCC_CFGR3_USART2SW) +/** @brief Macro to configure the USART2 clock (USART2CLK). + * @param __USART2CLKSOURCE__ specifies the USART2 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_USART2CLKSOURCE_PCLK1 PCLK1 selected as USART2 clock + * @arg @ref RCC_USART2CLKSOURCE_HSI HSI selected as USART2 clock + * @arg @ref RCC_USART2CLKSOURCE_SYSCLK System Clock selected as USART2 clock + * @arg @ref RCC_USART2CLKSOURCE_LSE LSE selected as USART2 clock + */ +#define __HAL_RCC_USART2_CONFIG(__USART2CLKSOURCE__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_USART2SW, (uint32_t)(__USART2CLKSOURCE__)) + +/** @brief Macro to get the USART2 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_USART2CLKSOURCE_PCLK1 PCLK1 selected as USART2 clock + * @arg @ref RCC_USART2CLKSOURCE_HSI HSI selected as USART2 clock + * @arg @ref RCC_USART2CLKSOURCE_SYSCLK System Clock selected as USART2 clock + * @arg @ref RCC_USART2CLKSOURCE_LSE LSE selected as USART2 clock + */ +#define __HAL_RCC_GET_USART2_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_USART2SW))) +#endif /* RCC_CFGR3_USART2SW */ + +#if defined(RCC_CFGR3_USART3SW) +/** @brief Macro to configure the USART3 clock (USART3CLK). + * @param __USART3CLKSOURCE__ specifies the USART3 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_USART3CLKSOURCE_PCLK1 PCLK1 selected as USART3 clock + * @arg @ref RCC_USART3CLKSOURCE_HSI HSI selected as USART3 clock + * @arg @ref RCC_USART3CLKSOURCE_SYSCLK System Clock selected as USART3 clock + * @arg @ref RCC_USART3CLKSOURCE_LSE LSE selected as USART3 clock + */ +#define __HAL_RCC_USART3_CONFIG(__USART3CLKSOURCE__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_USART3SW, (uint32_t)(__USART3CLKSOURCE__)) + +/** @brief Macro to get the USART3 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_USART3CLKSOURCE_PCLK1 PCLK1 selected as USART3 clock + * @arg @ref RCC_USART3CLKSOURCE_HSI HSI selected as USART3 clock + * @arg @ref RCC_USART3CLKSOURCE_SYSCLK System Clock selected as USART3 clock + * @arg @ref RCC_USART3CLKSOURCE_LSE LSE selected as USART3 clock + */ +#define __HAL_RCC_GET_USART3_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_USART3SW))) +#endif /* RCC_CFGR3_USART2SW */ +/** + * @} + */ + +/** @defgroup RCC_I2Cx_Clock_Config RCC I2Cx Clock Config + * @{ + */ + +/** @brief Macro to configure the I2C1 clock (I2C1CLK). + * @param __I2C1CLKSOURCE__ specifies the I2C1 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_I2C1CLKSOURCE_HSI HSI selected as I2C1 clock + * @arg @ref RCC_I2C1CLKSOURCE_SYSCLK System Clock selected as I2C1 clock + */ +#define __HAL_RCC_I2C1_CONFIG(__I2C1CLKSOURCE__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_I2C1SW, (uint32_t)(__I2C1CLKSOURCE__)) + +/** @brief Macro to get the I2C1 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_I2C1CLKSOURCE_HSI HSI selected as I2C1 clock + * @arg @ref RCC_I2C1CLKSOURCE_SYSCLK System Clock selected as I2C1 clock + */ +#define __HAL_RCC_GET_I2C1_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_I2C1SW))) +/** + * @} + */ + +/** @defgroup RCC_PLL_Configuration PLL Configuration + * @{ + */ + +/** @brief Macro to enable the main PLL. + * @note After enabling the main PLL, the application software should wait on + * PLLRDY flag to be set indicating that PLL clock is stable and can + * be used as system clock source. + * @note The main PLL is disabled by hardware when entering STOP and STANDBY modes. + */ +#define __HAL_RCC_PLL_ENABLE() (*(__IO uint32_t *) RCC_CR_PLLON_BB = ENABLE) + +/** @brief Macro to disable the main PLL. + * @note The main PLL can not be disabled if it is used as system clock source + */ +#define __HAL_RCC_PLL_DISABLE() (*(__IO uint32_t *) RCC_CR_PLLON_BB = DISABLE) + + +/** @brief Get oscillator clock selected as PLL input clock + * @retval The clock source used for PLL entry. The returned value can be one + * of the following: + * @arg @ref RCC_PLLSOURCE_HSI HSI oscillator clock selected as PLL input clock + * @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL input clock + */ +#define __HAL_RCC_GET_PLL_OSCSOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC))) + +/** + * @} + */ + +/** @defgroup RCC_Get_Clock_source Get Clock source + * @{ + */ + +/** + * @brief Macro to configure the system clock source. + * @param __SYSCLKSOURCE__ specifies the system clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_SYSCLKSOURCE_HSI HSI oscillator is used as system clock source. + * @arg @ref RCC_SYSCLKSOURCE_HSE HSE oscillator is used as system clock source. + * @arg @ref RCC_SYSCLKSOURCE_PLLCLK PLL output is used as system clock source. + */ +#define __HAL_RCC_SYSCLK_CONFIG(__SYSCLKSOURCE__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, (__SYSCLKSOURCE__)) + +/** @brief Macro to get the clock source used as system clock. + * @retval The clock source used as system clock. The returned value can be one + * of the following: + * @arg @ref RCC_SYSCLKSOURCE_STATUS_HSI HSI used as system clock + * @arg @ref RCC_SYSCLKSOURCE_STATUS_HSE HSE used as system clock + * @arg @ref RCC_SYSCLKSOURCE_STATUS_PLLCLK PLL used as system clock + */ +#define __HAL_RCC_GET_SYSCLK_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR,RCC_CFGR_SWS))) + +/** + * @} + */ + +/** @defgroup RCCEx_MCOx_Clock_Config RCC Extended MCOx Clock Config + * @{ + */ + +#if defined(RCC_CFGR_MCOPRE) +/** @brief Macro to configure the MCO clock. + * @param __MCOCLKSOURCE__ specifies the MCO clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_SYSCLK System Clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI HSI oscillator clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSI LSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSE LSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK_DIV2 PLLCLK Divided by 2 selected as MCO clock + * @param __MCODIV__ specifies the MCO clock prescaler. + * This parameter can be one of the following values: + * @arg @ref RCC_MCODIV_1 MCO clock source is divided by 1 + * @arg @ref RCC_MCODIV_2 MCO clock source is divided by 2 + * @arg @ref RCC_MCODIV_4 MCO clock source is divided by 4 + * @arg @ref RCC_MCODIV_8 MCO clock source is divided by 8 + * @arg @ref RCC_MCODIV_16 MCO clock source is divided by 16 + * @arg @ref RCC_MCODIV_32 MCO clock source is divided by 32 + * @arg @ref RCC_MCODIV_64 MCO clock source is divided by 64 + * @arg @ref RCC_MCODIV_128 MCO clock source is divided by 128 + */ +#else +/** @brief Macro to configure the MCO clock. + * @param __MCOCLKSOURCE__ specifies the MCO clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_SYSCLK System Clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI HSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSI LSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSE LSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK_DIV2 PLLCLK Divided by 2 selected as MCO clock + * @param __MCODIV__ specifies the MCO clock prescaler. + * This parameter can be one of the following values: + * @arg @ref RCC_MCODIV_1 No division applied on MCO clock source + */ +#endif +#if defined(RCC_CFGR_MCOPRE) +#define __HAL_RCC_MCO1_CONFIG(__MCOCLKSOURCE__, __MCODIV__) \ + MODIFY_REG(RCC->CFGR, (RCC_CFGR_MCO | RCC_CFGR_MCOPRE), ((__MCOCLKSOURCE__) | (__MCODIV__))) +#else + +#define __HAL_RCC_MCO1_CONFIG(__MCOCLKSOURCE__, __MCODIV__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_MCO, (__MCOCLKSOURCE__)) + +#endif + +/** + * @} + */ + + /** @defgroup RCC_RTC_Clock_Configuration RCC RTC Clock Configuration + * @{ + */ + +/** @brief Macro to configure the RTC clock (RTCCLK). + * @note As the RTC clock configuration bits are in the Backup domain and write + * access is denied to this domain after reset, you have to enable write + * access using the Power Backup Access macro before to configure + * the RTC clock source (to be done once after reset). + * @note Once the RTC clock is configured it cannot be changed unless the + * Backup domain is reset using @ref __HAL_RCC_BACKUPRESET_FORCE() macro, or by + * a Power On Reset (POR). + * + * @param __RTC_CLKSOURCE__ specifies the RTC clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_HSE_DIV32 HSE clock divided by 32 + * @note If the LSE or LSI is used as RTC clock source, the RTC continues to + * work in STOP and STANDBY modes, and can be used as wakeup source. + * However, when the LSI clock and HSE clock divided by 32 is used as RTC clock source, + * the RTC cannot be used in STOP and STANDBY modes. + * @note The system must always be configured so as to get a PCLK frequency greater than or + * equal to the RTCCLK frequency for a proper operation of the RTC. + */ +#define __HAL_RCC_RTC_CONFIG(__RTC_CLKSOURCE__) MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, (__RTC_CLKSOURCE__)) + +/** @brief Macro to get the RTC clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_HSE_DIV32 HSE clock divided by 32 + */ +#define __HAL_RCC_GET_RTC_SOURCE() (READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL)) + +/** @brief Macro to enable the the RTC clock. + * @note These macros must be used only after the RTC clock source was selected. + */ +#define __HAL_RCC_RTC_ENABLE() (*(__IO uint32_t *) RCC_BDCR_RTCEN_BB = ENABLE) + +/** @brief Macro to disable the the RTC clock. + * @note These macros must be used only after the RTC clock source was selected. + */ +#define __HAL_RCC_RTC_DISABLE() (*(__IO uint32_t *) RCC_BDCR_RTCEN_BB = DISABLE) + +/** @brief Macro to force the Backup domain reset. + * @note This function resets the RTC peripheral (including the backup registers) + * and the RTC clock source selection in RCC_BDCR register. + */ +#define __HAL_RCC_BACKUPRESET_FORCE() (*(__IO uint32_t *) RCC_BDCR_BDRST_BB = ENABLE) + +/** @brief Macros to release the Backup domain reset. + */ +#define __HAL_RCC_BACKUPRESET_RELEASE() (*(__IO uint32_t *) RCC_BDCR_BDRST_BB = DISABLE) + +/** + * @} + */ + +/** @defgroup RCC_Flags_Interrupts_Management Flags Interrupts Management + * @brief macros to manage the specified RCC Flags and interrupts. + * @{ + */ + +/** @brief Enable RCC interrupt. + * @param __INTERRUPT__ specifies the RCC interrupt sources to be enabled. + * This parameter can be any combination of the following values: + * @arg @ref RCC_IT_LSIRDY LSI ready interrupt + * @arg @ref RCC_IT_LSERDY LSE ready interrupt + * @arg @ref RCC_IT_HSIRDY HSI ready interrupt + * @arg @ref RCC_IT_HSERDY HSE ready interrupt + * @arg @ref RCC_IT_PLLRDY main PLL ready interrupt + */ +#define __HAL_RCC_ENABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS |= (__INTERRUPT__)) + +/** @brief Disable RCC interrupt. + * @param __INTERRUPT__ specifies the RCC interrupt sources to be disabled. + * This parameter can be any combination of the following values: + * @arg @ref RCC_IT_LSIRDY LSI ready interrupt + * @arg @ref RCC_IT_LSERDY LSE ready interrupt + * @arg @ref RCC_IT_HSIRDY HSI ready interrupt + * @arg @ref RCC_IT_HSERDY HSE ready interrupt + * @arg @ref RCC_IT_PLLRDY main PLL ready interrupt + */ +#define __HAL_RCC_DISABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS &= (uint8_t)(~(__INTERRUPT__))) + +/** @brief Clear the RCC's interrupt pending bits. + * @param __INTERRUPT__ specifies the interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg @ref RCC_IT_LSIRDY LSI ready interrupt. + * @arg @ref RCC_IT_LSERDY LSE ready interrupt. + * @arg @ref RCC_IT_HSIRDY HSI ready interrupt. + * @arg @ref RCC_IT_HSERDY HSE ready interrupt. + * @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt. + * @arg @ref RCC_IT_CSS Clock Security System interrupt + */ +#define __HAL_RCC_CLEAR_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE2_ADDRESS = (__INTERRUPT__)) + +/** @brief Check the RCC's interrupt has occurred or not. + * @param __INTERRUPT__ specifies the RCC interrupt source to check. + * This parameter can be one of the following values: + * @arg @ref RCC_IT_LSIRDY LSI ready interrupt. + * @arg @ref RCC_IT_LSERDY LSE ready interrupt. + * @arg @ref RCC_IT_HSIRDY HSI ready interrupt. + * @arg @ref RCC_IT_HSERDY HSE ready interrupt. + * @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt. + * @arg @ref RCC_IT_CSS Clock Security System interrupt + * @retval The new state of __INTERRUPT__ (TRUE or FALSE). + */ +#define __HAL_RCC_GET_IT(__INTERRUPT__) ((RCC->CIR & (__INTERRUPT__)) == (__INTERRUPT__)) + +/** @brief Set RMVF bit to clear the reset flags. + * The reset flags are RCC_FLAG_PINRST, RCC_FLAG_PORRST, RCC_FLAG_SFTRST, + * RCC_FLAG_OBLRST, RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST, RCC_FLAG_LPWRRST + */ +#define __HAL_RCC_CLEAR_RESET_FLAGS() (*(__IO uint32_t *)RCC_CSR_RMVF_BB = ENABLE) + +/** @brief Check RCC flag is set or not. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg @ref RCC_FLAG_HSIRDY HSI oscillator clock ready. + * @arg @ref RCC_FLAG_HSERDY HSE oscillator clock ready. + * @arg @ref RCC_FLAG_PLLRDY Main PLL clock ready. + * @arg @ref RCC_FLAG_LSERDY LSE oscillator clock ready. + * @arg @ref RCC_FLAG_LSIRDY LSI oscillator clock ready. + * @arg @ref RCC_FLAG_OBLRST Option Byte Load reset + * @arg @ref RCC_FLAG_PINRST Pin reset. + * @arg @ref RCC_FLAG_PORRST POR/PDR reset. + * @arg @ref RCC_FLAG_SFTRST Software reset. + * @arg @ref RCC_FLAG_IWDGRST Independent Watchdog reset. + * @arg @ref RCC_FLAG_WWDGRST Window Watchdog reset. + * @arg @ref RCC_FLAG_LPWRRST Low Power reset. + @if defined(STM32F301x8) + * @arg @ref RCC_FLAG_V18PWRRST Reset flag of the 1.8 V domain + @endif + @if defined(STM32F302x8) + * @arg @ref RCC_FLAG_V18PWRRST Reset flag of the 1.8 V domain + @endif + @if defined(STM32F302xC) + * @arg @ref RCC_FLAG_V18PWRRST Reset flag of the 1.8 V domain + * @arg @ref RCC_FLAG_MCO Microcontroller Clock Output + @endif + @if defined(STM32F302xE) + * @arg @ref RCC_FLAG_V18PWRRST Reset flag of the 1.8 V domain + @endif + @if defined(STM32F303x8) + * @arg @ref RCC_FLAG_V18PWRRST Reset flag of the 1.8 V domain + @endif + @if defined(STM32F303xC) + * @arg @ref RCC_FLAG_V18PWRRST Reset flag of the 1.8 V domain + * @arg @ref RCC_FLAG_MCO Microcontroller Clock Output + @endif + @if defined(STM32F303xE) + * @arg @ref RCC_FLAG_V18PWRRST Reset flag of the 1.8 V domain + @endif + @if defined(STM32F334x8) + * @arg @ref RCC_FLAG_V18PWRRST Reset flag of the 1.8 V domain + @endif + @if defined(STM32F358xx) + * @arg @ref RCC_FLAG_MCO Microcontroller Clock Output + @endif + @if defined(STM32F373xC) + * @arg @ref RCC_FLAG_V18PWRRST Reset flag of the 1.8 V domain + @endif + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_RCC_GET_FLAG(__FLAG__) (((((__FLAG__) >> 5U) == CR_REG_INDEX) ? RCC->CR : \ + (((__FLAG__) >> 5U) == BDCR_REG_INDEX)? RCC->BDCR : \ + (((__FLAG__) >> 5U) == CFGR_REG_INDEX)? RCC->CFGR : \ + RCC->CSR) & (1U << ((__FLAG__) & RCC_FLAG_MASK))) + +/** + * @} + */ + +/** + * @} + */ + +/* Include RCC HAL Extension module */ +#include "stm32f3xx_hal_rcc_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup RCC_Exported_Functions + * @{ + */ + +/** @addtogroup RCC_Exported_Functions_Group1 + * @{ + */ + +/* Initialization and de-initialization functions ******************************/ +HAL_StatusTypeDef HAL_RCC_DeInit(void); +HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct); +HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency); + +/** + * @} + */ + +/** @addtogroup RCC_Exported_Functions_Group2 + * @{ + */ + +/* Peripheral Control functions ************************************************/ +void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv); +void HAL_RCC_EnableCSS(void); +/* CSS NMI IRQ handler */ +void HAL_RCC_NMI_IRQHandler(void); +/* User Callbacks in non blocking mode (IT mode) */ +void HAL_RCC_CSSCallback(void); +void HAL_RCC_DisableCSS(void); +uint32_t HAL_RCC_GetSysClockFreq(void); +uint32_t HAL_RCC_GetHCLKFreq(void); +uint32_t HAL_RCC_GetPCLK1Freq(void); +uint32_t HAL_RCC_GetPCLK2Freq(void); +void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct); +void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F3xx_HAL_RCC_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_rcc_ex.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_rcc_ex.h new file mode 100644 index 0000000..37c9ced --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_rcc_ex.h @@ -0,0 +1,3827 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_rcc_ex.h + * @author MCD Application Team + * @brief Header file of RCC HAL Extension module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F3xx_HAL_RCC_EX_H +#define __STM32F3xx_HAL_RCC_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup RCCEx + * @{ + */ + +/** @addtogroup RCCEx_Private_Macros + * @{ + */ + +#if defined(RCC_CFGR_PLLNODIV) +#define IS_RCC_MCO1SOURCE(SOURCE) (((SOURCE) == RCC_MCO1SOURCE_NOCLOCK) || \ + ((SOURCE) == RCC_MCO1SOURCE_LSI) || \ + ((SOURCE) == RCC_MCO1SOURCE_LSE) || \ + ((SOURCE) == RCC_MCO1SOURCE_SYSCLK) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSI) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSE) || \ + ((SOURCE) == RCC_MCO1SOURCE_PLLCLK) || \ + ((SOURCE) == RCC_MCO1SOURCE_PLLCLK_DIV2)) +#else +#define IS_RCC_MCO1SOURCE(SOURCE) (((SOURCE) == RCC_MCO1SOURCE_NOCLOCK) || \ + ((SOURCE) == RCC_MCO1SOURCE_LSI) || \ + ((SOURCE) == RCC_MCO1SOURCE_LSE) || \ + ((SOURCE) == RCC_MCO1SOURCE_SYSCLK) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSI) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSE) || \ + ((SOURCE) == RCC_MCO1SOURCE_PLLCLK_DIV2)) +#endif /* RCC_CFGR_PLLNODIV */ + +#if defined(STM32F301x8) || defined(STM32F318xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | \ + RCC_PERIPHCLK_ADC1 | RCC_PERIPHCLK_I2S | \ + RCC_PERIPHCLK_I2C3 | RCC_PERIPHCLK_TIM1 | \ + RCC_PERIPHCLK_TIM15 | RCC_PERIPHCLK_TIM16 | \ + RCC_PERIPHCLK_TIM17 | RCC_PERIPHCLK_RTC)) +#endif /* STM32F301x8 || STM32F318xx */ +#if defined(STM32F302x8) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | \ + RCC_PERIPHCLK_ADC1 | RCC_PERIPHCLK_I2S | \ + RCC_PERIPHCLK_I2C3 | RCC_PERIPHCLK_TIM1 | \ + RCC_PERIPHCLK_RTC | RCC_PERIPHCLK_USB | \ + RCC_PERIPHCLK_TIM15 | RCC_PERIPHCLK_TIM16 | \ + RCC_PERIPHCLK_TIM17)) +#endif /* STM32F302x8 */ +#if defined(STM32F302xC) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | \ + RCC_PERIPHCLK_UART4 | RCC_PERIPHCLK_UART5 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | \ + RCC_PERIPHCLK_ADC12 | RCC_PERIPHCLK_I2S | \ + RCC_PERIPHCLK_TIM1 | RCC_PERIPHCLK_RTC | \ + RCC_PERIPHCLK_USB)) +#endif /* STM32F302xC */ +#if defined(STM32F303xC) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | \ + RCC_PERIPHCLK_UART4 | RCC_PERIPHCLK_UART5 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | \ + RCC_PERIPHCLK_ADC12 | RCC_PERIPHCLK_ADC34 | \ + RCC_PERIPHCLK_I2S | RCC_PERIPHCLK_TIM1 | \ + RCC_PERIPHCLK_TIM8 | RCC_PERIPHCLK_RTC | \ + RCC_PERIPHCLK_USB)) +#endif /* STM32F303xC */ +#if defined(STM32F302xE) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | \ + RCC_PERIPHCLK_UART4 | RCC_PERIPHCLK_UART5 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | \ + RCC_PERIPHCLK_ADC12 | RCC_PERIPHCLK_I2S | \ + RCC_PERIPHCLK_TIM1 | RCC_PERIPHCLK_RTC | \ + RCC_PERIPHCLK_USB | RCC_PERIPHCLK_I2C3 | \ + RCC_PERIPHCLK_TIM2 | RCC_PERIPHCLK_TIM34 | \ + RCC_PERIPHCLK_TIM15 | RCC_PERIPHCLK_TIM16 | \ + RCC_PERIPHCLK_TIM17)) +#endif /* STM32F302xE */ +#if defined(STM32F303xE) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | \ + RCC_PERIPHCLK_UART4 | RCC_PERIPHCLK_UART5 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | \ + RCC_PERIPHCLK_ADC12 | RCC_PERIPHCLK_ADC34 | \ + RCC_PERIPHCLK_I2S | RCC_PERIPHCLK_TIM1 | \ + RCC_PERIPHCLK_TIM8 | RCC_PERIPHCLK_RTC | \ + RCC_PERIPHCLK_USB | RCC_PERIPHCLK_I2C3 | \ + RCC_PERIPHCLK_TIM2 | RCC_PERIPHCLK_TIM34 | \ + RCC_PERIPHCLK_TIM15 | RCC_PERIPHCLK_TIM16 | \ + RCC_PERIPHCLK_TIM17 | RCC_PERIPHCLK_TIM20)) +#endif /* STM32F303xE */ +#if defined(STM32F398xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | \ + RCC_PERIPHCLK_UART4 | RCC_PERIPHCLK_UART5 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | \ + RCC_PERIPHCLK_ADC12 | RCC_PERIPHCLK_ADC34 | \ + RCC_PERIPHCLK_I2S | RCC_PERIPHCLK_TIM1 | \ + RCC_PERIPHCLK_TIM8 | RCC_PERIPHCLK_RTC | \ + RCC_PERIPHCLK_I2C3 | RCC_PERIPHCLK_TIM2 | \ + RCC_PERIPHCLK_TIM34 | RCC_PERIPHCLK_TIM15 | \ + RCC_PERIPHCLK_TIM16 | RCC_PERIPHCLK_TIM17 | \ + RCC_PERIPHCLK_TIM20)) +#endif /* STM32F398xx */ +#if defined(STM32F358xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | \ + RCC_PERIPHCLK_UART4 | RCC_PERIPHCLK_UART5 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | \ + RCC_PERIPHCLK_ADC12 | RCC_PERIPHCLK_ADC34 | \ + RCC_PERIPHCLK_I2S | RCC_PERIPHCLK_TIM1 | \ + RCC_PERIPHCLK_TIM8 | RCC_PERIPHCLK_RTC)) +#endif /* STM32F358xx */ +#if defined(STM32F303x8) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_ADC12 | \ + RCC_PERIPHCLK_TIM1 | RCC_PERIPHCLK_RTC)) +#endif /* STM32F303x8 */ +#if defined(STM32F334x8) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_ADC12 | \ + RCC_PERIPHCLK_TIM1 | RCC_PERIPHCLK_HRTIM1 | \ + RCC_PERIPHCLK_RTC)) +#endif /* STM32F334x8 */ +#if defined(STM32F328xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_ADC12 | \ + RCC_PERIPHCLK_TIM1 | RCC_PERIPHCLK_RTC)) +#endif /* STM32F328xx */ +#if defined(STM32F373xC) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | \ + RCC_PERIPHCLK_ADC1 | RCC_PERIPHCLK_SDADC | \ + RCC_PERIPHCLK_CEC | RCC_PERIPHCLK_RTC | \ + RCC_PERIPHCLK_USB)) +#endif /* STM32F373xC */ +#if defined(STM32F378xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | \ + RCC_PERIPHCLK_ADC1 | RCC_PERIPHCLK_SDADC | \ + RCC_PERIPHCLK_CEC | RCC_PERIPHCLK_RTC)) +#endif /* STM32F378xx */ + +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) +#define IS_RCC_USART1CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART1CLKSOURCE_PCLK1) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_SYSCLK) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_LSE) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_HSI)) +#define IS_RCC_I2C2CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2C2CLKSOURCE_HSI) || \ + ((SOURCE) == RCC_I2C2CLKSOURCE_SYSCLK)) +#define IS_RCC_I2C3CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2C3CLKSOURCE_HSI) || \ + ((SOURCE) == RCC_I2C3CLKSOURCE_SYSCLK)) +#define IS_RCC_ADC1PLLCLK_DIV(ADCCLK) (((ADCCLK) == RCC_ADC1PLLCLK_OFF) || ((ADCCLK) == RCC_ADC1PLLCLK_DIV1) || \ + ((ADCCLK) == RCC_ADC1PLLCLK_DIV2) || ((ADCCLK) == RCC_ADC1PLLCLK_DIV4) || \ + ((ADCCLK) == RCC_ADC1PLLCLK_DIV6) || ((ADCCLK) == RCC_ADC1PLLCLK_DIV8) || \ + ((ADCCLK) == RCC_ADC1PLLCLK_DIV10) || ((ADCCLK) == RCC_ADC1PLLCLK_DIV12) || \ + ((ADCCLK) == RCC_ADC1PLLCLK_DIV16) || ((ADCCLK) == RCC_ADC1PLLCLK_DIV32) || \ + ((ADCCLK) == RCC_ADC1PLLCLK_DIV64) || ((ADCCLK) == RCC_ADC1PLLCLK_DIV128) || \ + ((ADCCLK) == RCC_ADC1PLLCLK_DIV256)) +#define IS_RCC_I2SCLKSOURCE(SOURCE) (((SOURCE) == RCC_I2SCLKSOURCE_SYSCLK) || \ + ((SOURCE) == RCC_I2SCLKSOURCE_EXT)) +#define IS_RCC_TIM1CLKSOURCE(SOURCE) (((SOURCE) == RCC_TIM1CLK_HCLK) || \ + ((SOURCE) == RCC_TIM1CLK_PLLCLK)) +#define IS_RCC_TIM15CLKSOURCE(SOURCE) (((SOURCE) == RCC_TIM15CLK_HCLK) || \ + ((SOURCE) == RCC_TIM15CLK_PLLCLK)) +#define IS_RCC_TIM16CLKSOURCE(SOURCE) (((SOURCE) == RCC_TIM16CLK_HCLK) || \ + ((SOURCE) == RCC_TIM16CLK_PLLCLK)) +#define IS_RCC_TIM17CLKSOURCE(SOURCE) (((SOURCE) == RCC_TIM17CLK_HCLK) || \ + ((SOURCE) == RCC_TIM17CLK_PLLCLK)) +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */ +#if defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) +#define IS_RCC_USART1CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART1CLKSOURCE_PCLK2) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_SYSCLK) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_LSE) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_HSI)) +#define IS_RCC_I2C2CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2C2CLKSOURCE_HSI) || \ + ((SOURCE) == RCC_I2C2CLKSOURCE_SYSCLK)) +#define IS_RCC_ADC12PLLCLK_DIV(ADCCLK) (((ADCCLK) == RCC_ADC12PLLCLK_OFF) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV1) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV2) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV4) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV6) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV8) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV10) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV12) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV16) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV32) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV64) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV128) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV256)) +#define IS_RCC_I2SCLKSOURCE(SOURCE) (((SOURCE) == RCC_I2SCLKSOURCE_SYSCLK) || \ + ((SOURCE) == RCC_I2SCLKSOURCE_EXT)) +#define IS_RCC_TIM1CLKSOURCE(SOURCE) (((SOURCE) == RCC_TIM1CLK_HCLK) || \ + ((SOURCE) == RCC_TIM1CLK_PLLCLK)) +#define IS_RCC_UART4CLKSOURCE(SOURCE) (((SOURCE) == RCC_UART4CLKSOURCE_PCLK1) || \ + ((SOURCE) == RCC_UART4CLKSOURCE_SYSCLK) || \ + ((SOURCE) == RCC_UART4CLKSOURCE_LSE) || \ + ((SOURCE) == RCC_UART4CLKSOURCE_HSI)) +#define IS_RCC_UART5CLKSOURCE(SOURCE) (((SOURCE) == RCC_UART5CLKSOURCE_PCLK1) || \ + ((SOURCE) == RCC_UART5CLKSOURCE_SYSCLK) || \ + ((SOURCE) == RCC_UART5CLKSOURCE_LSE) || \ + ((SOURCE) == RCC_UART5CLKSOURCE_HSI)) +#endif /* STM32F302xC || STM32F303xC || STM32F358xx */ +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) +#define IS_RCC_USART1CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART1CLKSOURCE_PCLK2) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_SYSCLK) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_LSE) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_HSI)) +#define IS_RCC_I2C2CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2C2CLKSOURCE_HSI) || \ + ((SOURCE) == RCC_I2C2CLKSOURCE_SYSCLK)) +#define IS_RCC_I2C3CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2C3CLKSOURCE_HSI) || \ + ((SOURCE) == RCC_I2C3CLKSOURCE_SYSCLK)) +#define IS_RCC_ADC12PLLCLK_DIV(ADCCLK) (((ADCCLK) == RCC_ADC12PLLCLK_OFF) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV1) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV2) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV4) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV6) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV8) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV10) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV12) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV16) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV32) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV64) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV128) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV256)) +#define IS_RCC_I2SCLKSOURCE(SOURCE) (((SOURCE) == RCC_I2SCLKSOURCE_SYSCLK) || \ + ((SOURCE) == RCC_I2SCLKSOURCE_EXT)) +#define IS_RCC_TIM1CLKSOURCE(SOURCE) (((SOURCE) == RCC_TIM1CLK_HCLK) || \ + ((SOURCE) == RCC_TIM1CLK_PLLCLK)) +#define IS_RCC_TIM2CLKSOURCE(SOURCE) (((SOURCE) == RCC_TIM2CLK_HCLK) || \ + ((SOURCE) == RCC_TIM2CLK_PLLCLK)) +#define IS_RCC_TIM3CLKSOURCE(SOURCE) (((SOURCE) == RCC_TIM34CLK_HCLK) || \ + ((SOURCE) == RCC_TIM34CLK_PLLCLK)) +#define IS_RCC_TIM15CLKSOURCE(SOURCE) (((SOURCE) == RCC_TIM15CLK_HCLK) || \ + ((SOURCE) == RCC_TIM15CLK_PLLCLK)) +#define IS_RCC_TIM16CLKSOURCE(SOURCE) (((SOURCE) == RCC_TIM16CLK_HCLK) || \ + ((SOURCE) == RCC_TIM16CLK_PLLCLK)) +#define IS_RCC_TIM17CLKSOURCE(SOURCE) (((SOURCE) == RCC_TIM17CLK_HCLK) || \ + ((SOURCE) == RCC_TIM17CLK_PLLCLK)) +#define IS_RCC_UART4CLKSOURCE(SOURCE) (((SOURCE) == RCC_UART4CLKSOURCE_PCLK1) || \ + ((SOURCE) == RCC_UART4CLKSOURCE_SYSCLK) || \ + ((SOURCE) == RCC_UART4CLKSOURCE_LSE) || \ + ((SOURCE) == RCC_UART4CLKSOURCE_HSI)) +#define IS_RCC_UART5CLKSOURCE(SOURCE) (((SOURCE) == RCC_UART5CLKSOURCE_PCLK1) || \ + ((SOURCE) == RCC_UART5CLKSOURCE_SYSCLK) || \ + ((SOURCE) == RCC_UART5CLKSOURCE_LSE) || \ + ((SOURCE) == RCC_UART5CLKSOURCE_HSI)) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ +#if defined(STM32F303xE) || defined(STM32F398xx) +#define IS_RCC_TIM20CLKSOURCE(SOURCE) (((SOURCE) == RCC_TIM20CLK_HCLK) || \ + ((SOURCE) == RCC_TIM20CLK_PLLCLK)) +#endif /* STM32F303xE || STM32F398xx */ +#if defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F303xC) || defined(STM32F358xx) +#define IS_RCC_ADC34PLLCLK_DIV(ADCCLK) (((ADCCLK) == RCC_ADC34PLLCLK_OFF) || ((ADCCLK) == RCC_ADC34PLLCLK_DIV1) || \ + ((ADCCLK) == RCC_ADC34PLLCLK_DIV2) || ((ADCCLK) == RCC_ADC34PLLCLK_DIV4) || \ + ((ADCCLK) == RCC_ADC34PLLCLK_DIV6) || ((ADCCLK) == RCC_ADC34PLLCLK_DIV8) || \ + ((ADCCLK) == RCC_ADC34PLLCLK_DIV10) || ((ADCCLK) == RCC_ADC34PLLCLK_DIV12) || \ + ((ADCCLK) == RCC_ADC34PLLCLK_DIV16) || ((ADCCLK) == RCC_ADC34PLLCLK_DIV32) || \ + ((ADCCLK) == RCC_ADC34PLLCLK_DIV64) || ((ADCCLK) == RCC_ADC34PLLCLK_DIV128) || \ + ((ADCCLK) == RCC_ADC34PLLCLK_DIV256)) +#define IS_RCC_TIM8CLKSOURCE(SOURCE) (((SOURCE) == RCC_TIM8CLK_HCLK) || \ + ((SOURCE) == RCC_TIM8CLK_PLLCLK)) +#endif /* STM32F303xC || STM32F303xE || STM32F398xx || STM32F358xx */ +#if defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define IS_RCC_USART1CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART1CLKSOURCE_PCLK1) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_SYSCLK) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_LSE) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_HSI)) +#define IS_RCC_ADC12PLLCLK_DIV(ADCCLK) (((ADCCLK) == RCC_ADC12PLLCLK_OFF) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV1) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV2) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV4) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV6) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV8) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV10) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV12) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV16) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV32) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV64) || ((ADCCLK) == RCC_ADC12PLLCLK_DIV128) || \ + ((ADCCLK) == RCC_ADC12PLLCLK_DIV256)) +#define IS_RCC_TIM1CLKSOURCE(SOURCE) (((SOURCE) == RCC_TIM1CLK_HCLK) || \ + ((SOURCE) == RCC_TIM1CLK_PLLCLK)) +#endif /* STM32F303x8 || STM32F334x8 || STM32F328xx */ +#if defined(STM32F334x8) +#define IS_RCC_HRTIM1CLKSOURCE(SOURCE) (((SOURCE) == RCC_HRTIM1CLK_HCLK) || \ + ((SOURCE) == RCC_HRTIM1CLK_PLLCLK)) +#endif /* STM32F334x8 */ +#if defined(STM32F373xC) || defined(STM32F378xx) +#define IS_RCC_USART1CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART1CLKSOURCE_PCLK2) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_SYSCLK) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_LSE) || \ + ((SOURCE) == RCC_USART1CLKSOURCE_HSI)) +#define IS_RCC_I2C2CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2C2CLKSOURCE_HSI) || \ + ((SOURCE) == RCC_I2C2CLKSOURCE_SYSCLK)) +#define IS_RCC_ADC1PCLK2_DIV(ADCCLK) (((ADCCLK) == RCC_ADC1PCLK2_DIV2) || ((ADCCLK) == RCC_ADC1PCLK2_DIV4) || \ + ((ADCCLK) == RCC_ADC1PCLK2_DIV6) || ((ADCCLK) == RCC_ADC1PCLK2_DIV8)) +#define IS_RCC_CECCLKSOURCE(SOURCE) (((SOURCE) == RCC_CECCLKSOURCE_HSI) || \ + ((SOURCE) == RCC_CECCLKSOURCE_LSE)) +#define IS_RCC_SDADCSYSCLK_DIV(DIV) (((DIV) == RCC_SDADCSYSCLK_DIV1) || ((DIV) == RCC_SDADCSYSCLK_DIV2) || \ + ((DIV) == RCC_SDADCSYSCLK_DIV4) || ((DIV) == RCC_SDADCSYSCLK_DIV6) || \ + ((DIV) == RCC_SDADCSYSCLK_DIV8) || ((DIV) == RCC_SDADCSYSCLK_DIV10) || \ + ((DIV) == RCC_SDADCSYSCLK_DIV12) || ((DIV) == RCC_SDADCSYSCLK_DIV14) || \ + ((DIV) == RCC_SDADCSYSCLK_DIV16) || ((DIV) == RCC_SDADCSYSCLK_DIV20) || \ + ((DIV) == RCC_SDADCSYSCLK_DIV24) || ((DIV) == RCC_SDADCSYSCLK_DIV28) || \ + ((DIV) == RCC_SDADCSYSCLK_DIV32) || ((DIV) == RCC_SDADCSYSCLK_DIV36) || \ + ((DIV) == RCC_SDADCSYSCLK_DIV40) || ((DIV) == RCC_SDADCSYSCLK_DIV44) || \ + ((DIV) == RCC_SDADCSYSCLK_DIV48)) +#endif /* STM32F373xC || STM32F378xx */ +#if defined(STM32F302xE) || defined(STM32F303xE)\ + || defined(STM32F302xC) || defined(STM32F303xC)\ + || defined(STM32F302x8) \ + || defined(STM32F373xC) +#define IS_RCC_USBCLKSOURCE(SOURCE) (((SOURCE) == RCC_USBCLKSOURCE_PLL) || \ + ((SOURCE) == RCC_USBCLKSOURCE_PLL_DIV1_5)) +#endif /* STM32F302xE || STM32F303xE || */ + /* STM32F302xC || STM32F303xC || */ + /* STM32F302x8 || */ + /* STM32F373xC */ +#if defined(RCC_CFGR_MCOPRE) +#define IS_RCC_MCODIV(DIV) (((DIV) == RCC_MCODIV_1) || ((DIV) == RCC_MCODIV_2) || \ + ((DIV) == RCC_MCODIV_4) || ((DIV) == RCC_MCODIV_8) || \ + ((DIV) == RCC_MCODIV_16) || ((DIV) == RCC_MCODIV_32) || \ + ((DIV) == RCC_MCODIV_64) || ((DIV) == RCC_MCODIV_128)) +#else +#define IS_RCC_MCODIV(DIV) (((DIV) == RCC_MCODIV_1)) +#endif /* RCC_CFGR_MCOPRE */ + +#define IS_RCC_LSE_DRIVE(__DRIVE__) (((__DRIVE__) == RCC_LSEDRIVE_LOW) || \ + ((__DRIVE__) == RCC_LSEDRIVE_MEDIUMLOW) || \ + ((__DRIVE__) == RCC_LSEDRIVE_MEDIUMHIGH) || \ + ((__DRIVE__) == RCC_LSEDRIVE_HIGH)) + +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup RCCEx_Exported_Types RCCEx Exported Types + * @{ + */ + +/** + * @brief RCC extended clocks structure definition + */ +#if defined(STM32F301x8) || defined(STM32F318xx) +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCCEx_USART1_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t I2c2ClockSelection; /*!< I2C2 clock source + This parameter can be a value of @ref RCCEx_I2C2_Clock_Source */ + + uint32_t I2c3ClockSelection; /*!< I2C3 clock source + This parameter can be a value of @ref RCCEx_I2C3_Clock_Source */ + + uint32_t Adc1ClockSelection; /*!< ADC1 clock source + This parameter can be a value of @ref RCCEx_ADC1_Clock_Source */ + + uint32_t I2sClockSelection; /*!< I2S clock source + This parameter can be a value of @ref RCCEx_I2S_Clock_Source */ + + uint32_t Tim1ClockSelection; /*!< TIM1 clock source + This parameter can be a value of @ref RCCEx_TIM1_Clock_Source */ + + uint32_t Tim15ClockSelection; /*!< TIM15 clock source + This parameter can be a value of @ref RCCEx_TIM15_Clock_Source */ + + uint32_t Tim16ClockSelection; /*!< TIM16 clock source + This parameter can be a value of @ref RCCEx_TIM16_Clock_Source */ + + uint32_t Tim17ClockSelection; /*!< TIM17 clock source + This parameter can be a value of @ref RCCEx_TIM17_Clock_Source */ +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F301x8 || STM32F318xx */ + +#if defined(STM32F302x8) +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCCEx_USART1_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t I2c2ClockSelection; /*!< I2C2 clock source + This parameter can be a value of @ref RCCEx_I2C2_Clock_Source */ + + uint32_t I2c3ClockSelection; /*!< I2C3 clock source + This parameter can be a value of @ref RCCEx_I2C3_Clock_Source */ + + uint32_t Adc1ClockSelection; /*!< ADC1 clock source + This parameter can be a value of @ref RCCEx_ADC1_Clock_Source */ + + uint32_t I2sClockSelection; /*!< I2S clock source + This parameter can be a value of @ref RCCEx_I2S_Clock_Source */ + + uint32_t Tim1ClockSelection; /*!< TIM1 clock source + This parameter can be a value of @ref RCCEx_TIM1_Clock_Source */ + + uint32_t Tim15ClockSelection; /*!< TIM15 clock source + This parameter can be a value of @ref RCCEx_TIM15_Clock_Source */ + + uint32_t Tim16ClockSelection; /*!< TIM16 clock source + This parameter can be a value of @ref RCCEx_TIM16_Clock_Source */ + + uint32_t Tim17ClockSelection; /*!< TIM17 clock source + This parameter can be a value of @ref RCCEx_TIM17_Clock_Source */ + + uint32_t USBClockSelection; /*!< USB clock source + This parameter can be a value of @ref RCCEx_USB_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F302x8 */ + +#if defined(STM32F302xC) +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCCEx_USART1_Clock_Source */ + + uint32_t Usart2ClockSelection; /*!< USART2 clock source + This parameter can be a value of @ref RCC_USART2_Clock_Source */ + + uint32_t Usart3ClockSelection; /*!< USART3 clock source + This parameter can be a value of @ref RCC_USART3_Clock_Source */ + + uint32_t Uart4ClockSelection; /*!< UART4 clock source + This parameter can be a value of @ref RCCEx_UART4_Clock_Source */ + + uint32_t Uart5ClockSelection; /*!< UART5 clock source + This parameter can be a value of @ref RCCEx_UART5_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t I2c2ClockSelection; /*!< I2C2 clock source + This parameter can be a value of @ref RCCEx_I2C2_Clock_Source */ + + uint32_t Adc12ClockSelection; /*!< ADC1 & ADC2 clock source + This parameter can be a value of @ref RCCEx_ADC12_Clock_Source */ + + uint32_t I2sClockSelection; /*!< I2S clock source + This parameter can be a value of @ref RCCEx_I2S_Clock_Source */ + + uint32_t Tim1ClockSelection; /*!< TIM1 clock source + This parameter can be a value of @ref RCCEx_TIM1_Clock_Source */ + + uint32_t USBClockSelection; /*!< USB clock source + This parameter can be a value of @ref RCCEx_USB_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F302xC */ + +#if defined(STM32F303xC) +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCCEx_USART1_Clock_Source */ + + uint32_t Usart2ClockSelection; /*!< USART2 clock source + This parameter can be a value of @ref RCC_USART2_Clock_Source */ + + uint32_t Usart3ClockSelection; /*!< USART3 clock source + This parameter can be a value of @ref RCC_USART3_Clock_Source */ + + uint32_t Uart4ClockSelection; /*!< UART4 clock source + This parameter can be a value of @ref RCCEx_UART4_Clock_Source */ + + uint32_t Uart5ClockSelection; /*!< UART5 clock source + This parameter can be a value of @ref RCCEx_UART5_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t I2c2ClockSelection; /*!< I2C2 clock source + This parameter can be a value of @ref RCCEx_I2C2_Clock_Source */ + + uint32_t Adc12ClockSelection; /*!< ADC1 & ADC2 clock source + This parameter can be a value of @ref RCCEx_ADC12_Clock_Source */ + + uint32_t Adc34ClockSelection; /*!< ADC3 & ADC4 clock source + This parameter can be a value of @ref RCCEx_ADC34_Clock_Source */ + + uint32_t I2sClockSelection; /*!< I2S clock source + This parameter can be a value of @ref RCCEx_I2S_Clock_Source */ + + uint32_t Tim1ClockSelection; /*!< TIM1 clock source + This parameter can be a value of @ref RCCEx_TIM1_Clock_Source */ + + uint32_t Tim8ClockSelection; /*!< TIM8 clock source + This parameter can be a value of @ref RCCEx_TIM8_Clock_Source */ + + uint32_t USBClockSelection; /*!< USB clock source + This parameter can be a value of @ref RCCEx_USB_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F303xC */ + +#if defined(STM32F302xE) +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCCEx_USART1_Clock_Source */ + + uint32_t Usart2ClockSelection; /*!< USART2 clock source + This parameter can be a value of @ref RCC_USART2_Clock_Source */ + + uint32_t Usart3ClockSelection; /*!< USART3 clock source + This parameter can be a value of @ref RCC_USART3_Clock_Source */ + + uint32_t Uart4ClockSelection; /*!< UART4 clock source + This parameter can be a value of @ref RCCEx_UART4_Clock_Source */ + + uint32_t Uart5ClockSelection; /*!< UART5 clock source + This parameter can be a value of @ref RCCEx_UART5_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t I2c2ClockSelection; /*!< I2C2 clock source + This parameter can be a value of @ref RCCEx_I2C2_Clock_Source */ + + uint32_t I2c3ClockSelection; /*!< I2C3 clock source + This parameter can be a value of @ref RCCEx_I2C3_Clock_Source */ + + uint32_t Adc12ClockSelection; /*!< ADC1 & ADC2 clock source + This parameter can be a value of @ref RCCEx_ADC12_Clock_Source */ + + uint32_t I2sClockSelection; /*!< I2S clock source + This parameter can be a value of @ref RCCEx_I2S_Clock_Source */ + + uint32_t Tim1ClockSelection; /*!< TIM1 clock source + This parameter can be a value of @ref RCCEx_TIM1_Clock_Source */ + + uint32_t Tim2ClockSelection; /*!< TIM2 clock source + This parameter can be a value of @ref RCCEx_TIM2_Clock_Source */ + + uint32_t Tim34ClockSelection; /*!< TIM3 & TIM4 clock source + This parameter can be a value of @ref RCCEx_TIM34_Clock_Source */ + + uint32_t Tim15ClockSelection; /*!< TIM15 clock source + This parameter can be a value of @ref RCCEx_TIM15_Clock_Source */ + + uint32_t Tim16ClockSelection; /*!< TIM16 clock source + This parameter can be a value of @ref RCCEx_TIM16_Clock_Source */ + + uint32_t Tim17ClockSelection; /*!< TIM17 clock source + This parameter can be a value of @ref RCCEx_TIM17_Clock_Source */ + + uint32_t USBClockSelection; /*!< USB clock source + This parameter can be a value of @ref RCCEx_USB_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F302xE */ + +#if defined(STM32F303xE) +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCCEx_USART1_Clock_Source */ + + uint32_t Usart2ClockSelection; /*!< USART2 clock source + This parameter can be a value of @ref RCC_USART2_Clock_Source */ + + uint32_t Usart3ClockSelection; /*!< USART3 clock source + This parameter can be a value of @ref RCC_USART3_Clock_Source */ + + uint32_t Uart4ClockSelection; /*!< UART4 clock source + This parameter can be a value of @ref RCCEx_UART4_Clock_Source */ + + uint32_t Uart5ClockSelection; /*!< UART5 clock source + This parameter can be a value of @ref RCCEx_UART5_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t I2c2ClockSelection; /*!< I2C2 clock source + This parameter can be a value of @ref RCCEx_I2C2_Clock_Source */ + + uint32_t I2c3ClockSelection; /*!< I2C3 clock source + This parameter can be a value of @ref RCCEx_I2C3_Clock_Source */ + + uint32_t Adc12ClockSelection; /*!< ADC1 & ADC2 clock source + This parameter can be a value of @ref RCCEx_ADC12_Clock_Source */ + + uint32_t Adc34ClockSelection; /*!< ADC3 & ADC4 clock source + This parameter can be a value of @ref RCCEx_ADC34_Clock_Source */ + + uint32_t I2sClockSelection; /*!< I2S clock source + This parameter can be a value of @ref RCCEx_I2S_Clock_Source */ + + uint32_t Tim1ClockSelection; /*!< TIM1 clock source + This parameter can be a value of @ref RCCEx_TIM1_Clock_Source */ + + uint32_t Tim2ClockSelection; /*!< TIM2 clock source + This parameter can be a value of @ref RCCEx_TIM2_Clock_Source */ + + uint32_t Tim34ClockSelection; /*!< TIM3 & TIM4 clock source + This parameter can be a value of @ref RCCEx_TIM34_Clock_Source */ + + uint32_t Tim8ClockSelection; /*!< TIM8 clock source + This parameter can be a value of @ref RCCEx_TIM8_Clock_Source */ + + uint32_t Tim15ClockSelection; /*!< TIM15 clock source + This parameter can be a value of @ref RCCEx_TIM15_Clock_Source */ + + uint32_t Tim16ClockSelection; /*!< TIM16 clock source + This parameter can be a value of @ref RCCEx_TIM16_Clock_Source */ + + uint32_t Tim17ClockSelection; /*!< TIM17 clock source + This parameter can be a value of @ref RCCEx_TIM17_Clock_Source */ + + uint32_t Tim20ClockSelection; /*!< TIM20 clock source + This parameter can be a value of @ref RCCEx_TIM20_Clock_Source */ + + uint32_t USBClockSelection; /*!< USB clock source + This parameter can be a value of @ref RCCEx_USB_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F303xE */ + +#if defined(STM32F398xx) +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCCEx_USART1_Clock_Source */ + + uint32_t Usart2ClockSelection; /*!< USART2 clock source + This parameter can be a value of @ref RCC_USART2_Clock_Source */ + + uint32_t Usart3ClockSelection; /*!< USART3 clock source + This parameter can be a value of @ref RCC_USART3_Clock_Source */ + + uint32_t Uart4ClockSelection; /*!< UART4 clock source + This parameter can be a value of @ref RCCEx_UART4_Clock_Source */ + + uint32_t Uart5ClockSelection; /*!< UART5 clock source + This parameter can be a value of @ref RCCEx_UART5_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t I2c2ClockSelection; /*!< I2C2 clock source + This parameter can be a value of @ref RCCEx_I2C2_Clock_Source */ + + uint32_t I2c3ClockSelection; /*!< I2C3 clock source + This parameter can be a value of @ref RCCEx_I2C3_Clock_Source */ + + uint32_t Adc12ClockSelection; /*!< ADC1 & ADC2 clock source + This parameter can be a value of @ref RCCEx_ADC12_Clock_Source */ + + uint32_t Adc34ClockSelection; /*!< ADC3 & ADC4 clock source + This parameter can be a value of @ref RCCEx_ADC34_Clock_Source */ + + uint32_t I2sClockSelection; /*!< I2S clock source + This parameter can be a value of @ref RCCEx_I2S_Clock_Source */ + + uint32_t Tim1ClockSelection; /*!< TIM1 clock source + This parameter can be a value of @ref RCCEx_TIM1_Clock_Source */ + + uint32_t Tim2ClockSelection; /*!< TIM2 clock source + This parameter can be a value of @ref RCCEx_TIM2_Clock_Source */ + + uint32_t Tim34ClockSelection; /*!< TIM3 & TIM4 clock source + This parameter can be a value of @ref RCCEx_TIM34_Clock_Source */ + + uint32_t Tim8ClockSelection; /*!< TIM8 clock source + This parameter can be a value of @ref RCCEx_TIM8_Clock_Source */ + + uint32_t Tim15ClockSelection; /*!< TIM15 clock source + This parameter can be a value of @ref RCCEx_TIM15_Clock_Source */ + + uint32_t Tim16ClockSelection; /*!< TIM16 clock source + This parameter can be a value of @ref RCCEx_TIM16_Clock_Source */ + + uint32_t Tim17ClockSelection; /*!< TIM17 clock source + This parameter can be a value of @ref RCCEx_TIM17_Clock_Source */ + + uint32_t Tim20ClockSelection; /*!< TIM20 clock source + This parameter can be a value of @ref RCCEx_TIM20_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F398xx */ + +#if defined(STM32F358xx) +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCCEx_USART1_Clock_Source */ + + uint32_t Usart2ClockSelection; /*!< USART2 clock source + This parameter can be a value of @ref RCC_USART2_Clock_Source */ + + uint32_t Usart3ClockSelection; /*!< USART3 clock source + This parameter can be a value of @ref RCC_USART3_Clock_Source */ + + uint32_t Uart4ClockSelection; /*!< UART4 clock source + This parameter can be a value of @ref RCCEx_UART4_Clock_Source */ + + uint32_t Uart5ClockSelection; /*!< UART5 clock source + This parameter can be a value of @ref RCCEx_UART5_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t I2c2ClockSelection; /*!< I2C2 clock source + This parameter can be a value of @ref RCCEx_I2C2_Clock_Source */ + + uint32_t Adc12ClockSelection; /*!< ADC1 & ADC2 clock source + This parameter can be a value of @ref RCCEx_ADC12_Clock_Source */ + + uint32_t Adc34ClockSelection; /*!< ADC3 & ADC4 clock source + This parameter can be a value of @ref RCCEx_ADC34_Clock_Source */ + + uint32_t I2sClockSelection; /*!< I2S clock source + This parameter can be a value of @ref RCCEx_I2S_Clock_Source */ + + uint32_t Tim1ClockSelection; /*!< TIM1 clock source + This parameter can be a value of @ref RCCEx_TIM1_Clock_Source */ + + uint32_t Tim8ClockSelection; /*!< TIM8 clock source + This parameter can be a value of @ref RCCEx_TIM8_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F358xx */ + +#if defined(STM32F303x8) +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCCEx_USART1_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t Adc12ClockSelection; /*!< ADC1 & ADC2 clock source + This parameter can be a value of @ref RCCEx_ADC12_Clock_Source */ + + uint32_t Tim1ClockSelection; /*!< TIM1 clock source + This parameter can be a value of @ref RCCEx_TIM1_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F303x8 */ + +#if defined(STM32F334x8) +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCCEx_USART1_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t Adc12ClockSelection; /*!< ADC1 & ADC2 clock source + This parameter can be a value of @ref RCCEx_ADC12_Clock_Source */ + + uint32_t Tim1ClockSelection; /*!< TIM1 clock source + This parameter can be a value of @ref RCCEx_TIM1_Clock_Source */ + + uint32_t Hrtim1ClockSelection; /*!< HRTIM1 clock source + This parameter can be a value of @ref RCCEx_HRTIM1_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F334x8 */ + +#if defined(STM32F328xx) +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCCEx_USART1_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t Adc12ClockSelection; /*!< ADC1 & ADC2 clock source + This parameter can be a value of @ref RCCEx_ADC12_Clock_Source */ + + uint32_t Tim1ClockSelection; /*!< TIM1 clock source + This parameter can be a value of @ref RCCEx_TIM1_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F328xx */ + +#if defined(STM32F373xC) +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCCEx_USART1_Clock_Source */ + + uint32_t Usart2ClockSelection; /*!< USART2 clock source + This parameter can be a value of @ref RCC_USART2_Clock_Source */ + + uint32_t Usart3ClockSelection; /*!< USART3 clock source + This parameter can be a value of @ref RCC_USART3_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t I2c2ClockSelection; /*!< I2C2 clock source + This parameter can be a value of @ref RCCEx_I2C2_Clock_Source */ + + uint32_t Adc1ClockSelection; /*!< ADC1 clock source + This parameter can be a value of @ref RCCEx_ADC1_Clock_Source */ + + uint32_t SdadcClockSelection; /*!< SDADC clock prescaler + This parameter can be a value of @ref RCCEx_SDADC_Clock_Prescaler */ + + uint32_t CecClockSelection; /*!< HDMI CEC clock source + This parameter can be a value of @ref RCCEx_CEC_Clock_Source */ + + uint32_t USBClockSelection; /*!< USB clock source + This parameter can be a value of @ref RCCEx_USB_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F373xC */ + +#if defined(STM32F378xx) +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCCEx_USART1_Clock_Source */ + + uint32_t Usart2ClockSelection; /*!< USART2 clock source + This parameter can be a value of @ref RCC_USART2_Clock_Source */ + + uint32_t Usart3ClockSelection; /*!< USART3 clock source + This parameter can be a value of @ref RCC_USART3_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t I2c2ClockSelection; /*!< I2C2 clock source + This parameter can be a value of @ref RCCEx_I2C2_Clock_Source */ + + uint32_t Adc1ClockSelection; /*!< ADC1 clock source + This parameter can be a value of @ref RCCEx_ADC1_Clock_Source */ + + uint32_t SdadcClockSelection; /*!< SDADC clock prescaler + This parameter can be a value of @ref RCCEx_SDADC_Clock_Prescaler */ + + uint32_t CecClockSelection; /*!< HDMI CEC clock source + This parameter can be a value of @ref RCCEx_CEC_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F378xx */ + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup RCCEx_Exported_Constants RCC Extended Exported Constants + * @{ + */ +/** @defgroup RCCEx_MCO_Clock_Source RCC Extended MCO Clock Source + * @{ + */ +#define RCC_MCO1SOURCE_NOCLOCK RCC_CFGR_MCO_NOCLOCK +#define RCC_MCO1SOURCE_LSI RCC_CFGR_MCO_LSI +#define RCC_MCO1SOURCE_LSE RCC_CFGR_MCO_LSE +#define RCC_MCO1SOURCE_SYSCLK RCC_CFGR_MCO_SYSCLK +#define RCC_MCO1SOURCE_HSI RCC_CFGR_MCO_HSI +#define RCC_MCO1SOURCE_HSE RCC_CFGR_MCO_HSE +#if defined(RCC_CFGR_PLLNODIV) +#define RCC_MCO1SOURCE_PLLCLK (RCC_CFGR_PLLNODIV | RCC_CFGR_MCO_PLL) +#endif /* RCC_CFGR_PLLNODIV */ +#define RCC_MCO1SOURCE_PLLCLK_DIV2 RCC_CFGR_MCO_PLL + +/** + * @} + */ + +/** @defgroup RCCEx_Periph_Clock_Selection RCC Extended Periph Clock Selection + * @{ + */ +#if defined(STM32F301x8) || defined(STM32F318xx) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_I2C2 (0x00000040U) +#define RCC_PERIPHCLK_ADC1 (0x00000080U) +#define RCC_PERIPHCLK_I2S (0x00000200U) +#define RCC_PERIPHCLK_TIM1 (0x00001000U) +#define RCC_PERIPHCLK_I2C3 (0x00008000U) +#define RCC_PERIPHCLK_RTC (0x00010000U) +#define RCC_PERIPHCLK_TIM15 (0x00040000U) +#define RCC_PERIPHCLK_TIM16 (0x00080000U) +#define RCC_PERIPHCLK_TIM17 (0x00100000U) + +#endif /* STM32F301x8 || STM32F318xx */ + +#if defined(STM32F302x8) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_I2C2 (0x00000040U) +#define RCC_PERIPHCLK_ADC1 (0x00000080U) +#define RCC_PERIPHCLK_I2S (0x00000200U) +#define RCC_PERIPHCLK_TIM1 (0x00001000U) +#define RCC_PERIPHCLK_I2C3 (0x00008000U) +#define RCC_PERIPHCLK_RTC (0x00010000U) +#define RCC_PERIPHCLK_USB (0x00020000U) +#define RCC_PERIPHCLK_TIM15 (0x00040000U) +#define RCC_PERIPHCLK_TIM16 (0x00080000U) +#define RCC_PERIPHCLK_TIM17 (0x00100000U) + + +#endif /* STM32F302x8 */ + +#if defined(STM32F302xC) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_USART2 (0x00000002U) +#define RCC_PERIPHCLK_USART3 (0x00000004U) +#define RCC_PERIPHCLK_UART4 (0x00000008U) +#define RCC_PERIPHCLK_UART5 (0x00000010U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_I2C2 (0x00000040U) +#define RCC_PERIPHCLK_ADC12 (0x00000080U) +#define RCC_PERIPHCLK_I2S (0x00000200U) +#define RCC_PERIPHCLK_TIM1 (0x00001000U) +#define RCC_PERIPHCLK_RTC (0x00010000U) +#define RCC_PERIPHCLK_USB (0x00020000U) + +#endif /* STM32F302xC */ + +#if defined(STM32F303xC) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_USART2 (0x00000002U) +#define RCC_PERIPHCLK_USART3 (0x00000004U) +#define RCC_PERIPHCLK_UART4 (0x00000008U) +#define RCC_PERIPHCLK_UART5 (0x00000010U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_I2C2 (0x00000040U) +#define RCC_PERIPHCLK_ADC12 (0x00000080U) +#define RCC_PERIPHCLK_ADC34 (0x00000100U) +#define RCC_PERIPHCLK_I2S (0x00000200U) +#define RCC_PERIPHCLK_TIM1 (0x00001000U) +#define RCC_PERIPHCLK_TIM8 (0x00002000U) +#define RCC_PERIPHCLK_RTC (0x00010000U) +#define RCC_PERIPHCLK_USB (0x00020000U) + +#endif /* STM32F303xC */ + +#if defined(STM32F302xE) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_USART2 (0x00000002U) +#define RCC_PERIPHCLK_USART3 (0x00000004U) +#define RCC_PERIPHCLK_UART4 (0x00000008U) +#define RCC_PERIPHCLK_UART5 (0x00000010U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_I2C2 (0x00000040U) +#define RCC_PERIPHCLK_ADC12 (0x00000080U) +#define RCC_PERIPHCLK_I2S (0x00000200U) +#define RCC_PERIPHCLK_TIM1 (0x00001000U) +#define RCC_PERIPHCLK_RTC (0x00010000U) +#define RCC_PERIPHCLK_USB (0x00020000U) +#define RCC_PERIPHCLK_I2C3 (0x00040000U) +#define RCC_PERIPHCLK_TIM2 (0x00100000U) +#define RCC_PERIPHCLK_TIM34 (0x00200000U) +#define RCC_PERIPHCLK_TIM15 (0x00400000U) +#define RCC_PERIPHCLK_TIM16 (0x00800000U) +#define RCC_PERIPHCLK_TIM17 (0x01000000U) + +#endif /* STM32F302xE */ + +#if defined(STM32F303xE) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_USART2 (0x00000002U) +#define RCC_PERIPHCLK_USART3 (0x00000004U) +#define RCC_PERIPHCLK_UART4 (0x00000008U) +#define RCC_PERIPHCLK_UART5 (0x00000010U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_I2C2 (0x00000040U) +#define RCC_PERIPHCLK_ADC12 (0x00000080U) +#define RCC_PERIPHCLK_ADC34 (0x00000100U) +#define RCC_PERIPHCLK_I2S (0x00000200U) +#define RCC_PERIPHCLK_TIM1 (0x00001000U) +#define RCC_PERIPHCLK_TIM8 (0x00002000U) +#define RCC_PERIPHCLK_RTC (0x00010000U) +#define RCC_PERIPHCLK_USB (0x00020000U) +#define RCC_PERIPHCLK_I2C3 (0x00040000U) +#define RCC_PERIPHCLK_TIM2 (0x00100000U) +#define RCC_PERIPHCLK_TIM34 (0x00200000U) +#define RCC_PERIPHCLK_TIM15 (0x00400000U) +#define RCC_PERIPHCLK_TIM16 (0x00800000U) +#define RCC_PERIPHCLK_TIM17 (0x01000000U) +#define RCC_PERIPHCLK_TIM20 (0x02000000U) + +#endif /* STM32F303xE */ + +#if defined(STM32F398xx) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_USART2 (0x00000002U) +#define RCC_PERIPHCLK_USART3 (0x00000004U) +#define RCC_PERIPHCLK_UART4 (0x00000008U) +#define RCC_PERIPHCLK_UART5 (0x00000010U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_I2C2 (0x00000040U) +#define RCC_PERIPHCLK_ADC12 (0x00000080U) +#define RCC_PERIPHCLK_ADC34 (0x00000100U) +#define RCC_PERIPHCLK_I2S (0x00000200U) +#define RCC_PERIPHCLK_TIM1 (0x00001000U) +#define RCC_PERIPHCLK_TIM8 (0x00002000U) +#define RCC_PERIPHCLK_RTC (0x00010000U) +#define RCC_PERIPHCLK_I2C3 (0x00040000U) +#define RCC_PERIPHCLK_TIM2 (0x00100000U) +#define RCC_PERIPHCLK_TIM34 (0x00200000U) +#define RCC_PERIPHCLK_TIM15 (0x00400000U) +#define RCC_PERIPHCLK_TIM16 (0x00800000U) +#define RCC_PERIPHCLK_TIM17 (0x01000000U) +#define RCC_PERIPHCLK_TIM20 (0x02000000U) + + +#endif /* STM32F398xx */ + +#if defined(STM32F358xx) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_USART2 (0x00000002U) +#define RCC_PERIPHCLK_USART3 (0x00000004U) +#define RCC_PERIPHCLK_UART4 (0x00000008U) +#define RCC_PERIPHCLK_UART5 (0x00000010U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_I2C2 (0x00000040U) +#define RCC_PERIPHCLK_ADC12 (0x00000080U) +#define RCC_PERIPHCLK_ADC34 (0x00000100U) +#define RCC_PERIPHCLK_I2S (0x00000200U) +#define RCC_PERIPHCLK_TIM1 (0x00001000U) +#define RCC_PERIPHCLK_TIM8 (0x00002000U) +#define RCC_PERIPHCLK_RTC (0x00010000U) + +#endif /* STM32F358xx */ + +#if defined(STM32F303x8) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_ADC12 (0x00000080U) +#define RCC_PERIPHCLK_TIM1 (0x00001000U) +#define RCC_PERIPHCLK_RTC (0x00010000U) + +#endif /* STM32F303x8 */ + +#if defined(STM32F334x8) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_ADC12 (0x00000080U) +#define RCC_PERIPHCLK_TIM1 (0x00001000U) +#define RCC_PERIPHCLK_HRTIM1 (0x00004000U) +#define RCC_PERIPHCLK_RTC (0x00010000U) + + +#endif /* STM32F334x8 */ + +#if defined(STM32F328xx) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_ADC12 (0x00000080U) +#define RCC_PERIPHCLK_TIM1 (0x00001000U) +#define RCC_PERIPHCLK_RTC (0x00010000U) + +#endif /* STM32F328xx */ + +#if defined(STM32F373xC) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_USART2 (0x00000002U) +#define RCC_PERIPHCLK_USART3 (0x00000004U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_I2C2 (0x00000040U) +#define RCC_PERIPHCLK_ADC1 (0x00000080U) +#define RCC_PERIPHCLK_CEC (0x00000400U) +#define RCC_PERIPHCLK_SDADC (0x00000800U) +#define RCC_PERIPHCLK_RTC (0x00010000U) +#define RCC_PERIPHCLK_USB (0x00020000U) + +#endif /* STM32F373xC */ + +#if defined(STM32F378xx) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_USART2 (0x00000002U) +#define RCC_PERIPHCLK_USART3 (0x00000004U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_I2C2 (0x00000040U) +#define RCC_PERIPHCLK_ADC1 (0x00000080U) +#define RCC_PERIPHCLK_CEC (0x00000400U) +#define RCC_PERIPHCLK_SDADC (0x00000800U) +#define RCC_PERIPHCLK_RTC (0x00010000U) + +#endif /* STM32F378xx */ +/** + * @} + */ + +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) + +/** @defgroup RCCEx_USART1_Clock_Source RCC Extended USART1 Clock Source + * @{ + */ +#define RCC_USART1CLKSOURCE_PCLK1 RCC_CFGR3_USART1SW_PCLK1 +#define RCC_USART1CLKSOURCE_SYSCLK RCC_CFGR3_USART1SW_SYSCLK +#define RCC_USART1CLKSOURCE_LSE RCC_CFGR3_USART1SW_LSE +#define RCC_USART1CLKSOURCE_HSI RCC_CFGR3_USART1SW_HSI + +/** + * @} + */ + +/** @defgroup RCCEx_I2C2_Clock_Source RCC Extended I2C2 Clock Source + * @{ + */ +#define RCC_I2C2CLKSOURCE_HSI RCC_CFGR3_I2C2SW_HSI +#define RCC_I2C2CLKSOURCE_SYSCLK RCC_CFGR3_I2C2SW_SYSCLK + +/** + * @} + */ + +/** @defgroup RCCEx_I2C3_Clock_Source RCC Extended I2C3 Clock Source + * @{ + */ +#define RCC_I2C3CLKSOURCE_HSI RCC_CFGR3_I2C3SW_HSI +#define RCC_I2C3CLKSOURCE_SYSCLK RCC_CFGR3_I2C3SW_SYSCLK + +/** + * @} + */ + +/** @defgroup RCCEx_ADC1_Clock_Source RCC Extended ADC1 Clock Source + * @{ + */ +#define RCC_ADC1PLLCLK_OFF RCC_CFGR2_ADC1PRES_NO +#define RCC_ADC1PLLCLK_DIV1 RCC_CFGR2_ADC1PRES_DIV1 +#define RCC_ADC1PLLCLK_DIV2 RCC_CFGR2_ADC1PRES_DIV2 +#define RCC_ADC1PLLCLK_DIV4 RCC_CFGR2_ADC1PRES_DIV4 +#define RCC_ADC1PLLCLK_DIV6 RCC_CFGR2_ADC1PRES_DIV6 +#define RCC_ADC1PLLCLK_DIV8 RCC_CFGR2_ADC1PRES_DIV8 +#define RCC_ADC1PLLCLK_DIV10 RCC_CFGR2_ADC1PRES_DIV10 +#define RCC_ADC1PLLCLK_DIV12 RCC_CFGR2_ADC1PRES_DIV12 +#define RCC_ADC1PLLCLK_DIV16 RCC_CFGR2_ADC1PRES_DIV16 +#define RCC_ADC1PLLCLK_DIV32 RCC_CFGR2_ADC1PRES_DIV32 +#define RCC_ADC1PLLCLK_DIV64 RCC_CFGR2_ADC1PRES_DIV64 +#define RCC_ADC1PLLCLK_DIV128 RCC_CFGR2_ADC1PRES_DIV128 +#define RCC_ADC1PLLCLK_DIV256 RCC_CFGR2_ADC1PRES_DIV256 + +/** + * @} + */ + +/** @defgroup RCCEx_I2S_Clock_Source RCC Extended I2S Clock Source + * @{ + */ +#define RCC_I2SCLKSOURCE_SYSCLK RCC_CFGR_I2SSRC_SYSCLK +#define RCC_I2SCLKSOURCE_EXT RCC_CFGR_I2SSRC_EXT + +/** + * @} + */ + +/** @defgroup RCCEx_TIM1_Clock_Source RCC Extended TIM1 Clock Source + * @{ + */ +#define RCC_TIM1CLK_HCLK RCC_CFGR3_TIM1SW_HCLK +#define RCC_TIM1CLK_PLLCLK RCC_CFGR3_TIM1SW_PLL + +/** + * @} + */ + +/** @defgroup RCCEx_TIM15_Clock_Source RCC Extended TIM15 Clock Source + * @{ + */ +#define RCC_TIM15CLK_HCLK RCC_CFGR3_TIM15SW_HCLK +#define RCC_TIM15CLK_PLLCLK RCC_CFGR3_TIM15SW_PLL + +/** + * @} + */ + +/** @defgroup RCCEx_TIM16_Clock_Source RCC Extended TIM16 Clock Source + * @{ + */ +#define RCC_TIM16CLK_HCLK RCC_CFGR3_TIM16SW_HCLK +#define RCC_TIM16CLK_PLLCLK RCC_CFGR3_TIM16SW_PLL + +/** + * @} + */ + +/** @defgroup RCCEx_TIM17_Clock_Source RCC Extended TIM17 Clock Source + * @{ + */ +#define RCC_TIM17CLK_HCLK RCC_CFGR3_TIM17SW_HCLK +#define RCC_TIM17CLK_PLLCLK RCC_CFGR3_TIM17SW_PLL + +/** + * @} + */ + +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) + +/** @defgroup RCCEx_USART1_Clock_Source RCC Extended USART1 Clock Source + * @{ + */ +#define RCC_USART1CLKSOURCE_PCLK2 RCC_CFGR3_USART1SW_PCLK2 +#define RCC_USART1CLKSOURCE_SYSCLK RCC_CFGR3_USART1SW_SYSCLK +#define RCC_USART1CLKSOURCE_LSE RCC_CFGR3_USART1SW_LSE +#define RCC_USART1CLKSOURCE_HSI RCC_CFGR3_USART1SW_HSI + +/** + * @} + */ + +/** @defgroup RCCEx_I2C2_Clock_Source RCC Extended I2C2 Clock Source + * @{ + */ +#define RCC_I2C2CLKSOURCE_HSI RCC_CFGR3_I2C2SW_HSI +#define RCC_I2C2CLKSOURCE_SYSCLK RCC_CFGR3_I2C2SW_SYSCLK + +/** + * @} + */ + +/** @defgroup RCCEx_ADC12_Clock_Source RCC Extended ADC12 Clock Source + * @{ + */ + +/* ADC1 & ADC2 */ +#define RCC_ADC12PLLCLK_OFF RCC_CFGR2_ADCPRE12_NO +#define RCC_ADC12PLLCLK_DIV1 RCC_CFGR2_ADCPRE12_DIV1 +#define RCC_ADC12PLLCLK_DIV2 RCC_CFGR2_ADCPRE12_DIV2 +#define RCC_ADC12PLLCLK_DIV4 RCC_CFGR2_ADCPRE12_DIV4 +#define RCC_ADC12PLLCLK_DIV6 RCC_CFGR2_ADCPRE12_DIV6 +#define RCC_ADC12PLLCLK_DIV8 RCC_CFGR2_ADCPRE12_DIV8 +#define RCC_ADC12PLLCLK_DIV10 RCC_CFGR2_ADCPRE12_DIV10 +#define RCC_ADC12PLLCLK_DIV12 RCC_CFGR2_ADCPRE12_DIV12 +#define RCC_ADC12PLLCLK_DIV16 RCC_CFGR2_ADCPRE12_DIV16 +#define RCC_ADC12PLLCLK_DIV32 RCC_CFGR2_ADCPRE12_DIV32 +#define RCC_ADC12PLLCLK_DIV64 RCC_CFGR2_ADCPRE12_DIV64 +#define RCC_ADC12PLLCLK_DIV128 RCC_CFGR2_ADCPRE12_DIV128 +#define RCC_ADC12PLLCLK_DIV256 RCC_CFGR2_ADCPRE12_DIV256 + +/** + * @} + */ + +/** @defgroup RCCEx_I2S_Clock_Source RCC Extended I2S Clock Source + * @{ + */ +#define RCC_I2SCLKSOURCE_SYSCLK RCC_CFGR_I2SSRC_SYSCLK +#define RCC_I2SCLKSOURCE_EXT RCC_CFGR_I2SSRC_EXT + +/** + * @} + */ +/** @defgroup RCCEx_TIM1_Clock_Source RCC Extended TIM1 Clock Source + * @{ + */ +#define RCC_TIM1CLK_HCLK RCC_CFGR3_TIM1SW_HCLK +#define RCC_TIM1CLK_PLLCLK RCC_CFGR3_TIM1SW_PLL + +/** + * @} + */ + +/** @defgroup RCCEx_UART4_Clock_Source RCC Extended UART4 Clock Source + * @{ + */ +#define RCC_UART4CLKSOURCE_PCLK1 RCC_CFGR3_UART4SW_PCLK +#define RCC_UART4CLKSOURCE_SYSCLK RCC_CFGR3_UART4SW_SYSCLK +#define RCC_UART4CLKSOURCE_LSE RCC_CFGR3_UART4SW_LSE +#define RCC_UART4CLKSOURCE_HSI RCC_CFGR3_UART4SW_HSI + +/** + * @} + */ + +/** @defgroup RCCEx_UART5_Clock_Source RCC Extended UART5 Clock Source + * @{ + */ +#define RCC_UART5CLKSOURCE_PCLK1 RCC_CFGR3_UART5SW_PCLK +#define RCC_UART5CLKSOURCE_SYSCLK RCC_CFGR3_UART5SW_SYSCLK +#define RCC_UART5CLKSOURCE_LSE RCC_CFGR3_UART5SW_LSE +#define RCC_UART5CLKSOURCE_HSI RCC_CFGR3_UART5SW_HSI + +/** + * @} + */ + +#endif /* STM32F302xC || STM32F303xC || STM32F358xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) + +/** @defgroup RCCEx_USART1_Clock_Source RCC Extended USART1 Clock Source + * @{ + */ +#define RCC_USART1CLKSOURCE_PCLK2 RCC_CFGR3_USART1SW_PCLK2 +#define RCC_USART1CLKSOURCE_SYSCLK RCC_CFGR3_USART1SW_SYSCLK +#define RCC_USART1CLKSOURCE_LSE RCC_CFGR3_USART1SW_LSE +#define RCC_USART1CLKSOURCE_HSI RCC_CFGR3_USART1SW_HSI + +/** + * @} + */ + +/** @defgroup RCCEx_I2C2_Clock_Source RCC Extended I2C2 Clock Source + * @{ + */ +#define RCC_I2C2CLKSOURCE_HSI RCC_CFGR3_I2C2SW_HSI +#define RCC_I2C2CLKSOURCE_SYSCLK RCC_CFGR3_I2C2SW_SYSCLK + +/** + * @} + */ + +/** @defgroup RCCEx_I2C3_Clock_Source RCC Extended I2C3 Clock Source + * @{ + */ +#define RCC_I2C3CLKSOURCE_HSI RCC_CFGR3_I2C3SW_HSI +#define RCC_I2C3CLKSOURCE_SYSCLK RCC_CFGR3_I2C3SW_SYSCLK + +/** + * @} + */ + +/** @defgroup RCCEx_ADC12_Clock_Source RCC Extended ADC12 Clock Source + * @{ + */ + +/* ADC1 & ADC2 */ +#define RCC_ADC12PLLCLK_OFF RCC_CFGR2_ADCPRE12_NO +#define RCC_ADC12PLLCLK_DIV1 RCC_CFGR2_ADCPRE12_DIV1 +#define RCC_ADC12PLLCLK_DIV2 RCC_CFGR2_ADCPRE12_DIV2 +#define RCC_ADC12PLLCLK_DIV4 RCC_CFGR2_ADCPRE12_DIV4 +#define RCC_ADC12PLLCLK_DIV6 RCC_CFGR2_ADCPRE12_DIV6 +#define RCC_ADC12PLLCLK_DIV8 RCC_CFGR2_ADCPRE12_DIV8 +#define RCC_ADC12PLLCLK_DIV10 RCC_CFGR2_ADCPRE12_DIV10 +#define RCC_ADC12PLLCLK_DIV12 RCC_CFGR2_ADCPRE12_DIV12 +#define RCC_ADC12PLLCLK_DIV16 RCC_CFGR2_ADCPRE12_DIV16 +#define RCC_ADC12PLLCLK_DIV32 RCC_CFGR2_ADCPRE12_DIV32 +#define RCC_ADC12PLLCLK_DIV64 RCC_CFGR2_ADCPRE12_DIV64 +#define RCC_ADC12PLLCLK_DIV128 RCC_CFGR2_ADCPRE12_DIV128 +#define RCC_ADC12PLLCLK_DIV256 RCC_CFGR2_ADCPRE12_DIV256 + +/** + * @} + */ + +/** @defgroup RCCEx_I2S_Clock_Source RCC Extended I2S Clock Source + * @{ + */ +#define RCC_I2SCLKSOURCE_SYSCLK RCC_CFGR_I2SSRC_SYSCLK +#define RCC_I2SCLKSOURCE_EXT RCC_CFGR_I2SSRC_EXT + +/** + * @} + */ + +/** @defgroup RCCEx_TIM1_Clock_Source RCC Extended TIM1 Clock Source + * @{ + */ +#define RCC_TIM1CLK_HCLK RCC_CFGR3_TIM1SW_HCLK +#define RCC_TIM1CLK_PLLCLK RCC_CFGR3_TIM1SW_PLL + +/** + * @} + */ + +/** @defgroup RCCEx_TIM2_Clock_Source RCC Extended TIM2 Clock Source + * @{ + */ +#define RCC_TIM2CLK_HCLK RCC_CFGR3_TIM2SW_HCLK +#define RCC_TIM2CLK_PLLCLK RCC_CFGR3_TIM2SW_PLL + +/** + * @} + */ + +/** @defgroup RCCEx_TIM34_Clock_Source RCC Extended TIM3 & TIM4 Clock Source + * @{ + */ +#define RCC_TIM34CLK_HCLK RCC_CFGR3_TIM34SW_HCLK +#define RCC_TIM34CLK_PLLCLK RCC_CFGR3_TIM34SW_PLL + +/** + * @} + */ + +/** @defgroup RCCEx_TIM15_Clock_Source RCC Extended TIM15 Clock Source + * @{ + */ +#define RCC_TIM15CLK_HCLK RCC_CFGR3_TIM15SW_HCLK +#define RCC_TIM15CLK_PLLCLK RCC_CFGR3_TIM15SW_PLL + +/** + * @} + */ + +/** @defgroup RCCEx_TIM16_Clock_Source RCC Extended TIM16 Clock Source + * @{ + */ +#define RCC_TIM16CLK_HCLK RCC_CFGR3_TIM16SW_HCLK +#define RCC_TIM16CLK_PLLCLK RCC_CFGR3_TIM16SW_PLL + +/** + * @} + */ + +/** @defgroup RCCEx_TIM17_Clock_Source RCC Extended TIM17 Clock Source + * @{ + */ +#define RCC_TIM17CLK_HCLK RCC_CFGR3_TIM17SW_HCLK +#define RCC_TIM17CLK_PLLCLK RCC_CFGR3_TIM17SW_PLL + +/** + * @} + */ + +/** @defgroup RCCEx_UART4_Clock_Source RCC Extended UART4 Clock Source + * @{ + */ +#define RCC_UART4CLKSOURCE_PCLK1 RCC_CFGR3_UART4SW_PCLK +#define RCC_UART4CLKSOURCE_SYSCLK RCC_CFGR3_UART4SW_SYSCLK +#define RCC_UART4CLKSOURCE_LSE RCC_CFGR3_UART4SW_LSE +#define RCC_UART4CLKSOURCE_HSI RCC_CFGR3_UART4SW_HSI + +/** + * @} + */ + +/** @defgroup RCCEx_UART5_Clock_Source RCC Extended UART5 Clock Source + * @{ + */ +#define RCC_UART5CLKSOURCE_PCLK1 RCC_CFGR3_UART5SW_PCLK +#define RCC_UART5CLKSOURCE_SYSCLK RCC_CFGR3_UART5SW_SYSCLK +#define RCC_UART5CLKSOURCE_LSE RCC_CFGR3_UART5SW_LSE +#define RCC_UART5CLKSOURCE_HSI RCC_CFGR3_UART5SW_HSI + +/** + * @} + */ + +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx) +/** @defgroup RCCEx_TIM20_Clock_Source RCC Extended TIM20 Clock Source + * @{ + */ +#define RCC_TIM20CLK_HCLK RCC_CFGR3_TIM20SW_HCLK +#define RCC_TIM20CLK_PLLCLK RCC_CFGR3_TIM20SW_PLL + +/** + * @} + */ +#endif /* STM32F303xE || STM32F398xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F303xC) || defined(STM32F358xx) + +/** @defgroup RCCEx_ADC34_Clock_Source RCC Extended ADC34 Clock Source + * @{ + */ + +/* ADC3 & ADC4 */ +#define RCC_ADC34PLLCLK_OFF RCC_CFGR2_ADCPRE34_NO +#define RCC_ADC34PLLCLK_DIV1 RCC_CFGR2_ADCPRE34_DIV1 +#define RCC_ADC34PLLCLK_DIV2 RCC_CFGR2_ADCPRE34_DIV2 +#define RCC_ADC34PLLCLK_DIV4 RCC_CFGR2_ADCPRE34_DIV4 +#define RCC_ADC34PLLCLK_DIV6 RCC_CFGR2_ADCPRE34_DIV6 +#define RCC_ADC34PLLCLK_DIV8 RCC_CFGR2_ADCPRE34_DIV8 +#define RCC_ADC34PLLCLK_DIV10 RCC_CFGR2_ADCPRE34_DIV10 +#define RCC_ADC34PLLCLK_DIV12 RCC_CFGR2_ADCPRE34_DIV12 +#define RCC_ADC34PLLCLK_DIV16 RCC_CFGR2_ADCPRE34_DIV16 +#define RCC_ADC34PLLCLK_DIV32 RCC_CFGR2_ADCPRE34_DIV32 +#define RCC_ADC34PLLCLK_DIV64 RCC_CFGR2_ADCPRE34_DIV64 +#define RCC_ADC34PLLCLK_DIV128 RCC_CFGR2_ADCPRE34_DIV128 +#define RCC_ADC34PLLCLK_DIV256 RCC_CFGR2_ADCPRE34_DIV256 + +/** + * @} + */ + +/** @defgroup RCCEx_TIM8_Clock_Source RCC Extended TIM8 Clock Source + * @{ + */ +#define RCC_TIM8CLK_HCLK RCC_CFGR3_TIM8SW_HCLK +#define RCC_TIM8CLK_PLLCLK RCC_CFGR3_TIM8SW_PLL + +/** + * @} + */ + +#endif /* STM32F303xC || STM32F303xE || STM32F398xx || STM32F358xx */ + +#if defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) + +/** @defgroup RCCEx_USART1_Clock_Source RCC Extended USART1 Clock Source + * @{ + */ +#define RCC_USART1CLKSOURCE_PCLK1 RCC_CFGR3_USART1SW_PCLK1 +#define RCC_USART1CLKSOURCE_SYSCLK RCC_CFGR3_USART1SW_SYSCLK +#define RCC_USART1CLKSOURCE_LSE RCC_CFGR3_USART1SW_LSE +#define RCC_USART1CLKSOURCE_HSI RCC_CFGR3_USART1SW_HSI + +/** + * @} + */ + +/** @defgroup RCCEx_ADC12_Clock_Source RCC Extended ADC12 Clock Source + * @{ + */ +/* ADC1 & ADC2 */ +#define RCC_ADC12PLLCLK_OFF RCC_CFGR2_ADCPRE12_NO +#define RCC_ADC12PLLCLK_DIV1 RCC_CFGR2_ADCPRE12_DIV1 +#define RCC_ADC12PLLCLK_DIV2 RCC_CFGR2_ADCPRE12_DIV2 +#define RCC_ADC12PLLCLK_DIV4 RCC_CFGR2_ADCPRE12_DIV4 +#define RCC_ADC12PLLCLK_DIV6 RCC_CFGR2_ADCPRE12_DIV6 +#define RCC_ADC12PLLCLK_DIV8 RCC_CFGR2_ADCPRE12_DIV8 +#define RCC_ADC12PLLCLK_DIV10 RCC_CFGR2_ADCPRE12_DIV10 +#define RCC_ADC12PLLCLK_DIV12 RCC_CFGR2_ADCPRE12_DIV12 +#define RCC_ADC12PLLCLK_DIV16 RCC_CFGR2_ADCPRE12_DIV16 +#define RCC_ADC12PLLCLK_DIV32 RCC_CFGR2_ADCPRE12_DIV32 +#define RCC_ADC12PLLCLK_DIV64 RCC_CFGR2_ADCPRE12_DIV64 +#define RCC_ADC12PLLCLK_DIV128 RCC_CFGR2_ADCPRE12_DIV128 +#define RCC_ADC12PLLCLK_DIV256 RCC_CFGR2_ADCPRE12_DIV256 + +/** + * @} + */ + +/** @defgroup RCCEx_TIM1_Clock_Source RCC Extended TIM1 Clock Source + * @{ + */ +#define RCC_TIM1CLK_HCLK RCC_CFGR3_TIM1SW_HCLK +#define RCC_TIM1CLK_PLLCLK RCC_CFGR3_TIM1SW_PLL + +/** + * @} + */ + +#endif /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +#if defined(STM32F334x8) + +/** @defgroup RCCEx_HRTIM1_Clock_Source RCC Extended HRTIM1 Clock Source + * @{ + */ +#define RCC_HRTIM1CLK_HCLK RCC_CFGR3_HRTIM1SW_HCLK +#define RCC_HRTIM1CLK_PLLCLK RCC_CFGR3_HRTIM1SW_PLL + +/** + * @} + */ + +#endif /* STM32F334x8 */ + +#if defined(STM32F373xC) || defined(STM32F378xx) + +/** @defgroup RCCEx_USART1_Clock_Source RCC Extended USART1 Clock Source + * @{ + */ +#define RCC_USART1CLKSOURCE_PCLK2 RCC_CFGR3_USART1SW_PCLK2 +#define RCC_USART1CLKSOURCE_SYSCLK RCC_CFGR3_USART1SW_SYSCLK +#define RCC_USART1CLKSOURCE_LSE RCC_CFGR3_USART1SW_LSE +#define RCC_USART1CLKSOURCE_HSI RCC_CFGR3_USART1SW_HSI + +/** + * @} + */ + +/** @defgroup RCCEx_I2C2_Clock_Source RCC Extended I2C2 Clock Source + * @{ + */ +#define RCC_I2C2CLKSOURCE_HSI RCC_CFGR3_I2C2SW_HSI +#define RCC_I2C2CLKSOURCE_SYSCLK RCC_CFGR3_I2C2SW_SYSCLK + +/** + * @} + */ + +/** @defgroup RCCEx_ADC1_Clock_Source RCC Extended ADC1 Clock Source + * @{ + */ + +/* ADC1 */ +#define RCC_ADC1PCLK2_DIV2 RCC_CFGR_ADCPRE_DIV2 +#define RCC_ADC1PCLK2_DIV4 RCC_CFGR_ADCPRE_DIV4 +#define RCC_ADC1PCLK2_DIV6 RCC_CFGR_ADCPRE_DIV6 +#define RCC_ADC1PCLK2_DIV8 RCC_CFGR_ADCPRE_DIV8 + +/** + * @} + */ + +/** @defgroup RCCEx_CEC_Clock_Source RCC Extended CEC Clock Source + * @{ + */ +#define RCC_CECCLKSOURCE_HSI RCC_CFGR3_CECSW_HSI_DIV244 +#define RCC_CECCLKSOURCE_LSE RCC_CFGR3_CECSW_LSE + +/** + * @} + */ + +/** @defgroup RCCEx_SDADC_Clock_Prescaler RCC Extended SDADC Clock Prescaler + * @{ + */ +#define RCC_SDADCSYSCLK_DIV1 RCC_CFGR_SDPRE_DIV1 +#define RCC_SDADCSYSCLK_DIV2 RCC_CFGR_SDPRE_DIV2 +#define RCC_SDADCSYSCLK_DIV4 RCC_CFGR_SDPRE_DIV4 +#define RCC_SDADCSYSCLK_DIV6 RCC_CFGR_SDPRE_DIV6 +#define RCC_SDADCSYSCLK_DIV8 RCC_CFGR_SDPRE_DIV8 +#define RCC_SDADCSYSCLK_DIV10 RCC_CFGR_SDPRE_DIV10 +#define RCC_SDADCSYSCLK_DIV12 RCC_CFGR_SDPRE_DIV12 +#define RCC_SDADCSYSCLK_DIV14 RCC_CFGR_SDPRE_DIV14 +#define RCC_SDADCSYSCLK_DIV16 RCC_CFGR_SDPRE_DIV16 +#define RCC_SDADCSYSCLK_DIV20 RCC_CFGR_SDPRE_DIV20 +#define RCC_SDADCSYSCLK_DIV24 RCC_CFGR_SDPRE_DIV24 +#define RCC_SDADCSYSCLK_DIV28 RCC_CFGR_SDPRE_DIV28 +#define RCC_SDADCSYSCLK_DIV32 RCC_CFGR_SDPRE_DIV32 +#define RCC_SDADCSYSCLK_DIV36 RCC_CFGR_SDPRE_DIV36 +#define RCC_SDADCSYSCLK_DIV40 RCC_CFGR_SDPRE_DIV40 +#define RCC_SDADCSYSCLK_DIV44 RCC_CFGR_SDPRE_DIV44 +#define RCC_SDADCSYSCLK_DIV48 RCC_CFGR_SDPRE_DIV48 + +/** + * @} + */ + +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE)\ + || defined(STM32F302xC) || defined(STM32F303xC)\ + || defined(STM32F302x8) \ + || defined(STM32F373xC) +/** @defgroup RCCEx_USB_Clock_Source RCC Extended USB Clock Source + * @{ + */ + +#define RCC_USBCLKSOURCE_PLL RCC_CFGR_USBPRE_DIV1 +#define RCC_USBCLKSOURCE_PLL_DIV1_5 RCC_CFGR_USBPRE_DIV1_5 + +/** + * @} + */ + +#endif /* STM32F302xE || STM32F303xE || */ + /* STM32F302xC || STM32F303xC || */ + /* STM32F302x8 || */ + /* STM32F373xC */ + + +/** @defgroup RCCEx_MCOx_Clock_Prescaler RCC Extended MCOx Clock Prescaler + * @{ + */ +#if defined(RCC_CFGR_MCOPRE) + +#define RCC_MCODIV_1 (0x00000000U) +#define RCC_MCODIV_2 (0x10000000U) +#define RCC_MCODIV_4 (0x20000000U) +#define RCC_MCODIV_8 (0x30000000U) +#define RCC_MCODIV_16 (0x40000000U) +#define RCC_MCODIV_32 (0x50000000U) +#define RCC_MCODIV_64 (0x60000000U) +#define RCC_MCODIV_128 (0x70000000U) + +#else + +#define RCC_MCODIV_1 (0x00000000U) + +#endif /* RCC_CFGR_MCOPRE */ + +/** + * @} + */ + +/** @defgroup RCCEx_LSEDrive_Configuration RCC LSE Drive Configuration + * @{ + */ + +#define RCC_LSEDRIVE_LOW (0x00000000U) /*!< Xtal mode lower driving capability */ +#define RCC_LSEDRIVE_MEDIUMLOW RCC_BDCR_LSEDRV_1 /*!< Xtal mode medium low driving capability */ +#define RCC_LSEDRIVE_MEDIUMHIGH RCC_BDCR_LSEDRV_0 /*!< Xtal mode medium high driving capability */ +#define RCC_LSEDRIVE_HIGH RCC_BDCR_LSEDRV /*!< Xtal mode higher driving capability */ + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup RCCEx_Exported_Macros RCC Extended Exported Macros + * @{ + */ + +/** @defgroup RCCEx_PLL_Configuration RCC Extended PLL Configuration + * @{ + */ +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) +/** @brief Macro to configure the PLL clock source, multiplication and division factors. + * @note This macro must be used only when the PLL is disabled. + * + * @param __RCC_PLLSource__ specifies the PLL entry clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_PLLSOURCE_HSI HSI oscillator clock selected as PLL clock entry + * @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL clock entry + * @param __PREDIV__ specifies the predivider factor for PLL VCO input clock + * This parameter must be a number between RCC_PREDIV_DIV1 and RCC_PREDIV_DIV16. + * @param __PLLMUL__ specifies the multiplication factor for PLL VCO input clock + * This parameter must be a number between RCC_PLL_MUL2 and RCC_PLL_MUL16. + * + */ +#define __HAL_RCC_PLL_CONFIG(__RCC_PLLSource__ , __PREDIV__, __PLLMUL__) \ + do { \ + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV, (__PREDIV__)); \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLMUL | RCC_CFGR_PLLSRC, (uint32_t)((__PLLMUL__)|(__RCC_PLLSource__))); \ + } while(0U) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ + +#if defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\ + || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\ + || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)\ + || defined(STM32F373xC) || defined(STM32F378xx) +/** @brief Macro to configure the PLL clock source and multiplication factor. + * @note This macro must be used only when the PLL is disabled. + * + * @param __RCC_PLLSource__ specifies the PLL entry clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_PLLSOURCE_HSI HSI oscillator clock selected as PLL clock entry + * @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL clock entry + * @param __PLLMUL__ specifies the multiplication factor for PLL VCO input clock + * This parameter must be a number between RCC_PLL_MUL2 and RCC_PLL_MUL16. + * + */ +#define __HAL_RCC_PLL_CONFIG(__RCC_PLLSource__ , __PLLMUL__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLMUL | RCC_CFGR_PLLSRC, (uint32_t)((__PLLMUL__)|(__RCC_PLLSource__))) +#endif /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F303x8 || STM32F334x8 || STM32F328xx || */ + /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + /* STM32F373xC || STM32F378xx */ +/** + * @} + */ + +#if defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\ + || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\ + || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)\ + || defined(STM32F373xC) || defined(STM32F378xx) +/** @defgroup RCCEx_HSE_Configuration RCC Extended HSE Configuration + * @{ + */ + +/** + * @brief Macro to configure the External High Speed oscillator (HSE) Predivision factor for PLL. + * @note Predivision factor can not be changed if PLL is used as system clock + * In this case, you have to select another source of the system clock, disable the PLL and + * then change the HSE predivision factor. + * @param __HSE_PREDIV_VALUE__ specifies the division value applied to HSE. + * This parameter must be a number between RCC_HSE_PREDIV_DIV1 and RCC_HSE_PREDIV_DIV16. + */ +#define __HAL_RCC_HSE_PREDIV_CONFIG(__HSE_PREDIV_VALUE__) \ + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV, (uint32_t)(__HSE_PREDIV_VALUE__)) + +/** + * @brief Macro to get prediv1 factor for PLL. + */ +#define __HAL_RCC_HSE_GET_PREDIV() READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV) + +/** + * @} + */ +#endif /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F303x8 || STM32F334x8 || STM32F328xx || */ + /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + /* STM32F373xC || STM32F378xx */ + +/** @defgroup RCCEx_AHB_Clock_Enable_Disable RCC Extended AHB Clock Enable Disable + * @brief Enable or disable the AHB peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) +#define __HAL_RCC_ADC1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_ADC1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ADC1EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_ADC1_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ADC1EN)) +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_DMA2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC12_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_ADC12EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ADC12EN);\ + UNUSED(tmpreg); \ + } while(0U) +/* Aliases for STM32 F3 compatibility */ +#define __HAL_RCC_ADC1_CLK_ENABLE() __HAL_RCC_ADC12_CLK_ENABLE() +#define __HAL_RCC_ADC2_CLK_ENABLE() __HAL_RCC_ADC12_CLK_ENABLE() + +#define __HAL_RCC_DMA2_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_DMA2EN)) +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOEEN)) +#define __HAL_RCC_ADC12_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ADC12EN)) +/* Aliases for STM32 F3 compatibility */ +#define __HAL_RCC_ADC1_CLK_DISABLE() __HAL_RCC_ADC12_CLK_DISABLE() +#define __HAL_RCC_ADC2_CLK_DISABLE() __HAL_RCC_ADC12_CLK_DISABLE() +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_ADC34_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_ADC34EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ADC34EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC34_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ADC34EN)) +#endif /* STM32F303xE || STM32F398xx || */ + /* STM32F303xC || STM32F358xx */ + +#if defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define __HAL_RCC_ADC12_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_ADC12EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ADC12EN);\ + UNUSED(tmpreg); \ + } while(0U) +/* Aliases for STM32 F3 compatibility */ +#define __HAL_RCC_ADC1_CLK_ENABLE() __HAL_RCC_ADC12_CLK_ENABLE() +#define __HAL_RCC_ADC2_CLK_ENABLE() __HAL_RCC_ADC12_CLK_ENABLE() + +#define __HAL_RCC_ADC12_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ADC12EN)) +/* Aliases for STM32 F3 compatibility */ +#define __HAL_RCC_ADC1_CLK_DISABLE() __HAL_RCC_ADC12_CLK_DISABLE() +#define __HAL_RCC_ADC2_CLK_DISABLE() __HAL_RCC_ADC12_CLK_DISABLE() +#endif /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +#if defined(STM32F373xC) || defined(STM32F378xx) +#define __HAL_RCC_DMA2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_DMA2_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_DMA2EN)) +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOEEN)) +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) +#define __HAL_RCC_FMC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_FMCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FMCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOH_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOHEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOHEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_FMC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_FMCEN)) +#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOGEN)) +#define __HAL_RCC_GPIOH_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOHEN)) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable RCC Extended APB1 Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) +#define __HAL_RCC_SPI2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_SPI2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI2EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_I2C2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C2EN)) +#define __HAL_RCC_I2C3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C3EN)) +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_SPI2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI2EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN)) +#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN)) +#define __HAL_RCC_I2C2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C2EN)) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx */ + +#if defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DAC2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DAC2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DAC2EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_DAC2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DAC2EN)) +#endif /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +#if defined(STM32F373xC) || defined(STM32F378xx) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM12_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM13_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM14_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM18_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM18EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM18EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DAC2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DAC2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DAC2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CEC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_TIM5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN)) +#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN)) +#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN)) +#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN)) +#define __HAL_RCC_TIM18_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM18EN)) +#define __HAL_RCC_SPI2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI2EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_I2C2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C2EN)) +#define __HAL_RCC_DAC2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DAC2EN)) +#define __HAL_RCC_CEC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CECEN)) +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx) \ + || defined(STM32F303xC) || defined(STM32F358xx) \ + || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\ + || defined(STM32F373xC) || defined(STM32F378xx) +#define __HAL_RCC_TIM7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN)) +#endif /* STM32F303xE || STM32F398xx || */ + /* STM32F303xC || STM32F358xx || */ + /* STM32F303x8 || STM32F334x8 || STM32F328xx || */ + /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE)\ + || defined(STM32F302xC) || defined(STM32F303xC)\ + || defined(STM32F302x8) \ + || defined(STM32F373xC) +#define __HAL_RCC_USB_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_USB_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USBEN)) +#endif /* STM32F302xE || STM32F303xE || */ + /* STM32F302xC || STM32F303xC || */ + /* STM32F302x8 || */ + /* STM32F373xC */ + +#if !defined(STM32F301x8) +#define __HAL_RCC_CAN1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CANEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CANEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CANEN)) +#endif /* STM32F301x8*/ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) +#define __HAL_RCC_I2C3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_I2C3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C3EN)) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable RCC Extended APB2 Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_SPI1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_SPI1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI1EN)) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_TIM8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN)) +#endif /* STM32F303xE || STM32F398xx || */ + /* STM32F303xC || STM32F358xx */ + +#if defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define __HAL_RCC_SPI1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_SPI1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI1EN)) +#endif /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +#if defined(STM32F334x8) +#define __HAL_RCC_HRTIM1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_HRTIM1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_HRTIM1EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_HRTIM1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_HRTIM1EN)) +#endif /* STM32F334x8 */ + +#if defined(STM32F373xC) || defined(STM32F378xx) +#define __HAL_RCC_ADC1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM19_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM19EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM19EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDADC1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDADC1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDADC1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDADC2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDADC2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDADC2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDADC3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDADC3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDADC3EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_ADC1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC1EN)) +#define __HAL_RCC_SPI1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI1EN)) +#define __HAL_RCC_TIM19_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM19EN)) +#define __HAL_RCC_SDADC1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDADC1EN)) +#define __HAL_RCC_SDADC2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDADC2EN)) +#define __HAL_RCC_SDADC3_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDADC3EN)) +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\ + || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\ + || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) +#define __HAL_RCC_TIM1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM1EN)) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F303x8 || STM32F334x8 || STM32F328xx || */ + /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) +#define __HAL_RCC_SPI4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_SPI4_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI4EN)) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx) +#define __HAL_RCC_TIM20_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM20EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM20EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM20_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM20EN)) +#endif /* STM32F303xE || STM32F398xx */ + +/** + * @} + */ + +/** @defgroup RCCEx_AHB_Peripheral_Clock_Enable_Disable_Status RCC Extended AHB Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) +#define __HAL_RCC_ADC1_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_ADC1EN)) != RESET) + +#define __HAL_RCC_ADC1_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ADC1EN)) == RESET) +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_DMA2_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) != RESET) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOEEN)) != RESET) +#define __HAL_RCC_ADC12_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_ADC12EN)) != RESET) + +#define __HAL_RCC_DMA2_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) == RESET) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOEEN)) == RESET) +#define __HAL_RCC_ADC12_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ADC12EN)) == RESET) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_ADC34_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_ADC34EN)) != RESET) + +#define __HAL_RCC_ADC34_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ADC34EN)) == RESET) +#endif /* STM32F303xE || STM32F398xx || */ + /* STM32F303xC || STM32F358xx */ + +#if defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define __HAL_RCC_ADC12_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_ADC12EN)) != RESET) + +#define __HAL_RCC_ADC12_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ADC12EN)) == RESET) +#endif /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +#if defined(STM32F373xC) || defined(STM32F378xx) +#define __HAL_RCC_DMA2_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) != RESET) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOEEN)) != RESET) + +#define __HAL_RCC_DMA2_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) == RESET) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOEEN)) == RESET) +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) +#define __HAL_RCC_FMC_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_FMCEN)) != RESET) +#define __HAL_RCC_GPIOG_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOGEN)) != RESET) +#define __HAL_RCC_GPIOH_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOHEN)) != RESET) + +#define __HAL_RCC_FMC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_FMCEN)) == RESET) +#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOGEN)) == RESET) +#define __HAL_RCC_GPIOH_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOHEN)) == RESET) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable_Status RCC Extended APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) +#define __HAL_RCC_SPI2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_I2C2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) != RESET) +#define __HAL_RCC_I2C3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) != RESET) + +#define __HAL_RCC_SPI2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_I2C2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) == RESET) +#define __HAL_RCC_I2C3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) == RESET) +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_SPI2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_UART4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET) +#define __HAL_RCC_UART5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET) +#define __HAL_RCC_I2C2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) != RESET) + +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_SPI2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET) +#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET) +#define __HAL_RCC_I2C2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) == RESET) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx */ + +#if defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_DAC2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DAC2EN)) != RESET) + +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_DAC2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DAC2EN)) == RESET) +#endif /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +#if defined(STM32F373xC) || defined(STM32F378xx) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_TIM5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET) +#define __HAL_RCC_TIM12_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET) +#define __HAL_RCC_TIM13_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET) +#define __HAL_RCC_TIM14_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET) +#define __HAL_RCC_TIM18_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM18EN)) != RESET) +#define __HAL_RCC_SPI2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_I2C2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) != RESET) +#define __HAL_RCC_DAC2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DAC2EN)) != RESET) +#define __HAL_RCC_CEC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) != RESET) + +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_TIM5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET) +#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET) +#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET) +#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET) +#define __HAL_RCC_TIM18_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM18EN)) == RESET) +#define __HAL_RCC_SPI2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_I2C2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) == RESET) +#define __HAL_RCC_DAC2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DAC2EN)) == RESET) +#define __HAL_RCC_CEC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) == RESET) +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx) \ + || defined(STM32F303xC) || defined(STM32F358xx) \ + || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\ + || defined(STM32F373xC) || defined(STM32F378xx) +#define __HAL_RCC_TIM7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET) + +#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET) +#endif /* STM32F303xE || STM32F398xx || */ + /* STM32F303xC || STM32F358xx || */ + /* STM32F303x8 || STM32F334x8 || STM32F328xx || */ + /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE)\ + || defined(STM32F302xC) || defined(STM32F303xC)\ + || defined(STM32F302x8) \ + || defined(STM32F373xC) +#define __HAL_RCC_USB_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) != RESET) + +#define __HAL_RCC_USB_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) == RESET) +#endif /* STM32F302xE || STM32F303xE || */ + /* STM32F302xC || STM32F303xC || */ + /* STM32F302x8 || */ + /* STM32F373xC */ + +#if !defined(STM32F301x8) +#define __HAL_RCC_CAN1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CANEN)) != RESET) + +#define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CANEN)) == RESET) +#endif /* STM32F301x8*/ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) +#define __HAL_RCC_I2C3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) != RESET) + +#define __HAL_RCC_I2C3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) == RESET) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable_Status RCC Extended APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_SPI1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) != RESET) + +#define __HAL_RCC_SPI1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) == RESET) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_TIM8_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET) + +#define __HAL_RCC_TIM8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET) +#endif /* STM32F303xE || STM32F398xx || */ + /* STM32F303xC || STM32F358xx */ + +#if defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define __HAL_RCC_SPI1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) != RESET) + +#define __HAL_RCC_SPI1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) == RESET) +#endif /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +#if defined(STM32F334x8) +#define __HAL_RCC_HRTIM1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_HRTIM1EN)) != RESET) + +#define __HAL_RCC_HRTIM1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_HRTIM1EN)) == RESET) +#endif /* STM32F334x8 */ + +#if defined(STM32F373xC) || defined(STM32F378xx) +#define __HAL_RCC_ADC1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) != RESET) +#define __HAL_RCC_SPI1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) != RESET) +#define __HAL_RCC_TIM19_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM19EN)) != RESET) +#define __HAL_RCC_SDADC1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDADC1EN)) != RESET) +#define __HAL_RCC_SDADC2_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDADC2EN)) != RESET) +#define __HAL_RCC_SDADC3_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDADC3EN)) != RESET) + +#define __HAL_RCC_ADC1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) == RESET) +#define __HAL_RCC_SPI1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) == RESET) +#define __HAL_RCC_TIM19_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM19EN)) == RESET) +#define __HAL_RCC_SDADC1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDADC1EN)) == RESET) +#define __HAL_RCC_SDADC2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDADC2EN)) == RESET) +#define __HAL_RCC_SDADC3_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDADC3EN)) == RESET) +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\ + || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\ + || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) +#define __HAL_RCC_TIM1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) != RESET) + +#define __HAL_RCC_TIM1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) == RESET) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F303x8 || STM32F334x8 || STM32F328xx || */ + /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) +#define __HAL_RCC_SPI4_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) != RESET) + +#define __HAL_RCC_SPI4_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) == RESET) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx) +#define __HAL_RCC_TIM20_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM20EN)) != RESET) + +#define __HAL_RCC_TIM20_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM20EN)) == RESET) +#endif /* STM32F303xE || STM32F398xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB_Force_Release_Reset RCC Extended AHB Force Release Reset + * @brief Force or release AHB peripheral reset. + * @{ + */ +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) +#define __HAL_RCC_ADC1_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_ADC1RST)) + +#define __HAL_RCC_ADC1_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_ADC1RST)) +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOERST)) +#define __HAL_RCC_ADC12_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_ADC12RST)) +/* Aliases for STM32 F3 compatibility */ +#define __HAL_RCC_ADC1_FORCE_RESET() __HAL_RCC_ADC12_FORCE_RESET() +#define __HAL_RCC_ADC2_FORCE_RESET() __HAL_RCC_ADC12_FORCE_RESET() + +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOERST)) +#define __HAL_RCC_ADC12_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_ADC12RST)) +/* Aliases for STM32 F3 compatibility */ +#define __HAL_RCC_ADC1_RELEASE_RESET() __HAL_RCC_ADC12_RELEASE_RESET() +#define __HAL_RCC_ADC2_RELEASE_RESET() __HAL_RCC_ADC12_RELEASE_RESET() +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_ADC34_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_ADC34RST)) + +#define __HAL_RCC_ADC34_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_ADC34RST)) +#endif /* STM32F303xE || STM32F398xx || */ + /* STM32F303xC || STM32F358xx */ + +#if defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define __HAL_RCC_ADC12_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_ADC12RST)) +/* Aliases for STM32 F3 compatibility */ +#define __HAL_RCC_ADC1_FORCE_RESET() __HAL_RCC_ADC12_FORCE_RESET() +#define __HAL_RCC_ADC2_FORCE_RESET() __HAL_RCC_ADC12_FORCE_RESET() + +#define __HAL_RCC_ADC12_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_ADC12RST)) +/* Aliases for STM32 F3 compatibility */ +#define __HAL_RCC_ADC1_RELEASE_RESET() __HAL_RCC_ADC12_RELEASE_RESET() +#define __HAL_RCC_ADC2_RELEASE_RESET() __HAL_RCC_ADC12_RELEASE_RESET() +#endif /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +#if defined(STM32F373xC) || defined(STM32F378xx) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOERST)) + +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOERST)) +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) +#define __HAL_RCC_FMC_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_FMCRST)) +#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOGRST)) +#define __HAL_RCC_GPIOH_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOHRST)) + +#define __HAL_RCC_FMC_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_FMCRST)) +#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOGRST)) +#define __HAL_RCC_GPIOH_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOHRST)) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset RCC Extended APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) +#define __HAL_RCC_SPI2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI2RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C2RST)) +#define __HAL_RCC_I2C3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C3RST)) + +#define __HAL_RCC_SPI2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI2RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C2RST)) +#define __HAL_RCC_I2C3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C3RST)) +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI2RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_I2C2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C2RST)) + +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI2RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_I2C2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C2RST)) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx */ + +#if defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_DAC2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DAC2RST)) + +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_DAC2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DAC2RST)) +#endif /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +#if defined(STM32F373xC) || defined(STM32F378xx) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_TIM5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST)) +#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_TIM18_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM18RST)) +#define __HAL_RCC_SPI2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI2RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C2RST)) +#define __HAL_RCC_DAC2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DAC2RST)) +#define __HAL_RCC_CEC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CECRST)) + +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_TIM5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST)) +#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_TIM18_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM18RST)) +#define __HAL_RCC_SPI2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI2RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C2RST)) +#define __HAL_RCC_DAC2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DAC2RST)) +#define __HAL_RCC_CEC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CECRST)) +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F303xC) || defined(STM32F358xx)\ + || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\ + || defined(STM32F373xC) || defined(STM32F378xx) +#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST)) + +#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST)) +#endif /* STM32F303xE || STM32F398xx || */ + /* STM32F303xC || STM32F358xx || */ + /* STM32F303x8 || STM32F334x8 || STM32F328xx || */ + /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE)\ + || defined(STM32F302xC) || defined(STM32F303xC)\ + || defined(STM32F302x8) \ + || defined(STM32F373xC) +#define __HAL_RCC_USB_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USBRST)) + +#define __HAL_RCC_USB_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USBRST)) +#endif /* STM32F302xE || STM32F303xE || */ + /* STM32F302xC || STM32F303xC || */ + /* STM32F302x8 || */ + /* STM32F373xC */ + +#if !defined(STM32F301x8) +#define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CANRST)) + +#define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CANRST)) +#endif /* STM32F301x8*/ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) +#define __HAL_RCC_I2C3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C3RST)) + +#define __HAL_RCC_I2C3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C3RST)) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset RCC Extended APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_SPI1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI1RST)) + +#define __HAL_RCC_SPI1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI1RST)) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_RCC_TIM8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST)) + +#define __HAL_RCC_TIM8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST)) +#endif /* STM32F303xE || STM32F398xx || */ + /* STM32F303xC || STM32F358xx */ + +#if defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define __HAL_RCC_SPI1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI1RST)) + +#define __HAL_RCC_SPI1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI1RST)) +#endif /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +#if defined(STM32F334x8) +#define __HAL_RCC_HRTIM1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_HRTIM1RST)) + +#define __HAL_RCC_HRTIM1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_HRTIM1RST)) +#endif /* STM32F334x8 */ + +#if defined(STM32F373xC) || defined(STM32F378xx) +#define __HAL_RCC_ADC1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC1RST)) +#define __HAL_RCC_SPI1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI1RST)) +#define __HAL_RCC_TIM19_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM19RST)) +#define __HAL_RCC_SDADC1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDADC1RST)) +#define __HAL_RCC_SDADC2_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDADC2RST)) +#define __HAL_RCC_SDADC3_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDADC3RST)) + +#define __HAL_RCC_ADC1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC1RST)) +#define __HAL_RCC_SPI1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI1RST)) +#define __HAL_RCC_TIM19_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM19RST)) +#define __HAL_RCC_SDADC1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDADC1RST)) +#define __HAL_RCC_SDADC2_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDADC2RST)) +#define __HAL_RCC_SDADC3_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDADC3RST)) +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\ + || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\ + || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) +#define __HAL_RCC_TIM1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM1RST)) + +#define __HAL_RCC_TIM1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM1RST)) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F303x8 || STM32F334x8 || STM32F328xx || */ + /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) +#define __HAL_RCC_SPI4_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI4RST)) + +#define __HAL_RCC_SPI4_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI4RST)) +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx) +#define __HAL_RCC_TIM20_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM20RST)) + +#define __HAL_RCC_TIM20_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM20RST)) +#endif /* STM32F303xE || STM32F398xx */ + +/** + * @} + */ + +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) +/** @defgroup RCCEx_I2Cx_Clock_Config RCC Extended I2Cx Clock Config + * @{ + */ + +/** @brief Macro to configure the I2C2 clock (I2C2CLK). + * @param __I2C2CLKSource__ specifies the I2C2 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_I2C2CLKSOURCE_HSI HSI selected as I2C2 clock + * @arg @ref RCC_I2C2CLKSOURCE_SYSCLK System Clock selected as I2C2 clock + */ +#define __HAL_RCC_I2C2_CONFIG(__I2C2CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_I2C2SW, (uint32_t)(__I2C2CLKSource__)) + +/** @brief Macro to get the I2C2 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_I2C2CLKSOURCE_HSI HSI selected as I2C2 clock + * @arg @ref RCC_I2C2CLKSOURCE_SYSCLK System Clock selected as I2C2 clock + */ +#define __HAL_RCC_GET_I2C2_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_I2C2SW))) + +/** @brief Macro to configure the I2C3 clock (I2C3CLK). + * @param __I2C3CLKSource__ specifies the I2C3 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_I2C3CLKSOURCE_HSI HSI selected as I2C3 clock + * @arg @ref RCC_I2C3CLKSOURCE_SYSCLK System Clock selected as I2C3 clock + */ +#define __HAL_RCC_I2C3_CONFIG(__I2C3CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_I2C3SW, (uint32_t)(__I2C3CLKSource__)) + +/** @brief Macro to get the I2C3 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_I2C3CLKSOURCE_HSI HSI selected as I2C3 clock + * @arg @ref RCC_I2C3CLKSOURCE_SYSCLK System Clock selected as I2C3 clock + */ +#define __HAL_RCC_GET_I2C3_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_I2C3SW))) + +/** + * @} + */ + +/** @defgroup RCCEx_TIMx_Clock_Config RCC Extended TIMx Clock Config + * @{ + */ +/** @brief Macro to configure the TIM1 clock (TIM1CLK). + * @param __TIM1CLKSource__ specifies the TIM1 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_TIM1CLK_HCLK HCLK selected as TIM1 clock + * @arg @ref RCC_TIM1CLK_PLLCLK PLL Clock selected as TIM1 clock + */ +#define __HAL_RCC_TIM1_CONFIG(__TIM1CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_TIM1SW, (uint32_t)(__TIM1CLKSource__)) + +/** @brief Macro to get the TIM1 clock (TIM1CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_TIM1CLK_HCLK HCLK selected as TIM1 clock + * @arg @ref RCC_TIM1CLK_PLLCLK PLL Clock selected as TIM1 clock + */ +#define __HAL_RCC_GET_TIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_TIM1SW))) + +/** @brief Macro to configure the TIM15 clock (TIM15CLK). + * @param __TIM15CLKSource__ specifies the TIM15 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_TIM15CLK_HCLK HCLK selected as TIM15 clock + * @arg @ref RCC_TIM15CLK_PLL PLL Clock selected as TIM15 clock + */ +#define __HAL_RCC_TIM15_CONFIG(__TIM15CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_TIM15SW, (uint32_t)(__TIM15CLKSource__)) + +/** @brief Macro to get the TIM15 clock (TIM15CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_TIM15CLK_HCLK HCLK selected as TIM15 clock + * @arg @ref RCC_TIM15CLK_PLL PLL Clock selected as TIM15 clock + */ +#define __HAL_RCC_GET_TIM15_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_TIM15SW))) + +/** @brief Macro to configure the TIM16 clock (TIM16CLK). + * @param __TIM16CLKSource__ specifies the TIM16 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_TIM16CLK_HCLK HCLK selected as TIM16 clock + * @arg @ref RCC_TIM16CLK_PLL PLL Clock selected as TIM16 clock + */ +#define __HAL_RCC_TIM16_CONFIG(__TIM16CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_TIM16SW, (uint32_t)(__TIM16CLKSource__)) + +/** @brief Macro to get the TIM16 clock (TIM16CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_TIM16CLK_HCLK HCLK selected as TIM16 clock + * @arg @ref RCC_TIM16CLK_PLL PLL Clock selected as TIM16 clock + */ +#define __HAL_RCC_GET_TIM16_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_TIM16SW))) + +/** @brief Macro to configure the TIM17 clock (TIM17CLK). + * @param __TIM17CLKSource__ specifies the TIM17 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_TIM17CLK_HCLK HCLK selected as TIM17 clock + * @arg @ref RCC_TIM17CLK_PLL PLL Clock selected as TIM17 clock + */ +#define __HAL_RCC_TIM17_CONFIG(__TIM17CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_TIM17SW, (uint32_t)(__TIM17CLKSource__)) + +/** @brief Macro to get the TIM17 clock (TIM17CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_TIM17CLK_HCLK HCLK selected as TIM17 clock + * @arg @ref RCC_TIM17CLK_PLL PLL Clock selected as TIM17 clock + */ +#define __HAL_RCC_GET_TIM17_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_TIM17SW))) + +/** + * @} + */ + +/** @defgroup RCCEx_I2Sx_Clock_Config RCC Extended I2Sx Clock Config + * @{ + */ +/** @brief Macro to configure the I2S clock source (I2SCLK). + * @note This function must be called before enabling the I2S APB clock. + * @param __I2SCLKSource__ specifies the I2S clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_I2SCLKSOURCE_SYSCLK SYSCLK clock used as I2S clock source + * @arg @ref RCC_I2SCLKSOURCE_EXT External clock mapped on the I2S_CKIN pin + * used as I2S clock source + */ +#define __HAL_RCC_I2S_CONFIG(__I2SCLKSource__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_I2SSRC, (uint32_t)(__I2SCLKSource__)) + +/** @brief Macro to get the I2S clock source (I2SCLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_I2SCLKSOURCE_SYSCLK SYSCLK clock used as I2S clock source + * @arg @ref RCC_I2SCLKSOURCE_EXT External clock mapped on the I2S_CKIN pin + * used as I2S clock source + */ +#define __HAL_RCC_GET_I2S_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_I2SSRC))) +/** + * @} + */ + +/** @defgroup RCCEx_ADCx_Clock_Config RCC Extended ADCx Clock Config + * @{ + */ + +/** @brief Macro to configure the ADC1 clock (ADC1CLK). + * @param __ADC1CLKSource__ specifies the ADC1 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_ADC1PLLCLK_OFF ADC1 PLL clock disabled, ADC1 can use AHB clock + * @arg @ref RCC_ADC1PLLCLK_DIV1 PLL clock divided by 1 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV2 PLL clock divided by 2 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV4 PLL clock divided by 4 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV6 PLL clock divided by 6 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV8 PLL clock divided by 8 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV10 PLL clock divided by 10 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV12 PLL clock divided by 12 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV16 PLL clock divided by 16 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV32 PLL clock divided by 32 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV64 PLL clock divided by 64 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV128 PLL clock divided by 128 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV256 PLL clock divided by 256 selected as ADC1 clock + */ +#define __HAL_RCC_ADC1_CONFIG(__ADC1CLKSource__) \ + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_ADC1PRES, (uint32_t)(__ADC1CLKSource__)) + +/** @brief Macro to get the ADC1 clock + * @retval The clock source can be one of the following values: + * @arg @ref RCC_ADC1PLLCLK_OFF ADC1 PLL clock disabled, ADC1 can use AHB clock + * @arg @ref RCC_ADC1PLLCLK_DIV1 PLL clock divided by 1 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV2 PLL clock divided by 2 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV4 PLL clock divided by 4 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV6 PLL clock divided by 6 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV8 PLL clock divided by 8 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV10 PLL clock divided by 10 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV12 PLL clock divided by 12 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV16 PLL clock divided by 16 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV32 PLL clock divided by 32 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV64 PLL clock divided by 64 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV128 PLL clock divided by 128 selected as ADC1 clock + * @arg @ref RCC_ADC1PLLCLK_DIV256 PLL clock divided by 256 selected as ADC1 clock + */ +#define __HAL_RCC_GET_ADC1_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_ADC1PRES))) +/** + * @} + */ + +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) +/** @defgroup RCCEx_I2Cx_Clock_Config RCC Extended I2Cx Clock Config + * @{ + */ + +/** @brief Macro to configure the I2C2 clock (I2C2CLK). + * @param __I2C2CLKSource__ specifies the I2C2 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_I2C2CLKSOURCE_HSI HSI selected as I2C2 clock + * @arg @ref RCC_I2C2CLKSOURCE_SYSCLK System Clock selected as I2C2 clock + */ +#define __HAL_RCC_I2C2_CONFIG(__I2C2CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_I2C2SW, (uint32_t)(__I2C2CLKSource__)) + +/** @brief Macro to get the I2C2 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_I2C2CLKSOURCE_HSI HSI selected as I2C2 clock + * @arg @ref RCC_I2C2CLKSOURCE_SYSCLK System Clock selected as I2C2 clock + */ +#define __HAL_RCC_GET_I2C2_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_I2C2SW))) +/** + * @} + */ + +/** @defgroup RCCEx_ADCx_Clock_Config RCC Extended ADCx Clock Config + * @{ + */ + +/** @brief Macro to configure the ADC1 & ADC2 clock (ADC12CLK). + * @param __ADC12CLKSource__ specifies the ADC1 & ADC2 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_ADC12PLLCLK_OFF ADC1 & ADC2 PLL clock disabled, ADC1 & ADC2 can use AHB clock + * @arg @ref RCC_ADC12PLLCLK_DIV1 PLL clock divided by 1 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV2 PLL clock divided by 2 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV4 PLL clock divided by 4 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV6 PLL clock divided by 6 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV8 PLL clock divided by 8 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV10 PLL clock divided by 10 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV12 PLL clock divided by 12 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV16 PLL clock divided by 16 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV32 PLL clock divided by 32 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV64 PLL clock divided by 64 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV128 PLL clock divided by 128 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV256 PLL clock divided by 256 selected as ADC1 & ADC2 clock + */ +#define __HAL_RCC_ADC12_CONFIG(__ADC12CLKSource__) \ + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_ADCPRE12, (uint32_t)(__ADC12CLKSource__)) + +/** @brief Macro to get the ADC1 & ADC2 clock + * @retval The clock source can be one of the following values: + * @arg @ref RCC_ADC12PLLCLK_OFF ADC1 & ADC2 PLL clock disabled, ADC1 & ADC2 can use AHB clock + * @arg @ref RCC_ADC12PLLCLK_DIV1 PLL clock divided by 1 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV2 PLL clock divided by 2 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV4 PLL clock divided by 4 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV6 PLL clock divided by 6 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV8 PLL clock divided by 8 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV10 PLL clock divided by 10 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV12 PLL clock divided by 12 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV16 PLL clock divided by 16 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV32 PLL clock divided by 32 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV64 PLL clock divided by 64 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV128 PLL clock divided by 128 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV256 PLL clock divided by 256 selected as ADC1 & ADC2 clock + */ +#define __HAL_RCC_GET_ADC12_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_ADCPRE12))) +/** + * @} + */ + +/** @defgroup RCCEx_TIMx_Clock_Config RCC Extended TIMx Clock Config + * @{ + */ + +/** @brief Macro to configure the TIM1 clock (TIM1CLK). + * @param __TIM1CLKSource__ specifies the TIM1 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_TIM1CLK_HCLK HCLK selected as TIM1 clock + * @arg @ref RCC_TIM1CLK_PLLCLK PLL Clock selected as TIM1 clock + */ +#define __HAL_RCC_TIM1_CONFIG(__TIM1CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_TIM1SW, (uint32_t)(__TIM1CLKSource__)) + +/** @brief Macro to get the TIM1 clock (TIM1CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_TIM1CLK_HCLK HCLK selected as TIM1 clock + * @arg @ref RCC_TIM1CLK_PLLCLK PLL Clock selected as TIM1 clock + */ +#define __HAL_RCC_GET_TIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_TIM1SW))) +/** + * @} + */ + +/** @defgroup RCCEx_I2Sx_Clock_Config RCC Extended I2Sx Clock Config + * @{ + */ + +/** @brief Macro to configure the I2S clock source (I2SCLK). + * @note This function must be called before enabling the I2S APB clock. + * @param __I2SCLKSource__ specifies the I2S clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_I2SCLKSOURCE_SYSCLK SYSCLK clock used as I2S clock source + * @arg @ref RCC_I2SCLKSOURCE_EXT External clock mapped on the I2S_CKIN pin + * used as I2S clock source + */ +#define __HAL_RCC_I2S_CONFIG(__I2SCLKSource__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_I2SSRC, (uint32_t)(__I2SCLKSource__)) + +/** @brief Macro to get the I2S clock source (I2SCLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_I2SCLKSOURCE_SYSCLK SYSCLK clock used as I2S clock source + * @arg @ref RCC_I2SCLKSOURCE_EXT External clock mapped on the I2S_CKIN pin + * used as I2S clock source + */ +#define __HAL_RCC_GET_I2S_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_I2SSRC))) +/** + * @} + */ + +/** @defgroup RCCEx_UARTx_Clock_Config RCC Extended UARTx Clock Config + * @{ + */ + +/** @brief Macro to configure the UART4 clock (UART4CLK). + * @param __UART4CLKSource__ specifies the UART4 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_UART4CLKSOURCE_PCLK1 PCLK1 selected as UART4 clock + * @arg @ref RCC_UART4CLKSOURCE_HSI HSI selected as UART4 clock + * @arg @ref RCC_UART4CLKSOURCE_SYSCLK System Clock selected as UART4 clock + * @arg @ref RCC_UART4CLKSOURCE_LSE LSE selected as UART4 clock + */ +#define __HAL_RCC_UART4_CONFIG(__UART4CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_UART4SW, (uint32_t)(__UART4CLKSource__)) + +/** @brief Macro to get the UART4 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_UART4CLKSOURCE_PCLK1 PCLK1 selected as UART4 clock + * @arg @ref RCC_UART4CLKSOURCE_HSI HSI selected as UART4 clock + * @arg @ref RCC_UART4CLKSOURCE_SYSCLK System Clock selected as UART4 clock + * @arg @ref RCC_UART4CLKSOURCE_LSE LSE selected as UART4 clock + */ +#define __HAL_RCC_GET_UART4_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_UART4SW))) + +/** @brief Macro to configure the UART5 clock (UART5CLK). + * @param __UART5CLKSource__ specifies the UART5 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_UART5CLKSOURCE_PCLK1 PCLK1 selected as UART5 clock + * @arg @ref RCC_UART5CLKSOURCE_HSI HSI selected as UART5 clock + * @arg @ref RCC_UART5CLKSOURCE_SYSCLK System Clock selected as UART5 clock + * @arg @ref RCC_UART5CLKSOURCE_LSE LSE selected as UART5 clock + */ +#define __HAL_RCC_UART5_CONFIG(__UART5CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_UART5SW, (uint32_t)(__UART5CLKSource__)) + +/** @brief Macro to get the UART5 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_UART5CLKSOURCE_PCLK1 PCLK1 selected as UART5 clock + * @arg @ref RCC_UART5CLKSOURCE_HSI HSI selected as UART5 clock + * @arg @ref RCC_UART5CLKSOURCE_SYSCLK System Clock selected as UART5 clock + * @arg @ref RCC_UART5CLKSOURCE_LSE LSE selected as UART5 clock + */ +#define __HAL_RCC_GET_UART5_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_UART5SW))) +/** + * @} + */ +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F303xC) || defined(STM32F358xx) +/** @defgroup RCCEx_ADCx_Clock_Config RCC Extended ADCx Clock Config + * @{ + */ + +/** @brief Macro to configure the ADC3 & ADC4 clock (ADC34CLK). + * @param __ADC34CLKSource__ specifies the ADC3 & ADC4 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_ADC34PLLCLK_OFF ADC3 & ADC4 PLL clock disabled, ADC3 & ADC4 can use AHB clock + * @arg @ref RCC_ADC34PLLCLK_DIV1 PLL clock divided by 1 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV2 PLL clock divided by 2 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV4 PLL clock divided by 4 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV6 PLL clock divided by 6 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV8 PLL clock divided by 8 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV10 PLL clock divided by 10 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV12 PLL clock divided by 12 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV16 PLL clock divided by 16 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV32 PLL clock divided by 32 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV64 PLL clock divided by 64 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV128 PLL clock divided by 128 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV256 PLL clock divided by 256 selected as ADC3 & ADC4 clock + */ +#define __HAL_RCC_ADC34_CONFIG(__ADC34CLKSource__) \ + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_ADCPRE34, (uint32_t)(__ADC34CLKSource__)) + +/** @brief Macro to get the ADC3 & ADC4 clock + * @retval The clock source can be one of the following values: + * @arg @ref RCC_ADC34PLLCLK_OFF ADC3 & ADC4 PLL clock disabled, ADC3 & ADC4 can use AHB clock + * @arg @ref RCC_ADC34PLLCLK_DIV1 PLL clock divided by 1 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV2 PLL clock divided by 2 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV4 PLL clock divided by 4 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV6 PLL clock divided by 6 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV8 PLL clock divided by 8 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV10 PLL clock divided by 10 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV12 PLL clock divided by 12 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV16 PLL clock divided by 16 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV32 PLL clock divided by 32 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV64 PLL clock divided by 64 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV128 PLL clock divided by 128 selected as ADC3 & ADC4 clock + * @arg @ref RCC_ADC34PLLCLK_DIV256 PLL clock divided by 256 selected as ADC3 & ADC4 clock + */ +#define __HAL_RCC_GET_ADC34_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_ADCPRE34))) +/** + * @} + */ + +/** @defgroup RCCEx_TIMx_Clock_Config RCC Extended TIMx Clock Config + * @{ + */ + +/** @brief Macro to configure the TIM8 clock (TIM8CLK). + * @param __TIM8CLKSource__ specifies the TIM8 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_TIM8CLK_HCLK HCLK selected as TIM8 clock + * @arg @ref RCC_TIM8CLK_PLLCLK PLL Clock selected as TIM8 clock + */ +#define __HAL_RCC_TIM8_CONFIG(__TIM8CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_TIM8SW, (uint32_t)(__TIM8CLKSource__)) + +/** @brief Macro to get the TIM8 clock (TIM8CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_TIM8CLK_HCLK HCLK selected as TIM8 clock + * @arg @ref RCC_TIM8CLK_PLLCLK PLL Clock selected as TIM8 clock + */ +#define __HAL_RCC_GET_TIM8_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_TIM8SW))) + +/** + * @} + */ +#endif /* STM32F303xE || STM32F398xx || */ + /* STM32F303xC || STM32F358xx */ + +#if defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +/** @defgroup RCCEx_ADCx_Clock_Config RCC Extended ADCx Clock Config + * @{ + */ + +/** @brief Macro to configure the ADC1 & ADC2 clock (ADC12CLK). + * @param __ADC12CLKSource__ specifies the ADC1 & ADC2 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_ADC12PLLCLK_OFF ADC1 & ADC2 PLL clock disabled, ADC1 & ADC2 can use AHB clock + * @arg @ref RCC_ADC12PLLCLK_DIV1 PLL clock divided by 1 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV2 PLL clock divided by 2 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV4 PLL clock divided by 4 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV6 PLL clock divided by 6 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV8 PLL clock divided by 8 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV10 PLL clock divided by 10 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV12 PLL clock divided by 12 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV16 PLL clock divided by 16 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV32 PLL clock divided by 32 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV64 PLL clock divided by 64 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV128 PLL clock divided by 128 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV256 PLL clock divided by 256 selected as ADC1 & ADC2 clock + */ +#define __HAL_RCC_ADC12_CONFIG(__ADC12CLKSource__) \ + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_ADCPRE12, (uint32_t)(__ADC12CLKSource__)) + +/** @brief Macro to get the ADC1 & ADC2 clock + * @retval The clock source can be one of the following values: + * @arg @ref RCC_ADC12PLLCLK_OFF ADC1 & ADC2 PLL clock disabled, ADC1 & ADC2 can use AHB clock + * @arg @ref RCC_ADC12PLLCLK_DIV1 PLL clock divided by 1 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV2 PLL clock divided by 2 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV4 PLL clock divided by 4 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV6 PLL clock divided by 6 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV8 PLL clock divided by 8 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV10 PLL clock divided by 10 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV12 PLL clock divided by 12 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV16 PLL clock divided by 16 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV32 PLL clock divided by 32 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV64 PLL clock divided by 64 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV128 PLL clock divided by 128 selected as ADC1 & ADC2 clock + * @arg @ref RCC_ADC12PLLCLK_DIV256 PLL clock divided by 256 selected as ADC1 & ADC2 clock + */ +#define __HAL_RCC_GET_ADC12_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_ADCPRE12))) +/** + * @} + */ + +/** @defgroup RCCEx_TIMx_Clock_Config RCC Extended TIMx Clock Config + * @{ + */ +/** @brief Macro to configure the TIM1 clock (TIM1CLK). + * @param __TIM1CLKSource__ specifies the TIM1 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_TIM1CLK_HCLK HCLK selected as TIM1 clock + * @arg @ref RCC_TIM1CLK_PLLCLK PLL Clock selected as TIM1 clock + */ +#define __HAL_RCC_TIM1_CONFIG(__TIM1CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_TIM1SW, (uint32_t)(__TIM1CLKSource__)) + +/** @brief Macro to get the TIM1 clock (TIM1CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_TIM1CLK_HCLK HCLK selected as TIM1 clock + * @arg @ref RCC_TIM1CLK_PLLCLK PLL Clock selected as TIM1 clock + */ +#define __HAL_RCC_GET_TIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_TIM1SW))) +/** + * @} + */ +#endif /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +#if defined(STM32F334x8) +/** @defgroup RCCEx_HRTIMx_Clock_Config RCC Extended HRTIMx Clock Config + * @{ + */ +/** @brief Macro to configure the HRTIM1 clock. + * @param __HRTIM1CLKSource__ specifies the HRTIM1 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_HRTIM1CLK_HCLK HCLK selected as HRTIM1 clock + * @arg @ref RCC_HRTIM1CLK_PLLCLK PLL Clock selected as HRTIM1 clock + */ +#define __HAL_RCC_HRTIM1_CONFIG(__HRTIM1CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_HRTIM1SW, (uint32_t)(__HRTIM1CLKSource__)) + +/** @brief Macro to get the HRTIM1 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_HRTIM1CLK_HCLK HCLK selected as HRTIM1 clock + * @arg @ref RCC_HRTIM1CLK_PLLCLK PLL Clock selected as HRTIM1 clock + */ +#define __HAL_RCC_GET_HRTIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_HRTIM1SW))) +/** + * @} + */ +#endif /* STM32F334x8 */ + +#if defined(STM32F373xC) || defined(STM32F378xx) +/** @defgroup RCCEx_I2Cx_Clock_Config RCC Extended I2Cx Clock Config + * @{ + */ +/** @brief Macro to configure the I2C2 clock (I2C2CLK). + * @param __I2C2CLKSource__ specifies the I2C2 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_I2C2CLKSOURCE_HSI HSI selected as I2C2 clock + * @arg @ref RCC_I2C2CLKSOURCE_SYSCLK System Clock selected as I2C2 clock + */ +#define __HAL_RCC_I2C2_CONFIG(__I2C2CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_I2C2SW, (uint32_t)(__I2C2CLKSource__)) + +/** @brief Macro to get the I2C2 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_I2C2CLKSOURCE_HSI HSI selected as I2C2 clock + * @arg @ref RCC_I2C2CLKSOURCE_SYSCLK System Clock selected as I2C2 clock + */ +#define __HAL_RCC_GET_I2C2_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_I2C2SW))) +/** + * @} + */ + +/** @defgroup RCCEx_ADCx_Clock_Config RCC Extended ADCx Clock Config + * @{ + */ +/** @brief Macro to configure the ADC1 clock (ADC1CLK). + * @param __ADC1CLKSource__ specifies the ADC1 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_ADC1PCLK2_DIV2 PCLK2 clock divided by 2 selected as ADC1 clock + * @arg @ref RCC_ADC1PCLK2_DIV4 PCLK2 clock divided by 4 selected as ADC1 clock + * @arg @ref RCC_ADC1PCLK2_DIV6 PCLK2 clock divided by 6 selected as ADC1 clock + * @arg @ref RCC_ADC1PCLK2_DIV8 PCLK2 clock divided by 8 selected as ADC1 clock + */ +#define __HAL_RCC_ADC1_CONFIG(__ADC1CLKSource__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_ADCPRE, (uint32_t)(__ADC1CLKSource__)) + +/** @brief Macro to get the ADC1 clock (ADC1CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_ADC1PCLK2_DIV2 PCLK2 clock divided by 2 selected as ADC1 clock + * @arg @ref RCC_ADC1PCLK2_DIV4 PCLK2 clock divided by 4 selected as ADC1 clock + * @arg @ref RCC_ADC1PCLK2_DIV6 PCLK2 clock divided by 6 selected as ADC1 clock + * @arg @ref RCC_ADC1PCLK2_DIV8 PCLK2 clock divided by 8 selected as ADC1 clock + */ +#define __HAL_RCC_GET_ADC1_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_ADCPRE))) +/** + * @} + */ + +/** @defgroup RCCEx_SDADCx_Clock_Config RCC Extended SDADCx Clock Config + * @{ + */ +/** @brief Macro to configure the SDADCx clock (SDADCxCLK). + * @param __SDADCPrescaler__ specifies the SDADCx system clock prescaler. + * This parameter can be one of the following values: + * @arg @ref RCC_SDADCSYSCLK_DIV1 SYSCLK clock selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV2 SYSCLK clock divided by 2 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV4 SYSCLK clock divided by 4 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV6 SYSCLK clock divided by 6 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV8 SYSCLK clock divided by 8 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV10 SYSCLK clock divided by 10 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV12 SYSCLK clock divided by 12 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV14 SYSCLK clock divided by 14 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV16 SYSCLK clock divided by 16 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV20 SYSCLK clock divided by 20 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV24 SYSCLK clock divided by 24 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV28 SYSCLK clock divided by 28 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV32 SYSCLK clock divided by 32 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV36 SYSCLK clock divided by 36 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV40 SYSCLK clock divided by 40 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV44 SYSCLK clock divided by 44 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV48 SYSCLK clock divided by 48 selected as SDADCx clock + */ +#define __HAL_RCC_SDADC_CONFIG(__SDADCPrescaler__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_SDPRE, (uint32_t)(__SDADCPrescaler__)) + +/** @brief Macro to get the SDADCx clock prescaler. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_SDADCSYSCLK_DIV1 SYSCLK clock selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV2 SYSCLK clock divided by 2 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV4 SYSCLK clock divided by 4 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV6 SYSCLK clock divided by 6 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV8 SYSCLK clock divided by 8 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV10 SYSCLK clock divided by 10 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV12 SYSCLK clock divided by 12 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV14 SYSCLK clock divided by 14 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV16 SYSCLK clock divided by 16 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV20 SYSCLK clock divided by 20 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV24 SYSCLK clock divided by 24 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV28 SYSCLK clock divided by 28 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV32 SYSCLK clock divided by 32 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV36 SYSCLK clock divided by 36 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV40 SYSCLK clock divided by 40 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV44 SYSCLK clock divided by 44 selected as SDADCx clock + * @arg @ref RCC_SDADCSYSCLK_DIV48 SYSCLK clock divided by 48 selected as SDADCx clock + */ +#define __HAL_RCC_GET_SDADC_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SDPRE))) +/** + * @} + */ + +/** @defgroup RCCEx_CECx_Clock_Config RCC Extended CECx Clock Config + * @{ + */ +/** @brief Macro to configure the CEC clock. + * @param __CECCLKSource__ specifies the CEC clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_CECCLKSOURCE_HSI HSI selected as CEC clock + * @arg @ref RCC_CECCLKSOURCE_LSE LSE selected as CEC clock + */ +#define __HAL_RCC_CEC_CONFIG(__CECCLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_CECSW, (uint32_t)(__CECCLKSource__)) + +/** @brief Macro to get the HDMI CEC clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_CECCLKSOURCE_HSI HSI selected as CEC clock + * @arg @ref RCC_CECCLKSOURCE_LSE LSE selected as CEC clock + */ +#define __HAL_RCC_GET_CEC_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_CECSW))) +/** + * @} + */ + +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE)\ + || defined(STM32F302xC) || defined(STM32F303xC)\ + || defined(STM32F302x8) \ + || defined(STM32F373xC) + +/** @defgroup RCCEx_USBx_Clock_Config RCC Extended USBx Clock Config + * @{ + */ +/** @brief Macro to configure the USB clock (USBCLK). + * @param __USBCLKSource__ specifies the USB clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_USBCLKSOURCE_PLL PLL Clock divided by 1 selected as USB clock + * @arg @ref RCC_USBCLKSOURCE_PLL_DIV1_5 PLL Clock divided by 1.5 selected as USB clock + */ +#define __HAL_RCC_USB_CONFIG(__USBCLKSource__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_USBPRE, (uint32_t)(__USBCLKSource__)) + +/** @brief Macro to get the USB clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_USBCLKSOURCE_PLL PLL Clock divided by 1 selected as USB clock + * @arg @ref RCC_USBCLKSOURCE_PLL_DIV1_5 PLL Clock divided by 1.5 selected as USB clock + */ +#define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_USBPRE))) +/** + * @} + */ + +#endif /* STM32F302xE || STM32F303xE || */ + /* STM32F302xC || STM32F303xC || */ + /* STM32F302x8 || */ + /* STM32F373xC */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) + +/** @defgroup RCCEx_I2Cx_Clock_Config RCC Extended I2Cx Clock Config + * @{ + */ +/** @brief Macro to configure the I2C3 clock (I2C3CLK). + * @param __I2C3CLKSource__ specifies the I2C3 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_I2C3CLKSOURCE_HSI HSI selected as I2C3 clock + * @arg @ref RCC_I2C3CLKSOURCE_SYSCLK System Clock selected as I2C3 clock + */ +#define __HAL_RCC_I2C3_CONFIG(__I2C3CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_I2C3SW, (uint32_t)(__I2C3CLKSource__)) + +/** @brief Macro to get the I2C3 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_I2C3CLKSOURCE_HSI HSI selected as I2C3 clock + * @arg @ref RCC_I2C3CLKSOURCE_SYSCLK System Clock selected as I2C3 clock + */ +#define __HAL_RCC_GET_I2C3_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_I2C3SW))) +/** + * @} + */ + +/** @defgroup RCCEx_TIMx_Clock_Config RCC Extended TIMx Clock Config + * @{ + */ +/** @brief Macro to configure the TIM2 clock (TIM2CLK). + * @param __TIM2CLKSource__ specifies the TIM2 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_TIM2CLK_HCLK HCLK selected as TIM2 clock + * @arg @ref RCC_TIM2CLK_PLL PLL Clock selected as TIM2 clock + */ +#define __HAL_RCC_TIM2_CONFIG(__TIM2CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_TIM2SW, (uint32_t)(__TIM2CLKSource__)) + +/** @brief Macro to get the TIM2 clock (TIM2CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_TIM2CLK_HCLK HCLK selected as TIM2 clock + * @arg @ref RCC_TIM2CLK_PLL PLL Clock selected as TIM2 clock + */ +#define __HAL_RCC_GET_TIM2_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_TIM2SW))) + +/** @brief Macro to configure the TIM3 & TIM4 clock (TIM34CLK). + * @param __TIM34CLKSource__ specifies the TIM3 & TIM4 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_TIM34CLK_HCLK HCLK selected as TIM3 & TIM4 clock + * @arg @ref RCC_TIM34CLK_PLL PLL Clock selected as TIM3 & TIM4 clock + */ +#define __HAL_RCC_TIM34_CONFIG(__TIM34CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_TIM34SW, (uint32_t)(__TIM34CLKSource__)) + +/** @brief Macro to get the TIM3 & TIM4 clock (TIM34CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_TIM34CLK_HCLK HCLK selected as TIM3 & TIM4 clock + * @arg @ref RCC_TIM34CLK_PLL PLL Clock selected as TIM3 & TIM4 clock + */ +#define __HAL_RCC_GET_TIM34_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_TIM34SW))) + +/** @brief Macro to configure the TIM15 clock (TIM15CLK). + * @param __TIM15CLKSource__ specifies the TIM15 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_TIM15CLK_HCLK HCLK selected as TIM15 clock + * @arg @ref RCC_TIM15CLK_PLL PLL Clock selected as TIM15 clock + */ +#define __HAL_RCC_TIM15_CONFIG(__TIM15CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_TIM15SW, (uint32_t)(__TIM15CLKSource__)) + +/** @brief Macro to get the TIM15 clock (TIM15CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_TIM15CLK_HCLK HCLK selected as TIM15 clock + * @arg @ref RCC_TIM15CLK_PLL PLL Clock selected as TIM15 clock + */ +#define __HAL_RCC_GET_TIM15_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_TIM15SW))) + +/** @brief Macro to configure the TIM16 clock (TIM16CLK). + * @param __TIM16CLKSource__ specifies the TIM16 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_TIM16CLK_HCLK HCLK selected as TIM16 clock + * @arg @ref RCC_TIM16CLK_PLL PLL Clock selected as TIM16 clock + */ +#define __HAL_RCC_TIM16_CONFIG(__TIM16CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_TIM16SW, (uint32_t)(__TIM16CLKSource__)) + +/** @brief Macro to get the TIM16 clock (TIM16CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_TIM16CLK_HCLK HCLK selected as TIM16 clock + * @arg @ref RCC_TIM16CLK_PLL PLL Clock selected as TIM16 clock + */ +#define __HAL_RCC_GET_TIM16_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_TIM16SW))) + +/** @brief Macro to configure the TIM17 clock (TIM17CLK). + * @param __TIM17CLKSource__ specifies the TIM17 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_TIM17CLK_HCLK HCLK selected as TIM17 clock + * @arg @ref RCC_TIM17CLK_PLL PLL Clock selected as TIM17 clock + */ +#define __HAL_RCC_TIM17_CONFIG(__TIM17CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_TIM17SW, (uint32_t)(__TIM17CLKSource__)) + +/** @brief Macro to get the TIM17 clock (TIM17CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_TIM17CLK_HCLK HCLK selected as TIM17 clock + * @arg @ref RCC_TIM17CLK_PLL PLL Clock selected as TIM17 clock + */ +#define __HAL_RCC_GET_TIM17_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_TIM17SW))) + +/** + * @} + */ + +#endif /* STM32f302xE || STM32f303xE || STM32F398xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx) +/** @addtogroup RCCEx_TIMx_Clock_Config RCC Extended TIMx Clock Config + * @{ + */ +/** @brief Macro to configure the TIM20 clock (TIM20CLK). + * @param __TIM20CLKSource__ specifies the TIM20 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_TIM20CLK_HCLK HCLK selected as TIM20 clock + * @arg @ref RCC_TIM20CLK_PLL PLL Clock selected as TIM20 clock + */ +#define __HAL_RCC_TIM20_CONFIG(__TIM20CLKSource__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_TIM20SW, (uint32_t)(__TIM20CLKSource__)) + +/** @brief Macro to get the TIM20 clock (TIM20CLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_TIM20CLK_HCLK HCLK selected as TIM20 clock + * @arg @ref RCC_TIM20CLK_PLL PLL Clock selected as TIM20 clock + */ +#define __HAL_RCC_GET_TIM20_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_TIM20SW))) + +/** + * @} + */ +#endif /* STM32f303xE || STM32F398xx */ + +/** @defgroup RCCEx_LSE_Configuration LSE Drive Configuration + * @{ + */ + +/** + * @brief Macro to configure the External Low Speed oscillator (LSE) drive capability. + * @param __RCC_LSEDRIVE__ specifies the new state of the LSE drive capability. + * This parameter can be one of the following values: + * @arg @ref RCC_LSEDRIVE_LOW LSE oscillator low drive capability. + * @arg @ref RCC_LSEDRIVE_MEDIUMLOW LSE oscillator medium low drive capability. + * @arg @ref RCC_LSEDRIVE_MEDIUMHIGH LSE oscillator medium high drive capability. + * @arg @ref RCC_LSEDRIVE_HIGH LSE oscillator high drive capability. + * @retval None + */ +#define __HAL_RCC_LSEDRIVE_CONFIG(__RCC_LSEDRIVE__) (MODIFY_REG(RCC->BDCR,\ + RCC_BDCR_LSEDRV, (uint32_t)(__RCC_LSEDRIVE__) )) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup RCCEx_Exported_Functions + * @{ + */ + +/** @addtogroup RCCEx_Exported_Functions_Group1 + * @{ + */ + +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit); +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit); +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F3xx_HAL_RCC_EX_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_spi.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_spi.h new file mode 100644 index 0000000..149cc17 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_spi.h @@ -0,0 +1,852 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_spi.h + * @author MCD Application Team + * @brief Header file of SPI HAL module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F3xx_HAL_SPI_H +#define STM32F3xx_HAL_SPI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup SPI + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup SPI_Exported_Types SPI Exported Types + * @{ + */ + +/** + * @brief SPI Configuration Structure definition + */ +typedef struct +{ + uint32_t Mode; /*!< Specifies the SPI operating mode. + This parameter can be a value of @ref SPI_Mode */ + + uint32_t Direction; /*!< Specifies the SPI bidirectional mode state. + This parameter can be a value of @ref SPI_Direction */ + + uint32_t DataSize; /*!< Specifies the SPI data size. + This parameter can be a value of @ref SPI_Data_Size */ + + uint32_t CLKPolarity; /*!< Specifies the serial clock steady state. + This parameter can be a value of @ref SPI_Clock_Polarity */ + + uint32_t CLKPhase; /*!< Specifies the clock active edge for the bit capture. + This parameter can be a value of @ref SPI_Clock_Phase */ + + uint32_t NSS; /*!< Specifies whether the NSS signal is managed by + hardware (NSS pin) or by software using the SSI bit. + This parameter can be a value of @ref SPI_Slave_Select_management */ + + uint32_t BaudRatePrescaler; /*!< Specifies the Baud Rate prescaler value which will be + used to configure the transmit and receive SCK clock. + This parameter can be a value of @ref SPI_BaudRate_Prescaler + @note The communication clock is derived from the master + clock. The slave clock does not need to be set. */ + + uint32_t FirstBit; /*!< Specifies whether data transfers start from MSB or LSB bit. + This parameter can be a value of @ref SPI_MSB_LSB_transmission */ + + uint32_t TIMode; /*!< Specifies if the TI mode is enabled or not. + This parameter can be a value of @ref SPI_TI_mode */ + + uint32_t CRCCalculation; /*!< Specifies if the CRC calculation is enabled or not. + This parameter can be a value of @ref SPI_CRC_Calculation */ + + uint32_t CRCPolynomial; /*!< Specifies the polynomial used for the CRC calculation. + This parameter must be an odd number between Min_Data = 1 and Max_Data = 65535 */ + + uint32_t CRCLength; /*!< Specifies the CRC Length used for the CRC calculation. + CRC Length is only used with Data8 and Data16, not other data size + This parameter can be a value of @ref SPI_CRC_length */ + + uint32_t NSSPMode; /*!< Specifies whether the NSSP signal is enabled or not . + This parameter can be a value of @ref SPI_NSSP_Mode + This mode is activated by the NSSP bit in the SPIx_CR2 register and + it takes effect only if the SPI interface is configured as Motorola SPI + master (FRF=0) with capture on the first edge (SPIx_CR1 CPHA = 0, + CPOL setting is ignored).. */ +} SPI_InitTypeDef; + +/** + * @brief HAL SPI State structure definition + */ +typedef enum +{ + HAL_SPI_STATE_RESET = 0x00U, /*!< Peripheral not Initialized */ + HAL_SPI_STATE_READY = 0x01U, /*!< Peripheral Initialized and ready for use */ + HAL_SPI_STATE_BUSY = 0x02U, /*!< an internal process is ongoing */ + HAL_SPI_STATE_BUSY_TX = 0x03U, /*!< Data Transmission process is ongoing */ + HAL_SPI_STATE_BUSY_RX = 0x04U, /*!< Data Reception process is ongoing */ + HAL_SPI_STATE_BUSY_TX_RX = 0x05U, /*!< Data Transmission and Reception process is ongoing */ + HAL_SPI_STATE_ERROR = 0x06U, /*!< SPI error state */ + HAL_SPI_STATE_ABORT = 0x07U /*!< SPI abort is ongoing */ +} HAL_SPI_StateTypeDef; + +/** + * @brief SPI handle Structure definition + */ +typedef struct __SPI_HandleTypeDef +{ + SPI_TypeDef *Instance; /*!< SPI registers base address */ + + SPI_InitTypeDef Init; /*!< SPI communication parameters */ + + uint8_t *pTxBuffPtr; /*!< Pointer to SPI Tx transfer Buffer */ + + uint16_t TxXferSize; /*!< SPI Tx Transfer size */ + + __IO uint16_t TxXferCount; /*!< SPI Tx Transfer Counter */ + + uint8_t *pRxBuffPtr; /*!< Pointer to SPI Rx transfer Buffer */ + + uint16_t RxXferSize; /*!< SPI Rx Transfer size */ + + __IO uint16_t RxXferCount; /*!< SPI Rx Transfer Counter */ + + uint32_t CRCSize; /*!< SPI CRC size used for the transfer */ + + void (*RxISR)(struct __SPI_HandleTypeDef *hspi); /*!< function pointer on Rx ISR */ + + void (*TxISR)(struct __SPI_HandleTypeDef *hspi); /*!< function pointer on Tx ISR */ + + DMA_HandleTypeDef *hdmatx; /*!< SPI Tx DMA Handle parameters */ + + DMA_HandleTypeDef *hdmarx; /*!< SPI Rx DMA Handle parameters */ + + HAL_LockTypeDef Lock; /*!< Locking object */ + + __IO HAL_SPI_StateTypeDef State; /*!< SPI communication state */ + + __IO uint32_t ErrorCode; /*!< SPI Error code */ + +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + void (* TxCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Tx Completed callback */ + void (* RxCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Rx Completed callback */ + void (* TxRxCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI TxRx Completed callback */ + void (* TxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Tx Half Completed callback */ + void (* RxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Rx Half Completed callback */ + void (* TxRxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI TxRx Half Completed callback */ + void (* ErrorCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Error callback */ + void (* AbortCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Abort callback */ + void (* MspInitCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Msp Init callback */ + void (* MspDeInitCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Msp DeInit callback */ + +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +} SPI_HandleTypeDef; + +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) +/** + * @brief HAL SPI Callback ID enumeration definition + */ +typedef enum +{ + HAL_SPI_TX_COMPLETE_CB_ID = 0x00U, /*!< SPI Tx Completed callback ID */ + HAL_SPI_RX_COMPLETE_CB_ID = 0x01U, /*!< SPI Rx Completed callback ID */ + HAL_SPI_TX_RX_COMPLETE_CB_ID = 0x02U, /*!< SPI TxRx Completed callback ID */ + HAL_SPI_TX_HALF_COMPLETE_CB_ID = 0x03U, /*!< SPI Tx Half Completed callback ID */ + HAL_SPI_RX_HALF_COMPLETE_CB_ID = 0x04U, /*!< SPI Rx Half Completed callback ID */ + HAL_SPI_TX_RX_HALF_COMPLETE_CB_ID = 0x05U, /*!< SPI TxRx Half Completed callback ID */ + HAL_SPI_ERROR_CB_ID = 0x06U, /*!< SPI Error callback ID */ + HAL_SPI_ABORT_CB_ID = 0x07U, /*!< SPI Abort callback ID */ + HAL_SPI_MSPINIT_CB_ID = 0x08U, /*!< SPI Msp Init callback ID */ + HAL_SPI_MSPDEINIT_CB_ID = 0x09U /*!< SPI Msp DeInit callback ID */ + +} HAL_SPI_CallbackIDTypeDef; + +/** + * @brief HAL SPI Callback pointer definition + */ +typedef void (*pSPI_CallbackTypeDef)(SPI_HandleTypeDef *hspi); /*!< pointer to an SPI callback function */ + +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup SPI_Exported_Constants SPI Exported Constants + * @{ + */ + +/** @defgroup SPI_Error_Code SPI Error Code + * @{ + */ +#define HAL_SPI_ERROR_NONE (0x00000000U) /*!< No error */ +#define HAL_SPI_ERROR_MODF (0x00000001U) /*!< MODF error */ +#define HAL_SPI_ERROR_CRC (0x00000002U) /*!< CRC error */ +#define HAL_SPI_ERROR_OVR (0x00000004U) /*!< OVR error */ +#define HAL_SPI_ERROR_FRE (0x00000008U) /*!< FRE error */ +#define HAL_SPI_ERROR_DMA (0x00000010U) /*!< DMA transfer error */ +#define HAL_SPI_ERROR_FLAG (0x00000020U) /*!< Error on RXNE/TXE/BSY/FTLVL/FRLVL Flag */ +#define HAL_SPI_ERROR_ABORT (0x00000040U) /*!< Error during SPI Abort procedure */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) +#define HAL_SPI_ERROR_INVALID_CALLBACK (0x00000080U) /*!< Invalid Callback error */ +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +/** + * @} + */ + +/** @defgroup SPI_Mode SPI Mode + * @{ + */ +#define SPI_MODE_SLAVE (0x00000000U) +#define SPI_MODE_MASTER (SPI_CR1_MSTR | SPI_CR1_SSI) +/** + * @} + */ + +/** @defgroup SPI_Direction SPI Direction Mode + * @{ + */ +#define SPI_DIRECTION_2LINES (0x00000000U) +#define SPI_DIRECTION_2LINES_RXONLY SPI_CR1_RXONLY +#define SPI_DIRECTION_1LINE SPI_CR1_BIDIMODE +/** + * @} + */ + +/** @defgroup SPI_Data_Size SPI Data Size + * @{ + */ +#define SPI_DATASIZE_4BIT (0x00000300U) +#define SPI_DATASIZE_5BIT (0x00000400U) +#define SPI_DATASIZE_6BIT (0x00000500U) +#define SPI_DATASIZE_7BIT (0x00000600U) +#define SPI_DATASIZE_8BIT (0x00000700U) +#define SPI_DATASIZE_9BIT (0x00000800U) +#define SPI_DATASIZE_10BIT (0x00000900U) +#define SPI_DATASIZE_11BIT (0x00000A00U) +#define SPI_DATASIZE_12BIT (0x00000B00U) +#define SPI_DATASIZE_13BIT (0x00000C00U) +#define SPI_DATASIZE_14BIT (0x00000D00U) +#define SPI_DATASIZE_15BIT (0x00000E00U) +#define SPI_DATASIZE_16BIT (0x00000F00U) +/** + * @} + */ + +/** @defgroup SPI_Clock_Polarity SPI Clock Polarity + * @{ + */ +#define SPI_POLARITY_LOW (0x00000000U) +#define SPI_POLARITY_HIGH SPI_CR1_CPOL +/** + * @} + */ + +/** @defgroup SPI_Clock_Phase SPI Clock Phase + * @{ + */ +#define SPI_PHASE_1EDGE (0x00000000U) +#define SPI_PHASE_2EDGE SPI_CR1_CPHA +/** + * @} + */ + +/** @defgroup SPI_Slave_Select_management SPI Slave Select Management + * @{ + */ +#define SPI_NSS_SOFT SPI_CR1_SSM +#define SPI_NSS_HARD_INPUT (0x00000000U) +#define SPI_NSS_HARD_OUTPUT (SPI_CR2_SSOE << 16U) +/** + * @} + */ + +/** @defgroup SPI_NSSP_Mode SPI NSS Pulse Mode + * @{ + */ +#define SPI_NSS_PULSE_ENABLE SPI_CR2_NSSP +#define SPI_NSS_PULSE_DISABLE (0x00000000U) +/** + * @} + */ + +/** @defgroup SPI_BaudRate_Prescaler SPI BaudRate Prescaler + * @{ + */ +#define SPI_BAUDRATEPRESCALER_2 (0x00000000U) +#define SPI_BAUDRATEPRESCALER_4 (SPI_CR1_BR_0) +#define SPI_BAUDRATEPRESCALER_8 (SPI_CR1_BR_1) +#define SPI_BAUDRATEPRESCALER_16 (SPI_CR1_BR_1 | SPI_CR1_BR_0) +#define SPI_BAUDRATEPRESCALER_32 (SPI_CR1_BR_2) +#define SPI_BAUDRATEPRESCALER_64 (SPI_CR1_BR_2 | SPI_CR1_BR_0) +#define SPI_BAUDRATEPRESCALER_128 (SPI_CR1_BR_2 | SPI_CR1_BR_1) +#define SPI_BAUDRATEPRESCALER_256 (SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0) +/** + * @} + */ + +/** @defgroup SPI_MSB_LSB_transmission SPI MSB LSB Transmission + * @{ + */ +#define SPI_FIRSTBIT_MSB (0x00000000U) +#define SPI_FIRSTBIT_LSB SPI_CR1_LSBFIRST +/** + * @} + */ + +/** @defgroup SPI_TI_mode SPI TI Mode + * @{ + */ +#define SPI_TIMODE_DISABLE (0x00000000U) +#define SPI_TIMODE_ENABLE SPI_CR2_FRF +/** + * @} + */ + +/** @defgroup SPI_CRC_Calculation SPI CRC Calculation + * @{ + */ +#define SPI_CRCCALCULATION_DISABLE (0x00000000U) +#define SPI_CRCCALCULATION_ENABLE SPI_CR1_CRCEN +/** + * @} + */ + +/** @defgroup SPI_CRC_length SPI CRC Length + * @{ + * This parameter can be one of the following values: + * SPI_CRC_LENGTH_DATASIZE: aligned with the data size + * SPI_CRC_LENGTH_8BIT : CRC 8bit + * SPI_CRC_LENGTH_16BIT : CRC 16bit + */ +#define SPI_CRC_LENGTH_DATASIZE (0x00000000U) +#define SPI_CRC_LENGTH_8BIT (0x00000001U) +#define SPI_CRC_LENGTH_16BIT (0x00000002U) +/** + * @} + */ + +/** @defgroup SPI_FIFO_reception_threshold SPI FIFO Reception Threshold + * @{ + * This parameter can be one of the following values: + * SPI_RXFIFO_THRESHOLD or SPI_RXFIFO_THRESHOLD_QF : + * RXNE event is generated if the FIFO + * level is greater or equal to 1/4(8-bits). + * SPI_RXFIFO_THRESHOLD_HF: RXNE event is generated if the FIFO + * level is greater or equal to 1/2(16 bits). */ +#define SPI_RXFIFO_THRESHOLD SPI_CR2_FRXTH +#define SPI_RXFIFO_THRESHOLD_QF SPI_CR2_FRXTH +#define SPI_RXFIFO_THRESHOLD_HF (0x00000000U) +/** + * @} + */ + +/** @defgroup SPI_Interrupt_definition SPI Interrupt Definition + * @{ + */ +#define SPI_IT_TXE SPI_CR2_TXEIE +#define SPI_IT_RXNE SPI_CR2_RXNEIE +#define SPI_IT_ERR SPI_CR2_ERRIE +/** + * @} + */ + +/** @defgroup SPI_Flags_definition SPI Flags Definition + * @{ + */ +#define SPI_FLAG_RXNE SPI_SR_RXNE /* SPI status flag: Rx buffer not empty flag */ +#define SPI_FLAG_TXE SPI_SR_TXE /* SPI status flag: Tx buffer empty flag */ +#define SPI_FLAG_BSY SPI_SR_BSY /* SPI status flag: Busy flag */ +#define SPI_FLAG_CRCERR SPI_SR_CRCERR /* SPI Error flag: CRC error flag */ +#define SPI_FLAG_MODF SPI_SR_MODF /* SPI Error flag: Mode fault flag */ +#define SPI_FLAG_OVR SPI_SR_OVR /* SPI Error flag: Overrun flag */ +#define SPI_FLAG_FRE SPI_SR_FRE /* SPI Error flag: TI mode frame format error flag */ +#define SPI_FLAG_FTLVL SPI_SR_FTLVL /* SPI fifo transmission level */ +#define SPI_FLAG_FRLVL SPI_SR_FRLVL /* SPI fifo reception level */ +#define SPI_FLAG_MASK (SPI_SR_RXNE | SPI_SR_TXE | SPI_SR_BSY | SPI_SR_CRCERR\ + | SPI_SR_MODF | SPI_SR_OVR | SPI_SR_FRE | SPI_SR_FTLVL | SPI_SR_FRLVL) +/** + * @} + */ + +/** @defgroup SPI_transmission_fifo_status_level SPI Transmission FIFO Status Level + * @{ + */ +#define SPI_FTLVL_EMPTY (0x00000000U) +#define SPI_FTLVL_QUARTER_FULL (0x00000800U) +#define SPI_FTLVL_HALF_FULL (0x00001000U) +#define SPI_FTLVL_FULL (0x00001800U) + +/** + * @} + */ + +/** @defgroup SPI_reception_fifo_status_level SPI Reception FIFO Status Level + * @{ + */ +#define SPI_FRLVL_EMPTY (0x00000000U) +#define SPI_FRLVL_QUARTER_FULL (0x00000200U) +#define SPI_FRLVL_HALF_FULL (0x00000400U) +#define SPI_FRLVL_FULL (0x00000600U) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macros -----------------------------------------------------------*/ +/** @defgroup SPI_Exported_Macros SPI Exported Macros + * @{ + */ + +/** @brief Reset SPI handle state. + * @param __HANDLE__ specifies the SPI Handle. + * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. + * @retval None + */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) +#define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) do{ \ + (__HANDLE__)->State = HAL_SPI_STATE_RESET; \ + (__HANDLE__)->MspInitCallback = NULL; \ + (__HANDLE__)->MspDeInitCallback = NULL; \ + } while(0) +#else +#define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SPI_STATE_RESET) +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + +/** @brief Enable the specified SPI interrupts. + * @param __HANDLE__ specifies the SPI Handle. + * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. + * @param __INTERRUPT__ specifies the interrupt source to enable. + * This parameter can be one of the following values: + * @arg SPI_IT_TXE: Tx buffer empty interrupt enable + * @arg SPI_IT_RXNE: RX buffer not empty interrupt enable + * @arg SPI_IT_ERR: Error interrupt enable + * @retval None + */ +#define __HAL_SPI_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__)) + +/** @brief Disable the specified SPI interrupts. + * @param __HANDLE__ specifies the SPI handle. + * This parameter can be SPIx where x: 1, 2, or 3 to select the SPI peripheral. + * @param __INTERRUPT__ specifies the interrupt source to disable. + * This parameter can be one of the following values: + * @arg SPI_IT_TXE: Tx buffer empty interrupt enable + * @arg SPI_IT_RXNE: RX buffer not empty interrupt enable + * @arg SPI_IT_ERR: Error interrupt enable + * @retval None + */ +#define __HAL_SPI_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__)) + +/** @brief Check whether the specified SPI interrupt source is enabled or not. + * @param __HANDLE__ specifies the SPI Handle. + * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. + * @param __INTERRUPT__ specifies the SPI interrupt source to check. + * This parameter can be one of the following values: + * @arg SPI_IT_TXE: Tx buffer empty interrupt enable + * @arg SPI_IT_RXNE: RX buffer not empty interrupt enable + * @arg SPI_IT_ERR: Error interrupt enable + * @retval The new state of __IT__ (TRUE or FALSE). + */ +#define __HAL_SPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2\ + & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) + +/** @brief Check whether the specified SPI flag is set or not. + * @param __HANDLE__ specifies the SPI Handle. + * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg SPI_FLAG_RXNE: Receive buffer not empty flag + * @arg SPI_FLAG_TXE: Transmit buffer empty flag + * @arg SPI_FLAG_CRCERR: CRC error flag + * @arg SPI_FLAG_MODF: Mode fault flag + * @arg SPI_FLAG_OVR: Overrun flag + * @arg SPI_FLAG_BSY: Busy flag + * @arg SPI_FLAG_FRE: Frame format error flag + * @arg SPI_FLAG_FTLVL: SPI fifo transmission level + * @arg SPI_FLAG_FRLVL: SPI fifo reception level + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_SPI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__)) + +/** @brief Clear the SPI CRCERR pending flag. + * @param __HANDLE__ specifies the SPI Handle. + * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. + * @retval None + */ +#define __HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__) ((__HANDLE__)->Instance->SR = (uint16_t)(~SPI_FLAG_CRCERR)) + +/** @brief Clear the SPI MODF pending flag. + * @param __HANDLE__ specifies the SPI Handle. + * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. + * @retval None + */ +#define __HAL_SPI_CLEAR_MODFFLAG(__HANDLE__) \ + do{ \ + __IO uint32_t tmpreg_modf = 0x00U; \ + tmpreg_modf = (__HANDLE__)->Instance->SR; \ + CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE); \ + UNUSED(tmpreg_modf); \ + } while(0U) + +/** @brief Clear the SPI OVR pending flag. + * @param __HANDLE__ specifies the SPI Handle. + * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. + * @retval None + */ +#define __HAL_SPI_CLEAR_OVRFLAG(__HANDLE__) \ + do{ \ + __IO uint32_t tmpreg_ovr = 0x00U; \ + tmpreg_ovr = (__HANDLE__)->Instance->DR; \ + tmpreg_ovr = (__HANDLE__)->Instance->SR; \ + UNUSED(tmpreg_ovr); \ + } while(0U) + +/** @brief Clear the SPI FRE pending flag. + * @param __HANDLE__ specifies the SPI Handle. + * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. + * @retval None + */ +#define __HAL_SPI_CLEAR_FREFLAG(__HANDLE__) \ + do{ \ + __IO uint32_t tmpreg_fre = 0x00U; \ + tmpreg_fre = (__HANDLE__)->Instance->SR; \ + UNUSED(tmpreg_fre); \ + }while(0U) + +/** @brief Enable the SPI peripheral. + * @param __HANDLE__ specifies the SPI Handle. + * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. + * @retval None + */ +#define __HAL_SPI_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE) + +/** @brief Disable the SPI peripheral. + * @param __HANDLE__ specifies the SPI Handle. + * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. + * @retval None + */ +#define __HAL_SPI_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE) + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup SPI_Private_Macros SPI Private Macros + * @{ + */ + +/** @brief Set the SPI transmit-only mode. + * @param __HANDLE__ specifies the SPI Handle. + * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. + * @retval None + */ +#define SPI_1LINE_TX(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_BIDIOE) + +/** @brief Set the SPI receive-only mode. + * @param __HANDLE__ specifies the SPI Handle. + * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. + * @retval None + */ +#define SPI_1LINE_RX(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_BIDIOE) + +/** @brief Reset the CRC calculation of the SPI. + * @param __HANDLE__ specifies the SPI Handle. + * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. + * @retval None + */ +#define SPI_RESET_CRC(__HANDLE__) do{CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_CRCEN);\ + SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_CRCEN);}while(0U) + +/** @brief Check whether the specified SPI flag is set or not. + * @param __SR__ copy of SPI SR register. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg SPI_FLAG_RXNE: Receive buffer not empty flag + * @arg SPI_FLAG_TXE: Transmit buffer empty flag + * @arg SPI_FLAG_CRCERR: CRC error flag + * @arg SPI_FLAG_MODF: Mode fault flag + * @arg SPI_FLAG_OVR: Overrun flag + * @arg SPI_FLAG_BSY: Busy flag + * @arg SPI_FLAG_FRE: Frame format error flag + * @arg SPI_FLAG_FTLVL: SPI fifo transmission level + * @arg SPI_FLAG_FRLVL: SPI fifo reception level + * @retval SET or RESET. + */ +#define SPI_CHECK_FLAG(__SR__, __FLAG__) ((((__SR__) & ((__FLAG__) & SPI_FLAG_MASK)) == \ + ((__FLAG__) & SPI_FLAG_MASK)) ? SET : RESET) + +/** @brief Check whether the specified SPI Interrupt is set or not. + * @param __CR2__ copy of SPI CR2 register. + * @param __INTERRUPT__ specifies the SPI interrupt source to check. + * This parameter can be one of the following values: + * @arg SPI_IT_TXE: Tx buffer empty interrupt enable + * @arg SPI_IT_RXNE: RX buffer not empty interrupt enable + * @arg SPI_IT_ERR: Error interrupt enable + * @retval SET or RESET. + */ +#define SPI_CHECK_IT_SOURCE(__CR2__, __INTERRUPT__) ((((__CR2__) & (__INTERRUPT__)) == \ + (__INTERRUPT__)) ? SET : RESET) + +/** @brief Checks if SPI Mode parameter is in allowed range. + * @param __MODE__ specifies the SPI Mode. + * This parameter can be a value of @ref SPI_Mode + * @retval None + */ +#define IS_SPI_MODE(__MODE__) (((__MODE__) == SPI_MODE_SLAVE) || \ + ((__MODE__) == SPI_MODE_MASTER)) + +/** @brief Checks if SPI Direction Mode parameter is in allowed range. + * @param __MODE__ specifies the SPI Direction Mode. + * This parameter can be a value of @ref SPI_Direction + * @retval None + */ +#define IS_SPI_DIRECTION(__MODE__) (((__MODE__) == SPI_DIRECTION_2LINES) || \ + ((__MODE__) == SPI_DIRECTION_2LINES_RXONLY) || \ + ((__MODE__) == SPI_DIRECTION_1LINE)) + +/** @brief Checks if SPI Direction Mode parameter is 2 lines. + * @param __MODE__ specifies the SPI Direction Mode. + * @retval None + */ +#define IS_SPI_DIRECTION_2LINES(__MODE__) ((__MODE__) == SPI_DIRECTION_2LINES) + +/** @brief Checks if SPI Direction Mode parameter is 1 or 2 lines. + * @param __MODE__ specifies the SPI Direction Mode. + * @retval None + */ +#define IS_SPI_DIRECTION_2LINES_OR_1LINE(__MODE__) (((__MODE__) == SPI_DIRECTION_2LINES) || \ + ((__MODE__) == SPI_DIRECTION_1LINE)) + +/** @brief Checks if SPI Data Size parameter is in allowed range. + * @param __DATASIZE__ specifies the SPI Data Size. + * This parameter can be a value of @ref SPI_Data_Size + * @retval None + */ +#define IS_SPI_DATASIZE(__DATASIZE__) (((__DATASIZE__) == SPI_DATASIZE_16BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_15BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_14BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_13BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_12BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_11BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_10BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_9BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_8BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_7BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_6BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_5BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_4BIT)) + +/** @brief Checks if SPI Serial clock steady state parameter is in allowed range. + * @param __CPOL__ specifies the SPI serial clock steady state. + * This parameter can be a value of @ref SPI_Clock_Polarity + * @retval None + */ +#define IS_SPI_CPOL(__CPOL__) (((__CPOL__) == SPI_POLARITY_LOW) || \ + ((__CPOL__) == SPI_POLARITY_HIGH)) + +/** @brief Checks if SPI Clock Phase parameter is in allowed range. + * @param __CPHA__ specifies the SPI Clock Phase. + * This parameter can be a value of @ref SPI_Clock_Phase + * @retval None + */ +#define IS_SPI_CPHA(__CPHA__) (((__CPHA__) == SPI_PHASE_1EDGE) || \ + ((__CPHA__) == SPI_PHASE_2EDGE)) + +/** @brief Checks if SPI Slave Select parameter is in allowed range. + * @param __NSS__ specifies the SPI Slave Select management parameter. + * This parameter can be a value of @ref SPI_Slave_Select_management + * @retval None + */ +#define IS_SPI_NSS(__NSS__) (((__NSS__) == SPI_NSS_SOFT) || \ + ((__NSS__) == SPI_NSS_HARD_INPUT) || \ + ((__NSS__) == SPI_NSS_HARD_OUTPUT)) + +/** @brief Checks if SPI NSS Pulse parameter is in allowed range. + * @param __NSSP__ specifies the SPI NSS Pulse Mode parameter. + * This parameter can be a value of @ref SPI_NSSP_Mode + * @retval None + */ +#define IS_SPI_NSSP(__NSSP__) (((__NSSP__) == SPI_NSS_PULSE_ENABLE) || \ + ((__NSSP__) == SPI_NSS_PULSE_DISABLE)) + +/** @brief Checks if SPI Baudrate prescaler parameter is in allowed range. + * @param __PRESCALER__ specifies the SPI Baudrate prescaler. + * This parameter can be a value of @ref SPI_BaudRate_Prescaler + * @retval None + */ +#define IS_SPI_BAUDRATE_PRESCALER(__PRESCALER__) (((__PRESCALER__) == SPI_BAUDRATEPRESCALER_2) || \ + ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_4) || \ + ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_8) || \ + ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_16) || \ + ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_32) || \ + ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_64) || \ + ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_128) || \ + ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_256)) + +/** @brief Checks if SPI MSB LSB transmission parameter is in allowed range. + * @param __BIT__ specifies the SPI MSB LSB transmission (whether data transfer starts from MSB or LSB bit). + * This parameter can be a value of @ref SPI_MSB_LSB_transmission + * @retval None + */ +#define IS_SPI_FIRST_BIT(__BIT__) (((__BIT__) == SPI_FIRSTBIT_MSB) || \ + ((__BIT__) == SPI_FIRSTBIT_LSB)) + +/** @brief Checks if SPI TI mode parameter is in allowed range. + * @param __MODE__ specifies the SPI TI mode. + * This parameter can be a value of @ref SPI_TI_mode + * @retval None + */ +#define IS_SPI_TIMODE(__MODE__) (((__MODE__) == SPI_TIMODE_DISABLE) || \ + ((__MODE__) == SPI_TIMODE_ENABLE)) + +/** @brief Checks if SPI CRC calculation enabled state is in allowed range. + * @param __CALCULATION__ specifies the SPI CRC calculation enable state. + * This parameter can be a value of @ref SPI_CRC_Calculation + * @retval None + */ +#define IS_SPI_CRC_CALCULATION(__CALCULATION__) (((__CALCULATION__) == SPI_CRCCALCULATION_DISABLE) || \ + ((__CALCULATION__) == SPI_CRCCALCULATION_ENABLE)) + +/** @brief Checks if SPI CRC length is in allowed range. + * @param __LENGTH__ specifies the SPI CRC length. + * This parameter can be a value of @ref SPI_CRC_length + * @retval None + */ +#define IS_SPI_CRC_LENGTH(__LENGTH__) (((__LENGTH__) == SPI_CRC_LENGTH_DATASIZE) || \ + ((__LENGTH__) == SPI_CRC_LENGTH_8BIT) || \ + ((__LENGTH__) == SPI_CRC_LENGTH_16BIT)) + +/** @brief Checks if SPI polynomial value to be used for the CRC calculation, is in allowed range. + * @param __POLYNOMIAL__ specifies the SPI polynomial value to be used for the CRC calculation. + * This parameter must be a number between Min_Data = 0 and Max_Data = 65535 + * @retval None + */ +#define IS_SPI_CRC_POLYNOMIAL(__POLYNOMIAL__) (((__POLYNOMIAL__) >= 0x1U) && \ + ((__POLYNOMIAL__) <= 0xFFFFU) && \ + (((__POLYNOMIAL__)&0x1U) != 0U)) + +/** @brief Checks if DMA handle is valid. + * @param __HANDLE__ specifies a DMA Handle. + * @retval None + */ +#define IS_SPI_DMA_HANDLE(__HANDLE__) ((__HANDLE__) != NULL) + +/** + * @} + */ + +/* Include SPI HAL Extended module */ +#include "stm32f3xx_hal_spi_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup SPI_Exported_Functions + * @{ + */ + +/** @addtogroup SPI_Exported_Functions_Group1 + * @{ + */ +/* Initialization/de-initialization functions ********************************/ +HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi); +HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi); +void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi); +void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi); + +/* Callbacks Register/UnRegister functions ***********************************/ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) +HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID, pSPI_CallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +/** + * @} + */ + +/** @addtogroup SPI_Exported_Functions_Group2 + * @{ + */ +/* I/O operation functions ***************************************************/ +HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, + uint32_t Timeout); +HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, + uint16_t Size); +HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, + uint16_t Size); +HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi); +HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi); +HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi); +/* Transfer Abort functions */ +HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi); +HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi); + +void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi); +void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi); +void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi); +void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi); +void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi); +void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi); +void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi); +void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi); +void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi); +/** + * @} + */ + +/** @addtogroup SPI_Exported_Functions_Group3 + * @{ + */ +/* Peripheral State and Error functions ***************************************/ +HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi); +uint32_t HAL_SPI_GetError(SPI_HandleTypeDef *hspi); +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F3xx_HAL_SPI_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_spi_ex.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_spi_ex.h new file mode 100644 index 0000000..8f72788 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_spi_ex.h @@ -0,0 +1,75 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_spi_ex.h + * @author MCD Application Team + * @brief Header file of SPI HAL Extended module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F3xx_HAL_SPI_EX_H +#define STM32F3xx_HAL_SPI_EX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup SPIEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macros -----------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup SPIEx_Exported_Functions + * @{ + */ + +/* Initialization and de-initialization functions ****************************/ +/* IO operation functions *****************************************************/ +/** @addtogroup SPIEx_Exported_Functions_Group1 + * @{ + */ +HAL_StatusTypeDef HAL_SPIEx_FlushRxFifo(SPI_HandleTypeDef *hspi); +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F3xx_HAL_SPI_EX_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_tim.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_tim.h new file mode 100644 index 0000000..aa6a7ea --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_tim.h @@ -0,0 +1,2533 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_tim.h + * @author MCD Application Team + * @brief Header file of TIM HAL module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F3xx_HAL_TIM_H +#define STM32F3xx_HAL_TIM_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup TIM + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup TIM_Exported_Types TIM Exported Types + * @{ + */ + +/** + * @brief TIM Time base Configuration Structure definition + */ +typedef struct +{ + uint32_t Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t CounterMode; /*!< Specifies the counter mode. + This parameter can be a value of @ref TIM_Counter_Mode */ + + uint32_t Period; /*!< Specifies the period value to be loaded into the active + Auto-Reload Register at the next update event. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + + uint32_t ClockDivision; /*!< Specifies the clock division. + This parameter can be a value of @ref TIM_ClockDivision */ + + uint32_t RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter + reaches zero, an update event is generated and counting restarts + from the RCR value (N). + This means in PWM mode that (N+1) corresponds to: + - the number of PWM periods in edge-aligned mode + - the number of half PWM period in center-aligned mode + GP timers: this parameter must be a number between Min_Data = 0x00 and + Max_Data = 0xFF. + Advanced timers: this parameter must be a number between Min_Data = 0x0000 and + Max_Data = 0xFFFF. */ + + uint32_t AutoReloadPreload; /*!< Specifies the auto-reload preload. + This parameter can be a value of @ref TIM_AutoReloadPreload */ +} TIM_Base_InitTypeDef; + +/** + * @brief TIM Output Compare Configuration Structure definition + */ +typedef struct +{ + uint32_t OCMode; /*!< Specifies the TIM mode. + This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ + + uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t OCPolarity; /*!< Specifies the output polarity. + This parameter can be a value of @ref TIM_Output_Compare_Polarity */ + + uint32_t OCNPolarity; /*!< Specifies the complementary output polarity. + This parameter can be a value of @ref TIM_Output_Compare_N_Polarity + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t OCFastMode; /*!< Specifies the Fast mode state. + This parameter can be a value of @ref TIM_Output_Fast_State + @note This parameter is valid only in PWM1 and PWM2 mode. */ + + + uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_Idle_State + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State + @note This parameter is valid only for timer instances supporting break feature. */ +} TIM_OC_InitTypeDef; + +/** + * @brief TIM One Pulse Mode Configuration Structure definition + */ +typedef struct +{ + uint32_t OCMode; /*!< Specifies the TIM mode. + This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ + + uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t OCPolarity; /*!< Specifies the output polarity. + This parameter can be a value of @ref TIM_Output_Compare_Polarity */ + + uint32_t OCNPolarity; /*!< Specifies the complementary output polarity. + This parameter can be a value of @ref TIM_Output_Compare_N_Polarity + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_Idle_State + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t ICPolarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint32_t ICSelection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t ICFilter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_OnePulse_InitTypeDef; + +/** + * @brief TIM Input Capture Configuration Structure definition + */ +typedef struct +{ + uint32_t ICPolarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint32_t ICSelection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t ICPrescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t ICFilter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_IC_InitTypeDef; + +/** + * @brief TIM Encoder Configuration Structure definition + */ +typedef struct +{ + uint32_t EncoderMode; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Encoder_Mode */ + + uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Encoder_Input_Polarity */ + + uint32_t IC1Selection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t IC1Filter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + + uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Encoder_Input_Polarity */ + + uint32_t IC2Selection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t IC2Prescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t IC2Filter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_Encoder_InitTypeDef; + +/** + * @brief Clock Configuration Handle Structure definition + */ +typedef struct +{ + uint32_t ClockSource; /*!< TIM clock sources + This parameter can be a value of @ref TIM_Clock_Source */ + uint32_t ClockPolarity; /*!< TIM clock polarity + This parameter can be a value of @ref TIM_Clock_Polarity */ + uint32_t ClockPrescaler; /*!< TIM clock prescaler + This parameter can be a value of @ref TIM_Clock_Prescaler */ + uint32_t ClockFilter; /*!< TIM clock filter + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_ClockConfigTypeDef; + +/** + * @brief TIM Clear Input Configuration Handle Structure definition + */ +typedef struct +{ + uint32_t ClearInputState; /*!< TIM clear Input state + This parameter can be ENABLE or DISABLE */ + uint32_t ClearInputSource; /*!< TIM clear Input sources + This parameter can be a value of @ref TIM_ClearInput_Source */ + uint32_t ClearInputPolarity; /*!< TIM Clear Input polarity + This parameter can be a value of @ref TIM_ClearInput_Polarity */ + uint32_t ClearInputPrescaler; /*!< TIM Clear Input prescaler + This parameter must be 0: When OCRef clear feature is used with ETR source, + ETR prescaler must be off */ + uint32_t ClearInputFilter; /*!< TIM Clear Input filter + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_ClearInputConfigTypeDef; + +/** + * @brief TIM Master configuration Structure definition + * @note Advanced timers provide TRGO2 internal line which is redirected + * to the ADC + */ +typedef struct +{ + uint32_t MasterOutputTrigger; /*!< Trigger output (TRGO) selection + This parameter can be a value of @ref TIM_Master_Mode_Selection */ +#if defined(TIM_CR2_MMS2) + uint32_t MasterOutputTrigger2; /*!< Trigger output2 (TRGO2) selection + This parameter can be a value of @ref TIM_Master_Mode_Selection_2 */ +#endif /* TIM_CR2_MMS2 */ + uint32_t MasterSlaveMode; /*!< Master/slave mode selection + This parameter can be a value of @ref TIM_Master_Slave_Mode + @note When the Master/slave mode is enabled, the effect of + an event on the trigger input (TRGI) is delayed to allow a + perfect synchronization between the current timer and its + slaves (through TRGO). It is not mandatory in case of timer + synchronization mode. */ +} TIM_MasterConfigTypeDef; + +/** + * @brief TIM Slave configuration Structure definition + */ +typedef struct +{ + uint32_t SlaveMode; /*!< Slave mode selection + This parameter can be a value of @ref TIM_Slave_Mode */ + uint32_t InputTrigger; /*!< Input Trigger source + This parameter can be a value of @ref TIM_Trigger_Selection */ + uint32_t TriggerPolarity; /*!< Input Trigger polarity + This parameter can be a value of @ref TIM_Trigger_Polarity */ + uint32_t TriggerPrescaler; /*!< Input trigger prescaler + This parameter can be a value of @ref TIM_Trigger_Prescaler */ + uint32_t TriggerFilter; /*!< Input trigger filter + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + +} TIM_SlaveConfigTypeDef; + +/** + * @brief TIM Break input(s) and Dead time configuration Structure definition + * @note 2 break inputs can be configured (BKIN and BKIN2) with configurable + * filter and polarity. + */ +typedef struct +{ + uint32_t OffStateRunMode; /*!< TIM off state in run mode, This parameter can be a value of @ref TIM_OSSR_Off_State_Selection_for_Run_mode_state */ + + uint32_t OffStateIDLEMode; /*!< TIM off state in IDLE mode, This parameter can be a value of @ref TIM_OSSI_Off_State_Selection_for_Idle_mode_state */ + + uint32_t LockLevel; /*!< TIM Lock level, This parameter can be a value of @ref TIM_Lock_level */ + + uint32_t DeadTime; /*!< TIM dead Time, This parameter can be a number between Min_Data = 0x00 and Max_Data = 0xFF */ + + uint32_t BreakState; /*!< TIM Break State, This parameter can be a value of @ref TIM_Break_Input_enable_disable */ + + uint32_t BreakPolarity; /*!< TIM Break input polarity, This parameter can be a value of @ref TIM_Break_Polarity */ + + uint32_t BreakFilter; /*!< Specifies the break input filter.This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + +#if defined(TIM_BDTR_BK2E) + uint32_t Break2State; /*!< TIM Break2 State, This parameter can be a value of @ref TIM_Break2_Input_enable_disable */ + + uint32_t Break2Polarity; /*!< TIM Break2 input polarity, This parameter can be a value of @ref TIM_Break2_Polarity */ + + uint32_t Break2Filter; /*!< TIM break2 input filter.This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + +#endif /*TIM_BDTR_BK2E */ + uint32_t AutomaticOutput; /*!< TIM Automatic Output Enable state, This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */ + +} TIM_BreakDeadTimeConfigTypeDef; + +/** + * @brief HAL State structures definition + */ +typedef enum +{ + HAL_TIM_STATE_RESET = 0x00U, /*!< Peripheral not yet initialized or disabled */ + HAL_TIM_STATE_READY = 0x01U, /*!< Peripheral Initialized and ready for use */ + HAL_TIM_STATE_BUSY = 0x02U, /*!< An internal process is ongoing */ + HAL_TIM_STATE_TIMEOUT = 0x03U, /*!< Timeout state */ + HAL_TIM_STATE_ERROR = 0x04U /*!< Reception process is ongoing */ +} HAL_TIM_StateTypeDef; + +/** + * @brief TIM Channel States definition + */ +typedef enum +{ + HAL_TIM_CHANNEL_STATE_RESET = 0x00U, /*!< TIM Channel initial state */ + HAL_TIM_CHANNEL_STATE_READY = 0x01U, /*!< TIM Channel ready for use */ + HAL_TIM_CHANNEL_STATE_BUSY = 0x02U, /*!< An internal process is ongoing on the TIM channel */ +} HAL_TIM_ChannelStateTypeDef; + +/** + * @brief DMA Burst States definition + */ +typedef enum +{ + HAL_DMA_BURST_STATE_RESET = 0x00U, /*!< DMA Burst initial state */ + HAL_DMA_BURST_STATE_READY = 0x01U, /*!< DMA Burst ready for use */ + HAL_DMA_BURST_STATE_BUSY = 0x02U, /*!< Ongoing DMA Burst */ +} HAL_TIM_DMABurstStateTypeDef; + +/** + * @brief HAL Active channel structures definition + */ +typedef enum +{ + HAL_TIM_ACTIVE_CHANNEL_1 = 0x01U, /*!< The active channel is 1 */ + HAL_TIM_ACTIVE_CHANNEL_2 = 0x02U, /*!< The active channel is 2 */ + HAL_TIM_ACTIVE_CHANNEL_3 = 0x04U, /*!< The active channel is 3 */ + HAL_TIM_ACTIVE_CHANNEL_4 = 0x08U, /*!< The active channel is 4 */ +#if defined(TIM_CCER_CC5E) + HAL_TIM_ACTIVE_CHANNEL_5 = 0x10U, /*!< The active channel is 5 */ +#endif /* TIM_CCER_CC5E */ +#if defined(TIM_CCER_CC6E) + HAL_TIM_ACTIVE_CHANNEL_6 = 0x20U, /*!< The active channel is 6 */ +#endif /* TIM_CCER_CC6E */ + HAL_TIM_ACTIVE_CHANNEL_CLEARED = 0x00U /*!< All active channels cleared */ +} HAL_TIM_ActiveChannel; + +/** + * @brief TIM Time Base Handle Structure definition + */ +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +typedef struct __TIM_HandleTypeDef +#else +typedef struct +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +{ + TIM_TypeDef *Instance; /*!< Register base address */ + TIM_Base_InitTypeDef Init; /*!< TIM Time Base required parameters */ + HAL_TIM_ActiveChannel Channel; /*!< Active channel */ + DMA_HandleTypeDef *hdma[7]; /*!< DMA Handlers array + This array is accessed by a @ref DMA_Handle_index */ + HAL_LockTypeDef Lock; /*!< Locking object */ + __IO HAL_TIM_StateTypeDef State; /*!< TIM operation state */ + __IO HAL_TIM_ChannelStateTypeDef ChannelState[6]; /*!< TIM channel operation state */ + __IO HAL_TIM_ChannelStateTypeDef ChannelNState[4]; /*!< TIM complementary channel operation state */ + __IO HAL_TIM_DMABurstStateTypeDef DMABurstState; /*!< DMA burst operation state */ + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + void (* Base_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Base Msp Init Callback */ + void (* Base_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Base Msp DeInit Callback */ + void (* IC_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM IC Msp Init Callback */ + void (* IC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM IC Msp DeInit Callback */ + void (* OC_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM OC Msp Init Callback */ + void (* OC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM OC Msp DeInit Callback */ + void (* PWM_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Msp Init Callback */ + void (* PWM_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Msp DeInit Callback */ + void (* OnePulse_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM One Pulse Msp Init Callback */ + void (* OnePulse_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM One Pulse Msp DeInit Callback */ + void (* Encoder_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Encoder Msp Init Callback */ + void (* Encoder_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Encoder Msp DeInit Callback */ + void (* HallSensor_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Hall Sensor Msp Init Callback */ + void (* HallSensor_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Hall Sensor Msp DeInit Callback */ + void (* PeriodElapsedCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Period Elapsed Callback */ + void (* PeriodElapsedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Period Elapsed half complete Callback */ + void (* TriggerCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Trigger Callback */ + void (* TriggerHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Trigger half complete Callback */ + void (* IC_CaptureCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Input Capture Callback */ + void (* IC_CaptureHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Input Capture half complete Callback */ + void (* OC_DelayElapsedCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Output Compare Delay Elapsed Callback */ + void (* PWM_PulseFinishedCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Pulse Finished Callback */ + void (* PWM_PulseFinishedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Pulse Finished half complete Callback */ + void (* ErrorCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Error Callback */ + void (* CommutationCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Commutation Callback */ + void (* CommutationHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Commutation half complete Callback */ + void (* BreakCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Break Callback */ +#if defined(TIM_BDTR_BK2E) + void (* Break2Callback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Break2 Callback */ +#endif /* */ +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} TIM_HandleTypeDef; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +/** + * @brief HAL TIM Callback ID enumeration definition + */ +typedef enum +{ + HAL_TIM_BASE_MSPINIT_CB_ID = 0x00U /*!< TIM Base MspInit Callback ID */ + , HAL_TIM_BASE_MSPDEINIT_CB_ID = 0x01U /*!< TIM Base MspDeInit Callback ID */ + , HAL_TIM_IC_MSPINIT_CB_ID = 0x02U /*!< TIM IC MspInit Callback ID */ + , HAL_TIM_IC_MSPDEINIT_CB_ID = 0x03U /*!< TIM IC MspDeInit Callback ID */ + , HAL_TIM_OC_MSPINIT_CB_ID = 0x04U /*!< TIM OC MspInit Callback ID */ + , HAL_TIM_OC_MSPDEINIT_CB_ID = 0x05U /*!< TIM OC MspDeInit Callback ID */ + , HAL_TIM_PWM_MSPINIT_CB_ID = 0x06U /*!< TIM PWM MspInit Callback ID */ + , HAL_TIM_PWM_MSPDEINIT_CB_ID = 0x07U /*!< TIM PWM MspDeInit Callback ID */ + , HAL_TIM_ONE_PULSE_MSPINIT_CB_ID = 0x08U /*!< TIM One Pulse MspInit Callback ID */ + , HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID = 0x09U /*!< TIM One Pulse MspDeInit Callback ID */ + , HAL_TIM_ENCODER_MSPINIT_CB_ID = 0x0AU /*!< TIM Encoder MspInit Callback ID */ + , HAL_TIM_ENCODER_MSPDEINIT_CB_ID = 0x0BU /*!< TIM Encoder MspDeInit Callback ID */ + , HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID = 0x0CU /*!< TIM Hall Sensor MspDeInit Callback ID */ + , HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID = 0x0DU /*!< TIM Hall Sensor MspDeInit Callback ID */ + , HAL_TIM_PERIOD_ELAPSED_CB_ID = 0x0EU /*!< TIM Period Elapsed Callback ID */ + , HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID = 0x0FU /*!< TIM Period Elapsed half complete Callback ID */ + , HAL_TIM_TRIGGER_CB_ID = 0x10U /*!< TIM Trigger Callback ID */ + , HAL_TIM_TRIGGER_HALF_CB_ID = 0x11U /*!< TIM Trigger half complete Callback ID */ + + , HAL_TIM_IC_CAPTURE_CB_ID = 0x12U /*!< TIM Input Capture Callback ID */ + , HAL_TIM_IC_CAPTURE_HALF_CB_ID = 0x13U /*!< TIM Input Capture half complete Callback ID */ + , HAL_TIM_OC_DELAY_ELAPSED_CB_ID = 0x14U /*!< TIM Output Compare Delay Elapsed Callback ID */ + , HAL_TIM_PWM_PULSE_FINISHED_CB_ID = 0x15U /*!< TIM PWM Pulse Finished Callback ID */ + , HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID = 0x16U /*!< TIM PWM Pulse Finished half complete Callback ID */ + , HAL_TIM_ERROR_CB_ID = 0x17U /*!< TIM Error Callback ID */ + , HAL_TIM_COMMUTATION_CB_ID = 0x18U /*!< TIM Commutation Callback ID */ + , HAL_TIM_COMMUTATION_HALF_CB_ID = 0x19U /*!< TIM Commutation half complete Callback ID */ + , HAL_TIM_BREAK_CB_ID = 0x1AU /*!< TIM Break Callback ID */ +#if defined(TIM_BDTR_BK2E) + , HAL_TIM_BREAK2_CB_ID = 0x1BU /*!< TIM Break2 Callback ID */ +#endif /* TIM_BDTR_BK2E */ +} HAL_TIM_CallbackIDTypeDef; + +/** + * @brief HAL TIM Callback pointer definition + */ +typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to the TIM callback function */ + +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ +/* End of exported types -----------------------------------------------------*/ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup TIM_Exported_Constants TIM Exported Constants + * @{ + */ + +/** @defgroup TIM_ClearInput_Source TIM Clear Input Source + * @{ + */ +#define TIM_CLEARINPUTSOURCE_NONE 0x00000000U /*!< OCREF_CLR is disabled */ +#define TIM_CLEARINPUTSOURCE_ETR 0x00000001U /*!< OCREF_CLR is connected to ETRF input */ +#if defined(TIM_SMCR_OCCS) +#define TIM_CLEARINPUTSOURCE_OCREFCLR 0x00000002U /*!< OCREF_CLR is connected to OCREF_CLR_INT */ +#endif /* TIM_SMCR_OCCS */ +/** + * @} + */ + +/** @defgroup TIM_DMA_Base_address TIM DMA Base Address + * @{ + */ +#define TIM_DMABASE_CR1 0x00000000U +#define TIM_DMABASE_CR2 0x00000001U +#define TIM_DMABASE_SMCR 0x00000002U +#define TIM_DMABASE_DIER 0x00000003U +#define TIM_DMABASE_SR 0x00000004U +#define TIM_DMABASE_EGR 0x00000005U +#define TIM_DMABASE_CCMR1 0x00000006U +#define TIM_DMABASE_CCMR2 0x00000007U +#define TIM_DMABASE_CCER 0x00000008U +#define TIM_DMABASE_CNT 0x00000009U +#define TIM_DMABASE_PSC 0x0000000AU +#define TIM_DMABASE_ARR 0x0000000BU +#define TIM_DMABASE_RCR 0x0000000CU +#define TIM_DMABASE_CCR1 0x0000000DU +#define TIM_DMABASE_CCR2 0x0000000EU +#define TIM_DMABASE_CCR3 0x0000000FU +#define TIM_DMABASE_CCR4 0x00000010U +#define TIM_DMABASE_BDTR 0x00000011U +#define TIM_DMABASE_DCR 0x00000012U +#define TIM_DMABASE_DMAR 0x00000013U +#define TIM_DMABASE_OR 0x00000014U +#if defined(TIM_CCER_CC5E) && defined(TIM_CCER_CC6E) +#define TIM_DMABASE_CCMR3 0x00000015U +#define TIM_DMABASE_CCR5 0x00000016U +#define TIM_DMABASE_CCR6 0x00000017U +#endif /* TIM_CCER_CC5E && TIM_CCER_CC6E */ +/** + * @} + */ + +/** @defgroup TIM_Event_Source TIM Event Source + * @{ + */ +#define TIM_EVENTSOURCE_UPDATE TIM_EGR_UG /*!< Reinitialize the counter and generates an update of the registers */ +#define TIM_EVENTSOURCE_CC1 TIM_EGR_CC1G /*!< A capture/compare event is generated on channel 1 */ +#define TIM_EVENTSOURCE_CC2 TIM_EGR_CC2G /*!< A capture/compare event is generated on channel 2 */ +#define TIM_EVENTSOURCE_CC3 TIM_EGR_CC3G /*!< A capture/compare event is generated on channel 3 */ +#define TIM_EVENTSOURCE_CC4 TIM_EGR_CC4G /*!< A capture/compare event is generated on channel 4 */ +#define TIM_EVENTSOURCE_COM TIM_EGR_COMG /*!< A commutation event is generated */ +#define TIM_EVENTSOURCE_TRIGGER TIM_EGR_TG /*!< A trigger event is generated */ +#define TIM_EVENTSOURCE_BREAK TIM_EGR_BG /*!< A break event is generated */ +#if defined(TIM_EGR_B2G) +#define TIM_EVENTSOURCE_BREAK2 TIM_EGR_B2G /*!< A break 2 event is generated */ +#endif /* TIM_EGR_B2G */ +/** + * @} + */ + +/** @defgroup TIM_Input_Channel_Polarity TIM Input Channel polarity + * @{ + */ +#define TIM_INPUTCHANNELPOLARITY_RISING 0x00000000U /*!< Polarity for TIx source */ +#define TIM_INPUTCHANNELPOLARITY_FALLING TIM_CCER_CC1P /*!< Polarity for TIx source */ +#define TIM_INPUTCHANNELPOLARITY_BOTHEDGE (TIM_CCER_CC1P | TIM_CCER_CC1NP) /*!< Polarity for TIx source */ +/** + * @} + */ + +/** @defgroup TIM_ETR_Polarity TIM ETR Polarity + * @{ + */ +#define TIM_ETRPOLARITY_INVERTED TIM_SMCR_ETP /*!< Polarity for ETR source */ +#define TIM_ETRPOLARITY_NONINVERTED 0x00000000U /*!< Polarity for ETR source */ +/** + * @} + */ + +/** @defgroup TIM_ETR_Prescaler TIM ETR Prescaler + * @{ + */ +#define TIM_ETRPRESCALER_DIV1 0x00000000U /*!< No prescaler is used */ +#define TIM_ETRPRESCALER_DIV2 TIM_SMCR_ETPS_0 /*!< ETR input source is divided by 2 */ +#define TIM_ETRPRESCALER_DIV4 TIM_SMCR_ETPS_1 /*!< ETR input source is divided by 4 */ +#define TIM_ETRPRESCALER_DIV8 TIM_SMCR_ETPS /*!< ETR input source is divided by 8 */ +/** + * @} + */ + +/** @defgroup TIM_Counter_Mode TIM Counter Mode + * @{ + */ +#define TIM_COUNTERMODE_UP 0x00000000U /*!< Counter used as up-counter */ +#define TIM_COUNTERMODE_DOWN TIM_CR1_DIR /*!< Counter used as down-counter */ +#define TIM_COUNTERMODE_CENTERALIGNED1 TIM_CR1_CMS_0 /*!< Center-aligned mode 1 */ +#define TIM_COUNTERMODE_CENTERALIGNED2 TIM_CR1_CMS_1 /*!< Center-aligned mode 2 */ +#define TIM_COUNTERMODE_CENTERALIGNED3 TIM_CR1_CMS /*!< Center-aligned mode 3 */ +/** + * @} + */ + +#if defined(TIM_CR1_UIFREMAP) +/** @defgroup TIM_Update_Interrupt_Flag_Remap TIM Update Interrupt Flag Remap + * @{ + */ +#define TIM_UIFREMAP_DISABLE 0x00000000U /*!< Update interrupt flag remap disabled */ +#define TIM_UIFREMAP_ENABLE TIM_CR1_UIFREMAP /*!< Update interrupt flag remap enabled */ +/** + * @} + */ + +#endif /* TIM_CR1_UIFREMAP */ +/** @defgroup TIM_ClockDivision TIM Clock Division + * @{ + */ +#define TIM_CLOCKDIVISION_DIV1 0x00000000U /*!< Clock division: tDTS=tCK_INT */ +#define TIM_CLOCKDIVISION_DIV2 TIM_CR1_CKD_0 /*!< Clock division: tDTS=2*tCK_INT */ +#define TIM_CLOCKDIVISION_DIV4 TIM_CR1_CKD_1 /*!< Clock division: tDTS=4*tCK_INT */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_State TIM Output Compare State + * @{ + */ +#define TIM_OUTPUTSTATE_DISABLE 0x00000000U /*!< Capture/Compare 1 output disabled */ +#define TIM_OUTPUTSTATE_ENABLE TIM_CCER_CC1E /*!< Capture/Compare 1 output enabled */ +/** + * @} + */ + +/** @defgroup TIM_AutoReloadPreload TIM Auto-Reload Preload + * @{ + */ +#define TIM_AUTORELOAD_PRELOAD_DISABLE 0x00000000U /*!< TIMx_ARR register is not buffered */ +#define TIM_AUTORELOAD_PRELOAD_ENABLE TIM_CR1_ARPE /*!< TIMx_ARR register is buffered */ + +/** + * @} + */ + +/** @defgroup TIM_Output_Fast_State TIM Output Fast State + * @{ + */ +#define TIM_OCFAST_DISABLE 0x00000000U /*!< Output Compare fast disable */ +#define TIM_OCFAST_ENABLE TIM_CCMR1_OC1FE /*!< Output Compare fast enable */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_State TIM Complementary Output Compare State + * @{ + */ +#define TIM_OUTPUTNSTATE_DISABLE 0x00000000U /*!< OCxN is disabled */ +#define TIM_OUTPUTNSTATE_ENABLE TIM_CCER_CC1NE /*!< OCxN is enabled */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_Polarity TIM Output Compare Polarity + * @{ + */ +#define TIM_OCPOLARITY_HIGH 0x00000000U /*!< Capture/Compare output polarity */ +#define TIM_OCPOLARITY_LOW TIM_CCER_CC1P /*!< Capture/Compare output polarity */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_Polarity TIM Complementary Output Compare Polarity + * @{ + */ +#define TIM_OCNPOLARITY_HIGH 0x00000000U /*!< Capture/Compare complementary output polarity */ +#define TIM_OCNPOLARITY_LOW TIM_CCER_CC1NP /*!< Capture/Compare complementary output polarity */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_Idle_State TIM Output Compare Idle State + * @{ + */ +#define TIM_OCIDLESTATE_SET TIM_CR2_OIS1 /*!< Output Idle state: OCx=1 when MOE=0 */ +#define TIM_OCIDLESTATE_RESET 0x00000000U /*!< Output Idle state: OCx=0 when MOE=0 */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_Idle_State TIM Complementary Output Compare Idle State + * @{ + */ +#define TIM_OCNIDLESTATE_SET TIM_CR2_OIS1N /*!< Complementary output Idle state: OCxN=1 when MOE=0 */ +#define TIM_OCNIDLESTATE_RESET 0x00000000U /*!< Complementary output Idle state: OCxN=0 when MOE=0 */ +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Polarity TIM Input Capture Polarity + * @{ + */ +#define TIM_ICPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Capture triggered by rising edge on timer input */ +#define TIM_ICPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Capture triggered by falling edge on timer input */ +#define TIM_ICPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Capture triggered by both rising and falling edges on timer input*/ +/** + * @} + */ + +/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity + * @{ + */ +#define TIM_ENCODERINPUTPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Encoder input with rising edge polarity */ +#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */ +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection + * @{ + */ +#define TIM_ICSELECTION_DIRECTTI TIM_CCMR1_CC1S_0 /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to IC1, IC2, IC3 or IC4, respectively */ +#define TIM_ICSELECTION_INDIRECTTI TIM_CCMR1_CC1S_1 /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to IC2, IC1, IC4 or IC3, respectively */ +#define TIM_ICSELECTION_TRC TIM_CCMR1_CC1S /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC */ +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Prescaler TIM Input Capture Prescaler + * @{ + */ +#define TIM_ICPSC_DIV1 0x00000000U /*!< Capture performed each time an edge is detected on the capture input */ +#define TIM_ICPSC_DIV2 TIM_CCMR1_IC1PSC_0 /*!< Capture performed once every 2 events */ +#define TIM_ICPSC_DIV4 TIM_CCMR1_IC1PSC_1 /*!< Capture performed once every 4 events */ +#define TIM_ICPSC_DIV8 TIM_CCMR1_IC1PSC /*!< Capture performed once every 8 events */ +/** + * @} + */ + +/** @defgroup TIM_One_Pulse_Mode TIM One Pulse Mode + * @{ + */ +#define TIM_OPMODE_SINGLE TIM_CR1_OPM /*!< Counter stops counting at the next update event */ +#define TIM_OPMODE_REPETITIVE 0x00000000U /*!< Counter is not stopped at update event */ +/** + * @} + */ + +/** @defgroup TIM_Encoder_Mode TIM Encoder Mode + * @{ + */ +#define TIM_ENCODERMODE_TI1 TIM_SMCR_SMS_0 /*!< Quadrature encoder mode 1, x2 mode, counts up/down on TI1FP1 edge depending on TI2FP2 level */ +#define TIM_ENCODERMODE_TI2 TIM_SMCR_SMS_1 /*!< Quadrature encoder mode 2, x2 mode, counts up/down on TI2FP2 edge depending on TI1FP1 level. */ +#define TIM_ENCODERMODE_TI12 (TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< Quadrature encoder mode 3, x4 mode, counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input. */ +/** + * @} + */ + +/** @defgroup TIM_Interrupt_definition TIM interrupt Definition + * @{ + */ +#define TIM_IT_UPDATE TIM_DIER_UIE /*!< Update interrupt */ +#define TIM_IT_CC1 TIM_DIER_CC1IE /*!< Capture/Compare 1 interrupt */ +#define TIM_IT_CC2 TIM_DIER_CC2IE /*!< Capture/Compare 2 interrupt */ +#define TIM_IT_CC3 TIM_DIER_CC3IE /*!< Capture/Compare 3 interrupt */ +#define TIM_IT_CC4 TIM_DIER_CC4IE /*!< Capture/Compare 4 interrupt */ +#define TIM_IT_COM TIM_DIER_COMIE /*!< Commutation interrupt */ +#define TIM_IT_TRIGGER TIM_DIER_TIE /*!< Trigger interrupt */ +#define TIM_IT_BREAK TIM_DIER_BIE /*!< Break interrupt */ +/** + * @} + */ + +/** @defgroup TIM_Commutation_Source TIM Commutation Source + * @{ + */ +#define TIM_COMMUTATION_TRGI TIM_CR2_CCUS /*!< When Capture/compare control bits are preloaded, they are updated by setting the COMG bit or when an rising edge occurs on trigger input */ +#define TIM_COMMUTATION_SOFTWARE 0x00000000U /*!< When Capture/compare control bits are preloaded, they are updated by setting the COMG bit */ +/** + * @} + */ + +/** @defgroup TIM_DMA_sources TIM DMA Sources + * @{ + */ +#define TIM_DMA_UPDATE TIM_DIER_UDE /*!< DMA request is triggered by the update event */ +#define TIM_DMA_CC1 TIM_DIER_CC1DE /*!< DMA request is triggered by the capture/compare macth 1 event */ +#define TIM_DMA_CC2 TIM_DIER_CC2DE /*!< DMA request is triggered by the capture/compare macth 2 event event */ +#define TIM_DMA_CC3 TIM_DIER_CC3DE /*!< DMA request is triggered by the capture/compare macth 3 event event */ +#define TIM_DMA_CC4 TIM_DIER_CC4DE /*!< DMA request is triggered by the capture/compare macth 4 event event */ +#define TIM_DMA_COM TIM_DIER_COMDE /*!< DMA request is triggered by the commutation event */ +#define TIM_DMA_TRIGGER TIM_DIER_TDE /*!< DMA request is triggered by the trigger event */ +/** + * @} + */ + +/** @defgroup TIM_Flag_definition TIM Flag Definition + * @{ + */ +#define TIM_FLAG_UPDATE TIM_SR_UIF /*!< Update interrupt flag */ +#define TIM_FLAG_CC1 TIM_SR_CC1IF /*!< Capture/Compare 1 interrupt flag */ +#define TIM_FLAG_CC2 TIM_SR_CC2IF /*!< Capture/Compare 2 interrupt flag */ +#define TIM_FLAG_CC3 TIM_SR_CC3IF /*!< Capture/Compare 3 interrupt flag */ +#define TIM_FLAG_CC4 TIM_SR_CC4IF /*!< Capture/Compare 4 interrupt flag */ +#if defined(TIM_SR_CC5IF) +#define TIM_FLAG_CC5 TIM_SR_CC5IF /*!< Capture/Compare 5 interrupt flag */ +#endif /* TIM_SR_CC5IF */ +#if defined(TIM_SR_CC6IF) +#define TIM_FLAG_CC6 TIM_SR_CC6IF /*!< Capture/Compare 6 interrupt flag */ +#endif /* TIM_SR_CC6IF */ +#define TIM_FLAG_COM TIM_SR_COMIF /*!< Commutation interrupt flag */ +#define TIM_FLAG_TRIGGER TIM_SR_TIF /*!< Trigger interrupt flag */ +#define TIM_FLAG_BREAK TIM_SR_BIF /*!< Break interrupt flag */ +#if defined(TIM_SR_B2IF) +#define TIM_FLAG_BREAK2 TIM_SR_B2IF /*!< Break 2 interrupt flag */ +#endif /* TIM_SR_B2IF */ +#define TIM_FLAG_CC1OF TIM_SR_CC1OF /*!< Capture 1 overcapture flag */ +#define TIM_FLAG_CC2OF TIM_SR_CC2OF /*!< Capture 2 overcapture flag */ +#define TIM_FLAG_CC3OF TIM_SR_CC3OF /*!< Capture 3 overcapture flag */ +#define TIM_FLAG_CC4OF TIM_SR_CC4OF /*!< Capture 4 overcapture flag */ +/** + * @} + */ + +/** @defgroup TIM_Channel TIM Channel + * @{ + */ +#define TIM_CHANNEL_1 0x00000000U /*!< Capture/compare channel 1 identifier */ +#define TIM_CHANNEL_2 0x00000004U /*!< Capture/compare channel 2 identifier */ +#define TIM_CHANNEL_3 0x00000008U /*!< Capture/compare channel 3 identifier */ +#define TIM_CHANNEL_4 0x0000000CU /*!< Capture/compare channel 4 identifier */ +#if defined(TIM_CCER_CC5E) +#define TIM_CHANNEL_5 0x00000010U /*!< Compare channel 5 identifier */ +#endif /* TIM_CCER_CC5E */ +#if defined(TIM_CCER_CC6E) +#define TIM_CHANNEL_6 0x00000014U /*!< Compare channel 6 identifier */ +#endif /* TIM_CCER_CC6E */ +#define TIM_CHANNEL_ALL 0x0000003CU /*!< Global Capture/compare channel identifier */ +/** + * @} + */ + +/** @defgroup TIM_Clock_Source TIM Clock Source + * @{ + */ +#define TIM_CLOCKSOURCE_ETRMODE2 TIM_SMCR_ETPS_1 /*!< External clock source mode 2 */ +#define TIM_CLOCKSOURCE_INTERNAL TIM_SMCR_ETPS_0 /*!< Internal clock source */ +#define TIM_CLOCKSOURCE_ITR0 TIM_TS_ITR0 /*!< External clock source mode 1 (ITR0) */ +#define TIM_CLOCKSOURCE_ITR1 TIM_TS_ITR1 /*!< External clock source mode 1 (ITR1) */ +#define TIM_CLOCKSOURCE_ITR2 TIM_TS_ITR2 /*!< External clock source mode 1 (ITR2) */ +#define TIM_CLOCKSOURCE_ITR3 TIM_TS_ITR3 /*!< External clock source mode 1 (ITR3) */ +#define TIM_CLOCKSOURCE_TI1ED TIM_TS_TI1F_ED /*!< External clock source mode 1 (TTI1FP1 + edge detect.) */ +#define TIM_CLOCKSOURCE_TI1 TIM_TS_TI1FP1 /*!< External clock source mode 1 (TTI1FP1) */ +#define TIM_CLOCKSOURCE_TI2 TIM_TS_TI2FP2 /*!< External clock source mode 1 (TTI2FP2) */ +#define TIM_CLOCKSOURCE_ETRMODE1 TIM_TS_ETRF /*!< External clock source mode 1 (ETRF) */ +/** + * @} + */ + +/** @defgroup TIM_Clock_Polarity TIM Clock Polarity + * @{ + */ +#define TIM_CLOCKPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx clock sources */ +#define TIM_CLOCKPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx clock sources */ +#define TIM_CLOCKPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Polarity for TIx clock sources */ +#define TIM_CLOCKPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Polarity for TIx clock sources */ +#define TIM_CLOCKPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIx clock sources */ +/** + * @} + */ + +/** @defgroup TIM_Clock_Prescaler TIM Clock Prescaler + * @{ + */ +#define TIM_CLOCKPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ +#define TIM_CLOCKPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Clock: Capture performed once every 2 events. */ +#define TIM_CLOCKPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Clock: Capture performed once every 4 events. */ +#define TIM_CLOCKPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Clock: Capture performed once every 8 events. */ +/** + * @} + */ + +/** @defgroup TIM_ClearInput_Polarity TIM Clear Input Polarity + * @{ + */ +#define TIM_CLEARINPUTPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx pin */ +#define TIM_CLEARINPUTPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx pin */ +/** + * @} + */ + +/** @defgroup TIM_ClearInput_Prescaler TIM Clear Input Prescaler + * @{ + */ +#define TIM_CLEARINPUTPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ +#define TIM_CLEARINPUTPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR pin: Capture performed once every 2 events. */ +#define TIM_CLEARINPUTPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR pin: Capture performed once every 4 events. */ +#define TIM_CLEARINPUTPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR pin: Capture performed once every 8 events. */ +/** + * @} + */ + +/** @defgroup TIM_OSSR_Off_State_Selection_for_Run_mode_state TIM OSSR OffState Selection for Run mode state + * @{ + */ +#define TIM_OSSR_ENABLE TIM_BDTR_OSSR /*!< When inactive, OC/OCN outputs are enabled (still controlled by the timer) */ +#define TIM_OSSR_DISABLE 0x00000000U /*!< When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer) */ +/** + * @} + */ + +/** @defgroup TIM_OSSI_Off_State_Selection_for_Idle_mode_state TIM OSSI OffState Selection for Idle mode state + * @{ + */ +#define TIM_OSSI_ENABLE TIM_BDTR_OSSI /*!< When inactive, OC/OCN outputs are enabled (still controlled by the timer) */ +#define TIM_OSSI_DISABLE 0x00000000U /*!< When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer) */ +/** + * @} + */ +/** @defgroup TIM_Lock_level TIM Lock level + * @{ + */ +#define TIM_LOCKLEVEL_OFF 0x00000000U /*!< LOCK OFF */ +#define TIM_LOCKLEVEL_1 TIM_BDTR_LOCK_0 /*!< LOCK Level 1 */ +#define TIM_LOCKLEVEL_2 TIM_BDTR_LOCK_1 /*!< LOCK Level 2 */ +#define TIM_LOCKLEVEL_3 TIM_BDTR_LOCK /*!< LOCK Level 3 */ +/** + * @} + */ + +/** @defgroup TIM_Break_Input_enable_disable TIM Break Input Enable + * @{ + */ +#define TIM_BREAK_ENABLE TIM_BDTR_BKE /*!< Break input BRK is enabled */ +#define TIM_BREAK_DISABLE 0x00000000U /*!< Break input BRK is disabled */ +/** + * @} + */ + +/** @defgroup TIM_Break_Polarity TIM Break Input Polarity + * @{ + */ +#define TIM_BREAKPOLARITY_LOW 0x00000000U /*!< Break input BRK is active low */ +#define TIM_BREAKPOLARITY_HIGH TIM_BDTR_BKP /*!< Break input BRK is active high */ +/** + * @} + */ + +#if defined(TIM_BDTR_BK2E) +/** @defgroup TIM_Break2_Input_enable_disable TIM Break input 2 Enable + * @{ + */ +#define TIM_BREAK2_DISABLE 0x00000000U /*!< Break input BRK2 is disabled */ +#define TIM_BREAK2_ENABLE TIM_BDTR_BK2E /*!< Break input BRK2 is enabled */ +/** + * @} + */ + +/** @defgroup TIM_Break2_Polarity TIM Break Input 2 Polarity + * @{ + */ +#define TIM_BREAK2POLARITY_LOW 0x00000000U /*!< Break input BRK2 is active low */ +#define TIM_BREAK2POLARITY_HIGH TIM_BDTR_BK2P /*!< Break input BRK2 is active high */ +/** + * @} + */ +#endif /* TIM_BDTR_BK2E */ + +/** @defgroup TIM_AOE_Bit_Set_Reset TIM Automatic Output Enable + * @{ + */ +#define TIM_AUTOMATICOUTPUT_DISABLE 0x00000000U /*!< MOE can be set only by software */ +#define TIM_AUTOMATICOUTPUT_ENABLE TIM_BDTR_AOE /*!< MOE can be set by software or automatically at the next update event (if none of the break inputs BRK and BRK2 is active) */ +/** + * @} + */ + +#if defined(TIM_CCR5_CCR5) +/** @defgroup TIM_Group_Channel5 TIM Group Channel 5 and Channel 1, 2 or 3 + * @{ + */ +#define TIM_GROUPCH5_NONE 0x00000000U /*!< No effect of OC5REF on OC1REFC, OC2REFC and OC3REFC */ +#define TIM_GROUPCH5_OC1REFC TIM_CCR5_GC5C1 /*!< OC1REFC is the logical AND of OC1REFC and OC5REF */ +#define TIM_GROUPCH5_OC2REFC TIM_CCR5_GC5C2 /*!< OC2REFC is the logical AND of OC2REFC and OC5REF */ +#define TIM_GROUPCH5_OC3REFC TIM_CCR5_GC5C3 /*!< OC3REFC is the logical AND of OC3REFC and OC5REF */ +/** + * @} + */ +#endif /* TIM_CCR5_CCR5 */ + +/** @defgroup TIM_Master_Mode_Selection TIM Master Mode Selection + * @{ + */ +#define TIM_TRGO_RESET 0x00000000U /*!< TIMx_EGR.UG bit is used as trigger output (TRGO) */ +#define TIM_TRGO_ENABLE TIM_CR2_MMS_0 /*!< TIMx_CR1.CEN bit is used as trigger output (TRGO) */ +#define TIM_TRGO_UPDATE TIM_CR2_MMS_1 /*!< Update event is used as trigger output (TRGO) */ +#define TIM_TRGO_OC1 (TIM_CR2_MMS_1 | TIM_CR2_MMS_0) /*!< Capture or a compare match 1 is used as trigger output (TRGO) */ +#define TIM_TRGO_OC1REF TIM_CR2_MMS_2 /*!< OC1REF signal is used as trigger output (TRGO) */ +#define TIM_TRGO_OC2REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_0) /*!< OC2REF signal is used as trigger output(TRGO) */ +#define TIM_TRGO_OC3REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_1) /*!< OC3REF signal is used as trigger output(TRGO) */ +#define TIM_TRGO_OC4REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_1 | TIM_CR2_MMS_0) /*!< OC4REF signal is used as trigger output(TRGO) */ +/** + * @} + */ + +#if defined(TIM_CR2_MMS2) +/** @defgroup TIM_Master_Mode_Selection_2 TIM Master Mode Selection 2 (TRGO2) + * @{ + */ +#define TIM_TRGO2_RESET 0x00000000U /*!< TIMx_EGR.UG bit is used as trigger output (TRGO2) */ +#define TIM_TRGO2_ENABLE TIM_CR2_MMS2_0 /*!< TIMx_CR1.CEN bit is used as trigger output (TRGO2) */ +#define TIM_TRGO2_UPDATE TIM_CR2_MMS2_1 /*!< Update event is used as trigger output (TRGO2) */ +#define TIM_TRGO2_OC1 (TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0) /*!< Capture or a compare match 1 is used as trigger output (TRGO2) */ +#define TIM_TRGO2_OC1REF TIM_CR2_MMS2_2 /*!< OC1REF signal is used as trigger output (TRGO2) */ +#define TIM_TRGO2_OC2REF (TIM_CR2_MMS2_2 | TIM_CR2_MMS2_0) /*!< OC2REF signal is used as trigger output (TRGO2) */ +#define TIM_TRGO2_OC3REF (TIM_CR2_MMS2_2 | TIM_CR2_MMS2_1) /*!< OC3REF signal is used as trigger output (TRGO2) */ +#define TIM_TRGO2_OC4REF (TIM_CR2_MMS2_2 | TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0) /*!< OC4REF signal is used as trigger output (TRGO2) */ +#define TIM_TRGO2_OC5REF TIM_CR2_MMS2_3 /*!< OC5REF signal is used as trigger output (TRGO2) */ +#define TIM_TRGO2_OC6REF (TIM_CR2_MMS2_3 | TIM_CR2_MMS2_0) /*!< OC6REF signal is used as trigger output (TRGO2) */ +#define TIM_TRGO2_OC4REF_RISINGFALLING (TIM_CR2_MMS2_3 | TIM_CR2_MMS2_1) /*!< OC4REF rising or falling edges generate pulses on TRGO2 */ +#define TIM_TRGO2_OC6REF_RISINGFALLING (TIM_CR2_MMS2_3 | TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0) /*!< OC6REF rising or falling edges generate pulses on TRGO2 */ +#define TIM_TRGO2_OC4REF_RISING_OC6REF_RISING (TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2) /*!< OC4REF or OC6REF rising edges generate pulses on TRGO2 */ +#define TIM_TRGO2_OC4REF_RISING_OC6REF_FALLING (TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2 | TIM_CR2_MMS2_0) /*!< OC4REF rising or OC6REF falling edges generate pulses on TRGO2 */ +#define TIM_TRGO2_OC5REF_RISING_OC6REF_RISING (TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2 |TIM_CR2_MMS2_1) /*!< OC5REF or OC6REF rising edges generate pulses on TRGO2 */ +#define TIM_TRGO2_OC5REF_RISING_OC6REF_FALLING (TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2 | TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0) /*!< OC5REF or OC6REF rising edges generate pulses on TRGO2 */ +/** + * @} + */ +#endif /* TIM_CR2_MMS2 */ + +/** @defgroup TIM_Master_Slave_Mode TIM Master/Slave Mode + * @{ + */ +#define TIM_MASTERSLAVEMODE_ENABLE TIM_SMCR_MSM /*!< No action */ +#define TIM_MASTERSLAVEMODE_DISABLE 0x00000000U /*!< Master/slave mode is selected */ +/** + * @} + */ + +/** @defgroup TIM_Slave_Mode TIM Slave mode + * @{ + */ +#define TIM_SLAVEMODE_DISABLE 0x00000000U /*!< Slave mode disabled */ +#define TIM_SLAVEMODE_RESET TIM_SMCR_SMS_2 /*!< Reset Mode */ +#define TIM_SLAVEMODE_GATED (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_0) /*!< Gated Mode */ +#define TIM_SLAVEMODE_TRIGGER (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1) /*!< Trigger Mode */ +#define TIM_SLAVEMODE_EXTERNAL1 (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< External Clock Mode 1 */ +#if defined (TIM_SMCR_SMS_3) +#define TIM_SLAVEMODE_COMBINED_RESETTRIGGER TIM_SMCR_SMS_3 /*!< Combined reset + trigger mode */ +#endif /* TIM_SMCR_SMS_3 */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_and_PWM_modes TIM Output Compare and PWM Modes + * @{ + */ +#define TIM_OCMODE_TIMING 0x00000000U /*!< Frozen */ +#define TIM_OCMODE_ACTIVE TIM_CCMR1_OC1M_0 /*!< Set channel to active level on match */ +#define TIM_OCMODE_INACTIVE TIM_CCMR1_OC1M_1 /*!< Set channel to inactive level on match */ +#define TIM_OCMODE_TOGGLE (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!< Toggle */ +#define TIM_OCMODE_PWM1 (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1) /*!< PWM mode 1 */ +#define TIM_OCMODE_PWM2 (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!< PWM mode 2 */ +#define TIM_OCMODE_FORCED_ACTIVE (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0) /*!< Force active level */ +#define TIM_OCMODE_FORCED_INACTIVE TIM_CCMR1_OC1M_2 /*!< Force inactive level */ +#if defined(TIM_CCMR1_OC1M_3) +#define TIM_OCMODE_RETRIGERRABLE_OPM1 TIM_CCMR1_OC1M_3 /*!< Retrigerrable OPM mode 1 */ +#define TIM_OCMODE_RETRIGERRABLE_OPM2 (TIM_CCMR1_OC1M_3 | TIM_CCMR1_OC1M_0) /*!< Retrigerrable OPM mode 2 */ +#define TIM_OCMODE_COMBINED_PWM1 (TIM_CCMR1_OC1M_3 | TIM_CCMR1_OC1M_2) /*!< Combined PWM mode 1 */ +#define TIM_OCMODE_COMBINED_PWM2 (TIM_CCMR1_OC1M_3 | TIM_CCMR1_OC1M_0 | TIM_CCMR1_OC1M_2) /*!< Combined PWM mode 2 */ +#define TIM_OCMODE_ASSYMETRIC_PWM1 (TIM_CCMR1_OC1M_3 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2) /*!< Asymmetric PWM mode 1 */ +#define TIM_OCMODE_ASSYMETRIC_PWM2 TIM_CCMR1_OC1M /*!< Asymmetric PWM mode 2 */ +#endif /* TIM_CCMR1_OC1M_3 */ +/** + * @} + */ + +/** @defgroup TIM_Trigger_Selection TIM Trigger Selection + * @{ + */ +#define TIM_TS_ITR0 0x00000000U /*!< Internal Trigger 0 (ITR0) */ +#define TIM_TS_ITR1 TIM_SMCR_TS_0 /*!< Internal Trigger 1 (ITR1) */ +#define TIM_TS_ITR2 TIM_SMCR_TS_1 /*!< Internal Trigger 2 (ITR2) */ +#define TIM_TS_ITR3 (TIM_SMCR_TS_0 | TIM_SMCR_TS_1) /*!< Internal Trigger 3 (ITR3) */ +#define TIM_TS_TI1F_ED TIM_SMCR_TS_2 /*!< TI1 Edge Detector (TI1F_ED) */ +#define TIM_TS_TI1FP1 (TIM_SMCR_TS_0 | TIM_SMCR_TS_2) /*!< Filtered Timer Input 1 (TI1FP1) */ +#define TIM_TS_TI2FP2 (TIM_SMCR_TS_1 | TIM_SMCR_TS_2) /*!< Filtered Timer Input 2 (TI2FP2) */ +#define TIM_TS_ETRF (TIM_SMCR_TS_0 | TIM_SMCR_TS_1 | TIM_SMCR_TS_2) /*!< Filtered External Trigger input (ETRF) */ +#define TIM_TS_NONE 0x0000FFFFU /*!< No trigger selected */ +/** + * @} + */ + +/** @defgroup TIM_Trigger_Polarity TIM Trigger Polarity + * @{ + */ +#define TIM_TRIGGERPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx trigger sources */ +#define TIM_TRIGGERPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx trigger sources */ +#define TIM_TRIGGERPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Polarity for TIxFPx or TI1_ED trigger sources */ +#define TIM_TRIGGERPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Polarity for TIxFPx or TI1_ED trigger sources */ +#define TIM_TRIGGERPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIxFPx or TI1_ED trigger sources */ +/** + * @} + */ + +/** @defgroup TIM_Trigger_Prescaler TIM Trigger Prescaler + * @{ + */ +#define TIM_TRIGGERPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ +#define TIM_TRIGGERPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Trigger: Capture performed once every 2 events. */ +#define TIM_TRIGGERPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Trigger: Capture performed once every 4 events. */ +#define TIM_TRIGGERPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Trigger: Capture performed once every 8 events. */ +/** + * @} + */ + +/** @defgroup TIM_TI1_Selection TIM TI1 Input Selection + * @{ + */ +#define TIM_TI1SELECTION_CH1 0x00000000U /*!< The TIMx_CH1 pin is connected to TI1 input */ +#define TIM_TI1SELECTION_XORCOMBINATION TIM_CR2_TI1S /*!< The TIMx_CH1, CH2 and CH3 pins are connected to the TI1 input (XOR combination) */ +/** + * @} + */ + +/** @defgroup TIM_DMA_Burst_Length TIM DMA Burst Length + * @{ + */ +#define TIM_DMABURSTLENGTH_1TRANSFER 0x00000000U /*!< The transfer is done to 1 register starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_2TRANSFERS 0x00000100U /*!< The transfer is done to 2 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_3TRANSFERS 0x00000200U /*!< The transfer is done to 3 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_4TRANSFERS 0x00000300U /*!< The transfer is done to 4 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_5TRANSFERS 0x00000400U /*!< The transfer is done to 5 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_6TRANSFERS 0x00000500U /*!< The transfer is done to 6 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_7TRANSFERS 0x00000600U /*!< The transfer is done to 7 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_8TRANSFERS 0x00000700U /*!< The transfer is done to 8 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_9TRANSFERS 0x00000800U /*!< The transfer is done to 9 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_10TRANSFERS 0x00000900U /*!< The transfer is done to 10 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_11TRANSFERS 0x00000A00U /*!< The transfer is done to 11 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_12TRANSFERS 0x00000B00U /*!< The transfer is done to 12 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_13TRANSFERS 0x00000C00U /*!< The transfer is done to 13 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_14TRANSFERS 0x00000D00U /*!< The transfer is done to 14 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_15TRANSFERS 0x00000E00U /*!< The transfer is done to 15 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_16TRANSFERS 0x00000F00U /*!< The transfer is done to 16 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_17TRANSFERS 0x00001000U /*!< The transfer is done to 17 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_18TRANSFERS 0x00001100U /*!< The transfer is done to 18 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +/** + * @} + */ + +/** @defgroup DMA_Handle_index TIM DMA Handle Index + * @{ + */ +#define TIM_DMA_ID_UPDATE ((uint16_t) 0x0000) /*!< Index of the DMA handle used for Update DMA requests */ +#define TIM_DMA_ID_CC1 ((uint16_t) 0x0001) /*!< Index of the DMA handle used for Capture/Compare 1 DMA requests */ +#define TIM_DMA_ID_CC2 ((uint16_t) 0x0002) /*!< Index of the DMA handle used for Capture/Compare 2 DMA requests */ +#define TIM_DMA_ID_CC3 ((uint16_t) 0x0003) /*!< Index of the DMA handle used for Capture/Compare 3 DMA requests */ +#define TIM_DMA_ID_CC4 ((uint16_t) 0x0004) /*!< Index of the DMA handle used for Capture/Compare 4 DMA requests */ +#define TIM_DMA_ID_COMMUTATION ((uint16_t) 0x0005) /*!< Index of the DMA handle used for Commutation DMA requests */ +#define TIM_DMA_ID_TRIGGER ((uint16_t) 0x0006) /*!< Index of the DMA handle used for Trigger DMA requests */ +/** + * @} + */ + +/** @defgroup Channel_CC_State TIM Capture/Compare Channel State + * @{ + */ +#define TIM_CCx_ENABLE 0x00000001U /*!< Input or output channel is enabled */ +#define TIM_CCx_DISABLE 0x00000000U /*!< Input or output channel is disabled */ +#define TIM_CCxN_ENABLE 0x00000004U /*!< Complementary output channel is enabled */ +#define TIM_CCxN_DISABLE 0x00000000U /*!< Complementary output channel is enabled */ +/** + * @} + */ + +/** + * @} + */ +/* End of exported constants -------------------------------------------------*/ + +/* Exported macros -----------------------------------------------------------*/ +/** @defgroup TIM_Exported_Macros TIM Exported Macros + * @{ + */ + +/** @brief Reset TIM handle state. + * @param __HANDLE__ TIM handle. + * @retval None + */ +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__) do { \ + (__HANDLE__)->State = HAL_TIM_STATE_RESET; \ + (__HANDLE__)->ChannelState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[4] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[5] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->DMABurstState = HAL_DMA_BURST_STATE_RESET; \ + (__HANDLE__)->Base_MspInitCallback = NULL; \ + (__HANDLE__)->Base_MspDeInitCallback = NULL; \ + (__HANDLE__)->IC_MspInitCallback = NULL; \ + (__HANDLE__)->IC_MspDeInitCallback = NULL; \ + (__HANDLE__)->OC_MspInitCallback = NULL; \ + (__HANDLE__)->OC_MspDeInitCallback = NULL; \ + (__HANDLE__)->PWM_MspInitCallback = NULL; \ + (__HANDLE__)->PWM_MspDeInitCallback = NULL; \ + (__HANDLE__)->OnePulse_MspInitCallback = NULL; \ + (__HANDLE__)->OnePulse_MspDeInitCallback = NULL; \ + (__HANDLE__)->Encoder_MspInitCallback = NULL; \ + (__HANDLE__)->Encoder_MspDeInitCallback = NULL; \ + (__HANDLE__)->HallSensor_MspInitCallback = NULL; \ + (__HANDLE__)->HallSensor_MspDeInitCallback = NULL; \ + } while(0) +#else +#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__) do { \ + (__HANDLE__)->State = HAL_TIM_STATE_RESET; \ + (__HANDLE__)->ChannelState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[4] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[5] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->DMABurstState = HAL_DMA_BURST_STATE_RESET; \ + } while(0) +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @brief Enable the TIM peripheral. + * @param __HANDLE__ TIM handle + * @retval None + */ +#define __HAL_TIM_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|=(TIM_CR1_CEN)) + +/** + * @brief Enable the TIM main Output. + * @param __HANDLE__ TIM handle + * @retval None + */ +#define __HAL_TIM_MOE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->BDTR|=(TIM_BDTR_MOE)) + +/** + * @brief Disable the TIM peripheral. + * @param __HANDLE__ TIM handle + * @retval None + */ +#define __HAL_TIM_DISABLE(__HANDLE__) \ + do { \ + if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \ + { \ + if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \ + { \ + (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \ + } \ + } \ + } while(0) + +/** + * @brief Disable the TIM main Output. + * @param __HANDLE__ TIM handle + * @retval None + * @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been + * disabled + */ +#define __HAL_TIM_MOE_DISABLE(__HANDLE__) \ + do { \ + if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \ + { \ + if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \ + { \ + (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \ + } \ + } \ + } while(0) + +/** + * @brief Disable the TIM main Output. + * @param __HANDLE__ TIM handle + * @retval None + * @note The Main Output Enable of a timer instance is disabled unconditionally + */ +#define __HAL_TIM_MOE_DISABLE_UNCONDITIONALLY(__HANDLE__) (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE) + +/** @brief Enable the specified TIM interrupt. + * @param __HANDLE__ specifies the TIM Handle. + * @param __INTERRUPT__ specifies the TIM interrupt source to enable. + * This parameter can be one of the following values: + * @arg TIM_IT_UPDATE: Update interrupt + * @arg TIM_IT_CC1: Capture/Compare 1 interrupt + * @arg TIM_IT_CC2: Capture/Compare 2 interrupt + * @arg TIM_IT_CC3: Capture/Compare 3 interrupt + * @arg TIM_IT_CC4: Capture/Compare 4 interrupt + * @arg TIM_IT_COM: Commutation interrupt + * @arg TIM_IT_TRIGGER: Trigger interrupt + * @arg TIM_IT_BREAK: Break interrupt + * @retval None + */ +#define __HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__)) + +/** @brief Disable the specified TIM interrupt. + * @param __HANDLE__ specifies the TIM Handle. + * @param __INTERRUPT__ specifies the TIM interrupt source to disable. + * This parameter can be one of the following values: + * @arg TIM_IT_UPDATE: Update interrupt + * @arg TIM_IT_CC1: Capture/Compare 1 interrupt + * @arg TIM_IT_CC2: Capture/Compare 2 interrupt + * @arg TIM_IT_CC3: Capture/Compare 3 interrupt + * @arg TIM_IT_CC4: Capture/Compare 4 interrupt + * @arg TIM_IT_COM: Commutation interrupt + * @arg TIM_IT_TRIGGER: Trigger interrupt + * @arg TIM_IT_BREAK: Break interrupt + * @retval None + */ +#define __HAL_TIM_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER &= ~(__INTERRUPT__)) + +/** @brief Enable the specified DMA request. + * @param __HANDLE__ specifies the TIM Handle. + * @param __DMA__ specifies the TIM DMA request to enable. + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: Update DMA request + * @arg TIM_DMA_CC1: Capture/Compare 1 DMA request + * @arg TIM_DMA_CC2: Capture/Compare 2 DMA request + * @arg TIM_DMA_CC3: Capture/Compare 3 DMA request + * @arg TIM_DMA_CC4: Capture/Compare 4 DMA request + * @arg TIM_DMA_COM: Commutation DMA request + * @arg TIM_DMA_TRIGGER: Trigger DMA request + * @retval None + */ +#define __HAL_TIM_ENABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER |= (__DMA__)) + +/** @brief Disable the specified DMA request. + * @param __HANDLE__ specifies the TIM Handle. + * @param __DMA__ specifies the TIM DMA request to disable. + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: Update DMA request + * @arg TIM_DMA_CC1: Capture/Compare 1 DMA request + * @arg TIM_DMA_CC2: Capture/Compare 2 DMA request + * @arg TIM_DMA_CC3: Capture/Compare 3 DMA request + * @arg TIM_DMA_CC4: Capture/Compare 4 DMA request + * @arg TIM_DMA_COM: Commutation DMA request + * @arg TIM_DMA_TRIGGER: Trigger DMA request + * @retval None + */ +#define __HAL_TIM_DISABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER &= ~(__DMA__)) + +/** @brief Check whether the specified TIM interrupt flag is set or not. + * @param __HANDLE__ specifies the TIM Handle. + * @param __FLAG__ specifies the TIM interrupt flag to check. + * This parameter can be one of the following values: + * @arg TIM_FLAG_UPDATE: Update interrupt flag + * @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag + * @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag + * @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag + * @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag + * @arg TIM_FLAG_CC5: Capture/Compare 5 interrupt flag (*) + * @arg TIM_FLAG_CC5: Capture/Compare 6 interrupt flag (*) + * @arg TIM_FLAG_COM: Commutation interrupt flag + * @arg TIM_FLAG_TRIGGER: Trigger interrupt flag + * @arg TIM_FLAG_BREAK: Break interrupt flag + * @arg TIM_FLAG_BREAK2: Break 2 interrupt flag (*) + * @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag + * @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag + * @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag + * @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag + * (*) Value not defined for all devices + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_TIM_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR &(__FLAG__)) == (__FLAG__)) + +/** @brief Clear the specified TIM interrupt flag. + * @param __HANDLE__ specifies the TIM Handle. + * @param __FLAG__ specifies the TIM interrupt flag to clear. + * This parameter can be one of the following values: + * @arg TIM_FLAG_UPDATE: Update interrupt flag + * @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag + * @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag + * @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag + * @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag + * @arg TIM_FLAG_CC5: Capture/Compare 5 interrupt flag (*) + * @arg TIM_FLAG_CC5: Capture/Compare 6 interrupt flag (*) + * @arg TIM_FLAG_COM: Commutation interrupt flag + * @arg TIM_FLAG_TRIGGER: Trigger interrupt flag + * @arg TIM_FLAG_BREAK: Break interrupt flag + * @arg TIM_FLAG_BREAK2: Break 2 interrupt flag (*) + * @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag + * @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag + * @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag + * @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag + * (*) Value not defined for all devices + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_TIM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__)) + +/** + * @brief Check whether the specified TIM interrupt source is enabled or not. + * @param __HANDLE__ TIM handle + * @param __INTERRUPT__ specifies the TIM interrupt source to check. + * This parameter can be one of the following values: + * @arg TIM_IT_UPDATE: Update interrupt + * @arg TIM_IT_CC1: Capture/Compare 1 interrupt + * @arg TIM_IT_CC2: Capture/Compare 2 interrupt + * @arg TIM_IT_CC3: Capture/Compare 3 interrupt + * @arg TIM_IT_CC4: Capture/Compare 4 interrupt + * @arg TIM_IT_COM: Commutation interrupt + * @arg TIM_IT_TRIGGER: Trigger interrupt + * @arg TIM_IT_BREAK: Break interrupt + * @retval The state of TIM_IT (SET or RESET). + */ +#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) \ + == (__INTERRUPT__)) ? SET : RESET) + +/** @brief Clear the TIM interrupt pending bits. + * @param __HANDLE__ TIM handle + * @param __INTERRUPT__ specifies the interrupt pending bit to clear. + * This parameter can be one of the following values: + * @arg TIM_IT_UPDATE: Update interrupt + * @arg TIM_IT_CC1: Capture/Compare 1 interrupt + * @arg TIM_IT_CC2: Capture/Compare 2 interrupt + * @arg TIM_IT_CC3: Capture/Compare 3 interrupt + * @arg TIM_IT_CC4: Capture/Compare 4 interrupt + * @arg TIM_IT_COM: Commutation interrupt + * @arg TIM_IT_TRIGGER: Trigger interrupt + * @arg TIM_IT_BREAK: Break interrupt + * @retval None + */ +#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__)) +#if defined(TIM_CR1_UIFREMAP) + +/** + * @brief Force a continuous copy of the update interrupt flag (UIF) into the timer counter register (bit 31). + * @note This allows both the counter value and a potential roll-over condition signalled by the UIFCPY flag to be read + * in an atomic way. + * @param __HANDLE__ TIM handle. + * @retval None +mode. + */ +#define __HAL_TIM_UIFREMAP_ENABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 |= TIM_CR1_UIFREMAP)) + +/** + * @brief Disable update interrupt flag (UIF) remapping. + * @param __HANDLE__ TIM handle. + * @retval None +mode. + */ +#define __HAL_TIM_UIFREMAP_DISABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 &= ~TIM_CR1_UIFREMAP)) + +/** + * @brief Get update interrupt flag (UIF) copy status. + * @param __COUNTER__ Counter value. + * @retval The state of UIFCPY (TRUE or FALSE). +mode. + */ +#define __HAL_TIM_GET_UIFCPY(__COUNTER__) (((__COUNTER__) & (TIM_CNT_UIFCPY)) == (TIM_CNT_UIFCPY)) +#endif /* TIM_CR1_UIFREMAP */ + +/** + * @brief Indicates whether or not the TIM Counter is used as downcounter. + * @param __HANDLE__ TIM handle. + * @retval False (Counter used as upcounter) or True (Counter used as downcounter) + * @note This macro is particularly useful to get the counting mode when the timer operates in Center-aligned mode + * or Encoder mode. + */ +#define __HAL_TIM_IS_TIM_COUNTING_DOWN(__HANDLE__) (((__HANDLE__)->Instance->CR1 &(TIM_CR1_DIR)) == (TIM_CR1_DIR)) + +/** + * @brief Set the TIM Prescaler on runtime. + * @param __HANDLE__ TIM handle. + * @param __PRESC__ specifies the Prescaler new value. + * @retval None + */ +#define __HAL_TIM_SET_PRESCALER(__HANDLE__, __PRESC__) ((__HANDLE__)->Instance->PSC = (__PRESC__)) + +/** + * @brief Set the TIM Counter Register value on runtime. + * Note Please check if the bit 31 of CNT register is used as UIF copy or not, this may affect the counter range in + * case of 32 bits counter TIM instance. + * Bit 31 of CNT can be enabled/disabled using __HAL_TIM_UIFREMAP_ENABLE()/__HAL_TIM_UIFREMAP_DISABLE() macros. + * @param __HANDLE__ TIM handle. + * @param __COUNTER__ specifies the Counter register new value. + * @retval None + */ +#define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__) ((__HANDLE__)->Instance->CNT = (__COUNTER__)) + +/** + * @brief Get the TIM Counter Register value on runtime. + * @param __HANDLE__ TIM handle. + * @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT) + */ +#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT) + +/** + * @brief Set the TIM Autoreload Register value on runtime without calling another time any Init function. + * @param __HANDLE__ TIM handle. + * @param __AUTORELOAD__ specifies the Counter register new value. + * @retval None + */ +#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \ + do{ \ + (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \ + (__HANDLE__)->Init.Period = (__AUTORELOAD__); \ + } while(0) + +/** + * @brief Get the TIM Autoreload Register value on runtime. + * @param __HANDLE__ TIM handle. + * @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR) + */ +#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR) + +/** + * @brief Set the TIM Clock Division value on runtime without calling another time any Init function. + * @param __HANDLE__ TIM handle. + * @param __CKD__ specifies the clock division value. + * This parameter can be one of the following value: + * @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT + * @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT + * @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT + * @retval None + */ +#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \ + do{ \ + (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \ + (__HANDLE__)->Instance->CR1 |= (__CKD__); \ + (__HANDLE__)->Init.ClockDivision = (__CKD__); \ + } while(0) + +/** + * @brief Get the TIM Clock Division value on runtime. + * @param __HANDLE__ TIM handle. + * @retval The clock division can be one of the following values: + * @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT + * @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT + * @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT + */ +#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD) + +/** + * @brief Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() + * function. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param __ICPSC__ specifies the Input Capture4 prescaler new value. + * This parameter can be one of the following values: + * @arg TIM_ICPSC_DIV1: no prescaler + * @arg TIM_ICPSC_DIV2: capture is done once every 2 events + * @arg TIM_ICPSC_DIV4: capture is done once every 4 events + * @arg TIM_ICPSC_DIV8: capture is done once every 8 events + * @retval None + */ +#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \ + do{ \ + TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \ + TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \ + } while(0) + +/** + * @brief Get the TIM Input Capture prescaler on runtime. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: get input capture 1 prescaler value + * @arg TIM_CHANNEL_2: get input capture 2 prescaler value + * @arg TIM_CHANNEL_3: get input capture 3 prescaler value + * @arg TIM_CHANNEL_4: get input capture 4 prescaler value + * @retval The input capture prescaler can be one of the following values: + * @arg TIM_ICPSC_DIV1: no prescaler + * @arg TIM_ICPSC_DIV2: capture is done once every 2 events + * @arg TIM_ICPSC_DIV4: capture is done once every 4 events + * @arg TIM_ICPSC_DIV8: capture is done once every 8 events + */ +#define __HAL_TIM_GET_ICPRESCALER(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC1PSC) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? (((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC2PSC) >> 8U) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC3PSC) :\ + (((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC4PSC)) >> 8U) + +/** + * @brief Set the TIM Capture Compare Register value on runtime without calling another time ConfigChannel function. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @arg TIM_CHANNEL_5: TIM Channel 5 selected (*) + * @arg TIM_CHANNEL_6: TIM Channel 6 selected (*) + * (*) Value not defined for all devices + * @param __COMPARE__ specifies the Capture Compare register new value. + * @retval None + */ +#if defined(TIM_CCER_CC5E) && defined(TIM_CCER_CC6E) +#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\ + ((__HANDLE__)->Instance->CCR6 = (__COMPARE__))) +#else +#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\ + ((__HANDLE__)->Instance->CCR4 = (__COMPARE__))) +#endif /* TIM_CCER_CC5E && TIM_CCER_CC6E */ + +/** + * @brief Get the TIM Capture Compare Register value on runtime. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channel associated with the capture compare register + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: get capture/compare 1 register value + * @arg TIM_CHANNEL_2: get capture/compare 2 register value + * @arg TIM_CHANNEL_3: get capture/compare 3 register value + * @arg TIM_CHANNEL_4: get capture/compare 4 register value + * @arg TIM_CHANNEL_5: get capture/compare 5 register value (*) + * @arg TIM_CHANNEL_6: get capture/compare 6 register value (*) + * (*) Value not defined for all devices + * @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy) + */ +#if defined(TIM_CCER_CC5E) && defined(TIM_CCER_CC6E) +#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\ + ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\ + ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\ + ((__HANDLE__)->Instance->CCR6)) +#else +#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\ + ((__HANDLE__)->Instance->CCR4)) +#endif /* TIM_CCER_CC5E && TIM_CCER_CC6E */ + +/** + * @brief Set the TIM Output compare preload. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @arg TIM_CHANNEL_5: TIM Channel 5 selected (*) + * @arg TIM_CHANNEL_6: TIM Channel 6 selected (*) + * (*) Value not defined for all devices + * @retval None + */ +#if defined(TIM_CCER_CC5E) && defined(TIM_CCER_CC6E) +#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\ + ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE)) +#else +#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\ + ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE)) +#endif /* TIM_CCER_CC5E && TIM_CCER_CC6E */ + +/** + * @brief Reset the TIM Output compare preload. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @arg TIM_CHANNEL_5: TIM Channel 5 selected (*) + * @arg TIM_CHANNEL_6: TIM Channel 6 selected (*) + * (*) Value not defined for all devices + * @retval None + */ +#if defined(TIM_CCER_CC5E) && defined(TIM_CCER_CC6E) +#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5PE) :\ + ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6PE)) +#else +#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) :\ + ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE)) +#endif /* TIM_CCER_CC5E && TIM_CCER_CC6E */ + +/** + * @brief Enable fast mode for a given channel. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @arg TIM_CHANNEL_5: TIM Channel 5 selected (*) + * @arg TIM_CHANNEL_6: TIM Channel 6 selected (*) + * (*) Value not defined for all devices + * @note When fast mode is enabled an active edge on the trigger input acts + * like a compare match on CCx output. Delay to sample the trigger + * input and to activate CCx output is reduced to 3 clock cycles. + * @note Fast mode acts only if the channel is configured in PWM1 or PWM2 mode. + * @retval None + */ +#if defined(TIM_CCER_CC5E) && defined(TIM_CCER_CC6E) +#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5FE) :\ + ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6FE)) +#else +#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) :\ + ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE)) +#endif /* TIM_CCER_CC5E && TIM_CCER_CC6E */ + +/** + * @brief Disable fast mode for a given channel. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @arg TIM_CHANNEL_5: TIM Channel 5 selected (*) + * @arg TIM_CHANNEL_6: TIM Channel 6 selected (*) + * (*) Value not defined for all devices + * @note When fast mode is disabled CCx output behaves normally depending + * on counter and CCRx values even when the trigger is ON. The minimum + * delay to activate CCx output when an active edge occurs on the + * trigger input is 5 clock cycles. + * @retval None + */ +#if defined(TIM_CCER_CC5E) && defined(TIM_CCER_CC6E) +#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5FE) :\ + ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6FE)) +#else +#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) :\ + ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE)) +#endif /* TIM_CCER_CC5E && TIM_CCER_CC6E */ + +/** + * @brief Set the Update Request Source (URS) bit of the TIMx_CR1 register. + * @param __HANDLE__ TIM handle. + * @note When the URS bit of the TIMx_CR1 register is set, only counter + * overflow/underflow generates an update interrupt or DMA request (if + * enabled) + * @retval None + */ +#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS) + +/** + * @brief Reset the Update Request Source (URS) bit of the TIMx_CR1 register. + * @param __HANDLE__ TIM handle. + * @note When the URS bit of the TIMx_CR1 register is reset, any of the + * following events generate an update interrupt or DMA request (if + * enabled): + * _ Counter overflow underflow + * _ Setting the UG bit + * _ Update generation through the slave mode controller + * @retval None + */ +#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS) + +/** + * @brief Set the TIM Capture x input polarity on runtime. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param __POLARITY__ Polarity for TIx source + * @arg TIM_INPUTCHANNELPOLARITY_RISING: Rising Edge + * @arg TIM_INPUTCHANNELPOLARITY_FALLING: Falling Edge + * @arg TIM_INPUTCHANNELPOLARITY_BOTHEDGE: Rising and Falling Edge + * @retval None + */ +#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \ + do{ \ + TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \ + TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \ + }while(0) + +/** + * @} + */ +/* End of exported macros ----------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup TIM_Private_Constants TIM Private Constants + * @{ + */ +/* The counter of a timer instance is disabled only if all the CCx and CCxN + channels have been disabled */ +#define TIM_CCER_CCxE_MASK ((uint32_t)(TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E)) +#define TIM_CCER_CCxNE_MASK ((uint32_t)(TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) +/** + * @} + */ +/* End of private constants --------------------------------------------------*/ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup TIM_Private_Macros TIM Private Macros + * @{ + */ +#if defined(TIM_SMCR_OCCS) +#define IS_TIM_CLEARINPUT_SOURCE(__MODE__) (((__MODE__) == TIM_CLEARINPUTSOURCE_NONE) || \ + ((__MODE__) == TIM_CLEARINPUTSOURCE_ETR) || \ + ((__MODE__) == TIM_CLEARINPUTSOURCE_OCREFCLR)) +#else +#define IS_TIM_CLEARINPUT_SOURCE(__MODE__) (((__MODE__) == TIM_CLEARINPUTSOURCE_NONE) || \ + ((__MODE__) == TIM_CLEARINPUTSOURCE_ETR)) +#endif /* TIM_SMCR_OCCS */ + +#if defined(TIM_CCER_CC5E) && defined(TIM_CCER_CC6E) +#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \ + ((__BASE__) == TIM_DMABASE_CR2) || \ + ((__BASE__) == TIM_DMABASE_SMCR) || \ + ((__BASE__) == TIM_DMABASE_DIER) || \ + ((__BASE__) == TIM_DMABASE_SR) || \ + ((__BASE__) == TIM_DMABASE_EGR) || \ + ((__BASE__) == TIM_DMABASE_CCMR1) || \ + ((__BASE__) == TIM_DMABASE_CCMR2) || \ + ((__BASE__) == TIM_DMABASE_CCER) || \ + ((__BASE__) == TIM_DMABASE_CNT) || \ + ((__BASE__) == TIM_DMABASE_PSC) || \ + ((__BASE__) == TIM_DMABASE_ARR) || \ + ((__BASE__) == TIM_DMABASE_RCR) || \ + ((__BASE__) == TIM_DMABASE_CCR1) || \ + ((__BASE__) == TIM_DMABASE_CCR2) || \ + ((__BASE__) == TIM_DMABASE_CCR3) || \ + ((__BASE__) == TIM_DMABASE_CCR4) || \ + ((__BASE__) == TIM_DMABASE_BDTR) || \ + ((__BASE__) == TIM_DMABASE_CCMR3) || \ + ((__BASE__) == TIM_DMABASE_CCR5) || \ + ((__BASE__) == TIM_DMABASE_CCR6) || \ + ((__BASE__) == TIM_DMABASE_OR)) +#else +#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \ + ((__BASE__) == TIM_DMABASE_CR2) || \ + ((__BASE__) == TIM_DMABASE_SMCR) || \ + ((__BASE__) == TIM_DMABASE_DIER) || \ + ((__BASE__) == TIM_DMABASE_SR) || \ + ((__BASE__) == TIM_DMABASE_EGR) || \ + ((__BASE__) == TIM_DMABASE_CCMR1) || \ + ((__BASE__) == TIM_DMABASE_CCMR2) || \ + ((__BASE__) == TIM_DMABASE_CCER) || \ + ((__BASE__) == TIM_DMABASE_CNT) || \ + ((__BASE__) == TIM_DMABASE_PSC) || \ + ((__BASE__) == TIM_DMABASE_ARR) || \ + ((__BASE__) == TIM_DMABASE_RCR) || \ + ((__BASE__) == TIM_DMABASE_CCR1) || \ + ((__BASE__) == TIM_DMABASE_CCR2) || \ + ((__BASE__) == TIM_DMABASE_CCR3) || \ + ((__BASE__) == TIM_DMABASE_CCR4) || \ + ((__BASE__) == TIM_DMABASE_BDTR) || \ + ((__BASE__) == TIM_DMABASE_OR)) +#endif /* TIM_CCER_CC5E && TIM_CCER_CC6E */ + +#if defined(TIM_EGR_B2G) +#define IS_TIM_EVENT_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFFFE00U) == 0x00000000U) && ((__SOURCE__) != 0x00000000U)) +#else +#define IS_TIM_EVENT_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFFFF00U) == 0x00000000U) && ((__SOURCE__) != 0x00000000U)) +#endif /* TIM_EGR_B2G */ + +#define IS_TIM_COUNTER_MODE(__MODE__) (((__MODE__) == TIM_COUNTERMODE_UP) || \ + ((__MODE__) == TIM_COUNTERMODE_DOWN) || \ + ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED1) || \ + ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2) || \ + ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3)) + +#if defined(TIM_CR1_UIFREMAP) +#define IS_TIM_UIFREMAP_MODE(__MODE__) (((__MODE__) == TIM_UIFREMAP_DISABLE) || \ + ((__MODE__) == TIM_UIFREMAP_ENALE)) + +#endif /* TIM_CR1_UIFREMAP */ +#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || \ + ((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \ + ((__DIV__) == TIM_CLOCKDIVISION_DIV4)) + +#define IS_TIM_AUTORELOAD_PRELOAD(PRELOAD) (((PRELOAD) == TIM_AUTORELOAD_PRELOAD_DISABLE) || \ + ((PRELOAD) == TIM_AUTORELOAD_PRELOAD_ENABLE)) + +#define IS_TIM_FAST_STATE(__STATE__) (((__STATE__) == TIM_OCFAST_DISABLE) || \ + ((__STATE__) == TIM_OCFAST_ENABLE)) + +#define IS_TIM_OC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_OCPOLARITY_HIGH) || \ + ((__POLARITY__) == TIM_OCPOLARITY_LOW)) + +#define IS_TIM_OCN_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_OCNPOLARITY_HIGH) || \ + ((__POLARITY__) == TIM_OCNPOLARITY_LOW)) + +#define IS_TIM_OCIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCIDLESTATE_SET) || \ + ((__STATE__) == TIM_OCIDLESTATE_RESET)) + +#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || \ + ((__STATE__) == TIM_OCNIDLESTATE_RESET)) + +#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || \ + ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING)) + +#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || \ + ((__POLARITY__) == TIM_ICPOLARITY_FALLING) || \ + ((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE)) + +#define IS_TIM_IC_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_ICSELECTION_DIRECTTI) || \ + ((__SELECTION__) == TIM_ICSELECTION_INDIRECTTI) || \ + ((__SELECTION__) == TIM_ICSELECTION_TRC)) + +#define IS_TIM_IC_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_ICPSC_DIV1) || \ + ((__PRESCALER__) == TIM_ICPSC_DIV2) || \ + ((__PRESCALER__) == TIM_ICPSC_DIV4) || \ + ((__PRESCALER__) == TIM_ICPSC_DIV8)) + +#define IS_TIM_OPM_MODE(__MODE__) (((__MODE__) == TIM_OPMODE_SINGLE) || \ + ((__MODE__) == TIM_OPMODE_REPETITIVE)) + +#define IS_TIM_ENCODER_MODE(__MODE__) (((__MODE__) == TIM_ENCODERMODE_TI1) || \ + ((__MODE__) == TIM_ENCODERMODE_TI2) || \ + ((__MODE__) == TIM_ENCODERMODE_TI12)) + +#define IS_TIM_DMA_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFF80FFU) == 0x00000000U) && ((__SOURCE__) != 0x00000000U)) + +#if defined(TIM_CCER_CC5E) && defined(TIM_CCER_CC6E) +#define IS_TIM_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || \ + ((__CHANNEL__) == TIM_CHANNEL_2) || \ + ((__CHANNEL__) == TIM_CHANNEL_3) || \ + ((__CHANNEL__) == TIM_CHANNEL_4) || \ + ((__CHANNEL__) == TIM_CHANNEL_5) || \ + ((__CHANNEL__) == TIM_CHANNEL_6) || \ + ((__CHANNEL__) == TIM_CHANNEL_ALL)) +#else +#define IS_TIM_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || \ + ((__CHANNEL__) == TIM_CHANNEL_2) || \ + ((__CHANNEL__) == TIM_CHANNEL_3) || \ + ((__CHANNEL__) == TIM_CHANNEL_4) || \ + ((__CHANNEL__) == TIM_CHANNEL_ALL)) +#endif /* TIM_CCER_CC5E &&TIM_CCER_CC6E */ + +#define IS_TIM_OPM_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || \ + ((__CHANNEL__) == TIM_CHANNEL_2)) + +#define IS_TIM_COMPLEMENTARY_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || \ + ((__CHANNEL__) == TIM_CHANNEL_2) || \ + ((__CHANNEL__) == TIM_CHANNEL_3)) + +#define IS_TIM_CLOCKSOURCE(__CLOCK__) (((__CLOCK__) == TIM_CLOCKSOURCE_INTERNAL) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE2) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ITR0) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ITR1) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ITR2) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ITR3) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_TI1ED) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_TI1) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_TI2) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE1)) + +#define IS_TIM_CLOCKPOLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLOCKPOLARITY_INVERTED) || \ + ((__POLARITY__) == TIM_CLOCKPOLARITY_NONINVERTED) || \ + ((__POLARITY__) == TIM_CLOCKPOLARITY_RISING) || \ + ((__POLARITY__) == TIM_CLOCKPOLARITY_FALLING) || \ + ((__POLARITY__) == TIM_CLOCKPOLARITY_BOTHEDGE)) + +#define IS_TIM_CLOCKPRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV1) || \ + ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV2) || \ + ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV4) || \ + ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV8)) + +#define IS_TIM_CLOCKFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) + +#define IS_TIM_CLEARINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLEARINPUTPOLARITY_INVERTED) || \ + ((__POLARITY__) == TIM_CLEARINPUTPOLARITY_NONINVERTED)) + +#define IS_TIM_CLEARINPUT_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV1) || \ + ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV2) || \ + ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV4) || \ + ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV8)) + +#define IS_TIM_CLEARINPUT_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) + +#define IS_TIM_OSSR_STATE(__STATE__) (((__STATE__) == TIM_OSSR_ENABLE) || \ + ((__STATE__) == TIM_OSSR_DISABLE)) + +#define IS_TIM_OSSI_STATE(__STATE__) (((__STATE__) == TIM_OSSI_ENABLE) || \ + ((__STATE__) == TIM_OSSI_DISABLE)) + +#define IS_TIM_LOCK_LEVEL(__LEVEL__) (((__LEVEL__) == TIM_LOCKLEVEL_OFF) || \ + ((__LEVEL__) == TIM_LOCKLEVEL_1) || \ + ((__LEVEL__) == TIM_LOCKLEVEL_2) || \ + ((__LEVEL__) == TIM_LOCKLEVEL_3)) + +#define IS_TIM_BREAK_FILTER(__BRKFILTER__) ((__BRKFILTER__) <= 0xFUL) + + +#define IS_TIM_BREAK_STATE(__STATE__) (((__STATE__) == TIM_BREAK_ENABLE) || \ + ((__STATE__) == TIM_BREAK_DISABLE)) + +#define IS_TIM_BREAK_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_BREAKPOLARITY_LOW) || \ + ((__POLARITY__) == TIM_BREAKPOLARITY_HIGH)) + +#if defined(TIM_BDTR_BK2E) +#define IS_TIM_BREAK2_STATE(__STATE__) (((__STATE__) == TIM_BREAK2_ENABLE) || \ + ((__STATE__) == TIM_BREAK2_DISABLE)) + +#define IS_TIM_BREAK2_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_BREAK2POLARITY_LOW) || \ + ((__POLARITY__) == TIM_BREAK2POLARITY_HIGH)) +#endif /* TIM_BDTR_BK2E */ + +#define IS_TIM_AUTOMATIC_OUTPUT_STATE(__STATE__) (((__STATE__) == TIM_AUTOMATICOUTPUT_ENABLE) || \ + ((__STATE__) == TIM_AUTOMATICOUTPUT_DISABLE)) + +#if defined(TIM_CCR5_CCR5) +#define IS_TIM_GROUPCH5(__OCREF__) ((((__OCREF__) & 0x1FFFFFFFU) == 0x00000000U)) +#endif /* TIM_CCR5_CCR5 */ + +#define IS_TIM_TRGO_SOURCE(__SOURCE__) (((__SOURCE__) == TIM_TRGO_RESET) || \ + ((__SOURCE__) == TIM_TRGO_ENABLE) || \ + ((__SOURCE__) == TIM_TRGO_UPDATE) || \ + ((__SOURCE__) == TIM_TRGO_OC1) || \ + ((__SOURCE__) == TIM_TRGO_OC1REF) || \ + ((__SOURCE__) == TIM_TRGO_OC2REF) || \ + ((__SOURCE__) == TIM_TRGO_OC3REF) || \ + ((__SOURCE__) == TIM_TRGO_OC4REF)) + +#if defined(TIM_CR2_MMS2) +#define IS_TIM_TRGO2_SOURCE(__SOURCE__) (((__SOURCE__) == TIM_TRGO2_RESET) || \ + ((__SOURCE__) == TIM_TRGO2_ENABLE) || \ + ((__SOURCE__) == TIM_TRGO2_UPDATE) || \ + ((__SOURCE__) == TIM_TRGO2_OC1) || \ + ((__SOURCE__) == TIM_TRGO2_OC1REF) || \ + ((__SOURCE__) == TIM_TRGO2_OC2REF) || \ + ((__SOURCE__) == TIM_TRGO2_OC3REF) || \ + ((__SOURCE__) == TIM_TRGO2_OC3REF) || \ + ((__SOURCE__) == TIM_TRGO2_OC4REF) || \ + ((__SOURCE__) == TIM_TRGO2_OC5REF) || \ + ((__SOURCE__) == TIM_TRGO2_OC6REF) || \ + ((__SOURCE__) == TIM_TRGO2_OC4REF_RISINGFALLING) || \ + ((__SOURCE__) == TIM_TRGO2_OC6REF_RISINGFALLING) || \ + ((__SOURCE__) == TIM_TRGO2_OC4REF_RISING_OC6REF_RISING) || \ + ((__SOURCE__) == TIM_TRGO2_OC4REF_RISING_OC6REF_FALLING) || \ + ((__SOURCE__) == TIM_TRGO2_OC5REF_RISING_OC6REF_RISING) || \ + ((__SOURCE__) == TIM_TRGO2_OC5REF_RISING_OC6REF_FALLING)) +#endif /* TIM_CR2_MMS2 */ + +#define IS_TIM_MSM_STATE(__STATE__) (((__STATE__) == TIM_MASTERSLAVEMODE_ENABLE) || \ + ((__STATE__) == TIM_MASTERSLAVEMODE_DISABLE)) + +#if defined (TIM_SMCR_SMS_3) +#define IS_TIM_SLAVE_MODE(__MODE__) (((__MODE__) == TIM_SLAVEMODE_DISABLE) || \ + ((__MODE__) == TIM_SLAVEMODE_RESET) || \ + ((__MODE__) == TIM_SLAVEMODE_GATED) || \ + ((__MODE__) == TIM_SLAVEMODE_TRIGGER) || \ + ((__MODE__) == TIM_SLAVEMODE_EXTERNAL1) || \ + ((__MODE__) == TIM_SLAVEMODE_COMBINED_RESETTRIGGER)) +#else +#define IS_TIM_SLAVE_MODE(__MODE__) (((__MODE__) == TIM_SLAVEMODE_DISABLE) || \ + ((__MODE__) == TIM_SLAVEMODE_RESET) || \ + ((__MODE__) == TIM_SLAVEMODE_GATED) || \ + ((__MODE__) == TIM_SLAVEMODE_TRIGGER) || \ + ((__MODE__) == TIM_SLAVEMODE_EXTERNAL1)) +#endif /* TIM_SMCR_SMS_3 */ + +#if defined(TIM_CCMR1_OC1M_3) +#define IS_TIM_PWM_MODE(__MODE__) (((__MODE__) == TIM_OCMODE_PWM1) || \ + ((__MODE__) == TIM_OCMODE_PWM2) || \ + ((__MODE__) == TIM_OCMODE_COMBINED_PWM1) || \ + ((__MODE__) == TIM_OCMODE_COMBINED_PWM2) || \ + ((__MODE__) == TIM_OCMODE_ASSYMETRIC_PWM1) || \ + ((__MODE__) == TIM_OCMODE_ASSYMETRIC_PWM2)) +#else +#define IS_TIM_PWM_MODE(__MODE__) (((__MODE__) == TIM_OCMODE_PWM1) || \ + ((__MODE__) == TIM_OCMODE_PWM2)) +#endif /* TIM_CCMR1_OC1M_3 */ + +#if defined(TIM_CCMR1_OC1M_3) +#define IS_TIM_OC_MODE(__MODE__) (((__MODE__) == TIM_OCMODE_TIMING) || \ + ((__MODE__) == TIM_OCMODE_ACTIVE) || \ + ((__MODE__) == TIM_OCMODE_INACTIVE) || \ + ((__MODE__) == TIM_OCMODE_TOGGLE) || \ + ((__MODE__) == TIM_OCMODE_FORCED_ACTIVE) || \ + ((__MODE__) == TIM_OCMODE_FORCED_INACTIVE) || \ + ((__MODE__) == TIM_OCMODE_RETRIGERRABLE_OPM1) || \ + ((__MODE__) == TIM_OCMODE_RETRIGERRABLE_OPM2)) +#else +#define IS_TIM_OC_MODE(__MODE__) (((__MODE__) == TIM_OCMODE_TIMING) || \ + ((__MODE__) == TIM_OCMODE_ACTIVE) || \ + ((__MODE__) == TIM_OCMODE_INACTIVE) || \ + ((__MODE__) == TIM_OCMODE_TOGGLE) || \ + ((__MODE__) == TIM_OCMODE_FORCED_ACTIVE) || \ + ((__MODE__) == TIM_OCMODE_FORCED_INACTIVE)) +#endif /* TIM_CCMR1_OC1M_3 */ + +#define IS_TIM_TRIGGER_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_TS_ITR0) || \ + ((__SELECTION__) == TIM_TS_ITR1) || \ + ((__SELECTION__) == TIM_TS_ITR2) || \ + ((__SELECTION__) == TIM_TS_ITR3) || \ + ((__SELECTION__) == TIM_TS_TI1F_ED) || \ + ((__SELECTION__) == TIM_TS_TI1FP1) || \ + ((__SELECTION__) == TIM_TS_TI2FP2) || \ + ((__SELECTION__) == TIM_TS_ETRF)) + +#define IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_TS_ITR0) || \ + ((__SELECTION__) == TIM_TS_ITR1) || \ + ((__SELECTION__) == TIM_TS_ITR2) || \ + ((__SELECTION__) == TIM_TS_ITR3) || \ + ((__SELECTION__) == TIM_TS_NONE)) + +#define IS_TIM_TRIGGERPOLARITY(__POLARITY__) (((__POLARITY__) == TIM_TRIGGERPOLARITY_INVERTED ) || \ + ((__POLARITY__) == TIM_TRIGGERPOLARITY_NONINVERTED) || \ + ((__POLARITY__) == TIM_TRIGGERPOLARITY_RISING ) || \ + ((__POLARITY__) == TIM_TRIGGERPOLARITY_FALLING ) || \ + ((__POLARITY__) == TIM_TRIGGERPOLARITY_BOTHEDGE )) + +#define IS_TIM_TRIGGERPRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV1) || \ + ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV2) || \ + ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV4) || \ + ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV8)) + +#define IS_TIM_TRIGGERFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) + +#define IS_TIM_TI1SELECTION(__TI1SELECTION__) (((__TI1SELECTION__) == TIM_TI1SELECTION_CH1) || \ + ((__TI1SELECTION__) == TIM_TI1SELECTION_XORCOMBINATION)) + +#define IS_TIM_DMA_LENGTH(__LENGTH__) (((__LENGTH__) == TIM_DMABURSTLENGTH_1TRANSFER) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_2TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_3TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_4TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_5TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_6TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_7TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_8TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_9TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_10TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_11TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_12TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_13TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_14TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_15TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_16TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_17TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_18TRANSFERS)) + +#define IS_TIM_DMA_DATA_LENGTH(LENGTH) (((LENGTH) >= 0x1U) && ((LENGTH) < 0x10000U)) + +#define IS_TIM_IC_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) + +#define IS_TIM_DEADTIME(__DEADTIME__) ((__DEADTIME__) <= 0xFFU) + +#if defined (TIM_SMCR_SMS_3) +#define IS_TIM_SLAVEMODE_TRIGGER_ENABLED(__TRIGGER__) (((__TRIGGER__) == TIM_SLAVEMODE_TRIGGER) || \ + ((__TRIGGER__) == TIM_SLAVEMODE_COMBINED_RESETTRIGGER)) +#else +#define IS_TIM_SLAVEMODE_TRIGGER_ENABLED(__TRIGGER__) ((__TRIGGER__) == TIM_SLAVEMODE_TRIGGER) +#endif /* TIM_SMCR_SMS_3 */ + +#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\ + ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U))) + +#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) :\ + ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC)) + +#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\ + ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U)))) + +#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\ + ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP))) + +#if defined(TIM_CCER_CC5E) && defined(TIM_CCER_CC6E) +#define TIM_CHANNEL_STATE_GET(__HANDLE__, __CHANNEL__)\ + (((__CHANNEL__) == TIM_CHANNEL_1) ? (__HANDLE__)->ChannelState[0] :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelState[1] :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelState[2] :\ + ((__CHANNEL__) == TIM_CHANNEL_4) ? (__HANDLE__)->ChannelState[3] :\ + ((__CHANNEL__) == TIM_CHANNEL_5) ? (__HANDLE__)->ChannelState[4] :\ + (__HANDLE__)->ChannelState[5]) + +#define TIM_CHANNEL_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->ChannelState[4] = (__CHANNEL_STATE__)) :\ + ((__HANDLE__)->ChannelState[5] = (__CHANNEL_STATE__))) + +#define TIM_CHANNEL_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__) do { \ + (__HANDLE__)->ChannelState[0] = \ + (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelState[1] = \ + (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelState[2] = \ + (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelState[3] = \ + (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelState[4] = \ + (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelState[5] = \ + (__CHANNEL_STATE__); \ + } while(0) +#else +#define TIM_CHANNEL_STATE_GET(__HANDLE__, __CHANNEL__)\ + (((__CHANNEL__) == TIM_CHANNEL_1) ? (__HANDLE__)->ChannelState[0] :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelState[1] :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelState[2] :\ + (__HANDLE__)->ChannelState[3]) + +#define TIM_CHANNEL_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__)) :\ + ((__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__))) + +#define TIM_CHANNEL_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__) do { \ + (__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__); \ + } while(0) +#endif /* TIM_CCER_CC5E && TIM_CCER_CC6E */ + +#define TIM_CHANNEL_N_STATE_GET(__HANDLE__, __CHANNEL__)\ + (((__CHANNEL__) == TIM_CHANNEL_1) ? (__HANDLE__)->ChannelNState[0] :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelNState[1] :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelNState[2] :\ + (__HANDLE__)->ChannelNState[3]) + +#define TIM_CHANNEL_N_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->ChannelNState[0] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelNState[1] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelNState[2] = (__CHANNEL_STATE__)) :\ + ((__HANDLE__)->ChannelNState[3] = (__CHANNEL_STATE__))) + +#define TIM_CHANNEL_N_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__) do { \ + (__HANDLE__)->ChannelNState[0] = \ + (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelNState[1] = \ + (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelNState[2] = \ + (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelNState[3] = \ + (__CHANNEL_STATE__); \ + } while(0) + +/** + * @} + */ +/* End of private macros -----------------------------------------------------*/ + +/* Include TIM HAL Extended module */ +#include "stm32f3xx_hal_tim_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup TIM_Exported_Functions TIM Exported Functions + * @{ + */ + +/** @addtogroup TIM_Exported_Functions_Group1 TIM Time Base functions + * @brief Time Base functions + * @{ + */ +/* Time Base functions ********************************************************/ +HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group2 TIM Output Compare functions + * @brief TIM Output Compare functions + * @{ + */ +/* Timer Output Compare functions *********************************************/ +HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group3 TIM PWM functions + * @brief TIM PWM functions + * @{ + */ +/* Timer PWM functions ********************************************************/ +HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group4 TIM Input Capture functions + * @brief TIM Input Capture functions + * @{ + */ +/* Timer Input Capture functions **********************************************/ +HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group5 TIM One Pulse functions + * @brief TIM One Pulse functions + * @{ + */ +/* Timer One Pulse functions **************************************************/ +HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode); +HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group6 TIM Encoder functions + * @brief TIM Encoder functions + * @{ + */ +/* Timer Encoder functions ****************************************************/ +HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_InitTypeDef *sConfig); +HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, + uint32_t *pData2, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group7 TIM IRQ handler management + * @brief IRQ handler management + * @{ + */ +/* Interrupt Handler functions ***********************************************/ +void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions + * @brief Peripheral Control functions + * @{ + */ +/* Control functions *********************************************************/ +HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, + uint32_t OutputChannel, uint32_t InputChannel); +HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, + uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig); +HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection); +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig); +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig); +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, + uint32_t BurstLength, uint32_t DataLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc); +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, + uint32_t BurstLength, uint32_t DataLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc); +HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource); +uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions + * @brief TIM Callbacks functions + * @{ + */ +/* Callback in non blocking modes (Interrupt and DMA) *************************/ +void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim); + +/* Callbacks Register/UnRegister functions ***********************************/ +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, + pTIM_CallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions + * @brief Peripheral State functions + * @{ + */ +/* Peripheral State functions ************************************************/ +HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim); + +/* Peripheral Channel state functions ************************************************/ +HAL_TIM_ActiveChannel HAL_TIM_GetActiveChannel(TIM_HandleTypeDef *htim); +HAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** + * @} + */ +/* End of exported functions -------------------------------------------------*/ + +/* Private functions----------------------------------------------------------*/ +/** @defgroup TIM_Private_Functions TIM Private Functions + * @{ + */ +void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure); +void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter); +void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config); +void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, + uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter); + +void TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma); +void TIM_DMAError(DMA_HandleTypeDef *hdma); +void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma); +void TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma); +void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +void TIM_ResetCallback(TIM_HandleTypeDef *htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ +/* End of private functions --------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F3xx_HAL_TIM_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_tim_ex.h b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_tim_ex.h new file mode 100644 index 0000000..80c2df1 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_tim_ex.h @@ -0,0 +1,343 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_tim_ex.h + * @author MCD Application Team + * @brief Header file of TIM HAL Extended module. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F3xx_HAL_TIM_EX_H +#define STM32F3xx_HAL_TIM_EX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal_def.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup TIMEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup TIMEx_Exported_Types TIM Extended Exported Types + * @{ + */ + +/** + * @brief TIM Hall sensor Configuration Structure definition + */ + +typedef struct +{ + uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t IC1Filter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + + uint32_t Commutation_Delay; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ +} TIM_HallSensor_InitTypeDef; +/** + * @} + */ +/* End of exported types -----------------------------------------------------*/ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup TIMEx_Exported_Constants TIM Extended Exported Constants + * @{ + */ + +/** @defgroup TIMEx_Remap TIM Extended Remapping + * @{ + */ +#if defined(TIM1) +#define TIM_TIM1_ADC1_NONE (0x00000000U) /*!< TIM1_ETR is not connected to any AWD (analog watchdog)*/ +#define TIM_TIM1_ADC1_AWD1 (0x00000001U) /*!< TIM1_ETR is connected to ADC1 AWD1 */ +#define TIM_TIM1_ADC1_AWD2 (0x00000002U) /*!< TIM1_ETR is connected to ADC1 AWD2 */ +#define TIM_TIM1_ADC1_AWD3 (0x00000003U) /*!< TIM1_ETR is connected to ADC1 AWD3 */ + +#if defined(ADC4) +#define TIM_TIM1_ADC4_NONE (0x00000000U) /*!< TIM1_ETR is not connected to any AWD (analog watchdog)*/ +#define TIM_TIM1_ADC4_AWD1 (0x00000004U) /*!< TIM1_ETR is connected to ADC4 AWD1 */ +#define TIM_TIM1_ADC4_AWD2 (0x00000008U) /*!< TIM1_ETR is connected to ADC4 AWD2 */ +#define TIM_TIM1_ADC4_AWD3 (0x0000000CU) /*!< TIM1_ETR is connected to ADC4 AWD3 */ +#elif defined(ADC2) +#define TIM_TIM1_ADC2_NONE (0x00000000U) /*!< TIM1_ETR is not connected to any AWD (analog watchdog)*/ +#define TIM_TIM1_ADC2_AWD1 (0x00000004U) /*!< TIM1_ETR is connected to ADC2 AWD1 */ +#define TIM_TIM1_ADC2_AWD2 (0x00000008U) /*!< TIM1_ETR is connected to ADC2 AWD2 */ +#define TIM_TIM1_ADC2_AWD3 (0x0000000CU) /*!< TIM1_ETR is connected to ADC2 AWD3 */ +#endif /* ADC4 */ +#endif /* TIM1 */ + +#if defined(TIM8) +#define TIM_TIM8_ADC2_NONE (0x00000000U) /*!< TIM8_ETR is not connected to any AWD (analog watchdog) */ +#define TIM_TIM8_ADC2_AWD1 (0x00000001U) /*!< TIM8_ETR is connected to ADC2 AWD1 */ +#define TIM_TIM8_ADC2_AWD2 (0x00000002U) /*!< TIM8_ETR is connected to ADC2 AWD2 */ +#define TIM_TIM8_ADC2_AWD3 (0x00000003U) /*!< TIM8_ETR is connected to ADC2 AWD3 */ + +#define TIM_TIM8_ADC3_NONE (0x00000000U) /*!< TIM8_ETR is not connected to any AWD (analog watchdog) */ +#define TIM_TIM8_ADC3_AWD1 (0x00000004U) /*!< TIM8_ETR is connected to ADC3 AWD1 */ +#define TIM_TIM8_ADC3_AWD2 (0x00000008U) /*!< TIM8_ETR is connected to ADC3 AWD2 */ +#define TIM_TIM8_ADC3_AWD3 (0x0000000CU) /*!< TIM8_ETR is connected to ADC3 AWD3 */ +#endif /* TIM8 */ + +#if defined(TIM14) +#define TIM_TIM14_GPIO (0x00000000U) /*!< TIM14 TI1 is connected to GPIO */ +#define TIM_TIM14_RTC (0x00000001U) /*!< TIM14 TI1 is connected to RTC_clock */ +#define TIM_TIM14_HSE (0x00000002U) /*!< TIM14 TI1 is connected to HSE/32U */ +#define TIM_TIM14_MCO (0x00000003U) /*!< TIM14 TI1 is connected to MCO */ +#endif /* TIM14 */ + +#if defined(TIM16) +#define TIM_TIM16_GPIO (0x00000000U) /*!< TIM16 TI1 is connected to GPIO */ +#define TIM_TIM16_RTC (0x00000001U) /*!< TIM16 TI1 is connected to RTC_clock */ +#define TIM_TIM16_HSE (0x00000002U) /*!< TIM16 TI1 is connected to HSE/32 */ +#define TIM_TIM16_MCO (0x00000003U) /*!< TIM16 TI1 is connected to MCO */ +#endif /* TIM16 */ + +#if defined(TIM20) +#define TIM_TIM20_ADC3_NONE (0x00000000U) /*!< TIM20_ETR is not connected to any AWD (analog watchdog) */ +#define TIM_TIM20_ADC3_AWD1 (0x00000001U) /*!< TIM20_ETR is connected to ADC3 AWD1 */ +#define TIM_TIM20_ADC3_AWD2 (0x00000002U) /*!< TIM20_ETR is connected to ADC3 AWD2 */ +#define TIM_TIM20_ADC3_AWD3 (0x00000003U) /*!< TIM20_ETR is connected to ADC3 AWD3 */ + +#define TIM_TIM20_ADC4_NONE (0x00000000U) /*!< TIM20_ETR is not connected to any AWD (analog watchdog) */ +#define TIM_TIM20_ADC4_AWD1 (0x00000004U) /*!< TIM20_ETR is connected to ADC4 AWD1 */ +#define TIM_TIM20_ADC4_AWD2 (0x00000008U) /*!< TIM20_ETR is connected to ADC4 AWD2 */ +#define TIM_TIM20_ADC4_AWD3 (0x0000000CU) /*!< TIM20_ETR is connected to ADC4 AWD3 */ +#endif /* TIM20 */ +/** + * @} + */ + +/** + * @} + */ +/* End of exported constants -------------------------------------------------*/ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup TIMEx_Exported_Macros TIM Extended Exported Macros + * @{ + */ + +/** + * @} + */ +/* End of exported macro -----------------------------------------------------*/ + +/* Private macro -------------------------------------------------------------*/ +/** @defgroup TIMEx_Private_Macros TIM Extended Private Macros + * @{ + */ +#if defined(TIM1) && defined(TIM8) && defined(TIM20) && defined(TIM16) +#define IS_TIM_REMAP(__INSTANCE__, __REMAP__) \ + ((((__INSTANCE__) == TIM1) && ((((__REMAP__) & 0xFFFFFFF0U) == 0x00000000U))) \ + || (((__INSTANCE__) == TIM8) && ((((__REMAP__) & 0xFFFFFFF0U) == 0x00000000U))) \ + || (((__INSTANCE__) == TIM20) && ((((__REMAP__) & 0xFFFFFFF0U) == 0x00000000U))) \ + || (((__INSTANCE__) == TIM16) && ((((__REMAP__) & 0xFFFFFFFCU) == 0x00000000U)))) +#elif defined(TIM1) && defined(TIM8) && defined(TIM16) +#define IS_TIM_REMAP(__INSTANCE__, __REMAP__) \ + ((((__INSTANCE__) == TIM1) && ((((__REMAP__) & 0xFFFFFFF0U) == 0x00000000U))) \ + || (((__INSTANCE__) == TIM8) && ((((__REMAP__) & 0xFFFFFFF0U) == 0x00000000U))) \ + || (((__INSTANCE__) == TIM16) && ((((__REMAP__) & 0xFFFFFFFCU) == 0x00000000U)))) +#elif defined(TIM1) && defined(TIM16) +#define IS_TIM_REMAP(__INSTANCE__, __REMAP__) \ + ((((__INSTANCE__) == TIM1) && ((((__REMAP__) & 0xFFFFFFF0U) == 0x00000000U))) \ + || (((__INSTANCE__) == TIM16) && ((((__REMAP__) & 0xFFFFFFFCU) == 0x00000000U)))) +#elif defined(TIM14) +#define IS_TIM_REMAP(__INSTANCE__, __REMAP__) \ + (((__INSTANCE__) == TIM14) && (((__REMAP__) & 0xFFFFFFFCU) == 0x00000000U)) +#endif /* TIM1 && TIM8 && TIM20 && TIM16 */ + +/** + * @} + */ +/* End of private macro ------------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup TIMEx_Exported_Functions TIM Extended Exported Functions + * @{ + */ + +/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions + * @brief Timer Hall Sensor functions + * @{ + */ +/* Timer Hall Sensor functions **********************************************/ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim); + +void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim); + +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions + * @brief Timer Complementary Output Compare functions + * @{ + */ +/* Timer Complementary Output Compare functions *****************************/ +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); + +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); + +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions + * @brief Timer Complementary PWM functions + * @{ + */ +/* Timer Complementary PWM functions ****************************************/ +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); + +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions + * @brief Timer Complementary One Pulse functions + * @{ + */ +/* Timer Complementary One Pulse functions **********************************/ +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel); + +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions + * @brief Peripheral Control functions + * @{ + */ +/* Extended Control functions ************************************************/ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource); +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource); +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource); +HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, + TIM_MasterConfigTypeDef *sMasterConfig); +HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, + TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig); +#if defined(TIM_CCR5_CCR5) +HAL_StatusTypeDef HAL_TIMEx_GroupChannel5(TIM_HandleTypeDef *htim, uint32_t Channels); +#endif /* TIM_CCR5_CCR5 */ +HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions + * @brief Extended Callbacks functions + * @{ + */ +/* Extended Callback **********************************************************/ +void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim); +void HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim); +#if defined(TIM_BDTR_BK2E) +void HAL_TIMEx_Break2Callback(TIM_HandleTypeDef *htim); +#endif /* TIM_BDTR_BK2E */ +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions + * @brief Extended Peripheral State functions + * @{ + */ +/* Extended Peripheral State functions ***************************************/ +HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(TIM_HandleTypeDef *htim, uint32_t ChannelN); +/** + * @} + */ + +/** + * @} + */ +/* End of exported functions -------------------------------------------------*/ + +/* Private functions----------------------------------------------------------*/ +/** @addtogroup TIMEx_Private_Functions TIMEx Private Functions + * @{ + */ +void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma); +void TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma); +/** + * @} + */ +/* End of private functions --------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif /* STM32F3xx_HAL_TIM_EX_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/License.md b/Software/Drivers/STM32F3xx_HAL_Driver/License.md new file mode 100644 index 0000000..d12cc8e --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/License.md @@ -0,0 +1,3 @@ +# Copyright (c) 2016 STMicroelectronics + +This software component is licensed by STMicroelectronics under the **BSD-3-Clause** license. You may not use this software except in compliance with this license. You may obtain a copy of the license [here](https://opensource.org/licenses/BSD-3-Clause). \ No newline at end of file diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal.c new file mode 100644 index 0000000..56980b0 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal.c @@ -0,0 +1,531 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal.c + * @author MCD Application Team + * @brief HAL module driver. + * This is the common part of the HAL initialization + * + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The common HAL driver contains a set of generic and common APIs that can be + used by the PPP peripheral drivers and the user to start using the HAL. + [..] + The HAL contains two APIs categories: + (+) HAL Initialization and de-initialization functions + (+) HAL Control functions + + @endverbatim + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup HAL HAL + * @brief HAL module driver. + * @{ + */ + +#ifdef HAL_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup HAL_Private Constants + * @{ + */ +/** + * @brief STM32F3xx HAL Driver version number V1.5.6 + */ +#define __STM32F3xx_HAL_VERSION_MAIN (0x01U) /*!< [31:24] main version */ +#define __STM32F3xx_HAL_VERSION_SUB1 (0x05U) /*!< [23:16] sub1 version */ +#define __STM32F3xx_HAL_VERSION_SUB2 (0x06U) /*!< [15:8] sub2 version */ +#define __STM32F3xx_HAL_VERSION_RC (0x00U) /*!< [7:0] release candidate */ +#define __STM32F3xx_HAL_VERSION ((__STM32F3xx_HAL_VERSION_MAIN << 24U)\ + |(__STM32F3xx_HAL_VERSION_SUB1 << 16U)\ + |(__STM32F3xx_HAL_VERSION_SUB2 << 8U )\ + |(__STM32F3xx_HAL_VERSION_RC)) + +#define IDCODE_DEVID_MASK (0x00000FFFU) +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/* Exported variables --------------------------------------------------------*/ +/** @defgroup HAL_Exported_Variables HAL Exported Variables + * @{ + */ +__IO uint32_t uwTick; +uint32_t uwTickPrio = (1UL << __NVIC_PRIO_BITS); /* Invalid PRIO */ +HAL_TickFreqTypeDef uwTickFreq = HAL_TICK_FREQ_DEFAULT; /* 1KHz */ +/** + * @} + */ +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions ---------------------------------------------------------*/ + +/** @defgroup HAL_Exported_Functions HAL Exported Functions + * @{ + */ + +/** @defgroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions + * @brief Initialization and de-initialization functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Initializes the Flash interface, the NVIC allocation and initial clock + configuration. It initializes the systick also when timeout is needed + and the backup domain when enabled. + (+) de-Initializes common part of the HAL. + (+) Configure The time base source to have 1ms time base with a dedicated + Tick interrupt priority. + (++) SysTick timer is used by default as source of time base, but user + can eventually implement his proper time base source (a general purpose + timer for example or other time source), keeping in mind that Time base + duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and + handled in milliseconds basis. + (++) Time base configuration function (HAL_InitTick ()) is called automatically + at the beginning of the program after reset by HAL_Init() or at any time + when clock is configured, by HAL_RCC_ClockConfig(). + (++) Source of time base is configured to generate interrupts at regular + time intervals. Care must be taken if HAL_Delay() is called from a + peripheral ISR process, the Tick interrupt line must have higher priority + (numerically lower) than the peripheral interrupt. Otherwise the caller + ISR process will be blocked. + (++) functions affecting time base configurations are declared as __Weak + to make override possible in case of other implementations in user file. + +@endverbatim + * @{ + */ + +/** + * @brief This function configures the Flash prefetch, + * Configures time base source, NVIC and Low level hardware + * @note This function is called at the beginning of program after reset and before + * the clock configuration + * + * @note The Systick configuration is based on HSI clock, as HSI is the clock + * used after a system Reset and the NVIC configuration is set to Priority group 4 + * + * @note The time base configuration is based on MSI clock when exting from Reset. + * Once done, time base tick start incrementing. + * In the default implementation,Systick is used as source of time base. + * The tick variable is incremented each 1ms in its ISR. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_Init(void) +{ + /* Configure Flash prefetch */ +#if (PREFETCH_ENABLE != 0U) + __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); +#endif /* PREFETCH_ENABLE */ + + /* Set Interrupt Group Priority */ + HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); + + /* Enable systick and configure 1ms tick (default clock after Reset is HSI) */ + HAL_InitTick(TICK_INT_PRIORITY); + + /* Init the low level hardware */ + HAL_MspInit(); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief This function de-Initializes common part of the HAL and stops the systick. + * @note This function is optional. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DeInit(void) +{ + /* Reset of all peripherals */ + __HAL_RCC_APB1_FORCE_RESET(); + __HAL_RCC_APB1_RELEASE_RESET(); + + __HAL_RCC_APB2_FORCE_RESET(); + __HAL_RCC_APB2_RELEASE_RESET(); + + __HAL_RCC_AHB_FORCE_RESET(); + __HAL_RCC_AHB_RELEASE_RESET(); + + /* De-Init the low level hardware */ + HAL_MspDeInit(); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Initialize the MSP. + * @retval None + */ +__weak void HAL_MspInit(void) +{ + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitialize the MSP. + * @retval None + */ +__weak void HAL_MspDeInit(void) +{ + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief This function configures the source of the time base. + * The time source is configured to have 1ms time base with a dedicated + * Tick interrupt priority. + * @note This function is called automatically at the beginning of program after + * reset by HAL_Init() or at any time when clock is reconfigured by HAL_RCC_ClockConfig(). + * @note In the default implementation , SysTick timer is the source of time base. + * It is used to generate interrupts at regular time intervals. + * Care must be taken if HAL_Delay() is called from a peripheral ISR process, + * The SysTick interrupt must have higher priority (numerically lower) + * than the peripheral interrupt. Otherwise the caller ISR process will be blocked. + * The function is declared as __Weak to be overwritten in case of other + * implementation in user file. + * @param TickPriority Tick interrupt priority. + * @retval HAL status + */ +__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) +{ + /* Configure the SysTick to have interrupt in 1ms time basis*/ + if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) + { + return HAL_ERROR; + } + + /* Configure the SysTick IRQ priority */ + if (TickPriority < (1UL << __NVIC_PRIO_BITS)) + { + HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); + uwTickPrio = TickPriority; + } + else + { + return HAL_ERROR; + } + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup HAL_Exported_Functions_Group2 HAL Control functions + * @brief HAL Control functions + * +@verbatim + =============================================================================== + ##### HAL Control functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Provide a tick value in millisecond + (+) Provide a blocking delay in millisecond + (+) Suspend the time base source interrupt + (+) Resume the time base source interrupt + (+) Get the HAL API driver version + (+) Get the device identifier + (+) Get the device revision identifier + (+) Enable/Disable Debug module during Sleep mode + (+) Enable/Disable Debug module during STOP mode + (+) Enable/Disable Debug module during STANDBY mode + +@endverbatim + * @{ + */ + +/** + * @brief This function is called to increment a global variable "uwTick" + * used as application time base. + * @note In the default implementation, this variable is incremented each 1ms + * in SysTick ISR. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval None + */ +__weak void HAL_IncTick(void) +{ + uwTick += uwTickFreq; +} + +/** + * @brief Povides a tick value in millisecond. + * @note The function is declared as __Weak to be overwritten in case of other + * implementations in user file. + * @retval tick value + */ +__weak uint32_t HAL_GetTick(void) +{ + return uwTick; +} + +/** + * @brief This function returns a tick priority. + * @retval tick priority + */ +uint32_t HAL_GetTickPrio(void) +{ + return uwTickPrio; +} + +/** + * @brief Set new tick Freq. + * @retval status + */ +HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq) +{ + HAL_StatusTypeDef status = HAL_OK; + HAL_TickFreqTypeDef prevTickFreq; + + assert_param(IS_TICKFREQ(Freq)); + + if (uwTickFreq != Freq) + { + /* Back up uwTickFreq frequency */ + prevTickFreq = uwTickFreq; + + /* Update uwTickFreq global variable used by HAL_InitTick() */ + uwTickFreq = Freq; + + /* Apply the new tick Freq */ + status = HAL_InitTick(uwTickPrio); + + if (status != HAL_OK) + { + /* Restore previous tick frequency */ + uwTickFreq = prevTickFreq; + } + } + + return status; +} + +/** + * @brief Return tick frequency. + * @retval tick period in Hz + */ +HAL_TickFreqTypeDef HAL_GetTickFreq(void) +{ + return uwTickFreq; +} + +/** + * @brief This function provides accurate delay (in milliseconds) based + * on variable incremented. + * @note In the default implementation , SysTick timer is the source of time base. + * It is used to generate interrupts at regular time intervals where uwTick + * is incremented. + * The function is declared as __Weak to be overwritten in case of other + * implementations in user file. + * @param Delay specifies the delay time length, in milliseconds. + * @retval None + */ +__weak void HAL_Delay(uint32_t Delay) +{ + uint32_t tickstart = HAL_GetTick(); + uint32_t wait = Delay; + + /* Add freq to guarantee minimum wait */ + if (wait < HAL_MAX_DELAY) + { + wait += (uint32_t)(uwTickFreq); + } + + while((HAL_GetTick() - tickstart) < wait) + { + } +} + +/** + * @brief Suspend Tick increment. + * @note In the default implementation , SysTick timer is the source of time base. It is + * used to generate interrupts at regular time intervals. Once HAL_SuspendTick() + * is called, the the SysTick interrupt will be disabled and so Tick increment + * is suspended. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval None + */ +__weak void HAL_SuspendTick(void) + +{ + /* Disable SysTick Interrupt */ + SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk; + +} + +/** + * @brief Resume Tick increment. + * @note In the default implementation , SysTick timer is the source of time base. It is + * used to generate interrupts at regular time intervals. Once HAL_ResumeTick() + * is called, the the SysTick interrupt will be enabled and so Tick increment + * is resumed. + * The function is declared as __Weak to be overwritten in case of other + * implementations in user file. + * @retval None + */ +__weak void HAL_ResumeTick(void) +{ + /* Enable SysTick Interrupt */ + SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; + +} + +/** + * @brief This function returns the HAL revision + * @retval version 0xXYZR (8bits for each decimal, R for RC) + */ +uint32_t HAL_GetHalVersion(void) +{ + return __STM32F3xx_HAL_VERSION; +} + +/** + * @brief Returns the device revision identifier. + * @retval Device revision identifier + */ +uint32_t HAL_GetREVID(void) +{ + return((DBGMCU->IDCODE) >> 16U); +} + +/** + * @brief Returns the device identifier. + * @retval Device identifier + */ +uint32_t HAL_GetDEVID(void) +{ + return((DBGMCU->IDCODE) & IDCODE_DEVID_MASK); +} + +/** + * @brief Returns first word of the unique device identifier (UID based on 96 bits) + * @retval Device identifier + */ +uint32_t HAL_GetUIDw0(void) +{ + return(READ_REG(*((uint32_t *)UID_BASE))); +} + +/** + * @brief Returns second word of the unique device identifier (UID based on 96 bits) + * @retval Device identifier + */ +uint32_t HAL_GetUIDw1(void) +{ + return(READ_REG(*((uint32_t *)(UID_BASE + 4U)))); +} + +/** + * @brief Returns third word of the unique device identifier (UID based on 96 bits) + * @retval Device identifier + */ +uint32_t HAL_GetUIDw2(void) +{ + return(READ_REG(*((uint32_t *)(UID_BASE + 8U)))); +} + +/** + * @brief Enable the Debug Module during SLEEP mode + * @retval None + */ +void HAL_DBGMCU_EnableDBGSleepMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); +} + +/** + * @brief Disable the Debug Module during SLEEP mode + * @retval None + */ +void HAL_DBGMCU_DisableDBGSleepMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); +} + +/** + * @brief Enable the Debug Module during STOP mode + * @retval None + */ +void HAL_DBGMCU_EnableDBGStopMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); +} + +/** + * @brief Disable the Debug Module during STOP mode + * @retval None + */ +void HAL_DBGMCU_DisableDBGStopMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); +} + +/** + * @brief Enable the Debug Module during STANDBY mode + * @retval None + */ +void HAL_DBGMCU_EnableDBGStandbyMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); +} + +/** + * @brief Disable the Debug Module during STANDBY mode + * @retval None + */ +void HAL_DBGMCU_DisableDBGStandbyMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_cortex.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_cortex.c new file mode 100644 index 0000000..641711d --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_cortex.c @@ -0,0 +1,513 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_cortex.c + * @author MCD Application Team + * @brief CORTEX HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the CORTEX: + * + Initialization and de-initialization functions + * + Peripheral Control functions + * + * @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + + [..] + *** How to configure Interrupts using CORTEX HAL driver *** + =========================================================== + [..] + This section provides functions allowing to configure the NVIC interrupts (IRQ). + The Cortex-M4 exceptions are managed by CMSIS functions. + + (#) Configure the NVIC Priority Grouping using HAL_NVIC_SetPriorityGrouping() function + + (#) Configure the priority of the selected IRQ Channels using HAL_NVIC_SetPriority() + + (#) Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ() + + + -@- When the NVIC_PRIORITYGROUP_0 is selected, IRQ pre-emption is no more possible. + The pending IRQ priority will be managed only by the sub priority. + + -@- IRQ priority order (sorted by highest to lowest priority): + (+@) Lowest pre-emption priority + (+@) Lowest sub priority + (+@) Lowest hardware priority (IRQ number) + + [..] + *** How to configure Systick using CORTEX HAL driver *** + ======================================================== + [..] + Setup SysTick Timer for time base + + (+) The HAL_SYSTICK_Config()function calls the SysTick_Config() function which + is a CMSIS function that: + (++) Configures the SysTick Reload register with value passed as function parameter. + (++) Configures the SysTick IRQ priority to the lowest value (0x0FU). + (++) Resets the SysTick Counter register. + (++) Configures the SysTick Counter clock source to be Core Clock Source (HCLK). + (++) Enables the SysTick Interrupt. + (++) Starts the SysTick Counter. + + (+) You can change the SysTick Clock source to be HCLK_Div8 by calling the macro + __HAL_CORTEX_SYSTICKCLK_CONFIG(SYSTICK_CLKSOURCE_HCLK_DIV8) just after the + HAL_SYSTICK_Config() function call. The __HAL_CORTEX_SYSTICKCLK_CONFIG() macro is defined + inside the stm32f3xx_hal_cortex.h file. + + (+) You can change the SysTick IRQ priority by calling the + HAL_NVIC_SetPriority(SysTick_IRQn,...) function just after the HAL_SYSTICK_Config() function + call. The HAL_NVIC_SetPriority() call the NVIC_SetPriority() function which is a CMSIS function. + + (+) To adjust the SysTick time base, use the following formula: + + Reload Value = SysTick Counter Clock (Hz) x Desired Time base (s) + (++) Reload Value is the parameter to be passed for HAL_SYSTICK_Config() function + (++) Reload Value should not exceed 0xFFFFFF + + @endverbatim + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* + Additional Tables: CORTEX_NVIC_Priority_Table + The table below gives the allowed values of the pre-emption priority and subpriority according + to the Priority Grouping configuration performed by HAL_NVIC_SetPriorityGrouping() function + ========================================================================================================================== + NVIC_PriorityGroup | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority | Description + ========================================================================================================================== + NVIC_PRIORITYGROUP_0 | 0 | 0U-15 | 0 bits for pre-emption priority + | | | 4 bits for subpriority + -------------------------------------------------------------------------------------------------------------------------- + NVIC_PRIORITYGROUP_1 | 0U-1 | 0U-7 | 1 bits for pre-emption priority + | | | 3 bits for subpriority + -------------------------------------------------------------------------------------------------------------------------- + NVIC_PRIORITYGROUP_2 | 0U-3 | 0U-3 | 2 bits for pre-emption priority + | | | 2 bits for subpriority + -------------------------------------------------------------------------------------------------------------------------- + NVIC_PRIORITYGROUP_3 | 0U-7 | 0U-1 | 3 bits for pre-emption priority + | | | 1 bits for subpriority + -------------------------------------------------------------------------------------------------------------------------- + NVIC_PRIORITYGROUP_4 | 0U-15 | 0 | 4 bits for pre-emption priority + | | | 0 bits for subpriority + ========================================================================================================================== + +*/ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup CORTEX CORTEX + * @brief CORTEX CORTEX HAL module driver + * @{ + */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions ---------------------------------------------------------*/ + +/** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions + * @{ + */ + + +/** @defgroup CORTEX_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + ============================================================================== + ##### Initialization and de-initialization functions ##### + ============================================================================== + [..] + This section provides the CORTEX HAL driver functions allowing to configure Interrupts + Systick functionalities + +@endverbatim + * @{ + */ + + +/** + * @brief Sets the priority grouping field (pre-emption priority and subpriority) + * using the required unlock sequence. + * @param PriorityGroup The priority grouping bits length. + * This parameter can be one of the following values: + * @arg NVIC_PRIORITYGROUP_0: 0 bits for pre-emption priority + * 4 bits for subpriority + * @arg NVIC_PRIORITYGROUP_1: 1 bits for pre-emption priority + * 3 bits for subpriority + * @arg NVIC_PRIORITYGROUP_2: 2 bits for pre-emption priority + * 2 bits for subpriority + * @arg NVIC_PRIORITYGROUP_3: 3 bits for pre-emption priority + * 1 bits for subpriority + * @arg NVIC_PRIORITYGROUP_4: 4 bits for pre-emption priority + * 0 bits for subpriority + * @note When the NVIC_PriorityGroup_0 is selected, IRQ pre-emption is no more possible. + * The pending IRQ priority will be managed only by the subpriority. + * @retval None + */ +void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + /* Check the parameters */ + assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); + + /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */ + NVIC_SetPriorityGrouping(PriorityGroup); +} + +/** + * @brief Sets the priority of an interrupt. + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f3xxxx.h)) + * @param PreemptPriority The pre-emption priority for the IRQn channel. + * This parameter can be a value between 0 and 15 as described in the table CORTEX_NVIC_Priority_Table + * A lower priority value indicates a higher priority + * @param SubPriority the subpriority level for the IRQ channel. + * This parameter can be a value between 0 and 15 as described in the table CORTEX_NVIC_Priority_Table + * A lower priority value indicates a higher priority. + * @retval None + */ +void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t prioritygroup = 0x00U; + + /* Check the parameters */ + assert_param(IS_NVIC_SUB_PRIORITY(SubPriority)); + assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority)); + + prioritygroup = NVIC_GetPriorityGrouping(); + + NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); +} + +/** + * @brief Enables a device specific interrupt in the NVIC interrupt controller. + * @note To configure interrupts priority correctly, the NVIC_PriorityGroupConfig() + * function should be called before. + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f3xxxx.h)) + * @retval None + */ +void HAL_NVIC_EnableIRQ(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Enable interrupt */ + NVIC_EnableIRQ(IRQn); +} + +/** + * @brief Disables a device specific interrupt in the NVIC interrupt controller. + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f3xxxx.h)) + * @retval None + */ +void HAL_NVIC_DisableIRQ(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Disable interrupt */ + NVIC_DisableIRQ(IRQn); +} + +/** + * @brief Initiates a system reset request to reset the MCU. + * @retval None + */ +void HAL_NVIC_SystemReset(void) +{ + /* System Reset */ + NVIC_SystemReset(); +} + +/** + * @brief Initializes the System Timer and its interrupt, and starts the System Tick Timer. + * Counter is in free running mode to generate periodic interrupts. + * @param TicksNumb Specifies the ticks Number of ticks between two interrupts. + * @retval status: - 0 Function succeeded. + * - 1 Function failed. + */ +uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) +{ + return SysTick_Config(TicksNumb); +} +/** + * @} + */ + +/** @defgroup CORTEX_Exported_Functions_Group2 Peripheral Control functions + * @brief Cortex control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This subsection provides a set of functions allowing to control the CORTEX + (NVIC, SYSTICK, MPU) functionalities. + + +@endverbatim + * @{ + */ + +#if (__MPU_PRESENT == 1U) + +/** + * @brief Disables the MPU also clears the HFNMIENA bit (ARM recommendation) + * @retval None + */ +void HAL_MPU_Disable(void) +{ + /* Disable fault exceptions */ + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; + + /* Disable the MPU */ + MPU->CTRL = 0U; +} + +/** + * @brief Enables the MPU + * @param MPU_Control Specifies the control mode of the MPU during hard fault, + * NMI, FAULTMASK and privileged access to the default memory + * This parameter can be one of the following values: + * @arg MPU_HFNMI_PRIVDEF_NONE + * @arg MPU_HARDFAULT_NMI + * @arg MPU_PRIVILEGED_DEFAULT + * @arg MPU_HFNMI_PRIVDEF + * @retval None + */ +void HAL_MPU_Enable(uint32_t MPU_Control) +{ + /* Enable the MPU */ + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; + + /* Enable fault exceptions */ + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +} + + /** + * @brief Initializes and configures the Region and the memory to be protected. + * @param MPU_Init Pointer to a MPU_Region_InitTypeDef structure that contains + * the initialization and configuration information. + * @retval None + */ +void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init) +{ + /* Check the parameters */ + assert_param(IS_MPU_REGION_NUMBER(MPU_Init->Number)); + assert_param(IS_MPU_REGION_ENABLE(MPU_Init->Enable)); + + /* Set the Region number */ + MPU->RNR = MPU_Init->Number; + + if ((MPU_Init->Enable) != RESET) + { + /* Check the parameters */ + assert_param(IS_MPU_INSTRUCTION_ACCESS(MPU_Init->DisableExec)); + assert_param(IS_MPU_REGION_PERMISSION_ATTRIBUTE(MPU_Init->AccessPermission)); + assert_param(IS_MPU_TEX_LEVEL(MPU_Init->TypeExtField)); + assert_param(IS_MPU_ACCESS_SHAREABLE(MPU_Init->IsShareable)); + assert_param(IS_MPU_ACCESS_CACHEABLE(MPU_Init->IsCacheable)); + assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable)); + assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable)); + assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size)); + + MPU->RBAR = MPU_Init->BaseAddress; + MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) | + ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) | + ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) | + ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) | + ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) | + ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) | + ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) | + ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) | + ((uint32_t)MPU_Init->Enable << MPU_RASR_ENABLE_Pos); + } + else + { + MPU->RBAR = 0x00U; + MPU->RASR = 0x00U; + } +} +#endif /* __MPU_PRESENT */ + +/** + * @brief Gets the priority grouping field from the NVIC Interrupt Controller. + * @retval Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field) + */ +uint32_t HAL_NVIC_GetPriorityGrouping(void) +{ + /* Get the PRIGROUP[10:8] field value */ + return NVIC_GetPriorityGrouping(); +} + +/** + * @brief Gets the priority of an interrupt. + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f3xxxx.h)) + * @param PriorityGroup: the priority grouping bits length. + * This parameter can be one of the following values: + * @arg NVIC_PRIORITYGROUP_0: 0 bits for pre-emption priority + * 4 bits for subpriority + * @arg NVIC_PRIORITYGROUP_1: 1 bits for pre-emption priority + * 3 bits for subpriority + * @arg NVIC_PRIORITYGROUP_2: 2 bits for pre-emption priority + * 2 bits for subpriority + * @arg NVIC_PRIORITYGROUP_3: 3 bits for pre-emption priority + * 1 bits for subpriority + * @arg NVIC_PRIORITYGROUP_4: 4 bits for pre-emption priority + * 0 bits for subpriority + * @param pPreemptPriority Pointer on the Preemptive priority value (starting from 0). + * @param pSubPriority Pointer on the Subpriority value (starting from 0). + * @retval None + */ +void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +{ + /* Check the parameters */ + assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); + /* Get priority for Cortex-M system or device specific interrupts */ + NVIC_DecodePriority(NVIC_GetPriority(IRQn), PriorityGroup, pPreemptPriority, pSubPriority); +} + +/** + * @brief Sets Pending bit of an external interrupt. + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f3xxxx.h)) + * @retval None + */ +void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + /* Set interrupt pending */ + NVIC_SetPendingIRQ(IRQn); +} + +/** + * @brief Gets Pending Interrupt (reads the pending register in the NVIC + * and returns the pending bit for the specified interrupt). + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f3xxxx.h)) + * @retval status: - 0 Interrupt status is not pending. + * - 1 Interrupt status is pending. + */ +uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + /* Return 1 if pending else 0U */ + return NVIC_GetPendingIRQ(IRQn); +} + +/** + * @brief Clears the pending bit of an external interrupt. + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f3xxxx.h)) + * @retval None + */ +void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + /* Clear pending interrupt */ + NVIC_ClearPendingIRQ(IRQn); +} + +/** + * @brief Gets active interrupt ( reads the active register in NVIC and returns the active bit). + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f3xxxx.h)) + * @retval status: - 0 Interrupt status is not pending. + * - 1 Interrupt status is pending. + */ +uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn) +{ + /* Return 1 if active else 0U */ + return NVIC_GetActive(IRQn); +} + +/** + * @brief Configures the SysTick clock source. + * @param CLKSource specifies the SysTick clock source. + * This parameter can be one of the following values: + * @arg SYSTICK_CLKSOURCE_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source. + * @arg SYSTICK_CLKSOURCE_HCLK: AHB clock selected as SysTick clock source. + * @retval None + */ +void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource) +{ + /* Check the parameters */ + assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource)); + if (CLKSource == SYSTICK_CLKSOURCE_HCLK) + { + SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK; + } + else + { + SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK; + } +} + +/** + * @brief This function handles SYSTICK interrupt request. + * @retval None + */ +void HAL_SYSTICK_IRQHandler(void) +{ + HAL_SYSTICK_Callback(); +} + +/** + * @brief SYSTICK callback. + * @retval None + */ +__weak void HAL_SYSTICK_Callback(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_SYSTICK_Callback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_CORTEX_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_dma.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_dma.c new file mode 100644 index 0000000..cb6a091 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_dma.c @@ -0,0 +1,900 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_dma.c + * @author MCD Application Team + * @brief DMA HAL module driver. + * + * This file provides firmware functions to manage the following + * functionalities of the Direct Memory Access (DMA) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + Peripheral State and errors functions + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Enable and configure the peripheral to be connected to the DMA Channel + (except for internal SRAM / FLASH memories: no initialization is + necessary). Please refer to Reference manual for connection between peripherals + and DMA requests . + + (#) For a given Channel, program the required configuration through the following parameters: + Transfer Direction, Source and Destination data formats, + Circular or Normal mode, Channel Priority level, Source and Destination Increment mode, + using HAL_DMA_Init() function. + + (#) Use HAL_DMA_GetState() function to return the DMA state and HAL_DMA_GetError() in case of error + detection. + + (#) Use HAL_DMA_Abort() function to abort the current transfer + + -@- In Memory-to-Memory transfer mode, Circular mode is not allowed. + *** Polling mode IO operation *** + ================================= + [..] + (+) Use HAL_DMA_Start() to start DMA transfer after the configuration of Source + address and destination address and the Length of data to be transferred + (+) Use HAL_DMA_PollForTransfer() to poll for the end of current transfer, in this + case a fixed Timeout can be configured by User depending from his application. + + *** Interrupt mode IO operation *** + =================================== + [..] + (+) Configure the DMA interrupt priority using HAL_NVIC_SetPriority() + (+) Enable the DMA IRQ handler using HAL_NVIC_EnableIRQ() + (+) Use HAL_DMA_Start_IT() to start DMA transfer after the configuration of + Source address and destination address and the Length of data to be transferred. + In this case the DMA interrupt is configured + (+) Use HAL_DMA_Channel_IRQHandler() called under DMA_IRQHandler() Interrupt subroutine + (+) At the end of data transfer HAL_DMA_IRQHandler() function is executed and user can + add his own function by customization of function pointer XferCpltCallback and + XferErrorCallback (i.e a member of DMA handle structure). + + *** DMA HAL driver macros list *** + ============================================= + [..] + Below the list of most used macros in DMA HAL driver. + + [..] + (@) You can refer to the DMA HAL driver header file for more useful macros + + @endverbatim + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup DMA DMA + * @brief DMA HAL module driver + * @{ + */ + +#ifdef HAL_DMA_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup DMA_Private_Functions DMA Private Functions + * @{ + */ +static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +static void DMA_CalcBaseAndBitshift(DMA_HandleTypeDef *hdma); +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Functions DMA Exported Functions + * @{ + */ + +/** @defgroup DMA_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and de-initialization functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + This section provides functions allowing to initialize the DMA Channel source + and destination addresses, incrementation and data sizes, transfer direction, + circular/normal mode selection, memory-to-memory mode selection and Channel priority value. + [..] + The HAL_DMA_Init() function follows the DMA configuration procedures as described in + reference manual. + +@endverbatim + * @{ + */ + +/** + * @brief Initialize the DMA according to the specified + * parameters in the DMA_InitTypeDef and initialize the associated handle. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) +{ + uint32_t tmp = 0U; + + /* Check the DMA handle allocation */ + if(NULL == hdma) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance)); + assert_param(IS_DMA_DIRECTION(hdma->Init.Direction)); + assert_param(IS_DMA_PERIPHERAL_INC_STATE(hdma->Init.PeriphInc)); + assert_param(IS_DMA_MEMORY_INC_STATE(hdma->Init.MemInc)); + assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(hdma->Init.PeriphDataAlignment)); + assert_param(IS_DMA_MEMORY_DATA_SIZE(hdma->Init.MemDataAlignment)); + assert_param(IS_DMA_MODE(hdma->Init.Mode)); + assert_param(IS_DMA_PRIORITY(hdma->Init.Priority)); + + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Get the CR register value */ + tmp = hdma->Instance->CCR; + + /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR bits */ + tmp &= ((uint32_t)~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | \ + DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | \ + DMA_CCR_DIR)); + + /* Prepare the DMA Channel configuration */ + tmp |= hdma->Init.Direction | + hdma->Init.PeriphInc | hdma->Init.MemInc | + hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment | + hdma->Init.Mode | hdma->Init.Priority; + + /* Write to DMA Channel CR register */ + hdma->Instance->CCR = tmp; + + /* Initialize DmaBaseAddress and ChannelIndex parameters used + by HAL_DMA_IRQHandler() and HAL_DMA_PollForTransfer() */ + DMA_CalcBaseAndBitshift(hdma); + + /* Initialise the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Initialize the DMA state*/ + hdma->State = HAL_DMA_STATE_READY; + + /* Allocate lock resource and initialize it */ + hdma->Lock = HAL_UNLOCKED; + + return HAL_OK; +} + +/** + * @brief DeInitialize the DMA peripheral + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma) +{ + /* Check the DMA handle allocation */ + if(NULL == hdma) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance)); + + /* Disable the selected DMA Channelx */ + hdma->Instance->CCR &= ~DMA_CCR_EN; + + /* Reset DMA Channel control register */ + hdma->Instance->CCR = 0U; + + /* Reset DMA Channel Number of Data to Transfer register */ + hdma->Instance->CNDTR = 0U; + + /* Reset DMA Channel peripheral address register */ + hdma->Instance->CPAR = 0U; + + /* Reset DMA Channel memory address register */ + hdma->Instance->CMAR = 0U; + + /* Get DMA Base Address */ + DMA_CalcBaseAndBitshift(hdma); + + /* Clear all flags */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_GL1 << hdma->ChannelIndex; + + /* Clean callbacks */ + hdma->XferCpltCallback = NULL; + hdma->XferHalfCpltCallback = NULL; + hdma->XferErrorCallback = NULL; + hdma->XferAbortCallback = NULL; + + /* Reset the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Reset the DMA state */ + hdma->State = HAL_DMA_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(hdma); + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup DMA_Exported_Functions_Group2 Input and Output operation functions + * @brief I/O operation functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure the source, destination address and data length and Start DMA transfer + (+) Configure the source, destination address and data length and + Start DMA transfer with interrupt + (+) Abort DMA transfer + (+) Poll for transfer complete + (+) Handle DMA interrupt request + +@endverbatim + * @{ + */ + +/** + * @brief Start the DMA Transfer. + * @param hdma : pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_DMA_BUFFER_SIZE(DataLength)); + + /* Process locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Disable the peripheral */ + hdma->Instance->CCR &= ~DMA_CCR_EN; + + /* Configure the source, destination address and the data length */ + DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength); + + /* Enable the Peripheral */ + hdma->Instance->CCR |= DMA_CCR_EN; + } + else + { + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + /* Remain BUSY */ + status = HAL_BUSY; + } + + return status; +} + +/** + * @brief Start the DMA Transfer with interrupt enabled. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_DMA_BUFFER_SIZE(DataLength)); + + /* Process locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Disable the peripheral */ + hdma->Instance->CCR &= ~DMA_CCR_EN; + + /* Configure the source, destination address and the data length */ + DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength); + + /* Enable the transfer complete, & transfer error interrupts */ + /* Half transfer interrupt is optional: enable it only if associated callback is available */ + if(NULL != hdma->XferHalfCpltCallback ) + { + hdma->Instance->CCR |= (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE); + } + else + { + hdma->Instance->CCR |= (DMA_IT_TC | DMA_IT_TE); + hdma->Instance->CCR &= ~DMA_IT_HT; + } + + /* Enable the Peripheral */ + hdma->Instance->CCR |= DMA_CCR_EN; + } + else + { + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + /* Remain BUSY */ + status = HAL_BUSY; + } + + return status; +} + +/** + * @brief Abort the DMA Transfer. + * @param hdma : pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma) +{ + if(hdma->State != HAL_DMA_STATE_BUSY) + { + /* no transfer ongoing */ + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_ERROR; + } + else + { + /* Disable DMA IT */ + hdma->Instance->CCR &= ~(DMA_IT_TC | DMA_IT_HT | DMA_IT_TE); + + /* Disable the channel */ + hdma->Instance->CCR &= ~DMA_CCR_EN; + + /* Clear all flags */ + hdma->DmaBaseAddress->IFCR = (DMA_FLAG_GL1 << hdma->ChannelIndex); + } + /* Change the DMA state*/ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_OK; +} + +/** + * @brief Abort the DMA Transfer in Interrupt mode. + * @param hdma : pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma) +{ + HAL_StatusTypeDef status = HAL_OK; + + if(HAL_DMA_STATE_BUSY != hdma->State) + { + /* no transfer ongoing */ + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + + status = HAL_ERROR; + } + else + { + + /* Disable DMA IT */ + hdma->Instance->CCR &= ~(DMA_IT_TC | DMA_IT_HT | DMA_IT_TE); + + /* Disable the channel */ + hdma->Instance->CCR &= ~DMA_CCR_EN; + + /* Clear all flags */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_GL1 << hdma->ChannelIndex; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + /* Call User Abort callback */ + if(hdma->XferAbortCallback != NULL) + { + hdma->XferAbortCallback(hdma); + } + } + return status; +} + +/** + * @brief Polling for transfer complete. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @param CompleteLevel Specifies the DMA level complete. + * @param Timeout Timeout duration. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout) +{ + uint32_t temp; + uint32_t tickstart = 0U; + + if(HAL_DMA_STATE_BUSY != hdma->State) + { + /* no transfer ongoing */ + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + __HAL_UNLOCK(hdma); + return HAL_ERROR; + } + + /* Polling mode not supported in circular mode */ + if (RESET != (hdma->Instance->CCR & DMA_CCR_CIRC)) + { + hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED; + return HAL_ERROR; + } + + /* Get the level transfer complete flag */ + if(HAL_DMA_FULL_TRANSFER == CompleteLevel) + { + /* Transfer Complete flag */ + temp = DMA_FLAG_TC1 << hdma->ChannelIndex; + } + else + { + /* Half Transfer Complete flag */ + temp = DMA_FLAG_HT1 << hdma->ChannelIndex; + } + + /* Get tick */ + tickstart = HAL_GetTick(); + + while(RESET == (hdma->DmaBaseAddress->ISR & temp)) + { + if(RESET != (hdma->DmaBaseAddress->ISR & (DMA_FLAG_TE1 << hdma->ChannelIndex))) + { + /* When a DMA transfer error occurs */ + /* A hardware clear of its EN bits is performed */ + /* Clear all flags */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_GL1 << hdma->ChannelIndex; + + /* Update error code */ + hdma->ErrorCode = HAL_DMA_ERROR_TE; + + /* Change the DMA state */ + hdma->State= HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_ERROR; + } + /* Check for the Timeout */ + if(Timeout != HAL_MAX_DELAY) + { + if((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) + { + /* Update error code */ + hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_ERROR; + } + } + } + + if(HAL_DMA_FULL_TRANSFER == CompleteLevel) + { + /* Clear the transfer complete flag */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_TC1 << hdma->ChannelIndex; + + /* The selected Channelx EN bit is cleared (DMA is disabled and + all transfers are complete) */ + hdma->State = HAL_DMA_STATE_READY; + } + else + { + /* Clear the half transfer complete flag */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_HT1 << hdma->ChannelIndex; + } + + /* Process unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_OK; +} + +/** + * @brief Handle DMA interrupt request. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval None + */ +void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma) +{ + uint32_t flag_it = hdma->DmaBaseAddress->ISR; + uint32_t source_it = hdma->Instance->CCR; + + /* Half Transfer Complete Interrupt management ******************************/ + if ((RESET != (flag_it & (DMA_FLAG_HT1 << hdma->ChannelIndex))) && (RESET != (source_it & DMA_IT_HT))) + { + /* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */ + if((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U) + { + /* Disable the half transfer interrupt */ + hdma->Instance->CCR &= ~DMA_IT_HT; + } + + /* Clear the half transfer complete flag */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_HT1 << hdma->ChannelIndex; + + /* DMA peripheral state is not updated in Half Transfer */ + /* State is updated only in Transfer Complete case */ + + if(hdma->XferHalfCpltCallback != NULL) + { + /* Half transfer callback */ + hdma->XferHalfCpltCallback(hdma); + } + } + + /* Transfer Complete Interrupt management ***********************************/ + else if ((RESET != (flag_it & (DMA_FLAG_TC1 << hdma->ChannelIndex))) && (RESET != (source_it & DMA_IT_TC))) + { + if((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U) + { + /* Disable the transfer complete & transfer error interrupts */ + /* if the DMA mode is not CIRCULAR */ + hdma->Instance->CCR &= ~(DMA_IT_TC | DMA_IT_TE); + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + } + + /* Clear the transfer complete flag */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_TC1 << hdma->ChannelIndex; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + if(hdma->XferCpltCallback != NULL) + { + /* Transfer complete callback */ + hdma->XferCpltCallback(hdma); + } + } + + /* Transfer Error Interrupt management ***************************************/ + else if (( RESET != (flag_it & (DMA_FLAG_TE1 << hdma->ChannelIndex))) && (RESET != (source_it & DMA_IT_TE))) + { + /* When a DMA transfer error occurs */ + /* A hardware clear of its EN bits is performed */ + /* Then, disable all DMA interrupts */ + hdma->Instance->CCR &= ~(DMA_IT_TC | DMA_IT_HT | DMA_IT_TE); + + /* Clear all flags */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_GL1 << hdma->ChannelIndex; + + /* Update error code */ + hdma->ErrorCode = HAL_DMA_ERROR_TE; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + if(hdma->XferErrorCallback != NULL) + { + /* Transfer error callback */ + hdma->XferErrorCallback(hdma); + } + } +} + +/** + * @brief Register callbacks + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param CallbackID User Callback identifer + * a HAL_DMA_CallbackIDTypeDef ENUM as parameter. + * @param pCallback pointer to private callback function which has pointer to + * a DMA_HandleTypeDef structure as parameter. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)( DMA_HandleTypeDef * _hdma)) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + switch (CallbackID) + { + case HAL_DMA_XFER_CPLT_CB_ID: + hdma->XferCpltCallback = pCallback; + break; + + case HAL_DMA_XFER_HALFCPLT_CB_ID: + hdma->XferHalfCpltCallback = pCallback; + break; + + case HAL_DMA_XFER_ERROR_CB_ID: + hdma->XferErrorCallback = pCallback; + break; + + case HAL_DMA_XFER_ABORT_CB_ID: + hdma->XferAbortCallback = pCallback; + break; + + default: + status = HAL_ERROR; + break; + } + } + else + { + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hdma); + + return status; +} + +/** + * @brief UnRegister callbacks + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param CallbackID User Callback identifer + * a HAL_DMA_CallbackIDTypeDef ENUM as parameter. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + switch (CallbackID) + { + case HAL_DMA_XFER_CPLT_CB_ID: + hdma->XferCpltCallback = NULL; + break; + + case HAL_DMA_XFER_HALFCPLT_CB_ID: + hdma->XferHalfCpltCallback = NULL; + break; + + case HAL_DMA_XFER_ERROR_CB_ID: + hdma->XferErrorCallback = NULL; + break; + + case HAL_DMA_XFER_ABORT_CB_ID: + hdma->XferAbortCallback = NULL; + break; + + case HAL_DMA_XFER_ALL_CB_ID: + hdma->XferCpltCallback = NULL; + hdma->XferHalfCpltCallback = NULL; + hdma->XferErrorCallback = NULL; + hdma->XferAbortCallback = NULL; + break; + + default: + status = HAL_ERROR; + break; + } + } + else + { + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hdma); + + return status; +} + +/** + * @} + */ + +/** @defgroup DMA_Exported_Functions_Group3 Peripheral State functions + * @brief Peripheral State functions + * +@verbatim + =============================================================================== + ##### State and Errors functions ##### + =============================================================================== + [..] + This subsection provides functions allowing to + (+) Check the DMA state + (+) Get error code + +@endverbatim + * @{ + */ + +/** + * @brief Returns the DMA state. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval HAL state + */ +HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma) +{ + return hdma->State; +} + +/** + * @brief Return the DMA error code + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval DMA Error Code + */ +uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma) +{ + return hdma->ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup DMA_Private_Functions + * @{ + */ + +/** + * @brief Set the DMA Transfer parameters. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) +{ + /* Clear all flags */ + hdma->DmaBaseAddress->IFCR = (DMA_FLAG_GL1 << hdma->ChannelIndex); + + /* Configure DMA Channel data length */ + hdma->Instance->CNDTR = DataLength; + + /* Peripheral to Memory */ + if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH) + { + /* Configure DMA Channel destination address */ + hdma->Instance->CPAR = DstAddress; + + /* Configure DMA Channel source address */ + hdma->Instance->CMAR = SrcAddress; + } + /* Memory to Peripheral */ + else + { + /* Configure DMA Channel source address */ + hdma->Instance->CPAR = SrcAddress; + + /* Configure DMA Channel destination address */ + hdma->Instance->CMAR = DstAddress; + } +} + +/** + * @brief Set the DMA base address and channel index depending on DMA instance + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval None + */ +static void DMA_CalcBaseAndBitshift(DMA_HandleTypeDef *hdma) +{ +#if defined (DMA2) + /* calculation of the channel index */ + if ((uint32_t)(hdma->Instance) < (uint32_t)(DMA2_Channel1)) + { + /* DMA1 */ + hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2U; + hdma->DmaBaseAddress = DMA1; + } + else + { + /* DMA2 */ + hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA2_Channel1) / ((uint32_t)DMA2_Channel2 - (uint32_t)DMA2_Channel1)) << 2U; + hdma->DmaBaseAddress = DMA2; + } +#else + /* calculation of the channel index */ + /* DMA1 */ + hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2U; + hdma->DmaBaseAddress = DMA1; +#endif +} + +/** + * @} + */ + +/** + * @} + */ +#endif /* HAL_DMA_MODULE_ENABLED */ + +/** + * @} + */ + + /** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_exti.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_exti.c new file mode 100644 index 0000000..3120041 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_exti.c @@ -0,0 +1,621 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_exti.c + * @author MCD Application Team + * @brief EXTI HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Extended Interrupts and events controller (EXTI) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + @verbatim + ============================================================================== + ##### EXTI Peripheral features ##### + ============================================================================== + [..] + (+) Each Exti line can be configured within this driver. + + (+) Exti line can be configured in 3 different modes + (++) Interrupt + (++) Event + (++) Both of them + + (+) Configurable Exti lines can be configured with 3 different triggers + (++) Rising + (++) Falling + (++) Both of them + + (+) When set in interrupt mode, configurable Exti lines have two different + interrupts pending registers which allow to distinguish which transition + occurs: + (++) Rising edge pending interrupt + (++) Falling + + (+) Exti lines 0 to 15 are linked to gpio pin number 0 to 15. Gpio port can + be selected through multiplexer. + + ##### How to use this driver ##### + ============================================================================== + [..] + + (#) Configure the EXTI line using HAL_EXTI_SetConfigLine(). + (++) Choose the interrupt line number by setting "Line" member from + EXTI_ConfigTypeDef structure. + (++) Configure the interrupt and/or event mode using "Mode" member from + EXTI_ConfigTypeDef structure. + (++) For configurable lines, configure rising and/or falling trigger + "Trigger" member from EXTI_ConfigTypeDef structure. + (++) For Exti lines linked to gpio, choose gpio port using "GPIOSel" + member from GPIO_InitTypeDef structure. + + (#) Get current Exti configuration of a dedicated line using + HAL_EXTI_GetConfigLine(). + (++) Provide exiting handle as parameter. + (++) Provide pointer on EXTI_ConfigTypeDef structure as second parameter. + + (#) Clear Exti configuration of a dedicated line using HAL_EXTI_GetConfigLine(). + (++) Provide exiting handle as parameter. + + (#) Register callback to treat Exti interrupts using HAL_EXTI_RegisterCallback(). + (++) Provide exiting handle as first parameter. + (++) Provide which callback will be registered using one value from + EXTI_CallbackIDTypeDef. + (++) Provide callback function pointer. + + (#) Get interrupt pending bit using HAL_EXTI_GetPending(). + + (#) Clear interrupt pending bit using HAL_EXTI_GetPending(). + + (#) Generate software interrupt using HAL_EXTI_GenerateSWI(). + + @endverbatim + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2019 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @addtogroup EXTI + * @{ + */ +/** MISRA C:2012 deviation rule has been granted for following rule: + * Rule-18.1_b - Medium: Array `EXTICR' 1st subscript interval [0,7] may be out + * of bounds [0,3] in following API : + * HAL_EXTI_SetConfigLine + * HAL_EXTI_GetConfigLine + * HAL_EXTI_ClearConfigLine + */ + +#ifdef HAL_EXTI_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private defines -----------------------------------------------------------*/ +/** @defgroup EXTI_Private_Constants EXTI Private Constants + * @{ + */ +#define EXTI_MODE_OFFSET 0x08u /* 0x20: offset between CPU IMR/EMR registers */ +#define EXTI_CONFIG_OFFSET 0x08u /* 0x20: offset between CPU Rising/Falling configuration registers */ +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @addtogroup EXTI_Exported_Functions + * @{ + */ + +/** @addtogroup EXTI_Exported_Functions_Group1 + * @brief Configuration functions + * +@verbatim + =============================================================================== + ##### Configuration functions ##### + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Set configuration of a dedicated Exti line. + * @param hexti Exti handle. + * @param pExtiConfig Pointer on EXTI configuration to be set. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig) +{ + __IO uint32_t *regaddr; + uint32_t regval; + uint32_t linepos; + uint32_t maskline; + uint32_t offset; + + /* Check null pointer */ + if ((hexti == NULL) || (pExtiConfig == NULL)) + { + return HAL_ERROR; + } + + /* Check parameters */ + assert_param(IS_EXTI_LINE(pExtiConfig->Line)); + assert_param(IS_EXTI_MODE(pExtiConfig->Mode)); + + /* Assign line number to handle */ + hexti->Line = pExtiConfig->Line; + + /* Compute line register offset and line mask */ + offset = ((pExtiConfig->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT); + linepos = (pExtiConfig->Line & EXTI_PIN_MASK); + maskline = (1uL << linepos); + + /* Configure triggers for configurable lines */ + if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u) + { + assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger)); + + /* Configure rising trigger */ + regaddr = (&EXTI->RTSR + (EXTI_CONFIG_OFFSET * offset)); + regval = *regaddr; + + /* Mask or set line */ + if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0x00u) + { + regval |= maskline; + } + else + { + regval &= ~maskline; + } + + /* Store rising trigger mode */ + *regaddr = regval; + + /* Configure falling trigger */ + regaddr = (&EXTI->FTSR + (EXTI_CONFIG_OFFSET * offset)); + regval = *regaddr; + + /* Mask or set line */ + if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0x00u) + { + regval |= maskline; + } + else + { + regval &= ~maskline; + } + + /* Store falling trigger mode */ + *regaddr = regval; + + /* Configure gpio port selection in case of gpio exti line */ + if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO) + { + assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->GPIOSel)); + assert_param(IS_EXTI_GPIO_PIN(linepos)); + + regval = SYSCFG->EXTICR[linepos >> 2u]; + regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u))); + regval |= (pExtiConfig->GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u))); + SYSCFG->EXTICR[linepos >> 2u] = regval; + } + } + + /* Configure interrupt mode : read current mode */ + regaddr = (&EXTI->IMR + (EXTI_MODE_OFFSET * offset)); + regval = *regaddr; + + /* Mask or set line */ + if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0x00u) + { + regval |= maskline; + } + else + { + regval &= ~maskline; + } + + /* Store interrupt mode */ + *regaddr = regval; + + /* Configure event mode : read current mode */ + regaddr = (&EXTI->EMR + (EXTI_MODE_OFFSET * offset)); + regval = *regaddr; + + /* Mask or set line */ + if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0x00u) + { + regval |= maskline; + } + else + { + regval &= ~maskline; + } + + /* Store event mode */ + *regaddr = regval; + + return HAL_OK; +} + +/** + * @brief Get configuration of a dedicated Exti line. + * @param hexti Exti handle. + * @param pExtiConfig Pointer on structure to store Exti configuration. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig) +{ + __IO uint32_t *regaddr; + uint32_t regval; + uint32_t linepos; + uint32_t maskline; + uint32_t offset; + + /* Check null pointer */ + if ((hexti == NULL) || (pExtiConfig == NULL)) + { + return HAL_ERROR; + } + + /* Check the parameter */ + assert_param(IS_EXTI_LINE(hexti->Line)); + + /* Store handle line number to configuration structure */ + pExtiConfig->Line = hexti->Line; + + /* compute line register offset and line mask */ + offset = ((pExtiConfig->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT); + linepos = (pExtiConfig->Line & EXTI_PIN_MASK); + maskline = (1uL << linepos); + + /* 1] Get core mode : interrupt */ + regaddr = (&EXTI->IMR + (EXTI_MODE_OFFSET * offset)); + regval = *regaddr; + + /* Check if selected line is enable */ + if ((regval & maskline) != 0x00u) + { + pExtiConfig->Mode = EXTI_MODE_INTERRUPT; + } + else + { + pExtiConfig->Mode = EXTI_MODE_NONE; + } + + /* Get event mode */ + regaddr = (&EXTI->EMR + (EXTI_MODE_OFFSET * offset)); + regval = *regaddr; + + /* Check if selected line is enable */ + if ((regval & maskline) != 0x00u) + { + pExtiConfig->Mode |= EXTI_MODE_EVENT; + } + + /* Get default Trigger and GPIOSel configuration */ + pExtiConfig->Trigger = EXTI_TRIGGER_NONE; + pExtiConfig->GPIOSel = 0x00u; + + /* 2] Get trigger for configurable lines : rising */ + if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u) + { + regaddr = (&EXTI->RTSR + (EXTI_CONFIG_OFFSET * offset)); + regval = *regaddr; + + /* Check if configuration of selected line is enable */ + if ((regval & maskline) != 0x00u) + { + pExtiConfig->Trigger = EXTI_TRIGGER_RISING; + } + + /* Get falling configuration */ + regaddr = (&EXTI->FTSR + (EXTI_CONFIG_OFFSET * offset)); + regval = *regaddr; + + /* Check if configuration of selected line is enable */ + if ((regval & maskline) != 0x00u) + { + pExtiConfig->Trigger |= EXTI_TRIGGER_FALLING; + } + + /* Get Gpio port selection for gpio lines */ + if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO) + { + assert_param(IS_EXTI_GPIO_PIN(linepos)); + + regval = SYSCFG->EXTICR[linepos >> 2u]; + pExtiConfig->GPIOSel = ((regval << (SYSCFG_EXTICR1_EXTI1_Pos * (3uL - (linepos & 0x03u)))) >> 24); + } + } + + return HAL_OK; +} + +/** + * @brief Clear whole configuration of a dedicated Exti line. + * @param hexti Exti handle. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti) +{ + __IO uint32_t *regaddr; + uint32_t regval; + uint32_t linepos; + uint32_t maskline; + uint32_t offset; + + /* Check null pointer */ + if (hexti == NULL) + { + return HAL_ERROR; + } + + /* Check the parameter */ + assert_param(IS_EXTI_LINE(hexti->Line)); + + /* compute line register offset and line mask */ + offset = ((hexti->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT); + linepos = (hexti->Line & EXTI_PIN_MASK); + maskline = (1uL << linepos); + + /* 1] Clear interrupt mode */ + regaddr = (&EXTI->IMR + (EXTI_MODE_OFFSET * offset)); + regval = (*regaddr & ~maskline); + *regaddr = regval; + + /* 2] Clear event mode */ + regaddr = (&EXTI->EMR + (EXTI_MODE_OFFSET * offset)); + regval = (*regaddr & ~maskline); + *regaddr = regval; + + /* 3] Clear triggers in case of configurable lines */ + if ((hexti->Line & EXTI_CONFIG) != 0x00u) + { + regaddr = (&EXTI->RTSR + (EXTI_CONFIG_OFFSET * offset)); + regval = (*regaddr & ~maskline); + *regaddr = regval; + + regaddr = (&EXTI->FTSR + (EXTI_CONFIG_OFFSET * offset)); + regval = (*regaddr & ~maskline); + *regaddr = regval; + + /* Get Gpio port selection for gpio lines */ + if ((hexti->Line & EXTI_GPIO) == EXTI_GPIO) + { + assert_param(IS_EXTI_GPIO_PIN(linepos)); + + regval = SYSCFG->EXTICR[linepos >> 2u]; + regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u))); + SYSCFG->EXTICR[linepos >> 2u] = regval; + } + } + + return HAL_OK; +} + +/** + * @brief Register callback for a dedicated Exti line. + * @param hexti Exti handle. + * @param CallbackID User callback identifier. + * This parameter can be one of @arg @ref EXTI_CallbackIDTypeDef values. + * @param pPendingCbfn function pointer to be stored as callback. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID, void (*pPendingCbfn)(void)) +{ + HAL_StatusTypeDef status = HAL_OK; + + switch (CallbackID) + { + case HAL_EXTI_COMMON_CB_ID: + hexti->PendingCallback = pPendingCbfn; + break; + + default: + status = HAL_ERROR; + break; + } + + return status; +} + +/** + * @brief Store line number as handle private field. + * @param hexti Exti handle. + * @param ExtiLine Exti line number. + * This parameter can be from 0 to @ref EXTI_LINE_NB. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine) +{ + /* Check the parameters */ + assert_param(IS_EXTI_LINE(ExtiLine)); + + /* Check null pointer */ + if (hexti == NULL) + { + return HAL_ERROR; + } + else + { + /* Store line number as handle private field */ + hexti->Line = ExtiLine; + + return HAL_OK; + } +} + +/** + * @} + */ + +/** @addtogroup EXTI_Exported_Functions_Group2 + * @brief EXTI IO functions. + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Handle EXTI interrupt request. + * @param hexti Exti handle. + * @retval none. + */ +void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti) +{ + __IO uint32_t *regaddr; + uint32_t regval; + uint32_t maskline; + uint32_t offset; + + /* Compute line register offset and line mask */ + offset = ((hexti->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT); + maskline = (1uL << (hexti->Line & EXTI_PIN_MASK)); + + /* Get pending bit */ + regaddr = (&EXTI->PR + (EXTI_CONFIG_OFFSET * offset)); + regval = (*regaddr & maskline); + + if (regval != 0x00u) + { + /* Clear pending bit */ + EXTI->PR = maskline; + + /* Call callback */ + if (hexti->PendingCallback != NULL) + { + hexti->PendingCallback(); + } + } +} + +/** + * @brief Get interrupt pending bit of a dedicated line. + * @param hexti Exti handle. + * @param Edge Specify which pending edge as to be checked. + * This parameter can be one of the following values: + * @arg @ref EXTI_TRIGGER_RISING_FALLING + * This parameter is kept for compatibility with other series. + * @retval 1 if interrupt is pending else 0. + */ +uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge) +{ + __IO uint32_t *regaddr; + uint32_t regval; + uint32_t linepos; + uint32_t maskline; + uint32_t offset; + + /* Check parameters */ + assert_param(IS_EXTI_LINE(hexti->Line)); + assert_param(IS_EXTI_CONFIG_LINE(hexti->Line)); + assert_param(IS_EXTI_PENDING_EDGE(Edge)); + + /* compute line register offset and line mask */ + offset = ((hexti->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT); + linepos = (hexti->Line & EXTI_PIN_MASK); + maskline = (1uL << linepos); + + /* Get pending bit */ + regaddr = (&EXTI->PR + (EXTI_CONFIG_OFFSET * offset)); + /* return 1 if bit is set else 0 */ + regval = ((*regaddr & maskline) >> linepos); + return regval; +} + +/** + * @brief Clear interrupt pending bit of a dedicated line. + * @param hexti Exti handle. + * @param Edge Specify which pending edge as to be clear. + * This parameter can be one of the following values: + * @arg @ref EXTI_TRIGGER_RISING_FALLING + * This parameter is kept for compatibility with other series. + * @retval None. + */ +void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge) +{ + __IO uint32_t *regaddr; + uint32_t maskline; + uint32_t offset; + + /* Check parameters */ + assert_param(IS_EXTI_LINE(hexti->Line)); + assert_param(IS_EXTI_CONFIG_LINE(hexti->Line)); + assert_param(IS_EXTI_PENDING_EDGE(Edge)); + + /* compute line register offset and line mask */ + offset = ((hexti->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT); + maskline = (1uL << (hexti->Line & EXTI_PIN_MASK)); + + /* Get pending bit */ + regaddr = (&EXTI->PR + (EXTI_CONFIG_OFFSET * offset)); + + /* Clear Pending bit */ + *regaddr = maskline; +} + +/** + * @brief Generate a software interrupt for a dedicated line. + * @param hexti Exti handle. + * @retval None. + */ +void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti) +{ + __IO uint32_t *regaddr; + uint32_t maskline; + uint32_t offset; + + /* Check parameters */ + assert_param(IS_EXTI_LINE(hexti->Line)); + assert_param(IS_EXTI_CONFIG_LINE(hexti->Line)); + + /* compute line register offset and line mask */ + offset = ((hexti->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT); + maskline = (1uL << (hexti->Line & EXTI_PIN_MASK)); + + regaddr = (&EXTI->SWIER + (EXTI_CONFIG_OFFSET * offset)); + *regaddr = maskline; +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_EXTI_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_flash.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_flash.c new file mode 100644 index 0000000..6da1eca --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_flash.c @@ -0,0 +1,695 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_flash.c + * @author MCD Application Team + * @brief FLASH HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the internal FLASH memory: + * + Program operations functions + * + Memory Control functions + * + Peripheral State functions + * + @verbatim + ============================================================================== + ##### FLASH peripheral features ##### + ============================================================================== + [..] The Flash memory interface manages CPU AHB I-Code and D-Code accesses + to the Flash memory. It implements the erase and program Flash memory operations + and the read and write protection mechanisms. + + [..] The Flash memory interface accelerates code execution with a system of instruction + prefetch. + + [..] The FLASH main features are: + (+) Flash memory read operations + (+) Flash memory program/erase operations + (+) Read / write protections + (+) Prefetch on I-Code + (+) Option Bytes programming + + + ##### How to use this driver ##### + ============================================================================== + [..] + This driver provides functions and macros to configure and program the FLASH + memory of all STM32F3xx devices. + + (#) FLASH Memory I/O Programming functions: this group includes all needed + functions to erase and program the main memory: + (++) Lock and Unlock the FLASH interface + (++) Erase function: Erase page, erase all pages + (++) Program functions: half word, word and doubleword + (#) FLASH Option Bytes Programming functions: this group includes all needed + functions to manage the Option Bytes: + (++) Lock and Unlock the Option Bytes + (++) Set/Reset the write protection + (++) Set the Read protection Level + (++) Program the user Option Bytes + (++) Launch the Option Bytes loader + (++) Erase Option Bytes + (++) Program the data Option Bytes + (++) Get the Write protection. + (++) Get the user option bytes. + + (#) Interrupts and flags management functions : this group + includes all needed functions to: + (++) Handle FLASH interrupts + (++) Wait for last FLASH operation according to its status + (++) Get error flag status + + [..] In addition to these function, this driver includes a set of macros allowing + to handle the following operations: + + (+) Set/Get the latency + (+) Enable/Disable the prefetch buffer + (+) Enable/Disable the half cycle access + (+) Enable/Disable the FLASH interrupts + (+) Monitor the FLASH flags status + + @endverbatim + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +#ifdef HAL_FLASH_MODULE_ENABLED + +/** @defgroup FLASH FLASH + * @brief FLASH HAL module driver + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup FLASH_Private_Constants FLASH Private Constants + * @{ + */ +/** + * @} + */ + +/* Private macro ---------------------------- ---------------------------------*/ +/** @defgroup FLASH_Private_Macros FLASH Private Macros + * @{ + */ + +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/** @defgroup FLASH_Private_Variables FLASH Private Variables + * @{ + */ +/* Variables used for Erase pages under interruption*/ +FLASH_ProcessTypeDef pFlash; +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup FLASH_Private_Functions FLASH Private Functions + * @{ + */ +static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data); +static void FLASH_SetErrorCode(void); +extern void FLASH_PageErase(uint32_t PageAddress); +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Functions FLASH Exported Functions + * @{ + */ + +/** @defgroup FLASH_Exported_Functions_Group1 Programming operation functions + * @brief Programming operation functions + * +@verbatim +@endverbatim + * @{ + */ + +/** + * @brief Program halfword, word or double word at a specified address + * @note The function HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function HAL_FLASH_Lock() should be called after to lock the FLASH interface + * + * @note If an erase and a program operations are requested simultaneously, + * the erase operation is performed before the program one. + * + * @note FLASH should be previously erased before new programming (only exception to this + * is when 0x0000 is programmed) + * + * @param TypeProgram Indicate the way to program at a specified address. + * This parameter can be a value of @ref FLASH_Type_Program + * @param Address Specifie the address to be programmed. + * @param Data Specifie the data to be programmed + * + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data) +{ + HAL_StatusTypeDef status = HAL_ERROR; + uint8_t index = 0U; + uint8_t nbiterations = 0U; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram)); + assert_param(IS_FLASH_PROGRAM_ADDRESS(Address)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + if(TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) + { + /* Program halfword (16-bit) at a specified address. */ + nbiterations = 1U; + } + else if(TypeProgram == FLASH_TYPEPROGRAM_WORD) + { + /* Program word (32-bit = 2*16-bit) at a specified address. */ + nbiterations = 2U; + } + else + { + /* Program double word (64-bit = 4*16-bit) at a specified address. */ + nbiterations = 4U; + } + + for (index = 0U; index < nbiterations; index++) + { + FLASH_Program_HalfWord((Address + (2U*index)), (uint16_t)(Data >> (16U*index))); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE); + + /* If the program operation is completed, disable the PG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PG); + /* In case of error, stop programming procedure */ + if (status != HAL_OK) + { + break; + } + } + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + +/** + * @brief Program halfword, word or double word at a specified address with interrupt enabled. + * @note The function HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function HAL_FLASH_Lock() should be called after to lock the FLASH interface + * + * @note If an erase and a program operations are requested simultaneously, + * the erase operation is performed before the program one. + * + * @param TypeProgram Indicate the way to program at a specified address. + * This parameter can be a value of @ref FLASH_Type_Program + * @param Address Specifie the address to be programmed. + * @param Data Specifie the data to be programmed + * + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram)); + assert_param(IS_FLASH_PROGRAM_ADDRESS(Address)); + + /* Enable End of FLASH Operation and Error source interrupts */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR); + + pFlash.Address = Address; + pFlash.Data = Data; + + if(TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) + { + pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMHALFWORD; + /* Program halfword (16-bit) at a specified address. */ + pFlash.DataRemaining = 1U; + } + else if(TypeProgram == FLASH_TYPEPROGRAM_WORD) + { + pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMWORD; + /* Program word (32-bit : 2*16-bit) at a specified address. */ + pFlash.DataRemaining = 2U; + } + else + { + pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMDOUBLEWORD; + /* Program double word (64-bit : 4*16-bit) at a specified address. */ + pFlash.DataRemaining = 4U; + } + + /* Program halfword (16-bit) at a specified address. */ + FLASH_Program_HalfWord(Address, (uint16_t)Data); + + return status; +} + +/** + * @brief This function handles FLASH interrupt request. + * @retval None + */ +void HAL_FLASH_IRQHandler(void) +{ + uint32_t addresstmp = 0U; + + /* Check FLASH operation error flags */ + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) ||__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR)) + { + /* Return the faulty address */ + addresstmp = pFlash.Address; + /* Reset address */ + pFlash.Address = 0xFFFFFFFFU; + + /* Save the Error code */ + FLASH_SetErrorCode(); + + /* FLASH error interrupt user callback */ + HAL_FLASH_OperationErrorCallback(addresstmp); + + /* Stop the procedure ongoing */ + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + } + + /* Check FLASH End of Operation flag */ + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)) + { + /* Clear FLASH End of Operation pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); + + /* Process can continue only if no error detected */ + if(pFlash.ProcedureOnGoing != FLASH_PROC_NONE) + { + if(pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) + { + /* Nb of pages to erased can be decreased */ + pFlash.DataRemaining--; + + /* Check if there are still pages to erase */ + if(pFlash.DataRemaining != 0U) + { + addresstmp = pFlash.Address; + /*Indicate user which sector has been erased */ + HAL_FLASH_EndOfOperationCallback(addresstmp); + + /*Increment sector number*/ + addresstmp = pFlash.Address + FLASH_PAGE_SIZE; + pFlash.Address = addresstmp; + + /* If the erase operation is completed, disable the PER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PER); + + FLASH_PageErase(addresstmp); + } + else + { + /* No more pages to Erase, user callback can be called. */ + /* Reset Sector and stop Erase pages procedure */ + pFlash.Address = addresstmp = 0xFFFFFFFFU; + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + /* FLASH EOP interrupt user callback */ + HAL_FLASH_EndOfOperationCallback(addresstmp); + } + } + else if(pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) + { + /* Operation is completed, disable the MER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_MER); + + /* MassErase ended. Return the selected bank */ + /* FLASH EOP interrupt user callback */ + HAL_FLASH_EndOfOperationCallback(0U); + + /* Stop Mass Erase procedure*/ + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + } + else + { + /* Nb of 16-bit data to program can be decreased */ + pFlash.DataRemaining--; + + /* Check if there are still 16-bit data to program */ + if(pFlash.DataRemaining != 0U) + { + /* Increment address to 16-bit */ + pFlash.Address += 2U; + addresstmp = pFlash.Address; + + /* Shift to have next 16-bit data */ + pFlash.Data = (pFlash.Data >> 16U); + + /* Operation is completed, disable the PG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PG); + + /*Program halfword (16-bit) at a specified address.*/ + FLASH_Program_HalfWord(addresstmp, (uint16_t)pFlash.Data); + } + else + { + /* Program ended. Return the selected address */ + /* FLASH EOP interrupt user callback */ + if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMHALFWORD) + { + HAL_FLASH_EndOfOperationCallback(pFlash.Address); + } + else if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMWORD) + { + HAL_FLASH_EndOfOperationCallback(pFlash.Address - 2U); + } + else + { + HAL_FLASH_EndOfOperationCallback(pFlash.Address - 6U); + } + + /* Reset Address and stop Program procedure */ + pFlash.Address = 0xFFFFFFFFU; + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + } + } + } + } + + + if(pFlash.ProcedureOnGoing == FLASH_PROC_NONE) + { + /* Operation is completed, disable the PG, PER and MER Bits */ + CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_PER | FLASH_CR_MER)); + + /* Disable End of FLASH Operation and Error source interrupts */ + __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR); + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + } +} + +/** + * @brief FLASH end of operation interrupt callback + * @param ReturnValue The value saved in this parameter depends on the ongoing procedure + * - Mass Erase: No return value expected + * - Pages Erase: Address of the page which has been erased + * (if 0xFFFFFFFF, it means that all the selected pages have been erased) + * - Program: Address which was selected for data program + * @retval none + */ +__weak void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(ReturnValue); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_FLASH_EndOfOperationCallback could be implemented in the user file + */ +} + +/** + * @brief FLASH operation error interrupt callback + * @param ReturnValue The value saved in this parameter depends on the ongoing procedure + * - Mass Erase: No return value expected + * - Pages Erase: Address of the page which returned an error + * - Program: Address which was selected for data program + * @retval none + */ +__weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(ReturnValue); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_FLASH_OperationErrorCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup FLASH_Exported_Functions_Group2 Peripheral Control functions + * @brief management functions + * +@verbatim + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the FLASH + memory operations. + +@endverbatim + * @{ + */ + +/** + * @brief Unlock the FLASH control register access + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Unlock(void) +{ + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + /* Authorize the FLASH Registers access */ + WRITE_REG(FLASH->KEYR, FLASH_KEY1); + WRITE_REG(FLASH->KEYR, FLASH_KEY2); + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } + } + + return status; +} + +/** + * @brief Locks the FLASH control register access + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Lock(void) +{ + /* Set the LOCK Bit to lock the FLASH Registers access */ + SET_BIT(FLASH->CR, FLASH_CR_LOCK); + + return HAL_OK; +} + +/** + * @brief Unlock the FLASH Option Control Registers access. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void) +{ + if (HAL_IS_BIT_CLR(FLASH->CR, FLASH_CR_OPTWRE)) + { + /* Authorizes the Option Byte register programming */ + WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY1); + WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY2); + } + else + { + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @brief Lock the FLASH Option Control Registers access. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_OB_Lock(void) +{ + /* Clear the OPTWRE Bit to lock the FLASH Option Byte Registers access */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTWRE); + + return HAL_OK; +} + +/** + * @brief Launch the option byte loading. + * @note This function will reset automatically the MCU. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_OB_Launch(void) +{ + /* Set the OBL_Launch bit to launch the option byte loading */ + SET_BIT(FLASH->CR, FLASH_CR_OBL_LAUNCH); + + /* Wait for last operation to be completed */ + return(FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE)); +} + +/** + * @} + */ + +/** @defgroup FLASH_Exported_Functions_Group3 Peripheral errors functions + * @brief Peripheral errors functions + * +@verbatim + =============================================================================== + ##### Peripheral Errors functions ##### + =============================================================================== + [..] + This subsection permit to get in run-time errors of the FLASH peripheral. + +@endverbatim + * @{ + */ + +/** + * @brief Get the specific FLASH error flag. + * @retval FLASH_ErrorCode The returned value can be: + * @ref FLASH_Error_Codes + */ +uint32_t HAL_FLASH_GetError(void) +{ + return pFlash.ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup FLASH_Private_Functions + * @{ + */ + +/** + * @brief Program a half-word (16-bit) at a specified address. + * @param Address specify the address to be programmed. + * @param Data specify the data to be programmed. + * @retval None + */ +static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data) +{ + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* Proceed to program the new data */ + SET_BIT(FLASH->CR, FLASH_CR_PG); + + /* Write data in the address */ + *(__IO uint16_t*)Address = Data; +} + +/** + * @brief Wait for a FLASH operation to complete. + * @param Timeout maximum flash operation timeout + * @retval HAL Status + */ +HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout) +{ + /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset. + Even if the FLASH operation fails, the BUSY flag will be reset and an error + flag will be set */ + + uint32_t tickstart = HAL_GetTick(); + + while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) + { + if (Timeout != HAL_MAX_DELAY) + { + if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) + { + return HAL_TIMEOUT; + } + } + } + + /* Check FLASH End of Operation flag */ + if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)) + { + /* Clear FLASH End of Operation pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); + } + + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) || + __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR)) + { + /*Save the error code*/ + FLASH_SetErrorCode(); + return HAL_ERROR; + } + + /* There is no error flag set */ + return HAL_OK; +} + + +/** + * @brief Set the specific FLASH error flag. + * @retval None + */ +static void FLASH_SetErrorCode(void) +{ + uint32_t flags = 0U; + + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR)) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_WRP; + flags |= FLASH_FLAG_WRPERR; + } + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR)) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_PROG; + flags |= FLASH_FLAG_PGERR; + } + /* Clear FLASH error pending bits */ + __HAL_FLASH_CLEAR_FLAG(flags); +} +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_FLASH_MODULE_ENABLED */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_flash_ex.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_flash_ex.c new file mode 100644 index 0000000..4364751 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_flash_ex.c @@ -0,0 +1,983 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_flash_ex.c + * @author MCD Application Team + * @brief Extended FLASH HAL module driver. + * + * This file provides firmware functions to manage the following + * functionalities of the FLASH peripheral: + * + Extended Initialization/de-initialization functions + * + Extended I/O operation functions + * + Extended Peripheral Control functions + * + @verbatim + ============================================================================== + ##### Flash peripheral extended features ##### + ============================================================================== + + ##### How to use this driver ##### + ============================================================================== + [..] This driver provides functions to configure and program the FLASH memory + of all STM32F3xxx devices. It includes + + (++) Set/Reset the write protection + (++) Program the user Option Bytes + (++) Get the Read protection Level + + @endverbatim + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ +#ifdef HAL_FLASH_MODULE_ENABLED + +/** @addtogroup FLASH + * @{ + */ +/** @addtogroup FLASH_Private_Variables + * @{ + */ +/* Variables used for Erase pages under interruption*/ +extern FLASH_ProcessTypeDef pFlash; +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup FLASHEx FLASHEx + * @brief FLASH HAL Extension module driver + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup FLASHEx_Private_Constants FLASHEx Private Constants + * @{ + */ +#define FLASH_POSITION_IWDGSW_BIT (uint32_t)POSITION_VAL(FLASH_OBR_IWDG_SW) +#define FLASH_POSITION_OB_USERDATA0_BIT (uint32_t)POSITION_VAL(FLASH_OBR_DATA0) +#define FLASH_POSITION_OB_USERDATA1_BIT (uint32_t)POSITION_VAL(FLASH_OBR_DATA1) +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/** @defgroup FLASHEx_Private_Macros FLASHEx Private Macros + * @{ + */ +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup FLASHEx_Private_Functions FLASHEx Private Functions + * @{ + */ +/* Erase operations */ +static void FLASH_MassErase(void); +void FLASH_PageErase(uint32_t PageAddress); + +/* Option bytes control */ +static HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WriteProtectPage); +static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WriteProtectPage); +static HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t ReadProtectLevel); +static HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t UserConfig); +static HAL_StatusTypeDef FLASH_OB_ProgramData(uint32_t Address, uint8_t Data); +static uint32_t FLASH_OB_GetWRP(void); +static uint32_t FLASH_OB_GetRDP(void); +static uint8_t FLASH_OB_GetUser(void); + +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ +/** @defgroup FLASHEx_Exported_Functions FLASHEx Exported Functions + * @{ + */ + +/** @defgroup FLASHEx_Exported_Functions_Group1 FLASHEx Memory Erasing functions + * @brief FLASH Memory Erasing functions + * +@verbatim + ============================================================================== + ##### FLASH Erasing Programming functions ##### + ============================================================================== + + [..] The FLASH Memory Erasing functions, includes the following functions: + (+) HAL_FLASHEx_Erase: return only when erase has been done + (+) HAL_FLASHEx_Erase_IT: end of erase is done when HAL_FLASH_EndOfOperationCallback + is called with parameter 0xFFFFFFFF + + [..] Any operation of erase should follow these steps: + (#) Call the HAL_FLASH_Unlock() function to enable the flash control register and + program memory access. + (#) Call the desired function to erase page. + (#) Call the HAL_FLASH_Lock() to disable the flash program memory access + (recommended to protect the FLASH memory against possible unwanted operation). + +@endverbatim + * @{ + */ + + +/** + * @brief Perform a mass erase or erase the specified FLASH memory pages + * @note To correctly run this function, the @ref HAL_FLASH_Unlock() function + * must be called before. + * Call the @ref HAL_FLASH_Lock() to disable the flash memory access + * (recommended to protect the FLASH memory against possible unwanted operation) + * @param[in] pEraseInit pointer to an FLASH_EraseInitTypeDef structure that + * contains the configuration information for the erasing. + * + * @param[out] PageError pointer to variable that + * contains the configuration information on faulty page in case of error + * (0xFFFFFFFF means that all the pages have been correctly erased) + * + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError) +{ + HAL_StatusTypeDef status = HAL_ERROR; + uint32_t address = 0U; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase)); + + if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) + { + /* Mass Erase requested for Bank1 */ + /* Wait for last operation to be completed */ + if (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) + { + /*Mass erase to be done*/ + FLASH_MassErase(); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the MER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_MER); + } + } + else + { + /* Page Erase is requested */ + /* Check the parameters */ + assert_param(IS_FLASH_PROGRAM_ADDRESS(pEraseInit->PageAddress)); + assert_param(IS_FLASH_NB_PAGES(pEraseInit->PageAddress, pEraseInit->NbPages)); + + /* Page Erase requested on address located on bank1 */ + /* Wait for last operation to be completed */ + if (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) + { + /*Initialization of PageError variable*/ + *PageError = 0xFFFFFFFFU; + + /* Erase page by page to be done*/ + for(address = pEraseInit->PageAddress; + address < ((pEraseInit->NbPages * FLASH_PAGE_SIZE) + pEraseInit->PageAddress); + address += FLASH_PAGE_SIZE) + { + FLASH_PageErase(address); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the PER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PER); + + if (status != HAL_OK) + { + /* In case of error, stop erase procedure and return the faulty address */ + *PageError = address; + break; + } + } + } + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + +/** + * @brief Perform a mass erase or erase the specified FLASH memory pages with interrupt enabled + * @note To correctly run this function, the @ref HAL_FLASH_Unlock() function + * must be called before. + * Call the @ref HAL_FLASH_Lock() to disable the flash memory access + * (recommended to protect the FLASH memory against possible unwanted operation) + * @param pEraseInit pointer to an FLASH_EraseInitTypeDef structure that + * contains the configuration information for the erasing. + * + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* If procedure already ongoing, reject the next one */ + if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase)); + + /* Enable End of FLASH Operation and Error source interrupts */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR); + + if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) + { + /*Mass erase to be done*/ + pFlash.ProcedureOnGoing = FLASH_PROC_MASSERASE; + FLASH_MassErase(); + } + else + { + /* Erase by page to be done*/ + + /* Check the parameters */ + assert_param(IS_FLASH_PROGRAM_ADDRESS(pEraseInit->PageAddress)); + assert_param(IS_FLASH_NB_PAGES(pEraseInit->PageAddress, pEraseInit->NbPages)); + + pFlash.ProcedureOnGoing = FLASH_PROC_PAGEERASE; + pFlash.DataRemaining = pEraseInit->NbPages; + pFlash.Address = pEraseInit->PageAddress; + + /*Erase 1st page and wait for IT*/ + FLASH_PageErase(pEraseInit->PageAddress); + } + + return status; +} + +/** + * @} + */ + +/** @defgroup FLASHEx_Exported_Functions_Group2 Option Bytes Programming functions + * @brief Option Bytes Programming functions + * +@verbatim + ============================================================================== + ##### Option Bytes Programming functions ##### + ============================================================================== + [..] + This subsection provides a set of functions allowing to control the FLASH + option bytes operations. + +@endverbatim + * @{ + */ + +/** + * @brief Erases the FLASH option bytes. + * @note This functions erases all option bytes except the Read protection (RDP). + * The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes + * The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes + * (system reset will occur) + * @retval HAL status + */ + +HAL_StatusTypeDef HAL_FLASHEx_OBErase(void) +{ + uint8_t rdptmp = OB_RDP_LEVEL_0; + HAL_StatusTypeDef status = HAL_ERROR; + + /* Get the actual read protection Option Byte value */ + rdptmp = FLASH_OB_GetRDP(); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* If the previous operation is completed, proceed to erase the option bytes */ + SET_BIT(FLASH->CR, FLASH_CR_OPTER); + SET_BIT(FLASH->CR, FLASH_CR_STRT); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the OPTER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTER); + + if(status == HAL_OK) + { + /* Restore the last read protection Option Byte value */ + status = FLASH_OB_RDP_LevelConfig(rdptmp); + } + } + + /* Return the erase status */ + return status; +} + +/** + * @brief Program option bytes + * @note The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes + * The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes + * (system reset will occur) + * + * @param pOBInit pointer to an FLASH_OBInitStruct structure that + * contains the configuration information for the programming. + * + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit) +{ + HAL_StatusTypeDef status = HAL_ERROR; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_OPTIONBYTE(pOBInit->OptionType)); + + /* Write protection configuration */ + if((pOBInit->OptionType & OPTIONBYTE_WRP) == OPTIONBYTE_WRP) + { + assert_param(IS_WRPSTATE(pOBInit->WRPState)); + if (pOBInit->WRPState == OB_WRPSTATE_ENABLE) + { + /* Enable of Write protection on the selected page */ + status = FLASH_OB_EnableWRP(pOBInit->WRPPage); + } + else + { + /* Disable of Write protection on the selected page */ + status = FLASH_OB_DisableWRP(pOBInit->WRPPage); + } + if (status != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + return status; + } + } + + /* Read protection configuration */ + if((pOBInit->OptionType & OPTIONBYTE_RDP) == OPTIONBYTE_RDP) + { + status = FLASH_OB_RDP_LevelConfig(pOBInit->RDPLevel); + if (status != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + return status; + } + } + + /* USER configuration */ + if((pOBInit->OptionType & OPTIONBYTE_USER) == OPTIONBYTE_USER) + { + status = FLASH_OB_UserConfig(pOBInit->USERConfig); + if (status != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + return status; + } + } + + /* DATA configuration*/ + if((pOBInit->OptionType & OPTIONBYTE_DATA) == OPTIONBYTE_DATA) + { + status = FLASH_OB_ProgramData(pOBInit->DATAAddress, pOBInit->DATAData); + if (status != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + return status; + } + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + +/** + * @brief Get the Option byte configuration + * @param pOBInit pointer to an FLASH_OBInitStruct structure that + * contains the configuration information for the programming. + * + * @retval None + */ +void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit) +{ + pOBInit->OptionType = OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER; + + /*Get WRP*/ + pOBInit->WRPPage = FLASH_OB_GetWRP(); + + /*Get RDP Level*/ + pOBInit->RDPLevel = FLASH_OB_GetRDP(); + + /*Get USER*/ + pOBInit->USERConfig = FLASH_OB_GetUser(); +} + +/** + * @brief Get the Option byte user data + * @param DATAAdress Address of the option byte DATA + * This parameter can be one of the following values: + * @arg @ref OB_DATA_ADDRESS_DATA0 + * @arg @ref OB_DATA_ADDRESS_DATA1 + * @retval Value programmed in USER data + */ +uint32_t HAL_FLASHEx_OBGetUserData(uint32_t DATAAdress) +{ + uint32_t value = 0U; + + if (DATAAdress == OB_DATA_ADDRESS_DATA0) + { + /* Get value programmed in OB USER Data0 */ + value = READ_BIT(FLASH->OBR, FLASH_OBR_DATA0) >> FLASH_POSITION_OB_USERDATA0_BIT; + } + else + { + /* Get value programmed in OB USER Data1 */ + value = READ_BIT(FLASH->OBR, FLASH_OBR_DATA1) >> FLASH_POSITION_OB_USERDATA1_BIT; + } + + return value; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup FLASHEx_Private_Functions + * @{ + */ + +/** + * @brief Full erase of FLASH memory Bank + * + * @retval None + */ +static void FLASH_MassErase(void) +{ + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* Only bank1 will be erased*/ + SET_BIT(FLASH->CR, FLASH_CR_MER); + SET_BIT(FLASH->CR, FLASH_CR_STRT); +} + +/** + * @brief Enable the write protection of the desired pages + * @note An option byte erase is done automatically in this function. + * @note When the memory read protection level is selected (RDP level = 1), + * it is not possible to program or erase the flash page i if + * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 + * + * @param WriteProtectPage specifies the page(s) to be write protected. + * The value of this parameter depend on device used within the same series + * @retval HAL status + */ +static HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WriteProtectPage) +{ + HAL_StatusTypeDef status = HAL_OK; + uint16_t WRP0_Data = 0xFFFFU; +#if defined(OB_WRP1_WRP1) + uint16_t WRP1_Data = 0xFFFFU; +#endif /* OB_WRP1_WRP1 */ +#if defined(OB_WRP2_WRP2) + uint16_t WRP2_Data = 0xFFFFU; +#endif /* OB_WRP2_WRP2 */ +#if defined(OB_WRP3_WRP3) + uint16_t WRP3_Data = 0xFFFFU; +#endif /* OB_WRP3_WRP3 */ + + /* Check the parameters */ + assert_param(IS_OB_WRP(WriteProtectPage)); + + /* Get current write protected pages and the new pages to be protected ******/ + WriteProtectPage = (uint32_t)(~((~FLASH_OB_GetWRP()) | WriteProtectPage)); + +#if defined(OB_WRP_PAGES0TO15MASK) + WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO15MASK); +#endif /* OB_WRP_PAGES0TO31MASK */ + +#if defined(OB_WRP_PAGES16TO31MASK) + WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES16TO31MASK) >> 8U); +#endif /* OB_WRP_PAGES32TO63MASK */ + +#if defined(OB_WRP_PAGES32TO47MASK) + WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO47MASK) >> 16U); +#endif /* OB_WRP_PAGES32TO47MASK */ + +#if defined(OB_WRP_PAGES48TO127MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO127MASK) >> 24U); +#elif defined(OB_WRP_PAGES48TO255MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO255MASK) >> 24U); +#endif /* OB_WRP_PAGES48TO63MASK */ + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* To be able to write again option byte, need to perform a option byte erase */ + status = HAL_FLASHEx_OBErase(); + if (status == HAL_OK) + { + /* Enable write protection */ + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + +#if defined(OB_WRP0_WRP0) + if(WRP0_Data != 0xFFU) + { + OB->WRP0 &= WRP0_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP0_WRP0 */ + +#if defined(OB_WRP1_WRP1) + if((status == HAL_OK) && (WRP1_Data != 0xFFU)) + { + OB->WRP1 &= WRP1_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP1_WRP1 */ + +#if defined(OB_WRP2_WRP2) + if((status == HAL_OK) && (WRP2_Data != 0xFFU)) + { + OB->WRP2 &= WRP2_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP2_WRP2 */ + +#if defined(OB_WRP3_WRP3) + if((status == HAL_OK) && (WRP3_Data != 0xFFU)) + { + OB->WRP3 &= WRP3_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP3_WRP3 */ + + /* if the program operation is completed, disable the OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + } + + return status; +} + +/** + * @brief Disable the write protection of the desired pages + * @note An option byte erase is done automatically in this function. + * @note When the memory read protection level is selected (RDP level = 1), + * it is not possible to program or erase the flash page i if + * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 + * + * @param WriteProtectPage specifies the page(s) to be write unprotected. + * The value of this parameter depend on device used within the same series + * @retval HAL status + */ +static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WriteProtectPage) +{ + HAL_StatusTypeDef status = HAL_OK; + uint16_t WRP0_Data = 0xFFFFU; +#if defined(OB_WRP1_WRP1) + uint16_t WRP1_Data = 0xFFFFU; +#endif /* OB_WRP1_WRP1 */ +#if defined(OB_WRP2_WRP2) + uint16_t WRP2_Data = 0xFFFFU; +#endif /* OB_WRP2_WRP2 */ +#if defined(OB_WRP3_WRP3) + uint16_t WRP3_Data = 0xFFFFU; +#endif /* OB_WRP3_WRP3 */ + + /* Check the parameters */ + assert_param(IS_OB_WRP(WriteProtectPage)); + + /* Get current write protected pages and the new pages to be unprotected ******/ + WriteProtectPage = (FLASH_OB_GetWRP() | WriteProtectPage); + +#if defined(OB_WRP_PAGES0TO15MASK) + WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO15MASK); +#endif /* OB_WRP_PAGES0TO31MASK */ + +#if defined(OB_WRP_PAGES16TO31MASK) + WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES16TO31MASK) >> 8U); +#endif /* OB_WRP_PAGES32TO63MASK */ + +#if defined(OB_WRP_PAGES32TO47MASK) + WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO47MASK) >> 16U); +#endif /* OB_WRP_PAGES32TO47MASK */ + +#if defined(OB_WRP_PAGES48TO127MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO127MASK) >> 24U); +#elif defined(OB_WRP_PAGES48TO255MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO255MASK) >> 24U); +#endif /* OB_WRP_PAGES48TO63MASK */ + + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* To be able to write again option byte, need to perform a option byte erase */ + status = HAL_FLASHEx_OBErase(); + if (status == HAL_OK) + { + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + +#if defined(OB_WRP0_WRP0) + if(WRP0_Data != 0xFFU) + { + OB->WRP0 |= WRP0_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP0_WRP0 */ + +#if defined(OB_WRP1_WRP1) + if((status == HAL_OK) && (WRP1_Data != 0xFFU)) + { + OB->WRP1 |= WRP1_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP1_WRP1 */ + +#if defined(OB_WRP2_WRP2) + if((status == HAL_OK) && (WRP2_Data != 0xFFU)) + { + OB->WRP2 |= WRP2_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP2_WRP2 */ + +#if defined(OB_WRP3_WRP3) + if((status == HAL_OK) && (WRP3_Data != 0xFFU)) + { + OB->WRP3 |= WRP3_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP3_WRP3 */ + + /* if the program operation is completed, disable the OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + } + return status; +} + +/** + * @brief Set the read protection level. + * @param ReadProtectLevel specifies the read protection level. + * This parameter can be one of the following values: + * @arg @ref OB_RDP_LEVEL_0 No protection + * @arg @ref OB_RDP_LEVEL_1 Read protection of the memory + * @arg @ref OB_RDP_LEVEL_2 Full chip protection + * @note Warning: When enabling OB_RDP level 2 it's no more possible to go back to level 1 or 0 + * @retval HAL status + */ +static HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t ReadProtectLevel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_RDP_LEVEL(ReadProtectLevel)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* If the previous operation is completed, proceed to erase the option bytes */ + SET_BIT(FLASH->CR, FLASH_CR_OPTER); + SET_BIT(FLASH->CR, FLASH_CR_STRT); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the OPTER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTER); + + if(status == HAL_OK) + { + /* Enable the Option Bytes Programming operation */ + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + + WRITE_REG(OB->RDP, ReadProtectLevel); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* if the program operation is completed, disable the OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + } + + return status; +} + +/** + * @brief Program the FLASH User Option Byte. + * @note Programming of the OB should be performed only after an erase (otherwise PGERR occurs) + * @param UserConfig The FLASH User Option Bytes values: IWDG_SW(Bit0), RST_STOP(Bit1), RST_STDBY(Bit2), nBOOT1(Bit4), + * VDDA_Analog_Monitoring(Bit5) and SRAM_Parity_Enable(Bit6). + * And SDADC12_VDD_MONITOR(Bit7) for STM32F373 or STM32F378 . + * @retval HAL status + */ +static HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t UserConfig) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_IWDG_SOURCE((UserConfig&OB_IWDG_SW))); + assert_param(IS_OB_STOP_SOURCE((UserConfig&OB_STOP_NO_RST))); + assert_param(IS_OB_STDBY_SOURCE((UserConfig&OB_STDBY_NO_RST))); + assert_param(IS_OB_BOOT1((UserConfig&OB_BOOT1_SET))); + assert_param(IS_OB_VDDA_ANALOG((UserConfig&OB_VDDA_ANALOG_ON))); + assert_param(IS_OB_SRAM_PARITY((UserConfig&OB_SRAM_PARITY_RESET))); +#if defined(FLASH_OBR_SDADC12_VDD_MONITOR) + assert_param(IS_OB_SDACD_VDD_MONITOR((UserConfig&OB_SDACD_VDD_MONITOR_SET))); +#endif /* FLASH_OBR_SDADC12_VDD_MONITOR */ + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* Enable the Option Bytes Programming operation */ + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + +#if defined(FLASH_OBR_SDADC12_VDD_MONITOR) + OB->USER = (UserConfig | 0x08U); +#else + OB->USER = (UserConfig | 0x88U); +#endif + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* if the program operation is completed, disable the OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + + return status; +} + +/** + * @brief Programs a half word at a specified Option Byte Data address. + * @note The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes + * The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes + * (system reset will occur) + * Programming of the OB should be performed only after an erase (otherwise PGERR occurs) + * @param Address specifies the address to be programmed. + * This parameter can be 0x1FFFF804 or 0x1FFFF806. + * @param Data specifies the data to be programmed. + * @retval HAL status + */ +static HAL_StatusTypeDef FLASH_OB_ProgramData(uint32_t Address, uint8_t Data) +{ + HAL_StatusTypeDef status = HAL_ERROR; + + /* Check the parameters */ + assert_param(IS_OB_DATA_ADDRESS(Address)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* Enables the Option Bytes Programming operation */ + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + *(__IO uint16_t*)Address = Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the program operation is completed, disable the OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + /* Return the Option Byte Data Program Status */ + return status; +} + +/** + * @brief Return the FLASH Write Protection Option Bytes value. + * @retval The FLASH Write Protection Option Bytes value + */ +static uint32_t FLASH_OB_GetWRP(void) +{ + /* Return the FLASH write protection Register value */ + return (uint32_t)(READ_REG(FLASH->WRPR)); +} + +/** + * @brief Returns the FLASH Read Protection level. + * @retval FLASH RDP level + * This parameter can be one of the following values: + * @arg @ref OB_RDP_LEVEL_0 No protection + * @arg @ref OB_RDP_LEVEL_1 Read protection of the memory + * @arg @ref OB_RDP_LEVEL_2 Full chip protection + */ +static uint32_t FLASH_OB_GetRDP(void) +{ + uint32_t tmp_reg = 0U; + + /* Read RDP level bits */ +#if defined(FLASH_OBR_RDPRT) + tmp_reg = READ_BIT(FLASH->OBR, FLASH_OBR_RDPRT); +#elif defined(FLASH_OBR_LEVEL1_PROT) + tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_LEVEL1_PROT | FLASH_OBR_LEVEL2_PROT)); +#endif /* FLASH_OBR_RDPRT */ + +#if defined(FLASH_OBR_RDPRT) + if (tmp_reg == FLASH_OBR_RDPRT_2) +#elif defined(FLASH_OBR_LEVEL1_PROT) + if (tmp_reg == FLASH_OBR_LEVEL2_PROT) +#endif /* FLASH_OBR_RDPRT */ + { + return OB_RDP_LEVEL_2; + } + else if (tmp_reg == 0U) + { + return OB_RDP_LEVEL_0; + } + else + { + return OB_RDP_LEVEL_1; + } +} + +/** + * @brief Return the FLASH User Option Byte value. + * @retval The FLASH User Option Bytes values: IWDG_SW(Bit0), RST_STOP(Bit1), RST_STDBY(Bit2), nBOOT1(Bit4), + * VDDA_Analog_Monitoring(Bit5) and SRAM_Parity_Enable(Bit6). + * And SDADC12_VDD_MONITOR(Bit7) for STM32F373 or STM32F378 . + */ +static uint8_t FLASH_OB_GetUser(void) +{ + /* Return the User Option Byte */ + return (uint8_t)((READ_REG(FLASH->OBR) & FLASH_OBR_USER) >> FLASH_POSITION_IWDGSW_BIT); +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup FLASH + * @{ + */ + +/** @addtogroup FLASH_Private_Functions + * @{ + */ + +/** + * @brief Erase the specified FLASH memory page + * @param PageAddress FLASH page to erase + * The value of this parameter depend on device used within the same series + * + * @retval None + */ +void FLASH_PageErase(uint32_t PageAddress) +{ + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* Proceed to erase the page */ + SET_BIT(FLASH->CR, FLASH_CR_PER); + WRITE_REG(FLASH->AR, PageAddress); + SET_BIT(FLASH->CR, FLASH_CR_STRT); +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_FLASH_MODULE_ENABLED */ +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_gpio.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_gpio.c new file mode 100644 index 0000000..e1f91fe --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_gpio.c @@ -0,0 +1,542 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_gpio.c + * @author MCD Application Team + * @brief GPIO HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the General Purpose Input/Output (GPIO) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + @verbatim + ============================================================================== + ##### GPIO Peripheral features ##### + ============================================================================== + [..] + (+) Each port bit of the general-purpose I/O (GPIO) ports can be individually + configured by software in several modes: + (++) Input mode + (++) Analog mode + (++) Output mode + (++) Alternate function mode + (++) External interrupt/event lines + + (+) During and just after reset, the alternate functions and external interrupt + lines are not active and the I/O ports are configured in input floating mode. + + (+) All GPIO pins have weak internal pull-up and pull-down resistors, which can be + activated or not. + + (+) In Output or Alternate mode, each IO can be configured on open-drain or push-pull + type and the IO speed can be selected depending on the VDD value. + + (+) The microcontroller IO pins are connected to onboard peripherals/modules through a + multiplexer that allows only one peripheral alternate function (AF) connected + to an IO pin at a time. In this way, there can be no conflict between peripherals + sharing the same IO pin. + + (+) All ports have external interrupt/event capability. To use external interrupt + lines, the port must be configured in input mode. All available GPIO pins are + connected to the 16 external interrupt/event lines from EXTI0 to EXTI15. + + (+) The external interrupt/event controller consists of up to 23 edge detectors + (16 lines are connected to GPIO) for generating event/interrupt requests (each + input line can be independently configured to select the type (interrupt or event) + and the corresponding trigger event (rising or falling or both). Each line can + also be masked independently. + + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Enable the GPIO AHB clock using the following function: __HAL_RCC_GPIOx_CLK_ENABLE(). + + (#) Configure the GPIO pin(s) using HAL_GPIO_Init(). + (++) Configure the IO mode using "Mode" member from GPIO_InitTypeDef structure + (++) Activate Pull-up, Pull-down resistor using "Pull" member from GPIO_InitTypeDef + structure. + (++) In case of Output or alternate function mode selection: the speed is + configured through "Speed" member from GPIO_InitTypeDef structure. + (++) In alternate mode is selection, the alternate function connected to the IO + is configured through "Alternate" member from GPIO_InitTypeDef structure. + (++) Analog mode is required when a pin is to be used as ADC channel + or DAC output. + (++) In case of external interrupt/event selection the "Mode" member from + GPIO_InitTypeDef structure select the type (interrupt or event) and + the corresponding trigger event (rising or falling or both). + + (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority + mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using + HAL_NVIC_EnableIRQ(). + + (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin(). + + (#) To set/reset the level of a pin configured in output mode use + HAL_GPIO_WritePin()/HAL_GPIO_TogglePin(). + + (#) To lock pin configuration until next reset use HAL_GPIO_LockPin(). + + (#) During and just after reset, the alternate functions are not + active and the GPIO pins are configured in input floating mode (except JTAG + pins). + + (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose + (PC14 and PC15U, respectively) when the LSE oscillator is off. The LSE has + priority over the GPIO function. + + (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as + general purpose PF0 and PF1, respectively, when the HSE oscillator is off. + The HSE has priority over the GPIO function. + + @endverbatim + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup GPIO GPIO + * @brief GPIO HAL module driver + * @{ + */ + +/** MISRA C:2012 deviation rule has been granted for following rules: + * Rule-18.1_d - Medium: Array pointer `GPIOx' is accessed with index [..,..] + * which may be out of array bounds [..,UNKNOWN] in following APIs: + * HAL_GPIO_Init + * HAL_GPIO_DeInit + */ + +#ifdef HAL_GPIO_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private defines -----------------------------------------------------------*/ +/** @addtogroup GPIO_Private_Constants + * @{ + */ +#define GPIO_NUMBER (16U) +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/** @defgroup GPIO_Private_Macros GPIO Private Macros + * @{ + */ +/** + * @} + */ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup GPIO_Exported_Functions GPIO Exported Functions + * @{ + */ + +/** @defgroup GPIO_Exported_Functions_Group1 Initialization/de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Initialize the GPIOx peripheral according to the specified parameters in the GPIO_Init. + * @param GPIOx where x can be (A..F) to select the GPIO peripheral for STM32F3 family devices + * @param GPIO_Init pointer to a GPIO_InitTypeDef structure that contains + * the configuration information for the specified GPIO peripheral. + * @retval None + */ +void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) +{ + uint32_t position = 0x00u; + uint32_t iocurrent; + uint32_t temp; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Init->Pin)); + assert_param(IS_GPIO_MODE(GPIO_Init->Mode)); + + /* Configure the port pins */ + while (((GPIO_Init->Pin) >> position) != 0x00u) + { + /* Get current io position */ + iocurrent = (GPIO_Init->Pin) & (1uL << position); + + if (iocurrent != 0x00u) + { + /*--------------------- GPIO Mode Configuration ------------------------*/ + /* In case of Output or Alternate function mode selection */ + if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)) + { + /* Check the Speed parameter */ + assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); + /* Configure the IO Speed */ + temp = GPIOx->OSPEEDR; + temp &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2u)); + temp |= (GPIO_Init->Speed << (position * 2u)); + GPIOx->OSPEEDR = temp; + + /* Configure the IO Output Type */ + temp = GPIOx->OTYPER; + temp &= ~(GPIO_OTYPER_OT_0 << position) ; + temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position); + GPIOx->OTYPER = temp; + } + + if((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG) + { + /* Check the Pull parameter */ + assert_param(IS_GPIO_PULL(GPIO_Init->Pull)); + + /* Activate the Pull-up or Pull down resistor for the current IO */ + temp = GPIOx->PUPDR; + temp &= ~(GPIO_PUPDR_PUPDR0 << (position * 2u)); + temp |= ((GPIO_Init->Pull) << (position * 2u)); + GPIOx->PUPDR = temp; + } + + /*--------------------- GPIO Mode Configuration ------------------------*/ + /* In case of Alternate function mode selection */ + if((GPIO_Init->Mode & GPIO_MODE) == MODE_AF) + { + /* Check the Alternate function parameters */ + assert_param(IS_GPIO_AF_INSTANCE(GPIOx)); + assert_param(IS_GPIO_AF(GPIO_Init->Alternate)); + + /* Configure Alternate function mapped with the current IO */ + temp = GPIOx->AFR[position >> 3u]; + temp &= ~(0xFu << ((position & 0x07u) * 4u)); + temp |= ((GPIO_Init->Alternate) << ((position & 0x07u) * 4u)); + GPIOx->AFR[position >> 3u] = temp; + } + + /* Configure IO Direction mode (Input, Output, Alternate or Analog) */ + temp = GPIOx->MODER; + temp &= ~(GPIO_MODER_MODER0 << (position * 2u)); + temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2u)); + GPIOx->MODER = temp; + + /*--------------------- EXTI Mode Configuration ------------------------*/ + /* Configure the External Interrupt or event for the current IO */ + if((GPIO_Init->Mode & EXTI_MODE) != 0x00u) + { + /* Enable SYSCFG Clock */ + __HAL_RCC_SYSCFG_CLK_ENABLE(); + + temp = SYSCFG->EXTICR[position >> 2u]; + temp &= ~(0x0FuL << (4u * (position & 0x03u))); + temp |= (GPIO_GET_INDEX(GPIOx) << (4u * (position & 0x03u))); + SYSCFG->EXTICR[position >> 2u] = temp; + + /* Clear EXTI line configuration */ + temp = EXTI->IMR; + temp &= ~(iocurrent); + if((GPIO_Init->Mode & EXTI_IT) != 0x00u) + { + temp |= iocurrent; + } + EXTI->IMR = temp; + + temp = EXTI->EMR; + temp &= ~(iocurrent); + if((GPIO_Init->Mode & EXTI_EVT) != 0x00u) + { + temp |= iocurrent; + } + EXTI->EMR = temp; + + /* Clear Rising Falling edge configuration */ + temp = EXTI->RTSR; + temp &= ~(iocurrent); + if((GPIO_Init->Mode & TRIGGER_RISING) != 0x00u) + { + temp |= iocurrent; + } + EXTI->RTSR = temp; + + temp = EXTI->FTSR; + temp &= ~(iocurrent); + if((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00u) + { + temp |= iocurrent; + } + EXTI->FTSR = temp; + } + } + + position++; + } +} + +/** + * @brief De-initialize the GPIOx peripheral registers to their default reset values. + * @param GPIOx where x can be (A..F) to select the GPIO peripheral for STM32F30X device or STM32F37X device + * @param GPIO_Pin specifies the port bit to be written. + * This parameter can be one of GPIO_PIN_x where x can be (0..15). + * @retval None + */ +void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin) +{ + uint32_t position = 0x00u; + uint32_t iocurrent; + uint32_t tmp; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + /* Configure the port pins */ + while ((GPIO_Pin >> position) != 0x00u) + { + /* Get current io position */ + iocurrent = (GPIO_Pin) & (1uL << position); + + if (iocurrent != 0x00u) + { + /*------------------------- EXTI Mode Configuration --------------------*/ + /* Clear the External Interrupt or Event for the current IO */ + + tmp = SYSCFG->EXTICR[position >> 2u]; + tmp &= (0x0FuL << (4u * (position & 0x03u))); + if (tmp == (GPIO_GET_INDEX(GPIOx) << (4u * (position & 0x03u)))) + { + /* Clear EXTI line configuration */ + EXTI->IMR &= ~((uint32_t)iocurrent); + EXTI->EMR &= ~((uint32_t)iocurrent); + + /* Clear Rising Falling edge configuration */ + EXTI->RTSR &= ~((uint32_t)iocurrent); + EXTI->FTSR &= ~((uint32_t)iocurrent); + + /* Configure the External Interrupt or event for the current IO */ + tmp = 0x0FuL << (4u * (position & 0x03u)); + SYSCFG->EXTICR[position >> 2u] &= ~tmp; + } + + /*------------------------- GPIO Mode Configuration --------------------*/ + /* Configure IO Direction in Input Floating Mode */ + GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (position * 2u)); + + /* Configure the default Alternate Function in current IO */ + GPIOx->AFR[position >> 3u] &= ~(0xFu << ((uint32_t)(position & 0x07u) * 4u)) ; + + /* Deactivate the Pull-up and Pull-down resistor for the current IO */ + GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2u)); + + /* Configure the default value IO Output Type */ + GPIOx->OTYPER &= ~(GPIO_OTYPER_OT_0 << position) ; + + /* Configure the default value for IO Speed */ + GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2u)); + } + + position++; + } +} + +/** + * @} + */ + +/** @defgroup GPIO_Exported_Functions_Group2 IO operation functions + * @brief GPIO Read, Write, Toggle, Lock and EXTI management functions. + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Read the specified input port pin. + * @param GPIOx where x can be (A..F) to select the GPIO peripheral for STM32F3 family + * @param GPIO_Pin specifies the port bit to read. + * This parameter can be GPIO_PIN_x where x can be (0..15). + * @retval The input port pin value. + */ +GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + GPIO_PinState bitstatus; + + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + if((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET) + { + bitstatus = GPIO_PIN_SET; + } + else + { + bitstatus = GPIO_PIN_RESET; + } + return bitstatus; +} + +/** + * @brief Set or clear the selected data port bit. + * + * @note This function uses GPIOx_BSRR and GPIOx_BRR registers to allow atomic read/modify + * accesses. In this way, there is no risk of an IRQ occurring between + * the read and the modify access. + * + * @param GPIOx where x can be (A..F) to select the GPIO peripheral for STM32F3 family + * @param GPIO_Pin specifies the port bit to be written. + * This parameter can be one of GPIO_PIN_x where x can be (0..15). + * @param PinState specifies the value to be written to the selected bit. + * This parameter can be one of the GPIO_PinState enum values: + * @arg GPIO_PIN_RESET: to clear the port pin + * @arg GPIO_PIN_SET: to set the port pin + * @retval None + */ +void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) +{ + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + assert_param(IS_GPIO_PIN_ACTION(PinState)); + + if(PinState != GPIO_PIN_RESET) + { + GPIOx->BSRR = (uint32_t)GPIO_Pin; + } + else + { + GPIOx->BRR = (uint32_t)GPIO_Pin; + } +} + +/** + * @brief Toggle the specified GPIO pin. + * @param GPIOx where x can be (A..F) to select the GPIO peripheral for STM32F3 family + * @param GPIO_Pin specifies the pin to be toggled. + * @retval None + */ +void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + uint32_t odr; + + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + /* get current Ouput Data Register value */ + odr = GPIOx->ODR; + + /* Set selected pins that were at low level, and reset ones that were high */ + GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin); +} + +/** +* @brief Lock GPIO Pins configuration registers. + * @note The locked registers are GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, + * GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH. + * @note The configuration of the locked GPIO pins can no longer be modified + * until the next reset. + * @param GPIOx where x can be (A..F) to select the GPIO peripheral for STM32F3 family + * @param GPIO_Pin specifies the port bits to be locked. + * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). + * @retval None + */ +HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + __IO uint32_t tmp = GPIO_LCKR_LCKK; + + /* Check the parameters */ + assert_param(IS_GPIO_LOCK_INSTANCE(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + /* Apply lock key write sequence */ + tmp |= GPIO_Pin; + /* Set LCKx bit(s): LCKK='1' + LCK[15U-0] */ + GPIOx->LCKR = tmp; + /* Reset LCKx bit(s): LCKK='0' + LCK[15U-0] */ + GPIOx->LCKR = GPIO_Pin; + /* Set LCKx bit(s): LCKK='1' + LCK[15U-0] */ + GPIOx->LCKR = tmp; + /* Read LCKK register. This read is mandatory to complete key lock sequence */ + tmp = GPIOx->LCKR; + + /* read again in order to confirm lock is active */ + if((GPIOx->LCKR & GPIO_LCKR_LCKK) != 0x00u) + { + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Handle EXTI interrupt request. + * @param GPIO_Pin Specifies the port pin connected to corresponding EXTI line. + * @retval None + */ +void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) +{ + /* EXTI line interrupt detected */ + if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u) + { + __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); + HAL_GPIO_EXTI_Callback(GPIO_Pin); + } +} + +/** + * @brief EXTI line detection callback. + * @param GPIO_Pin Specifies the port pin connected to corresponding EXTI line. + * @retval None + */ +__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(GPIO_Pin); + + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_GPIO_EXTI_Callback could be implemented in the user file + */ +} + +/** + * @} + */ + + +/** + * @} + */ + +#endif /* HAL_GPIO_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_i2c.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_i2c.c new file mode 100644 index 0000000..af58c50 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_i2c.c @@ -0,0 +1,6794 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_i2c.c + * @author MCD Application Team + * @brief I2C HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Inter Integrated Circuit (I2C) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + Peripheral State and Errors functions + * + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The I2C HAL driver can be used as follows: + + (#) Declare a I2C_HandleTypeDef handle structure, for example: + I2C_HandleTypeDef hi2c; + + (#)Initialize the I2C low level resources by implementing the HAL_I2C_MspInit() API: + (##) Enable the I2Cx interface clock + (##) I2C pins configuration + (+++) Enable the clock for the I2C GPIOs + (+++) Configure I2C pins as alternate function open-drain + (##) NVIC configuration if you need to use interrupt process + (+++) Configure the I2Cx interrupt priority + (+++) Enable the NVIC I2C IRQ Channel + (##) DMA Configuration if you need to use DMA process + (+++) Declare a DMA_HandleTypeDef handle structure for + the transmit or receive channel + (+++) Enable the DMAx interface clock using + (+++) Configure the DMA handle parameters + (+++) Configure the DMA Tx or Rx channel + (+++) Associate the initialized DMA handle to the hi2c DMA Tx or Rx handle + (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on + the DMA Tx or Rx channel + + (#) Configure the Communication Clock Timing, Own Address1, Master Addressing mode, Dual Addressing mode, + Own Address2, Own Address2 Mask, General call and Nostretch mode in the hi2c Init structure. + + (#) Initialize the I2C registers by calling the HAL_I2C_Init(), configures also the low level Hardware + (GPIO, CLOCK, NVIC...etc) by calling the customized HAL_I2C_MspInit(&hi2c) API. + + (#) To check if target device is ready for communication, use the function HAL_I2C_IsDeviceReady() + + (#) For I2C IO and IO MEM operations, three operation modes are available within this driver : + + *** Polling mode IO operation *** + ================================= + [..] + (+) Transmit in master mode an amount of data in blocking mode using HAL_I2C_Master_Transmit() + (+) Receive in master mode an amount of data in blocking mode using HAL_I2C_Master_Receive() + (+) Transmit in slave mode an amount of data in blocking mode using HAL_I2C_Slave_Transmit() + (+) Receive in slave mode an amount of data in blocking mode using HAL_I2C_Slave_Receive() + + *** Polling mode IO MEM operation *** + ===================================== + [..] + (+) Write an amount of data in blocking mode to a specific memory address using HAL_I2C_Mem_Write() + (+) Read an amount of data in blocking mode from a specific memory address using HAL_I2C_Mem_Read() + + + *** Interrupt mode IO operation *** + =================================== + [..] + (+) Transmit in master mode an amount of data in non-blocking mode using HAL_I2C_Master_Transmit_IT() + (+) At transmission end of transfer, HAL_I2C_MasterTxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MasterTxCpltCallback() + (+) Receive in master mode an amount of data in non-blocking mode using HAL_I2C_Master_Receive_IT() + (+) At reception end of transfer, HAL_I2C_MasterRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MasterRxCpltCallback() + (+) Transmit in slave mode an amount of data in non-blocking mode using HAL_I2C_Slave_Transmit_IT() + (+) At transmission end of transfer, HAL_I2C_SlaveTxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_SlaveTxCpltCallback() + (+) Receive in slave mode an amount of data in non-blocking mode using HAL_I2C_Slave_Receive_IT() + (+) At reception end of transfer, HAL_I2C_SlaveRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_SlaveRxCpltCallback() + (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and users can + add their own code by customization of function pointer HAL_I2C_ErrorCallback() + (+) Abort a master I2C process communication with Interrupt using HAL_I2C_Master_Abort_IT() + (+) End of abort process, HAL_I2C_AbortCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_AbortCpltCallback() + (+) Discard a slave I2C process communication using __HAL_I2C_GENERATE_NACK() macro. + This action will inform Master to generate a Stop condition to discard the communication. + + + *** Interrupt mode or DMA mode IO sequential operation *** + ========================================================== + [..] + (@) These interfaces allow to manage a sequential transfer with a repeated start condition + when a direction change during transfer + [..] + (+) A specific option field manage the different steps of a sequential transfer + (+) Option field values are defined through I2C_XFEROPTIONS and are listed below: + (++) I2C_FIRST_AND_LAST_FRAME: No sequential usage, functional is same as associated interfaces in + no sequential mode + (++) I2C_FIRST_FRAME: Sequential usage, this option allow to manage a sequence with start condition, address + and data to transfer without a final stop condition + (++) I2C_FIRST_AND_NEXT_FRAME: Sequential usage (Master only), this option allow to manage a sequence with + start condition, address and data to transfer without a final stop condition, + an then permit a call the same master sequential interface several times + (like HAL_I2C_Master_Seq_Transmit_IT() then HAL_I2C_Master_Seq_Transmit_IT() + or HAL_I2C_Master_Seq_Transmit_DMA() then HAL_I2C_Master_Seq_Transmit_DMA()) + (++) I2C_NEXT_FRAME: Sequential usage, this option allow to manage a sequence with a restart condition, address + and with new data to transfer if the direction change or manage only the new data to + transfer + if no direction change and without a final stop condition in both cases + (++) I2C_LAST_FRAME: Sequential usage, this option allow to manage a sequance with a restart condition, address + and with new data to transfer if the direction change or manage only the new data to + transfer + if no direction change and with a final stop condition in both cases + (++) I2C_LAST_FRAME_NO_STOP: Sequential usage (Master only), this option allow to manage a restart condition + after several call of the same master sequential interface several times + (link with option I2C_FIRST_AND_NEXT_FRAME). + Usage can, transfer several bytes one by one using + HAL_I2C_Master_Seq_Transmit_IT + or HAL_I2C_Master_Seq_Receive_IT + or HAL_I2C_Master_Seq_Transmit_DMA + or HAL_I2C_Master_Seq_Receive_DMA + with option I2C_FIRST_AND_NEXT_FRAME then I2C_NEXT_FRAME. + Then usage of this option I2C_LAST_FRAME_NO_STOP at the last Transmit or + Receive sequence permit to call the opposite interface Receive or Transmit + without stopping the communication and so generate a restart condition. + (++) I2C_OTHER_FRAME: Sequential usage (Master only), this option allow to manage a restart condition after + each call of the same master sequential + interface. + Usage can, transfer several bytes one by one with a restart with slave address between + each bytes using + HAL_I2C_Master_Seq_Transmit_IT + or HAL_I2C_Master_Seq_Receive_IT + or HAL_I2C_Master_Seq_Transmit_DMA + or HAL_I2C_Master_Seq_Receive_DMA + with option I2C_FIRST_FRAME then I2C_OTHER_FRAME. + Then usage of this option I2C_OTHER_AND_LAST_FRAME at the last frame to help automatic + generation of STOP condition. + + (+) Different sequential I2C interfaces are listed below: + (++) Sequential transmit in master I2C mode an amount of data in non-blocking mode using + HAL_I2C_Master_Seq_Transmit_IT() or using HAL_I2C_Master_Seq_Transmit_DMA() + (+++) At transmission end of current frame transfer, HAL_I2C_MasterTxCpltCallback() is executed and + users can add their own code by customization of function pointer HAL_I2C_MasterTxCpltCallback() + (++) Sequential receive in master I2C mode an amount of data in non-blocking mode using + HAL_I2C_Master_Seq_Receive_IT() or using HAL_I2C_Master_Seq_Receive_DMA() + (+++) At reception end of current frame transfer, HAL_I2C_MasterRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MasterRxCpltCallback() + (++) Abort a master IT or DMA I2C process communication with Interrupt using HAL_I2C_Master_Abort_IT() + (+++) End of abort process, HAL_I2C_AbortCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_AbortCpltCallback() + (++) Enable/disable the Address listen mode in slave I2C mode using HAL_I2C_EnableListen_IT() + HAL_I2C_DisableListen_IT() + (+++) When address slave I2C match, HAL_I2C_AddrCallback() is executed and users can + add their own code to check the Address Match Code and the transmission direction request by master + (Write/Read). + (+++) At Listen mode end HAL_I2C_ListenCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_ListenCpltCallback() + (++) Sequential transmit in slave I2C mode an amount of data in non-blocking mode using + HAL_I2C_Slave_Seq_Transmit_IT() or using HAL_I2C_Slave_Seq_Transmit_DMA() + (+++) At transmission end of current frame transfer, HAL_I2C_SlaveTxCpltCallback() is executed and + users can add their own code by customization of function pointer HAL_I2C_SlaveTxCpltCallback() + (++) Sequential receive in slave I2C mode an amount of data in non-blocking mode using + HAL_I2C_Slave_Seq_Receive_IT() or using HAL_I2C_Slave_Seq_Receive_DMA() + (+++) At reception end of current frame transfer, HAL_I2C_SlaveRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_SlaveRxCpltCallback() + (++) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and users can + add their own code by customization of function pointer HAL_I2C_ErrorCallback() + (++) Discard a slave I2C process communication using __HAL_I2C_GENERATE_NACK() macro. + This action will inform Master to generate a Stop condition to discard the communication. + + *** Interrupt mode IO MEM operation *** + ======================================= + [..] + (+) Write an amount of data in non-blocking mode with Interrupt to a specific memory address using + HAL_I2C_Mem_Write_IT() + (+) At Memory end of write transfer, HAL_I2C_MemTxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MemTxCpltCallback() + (+) Read an amount of data in non-blocking mode with Interrupt from a specific memory address using + HAL_I2C_Mem_Read_IT() + (+) At Memory end of read transfer, HAL_I2C_MemRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MemRxCpltCallback() + (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and users can + add their own code by customization of function pointer HAL_I2C_ErrorCallback() + + *** DMA mode IO operation *** + ============================== + [..] + (+) Transmit in master mode an amount of data in non-blocking mode (DMA) using + HAL_I2C_Master_Transmit_DMA() + (+) At transmission end of transfer, HAL_I2C_MasterTxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MasterTxCpltCallback() + (+) Receive in master mode an amount of data in non-blocking mode (DMA) using + HAL_I2C_Master_Receive_DMA() + (+) At reception end of transfer, HAL_I2C_MasterRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MasterRxCpltCallback() + (+) Transmit in slave mode an amount of data in non-blocking mode (DMA) using + HAL_I2C_Slave_Transmit_DMA() + (+) At transmission end of transfer, HAL_I2C_SlaveTxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_SlaveTxCpltCallback() + (+) Receive in slave mode an amount of data in non-blocking mode (DMA) using + HAL_I2C_Slave_Receive_DMA() + (+) At reception end of transfer, HAL_I2C_SlaveRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_SlaveRxCpltCallback() + (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and users can + add their own code by customization of function pointer HAL_I2C_ErrorCallback() + (+) Abort a master I2C process communication with Interrupt using HAL_I2C_Master_Abort_IT() + (+) End of abort process, HAL_I2C_AbortCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_AbortCpltCallback() + (+) Discard a slave I2C process communication using __HAL_I2C_GENERATE_NACK() macro. + This action will inform Master to generate a Stop condition to discard the communication. + + *** DMA mode IO MEM operation *** + ================================= + [..] + (+) Write an amount of data in non-blocking mode with DMA to a specific memory address using + HAL_I2C_Mem_Write_DMA() + (+) At Memory end of write transfer, HAL_I2C_MemTxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MemTxCpltCallback() + (+) Read an amount of data in non-blocking mode with DMA from a specific memory address using + HAL_I2C_Mem_Read_DMA() + (+) At Memory end of read transfer, HAL_I2C_MemRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MemRxCpltCallback() + (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and users can + add their own code by customization of function pointer HAL_I2C_ErrorCallback() + + + *** I2C HAL driver macros list *** + ================================== + [..] + Below the list of most used macros in I2C HAL driver. + + (+) __HAL_I2C_ENABLE: Enable the I2C peripheral + (+) __HAL_I2C_DISABLE: Disable the I2C peripheral + (+) __HAL_I2C_GENERATE_NACK: Generate a Non-Acknowledge I2C peripheral in Slave mode + (+) __HAL_I2C_GET_FLAG: Check whether the specified I2C flag is set or not + (+) __HAL_I2C_CLEAR_FLAG: Clear the specified I2C pending flag + (+) __HAL_I2C_ENABLE_IT: Enable the specified I2C interrupt + (+) __HAL_I2C_DISABLE_IT: Disable the specified I2C interrupt + + *** Callback registration *** + ============================================= + [..] + The compilation flag USE_HAL_I2C_REGISTER_CALLBACKS when set to 1 + allows the user to configure dynamically the driver callbacks. + Use Functions HAL_I2C_RegisterCallback() or HAL_I2C_RegisterAddrCallback() + to register an interrupt callback. + [..] + Function HAL_I2C_RegisterCallback() allows to register following callbacks: + (+) MasterTxCpltCallback : callback for Master transmission end of transfer. + (+) MasterRxCpltCallback : callback for Master reception end of transfer. + (+) SlaveTxCpltCallback : callback for Slave transmission end of transfer. + (+) SlaveRxCpltCallback : callback for Slave reception end of transfer. + (+) ListenCpltCallback : callback for end of listen mode. + (+) MemTxCpltCallback : callback for Memory transmission end of transfer. + (+) MemRxCpltCallback : callback for Memory reception end of transfer. + (+) ErrorCallback : callback for error detection. + (+) AbortCpltCallback : callback for abort completion process. + (+) MspInitCallback : callback for Msp Init. + (+) MspDeInitCallback : callback for Msp DeInit. + This function takes as parameters the HAL peripheral handle, the Callback ID + and a pointer to the user callback function. + [..] + For specific callback AddrCallback use dedicated register callbacks : HAL_I2C_RegisterAddrCallback(). + [..] + Use function HAL_I2C_UnRegisterCallback to reset a callback to the default + weak function. + HAL_I2C_UnRegisterCallback takes as parameters the HAL peripheral handle, + and the Callback ID. + This function allows to reset following callbacks: + (+) MasterTxCpltCallback : callback for Master transmission end of transfer. + (+) MasterRxCpltCallback : callback for Master reception end of transfer. + (+) SlaveTxCpltCallback : callback for Slave transmission end of transfer. + (+) SlaveRxCpltCallback : callback for Slave reception end of transfer. + (+) ListenCpltCallback : callback for end of listen mode. + (+) MemTxCpltCallback : callback for Memory transmission end of transfer. + (+) MemRxCpltCallback : callback for Memory reception end of transfer. + (+) ErrorCallback : callback for error detection. + (+) AbortCpltCallback : callback for abort completion process. + (+) MspInitCallback : callback for Msp Init. + (+) MspDeInitCallback : callback for Msp DeInit. + [..] + For callback AddrCallback use dedicated register callbacks : HAL_I2C_UnRegisterAddrCallback(). + [..] + By default, after the HAL_I2C_Init() and when the state is HAL_I2C_STATE_RESET + all callbacks are set to the corresponding weak functions: + examples HAL_I2C_MasterTxCpltCallback(), HAL_I2C_MasterRxCpltCallback(). + Exception done for MspInit and MspDeInit functions that are + reset to the legacy weak functions in the HAL_I2C_Init()/ HAL_I2C_DeInit() only when + these callbacks are null (not registered beforehand). + If MspInit or MspDeInit are not null, the HAL_I2C_Init()/ HAL_I2C_DeInit() + keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state. + [..] + Callbacks can be registered/unregistered in HAL_I2C_STATE_READY state only. + Exception done MspInit/MspDeInit functions that can be registered/unregistered + in HAL_I2C_STATE_READY or HAL_I2C_STATE_RESET state, + thus registered (user) MspInit/DeInit callbacks can be used during the Init/DeInit. + Then, the user first registers the MspInit/MspDeInit user callbacks + using HAL_I2C_RegisterCallback() before calling HAL_I2C_DeInit() + or HAL_I2C_Init() function. + [..] + When the compilation flag USE_HAL_I2C_REGISTER_CALLBACKS is set to 0 or + not defined, the callback registration feature is not available and all callbacks + are set to the corresponding weak functions. + + [..] + (@) You can refer to the I2C HAL driver header file for more useful macros + + @endverbatim + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup I2C I2C + * @brief I2C HAL module driver + * @{ + */ + +#ifdef HAL_I2C_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/** @defgroup I2C_Private_Define I2C Private Define + * @{ + */ +#define TIMING_CLEAR_MASK (0xF0FFFFFFU) /*!< I2C TIMING clear register Mask */ +#define I2C_TIMEOUT_ADDR (10000U) /*!< 10 s */ +#define I2C_TIMEOUT_BUSY (25U) /*!< 25 ms */ +#define I2C_TIMEOUT_DIR (25U) /*!< 25 ms */ +#define I2C_TIMEOUT_RXNE (25U) /*!< 25 ms */ +#define I2C_TIMEOUT_STOPF (25U) /*!< 25 ms */ +#define I2C_TIMEOUT_TC (25U) /*!< 25 ms */ +#define I2C_TIMEOUT_TCR (25U) /*!< 25 ms */ +#define I2C_TIMEOUT_TXIS (25U) /*!< 25 ms */ +#define I2C_TIMEOUT_FLAG (25U) /*!< 25 ms */ + +#define MAX_NBYTE_SIZE 255U +#define SLAVE_ADDR_SHIFT 7U +#define SLAVE_ADDR_MSK 0x06U + +/* Private define for @ref PreviousState usage */ +#define I2C_STATE_MSK ((uint32_t)((uint32_t)((uint32_t)HAL_I2C_STATE_BUSY_TX | \ + (uint32_t)HAL_I2C_STATE_BUSY_RX) & \ + (uint32_t)(~((uint32_t)HAL_I2C_STATE_READY)))) +/*!< Mask State define, keep only RX and TX bits */ +#define I2C_STATE_NONE ((uint32_t)(HAL_I2C_MODE_NONE)) +/*!< Default Value */ +#define I2C_STATE_MASTER_BUSY_TX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | \ + (uint32_t)HAL_I2C_MODE_MASTER)) +/*!< Master Busy TX, combinaison of State LSB and Mode enum */ +#define I2C_STATE_MASTER_BUSY_RX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | \ + (uint32_t)HAL_I2C_MODE_MASTER)) +/*!< Master Busy RX, combinaison of State LSB and Mode enum */ +#define I2C_STATE_SLAVE_BUSY_TX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | \ + (uint32_t)HAL_I2C_MODE_SLAVE)) +/*!< Slave Busy TX, combinaison of State LSB and Mode enum */ +#define I2C_STATE_SLAVE_BUSY_RX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | \ + (uint32_t)HAL_I2C_MODE_SLAVE)) +/*!< Slave Busy RX, combinaison of State LSB and Mode enum */ +#define I2C_STATE_MEM_BUSY_TX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | \ + (uint32_t)HAL_I2C_MODE_MEM)) +/*!< Memory Busy TX, combinaison of State LSB and Mode enum */ +#define I2C_STATE_MEM_BUSY_RX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | \ + (uint32_t)HAL_I2C_MODE_MEM)) +/*!< Memory Busy RX, combinaison of State LSB and Mode enum */ + + +/* Private define to centralize the enable/disable of Interrupts */ +#define I2C_XFER_TX_IT (uint16_t)(0x0001U) /*!< Bit field can be combinated with + @ref I2C_XFER_LISTEN_IT */ +#define I2C_XFER_RX_IT (uint16_t)(0x0002U) /*!< Bit field can be combinated with + @ref I2C_XFER_LISTEN_IT */ +#define I2C_XFER_LISTEN_IT (uint16_t)(0x8000U) /*!< Bit field can be combinated with @ref I2C_XFER_TX_IT + and @ref I2C_XFER_RX_IT */ + +#define I2C_XFER_ERROR_IT (uint16_t)(0x0010U) /*!< Bit definition to manage addition of global Error + and NACK treatment */ +#define I2C_XFER_CPLT_IT (uint16_t)(0x0020U) /*!< Bit definition to manage only STOP evenement */ +#define I2C_XFER_RELOAD_IT (uint16_t)(0x0040U) /*!< Bit definition to manage only Reload of NBYTE */ + +/* Private define Sequential Transfer Options default/reset value */ +#define I2C_NO_OPTION_FRAME (0xFFFF0000U) +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ + +/** @defgroup I2C_Private_Functions I2C Private Functions + * @{ + */ +/* Private functions to handle DMA transfer */ +static void I2C_DMAMasterTransmitCplt(DMA_HandleTypeDef *hdma); +static void I2C_DMAMasterReceiveCplt(DMA_HandleTypeDef *hdma); +static void I2C_DMASlaveTransmitCplt(DMA_HandleTypeDef *hdma); +static void I2C_DMASlaveReceiveCplt(DMA_HandleTypeDef *hdma); +static void I2C_DMAError(DMA_HandleTypeDef *hdma); +static void I2C_DMAAbort(DMA_HandleTypeDef *hdma); + +/* Private functions to handle IT transfer */ +static void I2C_ITAddrCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags); +static void I2C_ITMasterSeqCplt(I2C_HandleTypeDef *hi2c); +static void I2C_ITSlaveSeqCplt(I2C_HandleTypeDef *hi2c); +static void I2C_ITMasterCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags); +static void I2C_ITSlaveCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags); +static void I2C_ITListenCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags); +static void I2C_ITError(I2C_HandleTypeDef *hi2c, uint32_t ErrorCode); + +/* Private functions to handle IT transfer */ +static HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, + uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, + uint32_t Tickstart); +static HAL_StatusTypeDef I2C_RequestMemoryRead(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, + uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, + uint32_t Tickstart); + +/* Private functions for I2C transfer IRQ handler */ +static HAL_StatusTypeDef I2C_Master_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources); +static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources); +static HAL_StatusTypeDef I2C_Master_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources); +static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources); + +/* Private functions to handle flags during polling transfer */ +static HAL_StatusTypeDef I2C_WaitOnFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, FlagStatus Status, + uint32_t Timeout, uint32_t Tickstart); +static HAL_StatusTypeDef I2C_WaitOnTXISFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, + uint32_t Tickstart); +static HAL_StatusTypeDef I2C_WaitOnRXNEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, + uint32_t Tickstart); +static HAL_StatusTypeDef I2C_WaitOnSTOPFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, + uint32_t Tickstart); +static HAL_StatusTypeDef I2C_IsAcknowledgeFailed(I2C_HandleTypeDef *hi2c, uint32_t Timeout, + uint32_t Tickstart); + +/* Private functions to centralize the enable/disable of Interrupts */ +static void I2C_Enable_IRQ(I2C_HandleTypeDef *hi2c, uint16_t InterruptRequest); +static void I2C_Disable_IRQ(I2C_HandleTypeDef *hi2c, uint16_t InterruptRequest); + +/* Private function to treat different error callback */ +static void I2C_TreatErrorCallback(I2C_HandleTypeDef *hi2c); + +/* Private function to flush TXDR register */ +static void I2C_Flush_TXDR(I2C_HandleTypeDef *hi2c); + +/* Private function to handle start, restart or stop a transfer */ +static void I2C_TransferConfig(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t Size, uint32_t Mode, + uint32_t Request); + +/* Private function to Convert Specific options */ +static void I2C_ConvertOtherXferOptions(I2C_HandleTypeDef *hi2c); +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup I2C_Exported_Functions I2C Exported Functions + * @{ + */ + +/** @defgroup I2C_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] This subsection provides a set of functions allowing to initialize and + deinitialize the I2Cx peripheral: + + (+) User must Implement HAL_I2C_MspInit() function in which he configures + all related peripherals resources (CLOCK, GPIO, DMA, IT and NVIC ). + + (+) Call the function HAL_I2C_Init() to configure the selected device with + the selected configuration: + (++) Clock Timing + (++) Own Address 1 + (++) Addressing mode (Master, Slave) + (++) Dual Addressing mode + (++) Own Address 2 + (++) Own Address 2 Mask + (++) General call mode + (++) Nostretch mode + + (+) Call the function HAL_I2C_DeInit() to restore the default configuration + of the selected I2Cx peripheral. + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the I2C according to the specified parameters + * in the I2C_InitTypeDef and initialize the associated handle. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c) +{ + /* Check the I2C handle allocation */ + if (hi2c == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + assert_param(IS_I2C_OWN_ADDRESS1(hi2c->Init.OwnAddress1)); + assert_param(IS_I2C_ADDRESSING_MODE(hi2c->Init.AddressingMode)); + assert_param(IS_I2C_DUAL_ADDRESS(hi2c->Init.DualAddressMode)); + assert_param(IS_I2C_OWN_ADDRESS2(hi2c->Init.OwnAddress2)); + assert_param(IS_I2C_OWN_ADDRESS2_MASK(hi2c->Init.OwnAddress2Masks)); + assert_param(IS_I2C_GENERAL_CALL(hi2c->Init.GeneralCallMode)); + assert_param(IS_I2C_NO_STRETCH(hi2c->Init.NoStretchMode)); + + if (hi2c->State == HAL_I2C_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + hi2c->Lock = HAL_UNLOCKED; + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + /* Init the I2C Callback settings */ + hi2c->MasterTxCpltCallback = HAL_I2C_MasterTxCpltCallback; /* Legacy weak MasterTxCpltCallback */ + hi2c->MasterRxCpltCallback = HAL_I2C_MasterRxCpltCallback; /* Legacy weak MasterRxCpltCallback */ + hi2c->SlaveTxCpltCallback = HAL_I2C_SlaveTxCpltCallback; /* Legacy weak SlaveTxCpltCallback */ + hi2c->SlaveRxCpltCallback = HAL_I2C_SlaveRxCpltCallback; /* Legacy weak SlaveRxCpltCallback */ + hi2c->ListenCpltCallback = HAL_I2C_ListenCpltCallback; /* Legacy weak ListenCpltCallback */ + hi2c->MemTxCpltCallback = HAL_I2C_MemTxCpltCallback; /* Legacy weak MemTxCpltCallback */ + hi2c->MemRxCpltCallback = HAL_I2C_MemRxCpltCallback; /* Legacy weak MemRxCpltCallback */ + hi2c->ErrorCallback = HAL_I2C_ErrorCallback; /* Legacy weak ErrorCallback */ + hi2c->AbortCpltCallback = HAL_I2C_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ + hi2c->AddrCallback = HAL_I2C_AddrCallback; /* Legacy weak AddrCallback */ + + if (hi2c->MspInitCallback == NULL) + { + hi2c->MspInitCallback = HAL_I2C_MspInit; /* Legacy weak MspInit */ + } + + /* Init the low level hardware : GPIO, CLOCK, CORTEX...etc */ + hi2c->MspInitCallback(hi2c); +#else + /* Init the low level hardware : GPIO, CLOCK, CORTEX...etc */ + HAL_I2C_MspInit(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + + /*---------------------------- I2Cx TIMINGR Configuration ------------------*/ + /* Configure I2Cx: Frequency range */ + hi2c->Instance->TIMINGR = hi2c->Init.Timing & TIMING_CLEAR_MASK; + + /*---------------------------- I2Cx OAR1 Configuration ---------------------*/ + /* Disable Own Address1 before set the Own Address1 configuration */ + hi2c->Instance->OAR1 &= ~I2C_OAR1_OA1EN; + + /* Configure I2Cx: Own Address1 and ack own address1 mode */ + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_7BIT) + { + hi2c->Instance->OAR1 = (I2C_OAR1_OA1EN | hi2c->Init.OwnAddress1); + } + else /* I2C_ADDRESSINGMODE_10BIT */ + { + hi2c->Instance->OAR1 = (I2C_OAR1_OA1EN | I2C_OAR1_OA1MODE | hi2c->Init.OwnAddress1); + } + + /*---------------------------- I2Cx CR2 Configuration ----------------------*/ + /* Configure I2Cx: Addressing Master mode */ + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) + { + hi2c->Instance->CR2 = (I2C_CR2_ADD10); + } + /* Enable the AUTOEND by default, and enable NACK (should be disable only during Slave process */ + hi2c->Instance->CR2 |= (I2C_CR2_AUTOEND | I2C_CR2_NACK); + + /*---------------------------- I2Cx OAR2 Configuration ---------------------*/ + /* Disable Own Address2 before set the Own Address2 configuration */ + hi2c->Instance->OAR2 &= ~I2C_DUALADDRESS_ENABLE; + + /* Configure I2Cx: Dual mode and Own Address2 */ + hi2c->Instance->OAR2 = (hi2c->Init.DualAddressMode | hi2c->Init.OwnAddress2 | \ + (hi2c->Init.OwnAddress2Masks << 8)); + + /*---------------------------- I2Cx CR1 Configuration ----------------------*/ + /* Configure I2Cx: Generalcall and NoStretch mode */ + hi2c->Instance->CR1 = (hi2c->Init.GeneralCallMode | hi2c->Init.NoStretchMode); + + /* Enable the selected I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->Mode = HAL_I2C_MODE_NONE; + + return HAL_OK; +} + +/** + * @brief DeInitialize the I2C peripheral. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c) +{ + /* Check the I2C handle allocation */ + if (hi2c == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the I2C Peripheral Clock */ + __HAL_I2C_DISABLE(hi2c); + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + if (hi2c->MspDeInitCallback == NULL) + { + hi2c->MspDeInitCallback = HAL_I2C_MspDeInit; /* Legacy weak MspDeInit */ + } + + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + hi2c->MspDeInitCallback(hi2c); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_I2C_MspDeInit(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + hi2c->State = HAL_I2C_STATE_RESET; + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Release Lock */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; +} + +/** + * @brief Initialize the I2C MSP. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitialize the I2C MSP. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MspDeInit could be implemented in the user file + */ +} + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +/** + * @brief Register a User I2C Callback + * To be used instead of the weak predefined callback + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param CallbackID ID of the callback to be registered + * This parameter can be one of the following values: + * @arg @ref HAL_I2C_MASTER_TX_COMPLETE_CB_ID Master Tx Transfer completed callback ID + * @arg @ref HAL_I2C_MASTER_RX_COMPLETE_CB_ID Master Rx Transfer completed callback ID + * @arg @ref HAL_I2C_SLAVE_TX_COMPLETE_CB_ID Slave Tx Transfer completed callback ID + * @arg @ref HAL_I2C_SLAVE_RX_COMPLETE_CB_ID Slave Rx Transfer completed callback ID + * @arg @ref HAL_I2C_LISTEN_COMPLETE_CB_ID Listen Complete callback ID + * @arg @ref HAL_I2C_MEM_TX_COMPLETE_CB_ID Memory Tx Transfer callback ID + * @arg @ref HAL_I2C_MEM_RX_COMPLETE_CB_ID Memory Rx Transfer completed callback ID + * @arg @ref HAL_I2C_ERROR_CB_ID Error callback ID + * @arg @ref HAL_I2C_ABORT_CB_ID Abort callback ID + * @arg @ref HAL_I2C_MSPINIT_CB_ID MspInit callback ID + * @arg @ref HAL_I2C_MSPDEINIT_CB_ID MspDeInit callback ID + * @param pCallback pointer to the Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_RegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID, + pI2C_CallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + /* Process locked */ + __HAL_LOCK(hi2c); + + if (HAL_I2C_STATE_READY == hi2c->State) + { + switch (CallbackID) + { + case HAL_I2C_MASTER_TX_COMPLETE_CB_ID : + hi2c->MasterTxCpltCallback = pCallback; + break; + + case HAL_I2C_MASTER_RX_COMPLETE_CB_ID : + hi2c->MasterRxCpltCallback = pCallback; + break; + + case HAL_I2C_SLAVE_TX_COMPLETE_CB_ID : + hi2c->SlaveTxCpltCallback = pCallback; + break; + + case HAL_I2C_SLAVE_RX_COMPLETE_CB_ID : + hi2c->SlaveRxCpltCallback = pCallback; + break; + + case HAL_I2C_LISTEN_COMPLETE_CB_ID : + hi2c->ListenCpltCallback = pCallback; + break; + + case HAL_I2C_MEM_TX_COMPLETE_CB_ID : + hi2c->MemTxCpltCallback = pCallback; + break; + + case HAL_I2C_MEM_RX_COMPLETE_CB_ID : + hi2c->MemRxCpltCallback = pCallback; + break; + + case HAL_I2C_ERROR_CB_ID : + hi2c->ErrorCallback = pCallback; + break; + + case HAL_I2C_ABORT_CB_ID : + hi2c->AbortCpltCallback = pCallback; + break; + + case HAL_I2C_MSPINIT_CB_ID : + hi2c->MspInitCallback = pCallback; + break; + + case HAL_I2C_MSPDEINIT_CB_ID : + hi2c->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (HAL_I2C_STATE_RESET == hi2c->State) + { + switch (CallbackID) + { + case HAL_I2C_MSPINIT_CB_ID : + hi2c->MspInitCallback = pCallback; + break; + + case HAL_I2C_MSPDEINIT_CB_ID : + hi2c->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hi2c); + return status; +} + +/** + * @brief Unregister an I2C Callback + * I2C callback is redirected to the weak predefined callback + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param CallbackID ID of the callback to be unregistered + * This parameter can be one of the following values: + * This parameter can be one of the following values: + * @arg @ref HAL_I2C_MASTER_TX_COMPLETE_CB_ID Master Tx Transfer completed callback ID + * @arg @ref HAL_I2C_MASTER_RX_COMPLETE_CB_ID Master Rx Transfer completed callback ID + * @arg @ref HAL_I2C_SLAVE_TX_COMPLETE_CB_ID Slave Tx Transfer completed callback ID + * @arg @ref HAL_I2C_SLAVE_RX_COMPLETE_CB_ID Slave Rx Transfer completed callback ID + * @arg @ref HAL_I2C_LISTEN_COMPLETE_CB_ID Listen Complete callback ID + * @arg @ref HAL_I2C_MEM_TX_COMPLETE_CB_ID Memory Tx Transfer callback ID + * @arg @ref HAL_I2C_MEM_RX_COMPLETE_CB_ID Memory Rx Transfer completed callback ID + * @arg @ref HAL_I2C_ERROR_CB_ID Error callback ID + * @arg @ref HAL_I2C_ABORT_CB_ID Abort callback ID + * @arg @ref HAL_I2C_MSPINIT_CB_ID MspInit callback ID + * @arg @ref HAL_I2C_MSPDEINIT_CB_ID MspDeInit callback ID + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_UnRegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hi2c); + + if (HAL_I2C_STATE_READY == hi2c->State) + { + switch (CallbackID) + { + case HAL_I2C_MASTER_TX_COMPLETE_CB_ID : + hi2c->MasterTxCpltCallback = HAL_I2C_MasterTxCpltCallback; /* Legacy weak MasterTxCpltCallback */ + break; + + case HAL_I2C_MASTER_RX_COMPLETE_CB_ID : + hi2c->MasterRxCpltCallback = HAL_I2C_MasterRxCpltCallback; /* Legacy weak MasterRxCpltCallback */ + break; + + case HAL_I2C_SLAVE_TX_COMPLETE_CB_ID : + hi2c->SlaveTxCpltCallback = HAL_I2C_SlaveTxCpltCallback; /* Legacy weak SlaveTxCpltCallback */ + break; + + case HAL_I2C_SLAVE_RX_COMPLETE_CB_ID : + hi2c->SlaveRxCpltCallback = HAL_I2C_SlaveRxCpltCallback; /* Legacy weak SlaveRxCpltCallback */ + break; + + case HAL_I2C_LISTEN_COMPLETE_CB_ID : + hi2c->ListenCpltCallback = HAL_I2C_ListenCpltCallback; /* Legacy weak ListenCpltCallback */ + break; + + case HAL_I2C_MEM_TX_COMPLETE_CB_ID : + hi2c->MemTxCpltCallback = HAL_I2C_MemTxCpltCallback; /* Legacy weak MemTxCpltCallback */ + break; + + case HAL_I2C_MEM_RX_COMPLETE_CB_ID : + hi2c->MemRxCpltCallback = HAL_I2C_MemRxCpltCallback; /* Legacy weak MemRxCpltCallback */ + break; + + case HAL_I2C_ERROR_CB_ID : + hi2c->ErrorCallback = HAL_I2C_ErrorCallback; /* Legacy weak ErrorCallback */ + break; + + case HAL_I2C_ABORT_CB_ID : + hi2c->AbortCpltCallback = HAL_I2C_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ + break; + + case HAL_I2C_MSPINIT_CB_ID : + hi2c->MspInitCallback = HAL_I2C_MspInit; /* Legacy weak MspInit */ + break; + + case HAL_I2C_MSPDEINIT_CB_ID : + hi2c->MspDeInitCallback = HAL_I2C_MspDeInit; /* Legacy weak MspDeInit */ + break; + + default : + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (HAL_I2C_STATE_RESET == hi2c->State) + { + switch (CallbackID) + { + case HAL_I2C_MSPINIT_CB_ID : + hi2c->MspInitCallback = HAL_I2C_MspInit; /* Legacy weak MspInit */ + break; + + case HAL_I2C_MSPDEINIT_CB_ID : + hi2c->MspDeInitCallback = HAL_I2C_MspDeInit; /* Legacy weak MspDeInit */ + break; + + default : + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hi2c); + return status; +} + +/** + * @brief Register the Slave Address Match I2C Callback + * To be used instead of the weak HAL_I2C_AddrCallback() predefined callback + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pCallback pointer to the Address Match Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_RegisterAddrCallback(I2C_HandleTypeDef *hi2c, pI2C_AddrCallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + /* Process locked */ + __HAL_LOCK(hi2c); + + if (HAL_I2C_STATE_READY == hi2c->State) + { + hi2c->AddrCallback = pCallback; + } + else + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hi2c); + return status; +} + +/** + * @brief UnRegister the Slave Address Match I2C Callback + * Info Ready I2C Callback is redirected to the weak HAL_I2C_AddrCallback() predefined callback + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_UnRegisterAddrCallback(I2C_HandleTypeDef *hi2c) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hi2c); + + if (HAL_I2C_STATE_READY == hi2c->State) + { + hi2c->AddrCallback = HAL_I2C_AddrCallback; /* Legacy weak AddrCallback */ + } + else + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hi2c); + return status; +} + +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @defgroup I2C_Exported_Functions_Group2 Input and Output operation functions + * @brief Data transfers functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to manage the I2C data + transfers. + + (#) There are two modes of transfer: + (++) Blocking mode : The communication is performed in the polling mode. + The status of all data processing is returned by the same function + after finishing transfer. + (++) No-Blocking mode : The communication is performed using Interrupts + or DMA. These functions return the status of the transfer startup. + The end of the data processing will be indicated through the + dedicated I2C IRQ when using Interrupt mode or the DMA IRQ when + using DMA mode. + + (#) Blocking mode functions are : + (++) HAL_I2C_Master_Transmit() + (++) HAL_I2C_Master_Receive() + (++) HAL_I2C_Slave_Transmit() + (++) HAL_I2C_Slave_Receive() + (++) HAL_I2C_Mem_Write() + (++) HAL_I2C_Mem_Read() + (++) HAL_I2C_IsDeviceReady() + + (#) No-Blocking mode functions with Interrupt are : + (++) HAL_I2C_Master_Transmit_IT() + (++) HAL_I2C_Master_Receive_IT() + (++) HAL_I2C_Slave_Transmit_IT() + (++) HAL_I2C_Slave_Receive_IT() + (++) HAL_I2C_Mem_Write_IT() + (++) HAL_I2C_Mem_Read_IT() + (++) HAL_I2C_Master_Seq_Transmit_IT() + (++) HAL_I2C_Master_Seq_Receive_IT() + (++) HAL_I2C_Slave_Seq_Transmit_IT() + (++) HAL_I2C_Slave_Seq_Receive_IT() + (++) HAL_I2C_EnableListen_IT() + (++) HAL_I2C_DisableListen_IT() + (++) HAL_I2C_Master_Abort_IT() + + (#) No-Blocking mode functions with DMA are : + (++) HAL_I2C_Master_Transmit_DMA() + (++) HAL_I2C_Master_Receive_DMA() + (++) HAL_I2C_Slave_Transmit_DMA() + (++) HAL_I2C_Slave_Receive_DMA() + (++) HAL_I2C_Mem_Write_DMA() + (++) HAL_I2C_Mem_Read_DMA() + (++) HAL_I2C_Master_Seq_Transmit_DMA() + (++) HAL_I2C_Master_Seq_Receive_DMA() + (++) HAL_I2C_Slave_Seq_Transmit_DMA() + (++) HAL_I2C_Slave_Seq_Receive_DMA() + + (#) A set of Transfer Complete Callbacks are provided in non Blocking mode: + (++) HAL_I2C_MasterTxCpltCallback() + (++) HAL_I2C_MasterRxCpltCallback() + (++) HAL_I2C_SlaveTxCpltCallback() + (++) HAL_I2C_SlaveRxCpltCallback() + (++) HAL_I2C_MemTxCpltCallback() + (++) HAL_I2C_MemRxCpltCallback() + (++) HAL_I2C_AddrCallback() + (++) HAL_I2C_ListenCpltCallback() + (++) HAL_I2C_ErrorCallback() + (++) HAL_I2C_AbortCpltCallback() + +@endverbatim + * @{ + */ + +/** + * @brief Transmits in master mode an amount of data in blocking mode. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t Timeout) +{ + uint32_t tickstart; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferISR = NULL; + + /* Send Slave Address */ + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, + I2C_GENERATE_START_WRITE); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_GENERATE_START_WRITE); + } + + while (hi2c->XferCount > 0U) + { + /* Wait until TXIS flag is set */ + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + /* Write data to TXDR */ + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + hi2c->XferSize--; + + if ((hi2c->XferCount != 0U) && (hi2c->XferSize == 0U)) + { + /* Wait until TCR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, + I2C_NO_STARTSTOP); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_NO_STARTSTOP); + } + } + } + + /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ + /* Wait until STOPF flag is set */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receives in master mode an amount of data in blocking mode. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t Timeout) +{ + uint32_t tickstart; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferISR = NULL; + + /* Send Slave Address */ + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, + I2C_GENERATE_START_READ); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_GENERATE_START_READ); + } + + while (hi2c->XferCount > 0U) + { + /* Wait until RXNE flag is set */ + if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferSize--; + hi2c->XferCount--; + + if ((hi2c->XferCount != 0U) && (hi2c->XferSize == 0U)) + { + /* Wait until TCR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, + I2C_NO_STARTSTOP); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_NO_STARTSTOP); + } + } + } + + /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ + /* Wait until STOPF flag is set */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmits in slave mode an amount of data in blocking mode. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t Timeout) +{ + uint32_t tickstart; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferISR = NULL; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Wait until ADDR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + + /* If 10bit addressing mode is selected */ + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) + { + /* Wait until ADDR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + } + + /* Wait until DIR flag is set Transmitter mode */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_DIR, RESET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + while (hi2c->XferCount > 0U) + { + /* Wait until TXIS flag is set */ + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Write data to TXDR */ + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + } + + /* Wait until STOP flag is set */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) + { + /* Normal use case for Transmitter mode */ + /* A NACK is generated to confirm the end of transfer */ + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + } + else + { + return HAL_ERROR; + } + } + + /* Clear STOP flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Wait until BUSY flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in slave mode an amount of data in blocking mode + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t Timeout) +{ + uint32_t tickstart; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferISR = NULL; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Wait until ADDR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + + /* Wait until DIR flag is reset Receiver mode */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_DIR, SET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + while (hi2c->XferCount > 0U) + { + /* Wait until RXNE flag is set */ + if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + + /* Store Last receive data if any */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) + { + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + } + + return HAL_ERROR; + } + + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + } + + /* Wait until STOP flag is set */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Clear STOP flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Wait until BUSY flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmit in master mode an amount of data in non-blocking mode with Interrupt + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size) +{ + uint32_t xfermode; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Master_ISR_IT; + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = I2C_AUTOEND_MODE; + } + + /* Send Slave Address */ + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, I2C_GENERATE_START_WRITE); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in master mode an amount of data in non-blocking mode with Interrupt + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size) +{ + uint32_t xfermode; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Master_ISR_IT; + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = I2C_AUTOEND_MODE; + } + + /* Send Slave Address */ + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, I2C_GENERATE_START_READ); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable ERR, TC, STOP, NACK, RXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmit in slave mode an amount of data in non-blocking mode with Interrupt + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) +{ + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Slave_ISR_IT; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT | I2C_XFER_LISTEN_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in slave mode an amount of data in non-blocking mode with Interrupt + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) +{ + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Slave_ISR_IT; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable ERR, TC, STOP, NACK, RXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT | I2C_XFER_LISTEN_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmit in master mode an amount of data in non-blocking mode with DMA + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size) +{ + uint32_t xfermode; + HAL_StatusTypeDef dmaxferstatus; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Master_ISR_DMA; + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = I2C_AUTOEND_MODE; + } + + if (hi2c->XferSize > 0U) + { + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMAMasterTransmitCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)pData, (uint32_t)&hi2c->Instance->TXDR, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Send Slave Address */ + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, I2C_GENERATE_START_WRITE); + + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR and NACK interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Update Transfer ISR function pointer */ + hi2c->XferISR = I2C_Master_ISR_IT; + + /* Send Slave Address */ + /* Set NBYTES to write and generate START condition */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_GENERATE_START_WRITE); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in master mode an amount of data in non-blocking mode with DMA + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size) +{ + uint32_t xfermode; + HAL_StatusTypeDef dmaxferstatus; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Master_ISR_DMA; + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = I2C_AUTOEND_MODE; + } + + if (hi2c->XferSize > 0U) + { + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMAMasterReceiveCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->RXDR, (uint32_t)pData, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Send Slave Address */ + /* Set NBYTES to read and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, I2C_GENERATE_START_READ); + + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR and NACK interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_RXDMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Update Transfer ISR function pointer */ + hi2c->XferISR = I2C_Master_ISR_IT; + + /* Send Slave Address */ + /* Set NBYTES to read and generate START condition */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_GENERATE_START_READ); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmit in slave mode an amount of data in non-blocking mode with DMA + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef dmaxferstatus; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Slave_ISR_DMA; + + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMASlaveTransmitCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)pData, (uint32_t)&hi2c->Instance->TXDR, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, STOP, NACK, ADDR interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in slave mode an amount of data in non-blocking mode with DMA + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef dmaxferstatus; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Slave_ISR_DMA; + + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMASlaveReceiveCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->RXDR, (uint32_t)pData, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, STOP, NACK, ADDR interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_RXDMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} +/** + * @brief Write an amount of data in blocking mode to a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + uint32_t tickstart; + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferISR = NULL; + + /* Send Slave Address and Memory Address */ + if (I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + return HAL_ERROR; + } + + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, I2C_NO_STARTSTOP); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, I2C_NO_STARTSTOP); + } + + do + { + /* Wait until TXIS flag is set */ + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Write data to TXDR */ + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + hi2c->XferSize--; + + if ((hi2c->XferCount != 0U) && (hi2c->XferSize == 0U)) + { + /* Wait until TCR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, + I2C_NO_STARTSTOP); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_NO_STARTSTOP); + } + } + + } while (hi2c->XferCount > 0U); + + /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ + /* Wait until STOPF flag is reset */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Read an amount of data in blocking mode from a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + uint32_t tickstart; + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferISR = NULL; + + /* Send Slave Address and Memory Address */ + if (I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + return HAL_ERROR; + } + + /* Send Slave Address */ + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, + I2C_GENERATE_START_READ); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_GENERATE_START_READ); + } + + do + { + /* Wait until RXNE flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_RXNE, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferSize--; + hi2c->XferCount--; + + if ((hi2c->XferCount != 0U) && (hi2c->XferSize == 0U)) + { + /* Wait until TCR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t) hi2c->XferSize, I2C_RELOAD_MODE, + I2C_NO_STARTSTOP); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_NO_STARTSTOP); + } + } + } while (hi2c->XferCount > 0U); + + /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ + /* Wait until STOPF flag is reset */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} +/** + * @brief Write an amount of data in non-blocking mode with Interrupt to a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size) +{ + uint32_t tickstart; + uint32_t xfermode; + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Master_ISR_IT; + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = I2C_AUTOEND_MODE; + } + + /* Send Slave Address and Memory Address */ + if (I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) + != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + return HAL_ERROR; + } + + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, I2C_NO_STARTSTOP); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Read an amount of data in non-blocking mode with Interrupt from a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size) +{ + uint32_t tickstart; + uint32_t xfermode; + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Master_ISR_IT; + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = I2C_AUTOEND_MODE; + } + + /* Send Slave Address and Memory Address */ + if (I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + return HAL_ERROR; + } + + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, I2C_GENERATE_START_READ); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable ERR, TC, STOP, NACK, RXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} +/** + * @brief Write an amount of data in non-blocking mode with DMA to a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size) +{ + uint32_t tickstart; + uint32_t xfermode; + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Master_ISR_DMA; + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = I2C_AUTOEND_MODE; + } + + /* Send Slave Address and Memory Address */ + if (I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) + != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + return HAL_ERROR; + } + + + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMAMasterTransmitCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)pData, (uint32_t)&hi2c->Instance->TXDR, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Send Slave Address */ + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, I2C_NO_STARTSTOP); + + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR and NACK interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Reads an amount of data in non-blocking mode with DMA from a specific memory address. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be read + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size) +{ + uint32_t tickstart; + uint32_t xfermode; + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Master_ISR_DMA; + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = I2C_AUTOEND_MODE; + } + + /* Send Slave Address and Memory Address */ + if (I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + return HAL_ERROR; + } + + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMAMasterReceiveCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->RXDR, (uint32_t)pData, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, I2C_GENERATE_START_READ); + + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR and NACK interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_RXDMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Checks if target device is ready for communication. + * @note This function is used with Memory devices + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param Trials Number of trials + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, + uint32_t Timeout) +{ + uint32_t tickstart; + + __IO uint32_t I2C_Trials = 0UL; + + FlagStatus tmp1; + FlagStatus tmp2; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + do + { + /* Generate Start */ + hi2c->Instance->CR2 = I2C_GENERATE_START(hi2c->Init.AddressingMode, DevAddress); + + /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ + /* Wait until STOPF flag is set or a NACK flag is set*/ + tickstart = HAL_GetTick(); + + tmp1 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF); + tmp2 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF); + + while ((tmp1 == RESET) && (tmp2 == RESET)) + { + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U)) + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + + tmp1 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF); + tmp2 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF); + } + + /* Check if the NACKF flag has not been set */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == RESET) + { + /* Wait until STOPF flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_STOPF, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Device is ready */ + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + /* Wait until STOPF flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_STOPF, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Clear STOP Flag, auto generated with autoend*/ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + } + + /* Check if the maximum allowed number of trials has been reached */ + if (I2C_Trials == Trials) + { + /* Generate Stop */ + hi2c->Instance->CR2 |= I2C_CR2_STOP; + + /* Wait until STOPF flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_STOPF, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + } + + /* Increment Trials */ + I2C_Trials++; + } while (I2C_Trials < Trials); + + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential transmit in master I2C mode an amount of data in non-blocking mode with Interrupt. + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions) +{ + uint32_t xfermode; + uint32_t xferrequest = I2C_GENERATE_START_WRITE; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Master_ISR_IT; + + /* If hi2c->XferCount > MAX_NBYTE_SIZE, use reload mode */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = hi2c->XferOptions; + } + + /* If transfer direction not change and there is no request to start another frame, + do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if ((hi2c->PreviousState == I2C_STATE_MASTER_BUSY_TX) && \ + (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0)) + { + xferrequest = I2C_NO_STARTSTOP; + } + else + { + /* Convert OTHER_xxx XferOptions if any */ + I2C_ConvertOtherXferOptions(hi2c); + + /* Update xfermode accordingly if no reload is necessary */ + if (hi2c->XferCount <= MAX_NBYTE_SIZE) + { + xfermode = hi2c->XferOptions; + } + } + + /* Send Slave Address and set NBYTES to write */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, xferrequest); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential transmit in master I2C mode an amount of data in non-blocking mode with DMA. + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions) +{ + uint32_t xfermode; + uint32_t xferrequest = I2C_GENERATE_START_WRITE; + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Master_ISR_DMA; + + /* If hi2c->XferCount > MAX_NBYTE_SIZE, use reload mode */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = hi2c->XferOptions; + } + + /* If transfer direction not change and there is no request to start another frame, + do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if ((hi2c->PreviousState == I2C_STATE_MASTER_BUSY_TX) && \ + (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0)) + { + xferrequest = I2C_NO_STARTSTOP; + } + else + { + /* Convert OTHER_xxx XferOptions if any */ + I2C_ConvertOtherXferOptions(hi2c); + + /* Update xfermode accordingly if no reload is necessary */ + if (hi2c->XferCount <= MAX_NBYTE_SIZE) + { + xfermode = hi2c->XferOptions; + } + } + + if (hi2c->XferSize > 0U) + { + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMAMasterTransmitCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)pData, (uint32_t)&hi2c->Instance->TXDR, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Send Slave Address and set NBYTES to write */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, xferrequest); + + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR and NACK interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Update Transfer ISR function pointer */ + hi2c->XferISR = I2C_Master_ISR_IT; + + /* Send Slave Address */ + /* Set NBYTES to write and generate START condition */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_GENERATE_START_WRITE); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential receive in master I2C mode an amount of data in non-blocking mode with Interrupt + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions) +{ + uint32_t xfermode; + uint32_t xferrequest = I2C_GENERATE_START_READ; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Master_ISR_IT; + + /* If hi2c->XferCount > MAX_NBYTE_SIZE, use reload mode */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = hi2c->XferOptions; + } + + /* If transfer direction not change and there is no request to start another frame, + do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if ((hi2c->PreviousState == I2C_STATE_MASTER_BUSY_RX) && \ + (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0)) + { + xferrequest = I2C_NO_STARTSTOP; + } + else + { + /* Convert OTHER_xxx XferOptions if any */ + I2C_ConvertOtherXferOptions(hi2c); + + /* Update xfermode accordingly if no reload is necessary */ + if (hi2c->XferCount <= MAX_NBYTE_SIZE) + { + xfermode = hi2c->XferOptions; + } + } + + /* Send Slave Address and set NBYTES to read */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, xferrequest); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential receive in master I2C mode an amount of data in non-blocking mode with DMA + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions) +{ + uint32_t xfermode; + uint32_t xferrequest = I2C_GENERATE_START_READ; + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Master_ISR_DMA; + + /* If hi2c->XferCount > MAX_NBYTE_SIZE, use reload mode */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = hi2c->XferOptions; + } + + /* If transfer direction not change and there is no request to start another frame, + do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if ((hi2c->PreviousState == I2C_STATE_MASTER_BUSY_RX) && \ + (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0)) + { + xferrequest = I2C_NO_STARTSTOP; + } + else + { + /* Convert OTHER_xxx XferOptions if any */ + I2C_ConvertOtherXferOptions(hi2c); + + /* Update xfermode accordingly if no reload is necessary */ + if (hi2c->XferCount <= MAX_NBYTE_SIZE) + { + xfermode = hi2c->XferOptions; + } + } + + if (hi2c->XferSize > 0U) + { + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMAMasterReceiveCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->RXDR, (uint32_t)pData, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Send Slave Address and set NBYTES to read */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, xferrequest); + + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR and NACK interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_RXDMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Update Transfer ISR function pointer */ + hi2c->XferISR = I2C_Master_ISR_IT; + + /* Send Slave Address */ + /* Set NBYTES to read and generate START condition */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_GENERATE_START_READ); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential transmit in slave/device I2C mode an amount of data in non-blocking mode with Interrupt + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions) +{ + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + /* Disable Interrupts, to prevent preemption during treatment in case of multicall */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_TX_IT); + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* I2C cannot manage full duplex exchange so disable previous IT enabled if any */ + /* and then toggle the HAL slave RX state to TX state */ + if (hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN) + { + /* Disable associated Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT); + + /* Abort DMA Xfer if any */ + if ((hi2c->Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN) + { + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmarx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmarx->XferAbortCallback(hi2c->hdmarx); + } + } + } + } + + hi2c->State = HAL_I2C_STATE_BUSY_TX_LISTEN; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Slave_ISR_IT; + + if (I2C_GET_DIR(hi2c) == I2C_DIRECTION_RECEIVE) + { + /* Clear ADDR flag after prepare the transfer parameters */ + /* This action will generate an acknowledge to the Master */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* REnable ADDR interrupt */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT | I2C_XFER_LISTEN_IT); + + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Sequential transmit in slave/device I2C mode an amount of data in non-blocking mode with DMA + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions) +{ + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Disable Interrupts, to prevent preemption during treatment in case of multicall */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_TX_IT); + + /* I2C cannot manage full duplex exchange so disable previous IT enabled if any */ + /* and then toggle the HAL slave RX state to TX state */ + if (hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN) + { + /* Disable associated Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT); + + if ((hi2c->Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN) + { + /* Abort DMA Xfer if any */ + if (hi2c->hdmarx != NULL) + { + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmarx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmarx->XferAbortCallback(hi2c->hdmarx); + } + } + } + } + else if (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) + { + if ((hi2c->Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN) + { + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + + /* Abort DMA Xfer if any */ + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmatx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmatx->XferAbortCallback(hi2c->hdmatx); + } + } + } + } + else + { + /* Nothing to do */ + } + + hi2c->State = HAL_I2C_STATE_BUSY_TX_LISTEN; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Slave_ISR_DMA; + + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMASlaveTransmitCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)pData, (uint32_t)&hi2c->Instance->TXDR, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Reset XferSize */ + hi2c->XferSize = 0; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (I2C_GET_DIR(hi2c) == I2C_DIRECTION_RECEIVE) + { + /* Clear ADDR flag after prepare the transfer parameters */ + /* This action will generate an acknowledge to the Master */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, STOP, NACK, ADDR interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; + + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Sequential receive in slave/device I2C mode an amount of data in non-blocking mode with Interrupt + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions) +{ + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + /* Disable Interrupts, to prevent preemption during treatment in case of multicall */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT); + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* I2C cannot manage full duplex exchange so disable previous IT enabled if any */ + /* and then toggle the HAL slave TX state to RX state */ + if (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) + { + /* Disable associated Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT); + + if ((hi2c->Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN) + { + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + + /* Abort DMA Xfer if any */ + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmatx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmatx->XferAbortCallback(hi2c->hdmatx); + } + } + } + } + + hi2c->State = HAL_I2C_STATE_BUSY_RX_LISTEN; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Slave_ISR_IT; + + if (I2C_GET_DIR(hi2c) == I2C_DIRECTION_TRANSMIT) + { + /* Clear ADDR flag after prepare the transfer parameters */ + /* This action will generate an acknowledge to the Master */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* REnable ADDR interrupt */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT | I2C_XFER_LISTEN_IT); + + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Sequential receive in slave/device I2C mode an amount of data in non-blocking mode with DMA + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions) +{ + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + /* Disable Interrupts, to prevent preemption during treatment in case of multicall */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT); + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* I2C cannot manage full duplex exchange so disable previous IT enabled if any */ + /* and then toggle the HAL slave TX state to RX state */ + if (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) + { + /* Disable associated Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT); + + if ((hi2c->Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN) + { + /* Abort DMA Xfer if any */ + if (hi2c->hdmatx != NULL) + { + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmatx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmatx->XferAbortCallback(hi2c->hdmatx); + } + } + } + } + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN) + { + if ((hi2c->Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN) + { + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + + /* Abort DMA Xfer if any */ + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmarx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmarx->XferAbortCallback(hi2c->hdmarx); + } + } + } + } + else + { + /* Nothing to do */ + } + + hi2c->State = HAL_I2C_STATE_BUSY_RX_LISTEN; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Slave_ISR_DMA; + + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMASlaveReceiveCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->RXDR, + (uint32_t)pData, hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Reset XferSize */ + hi2c->XferSize = 0; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (I2C_GET_DIR(hi2c) == I2C_DIRECTION_TRANSMIT) + { + /* Clear ADDR flag after prepare the transfer parameters */ + /* This action will generate an acknowledge to the Master */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* REnable ADDR interrupt */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT | I2C_XFER_LISTEN_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_RXDMAEN; + + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Enable the Address listen mode with Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c) +{ + if (hi2c->State == HAL_I2C_STATE_READY) + { + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->XferISR = I2C_Slave_ISR_IT; + + /* Enable the Address Match interrupt */ + I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Disable the Address listen mode with Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c) +{ + /* Declaration of tmp to prevent undefined behavior of volatile usage */ + uint32_t tmp; + + /* Disable Address listen mode only if a transfer is not ongoing */ + if (hi2c->State == HAL_I2C_STATE_LISTEN) + { + tmp = (uint32_t)(hi2c->State) & I2C_STATE_MSK; + hi2c->PreviousState = tmp | (uint32_t)(hi2c->Mode); + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->XferISR = NULL; + + /* Disable the Address Match interrupt */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Abort a master I2C IT or DMA process communication with Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress) +{ + if (hi2c->Mode == HAL_I2C_MODE_MASTER) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Disable Interrupts and Store Previous state */ + if (hi2c->State == HAL_I2C_STATE_BUSY_TX) + { + I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT); + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_TX; + } + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT); + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_RX; + } + else + { + /* Do nothing */ + } + + /* Set State at HAL_I2C_STATE_ABORT */ + hi2c->State = HAL_I2C_STATE_ABORT; + + /* Set NBYTES to 1 to generate a dummy read on I2C peripheral */ + /* Set AUTOEND mode, this will generate a NACK then STOP condition to abort the current transfer */ + I2C_TransferConfig(hi2c, DevAddress, 1, I2C_AUTOEND_MODE, I2C_GENERATE_STOP); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT); + + return HAL_OK; + } + else + { + /* Wrong usage of abort function */ + /* This function should be used only in case of abort monitored by master device */ + return HAL_ERROR; + } +} + +/** + * @} + */ + +/** @defgroup I2C_IRQ_Handler_and_Callbacks IRQ Handler and Callbacks + * @{ + */ + +/** + * @brief This function handles I2C event interrupt request. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c) +{ + /* Get current IT Flags and IT sources value */ + uint32_t itflags = READ_REG(hi2c->Instance->ISR); + uint32_t itsources = READ_REG(hi2c->Instance->CR1); + + /* I2C events treatment -------------------------------------*/ + if (hi2c->XferISR != NULL) + { + hi2c->XferISR(hi2c, itflags, itsources); + } +} + +/** + * @brief This function handles I2C error interrupt request. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c) +{ + uint32_t itflags = READ_REG(hi2c->Instance->ISR); + uint32_t itsources = READ_REG(hi2c->Instance->CR1); + uint32_t tmperror; + + /* I2C Bus error interrupt occurred ------------------------------------*/ + if ((I2C_CHECK_FLAG(itflags, I2C_FLAG_BERR) != RESET) && \ + (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_ERRI) != RESET)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_BERR; + + /* Clear BERR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_BERR); + } + + /* I2C Over-Run/Under-Run interrupt occurred ----------------------------------------*/ + if ((I2C_CHECK_FLAG(itflags, I2C_FLAG_OVR) != RESET) && \ + (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_ERRI) != RESET)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_OVR; + + /* Clear OVR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_OVR); + } + + /* I2C Arbitration Loss error interrupt occurred -------------------------------------*/ + if ((I2C_CHECK_FLAG(itflags, I2C_FLAG_ARLO) != RESET) && \ + (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_ERRI) != RESET)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_ARLO; + + /* Clear ARLO flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ARLO); + } + + /* Store current volatile hi2c->ErrorCode, misra rule */ + tmperror = hi2c->ErrorCode; + + /* Call the Error Callback in case of Error detected */ + if ((tmperror & (HAL_I2C_ERROR_BERR | HAL_I2C_ERROR_OVR | HAL_I2C_ERROR_ARLO)) != HAL_I2C_ERROR_NONE) + { + I2C_ITError(hi2c, tmperror); + } +} + +/** + * @brief Master Tx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MasterTxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Master Rx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MasterRxCpltCallback could be implemented in the user file + */ +} + +/** @brief Slave Tx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_SlaveTxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Slave Rx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_SlaveRxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Slave Address Match callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param TransferDirection Master request Transfer Direction (Write/Read), value of @ref I2C_XFERDIRECTION + * @param AddrMatchCode Address Match Code + * @retval None + */ +__weak void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + UNUSED(TransferDirection); + UNUSED(AddrMatchCode); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_AddrCallback() could be implemented in the user file + */ +} + +/** + * @brief Listen Complete callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_ListenCpltCallback() could be implemented in the user file + */ +} + +/** + * @brief Memory Tx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MemTxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Memory Rx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MemRxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief I2C error callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_ErrorCallback could be implemented in the user file + */ +} + +/** + * @brief I2C abort callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_AbortCpltCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup I2C_Exported_Functions_Group3 Peripheral State, Mode and Error functions + * @brief Peripheral State, Mode and Error functions + * +@verbatim + =============================================================================== + ##### Peripheral State, Mode and Error functions ##### + =============================================================================== + [..] + This subsection permit to get in run-time the status of the peripheral + and the data flow. + +@endverbatim + * @{ + */ + +/** + * @brief Return the I2C handle state. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL state + */ +HAL_I2C_StateTypeDef HAL_I2C_GetState(I2C_HandleTypeDef *hi2c) +{ + /* Return I2C handle state */ + return hi2c->State; +} + +/** + * @brief Returns the I2C Master, Slave, Memory or no mode. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval HAL mode + */ +HAL_I2C_ModeTypeDef HAL_I2C_GetMode(I2C_HandleTypeDef *hi2c) +{ + return hi2c->Mode; +} + +/** + * @brief Return the I2C error code. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval I2C Error Code + */ +uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c) +{ + return hi2c->ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup I2C_Private_Functions + * @{ + */ + +/** + * @brief Interrupt Sub-Routine which handle the Interrupt Flags Master Mode with Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param ITFlags Interrupt flags to handle. + * @param ITSources Interrupt sources enabled. + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_Master_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources) +{ + uint16_t devaddress; + uint32_t tmpITFlags = ITFlags; + + /* Process Locked */ + __HAL_LOCK(hi2c); + + if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET)) + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Set corresponding Error Code */ + /* No need to generate STOP, it is automatically done */ + /* Error callback will be send during stop flag treatment */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_RXNE) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_RXI) != RESET)) + { + /* Remove RXNE flag on temporary variable as read done */ + tmpITFlags &= ~I2C_FLAG_RXNE; + + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferSize--; + hi2c->XferCount--; + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TXIS) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TXI) != RESET)) + { + /* Write data to TXDR */ + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferSize--; + hi2c->XferCount--; + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TCR) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET)) + { + if ((hi2c->XferCount != 0U) && (hi2c->XferSize == 0U)) + { + devaddress = (uint16_t)(hi2c->Instance->CR2 & I2C_CR2_SADD); + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, devaddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, I2C_NO_STARTSTOP); + } + else + { + hi2c->XferSize = hi2c->XferCount; + if (hi2c->XferOptions != I2C_NO_OPTION_FRAME) + { + I2C_TransferConfig(hi2c, devaddress, (uint8_t)hi2c->XferSize, + hi2c->XferOptions, I2C_NO_STARTSTOP); + } + else + { + I2C_TransferConfig(hi2c, devaddress, (uint8_t)hi2c->XferSize, + I2C_AUTOEND_MODE, I2C_NO_STARTSTOP); + } + } + } + else + { + /* Call TxCpltCallback() if no stop mode is set */ + if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE) + { + /* Call I2C Master Sequential complete process */ + I2C_ITMasterSeqCplt(hi2c); + } + else + { + /* Wrong size Status regarding TCR flag event */ + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_SIZE); + } + } + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TC) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET)) + { + if (hi2c->XferCount == 0U) + { + if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE) + { + /* Generate a stop condition in case of no transfer option */ + if (hi2c->XferOptions == I2C_NO_OPTION_FRAME) + { + /* Generate Stop */ + hi2c->Instance->CR2 |= I2C_CR2_STOP; + } + else + { + /* Call I2C Master Sequential complete process */ + I2C_ITMasterSeqCplt(hi2c); + } + } + } + else + { + /* Wrong size Status regarding TC flag event */ + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_SIZE); + } + } + else + { + /* Nothing to do */ + } + + if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET)) + { + /* Call I2C Master complete process */ + I2C_ITMasterCplt(hi2c, tmpITFlags); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; +} + +/** + * @brief Interrupt Sub-Routine which handle the Interrupt Flags Slave Mode with Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param ITFlags Interrupt flags to handle. + * @param ITSources Interrupt sources enabled. + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources) +{ + uint32_t tmpoptions = hi2c->XferOptions; + uint32_t tmpITFlags = ITFlags; + + /* Process locked */ + __HAL_LOCK(hi2c); + + /* Check if STOPF is set */ + if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET)) + { + /* Call I2C Slave complete process */ + I2C_ITSlaveCplt(hi2c, tmpITFlags); + } + + if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET)) + { + /* Check that I2C transfer finished */ + /* if yes, normal use case, a NACK is sent by the MASTER when Transfer is finished */ + /* Mean XferCount == 0*/ + /* So clear Flag NACKF only */ + if (hi2c->XferCount == 0U) + { + if ((hi2c->State == HAL_I2C_STATE_LISTEN) && (tmpoptions == I2C_FIRST_AND_LAST_FRAME)) + /* Same action must be done for (tmpoptions == I2C_LAST_FRAME) which removed for + Warning[Pa134]: left and right operands are identical */ + { + /* Call I2C Listen complete process */ + I2C_ITListenCplt(hi2c, tmpITFlags); + } + else if ((hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) && (tmpoptions != I2C_NO_OPTION_FRAME)) + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + + /* Last Byte is Transmitted */ + /* Call I2C Slave Sequential complete process */ + I2C_ITSlaveSeqCplt(hi2c); + } + else + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + } + } + else + { + /* if no, error use case, a Non-Acknowledge of last Data is generated by the MASTER*/ + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Set ErrorCode corresponding to a Non-Acknowledge */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + + if ((tmpoptions == I2C_FIRST_FRAME) || (tmpoptions == I2C_NEXT_FRAME)) + { + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, hi2c->ErrorCode); + } + } + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_RXNE) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_RXI) != RESET)) + { + if (hi2c->XferCount > 0U) + { + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferSize--; + hi2c->XferCount--; + } + + if ((hi2c->XferCount == 0U) && \ + (tmpoptions != I2C_NO_OPTION_FRAME)) + { + /* Call I2C Slave Sequential complete process */ + I2C_ITSlaveSeqCplt(hi2c); + } + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_ADDR) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_ADDRI) != RESET)) + { + I2C_ITAddrCplt(hi2c, tmpITFlags); + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TXIS) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TXI) != RESET)) + { + /* Write data to TXDR only if XferCount not reach "0" */ + /* A TXIS flag can be set, during STOP treatment */ + /* Check if all Data have already been sent */ + /* If it is the case, this last write in TXDR is not sent, correspond to a dummy TXIS event */ + if (hi2c->XferCount > 0U) + { + /* Write data to TXDR */ + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + hi2c->XferSize--; + } + else + { + if ((tmpoptions == I2C_NEXT_FRAME) || (tmpoptions == I2C_FIRST_FRAME)) + { + /* Last Byte is Transmitted */ + /* Call I2C Slave Sequential complete process */ + I2C_ITSlaveSeqCplt(hi2c); + } + } + } + else + { + /* Nothing to do */ + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; +} + +/** + * @brief Interrupt Sub-Routine which handle the Interrupt Flags Master Mode with DMA. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param ITFlags Interrupt flags to handle. + * @param ITSources Interrupt sources enabled. + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_Master_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources) +{ + uint16_t devaddress; + uint32_t xfermode; + + /* Process Locked */ + __HAL_LOCK(hi2c); + + if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET)) + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Set corresponding Error Code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + + /* No need to generate STOP, it is automatically done */ + /* But enable STOP interrupt, to treat it */ + /* Error callback will be send during stop flag treatment */ + I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT); + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + } + else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_TCR) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET)) + { + /* Disable TC interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_TCI); + + if (hi2c->XferCount != 0U) + { + /* Recover Slave address */ + devaddress = (uint16_t)(hi2c->Instance->CR2 & I2C_CR2_SADD); + + /* Prepare the new XferSize to transfer */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + if (hi2c->XferOptions != I2C_NO_OPTION_FRAME) + { + xfermode = hi2c->XferOptions; + } + else + { + xfermode = I2C_AUTOEND_MODE; + } + } + + /* Set the new XferSize in Nbytes register */ + I2C_TransferConfig(hi2c, devaddress, (uint8_t)hi2c->XferSize, xfermode, I2C_NO_STARTSTOP); + + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Enable DMA Request */ + if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + hi2c->Instance->CR1 |= I2C_CR1_RXDMAEN; + } + else + { + hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; + } + } + else + { + /* Call TxCpltCallback() if no stop mode is set */ + if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE) + { + /* Call I2C Master Sequential complete process */ + I2C_ITMasterSeqCplt(hi2c); + } + else + { + /* Wrong size Status regarding TCR flag event */ + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_SIZE); + } + } + } + else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_TC) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET)) + { + if (hi2c->XferCount == 0U) + { + if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE) + { + /* Generate a stop condition in case of no transfer option */ + if (hi2c->XferOptions == I2C_NO_OPTION_FRAME) + { + /* Generate Stop */ + hi2c->Instance->CR2 |= I2C_CR2_STOP; + } + else + { + /* Call I2C Master Sequential complete process */ + I2C_ITMasterSeqCplt(hi2c); + } + } + } + else + { + /* Wrong size Status regarding TC flag event */ + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_SIZE); + } + } + else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET)) + { + /* Call I2C Master complete process */ + I2C_ITMasterCplt(hi2c, ITFlags); + } + else + { + /* Nothing to do */ + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; +} + +/** + * @brief Interrupt Sub-Routine which handle the Interrupt Flags Slave Mode with DMA. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param ITFlags Interrupt flags to handle. + * @param ITSources Interrupt sources enabled. + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources) +{ + uint32_t tmpoptions = hi2c->XferOptions; + uint32_t treatdmanack = 0U; + HAL_I2C_StateTypeDef tmpstate; + + /* Process locked */ + __HAL_LOCK(hi2c); + + /* Check if STOPF is set */ + if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET)) + { + /* Call I2C Slave complete process */ + I2C_ITSlaveCplt(hi2c, ITFlags); + } + + if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET)) + { + /* Check that I2C transfer finished */ + /* if yes, normal use case, a NACK is sent by the MASTER when Transfer is finished */ + /* Mean XferCount == 0 */ + /* So clear Flag NACKF only */ + if ((I2C_CHECK_IT_SOURCE(ITSources, I2C_CR1_TXDMAEN) != RESET) || + (I2C_CHECK_IT_SOURCE(ITSources, I2C_CR1_RXDMAEN) != RESET)) + { + /* Split check of hdmarx, for MISRA compliance */ + if (hi2c->hdmarx != NULL) + { + if (I2C_CHECK_IT_SOURCE(ITSources, I2C_CR1_RXDMAEN) != RESET) + { + if (__HAL_DMA_GET_COUNTER(hi2c->hdmarx) == 0U) + { + treatdmanack = 1U; + } + } + } + + /* Split check of hdmatx, for MISRA compliance */ + if (hi2c->hdmatx != NULL) + { + if (I2C_CHECK_IT_SOURCE(ITSources, I2C_CR1_TXDMAEN) != RESET) + { + if (__HAL_DMA_GET_COUNTER(hi2c->hdmatx) == 0U) + { + treatdmanack = 1U; + } + } + } + + if (treatdmanack == 1U) + { + if ((hi2c->State == HAL_I2C_STATE_LISTEN) && (tmpoptions == I2C_FIRST_AND_LAST_FRAME)) + /* Same action must be done for (tmpoptions == I2C_LAST_FRAME) which removed for + Warning[Pa134]: left and right operands are identical */ + { + /* Call I2C Listen complete process */ + I2C_ITListenCplt(hi2c, ITFlags); + } + else if ((hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) && (tmpoptions != I2C_NO_OPTION_FRAME)) + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + + /* Last Byte is Transmitted */ + /* Call I2C Slave Sequential complete process */ + I2C_ITSlaveSeqCplt(hi2c); + } + else + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + } + } + else + { + /* if no, error use case, a Non-Acknowledge of last Data is generated by the MASTER*/ + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Set ErrorCode corresponding to a Non-Acknowledge */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + + /* Store current hi2c->State, solve MISRA2012-Rule-13.5 */ + tmpstate = hi2c->State; + + if ((tmpoptions == I2C_FIRST_FRAME) || (tmpoptions == I2C_NEXT_FRAME)) + { + if ((tmpstate == HAL_I2C_STATE_BUSY_TX) || (tmpstate == HAL_I2C_STATE_BUSY_TX_LISTEN)) + { + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_TX; + } + else if ((tmpstate == HAL_I2C_STATE_BUSY_RX) || (tmpstate == HAL_I2C_STATE_BUSY_RX_LISTEN)) + { + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_RX; + } + else + { + /* Do nothing */ + } + + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, hi2c->ErrorCode); + } + } + } + else + { + /* Only Clear NACK Flag, no DMA treatment is pending */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + } + } + else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_ADDR) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_ADDRI) != RESET)) + { + I2C_ITAddrCplt(hi2c, ITFlags); + } + else + { + /* Nothing to do */ + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; +} + +/** + * @brief Master sends target device address followed by internal memory address for write request. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, + uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, + uint32_t Tickstart) +{ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_RELOAD_MODE, I2C_GENERATE_START_WRITE); + + /* Wait until TXIS flag is set */ + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* If Memory address size is 8Bit */ + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) + { + /* Send Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + } + /* If Memory address size is 16Bit */ + else + { + /* Send MSB of Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress); + + /* Wait until TXIS flag is set */ + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Send LSB of Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + } + + /* Wait until TCR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @brief Master sends target device address followed by internal memory address for read request. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_RequestMemoryRead(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, + uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, + uint32_t Tickstart) +{ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_SOFTEND_MODE, I2C_GENERATE_START_WRITE); + + /* Wait until TXIS flag is set */ + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* If Memory address size is 8Bit */ + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) + { + /* Send Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + } + /* If Memory address size is 16Bit */ + else + { + /* Send MSB of Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress); + + /* Wait until TXIS flag is set */ + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Send LSB of Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + } + + /* Wait until TC flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TC, RESET, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @brief I2C Address complete process callback. + * @param hi2c I2C handle. + * @param ITFlags Interrupt flags to handle. + * @retval None + */ +static void I2C_ITAddrCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) +{ + uint8_t transferdirection; + uint16_t slaveaddrcode; + uint16_t ownadd1code; + uint16_t ownadd2code; + + /* Prevent unused argument(s) compilation warning */ + UNUSED(ITFlags); + + /* In case of Listen state, need to inform upper layer of address match code event */ + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + transferdirection = I2C_GET_DIR(hi2c); + slaveaddrcode = I2C_GET_ADDR_MATCH(hi2c); + ownadd1code = I2C_GET_OWN_ADDRESS1(hi2c); + ownadd2code = I2C_GET_OWN_ADDRESS2(hi2c); + + /* If 10bits addressing mode is selected */ + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) + { + if ((slaveaddrcode & SLAVE_ADDR_MSK) == ((ownadd1code >> SLAVE_ADDR_SHIFT) & SLAVE_ADDR_MSK)) + { + slaveaddrcode = ownadd1code; + hi2c->AddrEventCount++; + if (hi2c->AddrEventCount == 2U) + { + /* Reset Address Event counter */ + hi2c->AddrEventCount = 0U; + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call Slave Addr callback */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->AddrCallback(hi2c, transferdirection, slaveaddrcode); +#else + HAL_I2C_AddrCallback(hi2c, transferdirection, slaveaddrcode); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + else + { + slaveaddrcode = ownadd2code; + + /* Disable ADDR Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call Slave Addr callback */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->AddrCallback(hi2c, transferdirection, slaveaddrcode); +#else + HAL_I2C_AddrCallback(hi2c, transferdirection, slaveaddrcode); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + /* else 7 bits addressing mode is selected */ + else + { + /* Disable ADDR Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call Slave Addr callback */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->AddrCallback(hi2c, transferdirection, slaveaddrcode); +#else + HAL_I2C_AddrCallback(hi2c, transferdirection, slaveaddrcode); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + /* Else clear address flag only */ + else + { + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + } +} + +/** + * @brief I2C Master sequential complete process. + * @param hi2c I2C handle. + * @retval None + */ +static void I2C_ITMasterSeqCplt(I2C_HandleTypeDef *hi2c) +{ + /* Reset I2C handle mode */ + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* No Generate Stop, to permit restart mode */ + /* The stop will be done at the end of transfer, when I2C_AUTOEND_MODE enable */ + if (hi2c->State == HAL_I2C_STATE_BUSY_TX) + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_TX; + hi2c->XferISR = NULL; + + /* Disable Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterTxCpltCallback(hi2c); +#else + HAL_I2C_MasterTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + /* hi2c->State == HAL_I2C_STATE_BUSY_RX */ + else + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_RX; + hi2c->XferISR = NULL; + + /* Disable Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterRxCpltCallback(hi2c); +#else + HAL_I2C_MasterRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } +} + +/** + * @brief I2C Slave sequential complete process. + * @param hi2c I2C handle. + * @retval None + */ +static void I2C_ITSlaveSeqCplt(I2C_HandleTypeDef *hi2c) +{ + uint32_t tmpcr1value = READ_REG(hi2c->Instance->CR1); + + /* Reset I2C handle mode */ + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* If a DMA is ongoing, Update handle size context */ + if (I2C_CHECK_IT_SOURCE(tmpcr1value, I2C_CR1_TXDMAEN) != RESET) + { + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + } + else if (I2C_CHECK_IT_SOURCE(tmpcr1value, I2C_CR1_RXDMAEN) != RESET) + { + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + } + else + { + /* Do nothing */ + } + + if (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) + { + /* Remove HAL_I2C_STATE_SLAVE_BUSY_TX, keep only HAL_I2C_STATE_LISTEN */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_TX; + + /* Disable Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveTxCpltCallback(hi2c); +#else + HAL_I2C_SlaveTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN) + { + /* Remove HAL_I2C_STATE_SLAVE_BUSY_RX, keep only HAL_I2C_STATE_LISTEN */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_RX; + + /* Disable Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveRxCpltCallback(hi2c); +#else + HAL_I2C_SlaveRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + /* Nothing to do */ + } +} + +/** + * @brief I2C Master complete process. + * @param hi2c I2C handle. + * @param ITFlags Interrupt flags to handle. + * @retval None + */ +static void I2C_ITMasterCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) +{ + uint32_t tmperror; + uint32_t tmpITFlags = ITFlags; + __IO uint32_t tmpreg; + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Disable Interrupts and Store Previous state */ + if (hi2c->State == HAL_I2C_STATE_BUSY_TX) + { + I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT); + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_TX; + } + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT); + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_RX; + } + else + { + /* Do nothing */ + } + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + /* Reset handle parameters */ + hi2c->XferISR = NULL; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + + if (I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Set acknowledge error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + } + + /* Fetch Last receive data if any */ + if ((hi2c->State == HAL_I2C_STATE_ABORT) && (I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_RXNE) != RESET)) + { + /* Read data from RXDR */ + tmpreg = (uint8_t)hi2c->Instance->RXDR; + UNUSED(tmpreg); + } + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + + /* Store current volatile hi2c->ErrorCode, misra rule */ + tmperror = hi2c->ErrorCode; + + /* Call the corresponding callback to inform upper layer of End of Transfer */ + if ((hi2c->State == HAL_I2C_STATE_ABORT) || (tmperror != HAL_I2C_ERROR_NONE)) + { + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, hi2c->ErrorCode); + } + /* hi2c->State == HAL_I2C_STATE_BUSY_TX */ + else if (hi2c->State == HAL_I2C_STATE_BUSY_TX) + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + + if (hi2c->Mode == HAL_I2C_MODE_MEM) + { + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MemTxCpltCallback(hi2c); +#else + HAL_I2C_MemTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterTxCpltCallback(hi2c); +#else + HAL_I2C_MasterTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + /* hi2c->State == HAL_I2C_STATE_BUSY_RX */ + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + + if (hi2c->Mode == HAL_I2C_MODE_MEM) + { + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MemRxCpltCallback(hi2c); +#else + HAL_I2C_MemRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterRxCpltCallback(hi2c); +#else + HAL_I2C_MasterRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + else + { + /* Nothing to do */ + } +} + +/** + * @brief I2C Slave complete process. + * @param hi2c I2C handle. + * @param ITFlags Interrupt flags to handle. + * @retval None + */ +static void I2C_ITSlaveCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) +{ + uint32_t tmpcr1value = READ_REG(hi2c->Instance->CR1); + uint32_t tmpITFlags = ITFlags; + HAL_I2C_StateTypeDef tmpstate = hi2c->State; + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Disable Interrupts and Store Previous state */ + if ((tmpstate == HAL_I2C_STATE_BUSY_TX) || (tmpstate == HAL_I2C_STATE_BUSY_TX_LISTEN)) + { + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_TX_IT); + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_TX; + } + else if ((tmpstate == HAL_I2C_STATE_BUSY_RX) || (tmpstate == HAL_I2C_STATE_BUSY_RX_LISTEN)) + { + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT); + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_RX; + } + else + { + /* Do nothing */ + } + + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + + /* If a DMA is ongoing, Update handle size context */ + if (I2C_CHECK_IT_SOURCE(tmpcr1value, I2C_CR1_TXDMAEN) != RESET) + { + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + + if (hi2c->hdmatx != NULL) + { + hi2c->XferCount = (uint16_t)__HAL_DMA_GET_COUNTER(hi2c->hdmatx); + } + } + else if (I2C_CHECK_IT_SOURCE(tmpcr1value, I2C_CR1_RXDMAEN) != RESET) + { + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + + if (hi2c->hdmarx != NULL) + { + hi2c->XferCount = (uint16_t)__HAL_DMA_GET_COUNTER(hi2c->hdmarx); + } + } + else + { + /* Do nothing */ + } + + /* Store Last receive data if any */ + if (I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_RXNE) != RESET) + { + /* Remove RXNE flag on temporary variable as read done */ + tmpITFlags &= ~I2C_FLAG_RXNE; + + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + if ((hi2c->XferSize > 0U)) + { + hi2c->XferSize--; + hi2c->XferCount--; + } + } + + /* All data are not transferred, so set error code accordingly */ + if (hi2c->XferCount != 0U) + { + /* Set ErrorCode corresponding to a Non-Acknowledge */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + } + + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->XferISR = NULL; + + if (hi2c->ErrorCode != HAL_I2C_ERROR_NONE) + { + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, hi2c->ErrorCode); + + /* Call the Listen Complete callback, to inform upper layer of the end of Listen usecase */ + if (hi2c->State == HAL_I2C_STATE_LISTEN) + { + /* Call I2C Listen complete process */ + I2C_ITListenCplt(hi2c, tmpITFlags); + } + } + else if (hi2c->XferOptions != I2C_NO_OPTION_FRAME) + { + /* Call the Sequential Complete callback, to inform upper layer of the end of Transfer */ + I2C_ITSlaveSeqCplt(hi2c); + + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the Listen Complete callback, to inform upper layer of the end of Listen usecase */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->ListenCpltCallback(hi2c); +#else + HAL_I2C_ListenCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + /* Call the corresponding callback to inform upper layer of End of Transfer */ + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveRxCpltCallback(hi2c); +#else + HAL_I2C_SlaveRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveTxCpltCallback(hi2c); +#else + HAL_I2C_SlaveTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } +} + +/** + * @brief I2C Listen complete process. + * @param hi2c I2C handle. + * @param ITFlags Interrupt flags to handle. + * @retval None + */ +static void I2C_ITListenCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) +{ + /* Reset handle parameters */ + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->XferISR = NULL; + + /* Store Last receive data if any */ + if (I2C_CHECK_FLAG(ITFlags, I2C_FLAG_RXNE) != RESET) + { + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + if ((hi2c->XferSize > 0U)) + { + hi2c->XferSize--; + hi2c->XferCount--; + + /* Set ErrorCode corresponding to a Non-Acknowledge */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + } + } + + /* Disable all Interrupts*/ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT | I2C_XFER_TX_IT); + + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the Listen Complete callback, to inform upper layer of the end of Listen usecase */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->ListenCpltCallback(hi2c); +#else + HAL_I2C_ListenCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +} + +/** + * @brief I2C interrupts error process. + * @param hi2c I2C handle. + * @param ErrorCode Error code to handle. + * @retval None + */ +static void I2C_ITError(I2C_HandleTypeDef *hi2c, uint32_t ErrorCode) +{ + HAL_I2C_StateTypeDef tmpstate = hi2c->State; + uint32_t tmppreviousstate; + + /* Reset handle parameters */ + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferCount = 0U; + + /* Set new error code */ + hi2c->ErrorCode |= ErrorCode; + + /* Disable Interrupts */ + if ((tmpstate == HAL_I2C_STATE_LISTEN) || + (tmpstate == HAL_I2C_STATE_BUSY_TX_LISTEN) || + (tmpstate == HAL_I2C_STATE_BUSY_RX_LISTEN)) + { + /* Disable all interrupts, except interrupts related to LISTEN state */ + I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT | I2C_XFER_TX_IT); + + /* keep HAL_I2C_STATE_LISTEN if set */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->XferISR = I2C_Slave_ISR_IT; + } + else + { + /* Disable all interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT | I2C_XFER_TX_IT); + + /* If state is an abort treatment on going, don't change state */ + /* This change will be do later */ + if (hi2c->State != HAL_I2C_STATE_ABORT) + { + /* Set HAL_I2C_STATE_READY */ + hi2c->State = HAL_I2C_STATE_READY; + } + hi2c->XferISR = NULL; + } + + /* Abort DMA TX transfer if any */ + tmppreviousstate = hi2c->PreviousState; + if ((hi2c->hdmatx != NULL) && ((tmppreviousstate == I2C_STATE_MASTER_BUSY_TX) || \ + (tmppreviousstate == I2C_STATE_SLAVE_BUSY_TX))) + { + if ((hi2c->Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN) + { + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + } + + if (HAL_DMA_GetState(hi2c->hdmatx) != HAL_DMA_STATE_READY) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmatx->XferAbortCallback = I2C_DMAAbort; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmatx->XferAbortCallback(hi2c->hdmatx); + } + } + else + { + I2C_TreatErrorCallback(hi2c); + } + } + /* Abort DMA RX transfer if any */ + else if ((hi2c->hdmarx != NULL) && ((tmppreviousstate == I2C_STATE_MASTER_BUSY_RX) || \ + (tmppreviousstate == I2C_STATE_SLAVE_BUSY_RX))) + { + if ((hi2c->Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN) + { + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + } + + if (HAL_DMA_GetState(hi2c->hdmarx) != HAL_DMA_STATE_READY) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmarx->XferAbortCallback = I2C_DMAAbort; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) + { + /* Call Directly hi2c->hdmarx->XferAbortCallback function in case of error */ + hi2c->hdmarx->XferAbortCallback(hi2c->hdmarx); + } + } + else + { + I2C_TreatErrorCallback(hi2c); + } + } + else + { + I2C_TreatErrorCallback(hi2c); + } +} + +/** + * @brief I2C Error callback treatment. + * @param hi2c I2C handle. + * @retval None + */ +static void I2C_TreatErrorCallback(I2C_HandleTypeDef *hi2c) +{ + if (hi2c->State == HAL_I2C_STATE_ABORT) + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->AbortCpltCallback(hi2c); +#else + HAL_I2C_AbortCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + hi2c->PreviousState = I2C_STATE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->ErrorCallback(hi2c); +#else + HAL_I2C_ErrorCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } +} + +/** + * @brief I2C Tx data register flush process. + * @param hi2c I2C handle. + * @retval None + */ +static void I2C_Flush_TXDR(I2C_HandleTypeDef *hi2c) +{ + /* If a pending TXIS flag is set */ + /* Write a dummy data in TXDR to clear it */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXIS) != RESET) + { + hi2c->Instance->TXDR = 0x00U; + } + + /* Flush TX register if not empty */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXE) == RESET) + { + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_TXE); + } +} + +/** + * @brief DMA I2C master transmit process complete callback. + * @param hdma DMA handle + * @retval None + */ +static void I2C_DMAMasterTransmitCplt(DMA_HandleTypeDef *hdma) +{ + /* Derogation MISRAC2012-Rule-11.5 */ + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); + + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + + /* If last transfer, enable STOP interrupt */ + if (hi2c->XferCount == 0U) + { + /* Enable STOP interrupt */ + I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT); + } + /* else prepare a new DMA transfer and enable TCReload interrupt */ + else + { + /* Update Buffer pointer */ + hi2c->pBuffPtr += hi2c->XferSize; + + /* Set the XferSize to transfer */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + } + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)hi2c->pBuffPtr, (uint32_t)&hi2c->Instance->TXDR, + hi2c->XferSize) != HAL_OK) + { + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_DMA); + } + else + { + /* Enable TC interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RELOAD_IT); + } + } +} + +/** + * @brief DMA I2C slave transmit process complete callback. + * @param hdma DMA handle + * @retval None + */ +static void I2C_DMASlaveTransmitCplt(DMA_HandleTypeDef *hdma) +{ + /* Derogation MISRAC2012-Rule-11.5 */ + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); + uint32_t tmpoptions = hi2c->XferOptions; + + if ((tmpoptions == I2C_NEXT_FRAME) || (tmpoptions == I2C_FIRST_FRAME)) + { + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + + /* Last Byte is Transmitted */ + /* Call I2C Slave Sequential complete process */ + I2C_ITSlaveSeqCplt(hi2c); + } + else + { + /* No specific action, Master fully manage the generation of STOP condition */ + /* Mean that this generation can arrive at any time, at the end or during DMA process */ + /* So STOP condition should be manage through Interrupt treatment */ + } +} + +/** + * @brief DMA I2C master receive process complete callback. + * @param hdma DMA handle + * @retval None + */ +static void I2C_DMAMasterReceiveCplt(DMA_HandleTypeDef *hdma) +{ + /* Derogation MISRAC2012-Rule-11.5 */ + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); + + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + + /* If last transfer, enable STOP interrupt */ + if (hi2c->XferCount == 0U) + { + /* Enable STOP interrupt */ + I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT); + } + /* else prepare a new DMA transfer and enable TCReload interrupt */ + else + { + /* Update Buffer pointer */ + hi2c->pBuffPtr += hi2c->XferSize; + + /* Set the XferSize to transfer */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + } + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->RXDR, (uint32_t)hi2c->pBuffPtr, + hi2c->XferSize) != HAL_OK) + { + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_DMA); + } + else + { + /* Enable TC interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RELOAD_IT); + } + } +} + +/** + * @brief DMA I2C slave receive process complete callback. + * @param hdma DMA handle + * @retval None + */ +static void I2C_DMASlaveReceiveCplt(DMA_HandleTypeDef *hdma) +{ + /* Derogation MISRAC2012-Rule-11.5 */ + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); + uint32_t tmpoptions = hi2c->XferOptions; + + if ((__HAL_DMA_GET_COUNTER(hi2c->hdmarx) == 0U) && \ + (tmpoptions != I2C_NO_OPTION_FRAME)) + { + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + + /* Call I2C Slave Sequential complete process */ + I2C_ITSlaveSeqCplt(hi2c); + } + else + { + /* No specific action, Master fully manage the generation of STOP condition */ + /* Mean that this generation can arrive at any time, at the end or during DMA process */ + /* So STOP condition should be manage through Interrupt treatment */ + } +} + +/** + * @brief DMA I2C communication error callback. + * @param hdma DMA handle + * @retval None + */ +static void I2C_DMAError(DMA_HandleTypeDef *hdma) +{ + /* Derogation MISRAC2012-Rule-11.5 */ + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); + + /* Disable Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_DMA); +} + +/** + * @brief DMA I2C communication abort callback + * (To be called at end of DMA Abort procedure). + * @param hdma DMA handle. + * @retval None + */ +static void I2C_DMAAbort(DMA_HandleTypeDef *hdma) +{ + /* Derogation MISRAC2012-Rule-11.5 */ + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); + + /* Reset AbortCpltCallback */ + if (hi2c->hdmatx != NULL) + { + hi2c->hdmatx->XferAbortCallback = NULL; + } + if (hi2c->hdmarx != NULL) + { + hi2c->hdmarx->XferAbortCallback = NULL; + } + + I2C_TreatErrorCallback(hi2c); +} + +/** + * @brief This function handles I2C Communication Timeout. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param Flag Specifies the I2C flag to check. + * @param Status The new Flag status (SET or RESET). + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, FlagStatus Status, + uint32_t Timeout, uint32_t Tickstart) +{ + while (__HAL_I2C_GET_FLAG(hi2c, Flag) == Status) + { + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + return HAL_ERROR; + } + } + } + return HAL_OK; +} + +/** + * @brief This function handles I2C Communication Timeout for specific usage of TXIS flag. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnTXISFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, + uint32_t Tickstart) +{ + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXIS) == RESET) + { + /* Check if a NACK is detected */ + if (I2C_IsAcknowledgeFailed(hi2c, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + } + return HAL_OK; +} + +/** + * @brief This function handles I2C Communication Timeout for specific usage of STOP flag. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnSTOPFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, + uint32_t Tickstart) +{ + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) + { + /* Check if a NACK is detected */ + if (I2C_IsAcknowledgeFailed(hi2c, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Check for the Timeout */ + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + return HAL_OK; +} + +/** + * @brief This function handles I2C Communication Timeout for specific usage of RXNE flag. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnRXNEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, + uint32_t Tickstart) +{ + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == RESET) + { + /* Check if a NACK is detected */ + if (I2C_IsAcknowledgeFailed(hi2c, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Check if a STOPF is detected */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == SET) + { + /* Check if an RXNE is pending */ + /* Store Last receive data if any */ + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) && (hi2c->XferSize > 0U)) + { + /* Return HAL_OK */ + /* The Reading of data from RXDR will be done in caller function */ + return HAL_OK; + } + else + { + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + + /* Check for the Timeout */ + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + return HAL_OK; +} + +/** + * @brief This function handles Acknowledge failed detection during an I2C Communication. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_IsAcknowledgeFailed(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart) +{ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == SET) + { + /* In case of Soft End condition, generate the STOP condition */ + if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE) + { + /* Generate Stop */ + hi2c->Instance->CR2 |= I2C_CR2_STOP; + } + /* Wait until STOP Flag is reset */ + /* AutoEnd should be initiate after AF */ + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) + { + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + } + + /* Clear NACKF Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + return HAL_OK; +} + +/** + * @brief Handles I2Cx communication when starting transfer or during transfer (TC or TCR flag are set). + * @param hi2c I2C handle. + * @param DevAddress Specifies the slave address to be programmed. + * @param Size Specifies the number of bytes to be programmed. + * This parameter must be a value between 0 and 255. + * @param Mode New state of the I2C START condition generation. + * This parameter can be one of the following values: + * @arg @ref I2C_RELOAD_MODE Enable Reload mode . + * @arg @ref I2C_AUTOEND_MODE Enable Automatic end mode. + * @arg @ref I2C_SOFTEND_MODE Enable Software end mode. + * @param Request New state of the I2C START condition generation. + * This parameter can be one of the following values: + * @arg @ref I2C_NO_STARTSTOP Don't Generate stop and start condition. + * @arg @ref I2C_GENERATE_STOP Generate stop condition (Size should be set to 0). + * @arg @ref I2C_GENERATE_START_READ Generate Restart for read request. + * @arg @ref I2C_GENERATE_START_WRITE Generate Restart for write request. + * @retval None + */ +static void I2C_TransferConfig(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t Size, uint32_t Mode, + uint32_t Request) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + assert_param(IS_TRANSFER_MODE(Mode)); + assert_param(IS_TRANSFER_REQUEST(Request)); + + /* update CR2 register */ + MODIFY_REG(hi2c->Instance->CR2, + ((I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | \ + (I2C_CR2_RD_WRN & (uint32_t)(Request >> (31U - I2C_CR2_RD_WRN_Pos))) | \ + I2C_CR2_START | I2C_CR2_STOP)), \ + (uint32_t)(((uint32_t)DevAddress & I2C_CR2_SADD) | \ + (((uint32_t)Size << I2C_CR2_NBYTES_Pos) & I2C_CR2_NBYTES) | \ + (uint32_t)Mode | (uint32_t)Request)); +} + +/** + * @brief Manage the enabling of Interrupts. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param InterruptRequest Value of @ref I2C_Interrupt_configuration_definition. + * @retval None + */ +static void I2C_Enable_IRQ(I2C_HandleTypeDef *hi2c, uint16_t InterruptRequest) +{ + uint32_t tmpisr = 0U; + + if ((hi2c->XferISR == I2C_Master_ISR_DMA) || \ + (hi2c->XferISR == I2C_Slave_ISR_DMA)) + { + if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT) + { + /* Enable ERR, STOP, NACK and ADDR interrupts */ + tmpisr |= I2C_IT_ADDRI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; + } + + if (InterruptRequest == I2C_XFER_ERROR_IT) + { + /* Enable ERR and NACK interrupts */ + tmpisr |= I2C_IT_ERRI | I2C_IT_NACKI; + } + + if (InterruptRequest == I2C_XFER_CPLT_IT) + { + /* Enable STOP interrupts */ + tmpisr |= (I2C_IT_STOPI | I2C_IT_TCI); + } + + if (InterruptRequest == I2C_XFER_RELOAD_IT) + { + /* Enable TC interrupts */ + tmpisr |= I2C_IT_TCI; + } + } + else + { + if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT) + { + /* Enable ERR, STOP, NACK, and ADDR interrupts */ + tmpisr |= I2C_IT_ADDRI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; + } + + if ((InterruptRequest & I2C_XFER_TX_IT) == I2C_XFER_TX_IT) + { + /* Enable ERR, TC, STOP, NACK and RXI interrupts */ + tmpisr |= I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_TXI; + } + + if ((InterruptRequest & I2C_XFER_RX_IT) == I2C_XFER_RX_IT) + { + /* Enable ERR, TC, STOP, NACK and TXI interrupts */ + tmpisr |= I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_RXI; + } + + if (InterruptRequest == I2C_XFER_CPLT_IT) + { + /* Enable STOP interrupts */ + tmpisr |= I2C_IT_STOPI; + } + } + + /* Enable interrupts only at the end */ + /* to avoid the risk of I2C interrupt handle execution before */ + /* all interrupts requested done */ + __HAL_I2C_ENABLE_IT(hi2c, tmpisr); +} + +/** + * @brief Manage the disabling of Interrupts. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param InterruptRequest Value of @ref I2C_Interrupt_configuration_definition. + * @retval None + */ +static void I2C_Disable_IRQ(I2C_HandleTypeDef *hi2c, uint16_t InterruptRequest) +{ + uint32_t tmpisr = 0U; + + if ((InterruptRequest & I2C_XFER_TX_IT) == I2C_XFER_TX_IT) + { + /* Disable TC and TXI interrupts */ + tmpisr |= I2C_IT_TCI | I2C_IT_TXI; + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) != (uint32_t)HAL_I2C_STATE_LISTEN) + { + /* Disable NACK and STOP interrupts */ + tmpisr |= I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; + } + } + + if ((InterruptRequest & I2C_XFER_RX_IT) == I2C_XFER_RX_IT) + { + /* Disable TC and RXI interrupts */ + tmpisr |= I2C_IT_TCI | I2C_IT_RXI; + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) != (uint32_t)HAL_I2C_STATE_LISTEN) + { + /* Disable NACK and STOP interrupts */ + tmpisr |= I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; + } + } + + if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT) + { + /* Disable ADDR, NACK and STOP interrupts */ + tmpisr |= I2C_IT_ADDRI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; + } + + if (InterruptRequest == I2C_XFER_ERROR_IT) + { + /* Enable ERR and NACK interrupts */ + tmpisr |= I2C_IT_ERRI | I2C_IT_NACKI; + } + + if (InterruptRequest == I2C_XFER_CPLT_IT) + { + /* Enable STOP interrupts */ + tmpisr |= I2C_IT_STOPI; + } + + if (InterruptRequest == I2C_XFER_RELOAD_IT) + { + /* Enable TC interrupts */ + tmpisr |= I2C_IT_TCI; + } + + /* Disable interrupts only at the end */ + /* to avoid a breaking situation like at "t" time */ + /* all disable interrupts request are not done */ + __HAL_I2C_DISABLE_IT(hi2c, tmpisr); +} + +/** + * @brief Convert I2Cx OTHER_xxx XferOptions to functional XferOptions. + * @param hi2c I2C handle. + * @retval None + */ +static void I2C_ConvertOtherXferOptions(I2C_HandleTypeDef *hi2c) +{ + /* if user set XferOptions to I2C_OTHER_FRAME */ + /* it request implicitly to generate a restart condition */ + /* set XferOptions to I2C_FIRST_FRAME */ + if (hi2c->XferOptions == I2C_OTHER_FRAME) + { + hi2c->XferOptions = I2C_FIRST_FRAME; + } + /* else if user set XferOptions to I2C_OTHER_AND_LAST_FRAME */ + /* it request implicitly to generate a restart condition */ + /* then generate a stop condition at the end of transfer */ + /* set XferOptions to I2C_FIRST_AND_LAST_FRAME */ + else if (hi2c->XferOptions == I2C_OTHER_AND_LAST_FRAME) + { + hi2c->XferOptions = I2C_FIRST_AND_LAST_FRAME; + } + else + { + /* Nothing to do */ + } +} + +/** + * @} + */ + +#endif /* HAL_I2C_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_i2c_ex.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_i2c_ex.c new file mode 100644 index 0000000..c36afb6 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_i2c_ex.c @@ -0,0 +1,367 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_i2c_ex.c + * @author MCD Application Team + * @brief I2C Extended HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of I2C Extended peripheral: + * + Filter Mode Functions + * + WakeUp Mode Functions + * + FastModePlus Functions + * + @verbatim + ============================================================================== + ##### I2C peripheral Extended features ##### + ============================================================================== + + [..] Comparing to other previous devices, the I2C interface for STM32F3xx + devices contains the following additional features + + (+) Possibility to disable or enable Analog Noise Filter + (+) Use of a configured Digital Noise Filter + (+) Disable or enable wakeup from Stop mode(s) + (+) Disable or enable Fast Mode Plus + + ##### How to use this driver ##### + ============================================================================== + [..] This driver provides functions to configure Noise Filter and Wake Up Feature + (#) Configure I2C Analog noise filter using the function HAL_I2CEx_ConfigAnalogFilter() + (#) Configure I2C Digital noise filter using the function HAL_I2CEx_ConfigDigitalFilter() + (#) Configure the enable or disable of I2C Wake Up Mode using the functions : + (++) HAL_I2CEx_EnableWakeUp() + (++) HAL_I2CEx_DisableWakeUp() + (#) Configure the enable or disable of fast mode plus driving capability using the functions : + (++) HAL_I2CEx_EnableFastModePlus() + (++) HAL_I2CEx_DisableFastModePlus() + @endverbatim + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup I2CEx I2CEx + * @brief I2C Extended HAL module driver + * @{ + */ + +#ifdef HAL_I2C_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup I2CEx_Exported_Functions I2C Extended Exported Functions + * @{ + */ + +/** @defgroup I2CEx_Exported_Functions_Group1 Filter Mode Functions + * @brief Filter Mode Functions + * +@verbatim + =============================================================================== + ##### Filter Mode Functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure Noise Filters + +@endverbatim + * @{ + */ + +/** + * @brief Configure I2C Analog noise filter. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2Cx peripheral. + * @param AnalogFilter New state of the Analog filter. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + assert_param(IS_I2C_ANALOG_FILTER(AnalogFilter)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + + /* Reset I2Cx ANOFF bit */ + hi2c->Instance->CR1 &= ~(I2C_CR1_ANFOFF); + + /* Set analog filter bit*/ + hi2c->Instance->CR1 |= AnalogFilter; + + __HAL_I2C_ENABLE(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Configure I2C Digital noise filter. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2Cx peripheral. + * @param DigitalFilter Coefficient of digital noise filter between Min_Data=0x00 and Max_Data=0x0F. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter) +{ + uint32_t tmpreg; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + assert_param(IS_I2C_DIGITAL_FILTER(DigitalFilter)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + + /* Get the old register value */ + tmpreg = hi2c->Instance->CR1; + + /* Reset I2Cx DNF bits [11:8] */ + tmpreg &= ~(I2C_CR1_DNF); + + /* Set I2Cx DNF coefficient */ + tmpreg |= DigitalFilter << 8U; + + /* Store the new register value */ + hi2c->Instance->CR1 = tmpreg; + + __HAL_I2C_ENABLE(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} +/** + * @} + */ + +/** @defgroup I2CEx_Exported_Functions_Group2 WakeUp Mode Functions + * @brief WakeUp Mode Functions + * +@verbatim + =============================================================================== + ##### WakeUp Mode Functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure Wake Up Feature + +@endverbatim + * @{ + */ + +/** + * @brief Enable I2C wakeup from Stop mode(s). + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2Cx peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2CEx_EnableWakeUp(I2C_HandleTypeDef *hi2c) +{ + /* Check the parameters */ + assert_param(IS_I2C_WAKEUP_FROMSTOP_INSTANCE(hi2c->Instance)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + + /* Enable wakeup from stop mode */ + hi2c->Instance->CR1 |= I2C_CR1_WUPEN; + + __HAL_I2C_ENABLE(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Disable I2C wakeup from Stop mode(s). + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2Cx peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2CEx_DisableWakeUp(I2C_HandleTypeDef *hi2c) +{ + /* Check the parameters */ + assert_param(IS_I2C_WAKEUP_FROMSTOP_INSTANCE(hi2c->Instance)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + + /* Enable wakeup from stop mode */ + hi2c->Instance->CR1 &= ~(I2C_CR1_WUPEN); + + __HAL_I2C_ENABLE(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} +/** + * @} + */ + +/** @defgroup I2CEx_Exported_Functions_Group3 Fast Mode Plus Functions + * @brief Fast Mode Plus Functions + * +@verbatim + =============================================================================== + ##### Fast Mode Plus Functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure Fast Mode Plus + +@endverbatim + * @{ + */ + +/** + * @brief Enable the I2C fast mode plus driving capability. + * @param ConfigFastModePlus Selects the pin. + * This parameter can be one of the @ref I2CEx_FastModePlus values + * @note For I2C1, fast mode plus driving capability can be enabled on all selected + * I2C1 pins using I2C_FASTMODEPLUS_I2C1 parameter or independently + * on each one of the following pins PB6, PB7, PB8 and PB9. + * @note For remaining I2C1 pins (PA14, PA15...) fast mode plus driving capability + * can be enabled only by using I2C_FASTMODEPLUS_I2C1 parameter. + * @note For all I2C2 pins fast mode plus driving capability can be enabled + * only by using I2C_FASTMODEPLUS_I2C2 parameter. + * @note For all I2C3 pins fast mode plus driving capability can be enabled + * only by using I2C_FASTMODEPLUS_I2C3 parameter. + * @retval None + */ +void HAL_I2CEx_EnableFastModePlus(uint32_t ConfigFastModePlus) +{ + /* Check the parameter */ + assert_param(IS_I2C_FASTMODEPLUS(ConfigFastModePlus)); + + /* Enable SYSCFG clock */ + __HAL_RCC_SYSCFG_CLK_ENABLE(); + + /* Enable fast mode plus driving capability for selected pin */ + SET_BIT(SYSCFG->CFGR1, (uint32_t)ConfigFastModePlus); +} + +/** + * @brief Disable the I2C fast mode plus driving capability. + * @param ConfigFastModePlus Selects the pin. + * This parameter can be one of the @ref I2CEx_FastModePlus values + * @note For I2C1, fast mode plus driving capability can be disabled on all selected + * I2C1 pins using I2C_FASTMODEPLUS_I2C1 parameter or independently + * on each one of the following pins PB6, PB7, PB8 and PB9. + * @note For remaining I2C1 pins (PA14, PA15...) fast mode plus driving capability + * can be disabled only by using I2C_FASTMODEPLUS_I2C1 parameter. + * @note For all I2C2 pins fast mode plus driving capability can be disabled + * only by using I2C_FASTMODEPLUS_I2C2 parameter. + * @note For all I2C3 pins fast mode plus driving capability can be disabled + * only by using I2C_FASTMODEPLUS_I2C3 parameter. + * @retval None + */ +void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus) +{ + /* Check the parameter */ + assert_param(IS_I2C_FASTMODEPLUS(ConfigFastModePlus)); + + /* Enable SYSCFG clock */ + __HAL_RCC_SYSCFG_CLK_ENABLE(); + + /* Disable fast mode plus driving capability for selected pin */ + CLEAR_BIT(SYSCFG->CFGR1, (uint32_t)ConfigFastModePlus); +} +/** + * @} + */ +/** + * @} + */ + +#endif /* HAL_I2C_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_pwr.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_pwr.c new file mode 100644 index 0000000..3ad97c3 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_pwr.c @@ -0,0 +1,461 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_pwr.c + * @author MCD Application Team + * @brief PWR HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Power Controller (PWR) peripheral: + * + Initialization/de-initialization functions + * + Peripheral Control functions + * + @verbatim + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup PWR PWR + * @brief PWR HAL module driver + * @{ + */ + +#ifdef HAL_PWR_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup PWR_Exported_Functions PWR Exported Functions + * @{ + */ + +/** @defgroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and de-initialization functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + After reset, the backup domain (RTC registers, RTC backup data + registers and backup SRAM) is protected against possible unwanted + write accesses. + To enable access to the RTC Domain and RTC registers, proceed as follows: + (+) Enable the Power Controller (PWR) APB1 interface clock using the + __HAL_RCC_PWR_CLK_ENABLE() macro. + (+) Enable access to RTC domain using the HAL_PWR_EnableBkUpAccess() function. + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the PWR peripheral registers to their default reset values. + * @retval None + */ +void HAL_PWR_DeInit(void) +{ + __HAL_RCC_PWR_FORCE_RESET(); + __HAL_RCC_PWR_RELEASE_RESET(); +} + +/** + * @brief Enables access to the backup domain (RTC registers, RTC + * backup data registers and backup SRAM). + * @note If the HSE divided by 32 is used as the RTC clock, the + * Backup Domain Access should be kept enabled. + * @retval None + */ +void HAL_PWR_EnableBkUpAccess(void) +{ + SET_BIT(PWR->CR, PWR_CR_DBP); +} + +/** + * @brief Disables access to the backup domain (RTC registers, RTC + * backup data registers and backup SRAM). + * @note If the HSE divided by 32 is used as the RTC clock, the + * Backup Domain Access should be kept enabled. + * @retval None + */ +void HAL_PWR_DisableBkUpAccess(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_DBP); +} + +/** + * @} + */ + +/** @defgroup PWR_Exported_Functions_Group2 Peripheral Control functions + * @brief Low Power modes configuration functions + * +@verbatim + + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + + *** WakeUp pin configuration *** + ================================ + [..] + (+) WakeUp pin is used to wakeup the system from Standby mode. This pin is + forced in input pull down configuration and is active on rising edges. + (+) There are up to three WakeUp pins: + (++)WakeUp Pin 1 on PA.00. + (++)WakeUp Pin 2 on PC.13 (STM32F303xC, STM32F303xE only). + (++)WakeUp Pin 3 on PE.06. + + *** Main and Backup Regulators configuration *** + ================================================ + [..] + (+) When the backup domain is supplied by VDD (analog switch connected to VDD) + the backup SRAM is powered from VDD which replaces the VBAT power supply to + save battery life. + + (+) The backup SRAM is not mass erased by a tamper event. It is read + protected to prevent confidential data, such as cryptographic private + key, from being accessed. The backup SRAM can be erased only through + the Flash interface when a protection level change from level 1 to + level 0 is requested. + -@- Refer to the description of Read protection (RDP) in the Flash + programming manual. + + Refer to the datasheets for more details. + + *** Low Power modes configuration *** + ===================================== + [..] + The devices feature 3 low-power modes: + (+) Sleep mode: Cortex-M4 core stopped, peripherals kept running. + (+) Stop mode: all clocks are stopped, regulator running, regulator + in low power mode + (+) Standby mode: 1.2V domain powered off (mode not available on STM32F3x8 devices). + + *** Sleep mode *** + ================== + [..] + (+) Entry: + The Sleep mode is entered by using the HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFx) + functions with + (++) PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction + (++) PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction + + (+) Exit: + (++) Any peripheral interrupt acknowledged by the nested vectored interrupt + controller (NVIC) can wake up the device from Sleep mode. + + *** Stop mode *** + ================= + [..] + In Stop mode, all clocks in the 1.8V domain are stopped, the PLL, the HSI, + and the HSE RC oscillators are disabled. Internal SRAM and register contents + are preserved. + The voltage regulator can be configured either in normal or low-power mode to minimize the consumption. + + (+) Entry: + The Stop mode is entered using the HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI ) + function with: + (++) Main regulator ON or + (++) Low Power regulator ON. + (++) PWR_STOPENTRY_WFI: enter STOP mode with WFI instruction or + (++) PWR_STOPENTRY_WFE: enter STOP mode with WFE instruction + (+) Exit: + (++) Any EXTI Line (Internal or External) configured in Interrupt/Event mode. + (++) Some specific communication peripherals (CEC, USART, I2C) interrupts, + when programmed in wakeup mode (the peripheral must be + programmed in wakeup mode and the corresponding interrupt vector + must be enabled in the NVIC). + + *** Standby mode *** + ==================== + [..] + The Standby mode allows to achieve the lowest power consumption. It is based + on the Cortex-M4 deep sleep mode, with the voltage regulator disabled. + The 1.8V domain is consequently powered off. The PLL, the HSI oscillator and + the HSE oscillator are also switched off. SRAM and register contents are lost + except for the RTC registers, RTC backup registers, backup SRAM and Standby + circuitry. + The voltage regulator is OFF. + + (+) Entry: + (++) The Standby mode is entered using the HAL_PWR_EnterSTANDBYMode() function. + (+) Exit: + (++) WKUP pin rising edge, RTC alarm (Alarm A and Alarm B), RTC wakeup, + tamper event, time-stamp event, external reset in NRST pin, IWDG reset. + + *** Auto-wakeup (AWU) from low-power mode *** + ============================================= + [..] + The MCU can be woken up from low-power mode by an RTC Alarm event, an RTC + Wakeup event, a tamper event, a time-stamp event, or a comparator event, + without depending on an external interrupt (Auto-wakeup mode). + + (+) RTC auto-wakeup (AWU) from the Stop and Standby modes + + (++) To wake up from the Stop mode with an RTC alarm event, it is necessary to + configure the RTC to generate the RTC alarm using the HAL_RTC_SetAlarm_IT() function. + + (++) To wake up from the Stop mode with an RTC Tamper or time stamp event, it + is necessary to configure the RTC to detect the tamper or time stamp event using the + HAL_RTC_SetTimeStamp_IT() or HAL_RTC_SetTamper_IT() functions. + + (++) To wake up from the Stop mode with an RTC WakeUp event, it is necessary to + configure the RTC to generate the RTC WakeUp event using the HAL_RTC_SetWakeUpTimer_IT() function. + + (+) Comparator auto-wakeup (AWU) from the Stop mode + + (++) To wake up from the Stop mode with a comparator wakeup event, it is necessary to: + (+++) Configure the EXTI Line associated with the comparator (example EXTI Line 22 for comparator 2U) + to be sensitive to to the selected edges (falling, rising or falling + and rising) (Interrupt or Event modes) using the EXTI_Init() function. + (+++) Configure the comparator to generate the event. +@endverbatim + * @{ + */ + +/** + * @brief Enables the WakeUp PINx functionality. + * @param WakeUpPinx Specifies the Power Wake-Up pin to enable. + * This parameter can be value of : + * @ref PWR_WakeUp_Pins + * @retval None + */ +void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx) +{ + /* Check the parameters */ + assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx)); + /* Enable the EWUPx pin */ + SET_BIT(PWR->CSR, WakeUpPinx); +} + +/** + * @brief Disables the WakeUp PINx functionality. + * @param WakeUpPinx Specifies the Power Wake-Up pin to disable. + * This parameter can be values of : + * @ref PWR_WakeUp_Pins + * @retval None + */ +void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx) +{ + /* Check the parameters */ + assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx)); + /* Disable the EWUPx pin */ + CLEAR_BIT(PWR->CSR, WakeUpPinx); +} + +/** + * @brief Enters Sleep mode. + * @note In Sleep mode, all I/O pins keep the same state as in Run mode. + * @param Regulator Specifies the regulator state in SLEEP mode. + * This parameter can be one of the following values: + * @arg PWR_MAINREGULATOR_ON: SLEEP mode with regulator ON + * @arg PWR_LOWPOWERREGULATOR_ON: SLEEP mode with low power regulator ON + * @note This parameter has no effect in F3 family and is just maintained to + * offer full portability of other STM32 families softwares. + * @param SLEEPEntry Specifies if SLEEP mode is entered with WFI or WFE instruction. + * When WFI entry is used, tick interrupt have to be disabled if not desired as + * the interrupt wake up source. + * This parameter can be one of the following values: + * @arg PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction + * @arg PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction + * @retval None + */ +void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry) +{ + /* Check the parameters */ + assert_param(IS_PWR_SLEEP_ENTRY(SLEEPEntry)); + + /* Clear SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); + + /* Select SLEEP mode entry -------------------------------------------------*/ + if(SLEEPEntry == PWR_SLEEPENTRY_WFI) + { + /* Request Wait For Interrupt */ + __WFI(); + } + else + { + /* Request Wait For Event */ + __SEV(); + __WFE(); + __WFE(); + } +} + +/** + * @brief Enters STOP mode. + * @note In Stop mode, all I/O pins keep the same state as in Run mode. + * @note When exiting Stop mode by issuing an interrupt or a wakeup event, + * the HSI RC oscillator is selected as system clock. + * @note When the voltage regulator operates in low power mode, an additional + * startup delay is incurred when waking up from Stop mode. + * By keeping the internal regulator ON during Stop mode, the consumption + * is higher although the startup time is reduced. + * @param Regulator Specifies the regulator state in STOP mode. + * This parameter can be one of the following values: + * @arg PWR_MAINREGULATOR_ON: STOP mode with regulator ON + * @arg PWR_LOWPOWERREGULATOR_ON: STOP mode with low power regulator ON + * @param STOPEntry specifies if STOP mode in entered with WFI or WFE instruction. + * This parameter can be one of the following values: + * @arg PWR_STOPENTRY_WFI:Enter STOP mode with WFI instruction + * @arg PWR_STOPENTRY_WFE: Enter STOP mode with WFE instruction + * @retval None + */ +void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry) +{ + uint32_t tmpreg = 0U; + + /* Check the parameters */ + assert_param(IS_PWR_REGULATOR(Regulator)); + assert_param(IS_PWR_STOP_ENTRY(STOPEntry)); + + /* Select the regulator state in STOP mode ---------------------------------*/ + tmpreg = PWR->CR; + + /* Clear PDDS and LPDS bits */ + tmpreg &= (uint32_t)~(PWR_CR_PDDS | PWR_CR_LPDS); + + /* Set LPDS bit according to Regulator value */ + tmpreg |= Regulator; + + /* Store the new value */ + PWR->CR = tmpreg; + + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + /* Select STOP mode entry --------------------------------------------------*/ + if(STOPEntry == PWR_STOPENTRY_WFI) + { + /* Request Wait For Interrupt */ + __WFI(); + } + else + { + /* Request Wait For Event */ + __SEV(); + __WFE(); + __WFE(); + } + + /* Reset SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); +} + +/** + * @brief Enters STANDBY mode. + * @note In Standby mode, all I/O pins are high impedance except for: + * - Reset pad (still available), + * - RTC alternate function pins if configured for tamper, time-stamp, RTC + * Alarm out, or RTC clock calibration out, + * - WKUP pins if enabled. + * @retval None + */ +void HAL_PWR_EnterSTANDBYMode(void) +{ + /* Select STANDBY mode */ + PWR->CR |= PWR_CR_PDDS; + + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + /* This option is used to ensure that store operations are completed */ +#if defined ( __CC_ARM) + __force_stores(); +#endif + /* Request Wait For Interrupt */ + __WFI(); +} + +/** + * @brief Indicates Sleep-On-Exit when returning from Handler mode to Thread mode. + * @note Set SLEEPONEXIT bit of SCR register. When this bit is set, the processor + * re-enters SLEEP mode when an interruption handling is over. + * Setting this bit is useful when the processor is expected to run only on + * interruptions handling. + * @retval None + */ +void HAL_PWR_EnableSleepOnExit(void) +{ + /* Set SLEEPONEXIT bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk)); +} + + +/** + * @brief Disables Sleep-On-Exit feature when returning from Handler mode to Thread mode. + * @note Clears SLEEPONEXIT bit of SCR register. When this bit is set, the processor + * re-enters SLEEP mode when an interruption handling is over. + * @retval None + */ +void HAL_PWR_DisableSleepOnExit(void) +{ + /* Clear SLEEPONEXIT bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk)); +} + + + +/** + * @brief Enables CORTEX M4 SEVONPEND bit. + * @note Sets SEVONPEND bit of SCR register. When this bit is set, this causes + * WFE to wake up when an interrupt moves from inactive to pended. + * @retval None + */ +void HAL_PWR_EnableSEVOnPend(void) +{ + /* Set SEVONPEND bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk)); +} + + +/** + * @brief Disables CORTEX M4 SEVONPEND bit. + * @note Clears SEVONPEND bit of SCR register. When this bit is set, this causes + * WFE to wake up when an interrupt moves from inactive to pended. + * @retval None + */ +void HAL_PWR_DisableSEVOnPend(void) +{ + /* Clear SEVONPEND bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk)); +} +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_PWR_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_pwr_ex.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_pwr_ex.c new file mode 100644 index 0000000..69e35e9 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_pwr_ex.c @@ -0,0 +1,272 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_pwr_ex.c + * @author MCD Application Team + * @brief Extended PWR HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Power Controller (PWR) peripheral: + * + Extended Initialization and de-initialization functions + * + Extended Peripheral Control functions + * + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup PWREx PWREx + * @brief PWREx HAL module driver + * @{ + */ + +#ifdef HAL_PWR_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup PWREx_Private_Constants PWR Extended Private Constants + * @{ + */ +#define PVD_MODE_IT (0x00010000U) +#define PVD_MODE_EVT (0x00020000U) +#define PVD_RISING_EDGE (0x00000001U) +#define PVD_FALLING_EDGE (0x00000002U) +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions ---------------------------------------------------------*/ + +/** @defgroup PWREx_Exported_Functions PWR Extended Exported Functions + * @{ + */ + +/** @defgroup PWREx_Exported_Functions_Group1 Peripheral Extended Control Functions + * @brief Extended Peripheral Control functions + * +@verbatim + + =============================================================================== + ##### Peripheral Extended control functions ##### + =============================================================================== + *** PVD configuration (present on all other devices than STM32F3x8 devices) *** + ========================= + [..] + (+) The PVD is used to monitor the VDD power supply by comparing it to a + threshold selected by the PVD Level (PLS[2:0] bits in the PWR_CR). + (+) A PVDO flag is available to indicate if VDD/VDDA is higher or lower + than the PVD threshold. This event is internally connected to the EXTI + line16 and can generate an interrupt if enabled. This is done through + __HAL_PWR_PVD_EXTI_ENABLE_IT() macro + (+) The PVD is stopped in Standby mode. + -@- PVD is not available on STM32F3x8 Product Line + + + *** Voltage regulator *** + ========================= + [..] + (+) The voltage regulator is always enabled after Reset. It works in three different + modes. + In Run mode, the regulator supplies full power to the 1.8V domain (core, memories + and digital peripherals). + In Stop mode, the regulator supplies low power to the 1.8V domain, preserving + contents of registers and SRAM. + In Stop mode, the regulator is powered off. The contents of the registers and SRAM + are lost except for the Standby circuitry and the Backup Domain. + Note: in the STM32F3x8xx devices, the voltage regulator is bypassed and the + microcontroller must be powered from a nominal VDD = 1.8V +/-8U% voltage. + + + (+) A PVDO flag is available to indicate if VDD/VDDA is higher or lower + than the PVD threshold. This event is internally connected to the EXTI + line16 and can generate an interrupt if enabled. This is done through + __HAL_PWR_PVD_EXTI_ENABLE_IT() macro + (+) The PVD is stopped in Standby mode. + + + *** SDADC power configuration *** + ================================ + [..] + (+) On STM32F373xC/STM32F378xx devices, there are up to + 3 SDADC instances that can be enabled/disabled. + +@endverbatim + * @{ + */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || \ + defined(STM32F302xC) || defined(STM32F303xC) || \ + defined(STM32F303x8) || defined(STM32F334x8) || \ + defined(STM32F301x8) || defined(STM32F302x8) || \ + defined(STM32F373xC) + +/** + * @brief Configures the voltage threshold detected by the Power Voltage Detector(PVD). + * @param sConfigPVD pointer to an PWR_PVDTypeDef structure that contains the configuration + * information for the PVD. + * @note Refer to the electrical characteristics of your device datasheet for + * more details about the voltage threshold corresponding to each + * detection level. + * @retval None + */ +void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD) +{ + /* Check the parameters */ + assert_param(IS_PWR_PVD_LEVEL(sConfigPVD->PVDLevel)); + assert_param(IS_PWR_PVD_MODE(sConfigPVD->Mode)); + + /* Set PLS[7:5] bits according to PVDLevel value */ + MODIFY_REG(PWR->CR, PWR_CR_PLS, sConfigPVD->PVDLevel); + + /* Clear any previous config. Keep it clear if no event or IT mode is selected */ + __HAL_PWR_PVD_EXTI_DISABLE_EVENT(); + __HAL_PWR_PVD_EXTI_DISABLE_IT(); + __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); + + /* Configure interrupt mode */ + if((sConfigPVD->Mode & PVD_MODE_IT) == PVD_MODE_IT) + { + __HAL_PWR_PVD_EXTI_ENABLE_IT(); + } + + /* Configure event mode */ + if((sConfigPVD->Mode & PVD_MODE_EVT) == PVD_MODE_EVT) + { + __HAL_PWR_PVD_EXTI_ENABLE_EVENT(); + } + + /* Configure the edge */ + if((sConfigPVD->Mode & PVD_RISING_EDGE) == PVD_RISING_EDGE) + { + __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE(); + } + + if((sConfigPVD->Mode & PVD_FALLING_EDGE) == PVD_FALLING_EDGE) + { + __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE(); + } +} + +/** + * @brief Enables the Power Voltage Detector(PVD). + * @retval None + */ +void HAL_PWR_EnablePVD(void) +{ + SET_BIT(PWR->CR, PWR_CR_PVDE); +} + +/** + * @brief Disables the Power Voltage Detector(PVD). + * @retval None + */ +void HAL_PWR_DisablePVD(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_PVDE); +} + +/** + * @brief This function handles the PWR PVD interrupt request. + * @note This API should be called under the PVD_IRQHandler(). + * @retval None + */ +void HAL_PWR_PVD_IRQHandler(void) +{ + /* Check PWR exti flag */ + if(__HAL_PWR_PVD_EXTI_GET_FLAG() != RESET) + { + /* PWR PVD interrupt user callback */ + HAL_PWR_PVDCallback(); + + /* Clear PWR Exti pending bit */ + __HAL_PWR_PVD_EXTI_CLEAR_FLAG(); + } +} + +/** + * @brief PWR PVD interrupt callback + * @retval None + */ +__weak void HAL_PWR_PVDCallback(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_PWR_PVDCallback could be implemented in the user file + */ +} + +#endif /* STM32F302xE || STM32F303xE || */ + /* STM32F302xC || STM32F303xC || */ + /* STM32F303x8 || STM32F334x8 || */ + /* STM32F301x8 || STM32F302x8 || */ + /* STM32F373xC */ + +#if defined(STM32F373xC) || defined(STM32F378xx) + +/** + * @brief Enables the SDADC peripheral functionaliy + * @param Analogx specifies the SDADC peripheral instance. + * This parameter can be: PWR_SDADC_ANALOG1, PWR_SDADC_ANALOG2 or PWR_SDADC_ANALOG3. + * @retval None + */ +void HAL_PWREx_EnableSDADC(uint32_t Analogx) +{ + /* Check the parameters */ + assert_param(IS_PWR_SDADC_ANALOG(Analogx)); + + /* Enable PWR clock interface for SDADC use */ + __HAL_RCC_PWR_CLK_ENABLE(); + + PWR->CR |= Analogx; +} + +/** + * @brief Disables the SDADC peripheral functionaliy + * @param Analogx specifies the SDADC peripheral instance. + * This parameter can be: PWR_SDADC_ANALOG1, PWR_SDADC_ANALOG2 or PWR_SDADC_ANALOG3. + * @retval None + */ +void HAL_PWREx_DisableSDADC(uint32_t Analogx) +{ + /* Check the parameters */ + assert_param(IS_PWR_SDADC_ANALOG(Analogx)); + + PWR->CR &= ~Analogx; +} + +#endif /* STM32F373xC || STM32F378xx */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_PWR_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_rcc.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_rcc.c new file mode 100644 index 0000000..007ff2e --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_rcc.c @@ -0,0 +1,1224 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_rcc.c + * @author MCD Application Team + * @brief RCC HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Reset and Clock Control (RCC) peripheral: + * + Initialization and de-initialization functions + * + Peripheral Control functions + * + @verbatim + ============================================================================== + ##### RCC specific features ##### + ============================================================================== + [..] + After reset the device is running from Internal High Speed oscillator + (HSI 8MHz) with Flash 0 wait state, Flash prefetch buffer is enabled, + and all peripherals are off except internal SRAM, Flash and JTAG. + (+) There is no prescaler on High speed (AHB) and Low speed (APB) buses; + all peripherals mapped on these buses are running at HSI speed. + (+) The clock for all peripherals is switched off, except the SRAM and FLASH. + (+) All GPIOs are in input floating state, except the JTAG pins which + are assigned to be used for debug purpose. + [..] Once the device started from reset, the user application has to: + (+) Configure the clock source to be used to drive the System clock + (if the application needs higher frequency/performance) + (+) Configure the System clock frequency and Flash settings + (+) Configure the AHB and APB buses prescalers + (+) Enable the clock for the peripheral(s) to be used + (+) Configure the clock source(s) for peripherals whose clocks are not + derived from the System clock (RTC, ADC, I2C, I2S, TIM, USB FS) + + ##### RCC Limitations ##### + ============================================================================== + [..] + A delay between an RCC peripheral clock enable and the effective peripheral + enabling should be taken into account in order to manage the peripheral read/write + from/to registers. + (+) This delay depends on the peripheral mapping. + (++) AHB & APB peripherals, 1 dummy read is necessary + + [..] + Workarounds: + (#) For AHB & APB peripherals, a dummy read to the peripheral register has been + inserted in each __HAL_RCC_PPP_CLK_ENABLE() macro. + + @endverbatim + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup RCC RCC +* @brief RCC HAL module driver + * @{ + */ + +#ifdef HAL_RCC_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup RCC_Private_Constants RCC Private Constants + * @{ + */ +/* Bits position in in the CFGR register */ +#define RCC_CFGR_HPRE_BITNUMBER POSITION_VAL(RCC_CFGR_HPRE) +#define RCC_CFGR_PPRE1_BITNUMBER POSITION_VAL(RCC_CFGR_PPRE1) +#define RCC_CFGR_PPRE2_BITNUMBER POSITION_VAL(RCC_CFGR_PPRE2) +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/** @defgroup RCC_Private_Macros RCC Private Macros + * @{ + */ + +#define MCO1_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define MCO1_GPIO_PORT GPIOA +#define MCO1_PIN GPIO_PIN_8 + +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/** @defgroup RCC_Private_Variables RCC Private Variables + * @{ + */ +const uint8_t aPLLMULFactorTable[16] = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, + 10U, 11U, 12U, 13U, 14U, 15U, 16U, 16U}; +const uint8_t aPredivFactorTable[16] = { 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, + 9U,10U, 11U, 12U, 13U, 14U, 15U, 16U}; +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions ---------------------------------------------------------*/ + +/** @defgroup RCC_Exported_Functions RCC Exported Functions + * @{ + */ + +/** @defgroup RCC_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * + @verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + This section provides functions allowing to configure the internal/external oscillators + (HSE, HSI, LSE, LSI, PLL, CSS and MCO) and the System buses clocks (SYSCLK, AHB, APB1 + and APB2). + + [..] Internal/external clock and PLL configuration + (#) HSI (high-speed internal), 8 MHz factory-trimmed RC used directly or through + the PLL as System clock source. + The HSI clock can be used also to clock the USART and I2C peripherals. + + (#) LSI (low-speed internal), ~40 KHz low consumption RC used as IWDG and/or RTC + clock source. + + (#) HSE (high-speed external), 4 to 32 MHz crystal oscillator used directly or + through the PLL as System clock source. Can be used also as RTC clock source. + + (#) LSE (low-speed external), 32 KHz oscillator used as RTC clock source. + + (#) PLL (clocked by HSI or HSE), featuring different output clocks: + (++) The first output is used to generate the high speed system clock (up to 72 MHz) + (++) The second output is used to generate the clock for the USB FS (48 MHz) + (++) The third output may be used to generate the clock for the ADC peripherals (up to 72 MHz) + (++) The fourth output may be used to generate the clock for the TIM peripherals (144 MHz) + + (#) CSS (Clock security system), once enable using the macro __HAL_RCC_CSS_ENABLE() + and if a HSE clock failure occurs(HSE used directly or through PLL as System + clock source), the System clocks automatically switched to HSI and an interrupt + is generated if enabled. The interrupt is linked to the Cortex-M4 NMI + (Non-Maskable Interrupt) exception vector. + + (#) MCO (microcontroller clock output), used to output SYSCLK, HSI, HSE, LSI, LSE or PLL + clock (divided by 2) output on pin (such as PA8 pin). + + [..] System, AHB and APB buses clocks configuration + (#) Several clock sources can be used to drive the System clock (SYSCLK): HSI, + HSE and PLL. + The AHB clock (HCLK) is derived from System clock through configurable + prescaler and used to clock the CPU, memory and peripherals mapped + on AHB bus (DMA, GPIO...). APB1 (PCLK1) and APB2 (PCLK2) clocks are derived + from AHB clock through configurable prescalers and used to clock + the peripherals mapped on these buses. You can use + "HAL_RCC_GetSysClockFreq()" function to retrieve the frequencies of these clocks. + + (#) All the peripheral clocks are derived from the System clock (SYSCLK) except: + (++) The FLASH program/erase clock which is always HSI 8MHz clock. + (++) The USB 48 MHz clock which is derived from the PLL VCO clock. + (++) The USART clock which can be derived as well from HSI 8MHz, LSI or LSE. + (++) The I2C clock which can be derived as well from HSI 8MHz clock. + (++) The ADC clock which is derived from PLL output. + (++) The RTC clock which is derived from the LSE, LSI or 1 MHz HSE_RTC + (HSE divided by a programmable prescaler). The System clock (SYSCLK) + frequency must be higher or equal to the RTC clock frequency. + (++) IWDG clock which is always the LSI clock. + + (#) For the STM32F3xx devices, the maximum frequency of the SYSCLK, HCLK, PCLK1 and PCLK2 is 72 MHz, + Depending on the SYSCLK frequency, the flash latency should be adapted accordingly. + + (#) After reset, the System clock source is the HSI (8 MHz) with 0 WS and + prefetch is disabled. + @endverbatim + * @{ + */ + +/* + Additional consideration on the SYSCLK based on Latency settings: + +-----------------------------------------------+ + | Latency | SYSCLK clock frequency (MHz) | + |---------------|-------------------------------| + |0WS(1CPU cycle)| 0 < SYSCLK <= 24 | + |---------------|-------------------------------| + |1WS(2CPU cycle)| 24 < SYSCLK <= 48 | + |---------------|-------------------------------| + |2WS(3CPU cycle)| 48 < SYSCLK <= 72 | + +-----------------------------------------------+ + */ + +/** + * @brief Resets the RCC clock configuration to the default reset state. + * @note The default reset state of the clock configuration is given below: + * - HSI ON and used as system clock source + * - HSE and PLL OFF + * - AHB, APB1 and APB2 prescaler set to 1. + * - CSS and MCO1 OFF + * - All interrupts disabled + * @note This function does not modify the configuration of the + * - Peripheral clocks + * - LSI, LSE and RTC clocks + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCC_DeInit(void) +{ + uint32_t tickstart = 0; + + /* Set HSION bit */ + SET_BIT(RCC->CR, RCC_CR_HSION); + + /* Insure HSIRDY bit is set before writing default HSITRIM value */ + /* Get start tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSI is ready */ + while(READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET) + { + if((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Set HSITRIM default value */ + MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, RCC_CR_HSITRIM_4); + + /* Reset SW[1:0], HPRE[3:0], PPRE1[2:0], PPRE2[2:0] and MCOSEL[2:0] bits */ + CLEAR_BIT(RCC->CFGR, RCC_CFGR_SW | RCC_CFGR_HPRE | RCC_CFGR_PPRE1 | RCC_CFGR_PPRE2 | RCC_CFGR_MCO); + + /* Insure HSI selected as system clock source */ + /* Get start tick */ + tickstart = HAL_GetTick(); + + /* Wait till system clock source is ready */ + while(READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI) + { + if((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Update the SystemCoreClock global variable for HSI as system clock source */ + SystemCoreClock = HSI_VALUE; + + /* Configure the source of time base considering new system clock settings */ + if(HAL_InitTick(uwTickPrio) != HAL_OK) + { + return HAL_ERROR; + } + + /* Reset HSEON, CSSON, PLLON bits */ + CLEAR_BIT(RCC->CR, RCC_CR_PLLON | RCC_CR_CSSON | RCC_CR_HSEON); + + /* Reset HSEBYP bit */ + CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); + + /* Insure PLLRDY is reset */ + /* Get start tick */ + tickstart = HAL_GetTick(); + while(READ_BIT(RCC->CR, RCC_CR_PLLRDY) != 0U) + { + if((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Reset CFGR register */ + CLEAR_REG(RCC->CFGR); + + /* Reset CFGR2 register */ + CLEAR_REG(RCC->CFGR2); + + /* Reset CFGR3 register */ + CLEAR_REG(RCC->CFGR3); + + /* Clear all interrupt flags */ + SET_BIT(RCC->CIR, RCC_CIR_LSIRDYC | RCC_CIR_LSERDYC | RCC_CIR_HSIRDYC | RCC_CIR_HSERDYC | RCC_CIR_PLLRDYC | RCC_CIR_CSSC); + + /* Disable all interrupts */ + CLEAR_REG(RCC->CIR); + + /* Reset all CSR flags */ + __HAL_RCC_CLEAR_RESET_FLAGS(); + + return HAL_OK; +} + +/** + * @brief Initializes the RCC Oscillators according to the specified parameters in the + * RCC_OscInitTypeDef. + * @param RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that + * contains the configuration information for the RCC Oscillators. + * @note The PLL is not disabled when used as system clock. + * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not + * supported by this macro. User should request a transition to LSE Off + * first and then LSE On or LSE Bypass. + * @note Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not + * supported by this macro. User should request a transition to HSE Off + * first and then HSE On or HSE Bypass. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + uint32_t tickstart; + uint32_t pll_config; +#if defined(RCC_CFGR_PLLSRC_HSI_PREDIV) + uint32_t pll_config2; +#endif /* RCC_CFGR_PLLSRC_HSI_PREDIV */ + + /* Check Null pointer */ + if(RCC_OscInitStruct == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); + + /*------------------------------- HSE Configuration ------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) + { + /* Check the parameters */ + assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState)); + + /* When the HSE is used as system clock or clock source for PLL in these cases it is not allowed to be disabled */ + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE) + || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE))) + { + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) + { + return HAL_ERROR; + } + } + else + { + /* Set the new HSE configuration ---------------------------------------*/ + __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); + +#if defined(RCC_CFGR_PLLSRC_HSI_DIV2) + /* Configure the HSE predivision factor --------------------------------*/ + __HAL_RCC_HSE_PREDIV_CONFIG(RCC_OscInitStruct->HSEPredivValue); +#endif /* RCC_CFGR_PLLSRC_HSI_DIV2 */ + + /* Check the HSE State */ + if(RCC_OscInitStruct->HSEState != RCC_HSE_OFF) + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSE is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + } + /*----------------------------- HSI Configuration --------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) + { + /* Check the parameters */ + assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState)); + assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue)); + + /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */ + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI) + || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSI))) + { + /* When HSI is used as system clock it will not disabled */ + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) + { + return HAL_ERROR; + } + /* Otherwise, just the calibration is allowed */ + else + { + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + } + } + else + { + /* Check the HSI State */ + if(RCC_OscInitStruct->HSIState != RCC_HSI_OFF) + { + /* Enable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_ENABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + } + else + { + /* Disable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSI is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + } + /*------------------------------ LSI Configuration -------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) + { + /* Check the parameters */ + assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState)); + + /* Check the LSI State */ + if(RCC_OscInitStruct->LSIState != RCC_LSI_OFF) + { + /* Enable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_ENABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Disable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSI is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + /*------------------------------ LSE Configuration -------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) + { + FlagStatus pwrclkchanged = RESET; + + /* Check the parameters */ + assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState)); + + /* Update LSE configuration in Backup Domain control register */ + /* Requires to enable write access to Backup Domain of necessary */ + if(__HAL_RCC_PWR_IS_CLK_DISABLED()) + { + __HAL_RCC_PWR_CLK_ENABLE(); + pwrclkchanged = SET; + } + + if(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + { + /* Enable write access to Backup domain */ + SET_BIT(PWR->CR, PWR_CR_DBP); + + /* Wait for Backup domain Write protection disable */ + tickstart = HAL_GetTick(); + + while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + { + if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + /* Set the new LSE configuration -----------------------------------------*/ + __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); + /* Check the LSE State */ + if(RCC_OscInitStruct->LSEState != RCC_LSE_OFF) + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + /* Require to disable power clock if necessary */ + if(pwrclkchanged == SET) + { + __HAL_RCC_PWR_CLK_DISABLE(); + } + } + + /*-------------------------------- PLL Configuration -----------------------*/ + /* Check the parameters */ + assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState)); + if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) + { + /* Check if the PLL is used as system clock or not */ + if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK) + { + if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) + { + /* Check the parameters */ + assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource)); + assert_param(IS_RCC_PLL_MUL(RCC_OscInitStruct->PLL.PLLMUL)); +#if defined(RCC_CFGR_PLLSRC_HSI_PREDIV) + assert_param(IS_RCC_PREDIV(RCC_OscInitStruct->PLL.PREDIV)); +#endif + + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + +#if defined(RCC_CFGR_PLLSRC_HSI_PREDIV) + /* Configure the main PLL clock source, predivider and multiplication factor. */ + __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource, + RCC_OscInitStruct->PLL.PREDIV, + RCC_OscInitStruct->PLL.PLLMUL); +#else + /* Configure the main PLL clock source and multiplication factor. */ + __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource, + RCC_OscInitStruct->PLL.PLLMUL); +#endif /* RCC_CFGR_PLLSRC_HSI_PREDIV */ + /* Enable the main PLL. */ + __HAL_RCC_PLL_ENABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + else + { + /* Check if there is a request to disable the PLL used as System clock source */ + if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) + { + return HAL_ERROR; + } + else + { + /* Do not return HAL_ERROR if request repeats the current configuration */ + pll_config = RCC->CFGR; +#if defined(RCC_CFGR_PLLSRC_HSI_PREDIV) + pll_config2 = RCC->CFGR2; + if((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + (READ_BIT(pll_config, RCC_CFGR_PLLMUL) != RCC_OscInitStruct->PLL.PLLMUL) || + (READ_BIT(pll_config2, RCC_CFGR2_PREDIV) != RCC_OscInitStruct->PLL.PREDIV)) +#else + if((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + (READ_BIT(pll_config, RCC_CFGR_PLLMUL) != RCC_OscInitStruct->PLL.PLLMUL)) +#endif + { + return HAL_ERROR; + } + } + } + } + + return HAL_OK; +} + +/** + * @brief Initializes the CPU, AHB and APB buses clocks according to the specified + * parameters in the RCC_ClkInitStruct. + * @param RCC_ClkInitStruct pointer to an RCC_OscInitTypeDef structure that + * contains the configuration information for the RCC peripheral. + * @param FLatency FLASH Latency + * The value of this parameter depend on device used within the same series + * @note The SystemCoreClock CMSIS variable is used to store System Clock Frequency + * and updated by @ref HAL_RCC_GetHCLKFreq() function called within this function + * + * @note The HSI is used (enabled by hardware) as system clock source after + * start-up from Reset, wake-up from STOP and STANDBY mode, or in case + * of failure of the HSE used directly or indirectly as system clock + * (if the Clock Security System CSS is enabled). + * + * @note A switch from one clock source to another occurs only if the target + * clock source is ready (clock stable after start-up delay or PLL locked). + * If a clock source which is not yet ready is selected, the switch will + * occur when the clock source will be ready. + * You can use @ref HAL_RCC_GetClockConfig() function to know which clock is + * currently used as system clock source. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency) +{ + uint32_t tickstart = 0U; + + /* Check Null pointer */ + if(RCC_ClkInitStruct == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_RCC_CLOCKTYPE(RCC_ClkInitStruct->ClockType)); + assert_param(IS_FLASH_LATENCY(FLatency)); + + /* To correctly read data from FLASH memory, the number of wait states (LATENCY) + must be correctly programmed according to the frequency of the CPU clock + (HCLK) of the device. */ + + /* Increasing the number of wait states because of higher CPU frequency */ + if(FLatency > __HAL_FLASH_GET_LATENCY()) + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + __HAL_FLASH_SET_LATENCY(FLatency); + + /* Check that the new number of wait states is taken into account to access the Flash + memory by reading the FLASH_ACR register */ + if(__HAL_FLASH_GET_LATENCY() != FLatency) + { + return HAL_ERROR; + } + } + + /*-------------------------- HCLK Configuration --------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) + { + assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider); + } + + /*------------------------- SYSCLK Configuration ---------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) + { + assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource)); + + /* HSE is selected as System Clock Source */ + if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) + { + /* Check the HSE ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + { + return HAL_ERROR; + } + } + /* PLL is selected as System Clock Source */ + else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) + { + /* Check the PLL ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + { + return HAL_ERROR; + } + } + /* HSI is selected as System Clock Source */ + else + { + /* Check the HSI ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + { + return HAL_ERROR; + } + } + + __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) + { + if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + /* Decreasing the number of wait states because of lower CPU frequency */ + if(FLatency < __HAL_FLASH_GET_LATENCY()) + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + __HAL_FLASH_SET_LATENCY(FLatency); + + /* Check that the new number of wait states is taken into account to access the Flash + memory by reading the FLASH_ACR register */ + if(__HAL_FLASH_GET_LATENCY() != FLatency) + { + return HAL_ERROR; + } + } + + /*-------------------------- PCLK1 Configuration ---------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) + { + assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider); + } + + /*-------------------------- PCLK2 Configuration ---------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) + { + assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3U)); + } + + /* Update the SystemCoreClock global variable */ + SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_BITNUMBER]; + + /* Configure the source of time base considering new system clocks settings*/ + HAL_InitTick (uwTickPrio); + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup RCC_Exported_Functions_Group2 Peripheral Control functions + * @brief RCC clocks control functions + * + @verbatim + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the RCC Clocks + frequencies. + + @endverbatim + * @{ + */ + +#if defined(RCC_CFGR_MCOPRE) +/** + * @brief Selects the clock source to output on MCO pin. + * @note MCO pin should be configured in alternate function mode. + * @param RCC_MCOx specifies the output direction for the clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_MCO1 Clock source to output on MCO1 pin(PA8). + * @param RCC_MCOSource specifies the clock source to output. + * This parameter can be one of the following values: + * @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected + * @arg @ref RCC_MCO1SOURCE_SYSCLK System Clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI HSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSI LSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSE LSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK_DIV2 PLLCLK Divided by 2 selected as MCO clock + * @param RCC_MCODiv specifies the MCO DIV. + * This parameter can be one of the following values: + * @arg @ref RCC_MCODIV_1 no division applied to MCO clock + * @arg @ref RCC_MCODIV_2 division by 2 applied to MCO clock + * @arg @ref RCC_MCODIV_4 division by 4 applied to MCO clock + * @arg @ref RCC_MCODIV_8 division by 8 applied to MCO clock + * @arg @ref RCC_MCODIV_16 division by 16 applied to MCO clock + * @arg @ref RCC_MCODIV_32 division by 32 applied to MCO clock + * @arg @ref RCC_MCODIV_64 division by 64 applied to MCO clock + * @arg @ref RCC_MCODIV_128 division by 128 applied to MCO clock + * @retval None + */ +#else +/** + * @brief Selects the clock source to output on MCO pin. + * @note MCO pin should be configured in alternate function mode. + * @param RCC_MCOx specifies the output direction for the clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_MCO1 Clock source to output on MCO1 pin(PA8). + * @param RCC_MCOSource specifies the clock source to output. + * This parameter can be one of the following values: + * @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_SYSCLK System clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI HSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSI LSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSE LSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK_DIV2 PLLCLK Divided by 2 selected as MCO clock + * @param RCC_MCODiv specifies the MCO DIV. + * This parameter can be one of the following values: + * @arg @ref RCC_MCODIV_1 no division applied to MCO clock + * @retval None + */ +#endif +void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv) +{ + GPIO_InitTypeDef gpio; + + /* Check the parameters */ + assert_param(IS_RCC_MCO(RCC_MCOx)); + assert_param(IS_RCC_MCODIV(RCC_MCODiv)); + assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource)); + + /* Configure the MCO1 pin in alternate function mode */ + gpio.Mode = GPIO_MODE_AF_PP; + gpio.Speed = GPIO_SPEED_FREQ_HIGH; + gpio.Pull = GPIO_NOPULL; + gpio.Pin = MCO1_PIN; + gpio.Alternate = GPIO_AF0_MCO; + + /* MCO1 Clock Enable */ + MCO1_CLK_ENABLE(); + + HAL_GPIO_Init(MCO1_GPIO_PORT, &gpio); + + /* Configure the MCO clock source */ + __HAL_RCC_MCO1_CONFIG(RCC_MCOSource, RCC_MCODiv); +} + +/** + * @brief Enables the Clock Security System. + * @note If a failure is detected on the HSE oscillator clock, this oscillator + * is automatically disabled and an interrupt is generated to inform the + * software about the failure (Clock Security System Interrupt, CSSI), + * allowing the MCU to perform rescue operations. The CSSI is linked to + * the Cortex-M4 NMI (Non-Maskable Interrupt) exception vector. + * @retval None + */ +void HAL_RCC_EnableCSS(void) +{ + *(__IO uint32_t *) RCC_CR_CSSON_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables the Clock Security System. + * @retval None + */ +void HAL_RCC_DisableCSS(void) +{ + *(__IO uint32_t *) RCC_CR_CSSON_BB = (uint32_t)DISABLE; +} + +/** + * @brief Returns the SYSCLK frequency + * @note The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * @note If SYSCLK source is HSI, function returns values based on HSI_VALUE(*) + * @note If SYSCLK source is HSE, function returns a value based on HSE_VALUE + * divided by PREDIV factor(**) + * @note If SYSCLK source is PLL, function returns a value based on HSE_VALUE + * divided by PREDIV factor(**) or HSI_VALUE(*) multiplied by the PLL factor. + * @note (*) HSI_VALUE is a constant defined in stm32f3xx_hal_conf.h file (default value + * 8 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * @note (**) HSE_VALUE is a constant defined in stm32f3xx_hal_conf.h file (default value + * 8 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * @note The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @note This function can be used by the user application to compute the + * baud-rate for the communication peripherals or configure other parameters. + * + * @note Each time SYSCLK changes, this function must be called to update the + * right SYSCLK value. Otherwise, any configuration based on this function will be incorrect. + * + * @retval SYSCLK frequency + */ +uint32_t HAL_RCC_GetSysClockFreq(void) +{ + uint32_t tmpreg = 0U, prediv = 0U, pllclk = 0U, pllmul = 0U; + uint32_t sysclockfreq = 0U; + + tmpreg = RCC->CFGR; + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (tmpreg & RCC_CFGR_SWS) + { + case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock */ + { + sysclockfreq = HSE_VALUE; + break; + } + case RCC_SYSCLKSOURCE_STATUS_PLLCLK: /* PLL used as system clock */ + { + pllmul = aPLLMULFactorTable[(uint32_t)(tmpreg & RCC_CFGR_PLLMUL) >> POSITION_VAL(RCC_CFGR_PLLMUL)]; + prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV) >> POSITION_VAL(RCC_CFGR2_PREDIV)]; +#if defined(RCC_CFGR_PLLSRC_HSI_DIV2) + if ((tmpreg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI) + { + /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV * PLLMUL */ + pllclk = (uint32_t)((uint64_t) HSE_VALUE / (uint64_t) (prediv)) * ((uint64_t) pllmul); + } + else + { + /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */ + pllclk = (uint32_t)((uint64_t) (HSI_VALUE >> 1U) * ((uint64_t) pllmul)); + } +#else + if ((tmpreg & RCC_CFGR_PLLSRC_HSE_PREDIV) == RCC_CFGR_PLLSRC_HSE_PREDIV) + { + /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV * PLLMUL */ + pllclk = (uint32_t)((uint64_t) HSE_VALUE / (uint64_t) (prediv)) * ((uint64_t) pllmul); + } + else + { + /* HSI used as PLL clock source : PLLCLK = HSI/PREDIV * PLLMUL */ + pllclk = (uint32_t)((uint64_t) HSI_VALUE / (uint64_t) (prediv)) * ((uint64_t) pllmul); + } +#endif /* RCC_CFGR_PLLSRC_HSI_DIV2 */ + sysclockfreq = pllclk; + break; + } + case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */ + default: /* HSI used as system clock */ + { + sysclockfreq = HSI_VALUE; + break; + } + } + return sysclockfreq; +} + +/** + * @brief Returns the HCLK frequency + * @note Each time HCLK changes, this function must be called to update the + * right HCLK value. Otherwise, any configuration based on this function will be incorrect. + * + * @note The SystemCoreClock CMSIS variable is used to store System Clock Frequency + * and updated within this function + * @retval HCLK frequency + */ +uint32_t HAL_RCC_GetHCLKFreq(void) +{ + return SystemCoreClock; +} + +/** + * @brief Returns the PCLK1 frequency + * @note Each time PCLK1 changes, this function must be called to update the + * right PCLK1 value. Otherwise, any configuration based on this function will be incorrect. + * @retval PCLK1 frequency + */ +uint32_t HAL_RCC_GetPCLK1Freq(void) +{ + /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/ + return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_BITNUMBER]); +} + +/** + * @brief Returns the PCLK2 frequency + * @note Each time PCLK2 changes, this function must be called to update the + * right PCLK2 value. Otherwise, any configuration based on this function will be incorrect. + * @retval PCLK2 frequency + */ +uint32_t HAL_RCC_GetPCLK2Freq(void) +{ + /* Get HCLK source and Compute PCLK2 frequency ---------------------------*/ + return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_BITNUMBER]); +} + +/** + * @brief Configures the RCC_OscInitStruct according to the internal + * RCC configuration registers. + * @param RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that + * will be configured. + * @retval None + */ +void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + /* Check the parameters */ + assert_param(RCC_OscInitStruct != NULL); + + /* Set all possible values for the Oscillator type parameter ---------------*/ + RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI \ + | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI; + + + /* Get the HSE configuration -----------------------------------------------*/ + if((RCC->CR &RCC_CR_HSEBYP) == RCC_CR_HSEBYP) + { + RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS; + } + else if((RCC->CR &RCC_CR_HSEON) == RCC_CR_HSEON) + { + RCC_OscInitStruct->HSEState = RCC_HSE_ON; + } + else + { + RCC_OscInitStruct->HSEState = RCC_HSE_OFF; + } +#if defined(RCC_CFGR_PLLSRC_HSI_DIV2) + RCC_OscInitStruct->HSEPredivValue = __HAL_RCC_HSE_GET_PREDIV(); +#endif + + /* Get the HSI configuration -----------------------------------------------*/ + if((RCC->CR &RCC_CR_HSION) == RCC_CR_HSION) + { + RCC_OscInitStruct->HSIState = RCC_HSI_ON; + } + else + { + RCC_OscInitStruct->HSIState = RCC_HSI_OFF; + } + + RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> POSITION_VAL(RCC_CR_HSITRIM)); + + /* Get the LSE configuration -----------------------------------------------*/ + if((RCC->BDCR &RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP) + { + RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS; + } + else if((RCC->BDCR &RCC_BDCR_LSEON) == RCC_BDCR_LSEON) + { + RCC_OscInitStruct->LSEState = RCC_LSE_ON; + } + else + { + RCC_OscInitStruct->LSEState = RCC_LSE_OFF; + } + + /* Get the LSI configuration -----------------------------------------------*/ + if((RCC->CSR &RCC_CSR_LSION) == RCC_CSR_LSION) + { + RCC_OscInitStruct->LSIState = RCC_LSI_ON; + } + else + { + RCC_OscInitStruct->LSIState = RCC_LSI_OFF; + } + + + /* Get the PLL configuration -----------------------------------------------*/ + if((RCC->CR &RCC_CR_PLLON) == RCC_CR_PLLON) + { + RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON; + } + else + { + RCC_OscInitStruct->PLL.PLLState = RCC_PLL_OFF; + } + RCC_OscInitStruct->PLL.PLLSource = (uint32_t)(RCC->CFGR & RCC_CFGR_PLLSRC); + RCC_OscInitStruct->PLL.PLLMUL = (uint32_t)(RCC->CFGR & RCC_CFGR_PLLMUL); +#if defined(RCC_CFGR_PLLSRC_HSI_PREDIV) + RCC_OscInitStruct->PLL.PREDIV = (uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV); +#endif /* RCC_CFGR_PLLSRC_HSI_PREDIV */ +} + +/** + * @brief Get the RCC_ClkInitStruct according to the internal + * RCC configuration registers. + * @param RCC_ClkInitStruct pointer to an RCC_ClkInitTypeDef structure that + * contains the current clock configuration. + * @param pFLatency Pointer on the Flash Latency. + * @retval None + */ +void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency) +{ + /* Check the parameters */ + assert_param(RCC_ClkInitStruct != NULL); + assert_param(pFLatency != NULL); + + /* Set all possible values for the Clock type parameter --------------------*/ + RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; + + /* Get the SYSCLK configuration --------------------------------------------*/ + RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW); + + /* Get the HCLK configuration ----------------------------------------------*/ + RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_HPRE); + + /* Get the APB1 configuration ----------------------------------------------*/ + RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_PPRE1); + + /* Get the APB2 configuration ----------------------------------------------*/ + RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)((RCC->CFGR & RCC_CFGR_PPRE2) >> 3U); + + /* Get the Flash Wait State (Latency) configuration ------------------------*/ + *pFLatency = (uint32_t)(FLASH->ACR & FLASH_ACR_LATENCY); +} + +/** + * @brief This function handles the RCC CSS interrupt request. + * @note This API should be called under the NMI_Handler(). + * @retval None + */ +void HAL_RCC_NMI_IRQHandler(void) +{ + /* Check RCC CSSF flag */ + if(__HAL_RCC_GET_IT(RCC_IT_CSS)) + { + /* RCC Clock Security System interrupt user callback */ + HAL_RCC_CSSCallback(); + + /* Clear RCC CSS pending bit */ + __HAL_RCC_CLEAR_IT(RCC_IT_CSS); + } +} + +/** + * @brief RCC Clock Security System interrupt callback + * @retval none + */ +__weak void HAL_RCC_CSSCallback(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_RCC_CSSCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_RCC_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_rcc_ex.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_rcc_ex.c new file mode 100644 index 0000000..cb44fb4 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_rcc_ex.c @@ -0,0 +1,1584 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_rcc_ex.c + * @author MCD Application Team + * @brief Extended RCC HAL module driver. + * This file provides firmware functions to manage the following + * functionalities RCC extension peripheral: + * + Extended Peripheral Control functions + * + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +#ifdef HAL_RCC_MODULE_ENABLED + +/** @defgroup RCCEx RCCEx + * @brief RCC Extension HAL module driver. + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/** @defgroup RCCEx_Private_Macros RCCEx Private Macros + * @{ + */ +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +#if defined(RCC_CFGR2_ADC1PRES) || defined(RCC_CFGR2_ADCPRE12) || defined(RCC_CFGR2_ADCPRE34) || defined(RCC_CFGR_USBPRE) \ + || defined(RCC_CFGR3_TIM1SW) || defined(RCC_CFGR3_TIM2SW) || defined(RCC_CFGR3_TIM8SW) || defined(RCC_CFGR3_TIM15SW) \ + || defined(RCC_CFGR3_TIM16SW) || defined(RCC_CFGR3_TIM17SW) || defined(RCC_CFGR3_TIM20SW) || defined(RCC_CFGR3_TIM34SW) \ + || defined(RCC_CFGR3_HRTIM1SW) +/** @defgroup RCCEx_Private_Functions RCCEx Private Functions + * @{ + */ +static uint32_t RCC_GetPLLCLKFreq(void); + +/** + * @} + */ +#endif /* RCC_CFGR2_ADC1PRES || RCC_CFGR2_ADCPRExx || RCC_CFGR3_TIMxSW || RCC_CFGR3_HRTIM1SW || RCC_CFGR_USBPRE */ + +/** @defgroup RCCEx_Exported_Functions RCCEx Exported Functions + * @{ + */ + +/** @defgroup RCCEx_Exported_Functions_Group1 Extended Peripheral Control functions + * @brief Extended Peripheral Control functions + * +@verbatim + =============================================================================== + ##### Extended Peripheral Control functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the RCC Clocks + frequencies. + [..] + (@) Important note: Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to + select the RTC clock source; in this case the Backup domain will be reset in + order to modify the RTC Clock source, as consequence RTC registers (including + the backup registers) are set to their reset values. + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the RCC extended peripherals clocks according to the specified + * parameters in the RCC_PeriphCLKInitTypeDef. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * contains the configuration information for the Extended Peripherals clocks + * (ADC, CEC, I2C, I2S, SDADC, HRTIM, TIM, USART, RTC and USB). + * + * @note Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select + * the RTC clock source; in this case the Backup domain will be reset in + * order to modify the RTC Clock source, as consequence RTC registers (including + * the backup registers) and RCC_BDCR register are set to their reset values. + * + * @note When the TIMx clock source is APB clock, so the TIMx clock is APB clock or + * APB clock x 2 depending on the APB prescaler. + * When the TIMx clock source is PLL clock, so the TIMx clock is PLL clock x 2. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tickstart = 0U; + uint32_t temp_reg = 0U; + FlagStatus pwrclkchanged = RESET; + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*---------------------------- RTC configuration -------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + { + /* check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + + /* As soon as function is called to change RTC clock source, activation of the + power domain is done. */ + /* Requires to enable write access to Backup Domain of necessary */ + if(__HAL_RCC_PWR_IS_CLK_DISABLED()) + { + __HAL_RCC_PWR_CLK_ENABLE(); + pwrclkchanged = SET; + } + + if(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + { + /* Enable write access to Backup domain */ + SET_BIT(PWR->CR, PWR_CR_DBP); + + /* Wait for Backup domain Write protection disable */ + tickstart = HAL_GetTick(); + + while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + { + if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + temp_reg = (RCC->BDCR & RCC_BDCR_RTCSEL); + if((temp_reg != 0x00000000U) && (temp_reg != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + temp_reg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + __HAL_RCC_BACKUPRESET_RELEASE(); + /* Restore the Content of BDCR register */ + RCC->BDCR = temp_reg; + + /* Wait for LSERDY if LSE was enabled */ + if (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSEON)) + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + + /* Require to disable power clock if necessary */ + if(pwrclkchanged == SET) + { + __HAL_RCC_PWR_CLK_DISABLE(); + } + } + + /*------------------------------- USART1 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1) + { + /* Check the parameters */ + assert_param(IS_RCC_USART1CLKSOURCE(PeriphClkInit->Usart1ClockSelection)); + + /* Configure the USART1 clock source */ + __HAL_RCC_USART1_CONFIG(PeriphClkInit->Usart1ClockSelection); + } + +#if defined(RCC_CFGR3_USART2SW) + /*----------------------------- USART2 Configuration --------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2) + { + /* Check the parameters */ + assert_param(IS_RCC_USART2CLKSOURCE(PeriphClkInit->Usart2ClockSelection)); + + /* Configure the USART2 clock source */ + __HAL_RCC_USART2_CONFIG(PeriphClkInit->Usart2ClockSelection); + } +#endif /* RCC_CFGR3_USART2SW */ + +#if defined(RCC_CFGR3_USART3SW) + /*------------------------------ USART3 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART3) == RCC_PERIPHCLK_USART3) + { + /* Check the parameters */ + assert_param(IS_RCC_USART3CLKSOURCE(PeriphClkInit->Usart3ClockSelection)); + + /* Configure the USART3 clock source */ + __HAL_RCC_USART3_CONFIG(PeriphClkInit->Usart3ClockSelection); + } +#endif /* RCC_CFGR3_USART3SW */ + + /*------------------------------ I2C1 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1) + { + /* Check the parameters */ + assert_param(IS_RCC_I2C1CLKSOURCE(PeriphClkInit->I2c1ClockSelection)); + + /* Configure the I2C1 clock source */ + __HAL_RCC_I2C1_CONFIG(PeriphClkInit->I2c1ClockSelection); + } + +#if defined(STM32F302xE) || defined(STM32F303xE)\ + || defined(STM32F302xC) || defined(STM32F303xC)\ + || defined(STM32F302x8) \ + || defined(STM32F373xC) + /*------------------------------ USB Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) + { + /* Check the parameters */ + assert_param(IS_RCC_USBCLKSOURCE(PeriphClkInit->USBClockSelection)); + + /* Configure the USB clock source */ + __HAL_RCC_USB_CONFIG(PeriphClkInit->USBClockSelection); + } + +#endif /* STM32F302xE || STM32F303xE || */ + /* STM32F302xC || STM32F303xC || */ + /* STM32F302x8 || */ + /* STM32F373xC */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\ + || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)\ + || defined(STM32F373xC) || defined(STM32F378xx) + + /*------------------------------ I2C2 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C2) == RCC_PERIPHCLK_I2C2) + { + /* Check the parameters */ + assert_param(IS_RCC_I2C2CLKSOURCE(PeriphClkInit->I2c2ClockSelection)); + + /* Configure the I2C2 clock source */ + __HAL_RCC_I2C2_CONFIG(PeriphClkInit->I2c2ClockSelection); + } + +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F301x8 || STM32F302x8 || STM32F318xx || */ + /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) + + /*------------------------------ I2C3 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C3) == RCC_PERIPHCLK_I2C3) + { + /* Check the parameters */ + assert_param(IS_RCC_I2C3CLKSOURCE(PeriphClkInit->I2c3ClockSelection)); + + /* Configure the I2C3 clock source */ + __HAL_RCC_I2C3_CONFIG(PeriphClkInit->I2c3ClockSelection); + } +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx) + + /*------------------------------ UART4 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_UART4) == RCC_PERIPHCLK_UART4) + { + /* Check the parameters */ + assert_param(IS_RCC_UART4CLKSOURCE(PeriphClkInit->Uart4ClockSelection)); + + /* Configure the UART4 clock source */ + __HAL_RCC_UART4_CONFIG(PeriphClkInit->Uart4ClockSelection); + } + + /*------------------------------ UART5 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_UART5) == RCC_PERIPHCLK_UART5) + { + /* Check the parameters */ + assert_param(IS_RCC_UART5CLKSOURCE(PeriphClkInit->Uart5ClockSelection)); + + /* Configure the UART5 clock source */ + __HAL_RCC_UART5_CONFIG(PeriphClkInit->Uart5ClockSelection); + } + +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\ + || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) + /*------------------------------ I2S Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == RCC_PERIPHCLK_I2S) + { + /* Check the parameters */ + assert_param(IS_RCC_I2SCLKSOURCE(PeriphClkInit->I2sClockSelection)); + + /* Configure the I2S clock source */ + __HAL_RCC_I2S_CONFIG(PeriphClkInit->I2sClockSelection); + } + +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) + + /*------------------------------ ADC1 clock Configuration ------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC1) == RCC_PERIPHCLK_ADC1) + { + /* Check the parameters */ + assert_param(IS_RCC_ADC1PLLCLK_DIV(PeriphClkInit->Adc1ClockSelection)); + + /* Configure the ADC1 clock source */ + __HAL_RCC_ADC1_CONFIG(PeriphClkInit->Adc1ClockSelection); + } + +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\ + || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) + + /*------------------------------ ADC1 & ADC2 clock Configuration -------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC12) == RCC_PERIPHCLK_ADC12) + { + /* Check the parameters */ + assert_param(IS_RCC_ADC12PLLCLK_DIV(PeriphClkInit->Adc12ClockSelection)); + + /* Configure the ADC12 clock source */ + __HAL_RCC_ADC12_CONFIG(PeriphClkInit->Adc12ClockSelection); + } + +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F303xC) || defined(STM32F358xx) + + /*------------------------------ ADC3 & ADC4 clock Configuration -------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC34) == RCC_PERIPHCLK_ADC34) + { + /* Check the parameters */ + assert_param(IS_RCC_ADC34PLLCLK_DIV(PeriphClkInit->Adc34ClockSelection)); + + /* Configure the ADC34 clock source */ + __HAL_RCC_ADC34_CONFIG(PeriphClkInit->Adc34ClockSelection); + } + +#endif /* STM32F303xE || STM32F398xx || */ + /* STM32F303xC || STM32F358xx */ + +#if defined(STM32F373xC) || defined(STM32F378xx) + + /*------------------------------ ADC1 clock Configuration ------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC1) == RCC_PERIPHCLK_ADC1) + { + /* Check the parameters */ + assert_param(IS_RCC_ADC1PCLK2_DIV(PeriphClkInit->Adc1ClockSelection)); + + /* Configure the ADC1 clock source */ + __HAL_RCC_ADC1_CONFIG(PeriphClkInit->Adc1ClockSelection); + } + +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\ + || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\ + || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) + + /*------------------------------ TIM1 clock Configuration ----------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM1) == RCC_PERIPHCLK_TIM1) + { + /* Check the parameters */ + assert_param(IS_RCC_TIM1CLKSOURCE(PeriphClkInit->Tim1ClockSelection)); + + /* Configure the TIM1 clock source */ + __HAL_RCC_TIM1_CONFIG(PeriphClkInit->Tim1ClockSelection); + } + +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F303x8 || STM32F334x8 || STM32F328xx || */ + /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F303xC) || defined(STM32F358xx) + + /*------------------------------ TIM8 clock Configuration ----------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM8) == RCC_PERIPHCLK_TIM8) + { + /* Check the parameters */ + assert_param(IS_RCC_TIM8CLKSOURCE(PeriphClkInit->Tim8ClockSelection)); + + /* Configure the TIM8 clock source */ + __HAL_RCC_TIM8_CONFIG(PeriphClkInit->Tim8ClockSelection); + } + +#endif /* STM32F303xE || STM32F398xx || */ + /* STM32F303xC || STM32F358xx */ + +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) + + /*------------------------------ TIM15 clock Configuration ----------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM15) == RCC_PERIPHCLK_TIM15) + { + /* Check the parameters */ + assert_param(IS_RCC_TIM15CLKSOURCE(PeriphClkInit->Tim15ClockSelection)); + + /* Configure the TIM15 clock source */ + __HAL_RCC_TIM15_CONFIG(PeriphClkInit->Tim15ClockSelection); + } + + /*------------------------------ TIM16 clock Configuration ----------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM16) == RCC_PERIPHCLK_TIM16) + { + /* Check the parameters */ + assert_param(IS_RCC_TIM16CLKSOURCE(PeriphClkInit->Tim16ClockSelection)); + + /* Configure the TIM16 clock source */ + __HAL_RCC_TIM16_CONFIG(PeriphClkInit->Tim16ClockSelection); + } + + /*------------------------------ TIM17 clock Configuration ----------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM17) == RCC_PERIPHCLK_TIM17) + { + /* Check the parameters */ + assert_param(IS_RCC_TIM17CLKSOURCE(PeriphClkInit->Tim17ClockSelection)); + + /* Configure the TIM17 clock source */ + __HAL_RCC_TIM17_CONFIG(PeriphClkInit->Tim17ClockSelection); + } + +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F334x8) + + /*------------------------------ HRTIM1 clock Configuration ----------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_HRTIM1) == RCC_PERIPHCLK_HRTIM1) + { + /* Check the parameters */ + assert_param(IS_RCC_HRTIM1CLKSOURCE(PeriphClkInit->Hrtim1ClockSelection)); + + /* Configure the HRTIM1 clock source */ + __HAL_RCC_HRTIM1_CONFIG(PeriphClkInit->Hrtim1ClockSelection); + } + +#endif /* STM32F334x8 */ + +#if defined(STM32F373xC) || defined(STM32F378xx) + + /*------------------------------ SDADC clock Configuration -------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDADC) == RCC_PERIPHCLK_SDADC) + { + /* Check the parameters */ + assert_param(IS_RCC_SDADCSYSCLK_DIV(PeriphClkInit->SdadcClockSelection)); + + /* Configure the SDADC clock prescaler */ + __HAL_RCC_SDADC_CONFIG(PeriphClkInit->SdadcClockSelection); + } + + /*------------------------------ CEC clock Configuration -------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CEC) == RCC_PERIPHCLK_CEC) + { + /* Check the parameters */ + assert_param(IS_RCC_CECCLKSOURCE(PeriphClkInit->CecClockSelection)); + + /* Configure the CEC clock source */ + __HAL_RCC_CEC_CONFIG(PeriphClkInit->CecClockSelection); + } + +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) + + /*------------------------------ TIM2 clock Configuration -------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM2) == RCC_PERIPHCLK_TIM2) + { + /* Check the parameters */ + assert_param(IS_RCC_TIM2CLKSOURCE(PeriphClkInit->Tim2ClockSelection)); + + /* Configure the CEC clock source */ + __HAL_RCC_TIM2_CONFIG(PeriphClkInit->Tim2ClockSelection); + } + + /*------------------------------ TIM3 clock Configuration -------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM34) == RCC_PERIPHCLK_TIM34) + { + /* Check the parameters */ + assert_param(IS_RCC_TIM3CLKSOURCE(PeriphClkInit->Tim34ClockSelection)); + + /* Configure the CEC clock source */ + __HAL_RCC_TIM34_CONFIG(PeriphClkInit->Tim34ClockSelection); + } + + /*------------------------------ TIM15 clock Configuration ------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM15) == RCC_PERIPHCLK_TIM15) + { + /* Check the parameters */ + assert_param(IS_RCC_TIM15CLKSOURCE(PeriphClkInit->Tim15ClockSelection)); + + /* Configure the CEC clock source */ + __HAL_RCC_TIM15_CONFIG(PeriphClkInit->Tim15ClockSelection); + } + + /*------------------------------ TIM16 clock Configuration ------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM16) == RCC_PERIPHCLK_TIM16) + { + /* Check the parameters */ + assert_param(IS_RCC_TIM16CLKSOURCE(PeriphClkInit->Tim16ClockSelection)); + + /* Configure the CEC clock source */ + __HAL_RCC_TIM16_CONFIG(PeriphClkInit->Tim16ClockSelection); + } + + /*------------------------------ TIM17 clock Configuration ------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM17) == RCC_PERIPHCLK_TIM17) + { + /* Check the parameters */ + assert_param(IS_RCC_TIM17CLKSOURCE(PeriphClkInit->Tim17ClockSelection)); + + /* Configure the CEC clock source */ + __HAL_RCC_TIM17_CONFIG(PeriphClkInit->Tim17ClockSelection); + } + +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx) + /*------------------------------ TIM20 clock Configuration ------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM20) == RCC_PERIPHCLK_TIM20) + { + /* Check the parameters */ + assert_param(IS_RCC_TIM20CLKSOURCE(PeriphClkInit->Tim20ClockSelection)); + + /* Configure the CEC clock source */ + __HAL_RCC_TIM20_CONFIG(PeriphClkInit->Tim20ClockSelection); + } +#endif /* STM32F303xE || STM32F398xx */ + + + return HAL_OK; +} + +/** + * @brief Get the RCC_ClkInitStruct according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * returns the configuration information for the Extended Peripherals clocks + * (ADC, CEC, I2C, I2S, SDADC, HRTIM, TIM, USART, RTC and USB clocks). + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + /* Set all possible values for the extended clock type parameter------------*/ + /* Common part first */ +#if defined(RCC_CFGR3_USART2SW) && defined(RCC_CFGR3_USART3SW) + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_RTC; +#else + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_USART1 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_RTC; +#endif /* RCC_CFGR3_USART2SW && RCC_CFGR3_USART3SW */ + + /* Get the RTC configuration --------------------------------------------*/ + PeriphClkInit->RTCClockSelection = __HAL_RCC_GET_RTC_SOURCE(); + /* Get the USART1 clock configuration --------------------------------------------*/ + PeriphClkInit->Usart1ClockSelection = __HAL_RCC_GET_USART1_SOURCE(); +#if defined(RCC_CFGR3_USART2SW) + /* Get the USART2 clock configuration -----------------------------------------*/ + PeriphClkInit->Usart2ClockSelection = __HAL_RCC_GET_USART2_SOURCE(); +#endif /* RCC_CFGR3_USART2SW */ +#if defined(RCC_CFGR3_USART3SW) + /* Get the USART3 clock configuration -----------------------------------------*/ + PeriphClkInit->Usart3ClockSelection = __HAL_RCC_GET_USART3_SOURCE(); +#endif /* RCC_CFGR3_USART3SW */ + /* Get the I2C1 clock configuration -----------------------------------------*/ + PeriphClkInit->I2c1ClockSelection = __HAL_RCC_GET_I2C1_SOURCE(); + +#if defined(STM32F302xE) || defined(STM32F303xE)\ + || defined(STM32F302xC) || defined(STM32F303xC)\ + || defined(STM32F302x8) \ + || defined(STM32F373xC) + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_USB; + /* Get the USB clock configuration -----------------------------------------*/ + PeriphClkInit->USBClockSelection = __HAL_RCC_GET_USB_SOURCE(); + +#endif /* STM32F302xE || STM32F303xE || */ + /* STM32F302xC || STM32F303xC || */ + /* STM32F302x8 || */ + /* STM32F373xC */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\ + || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)\ + || defined(STM32F373xC) || defined(STM32F378xx) + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2C2; + /* Get the I2C2 clock configuration -----------------------------------------*/ + PeriphClkInit->I2c2ClockSelection = __HAL_RCC_GET_I2C2_SOURCE(); + +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F301x8 || STM32F302x8 || STM32F318xx || */ + /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2C3; + /* Get the I2C3 clock configuration -----------------------------------------*/ + PeriphClkInit->I2c3ClockSelection = __HAL_RCC_GET_I2C3_SOURCE(); + +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) ||defined(STM32F358xx) + + PeriphClkInit->PeriphClockSelection |= (RCC_PERIPHCLK_UART4 | RCC_PERIPHCLK_UART5); + /* Get the UART4 clock configuration -----------------------------------------*/ + PeriphClkInit->Uart4ClockSelection = __HAL_RCC_GET_UART4_SOURCE(); + /* Get the UART5 clock configuration -----------------------------------------*/ + PeriphClkInit->Uart5ClockSelection = __HAL_RCC_GET_UART5_SOURCE(); + +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\ + || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S; + /* Get the I2S clock configuration -----------------------------------------*/ + PeriphClkInit->I2sClockSelection = __HAL_RCC_GET_I2S_SOURCE(); + +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F301x8 || STM32F302x8 || STM32F318xx || */ + +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)\ + || defined(STM32F373xC) || defined(STM32F378xx) + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_ADC1; + /* Get the ADC1 clock configuration -----------------------------------------*/ + PeriphClkInit->Adc1ClockSelection = __HAL_RCC_GET_ADC1_SOURCE(); + +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx || */ + /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\ + || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_ADC12; + /* Get the ADC1 & ADC2 clock configuration -----------------------------------------*/ + PeriphClkInit->Adc12ClockSelection = __HAL_RCC_GET_ADC12_SOURCE(); + +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F303x8 || STM32F334x8 || STM32F328xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F303xC) || defined(STM32F358xx) + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_ADC34; + /* Get the ADC3 & ADC4 clock configuration -----------------------------------------*/ + PeriphClkInit->Adc34ClockSelection = __HAL_RCC_GET_ADC34_SOURCE(); + +#endif /* STM32F303xE || STM32F398xx || */ + /* STM32F303xC || STM32F358xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\ + || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\ + || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM1; + /* Get the TIM1 clock configuration -----------------------------------------*/ + PeriphClkInit->Tim1ClockSelection = __HAL_RCC_GET_TIM1_SOURCE(); + +#endif /* STM32F302xE || STM32F303xE || STM32F398xx || */ + /* STM32F302xC || STM32F303xC || STM32F358xx || */ + /* STM32F303x8 || STM32F334x8 || STM32F328xx || */ + /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F303xE) || defined(STM32F398xx)\ + || defined(STM32F303xC) || defined(STM32F358xx) + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM8; + /* Get the TIM8 clock configuration -----------------------------------------*/ + PeriphClkInit->Tim8ClockSelection = __HAL_RCC_GET_TIM8_SOURCE(); + +#endif /* STM32F303xE || STM32F398xx || */ + /* STM32F303xC || STM32F358xx */ + +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) + + PeriphClkInit->PeriphClockSelection |= (RCC_PERIPHCLK_TIM15 | RCC_PERIPHCLK_TIM16 | RCC_PERIPHCLK_TIM17); + /* Get the TIM15 clock configuration -----------------------------------------*/ + PeriphClkInit->Tim15ClockSelection = __HAL_RCC_GET_TIM15_SOURCE(); + /* Get the TIM16 clock configuration -----------------------------------------*/ + PeriphClkInit->Tim16ClockSelection = __HAL_RCC_GET_TIM16_SOURCE(); + /* Get the TIM17 clock configuration -----------------------------------------*/ + PeriphClkInit->Tim17ClockSelection = __HAL_RCC_GET_TIM17_SOURCE(); + +#endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */ + +#if defined(STM32F334x8) + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_HRTIM1; + /* Get the HRTIM1 clock configuration -----------------------------------------*/ + PeriphClkInit->Hrtim1ClockSelection = __HAL_RCC_GET_HRTIM1_SOURCE(); + +#endif /* STM32F334x8 */ + +#if defined(STM32F373xC) || defined(STM32F378xx) + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_SDADC; + /* Get the SDADC clock configuration -----------------------------------------*/ + PeriphClkInit->SdadcClockSelection = __HAL_RCC_GET_SDADC_SOURCE(); + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_CEC; + /* Get the CEC clock configuration -----------------------------------------*/ + PeriphClkInit->CecClockSelection = __HAL_RCC_GET_CEC_SOURCE(); + +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM2; + /* Get the TIM2 clock configuration -----------------------------------------*/ + PeriphClkInit->Tim2ClockSelection = __HAL_RCC_GET_TIM2_SOURCE(); + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM34; + /* Get the TIM3 clock configuration -----------------------------------------*/ + PeriphClkInit->Tim34ClockSelection = __HAL_RCC_GET_TIM34_SOURCE(); + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM15; + /* Get the TIM15 clock configuration -----------------------------------------*/ + PeriphClkInit->Tim15ClockSelection = __HAL_RCC_GET_TIM15_SOURCE(); + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM16; + /* Get the TIM16 clock configuration -----------------------------------------*/ + PeriphClkInit->Tim16ClockSelection = __HAL_RCC_GET_TIM16_SOURCE(); + + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM17; + /* Get the TIM17 clock configuration -----------------------------------------*/ + PeriphClkInit->Tim17ClockSelection = __HAL_RCC_GET_TIM17_SOURCE(); + +#endif /* STM32F302xE || STM32F303xE || STM32F398xx */ + +#if defined (STM32F303xE) || defined(STM32F398xx) + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM20; + /* Get the TIM20 clock configuration -----------------------------------------*/ + PeriphClkInit->Tim20ClockSelection = __HAL_RCC_GET_TIM20_SOURCE(); +#endif /* STM32F303xE || STM32F398xx */ +} + +/** + * @brief Returns the peripheral clock frequency + * @note Returns 0 if peripheral clock is unknown or 0xDEADDEAD if not applicable. + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg @ref RCC_PERIPHCLK_RTC RTC peripheral clock + * @arg @ref RCC_PERIPHCLK_USART1 USART1 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C1 I2C1 peripheral clock + @if STM32F301x8 + * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C3 I2C3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC1 ADC1 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM15 TIM15 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM16 TIM16 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM17 TIM17 peripheral clock + @endif + @if STM32F302x8 + * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C3 I2C3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC1 ADC1 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM15 TIM15 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM16 TIM16 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM17 TIM17 peripheral clock + @endif + @if STM32F302xC + * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock + * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock + * @arg @ref RCC_PERIPHCLK_UART5 UART5 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock + @endif + @if STM32F302xE + * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock + * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock + * @arg @ref RCC_PERIPHCLK_UART5 UART5 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C3 I2C3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM2 TIM2 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM15 TIM15 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM16 TIM16 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM17 TIM17 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM34 TIM34 peripheral clock + @endif + @if STM32F303x8 + * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock + @endif + @if STM32F303xC + * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock + * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock + * @arg @ref RCC_PERIPHCLK_UART5 UART5 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC34 ADC34 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM8 TIM8 peripheral clock + @endif + @if STM32F303xE + * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock + * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock + * @arg @ref RCC_PERIPHCLK_UART5 UART5 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C3 I2C3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC34 ADC34 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM2 TIM2 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM8 TIM8 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM15 TIM15 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM16 TIM16 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM17 TIM17 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM20 TIM20 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM34 TIM34 peripheral clock + @endif + @if STM32F318xx + * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C3 I2C3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC1 ADC1 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM15 TIM15 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM16 TIM16 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM17 TIM17 peripheral clock + @endif + @if STM32F328xx + * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock + @endif + @if STM32F334x8 + * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock + * @arg @ref RCC_PERIPHCLK_HRTIM1 HRTIM1 peripheral clock + @endif + @if STM32F358xx + * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock + * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock + * @arg @ref RCC_PERIPHCLK_UART5 UART5 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC34 ADC34 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM8 TIM8 peripheral clock + @endif + @if STM32F373xC + * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC1 ADC1 peripheral clock + * @arg @ref RCC_PERIPHCLK_SDADC SDADC peripheral clock + * @arg @ref RCC_PERIPHCLK_CEC CEC peripheral clock + @endif + @if STM32F378xx + * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC1 ADC1 peripheral clock + * @arg @ref RCC_PERIPHCLK_SDADC SDADC peripheral clock + * @arg @ref RCC_PERIPHCLK_CEC CEC peripheral clock + @endif + @if STM32F398xx + * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock + * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock + * @arg @ref RCC_PERIPHCLK_UART5 UART5 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C3 I2C3 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock + * @arg @ref RCC_PERIPHCLK_ADC34 ADC34 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM2 TIM2 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM8 TIM8 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM15 TIM15 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM16 TIM16 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM17 TIM17 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM20 TIM20 peripheral clock + * @arg @ref RCC_PERIPHCLK_TIM34 TIM34 peripheral clock + @endif + * @retval Frequency in Hz (0: means that no available frequency for the peripheral) + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + /* frequency == 0 : means that no available frequency for the peripheral */ + uint32_t frequency = 0U; + + uint32_t srcclk = 0U; +#if defined(RCC_CFGR2_ADC1PRES) || defined(RCC_CFGR2_ADCPRE12) || defined(RCC_CFGR2_ADCPRE34) + uint16_t adc_pll_prediv_table[16] = { 1U, 2U, 4U, 6U, 8U, 10U, 12U, 16U, 32U, 64U, 128U, 256U, 256U, 256U, 256U, 256U}; +#endif /* RCC_CFGR2_ADC1PRES || RCC_CFGR2_ADCPRE12 || RCC_CFGR2_ADCPRE34 */ +#if defined(RCC_CFGR_SDPRE) + uint8_t sdadc_prescaler_table[16] = { 2U, 4U, 6U, 8U, 10U, 12U, 14U, 16U, 20U, 24U, 28U, 32U, 36U, 40U, 44U, 48U}; +#endif /* RCC_CFGR_SDPRE */ + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClk)); + + switch (PeriphClk) + { + case RCC_PERIPHCLK_RTC: + { + /* Get the current RTC source */ + srcclk = __HAL_RCC_GET_RTC_SOURCE(); + + /* Check if LSE is ready and if RTC clock selection is LSE */ + if ((srcclk == RCC_RTCCLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY))) + { + frequency = LSE_VALUE; + } + /* Check if LSI is ready and if RTC clock selection is LSI */ + else if ((srcclk == RCC_RTCCLKSOURCE_LSI) && (HAL_IS_BIT_SET(RCC->CSR, RCC_CSR_LSIRDY))) + { + frequency = LSI_VALUE; + } + /* Check if HSE is ready and if RTC clock selection is HSI_DIV32*/ + else if ((srcclk == RCC_RTCCLKSOURCE_HSE_DIV32) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))) + { + frequency = HSE_VALUE / 32U; + } + break; + } + case RCC_PERIPHCLK_USART1: + { + /* Get the current USART1 source */ + srcclk = __HAL_RCC_GET_USART1_SOURCE(); + + /* Check if USART1 clock selection is PCLK1 */ +#if defined(RCC_USART1CLKSOURCE_PCLK2) + if (srcclk == RCC_USART1CLKSOURCE_PCLK2) + { + frequency = HAL_RCC_GetPCLK2Freq(); + } +#else + if (srcclk == RCC_USART1CLKSOURCE_PCLK1) + { + frequency = HAL_RCC_GetPCLK1Freq(); + } +#endif /* RCC_USART1CLKSOURCE_PCLK2 */ + /* Check if HSI is ready and if USART1 clock selection is HSI */ + else if ((srcclk == RCC_USART1CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Check if USART1 clock selection is SYSCLK */ + else if (srcclk == RCC_USART1CLKSOURCE_SYSCLK) + { + frequency = HAL_RCC_GetSysClockFreq(); + } + /* Check if LSE is ready and if USART1 clock selection is LSE */ + else if ((srcclk == RCC_USART1CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY))) + { + frequency = LSE_VALUE; + } + break; + } +#if defined(RCC_CFGR3_USART2SW) + case RCC_PERIPHCLK_USART2: + { + /* Get the current USART2 source */ + srcclk = __HAL_RCC_GET_USART2_SOURCE(); + + /* Check if USART2 clock selection is PCLK1 */ + if (srcclk == RCC_USART2CLKSOURCE_PCLK1) + { + frequency = HAL_RCC_GetPCLK1Freq(); + } + /* Check if HSI is ready and if USART2 clock selection is HSI */ + else if ((srcclk == RCC_USART2CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Check if USART2 clock selection is SYSCLK */ + else if (srcclk == RCC_USART2CLKSOURCE_SYSCLK) + { + frequency = HAL_RCC_GetSysClockFreq(); + } + /* Check if LSE is ready and if USART2 clock selection is LSE */ + else if ((srcclk == RCC_USART2CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY))) + { + frequency = LSE_VALUE; + } + break; + } +#endif /* RCC_CFGR3_USART2SW */ +#if defined(RCC_CFGR3_USART3SW) + case RCC_PERIPHCLK_USART3: + { + /* Get the current USART3 source */ + srcclk = __HAL_RCC_GET_USART3_SOURCE(); + + /* Check if USART3 clock selection is PCLK1 */ + if (srcclk == RCC_USART3CLKSOURCE_PCLK1) + { + frequency = HAL_RCC_GetPCLK1Freq(); + } + /* Check if HSI is ready and if USART3 clock selection is HSI */ + else if ((srcclk == RCC_USART3CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Check if USART3 clock selection is SYSCLK */ + else if (srcclk == RCC_USART3CLKSOURCE_SYSCLK) + { + frequency = HAL_RCC_GetSysClockFreq(); + } + /* Check if LSE is ready and if USART3 clock selection is LSE */ + else if ((srcclk == RCC_USART3CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY))) + { + frequency = LSE_VALUE; + } + break; + } +#endif /* RCC_CFGR3_USART3SW */ +#if defined(RCC_CFGR3_UART4SW) + case RCC_PERIPHCLK_UART4: + { + /* Get the current UART4 source */ + srcclk = __HAL_RCC_GET_UART4_SOURCE(); + + /* Check if UART4 clock selection is PCLK1 */ + if (srcclk == RCC_UART4CLKSOURCE_PCLK1) + { + frequency = HAL_RCC_GetPCLK1Freq(); + } + /* Check if HSI is ready and if UART4 clock selection is HSI */ + else if ((srcclk == RCC_UART4CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Check if UART4 clock selection is SYSCLK */ + else if (srcclk == RCC_UART4CLKSOURCE_SYSCLK) + { + frequency = HAL_RCC_GetSysClockFreq(); + } + /* Check if LSE is ready and if UART4 clock selection is LSE */ + else if ((srcclk == RCC_UART4CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY))) + { + frequency = LSE_VALUE; + } + break; + } +#endif /* RCC_CFGR3_UART4SW */ +#if defined(RCC_CFGR3_UART5SW) + case RCC_PERIPHCLK_UART5: + { + /* Get the current UART5 source */ + srcclk = __HAL_RCC_GET_UART5_SOURCE(); + + /* Check if UART5 clock selection is PCLK1 */ + if (srcclk == RCC_UART5CLKSOURCE_PCLK1) + { + frequency = HAL_RCC_GetPCLK1Freq(); + } + /* Check if HSI is ready and if UART5 clock selection is HSI */ + else if ((srcclk == RCC_UART5CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Check if UART5 clock selection is SYSCLK */ + else if (srcclk == RCC_UART5CLKSOURCE_SYSCLK) + { + frequency = HAL_RCC_GetSysClockFreq(); + } + /* Check if LSE is ready and if UART5 clock selection is LSE */ + else if ((srcclk == RCC_UART5CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY))) + { + frequency = LSE_VALUE; + } + break; + } +#endif /* RCC_CFGR3_UART5SW */ + case RCC_PERIPHCLK_I2C1: + { + /* Get the current I2C1 source */ + srcclk = __HAL_RCC_GET_I2C1_SOURCE(); + + /* Check if HSI is ready and if I2C1 clock selection is HSI */ + if ((srcclk == RCC_I2C1CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Check if I2C1 clock selection is SYSCLK */ + else if (srcclk == RCC_I2C1CLKSOURCE_SYSCLK) + { + frequency = HAL_RCC_GetSysClockFreq(); + } + break; + } +#if defined(RCC_CFGR3_I2C2SW) + case RCC_PERIPHCLK_I2C2: + { + /* Get the current I2C2 source */ + srcclk = __HAL_RCC_GET_I2C2_SOURCE(); + + /* Check if HSI is ready and if I2C2 clock selection is HSI */ + if ((srcclk == RCC_I2C2CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Check if I2C2 clock selection is SYSCLK */ + else if (srcclk == RCC_I2C2CLKSOURCE_SYSCLK) + { + frequency = HAL_RCC_GetSysClockFreq(); + } + break; + } +#endif /* RCC_CFGR3_I2C2SW */ +#if defined(RCC_CFGR3_I2C3SW) + case RCC_PERIPHCLK_I2C3: + { + /* Get the current I2C3 source */ + srcclk = __HAL_RCC_GET_I2C3_SOURCE(); + + /* Check if HSI is ready and if I2C3 clock selection is HSI */ + if ((srcclk == RCC_I2C3CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Check if I2C3 clock selection is SYSCLK */ + else if (srcclk == RCC_I2C3CLKSOURCE_SYSCLK) + { + frequency = HAL_RCC_GetSysClockFreq(); + } + break; + } +#endif /* RCC_CFGR3_I2C3SW */ +#if defined(RCC_CFGR_I2SSRC) + case RCC_PERIPHCLK_I2S: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_SOURCE(); + + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin */ + if (srcclk == RCC_I2SCLKSOURCE_EXT) + { + /* External clock used. Frequency cannot be returned.*/ + frequency = 0xDEADDEADU; + } + /* Check if I2S clock selection is SYSCLK */ + else if (srcclk == RCC_I2SCLKSOURCE_SYSCLK) + { + frequency = HAL_RCC_GetSysClockFreq(); + } + break; + } +#endif /* RCC_CFGR_I2SSRC */ +#if defined(RCC_CFGR_USBPRE) + case RCC_PERIPHCLK_USB: + { + /* Check if PLL is ready */ + if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY)) + { + /* Get the current USB source */ + srcclk = __HAL_RCC_GET_USB_SOURCE(); + + /* Check if USB clock selection is not divided */ + if (srcclk == RCC_USBCLKSOURCE_PLL) + { + frequency = RCC_GetPLLCLKFreq(); + } + /* Check if USB clock selection is divided by 1.5 */ + else /* RCC_USBCLKSOURCE_PLL_DIV1_5 */ + { + frequency = (RCC_GetPLLCLKFreq() * 3U) / 2U; + } + } + break; + } +#endif /* RCC_CFGR_USBPRE */ +#if defined(RCC_CFGR2_ADC1PRES) || defined(RCC_CFGR_ADCPRE) + case RCC_PERIPHCLK_ADC1: + { + /* Get the current ADC1 source */ + srcclk = __HAL_RCC_GET_ADC1_SOURCE(); +#if defined(RCC_CFGR2_ADC1PRES) + /* Check if ADC1 clock selection is AHB */ + if (srcclk == RCC_ADC1PLLCLK_OFF) + { + frequency = SystemCoreClock; + } + /* PLL clock has been selected */ + else + { + /* Check if PLL is ready */ + if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY)) + { + /* Frequency is the PLL frequency divided by ADC prescaler (1U/2U/4U/6U/8U/10U/12U/16U/32U/64U/128U/256U) */ + frequency = RCC_GetPLLCLKFreq() / adc_pll_prediv_table[(srcclk >> POSITION_VAL(RCC_CFGR2_ADC1PRES)) & 0xFU]; + } + } +#else /* RCC_CFGR_ADCPRE */ + /* ADC1 is set to PLCK2 frequency divided by 2U/4U/6U/8U */ + frequency = HAL_RCC_GetPCLK2Freq() / (((srcclk >> POSITION_VAL(RCC_CFGR_ADCPRE)) + 1U) * 2U); +#endif /* RCC_CFGR2_ADC1PRES */ + break; + } +#endif /* RCC_CFGR2_ADC1PRES || RCC_CFGR_ADCPRE */ +#if defined(RCC_CFGR2_ADCPRE12) + case RCC_PERIPHCLK_ADC12: + { + /* Get the current ADC12 source */ + srcclk = __HAL_RCC_GET_ADC12_SOURCE(); + /* Check if ADC12 clock selection is AHB */ + if (srcclk == RCC_ADC12PLLCLK_OFF) + { + frequency = SystemCoreClock; + } + /* PLL clock has been selected */ + else + { + /* Check if PLL is ready */ + if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY)) + { + /* Frequency is the PLL frequency divided by ADC prescaler (1U/2U/4U/6/8U/10U/12U/16U/32U/64U/128U/256U) */ + frequency = RCC_GetPLLCLKFreq() / adc_pll_prediv_table[(srcclk >> POSITION_VAL(RCC_CFGR2_ADCPRE12)) & 0xF]; + } + } + break; + } +#endif /* RCC_CFGR2_ADCPRE12 */ +#if defined(RCC_CFGR2_ADCPRE34) + case RCC_PERIPHCLK_ADC34: + { + /* Get the current ADC34 source */ + srcclk = __HAL_RCC_GET_ADC34_SOURCE(); + /* Check if ADC34 clock selection is AHB */ + if (srcclk == RCC_ADC34PLLCLK_OFF) + { + frequency = SystemCoreClock; + } + /* PLL clock has been selected */ + else + { + /* Check if PLL is ready */ + if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY)) + { + /* Frequency is the PLL frequency divided by ADC prescaler (1U/2U/4U/6U/8U/10U/12U/16U/32U/64U/128U/256U) */ + frequency = RCC_GetPLLCLKFreq() / adc_pll_prediv_table[(srcclk >> POSITION_VAL(RCC_CFGR2_ADCPRE34)) & 0xF]; + } + } + break; + } +#endif /* RCC_CFGR2_ADCPRE34 */ +#if defined(RCC_CFGR3_TIM1SW) + case RCC_PERIPHCLK_TIM1: + { + /* Get the current TIM1 source */ + srcclk = __HAL_RCC_GET_TIM1_SOURCE(); + + /* Check if PLL is ready and if TIM1 clock selection is PLL */ + if ((srcclk == RCC_TIM1CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY))) + { + frequency = RCC_GetPLLCLKFreq(); + } + /* Check if TIM1 clock selection is SYSCLK */ + else if (srcclk == RCC_TIM1CLK_HCLK) + { + frequency = SystemCoreClock; + } + break; + } +#endif /* RCC_CFGR3_TIM1SW */ +#if defined(RCC_CFGR3_TIM2SW) + case RCC_PERIPHCLK_TIM2: + { + /* Get the current TIM2 source */ + srcclk = __HAL_RCC_GET_TIM2_SOURCE(); + + /* Check if PLL is ready and if TIM2 clock selection is PLL */ + if ((srcclk == RCC_TIM2CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY))) + { + frequency = RCC_GetPLLCLKFreq(); + } + /* Check if TIM2 clock selection is SYSCLK */ + else if (srcclk == RCC_TIM2CLK_HCLK) + { + frequency = SystemCoreClock; + } + break; + } +#endif /* RCC_CFGR3_TIM2SW */ +#if defined(RCC_CFGR3_TIM8SW) + case RCC_PERIPHCLK_TIM8: + { + /* Get the current TIM8 source */ + srcclk = __HAL_RCC_GET_TIM8_SOURCE(); + + /* Check if PLL is ready and if TIM8 clock selection is PLL */ + if ((srcclk == RCC_TIM8CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY))) + { + frequency = RCC_GetPLLCLKFreq(); + } + /* Check if TIM8 clock selection is SYSCLK */ + else if (srcclk == RCC_TIM8CLK_HCLK) + { + frequency = SystemCoreClock; + } + break; + } +#endif /* RCC_CFGR3_TIM8SW */ +#if defined(RCC_CFGR3_TIM15SW) + case RCC_PERIPHCLK_TIM15: + { + /* Get the current TIM15 source */ + srcclk = __HAL_RCC_GET_TIM15_SOURCE(); + + /* Check if PLL is ready and if TIM15 clock selection is PLL */ + if ((srcclk == RCC_TIM15CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY))) + { + frequency = RCC_GetPLLCLKFreq(); + } + /* Check if TIM15 clock selection is SYSCLK */ + else if (srcclk == RCC_TIM15CLK_HCLK) + { + frequency = SystemCoreClock; + } + break; + } +#endif /* RCC_CFGR3_TIM15SW */ +#if defined(RCC_CFGR3_TIM16SW) + case RCC_PERIPHCLK_TIM16: + { + /* Get the current TIM16 source */ + srcclk = __HAL_RCC_GET_TIM16_SOURCE(); + + /* Check if PLL is ready and if TIM16 clock selection is PLL */ + if ((srcclk == RCC_TIM16CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY))) + { + frequency = RCC_GetPLLCLKFreq(); + } + /* Check if TIM16 clock selection is SYSCLK */ + else if (srcclk == RCC_TIM16CLK_HCLK) + { + frequency = SystemCoreClock; + } + break; + } +#endif /* RCC_CFGR3_TIM16SW */ +#if defined(RCC_CFGR3_TIM17SW) + case RCC_PERIPHCLK_TIM17: + { + /* Get the current TIM17 source */ + srcclk = __HAL_RCC_GET_TIM17_SOURCE(); + + /* Check if PLL is ready and if TIM17 clock selection is PLL */ + if ((srcclk == RCC_TIM17CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY))) + { + frequency = RCC_GetPLLCLKFreq(); + } + /* Check if TIM17 clock selection is SYSCLK */ + else if (srcclk == RCC_TIM17CLK_HCLK) + { + frequency = SystemCoreClock; + } + break; + } +#endif /* RCC_CFGR3_TIM17SW */ +#if defined(RCC_CFGR3_TIM20SW) + case RCC_PERIPHCLK_TIM20: + { + /* Get the current TIM20 source */ + srcclk = __HAL_RCC_GET_TIM20_SOURCE(); + + /* Check if PLL is ready and if TIM20 clock selection is PLL */ + if ((srcclk == RCC_TIM20CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY))) + { + frequency = RCC_GetPLLCLKFreq(); + } + /* Check if TIM20 clock selection is SYSCLK */ + else if (srcclk == RCC_TIM20CLK_HCLK) + { + frequency = SystemCoreClock; + } + break; + } +#endif /* RCC_CFGR3_TIM20SW */ +#if defined(RCC_CFGR3_TIM34SW) + case RCC_PERIPHCLK_TIM34: + { + /* Get the current TIM34 source */ + srcclk = __HAL_RCC_GET_TIM34_SOURCE(); + + /* Check if PLL is ready and if TIM34 clock selection is PLL */ + if ((srcclk == RCC_TIM34CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY))) + { + frequency = RCC_GetPLLCLKFreq(); + } + /* Check if TIM34 clock selection is SYSCLK */ + else if (srcclk == RCC_TIM34CLK_HCLK) + { + frequency = SystemCoreClock; + } + break; + } +#endif /* RCC_CFGR3_TIM34SW */ +#if defined(RCC_CFGR3_HRTIM1SW) + case RCC_PERIPHCLK_HRTIM1: + { + /* Get the current HRTIM1 source */ + srcclk = __HAL_RCC_GET_HRTIM1_SOURCE(); + + /* Check if PLL is ready and if HRTIM1 clock selection is PLL */ + if ((srcclk == RCC_HRTIM1CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY))) + { + frequency = RCC_GetPLLCLKFreq(); + } + /* Check if HRTIM1 clock selection is SYSCLK */ + else if (srcclk == RCC_HRTIM1CLK_HCLK) + { + frequency = SystemCoreClock; + } + break; + } +#endif /* RCC_CFGR3_HRTIM1SW */ +#if defined(RCC_CFGR_SDPRE) + case RCC_PERIPHCLK_SDADC: + { + /* Get the current SDADC source */ + srcclk = __HAL_RCC_GET_SDADC_SOURCE(); + /* Frequency is the system frequency divided by SDADC prescaler (2U/4U/6U/8U/10U/12U/14U/16U/20U/24U/28U/32U/36U/40U/44U/48U) */ + frequency = SystemCoreClock / sdadc_prescaler_table[(srcclk >> POSITION_VAL(RCC_CFGR_SDPRE)) & 0xF]; + break; + } +#endif /* RCC_CFGR_SDPRE */ +#if defined(RCC_CFGR3_CECSW) + case RCC_PERIPHCLK_CEC: + { + /* Get the current CEC source */ + srcclk = __HAL_RCC_GET_CEC_SOURCE(); + + /* Check if HSI is ready and if CEC clock selection is HSI */ + if ((srcclk == RCC_CECCLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Check if LSE is ready and if CEC clock selection is LSE */ + else if ((srcclk == RCC_CECCLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY))) + { + frequency = LSE_VALUE; + } + break; + } +#endif /* RCC_CFGR3_CECSW */ + default: + { + break; + } + } + return(frequency); +} + +/** + * @} + */ + +/** + * @} + */ + + +#if defined(RCC_CFGR2_ADC1PRES) || defined(RCC_CFGR2_ADCPRE12) || defined(RCC_CFGR2_ADCPRE34) || defined(RCC_CFGR_USBPRE) \ + || defined(RCC_CFGR3_TIM1SW) || defined(RCC_CFGR3_TIM2SW) || defined(RCC_CFGR3_TIM8SW) || defined(RCC_CFGR3_TIM15SW) \ + || defined(RCC_CFGR3_TIM16SW) || defined(RCC_CFGR3_TIM17SW) || defined(RCC_CFGR3_TIM20SW) || defined(RCC_CFGR3_TIM34SW) \ + || defined(RCC_CFGR3_HRTIM1SW) + +/** @addtogroup RCCEx_Private_Functions + * @{ + */ +static uint32_t RCC_GetPLLCLKFreq(void) +{ + uint32_t pllmul = 0U, pllsource = 0U, prediv = 0U, pllclk = 0U; + + pllmul = RCC->CFGR & RCC_CFGR_PLLMUL; + pllmul = ( pllmul >> 18U) + 2U; + pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; +#if defined(RCC_CFGR_PLLSRC_HSI_DIV2) + if (pllsource != RCC_PLLSOURCE_HSI) + { + prediv = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1U; + /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV * PLLMUL */ + pllclk = (HSE_VALUE/prediv) * pllmul; + } + else + { + /* HSI used as PLL clock source : PLLCLK = HSI/2U * PLLMUL */ + pllclk = (HSI_VALUE >> 1U) * pllmul; + } +#else + prediv = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1U; + if (pllsource == RCC_CFGR_PLLSRC_HSE_PREDIV) + { + /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV * PLLMUL */ + pllclk = (HSE_VALUE/prediv) * pllmul; + } + else + { + /* HSI used as PLL clock source : PLLCLK = HSI/PREDIV * PLLMUL */ + pllclk = (HSI_VALUE/prediv) * pllmul; + } +#endif /* RCC_CFGR_PLLSRC_HSI_DIV2 */ + + return pllclk; +} +/** + * @} + */ + +#endif /* RCC_CFGR2_ADC1PRES || RCC_CFGR2_ADCPRExx || RCC_CFGR3_TIMxSW || RCC_CFGR3_HRTIM1SW || RCC_CFGR_USBPRE */ + +/** + * @} + */ + +#endif /* HAL_RCC_MODULE_ENABLED */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_spi.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_spi.c new file mode 100644 index 0000000..5d270f8 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_spi.c @@ -0,0 +1,4458 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_spi.c + * @author MCD Application Team + * @brief SPI HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Serial Peripheral Interface (SPI) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + Peripheral Control functions + * + Peripheral State functions + * + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The SPI HAL driver can be used as follows: + + (#) Declare a SPI_HandleTypeDef handle structure, for example: + SPI_HandleTypeDef hspi; + + (#)Initialize the SPI low level resources by implementing the HAL_SPI_MspInit() API: + (##) Enable the SPIx interface clock + (##) SPI pins configuration + (+++) Enable the clock for the SPI GPIOs + (+++) Configure these SPI pins as alternate function push-pull + (##) NVIC configuration if you need to use interrupt process + (+++) Configure the SPIx interrupt priority + (+++) Enable the NVIC SPI IRQ handle + (##) DMA Configuration if you need to use DMA process + (+++) Declare a DMA_HandleTypeDef handle structure for the transmit or receive Stream/Channel + (+++) Enable the DMAx clock + (+++) Configure the DMA handle parameters + (+++) Configure the DMA Tx or Rx Stream/Channel + (+++) Associate the initialized hdma_tx(or _rx) handle to the hspi DMA Tx or Rx handle + (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on the DMA Tx or Rx Stream/Channel + + (#) Program the Mode, BidirectionalMode , Data size, Baudrate Prescaler, NSS + management, Clock polarity and phase, FirstBit and CRC configuration in the hspi Init structure. + + (#) Initialize the SPI registers by calling the HAL_SPI_Init() API: + (++) This API configures also the low level Hardware GPIO, CLOCK, CORTEX...etc) + by calling the customized HAL_SPI_MspInit() API. + [..] + Circular mode restriction: + (#) The DMA circular mode cannot be used when the SPI is configured in these modes: + (##) Master 2Lines RxOnly + (##) Master 1Line Rx + (#) The CRC feature is not managed when the DMA circular mode is enabled + (#) When the SPI DMA Pause/Stop features are used, we must use the following APIs + the HAL_SPI_DMAPause()/ HAL_SPI_DMAStop() only under the SPI callbacks + [..] + Master Receive mode restriction: + (#) In Master unidirectional receive-only mode (MSTR =1, BIDIMODE=0, RXONLY=1) or + bidirectional receive mode (MSTR=1, BIDIMODE=1, BIDIOE=0), to ensure that the SPI + does not initiate a new transfer the following procedure has to be respected: + (##) HAL_SPI_DeInit() + (##) HAL_SPI_Init() + [..] + Callback registration: + + (#) The compilation flag USE_HAL_SPI_REGISTER_CALLBACKS when set to 1U + allows the user to configure dynamically the driver callbacks. + Use Functions HAL_SPI_RegisterCallback() to register an interrupt callback. + + Function HAL_SPI_RegisterCallback() allows to register following callbacks: + (++) TxCpltCallback : SPI Tx Completed callback + (++) RxCpltCallback : SPI Rx Completed callback + (++) TxRxCpltCallback : SPI TxRx Completed callback + (++) TxHalfCpltCallback : SPI Tx Half Completed callback + (++) RxHalfCpltCallback : SPI Rx Half Completed callback + (++) TxRxHalfCpltCallback : SPI TxRx Half Completed callback + (++) ErrorCallback : SPI Error callback + (++) AbortCpltCallback : SPI Abort callback + (++) MspInitCallback : SPI Msp Init callback + (++) MspDeInitCallback : SPI Msp DeInit callback + This function takes as parameters the HAL peripheral handle, the Callback ID + and a pointer to the user callback function. + + + (#) Use function HAL_SPI_UnRegisterCallback to reset a callback to the default + weak function. + HAL_SPI_UnRegisterCallback takes as parameters the HAL peripheral handle, + and the Callback ID. + This function allows to reset following callbacks: + (++) TxCpltCallback : SPI Tx Completed callback + (++) RxCpltCallback : SPI Rx Completed callback + (++) TxRxCpltCallback : SPI TxRx Completed callback + (++) TxHalfCpltCallback : SPI Tx Half Completed callback + (++) RxHalfCpltCallback : SPI Rx Half Completed callback + (++) TxRxHalfCpltCallback : SPI TxRx Half Completed callback + (++) ErrorCallback : SPI Error callback + (++) AbortCpltCallback : SPI Abort callback + (++) MspInitCallback : SPI Msp Init callback + (++) MspDeInitCallback : SPI Msp DeInit callback + + [..] + By default, after the HAL_SPI_Init() and when the state is HAL_SPI_STATE_RESET + all callbacks are set to the corresponding weak functions: + examples HAL_SPI_MasterTxCpltCallback(), HAL_SPI_MasterRxCpltCallback(). + Exception done for MspInit and MspDeInit functions that are + reset to the legacy weak functions in the HAL_SPI_Init()/ HAL_SPI_DeInit() only when + these callbacks are null (not registered beforehand). + If MspInit or MspDeInit are not null, the HAL_SPI_Init()/ HAL_SPI_DeInit() + keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state. + + [..] + Callbacks can be registered/unregistered in HAL_SPI_STATE_READY state only. + Exception done MspInit/MspDeInit functions that can be registered/unregistered + in HAL_SPI_STATE_READY or HAL_SPI_STATE_RESET state, + thus registered (user) MspInit/DeInit callbacks can be used during the Init/DeInit. + Then, the user first registers the MspInit/MspDeInit user callbacks + using HAL_SPI_RegisterCallback() before calling HAL_SPI_DeInit() + or HAL_SPI_Init() function. + + [..] + When the compilation define USE_HAL_PPP_REGISTER_CALLBACKS is set to 0 or + not defined, the callback registering feature is not available + and weak (surcharged) callbacks are used. + + [..] + Using the HAL it is not possible to reach all supported SPI frequency with the different SPI Modes, + the following table resume the max SPI frequency reached with data size 8bits/16bits, + according to frequency of the APBx Peripheral Clock (fPCLK) used by the SPI instance. + + @endverbatim + + Additional table : + + DataSize = SPI_DATASIZE_8BIT: + +----------------------------------------------------------------------------------------------+ + | | | 2Lines Fullduplex | 2Lines RxOnly | 1Line | + | Process | Transfer mode |---------------------|----------------------|----------------------| + | | | Master | Slave | Master | Slave | Master | Slave | + |==============================================================================================| + | T | Polling | Fpclk/4 | Fpclk/8 | NA | NA | NA | NA | + | X |----------------|----------|----------|-----------|----------|-----------|----------| + | / | Interrupt | Fpclk/4 | Fpclk/16 | NA | NA | NA | NA | + | R |----------------|----------|----------|-----------|----------|-----------|----------| + | X | DMA | Fpclk/2 | Fpclk/2 | NA | NA | NA | NA | + |=========|================|==========|==========|===========|==========|===========|==========| + | | Polling | Fpclk/4 | Fpclk/8 | Fpclk/16 | Fpclk/8 | Fpclk/8 | Fpclk/8 | + | |----------------|----------|----------|-----------|----------|-----------|----------| + | R | Interrupt | Fpclk/8 | Fpclk/16 | Fpclk/8 | Fpclk/8 | Fpclk/8 | Fpclk/4 | + | X |----------------|----------|----------|-----------|----------|-----------|----------| + | | DMA | Fpclk/4 | Fpclk/2 | Fpclk/2 | Fpclk/16 | Fpclk/2 | Fpclk/16 | + |=========|================|==========|==========|===========|==========|===========|==========| + | | Polling | Fpclk/8 | Fpclk/2 | NA | NA | Fpclk/8 | Fpclk/8 | + | |----------------|----------|----------|-----------|----------|-----------|----------| + | T | Interrupt | Fpclk/2 | Fpclk/4 | NA | NA | Fpclk/16 | Fpclk/8 | + | X |----------------|----------|----------|-----------|----------|-----------|----------| + | | DMA | Fpclk/2 | Fpclk/2 | NA | NA | Fpclk/8 | Fpclk/16 | + +----------------------------------------------------------------------------------------------+ + + DataSize = SPI_DATASIZE_16BIT: + +----------------------------------------------------------------------------------------------+ + | | | 2Lines Fullduplex | 2Lines RxOnly | 1Line | + | Process | Transfer mode |---------------------|----------------------|----------------------| + | | | Master | Slave | Master | Slave | Master | Slave | + |==============================================================================================| + | T | Polling | Fpclk/4 | Fpclk/8 | NA | NA | NA | NA | + | X |----------------|----------|----------|-----------|----------|-----------|----------| + | / | Interrupt | Fpclk/4 | Fpclk/16 | NA | NA | NA | NA | + | R |----------------|----------|----------|-----------|----------|-----------|----------| + | X | DMA | Fpclk/2 | Fpclk/2 | NA | NA | NA | NA | + |=========|================|==========|==========|===========|==========|===========|==========| + | | Polling | Fpclk/4 | Fpclk/8 | Fpclk/16 | Fpclk/8 | Fpclk/8 | Fpclk/8 | + | |----------------|----------|----------|-----------|----------|-----------|----------| + | R | Interrupt | Fpclk/8 | Fpclk/16 | Fpclk/8 | Fpclk/8 | Fpclk/8 | Fpclk/4 | + | X |----------------|----------|----------|-----------|----------|-----------|----------| + | | DMA | Fpclk/4 | Fpclk/2 | Fpclk/2 | Fpclk/16 | Fpclk/2 | Fpclk/16 | + |=========|================|==========|==========|===========|==========|===========|==========| + | | Polling | Fpclk/8 | Fpclk/2 | NA | NA | Fpclk/8 | Fpclk/8 | + | |----------------|----------|----------|-----------|----------|-----------|----------| + | T | Interrupt | Fpclk/2 | Fpclk/4 | NA | NA | Fpclk/16 | Fpclk/8 | + | X |----------------|----------|----------|-----------|----------|-----------|----------| + | | DMA | Fpclk/2 | Fpclk/2 | NA | NA | Fpclk/8 | Fpclk/16 | + +----------------------------------------------------------------------------------------------+ + @note The max SPI frequency depend on SPI data size (4bits, 5bits,..., 8bits,...15bits, 16bits), + SPI mode(2 Lines fullduplex, 2 lines RxOnly, 1 line TX/RX) and Process mode (Polling, IT, DMA). + @note + (#) TX/RX processes are HAL_SPI_TransmitReceive(), HAL_SPI_TransmitReceive_IT() and HAL_SPI_TransmitReceive_DMA() + (#) RX processes are HAL_SPI_Receive(), HAL_SPI_Receive_IT() and HAL_SPI_Receive_DMA() + (#) TX processes are HAL_SPI_Transmit(), HAL_SPI_Transmit_IT() and HAL_SPI_Transmit_DMA() + + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup SPI SPI + * @brief SPI HAL module driver + * @{ + */ +#ifdef HAL_SPI_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private defines -----------------------------------------------------------*/ +/** @defgroup SPI_Private_Constants SPI Private Constants + * @{ + */ +#define SPI_DEFAULT_TIMEOUT 100U +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup SPI_Private_Functions SPI Private Functions + * @{ + */ +static void SPI_DMATransmitCplt(DMA_HandleTypeDef *hdma); +static void SPI_DMAReceiveCplt(DMA_HandleTypeDef *hdma); +static void SPI_DMATransmitReceiveCplt(DMA_HandleTypeDef *hdma); +static void SPI_DMAHalfTransmitCplt(DMA_HandleTypeDef *hdma); +static void SPI_DMAHalfReceiveCplt(DMA_HandleTypeDef *hdma); +static void SPI_DMAHalfTransmitReceiveCplt(DMA_HandleTypeDef *hdma); +static void SPI_DMAError(DMA_HandleTypeDef *hdma); +static void SPI_DMAAbortOnError(DMA_HandleTypeDef *hdma); +static void SPI_DMATxAbortCallback(DMA_HandleTypeDef *hdma); +static void SPI_DMARxAbortCallback(DMA_HandleTypeDef *hdma); +static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, FlagStatus State, + uint32_t Timeout, uint32_t Tickstart); +static HAL_StatusTypeDef SPI_WaitFifoStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Fifo, uint32_t State, + uint32_t Timeout, uint32_t Tickstart); +static void SPI_TxISR_8BIT(struct __SPI_HandleTypeDef *hspi); +static void SPI_TxISR_16BIT(struct __SPI_HandleTypeDef *hspi); +static void SPI_RxISR_8BIT(struct __SPI_HandleTypeDef *hspi); +static void SPI_RxISR_16BIT(struct __SPI_HandleTypeDef *hspi); +static void SPI_2linesRxISR_8BIT(struct __SPI_HandleTypeDef *hspi); +static void SPI_2linesTxISR_8BIT(struct __SPI_HandleTypeDef *hspi); +static void SPI_2linesTxISR_16BIT(struct __SPI_HandleTypeDef *hspi); +static void SPI_2linesRxISR_16BIT(struct __SPI_HandleTypeDef *hspi); +#if (USE_SPI_CRC != 0U) +static void SPI_RxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi); +static void SPI_RxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi); +static void SPI_2linesRxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi); +static void SPI_2linesRxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi); +#endif /* USE_SPI_CRC */ +static void SPI_AbortRx_ISR(SPI_HandleTypeDef *hspi); +static void SPI_AbortTx_ISR(SPI_HandleTypeDef *hspi); +static void SPI_CloseRxTx_ISR(SPI_HandleTypeDef *hspi); +static void SPI_CloseRx_ISR(SPI_HandleTypeDef *hspi); +static void SPI_CloseTx_ISR(SPI_HandleTypeDef *hspi); +static HAL_StatusTypeDef SPI_EndRxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart); +static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart); +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup SPI_Exported_Functions SPI Exported Functions + * @{ + */ + +/** @defgroup SPI_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] This subsection provides a set of functions allowing to initialize and + de-initialize the SPIx peripheral: + + (+) User must implement HAL_SPI_MspInit() function in which he configures + all related peripherals resources (CLOCK, GPIO, DMA, IT and NVIC ). + + (+) Call the function HAL_SPI_Init() to configure the selected device with + the selected configuration: + (++) Mode + (++) Direction + (++) Data Size + (++) Clock Polarity and Phase + (++) NSS Management + (++) BaudRate Prescaler + (++) FirstBit + (++) TIMode + (++) CRC Calculation + (++) CRC Polynomial if CRC enabled + (++) CRC Length, used only with Data8 and Data16 + (++) FIFO reception threshold + + (+) Call the function HAL_SPI_DeInit() to restore the default configuration + of the selected SPIx peripheral. + +@endverbatim + * @{ + */ + +/** + * @brief Initialize the SPI according to the specified parameters + * in the SPI_InitTypeDef and initialize the associated handle. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi) +{ + uint32_t frxth; + + /* Check the SPI handle allocation */ + if (hspi == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); + assert_param(IS_SPI_MODE(hspi->Init.Mode)); + assert_param(IS_SPI_DIRECTION(hspi->Init.Direction)); + assert_param(IS_SPI_DATASIZE(hspi->Init.DataSize)); + assert_param(IS_SPI_NSS(hspi->Init.NSS)); + assert_param(IS_SPI_NSSP(hspi->Init.NSSPMode)); + assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); + assert_param(IS_SPI_FIRST_BIT(hspi->Init.FirstBit)); + assert_param(IS_SPI_TIMODE(hspi->Init.TIMode)); + if (hspi->Init.TIMode == SPI_TIMODE_DISABLE) + { + assert_param(IS_SPI_CPOL(hspi->Init.CLKPolarity)); + assert_param(IS_SPI_CPHA(hspi->Init.CLKPhase)); + + if (hspi->Init.Mode == SPI_MODE_MASTER) + { + assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); + } + else + { + /* Baudrate prescaler not use in Motoraola Slave mode. force to default value */ + hspi->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; + } + } + else + { + assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); + + /* Force polarity and phase to TI protocaol requirements */ + hspi->Init.CLKPolarity = SPI_POLARITY_LOW; + hspi->Init.CLKPhase = SPI_PHASE_1EDGE; + } +#if (USE_SPI_CRC != 0U) + assert_param(IS_SPI_CRC_CALCULATION(hspi->Init.CRCCalculation)); + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + assert_param(IS_SPI_CRC_POLYNOMIAL(hspi->Init.CRCPolynomial)); + assert_param(IS_SPI_CRC_LENGTH(hspi->Init.CRCLength)); + } +#else + hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; +#endif /* USE_SPI_CRC */ + + if (hspi->State == HAL_SPI_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + hspi->Lock = HAL_UNLOCKED; + +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + /* Init the SPI Callback settings */ + hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ + hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ + hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ + hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ + hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ + hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ + hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ + hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ + + if (hspi->MspInitCallback == NULL) + { + hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ + } + + /* Init the low level hardware : GPIO, CLOCK, NVIC... */ + hspi->MspInitCallback(hspi); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC... */ + HAL_SPI_MspInit(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + } + + hspi->State = HAL_SPI_STATE_BUSY; + + /* Disable the selected SPI peripheral */ + __HAL_SPI_DISABLE(hspi); + + /* Align by default the rs fifo threshold on the data size */ + if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) + { + frxth = SPI_RXFIFO_THRESHOLD_HF; + } + else + { + frxth = SPI_RXFIFO_THRESHOLD_QF; + } + + /* CRC calculation is valid only for 16Bit and 8 Bit */ + if ((hspi->Init.DataSize != SPI_DATASIZE_16BIT) && (hspi->Init.DataSize != SPI_DATASIZE_8BIT)) + { + /* CRC must be disabled */ + hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + } + + /*----------------------- SPIx CR1 & CR2 Configuration ---------------------*/ + /* Configure : SPI Mode, Communication Mode, Clock polarity and phase, NSS management, + Communication speed, First bit and CRC calculation state */ + WRITE_REG(hspi->Instance->CR1, ((hspi->Init.Mode & (SPI_CR1_MSTR | SPI_CR1_SSI)) | + (hspi->Init.Direction & (SPI_CR1_RXONLY | SPI_CR1_BIDIMODE)) | + (hspi->Init.CLKPolarity & SPI_CR1_CPOL) | + (hspi->Init.CLKPhase & SPI_CR1_CPHA) | + (hspi->Init.NSS & SPI_CR1_SSM) | + (hspi->Init.BaudRatePrescaler & SPI_CR1_BR_Msk) | + (hspi->Init.FirstBit & SPI_CR1_LSBFIRST) | + (hspi->Init.CRCCalculation & SPI_CR1_CRCEN))); +#if (USE_SPI_CRC != 0U) + /*---------------------------- SPIx CRCL Configuration -------------------*/ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + /* Align the CRC Length on the data size */ + if (hspi->Init.CRCLength == SPI_CRC_LENGTH_DATASIZE) + { + /* CRC Length aligned on the data size : value set by default */ + if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) + { + hspi->Init.CRCLength = SPI_CRC_LENGTH_16BIT; + } + else + { + hspi->Init.CRCLength = SPI_CRC_LENGTH_8BIT; + } + } + + /* Configure : CRC Length */ + if (hspi->Init.CRCLength == SPI_CRC_LENGTH_16BIT) + { + SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCL); + } + } +#endif /* USE_SPI_CRC */ + + /* Configure : NSS management, TI Mode, NSS Pulse, Data size and Rx Fifo threshold */ + WRITE_REG(hspi->Instance->CR2, (((hspi->Init.NSS >> 16U) & SPI_CR2_SSOE) | + (hspi->Init.TIMode & SPI_CR2_FRF) | + (hspi->Init.NSSPMode & SPI_CR2_NSSP) | + (hspi->Init.DataSize & SPI_CR2_DS_Msk) | + (frxth & SPI_CR2_FRXTH))); + +#if (USE_SPI_CRC != 0U) + /*---------------------------- SPIx CRCPOLY Configuration ------------------*/ + /* Configure : CRC Polynomial */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + WRITE_REG(hspi->Instance->CRCPR, (hspi->Init.CRCPolynomial & SPI_CRCPR_CRCPOLY_Msk)); + } +#endif /* USE_SPI_CRC */ + +#if defined(SPI_I2SCFGR_I2SMOD) + /* Activate the SPI mode (Make sure that I2SMOD bit in I2SCFGR register is reset) */ + CLEAR_BIT(hspi->Instance->I2SCFGR, SPI_I2SCFGR_I2SMOD); +#endif /* SPI_I2SCFGR_I2SMOD */ + + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + hspi->State = HAL_SPI_STATE_READY; + + return HAL_OK; +} + +/** + * @brief De-Initialize the SPI peripheral. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi) +{ + /* Check the SPI handle allocation */ + if (hspi == NULL) + { + return HAL_ERROR; + } + + /* Check SPI Instance parameter */ + assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); + + hspi->State = HAL_SPI_STATE_BUSY; + + /* Disable the SPI Peripheral Clock */ + __HAL_SPI_DISABLE(hspi); + +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + if (hspi->MspDeInitCallback == NULL) + { + hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ + } + + /* DeInit the low level hardware: GPIO, CLOCK, NVIC... */ + hspi->MspDeInitCallback(hspi); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC... */ + HAL_SPI_MspDeInit(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + hspi->State = HAL_SPI_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(hspi); + + return HAL_OK; +} + +/** + * @brief Initialize the SPI MSP. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +__weak void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SPI_MspInit should be implemented in the user file + */ +} + +/** + * @brief De-Initialize the SPI MSP. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +__weak void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SPI_MspDeInit should be implemented in the user file + */ +} + +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) +/** + * @brief Register a User SPI Callback + * To be used instead of the weak predefined callback + * @param hspi Pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for the specified SPI. + * @param CallbackID ID of the callback to be registered + * @param pCallback pointer to the Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID, + pSPI_CallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + hspi->ErrorCode |= HAL_SPI_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + /* Process locked */ + __HAL_LOCK(hspi); + + if (HAL_SPI_STATE_READY == hspi->State) + { + switch (CallbackID) + { + case HAL_SPI_TX_COMPLETE_CB_ID : + hspi->TxCpltCallback = pCallback; + break; + + case HAL_SPI_RX_COMPLETE_CB_ID : + hspi->RxCpltCallback = pCallback; + break; + + case HAL_SPI_TX_RX_COMPLETE_CB_ID : + hspi->TxRxCpltCallback = pCallback; + break; + + case HAL_SPI_TX_HALF_COMPLETE_CB_ID : + hspi->TxHalfCpltCallback = pCallback; + break; + + case HAL_SPI_RX_HALF_COMPLETE_CB_ID : + hspi->RxHalfCpltCallback = pCallback; + break; + + case HAL_SPI_TX_RX_HALF_COMPLETE_CB_ID : + hspi->TxRxHalfCpltCallback = pCallback; + break; + + case HAL_SPI_ERROR_CB_ID : + hspi->ErrorCallback = pCallback; + break; + + case HAL_SPI_ABORT_CB_ID : + hspi->AbortCpltCallback = pCallback; + break; + + case HAL_SPI_MSPINIT_CB_ID : + hspi->MspInitCallback = pCallback; + break; + + case HAL_SPI_MSPDEINIT_CB_ID : + hspi->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (HAL_SPI_STATE_RESET == hspi->State) + { + switch (CallbackID) + { + case HAL_SPI_MSPINIT_CB_ID : + hspi->MspInitCallback = pCallback; + break; + + case HAL_SPI_MSPDEINIT_CB_ID : + hspi->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hspi); + return status; +} + +/** + * @brief Unregister an SPI Callback + * SPI callback is redirected to the weak predefined callback + * @param hspi Pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for the specified SPI. + * @param CallbackID ID of the callback to be unregistered + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hspi); + + if (HAL_SPI_STATE_READY == hspi->State) + { + switch (CallbackID) + { + case HAL_SPI_TX_COMPLETE_CB_ID : + hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ + break; + + case HAL_SPI_RX_COMPLETE_CB_ID : + hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ + break; + + case HAL_SPI_TX_RX_COMPLETE_CB_ID : + hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ + break; + + case HAL_SPI_TX_HALF_COMPLETE_CB_ID : + hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ + break; + + case HAL_SPI_RX_HALF_COMPLETE_CB_ID : + hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ + break; + + case HAL_SPI_TX_RX_HALF_COMPLETE_CB_ID : + hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ + break; + + case HAL_SPI_ERROR_CB_ID : + hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ + break; + + case HAL_SPI_ABORT_CB_ID : + hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ + break; + + case HAL_SPI_MSPINIT_CB_ID : + hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ + break; + + case HAL_SPI_MSPDEINIT_CB_ID : + hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ + break; + + default : + /* Update the error code */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (HAL_SPI_STATE_RESET == hspi->State) + { + switch (CallbackID) + { + case HAL_SPI_MSPINIT_CB_ID : + hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ + break; + + case HAL_SPI_MSPDEINIT_CB_ID : + hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ + break; + + default : + /* Update the error code */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hspi); + return status; +} +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +/** + * @} + */ + +/** @defgroup SPI_Exported_Functions_Group2 IO operation functions + * @brief Data transfers functions + * +@verbatim + ============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to manage the SPI + data transfers. + + [..] The SPI supports master and slave mode : + + (#) There are two modes of transfer: + (++) Blocking mode: The communication is performed in polling mode. + The HAL status of all data processing is returned by the same function + after finishing transfer. + (++) No-Blocking mode: The communication is performed using Interrupts + or DMA, These APIs return the HAL status. + The end of the data processing will be indicated through the + dedicated SPI IRQ when using Interrupt mode or the DMA IRQ when + using DMA mode. + The HAL_SPI_TxCpltCallback(), HAL_SPI_RxCpltCallback() and HAL_SPI_TxRxCpltCallback() user callbacks + will be executed respectively at the end of the transmit or Receive process + The HAL_SPI_ErrorCallback()user callback will be executed when a communication error is detected + + (#) APIs provided for these 2 transfer modes (Blocking mode or Non blocking mode using either Interrupt or DMA) + exist for 1Line (simplex) and 2Lines (full duplex) modes. + +@endverbatim + * @{ + */ + +/** + * @brief Transmit an amount of data in blocking mode. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @param pData pointer to data buffer + * @param Size amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + uint32_t tickstart; + HAL_StatusTypeDef errorcode = HAL_OK; + uint16_t initial_TxXferCount; + + /* Check Direction parameter */ + assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); + + /* Process Locked */ + __HAL_LOCK(hspi); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + initial_TxXferCount = Size; + + if (hspi->State != HAL_SPI_STATE_READY) + { + errorcode = HAL_BUSY; + goto error; + } + + if ((pData == NULL) || (Size == 0U)) + { + errorcode = HAL_ERROR; + goto error; + } + + /* Set the transaction information */ + hspi->State = HAL_SPI_STATE_BUSY_TX; + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + hspi->pTxBuffPtr = (uint8_t *)pData; + hspi->TxXferSize = Size; + hspi->TxXferCount = Size; + + /*Init field not used in handle to zero */ + hspi->pRxBuffPtr = (uint8_t *)NULL; + hspi->RxXferSize = 0U; + hspi->RxXferCount = 0U; + hspi->TxISR = NULL; + hspi->RxISR = NULL; + + /* Configure communication direction : 1Line */ + if (hspi->Init.Direction == SPI_DIRECTION_1LINE) + { + /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ + __HAL_SPI_DISABLE(hspi); + SPI_1LINE_TX(hspi); + } + +#if (USE_SPI_CRC != 0U) + /* Reset CRC Calculation */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + SPI_RESET_CRC(hspi); + } +#endif /* USE_SPI_CRC */ + + /* Check if the SPI is already enabled */ + if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) + { + /* Enable SPI peripheral */ + __HAL_SPI_ENABLE(hspi); + } + + /* Transmit data in 16 Bit mode */ + if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) + { + if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) + { + hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); + hspi->pTxBuffPtr += sizeof(uint16_t); + hspi->TxXferCount--; + } + /* Transmit data in 16 Bit mode */ + while (hspi->TxXferCount > 0U) + { + /* Wait until TXE flag is set to send data */ + if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) + { + hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); + hspi->pTxBuffPtr += sizeof(uint16_t); + hspi->TxXferCount--; + } + else + { + /* Timeout management */ + if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) + { + errorcode = HAL_TIMEOUT; + goto error; + } + } + } + } + /* Transmit data in 8 Bit mode */ + else + { + if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) + { + if (hspi->TxXferCount > 1U) + { + /* write on the data register in packing mode */ + hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); + hspi->pTxBuffPtr += sizeof(uint16_t); + hspi->TxXferCount -= 2U; + } + else + { + *((__IO uint8_t *)&hspi->Instance->DR) = (*hspi->pTxBuffPtr); + hspi->pTxBuffPtr ++; + hspi->TxXferCount--; + } + } + while (hspi->TxXferCount > 0U) + { + /* Wait until TXE flag is set to send data */ + if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) + { + if (hspi->TxXferCount > 1U) + { + /* write on the data register in packing mode */ + hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); + hspi->pTxBuffPtr += sizeof(uint16_t); + hspi->TxXferCount -= 2U; + } + else + { + *((__IO uint8_t *)&hspi->Instance->DR) = (*hspi->pTxBuffPtr); + hspi->pTxBuffPtr++; + hspi->TxXferCount--; + } + } + else + { + /* Timeout management */ + if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) + { + errorcode = HAL_TIMEOUT; + goto error; + } + } + } + } +#if (USE_SPI_CRC != 0U) + /* Enable CRC Transmission */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); + } +#endif /* USE_SPI_CRC */ + + /* Check the end of the transaction */ + if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_FLAG; + } + + /* Clear overrun flag in 2 Lines communication mode because received is not read */ + if (hspi->Init.Direction == SPI_DIRECTION_2LINES) + { + __HAL_SPI_CLEAR_OVRFLAG(hspi); + } + + if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) + { + errorcode = HAL_ERROR; + } + +error: + hspi->State = HAL_SPI_STATE_READY; + /* Process Unlocked */ + __HAL_UNLOCK(hspi); + return errorcode; +} + +/** + * @brief Receive an amount of data in blocking mode. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @param pData pointer to data buffer + * @param Size amount of data to be received + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ +#if (USE_SPI_CRC != 0U) + __IO uint32_t tmpreg = 0U; + __IO uint8_t * ptmpreg8; + __IO uint8_t tmpreg8 = 0; +#endif /* USE_SPI_CRC */ + uint32_t tickstart; + HAL_StatusTypeDef errorcode = HAL_OK; + + if ((hspi->Init.Mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES)) + { + hspi->State = HAL_SPI_STATE_BUSY_RX; + /* Call transmit-receive function to send Dummy data on Tx line and generate clock on CLK line */ + return HAL_SPI_TransmitReceive(hspi, pData, pData, Size, Timeout); + } + + /* Process Locked */ + __HAL_LOCK(hspi); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + if (hspi->State != HAL_SPI_STATE_READY) + { + errorcode = HAL_BUSY; + goto error; + } + + if ((pData == NULL) || (Size == 0U)) + { + errorcode = HAL_ERROR; + goto error; + } + + /* Set the transaction information */ + hspi->State = HAL_SPI_STATE_BUSY_RX; + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + hspi->pRxBuffPtr = (uint8_t *)pData; + hspi->RxXferSize = Size; + hspi->RxXferCount = Size; + + /*Init field not used in handle to zero */ + hspi->pTxBuffPtr = (uint8_t *)NULL; + hspi->TxXferSize = 0U; + hspi->TxXferCount = 0U; + hspi->RxISR = NULL; + hspi->TxISR = NULL; + +#if (USE_SPI_CRC != 0U) + /* Reset CRC Calculation */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + SPI_RESET_CRC(hspi); + /* this is done to handle the CRCNEXT before the latest data */ + hspi->RxXferCount--; + } +#endif /* USE_SPI_CRC */ + + /* Set the Rx Fifo threshold */ + if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) + { + /* Set RX Fifo threshold according the reception data length: 16bit */ + CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + } + else + { + /* Set RX Fifo threshold according the reception data length: 8bit */ + SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + } + + /* Configure communication direction: 1Line */ + if (hspi->Init.Direction == SPI_DIRECTION_1LINE) + { + /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ + __HAL_SPI_DISABLE(hspi); + SPI_1LINE_RX(hspi); + } + + /* Check if the SPI is already enabled */ + if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) + { + /* Enable SPI peripheral */ + __HAL_SPI_ENABLE(hspi); + } + + /* Receive data in 8 Bit mode */ + if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) + { + /* Transfer loop */ + while (hspi->RxXferCount > 0U) + { + /* Check the RXNE flag */ + if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) + { + /* read the received data */ + (* (uint8_t *)hspi->pRxBuffPtr) = *(__IO uint8_t *)&hspi->Instance->DR; + hspi->pRxBuffPtr += sizeof(uint8_t); + hspi->RxXferCount--; + } + else + { + /* Timeout management */ + if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) + { + errorcode = HAL_TIMEOUT; + goto error; + } + } + } + } + else + { + /* Transfer loop */ + while (hspi->RxXferCount > 0U) + { + /* Check the RXNE flag */ + if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) + { + *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; + hspi->pRxBuffPtr += sizeof(uint16_t); + hspi->RxXferCount--; + } + else + { + /* Timeout management */ + if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) + { + errorcode = HAL_TIMEOUT; + goto error; + } + } + } + } + +#if (USE_SPI_CRC != 0U) + /* Handle the CRC Transmission */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + /* freeze the CRC before the latest data */ + SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); + + /* Read the latest data */ + if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) + { + /* the latest data has not been received */ + errorcode = HAL_TIMEOUT; + goto error; + } + + /* Receive last data in 16 Bit mode */ + if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) + { + *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; + } + /* Receive last data in 8 Bit mode */ + else + { + (*(uint8_t *)hspi->pRxBuffPtr) = *(__IO uint8_t *)&hspi->Instance->DR; + } + + /* Wait the CRC data */ + if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); + errorcode = HAL_TIMEOUT; + goto error; + } + + /* Read CRC to Flush DR and RXNE flag */ + if (hspi->Init.DataSize == SPI_DATASIZE_16BIT) + { + /* Read 16bit CRC */ + tmpreg = READ_REG(hspi->Instance->DR); + /* To avoid GCC warning */ + UNUSED(tmpreg); + } + else + { + /* Initialize the 8bit temporary pointer */ + ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; + /* Read 8bit CRC */ + tmpreg8 = *ptmpreg8; + /* To avoid GCC warning */ + UNUSED(tmpreg8); + + if ((hspi->Init.DataSize == SPI_DATASIZE_8BIT) && (hspi->Init.CRCLength == SPI_CRC_LENGTH_16BIT)) + { + if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) + { + /* Error on the CRC reception */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); + errorcode = HAL_TIMEOUT; + goto error; + } + /* Read 8bit CRC again in case of 16bit CRC in 8bit Data mode */ + tmpreg8 = *ptmpreg8; + /* To avoid GCC warning */ + UNUSED(tmpreg8); + } + } + } +#endif /* USE_SPI_CRC */ + + /* Check the end of the transaction */ + if (SPI_EndRxTransaction(hspi, Timeout, tickstart) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_FLAG; + } + +#if (USE_SPI_CRC != 0U) + /* Check if CRC error occurred */ + if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR)) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); + __HAL_SPI_CLEAR_CRCERRFLAG(hspi); + } +#endif /* USE_SPI_CRC */ + + if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) + { + errorcode = HAL_ERROR; + } + +error : + hspi->State = HAL_SPI_STATE_READY; + __HAL_UNLOCK(hspi); + return errorcode; +} + +/** + * @brief Transmit and Receive an amount of data in blocking mode. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @param pTxData pointer to transmission data buffer + * @param pRxData pointer to reception data buffer + * @param Size amount of data to be sent and received + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, + uint32_t Timeout) +{ + uint16_t initial_TxXferCount; + uint16_t initial_RxXferCount; + uint32_t tmp_mode; + HAL_SPI_StateTypeDef tmp_state; + uint32_t tickstart; +#if (USE_SPI_CRC != 0U) + __IO uint32_t tmpreg = 0U; + uint32_t spi_cr1; + uint32_t spi_cr2; + __IO uint8_t * ptmpreg8; + __IO uint8_t tmpreg8 = 0; +#endif /* USE_SPI_CRC */ + + /* Variable used to alternate Rx and Tx during transfer */ + uint32_t txallowed = 1U; + HAL_StatusTypeDef errorcode = HAL_OK; + + /* Check Direction parameter */ + assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); + + /* Process Locked */ + __HAL_LOCK(hspi); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + /* Init temporary variables */ + tmp_state = hspi->State; + tmp_mode = hspi->Init.Mode; + initial_TxXferCount = Size; + initial_RxXferCount = Size; +#if (USE_SPI_CRC != 0U) + spi_cr1 = READ_REG(hspi->Instance->CR1); + spi_cr2 = READ_REG(hspi->Instance->CR2); +#endif /* USE_SPI_CRC */ + + if (!((tmp_state == HAL_SPI_STATE_READY) || \ + ((tmp_mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES) && (tmp_state == HAL_SPI_STATE_BUSY_RX)))) + { + errorcode = HAL_BUSY; + goto error; + } + + if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U)) + { + errorcode = HAL_ERROR; + goto error; + } + + /* Don't overwrite in case of HAL_SPI_STATE_BUSY_RX */ + if (hspi->State != HAL_SPI_STATE_BUSY_RX) + { + hspi->State = HAL_SPI_STATE_BUSY_TX_RX; + } + + /* Set the transaction information */ + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + hspi->pRxBuffPtr = (uint8_t *)pRxData; + hspi->RxXferCount = Size; + hspi->RxXferSize = Size; + hspi->pTxBuffPtr = (uint8_t *)pTxData; + hspi->TxXferCount = Size; + hspi->TxXferSize = Size; + + /*Init field not used in handle to zero */ + hspi->RxISR = NULL; + hspi->TxISR = NULL; + +#if (USE_SPI_CRC != 0U) + /* Reset CRC Calculation */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + SPI_RESET_CRC(hspi); + } +#endif /* USE_SPI_CRC */ + + /* Set the Rx Fifo threshold */ + if ((hspi->Init.DataSize > SPI_DATASIZE_8BIT) || (initial_RxXferCount > 1U)) + { + /* Set fiforxthreshold according the reception data length: 16bit */ + CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + } + else + { + /* Set fiforxthreshold according the reception data length: 8bit */ + SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + } + + /* Check if the SPI is already enabled */ + if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) + { + /* Enable SPI peripheral */ + __HAL_SPI_ENABLE(hspi); + } + + /* Transmit and Receive data in 16 Bit mode */ + if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) + { + if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) + { + hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); + hspi->pTxBuffPtr += sizeof(uint16_t); + hspi->TxXferCount--; + } + while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) + { + /* Check TXE flag */ + if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->TxXferCount > 0U) && (txallowed == 1U)) + { + hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); + hspi->pTxBuffPtr += sizeof(uint16_t); + hspi->TxXferCount--; + /* Next Data is a reception (Rx). Tx not allowed */ + txallowed = 0U; + +#if (USE_SPI_CRC != 0U) + /* Enable CRC Transmission */ + if ((hspi->TxXferCount == 0U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) + { + /* Set NSS Soft to received correctly the CRC on slave mode with NSS pulse activated */ + if ((READ_BIT(spi_cr1, SPI_CR1_MSTR) == 0U) && (READ_BIT(spi_cr2, SPI_CR2_NSSP) == SPI_CR2_NSSP)) + { + SET_BIT(hspi->Instance->CR1, SPI_CR1_SSM); + } + SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); + } +#endif /* USE_SPI_CRC */ + } + + /* Check RXNE flag */ + if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->RxXferCount > 0U)) + { + *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; + hspi->pRxBuffPtr += sizeof(uint16_t); + hspi->RxXferCount--; + /* Next Data is a Transmission (Tx). Tx is allowed */ + txallowed = 1U; + } + if (((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) + { + errorcode = HAL_TIMEOUT; + goto error; + } + } + } + /* Transmit and Receive data in 8 Bit mode */ + else + { + if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) + { + if (hspi->TxXferCount > 1U) + { + hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); + hspi->pTxBuffPtr += sizeof(uint16_t); + hspi->TxXferCount -= 2U; + } + else + { + *(__IO uint8_t *)&hspi->Instance->DR = (*hspi->pTxBuffPtr); + hspi->pTxBuffPtr++; + hspi->TxXferCount--; + } + } + while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) + { + /* Check TXE flag */ + if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->TxXferCount > 0U) && (txallowed == 1U)) + { + if (hspi->TxXferCount > 1U) + { + hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); + hspi->pTxBuffPtr += sizeof(uint16_t); + hspi->TxXferCount -= 2U; + } + else + { + *(__IO uint8_t *)&hspi->Instance->DR = (*hspi->pTxBuffPtr); + hspi->pTxBuffPtr++; + hspi->TxXferCount--; + } + /* Next Data is a reception (Rx). Tx not allowed */ + txallowed = 0U; + +#if (USE_SPI_CRC != 0U) + /* Enable CRC Transmission */ + if ((hspi->TxXferCount == 0U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) + { + /* Set NSS Soft to received correctly the CRC on slave mode with NSS pulse activated */ + if ((READ_BIT(spi_cr1, SPI_CR1_MSTR) == 0U) && (READ_BIT(spi_cr2, SPI_CR2_NSSP) == SPI_CR2_NSSP)) + { + SET_BIT(hspi->Instance->CR1, SPI_CR1_SSM); + } + SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); + } +#endif /* USE_SPI_CRC */ + } + + /* Wait until RXNE flag is reset */ + if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->RxXferCount > 0U)) + { + if (hspi->RxXferCount > 1U) + { + *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; + hspi->pRxBuffPtr += sizeof(uint16_t); + hspi->RxXferCount -= 2U; + if (hspi->RxXferCount <= 1U) + { + /* Set RX Fifo threshold before to switch on 8 bit data size */ + SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + } + } + else + { + (*(uint8_t *)hspi->pRxBuffPtr) = *(__IO uint8_t *)&hspi->Instance->DR; + hspi->pRxBuffPtr++; + hspi->RxXferCount--; + } + /* Next Data is a Transmission (Tx). Tx is allowed */ + txallowed = 1U; + } + if ((((HAL_GetTick() - tickstart) >= Timeout) && ((Timeout != HAL_MAX_DELAY))) || (Timeout == 0U)) + { + errorcode = HAL_TIMEOUT; + goto error; + } + } + } + +#if (USE_SPI_CRC != 0U) + /* Read CRC from DR to close CRC calculation process */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + /* Wait until TXE flag */ + if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) + { + /* Error on the CRC reception */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); + errorcode = HAL_TIMEOUT; + goto error; + } + /* Read CRC */ + if (hspi->Init.DataSize == SPI_DATASIZE_16BIT) + { + /* Read 16bit CRC */ + tmpreg = READ_REG(hspi->Instance->DR); + /* To avoid GCC warning */ + UNUSED(tmpreg); + } + else + { + /* Initialize the 8bit temporary pointer */ + ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; + /* Read 8bit CRC */ + tmpreg8 = *ptmpreg8; + /* To avoid GCC warning */ + UNUSED(tmpreg8); + + if (hspi->Init.CRCLength == SPI_CRC_LENGTH_16BIT) + { + if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) + { + /* Error on the CRC reception */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); + errorcode = HAL_TIMEOUT; + goto error; + } + /* Read 8bit CRC again in case of 16bit CRC in 8bit Data mode */ + tmpreg8 = *ptmpreg8; + /* To avoid GCC warning */ + UNUSED(tmpreg8); + } + } + } + + /* Check if CRC error occurred */ + if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR)) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); + /* Clear CRC Flag */ + __HAL_SPI_CLEAR_CRCERRFLAG(hspi); + + errorcode = HAL_ERROR; + } +#endif /* USE_SPI_CRC */ + + /* Check the end of the transaction */ + if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK) + { + errorcode = HAL_ERROR; + hspi->ErrorCode = HAL_SPI_ERROR_FLAG; + } + +error : + hspi->State = HAL_SPI_STATE_READY; + __HAL_UNLOCK(hspi); + return errorcode; +} + +/** + * @brief Transmit an amount of data in non-blocking mode with Interrupt. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @param pData pointer to data buffer + * @param Size amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef errorcode = HAL_OK; + + /* Check Direction parameter */ + assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); + + /* Process Locked */ + __HAL_LOCK(hspi); + + if ((pData == NULL) || (Size == 0U)) + { + errorcode = HAL_ERROR; + goto error; + } + + if (hspi->State != HAL_SPI_STATE_READY) + { + errorcode = HAL_BUSY; + goto error; + } + + /* Set the transaction information */ + hspi->State = HAL_SPI_STATE_BUSY_TX; + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + hspi->pTxBuffPtr = (uint8_t *)pData; + hspi->TxXferSize = Size; + hspi->TxXferCount = Size; + + /* Init field not used in handle to zero */ + hspi->pRxBuffPtr = (uint8_t *)NULL; + hspi->RxXferSize = 0U; + hspi->RxXferCount = 0U; + hspi->RxISR = NULL; + + /* Set the function for IT treatment */ + if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) + { + hspi->TxISR = SPI_TxISR_16BIT; + } + else + { + hspi->TxISR = SPI_TxISR_8BIT; + } + + /* Configure communication direction : 1Line */ + if (hspi->Init.Direction == SPI_DIRECTION_1LINE) + { + /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ + __HAL_SPI_DISABLE(hspi); + SPI_1LINE_TX(hspi); + } + +#if (USE_SPI_CRC != 0U) + /* Reset CRC Calculation */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + SPI_RESET_CRC(hspi); + } +#endif /* USE_SPI_CRC */ + + /* Enable TXE and ERR interrupt */ + __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_ERR)); + + + /* Check if the SPI is already enabled */ + if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) + { + /* Enable SPI peripheral */ + __HAL_SPI_ENABLE(hspi); + } + +error : + __HAL_UNLOCK(hspi); + return errorcode; +} + +/** + * @brief Receive an amount of data in non-blocking mode with Interrupt. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @param pData pointer to data buffer + * @param Size amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef errorcode = HAL_OK; + + if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER)) + { + hspi->State = HAL_SPI_STATE_BUSY_RX; + /* Call transmit-receive function to send Dummy data on Tx line and generate clock on CLK line */ + return HAL_SPI_TransmitReceive_IT(hspi, pData, pData, Size); + } + + /* Process Locked */ + __HAL_LOCK(hspi); + + if (hspi->State != HAL_SPI_STATE_READY) + { + errorcode = HAL_BUSY; + goto error; + } + + if ((pData == NULL) || (Size == 0U)) + { + errorcode = HAL_ERROR; + goto error; + } + + /* Set the transaction information */ + hspi->State = HAL_SPI_STATE_BUSY_RX; + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + hspi->pRxBuffPtr = (uint8_t *)pData; + hspi->RxXferSize = Size; + hspi->RxXferCount = Size; + + /* Init field not used in handle to zero */ + hspi->pTxBuffPtr = (uint8_t *)NULL; + hspi->TxXferSize = 0U; + hspi->TxXferCount = 0U; + hspi->TxISR = NULL; + + /* Check the data size to adapt Rx threshold and the set the function for IT treatment */ + if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) + { + /* Set RX Fifo threshold according the reception data length: 16 bit */ + CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + hspi->RxISR = SPI_RxISR_16BIT; + } + else + { + /* Set RX Fifo threshold according the reception data length: 8 bit */ + SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + hspi->RxISR = SPI_RxISR_8BIT; + } + + /* Configure communication direction : 1Line */ + if (hspi->Init.Direction == SPI_DIRECTION_1LINE) + { + /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ + __HAL_SPI_DISABLE(hspi); + SPI_1LINE_RX(hspi); + } + +#if (USE_SPI_CRC != 0U) + /* Reset CRC Calculation */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + hspi->CRCSize = 1U; + if ((hspi->Init.DataSize <= SPI_DATASIZE_8BIT) && (hspi->Init.CRCLength == SPI_CRC_LENGTH_16BIT)) + { + hspi->CRCSize = 2U; + } + SPI_RESET_CRC(hspi); + } + else + { + hspi->CRCSize = 0U; + } +#endif /* USE_SPI_CRC */ + + /* Enable TXE and ERR interrupt */ + __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); + + /* Note : The SPI must be enabled after unlocking current process + to avoid the risk of SPI interrupt handle execution before current + process unlock */ + + /* Check if the SPI is already enabled */ + if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) + { + /* Enable SPI peripheral */ + __HAL_SPI_ENABLE(hspi); + } + +error : + /* Process Unlocked */ + __HAL_UNLOCK(hspi); + return errorcode; +} + +/** + * @brief Transmit and Receive an amount of data in non-blocking mode with Interrupt. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @param pTxData pointer to transmission data buffer + * @param pRxData pointer to reception data buffer + * @param Size amount of data to be sent and received + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size) +{ + uint32_t tmp_mode; + HAL_SPI_StateTypeDef tmp_state; + HAL_StatusTypeDef errorcode = HAL_OK; + + /* Check Direction parameter */ + assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); + + /* Process locked */ + __HAL_LOCK(hspi); + + /* Init temporary variables */ + tmp_state = hspi->State; + tmp_mode = hspi->Init.Mode; + + if (!((tmp_state == HAL_SPI_STATE_READY) || \ + ((tmp_mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES) && (tmp_state == HAL_SPI_STATE_BUSY_RX)))) + { + errorcode = HAL_BUSY; + goto error; + } + + if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U)) + { + errorcode = HAL_ERROR; + goto error; + } + + /* Don't overwrite in case of HAL_SPI_STATE_BUSY_RX */ + if (hspi->State != HAL_SPI_STATE_BUSY_RX) + { + hspi->State = HAL_SPI_STATE_BUSY_TX_RX; + } + + /* Set the transaction information */ + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + hspi->pTxBuffPtr = (uint8_t *)pTxData; + hspi->TxXferSize = Size; + hspi->TxXferCount = Size; + hspi->pRxBuffPtr = (uint8_t *)pRxData; + hspi->RxXferSize = Size; + hspi->RxXferCount = Size; + + /* Set the function for IT treatment */ + if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) + { + hspi->RxISR = SPI_2linesRxISR_16BIT; + hspi->TxISR = SPI_2linesTxISR_16BIT; + } + else + { + hspi->RxISR = SPI_2linesRxISR_8BIT; + hspi->TxISR = SPI_2linesTxISR_8BIT; + } + +#if (USE_SPI_CRC != 0U) + /* Reset CRC Calculation */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + hspi->CRCSize = 1U; + if ((hspi->Init.DataSize <= SPI_DATASIZE_8BIT) && (hspi->Init.CRCLength == SPI_CRC_LENGTH_16BIT)) + { + hspi->CRCSize = 2U; + } + SPI_RESET_CRC(hspi); + } + else + { + hspi->CRCSize = 0U; + } +#endif /* USE_SPI_CRC */ + + /* Check if packing mode is enabled and if there is more than 2 data to receive */ + if ((hspi->Init.DataSize > SPI_DATASIZE_8BIT) || (Size >= 2U)) + { + /* Set RX Fifo threshold according the reception data length: 16 bit */ + CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + } + else + { + /* Set RX Fifo threshold according the reception data length: 8 bit */ + SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + } + + /* Enable TXE, RXNE and ERR interrupt */ + __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR)); + + /* Check if the SPI is already enabled */ + if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) + { + /* Enable SPI peripheral */ + __HAL_SPI_ENABLE(hspi); + } + +error : + /* Process Unlocked */ + __HAL_UNLOCK(hspi); + return errorcode; +} + +/** + * @brief Transmit an amount of data in non-blocking mode with DMA. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @param pData pointer to data buffer + * @param Size amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef errorcode = HAL_OK; + + /* Check tx dma handle */ + assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); + + /* Check Direction parameter */ + assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); + + /* Process Locked */ + __HAL_LOCK(hspi); + + if (hspi->State != HAL_SPI_STATE_READY) + { + errorcode = HAL_BUSY; + goto error; + } + + if ((pData == NULL) || (Size == 0U)) + { + errorcode = HAL_ERROR; + goto error; + } + + /* Set the transaction information */ + hspi->State = HAL_SPI_STATE_BUSY_TX; + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + hspi->pTxBuffPtr = (uint8_t *)pData; + hspi->TxXferSize = Size; + hspi->TxXferCount = Size; + + /* Init field not used in handle to zero */ + hspi->pRxBuffPtr = (uint8_t *)NULL; + hspi->TxISR = NULL; + hspi->RxISR = NULL; + hspi->RxXferSize = 0U; + hspi->RxXferCount = 0U; + + /* Configure communication direction : 1Line */ + if (hspi->Init.Direction == SPI_DIRECTION_1LINE) + { + /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ + __HAL_SPI_DISABLE(hspi); + SPI_1LINE_TX(hspi); + } + +#if (USE_SPI_CRC != 0U) + /* Reset CRC Calculation */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + SPI_RESET_CRC(hspi); + } +#endif /* USE_SPI_CRC */ + + /* Set the SPI TxDMA Half transfer complete callback */ + hspi->hdmatx->XferHalfCpltCallback = SPI_DMAHalfTransmitCplt; + + /* Set the SPI TxDMA transfer complete callback */ + hspi->hdmatx->XferCpltCallback = SPI_DMATransmitCplt; + + /* Set the DMA error callback */ + hspi->hdmatx->XferErrorCallback = SPI_DMAError; + + /* Set the DMA AbortCpltCallback */ + hspi->hdmatx->XferAbortCallback = NULL; + + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMATX); + /* Packing mode is enabled only if the DMA setting is HALWORD */ + if ((hspi->Init.DataSize <= SPI_DATASIZE_8BIT) && (hspi->hdmatx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD)) + { + /* Check the even/odd of the data size + crc if enabled */ + if ((hspi->TxXferCount & 0x1U) == 0U) + { + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMATX); + hspi->TxXferCount = (hspi->TxXferCount >> 1U); + } + else + { + SET_BIT(hspi->Instance->CR2, SPI_CR2_LDMATX); + hspi->TxXferCount = (hspi->TxXferCount >> 1U) + 1U; + } + } + + /* Enable the Tx DMA Stream/Channel */ + if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance->DR, + hspi->TxXferCount)) + { + /* Update SPI error code */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); + errorcode = HAL_ERROR; + + hspi->State = HAL_SPI_STATE_READY; + goto error; + } + + /* Check if the SPI is already enabled */ + if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) + { + /* Enable SPI peripheral */ + __HAL_SPI_ENABLE(hspi); + } + + /* Enable the SPI Error Interrupt Bit */ + __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR)); + + /* Enable Tx DMA Request */ + SET_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); + +error : + /* Process Unlocked */ + __HAL_UNLOCK(hspi); + return errorcode; +} + +/** + * @brief Receive an amount of data in non-blocking mode with DMA. + * @note In case of MASTER mode and SPI_DIRECTION_2LINES direction, hdmatx shall be defined. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @param pData pointer to data buffer + * @note When the CRC feature is enabled the pData Length must be Size + 1. + * @param Size amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef errorcode = HAL_OK; + + /* Check rx dma handle */ + assert_param(IS_SPI_DMA_HANDLE(hspi->hdmarx)); + + if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER)) + { + hspi->State = HAL_SPI_STATE_BUSY_RX; + + /* Check tx dma handle */ + assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); + + /* Call transmit-receive function to send Dummy data on Tx line and generate clock on CLK line */ + return HAL_SPI_TransmitReceive_DMA(hspi, pData, pData, Size); + } + + /* Process Locked */ + __HAL_LOCK(hspi); + + if (hspi->State != HAL_SPI_STATE_READY) + { + errorcode = HAL_BUSY; + goto error; + } + + if ((pData == NULL) || (Size == 0U)) + { + errorcode = HAL_ERROR; + goto error; + } + + /* Set the transaction information */ + hspi->State = HAL_SPI_STATE_BUSY_RX; + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + hspi->pRxBuffPtr = (uint8_t *)pData; + hspi->RxXferSize = Size; + hspi->RxXferCount = Size; + + /*Init field not used in handle to zero */ + hspi->RxISR = NULL; + hspi->TxISR = NULL; + hspi->TxXferSize = 0U; + hspi->TxXferCount = 0U; + + /* Configure communication direction : 1Line */ + if (hspi->Init.Direction == SPI_DIRECTION_1LINE) + { + /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ + __HAL_SPI_DISABLE(hspi); + SPI_1LINE_RX(hspi); + } + +#if (USE_SPI_CRC != 0U) + /* Reset CRC Calculation */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + SPI_RESET_CRC(hspi); + } +#endif /* USE_SPI_CRC */ + +#if defined (STM32F302xC) || defined (STM32F303xC) || defined (STM32F373xC) || defined (STM32F358xx) || defined (STM32F378xx) + /* Packing mode management is enabled by the DMA settings */ + if ((hspi->Init.DataSize <= SPI_DATASIZE_8BIT) && (hspi->hdmarx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD)) + { + /* Restriction the DMA data received is not allowed in this mode */ + errorcode = HAL_ERROR; + goto error; + } +#endif /* STM32F302xC || STM32F303xC || STM32F373xC || STM32F358xx || STM32F378xx */ + + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMARX); + if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) + { + /* Set RX Fifo threshold according the reception data length: 16bit */ + CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + } + else + { + /* Set RX Fifo threshold according the reception data length: 8bit */ + SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + + if (hspi->hdmarx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) + { + /* Set RX Fifo threshold according the reception data length: 16bit */ + CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + + if ((hspi->RxXferCount & 0x1U) == 0x0U) + { + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMARX); + hspi->RxXferCount = hspi->RxXferCount >> 1U; + } + else + { + SET_BIT(hspi->Instance->CR2, SPI_CR2_LDMARX); + hspi->RxXferCount = (hspi->RxXferCount >> 1U) + 1U; + } + } + } + + /* Set the SPI RxDMA Half transfer complete callback */ + hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfReceiveCplt; + + /* Set the SPI Rx DMA transfer complete callback */ + hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt; + + /* Set the DMA error callback */ + hspi->hdmarx->XferErrorCallback = SPI_DMAError; + + /* Set the DMA AbortCpltCallback */ + hspi->hdmarx->XferAbortCallback = NULL; + + /* Enable the Rx DMA Stream/Channel */ + if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->DR, (uint32_t)hspi->pRxBuffPtr, + hspi->RxXferCount)) + { + /* Update SPI error code */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); + errorcode = HAL_ERROR; + + hspi->State = HAL_SPI_STATE_READY; + goto error; + } + + /* Check if the SPI is already enabled */ + if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) + { + /* Enable SPI peripheral */ + __HAL_SPI_ENABLE(hspi); + } + + /* Enable the SPI Error Interrupt Bit */ + __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR)); + + /* Enable Rx DMA Request */ + SET_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); + +error: + /* Process Unlocked */ + __HAL_UNLOCK(hspi); + return errorcode; +} + +/** + * @brief Transmit and Receive an amount of data in non-blocking mode with DMA. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @param pTxData pointer to transmission data buffer + * @param pRxData pointer to reception data buffer + * @note When the CRC feature is enabled the pRxData Length must be Size + 1 + * @param Size amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, + uint16_t Size) +{ + uint32_t tmp_mode; + HAL_SPI_StateTypeDef tmp_state; + HAL_StatusTypeDef errorcode = HAL_OK; + + /* Check rx & tx dma handles */ + assert_param(IS_SPI_DMA_HANDLE(hspi->hdmarx)); + assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); + + /* Check Direction parameter */ + assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); + + /* Process locked */ + __HAL_LOCK(hspi); + + /* Init temporary variables */ + tmp_state = hspi->State; + tmp_mode = hspi->Init.Mode; + + if (!((tmp_state == HAL_SPI_STATE_READY) || + ((tmp_mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES) && (tmp_state == HAL_SPI_STATE_BUSY_RX)))) + { + errorcode = HAL_BUSY; + goto error; + } + + if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U)) + { + errorcode = HAL_ERROR; + goto error; + } + + /* Don't overwrite in case of HAL_SPI_STATE_BUSY_RX */ + if (hspi->State != HAL_SPI_STATE_BUSY_RX) + { + hspi->State = HAL_SPI_STATE_BUSY_TX_RX; + } + + /* Set the transaction information */ + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + hspi->pTxBuffPtr = (uint8_t *)pTxData; + hspi->TxXferSize = Size; + hspi->TxXferCount = Size; + hspi->pRxBuffPtr = (uint8_t *)pRxData; + hspi->RxXferSize = Size; + hspi->RxXferCount = Size; + + /* Init field not used in handle to zero */ + hspi->RxISR = NULL; + hspi->TxISR = NULL; + +#if (USE_SPI_CRC != 0U) + /* Reset CRC Calculation */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + SPI_RESET_CRC(hspi); + } +#endif /* USE_SPI_CRC */ + +#if defined (STM32F302xC) || defined (STM32F303xC) || defined (STM32F373xC) || defined (STM32F358xx) || defined (STM32F378xx) + /* Packing mode management is enabled by the DMA settings */ + if ((hspi->Init.DataSize <= SPI_DATASIZE_8BIT) && (hspi->hdmarx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD)) + { + /* Restriction the DMA data received is not allowed in this mode */ + errorcode = HAL_ERROR; + goto error; + } +#endif /* STM32F302xC || STM32F303xC || STM32F373xC || STM32F358xx || STM32F378xx */ + + /* Reset the threshold bit */ + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMATX | SPI_CR2_LDMARX); + + /* The packing mode management is enabled by the DMA settings according the spi data size */ + if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) + { + /* Set fiforxthreshold according the reception data length: 16bit */ + CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + } + else + { + /* Set RX Fifo threshold according the reception data length: 8bit */ + SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + + if (hspi->hdmatx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) + { + if ((hspi->TxXferSize & 0x1U) == 0x0U) + { + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMATX); + hspi->TxXferCount = hspi->TxXferCount >> 1U; + } + else + { + SET_BIT(hspi->Instance->CR2, SPI_CR2_LDMATX); + hspi->TxXferCount = (hspi->TxXferCount >> 1U) + 1U; + } + } + + if (hspi->hdmarx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) + { + /* Set RX Fifo threshold according the reception data length: 16bit */ + CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + + if ((hspi->RxXferCount & 0x1U) == 0x0U) + { + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMARX); + hspi->RxXferCount = hspi->RxXferCount >> 1U; + } + else + { + SET_BIT(hspi->Instance->CR2, SPI_CR2_LDMARX); + hspi->RxXferCount = (hspi->RxXferCount >> 1U) + 1U; + } + } + } + + /* Check if we are in Rx only or in Rx/Tx Mode and configure the DMA transfer complete callback */ + if (hspi->State == HAL_SPI_STATE_BUSY_RX) + { + /* Set the SPI Rx DMA Half transfer complete callback */ + hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfReceiveCplt; + hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt; + } + else + { + /* Set the SPI Tx/Rx DMA Half transfer complete callback */ + hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfTransmitReceiveCplt; + hspi->hdmarx->XferCpltCallback = SPI_DMATransmitReceiveCplt; + } + + /* Set the DMA error callback */ + hspi->hdmarx->XferErrorCallback = SPI_DMAError; + + /* Set the DMA AbortCpltCallback */ + hspi->hdmarx->XferAbortCallback = NULL; + + /* Enable the Rx DMA Stream/Channel */ + if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->DR, (uint32_t)hspi->pRxBuffPtr, + hspi->RxXferCount)) + { + /* Update SPI error code */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); + errorcode = HAL_ERROR; + + hspi->State = HAL_SPI_STATE_READY; + goto error; + } + + /* Enable Rx DMA Request */ + SET_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); + + /* Set the SPI Tx DMA transfer complete callback as NULL because the communication closing + is performed in DMA reception complete callback */ + hspi->hdmatx->XferHalfCpltCallback = NULL; + hspi->hdmatx->XferCpltCallback = NULL; + hspi->hdmatx->XferErrorCallback = NULL; + hspi->hdmatx->XferAbortCallback = NULL; + + /* Enable the Tx DMA Stream/Channel */ + if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance->DR, + hspi->TxXferCount)) + { + /* Update SPI error code */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); + errorcode = HAL_ERROR; + + hspi->State = HAL_SPI_STATE_READY; + goto error; + } + + /* Check if the SPI is already enabled */ + if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) + { + /* Enable SPI peripheral */ + __HAL_SPI_ENABLE(hspi); + } + /* Enable the SPI Error Interrupt Bit */ + __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR)); + + /* Enable Tx DMA Request */ + SET_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); + +error : + /* Process Unlocked */ + __HAL_UNLOCK(hspi); + return errorcode; +} + +/** + * @brief Abort ongoing transfer (blocking mode). + * @param hspi SPI handle. + * @note This procedure could be used for aborting any ongoing transfer (Tx and Rx), + * started in Interrupt or DMA mode. + * This procedure performs following operations : + * - Disable SPI Interrupts (depending of transfer direction) + * - Disable the DMA transfer in the peripheral register (if enabled) + * - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode) + * - Set handle State to READY + * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi) +{ + HAL_StatusTypeDef errorcode; + __IO uint32_t count; + __IO uint32_t resetcount; + + /* Initialized local variable */ + errorcode = HAL_OK; + resetcount = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U); + count = resetcount; + + /* Clear ERRIE interrupt to avoid error interrupts generation during Abort procedure */ + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_ERRIE); + + /* Disable TXEIE, RXNEIE and ERRIE(mode fault event, overrun error, TI frame error) interrupts */ + if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXEIE)) + { + hspi->TxISR = SPI_AbortTx_ISR; + /* Wait HAL_SPI_STATE_ABORT state */ + do + { + if (count == 0U) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); + break; + } + count--; + } while (hspi->State != HAL_SPI_STATE_ABORT); + /* Reset Timeout Counter */ + count = resetcount; + } + + if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXNEIE)) + { + hspi->RxISR = SPI_AbortRx_ISR; + /* Wait HAL_SPI_STATE_ABORT state */ + do + { + if (count == 0U) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); + break; + } + count--; + } while (hspi->State != HAL_SPI_STATE_ABORT); + /* Reset Timeout Counter */ + count = resetcount; + } + + /* Disable the SPI DMA Tx request if enabled */ + if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXDMAEN)) + { + /* Abort the SPI DMA Tx Stream/Channel : use blocking DMA Abort API (no callback) */ + if (hspi->hdmatx != NULL) + { + /* Set the SPI DMA Abort callback : + will lead to call HAL_SPI_AbortCpltCallback() at end of DMA abort procedure */ + hspi->hdmatx->XferAbortCallback = NULL; + + /* Abort DMA Tx Handle linked to SPI Peripheral */ + if (HAL_DMA_Abort(hspi->hdmatx) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + + /* Disable Tx DMA Request */ + CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXDMAEN)); + + if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + + /* Disable SPI Peripheral */ + __HAL_SPI_DISABLE(hspi); + + /* Empty the FRLVL fifo */ + if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + } + } + + /* Disable the SPI DMA Rx request if enabled */ + if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXDMAEN)) + { + /* Abort the SPI DMA Rx Stream/Channel : use blocking DMA Abort API (no callback) */ + if (hspi->hdmarx != NULL) + { + /* Set the SPI DMA Abort callback : + will lead to call HAL_SPI_AbortCpltCallback() at end of DMA abort procedure */ + hspi->hdmarx->XferAbortCallback = NULL; + + /* Abort DMA Rx Handle linked to SPI Peripheral */ + if (HAL_DMA_Abort(hspi->hdmarx) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + + /* Disable peripheral */ + __HAL_SPI_DISABLE(hspi); + + /* Control the BSY flag */ + if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + + /* Empty the FRLVL fifo */ + if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + + /* Disable Rx DMA Request */ + CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_RXDMAEN)); + } + } + /* Reset Tx and Rx transfer counters */ + hspi->RxXferCount = 0U; + hspi->TxXferCount = 0U; + + /* Check error during Abort procedure */ + if (hspi->ErrorCode == HAL_SPI_ERROR_ABORT) + { + /* return HAL_Error in case of error during Abort procedure */ + errorcode = HAL_ERROR; + } + else + { + /* Reset errorCode */ + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + } + + /* Clear the Error flags in the SR register */ + __HAL_SPI_CLEAR_OVRFLAG(hspi); + __HAL_SPI_CLEAR_FREFLAG(hspi); + + /* Restore hspi->state to ready */ + hspi->State = HAL_SPI_STATE_READY; + + return errorcode; +} + +/** + * @brief Abort ongoing transfer (Interrupt mode). + * @param hspi SPI handle. + * @note This procedure could be used for aborting any ongoing transfer (Tx and Rx), + * started in Interrupt or DMA mode. + * This procedure performs following operations : + * - Disable SPI Interrupts (depending of transfer direction) + * - Disable the DMA transfer in the peripheral register (if enabled) + * - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode) + * - Set handle State to READY + * - At abort completion, call user abort complete callback + * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be + * considered as completed only when user abort complete callback is executed (not when exiting function). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi) +{ + HAL_StatusTypeDef errorcode; + uint32_t abortcplt ; + __IO uint32_t count; + __IO uint32_t resetcount; + + /* Initialized local variable */ + errorcode = HAL_OK; + abortcplt = 1U; + resetcount = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U); + count = resetcount; + + /* Clear ERRIE interrupt to avoid error interrupts generation during Abort procedure */ + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_ERRIE); + + /* Change Rx and Tx Irq Handler to Disable TXEIE, RXNEIE and ERRIE interrupts */ + if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXEIE)) + { + hspi->TxISR = SPI_AbortTx_ISR; + /* Wait HAL_SPI_STATE_ABORT state */ + do + { + if (count == 0U) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); + break; + } + count--; + } while (hspi->State != HAL_SPI_STATE_ABORT); + /* Reset Timeout Counter */ + count = resetcount; + } + + if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXNEIE)) + { + hspi->RxISR = SPI_AbortRx_ISR; + /* Wait HAL_SPI_STATE_ABORT state */ + do + { + if (count == 0U) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); + break; + } + count--; + } while (hspi->State != HAL_SPI_STATE_ABORT); + /* Reset Timeout Counter */ + count = resetcount; + } + + /* If DMA Tx and/or DMA Rx Handles are associated to SPI Handle, DMA Abort complete callbacks should be initialised + before any call to DMA Abort functions */ + /* DMA Tx Handle is valid */ + if (hspi->hdmatx != NULL) + { + /* Set DMA Abort Complete callback if UART DMA Tx request if enabled. + Otherwise, set it to NULL */ + if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXDMAEN)) + { + hspi->hdmatx->XferAbortCallback = SPI_DMATxAbortCallback; + } + else + { + hspi->hdmatx->XferAbortCallback = NULL; + } + } + /* DMA Rx Handle is valid */ + if (hspi->hdmarx != NULL) + { + /* Set DMA Abort Complete callback if UART DMA Rx request if enabled. + Otherwise, set it to NULL */ + if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXDMAEN)) + { + hspi->hdmarx->XferAbortCallback = SPI_DMARxAbortCallback; + } + else + { + hspi->hdmarx->XferAbortCallback = NULL; + } + } + + /* Disable the SPI DMA Tx request if enabled */ + if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXDMAEN)) + { + /* Abort the SPI DMA Tx Stream/Channel */ + if (hspi->hdmatx != NULL) + { + /* Abort DMA Tx Handle linked to SPI Peripheral */ + if (HAL_DMA_Abort_IT(hspi->hdmatx) != HAL_OK) + { + hspi->hdmatx->XferAbortCallback = NULL; + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + else + { + abortcplt = 0U; + } + } + } + /* Disable the SPI DMA Rx request if enabled */ + if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXDMAEN)) + { + /* Abort the SPI DMA Rx Stream/Channel */ + if (hspi->hdmarx != NULL) + { + /* Abort DMA Rx Handle linked to SPI Peripheral */ + if (HAL_DMA_Abort_IT(hspi->hdmarx) != HAL_OK) + { + hspi->hdmarx->XferAbortCallback = NULL; + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + else + { + abortcplt = 0U; + } + } + } + + if (abortcplt == 1U) + { + /* Reset Tx and Rx transfer counters */ + hspi->RxXferCount = 0U; + hspi->TxXferCount = 0U; + + /* Check error during Abort procedure */ + if (hspi->ErrorCode == HAL_SPI_ERROR_ABORT) + { + /* return HAL_Error in case of error during Abort procedure */ + errorcode = HAL_ERROR; + } + else + { + /* Reset errorCode */ + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + } + + /* Clear the Error flags in the SR register */ + __HAL_SPI_CLEAR_OVRFLAG(hspi); + __HAL_SPI_CLEAR_FREFLAG(hspi); + + /* Restore hspi->State to Ready */ + hspi->State = HAL_SPI_STATE_READY; + + /* As no DMA to be aborted, call directly user Abort complete callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->AbortCpltCallback(hspi); +#else + HAL_SPI_AbortCpltCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + } + + return errorcode; +} + +/** + * @brief Pause the DMA Transfer. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for the specified SPI module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi) +{ + /* Process Locked */ + __HAL_LOCK(hspi); + + /* Disable the SPI DMA Tx & Rx requests */ + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); + + /* Process Unlocked */ + __HAL_UNLOCK(hspi); + + return HAL_OK; +} + +/** + * @brief Resume the DMA Transfer. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for the specified SPI module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi) +{ + /* Process Locked */ + __HAL_LOCK(hspi); + + /* Enable the SPI DMA Tx & Rx requests */ + SET_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); + + /* Process Unlocked */ + __HAL_UNLOCK(hspi); + + return HAL_OK; +} + +/** + * @brief Stop the DMA Transfer. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for the specified SPI module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi) +{ + HAL_StatusTypeDef errorcode = HAL_OK; + /* The Lock is not implemented on this API to allow the user application + to call the HAL SPI API under callbacks HAL_SPI_TxCpltCallback() or HAL_SPI_RxCpltCallback() or HAL_SPI_TxRxCpltCallback(): + when calling HAL_DMA_Abort() API the DMA TX/RX Transfer complete interrupt is generated + and the correspond call back is executed HAL_SPI_TxCpltCallback() or HAL_SPI_RxCpltCallback() or HAL_SPI_TxRxCpltCallback() + */ + + /* Abort the SPI DMA tx Stream/Channel */ + if (hspi->hdmatx != NULL) + { + if (HAL_OK != HAL_DMA_Abort(hspi->hdmatx)) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); + errorcode = HAL_ERROR; + } + } + /* Abort the SPI DMA rx Stream/Channel */ + if (hspi->hdmarx != NULL) + { + if (HAL_OK != HAL_DMA_Abort(hspi->hdmarx)) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); + errorcode = HAL_ERROR; + } + } + + /* Disable the SPI DMA Tx & Rx requests */ + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); + hspi->State = HAL_SPI_STATE_READY; + return errorcode; +} + +/** + * @brief Handle SPI interrupt request. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for the specified SPI module. + * @retval None + */ +void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi) +{ + uint32_t itsource = hspi->Instance->CR2; + uint32_t itflag = hspi->Instance->SR; + + /* SPI in mode Receiver ----------------------------------------------------*/ + if ((SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) == RESET) && + (SPI_CHECK_FLAG(itflag, SPI_FLAG_RXNE) != RESET) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_RXNE) != RESET)) + { + hspi->RxISR(hspi); + return; + } + + /* SPI in mode Transmitter -------------------------------------------------*/ + if ((SPI_CHECK_FLAG(itflag, SPI_FLAG_TXE) != RESET) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_TXE) != RESET)) + { + hspi->TxISR(hspi); + return; + } + + /* SPI in Error Treatment --------------------------------------------------*/ + if (((SPI_CHECK_FLAG(itflag, SPI_FLAG_MODF) != RESET) || (SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) != RESET) + || (SPI_CHECK_FLAG(itflag, SPI_FLAG_FRE) != RESET)) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_ERR) != RESET)) + { + /* SPI Overrun error interrupt occurred ----------------------------------*/ + if (SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) != RESET) + { + if (hspi->State != HAL_SPI_STATE_BUSY_TX) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_OVR); + __HAL_SPI_CLEAR_OVRFLAG(hspi); + } + else + { + __HAL_SPI_CLEAR_OVRFLAG(hspi); + return; + } + } + + /* SPI Mode Fault error interrupt occurred -------------------------------*/ + if (SPI_CHECK_FLAG(itflag, SPI_FLAG_MODF) != RESET) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_MODF); + __HAL_SPI_CLEAR_MODFFLAG(hspi); + } + + /* SPI Frame error interrupt occurred ------------------------------------*/ + if (SPI_CHECK_FLAG(itflag, SPI_FLAG_FRE) != RESET) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FRE); + __HAL_SPI_CLEAR_FREFLAG(hspi); + } + + if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) + { + /* Disable all interrupts */ + __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE | SPI_IT_TXE | SPI_IT_ERR); + + hspi->State = HAL_SPI_STATE_READY; + /* Disable the SPI DMA requests if enabled */ + if ((HAL_IS_BIT_SET(itsource, SPI_CR2_TXDMAEN)) || (HAL_IS_BIT_SET(itsource, SPI_CR2_RXDMAEN))) + { + CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN)); + + /* Abort the SPI DMA Rx channel */ + if (hspi->hdmarx != NULL) + { + /* Set the SPI DMA Abort callback : + will lead to call HAL_SPI_ErrorCallback() at end of DMA abort procedure */ + hspi->hdmarx->XferAbortCallback = SPI_DMAAbortOnError; + if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmarx)) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); + } + } + /* Abort the SPI DMA Tx channel */ + if (hspi->hdmatx != NULL) + { + /* Set the SPI DMA Abort callback : + will lead to call HAL_SPI_ErrorCallback() at end of DMA abort procedure */ + hspi->hdmatx->XferAbortCallback = SPI_DMAAbortOnError; + if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmatx)) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); + } + } + } + else + { + /* Call user error callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->ErrorCallback(hspi); +#else + HAL_SPI_ErrorCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + } + } + return; + } +} + +/** + * @brief Tx Transfer completed callback. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +__weak void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SPI_TxCpltCallback should be implemented in the user file + */ +} + +/** + * @brief Rx Transfer completed callback. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +__weak void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SPI_RxCpltCallback should be implemented in the user file + */ +} + +/** + * @brief Tx and Rx Transfer completed callback. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +__weak void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SPI_TxRxCpltCallback should be implemented in the user file + */ +} + +/** + * @brief Tx Half Transfer completed callback. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +__weak void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SPI_TxHalfCpltCallback should be implemented in the user file + */ +} + +/** + * @brief Rx Half Transfer completed callback. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +__weak void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SPI_RxHalfCpltCallback() should be implemented in the user file + */ +} + +/** + * @brief Tx and Rx Half Transfer callback. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +__weak void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SPI_TxRxHalfCpltCallback() should be implemented in the user file + */ +} + +/** + * @brief SPI error callback. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +__weak void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SPI_ErrorCallback should be implemented in the user file + */ + /* NOTE : The ErrorCode parameter in the hspi handle is updated by the SPI processes + and user can use HAL_SPI_GetError() API to check the latest error occurred + */ +} + +/** + * @brief SPI Abort Complete callback. + * @param hspi SPI handle. + * @retval None + */ +__weak void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SPI_AbortCpltCallback can be implemented in the user file. + */ +} + +/** + * @} + */ + +/** @defgroup SPI_Exported_Functions_Group3 Peripheral State and Errors functions + * @brief SPI control functions + * +@verbatim + =============================================================================== + ##### Peripheral State and Errors functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the SPI. + (+) HAL_SPI_GetState() API can be helpful to check in run-time the state of the SPI peripheral + (+) HAL_SPI_GetError() check in run-time Errors occurring during communication +@endverbatim + * @{ + */ + +/** + * @brief Return the SPI handle state. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval SPI state + */ +HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi) +{ + /* Return SPI handle state */ + return hspi->State; +} + +/** + * @brief Return the SPI error code. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval SPI error code in bitmap format + */ +uint32_t HAL_SPI_GetError(SPI_HandleTypeDef *hspi) +{ + /* Return SPI ErrorCode */ + return hspi->ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup SPI_Private_Functions + * @brief Private functions + * @{ + */ + +/** + * @brief DMA SPI transmit process complete callback. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void SPI_DMATransmitCplt(DMA_HandleTypeDef *hdma) +{ + SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ + uint32_t tickstart; + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + /* DMA Normal Mode */ + if ((hdma->Instance->CCR & DMA_CCR_CIRC) != DMA_CCR_CIRC) + { + /* Disable ERR interrupt */ + __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); + + /* Disable Tx DMA Request */ + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); + + /* Check the end of the transaction */ + if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); + } + + /* Clear overrun flag in 2 Lines communication mode because received data is not read */ + if (hspi->Init.Direction == SPI_DIRECTION_2LINES) + { + __HAL_SPI_CLEAR_OVRFLAG(hspi); + } + + hspi->TxXferCount = 0U; + hspi->State = HAL_SPI_STATE_READY; + + if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) + { + /* Call user error callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->ErrorCallback(hspi); +#else + HAL_SPI_ErrorCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + return; + } + } + /* Call user Tx complete callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->TxCpltCallback(hspi); +#else + HAL_SPI_TxCpltCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA SPI receive process complete callback. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void SPI_DMAReceiveCplt(DMA_HandleTypeDef *hdma) +{ + SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ + uint32_t tickstart; +#if (USE_SPI_CRC != 0U) + __IO uint32_t tmpreg = 0U; + __IO uint8_t * ptmpreg8; + __IO uint8_t tmpreg8 = 0; +#endif /* USE_SPI_CRC */ + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + /* DMA Normal Mode */ + if ((hdma->Instance->CCR & DMA_CCR_CIRC) != DMA_CCR_CIRC) + { + /* Disable ERR interrupt */ + __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); + +#if (USE_SPI_CRC != 0U) + /* CRC handling */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + /* Wait until RXNE flag */ + if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) + { + /* Error on the CRC reception */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); + } + /* Read CRC */ + if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) + { + /* Read 16bit CRC */ + tmpreg = READ_REG(hspi->Instance->DR); + /* To avoid GCC warning */ + UNUSED(tmpreg); + } + else + { + /* Initialize the 8bit temporary pointer */ + ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; + /* Read 8bit CRC */ + tmpreg8 = *ptmpreg8; + /* To avoid GCC warning */ + UNUSED(tmpreg8); + + if (hspi->Init.CRCLength == SPI_CRC_LENGTH_16BIT) + { + if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) + { + /* Error on the CRC reception */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); + } + /* Read 8bit CRC again in case of 16bit CRC in 8bit Data mode */ + tmpreg8 = *ptmpreg8; + /* To avoid GCC warning */ + UNUSED(tmpreg8); + } + } + } +#endif /* USE_SPI_CRC */ + + /* Check if we are in Master RX 2 line mode */ + if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER)) + { + /* Disable Rx/Tx DMA Request (done by default to handle the case master rx direction 2 lines) */ + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); + } + else + { + /* Normal case */ + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); + } + + /* Check the end of the transaction */ + if (SPI_EndRxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_FLAG; + } + + hspi->RxXferCount = 0U; + hspi->State = HAL_SPI_STATE_READY; + +#if (USE_SPI_CRC != 0U) + /* Check if CRC error occurred */ + if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR)) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); + __HAL_SPI_CLEAR_CRCERRFLAG(hspi); + } +#endif /* USE_SPI_CRC */ + + if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) + { + /* Call user error callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->ErrorCallback(hspi); +#else + HAL_SPI_ErrorCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + return; + } + } + /* Call user Rx complete callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->RxCpltCallback(hspi); +#else + HAL_SPI_RxCpltCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA SPI transmit receive process complete callback. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void SPI_DMATransmitReceiveCplt(DMA_HandleTypeDef *hdma) +{ + SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ + uint32_t tickstart; +#if (USE_SPI_CRC != 0U) + __IO uint32_t tmpreg = 0U; + __IO uint8_t * ptmpreg8; + __IO uint8_t tmpreg8 = 0; +#endif /* USE_SPI_CRC */ + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + /* DMA Normal Mode */ + if ((hdma->Instance->CCR & DMA_CCR_CIRC) != DMA_CCR_CIRC) + { + /* Disable ERR interrupt */ + __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); + +#if (USE_SPI_CRC != 0U) + /* CRC handling */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + if ((hspi->Init.DataSize == SPI_DATASIZE_8BIT) && (hspi->Init.CRCLength == SPI_CRC_LENGTH_8BIT)) + { + if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_QUARTER_FULL, SPI_DEFAULT_TIMEOUT, + tickstart) != HAL_OK) + { + /* Error on the CRC reception */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); + } + /* Initialize the 8bit temporary pointer */ + ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; + /* Read 8bit CRC */ + tmpreg8 = *ptmpreg8; + /* To avoid GCC warning */ + UNUSED(tmpreg8); + } + else + { + if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_HALF_FULL, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) + { + /* Error on the CRC reception */ + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); + } + /* Read CRC to Flush DR and RXNE flag */ + tmpreg = READ_REG(hspi->Instance->DR); + /* To avoid GCC warning */ + UNUSED(tmpreg); + } + } +#endif /* USE_SPI_CRC */ + + /* Check the end of the transaction */ + if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); + } + + /* Disable Rx/Tx DMA Request */ + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); + + hspi->TxXferCount = 0U; + hspi->RxXferCount = 0U; + hspi->State = HAL_SPI_STATE_READY; + +#if (USE_SPI_CRC != 0U) + /* Check if CRC error occurred */ + if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR)) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); + __HAL_SPI_CLEAR_CRCERRFLAG(hspi); + } +#endif /* USE_SPI_CRC */ + + if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) + { + /* Call user error callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->ErrorCallback(hspi); +#else + HAL_SPI_ErrorCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + return; + } + } + /* Call user TxRx complete callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->TxRxCpltCallback(hspi); +#else + HAL_SPI_TxRxCpltCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA SPI half transmit process complete callback. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void SPI_DMAHalfTransmitCplt(DMA_HandleTypeDef *hdma) +{ + SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ + + /* Call user Tx half complete callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->TxHalfCpltCallback(hspi); +#else + HAL_SPI_TxHalfCpltCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA SPI half receive process complete callback + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void SPI_DMAHalfReceiveCplt(DMA_HandleTypeDef *hdma) +{ + SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ + + /* Call user Rx half complete callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->RxHalfCpltCallback(hspi); +#else + HAL_SPI_RxHalfCpltCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA SPI half transmit receive process complete callback. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void SPI_DMAHalfTransmitReceiveCplt(DMA_HandleTypeDef *hdma) +{ + SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ + + /* Call user TxRx half complete callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->TxRxHalfCpltCallback(hspi); +#else + HAL_SPI_TxRxHalfCpltCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA SPI communication error callback. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void SPI_DMAError(DMA_HandleTypeDef *hdma) +{ + SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ + + /* Stop the disable DMA transfer on SPI side */ + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); + + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); + hspi->State = HAL_SPI_STATE_READY; + /* Call user error callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->ErrorCallback(hspi); +#else + HAL_SPI_ErrorCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA SPI communication abort callback, when initiated by HAL services on Error + * (To be called at end of DMA Abort procedure following error occurrence). + * @param hdma DMA handle. + * @retval None + */ +static void SPI_DMAAbortOnError(DMA_HandleTypeDef *hdma) +{ + SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ + hspi->RxXferCount = 0U; + hspi->TxXferCount = 0U; + + /* Call user error callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->ErrorCallback(hspi); +#else + HAL_SPI_ErrorCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA SPI Tx communication abort callback, when initiated by user + * (To be called at end of DMA Tx Abort procedure following user abort request). + * @note When this callback is executed, User Abort complete call back is called only if no + * Abort still ongoing for Rx DMA Handle. + * @param hdma DMA handle. + * @retval None + */ +static void SPI_DMATxAbortCallback(DMA_HandleTypeDef *hdma) +{ + SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ + + hspi->hdmatx->XferAbortCallback = NULL; + + /* Disable Tx DMA Request */ + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); + + if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + + /* Disable SPI Peripheral */ + __HAL_SPI_DISABLE(hspi); + + /* Empty the FRLVL fifo */ + if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + + /* Check if an Abort process is still ongoing */ + if (hspi->hdmarx != NULL) + { + if (hspi->hdmarx->XferAbortCallback != NULL) + { + return; + } + } + + /* No Abort process still ongoing : All DMA Stream/Channel are aborted, call user Abort Complete callback */ + hspi->RxXferCount = 0U; + hspi->TxXferCount = 0U; + + /* Check no error during Abort procedure */ + if (hspi->ErrorCode != HAL_SPI_ERROR_ABORT) + { + /* Reset errorCode */ + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + } + + /* Clear the Error flags in the SR register */ + __HAL_SPI_CLEAR_OVRFLAG(hspi); + __HAL_SPI_CLEAR_FREFLAG(hspi); + + /* Restore hspi->State to Ready */ + hspi->State = HAL_SPI_STATE_READY; + + /* Call user Abort complete callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->AbortCpltCallback(hspi); +#else + HAL_SPI_AbortCpltCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA SPI Rx communication abort callback, when initiated by user + * (To be called at end of DMA Rx Abort procedure following user abort request). + * @note When this callback is executed, User Abort complete call back is called only if no + * Abort still ongoing for Tx DMA Handle. + * @param hdma DMA handle. + * @retval None + */ +static void SPI_DMARxAbortCallback(DMA_HandleTypeDef *hdma) +{ + SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ + + /* Disable SPI Peripheral */ + __HAL_SPI_DISABLE(hspi); + + hspi->hdmarx->XferAbortCallback = NULL; + + /* Disable Rx DMA Request */ + CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); + + /* Control the BSY flag */ + if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + + /* Empty the FRLVL fifo */ + if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + + /* Check if an Abort process is still ongoing */ + if (hspi->hdmatx != NULL) + { + if (hspi->hdmatx->XferAbortCallback != NULL) + { + return; + } + } + + /* No Abort process still ongoing : All DMA Stream/Channel are aborted, call user Abort Complete callback */ + hspi->RxXferCount = 0U; + hspi->TxXferCount = 0U; + + /* Check no error during Abort procedure */ + if (hspi->ErrorCode != HAL_SPI_ERROR_ABORT) + { + /* Reset errorCode */ + hspi->ErrorCode = HAL_SPI_ERROR_NONE; + } + + /* Clear the Error flags in the SR register */ + __HAL_SPI_CLEAR_OVRFLAG(hspi); + __HAL_SPI_CLEAR_FREFLAG(hspi); + + /* Restore hspi->State to Ready */ + hspi->State = HAL_SPI_STATE_READY; + + /* Call user Abort complete callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->AbortCpltCallback(hspi); +#else + HAL_SPI_AbortCpltCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ +} + +/** + * @brief Rx 8-bit handler for Transmit and Receive in Interrupt mode. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_2linesRxISR_8BIT(struct __SPI_HandleTypeDef *hspi) +{ + /* Receive data in packing mode */ + if (hspi->RxXferCount > 1U) + { + *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)(hspi->Instance->DR); + hspi->pRxBuffPtr += sizeof(uint16_t); + hspi->RxXferCount -= 2U; + if (hspi->RxXferCount == 1U) + { + /* Set RX Fifo threshold according the reception data length: 8bit */ + SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + } + } + /* Receive data in 8 Bit mode */ + else + { + *hspi->pRxBuffPtr = *((__IO uint8_t *)&hspi->Instance->DR); + hspi->pRxBuffPtr++; + hspi->RxXferCount--; + } + + /* Check end of the reception */ + if (hspi->RxXferCount == 0U) + { +#if (USE_SPI_CRC != 0U) + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); + hspi->RxISR = SPI_2linesRxISR_8BITCRC; + return; + } +#endif /* USE_SPI_CRC */ + + /* Disable RXNE and ERR interrupt */ + __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); + + if (hspi->TxXferCount == 0U) + { + SPI_CloseRxTx_ISR(hspi); + } + } +} + +#if (USE_SPI_CRC != 0U) +/** + * @brief Rx 8-bit handler for Transmit and Receive in Interrupt mode. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_2linesRxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi) +{ + __IO uint8_t * ptmpreg8; + __IO uint8_t tmpreg8 = 0; + + /* Initialize the 8bit temporary pointer */ + ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; + /* Read 8bit CRC to flush Data Register */ + tmpreg8 = *ptmpreg8; + /* To avoid GCC warning */ + UNUSED(tmpreg8); + + hspi->CRCSize--; + + /* Check end of the reception */ + if (hspi->CRCSize == 0U) + { + /* Disable RXNE and ERR interrupt */ + __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); + + if (hspi->TxXferCount == 0U) + { + SPI_CloseRxTx_ISR(hspi); + } + } +} +#endif /* USE_SPI_CRC */ + +/** + * @brief Tx 8-bit handler for Transmit and Receive in Interrupt mode. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_2linesTxISR_8BIT(struct __SPI_HandleTypeDef *hspi) +{ + /* Transmit data in packing Bit mode */ + if (hspi->TxXferCount >= 2U) + { + hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); + hspi->pTxBuffPtr += sizeof(uint16_t); + hspi->TxXferCount -= 2U; + } + /* Transmit data in 8 Bit mode */ + else + { + *(__IO uint8_t *)&hspi->Instance->DR = (*hspi->pTxBuffPtr); + hspi->pTxBuffPtr++; + hspi->TxXferCount--; + } + + /* Check the end of the transmission */ + if (hspi->TxXferCount == 0U) + { +#if (USE_SPI_CRC != 0U) + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + /* Set CRC Next Bit to send CRC */ + SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); + /* Disable TXE interrupt */ + __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); + return; + } +#endif /* USE_SPI_CRC */ + + /* Disable TXE interrupt */ + __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); + + if (hspi->RxXferCount == 0U) + { + SPI_CloseRxTx_ISR(hspi); + } + } +} + +/** + * @brief Rx 16-bit handler for Transmit and Receive in Interrupt mode. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_2linesRxISR_16BIT(struct __SPI_HandleTypeDef *hspi) +{ + /* Receive data in 16 Bit mode */ + *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)(hspi->Instance->DR); + hspi->pRxBuffPtr += sizeof(uint16_t); + hspi->RxXferCount--; + + if (hspi->RxXferCount == 0U) + { +#if (USE_SPI_CRC != 0U) + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + hspi->RxISR = SPI_2linesRxISR_16BITCRC; + return; + } +#endif /* USE_SPI_CRC */ + + /* Disable RXNE interrupt */ + __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE); + + if (hspi->TxXferCount == 0U) + { + SPI_CloseRxTx_ISR(hspi); + } + } +} + +#if (USE_SPI_CRC != 0U) +/** + * @brief Manage the CRC 16-bit receive for Transmit and Receive in Interrupt mode. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_2linesRxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi) +{ + __IO uint32_t tmpreg = 0U; + + /* Read 16bit CRC to flush Data Register */ + tmpreg = READ_REG(hspi->Instance->DR); + /* To avoid GCC warning */ + UNUSED(tmpreg); + + /* Disable RXNE interrupt */ + __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE); + + SPI_CloseRxTx_ISR(hspi); +} +#endif /* USE_SPI_CRC */ + +/** + * @brief Tx 16-bit handler for Transmit and Receive in Interrupt mode. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_2linesTxISR_16BIT(struct __SPI_HandleTypeDef *hspi) +{ + /* Transmit data in 16 Bit mode */ + hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); + hspi->pTxBuffPtr += sizeof(uint16_t); + hspi->TxXferCount--; + + /* Enable CRC Transmission */ + if (hspi->TxXferCount == 0U) + { +#if (USE_SPI_CRC != 0U) + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + /* Set CRC Next Bit to send CRC */ + SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); + /* Disable TXE interrupt */ + __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); + return; + } +#endif /* USE_SPI_CRC */ + + /* Disable TXE interrupt */ + __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); + + if (hspi->RxXferCount == 0U) + { + SPI_CloseRxTx_ISR(hspi); + } + } +} + +#if (USE_SPI_CRC != 0U) +/** + * @brief Manage the CRC 8-bit receive in Interrupt context. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_RxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi) +{ + __IO uint8_t * ptmpreg8; + __IO uint8_t tmpreg8 = 0; + + /* Initialize the 8bit temporary pointer */ + ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; + /* Read 8bit CRC to flush Data Register */ + tmpreg8 = *ptmpreg8; + /* To avoid GCC warning */ + UNUSED(tmpreg8); + + hspi->CRCSize--; + + if (hspi->CRCSize == 0U) + { + SPI_CloseRx_ISR(hspi); + } +} +#endif /* USE_SPI_CRC */ + +/** + * @brief Manage the receive 8-bit in Interrupt context. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_RxISR_8BIT(struct __SPI_HandleTypeDef *hspi) +{ + *hspi->pRxBuffPtr = (*(__IO uint8_t *)&hspi->Instance->DR); + hspi->pRxBuffPtr++; + hspi->RxXferCount--; + +#if (USE_SPI_CRC != 0U) + /* Enable CRC Transmission */ + if ((hspi->RxXferCount == 1U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) + { + SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); + } +#endif /* USE_SPI_CRC */ + + if (hspi->RxXferCount == 0U) + { +#if (USE_SPI_CRC != 0U) + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + hspi->RxISR = SPI_RxISR_8BITCRC; + return; + } +#endif /* USE_SPI_CRC */ + SPI_CloseRx_ISR(hspi); + } +} + +#if (USE_SPI_CRC != 0U) +/** + * @brief Manage the CRC 16-bit receive in Interrupt context. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_RxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi) +{ + __IO uint32_t tmpreg = 0U; + + /* Read 16bit CRC to flush Data Register */ + tmpreg = READ_REG(hspi->Instance->DR); + /* To avoid GCC warning */ + UNUSED(tmpreg); + + /* Disable RXNE and ERR interrupt */ + __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); + + SPI_CloseRx_ISR(hspi); +} +#endif /* USE_SPI_CRC */ + +/** + * @brief Manage the 16-bit receive in Interrupt context. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_RxISR_16BIT(struct __SPI_HandleTypeDef *hspi) +{ + *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)(hspi->Instance->DR); + hspi->pRxBuffPtr += sizeof(uint16_t); + hspi->RxXferCount--; + +#if (USE_SPI_CRC != 0U) + /* Enable CRC Transmission */ + if ((hspi->RxXferCount == 1U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) + { + SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); + } +#endif /* USE_SPI_CRC */ + + if (hspi->RxXferCount == 0U) + { +#if (USE_SPI_CRC != 0U) + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + hspi->RxISR = SPI_RxISR_16BITCRC; + return; + } +#endif /* USE_SPI_CRC */ + SPI_CloseRx_ISR(hspi); + } +} + +/** + * @brief Handle the data 8-bit transmit in Interrupt mode. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_TxISR_8BIT(struct __SPI_HandleTypeDef *hspi) +{ + *(__IO uint8_t *)&hspi->Instance->DR = (*hspi->pTxBuffPtr); + hspi->pTxBuffPtr++; + hspi->TxXferCount--; + + if (hspi->TxXferCount == 0U) + { +#if (USE_SPI_CRC != 0U) + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + /* Enable CRC Transmission */ + SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); + } +#endif /* USE_SPI_CRC */ + SPI_CloseTx_ISR(hspi); + } +} + +/** + * @brief Handle the data 16-bit transmit in Interrupt mode. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_TxISR_16BIT(struct __SPI_HandleTypeDef *hspi) +{ + /* Transmit data in 16 Bit mode */ + hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); + hspi->pTxBuffPtr += sizeof(uint16_t); + hspi->TxXferCount--; + + if (hspi->TxXferCount == 0U) + { +#if (USE_SPI_CRC != 0U) + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + /* Enable CRC Transmission */ + SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); + } +#endif /* USE_SPI_CRC */ + SPI_CloseTx_ISR(hspi); + } +} + +/** + * @brief Handle SPI Communication Timeout. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @param Flag SPI flag to check + * @param State flag state to check + * @param Timeout Timeout duration + * @param Tickstart tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, FlagStatus State, + uint32_t Timeout, uint32_t Tickstart) +{ + __IO uint32_t count; + uint32_t tmp_timeout; + uint32_t tmp_tickstart; + + /* Adjust Timeout value in case of end of transfer */ + tmp_timeout = Timeout - (HAL_GetTick() - Tickstart); + tmp_tickstart = HAL_GetTick(); + + /* Calculate Timeout based on a software loop to avoid blocking issue if Systick is disabled */ + count = tmp_timeout * ((SystemCoreClock * 32U) >> 20U); + + while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) != State) + { + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - tmp_tickstart) >= tmp_timeout) || (tmp_timeout == 0U)) + { + /* Disable the SPI and reset the CRC: the CRC value should be cleared + on both master and slave sides in order to resynchronize the master + and slave for their respective CRC calculation */ + + /* Disable TXE, RXNE and ERR interrupts for the interrupt process */ + __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR)); + + if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) + || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) + { + /* Disable SPI peripheral */ + __HAL_SPI_DISABLE(hspi); + } + + /* Reset CRC Calculation */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + SPI_RESET_CRC(hspi); + } + + hspi->State = HAL_SPI_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hspi); + + return HAL_TIMEOUT; + } + /* If Systick is disabled or not incremented, deactivate timeout to go in disable loop procedure */ + if(count == 0U) + { + tmp_timeout = 0U; + } + count--; + } + } + + return HAL_OK; +} + +/** + * @brief Handle SPI FIFO Communication Timeout. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @param Fifo Fifo to check + * @param State Fifo state to check + * @param Timeout Timeout duration + * @param Tickstart tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef SPI_WaitFifoStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Fifo, uint32_t State, + uint32_t Timeout, uint32_t Tickstart) +{ + __IO uint32_t count; + uint32_t tmp_timeout; + uint32_t tmp_tickstart; + __IO uint8_t * ptmpreg8; + __IO uint8_t tmpreg8 = 0; + + /* Adjust Timeout value in case of end of transfer */ + tmp_timeout = Timeout - (HAL_GetTick() - Tickstart); + tmp_tickstart = HAL_GetTick(); + + /* Initialize the 8bit temporary pointer */ + ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; + + /* Calculate Timeout based on a software loop to avoid blocking issue if Systick is disabled */ + count = tmp_timeout * ((SystemCoreClock * 35U) >> 20U); + + while ((hspi->Instance->SR & Fifo) != State) + { + if ((Fifo == SPI_SR_FRLVL) && (State == SPI_FRLVL_EMPTY)) + { + /* Flush Data Register by a blank read */ + tmpreg8 = *ptmpreg8; + /* To avoid GCC warning */ + UNUSED(tmpreg8); + } + + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - tmp_tickstart) >= tmp_timeout) || (tmp_timeout == 0U)) + { + /* Disable the SPI and reset the CRC: the CRC value should be cleared + on both master and slave sides in order to resynchronize the master + and slave for their respective CRC calculation */ + + /* Disable TXE, RXNE and ERR interrupts for the interrupt process */ + __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR)); + + if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) + || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) + { + /* Disable SPI peripheral */ + __HAL_SPI_DISABLE(hspi); + } + + /* Reset CRC Calculation */ + if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) + { + SPI_RESET_CRC(hspi); + } + + hspi->State = HAL_SPI_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hspi); + + return HAL_TIMEOUT; + } + /* If Systick is disabled or not incremented, deactivate timeout to go in disable loop procedure */ + if(count == 0U) + { + tmp_timeout = 0U; + } + count--; + } + } + + return HAL_OK; +} + +/** + * @brief Handle the check of the RX transaction complete. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @param Timeout Timeout duration + * @param Tickstart tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef SPI_EndRxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart) +{ + if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) + || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) + { + /* Disable SPI peripheral */ + __HAL_SPI_DISABLE(hspi); + } + + /* Control the BSY flag */ + if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); + return HAL_TIMEOUT; + } + + if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) + || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) + { + /* Empty the FRLVL fifo */ + if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, Timeout, Tickstart) != HAL_OK) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); + return HAL_TIMEOUT; + } + } + return HAL_OK; +} + +/** + * @brief Handle the check of the RXTX or TX transaction complete. + * @param hspi SPI handle + * @param Timeout Timeout duration + * @param Tickstart tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart) +{ + /* Control if the TX fifo is empty */ + if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FTLVL, SPI_FTLVL_EMPTY, Timeout, Tickstart) != HAL_OK) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); + return HAL_TIMEOUT; + } + + /* Control the BSY flag */ + if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); + return HAL_TIMEOUT; + } + + /* Control if the RX fifo is empty */ + if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, Timeout, Tickstart) != HAL_OK) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); + return HAL_TIMEOUT; + } + + return HAL_OK; +} + +/** + * @brief Handle the end of the RXTX transaction. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_CloseRxTx_ISR(SPI_HandleTypeDef *hspi) +{ + uint32_t tickstart; + + /* Init tickstart for timeout management */ + tickstart = HAL_GetTick(); + + /* Disable ERR interrupt */ + __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); + + /* Check the end of the transaction */ + if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); + } + +#if (USE_SPI_CRC != 0U) + /* Check if CRC error occurred */ + if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET) + { + hspi->State = HAL_SPI_STATE_READY; + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); + __HAL_SPI_CLEAR_CRCERRFLAG(hspi); + /* Call user error callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->ErrorCallback(hspi); +#else + HAL_SPI_ErrorCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + } + else + { +#endif /* USE_SPI_CRC */ + if (hspi->ErrorCode == HAL_SPI_ERROR_NONE) + { + if (hspi->State == HAL_SPI_STATE_BUSY_RX) + { + hspi->State = HAL_SPI_STATE_READY; + /* Call user Rx complete callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->RxCpltCallback(hspi); +#else + HAL_SPI_RxCpltCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + } + else + { + hspi->State = HAL_SPI_STATE_READY; + /* Call user TxRx complete callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->TxRxCpltCallback(hspi); +#else + HAL_SPI_TxRxCpltCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + } + } + else + { + hspi->State = HAL_SPI_STATE_READY; + /* Call user error callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->ErrorCallback(hspi); +#else + HAL_SPI_ErrorCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + } +#if (USE_SPI_CRC != 0U) + } +#endif /* USE_SPI_CRC */ +} + +/** + * @brief Handle the end of the RX transaction. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_CloseRx_ISR(SPI_HandleTypeDef *hspi) +{ + /* Disable RXNE and ERR interrupt */ + __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); + + /* Check the end of the transaction */ + if (SPI_EndRxTransaction(hspi, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); + } + hspi->State = HAL_SPI_STATE_READY; + +#if (USE_SPI_CRC != 0U) + /* Check if CRC error occurred */ + if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); + __HAL_SPI_CLEAR_CRCERRFLAG(hspi); + /* Call user error callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->ErrorCallback(hspi); +#else + HAL_SPI_ErrorCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + } + else + { +#endif /* USE_SPI_CRC */ + if (hspi->ErrorCode == HAL_SPI_ERROR_NONE) + { + /* Call user Rx complete callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->RxCpltCallback(hspi); +#else + HAL_SPI_RxCpltCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + } + else + { + /* Call user error callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->ErrorCallback(hspi); +#else + HAL_SPI_ErrorCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + } +#if (USE_SPI_CRC != 0U) + } +#endif /* USE_SPI_CRC */ +} + +/** + * @brief Handle the end of the TX transaction. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_CloseTx_ISR(SPI_HandleTypeDef *hspi) +{ + uint32_t tickstart; + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + /* Disable TXE and ERR interrupt */ + __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_ERR)); + + /* Check the end of the transaction */ + if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); + } + + /* Clear overrun flag in 2 Lines communication mode because received is not read */ + if (hspi->Init.Direction == SPI_DIRECTION_2LINES) + { + __HAL_SPI_CLEAR_OVRFLAG(hspi); + } + + hspi->State = HAL_SPI_STATE_READY; + if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) + { + /* Call user error callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->ErrorCallback(hspi); +#else + HAL_SPI_ErrorCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + } + else + { + /* Call user Rx complete callback */ +#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) + hspi->TxCpltCallback(hspi); +#else + HAL_SPI_TxCpltCallback(hspi); +#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ + } +} + +/** + * @brief Handle abort a Rx transaction. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_AbortRx_ISR(SPI_HandleTypeDef *hspi) +{ + __IO uint32_t count; + + /* Disable SPI Peripheral */ + __HAL_SPI_DISABLE(hspi); + + count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U); + + /* Disable RXNEIE interrupt */ + CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_RXNEIE)); + + /* Check RXNEIE is disabled */ + do + { + if (count == 0U) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); + break; + } + count--; + } while (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXNEIE)); + + /* Control the BSY flag */ + if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + + /* Empty the FRLVL fifo */ + if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + + hspi->State = HAL_SPI_STATE_ABORT; +} + +/** + * @brief Handle abort a Tx or Rx/Tx transaction. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for SPI module. + * @retval None + */ +static void SPI_AbortTx_ISR(SPI_HandleTypeDef *hspi) +{ + __IO uint32_t count; + + count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U); + + /* Disable TXEIE interrupt */ + CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXEIE)); + + /* Check TXEIE is disabled */ + do + { + if (count == 0U) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); + break; + } + count--; + } while (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXEIE)); + + if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + + /* Disable SPI Peripheral */ + __HAL_SPI_DISABLE(hspi); + + /* Empty the FRLVL fifo */ + if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + + /* Check case of Full-Duplex Mode and disable directly RXNEIE interrupt */ + if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXNEIE)) + { + /* Disable RXNEIE interrupt */ + CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_RXNEIE)); + + /* Check RXNEIE is disabled */ + do + { + if (count == 0U) + { + SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); + break; + } + count--; + } while (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXNEIE)); + + /* Control the BSY flag */ + if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + + /* Empty the FRLVL fifo */ + if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) + { + hspi->ErrorCode = HAL_SPI_ERROR_ABORT; + } + } + hspi->State = HAL_SPI_STATE_ABORT; +} + +/** + * @} + */ + +#endif /* HAL_SPI_MODULE_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_spi_ex.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_spi_ex.c new file mode 100644 index 0000000..71f3181 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_spi_ex.c @@ -0,0 +1,115 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_spi_ex.c + * @author MCD Application Team + * @brief Extended SPI HAL module driver. + * This file provides firmware functions to manage the following + * SPI peripheral extended functionalities : + * + IO operation functions + * + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup SPIEx SPIEx + * @brief SPI Extended HAL module driver + * @{ + */ +#ifdef HAL_SPI_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private defines -----------------------------------------------------------*/ +/** @defgroup SPIEx_Private_Constants SPIEx Private Constants + * @{ + */ +#define SPI_FIFO_SIZE 4UL +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup SPIEx_Exported_Functions SPIEx Exported Functions + * @{ + */ + +/** @defgroup SPIEx_Exported_Functions_Group1 IO operation functions + * @brief Data transfers functions + * +@verbatim + ============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] + This subsection provides a set of extended functions to manage the SPI + data transfers. + + (#) Rx data flush function: + (++) HAL_SPIEx_FlushRxFifo() + +@endverbatim + * @{ + */ + +/** + * @brief Flush the RX fifo. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains + * the configuration information for the specified SPI module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SPIEx_FlushRxFifo(SPI_HandleTypeDef *hspi) +{ + __IO uint32_t tmpreg; + uint8_t count = 0U; + while ((hspi->Instance->SR & SPI_FLAG_FRLVL) != SPI_FRLVL_EMPTY) + { + count++; + tmpreg = hspi->Instance->DR; + UNUSED(tmpreg); /* To avoid GCC warning */ + if (count == SPI_FIFO_SIZE) + { + return HAL_TIMEOUT; + } + } + return HAL_OK; +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_SPI_MODULE_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim.c new file mode 100644 index 0000000..9bab4be --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim.c @@ -0,0 +1,7942 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_tim.c + * @author MCD Application Team + * @brief TIM HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Timer (TIM) peripheral: + * + TIM Time Base Initialization + * + TIM Time Base Start + * + TIM Time Base Start Interruption + * + TIM Time Base Start DMA + * + TIM Output Compare/PWM Initialization + * + TIM Output Compare/PWM Channel Configuration + * + TIM Output Compare/PWM Start + * + TIM Output Compare/PWM Start Interruption + * + TIM Output Compare/PWM Start DMA + * + TIM Input Capture Initialization + * + TIM Input Capture Channel Configuration + * + TIM Input Capture Start + * + TIM Input Capture Start Interruption + * + TIM Input Capture Start DMA + * + TIM One Pulse Initialization + * + TIM One Pulse Channel Configuration + * + TIM One Pulse Start + * + TIM Encoder Interface Initialization + * + TIM Encoder Interface Start + * + TIM Encoder Interface Start Interruption + * + TIM Encoder Interface Start DMA + * + Commutation Event configuration with Interruption and DMA + * + TIM OCRef clear configuration + * + TIM External Clock configuration + @verbatim + ============================================================================== + ##### TIMER Generic features ##### + ============================================================================== + [..] The Timer features include: + (#) 16-bit up, down, up/down auto-reload counter. + (#) 16-bit programmable prescaler allowing dividing (also on the fly) the + counter clock frequency either by any factor between 1 and 65536. + (#) Up to 4 independent channels for: + (++) Input Capture + (++) Output Compare + (++) PWM generation (Edge and Center-aligned Mode) + (++) One-pulse mode output + (#) Synchronization circuit to control the timer with external signals and to interconnect + several timers together. + (#) Supports incremental encoder for positioning purposes + + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Initialize the TIM low level resources by implementing the following functions + depending on the selected feature: + (++) Time Base : HAL_TIM_Base_MspInit() + (++) Input Capture : HAL_TIM_IC_MspInit() + (++) Output Compare : HAL_TIM_OC_MspInit() + (++) PWM generation : HAL_TIM_PWM_MspInit() + (++) One-pulse mode output : HAL_TIM_OnePulse_MspInit() + (++) Encoder mode output : HAL_TIM_Encoder_MspInit() + + (#) Initialize the TIM low level resources : + (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE(); + (##) TIM pins configuration + (+++) Enable the clock for the TIM GPIOs using the following function: + __HAL_RCC_GPIOx_CLK_ENABLE(); + (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init(); + + (#) The external Clock can be configured, if needed (the default clock is the + internal clock from the APBx), using the following function: + HAL_TIM_ConfigClockSource, the clock configuration should be done before + any start function. + + (#) Configure the TIM in the desired functioning mode using one of the + Initialization function of this driver: + (++) HAL_TIM_Base_Init: to use the Timer to generate a simple time base + (++) HAL_TIM_OC_Init and HAL_TIM_OC_ConfigChannel: to use the Timer to generate an + Output Compare signal. + (++) HAL_TIM_PWM_Init and HAL_TIM_PWM_ConfigChannel: to use the Timer to generate a + PWM signal. + (++) HAL_TIM_IC_Init and HAL_TIM_IC_ConfigChannel: to use the Timer to measure an + external signal. + (++) HAL_TIM_OnePulse_Init and HAL_TIM_OnePulse_ConfigChannel: to use the Timer + in One Pulse Mode. + (++) HAL_TIM_Encoder_Init: to use the Timer Encoder Interface. + + (#) Activate the TIM peripheral using one of the start functions depending from the feature used: + (++) Time Base : HAL_TIM_Base_Start(), HAL_TIM_Base_Start_DMA(), HAL_TIM_Base_Start_IT() + (++) Input Capture : HAL_TIM_IC_Start(), HAL_TIM_IC_Start_DMA(), HAL_TIM_IC_Start_IT() + (++) Output Compare : HAL_TIM_OC_Start(), HAL_TIM_OC_Start_DMA(), HAL_TIM_OC_Start_IT() + (++) PWM generation : HAL_TIM_PWM_Start(), HAL_TIM_PWM_Start_DMA(), HAL_TIM_PWM_Start_IT() + (++) One-pulse mode output : HAL_TIM_OnePulse_Start(), HAL_TIM_OnePulse_Start_IT() + (++) Encoder mode output : HAL_TIM_Encoder_Start(), HAL_TIM_Encoder_Start_DMA(), HAL_TIM_Encoder_Start_IT(). + + (#) The DMA Burst is managed with the two following functions: + HAL_TIM_DMABurst_WriteStart() + HAL_TIM_DMABurst_ReadStart() + + *** Callback registration *** + ============================================= + + [..] + The compilation define USE_HAL_TIM_REGISTER_CALLBACKS when set to 1 + allows the user to configure dynamically the driver callbacks. + + [..] + Use Function HAL_TIM_RegisterCallback() to register a callback. + HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle, + the Callback ID and a pointer to the user callback function. + + [..] + Use function HAL_TIM_UnRegisterCallback() to reset a callback to the default + weak function. + HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle, + and the Callback ID. + + [..] + These functions allow to register/unregister following callbacks: + (+) Base_MspInitCallback : TIM Base Msp Init Callback. + (+) Base_MspDeInitCallback : TIM Base Msp DeInit Callback. + (+) IC_MspInitCallback : TIM IC Msp Init Callback. + (+) IC_MspDeInitCallback : TIM IC Msp DeInit Callback. + (+) OC_MspInitCallback : TIM OC Msp Init Callback. + (+) OC_MspDeInitCallback : TIM OC Msp DeInit Callback. + (+) PWM_MspInitCallback : TIM PWM Msp Init Callback. + (+) PWM_MspDeInitCallback : TIM PWM Msp DeInit Callback. + (+) OnePulse_MspInitCallback : TIM One Pulse Msp Init Callback. + (+) OnePulse_MspDeInitCallback : TIM One Pulse Msp DeInit Callback. + (+) Encoder_MspInitCallback : TIM Encoder Msp Init Callback. + (+) Encoder_MspDeInitCallback : TIM Encoder Msp DeInit Callback. + (+) HallSensor_MspInitCallback : TIM Hall Sensor Msp Init Callback. + (+) HallSensor_MspDeInitCallback : TIM Hall Sensor Msp DeInit Callback. + (+) PeriodElapsedCallback : TIM Period Elapsed Callback. + (+) PeriodElapsedHalfCpltCallback : TIM Period Elapsed half complete Callback. + (+) TriggerCallback : TIM Trigger Callback. + (+) TriggerHalfCpltCallback : TIM Trigger half complete Callback. + (+) IC_CaptureCallback : TIM Input Capture Callback. + (+) IC_CaptureHalfCpltCallback : TIM Input Capture half complete Callback. + (+) OC_DelayElapsedCallback : TIM Output Compare Delay Elapsed Callback. + (+) PWM_PulseFinishedCallback : TIM PWM Pulse Finished Callback. + (+) PWM_PulseFinishedHalfCpltCallback : TIM PWM Pulse Finished half complete Callback. + (+) ErrorCallback : TIM Error Callback. + (+) CommutationCallback : TIM Commutation Callback. + (+) CommutationHalfCpltCallback : TIM Commutation half complete Callback. + (+) BreakCallback : TIM Break Callback. + (+) Break2Callback : TIM Break2 Callback (when supported). + + [..] +By default, after the Init and when the state is HAL_TIM_STATE_RESET +all interrupt callbacks are set to the corresponding weak functions: + examples HAL_TIM_TriggerCallback(), HAL_TIM_ErrorCallback(). + + [..] + Exception done for MspInit and MspDeInit functions that are reset to the legacy weak + functionalities in the Init / DeInit only when these callbacks are null + (not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit + keep and use the user MspInit / MspDeInit callbacks(registered beforehand) + + [..] + Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only. + Exception done MspInit / MspDeInit that can be registered / unregistered + in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state, + thus registered(user) MspInit / DeInit callbacks can be used during the Init / DeInit. + In that case first register the MspInit/MspDeInit user callbacks + using HAL_TIM_RegisterCallback() before calling DeInit or Init function. + + [..] + When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or + not defined, the callback registration feature is not available and all callbacks + are set to the corresponding weak functions. + + @endverbatim + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup TIM TIM + * @brief TIM HAL module driver + * @{ + */ + +#ifdef HAL_TIM_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @addtogroup TIM_Private_Functions + * @{ + */ +static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config); +static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config); +static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config); +#if defined(TIM_CCER_CC5E) +static void TIM_OC5_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config); +#endif /* TIM_CCER_CC5E */ +#if defined(TIM_CCER_CC6E) +static void TIM_OC6_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config); +#endif /* TIM_CCER_CC6E */ +static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter); +static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter); +static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter); +static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter); +static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter); +static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource); +static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma); +static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, + TIM_SlaveConfigTypeDef *sSlaveConfig); +/** + * @} + */ +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup TIM_Exported_Functions TIM Exported Functions + * @{ + */ + +/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions + * @brief Time Base functions + * +@verbatim + ============================================================================== + ##### Time Base functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM base. + (+) De-initialize the TIM base. + (+) Start the Time Base. + (+) Stop the Time Base. + (+) Start the Time Base and enable interrupt. + (+) Stop the Time Base and disable interrupt. + (+) Start the Time Base and enable DMA transfer. + (+) Stop the Time Base and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Time base Unit according to the specified + * parameters in the TIM_HandleTypeDef and initialize the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init() + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->Base_MspInitCallback == NULL) + { + htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->Base_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + HAL_TIM_Base_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Set the Time Base configuration */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM Base peripheral + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->Base_MspDeInitCallback == NULL) + { + htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; + } + /* DeInit the low level hardware */ + htim->Base_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIM_Base_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Base MSP. + * @param htim TIM Base handle + * @retval None + */ +__weak void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_Base_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Base MSP. + * @param htim TIM Base handle + * @retval None + */ +__weak void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_Base_MspDeInit could be implemented in the user file + */ +} + + +/** + * @brief Starts the TIM Base generation. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Check the TIM state */ + if (htim->State != HAL_TIM_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Base generation. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Base generation in interrupt mode. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Check the TIM state */ + if (htim->State != HAL_TIM_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Enable the TIM Update interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Base generation in interrupt mode. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Disable the TIM Update interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_UPDATE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Base generation in DMA mode. + * @param htim TIM Base handle + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_DMA_INSTANCE(htim->Instance)); + + /* Set the TIM state */ + if (htim->State == HAL_TIM_STATE_BUSY) + { + return HAL_BUSY; + } + else if (htim->State == HAL_TIM_STATE_READY) + { + if ((pData == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + htim->State = HAL_TIM_STATE_BUSY; + } + } + else + { + return HAL_ERROR; + } + + /* Set the DMA Period elapsed callbacks */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; + htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)pData, (uint32_t)&htim->Instance->ARR, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Update DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_UPDATE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Base generation in DMA mode. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_DMA_INSTANCE(htim->Instance)); + + /* Disable the TIM Update DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_UPDATE); + + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions + * @brief TIM Output Compare functions + * +@verbatim + ============================================================================== + ##### TIM Output Compare functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM Output Compare. + (+) De-initialize the TIM Output Compare. + (+) Start the TIM Output Compare. + (+) Stop the TIM Output Compare. + (+) Start the TIM Output Compare and enable interrupt. + (+) Stop the TIM Output Compare and disable interrupt. + (+) Start the TIM Output Compare and enable DMA transfer. + (+) Stop the TIM Output Compare and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Output Compare according to the specified + * parameters in the TIM_HandleTypeDef and initializes the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_OC_DeInit() before HAL_TIM_OC_Init() + * @param htim TIM Output Compare handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->OC_MspInitCallback == NULL) + { + htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->OC_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_OC_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Init the base time for the Output Compare */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM peripheral + * @param htim TIM Output Compare handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->OC_MspDeInitCallback == NULL) + { + htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; + } + /* DeInit the low level hardware */ + htim->OC_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_OC_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Output Compare MSP. + * @param htim TIM Output Compare handle + * @retval None + */ +__weak void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OC_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Output Compare MSP. + * @param htim TIM Output Compare handle + * @retval None + */ +__weak void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OC_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Output Compare signal generation. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @arg TIM_CHANNEL_5: TIM Channel 5 selected (*) + * @arg TIM_CHANNEL_6: TIM Channel 6 selected (*) + * (*) Value not defined for all devices + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Output Compare signal generation. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @arg TIM_CHANNEL_5: TIM Channel 5 selected (*) + * @arg TIM_CHANNEL_6: TIM Channel 6 selected (*) + * (*) Value not defined for all devices + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Disable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Output Compare signal generation in interrupt mode. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Enable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Output Compare signal generation in interrupt mode. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM Output Compare signal generation in DMA mode. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Set the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) + { + return HAL_BUSY; + } + else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) + { + if ((pData == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Output Compare signal generation in DMA mode. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions + * @brief TIM PWM functions + * +@verbatim + ============================================================================== + ##### TIM PWM functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM PWM. + (+) De-initialize the TIM PWM. + (+) Start the TIM PWM. + (+) Stop the TIM PWM. + (+) Start the TIM PWM and enable interrupt. + (+) Stop the TIM PWM and disable interrupt. + (+) Start the TIM PWM and enable DMA transfer. + (+) Stop the TIM PWM and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM PWM Time Base according to the specified + * parameters in the TIM_HandleTypeDef and initializes the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_PWM_DeInit() before HAL_TIM_PWM_Init() + * @param htim TIM PWM handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->PWM_MspInitCallback == NULL) + { + htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->PWM_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_PWM_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Init the base time for the PWM */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM peripheral + * @param htim TIM PWM handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->PWM_MspDeInitCallback == NULL) + { + htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; + } + /* DeInit the low level hardware */ + htim->PWM_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_PWM_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM PWM MSP. + * @param htim TIM PWM handle + * @retval None + */ +__weak void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PWM_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM PWM MSP. + * @param htim TIM PWM handle + * @retval None + */ +__weak void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PWM_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the PWM signal generation. + * @param htim TIM handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @arg TIM_CHANNEL_5: TIM Channel 5 selected (*) + * @arg TIM_CHANNEL_6: TIM Channel 6 selected (*) + * (*) Value not defined for all devices + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the PWM signal generation. + * @param htim TIM PWM handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @arg TIM_CHANNEL_5: TIM Channel 5 selected (*) + * @arg TIM_CHANNEL_6: TIM Channel 6 selected (*) + * (*) Value not defined for all devices + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Disable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the PWM signal generation in interrupt mode. + * @param htim TIM PWM handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Enable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the PWM signal generation in interrupt mode. + * @param htim TIM PWM handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM PWM signal generation in DMA mode. + * @param htim TIM PWM handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Set the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) + { + return HAL_BUSY; + } + else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) + { + if ((pData == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Output Capture/Compare 3 request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM PWM signal generation in DMA mode. + * @param htim TIM PWM handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions + * @brief TIM Input Capture functions + * +@verbatim + ============================================================================== + ##### TIM Input Capture functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM Input Capture. + (+) De-initialize the TIM Input Capture. + (+) Start the TIM Input Capture. + (+) Stop the TIM Input Capture. + (+) Start the TIM Input Capture and enable interrupt. + (+) Stop the TIM Input Capture and disable interrupt. + (+) Start the TIM Input Capture and enable DMA transfer. + (+) Stop the TIM Input Capture and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Input Capture Time base according to the specified + * parameters in the TIM_HandleTypeDef and initializes the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_IC_DeInit() before HAL_TIM_IC_Init() + * @param htim TIM Input Capture handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->IC_MspInitCallback == NULL) + { + htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->IC_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_IC_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Init the base time for the input capture */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM peripheral + * @param htim TIM Input Capture handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->IC_MspDeInitCallback == NULL) + { + htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; + } + /* DeInit the low level hardware */ + htim->IC_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_IC_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Input Capture MSP. + * @param htim TIM Input Capture handle + * @retval None + */ +__weak void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_IC_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Input Capture MSP. + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_IC_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Input Capture measurement. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); + HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel); + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if ((channel_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Input Capture measurement. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Disable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Input Capture measurement in interrupt mode. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); + HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel); + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if ((channel_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Enable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Input Capture measurement in interrupt mode. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM Input Capture measurement in DMA mode. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param pData The destination Buffer address. + * @param Length The length of data to be transferred from TIM peripheral to memory. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); + HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel); + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance)); + + /* Set the TIM channel state */ + if ((channel_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((pData == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + /* Enable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->CCR3, (uint32_t)pData, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->CCR4, (uint32_t)pData, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Input Capture measurement in DMA mode. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions + * @brief TIM One Pulse functions + * +@verbatim + ============================================================================== + ##### TIM One Pulse functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM One Pulse. + (+) De-initialize the TIM One Pulse. + (+) Start the TIM One Pulse. + (+) Stop the TIM One Pulse. + (+) Start the TIM One Pulse and enable interrupt. + (+) Stop the TIM One Pulse and disable interrupt. + (+) Start the TIM One Pulse and enable DMA transfer. + (+) Stop the TIM One Pulse and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM One Pulse Time Base according to the specified + * parameters in the TIM_HandleTypeDef and initializes the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_OnePulse_DeInit() before HAL_TIM_OnePulse_Init() + * @note When the timer instance is initialized in One Pulse mode, timer + * channels 1 and channel 2 are reserved and cannot be used for other + * purpose. + * @param htim TIM One Pulse handle + * @param OnePulseMode Select the One pulse mode. + * This parameter can be one of the following values: + * @arg TIM_OPMODE_SINGLE: Only one pulse will be generated. + * @arg TIM_OPMODE_REPETITIVE: Repetitive pulses will be generated. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_OPM_MODE(OnePulseMode)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->OnePulse_MspInitCallback == NULL) + { + htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->OnePulse_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_OnePulse_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Configure the Time base in the One Pulse Mode */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Reset the OPM Bit */ + htim->Instance->CR1 &= ~TIM_CR1_OPM; + + /* Configure the OPM Mode */ + htim->Instance->CR1 |= OnePulseMode; + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM One Pulse + * @param htim TIM One Pulse handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->OnePulse_MspDeInitCallback == NULL) + { + htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; + } + /* DeInit the low level hardware */ + htim->OnePulse_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIM_OnePulse_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM One Pulse MSP. + * @param htim TIM One Pulse handle + * @retval None + */ +__weak void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OnePulse_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM One Pulse MSP. + * @param htim TIM One Pulse handle + * @retval None + */ +__weak void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OnePulse_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM One Pulse signal generation. + * @note Though OutputChannel parameter is deprecated and ignored by the function + * it has been kept to avoid HAL_TIM API compatibility break. + * @note The pulse output channel is determined when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel See note above + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Prevent unused argument(s) compilation warning */ + UNUSED(OutputChannel); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together + + No need to enable the counter, it's enabled automatically by hardware + (the counter starts in response to a stimulus and generate a pulse */ + + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation. + * @note Though OutputChannel parameter is deprecated and ignored by the function + * it has been kept to avoid HAL_TIM API compatibility break. + * @note The pulse output channel is determined when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel See note above + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(OutputChannel); + + /* Disable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */ + + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM One Pulse signal generation in interrupt mode. + * @note Though OutputChannel parameter is deprecated and ignored by the function + * it has been kept to avoid HAL_TIM API compatibility break. + * @note The pulse output channel is determined when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel See note above + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Prevent unused argument(s) compilation warning */ + UNUSED(OutputChannel); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together + + No need to enable the counter, it's enabled automatically by hardware + (the counter starts in response to a stimulus and generate a pulse */ + + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation in interrupt mode. + * @note Though OutputChannel parameter is deprecated and ignored by the function + * it has been kept to avoid HAL_TIM API compatibility break. + * @note The pulse output channel is determined when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel See note above + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(OutputChannel); + + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + + /* Disable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions + * @brief TIM Encoder functions + * +@verbatim + ============================================================================== + ##### TIM Encoder functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM Encoder. + (+) De-initialize the TIM Encoder. + (+) Start the TIM Encoder. + (+) Stop the TIM Encoder. + (+) Start the TIM Encoder and enable interrupt. + (+) Stop the TIM Encoder and disable interrupt. + (+) Start the TIM Encoder and enable DMA transfer. + (+) Stop the TIM Encoder and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Encoder Interface and initialize the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_Encoder_DeInit() before HAL_TIM_Encoder_Init() + * @note Encoder mode and External clock mode 2 are not compatible and must not be selected together + * Ex: A call for @ref HAL_TIM_Encoder_Init will erase the settings of @ref HAL_TIM_ConfigClockSource + * using TIM_CLOCKSOURCE_ETRMODE2 and vice versa + * @note When the timer instance is initialized in Encoder mode, timer + * channels 1 and channel 2 are reserved and cannot be used for other + * purpose. + * @param htim TIM Encoder Interface handle + * @param sConfig TIM Encoder Interface configuration structure + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_InitTypeDef *sConfig) +{ + uint32_t tmpsmcr; + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode)); + assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection)); + assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection)); + assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity)); + assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler)); + assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter)); + assert_param(IS_TIM_IC_FILTER(sConfig->IC2Filter)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->Encoder_MspInitCallback == NULL) + { + htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->Encoder_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_Encoder_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Reset the SMS and ECE bits */ + htim->Instance->SMCR &= ~(TIM_SMCR_SMS | TIM_SMCR_ECE); + + /* Configure the Time base in the Encoder Mode */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Get the TIMx SMCR register value */ + tmpsmcr = htim->Instance->SMCR; + + /* Get the TIMx CCMR1 register value */ + tmpccmr1 = htim->Instance->CCMR1; + + /* Get the TIMx CCER register value */ + tmpccer = htim->Instance->CCER; + + /* Set the encoder Mode */ + tmpsmcr |= sConfig->EncoderMode; + + /* Select the Capture Compare 1 and the Capture Compare 2 as input */ + tmpccmr1 &= ~(TIM_CCMR1_CC1S | TIM_CCMR1_CC2S); + tmpccmr1 |= (sConfig->IC1Selection | (sConfig->IC2Selection << 8U)); + + /* Set the Capture Compare 1 and the Capture Compare 2 prescalers and filters */ + tmpccmr1 &= ~(TIM_CCMR1_IC1PSC | TIM_CCMR1_IC2PSC); + tmpccmr1 &= ~(TIM_CCMR1_IC1F | TIM_CCMR1_IC2F); + tmpccmr1 |= sConfig->IC1Prescaler | (sConfig->IC2Prescaler << 8U); + tmpccmr1 |= (sConfig->IC1Filter << 4U) | (sConfig->IC2Filter << 12U); + + /* Set the TI1 and the TI2 Polarities */ + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P); + tmpccer &= ~(TIM_CCER_CC1NP | TIM_CCER_CC2NP); + tmpccer |= sConfig->IC1Polarity | (sConfig->IC2Polarity << 4U); + + /* Write to TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + + /* Write to TIMx CCMR1 */ + htim->Instance->CCMR1 = tmpccmr1; + + /* Write to TIMx CCER */ + htim->Instance->CCER = tmpccer; + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + + +/** + * @brief DeInitializes the TIM Encoder interface + * @param htim TIM Encoder Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->Encoder_MspDeInitCallback == NULL) + { + htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; + } + /* DeInit the low level hardware */ + htim->Encoder_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIM_Encoder_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Encoder Interface MSP. + * @param htim TIM Encoder Interface handle + * @retval None + */ +__weak void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_Encoder_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Encoder Interface MSP. + * @param htim TIM Encoder Interface handle + * @retval None + */ +__weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_Encoder_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Encoder Interface. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Set the TIM channel(s) state */ + if (Channel == TIM_CHANNEL_1) + { + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else if (Channel == TIM_CHANNEL_2) + { + if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + + /* Enable the encoder interface channels */ + switch (Channel) + { + case TIM_CHANNEL_1: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + break; + } + + case TIM_CHANNEL_2: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + break; + } + + default : + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + break; + } + } + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Encoder Interface. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1 and 2 + (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ + switch (Channel) + { + case TIM_CHANNEL_1: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + break; + } + + case TIM_CHANNEL_2: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + break; + } + + default : + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + break; + } + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel(s) state */ + if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Encoder Interface in interrupt mode. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Set the TIM channel(s) state */ + if (Channel == TIM_CHANNEL_1) + { + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else if (Channel == TIM_CHANNEL_2) + { + if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + + /* Enable the encoder interface channels */ + /* Enable the capture compare Interrupts 1 and/or 2 */ + switch (Channel) + { + case TIM_CHANNEL_1: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + default : + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + } + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Encoder Interface in interrupt mode. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1 and 2 + (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ + if (Channel == TIM_CHANNEL_1) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts 1 */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + } + else if (Channel == TIM_CHANNEL_2) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts 2 */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + } + else + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts 1 and 2 */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel(s) state */ + if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Encoder Interface in DMA mode. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @param pData1 The destination Buffer address for IC1. + * @param pData2 The destination Buffer address for IC2. + * @param Length The length of data to be transferred from TIM peripheral to memory. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, + uint32_t *pData2, uint16_t Length) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Set the TIM channel(s) state */ + if (Channel == TIM_CHANNEL_1) + { + if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((pData1 == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + } + else if (Channel == TIM_CHANNEL_2) + { + if ((channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_2_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((pData2 == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + } + else + { + if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) + && (channel_2_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((((pData1 == NULL) || (pData2 == NULL))) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError; + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + break; + } + + default: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + break; + } + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Encoder Interface in DMA mode. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1 and 2 + (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ + if (Channel == TIM_CHANNEL_1) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the capture compare DMA Request 1 */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + } + else if (Channel == TIM_CHANNEL_2) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare DMA Request 2 */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + } + else + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare DMA Request 1 and 2 */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel(s) state */ + if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ +/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management + * @brief TIM IRQ handler management + * +@verbatim + ============================================================================== + ##### IRQ handler management ##### + ============================================================================== + [..] + This section provides Timer IRQ handler function. + +@endverbatim + * @{ + */ +/** + * @brief This function handles TIM interrupts requests. + * @param htim TIM handle + * @retval None + */ +void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) +{ + /* Capture compare 1 event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC1) != RESET) + { + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + + /* Input capture event */ + if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U) + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + /* Output compare event */ + else + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + } + /* Capture compare 2 event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC2) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC2) != RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC2); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + /* Input capture event */ + if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U) + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + /* Output compare event */ + else + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + /* Capture compare 3 event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC3) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC3) != RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC3); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + /* Input capture event */ + if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U) + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + /* Output compare event */ + else + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + /* Capture compare 4 event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC4) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC4) != RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC4); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + /* Input capture event */ + if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U) + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + /* Output compare event */ + else + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + /* TIM Update event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_UPDATE) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) != RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE); +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PeriodElapsedCallback(htim); +#else + HAL_TIM_PeriodElapsedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } + /* TIM Break input event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_BREAK) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_BREAK) != RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_BREAK); +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->BreakCallback(htim); +#else + HAL_TIMEx_BreakCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } +#if defined(TIM_BDTR_BK2E) + /* TIM Break2 input event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_BREAK2) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_BREAK) != RESET) + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK2); +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->Break2Callback(htim); +#else + HAL_TIMEx_Break2Callback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } +#endif /* TIM_BDTR_BK2E */ + /* TIM Trigger detection event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_TRIGGER) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_TRIGGER) != RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_TRIGGER); +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->TriggerCallback(htim); +#else + HAL_TIM_TriggerCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } + /* TIM commutation event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_COM) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_COM) != RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_FLAG_COM); +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->CommutationCallback(htim); +#else + HAL_TIMEx_CommutCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions + * @brief TIM Peripheral Control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Configure The Input Output channels for OC, PWM, IC or One Pulse mode. + (+) Configure External Clock source. + (+) Configure Complementary channels, break features and dead time. + (+) Configure Master and the Slave synchronization. + (+) Configure the DMA Burst Mode. + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the TIM Output Compare Channels according to the specified + * parameters in the TIM_OC_InitTypeDef. + * @param htim TIM Output Compare handle + * @param sConfig TIM Output Compare configuration structure + * @param Channel TIM Channels to configure + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @arg TIM_CHANNEL_5: TIM Channel 5 selected (*) + * @arg TIM_CHANNEL_6: TIM Channel 6 selected (*) + * (*) Value not defined for all devices + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, + TIM_OC_InitTypeDef *sConfig, + uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CHANNELS(Channel)); + assert_param(IS_TIM_OC_MODE(sConfig->OCMode)); + assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity)); + + /* Process Locked */ + __HAL_LOCK(htim); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 1 in Output Compare */ + TIM_OC1_SetConfig(htim->Instance, sConfig); + break; + } + + case TIM_CHANNEL_2: + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 2 in Output Compare */ + TIM_OC2_SetConfig(htim->Instance, sConfig); + break; + } + + case TIM_CHANNEL_3: + { + /* Check the parameters */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 3 in Output Compare */ + TIM_OC3_SetConfig(htim->Instance, sConfig); + break; + } + + case TIM_CHANNEL_4: + { + /* Check the parameters */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 4 in Output Compare */ + TIM_OC4_SetConfig(htim->Instance, sConfig); + break; + } + +#if defined(TIM_CCER_CC5E) + case TIM_CHANNEL_5: + { + /* Check the parameters */ + assert_param(IS_TIM_CC5_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 5 in Output Compare */ + TIM_OC5_SetConfig(htim->Instance, sConfig); + break; + } +#endif /* TIM_CCER_CC5E */ + +#if defined(TIM_CCER_CC6E) + case TIM_CHANNEL_6: + { + /* Check the parameters */ + assert_param(IS_TIM_CC6_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 6 in Output Compare */ + TIM_OC6_SetConfig(htim->Instance, sConfig); + break; + } +#endif /* TIM_CCER_CC6E */ + + default: + status = HAL_ERROR; + break; + } + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Initializes the TIM Input Capture Channels according to the specified + * parameters in the TIM_IC_InitTypeDef. + * @param htim TIM IC handle + * @param sConfig TIM Input Capture configuration structure + * @param Channel TIM Channel to configure + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_IC_POLARITY(sConfig->ICPolarity)); + assert_param(IS_TIM_IC_SELECTION(sConfig->ICSelection)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->ICPrescaler)); + assert_param(IS_TIM_IC_FILTER(sConfig->ICFilter)); + + /* Process Locked */ + __HAL_LOCK(htim); + + if (Channel == TIM_CHANNEL_1) + { + /* TI1 Configuration */ + TIM_TI1_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC1PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; + + /* Set the IC1PSC value */ + htim->Instance->CCMR1 |= sConfig->ICPrescaler; + } + else if (Channel == TIM_CHANNEL_2) + { + /* TI2 Configuration */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + TIM_TI2_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC2PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC; + + /* Set the IC2PSC value */ + htim->Instance->CCMR1 |= (sConfig->ICPrescaler << 8U); + } + else if (Channel == TIM_CHANNEL_3) + { + /* TI3 Configuration */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + TIM_TI3_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC3PSC Bits */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC; + + /* Set the IC3PSC value */ + htim->Instance->CCMR2 |= sConfig->ICPrescaler; + } + else if (Channel == TIM_CHANNEL_4) + { + /* TI4 Configuration */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + TIM_TI4_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC4PSC Bits */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC; + + /* Set the IC4PSC value */ + htim->Instance->CCMR2 |= (sConfig->ICPrescaler << 8U); + } + else + { + status = HAL_ERROR; + } + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Initializes the TIM PWM channels according to the specified + * parameters in the TIM_OC_InitTypeDef. + * @param htim TIM PWM handle + * @param sConfig TIM PWM configuration structure + * @param Channel TIM Channels to be configured + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @arg TIM_CHANNEL_5: TIM Channel 5 selected (*) + * @arg TIM_CHANNEL_6: TIM Channel 6 selected (*) + * (*) Value not defined for all devices + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, + TIM_OC_InitTypeDef *sConfig, + uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CHANNELS(Channel)); + assert_param(IS_TIM_PWM_MODE(sConfig->OCMode)); + assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity)); + assert_param(IS_TIM_FAST_STATE(sConfig->OCFastMode)); + + /* Process Locked */ + __HAL_LOCK(htim); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + /* Configure the Channel 1 in PWM mode */ + TIM_OC1_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel1 */ + htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE; + htim->Instance->CCMR1 |= sConfig->OCFastMode; + break; + } + + case TIM_CHANNEL_2: + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Configure the Channel 2 in PWM mode */ + TIM_OC2_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel2 */ + htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE; + htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U; + break; + } + + case TIM_CHANNEL_3: + { + /* Check the parameters */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + /* Configure the Channel 3 in PWM mode */ + TIM_OC3_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel3 */ + htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE; + htim->Instance->CCMR2 |= sConfig->OCFastMode; + break; + } + + case TIM_CHANNEL_4: + { + /* Check the parameters */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + /* Configure the Channel 4 in PWM mode */ + TIM_OC4_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel4 */ + htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE; + htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U; + break; + } + +#if defined(TIM_CCER_CC5E) + case TIM_CHANNEL_5: + { + /* Check the parameters */ + assert_param(IS_TIM_CC5_INSTANCE(htim->Instance)); + + /* Configure the Channel 5 in PWM mode */ + TIM_OC5_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel5*/ + htim->Instance->CCMR3 |= TIM_CCMR3_OC5PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR3 &= ~TIM_CCMR3_OC5FE; + htim->Instance->CCMR3 |= sConfig->OCFastMode; + break; + } +#endif /* TIM_CCER_CC5E */ + +#if defined(TIM_CCER_CC6E) + case TIM_CHANNEL_6: + { + /* Check the parameters */ + assert_param(IS_TIM_CC6_INSTANCE(htim->Instance)); + + /* Configure the Channel 6 in PWM mode */ + TIM_OC6_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel6 */ + htim->Instance->CCMR3 |= TIM_CCMR3_OC6PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR3 &= ~TIM_CCMR3_OC6FE; + htim->Instance->CCMR3 |= sConfig->OCFastMode << 8U; + break; + } +#endif /* TIM_CCER_CC6E */ + + default: + status = HAL_ERROR; + break; + } + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Initializes the TIM One Pulse Channels according to the specified + * parameters in the TIM_OnePulse_InitTypeDef. + * @param htim TIM One Pulse handle + * @param sConfig TIM One Pulse configuration structure + * @param OutputChannel TIM output channel to configure + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @param InputChannel TIM input Channel to configure + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @note To output a waveform with a minimum delay user can enable the fast + * mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx + * output is forced in response to the edge detection on TIx input, + * without taking in account the comparison. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, + uint32_t OutputChannel, uint32_t InputChannel) +{ + HAL_StatusTypeDef status = HAL_OK; + TIM_OC_InitTypeDef temp1; + + /* Check the parameters */ + assert_param(IS_TIM_OPM_CHANNELS(OutputChannel)); + assert_param(IS_TIM_OPM_CHANNELS(InputChannel)); + + if (OutputChannel != InputChannel) + { + /* Process Locked */ + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Extract the Output compare configuration from sConfig structure */ + temp1.OCMode = sConfig->OCMode; + temp1.Pulse = sConfig->Pulse; + temp1.OCPolarity = sConfig->OCPolarity; + temp1.OCNPolarity = sConfig->OCNPolarity; + temp1.OCIdleState = sConfig->OCIdleState; + temp1.OCNIdleState = sConfig->OCNIdleState; + + switch (OutputChannel) + { + case TIM_CHANNEL_1: + { + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + TIM_OC1_SetConfig(htim->Instance, &temp1); + break; + } + + case TIM_CHANNEL_2: + { + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + TIM_OC2_SetConfig(htim->Instance, &temp1); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + switch (InputChannel) + { + case TIM_CHANNEL_1: + { + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity, + sConfig->ICSelection, sConfig->ICFilter); + + /* Reset the IC1PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; + + /* Select the Trigger source */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= TIM_TS_TI1FP1; + + /* Select the Slave Mode */ + htim->Instance->SMCR &= ~TIM_SMCR_SMS; + htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER; + break; + } + + case TIM_CHANNEL_2: + { + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity, + sConfig->ICSelection, sConfig->ICFilter); + + /* Reset the IC2PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC; + + /* Select the Trigger source */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= TIM_TS_TI2FP2; + + /* Select the Slave Mode */ + htim->Instance->SMCR &= ~TIM_SMCR_SMS; + htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER; + break; + } + + default: + status = HAL_ERROR; + break; + } + } + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return status; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Configure the DMA Burst to transfer Data from the memory to the TIM peripheral + * @param htim TIM handle + * @param BurstBaseAddress TIM Base address from where the DMA will start the Data write + * This parameter can be one of the following values: + * @arg TIM_DMABASE_CR1 + * @arg TIM_DMABASE_CR2 + * @arg TIM_DMABASE_SMCR + * @arg TIM_DMABASE_DIER + * @arg TIM_DMABASE_SR + * @arg TIM_DMABASE_EGR + * @arg TIM_DMABASE_CCMR1 + * @arg TIM_DMABASE_CCMR2 + * @arg TIM_DMABASE_CCER + * @arg TIM_DMABASE_CNT + * @arg TIM_DMABASE_PSC + * @arg TIM_DMABASE_ARR + * @arg TIM_DMABASE_RCR + * @arg TIM_DMABASE_CCR1 + * @arg TIM_DMABASE_CCR2 + * @arg TIM_DMABASE_CCR3 + * @arg TIM_DMABASE_CCR4 + * @arg TIM_DMABASE_BDTR + * @arg TIM_DMABASE_OR + * @arg TIM_DMABASE_CCMR3 (*) + * @arg TIM_DMABASE_CCR5 (*) + * @arg TIM_DMABASE_CCR6 (*) + * (*) value not defined in all devices + * @param BurstRequestSrc TIM DMA Request sources + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: TIM update Interrupt source + * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source + * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source + * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source + * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source + * @arg TIM_DMA_COM: TIM Commutation DMA source + * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source + * @param BurstBuffer The Buffer address. + * @param BurstLength DMA Burst length. This parameter can be one value + * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. + * @note This function should be used only when BurstLength is equal to DMA data transfer length. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (status == HAL_OK) + { + status = HAL_TIM_DMABurst_MultiWriteStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength, + ((BurstLength) >> 8U) + 1U); + } + + + return status; +} + +/** + * @brief Configure the DMA Burst to transfer multiple Data from the memory to the TIM peripheral + * @param htim TIM handle + * @param BurstBaseAddress TIM Base address from where the DMA will start the Data write + * This parameter can be one of the following values: + * @arg TIM_DMABASE_CR1 + * @arg TIM_DMABASE_CR2 + * @arg TIM_DMABASE_SMCR + * @arg TIM_DMABASE_DIER + * @arg TIM_DMABASE_SR + * @arg TIM_DMABASE_EGR + * @arg TIM_DMABASE_CCMR1 + * @arg TIM_DMABASE_CCMR2 + * @arg TIM_DMABASE_CCER + * @arg TIM_DMABASE_CNT + * @arg TIM_DMABASE_PSC + * @arg TIM_DMABASE_ARR + * @arg TIM_DMABASE_RCR + * @arg TIM_DMABASE_CCR1 + * @arg TIM_DMABASE_CCR2 + * @arg TIM_DMABASE_CCR3 + * @arg TIM_DMABASE_CCR4 + * @arg TIM_DMABASE_BDTR + * @arg TIM_DMABASE_OR + * @arg TIM_DMABASE_CCMR3 (*) + * @arg TIM_DMABASE_CCR5 (*) + * @arg TIM_DMABASE_CCR6 (*) + * (*) value not defined in all devices + * @param BurstRequestSrc TIM DMA Request sources + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: TIM update Interrupt source + * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source + * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source + * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source + * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source + * @arg TIM_DMA_COM: TIM Commutation DMA source + * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source + * @param BurstBuffer The Buffer address. + * @param BurstLength DMA Burst length. This parameter can be one value + * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. + * @param DataLength Data length. This parameter can be one value + * between 1 and 0xFFFF. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, + uint32_t BurstLength, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance)); + assert_param(IS_TIM_DMA_BASE(BurstBaseAddress)); + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + assert_param(IS_TIM_DMA_LENGTH(BurstLength)); + assert_param(IS_TIM_DMA_DATA_LENGTH(DataLength)); + + if (htim->DMABurstState == HAL_DMA_BURST_STATE_BUSY) + { + return HAL_BUSY; + } + else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY) + { + if ((BurstBuffer == NULL) && (BurstLength > 0U)) + { + return HAL_ERROR; + } + else + { + htim->DMABurstState = HAL_DMA_BURST_STATE_BUSY; + } + } + else + { + /* nothing to do */ + } + + switch (BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + /* Set the DMA Period elapsed callbacks */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; + htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC4: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_COM: + { + /* Set the DMA commutation callbacks */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_TRIGGER: + { + /* Set the DMA trigger callbacks */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback = TIM_DMATriggerCplt; + htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Configure the DMA Burst Mode */ + htim->Instance->DCR = (BurstBaseAddress | BurstLength); + /* Enable the TIM DMA Request */ + __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc); + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM DMA Burst mode + * @param htim TIM handle + * @param BurstRequestSrc TIM DMA Request sources to disable + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + + /* Abort the DMA transfer (at least disable the DMA channel) */ + switch (BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]); + break; + } + case TIM_DMA_CC1: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + case TIM_DMA_CC2: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + case TIM_DMA_CC3: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + case TIM_DMA_CC4: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + case TIM_DMA_COM: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_COMMUTATION]); + break; + } + case TIM_DMA_TRIGGER: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]); + break; + } + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the TIM Update DMA request */ + __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc); + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + } + + /* Return function status */ + return status; +} + +/** + * @brief Configure the DMA Burst to transfer Data from the TIM peripheral to the memory + * @param htim TIM handle + * @param BurstBaseAddress TIM Base address from where the DMA will start the Data read + * This parameter can be one of the following values: + * @arg TIM_DMABASE_CR1 + * @arg TIM_DMABASE_CR2 + * @arg TIM_DMABASE_SMCR + * @arg TIM_DMABASE_DIER + * @arg TIM_DMABASE_SR + * @arg TIM_DMABASE_EGR + * @arg TIM_DMABASE_CCMR1 + * @arg TIM_DMABASE_CCMR2 + * @arg TIM_DMABASE_CCER + * @arg TIM_DMABASE_CNT + * @arg TIM_DMABASE_PSC + * @arg TIM_DMABASE_ARR + * @arg TIM_DMABASE_RCR + * @arg TIM_DMABASE_CCR1 + * @arg TIM_DMABASE_CCR2 + * @arg TIM_DMABASE_CCR3 + * @arg TIM_DMABASE_CCR4 + * @arg TIM_DMABASE_BDTR + * @arg TIM_DMABASE_OR + * @arg TIM_DMABASE_CCMR3 (*) + * @arg TIM_DMABASE_CCR5 (*) + * @arg TIM_DMABASE_CCR6 (*) + * (*) value not defined in all devices + * @param BurstRequestSrc TIM DMA Request sources + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: TIM update Interrupt source + * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source + * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source + * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source + * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source + * @arg TIM_DMA_COM: TIM Commutation DMA source + * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source + * @param BurstBuffer The Buffer address. + * @param BurstLength DMA Burst length. This parameter can be one value + * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. + * @note This function should be used only when BurstLength is equal to DMA data transfer length. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (status == HAL_OK) + { + status = HAL_TIM_DMABurst_MultiReadStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength, + ((BurstLength) >> 8U) + 1U); + } + + return status; +} + +/** + * @brief Configure the DMA Burst to transfer Data from the TIM peripheral to the memory + * @param htim TIM handle + * @param BurstBaseAddress TIM Base address from where the DMA will start the Data read + * This parameter can be one of the following values: + * @arg TIM_DMABASE_CR1 + * @arg TIM_DMABASE_CR2 + * @arg TIM_DMABASE_SMCR + * @arg TIM_DMABASE_DIER + * @arg TIM_DMABASE_SR + * @arg TIM_DMABASE_EGR + * @arg TIM_DMABASE_CCMR1 + * @arg TIM_DMABASE_CCMR2 + * @arg TIM_DMABASE_CCER + * @arg TIM_DMABASE_CNT + * @arg TIM_DMABASE_PSC + * @arg TIM_DMABASE_ARR + * @arg TIM_DMABASE_RCR + * @arg TIM_DMABASE_CCR1 + * @arg TIM_DMABASE_CCR2 + * @arg TIM_DMABASE_CCR3 + * @arg TIM_DMABASE_CCR4 + * @arg TIM_DMABASE_BDTR + * @arg TIM_DMABASE_OR + * @arg TIM_DMABASE_CCMR3 (*) + * @arg TIM_DMABASE_CCR5 (*) + * @arg TIM_DMABASE_CCR6 (*) + * (*) value not defined in all devices + * @param BurstRequestSrc TIM DMA Request sources + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: TIM update Interrupt source + * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source + * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source + * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source + * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source + * @arg TIM_DMA_COM: TIM Commutation DMA source + * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source + * @param BurstBuffer The Buffer address. + * @param BurstLength DMA Burst length. This parameter can be one value + * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. + * @param DataLength Data length. This parameter can be one value + * between 1 and 0xFFFF. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, + uint32_t BurstLength, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance)); + assert_param(IS_TIM_DMA_BASE(BurstBaseAddress)); + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + assert_param(IS_TIM_DMA_LENGTH(BurstLength)); + assert_param(IS_TIM_DMA_DATA_LENGTH(DataLength)); + + if (htim->DMABurstState == HAL_DMA_BURST_STATE_BUSY) + { + return HAL_BUSY; + } + else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY) + { + if ((BurstBuffer == NULL) && (BurstLength > 0U)) + { + return HAL_ERROR; + } + else + { + htim->DMABurstState = HAL_DMA_BURST_STATE_BUSY; + } + } + else + { + /* nothing to do */ + } + switch (BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + /* Set the DMA Period elapsed callbacks */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; + htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC1: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC2: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC3: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC4: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_COM: + { + /* Set the DMA commutation callbacks */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_TRIGGER: + { + /* Set the DMA trigger callbacks */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback = TIM_DMATriggerCplt; + htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Configure the DMA Burst Mode */ + htim->Instance->DCR = (BurstBaseAddress | BurstLength); + + /* Enable the TIM DMA Request */ + __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc); + } + + /* Return function status */ + return status; +} + +/** + * @brief Stop the DMA burst reading + * @param htim TIM handle + * @param BurstRequestSrc TIM DMA Request sources to disable. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + + /* Abort the DMA transfer (at least disable the DMA channel) */ + switch (BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]); + break; + } + case TIM_DMA_CC1: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + case TIM_DMA_CC2: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + case TIM_DMA_CC3: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + case TIM_DMA_CC4: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + case TIM_DMA_COM: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_COMMUTATION]); + break; + } + case TIM_DMA_TRIGGER: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]); + break; + } + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the TIM Update DMA request */ + __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc); + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + } + + /* Return function status */ + return status; +} + +/** + * @brief Generate a software event + * @param htim TIM handle + * @param EventSource specifies the event source. + * This parameter can be one of the following values: + * @arg TIM_EVENTSOURCE_UPDATE: Timer update Event source + * @arg TIM_EVENTSOURCE_CC1: Timer Capture Compare 1 Event source + * @arg TIM_EVENTSOURCE_CC2: Timer Capture Compare 2 Event source + * @arg TIM_EVENTSOURCE_CC3: Timer Capture Compare 3 Event source + * @arg TIM_EVENTSOURCE_CC4: Timer Capture Compare 4 Event source + * @arg TIM_EVENTSOURCE_COM: Timer COM event source + * @arg TIM_EVENTSOURCE_TRIGGER: Timer Trigger Event source + * @arg TIM_EVENTSOURCE_BREAK: Timer Break event source + * @arg TIM_EVENTSOURCE_BREAK2: Timer Break2 event source + * @note Basic timers can only generate an update event. + * @note TIM_EVENTSOURCE_COM is relevant only with advanced timer instances. + * @note TIM_EVENTSOURCE_BREAK are relevant only for timer instances + * supporting a break input. + * @retval HAL status + */ + +HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_EVENT_SOURCE(EventSource)); + + /* Process Locked */ + __HAL_LOCK(htim); + + /* Change the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Set the event sources */ + htim->Instance->EGR = EventSource; + + /* Change the TIM state */ + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Configures the OCRef clear feature + * @param htim TIM handle + * @param sClearInputConfig pointer to a TIM_ClearInputConfigTypeDef structure that + * contains the OCREF clear feature and parameters for the TIM peripheral. + * @param Channel specifies the TIM Channel + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 + * @arg TIM_CHANNEL_2: TIM Channel 2 + * @arg TIM_CHANNEL_3: TIM Channel 3 + * @arg TIM_CHANNEL_4: TIM Channel 4 + * @arg TIM_CHANNEL_5: TIM Channel 5 (*) + * @arg TIM_CHANNEL_6: TIM Channel 6 (*) + * (*) Value not defined for all devices + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, + TIM_ClearInputConfigTypeDef *sClearInputConfig, + uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_OCXREF_CLEAR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_CLEARINPUT_SOURCE(sClearInputConfig->ClearInputSource)); + + /* Process Locked */ + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + switch (sClearInputConfig->ClearInputSource) + { + case TIM_CLEARINPUTSOURCE_NONE: + { + /* Clear the OCREF clear selection bit and the the ETR Bits */ +#if defined(TIM_SMCR_OCCS) + CLEAR_BIT(htim->Instance->SMCR, (TIM_SMCR_OCCS | TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP)); +#else + CLEAR_BIT(htim->Instance->SMCR, (TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP)); +#endif /* TIM_SMCR_OCCS */ + break; + } +#if defined(TIM_SMCR_OCCS) + case TIM_CLEARINPUTSOURCE_OCREFCLR: + { + /* Clear the OCREF clear selection bit */ + CLEAR_BIT(htim->Instance->SMCR, TIM_SMCR_OCCS); + } + break; +#endif /* TIM_SMCR_OCCS */ + + case TIM_CLEARINPUTSOURCE_ETR: + { + /* Check the parameters */ + assert_param(IS_TIM_CLEARINPUT_POLARITY(sClearInputConfig->ClearInputPolarity)); + assert_param(IS_TIM_CLEARINPUT_PRESCALER(sClearInputConfig->ClearInputPrescaler)); + assert_param(IS_TIM_CLEARINPUT_FILTER(sClearInputConfig->ClearInputFilter)); + + /* When OCRef clear feature is used with ETR source, ETR prescaler must be off */ + if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1) + { + htim->State = HAL_TIM_STATE_READY; + __HAL_UNLOCK(htim); + return HAL_ERROR; + } + + TIM_ETR_SetConfig(htim->Instance, + sClearInputConfig->ClearInputPrescaler, + sClearInputConfig->ClearInputPolarity, + sClearInputConfig->ClearInputFilter); +#if defined(TIM_SMCR_OCCS) + + /* Set the OCREF clear selection bit */ + SET_BIT(htim->Instance->SMCR, TIM_SMCR_OCCS); +#endif /* TIM_SMCR_OCCS */ + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + switch (Channel) + { + case TIM_CHANNEL_1: + { + if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) + { + /* Enable the OCREF clear feature for Channel 1 */ + SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE); + } + else + { + /* Disable the OCREF clear feature for Channel 1 */ + CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE); + } + break; + } + case TIM_CHANNEL_2: + { + if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) + { + /* Enable the OCREF clear feature for Channel 2 */ + SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE); + } + else + { + /* Disable the OCREF clear feature for Channel 2 */ + CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE); + } + break; + } + case TIM_CHANNEL_3: + { + if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) + { + /* Enable the OCREF clear feature for Channel 3 */ + SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE); + } + else + { + /* Disable the OCREF clear feature for Channel 3 */ + CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE); + } + break; + } + case TIM_CHANNEL_4: + { + if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) + { + /* Enable the OCREF clear feature for Channel 4 */ + SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE); + } + else + { + /* Disable the OCREF clear feature for Channel 4 */ + CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE); + } + break; + } +#if defined(TIM_CCER_CC5E) + case TIM_CHANNEL_5: + { + if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) + { + /* Enable the OCREF clear feature for Channel 5 */ + SET_BIT(htim->Instance->CCMR3, TIM_CCMR3_OC5CE); + } + else + { + /* Disable the OCREF clear feature for Channel 5 */ + CLEAR_BIT(htim->Instance->CCMR3, TIM_CCMR3_OC5CE); + } + break; + } +#endif /* TIM_CCER_CC5E */ +#if defined(TIM_CCER_CC6E) + case TIM_CHANNEL_6: + { + if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) + { + /* Enable the OCREF clear feature for Channel 6 */ + SET_BIT(htim->Instance->CCMR3, TIM_CCMR3_OC6CE); + } + else + { + /* Disable the OCREF clear feature for Channel 6 */ + CLEAR_BIT(htim->Instance->CCMR3, TIM_CCMR3_OC6CE); + } + break; + } +#endif /* TIM_CCER_CC6E */ + default: + break; + } + } + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Configures the clock source to be used + * @param htim TIM handle + * @param sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that + * contains the clock source information for the TIM peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Process Locked */ + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Check the parameters */ + assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource)); + + /* Reset the SMS, TS, ECE, ETPS and ETRF bits */ + tmpsmcr = htim->Instance->SMCR; + tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS); + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + htim->Instance->SMCR = tmpsmcr; + + switch (sClockSourceConfig->ClockSource) + { + case TIM_CLOCKSOURCE_INTERNAL: + { + assert_param(IS_TIM_INSTANCE(htim->Instance)); + break; + } + + case TIM_CLOCKSOURCE_ETRMODE1: + { + /* Check whether or not the timer instance supports external trigger input mode 1 (ETRF)*/ + assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance)); + + /* Check ETR input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + /* Configure the ETR Clock source */ + TIM_ETR_SetConfig(htim->Instance, + sClockSourceConfig->ClockPrescaler, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + + /* Select the External clock mode1 and the ETRF trigger */ + tmpsmcr = htim->Instance->SMCR; + tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1); + /* Write to TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + break; + } + + case TIM_CLOCKSOURCE_ETRMODE2: + { + /* Check whether or not the timer instance supports external trigger input mode 2 (ETRF)*/ + assert_param(IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(htim->Instance)); + + /* Check ETR input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + /* Configure the ETR Clock source */ + TIM_ETR_SetConfig(htim->Instance, + sClockSourceConfig->ClockPrescaler, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + /* Enable the External clock mode2 */ + htim->Instance->SMCR |= TIM_SMCR_ECE; + break; + } + + case TIM_CLOCKSOURCE_TI1: + { + /* Check whether or not the timer instance supports external clock mode 1 */ + assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); + + /* Check TI1 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI1_ConfigInputStage(htim->Instance, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1); + break; + } + + case TIM_CLOCKSOURCE_TI2: + { + /* Check whether or not the timer instance supports external clock mode 1 (ETRF)*/ + assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); + + /* Check TI2 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI2_ConfigInputStage(htim->Instance, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2); + break; + } + + case TIM_CLOCKSOURCE_TI1ED: + { + /* Check whether or not the timer instance supports external clock mode 1 */ + assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); + + /* Check TI1 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI1_ConfigInputStage(htim->Instance, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED); + break; + } + + case TIM_CLOCKSOURCE_ITR0: + case TIM_CLOCKSOURCE_ITR1: + case TIM_CLOCKSOURCE_ITR2: + case TIM_CLOCKSOURCE_ITR3: + { + /* Check whether or not the timer instance supports internal trigger input */ + assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance)); + + TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource); + break; + } + + default: + status = HAL_ERROR; + break; + } + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Selects the signal connected to the TI1 input: direct from CH1_input + * or a XOR combination between CH1_input, CH2_input & CH3_input + * @param htim TIM handle. + * @param TI1_Selection Indicate whether or not channel 1 is connected to the + * output of a XOR gate. + * This parameter can be one of the following values: + * @arg TIM_TI1SELECTION_CH1: The TIMx_CH1 pin is connected to TI1 input + * @arg TIM_TI1SELECTION_XORCOMBINATION: The TIMx_CH1, CH2 and CH3 + * pins are connected to the TI1 input (XOR combination) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection) +{ + uint32_t tmpcr2; + + /* Check the parameters */ + assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TI1SELECTION(TI1_Selection)); + + /* Get the TIMx CR2 register value */ + tmpcr2 = htim->Instance->CR2; + + /* Reset the TI1 selection */ + tmpcr2 &= ~TIM_CR2_TI1S; + + /* Set the TI1 selection */ + tmpcr2 |= TI1_Selection; + + /* Write to TIMxCR2 */ + htim->Instance->CR2 = tmpcr2; + + return HAL_OK; +} + +/** + * @brief Configures the TIM in Slave mode + * @param htim TIM handle. + * @param sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that + * contains the selected trigger (internal trigger input, filtered + * timer input or external trigger input) and the Slave mode + * (Disable, Reset, Gated, Trigger, External clock mode 1). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig) +{ + /* Check the parameters */ + assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance)); + assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode)); + assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger)); + + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK) + { + htim->State = HAL_TIM_STATE_READY; + __HAL_UNLOCK(htim); + return HAL_ERROR; + } + + /* Disable Trigger Interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_TRIGGER); + + /* Disable Trigger DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER); + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configures the TIM in Slave mode in interrupt mode + * @param htim TIM handle. + * @param sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that + * contains the selected trigger (internal trigger input, filtered + * timer input or external trigger input) and the Slave mode + * (Disable, Reset, Gated, Trigger, External clock mode 1). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, + TIM_SlaveConfigTypeDef *sSlaveConfig) +{ + /* Check the parameters */ + assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance)); + assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode)); + assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger)); + + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK) + { + htim->State = HAL_TIM_STATE_READY; + __HAL_UNLOCK(htim); + return HAL_ERROR; + } + + /* Enable Trigger Interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_TRIGGER); + + /* Disable Trigger DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER); + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Read the captured value from Capture Compare unit + * @param htim TIM handle. + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval Captured value + */ +uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpreg = 0U; + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + /* Return the capture 1 value */ + tmpreg = htim->Instance->CCR1; + + break; + } + case TIM_CHANNEL_2: + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Return the capture 2 value */ + tmpreg = htim->Instance->CCR2; + + break; + } + + case TIM_CHANNEL_3: + { + /* Check the parameters */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + /* Return the capture 3 value */ + tmpreg = htim->Instance->CCR3; + + break; + } + + case TIM_CHANNEL_4: + { + /* Check the parameters */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + /* Return the capture 4 value */ + tmpreg = htim->Instance->CCR4; + + break; + } + + default: + break; + } + + return tmpreg; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions + * @brief TIM Callbacks functions + * +@verbatim + ============================================================================== + ##### TIM Callbacks functions ##### + ============================================================================== + [..] + This section provides TIM callback functions: + (+) TIM Period elapsed callback + (+) TIM Output Compare callback + (+) TIM Input capture callback + (+) TIM Trigger callback + (+) TIM Error callback + +@endverbatim + * @{ + */ + +/** + * @brief Period elapsed callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PeriodElapsedCallback could be implemented in the user file + */ +} + +/** + * @brief Period elapsed half complete callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PeriodElapsedHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Output Compare callback in non-blocking mode + * @param htim TIM OC handle + * @retval None + */ +__weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file + */ +} + +/** + * @brief Input Capture callback in non-blocking mode + * @param htim TIM IC handle + * @retval None + */ +__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_IC_CaptureCallback could be implemented in the user file + */ +} + +/** + * @brief Input Capture half complete callback in non-blocking mode + * @param htim TIM IC handle + * @retval None + */ +__weak void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_IC_CaptureHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief PWM Pulse finished callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file + */ +} + +/** + * @brief PWM Pulse finished half complete callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PWM_PulseFinishedHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Hall Trigger detection callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_TriggerCallback could be implemented in the user file + */ +} + +/** + * @brief Hall Trigger detection half complete callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_TriggerHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Timer error callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_ErrorCallback could be implemented in the user file + */ +} + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +/** + * @brief Register a User TIM callback to be used instead of the weak predefined callback + * @param htim tim handle + * @param CallbackID ID of the callback to be registered + * This parameter can be one of the following values: + * @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID + * @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID + * @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID + * @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID + * @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID + * @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID + * @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID + * @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID + * @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID + * @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID + * @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID + * @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID + * @arg @ref HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID Hall Sensor MspInit Callback ID + * @arg @ref HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID Hall Sensor MspDeInit Callback ID + * @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID + * @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID + * @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID + * @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID + * @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID + * @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID + * @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID + * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID + * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID + * @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID + * @arg @ref HAL_TIM_COMMUTATION_CB_ID Commutation Callback ID + * @arg @ref HAL_TIM_COMMUTATION_HALF_CB_ID Commutation half complete Callback ID + * @arg @ref HAL_TIM_BREAK_CB_ID Break Callback ID +#if defined(TIM_BDTR_BK2E) + * @arg @ref HAL_TIM_BREAK2_CB_ID Break2 Callback ID +#endif + * @param pCallback pointer to the callback function + * @retval status + */ +HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, + pTIM_CallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + return HAL_ERROR; + } + /* Process locked */ + __HAL_LOCK(htim); + + if (htim->State == HAL_TIM_STATE_READY) + { + switch (CallbackID) + { + case HAL_TIM_BASE_MSPINIT_CB_ID : + htim->Base_MspInitCallback = pCallback; + break; + + case HAL_TIM_BASE_MSPDEINIT_CB_ID : + htim->Base_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_IC_MSPINIT_CB_ID : + htim->IC_MspInitCallback = pCallback; + break; + + case HAL_TIM_IC_MSPDEINIT_CB_ID : + htim->IC_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_OC_MSPINIT_CB_ID : + htim->OC_MspInitCallback = pCallback; + break; + + case HAL_TIM_OC_MSPDEINIT_CB_ID : + htim->OC_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_PWM_MSPINIT_CB_ID : + htim->PWM_MspInitCallback = pCallback; + break; + + case HAL_TIM_PWM_MSPDEINIT_CB_ID : + htim->PWM_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : + htim->OnePulse_MspInitCallback = pCallback; + break; + + case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : + htim->OnePulse_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_ENCODER_MSPINIT_CB_ID : + htim->Encoder_MspInitCallback = pCallback; + break; + + case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : + htim->Encoder_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : + htim->HallSensor_MspInitCallback = pCallback; + break; + + case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : + htim->HallSensor_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_PERIOD_ELAPSED_CB_ID : + htim->PeriodElapsedCallback = pCallback; + break; + + case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID : + htim->PeriodElapsedHalfCpltCallback = pCallback; + break; + + case HAL_TIM_TRIGGER_CB_ID : + htim->TriggerCallback = pCallback; + break; + + case HAL_TIM_TRIGGER_HALF_CB_ID : + htim->TriggerHalfCpltCallback = pCallback; + break; + + case HAL_TIM_IC_CAPTURE_CB_ID : + htim->IC_CaptureCallback = pCallback; + break; + + case HAL_TIM_IC_CAPTURE_HALF_CB_ID : + htim->IC_CaptureHalfCpltCallback = pCallback; + break; + + case HAL_TIM_OC_DELAY_ELAPSED_CB_ID : + htim->OC_DelayElapsedCallback = pCallback; + break; + + case HAL_TIM_PWM_PULSE_FINISHED_CB_ID : + htim->PWM_PulseFinishedCallback = pCallback; + break; + + case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID : + htim->PWM_PulseFinishedHalfCpltCallback = pCallback; + break; + + case HAL_TIM_ERROR_CB_ID : + htim->ErrorCallback = pCallback; + break; + + case HAL_TIM_COMMUTATION_CB_ID : + htim->CommutationCallback = pCallback; + break; + + case HAL_TIM_COMMUTATION_HALF_CB_ID : + htim->CommutationHalfCpltCallback = pCallback; + break; + + case HAL_TIM_BREAK_CB_ID : + htim->BreakCallback = pCallback; + break; +#if defined(TIM_BDTR_BK2E) + + case HAL_TIM_BREAK2_CB_ID : + htim->Break2Callback = pCallback; + break; +#endif /* TIM_BDTR_BK2E */ + + default : + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (htim->State == HAL_TIM_STATE_RESET) + { + switch (CallbackID) + { + case HAL_TIM_BASE_MSPINIT_CB_ID : + htim->Base_MspInitCallback = pCallback; + break; + + case HAL_TIM_BASE_MSPDEINIT_CB_ID : + htim->Base_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_IC_MSPINIT_CB_ID : + htim->IC_MspInitCallback = pCallback; + break; + + case HAL_TIM_IC_MSPDEINIT_CB_ID : + htim->IC_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_OC_MSPINIT_CB_ID : + htim->OC_MspInitCallback = pCallback; + break; + + case HAL_TIM_OC_MSPDEINIT_CB_ID : + htim->OC_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_PWM_MSPINIT_CB_ID : + htim->PWM_MspInitCallback = pCallback; + break; + + case HAL_TIM_PWM_MSPDEINIT_CB_ID : + htim->PWM_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : + htim->OnePulse_MspInitCallback = pCallback; + break; + + case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : + htim->OnePulse_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_ENCODER_MSPINIT_CB_ID : + htim->Encoder_MspInitCallback = pCallback; + break; + + case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : + htim->Encoder_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : + htim->HallSensor_MspInitCallback = pCallback; + break; + + case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : + htim->HallSensor_MspDeInitCallback = pCallback; + break; + + default : + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Unregister a TIM callback + * TIM callback is redirected to the weak predefined callback + * @param htim tim handle + * @param CallbackID ID of the callback to be unregistered + * This parameter can be one of the following values: + * @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID + * @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID + * @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID + * @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID + * @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID + * @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID + * @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID + * @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID + * @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID + * @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID + * @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID + * @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID + * @arg @ref HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID Hall Sensor MspInit Callback ID + * @arg @ref HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID Hall Sensor MspDeInit Callback ID + * @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID + * @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID + * @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID + * @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID + * @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID + * @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID + * @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID + * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID + * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID + * @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID + * @arg @ref HAL_TIM_COMMUTATION_CB_ID Commutation Callback ID + * @arg @ref HAL_TIM_COMMUTATION_HALF_CB_ID Commutation half complete Callback ID + * @arg @ref HAL_TIM_BREAK_CB_ID Break Callback ID +#if defined(TIM_BDTR_BK2E) + * @arg @ref HAL_TIM_BREAK2_CB_ID Break2 Callback ID +#endif + * @retval status + */ +HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(htim); + + if (htim->State == HAL_TIM_STATE_READY) + { + switch (CallbackID) + { + case HAL_TIM_BASE_MSPINIT_CB_ID : + /* Legacy weak Base MspInit Callback */ + htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; + break; + + case HAL_TIM_BASE_MSPDEINIT_CB_ID : + /* Legacy weak Base Msp DeInit Callback */ + htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; + break; + + case HAL_TIM_IC_MSPINIT_CB_ID : + /* Legacy weak IC Msp Init Callback */ + htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; + break; + + case HAL_TIM_IC_MSPDEINIT_CB_ID : + /* Legacy weak IC Msp DeInit Callback */ + htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; + break; + + case HAL_TIM_OC_MSPINIT_CB_ID : + /* Legacy weak OC Msp Init Callback */ + htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; + break; + + case HAL_TIM_OC_MSPDEINIT_CB_ID : + /* Legacy weak OC Msp DeInit Callback */ + htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; + break; + + case HAL_TIM_PWM_MSPINIT_CB_ID : + /* Legacy weak PWM Msp Init Callback */ + htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; + break; + + case HAL_TIM_PWM_MSPDEINIT_CB_ID : + /* Legacy weak PWM Msp DeInit Callback */ + htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; + break; + + case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : + /* Legacy weak One Pulse Msp Init Callback */ + htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; + break; + + case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : + /* Legacy weak One Pulse Msp DeInit Callback */ + htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; + break; + + case HAL_TIM_ENCODER_MSPINIT_CB_ID : + /* Legacy weak Encoder Msp Init Callback */ + htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; + break; + + case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : + /* Legacy weak Encoder Msp DeInit Callback */ + htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; + break; + + case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : + /* Legacy weak Hall Sensor Msp Init Callback */ + htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; + break; + + case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : + /* Legacy weak Hall Sensor Msp DeInit Callback */ + htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; + break; + + case HAL_TIM_PERIOD_ELAPSED_CB_ID : + /* Legacy weak Period Elapsed Callback */ + htim->PeriodElapsedCallback = HAL_TIM_PeriodElapsedCallback; + break; + + case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID : + /* Legacy weak Period Elapsed half complete Callback */ + htim->PeriodElapsedHalfCpltCallback = HAL_TIM_PeriodElapsedHalfCpltCallback; + break; + + case HAL_TIM_TRIGGER_CB_ID : + /* Legacy weak Trigger Callback */ + htim->TriggerCallback = HAL_TIM_TriggerCallback; + break; + + case HAL_TIM_TRIGGER_HALF_CB_ID : + /* Legacy weak Trigger half complete Callback */ + htim->TriggerHalfCpltCallback = HAL_TIM_TriggerHalfCpltCallback; + break; + + case HAL_TIM_IC_CAPTURE_CB_ID : + /* Legacy weak IC Capture Callback */ + htim->IC_CaptureCallback = HAL_TIM_IC_CaptureCallback; + break; + + case HAL_TIM_IC_CAPTURE_HALF_CB_ID : + /* Legacy weak IC Capture half complete Callback */ + htim->IC_CaptureHalfCpltCallback = HAL_TIM_IC_CaptureHalfCpltCallback; + break; + + case HAL_TIM_OC_DELAY_ELAPSED_CB_ID : + /* Legacy weak OC Delay Elapsed Callback */ + htim->OC_DelayElapsedCallback = HAL_TIM_OC_DelayElapsedCallback; + break; + + case HAL_TIM_PWM_PULSE_FINISHED_CB_ID : + /* Legacy weak PWM Pulse Finished Callback */ + htim->PWM_PulseFinishedCallback = HAL_TIM_PWM_PulseFinishedCallback; + break; + + case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID : + /* Legacy weak PWM Pulse Finished half complete Callback */ + htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; + break; + + case HAL_TIM_ERROR_CB_ID : + /* Legacy weak Error Callback */ + htim->ErrorCallback = HAL_TIM_ErrorCallback; + break; + + case HAL_TIM_COMMUTATION_CB_ID : + /* Legacy weak Commutation Callback */ + htim->CommutationCallback = HAL_TIMEx_CommutCallback; + break; + + case HAL_TIM_COMMUTATION_HALF_CB_ID : + /* Legacy weak Commutation half complete Callback */ + htim->CommutationHalfCpltCallback = HAL_TIMEx_CommutHalfCpltCallback; + break; + + case HAL_TIM_BREAK_CB_ID : + /* Legacy weak Break Callback */ + htim->BreakCallback = HAL_TIMEx_BreakCallback; + break; +#if defined(TIM_BDTR_BK2E) + + case HAL_TIM_BREAK2_CB_ID : + /* Legacy weak Break2 Callback */ + htim->Break2Callback = HAL_TIMEx_Break2Callback; + break; +#endif /* TIM_BDTR_BK2E */ + + default : + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (htim->State == HAL_TIM_STATE_RESET) + { + switch (CallbackID) + { + case HAL_TIM_BASE_MSPINIT_CB_ID : + /* Legacy weak Base MspInit Callback */ + htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; + break; + + case HAL_TIM_BASE_MSPDEINIT_CB_ID : + /* Legacy weak Base Msp DeInit Callback */ + htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; + break; + + case HAL_TIM_IC_MSPINIT_CB_ID : + /* Legacy weak IC Msp Init Callback */ + htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; + break; + + case HAL_TIM_IC_MSPDEINIT_CB_ID : + /* Legacy weak IC Msp DeInit Callback */ + htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; + break; + + case HAL_TIM_OC_MSPINIT_CB_ID : + /* Legacy weak OC Msp Init Callback */ + htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; + break; + + case HAL_TIM_OC_MSPDEINIT_CB_ID : + /* Legacy weak OC Msp DeInit Callback */ + htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; + break; + + case HAL_TIM_PWM_MSPINIT_CB_ID : + /* Legacy weak PWM Msp Init Callback */ + htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; + break; + + case HAL_TIM_PWM_MSPDEINIT_CB_ID : + /* Legacy weak PWM Msp DeInit Callback */ + htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; + break; + + case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : + /* Legacy weak One Pulse Msp Init Callback */ + htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; + break; + + case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : + /* Legacy weak One Pulse Msp DeInit Callback */ + htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; + break; + + case HAL_TIM_ENCODER_MSPINIT_CB_ID : + /* Legacy weak Encoder Msp Init Callback */ + htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; + break; + + case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : + /* Legacy weak Encoder Msp DeInit Callback */ + htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; + break; + + case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : + /* Legacy weak Hall Sensor Msp Init Callback */ + htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; + break; + + case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : + /* Legacy weak Hall Sensor Msp DeInit Callback */ + htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; + break; + + default : + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return status; +} +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions + * @brief TIM Peripheral State functions + * +@verbatim + ============================================================================== + ##### Peripheral State functions ##### + ============================================================================== + [..] + This subsection permits to get in run-time the status of the peripheral + and the data flow. + +@endverbatim + * @{ + */ + +/** + * @brief Return the TIM Base handle state. + * @param htim TIM Base handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM OC handle state. + * @param htim TIM Output Compare handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM PWM handle state. + * @param htim TIM handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM Input Capture handle state. + * @param htim TIM IC handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM One Pulse Mode handle state. + * @param htim TIM OPM handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM Encoder Mode handle state. + * @param htim TIM Encoder Interface handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM Encoder Mode handle state. + * @param htim TIM handle + * @retval Active channel + */ +HAL_TIM_ActiveChannel HAL_TIM_GetActiveChannel(TIM_HandleTypeDef *htim) +{ + return htim->Channel; +} + +/** + * @brief Return actual state of the TIM channel. + * @param htim TIM handle + * @param Channel TIM Channel + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 + * @arg TIM_CHANNEL_2: TIM Channel 2 + * @arg TIM_CHANNEL_3: TIM Channel 3 + * @arg TIM_CHANNEL_4: TIM Channel 4 + * @arg TIM_CHANNEL_5: TIM Channel 5 + * @arg TIM_CHANNEL_6: TIM Channel 6 + * @retval TIM Channel state + */ +HAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_TIM_ChannelStateTypeDef channel_state; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); + + return channel_state; +} + +/** + * @brief Return actual state of a DMA burst operation. + * @param htim TIM handle + * @retval DMA burst state + */ +HAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance)); + + return htim->DMABurstState; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup TIM_Private_Functions TIM Private Functions + * @{ + */ + +/** + * @brief TIM DMA error callback + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIM_DMAError(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + htim->State = HAL_TIM_STATE_READY; + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->ErrorCallback(htim); +#else + HAL_TIM_ErrorCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Delay Pulse complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); + } + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Delay Pulse half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PWM_PulseFinishedHalfCpltCallback(htim); +#else + HAL_TIM_PWM_PulseFinishedHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Capture complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); + } + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Capture half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureHalfCpltCallback(htim); +#else + HAL_TIM_IC_CaptureHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Period Elapse complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (htim->hdma[TIM_DMA_ID_UPDATE]->Init.Mode == DMA_NORMAL) + { + htim->State = HAL_TIM_STATE_READY; + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PeriodElapsedCallback(htim); +#else + HAL_TIM_PeriodElapsedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief TIM DMA Period Elapse half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PeriodElapsedHalfCpltCallback(htim); +#else + HAL_TIM_PeriodElapsedHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief TIM DMA Trigger callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (htim->hdma[TIM_DMA_ID_TRIGGER]->Init.Mode == DMA_NORMAL) + { + htim->State = HAL_TIM_STATE_READY; + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->TriggerCallback(htim); +#else + HAL_TIM_TriggerCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief TIM DMA Trigger half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->TriggerHalfCpltCallback(htim); +#else + HAL_TIM_TriggerHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief Time Base configuration + * @param TIMx TIM peripheral + * @param Structure TIM Base configuration structure + * @retval None + */ +void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure) +{ + uint32_t tmpcr1; + tmpcr1 = TIMx->CR1; + + /* Set TIM Time Base Unit parameters ---------------------------------------*/ + if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) + { + /* Select the Counter Mode */ + tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS); + tmpcr1 |= Structure->CounterMode; + } + + if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx)) + { + /* Set the clock division */ + tmpcr1 &= ~TIM_CR1_CKD; + tmpcr1 |= (uint32_t)Structure->ClockDivision; + } + + /* Set the auto-reload preload */ + MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload); + + TIMx->CR1 = tmpcr1; + + /* Set the Autoreload value */ + TIMx->ARR = (uint32_t)Structure->Period ; + + /* Set the Prescaler value */ + TIMx->PSC = Structure->Prescaler; + + if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx)) + { + /* Set the Repetition Counter value */ + TIMx->RCR = Structure->RepetitionCounter; + } + + /* Generate an update event to reload the Prescaler + and the repetition counter (only for advanced timer) value immediately */ + TIMx->EGR = TIM_EGR_UG; +} + +/** + * @brief Timer Output Compare 1 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the Channel 1: Reset the CC1E Bit */ + TIMx->CCER &= ~TIM_CCER_CC1E; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR1; + + /* Reset the Output Compare Mode Bits */ + tmpccmrx &= ~TIM_CCMR1_OC1M; + tmpccmrx &= ~TIM_CCMR1_CC1S; + /* Select the Output Compare Mode */ + tmpccmrx |= OC_Config->OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC1P; + /* Set the Output Compare Polarity */ + tmpccer |= OC_Config->OCPolarity; + + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1)) + { + /* Check parameters */ + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC1NP; + /* Set the Output N Polarity */ + tmpccer |= OC_Config->OCNPolarity; + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC1NE; + } + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS1; + tmpcr2 &= ~TIM_CR2_OIS1N; + /* Set the Output Idle state */ + tmpcr2 |= OC_Config->OCIdleState; + /* Set the Output N Idle state */ + tmpcr2 |= OC_Config->OCNIdleState; + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR1 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Timer Output Compare 2 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC2E; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR1; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= ~TIM_CCMR1_OC2M; + tmpccmrx &= ~TIM_CCMR1_CC2S; + + /* Select the Output Compare Mode */ + tmpccmrx |= (OC_Config->OCMode << 8U); + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC2P; + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 4U); + + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2)) + { + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC2NP; + /* Set the Output N Polarity */ + tmpccer |= (OC_Config->OCNPolarity << 4U); + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC2NE; + + } + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS2; +#if defined(TIM_CR2_OIS2N) + tmpcr2 &= ~TIM_CR2_OIS2N; +#endif /* TIM_CR2_OIS2N */ + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 2U); + /* Set the Output N Idle state */ + tmpcr2 |= (OC_Config->OCNIdleState << 2U); + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR2 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Timer Output Compare 3 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the Channel 3: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC3E; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR2 register value */ + tmpccmrx = TIMx->CCMR2; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= ~TIM_CCMR2_OC3M; + tmpccmrx &= ~TIM_CCMR2_CC3S; + /* Select the Output Compare Mode */ + tmpccmrx |= OC_Config->OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC3P; + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 8U); + + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3)) + { + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC3NP; + /* Set the Output N Polarity */ + tmpccer |= (OC_Config->OCNPolarity << 8U); + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC3NE; + } + +#if defined(TIM_CR2_OIS3) + if (IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS3; + tmpcr2 &= ~TIM_CR2_OIS3N; + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 4U); + /* Set the Output N Idle state */ + tmpcr2 |= (OC_Config->OCNIdleState << 4U); + } +#endif /* TIM_CR2_OIS3 */ + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR3 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Timer Output Compare 4 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the Channel 4: Reset the CC4E Bit */ + TIMx->CCER &= ~TIM_CCER_CC4E; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR2 register value */ + tmpccmrx = TIMx->CCMR2; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= ~TIM_CCMR2_OC4M; + tmpccmrx &= ~TIM_CCMR2_CC4S; + + /* Select the Output Compare Mode */ + tmpccmrx |= (OC_Config->OCMode << 8U); + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC4P; + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 12U); + +#if defined(TIM_CR2_OIS4) + if (IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS4; + + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 6U); + } +#endif /* TIM_CR2_OIS4 */ + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR4 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +#if defined(TIM_CCER_CC5E) +/** + * @brief Timer Output Compare 5 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +static void TIM_OC5_SetConfig(TIM_TypeDef *TIMx, + TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the output: Reset the CCxE Bit */ + TIMx->CCER &= ~TIM_CCER_CC5E; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR3; + + /* Reset the Output Compare Mode Bits */ + tmpccmrx &= ~(TIM_CCMR3_OC5M); + /* Select the Output Compare Mode */ + tmpccmrx |= OC_Config->OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC5P; + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 16U); + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Reset the Output Compare IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS5; + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 8U); + } + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR3 */ + TIMx->CCMR3 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR5 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} +#endif /* TIM_CCER_CC5E */ + +#if defined(TIM_CCER_CC6E) +/** + * @brief Timer Output Compare 6 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +static void TIM_OC6_SetConfig(TIM_TypeDef *TIMx, + TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the output: Reset the CCxE Bit */ + TIMx->CCER &= ~TIM_CCER_CC6E; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR3; + + /* Reset the Output Compare Mode Bits */ + tmpccmrx &= ~(TIM_CCMR3_OC6M); + /* Select the Output Compare Mode */ + tmpccmrx |= (OC_Config->OCMode << 8U); + + /* Reset the Output Polarity level */ + tmpccer &= (uint32_t)~TIM_CCER_CC6P; + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 20U); + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Reset the Output Compare IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS6; + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 10U); + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR3 */ + TIMx->CCMR3 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR6 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} +#endif /* TIM_CCER_CC6E */ + +/** + * @brief Slave Timer configuration function + * @param htim TIM handle + * @param sSlaveConfig Slave timer configuration + * @retval None + */ +static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, + TIM_SlaveConfigTypeDef *sSlaveConfig) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Get the TIMx SMCR register value */ + tmpsmcr = htim->Instance->SMCR; + + /* Reset the Trigger Selection Bits */ + tmpsmcr &= ~TIM_SMCR_TS; + /* Set the Input Trigger source */ + tmpsmcr |= sSlaveConfig->InputTrigger; + + /* Reset the slave mode Bits */ + tmpsmcr &= ~TIM_SMCR_SMS; + /* Set the slave mode */ + tmpsmcr |= sSlaveConfig->SlaveMode; + + /* Write to TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + + /* Configure the trigger prescaler, filter, and polarity */ + switch (sSlaveConfig->InputTrigger) + { + case TIM_TS_ETRF: + { + /* Check the parameters */ + assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERPRESCALER(sSlaveConfig->TriggerPrescaler)); + assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + /* Configure the ETR Trigger source */ + TIM_ETR_SetConfig(htim->Instance, + sSlaveConfig->TriggerPrescaler, + sSlaveConfig->TriggerPolarity, + sSlaveConfig->TriggerFilter); + break; + } + + case TIM_TS_TI1F_ED: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + + if (sSlaveConfig->SlaveMode == TIM_SLAVEMODE_GATED) + { + return HAL_ERROR; + } + + /* Disable the Channel 1: Reset the CC1E Bit */ + tmpccer = htim->Instance->CCER; + htim->Instance->CCER &= ~TIM_CCER_CC1E; + tmpccmr1 = htim->Instance->CCMR1; + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC1F; + tmpccmr1 |= ((sSlaveConfig->TriggerFilter) << 4U); + + /* Write to TIMx CCMR1 and CCER registers */ + htim->Instance->CCMR1 = tmpccmr1; + htim->Instance->CCER = tmpccer; + break; + } + + case TIM_TS_TI1FP1: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + + /* Configure TI1 Filter and Polarity */ + TIM_TI1_ConfigInputStage(htim->Instance, + sSlaveConfig->TriggerPolarity, + sSlaveConfig->TriggerFilter); + break; + } + + case TIM_TS_TI2FP2: + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + + /* Configure TI2 Filter and Polarity */ + TIM_TI2_ConfigInputStage(htim->Instance, + sSlaveConfig->TriggerPolarity, + sSlaveConfig->TriggerFilter); + break; + } + + case TIM_TS_ITR0: + case TIM_TS_ITR1: + case TIM_TS_ITR2: + case TIM_TS_ITR3: + { + /* Check the parameter */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + break; + } + + default: + status = HAL_ERROR; + break; + } + + return status; +} + +/** + * @brief Configure the TI1 as Input. + * @param TIMx to select the TIM peripheral. + * @param TIM_ICPolarity The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICSelection specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 1 is selected to be connected to IC1. + * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 1 is selected to be connected to IC2. + * @arg TIM_ICSELECTION_TRC: TIM Input 1 is selected to be connected to TRC. + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI2FP1 + * (on channel2 path) is used as the input signal. Therefore CCMR1 must be + * protected against un-initialized filter and polarity values. + */ +void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Disable the Channel 1: Reset the CC1E Bit */ + TIMx->CCER &= ~TIM_CCER_CC1E; + tmpccmr1 = TIMx->CCMR1; + tmpccer = TIMx->CCER; + + /* Select the Input */ + if (IS_TIM_CC2_INSTANCE(TIMx) != RESET) + { + tmpccmr1 &= ~TIM_CCMR1_CC1S; + tmpccmr1 |= TIM_ICSelection; + } + else + { + tmpccmr1 |= TIM_CCMR1_CC1S_0; + } + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC1F; + tmpccmr1 |= ((TIM_ICFilter << 4U) & TIM_CCMR1_IC1F); + + /* Select the Polarity and set the CC1E Bit */ + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); + tmpccer |= (TIM_ICPolarity & (TIM_CCER_CC1P | TIM_CCER_CC1NP)); + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the Polarity and Filter for TI1. + * @param TIMx to select the TIM peripheral. + * @param TIM_ICPolarity The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + */ +static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Disable the Channel 1: Reset the CC1E Bit */ + tmpccer = TIMx->CCER; + TIMx->CCER &= ~TIM_CCER_CC1E; + tmpccmr1 = TIMx->CCMR1; + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC1F; + tmpccmr1 |= (TIM_ICFilter << 4U); + + /* Select the Polarity and set the CC1E Bit */ + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); + tmpccer |= TIM_ICPolarity; + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI2 as Input. + * @param TIMx to select the TIM peripheral + * @param TIM_ICPolarity The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICSelection specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 2 is selected to be connected to IC2. + * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 2 is selected to be connected to IC1. + * @arg TIM_ICSELECTION_TRC: TIM Input 2 is selected to be connected to TRC. + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI1FP2 + * (on channel1 path) is used as the input signal. Therefore CCMR1 must be + * protected against un-initialized filter and polarity values. + */ +static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC2E; + tmpccmr1 = TIMx->CCMR1; + tmpccer = TIMx->CCER; + + /* Select the Input */ + tmpccmr1 &= ~TIM_CCMR1_CC2S; + tmpccmr1 |= (TIM_ICSelection << 8U); + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC2F; + tmpccmr1 |= ((TIM_ICFilter << 12U) & TIM_CCMR1_IC2F); + + /* Select the Polarity and set the CC2E Bit */ + tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); + tmpccer |= ((TIM_ICPolarity << 4U) & (TIM_CCER_CC2P | TIM_CCER_CC2NP)); + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1 ; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the Polarity and Filter for TI2. + * @param TIMx to select the TIM peripheral. + * @param TIM_ICPolarity The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + */ +static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC2E; + tmpccmr1 = TIMx->CCMR1; + tmpccer = TIMx->CCER; + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC2F; + tmpccmr1 |= (TIM_ICFilter << 12U); + + /* Select the Polarity and set the CC2E Bit */ + tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); + tmpccer |= (TIM_ICPolarity << 4U); + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1 ; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI3 as Input. + * @param TIMx to select the TIM peripheral + * @param TIM_ICPolarity The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICSelection specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 3 is selected to be connected to IC3. + * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 3 is selected to be connected to IC4. + * @arg TIM_ICSELECTION_TRC: TIM Input 3 is selected to be connected to TRC. + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI3FP4 + * (on channel1 path) is used as the input signal. Therefore CCMR2 must be + * protected against un-initialized filter and polarity values. + */ +static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr2; + uint32_t tmpccer; + + /* Disable the Channel 3: Reset the CC3E Bit */ + TIMx->CCER &= ~TIM_CCER_CC3E; + tmpccmr2 = TIMx->CCMR2; + tmpccer = TIMx->CCER; + + /* Select the Input */ + tmpccmr2 &= ~TIM_CCMR2_CC3S; + tmpccmr2 |= TIM_ICSelection; + + /* Set the filter */ + tmpccmr2 &= ~TIM_CCMR2_IC3F; + tmpccmr2 |= ((TIM_ICFilter << 4U) & TIM_CCMR2_IC3F); + + /* Select the Polarity and set the CC3E Bit */ + tmpccer &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP); + tmpccer |= ((TIM_ICPolarity << 8U) & (TIM_CCER_CC3P | TIM_CCER_CC3NP)); + + /* Write to TIMx CCMR2 and CCER registers */ + TIMx->CCMR2 = tmpccmr2; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI4 as Input. + * @param TIMx to select the TIM peripheral + * @param TIM_ICPolarity The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICSelection specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 4 is selected to be connected to IC4. + * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 4 is selected to be connected to IC3. + * @arg TIM_ICSELECTION_TRC: TIM Input 4 is selected to be connected to TRC. + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI4FP3 + * (on channel1 path) is used as the input signal. Therefore CCMR2 must be + * protected against un-initialized filter and polarity values. + * @retval None + */ +static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr2; + uint32_t tmpccer; + + /* Disable the Channel 4: Reset the CC4E Bit */ + TIMx->CCER &= ~TIM_CCER_CC4E; + tmpccmr2 = TIMx->CCMR2; + tmpccer = TIMx->CCER; + + /* Select the Input */ + tmpccmr2 &= ~TIM_CCMR2_CC4S; + tmpccmr2 |= (TIM_ICSelection << 8U); + + /* Set the filter */ + tmpccmr2 &= ~TIM_CCMR2_IC4F; + tmpccmr2 |= ((TIM_ICFilter << 12U) & TIM_CCMR2_IC4F); + + /* Select the Polarity and set the CC4E Bit */ + tmpccer &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP); + tmpccer |= ((TIM_ICPolarity << 12U) & (TIM_CCER_CC4P | TIM_CCER_CC4NP)); + + /* Write to TIMx CCMR2 and CCER registers */ + TIMx->CCMR2 = tmpccmr2; + TIMx->CCER = tmpccer ; +} + +/** + * @brief Selects the Input Trigger source + * @param TIMx to select the TIM peripheral + * @param InputTriggerSource The Input Trigger source. + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal Trigger 0 + * @arg TIM_TS_ITR1: Internal Trigger 1 + * @arg TIM_TS_ITR2: Internal Trigger 2 + * @arg TIM_TS_ITR3: Internal Trigger 3 + * @arg TIM_TS_TI1F_ED: TI1 Edge Detector + * @arg TIM_TS_TI1FP1: Filtered Timer Input 1 + * @arg TIM_TS_TI2FP2: Filtered Timer Input 2 + * @arg TIM_TS_ETRF: External Trigger input + * @retval None + */ +static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource) +{ + uint32_t tmpsmcr; + + /* Get the TIMx SMCR register value */ + tmpsmcr = TIMx->SMCR; + /* Reset the TS Bits */ + tmpsmcr &= ~TIM_SMCR_TS; + /* Set the Input Trigger source and the slave mode*/ + tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1); + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; +} +/** + * @brief Configures the TIMx External Trigger (ETR). + * @param TIMx to select the TIM peripheral + * @param TIM_ExtTRGPrescaler The external Trigger Prescaler. + * This parameter can be one of the following values: + * @arg TIM_ETRPRESCALER_DIV1: ETRP Prescaler OFF. + * @arg TIM_ETRPRESCALER_DIV2: ETRP frequency divided by 2. + * @arg TIM_ETRPRESCALER_DIV4: ETRP frequency divided by 4. + * @arg TIM_ETRPRESCALER_DIV8: ETRP frequency divided by 8. + * @param TIM_ExtTRGPolarity The external Trigger Polarity. + * This parameter can be one of the following values: + * @arg TIM_ETRPOLARITY_INVERTED: active low or falling edge active. + * @arg TIM_ETRPOLARITY_NONINVERTED: active high or rising edge active. + * @param ExtTRGFilter External Trigger Filter. + * This parameter must be a value between 0x00 and 0x0F + * @retval None + */ +void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, + uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter) +{ + uint32_t tmpsmcr; + + tmpsmcr = TIMx->SMCR; + + /* Reset the ETR Bits */ + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + + /* Set the Prescaler, the Filter value and the Polarity */ + tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U))); + + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; +} + +/** + * @brief Enables or disables the TIM Capture Compare Channel x. + * @param TIMx to select the TIM peripheral + * @param Channel specifies the TIM Channel + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 + * @arg TIM_CHANNEL_2: TIM Channel 2 + * @arg TIM_CHANNEL_3: TIM Channel 3 + * @arg TIM_CHANNEL_4: TIM Channel 4 + * @arg TIM_CHANNEL_5: TIM Channel 5 selected + * @arg TIM_CHANNEL_6: TIM Channel 6 selected + * @param ChannelState specifies the TIM Channel CCxE bit new state. + * This parameter can be: TIM_CCx_ENABLE or TIM_CCx_DISABLE. + * @retval None + */ +void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState) +{ + uint32_t tmp; + + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(TIMx)); + assert_param(IS_TIM_CHANNELS(Channel)); + + tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */ + + /* Reset the CCxE Bit */ + TIMx->CCER &= ~tmp; + + /* Set or reset the CCxE Bit */ + TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */ +} + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +/** + * @brief Reset interrupt callbacks to the legacy weak callbacks. + * @param htim pointer to a TIM_HandleTypeDef structure that contains + * the configuration information for TIM module. + * @retval None + */ +void TIM_ResetCallback(TIM_HandleTypeDef *htim) +{ + /* Reset the TIM callback to the legacy weak callbacks */ + htim->PeriodElapsedCallback = HAL_TIM_PeriodElapsedCallback; + htim->PeriodElapsedHalfCpltCallback = HAL_TIM_PeriodElapsedHalfCpltCallback; + htim->TriggerCallback = HAL_TIM_TriggerCallback; + htim->TriggerHalfCpltCallback = HAL_TIM_TriggerHalfCpltCallback; + htim->IC_CaptureCallback = HAL_TIM_IC_CaptureCallback; + htim->IC_CaptureHalfCpltCallback = HAL_TIM_IC_CaptureHalfCpltCallback; + htim->OC_DelayElapsedCallback = HAL_TIM_OC_DelayElapsedCallback; + htim->PWM_PulseFinishedCallback = HAL_TIM_PWM_PulseFinishedCallback; + htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; + htim->ErrorCallback = HAL_TIM_ErrorCallback; + htim->CommutationCallback = HAL_TIMEx_CommutCallback; + htim->CommutationHalfCpltCallback = HAL_TIMEx_CommutHalfCpltCallback; + htim->BreakCallback = HAL_TIMEx_BreakCallback; +#if defined(TIM_BDTR_BK2E) + htim->Break2Callback = HAL_TIMEx_Break2Callback; +#endif /* TIM_BDTR_BK2E */ +} +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ + +#endif /* HAL_TIM_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim_ex.c b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim_ex.c new file mode 100644 index 0000000..37e7c57 --- /dev/null +++ b/Software/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim_ex.c @@ -0,0 +1,2554 @@ +/** + ****************************************************************************** + * @file stm32f3xx_hal_tim_ex.c + * @author MCD Application Team + * @brief TIM HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Timer Extended peripheral: + * + Time Hall Sensor Interface Initialization + * + Time Hall Sensor Interface Start + * + Time Complementary signal break and dead time configuration + * + Time Master and Slave synchronization configuration + * + Time Output Compare/PWM Channel Configuration (for channels 5 and 6) + * + Time OCRef clear configuration + * + Timer remapping capabilities configuration + @verbatim + ============================================================================== + ##### TIMER Extended features ##### + ============================================================================== + [..] + The Timer Extended features include: + (#) Complementary outputs with programmable dead-time for : + (++) Output Compare + (++) PWM generation (Edge and Center-aligned Mode) + (++) One-pulse mode output + (#) Synchronization circuit to control the timer with external signals and to + interconnect several timers together. + (#) Break input to put the timer output signals in reset state or in a known state. + (#) Supports incremental (quadrature) encoder and hall-sensor circuitry for + positioning purposes + + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Initialize the TIM low level resources by implementing the following functions + depending on the selected feature: + (++) Hall Sensor output : HAL_TIMEx_HallSensor_MspInit() + + (#) Initialize the TIM low level resources : + (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE(); + (##) TIM pins configuration + (+++) Enable the clock for the TIM GPIOs using the following function: + __HAL_RCC_GPIOx_CLK_ENABLE(); + (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init(); + + (#) The external Clock can be configured, if needed (the default clock is the + internal clock from the APBx), using the following function: + HAL_TIM_ConfigClockSource, the clock configuration should be done before + any start function. + + (#) Configure the TIM in the desired functioning mode using one of the + initialization function of this driver: + (++) HAL_TIMEx_HallSensor_Init() and HAL_TIMEx_ConfigCommutEvent(): to use the + Timer Hall Sensor Interface and the commutation event with the corresponding + Interrupt and DMA request if needed (Note that One Timer is used to interface + with the Hall sensor Interface and another Timer should be used to use + the commutation event). + + (#) Activate the TIM peripheral using one of the start functions: + (++) Complementary Output Compare : HAL_TIMEx_OCN_Start(), HAL_TIMEx_OCN_Start_DMA(), + HAL_TIMEx_OCN_Start_IT() + (++) Complementary PWM generation : HAL_TIMEx_PWMN_Start(), HAL_TIMEx_PWMN_Start_DMA(), + HAL_TIMEx_PWMN_Start_IT() + (++) Complementary One-pulse mode output : HAL_TIMEx_OnePulseN_Start(), HAL_TIMEx_OnePulseN_Start_IT() + (++) Hall Sensor output : HAL_TIMEx_HallSensor_Start(), HAL_TIMEx_HallSensor_Start_DMA(), + HAL_TIMEx_HallSensor_Start_IT(). + + @endverbatim + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_hal.h" + +/** @addtogroup STM32F3xx_HAL_Driver + * @{ + */ + +/** @defgroup TIMEx TIMEx + * @brief TIM Extended HAL module driver + * @{ + */ + +#ifdef HAL_TIM_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +static void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma); +static void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState); + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup TIMEx_Exported_Functions TIM Extended Exported Functions + * @{ + */ + +/** @defgroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions + * @brief Timer Hall Sensor functions + * +@verbatim + ============================================================================== + ##### Timer Hall Sensor functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure TIM HAL Sensor. + (+) De-initialize TIM HAL Sensor. + (+) Start the Hall Sensor Interface. + (+) Stop the Hall Sensor Interface. + (+) Start the Hall Sensor Interface and enable interrupts. + (+) Stop the Hall Sensor Interface and disable interrupts. + (+) Start the Hall Sensor Interface and enable DMA transfers. + (+) Stop the Hall Sensor Interface and disable DMA transfers. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Hall Sensor Interface and initialize the associated handle. + * @note When the timer instance is initialized in Hall Sensor Interface mode, + * timer channels 1 and channel 2 are reserved and cannot be used for + * other purpose. + * @param htim TIM Hall Sensor Interface handle + * @param sConfig TIM Hall Sensor configuration structure + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig) +{ + TIM_OC_InitTypeDef OC_Config; + + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler)); + assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy week callbacks */ + TIM_ResetCallback(htim); + + if (htim->HallSensor_MspInitCallback == NULL) + { + htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->HallSensor_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIMEx_HallSensor_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Configure the Time base in the Encoder Mode */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Configure the Channel 1 as Input Channel to interface with the three Outputs of the Hall sensor */ + TIM_TI1_SetConfig(htim->Instance, sConfig->IC1Polarity, TIM_ICSELECTION_TRC, sConfig->IC1Filter); + + /* Reset the IC1PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; + /* Set the IC1PSC value */ + htim->Instance->CCMR1 |= sConfig->IC1Prescaler; + + /* Enable the Hall sensor interface (XOR function of the three inputs) */ + htim->Instance->CR2 |= TIM_CR2_TI1S; + + /* Select the TIM_TS_TI1F_ED signal as Input trigger for the TIM */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= TIM_TS_TI1F_ED; + + /* Use the TIM_TS_TI1F_ED signal to reset the TIM counter each edge detection */ + htim->Instance->SMCR &= ~TIM_SMCR_SMS; + htim->Instance->SMCR |= TIM_SLAVEMODE_RESET; + + /* Program channel 2 in PWM 2 mode with the desired Commutation_Delay*/ + OC_Config.OCFastMode = TIM_OCFAST_DISABLE; + OC_Config.OCIdleState = TIM_OCIDLESTATE_RESET; + OC_Config.OCMode = TIM_OCMODE_PWM2; + OC_Config.OCNIdleState = TIM_OCNIDLESTATE_RESET; + OC_Config.OCNPolarity = TIM_OCNPOLARITY_HIGH; + OC_Config.OCPolarity = TIM_OCPOLARITY_HIGH; + OC_Config.Pulse = sConfig->Commutation_Delay; + + TIM_OC2_SetConfig(htim->Instance, &OC_Config); + + /* Select OC2REF as trigger output on TRGO: write the MMS bits in the TIMx_CR2 + register to 101 */ + htim->Instance->CR2 &= ~TIM_CR2_MMS; + htim->Instance->CR2 |= TIM_TRGO_OC2REF; + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM Hall Sensor interface + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->HallSensor_MspDeInitCallback == NULL) + { + htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; + } + /* DeInit the low level hardware */ + htim->HallSensor_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIMEx_HallSensor_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Hall Sensor MSP. + * @param htim TIM Hall Sensor Interface handle + * @retval None + */ +__weak void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_HallSensor_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Hall Sensor MSP. + * @param htim TIM Hall Sensor Interface handle + * @retval None + */ +__weak void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_HallSensor_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Hall Sensor Interface. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim) +{ + uint32_t tmpsmcr; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Hall sensor Interface. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1, 2 and 3 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Hall Sensor Interface in interrupt mode. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim) +{ + uint32_t tmpsmcr; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the capture compare Interrupts 1 event */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Hall Sensor Interface in interrupt mode. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts event */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Hall Sensor Interface in DMA mode. + * @param htim TIM Hall Sensor Interface handle + * @param pData The destination Buffer address. + * @param Length The length of data to be transferred from TIM peripheral to memory. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) +{ + uint32_t tmpsmcr; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Set the TIM channel state */ + if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((pData == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Set the DMA Input Capture 1 Callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA channel for Capture 1*/ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the capture compare 1 Interrupt */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Hall Sensor Interface in DMA mode. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + + /* Disable the capture compare Interrupts 1 event */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions + * @brief Timer Complementary Output Compare functions + * +@verbatim + ============================================================================== + ##### Timer Complementary Output Compare functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Start the Complementary Output Compare/PWM. + (+) Stop the Complementary Output Compare/PWM. + (+) Start the Complementary Output Compare/PWM and enable interrupts. + (+) Stop the Complementary Output Compare/PWM and disable interrupts. + (+) Start the Complementary Output Compare/PWM and enable DMA transfers. + (+) Stop the Complementary Output Compare/PWM and disable DMA transfers. + +@endverbatim + * @{ + */ + +/** + * @brief Starts the TIM Output Compare signal generation on the complementary + * output. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Output Compare signal generation on the complementary + * output. + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Disable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Output Compare signal generation in interrupt mode + * on the complementary output. + * @param htim TIM OC handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Output Compare interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Output Compare interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Output Compare interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the TIM Break interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); + + /* Enable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Output Compare signal generation in interrupt mode + * on the complementary output. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpccer; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Output Compare interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Output Compare interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Output Compare interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the TIM Break interrupt (only if no more channel is active) */ + tmpccer = htim->Instance->CCER; + if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == (uint32_t)RESET) + { + __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK); + } + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM Output Compare signal generation in DMA mode + * on the complementary output. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Set the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) + { + return HAL_BUSY; + } + else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) + { + if ((pData == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Output Compare DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Output Compare DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Output Compare DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Output Compare signal generation in DMA mode + * on the complementary output. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Output Compare DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Output Compare DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Output Compare DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions + * @brief Timer Complementary PWM functions + * +@verbatim + ============================================================================== + ##### Timer Complementary PWM functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Start the Complementary PWM. + (+) Stop the Complementary PWM. + (+) Start the Complementary PWM and enable interrupts. + (+) Stop the Complementary PWM and disable interrupts. + (+) Start the Complementary PWM and enable DMA transfers. + (+) Stop the Complementary PWM and disable DMA transfers. + (+) Start the Complementary Input Capture measurement. + (+) Stop the Complementary Input Capture. + (+) Start the Complementary Input Capture and enable interrupts. + (+) Stop the Complementary Input Capture and disable interrupts. + (+) Start the Complementary Input Capture and enable DMA transfers. + (+) Stop the Complementary Input Capture and disable DMA transfers. + (+) Start the Complementary One Pulse generation. + (+) Stop the Complementary One Pulse. + (+) Start the Complementary One Pulse and enable interrupts. + (+) Stop the Complementary One Pulse and disable interrupts. + +@endverbatim + * @{ + */ + +/** + * @brief Starts the PWM signal generation on the complementary output. + * @param htim TIM handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the PWM signal generation on the complementary output. + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Disable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the PWM signal generation in interrupt mode on the + * complementary output. + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the TIM Break interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); + + /* Enable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the PWM signal generation in interrupt mode on the + * complementary output. + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpccer; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the TIM Break interrupt (only if no more channel is active) */ + tmpccer = htim->Instance->CCER; + if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == (uint32_t)RESET) + { + __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK); + } + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM PWM signal generation in DMA mode on the + * complementary output + * @param htim TIM handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Set the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) + { + return HAL_BUSY; + } + else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) + { + if ((pData == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM PWM signal generation in DMA mode on the complementary + * output + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions + * @brief Timer Complementary One Pulse functions + * +@verbatim + ============================================================================== + ##### Timer Complementary One Pulse functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Start the Complementary One Pulse generation. + (+) Stop the Complementary One Pulse. + (+) Start the Complementary One Pulse and enable interrupts. + (+) Stop the Complementary One Pulse and disable interrupts. + +@endverbatim + * @{ + */ + +/** + * @brief Starts the TIM One Pulse signal generation on the complementary + * output. + * @note OutputChannel must match the pulse output channel chosen when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel pulse output channel to enable + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the complementary One Pulse output channel and the Input Capture channel */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE); + TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation on the complementary + * output. + * @note OutputChannel must match the pulse output channel chosen when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel pulse output channel to disable + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Disable the complementary One Pulse output channel and the Input Capture channel */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE); + TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM One Pulse signal generation in interrupt mode on the + * complementary channel. + * @note OutputChannel must match the pulse output channel chosen when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel pulse output channel to enable + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + + /* Enable the complementary One Pulse output channel and the Input Capture channel */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE); + TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation in interrupt mode on the + * complementary channel. + * @note OutputChannel must match the pulse output channel chosen when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel pulse output channel to disable + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + + /* Disable the complementary One Pulse output channel and the Input Capture channel */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE); + TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions + * @brief Peripheral Control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Configure the commutation event in case of use of the Hall sensor interface. + (+) Configure Output channels for OC and PWM mode. + + (+) Configure Complementary channels, break features and dead time. + (+) Configure Master synchronization. + (+) Configure timer remapping capabilities. + (+) Enable or disable channel grouping. + +@endverbatim + * @{ + */ + +/** + * @brief Configure the TIM commutation event sequence. + * @note This function is mandatory to use the commutation event in order to + * update the configuration at each commutation detection on the TRGI input of the Timer, + * the typical use of this feature is with the use of another Timer(interface Timer) + * configured in Hall sensor interface, this interface Timer will generate the + * commutation at its TRGO output (connected to Timer used in this function) each time + * the TI1 of the Interface Timer detect a commutation at its input TI1. + * @param htim TIM handle + * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal trigger 0 selected + * @arg TIM_TS_ITR1: Internal trigger 1 selected + * @arg TIM_TS_ITR2: Internal trigger 2 selected + * @arg TIM_TS_ITR3: Internal trigger 3 selected + * @arg TIM_TS_NONE: No trigger is needed + * @param CommutationSource the Commutation Event source + * This parameter can be one of the following values: + * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer + * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); + assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); + + __HAL_LOCK(htim); + + if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || + (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) + { + /* Select the Input trigger */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= InputTrigger; + } + + /* Select the Capture Compare preload feature */ + htim->Instance->CR2 |= TIM_CR2_CCPC; + /* Select the Commutation event source */ + htim->Instance->CR2 &= ~TIM_CR2_CCUS; + htim->Instance->CR2 |= CommutationSource; + + /* Disable Commutation Interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM); + + /* Disable Commutation DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM); + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configure the TIM commutation event sequence with interrupt. + * @note This function is mandatory to use the commutation event in order to + * update the configuration at each commutation detection on the TRGI input of the Timer, + * the typical use of this feature is with the use of another Timer(interface Timer) + * configured in Hall sensor interface, this interface Timer will generate the + * commutation at its TRGO output (connected to Timer used in this function) each time + * the TI1 of the Interface Timer detect a commutation at its input TI1. + * @param htim TIM handle + * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal trigger 0 selected + * @arg TIM_TS_ITR1: Internal trigger 1 selected + * @arg TIM_TS_ITR2: Internal trigger 2 selected + * @arg TIM_TS_ITR3: Internal trigger 3 selected + * @arg TIM_TS_NONE: No trigger is needed + * @param CommutationSource the Commutation Event source + * This parameter can be one of the following values: + * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer + * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); + assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); + + __HAL_LOCK(htim); + + if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || + (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) + { + /* Select the Input trigger */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= InputTrigger; + } + + /* Select the Capture Compare preload feature */ + htim->Instance->CR2 |= TIM_CR2_CCPC; + /* Select the Commutation event source */ + htim->Instance->CR2 &= ~TIM_CR2_CCUS; + htim->Instance->CR2 |= CommutationSource; + + /* Disable Commutation DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM); + + /* Enable the Commutation Interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_COM); + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configure the TIM commutation event sequence with DMA. + * @note This function is mandatory to use the commutation event in order to + * update the configuration at each commutation detection on the TRGI input of the Timer, + * the typical use of this feature is with the use of another Timer(interface Timer) + * configured in Hall sensor interface, this interface Timer will generate the + * commutation at its TRGO output (connected to Timer used in this function) each time + * the TI1 of the Interface Timer detect a commutation at its input TI1. + * @note The user should configure the DMA in his own software, in This function only the COMDE bit is set + * @param htim TIM handle + * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal trigger 0 selected + * @arg TIM_TS_ITR1: Internal trigger 1 selected + * @arg TIM_TS_ITR2: Internal trigger 2 selected + * @arg TIM_TS_ITR3: Internal trigger 3 selected + * @arg TIM_TS_NONE: No trigger is needed + * @param CommutationSource the Commutation Event source + * This parameter can be one of the following values: + * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer + * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); + assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); + + __HAL_LOCK(htim); + + if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || + (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) + { + /* Select the Input trigger */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= InputTrigger; + } + + /* Select the Capture Compare preload feature */ + htim->Instance->CR2 |= TIM_CR2_CCPC; + /* Select the Commutation event source */ + htim->Instance->CR2 &= ~TIM_CR2_CCUS; + htim->Instance->CR2 |= CommutationSource; + + /* Enable the Commutation DMA Request */ + /* Set the DMA Commutation Callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt; + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError; + + /* Disable Commutation Interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM); + + /* Enable the Commutation DMA Request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_COM); + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configures the TIM in master mode. + * @param htim TIM handle. + * @param sMasterConfig pointer to a TIM_MasterConfigTypeDef structure that + * contains the selected trigger output (TRGO) and the Master/Slave + * mode. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, + TIM_MasterConfigTypeDef *sMasterConfig) +{ + uint32_t tmpcr2; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger)); + assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode)); + + /* Check input state */ + __HAL_LOCK(htim); + + /* Change the handler state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Get the TIMx CR2 register value */ + tmpcr2 = htim->Instance->CR2; + + /* Get the TIMx SMCR register value */ + tmpsmcr = htim->Instance->SMCR; + +#if defined(TIM_CR2_MMS2) + /* If the timer supports ADC synchronization through TRGO2, set the master mode selection 2 */ + if (IS_TIM_TRGO2_INSTANCE(htim->Instance)) + { + /* Check the parameters */ + assert_param(IS_TIM_TRGO2_SOURCE(sMasterConfig->MasterOutputTrigger2)); + + /* Clear the MMS2 bits */ + tmpcr2 &= ~TIM_CR2_MMS2; + /* Select the TRGO2 source*/ + tmpcr2 |= sMasterConfig->MasterOutputTrigger2; + } +#endif /* TIM_CR2_MMS2 */ + + /* Reset the MMS Bits */ + tmpcr2 &= ~TIM_CR2_MMS; + /* Select the TRGO source */ + tmpcr2 |= sMasterConfig->MasterOutputTrigger; + + /* Update TIMx CR2 */ + htim->Instance->CR2 = tmpcr2; + + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + /* Reset the MSM Bit */ + tmpsmcr &= ~TIM_SMCR_MSM; + /* Set master mode */ + tmpsmcr |= sMasterConfig->MasterSlaveMode; + + /* Update TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + } + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configures the Break feature, dead time, Lock level, OSSI/OSSR State + * and the AOE(automatic output enable). + * @param htim TIM handle + * @param sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that + * contains the BDTR Register configuration information for the TIM peripheral. + * @note Interrupts can be generated when an active level is detected on the + * break input, the break 2 input or the system break input. Break + * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, + TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig) +{ + /* Keep this variable initialized to 0 as it is used to configure BDTR register */ + uint32_t tmpbdtr = 0U; + + /* Check the parameters */ + assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance)); + assert_param(IS_TIM_OSSR_STATE(sBreakDeadTimeConfig->OffStateRunMode)); + assert_param(IS_TIM_OSSI_STATE(sBreakDeadTimeConfig->OffStateIDLEMode)); + assert_param(IS_TIM_LOCK_LEVEL(sBreakDeadTimeConfig->LockLevel)); + assert_param(IS_TIM_DEADTIME(sBreakDeadTimeConfig->DeadTime)); + assert_param(IS_TIM_BREAK_STATE(sBreakDeadTimeConfig->BreakState)); + assert_param(IS_TIM_BREAK_POLARITY(sBreakDeadTimeConfig->BreakPolarity)); +#if defined(TIM_BDTR_BKF) + assert_param(IS_TIM_BREAK_FILTER(sBreakDeadTimeConfig->BreakFilter)); +#endif /* TIM_BDTR_BKF */ + assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(sBreakDeadTimeConfig->AutomaticOutput)); + + /* Check input state */ + __HAL_LOCK(htim); + + /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State, + the OSSI State, the dead time value and the Automatic Output Enable Bit */ + + /* Set the BDTR bits */ + MODIFY_REG(tmpbdtr, TIM_BDTR_DTG, sBreakDeadTimeConfig->DeadTime); + MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel); + MODIFY_REG(tmpbdtr, TIM_BDTR_OSSI, sBreakDeadTimeConfig->OffStateIDLEMode); + MODIFY_REG(tmpbdtr, TIM_BDTR_OSSR, sBreakDeadTimeConfig->OffStateRunMode); + MODIFY_REG(tmpbdtr, TIM_BDTR_BKE, sBreakDeadTimeConfig->BreakState); + MODIFY_REG(tmpbdtr, TIM_BDTR_BKP, sBreakDeadTimeConfig->BreakPolarity); + MODIFY_REG(tmpbdtr, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput); +#if defined(TIM_BDTR_BKF) + MODIFY_REG(tmpbdtr, TIM_BDTR_BKF, (sBreakDeadTimeConfig->BreakFilter << TIM_BDTR_BKF_Pos)); +#endif /* TIM_BDTR_BKF */ + +#if defined(TIM_BDTR_BK2E) + if (IS_TIM_BKIN2_INSTANCE(htim->Instance)) + { + /* Check the parameters */ + assert_param(IS_TIM_BREAK2_STATE(sBreakDeadTimeConfig->Break2State)); + assert_param(IS_TIM_BREAK2_POLARITY(sBreakDeadTimeConfig->Break2Polarity)); + assert_param(IS_TIM_BREAK_FILTER(sBreakDeadTimeConfig->Break2Filter)); + + /* Set the BREAK2 input related BDTR bits */ + MODIFY_REG(tmpbdtr, TIM_BDTR_BK2F, (sBreakDeadTimeConfig->Break2Filter << TIM_BDTR_BK2F_Pos)); + MODIFY_REG(tmpbdtr, TIM_BDTR_BK2E, sBreakDeadTimeConfig->Break2State); + MODIFY_REG(tmpbdtr, TIM_BDTR_BK2P, sBreakDeadTimeConfig->Break2Polarity); + } +#endif /* TIM_BDTR_BK2E */ + + /* Set TIMx_BDTR */ + htim->Instance->BDTR = tmpbdtr; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configures the TIMx Remapping input capabilities. + * @param htim TIM handle. + * @param Remap specifies the TIM remapping source. + @if STM32F301x8 + * For TIM1, the parameter can have the following values: + * @arg TIM_TIM1_ADC1_NONE: TIM1_ETR is not connected to any AWD (analog watchdog) + * @arg TIM_TIM1_ADC1_AWD1: TIM1_ETR is connected to ADC1 AWD1 + * @arg TIM_TIM1_ADC1_AWD2: TIM1_ETR is connected to ADC1 AWD2 + * @arg TIM_TIM1_ADC1_AWD3: TIM1_ETR is connected to ADC1 AWD2 + @elseif STM32F303xE + * For TIM1, the parameter is a combination of 2 fields (field1 | field2): + * + * field1 can have the following values: + * @arg TIM_TIM1_ADC1_NONE: TIM1_ETR is not connected to any AWD (analog watchdog) + * @arg TIM_TIM1_ADC1_AWD1: TIM1_ETR is connected to ADC1 AWD1 + * @arg TIM_TIM1_ADC1_AWD2: TIM1_ETR is connected to ADC1 AWD2 + * @arg TIM_TIM1_ADC1_AWD3: TIM1_ETR is connected to ADC1 AWD2 + * + * field2 can have the following values: + * @arg TIM_TIM1_ADC4_NONE : TIM1_ETR is not connected to any AWD (analog watchdog) + * @arg TIM_TIM1_ADC4_AWD1: TIM1_ETR is connected to ADC4 AWD1 + * @arg TIM_TIM1_ADC4_AWD2: TIM1_ETR is connected to ADC4 AWD2 + * @arg TIM_TIM1_ADC4_AWD3: TIM1_ETR is connected to ADC4 AWD3 + @elseif STM32F334x8 + * For TIM1, the parameter is a combination of 2 fields (field1 | field2): + * + * field1 can have the following values: + * @arg TIM_TIM1_ADC1_NONE: TIM1_ETR is not connected to any AWD (analog watchdog) + * @arg TIM_TIM1_ADC1_AWD1: TIM1_ETR is connected to ADC1 AWD1 + * @arg TIM_TIM1_ADC1_AWD2: TIM1_ETR is connected to ADC1 AWD2 + * @arg TIM_TIM1_ADC1_AWD3: TIM1_ETR is connected to ADC1 AWD2 + * + * field2 can have the following values: + * @arg TIM_TIM1_ADC2_NONE : TIM1_ETR is not connected to any AWD (analog watchdog) + * @arg TIM_TIM1_ADC2_AWD1: TIM1_ETR is connected to ADC2 AWD1 + * @arg TIM_TIM1_ADC2_AWD2: TIM1_ETR is connected to ADC2 AWD2 + * @arg TIM_TIM1_ADC2_AWD3: TIM1_ETR is connected to ADC2 AWD3 + @endif + @if STM32F303xE + * For TIM8, the parameter is a combination of 2 fields (field1 | field2): + * + * field1 can have the following values: + * @arg TIM_TIM8_ADC2_NONE: TIM1_ETR is not connected to any AWD (analog watchdog) + * @arg TIM_TIM8_ADC2_AWD1: TIM1_ETR is connected to ADC2 AWD1 + * @arg TIM_TIM8_ADC2_AWD2: TIM1_ETR is connected to ADC2 AWD2 + * @arg TIM_TIM8_ADC2_AWD3: TIM1_ETR is connected to ADC2 AWD2 + * + * field2 can have the following values: + * @arg TIM_TIM8_ADC3_NONE : TIM1_ETR is not connected to any AWD (analog watchdog) + * @arg TIM_TIM8_ADC3_AWD1: TIM1_ETR is connected to ADC3 AWD1 + * @arg TIM_TIM8_ADC3_AWD2: TIM1_ETR is connected to ADC3 AWD2 + * @arg TIM_TIM8_ADC3_AWD3: TIM1_ETR is connected to ADC3 AWD3 + @endif + @if STM32F373xC + * For TIM14, the parameter can have the following values: + * @arg TIM_TIM14_GPIO: TIM14 TI1 is connected to GPIO + * @arg TIM_TIM14_RTC: TIM14 TI1 is connected to RTC_clock + * @arg TIM_TIM14_HSE: TIM14 TI1 is connected to HSE/32 + * @arg TIM_TIM14_MCO: TIM14 TI1 is connected to MCO + @else + * For TIM16, the parameter can have the following values: + * @arg TIM_TIM16_GPIO: TIM16 TI1 is connected to GPIO + * @arg TIM_TIM16_RTC: TIM16 TI1 is connected to RTC_clock + * @arg TIM_TIM16_HSE: TIM16 TI1 is connected to HSE/32 + * @arg TIM_TIM16_MCO: TIM16 TI1 is connected to MCO + @endif + @if STM32F303xE + * For TIM20, the parameter is a combination of 2 fields (field1 | field2): + * + * field1 can have the following values: + * @arg TIM_TIM20_ADC3_NONE: TIM1_ETR is not connected to any AWD (analog watchdog) + * @arg TIM_TIM20_ADC3_AWD1: TIM1_ETR is connected to ADC3 AWD1 + * @arg TIM_TIM20_ADC3_AWD2: TIM1_ETR is connected to ADC3 AWD2 + * @arg TIM_TIM20_ADC3_AWD3: TIM1_ETR is connected to ADC3 AWD2 + * + * field2 can have the following values: + * @arg TIM_TIM20_ADC4_NONE : TIM1_ETR is not connected to any AWD (analog watchdog) + * @arg TIM_TIM20_ADC4_AWD1: TIM1_ETR is connected to ADC4 AWD1 + * @arg TIM_TIM20_ADC4_AWD2: TIM1_ETR is connected to ADC4 AWD2 + * @arg TIM_TIM20_ADC4_AWD3: TIM1_ETR is connected to ADC4 AWD3 + @endif + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap) +{ + __HAL_LOCK(htim); + + /* Check parameters */ + assert_param(IS_TIM_REMAP(htim->Instance, Remap)); + + /* Set the Timer remapping configuration */ + WRITE_REG(htim->Instance->OR, Remap); + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +#if defined(TIM_CCR5_CCR5) +/** + * @brief Group channel 5 and channel 1, 2 or 3 + * @param htim TIM handle. + * @param Channels specifies the reference signal(s) the OC5REF is combined with. + * This parameter can be any combination of the following values: + * TIM_GROUPCH5_NONE: No effect of OC5REF on OC1REFC, OC2REFC and OC3REFC + * TIM_GROUPCH5_OC1REFC: OC1REFC is the logical AND of OC1REFC and OC5REF + * TIM_GROUPCH5_OC2REFC: OC2REFC is the logical AND of OC2REFC and OC5REF + * TIM_GROUPCH5_OC3REFC: OC3REFC is the logical AND of OC3REFC and OC5REF + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_GroupChannel5(TIM_HandleTypeDef *htim, uint32_t Channels) +{ + /* Check parameters */ + assert_param(IS_TIM_COMBINED3PHASEPWM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_GROUPCH5(Channels)); + + /* Process Locked */ + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Clear GC5Cx bit fields */ + htim->Instance->CCR5 &= ~(TIM_CCR5_GC5C3 | TIM_CCR5_GC5C2 | TIM_CCR5_GC5C1); + + /* Set GC5Cx bit fields */ + htim->Instance->CCR5 |= Channels; + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} +#endif /* TIM_CCR5_CCR5 */ + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions + * @brief Extended Callbacks functions + * +@verbatim + ============================================================================== + ##### Extended Callbacks functions ##### + ============================================================================== + [..] + This section provides Extended TIM callback functions: + (+) Timer Commutation callback + (+) Timer Break callback + +@endverbatim + * @{ + */ + +/** + * @brief Hall commutation changed callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_CommutCallback could be implemented in the user file + */ +} +/** + * @brief Hall commutation changed half complete callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_CommutHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Hall Break detection callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_BreakCallback could be implemented in the user file + */ +} + +#if defined(TIM_BDTR_BK2E) +/** + * @brief Hall Break2 detection callback in non blocking mode + * @param htim: TIM handle + * @retval None + */ +__weak void HAL_TIMEx_Break2Callback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_TIMEx_Break2Callback could be implemented in the user file + */ +} +#endif /* TIM_BDTR_BK2E */ +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions + * @brief Extended Peripheral State functions + * +@verbatim + ============================================================================== + ##### Extended Peripheral State functions ##### + ============================================================================== + [..] + This subsection permits to get in run-time the status of the peripheral + and the data flow. + +@endverbatim + * @{ + */ + +/** + * @brief Return the TIM Hall Sensor interface handle state. + * @param htim TIM Hall Sensor handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return actual state of the TIM complementary channel. + * @param htim TIM handle + * @param ChannelN TIM Complementary channel + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 + * @arg TIM_CHANNEL_2: TIM Channel 2 + * @arg TIM_CHANNEL_3: TIM Channel 3 + * @retval TIM Complementary channel state + */ +HAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(TIM_HandleTypeDef *htim, uint32_t ChannelN) +{ + HAL_TIM_ChannelStateTypeDef channel_state; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, ChannelN)); + + channel_state = TIM_CHANNEL_N_STATE_GET(htim, ChannelN); + + return channel_state; +} +/** + * @} + */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup TIMEx_Private_Functions TIMEx Private Functions + * @{ + */ + +/** + * @brief TIM DMA Commutation callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->CommutationCallback(htim); +#else + HAL_TIMEx_CommutCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief TIM DMA Commutation half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->CommutationHalfCpltCallback(htim); +#else + HAL_TIMEx_CommutHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + + +/** + * @brief TIM DMA Delay Pulse complete callback (complementary channel). + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); + } + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA error callback (complementary channel) + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->ErrorCallback(htim); +#else + HAL_TIM_ErrorCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief Enables or disables the TIM Capture Compare Channel xN. + * @param TIMx to select the TIM peripheral + * @param Channel specifies the TIM Channel + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 + * @arg TIM_CHANNEL_2: TIM Channel 2 + * @arg TIM_CHANNEL_3: TIM Channel 3 + * @param ChannelNState specifies the TIM Channel CCxNE bit new state. + * This parameter can be: TIM_CCxN_ENABLE or TIM_CCxN_Disable. + * @retval None + */ +static void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState) +{ + uint32_t tmp; + + tmp = TIM_CCER_CC1NE << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */ + + /* Reset the CCxNE Bit */ + TIMx->CCER &= ~tmp; + + /* Set or reset the CCxNE Bit */ + TIMx->CCER |= (uint32_t)(ChannelNState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */ +} +/** + * @} + */ + +#endif /* HAL_TIM_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/FabReader2.ioc b/Software/FabReader2.ioc new file mode 100644 index 0000000..6794ddd --- /dev/null +++ b/Software/FabReader2.ioc @@ -0,0 +1,203 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +KeepUserPlacement=false +Mcu.CPN=STM32F303RET6 +Mcu.Family=STM32F3 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SPI1 +Mcu.IP3=SYS +Mcu.IPNb=4 +Mcu.Name=STM32F303R(D-E)Tx +Mcu.Package=LQFP64 +Mcu.Pin0=PC13 +Mcu.Pin1=PC14-OSC32_IN +Mcu.Pin10=PA5 +Mcu.Pin11=PA6 +Mcu.Pin12=PA7 +Mcu.Pin13=PB0 +Mcu.Pin14=PA8 +Mcu.Pin15=PA13 +Mcu.Pin16=PA14 +Mcu.Pin17=PB3 +Mcu.Pin18=PB4 +Mcu.Pin19=PB5 +Mcu.Pin2=PC15-OSC32_OUT +Mcu.Pin20=PB6 +Mcu.Pin21=VP_SYS_VS_Systick +Mcu.Pin3=PF0-OSC_IN +Mcu.Pin4=PF1-OSC_OUT +Mcu.Pin5=PA0 +Mcu.Pin6=PA1 +Mcu.Pin7=PA2 +Mcu.Pin8=PA3 +Mcu.Pin9=PA4 +Mcu.PinsNb=22 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F303RETx +MxCube.Version=6.5.0 +MxDb.Version=DB.6.0.50 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_0 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +PA0.Locked=true +PA0.Mode=SYS_WakeUp0 +PA0.Signal=SYS_WKUP1 +PA1.Locked=true +PA1.Signal=GPIO_Output +PA13.GPIOParameters=GPIO_Label +PA13.GPIO_Label=TMS +PA13.Locked=true +PA13.Signal=SYS_JTMS-SWDIO +PA14.GPIOParameters=GPIO_Label +PA14.GPIO_Label=TCK +PA14.Locked=true +PA14.Signal=SYS_JTCK-SWCLK +PA2.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PA2.GPIO_Label=USART_TX +PA2.GPIO_Mode=GPIO_MODE_AF_PP +PA2.GPIO_PuPd=GPIO_NOPULL +PA2.GPIO_Speed=GPIO_SPEED_FREQ_LOW +PA2.Locked=true +PA2.Signal=USART2_TX +PA3.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PA3.GPIO_Label=USART_RX +PA3.GPIO_Mode=GPIO_MODE_AF_PP +PA3.GPIO_PuPd=GPIO_NOPULL +PA3.GPIO_Speed=GPIO_SPEED_FREQ_LOW +PA3.Locked=true +PA3.Signal=USART2_RX +PA4.Locked=true +PA4.Signal=GPIO_Output +PA5.Mode=Full_Duplex_Master +PA5.Signal=SPI1_SCK +PA6.Mode=Full_Duplex_Master +PA6.Signal=SPI1_MISO +PA7.Mode=Full_Duplex_Master +PA7.Signal=SPI1_MOSI +PA8.Locked=true +PA8.Signal=GPIO_Output +PB0.Locked=true +PB0.Signal=GPIO_Output +PB3.GPIOParameters=GPIO_Label +PB3.GPIO_Label=SWO +PB3.Locked=true +PB3.Signal=SYS_JTDO-TRACESWO +PB4.Locked=true +PB4.Signal=GPIO_Output +PB5.Locked=true +PB5.Signal=GPIO_Output +PB6.Locked=true +PB6.Signal=GPIO_Output +PC13.GPIOParameters=GPIO_Label,GPIO_ModeDefaultEXTI +PC13.GPIO_Label=B1 [Blue PushButton] +PC13.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING +PC13.Locked=true +PC13.Signal=GPXTI13 +PC14-OSC32_IN.Locked=true +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PC15-OSC32_OUT.Locked=true +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PF0-OSC_IN.Locked=true +PF0-OSC_IN.Signal=RCC_OSC_IN +PF1-OSC_OUT.Locked=true +PF1-OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F303RETx +ProjectManager.FirmwarePackage=STM32Cube FW_F3 V1.11.3 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=1 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain=STM32CubeIDE +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=FabReader2.ioc +ProjectManager.ProjectName=FabReader2 +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=STM32CubeIDE +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_SPI1_Init-SPI1-false-HAL-true +RCC.ADC12outputFreq_Value=72000000 +RCC.ADC34outputFreq_Value=72000000 +RCC.AHBFreq_Value=72000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV2 +RCC.APB1Freq_Value=36000000 +RCC.APB1TimFreq_Value=72000000 +RCC.APB2Freq_Value=72000000 +RCC.APB2TimFreq_Value=72000000 +RCC.CortexFreq_Value=72000000 +RCC.FCLKCortexFreq_Value=72000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=72000000 +RCC.HSE_VALUE=8000000 +RCC.HSI_VALUE=8000000 +RCC.I2C1Freq_Value=8000000 +RCC.I2C2Freq_Value=8000000 +RCC.I2C3Freq_Value=8000000 +RCC.I2SClocksFreq_Value=72000000 +RCC.IPParameters=ADC12outputFreq_Value,ADC34outputFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCOFreq_Value,PLLCLKFreq_Value,PLLM,PLLMCOFreq_Value,PLLMUL,PLLN,PLLP,PLLQ,RCC_PLLsource_Clock_Source_FROM_HSE,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSourceVirtual,TIM15Freq_Value,TIM16Freq_Value,TIM17Freq_Value,TIM1Freq_Value,TIM20Freq_Value,TIM2Freq_Value,TIM3Freq_Value,TIM8Freq_Value,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOOutput2Freq_Value +RCC.LSE_VALUE=32768 +RCC.LSI_VALUE=40000 +RCC.MCOFreq_Value=72000000 +RCC.PLLCLKFreq_Value=72000000 +RCC.PLLM=8 +RCC.PLLMCOFreq_Value=72000000 +RCC.PLLMUL=RCC_PLL_MUL9 +RCC.PLLN=336 +RCC.PLLP=RCC_PLLP_DIV4 +RCC.PLLQ=7 +RCC.RCC_PLLsource_Clock_Source_FROM_HSE=RCC_HSE_PREDIV_DIV2 +RCC.RTCFreq_Value=40000 +RCC.RTCHSEDivFreq_Value=250000 +RCC.SYSCLKFreq_VALUE=72000000 +RCC.SYSCLKSourceVirtual=RCC_SYSCLKSOURCE_PLLCLK +RCC.TIM15Freq_Value=72000000 +RCC.TIM16Freq_Value=72000000 +RCC.TIM17Freq_Value=72000000 +RCC.TIM1Freq_Value=72000000 +RCC.TIM20Freq_Value=72000000 +RCC.TIM2Freq_Value=72000000 +RCC.TIM3Freq_Value=72000000 +RCC.TIM8Freq_Value=72000000 +RCC.UART4Freq_Value=36000000 +RCC.UART5Freq_Value=36000000 +RCC.USART1Freq_Value=72000000 +RCC.USART2Freq_Value=36000000 +RCC.USART3Freq_Value=36000000 +RCC.USBFreq_Value=72000000 +RCC.VCOOutput2Freq_Value=8000000 +SH.GPXTI13.0=GPIO_EXTI13 +SH.GPXTI13.ConfNb=1 +SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_4 +SPI1.CalculateBaudRate=18.0 MBits/s +SPI1.Direction=SPI_DIRECTION_2LINES +SPI1.IPParameters=VirtualType,Mode,Direction,BaudRatePrescaler,CalculateBaudRate +SPI1.Mode=SPI_MODE_MASTER +SPI1.VirtualType=VM_MASTER +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=NUCLEO-F303RE +boardIOC=true diff --git a/Software/Middlewares/ST/ndef/Inc/message/ndef_buffer.h b/Software/Middlewares/ST/ndef/Inc/message/ndef_buffer.h new file mode 100644 index 0000000..d43aa47 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Inc/message/ndef_buffer.h @@ -0,0 +1,86 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief NDEF buffer type structures + * + */ + +#ifndef NDEF_BUFFER_H +#define NDEF_BUFFER_H + + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + + +/*! NDEF structure to handle const buffers */ +typedef struct +{ + const uint8_t* buffer; /*!< Pointer to const buffer */ + uint32_t length; /*!< buffer length */ +} ndefConstBuffer; + + +/*! NDEF structure to handle buffers */ +typedef struct +{ + uint8_t* buffer; /*!< Pointer to buffer */ + uint32_t length; /*!< buffer length */ +} ndefBuffer; + + +/*! NDEF structure to handle const buffers limited to 256 bytes */ +typedef struct +{ + const uint8_t* buffer; /*!< Pointer to const buffer */ + uint8_t length; /*!< buffer length */ +} ndefConstBuffer8; + + +/*! NDEF structure to handle buffers limited to 256 bytes */ +typedef struct +{ + uint8_t* buffer; /*!< Pointer to buffer */ + uint8_t length; /*!< buffer length */ +} ndefBuffer8; + + +#endif /* NDEF_BUFFER_H */ diff --git a/Software/Middlewares/ST/ndef/Inc/message/ndef_message.h b/Software/Middlewares/ST/ndef/Inc/message/ndef_message.h new file mode 100644 index 0000000..c7dd4eb --- /dev/null +++ b/Software/Middlewares/ST/ndef/Inc/message/ndef_message.h @@ -0,0 +1,196 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief NDEF message header file + * + * NDEF Message provides functionalities required to perform message management. + * A message is a list of records. + * + * The most common interfaces are: + *
  ndefMessageReset() + *
  ndefMessageAppend() + *
  ndefMessageEncode() + *
  ndefMessageDecode() + * + * \addtogroup NDEF + * @{ + * + */ + +#ifndef NDEF_MESSAGE_H +#define NDEF_MESSAGE_H + + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "ndef_record.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +/*! Message scanning macros */ +#define ndefMessageGetFirstRecord(message) (((message) == NULL) ? NULL : (message)->record) /*!< Get first record */ +#define ndefMessageGetNextRecord(record) (((record) == NULL) ? NULL : (record)->next) /*!< Get next record */ + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + + +/*! Message information */ +typedef struct +{ + uint32_t length; /*!< Message length in bytes */ + uint32_t recordCount; /*!< Number of records in the message */ +} ndefMessageInfo; + + +/*! NDEF message */ +struct ndefMessageStruct +{ + ndefRecord* record; /*!< Pointer to a record */ + ndefMessageInfo info; /*!< Message information, e.g. length in bytes, record count */ +}; + + +/* + ****************************************************************************** + * GLOBAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + + +/*! + ***************************************************************************** + * Initialize an empty NDEF message + * + * \param[in,out] message to initialize + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefMessageInit(ndefMessage* message); + + +/*! + ***************************************************************************** + * Get NDEF message information + * + * Return the message information + * + * \param[in] message + * \param[out] info: e.g. message length in bytes, number of records + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefMessageGetInfo(const ndefMessage* message, ndefMessageInfo* info); + + +/*! + ***************************************************************************** + * Get the number of NDEF message records + * + * Return the number of records in the given message + * + * \param[in] message + * + * \return number of records + ***************************************************************************** + */ +uint32_t ndefMessageGetRecordCount(const ndefMessage* message); + + +/*! + ***************************************************************************** + * Append a record to an NDEF message + * + * \param[in] record: Record to append + * \param[in,out] message: Message to be appended with the given record + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefMessageAppend(ndefMessage* message, ndefRecord* record); + + +/*! + ***************************************************************************** + * Decode a raw buffer to an NDEF message + * + * Convert a raw buffer to a message + * + * \param[in] bufPayload: Payload buffer to convert into message + * \param[out] message: Message created from the raw buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefMessageDecode(const ndefConstBuffer* bufPayload, ndefMessage* message); + + +/*! + ***************************************************************************** + * Encode an NDEF message to a raw buffer + * + * Convert a message to a raw buffer + * + * \param[in] message: Message to convert + * \param[in,out] bufPayload: Output buffer to store the converted message + * The input length provides the output buffer allocated + * length, used for parameter check to avoid overflow. + * In case the buffer provided is too short, it is + * updated with the required buffer length. + * On success, it is updated with the actual buffer + * length used to contain the converted message. + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefMessageEncode(const ndefMessage* message, ndefBuffer* bufPayload); + + +#endif /* NDEF_MESSAGE_H */ + +/** + * @} + * + */ diff --git a/Software/Middlewares/ST/ndef/Inc/message/ndef_record.h b/Software/Middlewares/ST/ndef/Inc/message/ndef_record.h new file mode 100644 index 0000000..5b5e9ec --- /dev/null +++ b/Software/Middlewares/ST/ndef/Inc/message/ndef_record.h @@ -0,0 +1,412 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief NDEF record header file + * + * + * NDEF record provides functionalities required to perform record management. + * + * + * \addtogroup NDEF + * @{ + * + */ + +#ifndef NDEF_RECORD_H +#define NDEF_RECORD_H + + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "platform.h" +#include "st_errno.h" +#include "ndef_buffer.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define NDEF_RECORD_HEADER_LEN 7U /*!< Record header length (sizeof(uint8_t) + sizeof(uint8_t) + sizeof(uint32_t) + sizeof(uint8_t) */ + +#define NDEF_SHORT_RECORD_LENGTH_MAX 255U /*!< Short record maximum length */ + + +/*! Type Name Format aka TNF types */ +#define NDEF_TNF_EMPTY 0U /*!< TNF Empty */ +#define NDEF_TNF_RTD_WELL_KNOWN_TYPE 1U /*!< TNF Well-known Type */ +#define NDEF_TNF_MEDIA_TYPE 2U /*!< TNF Media Type */ +#define NDEF_TNF_URI 3U /*!< TNF URI */ +#define NDEF_TNF_RTD_EXTERNAL_TYPE 4U /*!< TNF External Type */ +#define NDEF_TNF_UNKNOWN 5U /*!< TNF Unknown */ +#define NDEF_TNF_UNCHANGED 6U /*!< TNF Unchanged */ +#define NDEF_TNF_RESERVED 7U /*!< TNF Reserved */ + +#define NDEF_TNF_MASK 7U /*!< Type Name Format mask */ + + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + +/*! Build the record header byte, made of MB, ME, CF, SR, IL bits and TNF type */ +#define ndefHeader(MB, ME, CF, SR, IL, TNF) ((((MB) & 1U) << 7U) | (((ME) & 1U) << 6U) | (((CF) & 1U) << 5U) | (((SR) & 1U) << 4U) | (((IL) & 1U) << 3U) | ((uint8_t)(TNF) & NDEF_TNF_MASK) ) /*< Build the record header byte, made of MB, ME, CF, SR, IL bits and TNF type */ + +/*! Read bits in header byte */ +#define ndefHeaderMB(record) ( ((record)->header & 0x80U) >> 7 ) /*!< Return the MB bit from the record header byte */ +#define ndefHeaderME(record) ( ((record)->header & 0x40U) >> 6 ) /*!< Return the ME bit from the record header byte */ +#define ndefHeaderCF(record) ( ((record)->header & 0x20U) >> 5 ) /*!< Return the CF bit from the record header byte */ +#define ndefHeaderSR(record) ( ((record)->header & 0x10U) >> 4 ) /*!< Return the SR bit from the record header byte */ +#define ndefHeaderIL(record) ( ((record)->header & 0x08U) >> 3 ) /*!< Return the IL bit from the record header byte */ +#define ndefHeaderTNF(record) ( (record)->header & NDEF_TNF_MASK ) /*!< Return the TNF type from the record header byte */ + +/*! Set bits in header byte */ +#define ndefHeaderSetMB(record) ( (record)->header |= (1U << 7) ) /*!< Set the MB bit in the record header byte */ +#define ndefHeaderSetME(record) ( (record)->header |= (1U << 6) ) /*!< Set the ME bit in the record header byte */ +#define ndefHeaderSetCF(record) ( (record)->header |= (1U << 5) ) /*!< Set the CF bit in the record header byte */ +#define ndefHeaderSetSR(record) ( (record)->header |= (1U << 4) ) /*!< Set the SR bit in the record header byte */ +#define ndefHeaderSetIL(record) ( (record)->header |= (1U << 3) ) /*!< Set the IL bit in the record header byte */ +#define ndefHeaderSetTNF(record, value) ( (record)->header |= (uint8_t)(value) & NDEF_TNF_MASK ) /*!< Set the TNF type in the record header byte */ + +/*! Clear bits in header byte */ +#define ndefHeaderClearMB(record) ( (record)->header &= 0x7FU ) /*!< Clear the MB bit in the record header byte */ +#define ndefHeaderClearME(record) ( (record)->header &= 0xBFU ) /*!< Clear the ME bit in the record header byte */ +#define ndefHeaderClearCF(record) ( (record)->header &= 0xDFU ) /*!< Clear the CF bit in the record header byte */ +#define ndefHeaderClearSR(record) ( (record)->header &= 0xEFU ) /*!< Clear the SR bit in the record header byte */ +#define ndefHeaderClearIL(record) ( (record)->header &= 0xF7U ) /*!< Clear the IL bit in the record header byte */ +#define ndefHeaderClearTNF(record, value) ( (record)->header &= 0xF8U ) /*!< Clear the TNF type in the record header byte */ + +/*! Set or Clear the MB/ME bit in header byte */ +#define ndefHeaderSetValueMB(record, value) do{ (record)->header &= 0x7FU; (record)->header |= (((uint8_t)(value)) & 1U) << 7; }while(0) /*!< Write the value to the MB bit in the record header byte */ +#define ndefHeaderSetValueME(record, value) do{ (record)->header &= 0xBFU; (record)->header |= (((uint8_t)(value)) & 1U) << 6; }while(0) /*!< Write the value to the ME bit in the record header byte */ +#define ndefHeaderSetValueSR(record, value) do{ (record)->header &= 0xEFU; (record)->header |= (((uint8_t)(value)) & 1U) << 4; }while(0) /*!< Write the value to the SR bit in the record header byte */ + +/*! Test bit in header byte */ +#define ndefHeaderIsSetMB(record) ( ndefHeaderMB(record) == 1U ) /*!< Return true if the Message Begin bit is set */ +#define ndefHeaderIsSetSR(record) ( ndefHeaderSR(record) == 1U ) /*!< Return true if the Short Record bit is set */ +#define ndefHeaderIsSetIL(record) ( ndefHeaderIL(record) == 1U ) /*!< Return true if the Id Length bit is set */ + + +typedef struct ndefTypeStruct ndefType; /*!< Forward declaration */ +typedef struct ndefMessageStruct ndefMessage; /*!< Forward declaration */ + +/*! Record type */ +typedef struct ndefRecordStruct +{ + uint8_t header; /*!< Header byte made of MB:1 ME:1 CF:1 SR:1 IL:1 TNF:3 => 8 bits */ + uint8_t typeLength; /*!< Type length in bytes */ + uint8_t idLength; /*!< Id Length, presence depends on the IL bit */ + const uint8_t* type; /*!< Type follows the structure implied by the value of the TNF field */ + const uint8_t* id; /*!< Id (middle and terminating record chunks MUST NOT have an ID field) */ + ndefConstBuffer bufPayload; /*!< Payload buffer. Payload length depends on the SR bit (either coded on 1 or 4 bytes) */ + + const ndefType* ndeftype; /*!< Well-known type data */ + + struct ndefRecordStruct* next; /*!< Pointer to the next record, if any */ +} ndefRecord; + + +/* + ****************************************************************************** + * GLOBAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + +/*! + ***************************************************************************** + * Reset an NDEF record + * + * This function clears every record field + * + * \param[in,out] record to reset + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordReset(ndefRecord* record); + + +/*! + ***************************************************************************** + * Initialize an NDEF record + * + * This function initializes all record fields + * + * \param[in,out] record: Record to initialize + * \param[in] tnf: TNF type + * \param[in] bufType: Type buffer + * \param[in] bufId: Id buffer + * \param[in] bufPayload: Payload buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordInit(ndefRecord* record, uint8_t tnf, const ndefConstBuffer8* bufType, const ndefConstBuffer8* bufId, const ndefConstBuffer* bufPayload); + + +/*! + ***************************************************************************** + * Get NDEF record header length + * + * Return the length of header for the given record + * + * \param[in] record + * + * \return header length in bytes + ***************************************************************************** + */ +uint32_t ndefRecordGetHeaderLength(const ndefRecord* record); + + +/*! + ***************************************************************************** + * Get NDEF record length + * + * Return the length of the given record, needed to store it as a raw buffer + * + * \param[in] record + * + * \return record length in bytes + ***************************************************************************** + */ +uint32_t ndefRecordGetLength(const ndefRecord* record); + + +/*! + ***************************************************************************** + * Set NDEF record type + * + * Set the type for the given record + * + * \param[in,out] record: Record to set the type + * \param[in] tnf: TNF type + * \param[in] bufType: Type buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordSetType(ndefRecord* record, uint8_t tnf, const ndefConstBuffer8* bufType); + + +/*! + ***************************************************************************** + * Get NDEF record type + * + * Return the type for the given record + * + * \param[in] record: Record to get the type from + * \param[out] tnf: Pointer to the TNF type + * \param[out] bufType: Type string buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordGetType(const ndefRecord* record, uint8_t* tnf, ndefConstBuffer8* bufType); + +/*! + ***************************************************************************** + * Check the record type matches a given type + * + * \param[in] record: Record to get the type from + * \param[out] tnf: the TNF type to compare with + * \param[out] bufType: Type string buffer to compare with + * + * \return true or false + ***************************************************************************** + */ +bool ndefRecordTypeMatch(const ndefRecord* record, uint8_t tnf, const ndefConstBuffer8* bufType); + + +/*! + ***************************************************************************** + * Set NDEF record Id + * + * Set the Id for the given NDEF record + * + * \param[in] record: Record to set the Id + * \param[out] bufId: Id buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordSetId(ndefRecord* record, const ndefConstBuffer8* bufId); + + +/*! + ***************************************************************************** + * Get NDEF record Id + * + * Return the Id for the given NDEF record + * + * \param[in] record: Record to get the Id from + * \param[out] bufId: Id buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordGetId(const ndefRecord* record, ndefConstBuffer8* bufId); + + +/*! + ***************************************************************************** + * Set NDEF record payload + * + * Set the payload for the given record, update the SR bit accordingly + * + * \param[in,out] record: Record to set the payload + * \param[in] bufPayload: Payload buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordSetPayload(ndefRecord* record, const ndefConstBuffer* bufPayload); + + +/*! + ***************************************************************************** + * Get NDEF record payload + * + * Return the payload for the given record + * + * \param[in] record: Record to get the payload from + * \param[out] bufPayload: Payload buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordGetPayload(const ndefRecord* record, ndefConstBuffer* bufPayload); + + +/*! + ***************************************************************************** + * Decode a raw buffer to create an NDEF record + * + * Convert a raw buffer to a record + * + * \param[in] bufPayload: Payload buffer to convert into record + * \param[out] record: Record created from the raw buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordDecode(const ndefConstBuffer* bufPayload, ndefRecord* record); + + +/*! + ***************************************************************************** + * Encode an NDEF record header to a raw buffer + * + * Convert a record header to a raw buffer. It is made of: + * "header byte" (1 byte), type length (1 byte), + * payload length (4 bytes), Id length (1 byte). + * Total 7 bytes. + * + * \param[in] record: Record header to convert + * \param[in,out] bufHeader: Output buffer to store the converted record header + * The input length provides the output buffer allocated + * length, used for parameter check to avoid overflow. + * In case the buffer provided is too short, it is + * updated with the required buffer length. + * On success, it is updated with the actual buffer + * length used to contain the converted record. + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordEncodeHeader(const ndefRecord* record, ndefBuffer* bufHeader); + + +/*! + ***************************************************************************** + * Encode an NDEF record to a raw buffer + * + * Convert a record to a raw buffer + * + * \param[in] record: Record to convert + * \param[in,out] bufRecord: Output buffer to store the converted record + * The input length provides the output buffer allocated + * length, used for parameter check to avoid overflow. + * In case the buffer provided is too short, it is + * updated with the required buffer length. + * On success, it is updated with the actual buffer + * length used to contain the converted record. + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordEncode(const ndefRecord* record, ndefBuffer* bufRecord); + + +/*! + ***************************************************************************** + * Get NDEF record payload length + * + * Return the length of payload for the given record + * + * \param[in] record + * + * \return payload length in bytes + ***************************************************************************** + */ +uint32_t ndefRecordGetPayloadLength(const ndefRecord* record); + + +/*! + ***************************************************************************** + * Return a payload elementary item needed to build the complete record payload + * + * Call this function to get either the first payload item, or the next one. + * Returns the next payload item, call it until it returns NULL. + * + * \param[in] record: Record + * \param[out] bufPayloadItem: The payload item returned + * \param[in] begin: Tell to return the first payload item or the next one + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +const uint8_t* ndefRecordGetPayloadItem(const ndefRecord* record, ndefConstBuffer* bufPayloadItem, bool begin); + + +#endif /* NDEF_RECORD_H */ + +/** + * @} + * + */ diff --git a/Software/Middlewares/ST/ndef/Inc/message/ndef_type_wifi.h b/Software/Middlewares/ST/ndef/Inc/message/ndef_type_wifi.h new file mode 100644 index 0000000..ddf8678 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Inc/message/ndef_type_wifi.h @@ -0,0 +1,161 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief NDEF Wifi type header file + * + * NDEF Wifi type provides functionalities to handle Wifi records. + * + * \addtogroup NDEF + * @{ + * + */ + +#ifndef NDEF_TYPE_WIFI_H +#define NDEF_TYPE_WIFI_H + + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "ndef_types.h" +#include "ndef_record.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + + +#define NDEF_WIFI_AUTHENTICATION_NONE 0U /*!< WPS No Authentication (Should be 1, but set to 0 for Android native support) */ +#define NDEF_WIFI_AUTHENTICATION_WPAPSK 2U /*!< WPS Authentication based on WPAPSK */ +#define NDEF_WIFI_AUTHENTICATION_SHARED 3U /*!< WPS Authentication */ +#define NDEF_WIFI_AUTHENTICATION_WPA 4U /*!< WPS Authentication based on WPA */ +#define NDEF_WIFI_AUTHENTICATION_WPA2 5U /*!< WPS Authentication based on WPA2 */ +#define NDEF_WIFI_AUTHENTICATION_WPA2PSK 6U /*!< WPS Authentication based on WPA2PSK */ + + +#define NDEF_WIFI_ENCRYPTION_NONE 0U /*!< WPS No Encryption (Should be 1, but set to 0 for Android native support) */ +#define NDEF_WIFI_ENCRYPTION_WEP 2U /*!< WPS Encryption based on WEP */ +#define NDEF_WIFI_ENCRYPTION_TKIP 3U /*!< WPS Encryption based on TKIP */ +#define NDEF_WIFI_ENCRYPTION_AES 4U /*!< WPS Encryption based on AES */ + + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + + +/*! Structure to store Network SSID, Authentication Type, Encryption Type and Network Key */ +typedef struct +{ + ndefConstBuffer bufNetworkSSID; /*!< Network SSID */ + ndefConstBuffer bufNetworkKey; /*!< Network Key */ + uint8_t authentication; /*!< Authentication type */ + uint8_t encryption; /*!< Encryption */ +} ndefTypeWifi; + + +/*! Wifi Record Type buffers */ +extern const ndefConstBuffer8 bufMediaTypeWifi; /*! Wifi Record Type buffer */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + + +/*! + ***************************************************************************** + * Initialize a Wifi configuration + * + * \param[out] wifi: wifi type to initialize + * \param[in] wifiConfig: wifi configuration to use + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefWifi(ndefType* wifi, const ndefTypeWifi* wifiConfig); + + +/*! + ***************************************************************************** + * Get Wifi configuration + * + * \param[in] wifi: wifi type to get information from + * \param[out] wifiConfig: wifi configuration + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefGetWifi(const ndefType* wifi, ndefTypeWifi* wifiConfig); + + +/*! + ***************************************************************************** + * Convert an NDEF record to a wifi type + * + * \param[in] record: Record to convert + * \param[out] wifi: The converted wifi type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordToWifi(const ndefRecord* record, ndefType* wifi); + + +/*! + ***************************************************************************** + * Convert a wifi type to an NDEF record + * + * \param[in] wifi: wifi type to convert + * \param[out] record: The converted type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefWifiToRecord(const ndefType* wifi, ndefRecord* record); + + +#endif /* NDEF_TYPE_WIFI_H */ + +/** + * @} + * + */ diff --git a/Software/Middlewares/ST/ndef/Inc/message/ndef_types.h b/Software/Middlewares/ST/ndef/Inc/message/ndef_types.h new file mode 100644 index 0000000..768f88c --- /dev/null +++ b/Software/Middlewares/ST/ndef/Inc/message/ndef_types.h @@ -0,0 +1,330 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief Common NDEF RTD (well-known and external) and Media types header file + * + * NDEF types provides an abstraction layer gathering both the RTD and MIME types + * in a single generic ndefType interface. + * See ndefTypeStruct and ndefType + * + * \addtogroup NDEF + * @{ + * + */ + +#ifndef NDEF_TYPES_H +#define NDEF_TYPES_H + + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "platform.h" +#include "ndef_record.h" +#include "ndef_buffer.h" +#include "ndef_type_wifi.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + + +/*! Device Information defines */ +#define NDEF_UUID_LENGTH 16U /*!< Device Information UUID length */ + + +/*! Text defines */ +/*! RTD Type Text Encoding */ +#define TEXT_ENCODING_UTF8 0U /*!< UTF8 text encoding */ +#define TEXT_ENCODING_UTF16 1U /*!< UTF16 text encoding */ + +#define NDEF_RTD_TEXT_ENCODING_MASK 0x80U /*!< Text encoding mask */ +#define NDEF_RTD_TEXT_ENCODING_SHIFT 7U /*!< Text encoding bit shift */ + + +/*! RTD Type URI Protocols */ +#define NDEF_URI_PREFIX_NONE 0x00U /*!< No URI Protocol */ +#define NDEF_URI_PREFIX_HTTP_WWW 0x01U /*!< URI Protocol http://www. */ +#define NDEF_URI_PREFIX_HTTPS_WWW 0x02U /*!< URI Protocol https://www. */ +#define NDEF_URI_PREFIX_HTTP 0x03U /*!< URI Protocol http:// */ +#define NDEF_URI_PREFIX_HTTPS 0x04U /*!< URI Protocol https:// */ +#define NDEF_URI_PREFIX_TEL 0x05U /*!< URI Protocol tel: */ +#define NDEF_URI_PREFIX_MAILTO 0x06U /*!< URI Protocol mailto: */ +#define NDEF_URI_PREFIX_FTP_ANONYMOUS 0x07U /*!< URI Protocol ftp://anonymous@ */ +#define NDEF_URI_PREFIX_FTP_FTP 0x08U /*!< URI Protocol ftp://ftp. */ +#define NDEF_URI_PREFIX_FTPS 0x09U /*!< URI Protocol ftps:// */ +#define NDEF_URI_PREFIX_SFTP 0x0AU /*!< URI Protocol sftp:// */ +#define NDEF_URI_PREFIX_SMB 0x0BU /*!< URI Protocol smb:// */ +#define NDEF_URI_PREFIX_NFS 0x0CU /*!< URI Protocol nfs:// */ +#define NDEF_URI_PREFIX_FTP 0x0DU /*!< URI Protocol ftp:// */ +#define NDEF_URI_PREFIX_DAV 0x0EU /*!< URI Protocol dav:// */ +#define NDEF_URI_PREFIX_NEWS 0x0FU /*!< URI Protocol news: */ +#define NDEF_URI_PREFIX_TELNET 0x10U /*!< URI Protocol telnet:// */ +#define NDEF_URI_PREFIX_IMAP 0x11U /*!< URI Protocol imap: */ +#define NDEF_URI_PREFIX_RTSP 0x12U /*!< URI Protocol rtsp:// */ +#define NDEF_URI_PREFIX_URN 0x13U /*!< URI Protocol urn: */ +#define NDEF_URI_PREFIX_POP 0x14U /*!< URI Protocol pop: */ +#define NDEF_URI_PREFIX_SIP 0x15U /*!< URI Protocol sip: */ +#define NDEF_URI_PREFIX_SIPS 0x16U /*!< URI Protocol sips: */ +#define NDEF_URI_PREFIX_TFTP 0x17U /*!< URI Protocol tftp: */ +#define NDEF_URI_PREFIX_BTSPP 0x18U /*!< URI Protocol btspp:// */ +#define NDEF_URI_PREFIX_BTL2CAP 0x19U /*!< URI Protocol btl2cap:// */ +#define NDEF_URI_PREFIX_BTGOEP 0x1AU /*!< URI Protocol btgoep:// */ +#define NDEF_URI_PREFIX_TCPOBEX 0x1BU /*!< URI Protocol tcpobex:// */ +#define NDEF_URI_PREFIX_IRDAOBEX 0x1CU /*!< URI Protocol irdaobex:// */ +#define NDEF_URI_PREFIX_FILE 0x1DU /*!< URI Protocol file:// */ +#define NDEF_URI_PREFIX_URN_EPC_ID 0x1EU /*!< URI Protocol urn:epc:id: */ +#define NDEF_URI_PREFIX_URN_EPC_TAG 0x1FU /*!< URI Protocol urn:epc:tag */ +#define NDEF_URI_PREFIX_URN_EPC_PAT 0x20U /*!< URI Protocol urn:epc:pat: */ +#define NDEF_URI_PREFIX_URN_EPC_RAW 0x21U /*!< URI Protocol urn:epc:raw: */ +#define NDEF_URI_PREFIX_URN_EPC 0x22U /*!< URI Protocol urn:epc: */ +#define NDEF_URI_PREFIX_URN_NFC 0x23U /*!< URI Protocol urn:nfc: */ +#define NDEF_URI_PREFIX_AUTODETECT 0x24U /*!< ST Protocol Autodetect */ +#define NDEF_URI_PREFIX_COUNT 0x25U /*!< Number of URI protocols */ + + +/*! vCard defines */ +#define NDEF_VCARD_ENTRY_MAX 16U /*!< vCard maximum entries */ + + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + + +/*! RTD Device Information types */ +#define NDEF_DEVICE_INFO_MANUFACTURER_NAME 0U /*!< Manufacturer name */ +#define NDEF_DEVICE_INFO_MODEL_NAME 1U /*!< Model name */ +#define NDEF_DEVICE_INFO_DEVICE_UNIQUE_NAME 2U /*!< Device Unique Name aka "Friendly Name" */ +#define NDEF_DEVICE_INFO_UUID 3U /*!< UUID */ +#define NDEF_DEVICE_INFO_FIRMWARE_VERSION 4U /*!< Firmware Version */ +#define NDEF_DEVICE_INFO_TYPE_COUNT 5U /*!< Maximum Device Information types */ + + +/*! RTD Device Information Entry */ +typedef struct +{ + uint8_t type; /*!< Device Information Type */ + uint8_t length; /*!< Device Information length */ + const uint8_t* buffer; /*!< Device Information pointer to buffer */ +} ndefDeviceInfoEntry; + + +/*! RTD Type Device Information */ +typedef struct +{ + ndefDeviceInfoEntry devInfo[NDEF_DEVICE_INFO_TYPE_COUNT]; /*!< Device Information entries */ +} ndefTypeRtdDeviceInfo; + + +/*! RTD Type Text */ +typedef struct +{ + uint8_t status; /*!< Status byte */ + ndefConstBuffer8 bufLanguageCode; /*!< ISO/IANA language code buffer */ + ndefConstBuffer bufSentence; /*!< Sentence buffer */ +} ndefTypeRtdText; + + +/*! RTD Type URI */ +typedef struct +{ + uint8_t protocol; /*!< Protocol Idendifier */ + ndefConstBuffer bufUriString; /*!< URI string buffer */ +} ndefTypeRtdUri; + + +/*! RTD Android Application Record External Type */ +typedef struct +{ + ndefConstBuffer8 bufType; /*!< AAR type */ + ndefConstBuffer bufPayload; /*!< AAR payload */ +} ndefTypeRtdAar; + + +/*! Media Type */ +typedef struct +{ + ndefConstBuffer8 bufType; /*!< Media type */ + ndefConstBuffer bufPayload; /*!< Media payload */ +} ndefTypeMedia; + + +/*! vCard input */ +typedef struct +{ + ndefConstBuffer* bufType; /*!< Type buffer */ + ndefConstBuffer* bufSubType; /*!< SubType buffer */ + ndefConstBuffer* bufValue; /*!< Value buffer */ +} ndefVCardInput; + + +/*! vCard Entry */ +typedef struct +{ + const uint8_t* bufTypeBuffer; /*!< Type buffer */ + const uint8_t* bufSubTypeBuffer; /*!< Subtype buffer */ + const uint8_t* bufValueBuffer; /*!< Value buffer */ + /* All lengths below fit in a word */ + uint8_t bufTypeLength; /*!< Type buffer length */ + uint8_t bufSubTypeLength; /*!< Subtype buffer length */ + uint16_t bufValueLength; /*!< Value buffer length */ +} ndefVCardEntry; + + +/*! NDEF Type vCard */ +typedef struct +{ + ndefVCardEntry entry[NDEF_VCARD_ENTRY_MAX]; /*!< vCard entries */ +} ndefTypeVCard; + + +/*****************************************************************************/ + +/*! NDEF Type Id enum */ +typedef enum +{ + NDEF_TYPE_EMPTY = 0, + NDEF_TYPE_RTD_DEVICE_INFO, + NDEF_TYPE_RTD_TEXT, + NDEF_TYPE_RTD_URI, + NDEF_TYPE_RTD_AAR, + NDEF_TYPE_MEDIA, + NDEF_TYPE_MEDIA_VCARD, + NDEF_TYPE_MEDIA_WIFI, + NDEF_TYPE_ID_COUNT /* Keep this one last */ +} ndefTypeId; + + +/*! NDEF abstraction Struct */ +struct ndefTypeStruct +{ + ndefTypeId id; /*!< Type Id */ + uint32_t (*getPayloadLength)(const ndefType* type); /*!< Return payload length, specific to each type */ + const uint8_t* (*getPayloadItem)(const ndefType* type, ndefConstBuffer* item, bool begin); /*!< Payload Encoder, specific to each type */ + union + { + ndefTypeRtdDeviceInfo deviceInfo; /*!< Device Information */ + ndefTypeRtdText text; /*!< Text */ + ndefTypeRtdUri uri; /*!< URI */ + ndefTypeRtdAar aar; /*!< AAR */ + ndefTypeMedia media; /*!< Media */ + ndefTypeVCard vCard; /*!< vCard */ + ndefTypeWifi wifi; /*!< Wifi */ + } data; /*!< Type data union */ +}; + + +/* + ****************************************************************************** + * GLOBAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + + +/*! + ***************************************************************************** + * Return an NDEF record type Id + * + * \param[in] record: Record to get the type from + * \param[out] typeId: The record RTD type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordTypeStringToTypeId(const ndefRecord* record, ndefTypeId* typeId); + + +/*! + ***************************************************************************** + * Convert a record to a supported type + * + * \param[in] record: Record to read + * \param[out] type: Type to store the converted record + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordToType(const ndefRecord* record, ndefType* type); + + +/*! + ***************************************************************************** + * Convert a supported type to a record + * + * \param[in] type: Pointer to the type to read data from + * \param[out] record: Record to fill + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefTypeToRecord(const ndefType* type, ndefRecord* record); + + +/*! + ***************************************************************************** + * Set the NDEF specific structure to process NDEF types + * + * \param[in] record: Record + * \param[out] type: NDEF type structure + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordSetNdefType(ndefRecord* record, const ndefType* type); + + +/*! + ***************************************************************************** + * Get the NDEF type structure of this record + * + * \param[in] record: Record + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +const ndefType* ndefRecordGetNdefType(const ndefRecord* record); + + +#endif /* NDEF_TYPES_H */ + +/** + * @} + * + */ diff --git a/Software/Middlewares/ST/ndef/Inc/message/ndef_types_mime.h b/Software/Middlewares/ST/ndef/Inc/message/ndef_types_mime.h new file mode 100644 index 0000000..6f84592 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Inc/message/ndef_types_mime.h @@ -0,0 +1,203 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief NDEF MIME types header file + * + * NDEF MIME type provides functionalities to handle MIME records, such as vCard or generic media. + * + * \addtogroup NDEF + * @{ + * + */ + +#ifndef NDEF_TYPES_MIME_H +#define NDEF_TYPES_MIME_H + + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "ndef_types.h" +#include "ndef_record.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + +/*! Media Record Type buffers */ +extern const ndefConstBuffer8 bufMediaTypeVCard; /*! vCard Record Type buffer */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + + +/*************** + * Media + *************** + */ + +/*! + ***************************************************************************** + * Initialize a Media type + * + * \param[out] media: Media type to initialize + * \param[in] bufType: Type buffer + * \param[in] bufPayload: Payload buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefMedia(ndefType* media, const ndefConstBuffer8* bufType, const ndefConstBuffer* bufPayload); + + +/*! + ***************************************************************************** + * Get Media type content + * + * \param[in] media: Media type to get information from + * \param[out] bufType: Type buffer + * \param[out] bufPayload: Payload buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefGetMedia(const ndefType* media, ndefConstBuffer8* bufType, ndefConstBuffer* bufPayload); + + +/*! + ***************************************************************************** + * Convert an NDEF record to a Media type + * + * \param[in] record: Record to convert + * \param[out] media: The converted Media type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordToMedia(const ndefRecord* record, ndefType* media); + + +/*! + ***************************************************************************** + * Convert a Media type to an NDEF record + * + * \param[in] media: Type to convert + * \param[out] record: The converted type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefMediaToRecord(const ndefType* media, ndefRecord* record); + + +/*************** + * vCard + *************** + */ + +/*! + ***************************************************************************** + * Initialize a vCard + * + * \param[out] vCard: vCard type to initialize + * \param[in] bufVCardInput: vCard buffer content + * \param[in] bufVCardInputCount: Number of vCard entries + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefVCard(ndefType* vCard, const ndefVCardInput* bufVCardInput, uint32_t bufVCardInputCount); + + +/*! + ***************************************************************************** + * Get vCard content + * + * \param[in] vCard: vCard type to get information from + * \param[out] bufType: Type buffer to extract + * \param[out] bufSubType: SubType buffer extracted. Can be NULL is not required + * \param[out] bufValue: Value buffer extracted + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefGetVCard(const ndefType* vCard, const ndefConstBuffer* bufType, ndefConstBuffer* bufSubType, ndefConstBuffer* bufValue); + + +/*! + ***************************************************************************** + * Convert an NDEF record to a vCard + * + * \param[in] record: Record to convert + * \param[out] vCard: The converted vCard type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordToVCard(const ndefRecord* record, ndefType* vCard); + + +/*! + ***************************************************************************** + * Convert a vCard type to an NDEF record + * + * \param[in] vCard: vCard type to convert + * \param[out] record: The converted type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefVCardToRecord(const ndefType* vCard, ndefRecord* record); + + +#endif /* NDEF_TYPES_MIME_H */ + +/** + * @} + * + */ diff --git a/Software/Middlewares/ST/ndef/Inc/message/ndef_types_rtd.h b/Software/Middlewares/ST/ndef/Inc/message/ndef_types_rtd.h new file mode 100644 index 0000000..7d65a75 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Inc/message/ndef_types_rtd.h @@ -0,0 +1,366 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief NDEF RTD (well-known and external) types header file + * + * NDEF RTD provides functionalities to handle RTD records, such as Text or URI. + * + * \addtogroup NDEF + * @{ + * + */ + +#ifndef NDEF_TYPES_RTD_H +#define NDEF_TYPES_RTD_H + + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "ndef_types.h" +#include "ndef_record.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + +/*! RTD Record Type buffers */ +extern const ndefConstBuffer8 bufRtdTypeDeviceInfo; /*! Device Information Record Type buffer */ +extern const ndefConstBuffer8 bufRtdTypeText; /*! Text Record Type buffer */ +extern const ndefConstBuffer8 bufRtdTypeUri; /*! URI Record Type buffer */ +extern const ndefConstBuffer8 bufRtdTypeAar; /*! AAR (Android Application Record) Record Type buffer */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + + +/*************** + * Empty type + *************** + */ + +/*! + ***************************************************************************** + * Initialize an Empty type + * + * \param[out] empty: Type to initialize + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefEmptyType(ndefType* empty); + + +/*! + ***************************************************************************** + * Convert an NDEF record to an Empty type + * + * \param[in] record: Record to convert + * \param[out] empty: The converted type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordToEmptyType(const ndefRecord* record, ndefType* empty); + + +/*! + ***************************************************************************** + * Convert an Empty type to an NDEF record + * + * \param[in] empty: Type to convert + * \param[out] record: The converted type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefEmptyTypeToRecord(const ndefType* empty, ndefRecord* record); + + +/********************* + * Device Information + ********************* + */ + +/*! + ***************************************************************************** + * Initialize a RTD Device Information type + * + * \param[out] devInfo: Type to initialize + * \param[in] devInfoData: Device Information data + * \param[in] devInfoDataCount: Number of Device Information data + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRtdDeviceInfo(ndefType* devInfo, const ndefDeviceInfoEntry* devInfoData, uint8_t devInfoDataCount); + + +/*! + ***************************************************************************** + * Get RTD Device Information type content + * + * \param[in] devInfo: Type to get information from + * \param[out] devInfoData: Device Information data + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefGetRtdDeviceInfo(const ndefType* devInfo, ndefTypeRtdDeviceInfo* devInfoData); + + +/*! + ***************************************************************************** + * Convert an NDEF record to a Device Information RTD type + * + * \param[in] record: Record to convert + * \param[out] devInfo: The converted type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordToRtdDeviceInfo(const ndefRecord* record, ndefType* devInfo); + + +/*! + ***************************************************************************** + * Convert a Device Information RTD type to an NDEF record + * + * \param[in] devInfo: Type to convert + * \param[out] record: The converted type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRtdDeviceInfoToRecord(const ndefType* devInfo, ndefRecord* record); + + +/*************** + * Text + *************** + */ + + +/*! + ***************************************************************************** + * Initialize a Text RTD type + * + * \param[out] text: Type to initialize + * \param[out] utfEncoding: UTF-8/UTF-16 + * \param[in] bufLanguageCode: ISO/IANA language code buffer + * \param[in] bufSentence: Actual text buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRtdText(ndefType* text, uint8_t utfEncoding, const ndefConstBuffer8* bufLanguageCode, const ndefConstBuffer* bufSentence); + + +/*! + ***************************************************************************** + * Get RTD Text type content + * + * \param[in] text: Type to get information from + * \param[out] utfEncoding: UTF-8/UTF-16 + * \param[out] bufLanguageCode: ISO/IANA language code buffer + * \param[out] bufSentence: Actual text buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefGetRtdText(const ndefType* text, uint8_t* utfEncoding, ndefConstBuffer8* bufLanguageCode, ndefConstBuffer* bufSentence); + + +/*! + ***************************************************************************** + * Convert an NDEF record to a Text type + * + * \param[in] record: Record to convert + * \param[out] text: The converted type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordToRtdText(const ndefRecord* record, ndefType* text); + + +/*! + ***************************************************************************** + * Convert a Text RTD type to an NDEF record + * + * \param[in] text: Type to convert + * \param[out] record: The converted type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRtdTextToRecord(const ndefType* text, ndefRecord* record); + + +/*************** + * URI + *************** + */ + +/*! + ***************************************************************************** + * Initialize a URI RTD type + * + * \param[out] uri: Type to initialize + * \param[in] protocol: URI protocol + * \param[in] bufUriString: URI string buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRtdUri(ndefType* uri, uint8_t protocol, const ndefConstBuffer* bufUriString); + + +/*! + ***************************************************************************** + * Get URI RTD type content + * + * \param[in] uri: Type to get information from + * \param[out] bufProtocol: URI protocol buffer + * \param[out] bufUriString: URI string buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefGetRtdUri(const ndefType* uri, ndefConstBuffer* bufProtocol, ndefConstBuffer* bufUriString); + + +/*! + ***************************************************************************** + * Convert an NDEF record to a URI RTD type + * + * \param[in] record: Record to convert + * \param[out] uri: The converted type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordToRtdUri(const ndefRecord* record, ndefType* uri); + + +/*! + ***************************************************************************** + * Convert a URI RTD type to an NDEF record + * + * \param[in] uri: Type to convert + * \param[out] record: The converted type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRtdUriToRecord(const ndefType* uri, ndefRecord* record); + + +/******************* + * AAR External Type + ******************* + */ + +/*! + ***************************************************************************** + * Initialize an RTD Android Application Record External type + * + * \param[out] aar: Type to initialize + * \param[in] bufPayload: Payload buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRtdAar(ndefType* aar, const ndefConstBuffer* bufPayload); + + +/*! + ***************************************************************************** + * Get RTD Android Application Record type content + * + * \param[in] aar: Type to get information from + * \param[out] bufAarString: AAR string buffer + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefGetRtdAar(const ndefType* aar, ndefConstBuffer* bufAarString); + + +/*! + ***************************************************************************** + * Convert an NDEF record to an RTD Android Application Record External type + * + * \param[in] record: Record to convert + * \param[out] aar: The converted AAR external type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRecordToRtdAar(const ndefRecord* record, ndefType* aar); + + +/*! + ***************************************************************************** + * Convert an RTD Android Application Record External type to an NDEF record + * + * \param[in] aar: AAR External type to convert + * \param[out] record: The converted type + * + * \return ERR_NONE if successful or a standard error code + ***************************************************************************** + */ +ReturnCode ndefRtdAarToRecord(const ndefType* aar, ndefRecord* record); + + +#endif /* NDEF_TYPES_RTD_H */ + +/** + * @} + * + */ diff --git a/Software/Middlewares/ST/ndef/Inc/poller/ndef_poller.h b/Software/Middlewares/ST/ndef/Inc/poller/ndef_poller.h new file mode 100644 index 0000000..1b92374 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Inc/poller/ndef_poller.h @@ -0,0 +1,594 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief Provides NDEF methods and definitions to access NFC Forum Tags + * + * NDEF provides several functionalities required to perform NFC NDEF activities. + *
The NDEF encapsulates the different tag technologies (T2T, T3T, T4AT, T4BT, T5T) + * into a common and easy to use interface. + * + * It provides interfaces to Detect, Read, Write and Format NDEF. + * + * The most common interfaces are: + *
  ndefPollerContextInitialization() + *
  ndefPollerNdefDetect() + *
  ndefPollerReadRawMessage() + *
  ndefPollerWriteRawMessage() + *
  ndefPollerTagFormat() + *
  ndefPollerWriteMessage() + * + * + * An NDEF read usage example is provided here: \ref ndef_example_read.c + * \example ndef_example_read.c + * + * An NDEF write usage example is provided here: \ref ndef_example_write.c + * \example ndef_example_write.c + * + * \addtogroup NDEF + * @{ + * + */ + + +#ifndef NDEF_POLLER_H +#define NDEF_POLLER_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_nfca.h" +#include "rfal_nfcb.h" +#include "rfal_nfcf.h" +#include "rfal_nfcv.h" +#include "rfal_nfc.h" +#include "rfal_isoDep.h" +#include "rfal_t4t.h" +#include "ndef_record.h" +#include "ndef_message.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define NDEF_CC_BUF_LEN 17U /*!< CC buffer len. Max len = 17 in case of T4T v3 */ +#define NDEF_NFCV_SUPPORTED_CMD_LEN 4U /*!< Ext sys info supported commands list len */ + +#define NDEF_SHORT_VFIELD_MAX_LEN 254U /*!< Max V-field length for 1-byte Lengh encoding */ +#define NDEF_TERMINATOR_TLV_LEN 1U /*!< Terminator TLV size */ +#define NDEF_TERMINATOR_TLV_T 0xFEU /*!< Terminator TLV T=FEh */ + +#define NDEF_T2T_READ_RESP_SIZE 16U /*!< Size of the READ response i.e. four blocks */ + +#define NDEF_T3T_BLOCK_SIZE 16U /*!< size for a block in t3t */ +#define NDEF_T3T_MAX_NB_BLOCKS 4U /*!< size for a block in t3t */ +#define NDEF_T3T_MAX_RX_SIZE ((NDEF_T3T_BLOCK_SIZE*NDEF_T3T_MAX_NB_BLOCKS) + 16U) /*!< size for receive 4 blocks of 16 + UID + HEADER + CHECKSUM */ +#define NDEF_T3T_MAX_TX_SIZE ((NDEF_T3T_BLOCK_SIZE*NDEF_T3T_MAX_NB_BLOCKS) + 16U) /*!< size for send Check 4 blocks of 16 + UID + HEADER + CHECKSUM */ + +#define NDEF_T5T_TxRx_BUFF_HEADER_SIZE 1U /*!< Request Flags/Responses Flags size */ +#define NDEF_T5T_TxRx_BUFF_FOOTER_SIZE 2U /*!< CRC size */ + +#define NDEF_T5T_TxRx_BUFF_SIZE \ + (32U + NDEF_T5T_TxRx_BUFF_HEADER_SIZE + NDEF_T5T_TxRx_BUFF_FOOTER_SIZE) /*!< T5T working buffer size */ + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +#define ndefBytes2Uint16(hiB, loB) ((uint16_t)((((uint32_t)(hiB)) << 8U) | ((uint32_t)(loB)))) /*!< convert 2 bytes to a u16 */ + +#define ndefMajorVersion(V) ((uint8_t)((V) >> 4U)) /*!< Get major version */ +#define ndefMinorVersion(V) ((uint8_t)((V) & 0xFU)) /*!< Get minor version */ + +/* + ****************************************************************************** + * NDEF FEATURES CONFIGURATION + ****************************************************************************** + */ + +#define NDEF_FEATURE_ALL true /*!< Enable/Disable NDEF support for full features (write NDEF, format, ...) */ + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + +/*! NDEF device type */ +typedef enum { + NDEF_DEV_NONE = 0x00U, /*!< Device type undef */ + NDEF_DEV_T1T = 0x01U, /*!< Device type T1T */ + NDEF_DEV_T2T = 0x02U, /*!< Device type T2T */ + NDEF_DEV_T3T = 0x03U, /*!< Device type T3T */ + NDEF_DEV_T4T = 0x04U, /*!< Device type T4AT */ + NDEF_DEV_T5T = 0x05U, /*!< Device type T5T */ +} ndefDeviceType; + +/*! NDEF states */ +typedef enum { + NDEF_STATE_INVALID = 0x00U, /*!< Invalid state (e.g. no CC) */ + NDEF_STATE_INITIALIZED = 0x01U, /*!< State Initialized (no NDEF message) */ + NDEF_STATE_READWRITE = 0x02U, /*!< Valid NDEF found. Read/Write capability */ + NDEF_STATE_READONLY = 0x03U, /*!< Valid NDEF found. Read only */ +} ndefState; + +/*! NDEF Information */ +typedef struct { + uint8_t majorVersion; /*!< Major version */ + uint8_t minorVersion; /*!< Minor version */ + uint32_t areaLen; /*!< Area Len for NDEF storage */ + uint32_t areaAvalableSpaceLen; /*!< Remaining Space in case a propTLV is present */ + uint32_t messageLen; /*!< NDEF message Len */ + ndefState state; /*!< Tag state e.g. NDEF_STATE_INITIALIZED */ +} ndefInfo; + +/*! NFCV (Extended) System Information */ +typedef struct { + uint16_t numberOfBlock; /*!< Number of block */ + uint8_t UID[RFAL_NFCV_UID_LEN]; /*!< UID Value */ + uint8_t supportedCmd[NDEF_NFCV_SUPPORTED_CMD_LEN];/*!< Supported Commands list */ + uint8_t infoFlags; /*!< Information flags */ + uint8_t DFSID; /*!< DFSID Value */ + uint8_t AFI; /*!< AFI Value */ + uint8_t blockSize; /*!< Block Size Value */ + uint8_t ICRef; /*!< IC Reference */ +} ndefSystemInformation; + +/*! T1T Capability Container */ +typedef struct { + uint8_t magicNumber; /*!< Magic number e.g. E1h */ + uint8_t majorVersion; /*!< Major version i.e 1 */ + uint8_t minorVersion; /*!< Minor version i.e 2 */ + uint16_t tagMemorySize; /*!< Tag Memory Size (TMS) */ + uint8_t readAccess; /*!< NDEF READ access condition */ + uint8_t writeAccess; /*!< NDEF WRITE access condition */ +} ndefCapabilityContainerT1T; + +/*! T2T Capability Container */ +typedef struct { + uint8_t magicNumber; /*!< Magic number e.g. E1h */ + uint8_t majorVersion; /*!< Major version i.e 1 */ + uint8_t minorVersion; /*!< Minor version i.e 2 */ + uint8_t size; /*!< Size. T2T_Area_Size = Size * 8 */ + uint8_t readAccess; /*!< NDEF READ access condition */ + uint8_t writeAccess; /*!< NDEF WRITE access condition */ +} ndefCapabilityContainerT2T; + +/*! T3T Attribute info block */ +typedef struct { + uint8_t majorVersion; /*!< Major version i.e 1 */ + uint8_t minorVersion; /*!< Minor version i.e 2 */ + uint8_t nbR; /*!< Nbr: number of blocks read in one CHECK cmd */ + uint8_t nbW; /*!< Nbr: number of blocks written in one UPDATE cmd */ + uint16_t nMaxB; /*!< NmaxB: max number of blocks for NDEF data */ + uint8_t writeFlag; /*!< WriteFlag indicates completion of previous NDEF */ + uint8_t rwFlag; /*!< RWFlag indicates whether the NDEF can be updated */ + uint32_t Ln; /*!< Ln size of the actual stored NDEF data in bytes */ +} ndefAttribInfoBlockT3T; + +/*! T4T Capability Container */ +typedef struct { + uint16_t ccLen; /*!< CCFILE Len */ + uint8_t vNo; /*!< Mapping version */ + uint16_t mLe; /*!< Max data size that can be read using a ReadBinary */ + uint16_t mLc; /*!< Max data size that can be sent using a single cmd */ + uint8_t fileId[2]; /*!< NDEF File Identifier */ + uint32_t fileSize; /*!< NDEF File Size */ + uint8_t readAccess; /*!< NDEF File READ access condition */ + uint8_t writeAccess; /*!< NDEF File WRITE access condition */ +} ndefCapabilityContainerT4T; + +/*! T5T Capability Container */ +typedef struct { + uint8_t ccLen; /*!< CC Len */ + uint8_t magicNumber; /*!< Magic number i.e. E1h or E2h */ + uint8_t majorVersion; /*!< Major version i.e 1 */ + uint8_t minorVersion; /*!< Minor version i.e 0 */ + uint8_t readAccess; /*!< NDEF READ access condition */ + uint8_t writeAccess; /*!< NDEF WRITE access condition */ + bool specialFrame; /*!< Use Special Frames for Write-alike commands */ + bool lockBlock; /*!< (EXTENDED_)LOCK_SINGLE_BLOCK supported */ + bool multipleBlockRead; /*!< (EXTENDED_)READ_MULTIPLE_BLOCK supported */ + bool mlenOverflow; /*!< memory size exceeds 2040 bytes (Android) */ + uint16_t memoryLen; /*!< MLEN (Memory Len). T5T_Area size = 8 * MLEN (bytes)*/ +} ndefCapabilityContainerT5T; + +/*! Generic Capability Container */ +typedef union { + ndefCapabilityContainerT1T t1t; /*!< T1T Capability Container */ + ndefCapabilityContainerT2T t2t; /*!< T2T Capability Container */ + ndefAttribInfoBlockT3T t3t; /*!< T3T Attribute Information Block */ + ndefCapabilityContainerT4T t4t; /*!< T4T Capability Container */ + ndefCapabilityContainerT5T t5t; /*!< T5T Capability Container */ +} ndefCapabilityContainer; + +/*! NDEF T1T sub context structure */ +typedef struct { + void * rfu; /*!< RFU */ +} ndefT1TContext; + +/*! NDEF T2T sub context structure */ +typedef struct { + uint8_t currentSecNo; /*!< Current sector number */ + uint8_t cacheBuf[NDEF_T2T_READ_RESP_SIZE]; /*!< Cache buffer */ + uint32_t cacheAddr; /*!< Address of cached data */ + uint32_t offsetNdefTLV; /*!< NDEF TLV message offset */ +} ndefT2TContext; + +/*! NDEF T3T sub context structure */ +typedef struct { + uint8_t txbuf[NDEF_T3T_MAX_TX_SIZE]; /*!< Tx buffer dedicated for T3T internal operations */ + uint8_t rxbuf[NDEF_T3T_MAX_RX_SIZE]; /*!< Rx buffer dedicated for T3T internal operations */ + rfalNfcfBlockListElem listBlocks[NDEF_T3T_MAX_NB_BLOCKS]; /*!< block number list for T3T internal operations */ +} ndefT3TContext; + +/*! NDEF T4T sub context structure */ +typedef struct { + uint8_t curMLe; /*!< Current MLe. Default Fh until CC file is read */ + uint8_t curMLc; /*!< Current MLc. Default Dh until CC file is read */ + bool mv1Flag; /*!< Mapping version 1 flag */ + rfalIsoDepApduBufFormat cApduBuf; /*!< Command-APDU buffer */ + rfalIsoDepApduBufFormat rApduBuf; /*!< Response-APDU buffer */ + rfalT4tRApduParam respAPDU; /*!< Response-APDU params */ + rfalIsoDepBufFormat tmpBuf; /*!< I-Block temporary buffer */ + uint16_t rApduBodyLen; /*!< Response Body Len */ +} ndefT4TContext; + +/*! NDEF T5T sub context structure */ +typedef struct { + uint8_t * pAddressedUid; /*!< Pointer to UID in Addr mode or NULL selected one */ + uint32_t TlvNDEFOffset; /*!< NDEF TLV message offset */ + uint8_t blockLen; /*!< T5T BLEN parameter */ + ndefSystemInformation sysInfo; /*!< System Information (when supported) */ + bool sysInfoSupported; /*!< System Information Supported flag */ + bool legacySTHighDensity; /*!< Legacy ST High Density flag */ + uint8_t txrxBuf[NDEF_T5T_TxRx_BUFF_SIZE]; /*!< Tx Rx Buffer */ +} ndefT5TContext; + +/*! NDEF context structure */ +typedef struct { + rfalNfcDevice device; /*!< ndef Device */ + ndefState state; /*!< Tag state e.g. NDEF_STATE_INITIALIZED */ + ndefCapabilityContainer cc; /*!< Capability Container */ + uint32_t messageLen; /*!< NDEF message len */ + uint32_t messageOffset; /*!< NDEF message offset */ + uint32_t areaLen; /*!< Area Len for NDEF storage */ + uint8_t ccBuf[NDEF_CC_BUF_LEN]; /*!< buffer for CC */ + const struct ndefPollerWrapperStruct* + ndefPollWrapper; /*!< pointer to array of function for wrapper */ + union { + ndefT1TContext t1t; /*!< T1T context */ + ndefT2TContext t2t; /*!< T2T context */ + ndefT3TContext t3t; /*!< T3T context */ +#if RFAL_FEATURE_T4T + ndefT4TContext t4t; /*!< T4T context */ +#endif + ndefT5TContext t5t; /*!< T5T context */ + } subCtx; /*!< Sub-context union */ + +} ndefContext; + +/*! Wrapper struture to hold the function pointers on each tag type */ +typedef struct ndefPollerWrapperStruct +{ + ReturnCode (* pollerContextInitialization)(ndefContext *ctx, const rfalNfcDevice *dev); /*!< ContextInitialization function pointer */ + ReturnCode (* pollerNdefDetect)(ndefContext *ctx, ndefInfo *info); /*!< NdefDetect function pointer */ + ReturnCode (* pollerReadBytes)(ndefContext *ctx, uint32_t offset, uint32_t len, uint8_t *buf, uint32_t *rcvdLen); /*!< Read function pointer */ + ReturnCode (* pollerReadRawMessage)(ndefContext *ctx, uint8_t *buf, uint32_t bufLen, uint32_t *rcvdLen); /*!< ReadRawMessage function pointer */ +#if NDEF_FEATURE_ALL + ReturnCode (* pollerWriteBytes)(ndefContext *ctx, uint32_t offset, const uint8_t *buf, uint32_t len); /*!< Write function pointer */ + ReturnCode (* pollerWriteRawMessage)(ndefContext *ctx, const uint8_t *buf, uint32_t bufLen); /*!< WriteRawMessage function pointer */ + ReturnCode (* pollerTagFormat)(ndefContext *ctx, const ndefCapabilityContainer *cc, uint32_t options); /*!< TagFormat function pointer */ + ReturnCode (* pollerWriteRawMessageLen)(ndefContext *ctx, uint32_t rawMessageLen); /*!< WriteRawMessageLen function pointer */ + ReturnCode (* pollerCheckPresence)(ndefContext *ctx); /*!< CheckPresence function pointer */ + ReturnCode (* pollerCheckAvailableSpace)(const ndefContext *ctx, uint32_t messageLen); /*!< CheckAvailableSpace function pointer */ + ReturnCode (* pollerBeginWriteMessage)(ndefContext *ctx, uint32_t messageLen); /*!< BeginWriteMessage function pointer */ + ReturnCode (* pollerEndWriteMessage)(ndefContext *ctx, uint32_t messageLen); /*!< EndWriteMessage function pointer */ +#endif /* NDEF_FEATURE_ALL */ +} ndefPollerWrapper; + +/* + ****************************************************************************** + * GLOBAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + +/*! + ***************************************************************************** + * \brief Handle NDEF context activation + * + * This method performs the initialization of the NDEF context. + * It must be called after a successful + * anti-collision procedure and prior to any NDEF procedures such as NDEF + * detection procedure. + * + * \param[in] ctx : ndef Context + * \param[in] dev : ndef Device + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefPollerContextInitialization(ndefContext *ctx, const rfalNfcDevice *dev); + + +/*! + ***************************************************************************** + * \brief NDEF Detection procedure + * + * This method performs the NDEF Detection procedure + * + * \param[in] ctx : ndef Context + * \param[out] info : ndef Information (optional parameter, NULL may be used when no NDEF Information is needed) + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : Detection failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefPollerNdefDetect(ndefContext *ctx, ndefInfo *info); + + +/*! + ***************************************************************************** + * \brief Read data + * + * This method reads arbitrary length data + * + * \param[in] ctx : ndef Context + * \param[in] offset : file offset of where to start reading data + * \param[in] len : requested len + * \param[out] buf : buffer to place the data read from the tag + * \param[out] rcvdLen: received length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefPollerReadBytes(ndefContext *ctx, uint32_t offset, uint32_t len, uint8_t *buf, uint32_t *rcvdLen); + + +/*! + ***************************************************************************** + * \brief Write data + * + * This method writes arbitrary length data from the current selected file + * + * \param[in] ctx : ndef Context + * \param[in] offset : file offset of where to start writing data + * \param[in] buf : data to write + * \param[in] len : buf len + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefPollerWriteBytes(ndefContext *ctx, uint32_t offset, const uint8_t *buf, uint32_t len); + + +/*! + ***************************************************************************** + * \brief Read raw NDEF message + * + * This method reads a raw NDEF message. + * Prior to NDEF Read procedure, a successful ndefPollerNdefDetect() + * has to be performed. + * + * + * \param[in] ctx : ndef Context + * \param[out] buf : buffer to place the NDEF message + * \param[in] bufLen : buffer length + * \param[out] rcvdLen: received length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefPollerReadRawMessage(ndefContext *ctx, uint8_t *buf, uint32_t bufLen, uint32_t *rcvdLen); + + +/*! + ***************************************************************************** + * \brief Write raw NDEF message + * + * This method writes a raw NDEF message. + * Prior to NDEF Write procedure, a successful ndefPollerNdefDetect() + * has to be performed. + * + * \param[in] ctx : ndef Context + * \param[in] buf : raw message buffer + * \param[in] bufLen : buffer length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefPollerWriteRawMessage(ndefContext *ctx, const uint8_t *buf, uint32_t bufLen); + + +/*! + ***************************************************************************** + * \brief Format Tag + * + * This method format a tag to make it ready for NDEF storage. + * cc and options parameters usage is described in each technology method + * (ndefT[2345]TPollerTagFormat) + * + * \param[in] ctx : ndef Context + * \param[in] cc : Capability Container + * \param[in] options : specific flags + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefPollerTagFormat(ndefContext *ctx, const ndefCapabilityContainer *cc, uint32_t options); + + +/*! + ***************************************************************************** + * \brief Write NDEF message length + * + * This method writes the NLEN field + * + * \param[in] ctx : ndef Context + * \param[in] rawMessageLen: len + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefPollerWriteRawMessageLen(ndefContext *ctx, uint32_t rawMessageLen); + + + /*! + ***************************************************************************** + * \brief Write an NDEF message + * + * Write the NDEF message to the tag + * + * \param[in] ctx: NDEF Context + * \param[in] message: Message to write + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefPollerWriteMessage(ndefContext *ctx, const ndefMessage* message); + + +/*! + ***************************************************************************** + * \brief Check Presence + * + * This method check whether an NFC tag is still present in the operating field + * + * \param[in] ctx : ndef Context + + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefPollerCheckPresence(ndefContext *ctx); + + +/*! + ***************************************************************************** + * \brief Check Available Space + * + * This method check whether a NFC tag has enough space to write a message of a given length + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefPollerCheckAvailableSpace(const ndefContext *ctx, uint32_t messageLen); + + +/*! + ***************************************************************************** + * \brief Begin Write Message + * + * This method sets the L-field to 0 (T1T, T2T, T4T, T5T) or set the WriteFlag (T3T) and sets the message offset to the proper value according to messageLen + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefPollerBeginWriteMessage(ndefContext *ctx, uint32_t messageLen); + + +/*! + ***************************************************************************** + * \brief End Write Message + * + * This method updates the L-field value after the message has been written and resets the WriteFlag (for T3T only) + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefPollerEndWriteMessage(ndefContext *ctx, uint32_t messageLen); + + +#endif /* NDEF_POLLER_H */ + +/** + * @} + * + */ diff --git a/Software/Middlewares/ST/ndef/Inc/poller/ndef_t2t.h b/Software/Middlewares/ST/ndef/Inc/poller/ndef_t2t.h new file mode 100644 index 0000000..c6cf2b1 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Inc/poller/ndef_t2t.h @@ -0,0 +1,340 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief Provides NDEF methods and definitions to access NFC Forum T2T + * + * NDEF T2T provides several functionalities required to + * perform NDEF message management with T2T tags. + * + * The most common interfaces are + *
  ndefT2TPollerContextInitialization() + *
  ndefT2TPollerNdefDetect() + *
  ndefT2TPollerReadRawMessage() + *
  ndefT2TPollerWriteRawMessage() + *
  ndefT2TPollerTagFormat() + * + * + * \addtogroup NDEF + * @{ + * + */ + + +#ifndef NDEF_T2T_H +#define NDEF_T2T_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_nfca.h" +#include "rfal_t2t.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + + /* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + +/*! + ***************************************************************************** + * \brief Handle T2T NDEF context activation + * + * This method performs the initialization of the NDEF context and handles + * the activation of the ISO-DEP layer. It must be called after a successful + * anti-collision procedure and prior to any NDEF procedures such as NDEF + * detection procedure. + * + * \param[in] ctx : ndef Context + * \param[in] dev : ndef Device + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT2TPollerContextInitialization(ndefContext *ctx, const rfalNfcDevice *dev); + + +/*! + ***************************************************************************** + * \brief T2T NDEF Detection procedure + * + * This method performs the T2T NDEF Detection procedure + * + * + * \param[in] ctx : ndef Context + * \param[out] info : ndef Information (optional parameter, NULL may be used when no NDEF Information is needed) + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : Detection failed (application or ccfile not found) + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT2TPollerNdefDetect(ndefContext *ctx, ndefInfo *info); + + +/*! + ***************************************************************************** + * \brief T2T Read data from tag memory + * + * This method reads arbitrary length data from the current selected file + * + * \param[in] ctx : ndef Context + * \param[in] len : requested len + * \param[in] offset : file offset of where to start reading data + * \param[out] buf : buffer to place the data read from the tag + * \param[out] rcvdLen: received length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT2TPollerReadBytes(ndefContext *ctx, uint32_t offset, uint32_t len, uint8_t *buf, uint32_t *rcvdLen); + + +/*! + ***************************************************************************** + * \brief T2T write data to tag memory + * + * This method reads arbitrary length data from the current selected file + * + * \param[in] ctx : ndef Context + * \param[in] offset : file offset of where to start writing data + * \param[in] buf : data to write + * \param[in] len : buf len + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT2TPollerWriteBytes(ndefContext *ctx, uint32_t offset, const uint8_t *buf, uint32_t len); + + +/*! + ***************************************************************************** + * \brief T2T Read raw NDEF message + * + * This method reads a raw NDEF message from the current selected file. + * Prior to NDEF Read procedure, a successful ndefT2TPollerNdefDetect() + * has to be performed. + * + * \param[in] ctx : ndef Context + * \param[out] buf : buffer to place the NDEF message + * \param[in] bufLen : buffer length + * \param[out] rcvdLen: received length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT2TPollerReadRawMessage(ndefContext *ctx, uint8_t *buf, uint32_t bufLen, uint32_t *rcvdLen); + + +/*! + ***************************************************************************** + * \brief T2T Write raw NDEF message + * + * This method writes a raw NDEF message in the current selected file. + * Prior to NDEF Write procedure, a successful ndefT2TPollerNdefDetect() + * has to be performed. + * + * \warning Current selected file must not be changed between NDEF Detect + * procedure and NDEF Write procedure. If another file is selected before + * NDEF Write procedure, it is user responsibility to re-select NDEF file + * or to call ndefT2TPollerNdefDetect() to restore proper context. + * + * \param[in] ctx : ndef Context + * \param[in] buf : raw message buffer + * \param[in] bufLen : buffer length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT2TPollerWriteRawMessage(ndefContext *ctx, const uint8_t *buf, uint32_t bufLen); + + +/*! + ***************************************************************************** + * \brief T2T Write NDEF message length + * + * This method writes the NLEN field (V2 mapping) or the ENLEN (V3 mapping). + * + * \param[in] ctx : ndef Context + * \param[in] rawMessageLen: len + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT2TPollerWriteRawMessageLen(ndefContext *ctx, uint32_t rawMessageLen); + + +/*! + ***************************************************************************** + * \brief T2T Format Tag + * + * This method formats a tag to make it ready for NDEF storage. + * The Capability Container block is written only for virgin tags. + * If the cc parameter is not provided (i.e. NULL), a default one is used + * with T2T_AreaSize = 48 bytes. + * Beware that formatting is on most tags a one time operation (OTP bits!!!!) + * Doing a wrong format may render your tag unusable. + * options parameter is not used for T2T Tag Format method + * + * \param[in] ctx : ndef Context + * \param[in] cc : Capability Container + * \param[in] options: specific flags + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT2TPollerTagFormat(ndefContext *ctx, const ndefCapabilityContainer *cc, uint32_t options); + + +/*! + ***************************************************************************** + * \brief T2T Check Presence + * + * This method checks whether a T2T tag is still present in the operating field + * + * \param[in] ctx : ndef Context + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT2TPollerCheckPresence(ndefContext *ctx); + + +/*! + ***************************************************************************** + * \brief T2T Check Available Space + * + * This method checks whether a T2T tag has enough space to write a message of a given length + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefT2TPollerCheckAvailableSpace(const ndefContext *ctx, uint32_t messageLen); + + +/*! + ***************************************************************************** + * \brief T2T Begin Write Message + * + * This method sets the L-field to 0 and sets the message offset to the proper value according to messageLen + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefT2TPollerBeginWriteMessage(ndefContext *ctx, uint32_t messageLen); + + +/*! + ***************************************************************************** + * \brief T2T End Write Message + * + * This method updates the L-field value after the message has been written + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefT2TPollerEndWriteMessage(ndefContext *ctx, uint32_t messageLen); + + +#endif /* NDEF_T2T_H */ + +/** + * @} + */ diff --git a/Software/Middlewares/ST/ndef/Inc/poller/ndef_t3t.h b/Software/Middlewares/ST/ndef/Inc/poller/ndef_t3t.h new file mode 100644 index 0000000..0735413 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Inc/poller/ndef_t3t.h @@ -0,0 +1,339 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief Provides NDEF methods and definitions to access NFC Forum T3T + * + * NDEF T3T provides several functionalities required to + * perform NDEF message management with T3T tags. + * + * The most common interfaces are + *
  ndefT3TPollerContextInitialization() + *
  ndefT3TPollerNdefDetect() + *
  ndefT3TPollerReadRawMessage() + *
  ndefT3TPollerWriteRawMessage() + *
  ndefT3TPollerTagFormat() + * + * + * \addtogroup NDEF + * @{ + * + */ + + +#ifndef NDEF_T3T_H +#define NDEF_T3T_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_nfcv.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + + /* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + +/*! + ***************************************************************************** + * \brief Handle T3T NDEF context activation + * + * This method performs the initialization of the NDEF context and handles + * the activation of the ISO-DEP layer. It must be called after a successful + * anti-collision procedure and prior to any NDEF procedures such as NDEF + * detection procedure. + * + * \param[in] ctx : ndef Context + * \param[in] dev : ndef Device + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT3TPollerContextInitialization(ndefContext *ctx, const rfalNfcDevice *dev); + + +/*! + ***************************************************************************** + * \brief T3T NDEF Detection procedure + * + * This method performs the T3T NDEF Detection procedure + * + * + * \param[in] ctx : ndef Context + * \param[out] info : ndef Information (optional parameter, NULL may be used when no NDEF Information is needed) + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : Detection failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT3TPollerNdefDetect(ndefContext *ctx, ndefInfo *info); + + +/*! + ***************************************************************************** + * \brief T3T Read data from file + * + * This method reads arbitrary length data from the current selected file + * + * \param[in] ctx : ndef Context + * \param[in] len : requested len + * \param[in] offset : file offset of where to start reading data + * \param[out] buf : buffer to place the data read from the tag + * \param[out] rcvdLen: received length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT3TPollerReadBytes(ndefContext *ctx, uint32_t offset, uint32_t len, uint8_t *buf, uint32_t *rcvdLen); + + +/*! + ***************************************************************************** + * \brief T3T write data to file + * + * This method reads arbitrary length data from the current selected file + * + * \param[in] ctx : ndef Context + * \param[in] offset : file offset of where to start writing data + * \param[in] buf : data to write + * \param[in] len : buf len + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT3TPollerWriteBytes(ndefContext *ctx, uint32_t offset, const uint8_t *buf, uint32_t len); + + +/*! + ***************************************************************************** + * \brief T3T Read raw NDEF message + * + * This method reads a raw NDEF message from the current selected file. + * Prior to NDEF Read procedure, a successful ndefT3TPollerNdefDetect() + * has to be performed. + * + * \param[in] ctx : ndef Context + * \param[out] buf : buffer to place the NDEF message + * \param[in] bufLen : buffer length + * \param[out] rcvdLen: received length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT3TPollerReadRawMessage(ndefContext *ctx, uint8_t *buf, uint32_t bufLen, uint32_t *rcvdLen); + + +/*! + ***************************************************************************** + * \brief T3T Write raw NDEF message + * + * This method writes a raw NDEF message in the current selected file. + * Prior to NDEF Write procedure, a successful ndefT3TPollerNdefDetect() + * has to be performed. + * + * \warning Current selected file must not be changed between NDEF Detect + * procedure and NDEF Write procedure. If another file is selected before + * NDEF Write procedure, it is user responsibility to re-select NDEF file + * or to call ndefT3TPollerNdefDetect() to restore proper context. + * + * \param[in] ctx : ndef Context + * \param[in] buf : raw message buffer + * \param[in] bufLen : buffer length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT3TPollerWriteRawMessage(ndefContext *ctx, const uint8_t *buf, uint32_t bufLen); + + +/*! + ***************************************************************************** + * \brief T3T Write NDEF message length + * + * This method writes the NLEN field (V2 mapping) or the ENLEN (V3 mapping). + * + * \param[in] ctx : ndef Context + * \param[in] rawMessageLen: len + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT3TPollerWriteRawMessageLen(ndefContext *ctx, uint32_t rawMessageLen); + + +/*! + ***************************************************************************** + * \brief T3T Format Tag + * + * This method formats a tag to make it ready for NDEF storage. + * cc parameter contains the Attribute Information Block fields + * If cc parameter is not provided (i.e. NULL), this method assumes + * that the AIB is already present. + * options parameter is not used for T3T Tag Format method + * + * + * \param[in] ctx : ndef Context + * \param[in] cc : Capability Container + * \param[in] options: specific flags + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT3TPollerTagFormat(ndefContext *ctx, const ndefCapabilityContainer *cc, uint32_t options); + + +/*! + ***************************************************************************** + * \brief T3T Check Presence + * + * This method checks whether a T3T tag is still present in the operating field + * + * \param[in] ctx : ndef Context + + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT3TPollerCheckPresence(ndefContext *ctx); + + +/*! + ***************************************************************************** + * \brief T3T Check Available Space + * + * This method checks whether a T3T tag has enough space to write a message of a given length + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefT3TPollerCheckAvailableSpace(const ndefContext *ctx, uint32_t messageLen); + + +/*! + ***************************************************************************** + * \brief T3T Begin Write Message + * + * This method sets the WriteFlag to the appropriate value before starting to write the NDEF message + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefT3TPollerBeginWriteMessage(ndefContext *ctx, uint32_t messageLen); + + +/*! + ***************************************************************************** + * \brief T3T End Write Message + * + * This method updates the Ln field of the AIB and resets the WriteFlag + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefT3TPollerEndWriteMessage(ndefContext *ctx, uint32_t messageLen); + + +#endif /* NDEF_T3T_H */ + +/** + * @} + */ diff --git a/Software/Middlewares/ST/ndef/Inc/poller/ndef_t4t.h b/Software/Middlewares/ST/ndef/Inc/poller/ndef_t4t.h new file mode 100644 index 0000000..fda4f03 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Inc/poller/ndef_t4t.h @@ -0,0 +1,485 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief Provides NDEF methods and definitions to access NFC Forum T4T + * + * NDEF T4T provides several functionalities required to + * perform NDEF message management with T4T tags. + * + * The most common interfaces are + *
  ndefT4TPollerContextInitialization() + *
  ndefT4TPollerNdefDetect() + *
  ndefT4TPollerReadRawMessage() + *
  ndefT4TPollerWriteRawMessage() + *
  ndefT4TPollerTagFormat() + * + * + * \addtogroup NDEF + * @{ + * + */ + + +#ifndef NDEF_T4T_H +#define NDEF_T4T_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_nfca.h" +#include "rfal_nfcb.h" +#include "rfal_nfcf.h" +#include "rfal_nfcv.h" +#include "rfal_isoDep.h" +#include "rfal_t4t.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define NDEF_T4T_MAPPING_VERSION_2_0 0x20U /*!< Mapping version 2.0 */ +#define NDEF_T4T_MAPPING_VERSION_3_0 0x30U /*!< Mapping version 3.0 */ + +#define NDEF_T4T_MAX_RAPDU_BODY_LEN 256U /*!< Maximun Response-APDU response body length (short field coding) */ +#define NDEF_T4T_MAX_RAPDU_LEN (NDEF_T4T_MAX_RAPDU_BODY_LEN + RFAL_T4T_MAX_RAPDU_SW1SW2_LEN) /*!< Maximun Response-APDU Length (short field coding) */ + +#define NDEF_T4T_MAX_CAPDU_BODY_LEN 255U /*!< Maximun Command-APDU data length (short field coding) */ +#define NDEF_T4T_MAX_CAPDU_LEN ( RFAL_T4T_MAX_CAPDU_PROLOGUE_LEN \ + + RFAL_T4T_LC_LEN \ + + NDEF_T4T_MAX_CAPDU_BODY_LEN \ + + RFAL_T4T_LC_LEN ) /*!< Maximun Command-APDU Length (short field coding) */ + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ +#define ndefT4TIsReadAccessGranted(r) ( ((r) == 0x00U) || (((r) >= 0x80U) && ((r) <= 0xFEU)) ) /*!< Read access status */ +#define ndefT4TIsWriteAccessGranted(w) ( ((w) == 0x00U) || (((w) >= 0x80U) && ((w) <= 0xFEU)) ) /*!< Write access status */ + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +/*! + ***************************************************************************** + * \brief Handle T4T NDEF context activation + * + * This method performs the initialization of the NDEF context and handles + * the activation of the ISO-DEP layer. It must be called after a successful + * anti-collision procedure and prior to any NDEF procedures such as NDEF + * detection procedure. + * + * \param[in] ctx : ndef Context + * \param[in] dev : ndef Device + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerContextInitialization(ndefContext *ctx, const rfalNfcDevice *dev); + + +/*! + ***************************************************************************** + * \brief T4T NDEF Detection procedure + * + * This method performs the T4T NDEF Detection procedure + * + * + * \param[in] ctx : ndef Context + * \param[out] info : ndef Information (optional parameter, NULL may be used when no NDEF Information is needed) + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : Detection failed (application or ccfile not found) + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerNdefDetect(ndefContext *ctx, ndefInfo *info); + + +/*! + ***************************************************************************** + * \brief T4T Select NDEF Tag Application + * + * This method sends the Select NDEF tag application. If V2 Tag Application + * is not found, a Select NDEF tag V1 application is sent/ + * + * \param[in] ctx : ndef Context + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : Application not found + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerSelectNdefTagApplication(ndefContext *ctx); + + +/*! + ***************************************************************************** + * \brief T4T Select File + * + * This method sends a Select File Command-APDU. + * + * The following fields of the ndef Context must be filled up before calling + * this method: + * - devType: device type + * - subCtx.t4t.mv1Flag: Mapping version 1 flag + * + * \param[in] ctx : ndef Context + * \param[in] fileId : file identifier + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : File not found + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerSelectFile(ndefContext *ctx, const uint8_t *fileId); + + +/*! + ***************************************************************************** + * \brief T4T ReadBinary + * + * This method reads the data from the tag using a single + * ReadBinary command + * + * \param[in] ctx : ndef Context + * \param[in] offset : file offset of where to star reading data; valid range 0000h-7FFFh + * \param[in] len : requested len (short field coding) + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed (SW1SW2 <> 9000h) + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerReadBinary(ndefContext *ctx, uint16_t offset, uint8_t len); + + +/*! + ***************************************************************************** + * \brief T4T ReadBinary with ODO + * + * This method reads the data from the tag using a single + * ReadBinary ODO command + * + * \param[in] ctx : ndef Context + * \param[in] offset : file offset of where to star reading data; valid range 0000h-7FFFh + * \param[in] len : requested len (short field coding) + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed (SW1SW2 <> 9000h) + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerReadBinaryODO(ndefContext *ctx, uint32_t offset, uint8_t len); + + +/*! + ***************************************************************************** + * \brief T4T Read data from file + * + * This method reads arbitrary length data from the current selected file + * + * \param[in] ctx : ndef Context + * \param[in] len : requested len + * \param[in] offset : file offset of where to start reading data + * \param[out] buf : buffer to place the data read from the tag + * \param[out] rcvdLen: received length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed (SW1SW2 <> 9000h) + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerReadBytes(ndefContext *ctx, uint32_t offset, uint32_t len, uint8_t *buf, uint32_t *rcvdLen); + +/*! + ***************************************************************************** + * \brief T4T WriteBinary + * + * This method writes the data to the tag using a single + * WriteBinary command + * + * \param[in] ctx : ndef Context + * \param[in] offset : file offset of where to star reading data; valid range 0000h-7FFFh + * \param[in] data : data to be written + * \param[in] len : data length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed (SW1SW2 <> 9000h) + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerWriteBinary(ndefContext *ctx, uint16_t offset, const uint8_t *data, uint8_t len); + + +/*! + ***************************************************************************** + * \brief T4T WriteBinary with ODO + * + * This method writes the data to the tag using a single + * WriteBinary ODO command + * + * \param[in] ctx : ndef Context + * \param[in] offset : file offset of where to star reading data; valid range 0000h-7FFFh + * \param[in] data : data to be written + * \param[in] len : data length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed (SW1SW2 <> 9000h) + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerWriteBinaryODO(ndefContext *ctx, uint32_t offset, const uint8_t *data, uint8_t len); + +/*! + ***************************************************************************** + * \brief T4T write data to file + * + * This method reads arbitrary length data from the current selected file + * + * \param[in] ctx : ndef Context + * \param[in] offset : file offset of where to start writing data + * \param[in] buf : data to write + * \param[in] len : buf len + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed (SW1SW2 <> 9000h) + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerWriteBytes(ndefContext *ctx, uint32_t offset, const uint8_t *buf, uint32_t len); + + +/*! + ***************************************************************************** + * \brief T4T Read raw NDEF message + * + * This method reads a raw NDEF message from the current selected file. + * Prior to NDEF Read procedure, a successfull ndefT4TPollerNdefDetect() + * has to be performed. + * + * \warning Current selected file must not be changed between NDEF Detect + * procedure and NDEF Read procedure. If another file is selected before + * NDEF Read procedure, it is user responsibility to re-select NDEF file + * or to call ndefT4TPollerNdefDetect() to restore proper context. + * + * \param[in] ctx : ndef Context + * \param[out] buf : buffer to place the NDEF message + * \param[in] bufLen : buffer length + * \param[out] rcvdLen: received length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed (SW1SW2 <> 9000h) + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerReadRawMessage(ndefContext *ctx, uint8_t *buf, uint32_t bufLen, uint32_t *rcvdLen); + + +/*! + ***************************************************************************** + * \brief T4T Write raw NDEF message + * + * This method writes a raw NDEF message in the current selected file. + * Prior to NDEF Write procedure, a successfull ndefT4TPollerNdefDetect() + * has to be performed. + * + * \warning Current selected file must not be changed between NDEF Detect + * procedure and NDEF Write procedure. If another file is selected before + * NDEF Write procedure, it is user responsibility to re-select NDEF file + * or to call ndefT4TPollerNdefDetect() to restore proper context. + * + * \param[in] ctx : ndef Context + * \param[in] buf : raw message buffer + * \param[in] bufLen : buffer length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed (SW1SW2 <> 9000h) + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerWriteRawMessage(ndefContext *ctx, const uint8_t *buf, uint32_t bufLen); + + +/*! + ***************************************************************************** + * \brief T4T Write NDEF message length + * + * This method writes the NLEN field (V2 mapping) or the ENLEN (V3 mapping). + * + * \param[in] ctx : ndef Context + * \param[in] rawMessageLen: len + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed (SW1SW2 <> 9000h) + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerWriteRawMessageLen(ndefContext *ctx, uint32_t rawMessageLen); + + +/*! + ***************************************************************************** + * \brief T4T Format Tag + * + * This method formats a tag to make it ready for NDEF storage. In case of T4T, + * it writes NLEN/ENLEN=0 to the NDEF File. + * cc and options parameters are not used for T4T Tag Format method. + * + * \param[in] ctx : ndef Context + * \param[in] cc : Capability Container + * \param[in] options: specific flags + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed (SW1SW2 <> 9000h) + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerTagFormat(ndefContext *ctx, const ndefCapabilityContainer *cc, uint32_t options); + + +/*! + ***************************************************************************** + * \brief T4T Check Presence + * + * This method checks whether a T4T tag is still present in the operating field + * + * \param[in] ctx : ndef Context + + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT4TPollerCheckPresence(ndefContext *ctx); + + +/*! + ***************************************************************************** + * \brief T4T Check Available Space + * + * This method checks whether a T4T tag has enough space to write a message of a given length + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefT4TPollerCheckAvailableSpace(const ndefContext *ctx, uint32_t messageLen); + + +/*! + ***************************************************************************** + * \brief T4T Begin Write Message + * + * This method sets the L-field to 0 + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefT4TPollerBeginWriteMessage(ndefContext *ctx, uint32_t messageLen); + + +/*! + ***************************************************************************** + * \brief T4T End Write Message + * + * This method updates the L-field value after the message has been written + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefT4TPollerEndWriteMessage(ndefContext *ctx, uint32_t messageLen); + + +#endif /* NDEF_T4T_H */ + +/** + * @} + */ diff --git a/Software/Middlewares/ST/ndef/Inc/poller/ndef_t5t.h b/Software/Middlewares/ST/ndef/Inc/poller/ndef_t5t.h new file mode 100644 index 0000000..2ae1a3d --- /dev/null +++ b/Software/Middlewares/ST/ndef/Inc/poller/ndef_t5t.h @@ -0,0 +1,412 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief Provides NDEF methods and definitions to access NFC Forum T5T + * + * NDEF T5T provides several functionalities required to + * perform NDEF message management with T5T tags. + * + * The most common interfaces are + *
  ndefT5TPollerContextInitialization() + *
  ndefT5TPollerNdefDetect() + *
  ndefT5TPollerReadRawMessage() + *
  ndefT5TPollerWriteRawMessage() + *
  ndefT5TPollerTagFormat() + * + * + * \addtogroup NDEF + * @{ + * + */ + + +#ifndef NDEF_T5T_H +#define NDEF_T5T_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_nfcv.h" +#include "rfal_st25xv.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define NDEF_SYSINFO_FLAG_DFSID_POS (0U) /*!< Info flags DFSID flag position */ +#define NDEF_SYSINFO_FLAG_AFI_POS (1U) /*!< Info flags AFI flag position */ +#define NDEF_SYSINFO_FLAG_MEMSIZE_POS (2U) /*!< Info flags Memory Size flag position */ +#define NDEF_SYSINFO_FLAG_ICREF_POS (3U) /*!< Info flags IC reference flag position */ +#define NDEF_SYSINFO_FLAG_MOI_POS (4U) /*!< Info flags MOI flag position */ +#define NDEF_SYSINFO_FLAG_CMDLIST_POS (5U) /*!< Info flags Command List flag position */ +#define NDEF_SYSINFO_FLAG_CSI_POS (6U) /*!< Info flags CSI flag position */ +#define NDEF_SYSINFO_FLAG_LEN_POS (7U) /*!< Info flags Length position */ + +#define NDEF_CMDLIST_READSINGLEBLOCK_POS (0U) /*!< Cmd List: ReadSingleBlock position */ +#define NDEF_CMDLIST_WRITESINGLEBLOCK_POS (1U) /*!< Cmd List: WriteSingleBlock position */ +#define NDEF_CMDLIST_LOCKSINGLEBLOCK_POS (2U) /*!< Cmd List: LockSingleBlock position */ +#define NDEF_CMDLIST_READMULTIPLEBLOCKS_POS (3U) /*!< Cmd List: ReadMultipleBlocks position */ +#define NDEF_CMDLIST_WRITEMULTIPLEBLOCKS_POS (4U) /*!< Cmd List: WriteMultipleBlocks position */ +#define NDEF_CMDLIST_SELECT_POS (5U) /*!< Cmd List: SelectSupported position */ +#define NDEF_CMDLIST_RESETTOREADY_POS (6U) /*!< Cmd List: ResetToReady position */ +#define NDEF_CMDLIST_GETMULTIPLEBLOCKSECSTATUS_POS (7U) /*!< Cmd List: GetMultipleBlockSecStatus position */ + +#define NDEF_CMDLIST_WRITEAFI_POS (0U) /*!< Cmd List: WriteAFI position */ +#define NDEF_CMDLIST_LOCKAFI_POS (1U) /*!< Cmd List: LockAFI position */ +#define NDEF_CMDLIST_WRITEDSFID_POS (2U) /*!< Cmd List: WriteDSFID position */ +#define NDEF_CMDLIST_LOCKDSFID_POS (3U) /*!< Cmd List: LockDSFID position */ +#define NDEF_CMDLIST_GETSYSTEMINFORMATION_POS (4U) /*!< Cmd List: GetSystemInformation position */ +#define NDEF_CMDLIST_CUSTOMCMDS_POS (5U) /*!< Cmd List: CustomCmds position */ +#define NDEF_CMDLIST_FASTREADMULTIPLEBLOCKS_POS (6U) /*!< Cmd List: FastReadMultipleBlocks position */ + +#define NDEF_CMDLIST_EXTREADSINGLEBLOCK_POS (0U) /*!< Cmd List: ExtReadSingleBlock position */ +#define NDEF_CMDLIST_EXTWRITESINGLEBLOCK_POS (1U) /*!< Cmd List: ExtWriteSingleBlock position */ +#define NDEF_CMDLIST_EXTLOCKSINGLEBLOCK_POS (2U) /*!< Cmd List: ExtLockSingleBlock position */ +#define NDEF_CMDLIST_EXTREADMULTIPLEBLOCKS_POS (3U) /*!< Cmd List: ExtReadMultipleBlocks position */ +#define NDEF_CMDLIST_EXTWRITEMULTIPLEBLOCKS_POS (4U) /*!< Cmd List: ExtWriteMultipleBlocks position */ +#define NDEF_CMDLIST_EXTGETMULTIPLEBLOCKSECSTATUS_POS (5U) /*!< Cmd List: ExtGetMultipleBlockSecStatus position */ +#define NDEF_CMDLIST_FASTEXTENDEDREADMULTIPLEBLOCKS_POS (6U) /*!< Cmd List: FastExtendedReadMultipleBlocks position */ + +#define NDEF_T5T_CC_MAGIC_1_BYTE_ADDR_MODE 0xE1U /*!< T5T CC Magic Number (1-byte Addres Mode) */ +#define NDEF_T5T_CC_MAGIC_2_BYTE_ADDR_MODE 0xE2U /*!< T5T CC Magic Number (2-byte Addres Mode) */ +#define NDEF_T5T_CC_LEN_4_BYTES 4U /*!< T5T CC Length (4 bytes) */ +#define NDEF_T5T_CC_LEN_8_BYTES 8U /*!< T5T CC Length (8 bytes) */ +#define NDEF_T5T_FORMAT_OPTION_NFC_FORUM 1U /*!< Format tag according to NFC Forum MLEN computation */ + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +#define ndefT5TSysInfoDFSIDPresent(infoFlags) (((infoFlags) >> NDEF_SYSINFO_FLAG_DFSID_POS) & 0x01U) /*!< Returns DFSID presence flag */ +#define ndefT5TSysInfoAFIPresent(infoFlags) (((infoFlags) >> NDEF_SYSINFO_FLAG_AFI_POS) & 0x01U) /*!< Returns AFI presence flag */ +#define ndefT5TSysInfoMemSizePresent(infoFlags) (((infoFlags) >> NDEF_SYSINFO_FLAG_MEMSIZE_POS) & 0x01U) /*!< Returns Memory size presence flag */ +#define ndefT5TSysInfoICRefPresent(infoFlags) (((infoFlags) >> NDEF_SYSINFO_FLAG_ICREF_POS) & 0x01U) /*!< Returns IC Reference presence flag */ +#define ndefT5TSysInfoMOIValue(infoFlags) (((infoFlags) >> NDEF_SYSINFO_FLAG_MOI_POS) & 0x01U) /*!< Returns MOI value */ +#define ndefT5TSysInfoCmdListPresent(infoFlags) (((infoFlags) >> NDEF_SYSINFO_FLAG_CMDLIST_POS) & 0x01U) /*!< Returns Command List presence flag */ +#define ndefT5TSysInfoCSIPresent(infoFlags) (((infoFlags) >> NDEF_SYSINFO_FLAG_CSI_POS) & 0x01U) /*!< Returns CSI presence flag */ +#define ndefT5TSysInfoLenValue(infoFlags) (((infoFlags) >> NDEF_SYSINFO_FLAG_LEN_POS) & 0x01U) /*!< Returns Info flag len value */ + +#define ndefT5TSysInfoReadSingleBlockSupported(cmdList) (((cmdList)[0] >> NDEF_CMDLIST_READSINGLEBLOCK_POS) & 0x01U) /*!< Returns ReadSingleBlock support flag */ +#define ndefT5TSysInfoWriteSingleBlockSupported(cmdList) (((cmdList)[0] >> NDEF_CMDLIST_WRITESINGLEBLOCK_POS) & 0x01U) /*!< Returns WriteSingleBlock support flag */ +#define ndefT5TSysInfoLockSingleBlockSupported(cmdList) (((cmdList)[0] >> NDEF_CMDLIST_LOCKSINGLEBLOCK_POS) & 0x01U) /*!< Returns LockSingleBlock support flag */ +#define ndefT5TSysInfoReadMultipleBlocksSupported(cmdList) (((cmdList)[0] >> NDEF_CMDLIST_READMULTIPLEBLOCKS_POS) & 0x01U) /*!< Returns ReadMultipleBlocks support flag */ +#define ndefT5TSysInfoWriteMultipleBlocksSupported(cmdList) (((cmdList)[0] >> NDEF_CMDLIST_WRITEMULTIPLEBLOCKS_POS) & 0x01U) /*!< Returns WriteMultipleBlocks support flag */ +#define ndefT5TSysInfoSelectSupported(cmdList) (((cmdList)[0] >> NDEF_CMDLIST_SELECT_POS) & 0x01U) /*!< Returns SelectSupported support flag */ +#define ndefT5TSysInfoResetToReadySupported(cmdList) (((cmdList)[0] >> NDEF_CMDLIST_RESETTOREADY_POS) & 0x01U) /*!< Returns ResetToReady support flag */ +#define ndefT5TSysInfoGetMultipleBlockSecStatusSupported(cmdList) (((cmdList)[0] >> NDEF_CMDLIST_GETMULTIPLEBLOCKSECSTATUS_POS) & 0x01U) /*!< Returns GetMultipleBlockSecStatus support flag */ + +#define ndefT5TSysInfoWriteAFISupported(cmdList) (((cmdList)[1] >> NDEF_CMDLIST_WRITEAFI_POS) & 0x01U) /*!< Returns WriteAFI support flag */ +#define ndefT5TSysInfoLockAFISupported(cmdList) (((cmdList)[1] >> NDEF_CMDLIST_LOCKAFI_POS) & 0x01U) /*!< Returns LockAFI support flag */ +#define ndefT5TSysInfoWriteDSFIDSupported(cmdList) (((cmdList)[1] >> NDEF_CMDLIST_WRITEDSFID_POS) & 0x01U) /*!< Returns WriteDSFID support flag */ +#define ndefT5TSysInfoLockDSFIDSupported(cmdList) (((cmdList)[1] >> NDEF_CMDLIST_LOCKDSFID_POS) & 0x01U) /*!< Returns LockDSFID support flag */ +#define ndefT5TSysInfoGetSystemInformationSupported(cmdList) (((cmdList)[1] >> NDEF_CMDLIST_GETSYSTEMINFORMATION_POS) & 0x01U) /*!< Returns GetSystemInformation support flag */ +#define ndefT5TSysInfoCustomCmdsSupported(cmdList) (((cmdList)[1] >> NDEF_CMDLIST_CUSTOMCMDS_POS) & 0x01U) /*!< Returns CustomCmds support flag */ +#define ndefT5TSysInfoFastReadMultipleBlocksSupported(cmdList) (((cmdList)[1] >> NDEF_CMDLIST_FASTREADMULTIPLEBLOCKS_POS) & 0x01U) /*!< Returns FastReadMultipleBlocks support flag */ + +#define ndefT5TSysInfoExtReadSingleBlockSupported(cmdList) (((cmdList)[2] >> NDEF_CMDLIST_EXTREADSINGLEBLOCK_POS) & 0x01U) /*!< Returns ExtReadSingleBlock support flag */ +#define ndefT5TSysInfoExtWriteSingleBlockSupported(cmdList) (((cmdList)[2] >> NDEF_CMDLIST_EXTWRITESINGLEBLOCK_POS) & 0x01U) /*!< Returns ExtWriteSingleBlock support flag */ +#define ndefT5TSysInfoExtLockSingleBlockSupported(cmdList) (((cmdList)[2] >> NDEF_CMDLIST_EXTLOCKSINGLEBLOCK_POS) & 0x01U) /*!< Returns ExtLockSingleBlock support flag */ +#define ndefT5TSysInfoExtReadMultipleBlocksSupported(cmdList) (((cmdList)[2] >> NDEF_CMDLIST_EXTREADMULTIPLEBLOCKS_POS) & 0x01U) /*!< Returns ExtReadMultipleBlocks support flag */ +#define ndefT5TSysInfoExtWriteMultipleBlocksSupported(cmdList) (((cmdList)[2] >> NDEF_CMDLIST_EXTWRITEMULTIPLEBLOCKS_POS) & 0x01U) /*!< Returns ExtWriteMultipleBlocks support flag */ +#define ndefT5TSysInfoExtGetMultipleBlockSecStatusSupported(cmdList) (((cmdList)[2] >> NDEF_CMDLIST_EXTGETMULTIPLEBLOCKSECSTATUS_POS) & 0x01U) /*!< Returns ExtGetMultipleBlockSecStatus support flag */ +#define ndefT5TSysInfoFastExtendedReadMultipleBlocksSupported(cmdList) (((cmdList)[2] >> NDEF_CMDLIST_FASTEXTENDEDREADMULTIPLEBLOCKS_POS) & 0x01U) /*!< Returns FastExtendedReadMultipleBlocks support flag */ + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + +/*! + ***************************************************************************** + * \brief Handle T5T NDEF context activation + * + * This method performs the initialisation of the NDEF context. + * It must be called after a successfull + * anticollition procedure and prior to any NDEF procedures such as NDEF + * detection procedure. + * + * \param[in] ctx : ndef Context + * \param[in] dev : ndef Device + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT5TPollerContextInitialization(ndefContext *ctx, const rfalNfcDevice *dev); + + +/*! + ***************************************************************************** + * \brief T5T NDEF Detection procedure + * + * This method performs the T5T NDEF Detection procedure + * + * + * \param[in] ctx : ndef Context + * \param[out] info : ndef Information (optional parameter, NULL may be used when no NDEF Information is needed) + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : Detection failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT5TPollerNdefDetect(ndefContext *ctx, ndefInfo *info); + + +/*! + ***************************************************************************** + * \brief T5T Read data from tag memory + * + * This method reads arbitrary length data from tag memory + * + * \param[in] ctx : ndef Context + * \param[in] offset : file offset of where to start reading data + * \param[in] len : requested len + * \param[out] buf : buffer to place the data read from the tag + * \param[out] rcvdLen: received length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT5TPollerReadBytes(ndefContext * ctx, uint32_t offset, uint32_t len, uint8_t* buf, uint32_t * rcvdLen); + + +/*! + ***************************************************************************** + * \brief T5T write data to tag memory + * + * This method write arbitrary length data from to tag memory + * + * \param[in] ctx : ndef Context + * \param[in] offset : file offset of where to start writing data + * \param[in] buf : data to write + * \param[in] len : buf len + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT5TPollerWriteBytes(ndefContext *ctx, uint32_t offset, const uint8_t * buf, uint32_t len); + + +/*! + ***************************************************************************** + * \brief T5T Read raw NDEF message + * + * This method reads a raw NDEF message from the current selected file. + * Prior to NDEF Read procedure, a successfull ndefT5TPollerNdefDetect() + * has to be performed. + * + * \param[in] ctx : ndef Context + * \param[out] buf : buffer to place the NDEF message + * \param[in] bufLen : buffer length + * \param[out] rcvdLen: received length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : read failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT5TPollerReadRawMessage(ndefContext *ctx, uint8_t *buf, uint32_t bufLen, uint32_t *rcvdLen); + + +/*! + ***************************************************************************** + * \brief T5T Write raw NDEF message + * + * This method writes a raw NDEF message in the current selected file. + * Prior to NDEF Write procedure, a successfull ndefT5TPollerNdefDetect() + * has to be performed. + * + * \param[in] ctx : ndef Context + * \param[in] buf : raw message buffer + * \param[in] bufLen : buffer length + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT5TPollerWriteRawMessage(ndefContext *ctx, const uint8_t *buf, uint32_t bufLen); + + +/*! + ***************************************************************************** + * \brief T5T Write NDEF message length + * + * This method writes the L field to the tag memory + * + * \param[in] ctx : ndef Context + * \param[in] rawMessageLen: len + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT5TPollerWriteRawMessageLen( ndefContext *ctx, uint32_t rawMessageLen); + + +/*! + ***************************************************************************** + * \brief T5T Format Tag + * + * This method format a tag to make it ready for NDEF storage. + * When the cc parameter is provided, the Capability Container is initialized + * with the value provided by the user. + * When the cc parameter is not provided (i.e. NULL), this method + * retrieves the appropriate CC field from (Extended) Get System Information + * or returns ERR_REQUEST if (Extended) Get System Information is not supported. + * The option parameter is used in case of NULL cc parameter to choose + * between Android CC format (default when option = 0) + * or NFC Forum Format (option = NDEF_T5T_FORMAT_OPTION_NFC_FORUM) + * + * + * \param[in] ctx : ndef Context + * \param[in] cc : Capability Container + * \param[in] options : specific flags + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_REQUEST : write failed + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT5TPollerTagFormat(ndefContext *ctx, const ndefCapabilityContainer *cc, uint32_t options); + + +/*! + ***************************************************************************** + * \brief T5T Check Presence + * + * This method check whether a T5T tag is still present in the operating field + * + * \param[in] ctx : ndef Context + + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode ndefT5TPollerCheckPresence(ndefContext *ctx); + + +/*! + ***************************************************************************** + * \brief T5T Check Available Space + * + * This method check whether a T5T tag has enough space to write a message of a given length + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefT5TPollerCheckAvailableSpace(const ndefContext *ctx, uint32_t messageLen); + + +/*! + ***************************************************************************** + * \brief T5T Begin Write Message + * + * This method sets the L-field to 0 and sets the message offset to the proper value according to messageLen + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefT5TPollerBeginWriteMessage(ndefContext *ctx, uint32_t messageLen); + + +/*! + ***************************************************************************** + * \brief T5T End Write Message + * + * This method updates the L-field value after the message has been written + * + * \param[in] ctx : ndef Context + * \param[in] messageLen: message length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOMEM : not enough space + * \return ERR_NONE : Enough space for message of messageLen length + ***************************************************************************** + */ +ReturnCode ndefT5TPollerEndWriteMessage(ndefContext *ctx, uint32_t messageLen); + + +#endif /* NDEF_T5T_H */ + +/** + * @} + */ diff --git a/Software/Middlewares/ST/ndef/Src/message/ndef_message.c b/Software/Middlewares/ST/ndef/Src/message/ndef_message.c new file mode 100644 index 0000000..68176af --- /dev/null +++ b/Software/Middlewares/ST/ndef/Src/message/ndef_message.c @@ -0,0 +1,299 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief NDEF message + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "platform.h" +#include "st_errno.h" +#include "utils.h" +#include "ndef_record.h" +#include "ndef_message.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define NDEF_MAX_RECORD 10U /*!< Maximum number of records */ + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ +static uint8_t ndefRecordPoolIndex = 0; + + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + + +/*****************************************************************************/ +static ndefRecord* ndefAllocRecord(void) +{ + static ndefRecord ndefRecordPool[NDEF_MAX_RECORD]; + + if (ndefRecordPoolIndex >= NDEF_MAX_RECORD) + { + return NULL; + } + + return &ndefRecordPool[ndefRecordPoolIndex++]; +} + + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ +/*****************************************************************************/ + + +ReturnCode ndefMessageInit(ndefMessage* message) +{ + if (message == NULL) + { + return ERR_PARAM; + } + + message->record = NULL; + message->info.length = 0; + message->info.recordCount = 0; + + ndefRecordPoolIndex = 0; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefMessageGetInfo(const ndefMessage* message, ndefMessageInfo* info) +{ + ndefRecord* record; + uint32_t length = 0; + uint32_t recordCount = 0; + + if ( (message == NULL) || (info == NULL) ) + { + return ERR_PARAM; + } + + record = message->record; + + while (record != NULL) + { + length += ndefRecordGetLength(record); + recordCount++; + + record = record->next; + } + + info->length = length; + info->recordCount = recordCount; + + return ERR_NONE; +} + + +/*****************************************************************************/ +uint32_t ndefMessageGetRecordCount(const ndefMessage* message) +{ + ndefMessageInfo info; + + if (ndefMessageGetInfo(message, &info) == ERR_NONE) + { + return info.recordCount; + } + + return 0; +} + + +/*****************************************************************************/ +ReturnCode ndefMessageAppend(ndefMessage* message, ndefRecord* record) +{ + if ( (message == NULL) || (record == NULL) ) + { + return ERR_PARAM; + } + + /* Clear the Message Begin bit */ + ndefHeaderClearMB(record); + + /* Record is appended so it is the last in the list, set the Message End bit */ + ndefHeaderSetME(record); + + record->next = NULL; + + if (message->record == NULL) + { + /* Set the Message Begin bit for the first record only */ + ndefHeaderSetMB(record); + + message->record = record; + } + else + { + ndefRecord* current = message->record; + + /* Go through the list of records */ + while (current->next != NULL) + { + current = current->next; + } + + /* Clear the Message End bit to the record before the one being appended */ + ndefHeaderClearME(current); + + /* Append to the last record */ + current->next = record; + } + + message->info.length += ndefRecordGetLength(record); + message->info.recordCount += 1U; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefMessageDecode(const ndefConstBuffer* bufPayload, ndefMessage* message) +{ + ReturnCode err; + uint32_t offset; + + if ( (bufPayload == NULL) || (bufPayload->buffer == NULL) || (message == NULL) ) + { + return ERR_PARAM; + } + + err = ndefMessageInit(message); + if (err != ERR_NONE) + { + return err; + } + + offset = 0; + while (offset < bufPayload->length) + { + ndefConstBuffer bufRecord; + ndefRecord* record = ndefAllocRecord(); + if (record == NULL) + { + return ERR_NOMEM; + } + bufRecord.buffer = &bufPayload->buffer[offset]; + bufRecord.length = bufPayload->length - offset; + err = ndefRecordDecode(&bufRecord, record); + if (err != ERR_NONE) + { + return err; + } + offset += ndefRecordGetLength(record); + + err = ndefMessageAppend(message, record); + if (err != ERR_NONE) + { + return err; + } + } + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefMessageEncode(const ndefMessage* message, ndefBuffer* bufPayload) +{ + ReturnCode err; + ndefMessageInfo info; + ndefRecord* record; + uint32_t offset; + uint32_t remainingLength; + + if ( (message == NULL) || (bufPayload == NULL) || (bufPayload->buffer == NULL) ) + { + return ERR_PARAM; + } + + err = ndefMessageGetInfo(message, &info); + if ( (err != ERR_NONE) || (bufPayload->length < info.length) ) + { + bufPayload->length = info.length; + return ERR_NOMEM; + } + + /* Get the first record */ + record = ndefMessageGetFirstRecord(message); + offset = 0; + remainingLength = bufPayload->length; + + while (record != NULL) + { + ndefBuffer bufRecord; + bufRecord.buffer = &bufPayload->buffer[offset]; + bufRecord.length = remainingLength; + err = ndefRecordEncode(record, &bufRecord); + if (err != ERR_NONE) + { + bufPayload->length = info.length; + return err; + } + offset += bufRecord.length; + remainingLength -= bufRecord.length; + + record = ndefMessageGetNextRecord(record); + } + + bufPayload->length = offset; + return ERR_NONE; +} diff --git a/Software/Middlewares/ST/ndef/Src/message/ndef_record.c b/Software/Middlewares/ST/ndef/Src/message/ndef_record.c new file mode 100644 index 0000000..d8d2faf --- /dev/null +++ b/Software/Middlewares/ST/ndef/Src/message/ndef_record.c @@ -0,0 +1,627 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief NDEF record + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "platform.h" +#include "st_errno.h" +#include "utils.h" +#include "ndef_record.h" +#include "ndef_message.h" +#include "ndef_types.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + + +/*****************************************************************************/ +ReturnCode ndefRecordReset(ndefRecord* record) +{ + ndefConstBuffer8 bufEmpty = { NULL, 0 }; + ndefConstBuffer bufEmptyPayload = { NULL, 0 }; + + if (record == NULL) + { + return ERR_PARAM; + } + + record->header = ndefHeader(0U, 0U, 0U, 0U, 0U, NDEF_TNF_EMPTY); + + (void)ndefRecordSetType(record, NDEF_TNF_EMPTY, &bufEmpty); + + (void)ndefRecordSetId(record, &bufEmpty); + + /* Set the SR bit */ + (void)ndefRecordSetPayload(record, &bufEmptyPayload); + + record->ndeftype = NULL; + + record->next = NULL; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordInit(ndefRecord* record, uint8_t tnf, const ndefConstBuffer8* bufType, const ndefConstBuffer8* bufId, const ndefConstBuffer* bufPayload) +{ + if ( (record == NULL) || (bufType == NULL) || (bufPayload == NULL) ) + { + return ERR_PARAM; + } + + (void)ndefRecordReset(record); + + (void)ndefRecordSetType(record, tnf, bufType); + + (void)ndefRecordSetId(record, bufId); + + (void)ndefRecordSetPayload(record, bufPayload); + + return ERR_NONE; +} + + +/*****************************************************************************/ +uint32_t ndefRecordGetHeaderLength(const ndefRecord* record) +{ + uint32_t length; + + if (record == NULL) + { + return 0; + } + + length = sizeof(uint8_t); /* header (MB:1 + ME:1 + CF:1 + SR:1 + IL:1 + TNF:3 => 8 bits) */ + length += sizeof(uint8_t); /* Type length */ + if (ndefHeaderIsSetSR(record)) + { + length += sizeof(uint8_t); /* Short record */ + } + else + { + length += sizeof(uint32_t); /* Standard record */ + } + if (ndefHeaderIsSetIL(record)) + { + length += sizeof(uint8_t); /* Id length */ + } + length += record->typeLength; /* Type */ + length += record->idLength; /* Id */ + + return length; +} + + +/*****************************************************************************/ +uint32_t ndefRecordGetLength(const ndefRecord* record) +{ + uint32_t length; + + if (record == NULL) + { + return 0; + } + + length = ndefRecordGetHeaderLength(record); /* Header */ + length += ndefRecordGetPayloadLength(record); /* Payload */ + + return length; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordSetType(ndefRecord* record, uint8_t tnf, const ndefConstBuffer8* bufType) +{ + if ( (record == NULL) || + (bufType == NULL) || + ( (bufType->buffer == NULL) && (bufType->length != 0U) ) ) + { + return ERR_PARAM; + } + + ndefHeaderSetTNF(record, tnf); + + record->typeLength = bufType->length; + record->type = bufType->buffer; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordGetType(const ndefRecord* record, uint8_t* tnf, ndefConstBuffer8* bufType) +{ + if ( (record == NULL) || (tnf == NULL) || (bufType == NULL) ) + { + return ERR_PARAM; + } + + *tnf = ndefHeaderTNF(record); + bufType->buffer = record->type; + bufType->length = record->typeLength; + + return ERR_NONE; +} + + +/*****************************************************************************/ +bool ndefRecordTypeMatch(const ndefRecord* record, uint8_t tnf, const ndefConstBuffer8* bufType) +{ + if ( (record == NULL) || (bufType == NULL) ) + { + return false; + } + + if ( (ndefHeaderTNF(record) == tnf) && + (record->typeLength == bufType->length) && + (ST_BYTECMP(record->type, bufType->buffer, bufType->length) == 0) ) + { + return true; + } + + return false; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordSetId(ndefRecord* record, const ndefConstBuffer8* bufId) +{ + if ( (record == NULL) || + (bufId == NULL) || + ( (bufId->buffer == NULL) && (bufId->length != 0U) ) ) + { + return ERR_PARAM; + } + + if (bufId->buffer != NULL) + { + ndefHeaderSetIL(record); + } + else + { + ndefHeaderClearIL(record); + } + + record->id = bufId->buffer; + record->idLength = bufId->length; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordGetId(const ndefRecord* record, ndefConstBuffer8* bufId) +{ + if ( (record == NULL) || (bufId == NULL) ) + { + return ERR_PARAM; + } + + bufId->buffer = record->id; + bufId->length = record->idLength; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordSetPayload(ndefRecord* record, const ndefConstBuffer* bufPayload) +{ + if ( (record == NULL) || + (bufPayload == NULL) || + ( (bufPayload->buffer == NULL) && (bufPayload->length != 0U) ) ) + { + return ERR_PARAM; + } + + ndefHeaderSetValueSR(record, (bufPayload->length <= NDEF_SHORT_RECORD_LENGTH_MAX) ? 1 : 0); + + record->bufPayload.buffer = bufPayload->buffer; + record->bufPayload.length = bufPayload->length; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordGetPayload(const ndefRecord* record, ndefConstBuffer* bufPayload) +{ + if ( (record == NULL) || (bufPayload == NULL) ) + { + return ERR_PARAM; + } + + bufPayload->buffer = record->bufPayload.buffer; + bufPayload->length = ndefRecordGetPayloadLength(record); + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordDecode(const ndefConstBuffer* bufPayload, ndefRecord* record) +{ + uint32_t offset; + + if ( (bufPayload == NULL) || (bufPayload->buffer == NULL) || (record == NULL) ) + { + return ERR_PARAM; + } + + if (ndefRecordReset(record) != ERR_NONE) + { + return ERR_INTERNAL; + } + + /* Get "header" byte */ + offset = 0; + if ((offset + sizeof(uint8_t)) > bufPayload->length) + { + return ERR_PROTO; + } + record->header = bufPayload->buffer[offset]; + offset++; + + /* Get Type length */ + if ((offset + sizeof(uint8_t)) > bufPayload->length) + { + return ERR_PROTO; + } + record->typeLength = bufPayload->buffer[offset]; + offset++; + + /* Decode Payload length */ + if (ndefHeaderIsSetSR(record)) + { + /* Short record */ + if ((offset + sizeof(uint8_t)) > bufPayload->length) + { + return ERR_PROTO; + } + record->bufPayload.length = bufPayload->buffer[offset]; /* length stored on a single byte for Short Record */ + offset++; + } + else + { + /* Standard record */ + if ((offset + sizeof(uint32_t)) > bufPayload->length) + { + return ERR_PROTO; + } + record->bufPayload.length = GETU32(&bufPayload->buffer[offset]); + offset += sizeof(uint32_t); + } + + /* Get Id length */ + if (ndefHeaderIsSetIL(record)) + { + if ((offset + sizeof(uint8_t)) > bufPayload->length) + { + return ERR_PROTO; + } + record->idLength = bufPayload->buffer[offset]; + offset++; + } + else + { + record->idLength = 0; + } + + /* Get Type */ + if (record->typeLength > 0U) + { + if ((offset + record->typeLength) > bufPayload->length) + { + return ERR_PROTO; + } + record->type = &bufPayload->buffer[offset]; + offset += record->typeLength; + } + else + { + record->type = NULL; + } + + /* Get Id */ + if (record->idLength > 0U) + { + if ((offset + record->idLength) > bufPayload->length) + { + return ERR_PROTO; + } + record->id = &bufPayload->buffer[offset]; + offset += record->idLength; + } + else + { + record->id = NULL; + } + + /* Get Payload */ + if (record->bufPayload.length > 0U) + { + if ((offset + record->bufPayload.length) > bufPayload->length) + { + return ERR_PROTO; + } + record->bufPayload.buffer = &bufPayload->buffer[offset]; + } + else + { + record->bufPayload.buffer = NULL; + } + + // Doesn't recognize WKT ... + + record->next = NULL; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordEncodeHeader(const ndefRecord* record, ndefBuffer* bufHeader) +{ + uint32_t offset; + uint32_t payloadLength; + + if ( (record == NULL) || (bufHeader == NULL) || (bufHeader->buffer == NULL) ) + { + return ERR_PARAM; + } + + if (bufHeader->length < NDEF_RECORD_HEADER_LEN) + { + bufHeader->length = NDEF_RECORD_HEADER_LEN; + return ERR_NOMEM; + } + + /* Start encoding the record */ + offset = 0; + bufHeader->buffer[offset] = record->header; + offset++; + + /* Set Type length */ + bufHeader->buffer[offset] = record->typeLength; + offset++; + + /* Encode Payload length */ + payloadLength = ndefRecordGetPayloadLength(record); + + if (payloadLength <= NDEF_SHORT_RECORD_LENGTH_MAX) + { + /* Short record */ + bufHeader->buffer[offset] = (uint8_t)payloadLength; + offset++; + } + else + { + /* Standard record */ + bufHeader->buffer[offset] = (uint8_t)(payloadLength >> 24); + offset++; + bufHeader->buffer[offset] = (uint8_t)(payloadLength >> 16); + offset++; + bufHeader->buffer[offset] = (uint8_t)(payloadLength >> 8); + offset++; + bufHeader->buffer[offset] = (uint8_t)(payloadLength); + offset++; + } + + /* Encode Id length */ + if (ndefHeaderIsSetIL(record)) + { + bufHeader->buffer[offset] = record->idLength; + offset++; + } + + bufHeader->length = offset; + + return ERR_NONE; +} + + +/*****************************************************************************/ +static ReturnCode ndefRecordPayloadEncode(const ndefRecord* record, ndefBuffer* bufPayload) +{ + uint32_t payloadLength; + uint32_t offset; + bool begin; + ndefConstBuffer bufPayloadItem; + + if ( (record == NULL) || (bufPayload == NULL) ) + { + return ERR_PROTO; + } + + payloadLength = ndefRecordGetPayloadLength(record); + if (payloadLength > bufPayload->length) + { + return ERR_NOMEM; + } + + begin = true; + offset = 0; + while (ndefRecordGetPayloadItem(record, &bufPayloadItem, begin) != NULL) + { + begin = false; + if (bufPayloadItem.length > 0U) + { + ST_MEMCPY(&bufPayload->buffer[offset], bufPayloadItem.buffer, bufPayloadItem.length); + } + offset += bufPayloadItem.length; + } + + bufPayload->length = offset; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordEncode(const ndefRecord* record, ndefBuffer* bufRecord) +{ + ReturnCode err; + ndefBuffer bufHeader; + ndefBuffer bufPayload; + uint32_t offset; + + if ( (record == NULL) || (bufRecord == NULL) || (bufRecord->buffer == NULL) ) + { + return ERR_PARAM; + } + + if (bufRecord->length < ndefRecordGetLength(record)) + { + bufRecord->length = ndefRecordGetLength(record); + return ERR_NOMEM; + } + + /* Encode header at the begining of buffer provided */ + bufHeader.buffer = bufRecord->buffer; + bufHeader.length = bufRecord->length; + err = ndefRecordEncodeHeader(record, &bufHeader); + if (err != ERR_NONE) + { + return err; + } + + offset = bufHeader.length; + + /* Set Type */ + if (record->typeLength > 0U) + { + (void)ST_MEMCPY(&bufRecord->buffer[offset], record->type, record->typeLength); + offset += record->typeLength; + } + + /* Set Id */ + if (record->idLength > 0U) + { + (void)ST_MEMCPY(&bufRecord->buffer[offset], record->id, record->idLength); + offset += record->idLength; + } + + /* Set Payload */ + bufPayload.buffer = &bufRecord->buffer[offset]; + bufPayload.length = bufRecord->length - offset; + err = ndefRecordPayloadEncode(record, &bufPayload); + if (err != ERR_NONE) + { + return err; + } + + bufRecord->length = offset + bufPayload.length; + + return ERR_NONE; +} + + +/*****************************************************************************/ +uint32_t ndefRecordGetPayloadLength(const ndefRecord* record) +{ + uint32_t payloadLength; + + if (record == NULL) + { + return 0; + } + + if ( (record->ndeftype != NULL) && (record->ndeftype->getPayloadLength != NULL) ) + { + payloadLength = record->ndeftype->getPayloadLength(record->ndeftype); + } + else + { + payloadLength = record->bufPayload.length; + } + + return payloadLength; +} + + +/*****************************************************************************/ +const uint8_t* ndefRecordGetPayloadItem(const ndefRecord* record, ndefConstBuffer* bufPayloadItem, bool begin) +{ + if ( (record == NULL) || (bufPayloadItem == NULL) ) + { + return NULL; + } + + bufPayloadItem->buffer = NULL; + bufPayloadItem->length = 0; + + if ( (record->ndeftype != NULL) && (record->ndeftype->getPayloadItem != NULL) ) + { + record->ndeftype->getPayloadItem(record->ndeftype, bufPayloadItem, begin); + } + else + { + if (begin == true) + { + (void)ndefRecordGetPayload(record, bufPayloadItem); + } + } + + return bufPayloadItem->buffer; +} diff --git a/Software/Middlewares/ST/ndef/Src/message/ndef_type_wifi.c b/Software/Middlewares/ST/ndef/Src/message/ndef_type_wifi.c new file mode 100644 index 0000000..7c43574 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Src/message/ndef_type_wifi.c @@ -0,0 +1,512 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief NDEF Wifi type + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + + +#include "platform.h" +#include "st_errno.h" +#include "utils.h" +#include "ndef_record.h" +#include "ndef_types.h" +#include "ndef_type_wifi.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + + +/*! Wifi Type strings */ +static const uint8_t ndefMediaTypeWifi[] = "application/vnd.wfa.wsc"; /*!< Wi-Fi Simple Configuration Type */ + +const ndefConstBuffer8 bufMediaTypeWifi = { ndefMediaTypeWifi, sizeof(ndefMediaTypeWifi) - 1U }; /*!< Wifi Type buffer */ + + +/*! Wifi OBB (WPS) */ + +#define NDEF_WIFI_DEFAULT_NETWORK_KEY "00000000" /*! Network key to be used when the Authentication is set to None. + Althought WPS defines a 0-length network key in such case, + a 8 digit value is required with tested phones. */ + +#define NDEF_WIFI_NETWORK_SSID_LENGTH 32U /*!< Network SSID length */ +#define NDEF_WIFI_NETWORK_KEY_LENGTH 32U /*!< Network Key length */ + +#define NDEF_WIFI_ENCRYPTION_TYPE_LENGTH 2U /*!< Encryption type length */ +#define NDEF_WIFI_AUTHENTICATION_TYPE_LENGTH 2U /*!< Authentication type length */ +#define WIFI_SSID_TYPE_LENGTH 2U /*!< SSID type length */ +#define WIFI_SSID_KEY_TYPE_LENGTH 2U /*!< SSID key type length */ + +#define NDEF_WIFI_ATTRIBUTE_ID_SSID_LSB 0x10U /*!< SSID Attribute ID LSB */ +#define NDEF_WIFI_ATTRIBUTE_ID_SSID_MSB 0x45U /*!< SSID Attribute ID MSB */ + +#define NDEF_WIFI_ATTRIBUTE_ID_NETWORK_LSB 0x10U /*!< Network Attribute ID LSB */ +#define NDEF_WIFI_ATTRIBUTE_ID_NETWORK_MSB 0x27U /*!< Network Attribute ID MSB */ + +#define NDEF_WIFI_ATTRIBUTE_ENCRYPTION 0x0FU /*!< Encryption attribute */ +#define NDEF_WIFI_ATTRIBUTE_AUTHENTICATION 0x03U /*!< Authentication attribute */ + +#define NDEF_WIFI_ATTRIBUTE_ID_OFFSET 0x01U /*!< Attribute Id offset */ +#define NDEF_WIFI_ATTRIBUTE_LENGTH_MSB_OFFSET 0x02U /*!< Attribute length MSB offset */ +#define NDEF_WIFI_ATTRIBUTE_LENGTH_LSB_OFFSET 0x03U /*!< Attribute length LSB offset */ +#define NDEF_WIFI_ATTRIBUTE_DATA_OFFSET 0x04U /*!< Attribute data offset */ +#define NDEF_WIFI_ATTRIBUTE_ENCRYPTION_LSB_OFFSET 0x05U /*!< Attribute encryption offset */ +#define NDEF_WIFI_ATTRIBUTE_AUTHENTICATION_LSB_OFFSET 0x05U /*!< Attribute authentication offset */ + + +static uint8_t wifiConfigToken1[] = { + 0x10, 0x4A, /* Attribute ID: Version */ + 0x00, 0x01, /* Attribute ID Length */ + 0x10, /* Version 1.0 */ + 0x10, 0x0E, /* Attribute ID Credential */ + 0x00, 0x48, /* Attribute ID Length */ + 0x10, 0x26, /* Attribute ID: Network Index */ + 0x00, 0x01, /* Attribute Length */ + 0x01, /* Index */ + 0x10, 0x45 /* Attribute ID: SSID */ +}; + +static uint8_t wifiConfigToken3[] = { + 0x10, 0x03, /* Attribute ID:Authentication Type */ + 0x00, 0x02, /* Attribute Length */ + 0x00, 0x01, /* Attribute Type: Open */ + 0x10, 0x0F, /* Attribute ID: Encryption Type */ + 0x00, 0x02, /* Attribute Length */ + 0x00, 0x01, /* Encryption Type: None */ + 0x10, 0x27 /* Attribute ID: Network Key */ +}; + +static uint8_t wifiConfigToken5[] = { + 0x10, 0x20, /* Attribute ID: MAC Address */ + 0x00, 0x06, /* Attribute Length */ + 0, /* MAC-ADDRESS */ + 0, /* MAC-ADDRESS */ + 0, /* MAC-ADDRESS */ + 0, /* MAC-ADDRESS */ + 0, /* MAC-ADDRESS */ + 0, /* MAC-ADDRESS */ + 0x10, 0x49, /* Attribute ID: Vendor Extension */ + 0x00, 0x06, /* Attribute Length */ + 0x00, 0x37, 0x2A, /* Vendor ID: WFA */ + 0x02, /* Subelement ID:Network Key Shareable */ + 0x01, /* Subelement Length */ + 0x01, /* Network Key Shareable: TRUE */ + 0x10, 0x49, /* Attribute ID: Vendor Extension */ + 0x00, 0x06, /* Attribute Length */ + 0x00, 0x37, 0x2A, /* Vendor ID: WFA */ + 0x00, /* Subelement ID: Version2 */ + 0x01, /* Subelement Length: 1 */ + 0x20 /* Version 2 */ +}; + + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + + +/*****************************************************************************/ +/*! Manage a Wifi Out-Of-Band NDEF message, to start a communication based on Wifi. + * The Wifi OOB format is described by the Wifi Protected Setup specification. + * It consists in a list of data elements formated as type-length-value. + + The Wifi OOB in a NDEF record has the following structure: + - Version + - Credential + - Network index + - SSID + - Authentication Type + - Encryption Type + - Network Key + - MAC Address + - Vendor Extension + - Network Key Shareable + - Vendor Extension + - Version2 + + Note: If the `Network key` is set to an empty buffer, the library sets it to "0x00000000" + Even if 0-length Network Key is supposed to be supported, smartphones dont necessarily accept it. + */ + + +/*****************************************************************************/ +static uint32_t ndefWifiPayloadGetLength(const ndefType* wifi) +{ + const ndefTypeWifi* wifiData; + uint32_t payloadLength; + + if ( (wifi == NULL) || (wifi->id != NDEF_TYPE_MEDIA_WIFI) ) + { + return 0; + } + + wifiData = &wifi->data.wifi; + + payloadLength = sizeof(wifiConfigToken1) + + WIFI_SSID_TYPE_LENGTH + wifiData->bufNetworkSSID.length + + sizeof(wifiConfigToken3) + + WIFI_SSID_KEY_TYPE_LENGTH + wifiData->bufNetworkKey.length + + sizeof(wifiConfigToken5); + + return payloadLength; +} + + +/*****************************************************************************/ +static const uint8_t* ndefWifiToPayloadItem(const ndefType* wifi, ndefConstBuffer* bufItem, bool begin) +{ + static uint32_t item = 0; + const ndefTypeWifi* wifiData; + uint16_t credentialLength; + + uint8_t defaultKey[4] = {0, 0, 0, 0}; + ndefConstBuffer8 bufDefaultNetworkKey = { defaultKey, sizeof(defaultKey) }; + + const uint8_t CONFIG_TOKEN_1_CREDENTIAL_LENGTH_INDEX = 7U; + const uint8_t CONFIG_TOKEN_3_AUTHENTICATION_TYPE_INDEX = 5U; + const uint8_t CONFIG_TOKEN_3_ENCRYPTION_TYPE_INDEX = 11U; + + static uint8_t zero[] = { 0 }; + static ndefConstBuffer8 bufZero = { zero, sizeof(zero) }; + + if ( (wifi == NULL) || (wifi->id != NDEF_TYPE_MEDIA_WIFI) || + (bufItem == NULL) ) + { + return NULL; + } + + wifiData = &wifi->data.wifi; + + if (begin == true) + { + item = 0; + } + + bufItem->buffer = NULL; + bufItem->length = 0; + + switch (item) + { + case 0: + /* Config Token1 */ + + /* Update Token1 with credential length */ + credentialLength = (uint16_t)(5U + /* Network index */ + 2U + /* SSID type */ + 2U + /* SSID key length */ + wifiData->bufNetworkSSID.length + /* SSID key */ + sizeof(wifiConfigToken3) + /* Token3 length */ + 2U + /* Network key length */ + wifiData->bufNetworkKey.length + /* Network key */ + sizeof(wifiConfigToken5)); /* Token5 length */ + + wifiConfigToken1[CONFIG_TOKEN_1_CREDENTIAL_LENGTH_INDEX] = (uint8_t)(credentialLength >> 8U); + wifiConfigToken1[CONFIG_TOKEN_1_CREDENTIAL_LENGTH_INDEX + 1U] = (uint8_t)(credentialLength & 0xFFU); + + bufItem->buffer = wifiConfigToken1; + bufItem->length = sizeof(wifiConfigToken1); + break; + + case 1: + /* SSID Length (1st byte) */ + bufItem->buffer = bufZero.buffer; + bufItem->length = bufZero.length; + break; + + case 2: + /* SSID Length (2nd byte) */ + bufItem->buffer = (const uint8_t*)&wifiData->bufNetworkSSID.length; + bufItem->length = 1U; + break; + + case 3: + /* SSID Value */ + bufItem->buffer = wifiData->bufNetworkSSID.buffer; + bufItem->length = wifiData->bufNetworkSSID.length; + break; + + case 4: + /* Config Token3 */ + + /* Update Token3 with Autentication and Encryption Types */ + wifiConfigToken3[CONFIG_TOKEN_3_AUTHENTICATION_TYPE_INDEX] = wifiData->authentication; + wifiConfigToken3[CONFIG_TOKEN_3_ENCRYPTION_TYPE_INDEX] = wifiData->encryption; + + bufItem->buffer = wifiConfigToken3; + bufItem->length = sizeof(wifiConfigToken3); + break; + + case 5: + /* SSID Key Length (1st byte) */ + bufItem->buffer = bufZero.buffer; + bufItem->length = bufZero.length; + break; + + case 6: + /* SSID Key Length (2 bytes) */ + bufItem->buffer = (const uint8_t*)&wifiData->bufNetworkKey.length; + bufItem->length = 1U; + break; + + case 7: + /* SSID Key Value */ + if(wifiData->bufNetworkKey.length == 0U) + { + /* Empty network key is not supported by Phones */ + bufItem->buffer = bufDefaultNetworkKey.buffer; + bufItem->length = bufDefaultNetworkKey.length; + } + else + { + bufItem->buffer = wifiData->bufNetworkKey.buffer; + bufItem->length = wifiData->bufNetworkKey.length; + } + break; + + case 8: + /* Config Token5 */ + bufItem->buffer = wifiConfigToken5; + bufItem->length = sizeof(wifiConfigToken5); + break; + + default: + bufItem->buffer = NULL; + bufItem->length = 0; + break; + } + + /* Move to next item for next call */ + item++; + + return bufItem->buffer; +} + + +/*****************************************************************************/ +ReturnCode ndefWifi(ndefType* wifi, const ndefTypeWifi* wifiConfig) +{ + ndefTypeWifi* wifiData; + + if ( (wifi == NULL) || (wifiConfig == NULL) ) + { + return ERR_PARAM; + } + + wifi->id = NDEF_TYPE_MEDIA_WIFI; + wifi->getPayloadLength = ndefWifiPayloadGetLength; + wifi->getPayloadItem = ndefWifiToPayloadItem; + wifiData = &wifi->data.wifi; + + wifiData->bufNetworkSSID = wifiConfig->bufNetworkSSID; + wifiData->bufNetworkKey = wifiConfig->bufNetworkKey; + wifiData->authentication = wifiConfig->authentication; + wifiData->encryption = wifiConfig->encryption; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefGetWifi(const ndefType* wifi, ndefTypeWifi* wifiConfig) +{ + const ndefTypeWifi* wifiData; + + if ( (wifi == NULL) || (wifi->id != NDEF_TYPE_MEDIA_WIFI) || + (wifiConfig == NULL) ) + { + return ERR_PARAM; + } + + wifiData = &wifi->data.wifi; + + wifiConfig->bufNetworkSSID.buffer = wifiData->bufNetworkSSID.buffer; + wifiConfig->bufNetworkSSID.length = wifiData->bufNetworkSSID.length; + wifiConfig->bufNetworkKey.buffer = wifiData->bufNetworkKey.buffer; + wifiConfig->bufNetworkKey.length = wifiData->bufNetworkKey.length; + wifiConfig->authentication = wifiData->authentication; + wifiConfig->encryption = wifiData->encryption; + + return ERR_NONE; +} + + +/*****************************************************************************/ +static ReturnCode ndefPayloadToWifi(const ndefConstBuffer* bufPayload, ndefType* wifi) +{ + ndefTypeWifi wifiConfig; + uint32_t offset; + + if ( (bufPayload == NULL) || (wifi == NULL) ) + { + return ERR_PARAM; + } + + wifiConfig.bufNetworkSSID.buffer = NULL; + wifiConfig.bufNetworkSSID.length = 0; + wifiConfig.bufNetworkKey.buffer = NULL; + wifiConfig.bufNetworkKey.length = 0; + wifiConfig.authentication = 0; + wifiConfig.encryption = 0; + + offset = 0; + while (offset < bufPayload->length) + { + uint8_t attribute = bufPayload->buffer[offset]; + if (attribute == NDEF_WIFI_ATTRIBUTE_ID_SSID_LSB) + { + uint8_t data1 = bufPayload->buffer[offset + NDEF_WIFI_ATTRIBUTE_LENGTH_MSB_OFFSET]; + uint8_t data2 = bufPayload->buffer[offset + NDEF_WIFI_ATTRIBUTE_LENGTH_LSB_OFFSET]; + uint32_t length = ((uint32_t)data1 << 8U) | data2; + + switch (bufPayload->buffer[offset + NDEF_WIFI_ATTRIBUTE_ID_OFFSET]) + { + case NDEF_WIFI_ATTRIBUTE_ID_SSID_MSB: + /* Network SSID */ + if (length > NDEF_WIFI_NETWORK_SSID_LENGTH) + { + return ERR_PROTO; + } + wifiConfig.bufNetworkSSID.buffer = &bufPayload->buffer[offset + NDEF_WIFI_ATTRIBUTE_DATA_OFFSET]; + wifiConfig.bufNetworkSSID.length = length; + offset += (NDEF_WIFI_ATTRIBUTE_DATA_OFFSET + length); + break; + case NDEF_WIFI_ATTRIBUTE_ID_NETWORK_MSB: + /* Network key */ + if (length > NDEF_WIFI_NETWORK_KEY_LENGTH) + { + return ERR_PROTO; + } + wifiConfig.bufNetworkKey.buffer = &bufPayload->buffer[offset + NDEF_WIFI_ATTRIBUTE_DATA_OFFSET]; + wifiConfig.bufNetworkKey.length = length; + offset += (NDEF_WIFI_ATTRIBUTE_DATA_OFFSET + length); + break; + case NDEF_WIFI_ATTRIBUTE_AUTHENTICATION: + /* Authentication */ + if (length != NDEF_WIFI_AUTHENTICATION_TYPE_LENGTH) + { + return ERR_PROTO; + } + wifiConfig.authentication = bufPayload->buffer[offset + NDEF_WIFI_ATTRIBUTE_AUTHENTICATION_LSB_OFFSET]; + offset += (NDEF_WIFI_ATTRIBUTE_DATA_OFFSET + length); + break; + case NDEF_WIFI_ATTRIBUTE_ENCRYPTION: + /* Encryption */ + if (length != NDEF_WIFI_ENCRYPTION_TYPE_LENGTH) + { + return ERR_PROTO; + } + wifiConfig.encryption = bufPayload->buffer[offset + NDEF_WIFI_ATTRIBUTE_ENCRYPTION_LSB_OFFSET]; + offset += (NDEF_WIFI_ATTRIBUTE_DATA_OFFSET + length); + break; + default: + offset++; + break; + } + } + else + { + offset++; + } + } + + return ndefWifi(wifi, &wifiConfig); +} + + +/*****************************************************************************/ +ReturnCode ndefRecordToWifi(const ndefRecord* record, ndefType* wifi) +{ + const ndefType* ndeftype; + + if ( (record == NULL) || (wifi == NULL) ) + { + return ERR_PARAM; + } + + if ( ! ndefRecordTypeMatch(record, NDEF_TNF_MEDIA_TYPE, &bufMediaTypeWifi)) /* "application/vnd.wfa.wsc" */ + { + return ERR_PROTO; + } + + ndeftype = ndefRecordGetNdefType(record); + if (ndeftype != NULL) + { + (void)ST_MEMCPY(wifi, ndeftype, sizeof(ndefType)); + return ERR_NONE; + } + + return ndefPayloadToWifi(&record->bufPayload, wifi); +} + + +/*****************************************************************************/ +ReturnCode ndefWifiToRecord(const ndefType* wifi, ndefRecord* record) +{ + if ( (wifi == NULL) || (wifi->id != NDEF_TYPE_MEDIA_WIFI) || + (record == NULL) ) + { + return ERR_PARAM; + } + + (void)ndefRecordReset(record); + + (void)ndefRecordSetType(record, NDEF_TNF_MEDIA_TYPE, &bufMediaTypeWifi); + + (void)ndefRecordSetNdefType(record, wifi); + + return ERR_NONE; +} diff --git a/Software/Middlewares/ST/ndef/Src/message/ndef_types.c b/Software/Middlewares/ST/ndef/Src/message/ndef_types.c new file mode 100644 index 0000000..e5f3a41 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Src/message/ndef_types.c @@ -0,0 +1,321 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief NDEF RTD and MIME types + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "platform.h" +#include "st_errno.h" +#include "utils.h" +#include "ndef_record.h" +#include "ndef_types.h" +#include "ndef_types_rtd.h" +#include "ndef_types_mime.h" +#include "ndef_type_wifi.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + + +/*! NDEF type table to associate a ndefTypeId and a string */ +typedef struct +{ + ndefTypeId typeId; /*!< NDEF Type Id */ + uint8_t tnf; /*!< TNF */ + const ndefConstBuffer8* bufTypeString; /*!< Type String buffer */ +} ndefTypeTable; + + +/*! Type wrapper to function pointers */ +typedef struct +{ + ndefTypeId typeId; /*!< NDEF Type Id */ + ReturnCode (*recordToType)(const ndefRecord* record, ndefType* type); /*!< Pointer to read function */ + ReturnCode (*typeToRecord)(const ndefType* type, ndefRecord* record); /*!< Pointer to write function */ +} ndefTypeConverter; + + +/*! Array to match RTD strings with Well-known types, and converting functions */ +static const ndefTypeConverter typeConverterTable[] = +{ + { NDEF_TYPE_EMPTY, ndefRecordToEmptyType, ndefEmptyTypeToRecord }, + { NDEF_TYPE_RTD_DEVICE_INFO, ndefRecordToRtdDeviceInfo, ndefRtdDeviceInfoToRecord }, + { NDEF_TYPE_RTD_TEXT, ndefRecordToRtdText, ndefRtdTextToRecord }, + { NDEF_TYPE_RTD_URI, ndefRecordToRtdUri, ndefRtdUriToRecord }, + { NDEF_TYPE_RTD_AAR, ndefRecordToRtdAar, ndefRtdAarToRecord }, + { NDEF_TYPE_MEDIA_VCARD, ndefRecordToVCard, ndefVCardToRecord }, + { NDEF_TYPE_MEDIA_WIFI, ndefRecordToWifi, ndefWifiToRecord }, +}; + + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + + +/*****************************************************************************/ +static ReturnCode ndefTypeStringToTypeId(uint8_t tnf, const ndefConstBuffer8* bufTypeString, ndefTypeId* typeId) +{ + /*! Empty string */ + static const uint8_t ndefTypeEmpty[] = ""; /*!< Empty string */ + static ndefConstBuffer8 bufTypeEmpty = { ndefTypeEmpty, sizeof(ndefTypeEmpty) - 1U }; + + // TODO Transform the enum (u32) to defines (u8), re-order to u32-u8-u8 to compact buffer ! + static const ndefTypeTable typeTable[] = + { + { NDEF_TYPE_EMPTY, NDEF_TNF_EMPTY, &bufTypeEmpty }, + { NDEF_TYPE_RTD_DEVICE_INFO, NDEF_TNF_RTD_WELL_KNOWN_TYPE, &bufRtdTypeDeviceInfo }, + { NDEF_TYPE_RTD_TEXT, NDEF_TNF_RTD_WELL_KNOWN_TYPE, &bufRtdTypeText }, + { NDEF_TYPE_RTD_URI, NDEF_TNF_RTD_WELL_KNOWN_TYPE, &bufRtdTypeUri }, + { NDEF_TYPE_RTD_AAR, NDEF_TNF_RTD_EXTERNAL_TYPE, &bufRtdTypeAar }, + { NDEF_TYPE_MEDIA_VCARD, NDEF_TNF_MEDIA_TYPE, &bufMediaTypeVCard }, + { NDEF_TYPE_MEDIA_WIFI, NDEF_TNF_MEDIA_TYPE, &bufMediaTypeWifi }, + }; + + uint32_t i; + + if ( (bufTypeString == NULL) || (typeId == NULL) ) + { + return ERR_PROTO; + } + + for (i = 0; i < SIZEOF_ARRAY(typeTable); i++) + { + /* Check TNF and length are the same, then compare the content */ + if (typeTable[i].tnf == tnf) + { + if (bufTypeString->length == typeTable[i].bufTypeString->length) + { + if (bufTypeString->length == 0U) + { + /* Empty type */ + *typeId = typeTable[i].typeId; + return ERR_NONE; + } + else + { + if (ST_BYTECMP(typeTable[i].bufTypeString->buffer, bufTypeString->buffer, bufTypeString->length) == 0) + { + *typeId = typeTable[i].typeId; + return ERR_NONE; + } + } + } + } + } + + return ERR_NOTFOUND; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordTypeStringToTypeId(const ndefRecord* record, ndefTypeId* typeId) +{ + ReturnCode err; + + uint8_t tnf; + ndefConstBuffer8 bufRecordType; + + if ( (record == NULL) || (typeId == NULL) ) + { + return ERR_PARAM; + } + + err = ndefRecordGetType(record, &tnf, &bufRecordType); + if (err != ERR_NONE) + { + return err; + } + if (tnf >= NDEF_TNF_RESERVED) + { + return ERR_INTERNAL; + } + + switch (tnf) + { + case NDEF_TNF_EMPTY: /* Fall through */ + case NDEF_TNF_RTD_WELL_KNOWN_TYPE: /* Fall through */ + case NDEF_TNF_RTD_EXTERNAL_TYPE: /* Fall through */ + case NDEF_TNF_MEDIA_TYPE: /* Fall through */ + err = ndefTypeStringToTypeId(tnf, &bufRecordType, typeId); + break; + default: + err = ERR_NOT_IMPLEMENTED; + break; + } + + return err; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordToType(const ndefRecord* record, ndefType* type) +{ + const ndefType* ndeftype; + ReturnCode err; + ndefTypeId typeId; + uint32_t i; + + ndeftype = ndefRecordGetNdefType(record); + if (ndeftype != NULL) + { + /* Return the well-known type contained in the record */ + (void)ST_MEMCPY(type, ndeftype, sizeof(ndefType)); + return ERR_NONE; + } + + err = ndefRecordTypeStringToTypeId(record, &typeId); + if (err != ERR_NONE) + { + return err; + } + + for (i = 0; i < SIZEOF_ARRAY(typeConverterTable); i++) + { + if (typeId == typeConverterTable[i].typeId) + { + /* Call the appropriate function to the matching type */ + if (typeConverterTable[i].recordToType != NULL) + { + return typeConverterTable[i].recordToType(record, type); + } + } + } + + return ERR_NOT_IMPLEMENTED; +} + + +/*****************************************************************************/ +ReturnCode ndefTypeToRecord(const ndefType* type, ndefRecord* record) +{ + uint32_t i; + + if (type == NULL) + { + return ERR_PARAM; + } + + for (i = 0; i < SIZEOF_ARRAY(typeConverterTable); i++) + { + if (type->id == typeConverterTable[i].typeId) + { + /* Call the appropriate function to the matching type */ + if (typeConverterTable[i].typeToRecord != NULL) + { + return typeConverterTable[i].typeToRecord(type, record); + } + } + } + + return ERR_NOT_IMPLEMENTED; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordSetNdefType(ndefRecord* record, const ndefType* type) +{ + uint32_t payloadLength; + + if ( (record == NULL) || + (type == NULL) || + (type->id > NDEF_TYPE_ID_COUNT) || + (type->getPayloadLength == NULL) || + (type->getPayloadItem == NULL) ) + { + return ERR_PARAM; + } + + record->ndeftype = type; + + /* Set Short Record bit accordingly */ + payloadLength = ndefRecordGetPayloadLength(record); + ndefHeaderSetValueSR(record, (payloadLength <= NDEF_SHORT_RECORD_LENGTH_MAX) ? 1 : 0); + + return ERR_NONE; +} + + +/*****************************************************************************/ +const ndefType* ndefRecordGetNdefType(const ndefRecord* record) +{ + if (record == NULL) + { + return NULL; + } + + if (record->ndeftype != NULL) + { + /* Check whether it is a valid NDEF type */ + if ( (record->ndeftype->id < NDEF_TYPE_ID_COUNT) && + (record->ndeftype->getPayloadItem != NULL) && + (record->ndeftype->getPayloadLength != NULL) ) + { + return record->ndeftype; + } + } + + return NULL; +} diff --git a/Software/Middlewares/ST/ndef/Src/message/ndef_types_mime.c b/Software/Middlewares/ST/ndef/Src/message/ndef_types_mime.c new file mode 100644 index 0000000..f93ce16 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Src/message/ndef_types_mime.c @@ -0,0 +1,766 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief NDEF MIME types + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + + +#include "platform.h" +#include "st_errno.h" +#include "utils.h" +#include "ndef_record.h" +#include "ndef_types.h" +#include "ndef_types_mime.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + + +/*! Media Type strings */ +static const uint8_t ndefMediaTypeVCard[] = "text/x-vCard"; /*!< vCard Type */ + +const ndefConstBuffer8 bufMediaTypeVCard = { ndefMediaTypeVCard, sizeof(ndefMediaTypeVCard) - 1U }; /*!< vCard Type buffer */ + + +/*! vCard delimiters */ +static const uint8_t COLON[] = ":"; +static const uint8_t SEMICOLON[] = ";"; +static const uint8_t NEWLINE[] = "\r\n"; + +static const ndefConstBuffer bufDelimiterColon = { COLON, sizeof(COLON) - 1U }; /*!< ":" */ +static const ndefConstBuffer bufDelimiterSemicolon = { SEMICOLON, sizeof(SEMICOLON) - 1U }; /*!< ";" */ +static const ndefConstBuffer bufDelimiterNewLine = { NEWLINE, sizeof(NEWLINE) - 1U}; /*!< "\r\n" */ + +/*! vCard keyword types */ +static const uint8_t TYPE_BEGIN[] = "BEGIN"; +static const uint8_t TYPE_END[] = "END"; +static const uint8_t TYPE_VERSION[] = "VERSION"; +static const uint8_t VALUE_VCARD[] = "VCARD"; +static const uint8_t VALUE_2_1[] = "2.1"; + +static const ndefConstBuffer bufTypeBegin = { TYPE_BEGIN, sizeof(TYPE_BEGIN) - 1U }; /*!< "BEGIN" */ +static const ndefConstBuffer bufTypeEnd = { TYPE_END, sizeof(TYPE_END) - 1U }; /*!< "END" */ +static const ndefConstBuffer bufTypeVersion = { TYPE_VERSION, sizeof(TYPE_VERSION) - 1U }; /*!< "VERSION" */ +static const ndefConstBuffer bufValueVCard = { VALUE_VCARD, sizeof(VALUE_VCARD) - 1U }; /*!< "VCARD" */ +static const ndefConstBuffer bufValue_2_1 = { VALUE_2_1, sizeof(VALUE_2_1) - 1U }; /*!< "2.1" */ + + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + + +/* + * Media + */ + + +/*****************************************************************************/ +ReturnCode ndefMedia(ndefType* media, const ndefConstBuffer8* bufType, const ndefConstBuffer* bufPayload) +{ + ndefTypeMedia* typeMedia; + + if ( (media == NULL) || + (bufType == NULL) || (bufType->buffer == NULL) || (bufType->length == 0U) || + (bufPayload == NULL) || (bufPayload->buffer == NULL) || (bufPayload->length == 0U) ) + { + return ERR_PARAM; + } + + media->id = NDEF_TYPE_MEDIA; + media->getPayloadLength = NULL; + media->getPayloadItem = NULL; + typeMedia = &media->data.media; + + typeMedia->bufType.buffer = bufType->buffer; + typeMedia->bufType.length = bufType->length; + typeMedia->bufPayload.buffer = bufPayload->buffer; + typeMedia->bufPayload.length = bufPayload->length; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefGetMedia(const ndefType* media, ndefConstBuffer8* bufType, ndefConstBuffer* bufPayload) +{ + const ndefTypeMedia* typeMedia; + + if ( (media == NULL) || (media->id != NDEF_TYPE_MEDIA) || + (bufType == NULL) || (bufPayload == NULL) ) + { + return ERR_PARAM; + } + + typeMedia = &media->data.media; + + bufType->buffer = typeMedia->bufType.buffer; + bufType->length = typeMedia->bufType.length; + + bufPayload->buffer = typeMedia->bufPayload.buffer; + bufPayload->length = typeMedia->bufPayload.length; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordToMedia(const ndefRecord* record, ndefType* media) +{ + const ndefType* ndeftype; + ndefConstBuffer8 bufType; + + if ( (record == NULL) || (media == NULL) ) + { + return ERR_PARAM; + } + + if (ndefHeaderTNF(record) != NDEF_TNF_MEDIA_TYPE) + { + return ERR_PROTO; + } + + ndeftype = ndefRecordGetNdefType(record); + if (ndeftype != NULL) + { + (void)ST_MEMCPY(media, ndeftype, sizeof(ndefType)); + return ERR_NONE; + } + + bufType.buffer = record->type; + bufType.length = record->typeLength; + + return ndefMedia(media, &bufType, &record->bufPayload); +} + + +/*****************************************************************************/ +ReturnCode ndefMediaToRecord(const ndefType* media, ndefRecord* record) +{ + const ndefTypeMedia* typeMedia; + + if ( (media == NULL) || (media->id != NDEF_TYPE_MEDIA) || + (record == NULL) ) + { + return ERR_PARAM; + } + + typeMedia = &media->data.media; + + (void)ndefRecordReset(record); + + (void)ndefRecordSetType(record, NDEF_TNF_MEDIA_TYPE, &typeMedia->bufType); + + (void)ndefRecordSetPayload(record, &typeMedia->bufPayload); + + return ERR_NONE; +} + + +/* + * VCard + */ + + +/*****************************************************************************/ +static uint32_t ndefVCardPayloadGetLength(const ndefType* vCard) +{ + const ndefTypeVCard* vCardData; + uint32_t payloadLength = 0; + uint32_t i; + + if ( (vCard == NULL) || (vCard->id != NDEF_TYPE_MEDIA_VCARD) ) + { + return 0; + } + + vCardData = &vCard->data.vCard; + + payloadLength += bufTypeBegin.length; + payloadLength += bufDelimiterColon.length; + payloadLength += bufValueVCard.length; + payloadLength += bufDelimiterNewLine.length; + + payloadLength += bufTypeVersion.length; + payloadLength += bufDelimiterColon.length; + payloadLength += bufValue_2_1.length; + payloadLength += bufDelimiterNewLine.length; + + i = 0; + while (vCardData->entry[i].bufTypeBuffer != NULL) + { + payloadLength += vCardData->entry[i].bufTypeLength; + + if (vCardData->entry[i].bufSubTypeBuffer != NULL) + { + payloadLength += bufDelimiterSemicolon.length; + payloadLength += vCardData->entry[i].bufSubTypeLength; + } + + payloadLength += bufDelimiterColon.length; + + payloadLength += vCardData->entry[i].bufValueLength; + payloadLength += bufDelimiterNewLine.length; + + i++; + } + + payloadLength += bufTypeEnd.length; + payloadLength += bufDelimiterColon.length; + payloadLength += bufValueVCard.length; + /* No New line after "END:VCARD" */ + + return payloadLength; +} + + +/*****************************************************************************/ +static const uint8_t* ndefVCardToPayloadItem(const ndefType* vCard, ndefConstBuffer* bufItem, bool begin) +{ + static uint32_t item = 0; + static uint32_t userItem = 0; + static uint32_t index = 0; + const ndefTypeVCard* vCardData; + + if ( (vCard == NULL) || (vCard->id != NDEF_TYPE_MEDIA_VCARD) || + (bufItem == NULL) ) + { + return NULL; + } + + vCardData = &vCard->data.vCard; + + if (begin == true) + { + item = 0; + userItem = 0; + index = 0; + } + + bufItem->buffer = NULL; + bufItem->length = 0; + + /* Check for for empty vCard */ + if (vCardData->entry[0].bufTypeBuffer == NULL) + { + return NULL; + } + + switch (item) + { + /* BEGIN:VCARD\r\n */ + case 0: + bufItem->buffer = bufTypeBegin.buffer; + bufItem->length = bufTypeBegin.length; + item++; /* Move to next item for next call */ + break; + case 1: + bufItem->buffer = bufDelimiterColon.buffer; + bufItem->length = bufDelimiterColon.length; + item++; /* Move to next item for next call */ + break; + case 2: + bufItem->buffer = bufValueVCard.buffer; + bufItem->length = bufValueVCard.length; + item++; /* Move to next item for next call */ + break; + case 3: + bufItem->buffer = bufDelimiterNewLine.buffer; + bufItem->length = bufDelimiterNewLine.length; + item++; /* Move to next item for next call */ + break; + + /* VERSION:2.1\r\n */ + case 4: + bufItem->buffer = bufTypeVersion.buffer; + bufItem->length = bufTypeVersion.length; + item++; /* Move to next item for next call */ + break; + case 5: + bufItem->buffer = bufDelimiterColon.buffer; + bufItem->length = bufDelimiterColon.length; + item++; /* Move to next item for next call */ + break; + case 6: + bufItem->buffer = bufValue_2_1.buffer; + bufItem->length = bufValue_2_1.length; + item++; /* Move to next item for next call */ + break; + case 7: + bufItem->buffer = bufDelimiterNewLine.buffer; + bufItem->length = bufDelimiterNewLine.length; + item++; /* Move to next item for next call */ + userItem = 0; + index = 0; + break; + case 8: + /* User data */ + switch (userItem) + { + case 0: + /* Type */ + if (vCardData->entry[index].bufTypeBuffer == NULL) + { + bufItem->buffer = bufTypeEnd.buffer; + bufItem->length = bufTypeEnd.length; + item++; /* Exit the user item loop */ + break; + } + bufItem->buffer = vCardData->entry[index].bufTypeBuffer; + bufItem->length = vCardData->entry[index].bufTypeLength; + + if (vCardData->entry[index].bufSubTypeBuffer != NULL) + { + userItem++; + } + else + { + userItem += 3U; /* Skip sending semicolon and subtype, move to colon */ + } + break; + case 1: + bufItem->buffer = bufDelimiterSemicolon.buffer; + bufItem->length = bufDelimiterSemicolon.length; + userItem++; + break; + case 2: + /* Subtype */ + bufItem->buffer = vCardData->entry[index].bufSubTypeBuffer; + bufItem->length = vCardData->entry[index].bufSubTypeLength; + userItem++; + break; + case 3: + bufItem->buffer = bufDelimiterColon.buffer; + bufItem->length = bufDelimiterColon.length; + userItem++; + break; + case 4: + /* Value */ + bufItem->buffer = vCardData->entry[index].bufValueBuffer; + bufItem->length = vCardData->entry[index].bufValueLength; + userItem++; + break; + case 5: + bufItem->buffer = bufDelimiterNewLine.buffer; + bufItem->length = bufDelimiterNewLine.length; + index++; + userItem = 0; /* Looping to case 0 */ + break; + default: + /* MISRA 16.4: mandatory default statement */ + break; + } + break; + case 9: + bufItem->buffer = bufDelimiterColon.buffer; + bufItem->length = bufDelimiterColon.length; + item++; /* Move to next item for next call */ + break; + case 10: + bufItem->buffer = bufValueVCard.buffer; + bufItem->length = bufValueVCard.length; + item++; /* Move to next item for next call */ + break; + default: + bufItem->buffer = NULL; + bufItem->length = 0; + break; + } + + return bufItem->buffer; +} + + +/*****************************************************************************/ +ReturnCode ndefVCard(ndefType* vCard, const ndefVCardInput* bufVCardInput, uint32_t bufVCardInputCount) +{ + ndefTypeVCard* vCardData; + uint32_t i; + + if ( (vCard == NULL) || (bufVCardInput == NULL) || + (bufVCardInputCount == 0U) || (bufVCardInputCount > NDEF_VCARD_ENTRY_MAX) ) + { + return ERR_PARAM; + } + + vCard->id = NDEF_TYPE_MEDIA_VCARD; + vCard->getPayloadLength = ndefVCardPayloadGetLength; + vCard->getPayloadItem = ndefVCardToPayloadItem; + vCardData = &vCard->data.vCard; + + /* Initialize array */ + for (i = 0; i < NDEF_VCARD_ENTRY_MAX; i++) + { + vCardData->entry[i].bufTypeBuffer = NULL; + vCardData->entry[i].bufTypeLength = 0; + vCardData->entry[i].bufSubTypeBuffer = NULL; + vCardData->entry[i].bufSubTypeLength = 0; + vCardData->entry[i].bufValueBuffer = NULL; + vCardData->entry[i].bufValueLength = 0; + } + + /* Pointer to user input */ + for (i = 0; i < bufVCardInputCount; i++) + { + vCardData->entry[i].bufTypeBuffer = bufVCardInput[i].bufType->buffer; + vCardData->entry[i].bufSubTypeBuffer = bufVCardInput[i].bufSubType->buffer; + vCardData->entry[i].bufValueBuffer = bufVCardInput[i].bufValue->buffer; + + vCardData->entry[i].bufTypeLength = (uint8_t)bufVCardInput[i].bufType->length; + vCardData->entry[i].bufSubTypeLength = (uint8_t)bufVCardInput[i].bufSubType->length; + vCardData->entry[i].bufValueLength = (uint16_t)bufVCardInput[i].bufValue->length; + } + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefGetVCard(const ndefType* vCard, const ndefConstBuffer* bufType, ndefConstBuffer* bufSubType, ndefConstBuffer* bufValue) +{ + const ndefTypeVCard* vCardData; + uint32_t i; + + if ( (vCard == NULL) || (vCard->id != NDEF_TYPE_MEDIA_VCARD) || + (bufType == NULL) || (bufSubType == NULL) || (bufValue == NULL) ) + { + return ERR_PARAM; + } + + vCardData = &vCard->data.vCard; + + bufSubType->buffer = NULL; + bufSubType->length = 0; + + bufValue->buffer = NULL; + bufValue->length = 0; + + for (i = 0; i < NDEF_VCARD_ENTRY_MAX; i++) + { + if ( (vCardData->entry[i].bufTypeLength != 0U) && + (vCardData->entry[i].bufTypeLength == bufType->length) ) + { + if (bufType->length > 0U) + { + if (ST_BYTECMP(vCardData->entry[i].bufTypeBuffer, bufType->buffer, bufType->length) == 0) + { + bufSubType->buffer = vCardData->entry[i].bufSubTypeBuffer; + bufSubType->length = vCardData->entry[i].bufSubTypeLength; + + bufValue->buffer = vCardData->entry[i].bufValueBuffer; + bufValue->length = vCardData->entry[i].bufValueLength; + + return ERR_NONE; + } + } + } + } + + return ERR_NOTFOUND; +} + + +/*****************************************************************************/ +static ReturnCode ndefVCardFindMarker(const ndefConstBuffer* bufPayload, const ndefConstBuffer* bufMarker, uint32_t* offset) +{ + uint32_t tempOffset; + + if ( (bufPayload == NULL) || (bufPayload->buffer == NULL) || + (bufMarker == NULL) || (bufMarker->buffer == NULL) || + (offset == NULL) ) + { + return ERR_PROTO; + } + + tempOffset = 0; + while (tempOffset < (bufPayload->length - bufMarker->length)) + { + if (bufMarker->length > 0U) + { + // TODO Convert To Upper to be case insensitive + if (ST_BYTECMP(&bufPayload->buffer[tempOffset], bufMarker->buffer, bufMarker->length) == 0) + { + *offset = tempOffset; + return ERR_NONE; + } + } + tempOffset++; + } + + return ERR_NOTFOUND; +} + + +/*****************************************************************************/ +static ReturnCode ndefVCardExtractLine(const ndefConstBuffer* bufPayload, const ndefConstBuffer* bufMarker, ndefConstBuffer* bufLine) +{ + ReturnCode err; + uint32_t markerOffset; + + if ( (bufPayload == NULL) || (bufPayload->buffer == NULL) || + (bufMarker == NULL) || (bufMarker->buffer == NULL) || + (bufLine == NULL) || (bufLine->buffer == NULL) ) + { + return ERR_PROTO; + } + + err = ndefVCardFindMarker(bufPayload, bufMarker, &markerOffset); + if (err == ERR_NONE) + { + /* Return up to the marker */ + bufLine->buffer = bufPayload->buffer; + bufLine->length = markerOffset; + } + else + { + /* Return up to the end of the payload */ + bufLine->buffer = bufPayload->buffer; + bufLine->length = bufPayload->length; + } + + return ERR_NONE; +} + + +/*****************************************************************************/ +static ReturnCode ndefVCardParseLine(const ndefConstBuffer* bufLine, ndefVCardEntry* vCardEntry) +{ + ReturnCode err; + ndefConstBuffer bufKeyword; + uint32_t semicolonOffset; + uint32_t colonOffset; + + if ( (bufLine == NULL) || (bufLine->buffer == NULL) || (vCardEntry == NULL) ) + { + return ERR_PROTO; + } + + /* Look for the type delimiter colon ":" */ + err = ndefVCardFindMarker(bufLine, &bufDelimiterColon, &colonOffset); + if (err != ERR_NONE) + { + /* Invalid line */ + return err; + } + + /* Keyword is located at the begining of the line up to the delimiter colon */ + bufKeyword.buffer = bufLine->buffer; + bufKeyword.length = colonOffset; + + vCardEntry->bufTypeBuffer = bufLine->buffer; + vCardEntry->bufTypeLength = (uint8_t)colonOffset; + + /* Look for any subtype delimiter semicolon ";" */ + err = ndefVCardFindMarker(&bufKeyword, &bufDelimiterSemicolon, &semicolonOffset); + if (err == ERR_NONE) + { + /* Subtype found (remove the leading ";") */ + vCardEntry->bufSubTypeBuffer = &bufLine->buffer[semicolonOffset + 1U]; + vCardEntry->bufSubTypeLength = (uint8_t)(colonOffset - semicolonOffset - 1U); + + /* Adjust the Type length */ + vCardEntry->bufTypeLength -= vCardEntry->bufSubTypeLength + 1U; + } + + /* The value follows ":" until the end of the line */ + vCardEntry->bufValueBuffer = &bufLine->buffer[colonOffset + 1U]; + vCardEntry->bufValueLength = (uint16_t)(bufLine->length - colonOffset); + + return ERR_NONE; +} + + +/*****************************************************************************/ +static bool ndefIsVCardTypeFound(const ndefTypeVCard* vCard, const uint8_t* typeString) +{ + uint32_t i; + for (i = 0; i < NDEF_VCARD_ENTRY_MAX; i++) + { + if (vCard->entry[i].bufTypeLength > 0U) + { + if (ST_BYTECMP(typeString, vCard->entry[i].bufTypeBuffer, vCard->entry[i].bufTypeLength) == 0) + { + return true; + } + } + } + + return false; +} + + +/*****************************************************************************/ +static ReturnCode ndefPayloadToVcard(const ndefConstBuffer* bufPayload, ndefType* vCard) +{ + ReturnCode err; + ndefTypeVCard* vCardData; + + uint32_t i; + uint32_t offset; + uint32_t entry_count; + ndefConstBuffer bufLinePayload; + ndefConstBuffer bufLine; + + if ( (bufPayload == NULL) || (bufPayload->buffer == NULL) || (bufPayload->length == 0U) || + (vCard == NULL) ) + { + return ERR_PROTO; + } + + vCard->id = NDEF_TYPE_MEDIA_VCARD; + vCard->getPayloadLength = ndefVCardPayloadGetLength; + vCard->getPayloadItem = ndefVCardToPayloadItem; + vCardData = &vCard->data.vCard; + + /* Clear the vCard before parsing */ + for (i = 0; i < NDEF_VCARD_ENTRY_MAX; i++) + { + vCardData->entry[i].bufTypeBuffer = NULL; + vCardData->entry[i].bufTypeLength = 0; + vCardData->entry[i].bufSubTypeBuffer = NULL; + vCardData->entry[i].bufSubTypeLength = 0; + vCardData->entry[i].bufValueBuffer = NULL; + vCardData->entry[i].bufValueLength = 0; + } + + offset = 0; + entry_count = 0; + while ( (offset < bufPayload->length) && (entry_count < NDEF_VCARD_ENTRY_MAX) ) + { + /* Search an "end of line" or end of payload among the remaining to parse */ + bufLinePayload.buffer = &bufPayload->buffer[offset]; + bufLinePayload.length = bufPayload->length - offset; + + (void)ndefVCardExtractLine(&bufLinePayload, &bufDelimiterNewLine, &bufLine); + + /* Parse line and fill vCard entry */ + err = ndefVCardParseLine(&bufLine, &vCardData->entry[entry_count]); + if (err == ERR_NONE) + { + entry_count++; + } + + /* Move to the next line */ + offset += bufLine.length + bufDelimiterNewLine.length; + } + + /* Check BEGIN, VERSION and END types exist */ + if (ndefIsVCardTypeFound(vCardData, bufTypeBegin.buffer) == false) + { + return ERR_SYNTAX; + } + else if (ndefIsVCardTypeFound(vCardData, bufTypeVersion.buffer) == false) + { + return ERR_SYNTAX; + } + else if (ndefIsVCardTypeFound(vCardData, bufTypeEnd.buffer) == false) + { + return ERR_SYNTAX; + } + else + { + /* MISRA 15.7 - Empty else */ + } + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordToVCard(const ndefRecord* record, ndefType* vCard) +{ + const ndefType* ndeftype; + + if ( (record == NULL) || (vCard == NULL) ) + { + return ERR_PARAM; + } + + if ( ! ndefRecordTypeMatch(record, NDEF_TNF_MEDIA_TYPE, &bufMediaTypeVCard)) /* "text/x-vCard" */ + { + return ERR_PROTO; + } + + ndeftype = ndefRecordGetNdefType(record); + if (ndeftype != NULL) + { + (void)ST_MEMCPY(vCard, ndeftype, sizeof(ndefType)); + return ERR_NONE; + } + + return ndefPayloadToVcard(&record->bufPayload, vCard); +} + + +/*****************************************************************************/ +ReturnCode ndefVCardToRecord(const ndefType* vCard, ndefRecord* record) +{ + if ( (vCard == NULL) || (vCard->id != NDEF_TYPE_MEDIA_VCARD) || + (record == NULL) ) + { + return ERR_PARAM; + } + + (void)ndefRecordReset(record); + + (void)ndefRecordSetType(record, NDEF_TNF_MEDIA_TYPE, &bufMediaTypeVCard); + + (void)ndefRecordSetNdefType(record, vCard); + + return ERR_NONE; +} diff --git a/Software/Middlewares/ST/ndef/Src/message/ndef_types_rtd.c b/Software/Middlewares/ST/ndef/Src/message/ndef_types_rtd.c new file mode 100644 index 0000000..fe3ae0e --- /dev/null +++ b/Software/Middlewares/ST/ndef/Src/message/ndef_types_rtd.c @@ -0,0 +1,1167 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief NDEF RTD (well-known and external) types + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "platform.h" +#include "st_errno.h" +#include "utils.h" +#include "ndef_record.h" +#include "ndef_types.h" +#include "ndef_types_rtd.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + + +/*! Device Information defines */ +#define NDEF_RTD_DEVICE_INFO_PAYLOAD_MIN (2U * (sizeof(uint8_t) + sizeof(uint8_t) + sizeof(uint8_t))) /*!< Device Information minimum length (2 required TLV structures) */ +#define NDEF_RTD_DEVICE_INFO_PAYLOAD_MAX ((4U * (sizeof(uint8_t) + sizeof(uint8_t) + 255U)) + (sizeof(uint8_t) + sizeof(uint8_t) + 16U)) /*!< Device Information maximum length */ +#define NDEF_RTD_DEVICE_INFO_TLV_LENGTH_MIN (sizeof(uint8_t) + sizeof(uint8_t)) /*!< Device Information minimum TLV length */ + +/*! Text defines */ +#define NDEF_RTD_TEXT_STATUS_OFFSET 0U /*!< Text status offset */ +#define NDEF_RTD_TEXT_LANGUAGE_OFFSET 1U /*!< Text language offset */ + +#define NDEF_RTD_TEXT_LANGUAGE_CODE_LEN_MASK 0x3FU /*!< IANA language code mask (length coded on 6 bits) */ + +#define NDEF_RTD_TEXT_PAYLOAD_LENGTH_MIN (sizeof(uint8_t) + sizeof(uint8_t)) /*!< Minimum Text Payload length */ + +/*! URI defines */ +#define NDEF_RTD_URI_PROTOCOL_LEN 1U /*!< URI protocol length */ +#define NDEF_RTD_URI_PAYLOAD_LENGTH_MIN (NDEF_RTD_URI_PROTOCOL_LEN + sizeof(uint8_t)) /*!< URI minimum payload length */ + +/*! URI defines */ +#define NDEF_RTD_URI_ID_CODE_OFFSET 0U /*!< URI Id code offset */ +#define NDEF_RTD_URI_FIELD_OFFSET 1U /*!< URI field offset */ + + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + + +/*! RTD Type strings */ +static const uint8_t ndefRtdTypeDeviceInfo[] = "Di"; /*!< Device Information Record Type {0x44, 0x69} */ +static const uint8_t ndefRtdTypeText[] = "T"; /*!< Text Record Type {0x54} */ +static const uint8_t ndefRtdTypeUri[] = "U"; /*!< URI Record Type {0x55} */ +static const uint8_t ndefRtdTypeAar[] = "android.com:pkg"; /*!< External Type (Android Application Record) */ + +const ndefConstBuffer8 bufRtdTypeDeviceInfo = { ndefRtdTypeDeviceInfo, sizeof(ndefRtdTypeDeviceInfo) - 1U }; /*!< Device Information Record Type buffer */ +const ndefConstBuffer8 bufRtdTypeText = { ndefRtdTypeText, sizeof(ndefRtdTypeText) - 1U }; /*!< Text Record Type buffer */ +const ndefConstBuffer8 bufRtdTypeUri = { ndefRtdTypeUri, sizeof(ndefRtdTypeUri) - 1U }; /*!< URI Record Type buffer */ +const ndefConstBuffer8 bufRtdTypeAar = { ndefRtdTypeAar, sizeof(ndefRtdTypeAar) - 1U }; /*!< AAR External Type Record buffer */ + + +/*! URI Type strings */ +static const uint8_t ndefUriPrefixNone[] = ""; +static const uint8_t ndefUriPrefixHttpWww[] = "http://www."; +static const uint8_t ndefUriPrefixHttpsWww[] = "https://www."; +static const uint8_t ndefUriPrefixHttp[] = "http://"; +static const uint8_t ndefUriPrefixHttps[] = "https://"; +static const uint8_t ndefUriPrefixTel[] = "tel:"; +static const uint8_t ndefUriPrefixMailto[] = "mailto:"; +static const uint8_t ndefUriPrefixFtpAnonymous[] = "ftp://anonymous:anonymous@"; +static const uint8_t ndefUriPrefixFtpFtp[] = "ftp://ftp."; +static const uint8_t ndefUriPrefixFtps[] = "ftps://"; +static const uint8_t ndefUriPrefixSftp[] = "sftp://"; +static const uint8_t ndefUriPrefixSmb[] = "smb://"; +static const uint8_t ndefUriPrefixNfs[] = "nfs://"; +static const uint8_t ndefUriPrefixFtp[] = "ftp://"; +static const uint8_t ndefUriPrefixDav[] = "dav://"; +static const uint8_t ndefUriPrefixNews[] = "news:"; +static const uint8_t ndefUriPrefixTelnet[] = "telnet://"; +static const uint8_t ndefUriPrefixImap[] = "imap:"; +static const uint8_t ndefUriPrefixRtsp[] = "rtsp://"; +static const uint8_t ndefUriPrefixUrn[] = "urn:"; +static const uint8_t ndefUriPrefixPop[] = "pop:"; +static const uint8_t ndefUriPrefixSip[] = "sip:"; +static const uint8_t ndefUriPrefixSips[] = "sips:"; +static const uint8_t ndefUriPrefixTftp[] = "tftp:"; +static const uint8_t ndefUriPrefixBtspp[] = "btspp://"; +static const uint8_t ndefUriPrefixBtl2cap[] = "btl2cap://"; +static const uint8_t ndefUriPrefixBtgoep[] = "btgoep://"; +static const uint8_t ndefUriPrefixTcpobex[] = "tcpobex://"; +static const uint8_t ndefUriPrefixIrdaobex[] = "irdaobex://"; +static const uint8_t ndefUriPrefixFile[] = "file://"; +static const uint8_t ndefUriPrefixUrnEpcId[] = "urn:epc:id:"; +static const uint8_t ndefUriPrefixUrnEpcTag[] = "urn:epc:tag"; +static const uint8_t ndefUriPrefixUrnEpcPat[] = "urn:epc:pat:"; +static const uint8_t ndefUriPrefixUrnEpcRaw[] = "urn:epc:raw:"; +static const uint8_t ndefUriPrefixUrnEpe[] = "urn:epc:"; +static const uint8_t ndefUriPrefixUrnNfc[] = "urn:nfc:"; +static const uint8_t ndefUriPrefixEmpty[] = ""; /* Autodetect filler */ + +static const ndefConstBuffer ndefUriPrefix[NDEF_URI_PREFIX_COUNT] = +{ + { ndefUriPrefixNone , sizeof(ndefUriPrefixNone ) - 1U }, + { ndefUriPrefixHttpWww , sizeof(ndefUriPrefixHttpWww ) - 1U }, + { ndefUriPrefixHttpsWww , sizeof(ndefUriPrefixHttpsWww ) - 1U }, + { ndefUriPrefixHttp , sizeof(ndefUriPrefixHttp ) - 1U }, + { ndefUriPrefixHttps , sizeof(ndefUriPrefixHttps ) - 1U }, + { ndefUriPrefixTel , sizeof(ndefUriPrefixTel ) - 1U }, + { ndefUriPrefixMailto , sizeof(ndefUriPrefixMailto ) - 1U }, + { ndefUriPrefixFtpAnonymous, sizeof(ndefUriPrefixFtpAnonymous) - 1U }, + { ndefUriPrefixFtpFtp , sizeof(ndefUriPrefixFtpFtp ) - 1U }, + { ndefUriPrefixFtps , sizeof(ndefUriPrefixFtps ) - 1U }, + { ndefUriPrefixSftp , sizeof(ndefUriPrefixSftp ) - 1U }, + { ndefUriPrefixSmb , sizeof(ndefUriPrefixSmb ) - 1U }, + { ndefUriPrefixNfs , sizeof(ndefUriPrefixNfs ) - 1U }, + { ndefUriPrefixFtp , sizeof(ndefUriPrefixFtp ) - 1U }, + { ndefUriPrefixDav , sizeof(ndefUriPrefixDav ) - 1U }, + { ndefUriPrefixNews , sizeof(ndefUriPrefixNews ) - 1U }, + { ndefUriPrefixTelnet , sizeof(ndefUriPrefixTelnet ) - 1U }, + { ndefUriPrefixImap , sizeof(ndefUriPrefixImap ) - 1U }, + { ndefUriPrefixRtsp , sizeof(ndefUriPrefixRtsp ) - 1U }, + { ndefUriPrefixUrn , sizeof(ndefUriPrefixUrn ) - 1U }, + { ndefUriPrefixPop , sizeof(ndefUriPrefixPop ) - 1U }, + { ndefUriPrefixSip , sizeof(ndefUriPrefixSip ) - 1U }, + { ndefUriPrefixSips , sizeof(ndefUriPrefixSips ) - 1U }, + { ndefUriPrefixTftp , sizeof(ndefUriPrefixTftp ) - 1U }, + { ndefUriPrefixBtspp , sizeof(ndefUriPrefixBtspp ) - 1U }, + { ndefUriPrefixBtl2cap , sizeof(ndefUriPrefixBtl2cap ) - 1U }, + { ndefUriPrefixBtgoep , sizeof(ndefUriPrefixBtgoep ) - 1U }, + { ndefUriPrefixTcpobex , sizeof(ndefUriPrefixTcpobex ) - 1U }, + { ndefUriPrefixIrdaobex , sizeof(ndefUriPrefixIrdaobex ) - 1U }, + { ndefUriPrefixFile , sizeof(ndefUriPrefixFile ) - 1U }, + { ndefUriPrefixUrnEpcId , sizeof(ndefUriPrefixUrnEpcId ) - 1U }, + { ndefUriPrefixUrnEpcTag , sizeof(ndefUriPrefixUrnEpcTag ) - 1U }, + { ndefUriPrefixUrnEpcPat , sizeof(ndefUriPrefixUrnEpcPat ) - 1U }, + { ndefUriPrefixUrnEpcRaw , sizeof(ndefUriPrefixUrnEpcRaw ) - 1U }, + { ndefUriPrefixUrnEpe , sizeof(ndefUriPrefixUrnEpe ) - 1U }, + { ndefUriPrefixUrnNfc , sizeof(ndefUriPrefixUrnNfc ) - 1U }, + { ndefUriPrefixEmpty , sizeof(ndefUriPrefixEmpty ) - 1U } +}; + + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + + +/* + * Empty record + */ + + +/*****************************************************************************/ +static uint32_t ndefEmptyTypePayloadGetLength(const ndefType* empty) +{ + if ( (empty == NULL) || (empty->id != NDEF_TYPE_EMPTY) ) + { + return 0; + } + + return 0; +} + + +/*****************************************************************************/ +static const uint8_t* ndefEmptyTypePayloadItem(const ndefType* empty, ndefConstBuffer* bufItem, bool begin) +{ + if ( (empty == NULL) || (empty->id != NDEF_TYPE_EMPTY) ) + { + return NULL; + } + + NO_WARNING(begin); + + if (bufItem != NULL) + { + bufItem->buffer = NULL; + bufItem->length = 0; + } + + return NULL; +} + + +/*****************************************************************************/ +ReturnCode ndefEmptyType(ndefType* empty) +{ + if (empty == NULL) + { + return ERR_PARAM; + } + + empty->id = NDEF_TYPE_EMPTY; + empty->getPayloadLength = ndefEmptyTypePayloadGetLength; + empty->getPayloadItem = ndefEmptyTypePayloadItem; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordToEmptyType(const ndefRecord* record, ndefType* empty) +{ + ndefConstBuffer8 bufEmpty = { NULL, 0 }; + + if ( (record == NULL) || (empty == NULL) ) + { + return ERR_PARAM; + } + + if ( ! ndefRecordTypeMatch(record, NDEF_TNF_EMPTY, &bufEmpty)) + { + return ERR_PARAM; + } + + if ( (record->idLength != 0U) || (record->id != NULL) || + (record->bufPayload.length != 0U) || (record->bufPayload.buffer != NULL) ) + { + return ERR_PARAM; + } + + return ndefEmptyType(empty); +} + + +/*****************************************************************************/ +ReturnCode ndefEmptyTypeToRecord(const ndefType* empty, ndefRecord* record) +{ + if ( (empty == NULL) || (empty->id != NDEF_TYPE_EMPTY) || + (record == NULL) ) + { + return ERR_PARAM; + } + + (void)ndefRecordReset(record); + + (void)ndefRecordSetNdefType(record, empty); + + return ERR_NONE; +} + + +/* + * Device Information + */ + + +/*****************************************************************************/ +static uint32_t ndefRtdDeviceInfoPayloadGetLength(const ndefType* devInfo) +{ + const ndefTypeRtdDeviceInfo* rtdDevInfo; + uint32_t payloadLength = 0; + uint32_t i; + + if ( (devInfo == NULL) || (devInfo->id != NDEF_TYPE_RTD_DEVICE_INFO) ) + { + return 0; + } + + rtdDevInfo = &devInfo->data.deviceInfo; + + for (i = 0; i < NDEF_DEVICE_INFO_TYPE_COUNT; i++) + { + if (rtdDevInfo->devInfo[i].length != 0U) + { + payloadLength += sizeof(rtdDevInfo->devInfo[i].type) + sizeof(rtdDevInfo->devInfo[i].length) + (uint32_t)rtdDevInfo->devInfo[i].length; + } + } + + return payloadLength; +} + + +/*****************************************************************************/ +static const uint8_t* ndefRtdDeviceInfoToPayloadItem(const ndefType* devInfo, ndefConstBuffer* bufItem, bool begin) +{ + static uint32_t item = 0; + const ndefTypeRtdDeviceInfo* rtdDevInfo; + uint32_t index; + + if ( (devInfo == NULL) || (devInfo->id != NDEF_TYPE_RTD_DEVICE_INFO) || + (bufItem == NULL) ) + { + return NULL; + } + + rtdDevInfo = &devInfo->data.deviceInfo; + + if (begin == true) + { + item = 0; + } + + bufItem->buffer = NULL; + bufItem->length = 0; + + index = item / 3U; + + /* Stop streaming on first empty entry */ + if (rtdDevInfo->devInfo[index].length > 0U) + { + switch (item % 3U) + { + case 0: + bufItem->buffer = &rtdDevInfo->devInfo[index].type; + bufItem->length = sizeof(rtdDevInfo->devInfo[index].type); + break; + case 1: + bufItem->buffer = &rtdDevInfo->devInfo[index].length; + bufItem->length = sizeof(rtdDevInfo->devInfo[index].length); + break; + case 2: + bufItem->buffer = rtdDevInfo->devInfo[index].buffer; + bufItem->length = rtdDevInfo->devInfo[index].length; + break; + default: + bufItem->buffer = NULL; + bufItem->length = 0; + break; + } + } + + /* Move to next item for next call */ + item++; + + return bufItem->buffer; +} + + +/*****************************************************************************/ +ReturnCode ndefRtdDeviceInfo(ndefType* devInfo, const ndefDeviceInfoEntry* devInfoData, uint8_t devInfoDataCount) +{ + ndefTypeRtdDeviceInfo* rtdDevInfo; + uint32_t i; + uint8_t count; + uint8_t manufacturerNameIndex; + uint8_t modelNameIndex; + + if ( (devInfo == NULL) || + (devInfoData == NULL) || (devInfoData->length == 0U) || + (devInfoDataCount == 0U) || (devInfoDataCount > NDEF_DEVICE_INFO_TYPE_COUNT) ) + { + return ERR_PARAM; + } + + devInfo->id = NDEF_TYPE_RTD_DEVICE_INFO; + devInfo->getPayloadLength = ndefRtdDeviceInfoPayloadGetLength; + devInfo->getPayloadItem = ndefRtdDeviceInfoToPayloadItem; + rtdDevInfo = &devInfo->data.deviceInfo; + + /* Clear the Device Information structure before parsing */ + for (i = 0; i < NDEF_DEVICE_INFO_TYPE_COUNT; i++) + { + rtdDevInfo->devInfo[i].type = 0; + rtdDevInfo->devInfo[i].length = 0; + rtdDevInfo->devInfo[i].buffer = NULL; + } + + /* Read Type, Length and Value fields */ + /* Not checking multiple occurences of a given field, use the last one */ + count = 0; + manufacturerNameIndex = 0; + modelNameIndex = 0; + + while (count < devInfoDataCount) + { + uint8_t type = devInfoData[count].type; + uint8_t length = devInfoData[count].length; + if ((type == NDEF_DEVICE_INFO_UUID) && (length != NDEF_UUID_LENGTH)) + { + return ERR_PROTO; + } + if ( (type > NDEF_DEVICE_INFO_TYPE_COUNT) || (length == 0U) ) + { + return ERR_PROTO; + } + if (type == NDEF_DEVICE_INFO_MANUFACTURER_NAME) + { + manufacturerNameIndex = count; + } + else + { + if (type == NDEF_DEVICE_INFO_MODEL_NAME) + { + modelNameIndex = count; + } + } + + rtdDevInfo->devInfo[count].type = type; + rtdDevInfo->devInfo[count].length = length; + rtdDevInfo->devInfo[count].buffer = devInfoData[count].buffer; + count++; + } + + /* Check that both required fields are there */ + if ( (manufacturerNameIndex != modelNameIndex) && + (rtdDevInfo->devInfo[manufacturerNameIndex].buffer != NULL) && + (rtdDevInfo->devInfo[modelNameIndex].buffer != NULL) ) + { + return ERR_NONE; + } + else + { + return ERR_PARAM; + } +} + + +/*****************************************************************************/ +ReturnCode ndefGetRtdDeviceInfo(const ndefType* devInfo, ndefTypeRtdDeviceInfo* devInfoData) +{ + const ndefTypeRtdDeviceInfo* rtdDevInfo; + uint32_t i; + + if ( (devInfo == NULL) || (devInfo->id != NDEF_TYPE_RTD_DEVICE_INFO) || + (devInfoData == NULL) ) + { + return ERR_PARAM; + } + + rtdDevInfo = &devInfo->data.deviceInfo; + + for (i = 0; i < NDEF_DEVICE_INFO_TYPE_COUNT; i++) + { + devInfoData->devInfo[i].type = rtdDevInfo->devInfo[i].type; + devInfoData->devInfo[i].length = rtdDevInfo->devInfo[i].length; + devInfoData->devInfo[i].buffer = rtdDevInfo->devInfo[i].buffer; + } + + return ERR_NONE; +} + + +/*****************************************************************************/ +static ReturnCode ndefPayloadToRtdDeviceInfo(const ndefConstBuffer* bufDevInfo, ndefType* devInfo) +{ + ndefTypeRtdDeviceInfo* rtdDevInfo; + uint32_t i; + uint32_t offset; + uint8_t count; + uint8_t manufacturerNameIndex; + uint8_t modelNameIndex; + + if ( (bufDevInfo == NULL) || (bufDevInfo->buffer == NULL) || (bufDevInfo->length == 0U) || + (devInfo == NULL) ) + { + return ERR_PARAM; + } + + devInfo->id = NDEF_TYPE_RTD_DEVICE_INFO; + devInfo->getPayloadLength = ndefRtdDeviceInfoPayloadGetLength; + devInfo->getPayloadItem = ndefRtdDeviceInfoToPayloadItem; + rtdDevInfo = &devInfo->data.deviceInfo; + + if ( (bufDevInfo->length < NDEF_RTD_DEVICE_INFO_PAYLOAD_MIN) || + (bufDevInfo->length > NDEF_RTD_DEVICE_INFO_PAYLOAD_MAX) ) + { + return ERR_PROTO; + } + + /* Extract device information from the buffer */ + + /* Clear the Device Information structure before parsing */ + for (i = 0; i < NDEF_DEVICE_INFO_TYPE_COUNT; i++) + { + rtdDevInfo->devInfo[i].type = 0; + rtdDevInfo->devInfo[i].length = 0; + rtdDevInfo->devInfo[i].buffer = NULL; + } + + /* Read Type, Length and Value fields */ + /* Not checking multiple occurences of a given field, use the last one */ + offset = 0; + count = 0; + manufacturerNameIndex = 0; + modelNameIndex = 0; + + while ( ((offset + NDEF_RTD_DEVICE_INFO_TLV_LENGTH_MIN) < bufDevInfo->length) + && (count < NDEF_DEVICE_INFO_TYPE_COUNT) ) + { + uint8_t type = bufDevInfo->buffer[offset]; + uint8_t length = bufDevInfo->buffer[offset + 1U]; + if ((type == NDEF_DEVICE_INFO_UUID) && (length != NDEF_UUID_LENGTH)) + { + return ERR_PROTO; + } + if ( (type > NDEF_DEVICE_INFO_TYPE_COUNT) || (length == 0U) ) + { + return ERR_PROTO; + } + if (type == NDEF_DEVICE_INFO_MANUFACTURER_NAME) + { + manufacturerNameIndex = count; + } + else + { + if (type == NDEF_DEVICE_INFO_MODEL_NAME) + { + modelNameIndex = count; + } + } + + rtdDevInfo->devInfo[count].type = type; + rtdDevInfo->devInfo[count].length = length; + rtdDevInfo->devInfo[count].buffer = &bufDevInfo->buffer[offset + 2U]; + count++; + + /* Next entry */ + offset += sizeof(uint8_t) + sizeof(uint8_t) + (uint32_t)length; + } + + /* Check both required fields are there */ + if ( (manufacturerNameIndex != modelNameIndex) && + (rtdDevInfo->devInfo[manufacturerNameIndex].buffer != NULL) && + (rtdDevInfo->devInfo[modelNameIndex].buffer != NULL) ) + { + return ERR_NONE; + } + else + { + return ERR_PARAM; + } +} + + +/*****************************************************************************/ +ReturnCode ndefRecordToRtdDeviceInfo(const ndefRecord* record, ndefType* devInfo) +{ + const ndefType* ndeftype; + + if ( (record == NULL) || (devInfo == NULL) ) + { + return ERR_PARAM; + } + + if ( ! ndefRecordTypeMatch(record, NDEF_TNF_RTD_WELL_KNOWN_TYPE, &bufRtdTypeDeviceInfo)) /* "Di" */ + { + return ERR_PROTO; + } + + ndeftype = ndefRecordGetNdefType(record); + if (ndeftype != NULL) + { + (void)ST_MEMCPY(devInfo, ndeftype, sizeof(ndefType)); + return ERR_NONE; + } + + if (record->bufPayload.length < NDEF_RTD_DEVICE_INFO_PAYLOAD_MIN) /* Device Information Payload Min */ + { + return ERR_PROTO; + } + + return ndefPayloadToRtdDeviceInfo(&record->bufPayload, devInfo); +} + + +/*****************************************************************************/ +ReturnCode ndefRtdDeviceInfoToRecord(const ndefType* devInfo, ndefRecord* record) +{ + if ( (devInfo == NULL) || (devInfo->id != NDEF_TYPE_RTD_DEVICE_INFO) || + (record == NULL) ) + { + return ERR_PARAM; + } + + (void)ndefRecordReset(record); + + /* "Di" */ + (void)ndefRecordSetType(record, NDEF_TNF_RTD_WELL_KNOWN_TYPE, &bufRtdTypeDeviceInfo); + + (void)ndefRecordSetNdefType(record, devInfo); + + return ERR_NONE; +} + + +/* + * Text + */ + + +/*****************************************************************************/ +static uint32_t ndefRtdTextPayloadGetLength(const ndefType* text) +{ + const ndefTypeRtdText* rtdText; + + if ( (text == NULL) || (text->id != NDEF_TYPE_RTD_TEXT) ) + { + return 0; + } + + rtdText = &text->data.text; + + return sizeof(rtdText->status) + rtdText->bufLanguageCode.length + rtdText->bufSentence.length; +} + + +/*****************************************************************************/ +static const uint8_t* ndefRtdTextToPayloadItem(const ndefType* text, ndefConstBuffer* bufItem, bool begin) +{ + static uint32_t item = 0; + const ndefTypeRtdText* rtdText; + + if ( (text == NULL) || (text->id != NDEF_TYPE_RTD_TEXT) || + (bufItem == NULL) ) + { + return NULL; + } + + rtdText = &text->data.text; + + if (begin == true) + { + item = 0; + } + + switch (item) + { + case 0: + /* Status byte */ + bufItem->buffer = &rtdText->status; + bufItem->length = sizeof(rtdText->status); + break; + + case 1: + /* Language Code */ + bufItem->buffer = rtdText->bufLanguageCode.buffer; + bufItem->length = rtdText->bufLanguageCode.length; + break; + + case 2: + /* Actual text */ + bufItem->buffer = rtdText->bufSentence.buffer; + bufItem->length = rtdText->bufSentence.length; + break; + + default: + bufItem->buffer = NULL; + bufItem->length = 0; + break; + } + + /* Move to next item for next call */ + item++; + + return bufItem->buffer; +} + + +/*****************************************************************************/ +ReturnCode ndefRtdText(ndefType* text, uint8_t utfEncoding, const ndefConstBuffer8* bufLanguageCode, const ndefConstBuffer* bufSentence) +{ + ndefTypeRtdText* rtdText; + + if ( (text == NULL) || + (bufLanguageCode == NULL) || (bufLanguageCode->buffer == NULL) || (bufLanguageCode->length == 0U) || + (bufSentence == NULL) || (bufSentence->buffer == NULL) || (bufSentence->length == 0U) ) + { + return ERR_PARAM; + } + + if (bufLanguageCode->length > NDEF_RTD_TEXT_LANGUAGE_CODE_LEN_MASK) + { + return ERR_PROTO; + } + + if ( (utfEncoding != TEXT_ENCODING_UTF8) && (utfEncoding != TEXT_ENCODING_UTF16) ) + { + return ERR_PARAM; + } + + text->id = NDEF_TYPE_RTD_TEXT; + text->getPayloadLength = ndefRtdTextPayloadGetLength; + text->getPayloadItem = ndefRtdTextToPayloadItem; + rtdText = &text->data.text; + + rtdText->status = (utfEncoding << NDEF_RTD_TEXT_ENCODING_SHIFT) | (bufLanguageCode->length & NDEF_RTD_TEXT_LANGUAGE_CODE_LEN_MASK); + + rtdText->bufLanguageCode.buffer = bufLanguageCode->buffer; + rtdText->bufLanguageCode.length = bufLanguageCode->length; + + rtdText->bufSentence.buffer = bufSentence->buffer; + rtdText->bufSentence.length = bufSentence->length; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefGetRtdText(const ndefType* text, uint8_t* utfEncoding, ndefConstBuffer8* bufLanguageCode, ndefConstBuffer* bufSentence) +{ + const ndefTypeRtdText* rtdText; + + if ( (text == NULL) || (text->id != NDEF_TYPE_RTD_TEXT) || + (utfEncoding == NULL) || (bufLanguageCode == NULL) || (bufSentence == NULL) ) + { + return ERR_PARAM; + } + + rtdText = &text->data.text; + + *utfEncoding = (rtdText->status >> NDEF_RTD_TEXT_ENCODING_SHIFT) & 1U; + + bufLanguageCode->buffer = rtdText->bufLanguageCode.buffer; + bufLanguageCode->length = rtdText->bufLanguageCode.length; + + bufSentence->buffer = rtdText->bufSentence.buffer; + bufSentence->length = rtdText->bufSentence.length; + + return ERR_NONE; +} + + +/*****************************************************************************/ +static ReturnCode ndefPayloadToRtdText(const ndefConstBuffer* bufText, ndefType* text) +{ + ndefTypeRtdText* rtdText; + uint8_t status; + uint8_t languageCodeLength; + + if ( (bufText == NULL) || (bufText->buffer == NULL) || (bufText->length == 0U) || + (text == NULL) ) + { + return ERR_PARAM; + } + + text->id = NDEF_TYPE_RTD_TEXT; + text->getPayloadLength = ndefRtdTextPayloadGetLength; + text->getPayloadItem = ndefRtdTextToPayloadItem; + rtdText = &text->data.text; + + /* Extract info from the payload */ + status = bufText->buffer[NDEF_RTD_TEXT_STATUS_OFFSET]; + + rtdText->status = status; + + /* Extract info from the status byte */ + //uint8_t textUtfEncoding = (status & NDEF_RTD_TEXT_ENCODING_MASK) >> NDEF_RTD_TEXT_ENCODING_SHIFT; + languageCodeLength = (status & NDEF_RTD_TEXT_LANGUAGE_CODE_LEN_MASK); + + rtdText->bufLanguageCode.buffer = &(bufText->buffer[NDEF_RTD_TEXT_LANGUAGE_OFFSET]); + rtdText->bufLanguageCode.length = languageCodeLength; + + rtdText->bufSentence.buffer = &(bufText->buffer[NDEF_RTD_TEXT_LANGUAGE_OFFSET + languageCodeLength]); + rtdText->bufSentence.length = bufText->length - sizeof(status) - languageCodeLength; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordToRtdText(const ndefRecord* record, ndefType* text) +{ + const ndefType* ndeftype; + + if ( (record == NULL) || (text == NULL) ) + { + return ERR_PARAM; + } + + if ( ! ndefRecordTypeMatch(record, NDEF_TNF_RTD_WELL_KNOWN_TYPE, &bufRtdTypeText)) /* "T" */ + { + return ERR_PROTO; + } + + ndeftype = ndefRecordGetNdefType(record); + if (ndeftype != NULL) + { + (void)ST_MEMCPY(text, ndeftype, sizeof(ndefType)); + return ERR_NONE; + } + + if (record->bufPayload.length < NDEF_RTD_TEXT_PAYLOAD_LENGTH_MIN) /* Text Payload Min */ + { + return ERR_PROTO; + } + + return ndefPayloadToRtdText(&record->bufPayload, text); +} + + +/*****************************************************************************/ +ReturnCode ndefRtdTextToRecord(const ndefType* text, ndefRecord* record) +{ + if ( (text == NULL) || (text->id != NDEF_TYPE_RTD_TEXT) || + (record == NULL) ) + { + return ERR_PARAM; + } + + (void)ndefRecordReset(record); + + /* "T" */ + (void)ndefRecordSetType(record, NDEF_TNF_RTD_WELL_KNOWN_TYPE, &bufRtdTypeText); + + (void)ndefRecordSetNdefType(record, text); + + return ERR_NONE; +} + + +/* + * URI + */ + + +/*****************************************************************************/ +static uint32_t ndefRtdUriPayloadGetLength(const ndefType* uri) +{ + const ndefTypeRtdUri* rtdUri; + + if ( (uri == NULL) || (uri->id != NDEF_TYPE_RTD_URI) ) + { + return 0; + } + + rtdUri = &uri->data.uri; + + return sizeof(rtdUri->protocol) + rtdUri->bufUriString.length; +} + + +/*****************************************************************************/ +static const uint8_t* ndefRtdUriToPayloadItem(const ndefType* uri, ndefConstBuffer* bufItem, bool begin) +{ + static uint32_t item = 0; + const ndefTypeRtdUri* rtdUri; + + if ( (uri == NULL) || (uri->id != NDEF_TYPE_RTD_URI) || + (bufItem == NULL) ) + { + return NULL; + } + + rtdUri = &uri->data.uri; + + if (begin == true) + { + item = 0; + } + + switch (item) + { + case 0: + /* Protocol byte */ + bufItem->buffer = &rtdUri->protocol; + bufItem->length = sizeof(rtdUri->protocol); + break; + + case 1: + /* URI string */ + bufItem->buffer = rtdUri->bufUriString.buffer; + bufItem->length = rtdUri->bufUriString.length; + break; + + default: + bufItem->buffer = NULL; + bufItem->length = 0; + break; + } + + /* Move to next item for next call */ + item++; + + return bufItem->buffer; +} + + +/*****************************************************************************/ +static ReturnCode ndefRtdUriProtocolAutodetect(uint8_t* protocol, ndefConstBuffer* bufUriString) +{ + uint8_t i; /* Protocol fits in 1 byte */ + + if ( (protocol == NULL) || + (*protocol != NDEF_URI_PREFIX_AUTODETECT) || + (bufUriString == NULL) ) + { + return ERR_PARAM; + } + + for (i = 0; i < NDEF_URI_PREFIX_COUNT; i++) + { + if (ndefUriPrefix[i].length > 0U) + { + if (ST_BYTECMP(bufUriString->buffer, ndefUriPrefix[i].buffer, ndefUriPrefix[i].length) == 0) + { + *protocol = i; + /* Move after the protocol string */ + bufUriString->buffer = &bufUriString->buffer[ndefUriPrefix[i].length]; + bufUriString->length -= ndefUriPrefix[i].length; + return ERR_NONE; + } + } + } + + *protocol = NDEF_URI_PREFIX_NONE; + + return ERR_NOTFOUND; +} + + +/*****************************************************************************/ +ReturnCode ndefRtdUri(ndefType* uri, uint8_t protocol, const ndefConstBuffer* bufUriString) +{ + ndefTypeRtdUri* rtdUri; + ndefConstBuffer bufUri; + uint8_t protocolDetect; + + if ( (uri == NULL) || (protocol >= NDEF_URI_PREFIX_COUNT) || + (bufUriString == NULL) || (bufUriString->buffer == NULL) || (bufUriString->length == 0U) ) + { + return ERR_PARAM; + } + + uri->id = NDEF_TYPE_RTD_URI; + uri->getPayloadLength = ndefRtdUriPayloadGetLength; + uri->getPayloadItem = ndefRtdUriToPayloadItem; + rtdUri = &uri->data.uri; + + bufUri.buffer = bufUriString->buffer; + bufUri.length = bufUriString->length; + protocolDetect = protocol; + if (protocol == NDEF_URI_PREFIX_AUTODETECT) + { + /* Update protocol and URI buffer */ + (void)ndefRtdUriProtocolAutodetect(&protocolDetect, &bufUri); + } + rtdUri->protocol = protocolDetect; + + rtdUri->bufUriString.buffer = bufUri.buffer; + rtdUri->bufUriString.length = bufUri.length; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefGetRtdUri(const ndefType* uri, ndefConstBuffer* bufProtocol, ndefConstBuffer* bufUriString) +{ + const ndefTypeRtdUri* rtdUri; + + if ( (uri == NULL) || (uri->id != NDEF_TYPE_RTD_URI) || + (bufProtocol == NULL) || (bufUriString == NULL) ) + { + return ERR_PARAM; + } + + rtdUri = &uri->data.uri; + + bufProtocol->buffer = ndefUriPrefix[rtdUri->protocol].buffer; + bufProtocol->length = ndefUriPrefix[rtdUri->protocol].length; + + bufUriString->buffer = rtdUri->bufUriString.buffer; + bufUriString->length = rtdUri->bufUriString.length; + + return ERR_NONE; +} + +/*****************************************************************************/ +static ReturnCode ndefPayloadToRtdUri(const ndefConstBuffer* bufUri, ndefType* uri) +{ + uint8_t protocol; + + if ( (bufUri == NULL) || (bufUri->buffer == NULL) || (bufUri->length == 0U) || + (uri == NULL) ) + { + return ERR_PARAM; + } + + /* Extract info from the payload */ + protocol = bufUri->buffer[NDEF_RTD_URI_ID_CODE_OFFSET]; + + ndefConstBuffer bufStringUri; + bufStringUri.buffer = &bufUri->buffer[NDEF_RTD_URI_FIELD_OFFSET]; + bufStringUri.length = bufUri->length - sizeof(protocol); + + return ndefRtdUri(uri, protocol, &bufStringUri); +} + + +/*****************************************************************************/ +ReturnCode ndefRecordToRtdUri(const ndefRecord* record, ndefType* uri) +{ + const ndefType* ndeftype; + + if ( (record == NULL) || (uri == NULL) ) + { + return ERR_PARAM; + } + + if ( ! ndefRecordTypeMatch(record, NDEF_TNF_RTD_WELL_KNOWN_TYPE, &bufRtdTypeUri)) /* "U" */ + { + return ERR_PROTO; + } + + ndeftype = ndefRecordGetNdefType(record); + if (ndeftype != NULL) + { + (void)ST_MEMCPY(uri, ndeftype, sizeof(ndefType)); + return ERR_NONE; + } + + if (record->bufPayload.length < NDEF_RTD_URI_PAYLOAD_LENGTH_MIN) + { + return ERR_PROTO; + } + + return ndefPayloadToRtdUri(&record->bufPayload, uri); +} + + +/*****************************************************************************/ +ReturnCode ndefRtdUriToRecord(const ndefType* uri, ndefRecord* record) +{ + if ( (uri == NULL) || (uri->id != NDEF_TYPE_RTD_URI) || + (record == NULL) ) + { + return ERR_PARAM; + } + + (void)ndefRecordReset(record); + + /* "U" */ + (void)ndefRecordSetType(record, NDEF_TNF_RTD_WELL_KNOWN_TYPE, &bufRtdTypeUri); + + (void)ndefRecordSetNdefType(record, uri); + + return ERR_NONE; +} + + +/* + * NFC Forum External Type (Android Application Record) + */ + + +/*****************************************************************************/ +ReturnCode ndefRtdAar(ndefType* aar, const ndefConstBuffer* bufPayload) +{ + ndefTypeRtdAar* rtdAar; + + if ( (aar == NULL) || + (bufPayload == NULL) || (bufPayload->buffer == NULL) || (bufPayload->length == 0U) ) + { + return ERR_PARAM; + } + + aar->id = NDEF_TYPE_RTD_AAR; + aar->getPayloadLength = NULL; + aar->getPayloadItem = NULL; + rtdAar = &aar->data.aar; + + rtdAar->bufType.buffer = bufRtdTypeAar.buffer; + rtdAar->bufType.length = bufRtdTypeAar.length; + rtdAar->bufPayload.buffer = bufPayload->buffer; + rtdAar->bufPayload.length = bufPayload->length; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefGetRtdAar(const ndefType* aar, ndefConstBuffer* bufAarString) +{ + const ndefTypeRtdAar* rtdAar; + + if ( (aar == NULL) || (aar->id != NDEF_TYPE_RTD_AAR) || + (bufAarString == NULL) ) + { + return ERR_PARAM; + } + + rtdAar = &aar->data.aar; + + bufAarString->buffer = rtdAar->bufPayload.buffer; + bufAarString->length = rtdAar->bufPayload.length; + + return ERR_NONE; +} + + +/*****************************************************************************/ +ReturnCode ndefRecordToRtdAar(const ndefRecord* record, ndefType* aar) +{ + if ( (record == NULL) || (aar == NULL) ) + { + return ERR_PARAM; + } + + if ( ! ndefRecordTypeMatch(record, NDEF_TNF_RTD_EXTERNAL_TYPE, &bufRtdTypeAar)) /* "android.com:pkg" */ + { + return ERR_PROTO; + } + + /* No constraint on payload length */ + + return ndefRtdAar(aar, &record->bufPayload); +} + + +/*****************************************************************************/ +ReturnCode ndefRtdAarToRecord(const ndefType* aar, ndefRecord* record) +{ + const ndefTypeRtdAar* rtdAar; + + if ( (aar == NULL) || (aar->id != NDEF_TYPE_RTD_AAR) || + (record == NULL) ) + { + return ERR_PARAM; + } + + rtdAar = &aar->data.aar; + + (void)ndefRecordReset(record); + + /* "android.com:pkg" */ + (void)ndefRecordSetType(record, NDEF_TNF_RTD_EXTERNAL_TYPE, &bufRtdTypeAar); + + (void)ndefRecordSetPayload(record, &rtdAar->bufPayload); + + return ERR_NONE; +} diff --git a/Software/Middlewares/ST/ndef/Src/poller/ndef_poller.c b/Software/Middlewares/ST/ndef/Src/poller/ndef_poller.c new file mode 100644 index 0000000..61f06e2 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Src/poller/ndef_poller.c @@ -0,0 +1,588 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief Provides NDEF methods and definitions to access NFC Forum Tags + * + * This module provides an interface to handle NDEF message + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "ndef_poller.h" +#include "ndef_t2t.h" +#include "ndef_t3t.h" +#include "ndef_t4t.h" +#include "ndef_t5t.h" +#include "utils.h" + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + +static ndefDeviceType ndefPollerGetDeviceType(const rfalNfcDevice *dev); + +/* + ****************************************************************************** + * GLOBAL VARIABLE DEFINITIONS + ****************************************************************************** + */ + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + + +/*******************************************************************************/ +ReturnCode ndefPollerContextInitialization(ndefContext *ctx, const rfalNfcDevice *dev) +{ +#if RFAL_FEATURE_T1T + static const ndefPollerWrapper ndefT1TWrapper = + { + NULL, /* ndefT1TPollerContextInitialization, */ + NULL, /* ndefT1TPollerNdefDetect, */ + NULL, /* ndefT1TPollerReadBytes, */ + NULL, /* ndefT1TPollerReadRawMessage, */ +#if NDEF_FEATURE_ALL + NULL, /* ndefT1TPollerWriteBytes, */ + NULL, /* ndefT1TPollerWriteRawMessage, */ + NULL, /* ndefT1TPollerTagFormat, */ + NULL, /* ndefT1TPollerWriteRawMessageLen */ + NULL, /* ndefT1TPollerCheckPresence */ + NULL, /* ndefT1TPollerCheckAvailableSpace */ + NULL, /* ndefT1TPollerBeginWriteMessage */ + NULL /* ndefT1TPollerEndWriteMessage */ +#endif /* NDEF_FEATURE_ALL */ + }; +#endif /* RFAL_FEATURE_T1T */ + +#if RFAL_FEATURE_T2T + static const ndefPollerWrapper ndefT2TWrapper = + { + ndefT2TPollerContextInitialization, + ndefT2TPollerNdefDetect, + ndefT2TPollerReadBytes, + ndefT2TPollerReadRawMessage, +#if NDEF_FEATURE_ALL + ndefT2TPollerWriteBytes, + ndefT2TPollerWriteRawMessage, + ndefT2TPollerTagFormat, + ndefT2TPollerWriteRawMessageLen, + ndefT2TPollerCheckPresence, + ndefT2TPollerCheckAvailableSpace, + ndefT2TPollerBeginWriteMessage, + ndefT2TPollerEndWriteMessage +#endif /* NDEF_FEATURE_ALL */ + }; +#endif /* RFAL_FEATURE_T2T */ + +#if RFAL_FEATURE_NFCF + static const ndefPollerWrapper ndefT3TWrapper = + { + ndefT3TPollerContextInitialization, + ndefT3TPollerNdefDetect, + ndefT3TPollerReadBytes, + ndefT3TPollerReadRawMessage, +#if NDEF_FEATURE_ALL + ndefT3TPollerWriteBytes, + ndefT3TPollerWriteRawMessage, + ndefT3TPollerTagFormat, + ndefT3TPollerWriteRawMessageLen, + ndefT3TPollerCheckPresence, + ndefT3TPollerCheckAvailableSpace, + ndefT3TPollerBeginWriteMessage, + ndefT3TPollerEndWriteMessage +#endif /* NDEF_FEATURE_ALL */ + }; +#endif /* RFAL_FEATURE_NFCF */ + +#if RFAL_FEATURE_T4T + static const ndefPollerWrapper ndefT4TWrapper = + { + ndefT4TPollerContextInitialization, + ndefT4TPollerNdefDetect, + ndefT4TPollerReadBytes, + ndefT4TPollerReadRawMessage, +#if NDEF_FEATURE_ALL + ndefT4TPollerWriteBytes, + ndefT4TPollerWriteRawMessage, + ndefT4TPollerTagFormat, + ndefT4TPollerWriteRawMessageLen, + ndefT4TPollerCheckPresence, + ndefT4TPollerCheckAvailableSpace, + ndefT4TPollerBeginWriteMessage, + ndefT4TPollerEndWriteMessage +#endif /* NDEF_FEATURE_ALL */ + }; +#endif /* RFAL_FEATURE_T4T */ + +#if RFAL_FEATURE_NFCV + static const ndefPollerWrapper ndefT5TWrapper = + { + ndefT5TPollerContextInitialization, + ndefT5TPollerNdefDetect, + ndefT5TPollerReadBytes, + ndefT5TPollerReadRawMessage, +#if NDEF_FEATURE_ALL + ndefT5TPollerWriteBytes, + ndefT5TPollerWriteRawMessage, + ndefT5TPollerTagFormat, + ndefT5TPollerWriteRawMessageLen, + ndefT5TPollerCheckPresence, + ndefT5TPollerCheckAvailableSpace, + ndefT5TPollerBeginWriteMessage, + ndefT5TPollerEndWriteMessage +#endif /* NDEF_FEATURE_ALL */ + }; +#endif /* RFAL_FEATURE_NFCV */ + + static const ndefPollerWrapper *ndefPollerWrappers[] = + { + NULL, +#if RFAL_FEATURE_T1T + &ndefT1TWrapper, +#else + NULL, +#endif +#if RFAL_FEATURE_T2T + &ndefT2TWrapper, +#else + NULL, +#endif +#if RFAL_FEATURE_NFCF + &ndefT3TWrapper, +#else + NULL, +#endif +#if RFAL_FEATURE_T4T + &ndefT4TWrapper, +#else + NULL, +#endif +#if RFAL_FEATURE_NFCV + &ndefT5TWrapper, +#else + NULL, +#endif + }; + + if( (ctx == NULL) || (dev == NULL) ) + { + return ERR_PARAM; + } + + ctx->ndefPollWrapper = ndefPollerWrappers[ndefPollerGetDeviceType(dev)]; + + /* ndefPollWrapper is NULL when support of a given tag type is not enabled */ + if( ctx->ndefPollWrapper == NULL ) + { + return ERR_NOTSUPP; + } + + return (ctx->ndefPollWrapper->pollerContextInitialization)(ctx, dev); +} + +/*******************************************************************************/ +ReturnCode ndefPollerNdefDetect(ndefContext *ctx, ndefInfo *info) +{ + if( ctx == NULL ) + { + return ERR_PARAM; + } + + if( ctx->ndefPollWrapper == NULL ) + { + return ERR_WRONG_STATE; + } + + return (ctx->ndefPollWrapper->pollerNdefDetect)(ctx, info); +} + +/*******************************************************************************/ +ReturnCode ndefPollerReadRawMessage(ndefContext *ctx, uint8_t *buf, uint32_t bufLen, uint32_t *rcvdLen) +{ + if( ctx == NULL ) + { + return ERR_PARAM; + } + + if( ctx->ndefPollWrapper == NULL ) + { + return ERR_WRONG_STATE; + } + + return (ctx->ndefPollWrapper->pollerReadRawMessage)(ctx, buf, bufLen, rcvdLen); +} + +/*******************************************************************************/ +ReturnCode ndefPollerReadBytes(ndefContext *ctx, uint32_t offset, uint32_t len, uint8_t *buf, uint32_t *rcvdLen) +{ + if( ctx == NULL ) + { + return ERR_PARAM; + } + + if( ctx->ndefPollWrapper == NULL ) + { + return ERR_WRONG_STATE; + } + + return (ctx->ndefPollWrapper->pollerReadBytes)(ctx, offset, len, buf, rcvdLen); +} + +#if NDEF_FEATURE_ALL + +/*******************************************************************************/ +ReturnCode ndefPollerWriteRawMessage(ndefContext *ctx, const uint8_t *buf, uint32_t bufLen) +{ + if( ctx == NULL ) + { + return ERR_PARAM; + } + + if( ctx->ndefPollWrapper == NULL ) + { + return ERR_WRONG_STATE; + } + + return (ctx->ndefPollWrapper->pollerWriteRawMessage)(ctx, buf, bufLen); +} + +/*******************************************************************************/ +ReturnCode ndefPollerTagFormat(ndefContext *ctx, const ndefCapabilityContainer *cc, uint32_t options) +{ + if( ctx == NULL ) + { + return ERR_PARAM; + } + + if( ctx->ndefPollWrapper == NULL ) + { + return ERR_WRONG_STATE; + } + + return (ctx->ndefPollWrapper->pollerTagFormat)(ctx, cc, options); +} + +/*******************************************************************************/ +ReturnCode ndefPollerWriteRawMessageLen(ndefContext *ctx, uint32_t rawMessageLen) +{ + if( ctx == NULL ) + { + return ERR_PARAM; + } + + if( ctx->ndefPollWrapper == NULL ) + { + return ERR_WRONG_STATE; + } + + return (ctx->ndefPollWrapper->pollerWriteRawMessageLen)(ctx, rawMessageLen); +} + +/*******************************************************************************/ +ReturnCode ndefPollerWriteBytes(ndefContext *ctx, uint32_t offset, const uint8_t *buf, uint32_t len) +{ + if( ctx == NULL ) + { + return ERR_PARAM; + } + + if( ctx->ndefPollWrapper == NULL ) + { + return ERR_WRONG_STATE; + } + + return (ctx->ndefPollWrapper->pollerWriteBytes)(ctx, offset, buf, len); +} + +/*******************************************************************************/ +ReturnCode ndefPollerCheckPresence(ndefContext *ctx) +{ + if( ctx == NULL ) + { + return ERR_PARAM; + } + + if( ctx->ndefPollWrapper == NULL ) + { + return ERR_WRONG_STATE; + } + + return (ctx->ndefPollWrapper->pollerCheckPresence)(ctx); +} + +/*******************************************************************************/ +ReturnCode ndefPollerCheckAvailableSpace(const ndefContext *ctx, uint32_t messageLen) +{ + if( ctx == NULL ) + { + return ERR_PARAM; + } + + if( ctx->ndefPollWrapper == NULL ) + { + return ERR_WRONG_STATE; + } + + return (ctx->ndefPollWrapper->pollerCheckAvailableSpace)(ctx, messageLen); +} + +/*******************************************************************************/ +ReturnCode ndefPollerBeginWriteMessage(ndefContext *ctx, uint32_t messageLen) +{ + if( ctx == NULL ) + { + return ERR_PARAM; + } + + if( ctx->ndefPollWrapper == NULL ) + { + return ERR_WRONG_STATE; + } + + return (ctx->ndefPollWrapper->pollerBeginWriteMessage)(ctx, messageLen); +} + +/*******************************************************************************/ +ReturnCode ndefPollerEndWriteMessage(ndefContext *ctx, uint32_t messageLen) +{ + if( ctx == NULL ) + { + return ERR_PARAM; + } + + if( ctx->ndefPollWrapper == NULL ) + { + return ERR_WRONG_STATE; + } + + return (ctx->ndefPollWrapper->pollerEndWriteMessage)(ctx, messageLen); +} + +/*******************************************************************************/ +ReturnCode ndefPollerWriteMessage(ndefContext *ctx, const ndefMessage* message) +{ + ReturnCode err; + ndefMessageInfo info; + ndefRecord* record; + uint8_t recordHeaderBuf[NDEF_RECORD_HEADER_LEN]; + ndefBuffer bufHeader; + ndefConstBuffer bufPayloadItem; + uint32_t offset; + bool firstPayloadItem; + + if ( (ctx == NULL) || (message == NULL) ) + { + return ERR_PARAM; + } + + if ( (ctx->state != NDEF_STATE_INITIALIZED) && (ctx->state != NDEF_STATE_READWRITE) ) + { + return ERR_WRONG_STATE; + } + + (void)ndefMessageGetInfo(message, &info); + + /* Verify length of the NDEF message */ + err = ndefPollerCheckAvailableSpace(ctx, info.length); + if (err != ERR_NONE) + { + /* Conclude procedure */ + return ERR_PARAM; + } + + /* Reset L-Field/NLEN field */ + err = ndefPollerBeginWriteMessage(ctx, info.length); + if (err != ERR_NONE) + { + ctx->state = NDEF_STATE_INVALID; + /* Conclude procedure */ + return err; + } + + if (info.length != 0U) + { + offset = ctx->messageOffset; + record = ndefMessageGetFirstRecord(message); + + while (record != NULL) + { + bufHeader.buffer = recordHeaderBuf; + bufHeader.length = sizeof(recordHeaderBuf); + (void)ndefRecordEncodeHeader(record, &bufHeader); + err = ndefPollerWriteBytes(ctx, offset, bufHeader.buffer, bufHeader.length); + if (err != ERR_NONE) + { + return err; + } + offset += bufHeader.length; + // TODO Use API to access record internal + if (record->typeLength != 0U) + { + err = ndefPollerWriteBytes(ctx, offset, record->type, record->typeLength); + if (err != ERR_NONE) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return err; + } + offset += record->typeLength; + } + if (record->idLength != 0U) + { + err = ndefPollerWriteBytes(ctx, offset, record->id, record->idLength); + if (err != ERR_NONE) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return err; + } + offset += record->idLength; + } + if (ndefRecordGetPayloadLength(record) != 0U) + { + firstPayloadItem = true; + while (ndefRecordGetPayloadItem(record, &bufPayloadItem, firstPayloadItem) != NULL) + { + firstPayloadItem = false; + err = ndefPollerWriteBytes(ctx, offset, bufPayloadItem.buffer, bufPayloadItem.length); + if (err != ERR_NONE) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return err; + } + offset += bufPayloadItem.length; + } + } + record = ndefMessageGetNextRecord(record); + } + + err = ndefPollerEndWriteMessage(ctx, info.length); + if (err != ERR_NONE) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return err; + } + } + + return ERR_NONE; +} + +#endif /* NDEF_FEATURE_ALL */ + +/*******************************************************************************/ +static ndefDeviceType ndefPollerGetDeviceType(const rfalNfcDevice *dev) +{ + ndefDeviceType type; + + if( dev == NULL ) + { + type = NDEF_DEV_NONE; + } + else + { + switch( dev->type ) + { + case RFAL_NFC_LISTEN_TYPE_NFCA: + switch( dev->dev.nfca.type ) + { + case RFAL_NFCA_T1T: + type = NDEF_DEV_T1T; + break; + case RFAL_NFCA_T2T: + type = NDEF_DEV_T2T; + break; + case RFAL_NFCA_T4T: + type = NDEF_DEV_T4T; + break; + default: + type = NDEF_DEV_NONE; + break; + } + break; + case RFAL_NFC_LISTEN_TYPE_NFCB: + type = NDEF_DEV_T4T; + break; + case RFAL_NFC_LISTEN_TYPE_NFCF: + type = NDEF_DEV_T3T; + break; + case RFAL_NFC_LISTEN_TYPE_NFCV: + type = NDEF_DEV_T5T; + break; + default: + type = NDEF_DEV_NONE; + break; + } + } + return type; +} + + diff --git a/Software/Middlewares/ST/ndef/Src/poller/ndef_t2t.c b/Software/Middlewares/ST/ndef/Src/poller/ndef_t2t.c new file mode 100644 index 0000000..c120b85 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Src/poller/ndef_t2t.c @@ -0,0 +1,835 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief Provides NDEF methods and definitions to access NFC Forum T2T + * + * This module provides an interface to perform as a NFC Reader/Writer + * to handle a Type 2 Tag T2T + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + #include "ndef_poller.h" + #include "ndef_t2t.h" + #include "utils.h" + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_T2T + #error " RFAL: Module configuration missing. Please enable/disable T2T module by setting: RFAL_FEATURE_T2T " +#endif + +#if RFAL_FEATURE_T2T + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define NDEF_T2T_BLOCK_SIZE 4U /*!< block size */ +#define NDEF_T2T_MAX_SECTOR 255U /*!< Max Number of Sector in Sector Select Command */ /* 00h -- FEh: 255 sectors */ +#define NDEF_T2T_BLOCKS_PER_SECTOR 256U /*!< Number of Block per Sector */ +#define NDEF_T2T_BYTES_PER_SECTOR (NDEF_T2T_BLOCKS_PER_SECTOR * NDEF_T2T_BLOCK_SIZE) /*!< Number of Bytes per Sector */ +#define NDEF_T2T_MAX_OFFSET (NDEF_T2T_BYTES_PER_SECTOR * NDEF_T2T_MAX_SECTOR) /*!< Maximum offset allowed */ +#define NDEF_T2T_3_BYTES_TLV_LEN 0xFFU /* FFh indicates the use of 3 bytes got the L field */ +#define NDEF_T2T_STATIC_MEM_SIZE 48U /* Static memory size */ + +#define NDEF_T2T_CC_OFFSET 12U /*!< CC offset */ +#define NDEF_T2T_CC_LEN 4U /*!< CC length */ +#define NDEF_T2T_AREA_OFFSET 16U /*!< T2T Area starts at block #4 */ + +#define NDEF_T2T_MAGIC 0xE1U /*!< CC Magic Number */ +#define NDEF_T2T_CC_0 0U /*!< CC_0: Magic Number */ +#define NDEF_T2T_CC_1 1U /*!< CC_1: Version */ +#define NDEF_T2T_CC_2 2U /*!< CC_2: Size */ +#define NDEF_T2T_CC_3 3U /*!< CC_3: Access conditions */ + +#define NDEF_T2T_VERSION_1_0 0x10U /*!< Version 1.0 */ + +#define NDEF_T2T_SIZE_DIVIDER 8U /*!< T2T_area size is measured in bytes is equal to 8 * Size */ + +#define NDEF_T2T_TLV_NULL 0x00U /*!< Null TLV */ +#define NDEF_T2T_TLV_LOCK_CTRL 0x01U /*!< Lock Control TLV */ +#define NDEF_T2T_TLV_MEMORY_CTRL 0x02U /*!< Memory Control TLV */ +#define NDEF_T2T_TLV_NDEF_MESSAGE 0x03U /*!< NDEF Message TLV */ +#define NDEF_T2T_TLV_PROPRIETRARY 0xFDU /*!< Proprietary TLV */ +#define NDEF_T2T_TLV_TERMINATOR 0xFEU /*!< Terminator TLV */ + +#define NDEF_T2T_TLV_L_3_BYTES_LEN 3U /*!< TLV L Length: 3 bytes */ +#define NDEF_T2T_TLV_L_1_BYTES_LEN 1U /*!< TLV L Length: 1 bytes */ +#define NDEF_T2T_TLV_T_LEN 1U /*!< TLV T Length: 1 bytes */ + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +#define ndefT2TisT2TDevice(device) ((((device)->type == RFAL_NFC_LISTEN_TYPE_NFCA) && ((device)->dev.nfca.type == RFAL_NFCA_T2T))) +#define ndefT2TInvalidateCache(ctx) { (ctx)->subCtx.t2t.cacheAddr = 0xFFFFFFFFU; } + + +#define ndefT2TIsReadOnlyAccessGranted(ctx) (((ctx)->cc.t2t.readAccess == 0x0U) && ((ctx)->cc.t2t.writeAccess == 0xFU)) +#define ndefT2TIsReadWriteAccessGranted(ctx) (((ctx)->cc.t2t.readAccess == 0x0U) && ((ctx)->cc.t2t.writeAccess == 0x0U)) + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ +static ReturnCode ndefT2TPollerReadBlock(ndefContext *ctx, uint16_t blockAddr, uint8_t *buf); + +#if NDEF_FEATURE_ALL +static ReturnCode ndefT2TPollerWriteBlock(ndefContext *ctx, uint16_t blockAddr, const uint8_t *buf); +#endif /* NDEF_FEATURE_ALL */ + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + +/*******************************************************************************/ +static ReturnCode ndefT2TPollerReadBlock(ndefContext *ctx, uint16_t blockAddr, uint8_t *buf) +{ + ReturnCode ret; + uint8_t secNo; + uint8_t blNo; + uint16_t rcvdLen; + + if( (ctx == NULL) || !ndefT2TisT2TDevice(&ctx->device) || (buf == NULL) ) + { + return ERR_PARAM; + } + + secNo = (uint8_t)(blockAddr >> 8U); + blNo = (uint8_t)blockAddr; + + if( secNo != ctx->subCtx.t2t.currentSecNo ) + { + ret = rfalT2TPollerSectorSelect(secNo); + if( ret != ERR_NONE ) + { + return ret; + } + ctx->subCtx.t2t.currentSecNo = secNo; + } + + ret = rfalT2TPollerRead(blNo, buf, NDEF_T2T_READ_RESP_SIZE, &rcvdLen); + + if( (ret == ERR_NONE) && (rcvdLen != NDEF_T2T_READ_RESP_SIZE) ) + { + return ERR_PROTO; + } + + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT2TPollerReadBytes(ndefContext *ctx, uint32_t offset, uint32_t len, uint8_t *buf, uint32_t *rcvdLen) +{ + ReturnCode ret; + uint8_t le; + uint32_t lvOffset = offset; + uint32_t lvLen = len; + uint8_t * lvBuf = buf; + uint16_t blockAddr; + uint8_t byteNo; + + if( (ctx == NULL) || !ndefT2TisT2TDevice(&ctx->device) || (lvLen == 0U) || (offset > NDEF_T2T_MAX_OFFSET) ) + { + return ERR_PARAM; + } + + if( (offset >= ctx->subCtx.t2t.cacheAddr) && (offset < (ctx->subCtx.t2t.cacheAddr + NDEF_T2T_READ_RESP_SIZE)) && ((offset + len) < (ctx->subCtx.t2t.cacheAddr + NDEF_T2T_READ_RESP_SIZE)) ) + { + /* data in cache buffer */ + (void)ST_MEMCPY(lvBuf, &ctx->subCtx.t2t.cacheBuf[offset - ctx->subCtx.t2t.cacheAddr], len); + } + else + { + do { + blockAddr = (uint16_t)(lvOffset / NDEF_T2T_BLOCK_SIZE); + byteNo = (uint8_t)(lvOffset % NDEF_T2T_BLOCK_SIZE); + le = (lvLen < NDEF_T2T_READ_RESP_SIZE) ? (uint8_t)lvLen : (uint8_t)NDEF_T2T_READ_RESP_SIZE; + + if( (byteNo != 0U ) || (lvLen < NDEF_T2T_READ_RESP_SIZE) ) + { + ret = ndefT2TPollerReadBlock(ctx, blockAddr, ctx->subCtx.t2t.cacheBuf); + if( ret != ERR_NONE ) + { + ndefT2TInvalidateCache(ctx); + return ret; + } + ctx->subCtx.t2t.cacheAddr = (uint32_t)blockAddr * NDEF_T2T_BLOCK_SIZE; + if( (NDEF_T2T_READ_RESP_SIZE - byteNo) < le ) + { + le = NDEF_T2T_READ_RESP_SIZE - byteNo; + } + if( le > 0U) + { + (void)ST_MEMCPY(lvBuf, &ctx->subCtx.t2t.cacheBuf[byteNo], le); + } + } + else + { + ret = ndefT2TPollerReadBlock(ctx, blockAddr, lvBuf); + if( ret != ERR_NONE ) + { + return ret; + } + if( lvLen == le ) + { + /* cache the last read block */ + (void)ST_MEMCPY(&ctx->subCtx.t2t.cacheBuf[0], lvBuf, NDEF_T2T_READ_RESP_SIZE); + ctx->subCtx.t2t.cacheAddr = (uint32_t)blockAddr * NDEF_T2T_BLOCK_SIZE; + } + } + lvBuf = &lvBuf[le]; + lvOffset += le; + lvLen -= le; + + } while( lvLen != 0U ); + } + + if( rcvdLen != NULL ) + { + *rcvdLen = len; + } + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT2TPollerContextInitialization(ndefContext *ctx, const rfalNfcDevice *dev) +{ + if( (ctx == NULL) || (dev == NULL) || !ndefT2TisT2TDevice(dev) ) + { + return ERR_PARAM; + } + + (void)ST_MEMCPY(&ctx->device, dev, sizeof(ctx->device)); + + ctx->state = NDEF_STATE_INVALID; + ctx->subCtx.t2t.currentSecNo = 0U; + ndefT2TInvalidateCache(ctx); + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT2TPollerNdefDetect(ndefContext *ctx, ndefInfo *info) +{ + ReturnCode ret; + uint8_t data[2]; + uint32_t offset; + uint16_t lenTLV; + uint8_t typeTLV; + + if( info != NULL ) + { + info->state = NDEF_STATE_INVALID; + info->majorVersion = 0U; + info->minorVersion = 0U; + info->areaLen = 0U; + info->areaAvalableSpaceLen = 0U; + info->messageLen = 0U; + } + + if( (ctx == NULL) || !ndefT2TisT2TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + ctx->state = NDEF_STATE_INVALID; + + /* Read CC TS T2T v1.0 7.5.1.1 */ + ret = ndefT2TPollerReadBytes(ctx, NDEF_T2T_CC_OFFSET, NDEF_T2T_CC_LEN, ctx->ccBuf, NULL); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + return ret; + } + ctx->cc.t2t.magicNumber = ctx->ccBuf[NDEF_T2T_CC_0]; + ctx->cc.t2t.majorVersion = ndefMajorVersion(ctx->ccBuf[NDEF_T2T_CC_1]); + ctx->cc.t2t.minorVersion = ndefMinorVersion(ctx->ccBuf[NDEF_T2T_CC_1]); + ctx->cc.t2t.size = ctx->ccBuf[NDEF_T2T_CC_2]; + ctx->cc.t2t.readAccess = (uint8_t)(ctx->ccBuf[NDEF_T2T_CC_3] >> 4U); + ctx->cc.t2t.writeAccess = (uint8_t)(ctx->ccBuf[NDEF_T2T_CC_3] & 0xFU); + ctx->areaLen = (uint32_t)ctx->cc.t2t.size * NDEF_T2T_SIZE_DIVIDER; + /* Check version number TS T2T v1.0 7.5.1.2 */ + if( (ctx->cc.t2t.magicNumber != NDEF_T2T_MAGIC) || (ctx->cc.t2t.majorVersion > ndefMajorVersion(NDEF_T2T_VERSION_1_0)) ) + { + /* Conclude procedure TS T2T v1.0 7.5.1.2 */ + return ERR_REQUEST; + } + /* Search for NDEF message TLV TS T2T v1.0 7.5.1.3 */ + offset = NDEF_T2T_AREA_OFFSET; + while ( (offset < (NDEF_T2T_AREA_OFFSET + ctx->areaLen)) ) + { + ret = ndefT2TPollerReadBytes(ctx, offset, 1, data, NULL); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + return ret; + } + typeTLV = data[0]; + if( typeTLV == NDEF_T2T_TLV_NDEF_MESSAGE ) + { + ctx->subCtx.t2t.offsetNdefTLV = offset; + } + offset++; + if( typeTLV == NDEF_T2T_TLV_TERMINATOR ) + { + break; + } + if( typeTLV == NDEF_T2T_TLV_NULL ) + { + continue; + } + /* read TLV Len */ + ret = ndefT2TPollerReadBytes(ctx, offset, 1, data, NULL); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + return ret; + } + offset++; + lenTLV = data[0]; + if( lenTLV == NDEF_T2T_3_BYTES_TLV_LEN ) + { + ret = ndefT2TPollerReadBytes(ctx, offset, 2, data, NULL); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + return ret; + } + offset += 2U; + lenTLV = GETU16(&data[0]); + } + + if( (typeTLV == NDEF_T2T_TLV_LOCK_CTRL) || (typeTLV == NDEF_T2T_TLV_MEMORY_CTRL) ) + { + /* No support of Lock control or Memory control in this version */ + return ERR_REQUEST; + } + /* NDEF message present TLV TS T2T v1.0 7.5.1.4 */ + if( typeTLV == NDEF_T2T_TLV_NDEF_MESSAGE ) + { + /* Read length TS T2T v1.0 7.5.1.5 */ + ctx->messageLen = lenTLV; + ctx->messageOffset = offset; + if( ctx->messageLen == 0U ) + { + if( !(ndefT2TIsReadWriteAccessGranted(ctx)) ) + { + /* Conclude procedure */ + return ERR_REQUEST; + } + /* Empty message found TS T2T v1.0 7.5.1.6 & TS T2T v1.0 7.4.2.1 */ + ctx->state = NDEF_STATE_INITIALIZED; + } + else + { + if( (ndefT2TIsReadWriteAccessGranted(ctx)) ) + { + /* Empty message found TS T2T v1.0 7.5.1.7 & TS T2T v1.0 7.4.3.1 */ + ctx->state = NDEF_STATE_READWRITE; + } + else + { + if( !(ndefT2TIsReadOnlyAccessGranted(ctx)) ) + { + /* Conclude procedure */ + return ERR_REQUEST; + } + /* Empty message found TS T2T v1.0 7.5.1.7 & TS T2T v1.0 7.4.4.1 */ + ctx->state = NDEF_STATE_READONLY; + } + } + if( info != NULL ) + { + info->state = ctx->state; + info->majorVersion = ndefMajorVersion(ctx->cc.t4t.vNo); + info->minorVersion = ndefMinorVersion(ctx->cc.t4t.vNo); + info->areaLen = ctx->areaLen; + info->areaAvalableSpaceLen = ctx->areaLen - ctx->messageOffset; + info->messageLen = ctx->messageLen; + } + return ERR_NONE; + } + offset += lenTLV; + } + return ERR_REQUEST; +} + +/*******************************************************************************/ +ReturnCode ndefT2TPollerReadRawMessage(ndefContext *ctx, uint8_t *buf, uint32_t bufLen, uint32_t *rcvdLen) +{ + ReturnCode ret; + + if( (ctx == NULL) || !ndefT2TisT2TDevice(&ctx->device) || (buf == NULL) ) + { + return ERR_PARAM; + } + + /* TS T2T v1.0 7.5.2.1: T2T NDEF Detect should have been called before NDEF read procedure */ + /* Warning: current tag content must not be changed between NDEF Detect procedure and NDEF read procedure*/ + + /* TS T2T v1.0 7.5.2.3: check presence of NDEF message */ + if ( ctx->state <= NDEF_STATE_INITIALIZED ) + { + /* Conclude procedure TS T4T v1.0 7.2.2.2 */ + return ERR_WRONG_STATE; + } + + if( ctx->messageLen > bufLen ) + { + return ERR_NOMEM; + } + + /* Current implementation does not support Rsvd_area */ + ret = ndefT2TPollerReadBytes( ctx, ctx->messageOffset, ctx->messageLen, buf, rcvdLen ); + if( ret != ERR_NONE ) + { + ctx->state = NDEF_STATE_INVALID; + } + return ret; +} + +#if NDEF_FEATURE_ALL + +/*******************************************************************************/ +static ReturnCode ndefT2TPollerWriteBlock(ndefContext *ctx, uint16_t blockAddr, const uint8_t *buf) +{ + ReturnCode ret; + uint8_t secNo; + uint8_t blNo; + + if( (ctx == NULL) || !ndefT2TisT2TDevice(&ctx->device) || (buf == NULL) ) + { + return ERR_PARAM; + } + + secNo = (uint8_t)(blockAddr >> 8U); + blNo = (uint8_t)blockAddr; + + if( secNo != ctx->subCtx.t2t.currentSecNo ) + { + ret = rfalT2TPollerSectorSelect(secNo); + if( ret != ERR_NONE ) + { + return ret; + } + ctx->subCtx.t2t.currentSecNo = secNo; + } + + ret = rfalT2TPollerWrite(blNo, buf); + + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT2TPollerWriteBytes(ndefContext *ctx, uint32_t offset, const uint8_t *buf, uint32_t len) +{ + ReturnCode ret; + uint32_t lvOffset = offset; + uint32_t lvLen = len; + const uint8_t * lvBuf = buf; + uint16_t blockAddr; + uint8_t byteNo; + uint8_t le; + uint8_t tempBuf[NDEF_T2T_READ_RESP_SIZE]; + + if( (ctx == NULL) || !ndefT2TisT2TDevice(&ctx->device) || (lvLen == 0U) ) + { + return ERR_PARAM; + } + + ndefT2TInvalidateCache(ctx); + + do + { + blockAddr = (uint16_t)(lvOffset / NDEF_T2T_BLOCK_SIZE); + byteNo = (uint8_t)(lvOffset % NDEF_T2T_BLOCK_SIZE); + le = (lvLen < NDEF_T2T_BLOCK_SIZE) ? (uint8_t)lvLen : (uint8_t)NDEF_T2T_BLOCK_SIZE; + if( (byteNo != 0U ) || (lvLen < NDEF_T2T_BLOCK_SIZE) ) + { + ret = ndefT2TPollerReadBlock(ctx, blockAddr, tempBuf); + if( ret != ERR_NONE ) + { + return ret; + } + if( (NDEF_T2T_BLOCK_SIZE - byteNo) < le ) + { + le = NDEF_T2T_BLOCK_SIZE - byteNo; + } + if( le > 0U ) + { + (void)ST_MEMCPY(&tempBuf[byteNo], lvBuf, le); + } + ret = ndefT2TPollerWriteBlock(ctx, blockAddr, tempBuf); + if( ret != ERR_NONE ) + { + return ret; + } + } + else + { + ret = ndefT2TPollerWriteBlock(ctx, blockAddr, lvBuf); + if( ret != ERR_NONE ) + { + return ret; + } + } + lvBuf = &lvBuf[le]; + lvOffset += le; + lvLen -= le; + + } while( lvLen != 0U ); + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT2TPollerWriteRawMessageLen(ndefContext *ctx, uint32_t rawMessageLen) +{ + ReturnCode ret; + uint8_t buf[NDEF_T2T_BLOCK_SIZE]; + uint8_t dataIt; + + if( (ctx == NULL) || !ndefT2TisT2TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if( (ctx->state != NDEF_STATE_INITIALIZED) && (ctx->state != NDEF_STATE_READWRITE) ) + { + return ERR_WRONG_STATE; + } + dataIt = 0U; + buf[dataIt] = NDEF_T2T_TLV_NDEF_MESSAGE; + dataIt++; + if( rawMessageLen <= NDEF_SHORT_VFIELD_MAX_LEN ) + { + buf[dataIt] = (uint8_t) rawMessageLen; + dataIt++; + } + else + { + buf[dataIt] = (uint8_t) (rawMessageLen >> 8U); + dataIt++; + buf[dataIt] = (uint8_t) rawMessageLen; + dataIt++; + } + if( rawMessageLen == 0U ) + { + buf[dataIt] = NDEF_T2T_TLV_TERMINATOR; + dataIt++; + } + + ret = ndefT2TPollerWriteBytes(ctx, ctx->subCtx.t2t.offsetNdefTLV, buf, dataIt); + if( (ret != ERR_NONE) && (rawMessageLen != 0U) && ((ctx->messageOffset + rawMessageLen) < ctx->areaLen) ) + { + /* Write Terminator TLV */ + dataIt = 0U; + buf[dataIt] = NDEF_T2T_TLV_TERMINATOR; + dataIt++; + (void)ndefT2TPollerWriteBytes(ctx, ctx->messageOffset + rawMessageLen, buf, dataIt ); + } + + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT2TPollerWriteRawMessage(ndefContext *ctx, const uint8_t *buf, uint32_t bufLen) +{ + ReturnCode ret; + + if( (ctx == NULL) || !ndefT2TisT2TDevice(&ctx->device) || ((buf == NULL) && (bufLen != 0U)) ) + { + return ERR_PARAM; + } + + /* TS T2T v1.0 7.5.3.1/2: T4T NDEF Detect should have been called before NDEF write procedure */ + /* Warning: current tag content must not be changed between NDEF Detect procedure and NDEF Write procedure*/ + + /* TS T2T v1.0 7.5.3.3: check write access condition */ + if ( (ctx->state != NDEF_STATE_INITIALIZED) && (ctx->state != NDEF_STATE_READWRITE) ) + { + /* Conclude procedure */ + return ERR_WRONG_STATE; + } + + /* TS T2T v1.0 7.5.3.3: verify available space */ + ret = ndefT2TPollerCheckAvailableSpace(ctx, bufLen); + if( ret != ERR_NONE ) + { + /* Conclude procedures */ + return ERR_PARAM; + } + + /* TS T2T v1.0 7.5.3.4: reset L_Field to 0 */ + /* and update ctx->messageOffset according to L-field len */ + ret = ndefT2TPollerBeginWriteMessage(ctx, bufLen); + if( ret != ERR_NONE ) + { + ctx->state = NDEF_STATE_INVALID; + /* Conclude procedure */ + return ret; + } + + if( bufLen != 0U ) + { + /* TS T2T v1.0 7.5.3.5: write new NDEF message */ + ret = ndefT2TPollerWriteBytes(ctx, ctx->messageOffset, buf, bufLen); + if (ret != ERR_NONE) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return ret; + } + + /* TS T2T v1.0 7.5.3.6 & 7.5.3.7: update L_Field and write Terminator TLV */ + ret = ndefT2TPollerEndWriteMessage(ctx, bufLen); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return ret; + } + } + + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT2TPollerTagFormat(ndefContext *ctx, const ndefCapabilityContainer *cc, uint32_t options) +{ + ReturnCode ret; + uint8_t dataIt; + static const uint8_t emptyNdef[] = {NDEF_T2T_TLV_NDEF_MESSAGE, 0x00U, NDEF_T2T_TLV_TERMINATOR, 0x00U}; + + NO_WARNING(options); + + if( (ctx == NULL) || !ndefT2TisT2TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + /* + * Read CC area + */ + ret = ndefT2TPollerReadBytes(ctx, NDEF_T2T_CC_OFFSET, NDEF_T2T_CC_LEN, ctx->ccBuf, NULL); + if( ret != ERR_NONE ) + { + return ret; + } + + ndefT2TInvalidateCache(ctx); + + /* + * Write CC only in case of virgin CC area + */ + if( (ctx->ccBuf[NDEF_T2T_CC_0] == 0U) && (ctx->ccBuf[NDEF_T2T_CC_1] == 0U) && (ctx->ccBuf[NDEF_T2T_CC_2] == 0U) && (ctx->ccBuf[NDEF_T2T_CC_3] == 0U) ) + { + dataIt = 0U; + if( cc == NULL ) + { + /* Use default values if no cc provided */ + ctx->ccBuf[dataIt] = NDEF_T2T_MAGIC; + dataIt++; + ctx->ccBuf[dataIt] = NDEF_T2T_VERSION_1_0; + dataIt++; + ctx->ccBuf[dataIt] = NDEF_T2T_STATIC_MEM_SIZE / NDEF_T2T_SIZE_DIVIDER; + dataIt++; + ctx->ccBuf[dataIt] = 0x00U; + dataIt++; + } + else + { + ctx->ccBuf[dataIt] = cc->t2t.magicNumber; + dataIt++; + ctx->ccBuf[dataIt] = (uint8_t)(cc->t2t.majorVersion << 4U) | cc->t2t.minorVersion; + dataIt++; + ctx->ccBuf[dataIt] = cc->t2t.size; + dataIt++; + ctx->ccBuf[dataIt] = (uint8_t)(cc->t2t.readAccess << 4U) | cc->t2t.writeAccess; + dataIt++; + } + ret = ndefT2TPollerWriteBlock(ctx, NDEF_T2T_CC_OFFSET/NDEF_T2T_BLOCK_SIZE, ctx->ccBuf); + if( ret != ERR_NONE ) + { + return ret; + } + } + + /* + * Write NDEF place holder + */ + ret = ndefT2TPollerWriteBlock(ctx, NDEF_T2T_AREA_OFFSET/NDEF_T2T_BLOCK_SIZE, emptyNdef); + + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT2TPollerCheckPresence(ndefContext *ctx) +{ + ReturnCode ret; + uint16_t blockAddr; + + if( (ctx == NULL) || !ndefT2TisT2TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + blockAddr = 0U; + ret = ndefT2TPollerReadBlock(ctx, blockAddr, ctx->subCtx.t2t.cacheBuf); + if( ret != ERR_NONE ) + { + ndefT2TInvalidateCache(ctx); + return ret; + } + ctx->subCtx.t2t.cacheAddr = (uint32_t)blockAddr * NDEF_T2T_BLOCK_SIZE; + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT2TPollerCheckAvailableSpace(const ndefContext *ctx, uint32_t messageLen) +{ + uint32_t lLen; + + if( (ctx == NULL) || !ndefT2TisT2TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if ( ctx->state == NDEF_STATE_INVALID ) + { + return ERR_WRONG_STATE; + } + + lLen = ( messageLen > NDEF_SHORT_VFIELD_MAX_LEN) ? NDEF_T2T_TLV_L_3_BYTES_LEN : NDEF_T2T_TLV_L_1_BYTES_LEN; + + if( (messageLen + ctx->subCtx.t2t.offsetNdefTLV + NDEF_T2T_TLV_T_LEN + lLen) > (ctx->areaLen + NDEF_T2T_AREA_OFFSET) ) + { + return ERR_NOMEM; + } + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT2TPollerBeginWriteMessage(ndefContext *ctx, uint32_t messageLen) +{ + ReturnCode ret; + uint32_t lLen; + + if( (ctx == NULL) || !ndefT2TisT2TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if( (ctx->state != NDEF_STATE_INITIALIZED) && (ctx->state != NDEF_STATE_READWRITE) ) + { + return ERR_WRONG_STATE; + } + + /* TS T2T v1.0 7.5.3.4: reset L_Field to 0 */ + ret = ndefT2TPollerWriteRawMessageLen(ctx, 0U); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return ret; + } + + lLen = ( messageLen > NDEF_SHORT_VFIELD_MAX_LEN) ? NDEF_T2T_TLV_L_3_BYTES_LEN : NDEF_T2T_TLV_L_1_BYTES_LEN; + ctx->messageOffset = ctx->subCtx.t2t.offsetNdefTLV; + ctx->messageOffset += NDEF_T2T_TLV_T_LEN; /* T Len */ + ctx->messageOffset += lLen; /* L Len */ + + ctx->state = NDEF_STATE_INITIALIZED; + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT2TPollerEndWriteMessage(ndefContext *ctx, uint32_t messageLen) +{ + ReturnCode ret; + + if( (ctx == NULL) || !ndefT2TisT2TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if( ctx->state != NDEF_STATE_INITIALIZED ) + { + return ERR_WRONG_STATE; + } + + /* TS T2T v1.0 7.5.3.6 & 7.5.3.7: update L_Field and write Terminator TLV */ + ret = ndefT2TPollerWriteRawMessageLen(ctx, messageLen); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return ret; + } + ctx->messageLen = messageLen; + ctx->state = (ctx->messageLen == 0U) ? NDEF_STATE_INITIALIZED : NDEF_STATE_READWRITE; + return ERR_NONE; +} + +#endif /* NDEF_FEATURE_ALL */ + +#endif /* RFAL_FEATURE_T2T */ diff --git a/Software/Middlewares/ST/ndef/Src/poller/ndef_t3t.c b/Software/Middlewares/ST/ndef/Src/poller/ndef_t3t.c new file mode 100644 index 0000000..9edf111 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Src/poller/ndef_t3t.c @@ -0,0 +1,912 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief Provides NDEF methods and definitions to access NFC Forum T3T + * + * This module provides an interface to perform as a NFC Reader/Writer + * to handle a Type 3 Tag T3T + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + #include "ndef_poller.h" + #include "ndef_t3t.h" + #include "utils.h" + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_NFCF + #error " RFAL: Module configuration missing. Please enable/disable T3T module by setting: RFAL_FEATURE_NFCF " +#endif + +//#define RFAL_FEATURE_NFCF + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ +#define NDEF_T3T_MAX_DEVICE 1U /*!< T3T maximum number of device for detection */ +#define NDEF_T3T_SYSTEMCODE 0x12FCU /*!< SENSF_RES System Code for T3T TS T3T 1.0 7.1.1.1 */ +#define NDEF_T3T_WRITEFLAG_ON 0xFU /*!< WriteFlag ON value TS T3T 1.0 7.2.2.16 */ +#define NDEF_T3T_WRITEFLAG_OFF 0x0U /*!< WriteFlag OFF value TS T3T 1.0 7.2.2.16 */ +#define NDEF_T3T_AREA_OFFSET 16U /*!< T3T Area starts at block #1 */ +#define NDEF_T3T_BLOCKLEN 16U /*!< T3T block len is always 16 */ +#define NDEF_T3T_NBBLOCKSMAX 4U /*!< T3T max nb of blocks per read/write */ +#define NDEF_T3T_FLAG_RW 1U /*!< T3T read/write flag value */ +#define NDEF_T3T_FLAG_RO 0U /*!< T3T read only flag value */ +#define NDEF_T3T_SENSFRES_NFCID2 2U /*!< T3T offset of UID in SENSFRES struct */ +#define NDEF_T3T_ATTRIB_INFO_CHECKSUM_LEN 0xEU /*!< T3T checksum len for attribute info to compute */ +#define NDEF_T3T_ATTRIB_INFO_OFFSET_VERSION 0x0U /*!< T3T attribute info offset of version */ +#define NDEF_T3T_ATTRIB_INFO_OFFSET_NBR 1U /*!< T3T attribute info offset of number of read */ +#define NDEF_T3T_ATTRIB_INFO_OFFSET_NBW 2U /*!< T3T attribute info offset of number of write */ +#define NDEF_T3T_ATTRIB_INFO_OFFSET_MAXB 3U /*!< T3T attribute info offset of MAXB */ +#define NDEF_T3T_ATTRIB_INFO_OFFSET_FLAG_W 9U /*!< T3T attribute info offset of Write flag */ +#define NDEF_T3T_ATTRIB_INFO_OFFSET_FLAG_RW 10U /*!< T3T attribute info offset of Read/Write flag */ +#define NDEF_T3T_ATTRIB_INFO_OFFSET_FLAG_LN 11U /*!< T3T attribute info offset of LN field */ +#define NDEF_T3T_ATTRIB_INFO_VERSION_1_0 0x10U /*!< T3T attribute info full version number */ +#define NDEF_T3T_ATTRIB_INFO_BLOCK_NB 0U /*!< T3T attribute info block number */ +#define NDEF_T3T_BLOCKNB_CONF 0x80U /*!< T3T TxRx config value for Read/Write block */ +#define NDEF_T3T_CHECK_NB_BLOCKS_LEN 1U /*!< T3T Length of the Nb of blocks in the CHECK reply */ + +#ifdef RFAL_FEATURE_NFCF + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +#define ndefT3TisT3TDevice(device) ((device)->type == RFAL_NFC_LISTEN_TYPE_NFCF) +#define ndefT3TIsWriteFlagON(writeFlag) ((writeFlag) == NDEF_T3T_WRITEFLAG_ON) + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ +static ReturnCode ndefT3TPollerReadBlocks ( ndefContext * ctx, uint16_t blockNum, uint8_t nbBlocks, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ); +static ReturnCode ndefT3TPollerReadAttributeInformationBlock ( ndefContext * ctx); + +#if NDEF_FEATURE_ALL +static ReturnCode ndefT3TPollerWriteBlocks ( ndefContext * ctx, uint16_t blockNum, uint8_t nbBlocks, const uint8_t* dataBlocks); +static ReturnCode ndefT3TPollerWriteAttributeInformationBlock( ndefContext * ctx); +#endif /* NDEF_FEATURE_ALL */ + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + +/*******************************************************************************/ +static ReturnCode ndefT3TPollerReadBlocks( ndefContext *ctx, uint16_t blockNum, uint8_t nbBlocks, uint8_t *rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + ReturnCode ret; + uint16_t requestedDataSize; + rfalNfcfServBlockListParam servBlock; + rfalNfcfBlockListElem * listBlocks; + uint8_t index; + uint16_t rcvdLen = 0U; + rfalNfcfServ serviceCodeLst = 0x000BU; /* serviceCodeLst */ + + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + requestedDataSize = (uint16_t)nbBlocks * NDEF_T3T_BLOCK_SIZE; + if( rxBufLen < requestedDataSize ) + { + return ERR_PARAM; + } + + listBlocks = ctx->subCtx.t3t.listBlocks; + + for (index = 0U; index < nbBlocks; index++ ) + { + /* Write each block number (16 bits per block address) */ + listBlocks[index].conf = (uint8_t) NDEF_T3T_BLOCKNB_CONF; + listBlocks[index].blockNum = (uint16_t)( blockNum + (uint16_t) index); + } + + servBlock.numServ = 1U; + servBlock.servList = &serviceCodeLst; + servBlock.numBlock = nbBlocks; + servBlock.blockList = listBlocks; + + ret = rfalNfcfPollerCheck(ctx->device.dev.nfcf.sensfRes.NFCID2, &servBlock, ctx->subCtx.t3t.rxbuf, (uint16_t)sizeof(ctx->subCtx.t3t.rxbuf), &rcvdLen); + if (ret != ERR_NONE) + { + return ret; + } + if( rcvdLen != (uint16_t)(NDEF_T3T_CHECK_NB_BLOCKS_LEN + requestedDataSize) ) + { + return ERR_REQUEST; + } + if( requestedDataSize > 0U ) + { + (void)ST_MEMCPY( rxBuf, &ctx->subCtx.t3t.rxbuf[NDEF_T3T_CHECK_NB_BLOCKS_LEN], requestedDataSize ); + if (rcvLen != NULL) + { + *rcvLen = requestedDataSize; + } + } + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT3TPollerReadBytes(ndefContext *ctx, uint32_t offset, uint32_t len, uint8_t *buf, uint32_t *rcvdLen) +{ + uint16_t res; + uint16_t nbRead; + ReturnCode result = ERR_NONE; + uint32_t currentLen = len; + uint32_t lvRcvLen = 0U; + const uint16_t blockLen = (uint16_t) NDEF_T3T_BLOCKLEN; + uint16_t startBlock = (uint16_t) (offset / blockLen); + uint16_t startAddr = (uint16_t) (startBlock * blockLen); + uint16_t startOffset= (uint16_t) (offset - (uint32_t) startAddr); + uint16_t nbBlocks = (uint16_t) NDEF_T3T_NBBLOCKSMAX; + + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) || (len == 0U) ) + { + return ERR_PARAM; + } + if (ctx->state != NDEF_STATE_INVALID) + { + nbBlocks = ctx->cc.t3t.nbR; + } + + if ( startOffset != 0U ) + { + /* Unaligned read, need to use a tmp buffer */ + res = ndefT3TPollerReadBlocks(ctx, startBlock, 1U /* One block */ , ctx->subCtx.t3t.rxbuf, blockLen, &nbRead); + if (res != ERR_NONE) + { + /* Check result */ + result = res; + } + else if (nbRead != NDEF_T3T_BLOCKLEN) + { + /* Check len */ + result = ERR_MEM_CORRUPT; + } + else + { + nbRead = (uint16_t) (nbRead - (uint16_t)startOffset); + if ((uint32_t) nbRead > currentLen) + { + nbRead = (uint16_t) currentLen; + } + if (nbRead > 0U) + { + (void)ST_MEMCPY(buf, &ctx->subCtx.t3t.rxbuf[offset], (uint32_t)nbRead); + } + lvRcvLen += (uint32_t) nbRead; + currentLen -= (uint32_t) nbRead; + startBlock++; + } + } + + while ( (currentLen >= (uint32_t)blockLen) && (result == ERR_NONE) ) + { + if ( currentLen < ((uint32_t)blockLen * nbBlocks) ) + { + /* Reduce the nb of blocks to read */ + nbBlocks = (uint16_t) (currentLen / blockLen); + } + res = ndefT3TPollerReadBlocks(ctx, startBlock, (uint8_t)nbBlocks, ctx->subCtx.t3t.rxbuf, blockLen * nbBlocks, &nbRead); + if (res != ERR_NONE) + { + /* Check result */ + return res; + } + else if (nbRead != (blockLen * nbBlocks)) + { + /* Check len */ + return ERR_MEM_CORRUPT; + } + else + { + (void)ST_MEMCPY(&buf[lvRcvLen], ctx->subCtx.t3t.rxbuf, (uint32_t)currentLen); + lvRcvLen += nbRead; + currentLen -= nbRead; + startBlock += nbBlocks; + } + } + if ( (currentLen > 0U) && (result == ERR_NONE) ) + { + /* Unaligned read, need to use a tmp buffer */ + res = ndefT3TPollerReadBlocks(ctx, startBlock, 1U /* One block */, ctx->subCtx.t3t.rxbuf, blockLen, &nbRead); + if (res != ERR_NONE) + { + /* Check result */ + return res; + } + else if (nbRead != NDEF_T3T_BLOCKLEN) + { + /* Check len */ + return ERR_MEM_CORRUPT; + } + else + { + if (currentLen > 0U) + { + (void)ST_MEMCPY(&buf[lvRcvLen], ctx->subCtx.t3t.rxbuf, (uint32_t)currentLen); + } + lvRcvLen += (uint32_t) currentLen; + currentLen -= (uint32_t) currentLen; + } + } + if ( (currentLen == 0U) && (result == ERR_NONE) ) + { + result = ERR_NONE; + } + if( rcvdLen != NULL ) + { + *rcvdLen = lvRcvLen; + } + return result; +} + +/*******************************************************************************/ +static ReturnCode ndefT3TPollerReadAttributeInformationBlock( ndefContext * ctx) +{ + /* Follow 7.4.1 NDEF Detection Procedure */ + ReturnCode retcode; + uint8_t * rxbuf; + uint16_t checksum_received; + uint16_t checksum_computed = 0U; + uint16_t rcvLen = 0U; + uint8_t i; + + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + rxbuf = ctx->ccBuf; + retcode = ndefT3TPollerReadBlocks( ctx, NDEF_T3T_ATTRIB_INFO_BLOCK_NB, 1U /* One block */, rxbuf, NDEF_T3T_BLOCK_SIZE, &rcvLen ); + if ( (retcode != ERR_NONE) && (rcvLen != NDEF_T3T_BLOCK_SIZE) ) + { + return retcode; + } + /* Now compute checksum */ + for (i = 0U; i < NDEF_T3T_ATTRIB_INFO_CHECKSUM_LEN; i++) + { + checksum_computed += (uint16_t) rxbuf[i]; + } + checksum_received = ((uint16_t)rxbuf[NDEF_T3T_ATTRIB_INFO_CHECKSUM_LEN] << 8U) + (uint16_t)rxbuf[NDEF_T3T_ATTRIB_INFO_CHECKSUM_LEN+ 1U]; + if (checksum_received != checksum_computed) + { + return ERR_REQUEST; + } + + /* Now copy the attribute struct */ + ctx->cc.t3t.majorVersion = ( rxbuf[NDEF_T3T_ATTRIB_INFO_OFFSET_VERSION] >> 4U); + ctx->cc.t3t.minorVersion = ( rxbuf[NDEF_T3T_ATTRIB_INFO_OFFSET_VERSION] & 0xFU); + ctx->cc.t3t.nbR = rxbuf[NDEF_T3T_ATTRIB_INFO_OFFSET_NBR]; + ctx->cc.t3t.nbW = rxbuf[NDEF_T3T_ATTRIB_INFO_OFFSET_NBW]; + ctx->cc.t3t.nMaxB = ((uint16_t)rxbuf[NDEF_T3T_ATTRIB_INFO_OFFSET_MAXB] << 8U) + (uint16_t)rxbuf[NDEF_T3T_ATTRIB_INFO_OFFSET_MAXB + 1U]; + ctx->cc.t3t.writeFlag = rxbuf[NDEF_T3T_ATTRIB_INFO_OFFSET_FLAG_W]; + ctx->cc.t3t.rwFlag = rxbuf[NDEF_T3T_ATTRIB_INFO_OFFSET_FLAG_RW]; + ctx->cc.t3t.Ln = ((uint32_t)rxbuf[NDEF_T3T_ATTRIB_INFO_OFFSET_FLAG_LN + 0U] << 0x10U) + | ((uint32_t)rxbuf[NDEF_T3T_ATTRIB_INFO_OFFSET_FLAG_LN + 1U] << 0x8U) + | (uint32_t)rxbuf[NDEF_T3T_ATTRIB_INFO_OFFSET_FLAG_LN + 2U]; + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT3TPollerContextInitialization(ndefContext *ctx, const rfalNfcDevice *dev) +{ + if( (ctx == NULL) || (dev == NULL) || !ndefT3TisT3TDevice(dev) ) + { + return ERR_PARAM; + } + + (void)ST_MEMCPY(&ctx->device, dev, sizeof(ctx->device)); + + ctx->state = NDEF_STATE_INVALID; + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT3TPollerNdefDetect(ndefContext *ctx, ndefInfo *info) +{ + ReturnCode retcode; + rfalFeliCaPollRes pollRes[NDEF_T3T_MAX_DEVICE]; + uint8_t devCnt = NDEF_T3T_MAX_DEVICE; + uint8_t collisions = 0U; + + if( info != NULL ) + { + info->state = NDEF_STATE_INVALID; + info->majorVersion = 0U; + info->minorVersion = 0U; + info->areaLen = 0U; + info->areaAvalableSpaceLen = 0U; + info->messageLen = 0U; + } + + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + ctx->state = NDEF_STATE_INVALID; + + /* TS T3T v1.0 7.4.1.1 the Reader/Writer SHALL send a SENSF_REQ Command with System Code set to 12FCh. */ + retcode = rfalNfcfPollerPoll( RFAL_FELICA_1_SLOT, NDEF_T3T_SYSTEMCODE, (uint8_t)RFAL_FELICA_POLL_RC_NO_REQUEST, pollRes, &devCnt, &collisions ); + if( retcode != ERR_NONE ) + { + /* TS T3T v1.0 7.4.1.2 Conclude procedure. */ + return retcode; + } + + /* Check if UID of the first card is the same */ + if( ST_BYTECMP(&(pollRes[0U][NDEF_T3T_SENSFRES_NFCID2]), ctx->device.dev.nfcf.sensfRes.NFCID2, RFAL_NFCF_NFCID2_LEN ) != 0 ) + { + return ERR_REQUEST; /* Wrong UID */ + } + + /* TS T3T v1.0 7.4.1.3 The Reader/Writer SHALL read the Attribute Information Block using the CHECK Command. */ + /* TS T3T v1.0 7.4.1.4 The Reader/Writer SHALL verify the value of Checksum of the Attribute Information Block. */ + retcode = ndefT3TPollerReadAttributeInformationBlock(ctx); + if( retcode != ERR_NONE ) + { + return retcode; + } + + /* TS T3T v1.0 7.4.1.6 The Reader/Writer SHALL check if it supports the NDEF mapping version number based on the rules given in Section 7.3. */ + if( ctx->cc.t3t.majorVersion != ndefMajorVersion(NDEF_T3T_ATTRIB_INFO_VERSION_1_0) ) + { + return ERR_REQUEST; + } + + ctx->messageLen = ctx->cc.t3t.Ln; + ctx->messageOffset = NDEF_T3T_AREA_OFFSET; + ctx->areaLen = (uint32_t)ctx->cc.t3t.nMaxB * NDEF_T3T_BLOCK_SIZE; + ctx->state = NDEF_STATE_INITIALIZED; + if (ctx->messageLen > 0U) + { + if (ctx->cc.t3t.rwFlag == NDEF_T3T_FLAG_RW) + { + ctx->state = NDEF_STATE_READWRITE; + } + else + { + if (ctx->cc.t3t.rwFlag == NDEF_T3T_FLAG_RO) + { + ctx->state = NDEF_STATE_READONLY; + } + } + } + + if( info != NULL ) + { + info->state = ctx->state; + info->majorVersion = ctx->cc.t3t.majorVersion; + info->minorVersion = ctx->cc.t3t.minorVersion; + info->areaLen = ctx->areaLen; + info->areaAvalableSpaceLen = ctx->areaLen; + info->messageLen = ctx->messageLen; + } + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT3TPollerReadRawMessage(ndefContext *ctx, uint8_t *buf, uint32_t bufLen, uint32_t *rcvdLen) +{ + ReturnCode ret; + + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) || (buf == NULL) ) + { + return ERR_PARAM; + } + + /* TS T3T v1.0 7.4.2: This procedure assumes that the Reader/Writer has successfully performed the NDEF detection procedure. */ + /* Warning: current tag content must not be changed between NDEF Detect procedure and NDEF read procedure*/ + if ( ctx->state <= NDEF_STATE_INITIALIZED ) + { + return ERR_WRONG_STATE; + } + /* TS T3T v1.0 7.4.2.1: If the WriteFlag remembered during the NDEF detection procedure is set to ON, the NDEF data may be inconsistent ...*/ + if( ndefT3TIsWriteFlagON(ctx->cc.t3t.writeFlag) ) + { + /* TS T3T v1.0 7.4.2.1: ... the Reader/Writer SHALL conclude the NDEF read procedure*/ + return ERR_WRONG_STATE; + } + + if( ctx->messageLen > bufLen ) + { + return ERR_NOMEM; + } + + /* TS T3T v1.0 7.4.2.2: Read NDEF data */ + ret = ndefT3TPollerReadBytes( ctx, ctx->messageOffset, ctx->messageLen, buf, rcvdLen ); + if( ret != ERR_NONE ) + { + ctx->state = NDEF_STATE_INVALID; + } + return ret; +} + +#if NDEF_FEATURE_ALL + +/*******************************************************************************/ +static ReturnCode ndefT3TPollerWriteBlocks( ndefContext * ctx, uint16_t blockNum, uint8_t nbBlocks, const uint8_t* dataBlocks) +{ + ReturnCode ret; + rfalNfcfServBlockListParam servBlock; + rfalNfcfBlockListElem * listBlocks; + uint8_t index; + rfalNfcfServ serviceCodeLst = 0x0009U; + + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + listBlocks = ctx->subCtx.t3t.listBlocks; + + for (index = 0U; index < nbBlocks; index++) + { + /* Write each block number (16 bits per block address) */ + listBlocks[index].conf = (uint8_t) NDEF_T3T_BLOCKNB_CONF; + listBlocks[index].blockNum = (uint16_t)( blockNum + (uint16_t) index); + } + servBlock.numServ = 1U; + servBlock.servList = &serviceCodeLst; + servBlock.numBlock = nbBlocks; + servBlock.blockList = listBlocks; + + ret = rfalNfcfPollerUpdate( ctx->device.dev.nfcf.sensfRes.NFCID2, &servBlock, ctx->subCtx.t3t.txbuf, (uint16_t)sizeof(ctx->subCtx.t3t.txbuf), dataBlocks, ctx->subCtx.t3t.rxbuf, (uint16_t)sizeof(ctx->subCtx.t3t.rxbuf)); + + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT3TPollerWriteBytes(ndefContext *ctx, uint32_t offset, const uint8_t *buf, uint32_t len) +{ + uint16_t nbRead; + uint16_t nbWrite; + uint16_t res; + ReturnCode result = ERR_NONE; + uint32_t currentLen = len; + uint32_t txtLen = 0U; + const uint16_t blockLen = (uint16_t )NDEF_T3T_BLOCKLEN; + uint16_t nbBlocks = (uint16_t ) NDEF_T3T_NBBLOCKSMAX; + uint16_t startBlock = (uint16_t) (offset / blockLen); + uint16_t startAddr = (uint16_t) (startBlock * blockLen); + uint16_t startOffset= (uint16_t) (offset - (uint32_t) startAddr); + uint8_t tmpBuf[NDEF_T3T_BLOCKLEN]; + + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) || (len == 0U) ) + { + return ERR_PARAM; + } + if (ctx->state != NDEF_STATE_INVALID) + { + nbBlocks = ctx->cc.t3t.nbW; + } + + if ( startOffset != 0U ) + { + /* Unaligned write, need to use a tmp buffer */ + res = ndefT3TPollerReadBlocks(ctx, startBlock, 1, tmpBuf, blockLen, &nbRead); + if (res != ERR_NONE) + { + /* Check result */ + result = res; + } + else if (nbRead != blockLen) + { + /* Check len */ + result = ERR_MEM_CORRUPT; + } + else + { + /* Fill the rest of the buffer with user data */ + nbWrite = NDEF_T3T_BLOCKLEN - startOffset; + if (nbWrite > len) + { + nbWrite = (uint16_t) len; + } + (void)ST_MEMCPY(&tmpBuf[startOffset], buf, nbWrite); + res = ndefT3TPollerWriteBlocks(ctx, startBlock, 1U /* One block */, tmpBuf); + if (res == ERR_NONE) + { + txtLen += (uint32_t) nbWrite; + currentLen -= (uint32_t) nbWrite; + startBlock++; + } + else + { + result = res; /* Copy the error code */ + } + } + } + while ( (currentLen >= (uint32_t)blockLen) && (result == ERR_NONE) ) + { + if ( currentLen < ((uint32_t)blockLen * nbBlocks) ) + { + /* Reduce the nb of blocks to read */ + nbBlocks = (uint16_t) (currentLen / blockLen); + } + nbWrite = blockLen * nbBlocks; + res = ndefT3TPollerWriteBlocks(ctx, startBlock, (uint8_t) nbBlocks, &buf[txtLen]); + if (res != ERR_NONE) + { + /* Check result */ + result = res; + } + else + { + txtLen += nbWrite; + currentLen -= nbWrite; + startBlock += nbBlocks; + } + } + if ( (currentLen > 0U) && (result == ERR_NONE) ) + { + /* Unaligned write, need to use a tmp buffer */ + res = ndefT3TPollerReadBlocks(ctx, startBlock, 1U /* One block */, tmpBuf, blockLen, &nbRead); + if (res != ERR_NONE) + { + /* Check result */ + result = res; + } + else if (nbRead != blockLen) + { + /* Check len */ + result = ERR_MEM_CORRUPT; + } + else + { + /* Fill the beginning of the buffer with user data */ + (void)ST_MEMCPY( tmpBuf, &buf[txtLen], currentLen); + res = ndefT3TPollerWriteBlocks(ctx, startBlock, 1U /* One block */, tmpBuf); + if (res == ERR_NONE) + { + currentLen = 0U; + } + else + { + result = res; /* Copy the error code */ + } + } + } + if ( (currentLen == 0U) && (result == ERR_NONE) ) + { + result = ERR_NONE; + } + return result; +} + +/*******************************************************************************/ +static ReturnCode ndefT3TPollerWriteAttributeInformationBlock(ndefContext * ctx) +{ + uint8_t dataIt; + uint16_t checksum; + uint8_t * buf; + ReturnCode ret; + + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + if ( ctx->state < NDEF_STATE_INITIALIZED ) + { + return ERR_WRONG_STATE; + } + dataIt = 0U; + buf = ctx->ccBuf; + checksum = 0U; + buf[dataIt] = ((uint8_t)(ctx->cc.t3t.majorVersion << 4U)) | ctx->cc.t3t.minorVersion; /* Byte 0 Ver */ + checksum += buf[dataIt]; + dataIt++; + buf[dataIt] = ctx->cc.t3t.nbR; /* Byte 1 Nbr */ + checksum += buf[dataIt]; + dataIt++; + buf[dataIt] = ctx->cc.t3t.nbW; /* Byte 2 Nbw */ + checksum += buf[dataIt]; + dataIt++; + buf[dataIt] = (uint8_t)(ctx->cc.t3t.nMaxB >> 8U); /* Byte 3 NmaxB (MSB) */ + checksum += buf[dataIt]; + dataIt++; + buf[dataIt] = (uint8_t)(ctx->cc.t3t.nMaxB >> 0U); /* Byte 4 NmaxB (LSB) */ + checksum += buf[dataIt]; + dataIt++; + buf[dataIt] = 0U; /* Byte 5 RFU */ + dataIt++; + buf[dataIt] = 0U; /* Byte 6 RFU */ + dataIt++; + buf[dataIt] = 0U; /* Byte 7 RFU */ + dataIt++; + buf[dataIt] = 0U; /* Byte 8 RFU */ + dataIt++; + buf[dataIt] = ctx->cc.t3t.writeFlag; /* Byte 9 WriteFlag */ + checksum += buf[dataIt]; + dataIt++; + buf[dataIt] = ctx->cc.t3t.rwFlag; /* Byte 10 RWFlag */ + checksum += buf[dataIt]; + dataIt++; + buf[dataIt] = (uint8_t)(ctx->cc.t3t.Ln >> 16U); /* Byte 11 Ln (MSB) */ + checksum += buf[dataIt]; + dataIt++; + buf[dataIt] = (uint8_t)(ctx->cc.t3t.Ln >> 8U); /* Byte 12 Ln (middle) */ + checksum += buf[dataIt]; + dataIt++; + buf[dataIt] = (uint8_t)(ctx->cc.t3t.Ln >> 0U); /* Byte 13 Ln (LSB) */ + checksum += buf[dataIt]; + dataIt++; + buf[dataIt] = (uint8_t)(checksum >> 8U); /* Byte 14 checksum MSB */ + dataIt++; + buf[dataIt] = (uint8_t)(checksum >> 0U); /* Byte 15 checksum LSB */ + dataIt++; + + ret = ndefT3TPollerWriteBlocks(ctx, NDEF_T3T_ATTRIB_INFO_BLOCK_NB, 1U /* One block */, buf); + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT3TPollerWriteRawMessage(ndefContext *ctx, const uint8_t *buf, uint32_t bufLen) +{ + ReturnCode ret; + + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) || ((buf == NULL) && (bufLen != 0U)) ) + { + return ERR_PARAM; + } + /* TS T3T v1.0 7.4.3: This procedure assumes that the Reader/Writer has successfully performed the NDEF detection procedure... */ + /* Warning: current tag content must not be changed between NDEF Detect procedure and NDEF read procedure*/ + + /* TS T3T v1.0 7.4.3: ... and that the RWFlag in the Attribute Information Block is set to 01h. */ + if ( (ctx->state != NDEF_STATE_INITIALIZED) && (ctx->state != NDEF_STATE_READWRITE) ) + { + /* Conclude procedure */ + return ERR_WRONG_STATE; + } + + /* TS T3T v1.0 7.4.3.2: verify available space */ + ret = ndefT3TPollerCheckAvailableSpace(ctx, bufLen); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + return ERR_PARAM; + } + + /* TS T3T v1.0 7.4.3.3: update WriteFlag */ + ret = ndefT3TPollerBeginWriteMessage(ctx, bufLen); + if( ret != ERR_NONE ) + { + ctx->state = NDEF_STATE_INVALID; + /* Conclude procedure */ + return ret; + } + + if( bufLen != 0U ) + { + /* TS T3T v1.0 7.4.3.4: write new NDEF message */ + ret = ndefT3TPollerWriteBytes(ctx, ctx->messageOffset, buf, bufLen); + if (ret != ERR_NONE) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return ret; + } + } + /* TS T3T v1.0 7.4.3.5: update Ln value and set WriteFlag to OFF */ + ret = ndefT3TPollerEndWriteMessage(ctx, bufLen); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return ret; + } + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT3TPollerTagFormat(ndefContext *ctx, const ndefCapabilityContainer * cc, uint32_t options) +{ + ReturnCode res; + rfalFeliCaPollRes buffOut [NDEF_T3T_MAX_DEVICE]; + uint8_t devCnt = NDEF_T3T_MAX_DEVICE; + uint8_t collisions = 0U; + NO_WARNING(options); /* options not used in T3T */ + + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + if ( cc == NULL) + { + /* No default CC found so have to analyse the tag */ + res = ndefT3TPollerReadAttributeInformationBlock(ctx); /* Read current cc */ + if (res != ERR_NONE) + { + return res; + } + } + else + { + /* Nothing to do */ + (void)ST_MEMCPY(&ctx->cc, cc, sizeof(ndefCapabilityContainer)); + } + + /* 4.3.3 System Definition Information for SystemCode = 0x12FC (NDEF) */ + res = rfalNfcfPollerPoll( RFAL_FELICA_1_SLOT, NDEF_T3T_SYSTEMCODE, (uint8_t)RFAL_FELICA_POLL_RC_NO_REQUEST, buffOut, &devCnt, &collisions ); + if (res != ERR_NONE) + { + return res; + } + res = rfalNfcfPollerPoll( RFAL_FELICA_1_SLOT, NDEF_T3T_SYSTEMCODE, (uint8_t)RFAL_FELICA_POLL_RC_SYSTEM_CODE, buffOut, &devCnt, &collisions ); + if (res != ERR_NONE) + { + return res; + } + ctx->state = NDEF_STATE_INITIALIZED; /* to be sure that the block will be written */ + ctx->cc.t3t.Ln = 0U; /* Force actual stored NDEF size to 0 */ + ctx->cc.t3t.writeFlag = 0U; /* Force WriteFlag to 0 */ + res = ndefT3TPollerWriteAttributeInformationBlock(ctx); + return res; +} + +/*******************************************************************************/ +ReturnCode ndefT3TPollerCheckPresence(ndefContext *ctx) +{ + ReturnCode retcode; + uint16_t nbRead; + + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + /* Perform a simple readblock */ + retcode = ndefT3TPollerReadBlocks(ctx, 0U /* First block */, 1U /* One Block */, ctx->subCtx.t3t.rxbuf, NDEF_T3T_BLOCKLEN, &nbRead); + return retcode; +} + +/*******************************************************************************/ +ReturnCode ndefT3TPollerCheckAvailableSpace(const ndefContext *ctx, uint32_t messageLen) +{ + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if ( ctx->state == NDEF_STATE_INVALID ) + { + return ERR_WRONG_STATE; + } + if( messageLen > ctx->areaLen ) + { + return ERR_NOMEM; + } + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT3TPollerBeginWriteMessage(ndefContext *ctx, uint32_t messageLen) +{ + ReturnCode ret; + NO_WARNING(messageLen); + + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if( (ctx->state != NDEF_STATE_INITIALIZED) && (ctx->state != NDEF_STATE_READWRITE) ) + { + return ERR_WRONG_STATE; + } + /* Update WriteFlag */ + ctx->cc.t3t.writeFlag = NDEF_T3T_WRITEFLAG_ON; + ret = ndefT3TPollerWriteAttributeInformationBlock(ctx); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return ret; + } + ctx->state = NDEF_STATE_INITIALIZED; + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT3TPollerEndWriteMessage(ndefContext *ctx, uint32_t messageLen) +{ + ReturnCode ret; + + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + if( ctx->state != NDEF_STATE_INITIALIZED ) + { + return ERR_WRONG_STATE; + } + /* TS T3T v1.0 7.4.3.5 Update Attribute Information Block */ + ctx->cc.t3t.writeFlag = NDEF_T3T_WRITEFLAG_OFF; + ctx->cc.t3t.Ln = messageLen; + ret = ndefT3TPollerWriteAttributeInformationBlock(ctx); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return ret; + } + ctx->messageLen = messageLen; + ctx->state = (ctx->messageLen == 0U) ? NDEF_STATE_INITIALIZED : NDEF_STATE_READWRITE; + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT3TPollerWriteRawMessageLen(ndefContext *ctx, uint32_t rawMessageLen) +{ + if( (ctx == NULL) || !ndefT3TisT3TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if( (ctx->state != NDEF_STATE_INITIALIZED) && (ctx->state != NDEF_STATE_READWRITE) ) + { + return ERR_WRONG_STATE; + } + return ndefT3TPollerEndWriteMessage(ctx, rawMessageLen); +} + +#endif /* NDEF_FEATURE_ALL */ + +#endif /* RFAL_FEATURE_NFCF */ diff --git a/Software/Middlewares/ST/ndef/Src/poller/ndef_t4t.c b/Software/Middlewares/ST/ndef/Src/poller/ndef_t4t.c new file mode 100644 index 0000000..48fd193 --- /dev/null +++ b/Software/Middlewares/ST/ndef/Src/poller/ndef_t4t.c @@ -0,0 +1,933 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief Provides NDEF methods and definitions to access NFC Forum T4T + * + * This module provides an interface to perform as a NFC Reader/Writer + * to handle a Type 4 Tag T4T + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + #include "ndef_poller.h" + #include "ndef_t4t.h" + #include "utils.h" + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_T4T + #error " RFAL: Module configuration missing. Please enable/disable T4T module by setting: RFAL_FEATURE_T4T " +#endif + +#if RFAL_FEATURE_T4T + +#if RFAL_FEATURE_ISO_DEP_APDU_MAX_LEN < MAX(NDEF_T4T_MAX_CAPDU_LEN, NDEF_T4T_MAX_RAPDU_LEN) + #error " RFAL: ISO-DEP APDU Max length must be greater than ISO7816 Command/Response-APDU length. Please increase RFAL_FEATURE_ISO_DEP_APDU_MAX_LEN" +#endif + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define NDEF_T4T_FID_SIZE 2U /*!< File Id size */ +#define NDEF_T4T_WRITE_ODO_PREFIX_SIZE 7U /*!< Size of ODO for Write Binary: 54 03 xxyyzz 53 Ld */ + +#define NDEF_T4T_DEFAULT_MLC 0x000DU /*!< Defauit Max Lc value before reading CCFILE values */ +#define NDEF_T4T_DEFAULT_MLE 0x000FU /*!< Defauit Max Le value before reading CCFILE values */ + +#define NDEF_T4T_OFFSET_MAX 0x7FFFU /*!< Maximum offset value for ReadBinary */ +#define NDEF_T4T_ODO_OFFSET_MAX 0xFFFFFEU /*!< Maximum offset value for ReadBinary with ODO */ + +#define NDEF_T4T_CCFILEV2_LEN 15U /*!< CCFILE Len mapping version V2 */ +#define NDEF_T4T_CCFILEV3_LEN 17U /*!< CCFILE Len mapping version V3 */ + +#define NDEF_T4T_NDEF_CTLV_T 0x04U /*!< NDEF-File_Ctrl_TLV T field value */ +#define NDEF_T4T_ENDEF_CTLV_T 0x06U /*!< ENDEF-File_Ctrl_TLV T field value */ + +#define NDEF_T4T_NDEF_CTLV_L 0x06U /*!< NDEF-File_Ctrl_TLV T field value */ +#define NDEF_T4T_ENDEF_CTLV_L 0x08U /*!< ENDEF-File_Ctrl_TLV T field value */ + +#define NDEF_T4T_MIN_VALID_MLE 0x000FU /*!< Min valid MLe. MLe valid range 000Fh-FFFFh */ +#define NDEF_T4T_MIN_VALID_MLC 0x000DU /*!< Min valid MLc. MLc valid range 000Dh-FFFFh */ + +#define NDEF_T4T_NLEN_LEN 2U /*!< NLEN LEN (mapping version v2.0): 2 bytes */ +#define NDEF_T4T_ENLEN_LEN 4U /*!< ENLEN LEN (mapping version v3.0): 4 bytes */ + +#define NDEF_T4T_MIN_NLEN 3U /*!< Minimun non null NLEN value. TS T4T v1.0 B */ + +#define NDEF_T4T_MV2_MAX_OFSSET 0x7FFFU /*!< ReadBinary maximum Offset (offset range 0000-7FFFh)*/ + +#define NDEF_T4T_MAX_MLE 255U /*!< Maximum MLe value supported in this implementation (short field coding). Le=0 (MLe=256) not supported by some tag. */ +#define NDEF_T4T_MAX_MLC 255U /*!< Maximum MLc value supported in this implementation (short field coding). */ + +/* + ****************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +#define ndefT4TisT4TDevice(device) ((((device)->type == RFAL_NFC_LISTEN_TYPE_NFCA) && ((device)->dev.nfca.type == RFAL_NFCA_T4T)) || ((device)->type == RFAL_NFC_LISTEN_TYPE_NFCB)) + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ +static void ndefT4TInitializeIsoDepTxRxParam(ndefContext *ctx, rfalIsoDepApduTxRxParam *isoDepAPDU); +static ReturnCode ndefT4TTransceiveTxRx(ndefContext *ctx, rfalIsoDepApduTxRxParam *isoDepAPDU); +static ReturnCode ndefT4TReadAndParseCCFile(ndefContext *ctx); + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + +/*******************************************************************************/ +static void ndefT4TInitializeIsoDepTxRxParam(ndefContext *ctx, rfalIsoDepApduTxRxParam *isoDepAPDU) +{ + /* Initialize the ISO-DEP protocol transceive context */ + isoDepAPDU->txBuf = &ctx->subCtx.t4t.cApduBuf; + isoDepAPDU->DID = ctx->device.proto.isoDep.info.DID; + isoDepAPDU->FWT = ctx->device.proto.isoDep.info.FWT; + isoDepAPDU->dFWT = ctx->device.proto.isoDep.info.dFWT; + isoDepAPDU->FSx = ctx->device.proto.isoDep.info.FSx; + isoDepAPDU->ourFSx = RFAL_ISODEP_FSX_KEEP; + isoDepAPDU->rxBuf = &ctx->subCtx.t4t.rApduBuf; + isoDepAPDU->tmpBuf = &ctx->subCtx.t4t.tmpBuf; +} + +/*******************************************************************************/ +static ReturnCode ndefT4TTransceiveTxRx(ndefContext *ctx, rfalIsoDepApduTxRxParam *isoDepAPDU) +{ + ReturnCode ret; + + /* Initialize respAPDU */ + ctx->subCtx.t4t.respAPDU.rApduBuf = &ctx->subCtx.t4t.rApduBuf; + isoDepAPDU->rxLen = &ctx->subCtx.t4t.respAPDU.rcvdLen; + + ret = rfalIsoDepStartApduTransceive(*isoDepAPDU); + if( ret == ERR_NONE ) + { + do { + /* Blocking implementation, T4T may define rather long timeouts */ + rfalWorker(); + ret = rfalIsoDepGetApduTransceiveStatus(); + } while (ret == ERR_BUSY); + } + + if (ret != ERR_NONE) + { + return ret; + } + + ret = rfalT4TPollerParseRAPDU(&ctx->subCtx.t4t.respAPDU); + ctx->subCtx.t4t.rApduBodyLen = ctx->subCtx.t4t.respAPDU.rApduBodyLen; + + return ret; +} + +/*******************************************************************************/ +static ReturnCode ndefT4TReadAndParseCCFile(ndefContext *ctx) +{ + static const uint8_t RFAL_T4T_FID_CC[] = {0xE1, 0x03}; /*!< FID_CC-File T4T 1.0 4.2 */ + + ReturnCode ret; + uint8_t dataIt; + + /* Select CCFILE TS T4T v1.0 7.2.1.3 */ + ret = ndefT4TPollerSelectFile(ctx, RFAL_T4T_FID_CC); + if( ret != ERR_NONE ) + { + /* Conclude procedure TS T4T v1.0 7.2.1.4 */ + return ret; + } + + /* Read CCFILE TS T4T v1.0 7.2.1.5 */ + /* read CCFILE assuming at least 15 bytes are available. If V3 found will read the extra bytes in a second step */ + ret = ndefT4TPollerReadBinary(ctx, 0U, NDEF_T4T_CCFILEV2_LEN); + if( ret != ERR_NONE ) + { + /* Conclude procedure TS T4T v1.0 7.2.1.6 */ + return ret; + } + (void)ST_MEMCPY(ctx->ccBuf, ctx->subCtx.t4t.rApduBuf.apdu, NDEF_T4T_CCFILEV2_LEN); + dataIt = 0; + ctx->cc.t4t.ccLen = GETU16(&ctx->ccBuf[dataIt]); + dataIt += (uint8_t)sizeof(uint16_t); + ctx->cc.t4t.vNo = ctx->ccBuf[dataIt]; + dataIt++; + ctx->cc.t4t.mLe = GETU16(&ctx->ccBuf[dataIt]); + dataIt += (uint8_t)sizeof(uint16_t); + ctx->cc.t4t.mLc = GETU16(&ctx->ccBuf[dataIt]); + dataIt += (uint8_t)sizeof(uint16_t); + + /* TS T4T v1.0 7.2.1.7 verify MLe and MLc are within the valid range */ + if( (ctx->cc.t4t.mLe < NDEF_T4T_MIN_VALID_MLE) || (ctx->cc.t4t.mLc < NDEF_T4T_MIN_VALID_MLC) ) + { + /* Conclude procedure TS T4T v1.0 7.2.1.8 */ + return ERR_REQUEST; + } + + ctx->subCtx.t4t.curMLe = (uint8_t)MIN(ctx->cc.t4t.mLe, NDEF_T4T_MAX_MLE); /* Only short field codind supported */ + ctx->subCtx.t4t.curMLc = (uint8_t)MIN(ctx->cc.t4t.mLc, NDEF_T4T_MAX_MLC); /* Only short field codind supported */ + + /* TS T4T v1.0 7.2.1.7 and 4.3.2.4 verify support of mapping version */ + if( ndefMajorVersion(ctx->cc.t4t.vNo) > ndefMajorVersion(NDEF_T4T_MAPPING_VERSION_3_0) ) + { + /* Conclude procedure TS T4T v1.0 7.2.1.8 */ + return ERR_REQUEST; + } + if( ndefMajorVersion(ctx->cc.t4t.vNo) == ndefMajorVersion(NDEF_T4T_MAPPING_VERSION_3_0) ) + { + /* V3 found: read remainng bytes */ + ret = ndefT4TPollerReadBinary(ctx, NDEF_T4T_CCFILEV2_LEN, NDEF_T4T_CCFILEV3_LEN - NDEF_T4T_CCFILEV2_LEN); + if( ret != ERR_NONE ) + { + /* Conclude procedure TS T4T v1.0 7.2.1.6 */ + return ret; + } + (void)ST_MEMCPY(&ctx->ccBuf[NDEF_T4T_CCFILEV2_LEN], ctx->subCtx.t4t.rApduBuf.apdu, NDEF_T4T_CCFILEV3_LEN - NDEF_T4T_CCFILEV2_LEN); + + /* TS T4T v1.0 7.2.1.7 verify coding as in table 5 */ + if( ctx->ccBuf[dataIt] != NDEF_T4T_ENDEF_CTLV_T ) + { + /* Conclude procedure TS T4T v1.0 7.2.1.8 */ + return ERR_REQUEST; + } + dataIt++; + if( ctx->ccBuf[dataIt] < NDEF_T4T_ENDEF_CTLV_L ) + { + /* Conclude procedure TS T4T v1.0 7.2.1.8 */ + return ERR_REQUEST; + } + dataIt++; + ctx->cc.t4t.fileId[0U] = ctx->ccBuf[dataIt]; + dataIt++; + ctx->cc.t4t.fileId[1U] = ctx->ccBuf[dataIt]; + dataIt++; + ctx->cc.t4t.fileSize = GETU32(&ctx->ccBuf[dataIt]); + dataIt += (uint8_t)sizeof(uint32_t); + ctx->cc.t4t.readAccess = ctx->ccBuf[dataIt]; + dataIt++; + ctx->cc.t4t.writeAccess = ctx->ccBuf[dataIt]; + dataIt++; + } + else + { + if( ctx->ccBuf[dataIt] != NDEF_T4T_NDEF_CTLV_T ) + { + return ERR_REQUEST; + } + dataIt++; + if( ctx->ccBuf[dataIt] < NDEF_T4T_NDEF_CTLV_L ) + { + return ERR_REQUEST; + } + dataIt++; + ctx->cc.t4t.fileId[0U] = ctx->ccBuf[dataIt]; + dataIt++; + ctx->cc.t4t.fileId[1U] = ctx->ccBuf[dataIt]; + dataIt++; + ctx->cc.t4t.fileSize = ndefBytes2Uint16(ctx->ccBuf[dataIt], ctx->ccBuf[dataIt + 1U]); + dataIt += (uint8_t)sizeof(uint16_t); + ctx->cc.t4t.readAccess = ctx->ccBuf[dataIt]; + dataIt++; + ctx->cc.t4t.writeAccess = ctx->ccBuf[dataIt]; + dataIt++; + } + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerSelectNdefTagApplication(ndefContext *ctx) +{ + ReturnCode ret; + rfalIsoDepApduTxRxParam isoDepAPDU; + static const uint8_t NDEF_T4T_AID_NDEF[] = {0xD2, 0x76, 0x00, 0x00, 0x85, 0x01, 0x01}; /*!< AID_NDEF v2.0 or higher T4T 1.0 4.3.3 */ + static const uint8_t NDEF_T4T_AID_NDEF_V1[] = {0xD2, 0x76, 0x00, 0x00, 0x85, 0x01, 0x00}; /*!< AID_NDEF v1.0 T4T 1.0 4.3.3 */ + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + ndefT4TInitializeIsoDepTxRxParam(ctx, &isoDepAPDU); + (void)rfalT4TPollerComposeSelectAppl(isoDepAPDU.txBuf, NDEF_T4T_AID_NDEF, (uint8_t)sizeof(NDEF_T4T_AID_NDEF), &isoDepAPDU.txBufLen); + ret = ndefT4TTransceiveTxRx(ctx, &isoDepAPDU); + + if( ret == ERR_NONE ) + { + /* application v2 or higher found */ + ctx->subCtx.t4t.mv1Flag = false; + return ret; + } + + if( ret != ERR_REQUEST ) + { + return ret; + } + + /* if v2 application not found, try v1 */ + (void)rfalT4TPollerComposeSelectAppl(isoDepAPDU.txBuf, NDEF_T4T_AID_NDEF_V1, (uint8_t)sizeof(NDEF_T4T_AID_NDEF_V1), &isoDepAPDU.txBufLen); + ret = ndefT4TTransceiveTxRx(ctx, &isoDepAPDU); + + if( ret == ERR_NONE ) + { + /* application v1 found */ + ctx->subCtx.t4t.mv1Flag = true; + } + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerSelectFile(ndefContext *ctx, const uint8_t *fileId) +{ + ReturnCode ret; + rfalIsoDepApduTxRxParam isoDepAPDU; + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + ndefT4TInitializeIsoDepTxRxParam(ctx, &isoDepAPDU); + + if (ctx->subCtx.t4t.mv1Flag) + { + (void)rfalT4TPollerComposeSelectFileV1Mapping(isoDepAPDU.txBuf, fileId, (uint8_t)sizeof(fileId), &isoDepAPDU.txBufLen); + } + else + { + (void)rfalT4TPollerComposeSelectFile(isoDepAPDU.txBuf, fileId, NDEF_T4T_FID_SIZE, &isoDepAPDU.txBufLen); + } + + ret = ndefT4TTransceiveTxRx(ctx, &isoDepAPDU); + + return ret; +} + + +/*******************************************************************************/ +ReturnCode ndefT4TPollerReadBinary(ndefContext *ctx, uint16_t offset, uint8_t len) +{ + ReturnCode ret; + rfalIsoDepApduTxRxParam isoDepAPDU; + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) || (len > ctx->subCtx.t4t.curMLe) || (offset > NDEF_T4T_OFFSET_MAX) ) + { + return ERR_PARAM; + } + + ndefT4TInitializeIsoDepTxRxParam(ctx, &isoDepAPDU); + (void)rfalT4TPollerComposeReadData(isoDepAPDU.txBuf, offset, len, &isoDepAPDU.txBufLen); + ret = ndefT4TTransceiveTxRx(ctx, &isoDepAPDU); + + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerReadBinaryODO(ndefContext *ctx, uint32_t offset, uint8_t len) +{ + ReturnCode ret; + rfalIsoDepApduTxRxParam isoDepAPDU; + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) || (len > ctx->subCtx.t4t.curMLe) || (offset > NDEF_T4T_ODO_OFFSET_MAX) ) + { + return ERR_PARAM; + } + + ndefT4TInitializeIsoDepTxRxParam(ctx, &isoDepAPDU); + (void)rfalT4TPollerComposeReadDataODO(isoDepAPDU.txBuf, offset, len, &isoDepAPDU.txBufLen); + ret = ndefT4TTransceiveTxRx(ctx, &isoDepAPDU); + + return ret; + } + +/*******************************************************************************/ +ReturnCode ndefT4TPollerReadBytes(ndefContext *ctx, uint32_t offset, uint32_t len, uint8_t *buf, uint32_t *rcvdLen) +{ + ReturnCode ret; + uint8_t le; + uint32_t lvOffset = offset; + uint32_t lvLen = len; + uint8_t * lvBuf = buf; + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) || (lvLen == 0U) ) + { + return ERR_PARAM; + } + if( rcvdLen != NULL ) + { + *rcvdLen = 0U; + } + + do { + le = ( lvLen > ctx->subCtx.t4t.curMLe ) ? ctx->subCtx.t4t.curMLe : (uint8_t)lvLen; + if( lvOffset > NDEF_T4T_MV2_MAX_OFSSET ) + { + ret = ndefT4TPollerReadBinaryODO(ctx, lvOffset, le); + } + else + { + ret = ndefT4TPollerReadBinary(ctx, (uint16_t)lvOffset, le); + } + if( ret != ERR_NONE ) + { + return ret; + } + if( ctx->subCtx.t4t.rApduBodyLen == 0U ) + { + break; /* no more to read */ + } + if( ctx->subCtx.t4t.rApduBodyLen > lvLen ) + { + return ERR_SYSTEM; + } + (void)ST_MEMCPY(lvBuf, ctx->subCtx.t4t.rApduBuf.apdu, ctx->subCtx.t4t.rApduBodyLen); + lvBuf = &lvBuf[ctx->subCtx.t4t.rApduBodyLen]; + lvOffset += ctx->subCtx.t4t.rApduBodyLen; + lvLen -= ctx->subCtx.t4t.rApduBodyLen; + if( rcvdLen != NULL ) + { + *rcvdLen += ctx->subCtx.t4t.rApduBodyLen; + } + } while( lvLen != 0U ); + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerContextInitialization(ndefContext *ctx, const rfalNfcDevice *dev) +{ + if( (ctx == NULL) || (dev == NULL) || !ndefT4TisT4TDevice(dev) ) + { + return ERR_PARAM; + } + + (void)ST_MEMCPY(&ctx->device, dev, sizeof(ctx->device)); + + ctx->state = NDEF_STATE_INVALID; + ctx->subCtx.t4t.curMLc = NDEF_T4T_DEFAULT_MLC; + ctx->subCtx.t4t.curMLe = NDEF_T4T_DEFAULT_MLE; + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerNdefDetect(ndefContext *ctx, ndefInfo *info) +{ + ReturnCode ret; + uint8_t* nLen; + uint8_t nlenLen; + + if( info != NULL ) + { + info->state = NDEF_STATE_INVALID; + info->majorVersion = 0U; + info->minorVersion = 0U; + info->areaLen = 0U; + info->areaAvalableSpaceLen = 0U; + info->messageLen = 0U; + } + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + ctx->state = NDEF_STATE_INVALID; + + /* Select NDEF Tag application TS T4T v1.0 7.2.1.1 */ + ret = ndefT4TPollerSelectNdefTagApplication(ctx); + if( ret != ERR_NONE ) + { + /* Conclude procedure TS T4T v1.0 7.2.1.2 */ + return ret; + } + + /* TS T4T v1.0 7.2.1.3 and following */ + ret = ndefT4TReadAndParseCCFile(ctx); + if( ret != ERR_NONE ) + { + return ret; + } + nlenLen = ( ndefMajorVersion(ctx->cc.t4t.vNo) == ndefMajorVersion(NDEF_T4T_MAPPING_VERSION_3_0) ) ? NDEF_T4T_ENLEN_LEN : NDEF_T4T_NLEN_LEN; + + /* TS T4T v1.0 7.2.1.7 verify file READ access */ + if( !(ndefT4TIsReadAccessGranted(ctx->cc.t4t.readAccess)) ) + { + /* Conclude procedure TS T4T v1.0 7.2.1.8 */ + return ERR_REQUEST; + } + /* File size need at least be enough to store NLEN or ENLEN */ + if( ctx->cc.t4t.fileSize < nlenLen) + { + return ERR_REQUEST; + } + + /* Select NDEF File TS T4T v1.0 7.2.1.9 */ + ret = ndefT4TPollerSelectFile(ctx, ctx->cc.t4t.fileId); + if( ret != ERR_NONE ) + { + /* Conclude procedure TS T4T v1.0 7.2.1.10 */ + return ret; + } + /* Read NLEN/ENLEN TS T4T v1.0 7.2.1.11 */ + ret = ndefT4TPollerReadBinary(ctx, 0U, nlenLen); + if( ret != ERR_NONE ) + { + /* Conclude procedure TS T4T v1.0 7.2.1.11 */ + return ret; + } + nLen = ctx->subCtx.t4t.rApduBuf.apdu; + ctx->messageLen = (nlenLen == NDEF_T4T_ENLEN_LEN) ? GETU32(&nLen[0]) : (uint32_t)ndefBytes2Uint16(nLen[0], nLen[1]); + ctx->messageOffset = nlenLen; + ctx->areaLen = ctx->cc.t4t.fileSize; + + if ( (ctx->messageLen > (ctx->cc.t4t.fileSize - nlenLen)) || ((ctx->messageLen > 0U) && (ctx->messageLen < NDEF_T4T_MIN_NLEN)) ) + { + /* Conclude procedure TS T4T v1.0 7.2.1.11 */ + return ERR_REQUEST; + } + + if( ctx->messageLen == 0U ) + { + if( !(ndefT4TIsWriteAccessGranted(ctx->cc.t4t.writeAccess)) ) + { + /* Conclude procedure TS T4T v1.0 7.2.1.11 */ + return ERR_REQUEST; + } + ctx->state = NDEF_STATE_INITIALIZED; + } + else + { + ctx->state = (ndefT4TIsWriteAccessGranted(ctx->cc.t4t.writeAccess)) ? NDEF_STATE_READWRITE : NDEF_STATE_READONLY; + } + if( info != NULL ) + { + info->state = ctx->state; + info->majorVersion = ndefMajorVersion(ctx->cc.t4t.vNo); + info->minorVersion = ndefMinorVersion(ctx->cc.t4t.vNo); + info->areaLen = ctx->areaLen; + info->areaAvalableSpaceLen = ctx->areaLen - ctx->messageOffset; + info->messageLen = ctx->messageLen; + } + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerReadRawMessage(ndefContext *ctx, uint8_t *buf, uint32_t bufLen, uint32_t *rcvdLen) +{ + ReturnCode ret; + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) || (buf == NULL) ) + { + return ERR_PARAM; + } + /* TS T4T v1.0 7.2.2.1: T4T NDEF Detect should have been called before NDEF read procedure */ + /* Warning: current selected file must not be changed between NDEF Detect procedure and NDEF read procedure*/ + + /* TS T4T v1.0 7.3.3.2: check presence of NDEF message */ + if ( ctx->state <= NDEF_STATE_INITIALIZED ) + { + /* Conclude procedure TS T4T v1.0 7.2.2.2 */ + return ERR_WRONG_STATE; + } + + if( ctx->messageLen > bufLen ) + { + return ERR_NOMEM; + } + + /* TS T4T v1.0 7.3.3.3: read the NDEF message */ + ret = ndefT4TPollerReadBytes(ctx, ctx->messageOffset, ctx->messageLen, buf, rcvdLen); + if( ret != ERR_NONE ) + { + ctx->state = NDEF_STATE_INVALID; + } + + return ret; +} + +#if NDEF_FEATURE_ALL + +/*******************************************************************************/ +ReturnCode ndefT4TPollerWriteBinary(ndefContext *ctx, uint16_t offset, const uint8_t *data, uint8_t len) +{ + ReturnCode ret; + rfalIsoDepApduTxRxParam isoDepAPDU; + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) || (len > ctx->subCtx.t4t.curMLc) || (offset > NDEF_T4T_OFFSET_MAX) ) + { + return ERR_PARAM; + } + + ndefT4TInitializeIsoDepTxRxParam(ctx, &isoDepAPDU); + (void)rfalT4TPollerComposeWriteData(isoDepAPDU.txBuf, offset, data, len, &isoDepAPDU.txBufLen); + ret = ndefT4TTransceiveTxRx(ctx, &isoDepAPDU); + + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerWriteBinaryODO(ndefContext *ctx, uint32_t offset, const uint8_t *data, uint8_t len) +{ + ReturnCode ret; + rfalIsoDepApduTxRxParam isoDepAPDU; + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) || (len > ctx->subCtx.t4t.curMLc) || (offset > NDEF_T4T_ODO_OFFSET_MAX) ) + { + return ERR_PARAM; + } + + ndefT4TInitializeIsoDepTxRxParam(ctx, &isoDepAPDU); + (void)rfalT4TPollerComposeWriteDataODO(isoDepAPDU.txBuf, offset, data, len, &isoDepAPDU.txBufLen); + ret = ndefT4TTransceiveTxRx(ctx, &isoDepAPDU); + + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerWriteBytes(ndefContext *ctx, uint32_t offset, const uint8_t *buf, uint32_t len) +{ + ReturnCode ret; + uint8_t lc; + uint32_t lvOffset = offset; + uint32_t lvLen = len; + const uint8_t * lvBuf = buf; + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) || (lvLen == 0U) ) + { + return ERR_PARAM; + } + + do { + + if( lvOffset > NDEF_T4T_MV2_MAX_OFSSET ) + { + lc = ( lvLen > ((uint32_t)ctx->subCtx.t4t.curMLc - NDEF_T4T_WRITE_ODO_PREFIX_SIZE) ) ? (uint8_t)(ctx->subCtx.t4t.curMLc - NDEF_T4T_WRITE_ODO_PREFIX_SIZE) : (uint8_t)lvLen; + ret = ndefT4TPollerWriteBinaryODO(ctx, lvOffset, lvBuf, lc); + } + else + { + lc = ( lvLen > ctx->subCtx.t4t.curMLc ) ? ctx->subCtx.t4t.curMLc : (uint8_t)lvLen; + ret = ndefT4TPollerWriteBinary(ctx, (uint16_t)lvOffset, lvBuf, lc); + } + if( ret != ERR_NONE ) + { + return ret; + } + lvBuf = &lvBuf[lc]; + lvOffset += lc; + lvLen -= lc; + } while( lvLen != 0U ); + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerWriteRawMessageLen(ndefContext *ctx, uint32_t rawMessageLen) +{ + ReturnCode ret; + uint8_t buf[NDEF_T4T_ENLEN_LEN]; + uint8_t dataIt; + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if ( (ctx->state != NDEF_STATE_INITIALIZED) && (ctx->state != NDEF_STATE_READWRITE) ) + { + return ERR_WRONG_STATE; + } + + dataIt = 0U; + if( ndefMajorVersion(ctx->cc.t4t.vNo) == ndefMajorVersion(NDEF_T4T_MAPPING_VERSION_3_0) ) + { + buf[dataIt] = (uint8_t)(rawMessageLen >> 24U); + dataIt++; + buf[dataIt] = (uint8_t)(rawMessageLen >> 16U); + dataIt++; + buf[dataIt] = (uint8_t)(rawMessageLen >> 8U); + dataIt++; + buf[dataIt] = (uint8_t)(rawMessageLen); + dataIt++; + } + else + { + buf[dataIt] = (uint8_t)(rawMessageLen >> 8U); + dataIt++; + buf[dataIt] = (uint8_t)(rawMessageLen); + dataIt++; + } + + ret = ndefT4TPollerWriteBytes(ctx, 0U, buf, dataIt); + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerWriteRawMessage(ndefContext *ctx, const uint8_t *buf, uint32_t bufLen) +{ + ReturnCode ret; + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) || ((buf == NULL) && (bufLen != 0U)) ) + { + return ERR_PARAM; + } + + /* TS T4T v1.0 7.2.3.1: T4T NDEF Detect should have been called before NDEF write procedure */ + /* Warning: current selected file must not be changed between NDEF Detect procedure and NDEF Write procedure*/ + + /* TS T4T v1.0 7.3.3.2: check write access condition */ + if ( (ctx->state != NDEF_STATE_INITIALIZED) && (ctx->state != NDEF_STATE_READWRITE) ) + { + /* Conclude procedure TS T4T v1.0 7.2.3.2 */ + return ERR_WRONG_STATE; + } + + /* TS T4T v1.0 7.2.3.3: check Mapping Version */ + /* Done automatically inside underlying fucntions */ + + /* TS T4T v1.0 7.2.3.4/8 verify length of the NDEF message */ + ret = ndefT4TPollerCheckAvailableSpace(ctx, bufLen); + if( ret != ERR_NONE ) + { + /* Conclude procedure TS T4T v1.0 7.2.3.4/8 */ + return ERR_PARAM; + } + + /* TS T4T v1.0 7.2.3.5/9 Write value 0000h in NLEN field (resp. 00000000h in ENLEN field) */ + ret = ndefT4TPollerBeginWriteMessage(ctx, bufLen); + if( ret != ERR_NONE ) + { + ctx->state = NDEF_STATE_INVALID; + /* Conclude procedure TS T4T v1.0 7.2.3.5/9 */ + return ret; + } + + if( bufLen != 0U ) + { + /* TS T4T v1.0 7.2.3.6/10 Write NDEF message) */ + ret = ndefT4TPollerWriteBytes(ctx, ctx->messageOffset, buf, bufLen); + if( ret != ERR_NONE ) + { + /* Conclude procedure TS T4T v1.0 7.2.3.6/10 */ + ctx->state = NDEF_STATE_INVALID; + return ret; + } + + /* TS T4T v1.0 7.2.3.7/11 Write value length in NLEN field (resp. in ENLEN field) */ + ret = ndefT4TPollerEndWriteMessage(ctx, bufLen); + if( ret != ERR_NONE ) + { + /* Conclude procedure TS T4T v1.0 7.2.3.7/11 */ + ctx->state = NDEF_STATE_INVALID; + return ret; + } + } + + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerTagFormat(ndefContext *ctx, const ndefCapabilityContainer *cc, uint32_t options) +{ + ReturnCode ret; + + uint8_t buf[NDEF_T4T_ENLEN_LEN]; + + NO_WARNING(cc); + NO_WARNING(options); + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + ret = ndefT4TPollerSelectNdefTagApplication(ctx); + if( ret != ERR_NONE ) + { + return ret; + } + + ret = ndefT4TReadAndParseCCFile(ctx); + if( ret != ERR_NONE ) + { + return ret; + } + + ret = ndefT4TPollerSelectFile(ctx, ctx->cc.t4t.fileId); + if( ret != ERR_NONE ) + { + return ret; + } + (void)ST_MEMSET(buf, 0x00, sizeof(buf)); + ret = ndefT4TPollerWriteBytes(ctx, 0U, buf, ( ndefMajorVersion(ctx->cc.t4t.vNo) == ndefMajorVersion(NDEF_T4T_MAPPING_VERSION_3_0) ) ? NDEF_T4T_ENLEN_LEN : NDEF_T4T_NLEN_LEN); + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerCheckPresence(ndefContext *ctx) +{ + rfalIsoDepApduTxRxParam isoDepAPDU; + ReturnCode ret; + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + ndefT4TInitializeIsoDepTxRxParam(ctx, &isoDepAPDU); + (void)rfalT4TPollerComposeReadData(isoDepAPDU.txBuf, 0, 1, &isoDepAPDU.txBufLen); + + /* Initialize respAPDU */ + ctx->subCtx.t4t.respAPDU.rApduBuf = &ctx->subCtx.t4t.rApduBuf; + isoDepAPDU.rxLen = &ctx->subCtx.t4t.respAPDU.rcvdLen; + + (void)rfalIsoDepStartApduTransceive(isoDepAPDU); + do { + /* Blocking implementation, T4T may define rather long timeouts */ + rfalWorker(); + ret = rfalIsoDepGetApduTransceiveStatus(); + } while (ret == ERR_BUSY); + + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerCheckAvailableSpace(const ndefContext *ctx, uint32_t messageLen) +{ + uint8_t nlenLen; + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if ( ctx->state == NDEF_STATE_INVALID ) + { + return ERR_WRONG_STATE; + } + + nlenLen = ( ndefMajorVersion(ctx->cc.t4t.vNo) == ndefMajorVersion(NDEF_T4T_MAPPING_VERSION_3_0) ) ? NDEF_T4T_ENLEN_LEN : NDEF_T4T_NLEN_LEN; + if( (messageLen + (uint32_t)nlenLen) > ctx->cc.t4t.fileSize ) + { + return ERR_NOMEM; + } + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerBeginWriteMessage(ndefContext *ctx, uint32_t messageLen) +{ + ReturnCode ret; + NO_WARNING(messageLen); + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if( (ctx->state != NDEF_STATE_INITIALIZED) && (ctx->state != NDEF_STATE_READWRITE) ) + { + return ERR_WRONG_STATE; + } + + /* TS T4T v1.0 7.2.3.5/9 Write value 0000h in NLEN field (resp. 00000000h in ENLEN field) */ + ret = ndefT4TPollerWriteRawMessageLen(ctx, 0U); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return ret; + } + + ctx->state = NDEF_STATE_INITIALIZED; + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT4TPollerEndWriteMessage(ndefContext *ctx, uint32_t messageLen) +{ + ReturnCode ret; + + if( (ctx == NULL) || !ndefT4TisT4TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if( ctx->state != NDEF_STATE_INITIALIZED ) + { + return ERR_WRONG_STATE; + } + + /* TS T4T v1.0 7.2.3.7/11 Write value length in NLEN field (resp. in ENLEN field) */ + ret = ndefT4TPollerWriteRawMessageLen(ctx, messageLen); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return ret; + } + ctx->messageLen = messageLen; + ctx->state = (ctx->messageLen == 0U) ? NDEF_STATE_INITIALIZED : NDEF_STATE_READWRITE; + return ERR_NONE; +} + +#endif /* NDEF_FEATURE_ALL */ + +#endif /* RFAL_FEATURE_T4T */ diff --git a/Software/Middlewares/ST/ndef/Src/poller/ndef_t5t.c b/Software/Middlewares/ST/ndef/Src/poller/ndef_t5t.c new file mode 100644 index 0000000..bb5934f --- /dev/null +++ b/Software/Middlewares/ST/ndef/Src/poller/ndef_t5t.c @@ -0,0 +1,1149 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: NDEF firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author + * + * \brief Provides NDEF methods and definitions to access NFC-V Forum T5T + * + * This module provides an interface to perform as a NFC-V Reader/Writer + * to handle a Type 5 Tag T5T + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + #include "ndef_poller.h" + #include "ndef_t5t.h" + #include "utils.h" + + /* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_NFCV + #error " RFAL: Module configuration missing. Please enable/disable T5T support by setting: RFAL_FEATURE_NFCV " +#endif + +#if RFAL_FEATURE_NFCV + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define NDEF_T5T_UID_MANUFACTURER_ID_POS 6U /*!< Manufacturer ID Offset in UID buffer (reverse) */ +#define NDEF_T5T_MANUFACTURER_ID_ST 0x02U /*!< Manufacturer ID for ST */ + +#define NDEF_T5T_SYSINFO_MAX_LEN 22U /*!< Max length for (Extended) Get System Info response */ + +#define NDEF_T5T_MLEN_DIVIDER 8U /*!< T5T_area size is measured in bytes is equal to 8 * MLEN */ + +#define NDEF_T5T_TLV_L_3_BYTES_LEN 3U /*!< TLV L Length: 3 bytes */ +#define NDEF_T5T_TLV_L_1_BYTES_LEN 1U /*!< TLV L Length: 1 bytes */ +#define NDEF_T5T_TLV_T_LEN 1U /*!< TLV T Length: 1 bytes */ + +#define NDEF_T5T_MAX_BLOCK_1_BYTE_ADDR 256U /*!< Max number of blocks for 1 byte addressing */ +#define NDEF_T5T_MAX_MLEN_1_BYTE_ENCODING 256U /*!< MLEN max value for 1 byte encoding */ + +#define NDEF_T5T_TL_MAX_SIZE (NDEF_T5T_TLV_T_LEN \ + + NDEF_T5T_TLV_L_3_BYTES_LEN) /*!< Max TL size */ + +#define NDEF_T5T_TLV_NDEF 0x03U /*!< TLV flag NDEF value */ +#define NDEF_T5T_TLV_PROPRIETARY 0xFDU /*!< TLV flag PROPRIETARY value */ +#define NDEF_T5T_TLV_TERMINATOR 0xFEU /*!< TLV flag TERMINATOR value */ +#define NDEF_T5T_TLV_RFU 0x00U /*!< TLV flag RFU value */ + +/* + ***************************************************************************** + * GLOBAL TYPES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +#define ndefT5TisT5TDevice(device) ((device)->type == RFAL_NFC_LISTEN_TYPE_NFCV) + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + +static ReturnCode ndefT5TPollerReadSingleBlock(ndefContext *ctx, uint16_t blockNum, uint8_t *rxBuf, uint16_t rxBufLen, uint16_t *rcvLen); +static ReturnCode ndefT5TGetSystemInformation(ndefContext *ctx, bool extended); + +#if NDEF_FEATURE_ALL +static ReturnCode ndefT5TWriteCC(ndefContext *ctx); +static ReturnCode ndefT5TPollerWriteSingleBlock(ndefContext *ctx, uint16_t blockNum, const uint8_t* wrData); +static ReturnCode ndefT5TPollerReadMultipleBlocks(ndefContext *ctx, uint16_t firstBlockNum, uint8_t numOfBlocks, uint8_t *rxBuf, uint16_t rxBufLen, uint16_t *rcvLen); +#endif /* NDEF_FEATURE_ALL */ + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + +/*******************************************************************************/ +ReturnCode ndefT5TPollerReadBytes(ndefContext * ctx, uint32_t offset, uint32_t len, uint8_t* buf, uint32_t * rcvdLen ) +{ + uint8_t lastVal; + uint8_t status; + uint16_t res; + uint16_t nbRead; + uint16_t blockLen; + uint16_t startBlock; + uint16_t startAddr; + ReturnCode result = ERR_PARAM; + uint32_t currentLen = len; + uint32_t lvRcvLen = 0U; + + if ( ( ctx != NULL) && (ctx->subCtx.t5t.blockLen > 0U) && (buf != NULL) && (len > 0U) ) + { + blockLen = (uint16_t )ctx->subCtx.t5t.blockLen; + if( blockLen == 0U ) + { + return ERR_SYSTEM; + } + startBlock = (uint16_t) (offset / blockLen); + startAddr = (uint16_t) (startBlock * blockLen); + + res = ndefT5TPollerReadSingleBlock(ctx, startBlock, ctx->subCtx.t5t.txrxBuf, blockLen + 3U, &nbRead); + if ( (res == ERR_NONE) && (ctx->subCtx.t5t.txrxBuf[0U] == 0U) && (nbRead > 0U) ) + { + nbRead = (uint16_t) (nbRead + startAddr - (uint16_t)offset - 1U ); + if ((uint32_t) nbRead > currentLen) + { + nbRead = (uint16_t) currentLen; + } + if (nbRead > 0U) + { + (void)ST_MEMCPY(buf, &ctx->subCtx.t5t.txrxBuf[1U - startAddr + (uint16_t)offset], (uint32_t)nbRead); + } + lvRcvLen += (uint32_t) nbRead; + currentLen -= (uint32_t) nbRead; + while (currentLen >= ((uint32_t)blockLen + 2U) ) + { + startBlock++; + lastVal = buf[lvRcvLen - 1U]; + res = ndefT5TPollerReadSingleBlock(ctx, startBlock, &buf[lvRcvLen - 1U], blockLen + 3U, &nbRead); + status = buf[lvRcvLen - 1U]; /* Keep status */ + buf[lvRcvLen - 1U] = lastVal; /* Restore previous value */ + if ( (res == ERR_NONE) && (nbRead > 0U) && (status == 0U)) + { + lvRcvLen += blockLen; + currentLen -= blockLen; + } + else + { + break; + } + } + while (currentLen > 0U) + { + startBlock++; + res = ndefT5TPollerReadSingleBlock(ctx, startBlock, ctx->subCtx.t5t.txrxBuf, blockLen + 3U, &nbRead); + if ( (res == ERR_NONE) && (ctx->subCtx.t5t.txrxBuf[0U] == 0U) && (nbRead > 0U)) + { + -- nbRead; /* remove status char */ + if (nbRead > currentLen) + { + nbRead = (uint16_t)currentLen; + } + if (nbRead > 0U) + { + (void)ST_MEMCPY(&buf[lvRcvLen], & ctx->subCtx.t5t.txrxBuf[1U], nbRead); + } + lvRcvLen += nbRead; + currentLen -= nbRead; + } + else + { + break; + } + } + } + } + if (currentLen == 0U) + { + result = ERR_NONE; + } + if( rcvdLen != NULL ) + { + * rcvdLen = lvRcvLen; + } + return result; +} + +/*******************************************************************************/ +ReturnCode ndefT5TPollerContextInitialization(ndefContext *ctx, const rfalNfcDevice *dev) +{ + ReturnCode result; + uint16_t rcvLen; + + if( (ctx == NULL) || (dev == NULL) || !ndefT5TisT5TDevice(dev) ) + { + return ERR_PARAM; + } + + (void)ST_MEMCPY(&ctx->device, dev, sizeof(ctx->device)); + + /* Reset info about the card */ + ctx->state = NDEF_STATE_INVALID; + ctx->messageOffset = 0U; + ctx->messageLen = 0U; + ctx->subCtx.t5t.blockLen = 0U; + ctx->subCtx.t5t.pAddressedUid = ctx->device.dev.nfcv.InvRes.UID; /* By default work in addressed mode */ + ctx->subCtx.t5t.TlvNDEFOffset = 0U; /* Offset for TLV */ + + ctx->subCtx.t5t.legacySTHighDensity = false; + result = ndefT5TPollerReadSingleBlock( ctx, 0U, ctx->subCtx.t5t.txrxBuf, (uint16_t)sizeof(ctx->subCtx.t5t.txrxBuf), &rcvLen ); + if( (result != ERR_NONE) && (ctx->device.dev.nfcv.InvRes.UID[NDEF_T5T_UID_MANUFACTURER_ID_POS] == NDEF_T5T_MANUFACTURER_ID_ST) ) + { + /* Try High Density Legacy mode */ + ctx->subCtx.t5t.legacySTHighDensity = true; + result = ndefT5TPollerReadSingleBlock( ctx, 0U, ctx->subCtx.t5t.txrxBuf, (uint16_t)sizeof(ctx->subCtx.t5t.txrxBuf), &rcvLen ); + if( result != ERR_NONE ) + { + return result; + } + } + + if( (rcvLen > 1U) && (ctx->subCtx.t5t.txrxBuf[0U] == (uint8_t) 0U) ) + { + ctx->subCtx.t5t.blockLen = (uint8_t) (rcvLen - 1U); + } + else + { + return ERR_PROTO; + } + + if (rfalNfcvPollerSelect( (uint8_t)RFAL_NFCV_REQ_FLAG_DEFAULT, ctx->device.dev.nfcv.InvRes.UID) == ERR_NONE) + { + ctx->subCtx.t5t.pAddressedUid = NULL; /* Switch to selected mode */ + } + + ctx->subCtx.t5t.sysInfoSupported = false; + + if( !ctx->subCtx.t5t.legacySTHighDensity) + { + /* Extended Get System Info */ + if( ndefT5TGetSystemInformation(ctx, true) == ERR_NONE ) + { + ctx->subCtx.t5t.sysInfoSupported = true; + } + } + if( !ctx->subCtx.t5t.sysInfoSupported ) + { + /* Get System Info */ + if( ndefT5TGetSystemInformation(ctx, false) == ERR_NONE ) + { + ctx->subCtx.t5t.sysInfoSupported = true; + } + } + return result; +} + +/*******************************************************************************/ +ReturnCode ndefT5TPollerNdefDetect(ndefContext * ctx, ndefInfo *info) +{ + ReturnCode result; + uint8_t tmpBuf[NDEF_T5T_TL_MAX_SIZE]; + ReturnCode returnCode = ERR_REQUEST; /* Default return code */ + uint16_t offset; + uint16_t length; + uint32_t TlvOffset; + bool bExit; + uint32_t rcvLen; + + if( (ctx == NULL) || !ndefT5TisT5TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + ctx->state = NDEF_STATE_INVALID; + ctx->cc.t5t.ccLen = 0U; + ctx->cc.t5t.memoryLen = 0U; + ctx->messageLen = 0U; + ctx->messageOffset = 0U; + + if( info != NULL ) + { + info->state = NDEF_STATE_INVALID; + info->majorVersion = 0U; + info->minorVersion = 0U; + info->areaLen = 0U; + info->areaAvalableSpaceLen = 0U; + info->messageLen = 0U; + } + + result = ndefT5TPollerReadBytes(ctx, 0U, 8U, ctx->ccBuf, &rcvLen); + if ( (result == ERR_NONE) && (rcvLen == 8U) && ( (ctx->ccBuf[0] == (uint8_t)0xE1U) || (ctx->ccBuf[0] == (uint8_t)0xE2U) ) ) + { + ctx->cc.t5t.magicNumber = ctx->ccBuf[0U]; + ctx->cc.t5t.majorVersion = (ctx->ccBuf[1U] >> 6U ) & 0x03U; + ctx->cc.t5t.minorVersion = (ctx->ccBuf[1U] >> 4U ) & 0x03U; + ctx->cc.t5t.readAccess = (ctx->ccBuf[1U] >> 2U ) & 0x03U; + ctx->cc.t5t.writeAccess = (ctx->ccBuf[1U] >> 0U ) & 0x03U; + ctx->cc.t5t.memoryLen = ctx->ccBuf[2U]; + ctx->cc.t5t.multipleBlockRead = (((ctx->ccBuf[3U] >> 0U ) & 0x01U) != 0U); + ctx->cc.t5t.mlenOverflow = (((ctx->ccBuf[3U] >> 2U ) & 0x01U) != 0U); + ctx->cc.t5t.lockBlock = (((ctx->ccBuf[3U] >> 3U ) & 0x01U) != 0U); + ctx->cc.t5t.specialFrame = (((ctx->ccBuf[3U] >> 4U ) & 0x01U) != 0U); + ctx->state = NDEF_STATE_INITIALIZED; + + if ( ctx->cc.t5t.memoryLen != 0U) + { + ctx->cc.t5t.ccLen = NDEF_T5T_CC_LEN_4_BYTES; + if( (ctx->cc.t5t.memoryLen == 0xFFU) && ctx->cc.t5t.mlenOverflow ) + { + if( (ctx->subCtx.t5t.sysInfoSupported==true) && ( ndefT5TSysInfoMemSizePresent(ctx->subCtx.t5t.sysInfo.infoFlags) != 0U) ) + { + ctx->cc.t5t.memoryLen = (uint16_t)((ctx->subCtx.t5t.sysInfo.numberOfBlock * ctx->subCtx.t5t.sysInfo.blockSize) / NDEF_T5T_MLEN_DIVIDER); + } + } + } + else + { + ctx->cc.t5t.ccLen = NDEF_T5T_CC_LEN_8_BYTES; + ctx->cc.t5t.memoryLen = ((uint16_t)ctx->ccBuf[6U] << 8U) + (uint16_t)ctx->ccBuf[7U]; + } + if( (ctx->subCtx.t5t.sysInfoSupported==true) && + (ndefT5TSysInfoMemSizePresent(ctx->subCtx.t5t.sysInfo.infoFlags)!= 0U) && + (ctx->cc.t5t.memoryLen == (uint16_t)((ctx->subCtx.t5t.sysInfo.numberOfBlock * ctx->subCtx.t5t.sysInfo.blockSize) / NDEF_T5T_MLEN_DIVIDER)) && + (ctx->cc.t5t.memoryLen > 0U) ) + { + ctx->cc.t5t.memoryLen--; /* remove CC area from memory len */ + } + ctx->messageLen = 0U; + ctx->messageOffset = ctx->cc.t5t.ccLen; + TlvOffset = ctx->cc.t5t.ccLen; + bExit = false; + do + { + result = ndefT5TPollerReadBytes(ctx, TlvOffset, NDEF_T5T_TL_MAX_SIZE, tmpBuf, &rcvLen); + if ( (result != ERR_NONE) || ( rcvLen != NDEF_T5T_TL_MAX_SIZE) ) + { + break; + } + offset = 2U; + length = tmpBuf[1U]; + if ( length == (NDEF_SHORT_VFIELD_MAX_LEN + 1U) ) + { + /* Size is encoded in 1 + 2 bytes */ + length = (((uint16_t)tmpBuf[2U]) << 8U) + (uint16_t)tmpBuf[3U]; + offset += 2U; + } + if (tmpBuf[0U] == (uint8_t)NDEF_T5T_TLV_NDEF) + { + /* NDEF record return it */ + returnCode = ERR_NONE; /* Default */ + ctx->subCtx.t5t.TlvNDEFOffset = TlvOffset; /* Offset for TLV */ + ctx->messageOffset = TlvOffset + offset; + ctx->messageLen = length; + TlvOffset = 0U; + if (length == 0U) + { + /* Req 40 7.5.1.6 */ + if ( (ctx->cc.t5t.readAccess == 0U) && (ctx->cc.t5t.writeAccess == 0U) ) + { + ctx->state = NDEF_STATE_INITIALIZED; + } + else + { + ctx->state = NDEF_STATE_INVALID; + returnCode = ERR_REQUEST; /* Default */ + } + bExit = true; + } + else + { + if (ctx->cc.t5t.readAccess == 0U) + { + if (ctx->cc.t5t.writeAccess == 0U) + { + ctx->state = NDEF_STATE_READWRITE; + } + else + { + ctx->state = NDEF_STATE_READONLY; + } + } + bExit = true; + } + } + else if (tmpBuf[0U]== (uint8_t) NDEF_T5T_TLV_TERMINATOR) + { + /* NDEF end */ + TlvOffset = 0U; + bExit = true; + } + else if (tmpBuf[0U]== (uint8_t) NDEF_T5T_TLV_PROPRIETARY) + { /* proprietary go next, nothing to do */ + TlvOffset += (uint32_t)offset + (uint32_t)length; + } + else + { + /* RFU value */ + TlvOffset = 0U; + bExit = true; + } + } while ( ( TlvOffset > 0U) && (bExit == false) ); + } + else + { + /* No CCFile */ + returnCode = ERR_REQUEST; + if (result != ERR_NONE) + { + returnCode = result; + } + } + + /* TS T5T v1.0 4.3.1.17 T5T_area size is measured in bytes is equal to 8 * MLEN */ + ctx->areaLen = (uint32_t)ctx->cc.t5t.memoryLen * NDEF_T5T_MLEN_DIVIDER; + if( info != NULL ) + { + info->state = ctx->state; + info->majorVersion = ctx->cc.t5t.majorVersion; + info->minorVersion = ctx->cc.t5t.minorVersion; + info->areaLen = ctx->areaLen; + info->areaAvalableSpaceLen = (uint32_t)ctx->cc.t5t.ccLen + ctx->areaLen - ctx->messageOffset; + info->messageLen = ctx->messageLen; + } + return returnCode; +} + +/*******************************************************************************/ +ReturnCode ndefT5TPollerReadRawMessage(ndefContext *ctx, uint8_t *buf, uint32_t bufLen, uint32_t *rcvdLen) +{ + ReturnCode result; + + if( (ctx == NULL) || !ndefT5TisT5TDevice(&ctx->device) || (buf == NULL) ) + { + return ERR_PARAM; + } + + if( ctx->messageLen > bufLen ) + { + return ERR_NOMEM; + } + + result = ndefT5TPollerReadBytes( ctx, ctx->messageOffset, ctx->messageLen, buf, rcvdLen ); + return result; +} + +#if NDEF_FEATURE_ALL + +/*******************************************************************************/ +ReturnCode ndefT5TPollerWriteBytes(ndefContext *ctx, uint32_t offset, const uint8_t * buf, uint32_t len) +{ + ReturnCode result = ERR_REQUEST; + ReturnCode res; + uint16_t nbRead; + uint16_t blockLen16; + uint16_t startBlock; + uint16_t startAddr ; + const uint8_t * wrbuf = buf; + uint32_t currentLen = len; + + if( (ctx == NULL) || !ndefT5TisT5TDevice(&ctx->device) || (len == 0U) || (ctx->subCtx.t5t.blockLen == 0U)) + { + return ERR_PARAM; + } + blockLen16 = (uint16_t )ctx->subCtx.t5t.blockLen; + if( blockLen16 == 0U ) + { + return ERR_SYSTEM; + } + startBlock = (uint16_t) (offset / blockLen16); + startAddr = (uint16_t) (startBlock * blockLen16); + + if (startAddr != offset) + { + /* Unaligned start offset must read the first block before */ + res = ndefT5TPollerReadSingleBlock(ctx, startBlock, ctx->subCtx.t5t.txrxBuf, blockLen16 + 3U, &nbRead); + if ( (res == ERR_NONE) && (ctx->subCtx.t5t.txrxBuf[0U] == 0U) && (nbRead > 0U) ) + { + nbRead = (uint16_t) ((uint32_t)nbRead - 1U + startAddr - offset); + if (nbRead > (uint32_t) currentLen) + { + nbRead = (uint16_t) currentLen; + } + if (nbRead > 0U) + { + (void)ST_MEMCPY(&ctx->subCtx.t5t.txrxBuf[1U - startAddr + (uint16_t)offset], wrbuf, nbRead); + } + res = ndefT5TPollerWriteSingleBlock(ctx, startBlock, &ctx->subCtx.t5t.txrxBuf[1U]); + if (res != ERR_NONE) + { + return res; + } + } + else + { + if (res != ERR_NONE) + { + result = res; + } + else + { + result = ERR_PARAM; + } + return result; + } + currentLen -= nbRead; + wrbuf = &wrbuf[nbRead]; + startBlock++; + } + while (currentLen >= blockLen16) + { + res = ndefT5TPollerWriteSingleBlock(ctx, startBlock, wrbuf); + if (res == ERR_NONE) + { + currentLen -= blockLen16; + wrbuf = &wrbuf[blockLen16]; + startBlock++; + } + else + { + result = res; + break; + } + } + if ( (currentLen != 0U) && (currentLen < blockLen16) ) + { + /* Unaligned end, must read the first block before */ + res = ndefT5TPollerReadSingleBlock(ctx, startBlock, ctx->subCtx.t5t.txrxBuf, blockLen16 + 3U, &nbRead); + if ( (res == ERR_NONE) && (ctx->subCtx.t5t.txrxBuf[0U] == 0U) && (nbRead > 0U) ) + { + if (currentLen > 0U) { (void)ST_MEMCPY(&ctx->subCtx.t5t.txrxBuf[1U], wrbuf, currentLen); } + res = ndefT5TPollerWriteSingleBlock(ctx, startBlock, &ctx->subCtx.t5t.txrxBuf[1U]); + if (res != ERR_NONE) + { + result = res; + } + else + { + currentLen = 0U; + } + } + else + { + if (res != ERR_NONE) + { + result = res; + } + else + { + result = ERR_PARAM; + } + return result; + } + } + if (currentLen == 0U) + { + result = ERR_NONE; + } + return result; +} + +/*******************************************************************************/ +ReturnCode ndefT5TPollerWriteRawMessageLen(ndefContext *ctx, uint32_t rawMessageLen) +{ + uint8_t TLV[8U]; + ReturnCode result = ERR_PARAM; + uint8_t len = 0U; + + if( (ctx != NULL) && ndefT5TisT5TDevice(&ctx->device)) + { + if ( (ctx->state != NDEF_STATE_INITIALIZED) && (ctx->state != NDEF_STATE_READWRITE) ) + { + result = ERR_WRONG_STATE; + } + else + { + TLV[len] = NDEF_T5T_TLV_NDEF; + len++; + if (rawMessageLen <= NDEF_SHORT_VFIELD_MAX_LEN) + { + TLV[len] = (uint8_t) rawMessageLen; + len++; + } + else + { + TLV[len] = (uint8_t) (rawMessageLen >> 8U); + len++; + TLV[len] = (uint8_t) rawMessageLen; + len++; + } + if (rawMessageLen == 0U) + { + TLV[len] = NDEF_TERMINATOR_TLV_T; /* TLV terminator */ + len++; + } + + result = ndefT5TPollerWriteBytes(ctx, ctx->subCtx.t5t.TlvNDEFOffset, TLV, len); + if ((result == ERR_NONE) && (rawMessageLen != 0U)) + { /* T5T need specific terminator */ + len = 0U; + TLV[len] = NDEF_TERMINATOR_TLV_T; /* TLV terminator */ + len++; + result = ndefT5TPollerWriteBytes(ctx, ctx->messageOffset + rawMessageLen, TLV, len ); + } + } + } + return result; +} + +/*******************************************************************************/ +ReturnCode ndefT5TPollerWriteRawMessage(ndefContext *ctx, const uint8_t * buf, uint32_t bufLen) +{ + uint32_t len = bufLen ; + ReturnCode result; + + if( (ctx == NULL) || !ndefT5TisT5TDevice(&ctx->device) || (buf == NULL) ) + { + return ERR_PARAM; + } + + /* TS T5T v1.0 7.5.3.1/2: T5T NDEF Detect should have been called before NDEF write procedure */ + /* Warning: current tag content must not be changed between NDEF Detect procedure and NDEF Write procedure*/ + + /* TS T5T v1.0 7.5.3.3: check write access condition */ + if ( (ctx->state != NDEF_STATE_INITIALIZED) && (ctx->state != NDEF_STATE_READWRITE) ) + { + /* Conclude procedure */ + return ERR_WRONG_STATE; + } + + /* TS T5T v1.0 7.5.3.3: verify available space */ + result = ndefT5TPollerCheckAvailableSpace(ctx, bufLen); + if( result != ERR_NONE ) + { + /* Conclude procedures */ + return ERR_PARAM; + } + /* TS T5T v1.0 7.5.3.4: reset L-Field to 0 */ + /* and update ctx->messageOffset according to L-field len */ + result = ndefT5TPollerBeginWriteMessage(ctx, bufLen); + if (result != ERR_NONE) + { + ctx->state = NDEF_STATE_INVALID; + /* Conclude procedure */ + return result; + } + if( bufLen != 0U ) + { + /* TS T5T v1.0 7.5.3.5: write new NDEF message */ + result = ndefT5TPollerWriteBytes(ctx, ctx->messageOffset, buf, len); + if (result != ERR_NONE) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return result; + } + /* TS T5T v1.0 7.5.3.6 & 7.5.3.7: update L-Field and write Terminator TLV */ + result = ndefT5TPollerEndWriteMessage(ctx, len); + if (result != ERR_NONE) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return result; + } + } + return result; +} + +/*******************************************************************************/ +static ReturnCode ndefT5TWriteCC(ndefContext *ctx) +{ + ReturnCode ret; + uint8_t* buf; + uint8_t dataIt; + + if( (ctx == NULL) || !ndefT5TisT5TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + buf = ctx->ccBuf; + dataIt = 0U; + /* Encode CC */ + buf[dataIt] = ctx->cc.t5t.magicNumber; /* Byte 0 */ + dataIt++; + buf[dataIt] = (uint8_t)(((ctx->cc.t5t.majorVersion & 0x03U) << 6) | /* Byte 1 */ + ((ctx->cc.t5t.minorVersion & 0x03U) << 4) | /* */ + ((ctx->cc.t5t.readAccess & 0x03U) << 2) | /* */ + ((ctx->cc.t5t.writeAccess & 0x03U) << 0)); /* */ + dataIt++; + buf[dataIt] = (ctx->cc.t5t.ccLen == NDEF_T5T_CC_LEN_8_BYTES) ? 0U : (uint8_t)ctx->cc.t5t.memoryLen; /* Byte 2 */ + dataIt++; + buf[dataIt] = 0U; /* Byte 3 */ + if( ctx->cc.t5t.multipleBlockRead ) { buf[dataIt] |= 0x01U; } /* Byte 3 b0 MBREAD */ + if( ctx->cc.t5t.mlenOverflow ) { buf[dataIt] |= 0x04U; } /* Byte 3 b2 Android MLEN overflow */ + if( ctx->cc.t5t.lockBlock ) { buf[dataIt] |= 0x08U; } /* Byte 3 b3 Lock Block */ + if( ctx->cc.t5t.specialFrame ) { buf[dataIt] |= 0x10U; } /* Byte 3 b4 Special Frame */ + dataIt++; + if( ctx->cc.t5t.ccLen == NDEF_T5T_CC_LEN_8_BYTES ) + { + buf[dataIt] = 0U; /* Byte 4 */ + dataIt++; + buf[dataIt] = 0U; /* Byte 5 */ + dataIt++; + buf[dataIt] = (uint8_t)(ctx->cc.t5t.memoryLen >> 8); /* Byte 6 */ + dataIt++; + buf[dataIt] = (uint8_t)(ctx->cc.t5t.memoryLen >> 0); /* Byte 7 */ + dataIt++; + } + + ret = ndefT5TPollerWriteBytes(ctx, 0U, buf, ctx->cc.t5t.ccLen ); + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT5TPollerTagFormat(ndefContext * ctx, const ndefCapabilityContainer *cc, uint32_t options) +{ + uint16_t rcvdLen; + ReturnCode result; + static const uint8_t emptyNDEF[] = { 0x03U, 0x00U, 0xFEU, 0x00U}; + + if( (ctx == NULL) || !ndefT5TisT5TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + /* Reset previous potential info about NDEF messages */ + ctx->messageLen = 0U; + ctx->messageOffset = 0U; + ctx->subCtx.t5t.TlvNDEFOffset = 0U; + + if( cc != NULL ) + { + if( (cc->t5t.ccLen != NDEF_T5T_CC_LEN_8_BYTES) && (cc->t5t.ccLen != NDEF_T5T_CC_LEN_4_BYTES) ) + { + return ERR_PARAM; + } + (void)ST_MEMCPY(&ctx->cc, cc, sizeof(ndefCapabilityContainer)); + } + else + { + /* Try to find the appropriate cc values */ + ctx->cc.t5t.magicNumber = NDEF_T5T_CC_MAGIC_1_BYTE_ADDR_MODE; /* E1 */ + ctx->cc.t5t.majorVersion = 1U; + ctx->cc.t5t.minorVersion = 0U; + ctx->cc.t5t.readAccess = 0U; + ctx->cc.t5t.writeAccess = 0U; + ctx->cc.t5t.lockBlock = false; + ctx->cc.t5t.specialFrame = false; + ctx->cc.t5t.memoryLen = 0U; + ctx->cc.t5t.mlenOverflow = false; + + result = ndefT5TPollerReadMultipleBlocks(ctx, 0U, 0U, ctx->subCtx.t5t.txrxBuf, (uint16_t)sizeof(ctx->subCtx.t5t.txrxBuf), &rcvdLen); + ctx->cc.t5t.multipleBlockRead = (result == ERR_NONE) ? true : false; + + /* Try to retrieve the tag's size using getSystemInfo and GetExtSystemInfo */ + + if ( (ctx->subCtx.t5t.sysInfoSupported==true) && (ndefT5TSysInfoMemSizePresent(ctx->subCtx.t5t.sysInfo.infoFlags)!=0U) ) + { + ctx->cc.t5t.memoryLen = (uint16_t)((ctx->subCtx.t5t.sysInfo.numberOfBlock * ctx->subCtx.t5t.sysInfo.blockSize) / NDEF_T5T_MLEN_DIVIDER); + + if( (options & NDEF_T5T_FORMAT_OPTION_NFC_FORUM) == NDEF_T5T_FORMAT_OPTION_NFC_FORUM ) /* NFC Forum format */ + { + if( ctx->cc.t5t.memoryLen >= NDEF_T5T_MAX_MLEN_1_BYTE_ENCODING ) + { + ctx->cc.t5t.ccLen = NDEF_T5T_CC_LEN_8_BYTES; + } + if( ctx->cc.t5t.memoryLen > 0U ) + { + ctx->cc.t5t.memoryLen--; /* remove CC area from memory len */ + } + } + else /* Android format */ + { + ctx->cc.t5t.ccLen = NDEF_T5T_CC_LEN_4_BYTES; + if( ctx->cc.t5t.memoryLen >= NDEF_T5T_MAX_MLEN_1_BYTE_ENCODING ) + { + ctx->cc.t5t.mlenOverflow = true; + ctx->cc.t5t.memoryLen = 0xFFU; + } + } + + if( !ctx->subCtx.t5t.legacySTHighDensity && (ctx->subCtx.t5t.sysInfo.numberOfBlock > NDEF_T5T_MAX_BLOCK_1_BYTE_ADDR) ) + { + ctx->cc.t5t.magicNumber = NDEF_T5T_CC_MAGIC_2_BYTE_ADDR_MODE; /* E2 */ + } + } + else + { + return ERR_REQUEST; + } + } + + result = ndefT5TWriteCC(ctx); + if( result != ERR_NONE ) + { + /* If write fails, try to use special frame if not yet used */ + if( !ctx->cc.t5t.specialFrame ) + { + platformDelay(20U); /* Wait to be sure that previous command has ended */ + ctx->cc.t5t.specialFrame = true; /* Add option flag */ + result = ndefT5TWriteCC(ctx); + if( result != ERR_NONE ) + { + ctx->cc.t5t.specialFrame = false; /* Add option flag */ + return result; + } + } + else + { + return result; + } + } + /* Update info about current NDEF */ + + ctx->subCtx.t5t.TlvNDEFOffset = ctx->cc.t5t.ccLen; + + result = ndefT5TPollerWriteBytes(ctx, ctx->subCtx.t5t.TlvNDEFOffset, emptyNDEF, sizeof(emptyNDEF) ); + if (result == ERR_NONE) + { + /* Update info about current NDEF */ + ctx->messageOffset = (uint32_t)ctx->cc.t5t.ccLen + 0x02U; + ctx->state = NDEF_STATE_INITIALIZED; + } + return result; +} + +/*******************************************************************************/ +ReturnCode ndefT5TPollerCheckPresence(ndefContext *ctx) +{ + ReturnCode ret; + uint16_t blockAddr; + uint16_t rcvLen; + + if( (ctx == NULL) || !ndefT5TisT5TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + blockAddr = 0U; + + ret = ndefT5TPollerReadSingleBlock( ctx, blockAddr, ctx->subCtx.t5t.txrxBuf, (uint16_t)sizeof(ctx->subCtx.t5t.txrxBuf), &rcvLen ); + + return ret; +} + +/*******************************************************************************/ +ReturnCode ndefT5TPollerCheckAvailableSpace(const ndefContext *ctx, uint32_t messageLen) +{ + uint32_t lLen; + + if( (ctx == NULL) || !ndefT5TisT5TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if ( ctx->state == NDEF_STATE_INVALID ) + { + return ERR_WRONG_STATE; + } + + lLen = ( messageLen > NDEF_SHORT_VFIELD_MAX_LEN) ? NDEF_T5T_TLV_L_3_BYTES_LEN : NDEF_T5T_TLV_L_1_BYTES_LEN; + + if( (messageLen + ctx->subCtx.t5t.TlvNDEFOffset + NDEF_T5T_TLV_T_LEN + lLen) > (ctx->areaLen + ctx->cc.t5t.ccLen) ) + { + return ERR_NOMEM; + } + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT5TPollerBeginWriteMessage(ndefContext *ctx, uint32_t messageLen) +{ + ReturnCode ret; + uint32_t lLen; + + if( (ctx == NULL) || !ndefT5TisT5TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if( (ctx->state != NDEF_STATE_INITIALIZED) && (ctx->state != NDEF_STATE_READWRITE) ) + { + return ERR_WRONG_STATE; + } + + /* TS T5T v1.0 7.5.3.4: reset L-Field to 0 */ + ret = ndefT5TPollerWriteRawMessageLen(ctx, 0U); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return ret; + } + + lLen = ( messageLen > NDEF_SHORT_VFIELD_MAX_LEN) ? NDEF_T5T_TLV_L_3_BYTES_LEN : NDEF_T5T_TLV_L_1_BYTES_LEN; + ctx->messageOffset = ctx->subCtx.t5t.TlvNDEFOffset; + ctx->messageOffset += NDEF_T5T_TLV_T_LEN; /* T Len */ + ctx->messageOffset += lLen; /* L Len */ + ctx->state = NDEF_STATE_INITIALIZED; + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode ndefT5TPollerEndWriteMessage(ndefContext *ctx, uint32_t messageLen) +{ + ReturnCode ret; + + if( (ctx == NULL) || !ndefT5TisT5TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if( ctx->state != NDEF_STATE_INITIALIZED ) + { + return ERR_WRONG_STATE; + } + + /* TS T5T v1.0 7.5.3.6 & 7.5.3.7: update L-Field and write Terminator TLV */ + ret = ndefT5TPollerWriteRawMessageLen(ctx, messageLen); + if( ret != ERR_NONE ) + { + /* Conclude procedure */ + ctx->state = NDEF_STATE_INVALID; + return ret; + } + ctx->messageLen = messageLen; + ctx->state = (ctx->messageLen == 0U) ? NDEF_STATE_INITIALIZED : NDEF_STATE_READWRITE; + return ERR_NONE; +} + +/*******************************************************************************/ +static ReturnCode ndefT5TPollerWriteSingleBlock(ndefContext *ctx, uint16_t blockNum, const uint8_t* wrData) +{ + ReturnCode ret; + uint8_t flags; + + if( (ctx == NULL) || !ndefT5TisT5TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + flags = ctx->cc.t5t.specialFrame ? ((uint8_t)RFAL_NFCV_REQ_FLAG_DEFAULT | (uint8_t)RFAL_NFCV_REQ_FLAG_OPTION): (uint8_t)RFAL_NFCV_REQ_FLAG_DEFAULT; + + if( ctx->subCtx.t5t.legacySTHighDensity ) + { + ret = rfalST25xVPollerM24LRWriteSingleBlock(flags, ctx->subCtx.t5t.pAddressedUid, blockNum, wrData, ctx->subCtx.t5t.blockLen); + } + else + { + if( blockNum < NDEF_T5T_MAX_BLOCK_1_BYTE_ADDR ) + { + ret = rfalNfcvPollerWriteSingleBlock(flags, ctx->subCtx.t5t.pAddressedUid, (uint8_t)blockNum, wrData, ctx->subCtx.t5t.blockLen); + } + else + { + ret = rfalNfcvPollerExtendedWriteSingleBlock(flags, ctx->subCtx.t5t.pAddressedUid, blockNum, wrData, ctx->subCtx.t5t.blockLen); + } + } + + return ret; +} + +/*******************************************************************************/ +static ReturnCode ndefT5TPollerReadMultipleBlocks(ndefContext *ctx, uint16_t firstBlockNum, uint8_t numOfBlocks, uint8_t *rxBuf, uint16_t rxBufLen, uint16_t *rcvLen) +{ + ReturnCode ret; + + if( (ctx == NULL) || !ndefT5TisT5TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if( ctx->subCtx.t5t.legacySTHighDensity ) + { + + ret = rfalST25xVPollerM24LRReadMultipleBlocks((uint8_t)RFAL_NFCV_REQ_FLAG_DEFAULT, ctx->subCtx.t5t.pAddressedUid, firstBlockNum, numOfBlocks, rxBuf, rxBufLen, rcvLen); + } + else + { + if( firstBlockNum < NDEF_T5T_MAX_BLOCK_1_BYTE_ADDR ) + { + ret = rfalNfcvPollerReadMultipleBlocks((uint8_t)RFAL_NFCV_REQ_FLAG_DEFAULT, ctx->subCtx.t5t.pAddressedUid, (uint8_t)firstBlockNum, numOfBlocks, rxBuf, rxBufLen, rcvLen); + } + else + { + ret = rfalNfcvPollerExtendedReadMultipleBlocks((uint8_t)RFAL_NFCV_REQ_FLAG_DEFAULT, ctx->subCtx.t5t.pAddressedUid, firstBlockNum, numOfBlocks, rxBuf, rxBufLen, rcvLen); + } + } + + return ret; +} + +#endif /* NDEF_FEATURE_ALL */ + +/*******************************************************************************/ +static ReturnCode ndefT5TPollerReadSingleBlock(ndefContext *ctx, uint16_t blockNum, uint8_t *rxBuf, uint16_t rxBufLen, uint16_t *rcvLen) +{ + ReturnCode ret; + + if( (ctx == NULL) || !ndefT5TisT5TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if( ctx->subCtx.t5t.legacySTHighDensity ) + { + + ret = rfalST25xVPollerM24LRReadSingleBlock((uint8_t)RFAL_NFCV_REQ_FLAG_DEFAULT, ctx->subCtx.t5t.pAddressedUid, blockNum, rxBuf, rxBufLen, rcvLen); + } + else + { + if( blockNum < NDEF_T5T_MAX_BLOCK_1_BYTE_ADDR ) + { + ret = rfalNfcvPollerReadSingleBlock((uint8_t)RFAL_NFCV_REQ_FLAG_DEFAULT, ctx->subCtx.t5t.pAddressedUid, (uint8_t)blockNum, rxBuf, rxBufLen, rcvLen); + } + else + { + ret = rfalNfcvPollerExtendedReadSingleBlock((uint8_t)RFAL_NFCV_REQ_FLAG_DEFAULT, ctx->subCtx.t5t.pAddressedUid, blockNum, rxBuf, rxBufLen, rcvLen); + } + } + + return ret; +} + +/*******************************************************************************/ +static ReturnCode ndefT5TGetSystemInformation(ndefContext *ctx, bool extended) +{ + ReturnCode ret; + uint8_t rxBuf[NDEF_T5T_SYSINFO_MAX_LEN]; + uint16_t rcvLen; + uint8_t* resp; + + if( (ctx == NULL) || !ndefT5TisT5TDevice(&ctx->device) ) + { + return ERR_PARAM; + } + + if( extended ) + { + ret = rfalNfcvPollerExtendedGetSystemInformation((uint8_t)RFAL_NFCV_REQ_FLAG_DEFAULT, ctx->subCtx.t5t.pAddressedUid, (uint8_t)RFAL_NFCV_SYSINFO_REQ_ALL, rxBuf, (uint16_t)sizeof(rxBuf), &rcvLen); + } + else + { + ret = rfalNfcvPollerGetSystemInformation(ctx->subCtx.t5t.legacySTHighDensity ? ((uint8_t)RFAL_NFCV_REQ_FLAG_DEFAULT | (uint8_t)RFAL_NFCV_REQ_FLAG_PROTOCOL_EXT) : ((uint8_t)RFAL_NFCV_REQ_FLAG_DEFAULT), ctx->subCtx.t5t.pAddressedUid, rxBuf, (uint16_t)sizeof(rxBuf), &rcvLen); + } + + if( ret != ERR_NONE ) + { + return ret; + } + + /* FIXME check buf rcvLen */ + resp = &rxBuf[0U]; + /* skip Flags */ + resp++; + /* get Info flags */ + ctx->subCtx.t5t.sysInfo.infoFlags = *resp; + resp++; + if( extended && (ndefT5TSysInfoLenValue(ctx->subCtx.t5t.sysInfo.infoFlags) != 0U) ) + { + return ERR_PROTO; + } + /* get UID */ + (void)ST_MEMCPY(ctx->subCtx.t5t.sysInfo.UID, resp, RFAL_NFCV_UID_LEN); + resp = &resp[RFAL_NFCV_UID_LEN]; + if( ndefT5TSysInfoDFSIDPresent(ctx->subCtx.t5t.sysInfo.infoFlags) != 0U) + { + ctx->subCtx.t5t.sysInfo.DFSID = *resp; + resp++; + } + if( ndefT5TSysInfoAFIPresent(ctx->subCtx.t5t.sysInfo.infoFlags) != 0U ) + { + ctx->subCtx.t5t.sysInfo.AFI = *resp; + resp++; + } + if( ndefT5TSysInfoMemSizePresent(ctx->subCtx.t5t.sysInfo.infoFlags) != 0U ) + { + if ( ctx->subCtx.t5t.legacySTHighDensity || extended ) + { + /* LRIS64K/M24LR16/M24LR64 */ + ctx->subCtx.t5t.sysInfo.numberOfBlock = *resp; + resp++; + ctx->subCtx.t5t.sysInfo.numberOfBlock |= (((uint16_t)*resp) << 8U); + resp++; + } + else + { + ctx->subCtx.t5t.sysInfo.numberOfBlock = *resp; + resp++; + } + ctx->subCtx.t5t.sysInfo.blockSize = *resp; + resp++; + /* Add 1 to get real values*/ + ctx->subCtx.t5t.sysInfo.numberOfBlock++; + ctx->subCtx.t5t.sysInfo.blockSize++; + } + if( ndefT5TSysInfoICRefPresent(ctx->subCtx.t5t.sysInfo.infoFlags) != 0U ) + { + ctx->subCtx.t5t.sysInfo.ICRef = *resp; + resp++; + } + if( extended && (ndefT5TSysInfoCmdListPresent(ctx->subCtx.t5t.sysInfo.infoFlags) != 0U) ) + { + ctx->subCtx.t5t.sysInfo.supportedCmd[0U] = *resp; + resp++; + ctx->subCtx.t5t.sysInfo.supportedCmd[1U] = *resp; + resp++; + ctx->subCtx.t5t.sysInfo.supportedCmd[2U] = *resp; + resp++; + ctx->subCtx.t5t.sysInfo.supportedCmd[3U] = *resp; + resp++; + } + return ERR_NONE; +} + +#endif /* RFAL_FEATURE_NFCV */ diff --git a/Software/Middlewares/ST/ndef/doc/changelog.txt b/Software/Middlewares/ST/ndef/doc/changelog.txt new file mode 100644 index 0000000..8ca5d96 --- /dev/null +++ b/Software/Middlewares/ST/ndef/doc/changelog.txt @@ -0,0 +1,57 @@ +====================== +NDEF library changelog +====================== + + +=================================================================================================== + +v1.0.4 (July 22th, 2019) +Tested with RFAL 2.0.10 +Updates to fix MISRA warnings reported by IAR + +=================================================================================================== + +v1.0.2 (April 11th, 2019) +Release of RFAL v2.0.6, providing Higher Layer API. + +=================================================================================================== + +v1.0.0 (March 29th, 2019) +sha1: 22084be2253ae0c4696865884abd99ed9cbee319 +============================================== + +Initial NDEF library release + +The NDEF library provides an API to NDEF message and record management. + +The Software design is split in RF Technology-independent layer and RF Technology-dependent layer: + - Message, record and supported types management layer (Technology independent) + - NDEF wrapper layer abstracting the underlying technologies + - NDEF Technology layer defining a common API on top of the RFAL (Technology dependent) + +The NDEF wrapper on top of the NDEF Technology-dependent components allows to manage NDEF tags without +taking care of the underlying NFC Technologies. + +The types currently supported are the following: + - RTD Device Information + - RTD Text + - RTD URI + - AAR (Android Application Record) + - vCard + - Wifi + +The NFC technologies currently supported by the NDEF layer are: T2T, T3T, T4AT, T4BT and T5T. + +See the ndef.chm documentation for further details and use examples. + +Tested on hardware: Nucleo STM32L476RG + X-NUCLEO-NFC05A1 (ST25R3911) +Software dependency: RFAL above v2.0.4 (needs RFAL Higher Layer) +C99, MISRA C 2012 compliant + +Tests: +------ + - Unitary tests: Passed + - Smoke tests: Write supported types (T2T, T3T, T4AT, T4BT, T5T): Passed + Read supported types (T2T, T3T, T4AT, T4BT, T5T): Passed + Check presence (T2T, T3T, T4AT, T4BT, T5T): Passed + Format (T2T, T3T, T4AT, T4BT, T5T): Passed diff --git a/Software/Middlewares/ST/ndef/doc/examples/ndef_example_read.c b/Software/Middlewares/ST/ndef/doc/examples/ndef_example_read.c new file mode 100644 index 0000000..adf0d24 --- /dev/null +++ b/Software/Middlewares/ST/ndef/doc/examples/ndef_example_read.c @@ -0,0 +1,278 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ +/* \file ndef_example_read.c + * + * \example ndef_example_read.c + * + * \author + * + * \brief NDEF Read example code + * + * This demo shows how to poll for several types of NFC cards/devices and how + * to Read NDEF using the RFAL and NDEF libraries. + * + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "utils.h" +#include "rfal_nfc.h" +#include "ndef_poller.h" +#include "ndef_message.h" +#include "ndef_types_rtd.h" +#include "ndef_types_mime.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define DEMO_RAW_MESSAGE_BUF_LEN 8192 /*!< raw message buffer size */ + + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + +static rfalNfcDevice *nfcDevice; +static rfalNfcDiscoverParam discParam = +{ + .compMode = RFAL_COMPLIANCE_MODE_NFC, + .devLimit = 1U, + .nfcfBR = RFAL_BR_212, + .ap2pBR = RFAL_BR_424, + .nfcid3 = NULL, + .GB = NULL, + .GBLen = 0, + .notifyCb = NULL, + .totalDuration = 1000U, + .wakeupEnabled = false, + .wakeupConfigDefault = true, + .techs2Find = ( RFAL_NFC_POLL_TECH_A | RFAL_NFC_POLL_TECH_B | RFAL_NFC_POLL_TECH_F | RFAL_NFC_POLL_TECH_V ) +}; + +static ndefContext ndefCtx; +static uint8_t rawMessageBuf[DEMO_RAW_MESSAGE_BUF_LEN]; + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ +void ndefExampleParseMessage(uint8_t* rawMsgBuf, uint32_t rawMsgLen); +void ndefExampleParseRecord(ndefRecord *record); +void ndefExamplePrintString(const uint8_t* str, uint32_t strLen); + +/*! + ***************************************************************************** + * \brief ndefExampleRead + * + * This function performs the various NFC activities up to the NDEF tag reading + ***************************************************************************** + */ +void ndefExampleRead( void ) +{ + ReturnCode err; + uint32_t rawMessageLen; + + /* + * RFAL Init + */ + err = rfalNfcInitialize(); + if( err != ERR_NONE ) + { + platformLog("rfalNfcInitialize return %d\r\n", err); + return; + } + + rfalNfcDeactivate( false ); + rfalNfcDiscover( &discParam ); + + /* + * Read loop + */ + while (1) + { + rfalNfcWorker(); + if( rfalNfcIsDevActivated(rfalNfcGetState()) ) + { + /* + * Retrieve NFC device + */ + rfalNfcGetActiveDevice(&nfcDevice); + + /* + * Perform NDEF Context Initialization + */ + err = ndefPollerContextInitialization(&ndefCtx, nfcDevice); + if( err != ERR_NONE ) + { + platformLog("NDEF NOT DETECTED (ndefPollerContextInitialization returns %d)\r\n", err); + return; + } + + /* + * Perform NDEF Detect procedure + */ + err = ndefPollerNdefDetect(&ndefCtx, NULL); + if( err != ERR_NONE ) + { + platformLog("NDEF NOT DETECTED (ndefPollerNdefDetect returns %d)\r\n", err); + return; + } + + /* + * Perform NDEF read procedure + */ + err = ndefPollerReadRawMessage(&ndefCtx, rawMessageBuf, sizeof(rawMessageBuf), &rawMessageLen); + if( err != ERR_NONE ) + { + platformLog("NDEF message cannot be read (ndefPollerReadRawMessage returns %d)\r\n", err); + return; + } + + platformLog("NDEF Read successful\r\n"); + + /* + * Parse message content + */ + ndefExampleParseMessage(rawMessageBuf, rawMessageLen); + + return; + } + } +} + +/*! + ***************************************************************************** + * \brief ndefExampleParseMessage + * + * This function parses the NDEF message + ***************************************************************************** + */ +void ndefExampleParseMessage(uint8_t* rawMsgBuf, uint32_t rawMsgLen) +{ + ReturnCode err; + ndefConstBuffer bufRawMessage; + ndefMessage message; + ndefRecord* record; + + bufRawMessage.buffer = rawMsgBuf; + bufRawMessage.length = rawMsgLen; + + err = ndefMessageDecode(&bufRawMessage, &message); + if (err != ERR_NONE) + { + return; + } + + record = ndefMessageGetFirstRecord(&message); + + while (record != NULL) + { + ndefExampleParseRecord(record); + record = ndefMessageGetNextRecord(record); + } +} + +/*! + ***************************************************************************** + * \brief ndefExamplePrintString + * + * This function prints a String of a given Length + ***************************************************************************** + */ +void ndefExamplePrintString(const uint8_t* str, uint32_t strLen) +{ + uint32_t i; + const uint8_t* c; + + i = strLen; + c = str; + + while (i-- > 0U) + { + platformLog("%c", *c); + c++; + } + platformLog("\r\n"); +} + +/*! + ***************************************************************************** + * \brief ndefExampleParseRecord + * + * This function parses a given record + ***************************************************************************** + */ +void ndefExampleParseRecord(ndefRecord* record) +{ + ReturnCode err; + ndefType type; + + err = ndefRecordToType(record, &type); + if (err != ERR_NONE) + { + return; + } + + switch (type.id) + { + case NDEF_TYPE_EMPTY: + platformLog(" * Empty record\r\n"); + break; + case NDEF_TYPE_RTD_TEXT: + platformLog(" * TEXT record: "); + ndefExamplePrintString(type.data.text.bufSentence.buffer, type.data.text.bufSentence.length); + break; + case NDEF_TYPE_RTD_URI: + platformLog(" * URI record: "); + ndefExamplePrintString(type.data.uri.bufUriString.buffer, type.data.uri.bufUriString.length); + break; + case NDEF_TYPE_RTD_AAR: + platformLog(" * AAR record: "); + ndefExamplePrintString(type.data.aar.bufPayload.buffer, type.data.aar.bufPayload.length); + break; + case NDEF_TYPE_RTD_DEVICE_INFO: + platformLog(" * Device Info record\r\n"); + break; + case NDEF_TYPE_MEDIA_VCARD: + platformLog(" * vCard record\r\n"); + break; + case NDEF_TYPE_MEDIA_WIFI: + platformLog(" * WIFI record\r\n"); + break; + default: + platformLog(" * Other record\r\n"); + break; + } +} + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Middlewares/ST/ndef/doc/examples/ndef_example_write.c b/Software/Middlewares/ST/ndef/doc/examples/ndef_example_write.c new file mode 100644 index 0000000..d3516b0 --- /dev/null +++ b/Software/Middlewares/ST/ndef/doc/examples/ndef_example_write.c @@ -0,0 +1,174 @@ +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2019 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ +/* \file ndef_example_write.c + * + * \example ndef_example_write.c + * + * \author + * + * \brief NDEF Write example code + * + * This demo shows how to poll for several types of NFC cards/devices and how + * to Encode and Write an NDEF message using the RFAL and NDEF libraries. + * + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "utils.h" +#include "rfal_nfc.h" +#include "ndef_poller.h" +#include "ndef_message.h" +#include "ndef_types_rtd.h" +#include "ndef_types_mime.h" + + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + +static rfalNfcDevice *nfcDevice; +static rfalNfcDiscoverParam discParam = +{ + .compMode = RFAL_COMPLIANCE_MODE_NFC, + .devLimit = 1U, + .nfcfBR = RFAL_BR_212, + .ap2pBR = RFAL_BR_424, + .nfcid3 = NULL, + .GB = NULL, + .GBLen = 0, + .notifyCb = NULL, + .totalDuration = 1000U, + .wakeupEnabled = false, + .wakeupConfigDefault = true, + .techs2Find = ( RFAL_NFC_POLL_TECH_A | RFAL_NFC_POLL_TECH_B | RFAL_NFC_POLL_TECH_F | RFAL_NFC_POLL_TECH_V ) +}; + +static ndefContext ndefCtx; + + +/*! + ***************************************************************************** + * \brief ndefExampleWrite + * + * This function performs the various NFC activities up to the NDEF tag writing + ***************************************************************************** + */ +void ndefExampleWrite( void ) +{ + ReturnCode err; + ndefConstBuffer bufUri; + ndefType uri; + ndefRecord record; + ndefMessage message; + static uint8_t ndefURI[] = "st.com"; + + /* + * Message creation + */ + err = ndefMessageInit(&message); /* Initialize message structure */ + bufUri.buffer = ndefURI; + bufUri.length = strlen((char *)ndefURI); + err |= ndefRtdUri(&uri, NDEF_URI_PREFIX_HTTP_WWW, &bufUri); /* Initialize URI type structure */ + err |= ndefRtdUriToRecord(&uri, &record); /* Encode URI Record */ + err |= ndefMessageAppend(&message, &record); /* Append URI to message */ + if( err != ERR_NONE ) + { + platformLog("Message creation failed\r\n", err); + return; + } + + /* + * RFAL Init + */ + err = rfalNfcInitialize(); + if( err != ERR_NONE ) + { + platformLog("rfalNfcInitialize return %d\r\n", err); + return; + } + + rfalNfcDeactivate( false ); + rfalNfcDiscover( &discParam ); + + /* + * Write loop + */ + while (1) + { + rfalNfcWorker(); + if( rfalNfcIsDevActivated(rfalNfcGetState()) ) + { + /* + * Retrieve NFC device + */ + rfalNfcGetActiveDevice(&nfcDevice); + + /* + * Perform NDEF Context Initialization + */ + err = ndefPollerContextInitialization(&ndefCtx, nfcDevice); + if( err != ERR_NONE ) + { + platformLog("NDEF NOT DETECTED (ndefPollerContextInitialization returns %d)\r\n", err); + return; + } + + /* + * Perform NDEF Detect procedure + */ + err = ndefPollerNdefDetect(&ndefCtx, NULL); + if( err != ERR_NONE ) + { + platformLog("NDEF NOT DETECTED (ndefPollerNdefDetect returns %d)\r\n", err); + return; + } + + /* + * Perform NDEF write procedure + */ + err = ndefPollerWriteMessage(&ndefCtx, &message); + if( err != ERR_NONE ) + { + platformLog("NDEF message cannot be written (ndefPollerReadRawMessage returns %d)\r\n", err); + return; + } + + platformLog("NDEF Write successful\r\n"); + return; + } + } +} + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/Middlewares/ST/ndef/doc/ndef.chm b/Software/Middlewares/ST/ndef/doc/ndef.chm new file mode 100644 index 0000000000000000000000000000000000000000..564b269b361a2ddb2e7886729d8a422d3c28ea85 GIT binary patch literal 837404 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

qv>`=GH_2XXG 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

Jp4-6KJ(ffy;fiv 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ÿMA3!Me;$_v_ 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 z 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

vMhN4N~?#(sN!* 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

^T#< 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

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_AnalogConfig.h + * + * \author bkam + * + * \brief RF Chip Analog Configuration Settings + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-HAL + * \brief RFAL Hardware Abstraction Layer + * @{ + * + * \addtogroup AnalogConfig + * \brief RFAL Analog Config Module + * @{ + * + */ + +#ifndef RFAL_ANALOG_CONFIG_H +#define RFAL_ANALOG_CONFIG_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" + +/* + ****************************************************************************** + * DEFINES + ****************************************************************************** + */ + +#define RFAL_ANALOG_CONFIG_LUT_SIZE (87U) /*!< Maximum number of Configuration IDs in the Loop Up Table */ +#define RFAL_ANALOG_CONFIG_LUT_NOT_FOUND (0xFFU) /*!< Index value indicating no Configuration IDs found */ + +#define RFAL_ANALOG_CONFIG_TBL_SIZE (1024U) /*!< Maximum number of Register-Mask-Value in the Setting List */ + + +#define RFAL_ANALOG_CONFIG_POLL_LISTEN_MODE_MASK (0x8000U) /*!< Mask bit of Poll Mode in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_TECH_MASK (0x7F00U) /*!< Mask bits for Technology in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_BITRATE_MASK (0x00F0U) /*!< Mask bits for Bit rate in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_DIRECTION_MASK (0x0003U) /*!< Mask bits for Direction in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_CHIP_SPECIFIC_MASK (0x00FFU) /*!< Mask bits for Chip Specific Technology */ + +#define RFAL_ANALOG_CONFIG_POLL_LISTEN_MODE_SHIFT (15U) /*!< Shift value of Poll Mode in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_TECH_SHIFT (8U) /*!< Shift value for Technology in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_BITRATE_SHIFT (4U) /*!< Shift value for Technology in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_DIRECTION_SHIFT (0U) /*!< Shift value for Direction in Analog Configuration ID */ + +#define RFAL_ANALOG_CONFIG_POLL (0x0000U) /*!< Poll Mode bit setting in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_LISTEN (0x8000U) /*!< Listen Mode bit setting in Analog Configuration ID */ + +#define RFAL_ANALOG_CONFIG_TECH_CHIP (0x0000U) /*!< Chip-Specific bit setting in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_TECH_NFCA (0x0100U) /*!< NFC-A Technology bits setting in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_TECH_NFCB (0x0200U) /*!< NFC-B Technology bits setting in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_TECH_NFCF (0x0400U) /*!< NFC-F Technology bits setting in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_TECH_AP2P (0x0800U) /*!< AP2P Technology bits setting in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_TECH_NFCV (0x1000U) /*!< NFC-V Technology bits setting in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_TECH_RFU (0x2000U) /*!< RFU for Technology bits */ + +#define RFAL_ANALOG_CONFIG_BITRATE_COMMON (0x0000U) /*!< Common settings for all bit rates in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_BITRATE_106 (0x0010U) /*!< 106kbits/s settings in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_BITRATE_212 (0x0020U) /*!< 212kbits/s settings in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_BITRATE_424 (0x0030U) /*!< 424kbits/s settings in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_BITRATE_848 (0x0040U) /*!< 848kbits/s settings in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_BITRATE_1695 (0x0050U) /*!< 1695kbits/s settings in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_BITRATE_3390 (0x0060U) /*!< 3390kbits/s settings in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_BITRATE_6780 (0x0070U) /*!< 6780kbits/s settings in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_BITRATE_1OF4 (0x00C0U) /*!< 1 out of 4 for NFC-V setting in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_BITRATE_1OF256 (0x00D0U) /*!< 1 out of 256 for NFC-V setting in Analog Configuration ID */ + +#define RFAL_ANALOG_CONFIG_NO_DIRECTION (0x0000U) /*!< No direction setting in Analog Conf ID (Chip Specific only) */ +#define RFAL_ANALOG_CONFIG_TX (0x0001U) /*!< Transmission bit setting in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_RX (0x0002U) /*!< Reception bit setting in Analog Configuration ID */ +#define RFAL_ANALOG_CONFIG_ANTICOL (0x0003U) /*!< Anticollision setting in Analog Configuration ID */ + +#define RFAL_ANALOG_CONFIG_CHIP_INIT (0x0000U) /*!< Chip-Specific event: Startup;Reset;Initialize */ +#define RFAL_ANALOG_CONFIG_CHIP_DEINIT (0x0001U) /*!< Chip-Specific event: Deinitialize */ +#define RFAL_ANALOG_CONFIG_CHIP_FIELD_ON (0x0002U) /*!< Chip-Specific event: Field On */ +#define RFAL_ANALOG_CONFIG_CHIP_FIELD_OFF (0x0003U) /*!< Chip-Specific event: Field Off */ +#define RFAL_ANALOG_CONFIG_CHIP_WAKEUP_ON (0x0004U) /*!< Chip-Specific event: Wake-up On */ +#define RFAL_ANALOG_CONFIG_CHIP_WAKEUP_OFF (0x0005U) /*!< Chip-Specific event: Wake-up Off */ +#define RFAL_ANALOG_CONFIG_CHIP_LISTEN_ON (0x0006U) /*!< Chip-Specific event: Listen On */ +#define RFAL_ANALOG_CONFIG_CHIP_LISTEN_OFF (0x0007U) /*!< Chip-Specific event: Listen Off */ +#define RFAL_ANALOG_CONFIG_CHIP_POLL_COMMON (0x0008U) /*!< Chip-Specific event: Poll common */ +#define RFAL_ANALOG_CONFIG_CHIP_LISTEN_COMMON (0x0009U) /*!< Chip-Specific event: Listen common */ + +#define RFAL_ANALOG_CONFIG_UPDATE_LAST (0x00U) /*!< Value indicating Last configuration set during update */ +#define RFAL_ANALOG_CONFIG_UPDATE_MORE (0x01U) /*!< Value indicating More configuration set coming during update */ + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +#define RFAL_ANALOG_CONFIG_ID_GET_POLL_LISTEN(id) (RFAL_ANALOG_CONFIG_POLL_LISTEN_MODE_MASK & (id)) /*!< Check if id indicates Listen mode */ + +#define RFAL_ANALOG_CONFIG_ID_GET_TECH(id) (RFAL_ANALOG_CONFIG_TECH_MASK & (id)) /*!< Get the technology of Configuration ID */ +#define RFAL_ANALOG_CONFIG_ID_IS_CHIP(id) (RFAL_ANALOG_CONFIG_TECH_MASK & (id)) /*!< Check if ID indicates Chip-specific */ +#define RFAL_ANALOG_CONFIG_ID_IS_NFCA(id) (RFAL_ANALOG_CONFIG_TECH_NFCA & (id)) /*!< Check if ID indicates NFC-A */ +#define RFAL_ANALOG_CONFIG_ID_IS_NFCB(id) (RFAL_ANALOG_CONFIG_TECH_NFCB & (id)) /*!< Check if ID indicates NFC-B */ +#define RFAL_ANALOG_CONFIG_ID_IS_NFCF(id) (RFAL_ANALOG_CONFIG_TECH_NFCF & (id)) /*!< Check if ID indicates NFC-F */ +#define RFAL_ANALOG_CONFIG_ID_IS_AP2P(id) (RFAL_ANALOG_CONFIG_TECH_AP2P & (id)) /*!< Check if ID indicates AP2P */ +#define RFAL_ANALOG_CONFIG_ID_IS_NFCV(id) (RFAL_ANALOG_CONFIG_TECH_NFCV & (id)) /*!< Check if ID indicates NFC-V */ + +#define RFAL_ANALOG_CONFIG_ID_GET_BITRATE(id) (RFAL_ANALOG_CONFIG_BITRATE_MASK & (id)) /*!< Get Bitrate of Configuration ID */ +#define RFAL_ANALOG_CONFIG_ID_IS_COMMON(id) (RFAL_ANALOG_CONFIG_BITRATE_MASK & (id)) /*!< Check if ID indicates common bitrate */ +#define RFAL_ANALOG_CONFIG_ID_IS_106(id) (RFAL_ANALOG_CONFIG_BITRATE_106 & (id)) /*!< Check if ID indicates 106kbits/s */ +#define RFAL_ANALOG_CONFIG_ID_IS_212(id) (RFAL_ANALOG_CONFIG_BITRATE_212 & (id)) /*!< Check if ID indicates 212kbits/s */ +#define RFAL_ANALOG_CONFIG_ID_IS_424(id) (RFAL_ANALOG_CONFIG_BITRATE_424 & (id)) /*!< Check if ID indicates 424kbits/s */ +#define RFAL_ANALOG_CONFIG_ID_IS_848(id) (RFAL_ANALOG_CONFIG_BITRATE_848 & (id)) /*!< Check if ID indicates 848kbits/s */ +#define RFAL_ANALOG_CONFIG_ID_IS_1695(id) (RFAL_ANALOG_CONFIG_BITRATE_1695 & (id)) /*!< Check if ID indicates 1695kbits/s */ +#define RFAL_ANALOG_CONFIG_ID_IS_3390(id) (RFAL_ANALOG_CONFIG_BITRATE_3390 & (id)) /*!< Check if ID indicates 3390kbits/s */ +#define RFAL_ANALOG_CONFIG_ID_IS_6780(id) (RFAL_ANALOG_CONFIG_BITRATE_6780 & (id)) /*!< Check if ID indicates 6780kbits/s */ +#define RFAL_ANALOG_CONFIG_ID_IS_1OF4(id) (RFAL_ANALOG_CONFIG_BITRATE_1OF4 & (id)) /*!< Check if ID indicates 1 out of 4 bitrate */ +#define RFAL_ANALOG_CONFIG_ID_IS_1OF256(id) (RFAL_ANALOG_CONFIG_BITRATE_1OF256 & (id)) /*!< Check if ID indicates 1 out of 256 bitrate */ + +#define RFAL_ANALOG_CONFIG_ID_GET_DIRECTION(id) (RFAL_ANALOG_CONFIG_DIRECTION_MASK & (id)) /*!< Get Direction of Configuration ID */ +#define RFAL_ANALOG_CONFIG_ID_IS_TX(id) (RFAL_ANALOG_CONFIG_TX & (id)) /*!< Check if id indicates TX */ +#define RFAL_ANALOG_CONFIG_ID_IS_RX(id) (RFAL_ANALOG_CONFIG_RX & (id)) /*!< Check if id indicates RX */ + +#define RFAL_ANALOG_CONFIG_CONFIG_NUM(x) (sizeof(x)/sizeof((x)[0])) /*!< Get Analog Config number */ + +/*! Set Analog Config ID value by: Mode, Technology, Bitrate and Direction */ +#define RFAL_ANALOG_CONFIG_ID_SET(mode, tech, br, direction) \ + ( RFAL_ANALOG_CONFIG_ID_GET_POLL_LISTEN(mode) \ + | RFAL_ANALOG_CONFIG_ID_GET_TECH(tech) \ + | RFAL_ANALOG_CONFIG_ID_GET_BITRATE(br) \ + | RFAL_ANALOG_CONFIG_ID_GET_DIRECTION(direction) \ + ) + +/* + ****************************************************************************** + * GLOBAL DATA TYPES + ****************************************************************************** + */ + +typedef uint8_t rfalAnalogConfigMode; /*!< Polling or Listening Mode of Configuration */ +typedef uint8_t rfalAnalogConfigTech; /*!< Technology of Configuration */ +typedef uint8_t rfalAnalogConfigBitrate; /*!< Bitrate of Configuration */ +typedef uint8_t rfalAnalogConfigDirection; /*!< Transmit/Receive direction of Configuration */ + +typedef uint8_t rfalAnalogConfigRegAddr[2]; /*!< Register Address to ST Chip */ +typedef uint8_t rfalAnalogConfigRegMask; /*!< Register Mask Value */ +typedef uint8_t rfalAnalogConfigRegVal; /*!< Register Value */ + +typedef uint16_t rfalAnalogConfigId; /*!< Analog Configuration ID */ +typedef uint16_t rfalAnalogConfigOffset; /*!< Analog Configuration offset address in the table */ +typedef uint8_t rfalAnalogConfigNum; /*!< Number of Analog settings for the respective Configuration ID */ + + +/*! Struct that contain the Register-Mask-Value set. Make sure that the whole structure size is even and unaligned! */ +typedef struct { + rfalAnalogConfigRegAddr addr; /*!< Register Address */ + rfalAnalogConfigRegMask mask; /*!< Register Mask Value */ + rfalAnalogConfigRegVal val; /*!< Register Value */ +} rfalAnalogConfigRegAddrMaskVal; + + +/*! Struct that represents the Analog Configs */ +typedef struct { + uint8_t id[sizeof(rfalAnalogConfigId)]; /*!< Configuration ID */ + rfalAnalogConfigNum num; /*!< Number of Config Sets to follow */ + rfalAnalogConfigRegAddrMaskVal regSet[]; /*!< Register-Mask-Value sets */ /* PRQA S 1060 # MISRA 18.7 - Flexible Array Members are the only meaningful way of denoting a variable length input buffer which follows a fixed header structure. */ +} rfalAnalogConfig; + + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +/*! + ***************************************************************************** + * \brief Initialize the Analog Configuration + * + * Reset the Analog Configuration LUT pointer to reference to default settings. + * + ***************************************************************************** + */ +void rfalAnalogConfigInitialize( void ); + + +/*! + ***************************************************************************** + * \brief Indicate if the current Analog Configuration Table is complete and ready to be used. + * + * \return true if current Analog Configuration Table is complete and ready to be used. + * \return false if current Analog Configuration Table is incomplete + * + ***************************************************************************** + */ +bool rfalAnalogConfigIsReady( void ); + +/*! + ***************************************************************************** + * \brief Write the whole Analog Configuration table in raw format + * + * Writes the Analog Configuration and Look Up Table with the given raw table + * + * NOTE: Function does not check the validity of the given Table contents + * + * \param[in] configTbl: location of config Table to be loaded + * \param[in] configTblSize: size of the config Table to be loaded + * + * \return ERR_NONE : if setting is updated + * \return ERR_PARAM : if configTbl is invalid + * \return ERR_NOMEM : if the given Table is bigger exceeds the max size + * \return ERR_REQUEST : if the update Configuration Id is disabled + * + ***************************************************************************** + */ +ReturnCode rfalAnalogConfigListWriteRaw( const uint8_t *configTbl, uint16_t configTblSize ); + +/*! + ***************************************************************************** + * \brief Write the Analog Configuration table with new analog settings. + * + * Writes the Analog Configuration and Look Up Table with the new list of register-mask-value + * and Configuration ID respectively. + * + * NOTE: Function does not check for the validity of the Register Address. + * + * \param[in] more: 0x00 indicates it is last Configuration ID settings; + * 0x01 indicates more Configuration ID setting(s) are coming. + * \param[in] *config: reference to the configuration list of current Configuraiton ID. + * + * \return ERR_PARAM : if Configuration ID or parameter is invalid + * \return ERR_NOMEM : if LUT is full + * \return ERR_REQUEST : if the update Configuration Id is disabled + * \return ERR_NONE : if setting is updated + * + ***************************************************************************** + */ +ReturnCode rfalAnalogConfigListWrite( uint8_t more, const rfalAnalogConfig *config ); + +/*! + ***************************************************************************** + * \brief Read the whole Analog Configuration table in raw format + * + * Reads the whole Analog Configuration Table in raw format + * + * \param[out] tblBuf: location to the buffer to place the Config Table + * \param[in] tblBufLen: length of the buffer to place the Config Table + * \param[out] configTblSize: Config Table size + * + * \return ERR_PARAM : if configTbl or configTblSize is invalid + * \return ERR_NOMEM : if configTblSize is not enough for the whole table + * \return ERR_NONE : if read is successful + * + ***************************************************************************** + */ +ReturnCode rfalAnalogConfigListReadRaw( uint8_t *tblBuf, uint16_t tblBufLen, uint16_t *configTblSize ); + +/*! + ***************************************************************************** + * \brief Read the Analog Configuration table. + * + * Read the Analog Configuration Table + * + * \param[in] configOffset: offset to the next Configuration ID in the List Table to be read. + * \param[out] more: 0x00 indicates it is last Configuration ID settings; + * 0x01 indicates more Configuration ID setting(s) are coming. + * \param[out] config: configuration id, number of configuration sets and register-mask-value sets + * \param[in] numConfig: the remaining configuration settings space available; + * + * \return ERR_NOMEM : if number of Configuration for respective Configuration ID is greater the the remaining configuration setting space available + * \return ERR_NONE : if read is successful + * + ***************************************************************************** + */ +ReturnCode rfalAnalogConfigListRead( rfalAnalogConfigOffset *configOffset, uint8_t *more, rfalAnalogConfig *config, rfalAnalogConfigNum numConfig ); + +/*! + ***************************************************************************** + * \brief Set the Analog settings of indicated Configuration ID. + * + * Update the chip with indicated analog settings of indicated Configuration ID. + * + * \param[in] configId: configuration ID + * + * \return ERR_PARAM if Configuration ID is invalid + * \return ERR_INTERNAL if error updating setting to chip + * \return ERR_NONE if new settings is applied to chip + * + ***************************************************************************** + */ +ReturnCode rfalSetAnalogConfig( rfalAnalogConfigId configId ); + + +#endif /* RFAL_ANALOG_CONFIG_H */ + +/** + * @} + * + * @} + * + * @} + */ diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_analogConfigTbl.h b/Software/Middlewares/ST/rfal/Inc/rfal_analogConfigTbl.h new file mode 100644 index 0000000..2c4d0a2 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_analogConfigTbl.h @@ -0,0 +1,426 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_analogConfig.h + * + * \author bkam + * + * \brief ST25R3911 Analog Configuration Settings + * + */ + +#ifndef ST25R3911_ANALOGCONFIG_H +#define ST25R3911_ANALOGCONFIG_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "rfal_analogConfig.h" +#include "st25r3911_com.h" + +/* + ****************************************************************************** + * DEFINES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +/*! Macro for Configuration Setting with only one register-mask-value set: + * - Configuration ID[2], Number of Register sets to follow[1], Register[2], Mask[1], Value[1] */ +#define MODE_ENTRY_1_REG(MODE, R0, M0, V0) \ + (uint8_t)((MODE) >> 8), (uint8_t)((MODE) & 0xFFU), 1, (uint8_t)((R0) >> 8), (uint8_t)((R0) & 0xFFU), (uint8_t)(M0), (uint8_t)(V0) + +/*! Macro for Configuration Setting with only two register-mask-value sets: + * - Configuration ID[2], Number of Register sets to follow[1], Register[2], Mask[1], Value[1], Register[2], Mask[1], Value[1] */ +#define MODE_ENTRY_2_REG(MODE, R0, M0, V0, R1, M1, V1) \ + (uint8_t)((MODE) >> 8), (uint8_t)((MODE) & 0xFFU), 2, (uint8_t)((R0) >> 8), (uint8_t)((R0) & 0xFFU), (uint8_t)(M0), (uint8_t)(V0) \ + , (uint8_t)((R1) >> 8), (uint8_t)((R1) & 0xFFU), (uint8_t)(M1), (uint8_t)(V1) + +/*! Macro for Configuration Setting with only three register-mask-value sets: + * - Configuration ID[2], Number of Register sets to follow[1], Register[2], Mask[1], Value[1], Register[2], Mask[1], Value[1], Register[2]... */ +#define MODE_ENTRY_3_REG(MODE, R0, M0, V0, R1, M1, V1, R2, M2, V2) \ + (uint8_t)((MODE) >> 8), (uint8_t)((MODE) & 0xFFU), 3, (uint8_t)((R0) >> 8), (uint8_t)((R0) & 0xFFU), (uint8_t)(M0), (uint8_t)(V0) \ + , (uint8_t)((R1) >> 8), (uint8_t)((R1) & 0xFFU), (uint8_t)(M1), (uint8_t)(V1) \ + , (uint8_t)((R2) >> 8), (uint8_t)((R2) & 0xFFU), (uint8_t)(M2), (uint8_t)(V2) \ + +/*! Macro for Configuration Setting with only four register-mask-value sets: + * - Configuration ID[2], Number of Register sets to follow[1], Register[2], Mask[1], Value[1], Register[2], Mask[1], Value[1], Register[2]... */ +#define MODE_ENTRY_4_REG(MODE, R0, M0, V0, R1, M1, V1, R2, M2, V2, R3, M3, V3) \ + (uint8_t)((MODE) >> 8), (uint8_t)((MODE) & 0xFFU), 4, (uint8_t)((R0) >> 8), (uint8_t)((R0) & 0xFFU), (uint8_t)(M0), (uint8_t)(V0) \ + , (uint8_t)((R1) >> 8), (uint8_t)((R1) & 0xFFU), (uint8_t)(M1), (uint8_t)(V1) \ + , (uint8_t)((R2) >> 8), (uint8_t)((R2) & 0xFFU), (uint8_t)(M2), (uint8_t)(V2) \ + , (uint8_t)((R3) >> 8), (uint8_t)((R3) & 0xFFU), (uint8_t)(M3), (uint8_t)(V3) \ + +/*! Macro for Configuration Setting with only five register-mask-value sets: + * - Configuration ID[2], Number of Register sets to follow[1], Register[2], Mask[1], Value[1], Register[2], Mask[1], Value[1], Register[2]... */ +#define MODE_ENTRY_5_REG(MODE, R0, M0, V0, R1, M1, V1, R2, M2, V2, R3, M3, V3, R4, M4, V4) \ + (uint8_t)((MODE) >> 8), (uint8_t)((MODE) & 0xFFU), 5, (uint8_t)((R0) >> 8), (uint8_t)((R0) & 0xFFU), (uint8_t)(M0), (uint8_t)(V0) \ + , (uint8_t)((R1) >> 8), (uint8_t)((R1) & 0xFFU), (uint8_t)(M1), (uint8_t)(V1) \ + , (uint8_t)((R2) >> 8), (uint8_t)((R2) & 0xFFU), (uint8_t)(M2), (uint8_t)(V2) \ + , (uint8_t)((R3) >> 8), (uint8_t)((R3) & 0xFFU), (uint8_t)(M3), (uint8_t)(V3) \ + , (uint8_t)((R4) >> 8), (uint8_t)((R4) & 0xFFU), (uint8_t)(M4), (uint8_t)(V4) \ + +/*! Macro for Configuration Setting with only six register-mask-value sets: + * - Configuration ID[2], Number of Register sets to follow[1], Register[2], Mask[1], Value[1], Register[2], Mask[1], Value[1], Register[2]... */ +#define MODE_ENTRY_6_REG(MODE, R0, M0, V0, R1, M1, V1, R2, M2, V2, R3, M3, V3, R4, M4, V4, R5, M5, V5) \ + (uint8_t)((MODE) >> 8), (uint8_t)((MODE) & 0xFFU), 6, (uint8_t)((R0) >> 8), (uint8_t)((R0) & 0xFFU), (uint8_t)(M0), (uint8_t)(V0) \ + , (uint8_t)((R1) >> 8), (uint8_t)((R1) & 0xFFU), (uint8_t)(M1), (uint8_t)(V1) \ + , (uint8_t)((R2) >> 8), (uint8_t)((R2) & 0xFFU), (uint8_t)(M2), (uint8_t)(V2) \ + , (uint8_t)((R3) >> 8), (uint8_t)((R3) & 0xFFU), (uint8_t)(M3), (uint8_t)(V3) \ + , (uint8_t)((R4) >> 8), (uint8_t)((R4) & 0xFFU), (uint8_t)(M4), (uint8_t)(V4) \ + , (uint8_t)((R5) >> 8), (uint8_t)((R5) & 0xFFU), (uint8_t)(M5), (uint8_t)(V5) \ + +/*! Macro for Configuration Setting with only seven register-mask-value sets: + * - Configuration ID[2], Number of Register sets to follow[1], Register[2], Mask[1], Value[1], Register[2], Mask[1], Value[1], Register[2]... */ +#define MODE_ENTRY_7_REG(MODE, R0, M0, V0, R1, M1, V1, R2, M2, V2, R3, M3, V3, R4, M4, V4, R5, M5, V5, R6, M6, V6) \ + (uint8_t)((MODE) >> 8), (uint8_t)((MODE) & 0xFFU), 7, (uint8_t)((R0) >> 8), (uint8_t)((R0) & 0xFFU), (uint8_t)(M0), (uint8_t)(V0) \ + , (uint8_t)((R1) >> 8), (uint8_t)((R1) & 0xFFU), (uint8_t)(M1), (uint8_t)(V1) \ + , (uint8_t)((R2) >> 8), (uint8_t)((R2) & 0xFFU), (uint8_t)(M2), (uint8_t)(V2) \ + , (uint8_t)((R3) >> 8), (uint8_t)((R3) & 0xFFU), (uint8_t)(M3), (uint8_t)(V3) \ + , (uint8_t)((R4) >> 8), (uint8_t)((R4) & 0xFFU), (uint8_t)(M4), (uint8_t)(V4) \ + , (uint8_t)((R5) >> 8), (uint8_t)((R5) & 0xFFU), (uint8_t)(M5), (uint8_t)(V5) \ + , (uint8_t)((R6) >> 8), (uint8_t)((R6) & 0xFFU), (uint8_t)(M6), (uint8_t)(V6) \ + +/*! Macro for Configuration Setting with only eight register-mask-value sets: + * - Configuration ID[2], Number of Register sets to follow[1], Register[2], Mask[1], Value[1], Register[2], Mask[1], Value[1], Register[2]... */ +#define MODE_ENTRY_8_REG(MODE, R0, M0, V0, R1, M1, V1, R2, M2, V2, R3, M3, V3, R4, M4, V4, R5, M5, V5, R6, M6, V6, R7, M7, V7) \ + (uint8_t)((MODE) >> 8), (uint8_t)((MODE) & 0xFFU), 8, (uint8_t)((R0) >> 8), (uint8_t)((R0) & 0xFFU), (uint8_t)(M0), (uint8_t)(V0) \ + , (uint8_t)((R1) >> 8), (uint8_t)((R1) & 0xFFU), (uint8_t)(M1), (uint8_t)(V1) \ + , (uint8_t)((R2) >> 8), (uint8_t)((R2) & 0xFFU), (uint8_t)(M2), (uint8_t)(V2) \ + , (uint8_t)((R3) >> 8), (uint8_t)((R3) & 0xFFU), (uint8_t)(M3), (uint8_t)(V3) \ + , (uint8_t)((R4) >> 8), (uint8_t)((R4) & 0xFFU), (uint8_t)(M4), (uint8_t)(V4) \ + , (uint8_t)((R5) >> 8), (uint8_t)((R5) & 0xFFU), (uint8_t)(M5), (uint8_t)(V5) \ + , (uint8_t)((R6) >> 8), (uint8_t)((R6) & 0xFFU), (uint8_t)(M6), (uint8_t)(V6) \ + , (uint8_t)((R7) >> 8), (uint8_t)((R7) & 0xFFU), (uint8_t)(M7), (uint8_t)(V7) \ + +/*! Macro for Configuration Setting with only nine register-mask-value sets: + * - Configuration ID[2], Number of Register sets to follow[1], Register[2], Mask[1], Value[1], Register[2], Mask[1], Value[1], Register[2]... */ +#define MODE_ENTRY_9_REG(MODE, R0, M0, V0, R1, M1, V1, R2, M2, V2, R3, M3, V3, R4, M4, V4, R5, M5, V5, R6, M6, V6, R7, M7, V7, R8, M8, V8) \ + (uint8_t)((MODE) >> 8), (uint8_t)((MODE) & 0xFFU), 9, (uint8_t)((R0) >> 8), (uint8_t)((R0) & 0xFFU), (uint8_t)(M0), (uint8_t)(V0) \ + , (uint8_t)((R1) >> 8), (uint8_t)((R1) & 0xFFU), (uint8_t)(M1), (uint8_t)(V1) \ + , (uint8_t)((R2) >> 8), (uint8_t)((R2) & 0xFFU), (uint8_t)(M2), (uint8_t)(V2) \ + , (uint8_t)((R3) >> 8), (uint8_t)((R3) & 0xFFU), (uint8_t)(M3), (uint8_t)(V3) \ + , (uint8_t)((R4) >> 8), (uint8_t)((R4) & 0xFFU), (uint8_t)(M4), (uint8_t)(V4) \ + , (uint8_t)((R5) >> 8), (uint8_t)((R5) & 0xFFU), (uint8_t)(M5), (uint8_t)(V5) \ + , (uint8_t)((R6) >> 8), (uint8_t)((R6) & 0xFFU), (uint8_t)(M6), (uint8_t)(V6) \ + , (uint8_t)((R7) >> 8), (uint8_t)((R7) & 0xFFU), (uint8_t)(M7), (uint8_t)(V7) \ + , (uint8_t)((R8) >> 8), (uint8_t)((R8) & 0xFFU), (uint8_t)(M8), (uint8_t)(V8) \ + +/*! Macro for Configuration Setting with only ten register-mask-value sets: + * - Configuration ID[2], Number of Register sets to follow[1], Register[2], Mask[1], Value[1], Register[2], Mask[1], Value[1], Register[2]... */ +#define MODE_ENTRY_10_REG(MODE, R0, M0, V0, R1, M1, V1, R2, M2, V2, R3, M3, V3, R4, M4, V4, R5, M5, V5, R6, M6, V6, R7, M7, V7, R8, M8, V8, R9, M9, V9) \ + (uint8_t)((MODE) >> 8), (uint8_t)((MODE) & 0xFFU),10, (uint8_t)((R0) >> 8), (uint8_t)((R0) & 0xFFU), (uint8_t)(M0), (uint8_t)(V0) \ + , (uint8_t)((R1) >> 8), (uint8_t)((R1) & 0xFFU), (uint8_t)(M1), (uint8_t)(V1) \ + , (uint8_t)((R2) >> 8), (uint8_t)((R2) & 0xFFU), (uint8_t)(M2), (uint8_t)(V2) \ + , (uint8_t)((R3) >> 8), (uint8_t)((R3) & 0xFFU), (uint8_t)(M3), (uint8_t)(V3) \ + , (uint8_t)((R4) >> 8), (uint8_t)((R4) & 0xFFU), (uint8_t)(M4), (uint8_t)(V4) \ + , (uint8_t)((R5) >> 8), (uint8_t)((R5) & 0xFFU), (uint8_t)(M5), (uint8_t)(V5) \ + , (uint8_t)((R6) >> 8), (uint8_t)((R6) & 0xFFU), (uint8_t)(M6), (uint8_t)(V6) \ + , (uint8_t)((R7) >> 8), (uint8_t)((R7) & 0xFFU), (uint8_t)(M7), (uint8_t)(V7) \ + , (uint8_t)((R8) >> 8), (uint8_t)((R8) & 0xFFU), (uint8_t)(M8), (uint8_t)(V8) \ + , (uint8_t)((R9) >> 8), (uint8_t)((R9) & 0xFFU), (uint8_t)(M9), (uint8_t)(V9) \ + +/*! Macro for Configuration Setting with eleven register-mask-value sets: + * - Configuration ID[2], Number of Register sets to follow[1], Register[2], Mask[1], Value[1], Register[2], Mask[1], Value[1], Register[2]... */ +#define MODE_ENTRY_11_REG(MODE, R0, M0, V0, R1, M1, V1, R2, M2, V2, R3, M3, V3, R4, M4, V4, R5, M5, V5, R6, M6, V6, R7, M7, V7, R8, M8, V8, R9, M9, V9, R10, M10, V10) \ + (uint8_t)((MODE) >> 8), (uint8_t)((MODE) & 0xFFU),11, (uint8_t)((R0) >> 8), (uint8_t)((R0) & 0xFFU), (uint8_t)(M0), (uint8_t)(V0) \ + , (uint8_t)((R1) >> 8), (uint8_t)((R1) & 0xFFU), (uint8_t)(M1), (uint8_t)(V1) \ + , (uint8_t)((R2) >> 8), (uint8_t)((R2) & 0xFFU), (uint8_t)(M2), (uint8_t)(V2) \ + , (uint8_t)((R3) >> 8), (uint8_t)((R3) & 0xFFU), (uint8_t)(M3), (uint8_t)(V3) \ + , (uint8_t)((R4) >> 8), (uint8_t)((R4) & 0xFFU), (uint8_t)(M4), (uint8_t)(V4) \ + , (uint8_t)((R5) >> 8), (uint8_t)((R5) & 0xFFU), (uint8_t)(M5), (uint8_t)(V5) \ + , (uint8_t)((R6) >> 8), (uint8_t)((R6) & 0xFFU), (uint8_t)(M6), (uint8_t)(V6) \ + , (uint8_t)((R7) >> 8), (uint8_t)((R7) & 0xFFU), (uint8_t)(M7), (uint8_t)(V7) \ + , (uint8_t)((R8) >> 8), (uint8_t)((R8) & 0xFFU), (uint8_t)(M8), (uint8_t)(V8) \ + , (uint8_t)((R9) >> 8), (uint8_t)((R9) & 0xFFU), (uint8_t)(M9), (uint8_t)(V9) \ + , (uint8_t)((R10) >> 8), (uint8_t)((R10) & 0xFFU), (uint8_t)(M10), (uint8_t)(V10) \ + +/*! Macro for Configuration Setting with twelve register-mask-value sets: + * - Configuration ID[2], Number of Register sets to follow[1], Register[2], Mask[1], Value[1], Register[2], Mask[1], Value[1], Register[2]... */ +#define MODE_ENTRY_12_REG(MODE, R0, M0, V0, R1, M1, V1, R2, M2, V2, R3, M3, V3, R4, M4, V4, R5, M5, V5, R6, M6, V6, R7, M7, V7, R8, M8, V8, R9, M9, V9, R10, M10, V10, R11, M11, V11) \ + (uint8_t)((MODE) >> 8), (uint8_t)((MODE) & 0xFFU),12, (uint8_t)((R0) >> 8), (uint8_t)((R0) & 0xFFU), (uint8_t)(M0), (uint8_t)(V0) \ + , (uint8_t)((R1) >> 8), (uint8_t)((R1) & 0xFFU), (uint8_t)(M1), (uint8_t)(V1) \ + , (uint8_t)((R2) >> 8), (uint8_t)((R2) & 0xFFU), (uint8_t)(M2), (uint8_t)(V2) \ + , (uint8_t)((R3) >> 8), (uint8_t)((R3) & 0xFFU), (uint8_t)(M3), (uint8_t)(V3) \ + , (uint8_t)((R4) >> 8), (uint8_t)((R4) & 0xFFU), (uint8_t)(M4), (uint8_t)(V4) \ + , (uint8_t)((R5) >> 8), (uint8_t)((R5) & 0xFFU), (uint8_t)(M5), (uint8_t)(V5) \ + , (uint8_t)((R6) >> 8), (uint8_t)((R6) & 0xFFU), (uint8_t)(M6), (uint8_t)(V6) \ + , (uint8_t)((R7) >> 8), (uint8_t)((R7) & 0xFFU), (uint8_t)(M7), (uint8_t)(V7) \ + , (uint8_t)((R8) >> 8), (uint8_t)((R8) & 0xFFU), (uint8_t)(M8), (uint8_t)(V8) \ + , (uint8_t)((R9) >> 8), (uint8_t)((R9) & 0xFFU), (uint8_t)(M9), (uint8_t)(V9) \ + , (uint8_t)((R10) >> 8), (uint8_t)((R10) & 0xFFU), (uint8_t)(M10), (uint8_t)(V10) \ + , (uint8_t)((R11) >> 8), (uint8_t)((R11) & 0xFFU), (uint8_t)(M11), (uint8_t)(V11) \ + +/*! Macro for Configuration Setting with thirteen register-mask-value sets: + * - Configuration ID[2], Number of Register sets to follow[1], Register[2], Mask[1], Value[1], Register[2], Mask[1], Value[1], Register[2]... */ +#define MODE_ENTRY_13_REG(MODE, R0, M0, V0, R1, M1, V1, R2, M2, V2, R3, M3, V3, R4, M4, V4, R5, M5, V5, R6, M6, V6, R7, M7, V7, R8, M8, V8, R9, M9, V9, R10, M10, V10, R11, M11, V11, R12, M12, V12) \ + (uint8_t)((MODE) >> 8), (uint8_t)((MODE) & 0xFFU),13, (uint8_t)((R0) >> 8), (uint8_t)((R0) & 0xFFU), (uint8_t)(M0), (uint8_t)(V0) \ + , (uint8_t)((R1) >> 8), (uint8_t)((R1) & 0xFFU), (uint8_t)(M1), (uint8_t)(V1) \ + , (uint8_t)((R2) >> 8), (uint8_t)((R2) & 0xFFU), (uint8_t)(M2), (uint8_t)(V2) \ + , (uint8_t)((R3) >> 8), (uint8_t)((R3) & 0xFFU), (uint8_t)(M3), (uint8_t)(V3) \ + , (uint8_t)((R4) >> 8), (uint8_t)((R4) & 0xFFU), (uint8_t)(M4), (uint8_t)(V4) \ + , (uint8_t)((R5) >> 8), (uint8_t)((R5) & 0xFFU), (uint8_t)(M5), (uint8_t)(V5) \ + , (uint8_t)((R6) >> 8), (uint8_t)((R6) & 0xFFU), (uint8_t)(M6), (uint8_t)(V6) \ + , (uint8_t)((R7) >> 8), (uint8_t)((R7) & 0xFFU), (uint8_t)(M7), (uint8_t)(V7) \ + , (uint8_t)((R8) >> 8), (uint8_t)((R8) & 0xFFU), (uint8_t)(M8), (uint8_t)(V8) \ + , (uint8_t)((R9) >> 8), (uint8_t)((R9) & 0xFFU), (uint8_t)(M9), (uint8_t)(V9) \ + , (uint8_t)((R10) >> 8), (uint8_t)((R10) & 0xFFU), (uint8_t)(M10), (uint8_t)(V10) \ + , (uint8_t)((R11) >> 8), (uint8_t)((R11) & 0xFFU), (uint8_t)(M11), (uint8_t)(V11) \ + , (uint8_t)((R12) >> 8), (uint8_t)((R12) & 0xFFU), (uint8_t)(M12), (uint8_t)(V12) \ + +/* Setting for approximately 14%: */ +#define AM_MOD_DRIVER_LEVEL_DEFAULT 0xb9 +/* + ****************************************************************************** + * GLOBAL DATA TYPES + ****************************************************************************** + */ +/* PRQA S 3406 1 # MISRA 8.6 - Externally generated table included by the library */ /* PRQA S 1514 1 # MISRA 8.9 - Externally generated table included by the library */ + const uint8_t rfalAnalogConfigDefaultSettings[] = { + //****** Default Analog Configuration for Chip-Specific Reset. ******/ + MODE_ENTRY_10_REG( (RFAL_ANALOG_CONFIG_TECH_CHIP | RFAL_ANALOG_CONFIG_CHIP_INIT) + , ST25R3911_REG_OP_CONTROL, 0x30, 0x10 /* default to AM */ + , ST25R3911_REG_IO_CONF1, 0x06, 0x06 /* MCUCLK: HF clk off */ + , ST25R3911_REG_IO_CONF1, (ST25R3911_REG_IO_CONF1_mask_out_cl | ST25R3911_REG_IO_CONF1_lf_clk_off), 0x07 /* MCUCLK: LF clk off */ + , ST25R3911_REG_IO_CONF2, 0x18, 0x18 /* pull downs */ + , ST25R3911_REG_RX_CONF4, ST25R3911_REG_RX_CONF4_mask_rg2_pm, 0x1U<
© COPYRIGHT 2016 STMicroelectronics

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%0DOcMT1Y%})1+^t(-GG(4)ZGCDVJ)g_ zjOLzO$qNIZg)AoN(o2oYH!%e`XH4Vl)8}_97@A0cW;W@Q<}a7e_Nn%*UG{Z#O_WXg zvh7k%ec6e@u~XJM&+W<@yKRu~W47azLH4XNuLKL&y`E7v$8cU?eRp8_i0Hw7fa(^O z(+MQHbN+a8qMD>RHyvV8Zymp-O)^kcefv$TRaCaDT3OA#%>lXYkYCl%!L+q$y}r$= zr7Km;y4LkmOez-K>bIgV()KE=_u3z=Y1XzU(c8^Rb4ib^M`*FqLEg04$|Z`!fm3h# zQj;f!OLZ==H!H(kZ*b+*=KAn!QtFy;AkxO5b{Sc3oa6kkHwUe4#7&JmxJi;b7f}-- zhhX)bpukA>S(`@Jj-PWMdIMiui+6&>8{_s|?4pzJf_YF)nw($NYNVc&eLxSyrZq4# z=~v%V@ND!0TFyBZ%Ly_r*9ra*6`x=wCkM~ln`ur$A-@%@IntWYJd}kB5|5w{(;;r0 zPfj!4DSYU`7lHjFf_Cb@p*(eZvJ7YPJP}#>z#G)$c>k2$x%hZJd_9SAsxS|V!!=HO zc#u@TP7y&z!g$=XBjSl6$3KuR1+jJ3Fr<;?6(noPjJ~o27WCSrc>CA`puWz5)$_BN z=a?LYM33kL6OOuVzz&=ntzS)fM-0;%%rVnmvg0-bm8mmK`z`jyv6SO0+O~bGO)%ai zmoIf`?#gd%xnq^PxlOt96dh1D(@5t*R~%(1Kc+(+^lqVsFs@p1Z7s8gkw}Df_GK!CAbjHm;^bK5b*9WNc(J93^7TE{n% zpnU**U(b>_OvQh)=cl@$xe0>=X7c5QJD)x6u7G|c2|NAGFgbc)wOm=j1kP5 zBb_Z9tF1%6uISmK(qPoJ>g}8j%c4E>Yq~kG!Ntqj7I;zN(J4@hwF+qsR!Pk-T|E&R zz#$&)Q!f4Yu#*B}k(KOCa9zl{Y64aFQ8DHUnD{MtB0cQAZpl+&p7^edC1u}kNvl%t z-6Uu7jlI_`5r!pSvA#r`ZFR5ZZ~3A!2Z~2)0@{esWJK;rXpJw3AbSiK#^Z;Zyx2y@1NDO zw82OYtJO!!d#W18Vy$)vVH2=|BToiot7CDqI$J=9aFf^5OQI;krkNjK$v6rONe~ns7;~rW~B< zlGRNIBy5bn;c<)h>qA$jdpm#^-Ck1s`NQc_Wxd3%Y2bq#8W6@h&313~!m-E{`OfaL z5(n|b5@s{k0R<(ZR0JXRrJSn_si@$(qEqEG7nMME7ey{gg6-b;|fW zrdA3KyW1Cn*6y{EqI5!13S3R?dO{CfQKlgwMHHP@6TrDzBxq92R|y5E;K|U z16__mtIrJB#gGXN)h3Gb5m2%SRnRrok|?+qypW)Wox~Ugsefg4Xavq7Sjvuhu@L-~ zRt~a+sred5GF^5O37O?N2~TcEhSca_mm^GtrCMY&m41Xvjk|VF1wuc<3Zq#QR)SgA zE*y}GT&ir0&t)pgBc#43_@OZZZ4xS^{(@m`fmK)v0IBZ_NiHc^kg9{H9o+dZe=sCYof}`!d|=G!U~N2;4pI9QOEsZ0$)%JoI5$iGKI8$ zPBDCTt>b49`CpkrwN>{vy*%gb%80?Gv1k|)ibn`Omk|?Dlq0SlduFh!^j{p(zZg?_y7fLEg^N6 zdXC2Bp8Yz@miWpiU9EW>8QzTCwAXM@Ugw{(-lh0YbHT_eW9mi#3uK>Eu9Iz3Z-Fl@ z%DvZ5oj}r`?j=g9u`JYMm-WPxso$FcX|n#tjFbQR0)i|qXicat1nkrNkKwGZ?vKfe zt%0Jmmwm*as54c}^~qTZa|AyQ%>{qESI;$8tI;Kgk)CXN%>UTZ10uCkT~{6(5(~$_ z-n$t9V|#oy0|@E$*csp0h_dLtnFc}T!W|Cav8g(9Nq$4YsJGJtU`md(V}$VlKu^W8 zT^D?+Nz9V5HZptJ#Fq%3v2yD69TOS~^Q5EDk|lN20^AtYglHa}dVy&_p+tlxDzKy^ z8)-W=O>WQ;+BIb8(kN22Tk6?vo3-z8bFm1zSB)@^3YhJj3JClwNoy_P4hj_Qk_wu( zlOzCYi{?VI8BJ*Muh#a0__If5RNDlTM37dr1J(Av(_D* zI^~<)IDmYSIE9n<9@E^S4IZaaMRi&y*wD$L#+Y#gdZaPGv32n2N9^8`YNfnNM=N2g z$Tjp>27)!JT-kac0C3V34pFBc*Nq_KzGu-iX z(ZC>M$V6{%BiV6ArXk9R6CwHGdmIM3K)?JU!o>FZe?bMhz>k7ZIkPej++B= z@(ts~)QLs?AGdO;?&f$LK(I{sT+m4UM`QI`cWn$bHv3!Y&aV#`(Bg%%aYyz`rO&#`w|Mu0KRA=TkVK&5`%$9Bw#a0Zw#Ok ztL6`gUq`S;N0vd_W~ynz5RWAu`%WbpK$)FLTPAu#S~AjS>oJ810xK$oM;(I|8v*3! zk_d{V^r^U^hT807NGypBHL<63;ieXW0m ztdN90BI?J76OWFj%<{^bN6wDq{*+9MWbs8cQMWToFU?P9?2xF_bLuej%4Dmd@Wk?q z?HVEdYzfDlGrk7aj_w*Iq*D&iwjG1Qs3gzb`nNQG6zQYaQ$3nNH7Ahfrrb-(=hf2+ zTce`$`+Q;|zmlqh3PsHY%u!;ThGlM36_NoLY(>RQOKmIE5CVqAfHkbigaIkLx5y8R#`PvRE3%P&Z)uq z{Vr;(ssyPZ(_Ub#$54D_k1D(f6*!|LpNYd^?TL9K~WB}f_;mr2Rk z=*oa0>P%L0bdqlwn~9D|3^WkJLRz&oP!1mY3pD6=w=(34U z#8k09ew6mxu{7m!#_`$U;AxTkzWC2+vHD76U;f=^WOBpW0)CvbDQtuj0k5_agEYO6L$Z zkwdu|o1Vzy3G_$AsfWgE@Rh3!;v{dz4E=qoySDnX&55zaz-kl9mLOi&JS@R zAP^6}9=BdCD{(K39*C>*+Iu3GJ<%ItlD;1iwD7&;Ded=vA1R*wh7$>fZvK}PZS1cG zwc;E*dnD^0Ju`mDq{DOSIrQ?c@A9H}8mDIA=nsjJG_E{D`wdbIJ>?pQ9QiZ=9J)6y zNHLU+#q)qWT&Ibg5Twm2z6@R(|N~+3A{9={Yb0M9Y?CtK@w?jI366>v2 z^@>lYNZvl*`NfMQ81*n)AsL*V4lrZ^XS#O=ZSU00YiRKpiZ)rnxac|>v>8D{CI%e%<`kv{Y z7;QU#Sq{qBmUa~-Q{E#yzM$t|`d8t!-GpEc?m@GJQE4{`z#kWk19ETJ-dT?$a&TQ2Em8FjpGPD8 z8|)1gS9v=zYI5sc%x6cC{G1L?s)vT}`|yZin8UlEz}L&`pd13?>_q^DiG!AhqksquMTIoxn~KVIPzQ1$!D^b@va|_vUzQjQ&k_dT^PV(5Zv-V!+smu3ZoQT9GO9YszAdS00jrA_NN~0IP#}u zKRQA_gyd;yxzO1hCwjcX6j*%g!lJfRaJ&gZuBkajb0b`#%$4>33x;iPd3LvB{fa|6 zEx_~2>XDTfmq=}VJb7YkUB`2|7&^O;jR!b;o0~(48SNb7svC>*%9{&-fk#S#qMlp; zdgd(ZF18C0tR$Hs$pp?2!)@2lV4<&cZ05%;C$&e4H9x_8f^Nu*hFoA#B(nfCIl+?2jb$^XWUtq?Xz&h&cA0g_%dPkCywy5l+vn&G zDz4y(Wf5jFpIRdaET6xRTXu6*;fJ$#!1zvp#C<$ymy~YIU9KDlT+LjfoX7nJRdUnQ zo<^vXm~w==JL~ehG(`Yp?J%{6eQs>NL}5~3cCMqFc&y}C?x{=}$#P_0e`Az$zZW~K zPfDM+vv82o#7Mro-Q*Ko3B}&QA({{Fj7sL+m!`|Ent(;4KF{ucwji*-PVuUXt zP!E8!Ee+bJk0~xMhJ@frM$)!*h;c|TQW3~+R=@>?2@=PaVW2GOPrX^1Z2O!V7nNHO zaWs+xxzY@Gh7%S6=r}?cx&*+K?qU(X*@M*FjX1;cPKafp%ZDmr4+P2+)UMm81RHCG)rE>!cXL~*b{+r3r#8?st6K(_^TigRd~umS5Liue<6xtnD%d>e;m z!QAA`oDTAnS&kT@N!s6=rMcMlh@dQjMV5hKvl#e8nF~Dt3c{pMIGlahP?h#c$M#EV z;bM%6z%>R+{M0o8mD26EUIy0g31U<(MjK(AYJOzq^GvPf^U`nA| z1b~j;1Y84DDlnb70aqhVaOLtm3;-WXiZJcUJie{OVUPf^6}C1*ok8ZO!l%HmartrV)& z3%PK>Fls%mn=`}K^<*?`A(<6eN!bWrf#J0P&f7heq)=aO{HS#{xxK&}Yvir!TTJhJ zl@7(E$V7Ndzn0R0QTpxORMBx|?iOT^2Y$$K4x{V`JE$lXXXYCZ;n)g#aPyqVcWOe_wX=xEj}re%nMFPx@;b-H0SnhAxb<( z`_&w$gyq@9{6*B*&6Mtj87tKq+V9qFW#2h{CQ#np<{Fps9A3BAl(7e@g5l?3E+*$4 zG{Y6i%@HA@_KH@z`=Y6K11b$lZvWEY3xx@6W zy|S}kM(su?ce&3As{Sgy51F;ad5hlrv;Q=${awGCHK+=by{`Kx{IB=OTajSws7uzQ zz>rtsbVo1q&3MWdxQU`}gB&{dyp>w^+PM@V!s5876j<%5%$8kp><5&qbu4s#8ndu5 zja6%3*_&zT%$qOy3ua51#RP^skgiJ%y@?r{XcCQ8Vf}sXbaC52Wa;(*HR$CpD2i}= zWOA~Jleb~4(e=#Cg5%v{&ln48A+Q29K?{gAB&dw#6t5!F0FSMJMZ2haXBDgikw0p+ zA;NOvzxOxt5Hd^lrcE{?H+I%=XFFMZzg~($+BPb;P$$?K^KU>!fC4_UvnZ0h2-~O- z;SGxm3kL<0;1^JU!d`8ZK(><}|6pSFMTcw$vj;_CT=-mN625^7`W3F==2t^8kO`Nl z?b0SJk6jqL)yZrCn6V;S@68M2$Y6gMtn4T#_+ux16ovgPh#|-e4Hs6YS6bbLgbmr4 z2&i2`0j+K`rUXD1(kr+Jl{kKaIXZ#c1*e$PZ#VhM&1f4M0Gy{c`CXj7)vzO96+Z$7 z=P-mR2_|`E7qh>O_<_zw6yYg7s-@!D7El&$CJH(u3nRbT7nH`T2v9rcRgM%S#}F{a zvlt5kY=T|18yT~<@WP@;(~i4$$Awc8C|Xchjy?8J-?U>W2DA`dp?6lMY6CQCLdXeN zXxjaT`2w&ODx{pyns;}}C~ZRog*58cD--Mm1r5bu3tCdA4%UA~F$AR|OhK*hCn4Gi zK_{dabN@XYT2RB1PCVh)Yg|HMZ&S(DuKSL5m4Vx&7h>hSk(j88(1VY10Do z7J^JVC}MP77)gb@ysz>?1ESIUbv2l3Z)MvEw#S(K19-L$jO|+j8hh#bk;2%itB9X% z`rO>U6-96m>41Zi2cf|O5!q^gg>Stp-0~fLCmt)|b+>0t?iz-|Z$ZEWM}L0Mvk~9- zZt%~2*I62Um(}ueYDn@JT?taCReYK;e*2j=NY+@TVd!9=jc`t6AYukFkm>Hi2GS2( z@4o;_C9o=U15A>He!5|y-(N36s&5{(nmAQ zt8SZa*vRykQnKP-OGycA?Jy#Or4=YG{3YzD-Dt!3yG*Hz;n+Rew*W3jr|Q}=W8j0T z8|Q@DVw}&lLGFk+-jJ5MM+9ZW$qfrG;VKn2{vAr6KK= zJgy3{!(k9rxX}Gm3cVSYt=+!4w2_MxRiqM_1jrg305q3cg(`&DD{R6thksdGzFP3@ zRvfI!4$h%olpUa~>fdda*6u^=KZQovQs0%j!XYw&1tB{E)cxEYuaP3Yzp+;!dN~=+ z%C<$L1yb+sf(o6HF;5Hgl!Z$+S*i-+K?;+Q zSx<=L1XG^nElp{+KTP=mtNn z1}j^p2L0J-u)8iEP)=ALQa+9V1~0PA_fx1x$dI8-t#g;m1ic`kVX{gEGvl(9p~)u0 zJf?U^OpQ+)L2NXrx}3=fd6=z)z|#aX3o?u01FUrY+kwvnWn83=%>#aBv_p~`f{ZN9 zEGT!j_n71??8vbIPHQsKVmgBC*onk5G3q(&DMnB>gwSePqy!6C^ynZqJ6X7plzedp zli6q^@G=SshiLFxLT~n^P)wOc`3VewW9Y0}2y8)2q6iCx-3aZZC{w0aj)b6)W^?xi zjOdhB4c%;2NewNd)WZOgd z6n*CR|M;Oj17{BTKJ*`G*TZ8YNhIi1smUzrQop?vF|M9y@pBkSW5{6rDIL?6 z2r!n+?ETyJ{UCiqdVh0v@DBlhx)k9;-W!`OO^(VV-|r(0Q>ic4zn}P-VZ!}>8FhdK zUOW{kxW}t(>+C>Hlv2xH@qLvd~A>SPZ7Z)6VsznXzVaw5T znb5KNHU$|BOBHwUwSy>9jxUl7Z|;%Ponc-Es3m?*h|C^WtF+}^UK#%gbp7d1u|-XP zC?nb`qGsHAXoTtbSV72OPWL!uDKRp9;?+!l4dz-^N)Y|_PQSwh# z3K*L{%>e%InI!gv$O(zk%eqMBBP$_N^rzh9aFoa^H%^6H_YsHtJ;pHX?V^ArYr(>e zes)anTwRYY+@XH2`IUJ0Zia8J_C9%< zd~nQ*=HJR@@O%*{ZsyMr4-=8sj#~DfG1`yyNzVw>$x9%Y|BtKJ_1iuu+ghXI5}&Mi z`A$0#Gq^%MOE(_juX(&mnck{c{)>MP z8|&2kW^>VvknhI#yrwj zxdTr(2LMIZ(L6d5`(@)3;6IZGJYG=hls@e>r^t`dGvypeztqvGWsv)w*BGX3FQ63} z)YU+cuQ1c+ByE&HUIrn>q4+7t459j^-;`K)zlI258CbgSTvBnLF{g&U!koj-83Hou z??1C4Ej-wY!uPcf@H)bdSB8fb74W5*37W4u(vWk|HxvJDO&auLoy*E1%L&{58l!a!8u9kHg7iSaS%EL$>Oyfn;1F zY-4nY{z8O{S5tGlS)P9o0RKYB|LUjy&DbUJZ_6wO#=nMF{G)k1^V8R3Wz;4=!fl6A z6afAO5YV9j08s!?Bme+E0Cne5b*Z{5AtQv9*MtzFU1-s}lG?6pqn@JD7bZy&R*2_X zJQFQ)*hQ(d2s<9MD5$zAbpaTWp(~;QfH(v0eyR6&y>3Y6(*7ov1xbXTWzq_XW1MaK zIBaj$$8%7$w6u2{n+ol%Lk=Ms+OiJk7y+rKokbGJwAkX9M>DM|9%@VgDi)%eG#JvM zg^OGWt??$7q@O0D@&Et;05bvrL=8mC-CUMg#+4!zk>AaiZSpN0EC)i;C=mR~U*pZvGR78S&}IF^&{Me3*q|MHrg ztm(6{(5ta|vPup1Q@yAe@*fRX_($t>KI(s@)ZdU2Tneee`UOE{^35O(q##nZ{R3D`nD*%rA_y zB4Ip9q?2UG4=}K=D;P~{s-cX#?CDmFr`G1gJ@U}m#2w3<90^Wgk#}yNjKUv$lz67& zC}QS*C5&J=HdkKrW;8=L7w9+`zr4yd$z`q^#m0We3#FDhhOM8(>0GxYTk78(OBi>$E zM2C~#FZ6&_)p}~NO9&ckD^-Lh7l47RiV>Paa}SnPL?Z8(qno0MPSTTdu6|2{GTpL^ zK>(&!c*7IO!L37Np+ai0A6X4J40i#ekuQgoX+BL ze~u#lT$!}bv0lqg6X%#{Vh!eXdJd~ceft*>n9G|pHvAJPUg?(RhRhiG*92De!sa{S5F_L?UNU z_~;n$mnj@?;0Gc|K4e+Zv3dg?4Whyp1lIMS6{5|kAT_xJHzH8XI2alStGOZKAB!t6 zf*2fir+D}f$zafuNvd$hO1}WIyog9j)Nm99t6#NQhCh+?r2rHJ*P)7ZgaUZSlz8z8h>d$ex`U) zBwr6uW}cdArlvQ`Ia>irJnE0#s}D}=e(%T|1e8h$V!|tYW^xYwfKsH2BCc6oyYZy` zyPmI_n>6^HS|Qrz$Ug*>rk3ZCwx&PL=>j_BR{{`YxVzSEpY|oeeGeqv#lVTx=v&ed zuQlfDGhWrwX|N7D{GD2kEK4_TRHj!9CxAK@_gz`CC2$ug%CHi}91BSi8aS*4qLYk6 zFB_T`OEZH~FPuvg?ig(rGNUMq)nQlWVz}K??rDCSbPWmHj(6l84})OuQBAKt8ku=B zQSKdx@OC|EjN8AxXUQu*;I)!UDhbm0?T$I4${P+b4EjUeg>|&O(`ShM`(f!wtEZjf z!9r)rCE`I0b-z)5EF4BNbA`&?r{Dh=L*4=tg)yQAfo2kAD>6DjIpAQK+0b1udNVN# z`X8*n>~<11mJqJUM%o|l#itxMpdmv-E`bvGiZ@&Mp#cOZX;ua~Typ0h*ihIQ57an9 zWQ4-eW$tYZj=xy&6aw55iJ^1tg`M}RyYU?*kT2-rpA8yzHen@iuoyYntr_nq`ZtZnyd8pX)?%Rtlp@%|X-Q=hLLJ8H9xZHF zrO}j1Suw)5)2*f9bnKRvC-pJ01Y4>*0W!{^a_rKpN>I5_c15;`R)JsHrD8oWu~AlM2T zv?(d{u7!p&2jNj5zn+rNL9XLJ4`{suaH!wFu{}m(HRNtcRWVm`ZxB}qw+6gZ7l3Ab zh+3UG`eWaR!-m~)oV84fcJqqw76ZaujF(cuBq!*rpAeKZc$#ojq?l&*VJwFNdP@P; zjW6YNQZXuqM`5FM6=E|A_dmUZDcYnyl#KgY75K}#EqOhN(gFlT)|T$ z_M`;hC*!i#MKZxpqubYo#y{p@NV)Q_!jvW{7PME=n_vqV|g{OoVJKB8~)7PbVA&A1$jl{C=_kH9ZmN5bC;M9)0Q^g8;&sd_zuv{j7rix)jKJZQn<24%Y@rW)a@ z^3$vb0~tqzx5?tvr@4>FXlJ<5&I8Hd(-n1J&VMhNZSU0DgtN9)O&A(Zc#XF{cI}W# zjU2XpVx1{*8@wc0zSC=K$a$s1pSocdgFU%{R}v&?U#;0Ch_n$K4hEE1Hfc00nDSGi zkwcWh1y9UfY%6e_iLl;)c6)I`;E8cRlP%7X23Ir9cq5pbCe;`Pk{(GS49*gFiy4Rt z=jzC61I>9;xV`CeeBXADS?~N5-z1cuwxA zD2A1UBr#oYM;Y%9%F-MZpSo8UM_Y$lLZ&@Op|?rgJ1Gk(gX!I{*6IVLZ&R(1NH|mL zp&*~8V7eg1-((n2#|c|(Q_*3-Qy2p@_62_o`^MGqMD^{IGWm#DRISA5?#YCPOiD4u zYuuw1LAwkYn%)vlauln3>MhciHGUVBPxRi2sGU?muu^FBPg=qvR(^r9osl>}S5gKu z0`?r&$NHGZzq`)fEOJROiBcHOK(IsJd=jsaYRQF>AoLwB;Nal5X$942rB~b?oiW!t zL@eX!mne22dswWwJ>QXYC7CH)t*Zy&hVhi_tr*G_(-$E2EX*Ezw#*aZeYmRR?%459H}Y}P5N8|7%7xCGW*``%`TaUqrSPeLU!AL; zk8Rp;{uGbyyJ#GyGUteoIkQ#uy5dB6D@*bi8boqZ2#~P0x9I(0f5MLo6%*sNWUp#i z=J`&o{swP&6HioS5>rs$abdpQxvo?gs5`{Pd$^Ii|iMb)$4zj|{V4DU1`} zwkb|a{wF!Qx*%&0>#9%QPA)Wz4*&rhc6jR-;mIL&lhS85x92$C%V-a$yic_5s}~1f zZW@Eo=--S0cX*fh`x2iW-|n#F845%UHiAf>y_$t#^dxhK-Wmul)@ue6&+Gd)h3{%b zozyWvQM%c~0;pteQcqifYki;htgudMY?YiiDl-8S5=ZAhMwAdf8Y z^+B+SO34rn?@xEDh5g&egNwX{;RoNpQ_6RV_}kGteUjQpUjL;felqR1am{y7BXnBS zPBUK2fb#-MegD6DU1tA4RuRiqG3Z;G`#==nuKH@=w!sUiH*g6vkc4oa(1PFtyaz{+ zg#=CcsYo~qL@K+-WM0FQqPFa05XPY11Z1Yf5HTOwNskS>I=aNDCn=$L2jeKGD6<}m zqR2@(=qic|ymB)G>J3)vJ6y?JxTw6SH4gT+Iy17D-2A({N#hGZ%q_jisSBSVkZv%4jJ%0|se&<9aakw54Yh){E zBu*0V0MnjtNkA|Z&!7G#y zBtZ!O!ZkgTffUfUt`UrI&)pJ@3$?c;;y~MJ0d#n+X1hSfW zJT>PQ^mhU^L`vg_7TRIt*Yp;fkrLe800RPzhm72!IV>UJdtjUr?Z zv1<3&coAOv`8eVwRw?Dk$Vj=SEbmI0hed@L7psM-ZP0R52h5jng{;3V23wfLXC=kI zqqJhP>hRTvO)ZqJ_29S<#A@MDymq}CL3E-0JtlC@#Erq=gMi z^FdDyT1CinDOz-hm2#68?(Ru9!*U6uep$ePQ?s>eD{d1PdsBUFG{kk)`>pB=PE0Op zN9ji68S6~l)mKVlZkpqO?%LV|>`LpF#lRESwZ|R-PKfq*wYW-V6_((3t=((?XMdRz z&sWIICu=`-A$FezBSunYC9_Ue&$hVAaoVE${gsyy=gJ*e_EN8IbX4Eql@Pb>HM?3} zv&e5s!fB_6N0B9hpBdkvlE-A90(Od|$J(<}4q*y27(2FXyT|3csoO*MEQP_dTdln) zIG$92K{#y7tkxASXEo-G^F?IblAg4^@sx0G{LXcGTa4XNCWOv|LZ$__I(e38St-=toSdU@$BKR96Pt{LJ&&4t*{$3;r+I9cCo)GWSSHQ%k8NPlwZN)gXI9c9 z$<7W~kHtO>|4qDJzv%7LnaZK%GvA*?IWS|5-sq`jSpIXK?Iym|-eW!H+Z@i^i#$IQ z4>w@uGMcygL8|C>M}bCve3$&~LXz77eCeH@t8FA3M&i zK_ll^)y4O<|0|8Ubya;@Hip+v%nhlzAIpE5Tp;D}YL?g6X?hkr23F_^xjuUidf>t# z#Imc};(zcNJiXK7+keYktE`iZm6O>qfPT^p{VJQ2$S>?<(aXHf^|RmRybrt7=+a*Y zKSFuPs`-}+(V|6uY0fQ{I!YP-BmYul#WK0i?l+OW)4r{>FF5`VQ7-dS@jKLDBlb{szo#~-ej#zpxY?D6~-Y=m=p zx|4GcTPf4^{mus^n|%Jg9L>)zG(nY@oPXH>7Z=q!mA~ixLej}`8^`zMypUtLozYmi zzsOke=Fg*`7?=KW7ssjVE>dxJh4q2It^Uj9a-Otu27Gybw)0EDTrQLI;&nyhDSmPy zFwp@q3xxJtvl+zfAf;c(K(i4|AM*il1)|JoGZz0B4Ar$X9Q+kAh_q+Wgo4w0n%B*G^$bIX-sWZjIo;&XE zre$V>9~IW!fO=mj&f5|V3g%-dn0Z{ZpGfmV%;P2jenQ~x@xN*6J=n?h@4_9v(KjLw zW?tCO%fNfq;U`L=e`;yMI?3Xq{e zuyVzyFD`LjR;8-d0--ouyo(y>mbyP2%$~ys-hjZj3pQ?+GAI`5NoB;ONOa3^gYy>1 zO||#Bias*;XuX9vgPcwoVX0M}XHvVhdi<_3O)hK;tH2Hlsk#toJl zdz%e0frBC{-z})>s0>BO&u^SiY1x(g!Mc`pqUF^zv^B-5R1_4#_5 z4r`$$wNtN}r`F$@$f}CSRN(J?c+HN z!935^ptSFX|MT=$KJP^{^u&=+t#g`L+VG4IRN)8_H2O@RGZA0A`&$ruM{3YTo&(v? zS_b~5qi@42Y?3KQBv*WbK0GO{pRkwU){#5)(IVg`+asq2;|^AAxXe|W?J;efFPhfA zw}-ZIshI&bJnph>;&|~~eweBkJgZL(kPobeW#|7xVjD82oQa~d!#{8hkEf8Y2^i1? z$#pG|5C~klhl6<|NP{89N?-nH!~7=g6W(b@U+2*BUhy6qjU~cD{CvwcA@B;(<)ntQ{U53<6Z}d|{Fp6;0*H8#&5&xA5>9 zI+u{~D9e4GlaTotE&Ro@ZhR%=_U+8-St(g`Jp{f!8MH2wp@X-j2=33_8eVPAFODp$ zGa4FIo@wo2icy#8x3sHdSZK8k6TZq0!G9UNk-W~yiqQDI4^IG!PxsWqGjVbqf);r8 z{sW}=)I0Qq_n_XJV;zls87S5bntIWMWxbN-mvs2zM5-K!qyj6w&6R!Y)JS}P{Utjm)a zScU{UUoHetavLn2&`t*D)#~C#glqDzr#4C%i%S=KVD~oICTRFL2L-yW(I6l5XF!67NO|lz~5p8L$^D!qh=Ps9&1K_zaAQ2C)j()G`7det75-N;tYvOvTSyrgL>!n}Zyk24f8D zk_M~&iC@X3+7ZIQ479Mh$U|{yniHskv9Q-^o}uNiD-{mc=G*i65LU3hSd|u(>E?A| z*4A&;gGQ8a%DKYT3r0j787R&Tk%W;LeX$+ip!uNDAXij*$OMu-Q6-`&!5WXiWVZBJ z<@X!A_LE|m0i$Z7D2_FK5B6`6(%zOVP73;~k~YTUd0$gYCFv!uveT6nqiFJJ zyIX7iOg@?_YM<^#vo=L!JHFpuqaV2Mruw?{b>;-In`%u_i{nIX;$S;$Lq)nF$t*4X z8{e~l296z?^BX%W8t(fVEW5;8)86;)Rt4Ic(j2H9@_xx zUx&gRho`f^Y1-A+a~io7q76I&pr$Q7jHRzV zP~ffac8J=?6*~cm)5zqiH9Uirstseb<6g5-Nb8nnlm>3nRcV6*Z%TtZN;@2% zO_ACL{5uGIJl4&5Yon<*AF8*hmLMUk=xh`V-)M=|OL^v7z75@GQklj`r`0`Fts zb`*NTS!dM;)h}iDal9}oeY7D?whL&lz5M{Gl#VgXfj_%fhhZRIuh{wR0MViF54o6> zjcb#MW=C;Mrl|B^5;@RnlUJ-c=;D6d?!&wBKOmwnxAX>j8}l`gg-fH>Oy^zE<5?_` zTXqXW1L`XYoy|Qb9k4_h^BPmnazc79!MV{{oijSQ@O3zA2spQ3$sq2dl&-z z0|R+A$q^6rHBmO~1{5MI83Q=Cpt5dtpwaKWYDSMH7v+IwCi=^>(dRmheXffDL(M$$ zBm#nC%u@yew{b`J>wo$Sb6$%CZ?PV)qnr)wbJ2UY97-{wvR5itN_umK^MXE!Qdgrm zHtyn7Ep_DEIVuEIJNjxQ&015#x>7A)SoUVx5T}ZQY`2PHvxHFMD{@zCj$QpCG~T{{ z?f7;2@!RP*k6gc$in=jJyJe`XJ$t+EbZC;-z$k?|a=Gsa{Q9}7L`U6b;+mQJpYlTr zkhcw%VbZ96}ApW%4$Y;ugUxIMtH zs-hdzVBfd+oeBxRa(z;{^_vfSOJHHy2`PVSxjO7eT_6-{5QtA!gGr3Sf0Am}(&Bfq z>l4}G4Gsz?!>)zx}Mo;MV$E(tAo=BxZ#EYF%N2z#x^_ zkbj;^;QX_P3=dEV^u zQw1*Ui2CE&{qP$g!sD2YLtZ5U8tV)DrwP70Fq{Mg%rj-lNgu#IHD^ zkHDIKXOOyZO5>kXc{f}?Vl58F3(;kB@6)mAxb-={U84wAofwkr7+)c#Hug->yfl#U zbG6gTk)n;M^&>-X1aS?VMd+8nf2zdYPP`d4o`dj0f(Y^x<31e)8EI7#f1_@)W+{Sx z(z3Sg99wRc!?!uP!ae6ZIZ77tF53dhxoju8$sVe!W_>>UEe5W+FKJu*9c&@%{zfZv zQH@fX-Q2+y*1OQ}yM0!604GZXhSX_YjH1YO-o;YslNSz(8v@{=(mB2i18w2(RC=*hTE~W(7|8t9?Cgs%nmco<=5z{dGjz*z&_nTw|7p$^Kduf~Sj*|? z1q)Pq*=W5a?7+6Tl9$yQkfPoOq|zzusU*OwYTb!(8Qjbvnh{+BQvPsZUwwaVBC5OMDeHIjwIXzQMZqiQl{8-cx(1)rg|NYV*q|O)tnA%% z4vuS?;NoEY+SgL=J*B&crEDvLDrp9pcbU76-V~g{dbT(5;+}heDc*V?lh)J*yy!&i zH4Zd#!+tdAp}=dTGeoc>y}$i4VB)Kj5(jDx(w4eX{Q%ytB2_>54VW`E9CkPof5u>9 zNz09UAmlI@6n^rk-UC-JiDS;38q0DV}Knq7zO; zILS)4<rNE$=TgkD2Tt_g_7o zww`0yMh+k6-O%CSP$ZiVaZ_Q0u8$gR4$T|;ofSUFtKO6P8TG-w))Ma11j0PR&J@EA z?cEQ`$wZBheY#fMMK34q3MW8vcIjDbVCw_#h<9e<5mZ?n4)8TM8+kXXPZziwNzH8z zyh~FO98b6Kr~_2pEEiz{1MpxH_Img5lFQVi!5H)L_^|ZXablo`Anz|$WdY~$`dEdd z7OH|A&IRe7j5$eLqnoTa&OHvCEz^j_wf_sLAvb}v^DtiC^wzp529)u`bh#UT4A&=_ zDFcqsIU)X^BjE)1uJ4d#sK;qkGM_Y8cl}m&^rt$&YCGE|l~3y`zM0jJv7;zlU)Pf_9P9U1okvCh%R0>-6?W$a&G*Q}^vt@sRyn}{aVqlMM`K$}a zLW9%$BQk{hA`$6Lg4vsKJg4*jeXMsb`3+r>Tyq}!uff`@D7eZGsgRyfI4LU$#OquM zIIuKA;2t}>`cd!KZCpPCoLXId`z4jtjdx>374#7sa`LbXJp8q}>H4Ou-$yY}QS}&B z%la9`Wmql>N^CovrbL%_y*|K&vr+T67T!@W!IE!cm}wJktf36lh^ zG;FUeRG#SMR+$uO%U#~sL?qinm7N4kNTT}pRWfK$*(@e$&#ODjNmbnyoN9+)|(rc#1`=WB}8 zD}i!V(jaxMr7|AA)7A&DO3oaZb&F9e!epL0X&Mx?qxTA%!a+JFP$>;t;fOB#ZrA9( z)rAig8&UfXW{Qu3;Y}*okT{pkJV;SBC>N`caAf48O)NY0Lk0a5N}eXg8|qAH&?+a2 z)qVfLMq(nYZ_qb;d{cNhv1z5e@gWp*`|It@Iq~BLcKrI#CDaiudYd38lGSdf&05pa z&DrkiZ_9~Z#dhm$Ggf_NjIo}oV#2Z-jo2(m12*XU*$NlW0v1@p3@f4qSpf~C5?H+o z1yE6x_^O)u3alpKcf}Wwba5H5>XcP^>#OCUSd7Oi3}GajZaydEbLj!Fzh2ikaXz~5 z-(<#AF{?HN+h!W)1*l-@t?B)!Wl+^w+36?~h~B#n^ATEr?wAG$&sqN0u5#tz`A zZ9tVBw^Q+wctD|?fUb(G$^kln*sFCeun}nu;i_rJGVsM+J`$R%JlQb9ce99@gqz1R z=Mcn2)^;uGFi*X?avOsVQVqMRo!j`&XE$Dig@4M*HzimvvlpEd;BHMG z0u&79*x-7|%ng8&8R{$Vl;Q`Xl-8(59ukH=Nr?@p6S@E%s{3-14t=Qcsi~X;WAbR~12JaP8s{G|mDQwz=d@0d3kh0BP10oDwl*&mqAUb{09C{x>K zt07o{vE>9J+015p&hQz-4hAfvK8jT`+59+$K7txql~0iQh*tEvsd+G$V~BS6%xf<~ zvs}h+@I*8pFhgtX$$r6QI!v%g-rr^_DS1taWe#9EqWTQOU4*^nwwHDp3ezBbvL zdTuJ5J!qGv#tkNzj6y%vLKyv#i?+TF+p7#H@>0)qtGwe^mOW~@Ac!ARsE_Q0p0p*} zQw@&>zZM4e{*R2Ke`SVz{JqG3nUd7e>;aKE>s2_ z<|!pskgCL>mRDAKTH=|2%8#4VR$rTEz5YxbHpgTTvC8t#=p|kd|0Y^AGs}rTr}D!{ zEfo4-Yp3R z{UKz$vxmbAHE~B@pO~!3%rlr3!Dm!{5GSi~Ig|r1yzx}}JHS7e{oJgJlz)xP|Adb+ zRt@5q9Y0E;sFuR!xWAeAY=1=Rv(a*eL@oX2OTOuMvHCP&)eKgp9g7i(u=v%PVCI-T zWvcK02 zV>jzC(VreDti>^uU#RtO3u|Y6UrUX@Ed(%;alMdj)*y}E9TvBDe_Wk~qr(RUR$egl zte-tCOU(EVt%c>%00H|~^vk7Vu2X)zH>AoOtuCN@>uICW{ zeR1|q9q8cK$A5bzp5L(`lwajwT;`FngP0f*0*o%{sdGZ62pBN-l4nfNX(Jfk>Iv$6 zGd$maS?_4(HM9J`*Sa;9BNPHWaV$>USWzk+B(WmVPg>m~&db zqd@sD8GSd+DO(&8|G|CUT+gpxMxa_AhRa&~HT(yDeahvIan6=wg6*pLM2v|lNfqMQ z!92;Hs3tCxvOA*ZN~c1*1m^&I7X;F(r2HAtj4GX;fgcw1Ls(X7*&MQ$T<2cvxl+c_Ae{*zbbKLG|L;cW)W$Fda^s)EnR$@z;%mw|-o}yFqFI;0jiy^{a=5rag zxQP95TbR7QfUup++nnBaA$^?*^_m9X6#@-C)hFHZ`lpOn2tL}teFUQV>&F6KW)Mit=f_e1585k zx8^t6*!Su$$3v$6Lr>}I#wEYBXtXuL)$+q2H8z#LI&d?OJQ+`Hjn6K9>MFgsNOe|8M&qV~j0g6TeO+^<7y=3cQ7YbL7W36I+itIBr{nnmT7{;{FgM(W838m;1tHW69ufPcp~s9W61=pCjLy zQp>7BZUh(V%G`DcNKE#S&#Jzg^q6lkJki1u&Soa7vQUt4B+0;K+krz_0D6pSubx}p z^)m*J>9*5q)iywH-SW$@&fF_b{%ieq@mg%Ov9`MQ*`?X?P5vlEzHR+)^5_$IXE3X-ZqT6aF2kWwv0RH%|PBgCk@W(lsnCrZ{FL`FoUI?DnM8)*YsbOV0V(#wZClt(dt#^x0K#)-8q6_#`SE~{ zZr#g$)is1ab-~uXZWPA1puJEk?=A3S8Lj49n<=%7y9?K@jWtf#Lk(6Kq~UB+RCCFG z;H2GLZAK1+*&1<>TCKO%t|NSV)y>*UmTe%#nAdgFcE?*9D)oz@0jAQvV6~f?2`$5R zo80r={UWVlHCWpb^$9&Y6Z52Ei(M zenSqsv~s@F=UfoB=+|y7FWPEJ?n;N6)gL))^;7p}b6nOj$o)PAt|GSz)o!z3=GAvc zT!l&oWyNcHz^$9=qN;L1C1Qki*gi**2fHwI<|1JRK*jo)6=Y-oL9_vGGvCpY_9;fW zmn|bgZy(sV9+5Fy#512Y!P~F*z~*Z=pk)e~sbx(s9<RP}JI+S7jBHpVCLI}U+^zCB>c;Y^6rHPCW5RM{+Hhn6Zkjw7h~k%`s& z@9K`e5_@JSgymrct|YD`wq4E2t5>rMVGUdcCoU^D%;t4uip{tkPJ}EVM-^a#l6e09 z`vQc8D`W}pwzC_bH0-{!0&IvgZv+sDT&8?`sCKxWikBk-ONb*mOJEa$R7yvJ14x3LVkBx^b8OPrNZ9VBL>4z;_daL4p7Cg|l8%UaV z@n|Wrg_zL+QbdT>_0Gnu;!etBzQ6YZum@)crlu}m_bQ~uea)k6t@2|WgW4#*>~PgA zS*wSDNEo{Z49qJ%?IVWh{n?ZW*J$phDe5YMExf%qVQSNR2V3GVS}ZT1Z!k3@vG#{? zj5aRe9DJf?Ues`F^OcCKs-y*MsB(G#DUPB`lpaTLe~rvVvf(Cs@QHN?rw@0NkLA~iB_$Yhf_yDc54&q%UUFgJu@s}5!+klc1 z&|1aBop9u9UtYx^_ib8HZ)$vbyFXGftCpeaJoU{N0Y}?zS`DiOD^jcnzc%)4XBc_r zQrtDtj2C0d8-+Brm@fD&!*lA>NyARFc%xTI0#Zn&1sIOffJm3(;|9a4NpV}l!>R!o z9kJcwsamaJzLV5xMbXFX?`Hc+2@-ffYMn&eVAQBzJQQB)?FzVR%pqp?^Gtn>oQ}YF zg2RnX!W?1Qmxe6G)dr2h;lh|)1Y%gYD0O?)4X{@gnY6I0dJ==~;5k}!O{%+D`8Lju zqfNFezAfhkVO@u&hDyq1xFA|&I8SU`)nDYiZFf zQw0?mH*1}9GsF6Dp0rTlN#?lSWf}gy(57IHJKL2+vBL9_PF2F zqSlp8ZO>qcA+zJ7!>PovDW*-{N7DtB+E4*(xw2BLvIbrQTgB%9+xEj-i){-CNI!l9R6l^r@T$={omyu_bf#*x zy&3a2W^Rb7*8C^UZgB!yci)!Xv14$ zqugI;Sr2=5iIKd|^A2KtF2Ofn?6CLP8_6yXD7@3-Wf^}GLtf7rtBiRf=f}3}+apDk zi|80-ldH>p{6I!}dy3(Wal46ZHLMd=u<=gOP_HDA!3}W#X_@r*^@_$g$5EeS#P_73 z#=EfsU?{pDXxv0Pmkr1|WfEo`oSZ$C2_-^0e#!6d?$Iq=g>;2aX(T!pGT;TZpMYzRd5=hUlfbssq z1Aq455QV58 z`yHIQT1lSo&h}S3ggkPq&KnwX0e2&&B1Lkz7A#(iAdS(U7zdDs+x_tAG^H+XzAvWx z;FYh)TJYCK4(gaSm}4A$&XEO|)3EQ~k`^wzb~k2GK?bHI#gTP{diE0js6qfLAOC1g zZ3W zjz%`-nX&~4G-UOa9n||lh$YTwCM@k8avV^r!!1KDpP*w*0ENeaiSa_s!Nb$n!3Ond zYRUln@?OeGO7#F8tXM#>nQ0-Re2GcJBW{P$TgKqxD#6^~0||VYca>^L?m#YJtl)*) zNR>DcRtRtBJZs5Y?MYzEPUlTBA_vVq)CGTg@}@(o3jOJ67NwL1mniLFppacug;c@& z^-&bnpnKH=gf2?dDJYAmBp&j5nvx}X)f5F5Y9b0xt^;m^;Bv2LSg(`qrR5tKnWEnV z6#X3{XPdoYnAm@osuiAptvd8|Qh1H_UZ44x-?a5^ALKT4GplB#IEi$n($D_iT4aBv z;drhUUtm9P2lHDgA_NFM=j|GqYa3XIed~(xAla|8+EPj7jVIZk{`_)z+_^{$BOq2a z03a`+VJ-Md*14!=xUMP=iE98rX+pgnJI@`fRn&bzMaWkilBrlsBHd|^pobtRq_#=vhCT+Y!2Q(jzqVAZpON9K+pj@MUQWC zDcpGKSMW$@Xsew#>UavH9-H+te5#KHjcGgm%zSEP*F`i!a3w0Uim$5xa6;a6tuT2v zscJ;*C{(A={4aBT5CWDdFYTdv6i9yc;zkN!=N($?MXWxSyt`Y>l^759v3LBtBL1bG z&}gxedG{tm{AY_w2KAFQK7^V!2a2MIJnp*|-nF>E*lu>GnC^Ed1`~luKG5vf)VE(E zYoUoj(`@${1g#IZMZSq&#M(u;GQ97^TXRe@tQ(D4))5M~w-)vTLk|%X@7Ko{Zo2s1 zNEfTO5~p(P3Ez^6GsXEMNYa_m7CGR% zS@?||;sWKmt{*ic?gYGU%p}x>8WX{qrbDWL>t%#j-h9TbK!TG0KVb@>H(retKtTWi z00000077jz1FcP5Y3@5~L$yGIqIS{$QXy=h551K&7jgx6w18YYtK{X=7w|_8y()`H z^6S@EM&7H40RX5BZiZX|AC2sA@E54%?RJ)3eh!N)j_^D@O#-*?*+xZ+KL5qk3X<;? zpiR@Qi^)8FJ;6B7;80%Sve}wNML03`wvxb9!9?}~hHW1wy;1u%NTku6bknin{>GIy zv-IUG1=t6cxj%v4?|iZ>098a_RYf#p4n&vkSIW)nEhTy~Hz{6QPUpZuGlCKMN9-TJ zJ`l`)&z&R@VgD?zPfu4?)sa5>h?Kx~_xq-q>(9s^-??)Sl>e{~Tl(U=|25wljApKT zSRCUXUS~f1HyT3T-`9u_d4%QruQyuXp(6(V_#<`#>jS)BS~#o!9VdGH|4A3SV8`2j zY=_66U@)qbq+j#D)*6vtOdK@y=O7IgibLn6Us$`o|67j7`moD7buXKplaZ$?7ZY+VVH03i ze0TXgbL0WDe~-3-19kp$>MwNe%5T1C<+RDRPx3n zcizXh1KW?kFqLY*?tTxI=pUy^^N%@~U&OMM%Lej^cQRs7?;eWLCVzWQh)v$RF&h5! z^5OSx%ZZ#VL}_!xz5nI&nVdEHuQ0}*8>|k~*S}kSz3Cp}_&L4;=y&Hzy}Cp`?I-Kh zQ!t5mX&fq?M7+VDUrXjW@jImwd(NU-xL6aeoe_9HvZwI>?9XZhBZ z47ua~8?lKj1{|_@==rzIgPDGNKkD5e7)ATj? z^gI=R5iR)-M>zG#X`g7Qv~0pD4@ZS5wnIe}5l> zlVN@0{aB{$HlbB<0Dsh5Pb>11_Uw~?N$wHxT28q-$^Xhu``0n4;YVKt;nPm}*{=OR zi$CU1LPA19LPA19@PDXj9cKvtXpjHO51o4)aCrOv|1U@8e`_{{tlQsz|BV>_{@n^` z;bb{K|3>uMa?qXM$ddT|4kTaqTK)LZ-CS?@`TvlRkdTm&kdTm&kdTm&pO7Wjjp{Ek zkxe>Qv0FUz@uCZT+UMhdPRjXRknoU@pOAp#BqSsxBqSsxBqa0|PWfT{0n}R%2RY0K z;zw!murr?5!vkfuMg`0eeJX^Y6U+$IrpOI0Tx`r!4WDPg06##$zvjqCRWK0D#~gmK z_%fb5_Fq9}I8Zc!*lH?-W(HU^84<|~r9omDhrq%LF)St^3=@5u2b=^%7jqBkPoOs+ z+aw9;ug)>)fdqkgtBk=Bn!J!{!Or7se})ow2)?TzUkb|+;)0HXrehhk&47#8>)g!Y z`i$Gj3e$+xun2N3uSmI&9;(7*l6X>1WNL(wp#aK!*5)2kW+C}^NQ|c}dtdYnRp)ci zMQLe4hQJFI&XSCv8hO7eaS$O4geHuaMkz}1-@Aal(M`<-Qa@w|?Y@e_E%|T?j%ooX zJe-V44Ppe5VKwOI!I?1>y-04U(480)%zUvkUV$+9JeX~U49OiBTZfDV=jhy-r8)u{ z4v%RL151Jai`>h+?Du?@=YgRkUoHfsXhmlv^@WK^`Og(NE!`%cVgaxNNxq0|d0K-V z{(gQ4z6Bv>#%N?Y7#B z3wexxj%c31`7oHDTnwQJg2j+b&5Yh+&`eWkMiB;6hF~!wXQ;3sV-B`R9r4DFpk_u? zWnyT;;NWAr(zXx@WQAM|2|>sXtBhfR$a$@Xi48?xbW9Z(ja&gTNP9%vA(NO{@0+-KU3;`BRa(Qqx{$A_wOy@So67nO8ChCKYkB_lH7aT%;P7-P{gV_`fFM`ns){a!ATmQ!L@32E*&SM`8dHf~!1)%7nPG+58yfR)223b81~?0m@N*3K z8By%Ynh^}d4v2FvgY#*HgNRD>c>(t2xcn|I;AfI1&bdUmU+TskPh7pVPVJ&)znOg z%nZoMa)Xf;x{-&#nZO*c$e0-b z9W0}xnJ68w!5|sNvM@lVl0hh_?iwNS|q<(8n-x_Bv4u~xmudWa2qWOK}nBh39+EU3#v>J z2s?p-DlqouYAHZ?e>5u1&yKrUgc%Mp4h|z^sHjK-BC(ngnh9#tPkN2W3jf8R(($&W z$TAyQ461jRhAm2F49SBZA*a%^c3<7uX1Z@Qd&X@YSyQ!%=v&{-OX zAv8(osT#p)jACcR{Ag*$;%|~2J8)1f#$XS{|k|Zoy znxWX3ewI1IkuhCs^df^~n%fZ0#bj*YC@_a+jB_-RBQjZaEaW0&obGTb#?5@Bu=1qT zL=esuuV{_s#A`t69gBfYpneKugGL-iN77CuF@(jOB`Q*|f$7!sibdV-?X~Kgv zQ&OkFfzl`ss`&_Hr9>B1bJaen>Z&UA75T5?R15On$PL#(E)Zl;aYbqDa1E-w&`K~v zpb1NPBnwpMA$cPiXaUAmIt&F;Tzut1??YpB^Y9`jCu^q6#s@Bv%-|cp@KACXtTO*; zYLRLl+`Yr8;bU07Ay2`1&8bAyZP!L6zy6QN|TxY|r5EMUeU8 zB61#(sa=EeE0M7R0}CrfM)(aSUPog#7BjX-BpA43bjKt+P$zE9?Y=gdptu;~fY^66 z-&CN>g(UtKI4)}DD~vf_{Bl29P{oiMqUc)5d7!2pfzk{GRa*EZ6Jk&q#Z@A52kR@S z(&9BT$3c}gCYiL5RZmiB1eT|efvjq%aswQh-qPl*#!M+mJlH~gMlm&R_%-|>QyRx< zJCKp0!z2|lQ?(;G7{pl02vq^&@{GkkRc_pbMjBm*X@V9hu%_Qd3L1X_TVsqHdG6l} zN*#n5>&B&`3#B3S%lsg8sro``#=~_~w!1WVu1YM*mqO_(YxPue9_JT-ExLklsAV9+ z8LP=eVIwT184Rg8LawD^3#BO*e#7K%OB5JOBN%)Wm4!=H7)v7;l9Ac&rQ$@TX^hju zk+Vyx;a-{z2g5jki=~vR`Ro6JkT__R*$Jwp&`K|#po$Bs%wP&A$)L&$t}J>8s{at; zYR26t_~y%wL!mc}2OWvU2$`@Qp$?a3XneeVkuqIoNE&_B($xG+F63<=67ao{E2qd< z8jmqFSU$N@XfKr>ev;our3X_Z8KsdJiUY>2OC=Xe!^0&sO3JFRf@o2N(tlbExv;Gf-9Nl^{n>a9)+P{{S}LJUBtI9ZTaFLDRHKOJx{K6Bb$HMD|LH zDwf7O#)FjT9Ec%=oMCFCj~$eOvO|z77E|*_AuUKu=a0q`e4?MnA~R~4iT;p4yx)r) zm(e@^svD`IVuH@?N5+9#;1}eka|CsC&UsG9s!o=c_c{VribEW_%*g(mh7fgay+y zDb~_(#%Y#fY&Q3>H0VNWqF?~8%QQ^!xJZt@H0|IGlh`iFXOyP6;`tn0g~}bJkqn+O zBB!OC2hwndyB60=ja(cJ5oawCnoH#lV)AjgrJ4(+SrvwJg^^43 z7E6-~-4Ww|tc`sw%!3*m!Th=osz?W>36(dKC%;oFuEwH9gJYDl;AD%)(4!GS3nAmH z1_SCurjQMMU!k~;wiq?h$c?^0EfL8J!SkWVBp)KD2m6_(__3Jc-#I9d1RkfUG=D4k zw#E4io#BFGjt@#tZuB+BU35Yr$d0r)jZw%3?KDYf%(~;O09a(l=awRHWL%t~8DX0& zTv<{foQ$9d;pxOWuyP8Ep=#rm7#qU|2Wv7?CN{^aFFFRK4!>aVa==~E-YSjLB#WJ; zau!(whSEw&FqXzHpau)bmW(QvCNcOXsl&}vCZ>u=mo+*|<1Qq|DlL^8bj=q4D0? zX^|8?Sb{3Uy_I8hLFyf86f?HR8!$*?GovaStkGJ7j}x~HhaZ7a z6wHzngaPcJ20&zm%xdybWQ(xae9_1iX!FEIBrcF<3yn!!R7{k&&>jW%bxxqXE~9C@ zB#>l<)Fh!Q#5oX!j?Fv}wZmrVw5(!c>~XuMQNIN>p@BmRKt=$*hc!(GwN=gXN6K`0Jlp zQF;*h!D^o;qm0~^DM3D@0uV$jvVsxT7&0=E<0D@iyAis<8qBKNh>8pzskbPRAq(Xx z+Dr)#p`glLs>uo?44w*DLm$DTB3{G5A`vHo2+SRe(98H}UgP#fcPt{*Vvoq=6gQHL zB7=0m?1r$QLL;|15w9Am&$3vNDivP>g(5Dx+yq8zbYz4zhKxYD@DZdKsiL$-B)ohT zXD*yZ?9z(j2vAd>#ik;IIX=XCj2GdhArYz-fTHwcGFOd2BS$fhNY(S*2#gL0`2kHO zuOKZra`Z$PV5mqc3>L{!AtF{R+GL8wT`c*2h$$K|8KlOfky;uX8H|A=Mjglj>x~IM zAt6y*Tu4zDVZzkL86*)XiXy{Q5rq~j(#E1iz+b3{Q3|{&aaSCKCWd3ed~`+;V$%px zj2?O307%mulFU3Hk5Xhyi2Z7hyjjfE7bl`|B8hCl_z|iYOmg%>E4;{*MU`TMh*=si z;;2GKwqr06&KHMe}egLTdv< zJi73aCKq~gg`zN+ghWP?VT*{091)QTqdEH*Y_xg+N0m}ZNC|9&6ALMk^5P71_92H{ zWW*w}x@Q6l`N9ijm#B7&nk`=R9v82&b ziWP}`!6IQO=44EUVMt9ljVZ~#ku(-FVMF)=%%UM&+$oCoq7yGKA|L}szG86577E(b zr0Rq~2-f}_UtWVnpkp|QRt~S{W7yRwbY!Ga1&ADk(KADX`}=-xhCVUej7 zO_|A27Eh4;A`&@3R@PzChisQVK@IbIh>y~#RD#m5;R8DSJX&UjU4gO0gmkhP>O7Ry>{pE%|28}e{5J=Pv+SwAR z2M8gBc#4rBQe>dWQI4fpzaa{y4#*9F>D2Pmp%FujBjn>leh=hkhoKVWF zFESCd7bo&HTpMD+#fntG&=D*fWieWD7e{0aBZ(?zM0^I(N&<`7oM=;mKknH7f|D>5N1Xn-Lmba6lpxU-5`Y#uNEq zI9iY~rV5hN8W@;RIqnUjG4jgF`xHY;C}rf}MIG_N z;1MPkts?ZIHpJriM$cfA5C%>n#7h;J4(LRtV^3sW$3?DRD1@eqI%$H#4`Yq;BD6F+ zl3ZaUOD`&942wl^qLCU{k!T|cCp%q_@+4~vCGlE=3qC&FM5}Q*Mi}QXP6i&J>+@hU zEpi41Wi2!+TFIdv-)Yx31H6$(oTfl5bnTYS!Oe(68m@agN1fcz7c;m{&5z#<1a?4- z_}du^3J->mobesh-gvQBu-izUoy&=K*lO47!O{5)cr*5TK4LJF%jmjfj~$B(UoOo3 z2(1ek;qxu*o_zi%RdYegwmE3JCCJBGFY!abMZrzKsz18uzgPs^PUvdhS7L@KfsNA! zVj2f{3&Og971gb+U};c!D1;I7uV<1&PV}h?vt1ND<$(=K17R50t~Io1ZVPV?L=b4? zE|CJwMD3vlMj6m-{T_0B6s{L{aKxMAG>q~9+V(z(*6h*Zv)2$2U0gBb%R_X-MhN#_ zmflHu?4yE2uN>DC3R6Hn^Pvo@Qxu`Nm8?W7|6gRnI+TkC{=FB}$!d|prGur-Y8JiH zy$H_mAXM5HUrVLpU%Q-LwBhK1XW_H|Z`u2!8nrh^Ocw#nN9-F-s0-=VXyG&HUJr$d zRhvd{bD71AQ}9Qn{tRl>yCNlcWI%49`$&E{M*sT~W^8BhNJD)HXhv%z0at3UR>NM> z?|d(c(XI`i2DXwjd?5PZnkn)8FWGvA-+L-bVRhT)3BFwk78oknt?j^zES3q;fpo}@ zVN6;epXr{H{(K8uOey#EgKP6le-nUVjvp0Fge`d(4k;b!$-}qefrl)=W=%u?_sDJI zU~;tPO-${^v*n%_HkYN4fVtZ&CytL1e3YZulUGX$=IRZezUs|wAC!%e9nC$;0i>65 zR`^NIq63(zC#ac5Of-I(fGgl#D1r~rRxLJ4YrG3a+r9;E%9)`SJdhk=T8gn39;H}2 zr0cGrRxQ+^)VIYHYp5$qE&c%A?bE1(dB4VS1xV}KqYa$k;%hMf>dT2Xhc16}b1BxJ zDy9lAgsoPVas)j*Mp`s_&0d%EG#)q4uurBuoKYAvA1>3O>!FWr8&hQ%iNHt1hD;?# z>jA?Bt$G;EoZL%?78U8_x;xHK>W9Embf{F3poP^ct@wo$x>M$ioqF}By6OaI3*A;# z-8?Owk_58;iBc8E&*YoaIr6M1l>+CEp5+P`a6WOyypyZzJwv8^nKh?}TeV4?pkYN` zmF2{@RKm;|t?LAov&n~*ZBJOAg$ljv^{Q^y@uzy5g}i*ytPWc)m{oCP^*o+FcitTq zC%~-yEaky+W!S30l zWHsADcGATU1IU0?EF(D!J>My3E*BQTJ_|(ycCbP)m>)L`Zi2KU#WRlvLPHH$$PBYM zTr_2+^{|@o(69lxc=oL2pQm=QRX9sXzvHvAgR}8ID+4Ot`L01)U@d0v;^*s6f7@CX z4lO8^@2aJDQMmqmQ&JoN)mY$y(Ww2c%u8cosK^M?-1F5#sdliMecrMLnJhPX6ZI%h zy&u?3gW}mL7XpWtvbqrk`Lf2|v64cSJ{Y5 z7yFubDS?RX0AFF3*O@=t1=XyPf)DB7=t7bIr>;OE`nT6p#=!{cY};vH23Nv@VeA$z zINd5#ScXqP-&`9VR*8nj>=&8>3l@Wtqw-xc;iPy^v0Z)`wJ|TuO=EZJqB03aG*36g z<;|JVg&B_e1run!$Qmnd5rw@f!!?<6sG#PH6qGYh*RRb$!EVZ~Ci%y{gDnc?k@Rc^ zf(WSW-Ps%i{a|&jJFWJ#H-Pm*;o1o|vp8oI6gyD1d+E)QJ_reg7z%IvZs=CGa1wWO zbHm4;U&Raeil{g}j28Sj=fvr-P{CyP{+y7UKKcq?knB$z=bi!v%{uxyqYbxEb(uTz z{or#Hi$+&0ljbDScOY#y9@BAWo3aj#7KtzJIdTr*OnWo@O$g`8TV?32l&6y#^pGiU zPYIX2)o@^?!NXUe&Wp}npfcR869{t1JoZrJeIx0(%(?}m-l{u2pap>Ay6=QlaNvAe zYg6!$yQ`~;1^Yk`C7+(N8#XgL&-@mC6Rpfz1uJ?B8?S6BzH!QuwlJeW0z=oMp2|?l^@t z3XZBj&D!QLXY1_PY?LpWbiD?~W^~NsW`K&b;2P&2V`@SjnGh||6k3+fnyCgb z6s0|@>F2(i&99;ecZ1bDK?GeXn!MKFx#Zs8LPNaFYn1<^h}GiWnxc6dsALMQ_5WlV zuBjmPUwe&bKOY?ixF$In&FpB*fP~MyZHRk9;=BL0!#U71gAJ#HmTkrASl&=Y9(Xfy z+v*l1*sEd6Q@}X7)9)y=t3b_J>aIa&@l>9w$_SQJY3}*Ymx8i$qxff9Um*V?w@!3t+6UeIdAk5EK>i$~CFzHO zmf^pV^LWoe>lRs<>os^4UGoQ-Q*TupUQH4t}OA97+x)hX&AF(8#XmP|JS7F3fn)NoVz30|?BDa7&c%dFodINDyx)s&gFUQ4j>Wer}(J3>n{tOH1~I+b5PxY2!{H$901&+I3R`C(LB5f=##S zbOJX?5fqFR*>Dl70cyXpDS}7b=>`S0jlrgv`J902Pvq2r+tOJa|lX zQ}?&C6-A@n40l4;Pm%NtW-8TB%bcxa{B^UKjAg5GKzAG!a`Oeh;Q{X(3Q%*N-ewCj zbeTIw<#U3g@kh;3XW6KR4`M_82(8n9N72>;Y_HB4HH$IT{wN@asdxJNIQ9ytHn=|vBd=yj|j;!|5A4gl*LL2OPfA2W!6uUI{s0gLtvEE zgPc_GhR&7DYNy)fV1SJ$WUBcaof@QPa97opY8}oSP}Jt>T4dHS_)TPF% z-EyDIwSkX=W8Y-n_X!hR2YoR?_nmpv~K@wm@b;a_=deae=U8%Pbz^ zUg)eoGZgr>ZojH9v4Z6&XRx$a>E~k()&Eg8Nnot#`55w=2xFC1Gzcp)W6HKr#0$bU z4(HlDGj|c3ApB=H2bIpjDlpm{?!xk5rREDpQP{FKaG?mwt?N#6HG<&?j}v=kb-8%( zo^BPjPvM-7&`alMu32dyx7m2@gPjhpS`8d{(wsT1g}Pud%SM6F%yVnSv0jbuYS~-5 zm7D`w6>sgyJN!CTm{EAX6{O2J+}}c-S56XK2lPgl)o*lPELO^Rwv39k&2n+_xPUqbh4taJ%(v$H38>NhSR` zsXgEC>y&4=`0pnU6vI3Te0L;`$HPd$NK?4$)#7Iu22-OS|08Uj}HvkAS-3Rnm@4R zf;H34T&SR1bk<3|xF4%c2weyjt-5y}m)3TW2Uz1{7GK~)8Fvk_XAfge z1hzOuYe0!Gu$Mtm?ss1d9fh&sye;$s_C`4Dw1WV??`*8#UNGM^Hb8 z&rnzC2lp7!>bT&ccFn&(M;v(fd0&zi{QL(6BB0kq;h)<}(%b@z8I2B1{+PDUuw-HN zAF5>oX57l(?!o(IwPiz3i)FLoi+fG25Y0CCj@SH$fvv;@OndeRg*bLL8;?u!R+Is} zSEt!>0u1cYiEQ>X&jVNrJ!iEJ%OYQR2rFk;Jmsp_0(QBvvypTKM;7kSGCn-W8ClTe z&Hb!eufVIHL0QrI(j5MufwU3Vv)xJzRcPM;%YyE{I|&I!-hu;oIYh8wJ598A&@j4Z z&9-wXkE{bE{0?`Q_Br7XSn3JW1|Hld3^7d4Sko3kHs*8M4)2tnYMKg7Fx-w;t%2iP zK_mv%%xr46t+ctemX7SaBkk&_Rq1P;wXx?aHH3J;Re?)qHP`afm(5U2yHYvx5|MX z#IlmRrFdF16G%Ubza6)Y^!$|8GVT1Rx-NnbqE7KUFr&`ElaXGel(`i$#8p21W5gM; z(rrpCnl#YfK?3Uagh1W%$Ny`$MeZ19t(3;X>`9qG)p+a&^%yi1I}MDnd{A}Qd)uNX z@xB8JUj~hDcNWYx*~|uQqqe^x>V@08-`lDk=%x&pb9!0Wx268)S2`tdqn@1DErvY1 zcleGeyKdn2jv2T9$!T;ZKAo(`$3gZ8KKz>s{==UIsKq7aBA(>84H$Ct=a;+jao9Yy zf~2Oh-1xqaTqUF~Sn*k7IZ+KA?B~geo=E?$?^(I_JwO=Wq1|V1l8v}22($fUuYC4( z6XW5m+mam~hv>$;0_?db`>9dh_mh#iTFCaRE@Htk$J|_tMGRK+Y@e&pg}?^ZxZZ9G za&WHq9?p}!!Am&}NQqB_Kb+gvK#dy$9Xb!gf|NJ~mko08$b}xyl<(tfQ22*<_d6SD z=V%9o=D#qSVTx|get~G*3EjHkJ7%TPLf{h=UAhGvhSmw`-t({l8f)ToB|d!{41W;u zbDM6zkppMO4t19f!?-dp6iy9x>jEBbxT?`y*A4=3+4~l4`?S@gPGbexPjcN9Xab*? z_PU1-tfj~A4C?|eGzbM$D-B9N*^=BO2&yA!w>>eO&cfr~t<-0+x8eS7o-_A|!%q3_ znw;Jka6%HU4emnLmE1~K2|X*y;|41fco1rf7w}oxh5iM4#VWi&oekdKm+>O(Yz0L4 z+k3P@%8c*~jLw7de$efoT6y9dx{c2!)Ck&?an*ZoFagPpM_$H0u4sJ_7H^jFc2(`C z0>Dr7-rL*+Wd`c^w)k8jhJu6Po7G;}`XGDv$jg(Q<~giLf3#p0UjmL0;ypp%C5KYq zt3fF-r*2)b!(u~zmDj#K#|?tS()2CZ_y!Jlf9yJi z>8EaJhgi?m>=Mf`d>ztfry5`k9!M@QjiQy*z-@w{Zb(8Ejw`5}cp_BfA^sNSaxgJ; znAi=v&^OPO&>b!_L>24ui}2CWgLei2b*p~h`vEZAps(K|&Y*Ie77F%B{d62SaB0uC zKEJ02Y$Viucle}I;JgvK>@DJ?{-iocpgy(Z-v$nHo>vSkE3Ya$LuMeEQ4(N<&pxa4 z3ZBWj0^KxkcyH_m_+-DJ6or1kjB`RjM8rq%>Rk}lAd|wgS+Mp3r?{T<2siE9YwwO3 z9BwG!G`%rym^*IP9?!$DN?$s?ckQmp20OF@Zv#(3ee4!K8$Q*?8gtYW2u9{@C|lv7 zv%h}f-wKz6{yP$kJg7FaRmlL#t|>#t47Gm_3mJY+7y?|s$06@Jq%@kYg}iH|hQk&c z99rZF4xqE3v|p$gD-i8m3Vzf#8^qTH$r|a0jr`XJ zYqEgjO!_cpK?BP(lp_x5O>7BUq2JOKF`?0d;5!4vkrhI5xMe?-!<_U zj-5!Gi43e#Kx8QRxOI7zg=R>^Ekh^>~Nk(jmK%ZW;$XYWzhmPK^SFJ?J9w zbKJ#?!$lPM9BN4yK?8k65fwb>`_WWLJDQ1y4L5c)jPXH%i`otupL-EC=@i)7af%qy z*@M)-XJWky)}op93H!>Wi{=gzI9jS@d|0Gmrp}S^Z7!M?qR&8YXSzKNnp~&6cXquu z{@doc*tJUwRlyn>>Nz-8Gpw<}he~fc8}{=PHsG!av=**y+_AWjb++H}ULm)5;gTNQ zt9#=R)J`@bLB^#^*io^i3xN~RjS%$$o#pNw7d$@K4x_N1Do}3im|KbAtf)TYNWQGAp+bX}dxSqMTs-(Ymp*=c=AKA26lK%Gw=@*eMH%vC}6=0uPaItWU;ZT34? zL4@KGJ{%iDwl$XUTcBMso%1+pfevDQ*T|Sg+{xeN?#G9t$Zc{nChpF4b(f5#3usGf zWL#Mxl8x|z?h8MX89MMlh!Y0kWNnja>IO^Qj3$Tdk+{VtJU(0UPU2l{z_43AS#BYL zjKMeZU{Q2xvgbkDSK#CZj#QP@E$^;8C;#)L5a4|7*BLZJMXlftq5cLF`yS$73L0?cd?s>#>h`c^d%NYCh-43b7E8oL-Sx+;;GOb^ z))Pg{BkUM&*iz!QvWEVHR=3HrYVWDe3A>VMmx~u?z>aBlnav@g_xU2rU&hVqE;Sw{8^@PYpn|Uw z(qU%oHxL)c-)5)&5sW=yU@NVS`O+B!*=coV)T1Yj!V3r*hYgy%2d)N-($AS7d**#4 zT4p}*Kyzj$LB;6Cnst^Bk6tA;3ph_y8AXuaZM5cs2NLIQ8prZFn=pLfnd+jMFIl|R zzy`1}JI#_E#3c*wcL{*H5Z;X3yUgPD5YC<8ZW?ew6?>j$<%90%0+StVVw6_adxJn( zQHY8YJaEisPG}mUr&HpC`QJ@RMV5Kap!m&KF^iE0b?ZuUrYox9agM3y$RjM+fjPiqL^z%Q8WuRfRV8E8o8K06E6<(T2z+#PzlKZwc{+Dv9i+}Vx@GyQb722y_2lczCfx^$Fm@d~<0FW?km z+q!e03TwzS1D&>a_lr>rbjQZ-vghevg96%Q6dG3#KCoJwj=S*Pvzl^401WvZ+QPvG zwtRL)e?d^>h+CbL-C9NHKoFX^w-pVsw6J{)dF^?h6H{FbwP&`Xb3gC+C39kqvvT*l zSXD@@o9}&g1kh8Z)O*@j+vc7Q68<+N_3mO~0qw=zJJ=6lEWM6srGw|aO-ltmFZR)K zVjtXR6*$^~b6vB)2ec3A(RMg=UL(Lf>6RYCTHwy4p&eI*K6EbLJ4=x;k74&-ooUpI z8+;LK4Qn@2rNrwg_A5`)zJ08dJ30SAW2UEjvek}*!{e&LQ1aaG9h{Rm)5i(&5Z97# zV=O(!^`jbH<4{l{@U8H3rwTsM`pi)DV8!jGi>(4N&%>uOi#PZ?Sv>8k+=0l_ZE7VC z9*%-9xGQan`o4Fxr#%O2Wkpe<8F)B*6rnEo6vicD1q~}@sFV|vkgd>K>g2>EXqneA z^`T=7ks<{gang&tZ6hS3Uj3Q#l3oMnhTR?Y`#~p+y~oRsPQC>m>{mk_hd4iI4yeIj z%2sv7ask$@X6o6Cn$wPQ0#mm7R4ONy;hTQ!YCod}nf={XtJaTjxqb{Ui^Z!5o#^T< zXsuZbU8c{?gTVjo)ojp%Vl!83p?V`_0ZjUPwsl$L_l7IOlGeQnGbmd1Qy7(({lGS+ z2B4R#k6(OYskz(hFJ*4%IJ*#L8j7}cg9UwMom%TSj0jrUDBWz1_d9so4{?6?*&ftf zJp;biXLrq8erR4kF`gvGyIblAJ_Ouf^B7xb{b(m_kFh$6f8kv7ErCr6^w7N&XL~Wv z2`NLu0F~CavAzsS`5vaRW$Zfy_7)m;7D745oWX_h?y9kl`BFj4hG6XMc%(ubr5}A) zu@)HC@Vj=7?RFT!D_Mx|NrvAt>%z`$;rE?|=~L>9J$vmg_ZNzRwcW7$ zBs-AsDOo%+_>moJU^Zb_fKJ(h1{jE) zJ!K#40SbeA8)FSnWd#~2{HJ=A{a`fUX=MLw(U6e09FvDahQirK^EfOhPBr`J(t!}y z>azj*xDJP13KrDF%>=fykf>D#-m9?TEKE6gu80p*9Fan^IdJ`%u%m!);068$i3WSg z8O!dqz(@YtZ9DiH8NRp3@%kyY39ix^a064P9@ob|C$ zsF%SRAJ4T4o-t3Y{a+LBwLs9r*?a+QvwpX%W$HWE>^X0A7qLKdS$SKx&;e2}(zkOy zfN~I00XOn|yTI{sqSboe9Dumk<1iKIp?m2Nk6T?$LIwZXxM!e-&1Zt}Opu*0T;U+B zepmRHk65jy2%kqF3so-N@MJYDytCin9uqPStH|fuK_T~?ytmtQHYF8lFwojgcb?-V z=jw5~ksOQQtjIEZPXVlf;Dg1KAG-e^tb7e$cs8lj{polC^JSgx(TA5p!Ym1YS5vwh z7-f)~_tniYyu>wI6F=S~A=`X+F}XVX2teI1QhzBDpD zC13rHp?yK(z4Nz%PJz(_6TcA_NI_0-o#14TY`J`;45tSIC+{4)`5N`fPOHEQA9&Q9 zVx(5x=`>^T@SGIraaWV+#XL5N$h+Z#YRv z5xe2qYtHyfhnmjg(~ci}hCVwJ=x#7R-nb;N_r8UGc8onra`HicZGQ;`*&7&%^Cmow zafG{pjfInb*&Rq@)jScmoyYR_7td+-k_s)E0ocKpyy27AP%Z)Wwtvo@Jik33SXMdo_iGpH%8#um7PAk^_~qZxpULL2>Fe(_`FsA{7m2RP{Jy78 z&tU#O`@e01C}*FU+jhxaf|sN?|G$j?OkGJ=?zZW(Uofk74QF7hE03)5-%4qc<^IGe z`>%0<05``G{Ge1CVm*7K_<_Wl3PZ4+YeU-?`4UZnojTmQcn=~dpW_w{4n zz0y5aUT5#^Cfx*^q{sE>@8>~PE3f~n>yxdsmFoYzp}(zn(zcb^KfEiiu21x{S8ujg zdDp9{m6ZD`Z~pGT!Fcp`<@A3}A-VZI*YnwJ-RAKuxkztR!nVhUNezwd4h>B$EzYh# z&+b6<*2vP>+RV_y?9A-?&pBG@-Knju*{zxDrN-Bm*M@e7R)?mBXHLdzSb1!1 zX!`j&H9E`K%*f8t)YI_R%V(yirmLSCUgg>Pjz|Xw5b!2IHYG!!!ZPwWE*z?qk?s|4;YHDh1WOi+JW@~MD_1kggmS?Hly+d=l zXL{V{cik1;w`Hw(WO-$IXZ>ydo^xLAt`4o-{A6f)XGE9TxUF-|4vmbhE^lp44=t@e zZ-=iXT1(He46{3$OUUrp?$hjJ&TA`QE1%acN1l#rKO6#N6dpa1GzMJ)_Gq` z3%9$OupN74p3|$b;+f&EFSlV zJ?2_#IB)$u2(&id^rLmJIvp9Co_ZVozdc`b*i=_!Bl5HL=|*{DscZQs)4nh6!N#k{ zMt^2`ZL-*R)%R_mX|c81Q?tdpt7p@5SMHYcsk&F{oz(E`@s~X?AC;Bell9dfcl}Qp zFmXGZX<-f+n@G-gbF`yS71^~bxOcXdUUX<+ue z)%=Tql|N%?KxC>eo2=9giEUHH;c)R`FEc-;(D(x+1G3LLy30piThx; zOG&Jbbsf!K8F#t@zE@we%FML8W`;{TT5+nbr`j?)9Wu&sHG7E}-Cuq1EA7W`4PQ_F z0jDu_(E5CaKXrUG_WtP>`e(Mgj|b)Ab)NRwsFXesR zm06k}lLX(kWHY_IdS|0&Ri3rk+P%v?HFMn=zn6BAk>Q=*x9qqq$)D42nX9|f+0&WJ zSylh0`-ho~jK$t>_TzfXOTIi3ew%%l+TqoC#xiuYG!=Ze)^%@AFF!9+3g+mgJJXtP zFDJLf-FwwM+WYndzF9g<|I0O(y~cSLCU<&1TGy&z@C8hG^|f(g>X!ey?%^|~L*vEL zUepq3XgByxt=}yBPIJ3){tW*wS+D(F;WL-Frt|5H1@WGPSyuN}X3nOqi>^L;5B2KJ zm_YY?z0apFf$C*ywfc9ra{<7E@H*Z7HCx;zI`(Tm_v;*QQ@_)p@Y@|eTe}t~;4L~D z_UqE{>bvLaed?X-kw0TURkV!DyVD=Zcrq>O%}ej%vG-u%)xO63PWw2^)3!I(ahzK( zyWKT-;K9$Bg!}#VxWe9l`3QdKzhzpMo>eEet1-OYodA>&5CQ-L05VoURR922Whkl% zK$-yVIWuSCCw4WT+Ov4uZm@ni0cGabtS*Xe+ke;f-vB`w0-B*XD>wk51%5F{utv%@ z0y7}*HZJktucdZ7fa$hXMtF3-C7ZgnUYw@T_4;aH?z*QHJc#a|N*S$2 z52xChuJx1siEW(;SOwLm^ zNtRTmvZ5%NayEPUNU26r&^^~BtWY!L$WrK>SUfj|*;dYDK4vA98D`^@ur?I}Rg`RS zQf4%@9##!aR>hWO3z-$xnu!uPhv-u1EWVs;oabfPG)+c>S+13SzSrY-{(l|prr6&Q z^pQ<+1=2RtQ$rlGh*~?TM_mOb?4{;<3qHOu(<5h)wQQ- z$2FUarckG-Gfdjt#8YBGVPPVBuo?^%Qh!9*AzVWZ{Kf zm{x2u_wj5&u2NE68N25*@hq{xh58@q%QnU~t4>Ye&QFdzorzy)`*Gx7Cb;ll-1nv( z#dY?KCVCz=hO-k|8Rv3iNJ1=2x!0EYvy1r&(yg2{bU@}lcQY2zaZPKI;pCtp4ZP+1J~MZFn09Lkx5N;SN`4Eh76*vSq$?B>jyYs$GeT@>?h;aB){{*~p- z-wS6r^5!@HVL0k0WyrATFf^@lKKSpCBhvUOC)D_BRgAU9q3uE?q)eZ=Ss&?Xd=WFH zrrh;0U)HV#Zt!p!GPzk!8*j4`LqqS=?rBUOrW@g{LF03OS#es#Bdkr(~ z#j*90pVkbjZ*=_GKVblGhf%t{ul$Y7 z*Sd3QWZEPQ$Cjg;V;Q^`4T?{*Z0(vJYDqgLylOL6AuJsRnt~jf84tV_DeYRRVLfUw z=b6_^ns1<-^Tv6{Vl+LE@pkQWvvtFsM%h+rM9LA+%}^Xan?_+RbGwFiS>|ZI$jX9@ z<$Bp;nIPT&u%)~nk9_MbeFoR0q;9Elez;7tX}Prt-N=*=TXU+De&;VGT=6{x{~u0Y z8D`6M2jPx6Y8jpLwB9DEa$&Ry+H6xDtV??QTC>d%T&9G%om2@+z2!BdJVp&yZsn>y zZB7qaub>>W>q!3@jwZ087{E(NYv$Z0F~4=vAu(xm+d4s?57X~sOa|}b$j6kVGFjKp zsYf+8axM#OqKb`5CXAz-h7-ICXa44MWZ+dW#f$wead=}YrAh+z+^*$qLApjZ%}~;f zgs3$@Bm*^Ik235CBzD#PfVbY&`;5pDGDO;Cb1|ywwR`@(pDzy@Xpvx@1kd!PeXn7}O(Djc;Z| z#p%15{P;0_I#lM<>ykR2lR0Ci@D{)GL!w9KAXTaAc}KQ{pl`=UFSE>Z1`dz4Ya5}X z>0S{GAD_DHaWk*`W?Ub%=xYw8wQ(Hm5txiaL_eI0^bn#Of8?xZ)3qwf+TV-{Q_f*( zbb8PZUCK<@SU;y;qitGRd=9f)LWBLBV}!YPDLjD+-v^RORkcRQ+SSqslf^l2AEMHw zJXC^;#5$9X6~%9wO_0K+JKMu2oN6hRXVm)%E0i7dQ$0S)QgY`$$Dt;H&H$I`^;za3 z0j^nMrJZAQChZsPW81c^iS1-!+qP|66Wg|RCz(ua+qTV|czW}X>)sWzXz(ME)V68p7%{$hE)hDl*> zX^^f5I%mZ>&ZF7lu$7bK#%Ye%45zkmc~yK>=apDVO?IRgG%##Inoe=3$F#`kMh}T)h$<;Nv=m%9;%2mhHbdZ(J9W`B3IB&$X= ziqw|zfY>QPMx$=TUQ{+JJT`@4mLfjYHN9PwLE@ORmwjmJUrP+HK#P`>{g4FYQ%2>I zG#}AYQrml7MGylS=bIn4g9DZH43?W~7H ztg>9Q0?22(K5p6A(GgS?#mI|Pe_=2wNou zpxHGq9gS#zDbLdaGOCTt@^U5mS9P(<2@OT#;eXQ22{ED3=QJJK~1)lMx z^bnMOj@Bm~mi@PO8;*_*@Vv|>!X~* z0x~GHEr|{>smd0>nZ`T6iCxKZR|?b>vV|IBK}9qV9h8G)H4H5t5c2yIhSm3stb7o6 zgm#Kcu~C+o6r~fJ@j&l|LuLXtmJBLJGuwxj7(!7HX)(2l*2Wbbk%w)i1L6WEa7+UA zepgo*jPMR4Nld7akei2)FF`U!=&m9JHGWJc?qZ72LFkQvLz(HvH>jo3TsAujJZxtl z31tal3*$BX2A%JJrx_d>oH!K-MBt#iRafYXe@c1ux0~0l(KjoO6 z;;0L59@<&f;ga-}{0TnnYjm6P>R6~Xq9KPJ9B02U#ENUH02jEZ*TF7R^Rp&wNhBXJ zLhVRZ5c}pm+Gckj37$!Se~z|$4~u2WqFMq0U1+oZ^?}S>uo=jkurZIV|7h6oxar1} z+r*_FwNlNfL!s~`XvK}7b*-SY@We89C0WLDt{4?+u>WXxj33@bL^jVLj9Q>7z@1&V z)(iJV-ov3hxu3~#_;n+42!u@#${gJ8^L)x5KOBQg;}?P^O0_<45e=$@Z%Qj|@->ZA z_fN$XyW&Rw=1+QraBB*xl2OohzN2=TJS^{ z`-@u9S{0|mqkNQKiJ0pWc$p&R;<03i>=#B%`RNph$2sWl@{y2zLHX`C9Q0<^C31s9 zVrW2j2Jk2#zpE>Tz)u0D? z8i2SZlc2$c?~qDX<-`7gT<}I8r6vI$>r*d4 zu=Tb;Liic1V}23dmSQF0o!--&C8tf=Qqoz;Uyk%okLe|1b`v$`%AP&C6&E~MKpX!; zdqVgpV1`Vw8|>Hd%I4GHWd(yg)>vKw7FiCPj%?(D#GOk@DqlnrsnvLGOsg}~x&MdQ zmJNvwh{L9kY*HztqV^bU^j$hJe!wJL=uueWQ|X{MigDScoE~dvaZY(CHL=l$t^guSUb&-!YdTu8X78k zO=t(pUCQ8=Kl5-#g+pjUM%hzX!ndMyzey90!NY8)3zJkH1}+NG9_;%Ayq_XYp>s=8 z-v1dQrYR|`&y$MIZWU|Q%nfKa`s1a~SWo$<1DV|xN|=t`?J`5-=1%^>tP9CF*an1PUyLVrWdS%fN-5fWRg~Ju*f%jVsGC%z33~Vpoo5G1g zM`Iq&qvg8M?@i3gezitgGI%Umlen9r)M=3$j#AWJ2}enZLx~f4Z(=Zkl!hch+7=Xs zvwWpH%UX&^ks_LO1euXEf)|cTv7pCFd}2CO@(c=%>MqeK@E_Ij7$x#Kw@d=2K}#tS z$kEN6E0F0~kr-RKYuj-OrcZdLXu)#UX%~_e^JU%}P7@D%p;tpS+q*$&8;Q_29zbL~FQw88;pK62ONkQq_4i@?uR0Eezp)Vsy!ba_kj5D@M z#~r+?Qt3{`Jq8wSrIQLtG_0W*qq~g^LYa>Jq0PFu1tM*XP|~~bm6T1~rM1~yw11wF z9`(Z>U81C8i1`whF;}GHC(rZn`!whwt*z1jrPHNTzG_>>9z~L}$WpA#;>0Ql!$W2d z2q~{=5-GukD#f2nLKl<3WS%0GhWnuovGq{ldF-AD7r+QsXQ4zHMcv3#w5`0B-t(82 zbmk~68qRp7C@63zM}@CG?EHpCZw6h>mTMXOM@$U%VBup4F0}YdjFeaINy1F)Matrc zO7yDOPCL%j>7PYDlQzM?=FS^ z_}l{R9jdNmz?yA%tQuRTQZfgd3^92ym=T%rj?6>7q*1^ER-6%;g?Kadg`rs>5J%J4 zF`T?nNs)vZ7{CVfgpBN+FnvwVE%RKbW^XrT3+Hf79`00_aT5f${|MIL=6U_IEh4 z+T>^*iJ6Nh3OrJ3HDS^>-TGs-(+@-ljaSE4f=J9+v6PR}I0! z#^_x*oBJhQK-L!hz>2Yi4E-{KS~`QMgP;q9tA3uQ13_Z0zz&1PbWz0hv;Sj}a}F&D z)`N2aMIv%DIupE1`kSa|KE2#iu3Rydgo;%$`kkSi$>{~7$YE(O&UxgW8>SvU4h?%u z4{eCREa*c)3n{d0Lb}1B9_$zm=I|y$=cST3#KrfwqzgozE){E;UJ#pI(rAy_Ksvl# znG{j9n%t|ra`4l!SHFj7YX+2%N%`wKQl3kV2(62=9BICmD52Egup>Z_KKhT^04b?H zAOH+8R(lV!K6cv-;)IJ5*_#ICHVVjaCiFM_#)r5}}nOR4))u0?s^V6bqVXCrr15p94!j4K2`!--=ihNU}#ro#u1fH9d$vf65}IYzNR}rd2d8H1_)xPGc{W}AF(X- z&A-1of_+8aBV@)wmPDpDR&ejGgY=|f8C_grSEGV?2g(?7)E9%oiUc)U@6Bl%@==Gj zKAF;z<$-J5tFS+7V>l&SxqP08lt@IbRaR7v-clXH3dyzMYZxO$K=WScVjxbqPv@ZO+3vP8<&t=2B|{J zUuGEShT_nx3&FI-S&0Fk_$VNEuw*SN87o7UvS=P~Jk7OgKNzq_b^1z|+$ec{W zhA~61f>vHd%}Xy~rH1TB_z1S|1u$KCs@j38F?`cI+16+~A8<%h?nNJ@k^w0b4n23x z1)--`mjn!g_M3k#Qy`1L0qHrGFC;R;Z$2)>D#5d$@tV$JK&q2-wQk z5o*Exr2VC+1P{hyse77&ts^U@6-H5Sf$yU$KI#(Zk-Up9k=IofIoZB*OK2F#`Vw2w zVJ{3jZFyVgP#U`#APZJ04EIo)r1Bm_*`1u&6{y7V(%Tb(%j0NSCCRlEXl^G5FwezP z_pVqCCR(c&&TATf&kn>R{3+QB5t9tNEA5M2#<8rR7s`*OvZ)Q4lO)(BFk>ogG8ylh z8=#9^_!q`bT39R75d6XcFO*V>`>g`v0YBrjxv{AuiJZ*{L~K(ul+-{Yc_jN|Vr4*w z+T2{nY_Kt)+@yDiMXhR~gu9vKoT@ZG zISvCYD51%htiRQ0Mn&1Kl|HM;$}zGcPq70fwy0r|KqYA|Wp82s_z3keNf0&55KAw6 zLsvl*niN4xwsP#00|^DQr^zNTxdK&~;m1B>#_kh=>Y&goBm7dggug>jNqZO7%Kx!}qHa{*WwMp9bV@txBtOXnDcL&SM2hpvJjEld#7KYij^#-dT#7|+&HkrK#@Am#`PQicM|+V3h!3%t zJI2S9Pjo5h{P2PzcH6i}kqYacnYa7|aVSf`i8l`3pUz}QTjigCQcp6u+5{KX)_3;b zM+3f!_}dESM4tTyUtB@iwvi0hQhBSHX^(d=Vl_WAsVY`e^bij%-)-(I3@9Vd)l`1dmk|^(GMi3V6K>5L{d@7RELnVpe@Ai)Pr& zaj~bd?)Q7O5G94vVPj*Z+*l=lOfNL?*8->YaccBR4!4kPHiN=khotL+<`9Cl8Y=^& zmjD{|b=_5wb&Z&06yRUdJDDqi2+D9|U+R!MXNjF2%z}OQk!ORcf?`-+Q5dIlqJaHt z6OR_spaAlBbG)aqCx&_=sk)d)ju=>K^?7nAP!&>37_ev%3^w>$=ZmR8tJKMwgwPU8 z@bU(YncApOXzN@j&Yhp8LNGpw!N6XYFw{`WGSi>({gIAUJM8+s*v4deSQ*ZniBXlt zQCK;<2uy%6G#*zmWkPF`hUFufg|z=v4{qDZp_~i+$C+gUm7YtzfoK(WRNwP#JX%Ds zs1GS2;7w-)dKNY*%=HgWp#$=TX%$`5q<3C%hq?fPigFn&`*0|jj-Gc2^~1L$H|i*W za{8=Sk(nS8{4>-F5TX|rqV0baG^SeRUBE3Jwu*9h_S;9pOV&)FCghR?p`jkM1G^ZP zgP=4b{cz+sa>4B`dk=4}@8`kDZnML%+`h|8o!-=V2d16B*dTr7tE51XKYF_uiLgIz zql~f=^9X22v}Z_|$|PZY@H9CFLTi@FW3{kMdAnMq5&8Y{GJfndvtoU8;`x&=xSs=0 zJ1B!iVRS=H9T)0%4NX0>o(0|vm0_e!H`h>tU~UwR+1$fHpUBJs!_f6GVpLfZkU)$J|n-ZmWHc&KYU7UxirF0e5 z_nU_>a?7m7M)%`ICl6CwQn+S7o&-wS#CE{|4jKxI0<;KDX^26oVay7o*dfDpQ-@H} zQ(I=D2+m4Xc?1)cA-h6navs?YWt=W~V(c#pGEgLnT$rPc^w-h*bt*k27{b|!fEIq0 z6kauZis)-_%b+dwxrx5{9f9!yJ#qu)2n;ZGS-T379G|DWvFAWcp*GvWSo2BH2jEql zn5JQW$zs?JZe^nMF`HA!aJ_nPUYS083=wh8Rtp~kBdbvsi>bgoVSA#284ysMSQJjS zA{`Y>v6H1+4{C3KTsDMylYsyYbMEU-V1MS(%_RdNn+d3C7qDuf8ys@6RvS$=^+=FX zL^Sg%RK7yiqE*=#kJOUzO|kR8nbpSVAh-S-7fzS zgY@jDPf~QjqRtP=pSU+`Rn6F7T(yE*BegX~O7nam<*|cAe&R8?@J0363^koHg{4DS zM#9AYNgPb=ZYwM$@QxS2hiHwQ6(cjYu6e|q9@2AxZXk9;)`-$iHA-C>DJJuys{%)c zdC!jZS|~`Sx19GYiy`T6QXldqF*syz+DhOc;%1nuu|Z}VlO|{pwjL8x3_rIBz)VZ) zFwadvMcfOnj+gIdM6P7kKNOKmN3bzmPEjk%mW}8-;MHv=bDO+?;hbR$zX$6TW zT0Q_Ec==kG+pys*o9WEgK}3;Y$@Oh+3uvZC!1<6b=_9- z+h+E&YP`d+ycSn(=3H|d#v9+Nt!3>)XMwthaU?iY59$I163Vm0xyjH7@mUSz?>1lo zVt?-8Zb_0q^+FIq<*YRm1Y?#Pq}Y^_*B0iYED;u=nSZf*_5zm7OpO@VVtcPU3AZ+k z2*9QEWm0XiVG7r@H5@tcT%WW-iG@)SE$BNvr;Mj66P0J3gK>oopPz&u@OOWN;OZPo=N7o8C?CB?<=GEkB0vwh(};}hk!esQCJ zXcjvQYRnmKqe%NYeMxGV4wm;m$wmL3w0v+}e(-UE@?Exw;q-EC#cM_>3Yo@*KQK`G zRs~8S_qLW<%*+D#Hq2S+r4vl<&_qL`*^Fz|e)e%z9G0ScJxEYw{xweDJnjGL4W1~r z|8N+WLGF&>$NndWM`!6p1J-0I^FB;m?1P^~3eNL7ef|a~lyMFuIzAi>FRb+GKAx5o zjAh%ROV-cIhTE!U#31^#eM5T!70&K#LyW|hQ@ENF%WEKMq%;DRu079H|MUmOphNC6 z#K67_d^dq1yE5xH86>6|qe`FlhW6Prk$7Mz&M7hXsUVfH>d=913j)V z>Bjl!;_(jEz{{X-qxXv?Dt{H(rM7m&V+@Y75Yz?nlh9rb3u&GRrU0ulnUL}^MSNpd z|J=~y1u1t8G4cE^s$zsBVS3B5T&H+JK>d>!1-RxWTPzz?cbFV=QNSt;DP8yWC~+W& z!ox-UVYT5zRy3{nQa5@p+ogNEkG>?yx@Wnz#8z2AN_Tc;yN^gtWvz7b=AQO5i$cBN zOmkCFq$C_rtV`seHrZ@kM2Bh-+ae2WJve8YalW6^A!LlxZOL67mJQvGR#qplF^~-+ zvlOT3;Se1MHB0643^ZpzH$mLlA>!a= zg8*Do@D8GHznc5SL7Y@OpM*BAC!n}BHt~=pV33P|1ps2gEPZEGzwQ(OU0s9hK4|yX zic~V;)IPX;^Szr7f2T*SCYJh?o&=ec*n^C%c`qF5~spVSTjY zc`1p%VTg+9xgwS zTuy%e+x?&xQrdN)H@Y7g@6{FOfDG=wamI9xuA8yylOE;Zmbcm-SXg$$hG7(nEf-X^ zd+@REF!b``yfe!h;Pd_YJ_3r?e@e%IdlC-YY-AE9GJMWQ?y>?~dCABjP=Fnl&ycF(qm~51av{rDX00lX{W7n%x|EN<*5d;# zs_h(NzTN&S87{+D3#2i|<7TKh#7m?(C!8uttxA#tCuTeoiIseUCpgqnR_qweM*FpK zE&?3c>_!^H^Us_dSv8#Xq0+@#a!{}NpOe*rh=C;NrLH-0Yi$Me;*@TG*4_w43B@K! zLHOWKHA+7;$t04RWP(Qa0;SCtHEmi>W8lU4$Qxz;6fZo3Kdwqs;KE>5vl?*O@e+hR z>K=$E0j==lKNCB!%iFK$E)wYc>0Og}x(N&+8XG|qu2Xc0xG3xnBP!IoM=Eo~#MvIwaVwbKDo;YlviXv;Tl{xSAyJjYQUwG0#ozb38YP%%-KpvRqaDy#I7Rwx*Rl99`S*H_Z= z#?%rl^d8vM>(fKv(^CLT9DIled*H@g0Lh5eIZ}fS^`%HTmO9Vm^C%v^6b`Ao5&Q## zMjuw>uS;e;7-<@BDqgOy_`4=&2`)8hl9icyD`4FDdg#1}=(B${lT5t4(*l2hvHaD+^2Qx%p!|9< z4>rY+x$0$QW2|$NpdXg)g;944xbP$!zU1~I3)1j2$4VwsQBn@01-0dyQ8>=VpO0(% zl$CdJ(z1js$E#?V-{I)vB+7U@f#CJ9N@W?1?;duiMN?u%t(>A*eiIwYIkfQ8Xw23m zOUuA>OSH9;ns}hqwYnZV%zpf zmFtU6u89dO4)!HNp%pfVI7sy;^$n> zu83p5QsD>Xj@WQFOyuss*_ zFSRjID+_y2*7X;QY%aZgE-um$q3cSJKd3WDJX7yI=e>74XfH=9$C$rCoS@F94SSR5 zVmr}lK;$WK!&ig5-HZAV1v%h)67()FK7AVrlNDDyfVeUO3=9}JA_5Eo7y`^{iYNjF z42*~f<$o0kiyv3?2p0*6j|j?zUg)I(n0FZnOf)D62uSq53KDD#8o~8HKNc7U(mp^C z$<;<^h6o5KF_DM}sH5)>T8E=EtP2Acaz_B$45$&eITF|^p1^}k-YU>?ldPnULSG+J zK!Btq(*Lc328TAnC(&39Jy`9FRS%B{*VCPqfR7ffUynce4Pp9VbxGr;w=i^!;@1UknZ=Pzpjq zI1g+XZyAvO!|VIut^M#S(=j6EWnjT9Yr%z!`bZ->pz3m9+eknrqV@y&_S%UmIT@fT z;$ZivO+lGVIy{Bz(X8LL5w)(fq}Cu15PHJ1y9Vhh^|=akz6t`BHCqOL)J^d zjcn&Z0@*Ersj`{_A||y2d(7yGbXYNvsxx3C7Jmq(wPdATK<5GA1A$x4OPxR!|1gnU zG(h?h&IMx(b)jaeVQ0Bqf!V?thz{$)2k@2x^8a-rC2C;yJD!8kA?OMY7{WqvRs$=B zyApxbGYo7mf$!jU26+BZ?0zWl=YkVIl=dGAh%2y400R;94+VHBfT*t%iTH;CdJbX( zq$`;J%>u^|ATQtfIr_PC+8*Ha#z2(C4+~Wq4`S5yv%XEs0E??;!E$#kA~_ybyxzIZ!`x;UTFyuxHAwPvBE;V#(I-aiNej?Fgi- zpeBwWNscZH+N_{jy1yg`2iIYws^9~~O92ivU2o!6=v^&TuH`tpcDGXQ!16S(P<%DO zv()ZTSJkk8v)q9<$zUV0s(}m0+#@!sVFQ1Z_5T#ZA7!l?R_I4r{ZAqOQC6y9fq#_c zA0@LIc=tzH`r%}{126uk{ExHn!}(F>|5N_Qnfu}VD6{`5|Kt4JExCnp)oC}pW$a{D1(mg#`=3_U`LWRL$8`a-9h?#2fD5+E!3G4QqQ4M$YKpq)wmE= znzn*kT2M6u_^z&t(i*vc5H!`?Vr zUO|bePZ%TruE5o=!;Lu4WsZK1AwVN6jox&X-<-Tx*Ztu3yqx}Gj`G01Ib7?j|7HlI zUDei(gX0lzY|Go_%GTwdspsBw%RKHK-!J@I3%4HMg)6Z;M_b>#+Gmeb5w+_Tv$QOX|C%=ik=sl-EYd~Df3{&^;RDTFn-tN zZqMk~Hg~(tXLq}KN{B9R_!G!)fbahH@+Cpuzk&89j>&N}Sl^UbFAP}|magY8mo z;QP#_C3i=l$CgOm)$zJ@?c~NbYB~M+w$(F%uk*4;S-~YL69B({V#c*`Lh|j^n*=2z{LS@saE84P_WI|n!*+}xl{ezWX=C5) zq$}@rj=+n%?ECQbe%|IXFap*~D;nI>z{$weAi%)U5zqTGv>Va)SW`g;d&Pt?(^GKO1k|T)J^E zY(20RFeA??mxR5-&Wi7her@&kJg~h~Zsqc^ zB8;ZfPaYN2SHtlFS=2Kx1~2nB*;e&-&}GDZnOkeO_Maz?2aKoeJwC^`Xycojn}oT3 zIb^+%ThXvaewcitdw7;9@#_tgb`A!BBU~&Vca7R!TwXXXMtcL#YkdP8`=wQ{7|LFN zU)}c`(BCmRj9ef{1fot}e5$ERL>!A`f-o}GE9%o z0v%bWc~1K_yrZhdlwZyGse8e)EU?4+Sg;>Q^BjGz(f@i&`)=6eT|HlU+RxG*sH{1gui_+{o`)HRUP+pxWlF6Y3+t< zuKAg4ALlReu6eq)b;D`<{mtppt{lvJt1^1W{2Q#;&(_Xm%LHDVnwviAYKiE~ou2NT z0jy8cEh~E3@R8n=aWH3nUmV)o*YUGg_OI9v`#bW)uKtb02vN|~F0M^}(ZjPuQ!r*( z567YcC+NY-d2bhXVUQaFBtFdCYw03H8lUEF=dKQE-tX_v*E!+A0whX{qj|mjefL}D z#dNoHUjkh{(J9l;!?t!keOMcH@xKFX6>JS4`Eh+%xm^{U+~;$jbwB~Lhb0nyLmcc26O zFUMQ5W6f*f;&>XNbnC#P8RZ$z4Sj1cO7TDgv>we%rt(CZ>vsNy8zU>c7>Acu0LKUleha<{@FdPx{5|+f z>|o(+??A=r>i{E%i-$NB#QM_9%ChkCiRJ9EwV zHE<(B9KMq{|0;G?!}rktdJiV#>10CRdu<>`9^rW9|K2OB)?#)7Txp~(i zk>~$@3O$GLKMfaoc$T;_cJ7DWp3QyijoZ0b@A>CYngBKWD>%#P}t!L zn&W#u&yrS&f2g{Y2))BvF!#s+y1C!hf;;vOsN+o{odF7_X+DfQHpZUEG@3s>eZv!*KKIJ(-bbG^UPNR?W#_MkV>RX57;UJCbuRkF`)7w~oYzX5 zgfG5L_%7`(w*>OU&M(FvdxGTrcL1AXL>5?9-5o%8yw0cgu&JUhPoQWV<7X-c$XDJ&i*!1VLzSl;|;8(xUWj)jo2H@_%_=7L|ZjPW&?c@sa ziPg_7&Bvz#C;{rHvlj?R6_lL?2*}$N|M1|WB?M0oiKvwoQ{D3Yy~lu_143I}e2Jlw z-m~}k^%_VB7$`H5la&=nGW1OfH3`a69x^Ya4BNe5y5Bb6y5`K+eOVPSnI$V}*OF;3 z+ppH;%E(}oewmIdTOsEv%*JJmZq95XSd-6g87vNyM~?Lb1cdX`yBiSHhLhy~F z`RuS!M`Z?rI0ddFakS}RSPVNOgx^YTDF1QPEc1iM9WR2@JhkLHd+2F$-s^?a2(F$u zGE+A9sxL-jCTEB1gzK3LX%~Bf=z=v{5LtMSEuWB!;3`F(DL(pSm{^*sys~|8dKUor zwXmu_sSbVXa`U9C;4yBpvdb+?6N-NLpp%qq)T}|`ZJtl5Y!3s)f}vhT7W`;M<{f4T zMdzJzRz)F|MLeZAKu08c%$-@Fvd^sh{r3B*o8QBe3Xc}0f1I|-wTjex`IoMHB&=Bf zMHQiM;}jUpZHDC;#a!fh*6)nqUJj_0WM|yV)eig5xfU+}3obyOV_+XUe`5+nxuC|UA_Dy516eK$Dip0Q{9$|L(SDhKzXZL3l94SQW!ey^QeQ(MA zTSzT+k!cC!`DEJw6rswqe}y^%bmZaUSQT+PoC5?DM!) zf^+*Edl!?4olDL|Foecstj45bS8b#1_uv)Mj_Na_6oB5Lpp&Ax*L&_}<=N_V)v9F>N zI@OK;`@21D#D|CQXG7=m!18?p>`np$!Yyb< z7}E?y<)4s@S<{oaLg=v%eqKYz!=mL0VT{07JZ;WhgL7T!BjCCfhLgRJkY94g7tc*MpA+(}Jwg(YLj5Kft6S+C$T-p>LvARAsy>?YP_ic$o z8S7G4#cet71GePBOY8C|DQ%g2IJT@R7446f^FQI1d5e+VuD-uLS&nM@igr$SEN|RA zxI8dDFnIBJVY^}V5d0vF`F6J|MJdZ8z^l#C$f9NWOI`nhZDBDMuyjSwREFUcYw{2(qvI}J$lCTXC#>UQ9{d4^9)DEnaJA||E?zz%; zs_i=6$xHT#{c6TwUPNQ^>ow=+k#eofjrf6&u`)}v@0LQshWj10pAAJuBVg5(R&Nl^ z_TkFXshM!KSiDF2>=XNVziLXRMxo}zXz-e6nX(eoyw_m@-m z`1BqJ>$iUv+D#mn#(J)C>)@buv-`*%>?uW^{JA^X6t|a?`*tmgB)rz0dCi`it;StV zT}$mhrKb%62CN>#QwxX*y?)Fh4BoJ|UNyHg$EH6I<;~cQr#q5HiGZb!{_kKRJj{7g z2ps8W2zloxDnUB&DbGR+LmF=%f=YDN-1QIyW9lfiow{2leRLFEgf;NXSz&d=wzZVT zuFBnhx4LLtA zR7N+g`ZB*NRA+9NWfC`%Ir8b-Z1DCEm($hFhF zJgmrYLpFucs^YLIu@ch3^0JqqqtvPc4ttyhiHOxZ*w>!ZV#cfAd#OCmpCtR)mVfCxHvo3?s z5!;|9sq+h=;RgP!Mkfk literal 0 HcmV?d00001 diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_analogConfig.h b/Software/Middlewares/ST/rfal/Inc/rfal_analogConfig.h new file mode 100644 index 0000000..6da5de9 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_analogConfig.h @@ -0,0 +1,334 @@ + +/****************************************************************************** + * \attention + * + *

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_chip.h + * + * \author Gustavo Patricio + * + * \brief RF Chip specific Layer + * + * \warning This layer, which provides direct access to RF chip, should + * only be used for debug purposes and/or advanced features + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-HAL + * \brief RFAL Hardware Abstraction Layer + * @{ + * + * \addtogroup Chip + * \brief RFAL RF Chip Module + * @{ + * + */ + + +#ifndef RFAL_CHIP_H +#define RFAL_CHIP_H + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "platform.h" +#include "st_errno.h" +#include "rfal_rf.h" + + +/***************************************************************************** + * RF Chip * + *****************************************************************************/ + +/*! + ***************************************************************************** + * \brief Writes a register on the RF Chip + * + * Checks if the given register is valid and if so, writes the value(s) + * on the RF Chip register + * + * \param[in] reg: register address to be written, or the first if len > 1 + * \param[in] values: pointer with content to be written on the register(s) + * \param[in] len: number of consecutive registers to be written + * + * + * \return ERR_PARAM : Invalid register or bad request + * \return ERR_NOTSUPP : Feature not supported + * \return ERR_NONE : Write done with no error + ***************************************************************************** + */ +ReturnCode rfalChipWriteReg( uint16_t reg, const uint8_t* values, uint8_t len ); + +/*! + ***************************************************************************** + * \brief Reads a register on the RF Chip + * + * Checks if the given register is valid and if so, reads the value(s) + * of the RF Chip register(s) + * + * \param[in] reg: register address to be read, or the first if len > 1 + * \param[out] values: pointer where the register(s) read content will be placed + * \param[in] len: number of consecutive registers to be read + * + * \return ERR_PARAM : Invalid register or bad request + * \return ERR_NOTSUPP : Feature not supported + * \return ERR_NONE : Read done with no error + ***************************************************************************** + */ +ReturnCode rfalChipReadReg( uint16_t reg, uint8_t* values, uint8_t len ); + +/*! + ***************************************************************************** + * \brief Change a register on the RF Chip + * + * Change the value of the register bits on the RF Chip Test set in the valueMask. + * + * \param[in] reg: register address to be modified + * \param[in] valueMask: mask value of the register bits to be changed + * \param[in] value: register value to be set + * + * \return ERR_PARAM : Invalid register or bad request + * \return ERR_NOTSUPP : Feature not supported + * \return ERR_OK : Change done with no error + ***************************************************************************** + */ +ReturnCode rfalChipChangeRegBits( uint16_t reg, uint8_t valueMask, uint8_t value ); + +/*! + ***************************************************************************** + * \brief Writes a Test register on the RF Chip + * + * Writes the value on the RF Chip Test register + * + * \param[in] reg: register address to be written + * \param[in] value: value to be written on the register + * + * + * \return ERR_PARAM : Invalid register or bad request + * \return ERR_NOTSUPP : Feature not supported + * \return ERR_NONE : Write done with no error + ***************************************************************************** + */ +ReturnCode rfalChipWriteTestReg( uint16_t reg, uint8_t value ); + +/*! + ***************************************************************************** + * \brief Reads a Test register on the RF Chip + * + * Reads the value of the RF Chip Test register + * + * \param[in] reg: register address to be read + * \param[out] value: pointer where the register content will be placed + * + * \return ERR_PARAM :Invalid register or bad request + * \return ERR_NOTSUPP : Feature not supported + * \return ERR_NONE : Read done with no error + ***************************************************************************** + */ +ReturnCode rfalChipReadTestReg( uint16_t reg, uint8_t* value ); + +/*! + ***************************************************************************** + * \brief Change a Test register on the RF Chip + * + * Change the value of the register bits on the RF Chip Test set in the valueMask. + * + * \param[in] reg: test register address to be modified + * \param[in] valueMask: mask value of the register bits to be changed + * \param[in] value: register value to be set + * + * \return ERR_PARAM : Invalid register or bad request + * \return ERR_NOTSUPP : Feature not supported + * \return ERR_OK : Change done with no error + ***************************************************************************** + */ +ReturnCode rfalChipChangeTestRegBits( uint16_t reg, uint8_t valueMask, uint8_t value ); + +/*! + ***************************************************************************** + * \brief Execute command on the RF Chip + * + * Checks if the given command is valid and if so, executes it on + * the RF Chip + * + * \param[in] cmd: direct command to be executed + * + * \return ERR_PARAM : Invalid command or bad request + * \return ERR_NOTSUPP : Feature not supported + * \return ERR_NONE : Direct command executed with no error + ***************************************************************************** + */ +ReturnCode rfalChipExecCmd( uint16_t cmd ); + +/*! + ***************************************************************************** + * \brief Set RFO + * + * Sets the RFO value to be used when the field is on (unmodulated/active) + * + * \param[in] rfo : the RFO value to be used + * + * \return ERR_IO : Internal error + * \return ERR_NOTSUPP : Feature not supported + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalChipSetRFO( uint8_t rfo ); + + +/*! + ***************************************************************************** + * \brief Get RFO + * + * Gets the RFO value used used when the field is on (unmodulated/active) + * + * \param[out] result : the current RFO value + * + * \return ERR_IO : Internal error + * \return ERR_NOTSUPP : Feature not supported + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalChipGetRFO( uint8_t* result ); + + +/*! + ***************************************************************************** + * \brief Measure Amplitude + * + * Measures the RF Amplitude + * + * \param[out] result : result of RF measurement + * + * \return ERR_IO : Internal error + * \return ERR_NOTSUPP : Feature not supported + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalChipMeasureAmplitude( uint8_t* result ); + + +/*! + ***************************************************************************** + * \brief Measure Phase + * + * Measures the Phase + * + * \param[out] result : result of Phase measurement + * + * \return ERR_IO : Internal error + * \return ERR_NOTSUPP : Feature not supported + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalChipMeasurePhase( uint8_t* result ); + + +/*! + ***************************************************************************** + * \brief Measure Capacitance + * + * Measures the Capacitance + * + * \param[out] result : result of Capacitance measurement + * + * \return ERR_IO : Internal error + * \return ERR_NOTSUPP : Feature not supported + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalChipMeasureCapacitance( uint8_t* result ); + + +/*! + ***************************************************************************** + * \brief Measure Power Supply + * + * Measures the Power Supply + * + * \param[in] param : measurement parameter (chip specific) + * \param[out] result : result of the measurement + * + * \return ERR_IO : Internal error + * \return ERR_NOTSUPP : Feature not supported + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalChipMeasurePowerSupply( uint8_t param, uint8_t* result ); + + +#endif /* RFAL_CHIP_H */ + +/** + * @} + * + * @} + * + * @} + */ diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_crc.h b/Software/Middlewares/ST/rfal/Inc/rfal_crc.h new file mode 100644 index 0000000..a6ca124 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_crc.h @@ -0,0 +1,75 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_crc.h + * + * \author Ulrich Herrmann + * + * \brief CRC calculation module + * + */ +/*! + * + */ + +#ifndef RFAL_CRC_H_ +#define RFAL_CRC_H_ + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "platform.h" + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ +/*! + ***************************************************************************** + * \brief Calculate CRC according to CCITT standard. + * + * This function takes \a length bytes from \a buf and calculates the CRC + * for this data. The result is returned. + * \note This implementation calculates the CRC with LSB first, i.e. all + * bytes are "read" from right to left. + * + * \param[in] preloadValue : Initial value of CRC calculation. + * \param[in] buf : buffer to calculate the CRC for. + * \param[in] length : size of the buffer. + * + * \return 16 bit long crc value. + * + ***************************************************************************** + */ +extern uint16_t rfalCrcCalculateCcitt(uint16_t preloadValue, const uint8_t* buf, uint16_t length); + +#endif /* RFAL_CRC_H_ */ + diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_dpo.h b/Software/Middlewares/ST/rfal/Inc/rfal_dpo.h new file mode 100644 index 0000000..8e7daaa --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_dpo.h @@ -0,0 +1,209 @@ + +/****************************************************************************** + * @attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * $Revision: $ + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_dpo.h + * + * \author Martin Zechleitner + * + * \brief Dynamic Power adjustment + * + * This module provides an interface to perform the power adjustment dynamically + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-HAL + * \brief RFAL Hardware Abstraction Layer + * @{ + * + * \addtogroup DynamicPower + * \brief RFAL Dynamic Power Module + * @{ + * + */ + + +#ifndef RFAL_DPO_H +#define RFAL_DPO_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define RFAL_DPO_TABLE_SIZE_MAX 15U /*!< Max DPO table size */ +#define RFAL_DPO_TABLE_PARAMETER 3U /*!< DPO table Parameter length */ + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + +/*! DPO table entry struct */ +typedef struct { + uint8_t rfoRes; /*!< Setting for the resistance level of the RFO */ + uint8_t inc; /*!< Threshold for incrementing the output power */ + uint8_t dec; /*!< Threshold for decrementing the output power */ +}rfalDpoEntry; + +/*! Function pointer to methode doing the reference measurement */ +typedef ReturnCode (*rfalDpoMeasureFunc)(uint8_t*); + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + + +/*! + ***************************************************************************** + * \brief Initialize dynamic power table + * + * This function sets the internal dynamic power table to the default + * values stored in rfal_DpoTbl.h + * + ***************************************************************************** + */ +void rfalDpoInitialize( void ); + +/*! + ***************************************************************************** + * \brief Set the measurement methode + * + * This function sets the measurement method used for reference measurement. + * Based on the measurement the power will then be adjusted + * + * \param[in] dpoMeasureFunc: callback of measurement function + * + ***************************************************************************** + */ +void rfalDpoSetMeasureCallback( rfalDpoMeasureFunc dpoMeasureFunc ); + +/*! + ***************************************************************************** + * \brief Write dynamic power table + * + * Load the dynamic power table + * + * \param[in] powerTbl: location of power Table to be loaded + * \param[in] powerTblEntries: number of entries of the power Table to be loaded + * + * \return ERR_NONE : No error + * \return ERR_PARAM : if configTbl is invalid + * \return ERR_NOMEM : if the given Table is bigger exceeds the max size + ***************************************************************************** + */ +ReturnCode rfalDpoTableWrite( rfalDpoEntry* powerTbl, uint8_t powerTblEntries ); + +/*! + ***************************************************************************** + * \brief Dynamic power table Read + * + * Read the dynamic power table + * + * \param[out] tblBuf: location to the rfalDpoEntry[] to place the Table + * \param[in] tblBufEntries: number of entries available in tblBuf to place the power Table + * \param[out] tableEntries: returned number of entries actually written into tblBuf + * + * \return ERR_NONE : No error + * \return ERR_PARAM : if configTbl is invalid or parameters are invalid + ***************************************************************************** + */ +ReturnCode rfalDpoTableRead( rfalDpoEntry* tblBuf, uint8_t tblBufEntries, uint8_t* tableEntries ); + +/*! + ***************************************************************************** + * \brief Dynamic power adjust + * + * It measures the current output and adjusts the power accordingly to + * the dynamic power table + * + * \return ERR_NONE : No error + * \return ERR_PARAM : if configTbl is invalid or parameters are invalid + * \return ERR_WRONG_STATE : if the current state is valid for DPO Adjustment + ***************************************************************************** + */ +ReturnCode rfalDpoAdjust( void ); + +/*! + ***************************************************************************** + * \brief Get Current Dynamic power table entry + * + * Return current used DPO power table entry settings + * + * \return ERR_NONE : Current DpoEntry. This includes d_res, inc and dec + * + ***************************************************************************** + */ +rfalDpoEntry* rfalDpoGetCurrentTableEntry(void); + +/*! + ***************************************************************************** + * \brief Dynamic power set enabled state + * + * \param[in] enable: new active state + * + * Set state to enable or disable the Dynamic power adjustment + * + ***************************************************************************** + */ +void rfalDpoSetEnabled( bool enable ); + +/*! + ***************************************************************************** + * \brief Get the Dynamic power enabled state + * + * Get state of the Dynamic power adjustment + * + * \return true : enabled + * \return false : disabled + ***************************************************************************** + */ +bool rfalDpoIsEnabled(void); + +#endif /* RFAL_DPO_H */ + +/** + * @} + * + * @} + * + * @} + */ diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_dpoTbl.h b/Software/Middlewares/ST/rfal/Inc/rfal_dpoTbl.h new file mode 100644 index 0000000..f5c8981 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_dpoTbl.h @@ -0,0 +1,56 @@ + +/****************************************************************************** + * @attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * $Revision: $ + * LANGUAGE: ISO C99 + */ + + +#ifndef ST25R3911_DYNAMICPOWER_H +#define ST25R3911_DYNAMICPOWER_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "rfal_dpo.h" + + +/* + ****************************************************************************** + * GLOBAL VARIABLES + ****************************************************************************** + */ + + /*! Default DPO table */ +const uint8_t rfalDpoDefaultSettings [] = { + 0x00, 255, 200, + 0x01, 210, 150, + 0x02, 160, 100, + 0x03, 110, 50, + 0x0E, 60, 0 +}; + +#endif /* ST25R3911_DYNAMICPOWER_H */ diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_features.h b/Software/Middlewares/ST/rfal/Inc/rfal_features.h new file mode 100644 index 0000000..943da90 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_features.h @@ -0,0 +1,115 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author Gustavo Patricio + * + * \brief RFAL Features/Capabilities Definition for ST25R3911 + */ + + +#ifndef RFAL_FEATURES_H +#define RFAL_FEATURES_H + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "platform.h" + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ + +#define RFAL_SUPPORT_MODE_POLL_NFCA true /*!< RFAL Poll NFCA mode support switch */ +#define RFAL_SUPPORT_MODE_POLL_NFCB true /*!< RFAL Poll NFCB mode support switch */ +#define RFAL_SUPPORT_MODE_POLL_NFCF true /*!< RFAL Poll NFCF mode support switch */ +#define RFAL_SUPPORT_MODE_POLL_NFCV true /*!< RFAL Poll NFCV mode support switch */ +#define RFAL_SUPPORT_MODE_POLL_ACTIVE_P2P true /*!< RFAL Poll AP2P mode support switch */ +#define RFAL_SUPPORT_MODE_LISTEN_NFCA false /*!< RFAL Listen NFCA mode support switch */ +#define RFAL_SUPPORT_MODE_LISTEN_NFCB false /*!< RFAL Listen NFCB mode support switch */ +#define RFAL_SUPPORT_MODE_LISTEN_NFCF false /*!< RFAL Listen NFCF mode support switch */ +#define RFAL_SUPPORT_MODE_LISTEN_ACTIVE_P2P true /*!< RFAL Listen AP2P mode support switch */ + +/*******************************************************************************/ +/*! RFAL supported Card Emulation (CE) */ +#define RFAL_SUPPORT_CE ( RFAL_SUPPORT_MODE_LISTEN_NFCA || RFAL_SUPPORT_MODE_LISTEN_NFCB || RFAL_SUPPORT_MODE_LISTEN_NFCF ) + +/*! RFAL supported Reader/Writer (RW) */ +#define RFAL_SUPPORT_RW ( RFAL_SUPPORT_MODE_POLL_NFCA || RFAL_SUPPORT_MODE_POLL_NFCB || RFAL_SUPPORT_MODE_POLL_NFCF || RFAL_SUPPORT_MODE_POLL_NFCV ) + +/*! RFAL support for Active P2P (AP2P) */ +#define RFAL_SUPPORT_AP2P ( RFAL_SUPPORT_MODE_POLL_ACTIVE_P2P || RFAL_SUPPORT_MODE_POLL_ACTIVE_P2P ) + + +/*******************************************************************************/ +#define RFAL_SUPPORT_BR_RW_106 true /*!< RFAL RW 106 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_RW_212 true /*!< RFAL RW 212 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_RW_424 true /*!< RFAL RW 424 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_RW_848 true /*!< RFAL RW 848 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_RW_1695 true /*!< RFAL RW 1695 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_RW_3390 true /*!< RFAL RW 3390 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_RW_6780 false /*!< RFAL RW 6780 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_RW_13560 false /*!< RFAL RW 6780 Bit Rate support switch */ + + +/*******************************************************************************/ +#define RFAL_SUPPORT_BR_AP2P_106 true /*!< RFAL AP2P 106 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_AP2P_212 true /*!< RFAL AP2P 212 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_AP2P_424 true /*!< RFAL AP2P 424 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_AP2P_848 false /*!< RFAL AP2P 848 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_AP2P_1695 false /*!< RFAL AP2P 1695 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_AP2P_3390 false /*!< RFAL AP2P 3390 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_AP2P_6780 false /*!< RFAL AP2P 6780 Bit Rate support switch */ + + +/*******************************************************************************/ +#define RFAL_SUPPORT_BR_CE_A_106 false /*!< RFAL CE A 106 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_CE_A_212 false /*!< RFAL CE A 212 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_CE_A_424 false /*!< RFAL CE A 424 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_CE_A_848 false /*!< RFAL CE A 848 Bit Rate support switch */ + + +/*******************************************************************************/ +#define RFAL_SUPPORT_BR_CE_B_106 false /*!< RFAL CE B 106 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_CE_B_212 false /*!< RFAL CE B 212 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_CE_B_424 false /*!< RFAL CE B 424 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_CE_B_848 false /*!< RFAL CE B 848 Bit Rate support switch */ + + +/*******************************************************************************/ +#define RFAL_SUPPORT_BR_CE_F_212 false /*!< RFAL CE F 212 Bit Rate support switch */ +#define RFAL_SUPPORT_BR_CE_F_424 false /*!< RFAL CE F 424 Bit Rate support switch */ + + +#endif /* RFAL_FEATURES_H */ diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_iso15693_2.h b/Software/Middlewares/ST/rfal/Inc/rfal_iso15693_2.h new file mode 100644 index 0000000..da64117 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_iso15693_2.h @@ -0,0 +1,202 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_iso15693_2.h + * + * \author Ulrich Herrmann + * + * \brief Implementation of ISO-15693-2 + * + */ +/*! + * + */ + +#ifndef RFAL_ISO_15693_2_H +#define RFAL_ISO_15693_2_H + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "platform.h" +#include "st_errno.h" + +/* +****************************************************************************** +* GLOBAL DATATYPES +****************************************************************************** +*/ +/*! Enum holding possible VCD codings */ +typedef enum +{ + ISO15693_VCD_CODING_1_4, + ISO15693_VCD_CODING_1_256 +}iso15693VcdCoding_t; + +/*! Enum holding possible VICC datarates */ + +/*! Configuration parameter used by #iso15693PhyConfigure */ +typedef struct +{ + iso15693VcdCoding_t coding; /*!< desired VCD coding */ + uint32_t speedMode; /*!< 0: normal mode, 1: 2^1 = x2 Fast mode, 2 : 2^2 = x4 mode, 3 : 2^3 = x8 mode - all rx pulse numbers and times are divided by 1,2,4,8 */ +}iso15693PhyConfig_t; + +/*! Parameters how the stream mode should work */ +struct iso15693StreamConfig { + uint8_t useBPSK; /*!< 0: subcarrier, 1:BPSK */ + uint8_t din; /*!< the divider for the in subcarrier frequency: fc/2^din */ + uint8_t dout; /*!< the divider for the in subcarrier frequency fc/2^dout */ + uint8_t report_period_length; /*!< the length of the reporting period 2^report_period_length*/ +}; +/* +****************************************************************************** +* GLOBAL CONSTANTS +****************************************************************************** +*/ + +#define ISO15693_REQ_FLAG_TWO_SUBCARRIERS 0x01U /*!< Flag indication that communication uses two subcarriers */ +#define ISO15693_REQ_FLAG_HIGH_DATARATE 0x02U /*!< Flag indication that communication uses high bitrate */ +#define ISO15693_MASK_FDT_LISTEN (65) /*!< t1min = 308,2us = 4192/fc = 65.5 * 64/fc */ + +/*! t1max = 323,3us = 4384/fc = 68.5 * 64/fc + * 12 = 768/fc unmodulated time of single subcarrior SoF */ +#define ISO15693_FWT (69 + 12) + + + + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ +/*! + ***************************************************************************** + * \brief Initialize the ISO15693 phy + * + * \param[in] config : ISO15693 phy related configuration (See #iso15693PhyConfig_t) + * \param[out] needed_stream_config : return a pointer to the stream config + * needed for this iso15693 config. To be used for configure RF chip. + * + * \return ERR_IO : Error during communication. + * \return ERR_NONE : No error. + * + ***************************************************************************** + */ +extern ReturnCode iso15693PhyConfigure(const iso15693PhyConfig_t* config, + const struct iso15693StreamConfig ** needed_stream_config ); + +/*! + ***************************************************************************** + * \brief Return current phy configuration + * + * This function returns current Phy configuration previously + * set by #iso15693PhyConfigure + * + * \param[out] config : ISO15693 phy configuration. + * + * \return ERR_NONE : No error. + * + ***************************************************************************** + */ +extern ReturnCode iso15693PhyGetConfiguration(iso15693PhyConfig_t* config); + +/*! + ***************************************************************************** + * \brief Code an ISO15693 compatible frame + * + * This function takes \a length bytes from \a buffer, perform proper + * encoding and sends out the frame to the ST25R391x. + * + * \param[in] buffer : data to send, modified to adapt flags. + * \param[in] length : number of bytes to send. + * \param[in] sendCrc : If set to true, CRC is appended to the frame + * \param[in] sendFlags: If set to true, flag field is sent according to + * ISO15693. + * \param[in] picopassMode : If set to true, the coding will be according to Picopass + * \param[out] subbit_total_length : Return the complete bytes which need to + * be send for the current coding + * \param[in,out] offset : Set to 0 for first transfer, function will update it to + point to next byte to be coded + * \param[out] outbuf : buffer where the function will store the coded subbit stream + * \param[out] outBufSize : the size of the output buffer + * \param[out] actOutBufSize : the amount of data stored into the buffer at this call + * + * \return ERR_IO : Error during communication. + * \return ERR_AGAIN : Data was not coded all the way. Call function again with a new/emptied buffer + * \return ERR_NO_MEM : In case outBuf is not big enough. Needs to have at + least 5 bytes for 1of4 coding and 65 bytes for 1of256 coding + * \return ERR_NONE : No error. + * + ***************************************************************************** + */ +extern ReturnCode iso15693VCDCode(uint8_t* buffer, uint16_t length, bool sendCrc, bool sendFlags, bool picopassMode, + uint16_t *subbit_total_length, uint16_t *offset, + uint8_t* outbuf, uint16_t outBufSize, uint16_t* actOutBufSize); + + +/*! + ***************************************************************************** + * \brief Receive an ISO15693 compatible frame + * + * This function receives an ISO15693 frame from the ST25R391x, decodes the frame + * and writes the raw data to \a buffer. + * \note Buffer needs to be big enough to hold CRC also (+2 bytes) + * + * \param[in] inBuf : buffer with the hamming coded stream to be decoded + * \param[in] inBufLen : number of bytes to decode (=length of buffer). + * \param[out] outBuf : buffer where received data shall be written to. + * \param[in] outBufLen : Length of output buffer, should be approx twice the size of inBuf + * \param[out] outBufPos : The number of decoded bytes. Could be used in + * extended implementation to allow multiple calls + * \param[out] bitsBeforeCol : in case of ERR_COLLISION this value holds the + * number of bits in the current byte where the collision happened. + * \param[in] ignoreBits : number of bits in the beginning where collisions will be ignored + * \param[in] picopassMode : if set to true, the decoding will be according to Picopass + * + * \return ERR_COLLISION : collision occured, data uncorrect + * \return ERR_CRC : CRC error, data uncorrect + * \return ERR_TIMEOUT : timeout waiting for data. + * \return ERR_NONE : No error. + * + ***************************************************************************** + */ +extern ReturnCode iso15693VICCDecode(const uint8_t *inBuf, + uint16_t inBufLen, + uint8_t* outBuf, + uint16_t outBufLen, + uint16_t* outBufPos, + uint16_t* bitsBeforeCol, + uint16_t ignoreBits, + bool picopassMode ); + +#endif /* RFAL_ISO_15693_2_H */ + diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_isoDep.h b/Software/Middlewares/ST/rfal/Inc/rfal_isoDep.h new file mode 100644 index 0000000..546d6fe --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_isoDep.h @@ -0,0 +1,866 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_isoDep.h + * + * \author Gustavo Patricio + * + * \brief Implementation of ISO-DEP protocol + * + * This implementation was based on the following specs: + * - ISO/IEC 14443-4 2nd Edition 2008-07-15 + * - NFC Forum Digital Protocol 1.1 2014-01-14 + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-AL + * \brief RFAL Abstraction Layer + * @{ + * + * \addtogroup ISO-DEP + * \brief RFAL ISO-DEP Module + * @{ + * + */ + +#ifndef RFAL_ISODEP_H_ +#define RFAL_ISODEP_H_ +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "rfal_nfcb.h" +/* + ****************************************************************************** + * DEFINES + ****************************************************************************** + */ + +#define RFAL_ISODEP_PROLOGUE_SIZE (3U) /*!< Length of Prologue Field for I-Block Format */ + +#define RFAL_ISODEP_PCB_LEN (1U) /*!< PCB length */ +#define RFAL_ISODEP_DID_LEN (1U) /*!< DID length */ +#define RFAL_ISODEP_NAD_LEN (1U) /*!< NAD length */ +#define RFAL_ISODEP_NO_DID (0x00U) /*!< DID value indicating the ISO-DEP layer not to use DID */ +#define RFAL_ISODEP_NO_NAD (0xFFU) /*!< NAD value indicating the ISO-DEP layer not to use NAD */ + +#define RFAL_ISODEP_FWI_MASK (0xF0U) /*!< Mask bits of FWI */ +#define RFAL_ISODEP_FWI_SHIFT (4U) /*!< Shift val of FWI */ +#define RFAL_ISODEP_FWI_DEFAULT (4U) /*!< Default value for FWI Digital 1.0 11.6.2.17 */ +#define RFAL_ISODEP_ADV_FEATURE (0x0FU) /*!< Indicate 256 Bytes FSD and Advanc Proto Feature support:NAD & DID */ + +#define RFAL_ISODEP_DID_MAX (14U) /*!< Maximum DID value */ + +#define RFAL_ISODEP_BRI_MASK (0x07U) /*!< Mask bits for Poll to Listen Send bitrate */ +#define RFAL_ISODEP_BSI_MASK (0x70U) /*!< Mask bits for Listen to Poll Send bitrate */ +#define RFAL_ISODEP_SAME_BITRATE_MASK (0x80U) /*!< Mask bit indicate only same bit rate D for both direction support */ +#define RFAL_ISODEP_BITRATE_RFU_MASK (0x08U) /*!< Mask bit for RFU */ + +/*! Maximum Frame Waiting Time = ((256 * 16/fc) * 2^FWImax) = ((256*16/fc)*2^14) = (67108864)/fc = 2^26 (1/fc) */ +#define RFAL_ISODEP_MAX_FWT ((uint32_t)1U<<26) + + + +#define RFAL_ISODEP_FSDI_DEFAULT RFAL_ISODEP_FSXI_256 /*!< Default Frame Size Integer in Poll mode */ +#define RFAL_ISODEP_FSX_KEEP (0xFFU) /*!< Flag to keep FSX from activation */ +#define RFAL_ISODEP_DEFAULT_FSCI RFAL_ISODEP_FSXI_256 /*!< FSCI default value to be used in Listen Mode */ +#define RFAL_ISODEP_DEFAULT_FSC RFAL_ISODEP_FSX_256 /*!< FSC default value (aligned RFAL_ISODEP_DEFAULT_FSCI) */ +#define RFAL_ISODEP_DEFAULT_SFGI (0U) /*!< SFGI Default value to be used in Listen Mode */ +#define RFAL_ISODEP_DEFAULT_FWI (8U) /*!< Default Listener FWI (Max) Digital 2.0 B7 & B3 */ + +#define RFAL_ISODEP_APDU_MAX_LEN RFAL_ISODEP_FSX_1024 /*!< Max APDU length */ + +#define RFAL_ISODEP_ATTRIB_RES_MBLI_NO_INFO (0x00U) /*!< MBLI indicating no information on its internal input buffer size */ +#define RFAL_ISODEP_ATTRIB_REQ_PARAM1_DEFAULT (0x00U) /*!< Default values of Param 1 of ATTRIB_REQ Digital 1.0 12.6.1.3-5 */ +#define RFAL_ISODEP_ATTRIB_HLINFO_LEN (32U) /*!< Maximum Size of Higher Layer Information */ +#define RFAL_ISODEP_ATS_HB_MAX_LEN (15U) /*!< Maximum length of Historical Bytes Digital 1.1 13.6.2.23 */ +#define RFAL_ISODEP_ATTRIB_REQ_MIN_LEN (9U) /*!< Minimum Length of ATTRIB_REQ command */ +#define RFAL_ISODEP_ATTRIB_RES_MIN_LEN (1U) /*!< Minimum Length of ATTRIB_RES response */ + +#define RFAL_ISODEP_SPARAM_VALUES_MAX_LEN (16U) /*!< Maximum Length of the value field on S(PARAMETERS) */ +#define RFAL_ISODEP_SPARAM_TAG_BLOCKINFO (0xA0U) /*!< S(PARAMETERS) tag Block information */ +#define RFAL_ISODEP_SPARAM_TAG_BRREQ (0xA1U) /*!< S(PARAMETERS) tag Bit rates Request */ +#define RFAL_ISODEP_SPARAM_TAG_BRIND (0xA2U) /*!< S(PARAMETERS) tag Bit rates Indication */ +#define RFAL_ISODEP_SPARAM_TAG_BRACT (0xA3U) /*!< S(PARAMETERS) tag Bit rates Activation */ +#define RFAL_ISODEP_SPARAM_TAG_BRACK (0xA4U) /*!< S(PARAMETERS) tag Bit rates Acknowledgement */ + +#define RFAL_ISODEP_SPARAM_TAG_SUP_PCD2PICC (0x80U) /*!< S(PARAMETERS) tag Supported bit rates from PCD to PICC */ +#define RFAL_ISODEP_SPARAM_TAG_SUP_PICC2PCD (0x81U) /*!< S(PARAMETERS) tag Supported bit rates from PICC to PCD */ +#define RFAL_ISODEP_SPARAM_TAG_SUP_FRAME (0x82U) /*!< S(PARAMETERS) tag Supported framing options PICC to PCD */ +#define RFAL_ISODEP_SPARAM_TAG_SEL_PCD2PICC (0x83U) /*!< S(PARAMETERS) tag Selected bit rate from PCD to PICC */ +#define RFAL_ISODEP_SPARAM_TAG_SEL_PICC2PCD (0x84U) /*!< S(PARAMETERS) tag Selected bit rate from PICC to PCD */ +#define RFAL_ISODEP_SPARAM_TAG_SEL_FRAME (0x85U) /*!< S(PARAMETERS) tag Selected framing options PICC to PCD */ + +#define RFAL_ISODEP_SPARAM_TAG_LEN (1) /*!< S(PARAMETERS) Tag Length */ +#define RFAL_ISODEP_SPARAM_TAG_BRREQ_LEN (0U) /*!< S(PARAMETERS) tag Bit rates Request Length */ +#define RFAL_ISODEP_SPARAM_TAG_PICC2PCD_LEN (2U) /*!< S(PARAMETERS) bit rates from PCD to PICC Length */ +#define RFAL_ISODEP_SPARAM_TAG_PCD2PICC_LEN (2U) /*!< S(PARAMETERS) bit rates from PICC to PCD Length */ +#define RFAL_ISODEP_SPARAM_TAG_BRACK_LEN (0U) /*!< S(PARAMETERS) tag Bit rates Acknowledgement Length */ + +#define RFAL_ISODEP_ATS_TA_DPL_212 (0x01U) /*!< ATS TA DSI 212 kbps support bit mask */ +#define RFAL_ISODEP_ATS_TA_DPL_424 (0x02U) /*!< ATS TA DSI 424 kbps support bit mask */ +#define RFAL_ISODEP_ATS_TA_DPL_848 (0x04U) /*!< ATS TA DSI 848 kbps support bit mask */ +#define RFAL_ISODEP_ATS_TA_DLP_212 (0x10U) /*!< ATS TA DSI 212 kbps support bit mask */ +#define RFAL_ISODEP_ATS_TA_DLP_424 (0x20U) /*!< ATS TA DRI 424 kbps support bit mask */ +#define RFAL_ISODEP_ATS_TA_DLP_848 (0x40U) /*!< ATS TA DRI 848 kbps support bit mask */ +#define RFAL_ISODEP_ATS_TA_SAME_D (0x80U) /*!< ATS TA same bit both directions bit mask */ +#define RFAL_ISODEP_ATS_TB_FWI_MASK (0xF0U) /*!< Mask bits for FWI (Frame Waiting Integer) in TB byte */ +#define RFAL_ISODEP_ATS_TB_SFGI_MASK (0x0FU) /*!< Mask bits for SFGI (Start-Up Frame Guard Integer) in TB byte */ + +#define RFAL_ISODEP_ATS_T0_TA_PRESENCE_MASK (0x10U) /*!< Mask bit for TA presence */ +#define RFAL_ISODEP_ATS_T0_TB_PRESENCE_MASK (0x20U) /*!< Mask bit for TB presence */ +#define RFAL_ISODEP_ATS_T0_TC_PRESENCE_MASK (0x40U) /*!< Mask bit for TC presence */ +#define RFAL_ISODEP_ATS_T0_FSCI_MASK (0x0FU) /*!< Mask bit for FSCI presence */ +#define RFAL_ISODEP_ATS_T0_OFFSET (0x01U) /*!< Offset of T0 in ATS Response */ + + +#define RFAL_ISODEP_MAX_I_RETRYS (2U) /*!< Number of retries for a I-Block Digital 1.1 15.2.5.4 */ +#define RFAL_ISODEP_MAX_R_RETRYS (3U) /*!< Number of retries for a R-Block Digital 1.1 A8 - nRETRY ACK/NAK: [2,5] */ +#define RFAL_ISODEP_MAX_S_RETRYS (3U) /*!< Number of retries for a S-Block Digital 1.1 A8 - nRETRY DESELECT: [0,5] WTX[2,5] */ +#define RFAL_ISODEP_RATS_RETRIES (1U) /*!< RATS retries upon fail Digital 1.1 A.6 - [0,1] */ + + +/*! Frame Size for Proximity Card Integer definitions */ +typedef enum +{ + RFAL_ISODEP_FSXI_16 = 0, /*!< Frame Size for Proximity Card Integer with 16 bytes */ + RFAL_ISODEP_FSXI_24 = 1, /*!< Frame Size for Proximity Card Integer with 24 bytes */ + RFAL_ISODEP_FSXI_32 = 2, /*!< Frame Size for Proximity Card Integer with 32 bytes */ + RFAL_ISODEP_FSXI_40 = 3, /*!< Frame Size for Proximity Card Integer with 40 bytes */ + RFAL_ISODEP_FSXI_48 = 4, /*!< Frame Size for Proximity Card Integer with 48 bytes */ + RFAL_ISODEP_FSXI_64 = 5, /*!< Frame Size for Proximity Card Integer with 64 bytes */ + RFAL_ISODEP_FSXI_96 = 6, /*!< Frame Size for Proximity Card Integer with 96 bytes */ + RFAL_ISODEP_FSXI_128 = 7, /*!< Frame Size for Proximity Card Integer with 128 bytes */ + RFAL_ISODEP_FSXI_256 = 8, /*!< Frame Size for Proximity Card Integer with 256 bytes */ + RFAL_ISODEP_FSXI_512 = 9, /*!< Frame Size for Proximity Card Integer with 512 bytes ISO14443-3 Amd2 2012 */ + RFAL_ISODEP_FSXI_1024 = 10, /*!< Frame Size for Proximity Card Integer with 1024 bytes ISO14443-3 Amd2 2012 */ + RFAL_ISODEP_FSXI_2048 = 11, /*!< Frame Size for Proximity Card Integer with 2048 bytes ISO14443-3 Amd2 2012 */ + RFAL_ISODEP_FSXI_4096 = 12 /*!< Frame Size for Proximity Card Integer with 4096 bytes ISO14443-3 Amd2 2012 */ +} rfalIsoDepFSxI; + +/*! Frame Size for Proximity Card definitions */ +typedef enum +{ + RFAL_ISODEP_FSX_16 = 16, /*!< Frame Size for Proximity Card with 16 bytes */ + RFAL_ISODEP_FSX_24 = 24, /*!< Frame Size for Proximity Card with 24 bytes */ + RFAL_ISODEP_FSX_32 = 32, /*!< Frame Size for Proximity Card with 32 bytes */ + RFAL_ISODEP_FSX_40 = 40, /*!< Frame Size for Proximity Card with 40 bytes */ + RFAL_ISODEP_FSX_48 = 48, /*!< Frame Size for Proximity Card with 48 bytes */ + RFAL_ISODEP_FSX_64 = 64, /*!< Frame Size for Proximity Card with 64 bytes */ + RFAL_ISODEP_FSX_96 = 96, /*!< Frame Size for Proximity Card with 96 bytes */ + RFAL_ISODEP_FSX_128 = 128, /*!< Frame Size for Proximity Card with 128 bytes */ + RFAL_ISODEP_FSX_256 = 256, /*!< Frame Size for Proximity Card with 256 bytes */ + RFAL_ISODEP_FSX_512 = 512, /*!< Frame Size for Proximity Card with 512 bytes ISO14443-3 Amd2 2012 */ + RFAL_ISODEP_FSX_1024 = 1024, /*!< Frame Size for Proximity Card with 1024 bytes ISO14443-3 Amd2 2012 */ + RFAL_ISODEP_FSX_2048 = 2048, /*!< Frame Size for Proximity Card with 2048 bytes ISO14443-3 Amd2 2012 */ + RFAL_ISODEP_FSX_4096 = 4096, /*!< Frame Size for Proximity Card with 4096 bytes ISO14443-3 Amd2 2012 */ +} rfalIsoDepFSx; + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +/* + ****************************************************************************** + * GLOBAL DATA TYPES + ****************************************************************************** + */ + +/*! RATS format Digital 1.1 13.6.1 */ +typedef struct +{ + uint8_t CMD; /*!< RATS command byte: 0xE0 */ + uint8_t PARAM; /*!< Param indicating FSDI and DID */ +} rfalIsoDepRats; + + +/*! ATS response format Digital 1.1 13.6.2 */ +typedef struct +{ + uint8_t TL; /*!< Length Byte, including TL byte itself */ + uint8_t T0; /*!< Format Byte T0 indicating if TA, TB, TC */ + uint8_t TA; /*!< Interface Byte TA(1) */ + uint8_t TB; /*!< Interface Byte TB(1) */ + uint8_t TC; /*!< Interface Byte TC(1) */ + uint8_t HB[RFAL_ISODEP_ATS_HB_MAX_LEN]; /*!< Historical Bytes */ +} rfalIsoDepAts; + + +/*! PPS Request format (Protocol and Parameter Selection) ISO14443-4 5.3 */ +typedef struct +{ + uint8_t PPSS; /*!< Start Byte: [ 1101b | CID[4b] ] */ + uint8_t PPS0; /*!< Parameter 0:[ 000b | PPS1[1n] | 0001b ] */ + uint8_t PPS1; /*!< Parameter 1:[ 0000b | DSI[2b] | DRI[2b] ]*/ +} rfalIsoDepPpsReq; + + +/*! PPS Response format (Protocol and Parameter Selection) ISO14443-4 5.4 */ +typedef struct +{ + uint8_t PPSS; /*!< Start Byte: [ 1101b | CID[4b] ] */ +} rfalIsoDepPpsRes; + + +/*! ATTRIB Command Format Digital 1.1 15.6.1 */ +typedef struct +{ + uint8_t cmd; /*!< ATTRIB_REQ command byte */ + uint8_t nfcid0[RFAL_NFCB_NFCID0_LEN]; /*!< NFCID0 of the card to be selected */ + struct{ + uint8_t PARAM1; /*!< PARAM1 of ATTRIB command */ + uint8_t PARAM2; /*!< PARAM2 of ATTRIB command */ + uint8_t PARAM3; /*!< PARAM3 of ATTRIB command */ + uint8_t PARAM4; /*!< PARAM4 of ATTRIB command */ + }Param; /*!< Parameter of ATTRIB command */ + uint8_t HLInfo[RFAL_ISODEP_ATTRIB_HLINFO_LEN]; /*!< Higher Layer Information */ +} rfalIsoDepAttribCmd; + + +/*! ATTRIB Response Format Digital 1.1 15.6.2 */ +typedef struct +{ + uint8_t mbliDid; /*!< Contains MBLI and DID */ + uint8_t HLInfo[RFAL_ISODEP_ATTRIB_HLINFO_LEN]; /*!< Higher Layer Information */ +} rfalIsoDepAttribRes; + +/*! S(Parameters) Command Format ISO14443-4 (2016) Table 4 */ +typedef struct +{ + uint8_t tag; /*!< S(PARAMETERS) Tag field */ + uint8_t length; /*!< S(PARAMETERS) Length field */ + uint8_t value[RFAL_ISODEP_SPARAM_VALUES_MAX_LEN]; /*!< S(PARAMETERS) Value field */ +} rfalIsoDepSParameter; + + +/*! Activation info as Poller and Listener for NFC-A and NFC-B */ +typedef union {/* PRQA S 0750 # MISRA 19.2 - Both members of the union will not be used concurrently, device is only of type A or B at a time. Thus no problem can occur. */ + + /*! NFC-A information */ + union {/* PRQA S 0750 # MISRA 19.2 - Both members of the union will not be used concurrently, device is only PCD or PICC at a time. Thus no problem can occur. */ + struct { + rfalIsoDepAts ATS; /*!< ATS response (Poller mode) */ + uint8_t ATSLen; /*!< ATS response length (Poller mode) */ + }Listener; + struct { + rfalIsoDepRats RATS; /*!< RATS request (Listener mode) */ + }Poller; + }A; + + /*! NFC-B information */ + union {/* PRQA S 0750 # MISRA 19.2 - Both members of the union will not be used concurrently, device is only PCD or PICC at a time. Thus no problem can occur. */ + struct{ + rfalIsoDepAttribRes ATTRIB_RES; /*!< ATTRIB_RES (Poller mode) */ + uint8_t ATTRIB_RESLen; /*!< ATTRIB_RES length (Poller mode) */ + }Listener; + struct{ + rfalIsoDepAttribCmd ATTRIB; /*!< ATTRIB request (Listener mode) */ + uint8_t ATTRIBLen; /*!< ATTRIB request length (Listener mode) */ + }Poller; + }B; +}rfalIsoDepActivation; + + +/*! ISO-DEP device Info */ +typedef struct { + uint8_t FWI; /*!< Frame Waiting Integer */ + uint32_t FWT; /*!< Frame Waiting Time (1/fc) */ + uint32_t dFWT; /*!< Delta Frame Waiting Time (1/fc) */ + uint32_t SFGI; /*!< Start-up Frame Guard time Integer */ + uint32_t SFGT; /*!< Start-up Frame Guard Time (ms) */ + uint8_t FSxI; /*!< Frame Size Device/Card Integer (FSDI or FSCI) */ + uint16_t FSx; /*!< Frame Size Device/Card (FSD or FSC) */ + uint32_t MBL; /*!< Maximum Buffer Length (optional for NFC-B) */ + rfalBitRate DSI; /*!< Bit Rate coding from Listener (PICC) to Poller (PCD) */ + rfalBitRate DRI; /*!< Bit Rate coding from Poller (PCD) to Listener (PICC) */ + uint8_t DID; /*!< Device ID */ + uint8_t NAD; /*!< Node ADdress */ + bool supDID; /*!< DID supported flag */ + bool supNAD; /*!< NAD supported flag */ + bool supAdFt; /*!< Advanced Features supported flag */ +} rfalIsoDepInfo; + + +/*! ISO-DEP Device structure */ +typedef struct { + rfalIsoDepActivation activation; /*!< Activation Info */ + rfalIsoDepInfo info; /*!< ISO-DEP (ISO14443-4) device Info */ +} rfalIsoDepDevice; + + +/*! ATTRIB Response parameters */ +typedef struct +{ + uint8_t mbli; /*!< MBLI */ + uint8_t HLInfo[RFAL_ISODEP_ATTRIB_HLINFO_LEN]; /*!< Hi Layer Information */ + uint8_t HLInfoLen; /*!< Hi Layer Information Length */ +} rfalIsoDepAttribResParam; + + +/*! ATS Response parameter */ +typedef struct +{ + uint8_t fsci; /*!< Frame Size of Proximity Card Integer */ + uint8_t fwi; /*!< Frame Waiting Time Integer */ + uint8_t sfgi; /*!< Start-Up Frame Guard Time Integer */ + bool didSupport; /*!< DID Supported */ + uint8_t ta; /*!< Max supported bitrate both direction */ + uint8_t *hb; /*!< Historical Bytes data */ + uint8_t hbLen; /*!< Historical Bytes Length */ +} rfalIsoDepAtsParam; + + +/*! Structure of I-Block Buffer format from caller */ +typedef struct +{ + uint8_t prologue[RFAL_ISODEP_PROLOGUE_SIZE]; /*!< Prologue/SoD buffer */ + uint8_t inf[RFAL_FEATURE_ISO_DEP_IBLOCK_MAX_LEN]; /*!< INF/Payload buffer */ +} rfalIsoDepBufFormat; + + +/*! Structure of APDU Buffer format from caller */ +typedef struct +{ + uint8_t prologue[RFAL_ISODEP_PROLOGUE_SIZE]; /*!< Prologue/SoD buffer */ + uint8_t apdu[RFAL_FEATURE_ISO_DEP_APDU_MAX_LEN]; /*!< APDU/Payload buffer */ +} rfalIsoDepApduBufFormat; + + +/*! Listen Activation Parameters Structure */ +typedef struct +{ + rfalIsoDepBufFormat *rxBuf; /*!< Receive Buffer struct reference */ + uint16_t *rxLen; /*!< Received INF data length in Bytes */ + bool *isRxChaining; /*!< Received data is not complete */ + rfalIsoDepDevice *isoDepDev; /*!< ISO-DEP device info */ +} rfalIsoDepListenActvParam; + + +/*! Structure of parameters used on ISO DEP Transceive */ +typedef struct +{ + rfalIsoDepBufFormat *txBuf; /*!< Transmit Buffer struct reference */ + uint16_t txBufLen; /*!< Transmit Buffer INF field length in Bytes*/ + bool isTxChaining; /*!< Transmit data is not complete */ + rfalIsoDepBufFormat *rxBuf; /*!< Receive Buffer struct reference in Bytes */ + uint16_t *rxLen; /*!< Received INF data length in Bytes */ + bool *isRxChaining; /*!< Received data is not complete */ + uint32_t FWT; /*!< FWT to be used (ignored in Listen Mode) */ + uint32_t dFWT; /*!< Delta FWT to be used */ + uint16_t ourFSx; /*!< Our device Frame Size (FSD or FSC) */ + uint16_t FSx; /*!< Other device Frame Size (FSD or FSC) */ + uint8_t DID; /*!< Device ID (RFAL_ISODEP_NO_DID if no DID) */ +} rfalIsoDepTxRxParam; + + +/*! Structure of parameters used on ISO DEP APDU Transceive */ +typedef struct +{ + rfalIsoDepApduBufFormat *txBuf; /*!< Transmit Buffer struct reference */ + uint16_t txBufLen; /*!< Transmit Buffer INF field length in Bytes*/ + rfalIsoDepApduBufFormat *rxBuf; /*!< Receive Buffer struct reference in Bytes */ + uint16_t *rxLen; /*!< Received INF data length in Bytes */ + rfalIsoDepBufFormat *tmpBuf; /*!< Temp buffer for Rx I-Blocks (internal) */ + uint32_t FWT; /*!< FWT to be used (ignored in Listen Mode) */ + uint32_t dFWT; /*!< Delta FWT to be used */ + uint16_t FSx; /*!< Other device Frame Size (FSD or FSC) */ + uint16_t ourFSx; /*!< Our device Frame Size (FSD or FSC) */ + uint8_t DID; /*!< Device ID (RFAL_ISODEP_NO_DID if no DID) */ +} rfalIsoDepApduTxRxParam; + +/* + ****************************************************************************** + * GLOBAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + + +/*! + ****************************************************************************** + * \brief Initialize the ISO-DEP protocol + * + * Initialize the ISO-DEP protocol layer with default config + ****************************************************************************** + */ +void rfalIsoDepInitialize( void ); + + +/*! + ****************************************************************************** + * \brief Initialize the ISO-DEP protocol + * + * Initialize the ISO-DEP protocol layer with additional parameters allowing + * to customise the protocol layer for specific behaviours + * + * \param[in] compMode : compliance mode to be performed + * \param[in] maxRetriesR : Number of retries for a R-Block + * \param[in] maxRetriesS : Number of retries for a S-Block + * \param[in] maxRetriesI : Number of retries for a I-Block + * \param[in] maxRetriesRATS : Number of retries for RATS + * + ****************************************************************************** + */ +void rfalIsoDepInitializeWithParams( rfalComplianceMode compMode, uint8_t maxRetriesR, uint8_t maxRetriesS, uint8_t maxRetriesI, uint8_t maxRetriesRATS ); + + +/*! + ***************************************************************************** + * \brief FSxI to FSx + * + * Convert Frame Size for proximity coupling Device Integer (FSxI) to + * Frame Size for proximity coupling Device (FSx) + * + * FSD - maximum frame size for NFC Forum Device in Poll Mode + * FSC - maximum frame size for NFC Forum Device in Listen Mode + * + * FSxI = FSDI or FSCI + * FSx = FSD or FSC + * + * The FSD/FSC value includes the header and CRC + * + * \param[in] FSxI : Frame Size for proximity coupling Device Integer + * + * \return fsx : Frame Size for proximity coupling Device (FSD or FSC) + * + ***************************************************************************** + */ +uint16_t rfalIsoDepFSxI2FSx( uint8_t FSxI ); + + +/*! + ***************************************************************************** + * \brief FWI to FWT + * + * Convert Frame Waiting time Integer (FWI) to Frame Waiting Time (FWT) in + * 1/fc units + * + * \param[in] fwi : Frame Waiting time Integer + * + * \return fwt : Frame Waiting Time in 1/fc units + * + ***************************************************************************** + */ +uint32_t rfalIsoDepFWI2FWT( uint8_t fwi ); + + +/*! + ***************************************************************************** + * \brief Check if the buffer data contains a valid RATS command + * + * Check if it is a well formed RATS command with 2 bytes + * This function does not check the validity of FSDI and DID + * + * \param[in] buf : reference to buffer containing the data to be checked + * \param[in] bufLen : length of data in the buffer in bytes + * + * \return true if the data indicates a RATS command; false otherwise + ***************************************************************************** + */ +bool rfalIsoDepIsRats( const uint8_t *buf, uint8_t bufLen ); + + +/*! + ***************************************************************************** + * \brief Check if the buffer data contains a valid ATTRIB command + * + * Check if it is a well formed ATTRIB command, but does not check the + * validity of the information inside + * + * \param[in] buf : reference to buffer containing the data to be checked + * \param[in] bufLen : length of data in the buffer in bytes + * + * \return true if the data indicates a ATTRIB command; false otherwise + ***************************************************************************** + */ +bool rfalIsoDepIsAttrib( const uint8_t *buf, uint8_t bufLen ); + + +/*! + ***************************************************************************** + * \brief Start Listen Activation Handling + * + * Start Listen Activation Handling and setup to receive first I-block which may + * contain complete or partial APDU after activation is completed + * + * Pass in RATS for T4AT, or ATTRIB for T4BT, to handle ATS or ATTRIB Response respectively + * The Activation Handling handles ATS and ATTRIB Response; and additionally PPS Response + * if a PPS is received for T4AT. + * The method uses the current RFAL state machine to determine if it is expecting RATS or ATTRIB + * + * Activation is completed if PPS Response is sent or if first PDU is received in T4T-A + * Activation is completed if ATTRIB Response is sent in T4T-B + * + * \ref rfalIsoDepListenGetActivationStatus provide status if activation is completed. + * \ref rfalIsoDepStartTransceive shall be called right after activation is completed + * + * \param[in] atsParam : reference to ATS parameters + * \param[in] attribResParam : reference to ATTRIB_RES parameters + * \param[in] buf : reference to buffer containing RATS or ATTRIB + * \param[in] bufLen : length in bytes of the given bufffer + * \param[in] actParam : reference to incoming reception information will be placed + * + * + * \warning Once the Activation has been completed the method + * rfalIsoDepGetTransceiveStatus() must be called. + * If activation has completed due to reception of a data block (not PPS) the + * buffer owned by the caller and passed on actParam must still contain this data. + * The first data will be processed (I-Block or S-DSL) by rfalIsoDepGetTransceiveStatus() + * inform the caller and then for the next transaction use rfalIsoDepStartTransceive() + * + * \return ERR_NONE : RATS/ATTRIB is valid and activation has started + * \return ERR_PARAM : Invalid parameters + * \return ERR_PROTO : Invalid request + * \return ERR_NOTSUPP : Feature not supported + ***************************************************************************** + */ +ReturnCode rfalIsoDepListenStartActivation( rfalIsoDepAtsParam *atsParam, const rfalIsoDepAttribResParam *attribResParam, uint8_t *buf, uint16_t bufLen, rfalIsoDepListenActvParam actParam ); + + +/*! + ***************************************************************************** + * \brief Get the current Activation Status + * + * \return ERR_NONE if Activation is already completed + * \return ERR_BUSY if Activation is ongoing + * \return ERR_LINK_LOSS if Remote Field is turned off + ***************************************************************************** + */ +ReturnCode rfalIsoDepListenGetActivationStatus( void ); + + +/*! + ***************************************************************************** + * \brief Get the ISO-DEP Communication Information + * + * Gets the maximum INF length in bytes based on current Frame Size + * for proximity coupling Device (FSD or FSC) excluding the header and CRC + * + * \return maximum INF length in bytes + ***************************************************************************** + */ +uint16_t rfalIsoDepGetMaxInfLen( void ); + + +/*! + ***************************************************************************** + * \brief ISO-DEP Start Transceive + * + * This method triggers a ISO-DEP Transceive containing a complete or + * partial APDU + * It transmits the given message and handles all protocol retransmitions, + * error handling and control messages + * + * The txBuf contains a complete or partial APDU (INF) to be transmitted + * The Prologue field will be manipulated by the Transceive + * + * If the buffer contains a partial APDU and is not the last block, + * then isTxChaining must be set to true + * + * \param[in] param: reference parameters to be used for the Transceive + * + * \return ERR_PARAM : Bad request + * \return ERR_WRONG_STATE : The module is not in a proper state + * \return ERR_NONE : The Transceive request has been started + ***************************************************************************** + */ +ReturnCode rfalIsoDepStartTransceive( rfalIsoDepTxRxParam param ); + + +/*! + ***************************************************************************** + * \brief Get the Transceive status + * + * Returns the status of the ISO-DEP Transceive + * + * \warning When the other device is performing chaining once a chained + * block is received the error ERR_AGAIN is sent. At this point + * caller must handle the received data immediately. + * When ERR_AGAIN is returned an ACK has already been sent to + * the other device and the next block might be incoming. + * If rfalWorker() is called frequently it will place the next + * block on the given buffer + * + * + * \return ERR_NONE : Transceive has been completed successfully + * \return ERR_BUSY : Transceive is ongoing + * \return ERR_PROTO : Protocol error occurred + * \return ERR_TIMEOUT : Timeout error occurred + * \return ERR_SLEEP_REQ : Deselect has been received and responded + * \return ERR_NOMEM : The received INF does not fit into the + * receive buffer + * \return ERR_LINK_LOSS : Communication is lost because Reader/Writer + * has turned off its field + * \return ERR_AGAIN : received one chaining block, continue to call + * this method to retrieve the remaining blocks + ***************************************************************************** + */ +ReturnCode rfalIsoDepGetTransceiveStatus( void ); + + +/*! + ***************************************************************************** + * \brief ISO-DEP Start APDU Transceive + * + * This method triggers a ISO-DEP Transceive containing a complete APDU + * It transmits the given message and handles all protocol retransmitions, + * error handling and control messages + * + * The txBuf contains a complete APDU to be transmitted + * The Prologue field will be manipulated by the Transceive + * + * \warning the txBuf will be modified during the transmission + * \warning the maximum RF frame which can be received is limited by param.tmpBuf + * + * \param[in] param: reference parameters to be used for the Transceive + * + * \return ERR_PARAM : Bad request + * \return ERR_WRONG_STATE : The module is not in a proper state + * \return ERR_NONE : The Transceive request has been started + ***************************************************************************** + */ +ReturnCode rfalIsoDepStartApduTransceive( rfalIsoDepApduTxRxParam param ); + + +/*! + ***************************************************************************** + * \brief Get the APDU Transceive status + * + * \return ERR_NONE : if Transceive has been completed successfully + * \return ERR_BUSY : if Transceive is ongoing + * \return ERR_PROTO : if a protocol error occurred + * \return ERR_TIMEOUT : if a timeout error occurred + * \return ERR_SLEEP_REQ : if Deselect is received and responded + * \return ERR_NOMEM : if the received INF does not fit into the + * receive buffer + * \return ERR_LINK_LOSS : if communication is lost because Reader/Writer + * has turned off its field + ***************************************************************************** + */ +ReturnCode rfalIsoDepGetApduTransceiveStatus( void ); + +/*! + ***************************************************************************** + * \brief ISO-DEP Send RATS + * + * This sends a RATS to make a NFC-A Listen Device to enter + * ISO-DEP layer (ISO14443-4) and checks if the received ATS is valid + * + * \param[in] FSDI : Frame Size Device Integer to be used + * \param[in] DID : Device ID to be used or RFAL_ISODEP_NO_DID for not use DID + * \param[out] ats : pointer to place the ATS Response + * \param[out] atsLen : pointer to place the ATS length + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error + * \return ERR_PAR : Parity error detected + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error, ATS received + ***************************************************************************** + */ +ReturnCode rfalIsoDepRATS( rfalIsoDepFSxI FSDI, uint8_t DID, rfalIsoDepAts *ats , uint8_t *atsLen ); + + +/*! + ***************************************************************************** + * \brief ISO-DEP Send PPS + * + * This sends a PPS to make a NFC-A Listen Device change the communications + * bit rate from 106kbps to one of the supported bit rates + * Additionally checks if the received PPS response is valid + * + * \param[in] DID : Device ID + * \param[in] DSI : DSI code the divisor from Listener (PICC) to Poller (PCD) + * \param[in] DRI : DRI code the divisor from Poller (PCD) to Listener (PICC) + * \param[out] ppsRes : pointer to place the PPS Response + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error + * \return ERR_PAR : Parity error detected + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error, PPS Response received + ***************************************************************************** + */ +ReturnCode rfalIsoDepPPS( uint8_t DID, rfalBitRate DSI, rfalBitRate DRI, rfalIsoDepPpsRes *ppsRes ); + + +/*! + ***************************************************************************** + * \brief ISO-DEP Send ATTRIB + * + * This sends a ATTRIB to make a NFC-B Listen Device to enter + * ISO-DEP layer (ISO14443-4) and checks if the received ATTRIB Response is valid + * + * \param[in] nfcid0 : NFCID0 to be used for the ATTRIB + * \param[in] PARAM1 : ATTRIB PARAM1 byte (communication parameters) + * \param[in] DSI : DSI code the divisor from Listener (PICC) to Poller (PCD) + * \param[in] DRI : DRI code the divisor from Poller (PCD) to Listener (PICC) + * \param[in] FSDI : PCD's Frame Size to be announced on the ATTRIB + * \param[in] PARAM3 : ATTRIB PARAM1 byte (protocol type) + * \param[in] DID : Device ID to be used or RFAL_ISODEP_NO_DID for not use DID + * \param[in] HLInfo : pointer to Higher layer INF (NULL if none) + * \param[in] HLInfoLen : Length HLInfo + * \param[in] fwt : Frame Waiting Time to be used (from SENSB_RES) + * \param[out] attribRes : pointer to place the ATTRIB Response + * \param[out] attribResLen : pointer to place the ATTRIB Response length + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error, ATTRIB Response received + ***************************************************************************** + */ +ReturnCode rfalIsoDepATTRIB( const uint8_t* nfcid0, uint8_t PARAM1, rfalBitRate DSI, rfalBitRate DRI, rfalIsoDepFSxI FSDI, uint8_t PARAM3, uint8_t DID, const uint8_t* HLInfo, uint8_t HLInfoLen, uint32_t fwt, rfalIsoDepAttribRes *attribRes, uint8_t *attribResLen ); + + +/*! + ***************************************************************************** + * \brief Deselects PICC + * + * This function sends a deselect command to PICC and waits for it`s + * responce in a blocking way + * + * \return ERR_NONE : Deselect successfully sent and acknowledged by PICC + * \return ERR_TIMEOUT: No response rcvd from PICC + * + ***************************************************************************** + */ +ReturnCode rfalIsoDepDeselect( void ); + + +/*! + ***************************************************************************** + * \brief ISO-DEP Poller Handle NFC-A Activation + * + * This performs a NFC-A Activation into ISO-DEP layer (ISO14443-4) with the given + * parameters. It sends RATS and if the higher bit rates are supported by + * both devices it additionally sends PPS + * Once Activated all details of the device are provided on isoDepDev + * + * \param[in] FSDI : Frame Size Device Integer to be used + * \param[in] DID : Device ID to be used or RFAL_ISODEP_NO_DID for not use DID + * \param[in] maxBR : Max bit rate supported by the Poller + * \param[out] isoDepDev : ISO-DEP information of the activated Listen device + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error + * \return ERR_PAR : Parity error detected + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error, activation successful + ***************************************************************************** + */ +ReturnCode rfalIsoDepPollAHandleActivation( rfalIsoDepFSxI FSDI, uint8_t DID, rfalBitRate maxBR, rfalIsoDepDevice *isoDepDev ); + + +/*! + ***************************************************************************** + * \brief ISO-DEP Poller Handle NFC-B Activation + * + * This performs a NFC-B Activation into ISO-DEP layer (ISO14443-4) with the given + * parameters. It sends ATTRIB and calculates supported higher bit rates of both + * devices and performs activation. + * Once Activated all details of the device are provided on isoDepDev + * + * \param[in] FSDI : Frame Size Device Integer to be used + * \param[in] DID : Device ID to be used or RFAL_ISODEP_NO_DID for not use DID + * \param[in] maxBR : Max bit rate supported by the Poller + * \param[in] PARAM1 : ATTRIB PARAM1 byte (communication parameters) + * \param[in] nfcbDev : pointer to the NFC-B Device containing the SENSB_RES + * \param[in] HLInfo : pointer to Higher layer INF (NULL if none) + * \param[in] HLInfoLen : Length HLInfo + * \param[out] isoDepDev : ISO-DEP information of the activated Listen device + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error + * \return ERR_PAR : Parity error detected + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error, activation successful + ***************************************************************************** + */ +ReturnCode rfalIsoDepPollBHandleActivation( rfalIsoDepFSxI FSDI, uint8_t DID, rfalBitRate maxBR, uint8_t PARAM1, const rfalNfcbListenDevice *nfcbDev, const uint8_t* HLInfo, uint8_t HLInfoLen, rfalIsoDepDevice *isoDepDev ); + + +/*! + ***************************************************************************** + * \brief ISO-DEP Poller Handle S(Parameters) + * + * This checks if PICC supports S(PARAMETERS), retieves PICC's + * capabilities and sets the Bit Rate at the highest supported by both + * devices + * + * \param[out] isoDepDev : ISO-DEP information of the activated Listen device + * \param[in] maxTxBR : Maximum Tx bit rate supported by PCD + * \param[in] maxRxBR : Maximum Rx bit rate supported by PCD + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error, S(PARAMETERS) selection successful + ***************************************************************************** + */ +ReturnCode rfalIsoDepPollHandleSParameters( rfalIsoDepDevice *isoDepDev, rfalBitRate maxTxBR, rfalBitRate maxRxBR ); + + +#endif /* RFAL_ISODEP_H_ */ + +/** + * @} + * + * @} + * + * @} + */ diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_nfc.h b/Software/Middlewares/ST/rfal/Inc/rfal_nfc.h new file mode 100644 index 0000000..e2cc059 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_nfc.h @@ -0,0 +1,406 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_nfc.h + * + * \brief RFAL NFC device + * + * This module provides the required features to behave as an NFC Poller + * or Listener device. It grants an easy to use interface for the following + * activities: Technology Detection, Collision Resolution, Activation, + * Data Exchange, and Deactivation + * + * This layer is influenced by (but not fully aligned with) the NFC Forum + * specifications, in particular: Activity 2.0 and NCI 2.0 + * + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-AL + * \brief RFAL Abstraction Layer + * @{ + * + * \addtogroup RF + * \brief RFAL RF Abstraction Layer + * @{ + * + */ + +#ifndef RFAL_NFC_H +#define RFAL_NFC_H + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "platform.h" +#include "st_errno.h" +#include "rfal_rf.h" +#include "rfal_nfca.h" +#include "rfal_nfcb.h" +#include "rfal_nfcf.h" +#include "rfal_nfcv.h" +#include "rfal_st25tb.h" +#include "rfal_nfcDep.h" +#include "rfal_isoDep.h" + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ +#define RFAL_NFC_RF_BUF_LEN 255U /*!< No technology */ + +#define RFAL_NFC_TECH_NONE 0x0000U /*!< No technology */ +#define RFAL_NFC_POLL_TECH_A 0x0001U /*!< NFC-A technology Flag */ +#define RFAL_NFC_POLL_TECH_B 0x0002U /*!< NFC-B technology Flag */ +#define RFAL_NFC_POLL_TECH_F 0x0004U /*!< NFC-F technology Flag */ +#define RFAL_NFC_POLL_TECH_V 0x0008U /*!< NFC-V technology Flag */ +#define RFAL_NFC_POLL_TECH_AP2P 0x0010U /*!< AP2P technology Flag */ +#define RFAL_NFC_POLL_TECH_ST25TB 0x0020U /*!< ST25TB technology Flag */ +#define RFAL_NFC_LISTEN_TECH_A 0x1000U /*!< NFC-V technology Flag */ +#define RFAL_NFC_LISTEN_TECH_B 0x2000U /*!< NFC-V technology Flag */ +#define RFAL_NFC_LISTEN_TECH_F 0x4000U /*!< NFC-V technology Flag */ +#define RFAL_NFC_LISTEN_TECH_AP2P 0x8000U /*!< NFC-V technology Flag */ + + +/* +****************************************************************************** +* GLOBAL MACROS +****************************************************************************** +*/ + +/*! Checks if a device is currently activated */ +#define rfalNfcIsDevActivated( st ) ( ((st)>= RFAL_NFC_STATE_ACTIVATED) && ((st)= RFAL_NFC_STATE_START_DISCOVERY) && ((st)= 1. + * + * \param[in] disParams : discovery configuration parameters + * + * \return ERR_WRONG_STATE : Incorrect state for this operation + * \return ERR_PARAM : Invalid parameters + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcDiscover( const rfalNfcDiscoverParam *disParams ); + +/*! + ***************************************************************************** + * \brief RFAL NFC Get State + * + * It returns the current state + * + * \return rfalNfcState : the current state + ***************************************************************************** + */ +rfalNfcState rfalNfcGetState( void ); + +/*! + ***************************************************************************** + * \brief RFAL NFC Get Devices Found + * + * It returns the location of the device list and the number of + * devices found. + * + * \param[out] devList : device list location + * \param[out] devCnt : number of devices found + * + * \return ERR_WRONG_STATE : Incorrect state for this operation + * Discovery still ongoing + * \return ERR_PARAM : Invalid parameters + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcGetDevicesFound( rfalNfcDevice **devList, uint8_t *devCnt ); + +/*! + ***************************************************************************** + * \brief RFAL NFC Get Active Device + * + * It returns the location of the device current Active device + * + * \param[out] dev : device info location + * + * \return ERR_WRONG_STATE : Incorrect state for this operation + * No device activated + * \return ERR_PARAM : Invalid parameters + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcGetActiveDevice( rfalNfcDevice **dev ); + +/*! + ***************************************************************************** + * \brief RFAL NFC Select Device + * + * It selects the device to be activated. + * It shall be called when more than one device has been identified to + * indiacte which device shall be actived + * + * \param[in] devIdx : device index to be activated + * + * \return ERR_WRONG_STATE : Incorrect state for this operation + * Not in select state + * \return ERR_PARAM : Invalid parameters + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcSelect( uint8_t devIdx ); + +/*! + ***************************************************************************** + * \brief RFAL NFC Start Data Exchange + * + * After a device has been activated, it starts a data exchange. + * It handles automatically which interface/protocol to be used and acts accordingly. + * + * In Listen mode the first frame/data shall be sent by the Reader/Initiator + * therefore this method must be called first with txDataLen set to zero + * to retrieve the rxData and rcvLen locations. + * + * + * \param[in] txData : data to be transmitted + * \param[in] txDataLen : size of the data to be transmitted + * \param[out] rxData : location of the received data after operation is completed + * \param[out] rvdLen : location of thelength of the received data + * \param[in] fwt : FWT to be used in case of RF interface. + * If ISO-DEP or NFC-DEP interface is used, this will be ignored + * + * \return ERR_WRONG_STATE : Incorrect state for this operation + * \return ERR_PARAM : Invalid parameters + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcDataExchangeStart( uint8_t *txData, uint16_t txDataLen, uint8_t **rxData, uint16_t **rvdLen, uint32_t fwt ); + +/*! + ***************************************************************************** + * \brief RFAL NFC Get Data Exchange Status + * + * Gets current Data Exchange status + * + * \return ERR_NONE : Transceive done with no error + * \return ERR_BUSY : Transceive ongoing + * \return ERR_AGAIN : received one chaining block, copy received data + * and continue to call this method to retrieve the + * remaining blocks + * \return ERR_XXXX : Error occurred + * \return ERR_TIMEOUT : No response + * \return ERR_FRAMING : Framing error detected + * \return ERR_PAR : Parity error detected + * \return ERR_CRC : CRC error detected + * \return ERR_LINK_LOSS : Link Loss - External Field is Off + * \return ERR_RF_COLLISION : Collision detected + * \return ERR_IO : Internal error + ***************************************************************************** + */ +ReturnCode rfalNfcDataExchangeGetStatus( void ); + +/*! + ***************************************************************************** + * \brief RFAL NFC Deactivate + * + * It triggers the deactivation procedure to terminate communications with + * remote device. At the end the field will be turned off. + * + * \param[in] discovery : TRUE if after deactivation go back into discovery + * : FALSE if after deactivation remain in idle + * + * \return ERR_WRONG_STATE : Incorrect state for this operation + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcDeactivate( bool discovery ); + +#endif /* RFAL_NFC_H */ + + +/** + * @} + * + * @} + * + * @} + */ diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_nfcDep.h b/Software/Middlewares/ST/rfal/Inc/rfal_nfcDep.h new file mode 100644 index 0000000..2d68353 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_nfcDep.h @@ -0,0 +1,700 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_nfcDep.h + * + * \author Gustavo Patricio + * + * \brief Implementation of NFC-DEP protocol + * + * NFC-DEP is also known as NFCIP - Near Field Communication + * Interface and Protocol + * + * This implementation was based on the following specs: + * - NFC Forum Digital 1.1 + * - ECMA 340 3rd Edition 2013 + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-AL + * \brief RFAL Abstraction Layer + * @{ + * + * \addtogroup NFC-DEP + * \brief RFAL NFC-DEP Module + * @{ + */ + +#ifndef RFAL_NFCDEP_H_ +#define RFAL_NFCDEP_H_ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_rf.h" + +/* + ****************************************************************************** + * DEFINES + ****************************************************************************** + */ +#define RFAL_NFCDEP_FRAME_SIZE_MAX_LEN 254U /*!< NFCIP Maximum Frame Size Digital 1.0 Table 91 */ +#define RFAL_NFCDEP_DEPREQ_HEADER_LEN 5U /*!< DEP_REQ header length: CMD_TYPE + CMD_CMD + PBF + DID + NAD */ + +/*! Length NFCIP DEP REQ or RES header (incl LEN) */ +#define RFAL_NFCDEP_DEP_HEADER ( RFAL_NFCDEP_LEN_LEN + RFAL_NFCDEP_CMDTYPE_LEN + RFAL_NFCDEP_CMD_LEN + RFAL_NFCDEP_DEP_PFB_LEN ) +#define RFAL_NFCDEP_HEADER ( RFAL_NFCDEP_CMDTYPE_LEN + RFAL_NFCDEP_CMD_LEN ) /*!< NFCIP header length */ +#define RFAL_NFCDEP_SB_LEN 1U /*!< SB length on NFCIP fram for NFC-A */ +#define RFAL_NFCDEP_LEN_LEN 1U /*!< LEN length on NFCIP frame */ +#define RFAL_NFCDEP_CMDTYPE_LEN 1U /*!< Length of the cmd type (REQ | RES) on NFCIP frame */ +#define RFAL_NFCDEP_CMD_LEN 1U /*!< Length of the cmd on NFCIP frame */ +#define RFAL_NFCDEP_DID_LEN 1U /*!< Length of did on NFCIP frame */ +#define RFAL_NFCDEP_DEP_PFB_LEN 1U /*!< Length of the PFB field on NFCIP frame */ + +#define RFAL_NFCDEP_DSL_RLS_LEN_NO_DID (RFAL_NFCDEP_LEN_LEN + RFAL_NFCDEP_CMDTYPE_LEN + RFAL_NFCDEP_CMD_LEN) /*!< Length of DSL_REQ and RLS_REQ with no DID */ +#define RFAL_NFCDEP_DSL_RLS_LEN_DID (RFAL_NFCDEP_DSL_RLS_LEN_NO_DID + RFAL_NFCDEP_DID_LEN) /*!< Length of DSL_REQ and RLS_REQ with DID */ + +#define RFAL_NFCDEP_FS_VAL_MIN 64U /*!< Minimum LR value */ +#define RFAL_NFCDEP_LR_VAL_MASK 0x03U /*!< Bit mask for a LR value */ +#define RFAL_NFCDEP_PP_LR_MASK 0x30U /*!< Bit mask for LR value in PP byte on a ATR REQ/RES */ +#define RFAL_NFCDEP_PP_LR_SHIFT 4U /*!< Position of LR value in PP byte on a ATR REQ/RES */ + +#define RFAL_NFCDEP_DID_MAX 14U /*!< Max DID value Digital 14.6.2.3 */ +#define RFAL_NFCDEP_DID_KEEP 0xFFU /*!< Keep DID value already configured */ +#define RFAL_NFCDEP_DID_NO 0x00U /*!< No DID shall be used */ +#define RFAL_NFCDEP_NAD_NO 0x00U /*!< No NAD shall be used */ + +#define RFAL_NFCDEP_OPER_RTOX_REQ_DIS 0x01U /*!< Operation config: RTOX REQ disable */ +#define RFAL_NFCDEP_OPER_RTOX_REQ_EN 0x00U /*!< Operation config: RTOX REQ enable */ + +#define RFAL_NFCDEP_OPER_ATN_DIS 0x00U /*!< Operation config: ATN disable */ +#define RFAL_NFCDEP_OPER_ATN_EN 0x02U /*!< Operation config: ATN enable */ + +#define RFAL_NFCDEP_OPER_EMPTY_DEP_DIS 0x04U /*!< Operation config: empty DEPs disable */ +#define RFAL_NFCDEP_OPER_EMPTY_DEP_EN 0x00U /*!< Operation config: empty DEPs enable */ + +#define RFAL_NFCDEP_OPER_FULL_MI_DIS 0x00U /*!< Operation config: full chaining DEPs disable */ +#define RFAL_NFCDEP_OPER_FULL_MI_EN 0x08U /*!< Operation config: full chaining DEPs enable */ + + +#define RFAL_NFCDEP_BRS_MAINTAIN 0xC0U /*!< Value signalling that BR is to be maintained (no PSL) */ +#define RFAL_NFCDEP_BRS_Dx_MASK 0x07U /*!< Value signalling that BR is to be maintained (no PSL) */ +#define RFAL_NFCDEP_BRS_DSI_POS 3U /*!< Value signalling that BR is to be maintained (no PSL) */ + +#define RFAL_NFCDEP_WT_DELTA (16U - RFAL_NFCDEP_WT_DELTA_ADJUST) /*!< NFC-DEP dWRT (adjusted) Digital 2.0 B.10 */ +#define RFAL_NFCDEP_WT_DELTA_ADJUST 4U /*!< dWRT value adjustment */ + + +#define RFAL_NFCDEP_ATR_REQ_NFCID3_POS 2U /*!< NFCID3 offset in ATR_REQ frame */ +#define RFAL_NFCDEP_NFCID3_LEN 10U /*!< NFCID3 Length */ + +#define RFAL_NFCDEP_LEN_MIN 3U /*!< Minimum length byte LEN value */ +#define RFAL_NFCDEP_LEN_MAX 255U /*!< Maximum length byte LEN value */ + +#define RFAL_NFCDEP_ATRRES_HEADER_LEN 2U /*!< ATR RES Header Len: CmdType: 0xD5 + Cod: 0x01 */ +#define RFAL_NFCDEP_ATRRES_MIN_LEN 17U /*!< Minimum length for an ATR RES */ +#define RFAL_NFCDEP_ATRRES_MAX_LEN 64U /*!< Maximum length for an ATR RES Digital 1.0 14.6.1 */ +#define RFAL_NFCDEP_ATRREQ_MIN_LEN 16U /*!< Minimum length for an ATR REQ */ +#define RFAL_NFCDEP_ATRREQ_MAX_LEN RFAL_NFCDEP_ATRRES_MAX_LEN /*!< Maximum length for an ATR REQ Digital 1.0 14.6.1 */ + +#define RFAL_NFCDEP_GB_MAX_LEN (RFAL_NFCDEP_ATRREQ_MAX_LEN - RFAL_NFCDEP_ATRREQ_MIN_LEN) /*!< Maximum length the General Bytes on ATR Digital 1.1 16.6.3 */ + +#define RFAL_NFCDEP_WT_INI_DEFAULT RFAL_NFCDEP_WT_INI_MAX /*!< WT Initiator default value Digital 1.0 14.6.3.8 */ +#define RFAL_NFCDEP_WT_INI_MIN 0U /*!< WT Initiator minimum value Digital 1.0 14.6.3.8 */ +#define RFAL_NFCDEP_WT_INI_MAX 14U /*!< WT Initiator maximum value Digital 1.0 14.6.3.8 A.10 */ +#define RFAL_NFCDEP_RWT_INI_MAX rfalNfcDepWT2RWT( RFAL_NFCDEP_WT_INI_MAX ) /*!< RWT Initiator maximum value */ + +#define RFAL_NFCDEP_WT_TRG_MAX_D10 8U /*!< WT target max Digital 1.0 14.6.3.8 A.10 */ +#define RFAL_NFCDEP_WT_TRG_MAX_D11 14U /*!< WT target max Digital 1.1 16.6.3.9 A.9 */ +#define RFAL_NFCDEP_WT_TRG_MAX RFAL_NFCDEP_WT_TRG_MAX_D11 /*!< WT target max Digital x.x */ +#define RFAL_NFCDEP_RWT_TRG_MAX rfalNfcDepWT2RWT( RFAL_NFCDEP_WT_TRG_MAX ) /*!< RWT Initiator maximum value */ + +/*! Maximum Frame Waiting Time = ((256 * 16/fc)*2^FWImax) = ((256*16/fc)*2^14) = (1048576 / 64)/fc = (100000h*64)/fc */ +#define RFAL_NFCDEP_MAX_FWT ((uint32_t)1U<<20) + +#define RFAL_NFCDEP_WT_MASK 0x0FU /*!< Bit mask for the Wait Time value */ + +#define RFAL_NFCDEP_BR_MASK_106 0x01U /*!< Enable mask bit rate 106 */ +#define RFAL_NFCDEP_BR_MASK_212 0x02U /*!< Enable mask bit rate 242 */ +#define RFAL_NFCDEP_BR_MASK_424 0x04U /*!< Enable mask bit rate 424 */ + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +#define rfalNfcDepWT2RWT( wt ) ( (uint32_t)1U << (((uint32_t)(wt) & RFAL_NFCDEP_WT_MASK) + 12U) ) /*!< Converts WT value to RWT (1/fc) */ + +/*! Returns the BRS value from the given bit rate */ +#define rfalNfcDepDx2BRS( br ) ( (((uint8_t)(br) & RFAL_NFCDEP_BRS_Dx_MASK) << RFAL_NFCDEP_BRS_DSI_POS) | ((uint8_t)(br) & RFAL_NFCDEP_BRS_Dx_MASK) ) + +#define rfalNfcDepBRS2DRI( brs ) (uint8_t)( (uint8_t)(brs) & RFAL_NFCDEP_BRS_Dx_MASK ) /*!< Returns the DRI value from the given BRS byte */ +#define rfalNfcDepBRS2DSI( brs ) (uint8_t)( ((uint8_t)(brs) >> RFAL_NFCDEP_BRS_DSI_POS) & RFAL_NFCDEP_BRS_Dx_MASK ) /*!< Returns the DSI value from the given BRS byte */ + +#define rfalNfcDepPP2LR( PPx ) ( ((uint8_t)(PPx) & RFAL_NFCDEP_PP_LR_MASK ) >> RFAL_NFCDEP_PP_LR_SHIFT) /*!< Returns the LR value from the given PPx byte */ +#define rfalNfcDepLR2PP( LRx ) ( ((uint8_t)(LRx) << RFAL_NFCDEP_PP_LR_SHIFT) & RFAL_NFCDEP_PP_LR_MASK) /*!< Returns the PP byte with the given LRx value */ + +/*! Returns the Frame size value from the given LRx value */ +#define rfalNfcDepLR2FS( LRx ) (uint16_t)(MIN( (RFAL_NFCDEP_FS_VAL_MIN * ((uint16_t)(LRx) + 1U) ), RFAL_NFCDEP_FRAME_SIZE_MAX_LEN )) + +/*! + * Despite DIGITAL 1.0 14.6.2.1 stating that the last two bytes may filled with + * any value, some devices (Samsung Google Nexus) only accept when these are 0 */ +#define rfalNfcDepSetNFCID( dst, src, len ) ST_MEMSET( (dst), 0x00, RFAL_NFCDEP_NFCID3_LEN ); \ + if( (len) > 0U ) {ST_MEMCPY( (dst), (src), (len) );} + +/* + ****************************************************************************** + * GLOBAL ENUMERATIONS + ****************************************************************************** + */ + +/*! Enumeration of NFC-DEP bit rate in ATR Digital 1.0 Table 93 and 94 */ +enum{ + RFAL_NFCDEP_Bx_NO_HIGH_BR = 0x00, /*!< Peer supports no high bit rates */ + RFAL_NFCDEP_Bx_08_848 = 0x01, /*!< Peer also supports 848 */ + RFAL_NFCDEP_Bx_16_1695 = 0x02, /*!< Peer also supports 1695 */ + RFAL_NFCDEP_Bx_32_3390 = 0x04, /*!< Peer also supports 3390 */ + RFAL_NFCDEP_Bx_64_6780 = 0x08 /*!< Peer also supports 6780 */ +}; + +/*! Enumeration of NFC-DEP bit rate Dividor in PSL Digital 1.0 Table 100 */ +enum{ + RFAL_NFCDEP_Dx_01_106 = RFAL_BR_106, /*!< Divisor D = 1 : bit rate = 106 */ + RFAL_NFCDEP_Dx_02_212 = RFAL_BR_212, /*!< Divisor D = 2 : bit rate = 212 */ + RFAL_NFCDEP_Dx_04_424 = RFAL_BR_424, /*!< Divisor D = 4 : bit rate = 424 */ + RFAL_NFCDEP_Dx_08_848 = RFAL_BR_848, /*!< Divisor D = 8 : bit rate = 848 */ + RFAL_NFCDEP_Dx_16_1695 = RFAL_BR_1695, /*!< Divisor D = 16 : bit rate = 1695 */ + RFAL_NFCDEP_Dx_32_3390 = RFAL_BR_3390, /*!< Divisor D = 32 : bit rate = 3390 */ + RFAL_NFCDEP_Dx_64_6780 = RFAL_BR_6780 /*!< Divisor D = 64 : bit rate = 6780 */ +}; + +/*! Enumeration of NFC-DEP Length Reduction (LR) Digital 1.0 Table 91 */ +enum{ + RFAL_NFCDEP_LR_64 = 0x00, /*!< Maximum payload size is 64 bytes */ + RFAL_NFCDEP_LR_128 = 0x01, /*!< Maximum payload size is 128 bytes */ + RFAL_NFCDEP_LR_192 = 0x02, /*!< Maximum payload size is 192 bytes */ + RFAL_NFCDEP_LR_254 = 0x03 /*!< Maximum payload size is 254 bytes */ +}; + +/* + ****************************************************************************** + * GLOBAL DATA TYPES + ****************************************************************************** + */ + +/*! NFC-DEP callback to check if upper layer has deactivation pending */ +typedef bool (* rfalNfcDepDeactCallback)(void); + + +/*! Enumeration of the nfcip communication modes */ +typedef enum{ + RFAL_NFCDEP_COMM_PASSIVE, /*!< Passive communication mode */ + RFAL_NFCDEP_COMM_ACTIVE /*!< Active communication mode */ +} rfalNfcDepCommMode; + + +/*! Enumeration of the nfcip roles */ +typedef enum{ + RFAL_NFCDEP_ROLE_INITIATOR, /*!< Perform as Initiator */ + RFAL_NFCDEP_ROLE_TARGET /*!< Perform as Target */ +} rfalNfcDepRole; + + +/*! Struct that holds all NFCIP configs */ +typedef struct{ + + rfalNfcDepRole role; /*!< Current NFCIP role */ + rfalNfcDepCommMode commMode; /*!< Current NFCIP communication mode */ + uint8_t oper; /*!< Operation config similar to NCI 1.0 Table 81 */ + + uint8_t did; /*!< Current Device ID (DID) */ + uint8_t nad; /*!< Current Node Addressing (NAD) */ + uint8_t bs; /*!< Bit rate in Sending Direction */ + uint8_t br; /*!< Bit rate in Receiving Direction */ + uint8_t nfcid[RFAL_NFCDEP_NFCID3_LEN]; /*!< Pointer to the NFCID to be used */ + uint8_t nfcidLen; /*!< Length of the given NFCID in nfcid */ + uint8_t gb[RFAL_NFCDEP_GB_MAX_LEN]; /*!< Pointer General Bytes (GB) to be used */ + uint8_t gbLen; /*!< Length of the given GB in gb */ + uint8_t lr; /*!< Length Reduction (LR) to be used */ + uint8_t to; /*!< Timeout (TO) to be used */ + uint32_t fwt; /*!< Frame Waiting Time (FWT) to be used */ + uint32_t dFwt; /*!< Delta Frame Waiting Time (dFWT) to be used */ +} rfalNfcDepConfigs; + + +/*! ATR_REQ command Digital 1.1 16.6.2 */ +typedef struct { + uint8_t CMD1; /*!< Command format 0xD4 */ + uint8_t CMD2; /*!< Command Value */ + uint8_t NFCID3[RFAL_NFCDEP_NFCID3_LEN]; /*!< NFCID3 value */ + uint8_t DID; /*!< DID */ + uint8_t BSi; /*!< Sending Bitrate for Initiator */ + uint8_t BRi; /*!< Receiving Bitrate for Initiator */ + uint8_t PPi; /*!< Optional Parameters presence indicator */ + uint8_t GBi[RFAL_NFCDEP_GB_MAX_LEN]; /*!< General Bytes */ +} rfalNfcDepAtrReq; + + +/*! ATR_RES response Digital 1.1 16.6.3 */ +typedef struct { + uint8_t CMD1; /*!< Response Byte 0xD5 */ + uint8_t CMD2; /*!< Command Value */ + uint8_t NFCID3[RFAL_NFCDEP_NFCID3_LEN]; /*!< NFCID3 value */ + uint8_t DID; /*!< DID */ + uint8_t BSt; /*!< Sending Bitrate for Initiator */ + uint8_t BRt; /*!< Receiving Bitrate for Initiator */ + uint8_t TO; /*!< Timeout */ + uint8_t PPt; /*!< Optional Parameters presence indicator */ + uint8_t GBt[RFAL_NFCDEP_GB_MAX_LEN]; /*!< General Bytes */ +} rfalNfcDepAtrRes; + + +/*! Structure of transmit I-PDU Buffer format from caller */ +typedef struct +{ + uint8_t prologue[RFAL_NFCDEP_DEPREQ_HEADER_LEN]; /*!< Prologue space for NFC-DEP header*/ + uint8_t inf[RFAL_NFCDEP_FRAME_SIZE_MAX_LEN]; /*!< INF | Data area of the buffer */ +} rfalNfcDepBufFormat; + + +/*! Activation info as Initiator and Target */ +typedef union { /* PRQA S 0750 # MISRA 19.2 - Both members of the union will not be used concurrently , device is only initiatior or target a time. No problem can occur. */ + struct { + rfalNfcDepAtrRes ATR_RES; /*!< ATR RES (Initiator mode) */ + uint8_t ATR_RESLen; /*!< ATR RES length (Initiator mode) */ + }Target; /*!< Target */ + struct { + rfalNfcDepAtrReq ATR_REQ; /*!< ATR REQ (Target mode) */ + uint8_t ATR_REQLen; /*!< ATR REQ length (Target mode) */ + }Initiator; /*!< Initiator */ +} rfalNfcDepActivation; + + +/*! NFC-DEP device Info */ +typedef struct { + uint8_t GBLen; /*!< General Bytes length */ + uint8_t WT; /*!< WT to be used (ignored in Listen Mode) */ + uint32_t FWT; /*!< FWT to be used (1/fc)(ignored Listen Mode) */ + uint32_t dFWT; /*!< Delta FWT to be used (1/fc) */ + uint8_t LR; /*!< Length Reduction coding the max payload */ + uint16_t FS; /*!< Frame Size */ + rfalBitRate DSI; /*!< Bit Rate coding from Initiator to Target */ + rfalBitRate DRI; /*!< Bit Rate coding from Target to Initiator */ + uint8_t DID; /*!< Device ID (RFAL_NFCDEP_DID_NO if no DID) */ + uint8_t NAD; /*!< Node ADdress (RFAL_NFCDEP_NAD_NO if no NAD)*/ +} rfalNfcDepInfo; + + +/*! NFC-DEP Device structure */ +typedef struct { + rfalNfcDepActivation activation; /*!< Activation Info */ + rfalNfcDepInfo info; /*!< NFC-DEP device Info */ +} rfalNfcDepDevice; + + +/*! NFCIP Protocol structure for P2P Target + * + * operParam : derives from NFC-Forum NCI NFC-DEP Operation Parameter + * NCI 1.1 Table 86: NFC-DEP Operation Parameter + * and it's a bit mask composed as: + * [ 0000b + * | Chain SHALL use max. Transport Data Byte[1b] + * | I-PDU with no Transport Data SHALL NOT be sent [1b] + * | NFC-DEP Target SHALL NOT send RTOX request [1b] + * ] + * + */ +typedef struct{ + rfalNfcDepCommMode commMode; /*!< Initiator in Active P2P or Passive P2P*/ + uint8_t operParam; /*!< NFC-DEP Operation Parameter */ + uint8_t* nfcid; /*!< Initiator's NFCID2 or NFCID3 */ + uint8_t nfcidLen; /*!< Initiator's NFCID length (NFCID2/3) */ + uint8_t DID; /*!< Initiator's Device ID DID */ + uint8_t NAD; /*!< Initiator's Node ID NAD */ + uint8_t BS; /*!< Initiator's Bit Rates supported in Tx */ + uint8_t BR; /*!< Initiator's Bit Rates supported in Rx */ + uint8_t LR; /*!< Initiator's Length reduction */ + uint8_t* GB; /*!< Initiator's General Bytes (Gi) */ + uint8_t GBLen; /*!< Initiator's General Bytes length */ +} rfalNfcDepAtrParam; + + +/*! Structure of parameters to be passed in for nfcDepListenStartActivation */ +typedef struct +{ + rfalNfcDepBufFormat *rxBuf; /*!< Receive Buffer struct reference */ + uint16_t *rxLen; /*!< Receive INF data length in bytes */ + bool *isRxChaining; /*!< Received data is not complete */ + rfalNfcDepDevice *nfcDepDev; /*!< NFC-DEP device info */ +} rfalNfcDepListenActvParam; + + +/*! NFCIP Protocol structure for P2P Target + * + * operParam : derives from NFC-Forum NCI NFC-DEP Operation Parameter + * NCI 1.1 Table 86: NFC-DEP Operation Parameter + * and it's a bit mask composed as: + * [ 0000b + * | Chain SHALL use max. Transport Data Byte[1b] + * | I-PDU with no Transport Data SHALL NOT be sent [1b] + * | NFC-DEP Target SHALL NOT send RTOX request [1b] + * ] + * + */ +typedef struct{ + rfalNfcDepCommMode commMode; /*!< Target in Active P2P or Passive P2P */ + uint8_t nfcid3[RFAL_NFCDEP_NFCID3_LEN]; /*!< Target's NFCID3 */ + uint8_t bst; /*!< Target's Bit Rates supported in Tx */ + uint8_t brt; /*!< Target's Bit Rates supported in Rx */ + uint8_t to; /*!< Target's timeout (TO) value */ + uint8_t ppt; /*!< Target's Presence optional Params(PPt)*/ + uint8_t GBt[RFAL_NFCDEP_GB_MAX_LEN]; /*!< Target's General Bytes (Gt) */ + uint8_t GBtLen; /*!< Target's General Bytes length */ + uint8_t operParam; /*!< NFC-DEP Operation Parameter */ +} rfalNfcDepTargetParam; + + +/*! Structure of parameters to be passed in for nfcDepStartIpduTransceive */ +typedef struct +{ + rfalNfcDepBufFormat *txBuf; /*!< Transmit Buffer struct reference */ + uint16_t txBufLen; /*!< Transmit Buffer INF field length in bytes */ + bool isTxChaining; /*!< Transmit data is not complete */ + rfalNfcDepBufFormat *rxBuf; /*!< Receive Buffer struct reference */ + uint16_t *rxLen; /*!< Receive INF data length */ + bool *isRxChaining; /*!< Received data is not complete */ + uint32_t FWT; /*!< FWT to be used (ignored in Listen Mode) */ + uint32_t dFWT; /*!< Delta FWT to be used */ + uint16_t FSx; /*!< Other device Frame Size (FSD or FSC) */ + uint8_t DID; /*!< Device ID (RFAL_ISODEP_NO_DID if no DID) */ +} rfalNfcDepTxRxParam; + + +/* + * ***************************************************************************** + * GLOBAL VARIABLE DECLARATIONS + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + +/*! + ****************************************************************************** + * \brief NFCIP Initialize + * + * This method resets all NFC-DEP inner states, counters and context and sets + * default values + * + ****************************************************************************** + */ +void rfalNfcDepInitialize( void ); + + +/*! + ****************************************************************************** + * \brief Set deactivating callback + * + * Sets the deactivating callback so that nfcip layer can check if upper layer + * has a deactivation pending, and not perform error recovery upon specific + * errors + * + * \param[in] pFunc : method pointer to deactivation flag check + ****************************************************************************** + */ +void rfalNfcDepSetDeactivatingCallback( rfalNfcDepDeactCallback pFunc ); + + +/*! + ****************************************************************************** + * \brief Calculate Response Waiting Time + * + * Calculates the Response Waiting Time (RWT) from the given Waiting Time (WT) + * + * \param[in] wt : the WT value to calculate RWT + * + * \return RWT value in 1/fc + ****************************************************************************** + */ +uint32_t rfalNfcDepCalculateRWT( uint8_t wt ); + + +/*! + ****************************************************************************** + * \brief NFC-DEP Initiator ATR (Attribute Request) + * + * This method configures the NFC-DEP layer with given parameters and then + * sends an ATR to the Target with and checks for a valid response response + * + * \param[in] param : parameters to initialize and compose the ATR + * \param[out] atrRes : location to store the ATR_RES + * \param[out] atrResLen : length of the ATR_RES received + * + * \return ERR_NONE : No error + * \return ERR_TIMEOUT : Timeout occurred + * \return ERR_PROTO : Protocol error occurred + ****************************************************************************** + */ +ReturnCode rfalNfcDepATR( const rfalNfcDepAtrParam* param, rfalNfcDepAtrRes *atrRes, uint8_t* atrResLen ); + + +/*! + ****************************************************************************** + * \brief NFC-DEP Initiator PSL (Parameter Selection) + * + * This method sends a PSL to the Target with the given parameters and checks + * for a valid response response + * + * The parameters must be coded according to Digital 1.1 16.7.1 + * + * \param[in] BRS : the selected Bit Rates for Initiator and Target + * \param[in] FSL : the maximum length of Commands and Responses + * + * \return ERR_NONE : No error + * \return ERR_TIMEOUT : Timeout occurred + * \return ERR_PROTO : Protocol error occurred + ****************************************************************************** + */ +ReturnCode rfalNfcDepPSL( uint8_t BRS, uint8_t FSL ); + + +/*! + ****************************************************************************** + * \brief NFC-DEP Initiator DSL (Deselect) + * + * This method checks if the NFCIP module is configured as initiator and if + * so sends a DSL REQ, waits the target's response and checks it + * + * In case of performing as target no action is taken + * + * \return ERR_NONE : No error + * \return ERR_TIMEOUT : Timeout occurred + * \return ERR_MAX_RERUNS : Timeout occurred + * \return ERR_PROTO : Protocol error occurred + ****************************************************************************** + */ +ReturnCode rfalNfcDepDSL( void ); + + +/*! + ****************************************************************************** + * \brief NFC-DEP Initiator RLS (Release) + * + * This method checks if the NFCIP module is configured as initiator and if + * so sends a RLS REQ, waits target's response and checks it + * + * In case of performing as target no action is taken + * + * \return ERR_NONE : No error + * \return ERR_TIMEOUT : Timeout occurred + * \return ERR_MAX_RERUNS : Timeout occurred + * \return ERR_PROTO : Protocol error occurred + ****************************************************************************** + */ +ReturnCode rfalNfcDepRLS( void ); + + +/*! + ***************************************************************************** + * \brief NFC-DEP Initiator Handle Activation + * + * This performs a Activation into NFC-DEP layer with the given + * parameters. It sends ATR_REQ and if the higher bit rates are supported by + * both devices it additionally sends PSL + * Once Activated all details of the device are provided on nfcDepDev + * + * \param[in] param : required parameters to initialize and send ATR_REQ + * \param[in] desiredBR : Desired bit rate supported by the Poller + * \param[out] nfcDepDev : NFC-DEP information of the activated Listen device + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error + * \return ERR_PAR : Parity error detected + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error, activation successful + ***************************************************************************** + */ +ReturnCode rfalNfcDepInitiatorHandleActivation( rfalNfcDepAtrParam* param, rfalBitRate desiredBR, rfalNfcDepDevice* nfcDepDev ); + + +/*! + ****************************************************************************** + * \brief Check if buffer contains valid ATR_REQ + * + * This method checks if the given ATR_REQ is valid + * + * + * \param[in] buf : buffer holding Initiator's received request + * \param[in] bufLen : size of the msg contained on the buf in Bytes + * \param[out] nfcid3 : pointer to where the NFCID3 may be outputed, + * nfcid3 has NFCF_SENSF_NFCID3_LEN as length + * Pass NULL if output parameter not desired + * + * \return true : Valid ATR_REQ received, the ATR_RES has been computed in txBuf + * \return false : Invalid protocol request + * + ****************************************************************************** + */ +bool rfalNfcDepIsAtrReq( const uint8_t* buf, uint16_t bufLen, uint8_t* nfcid3 ); + + +/*! + ****************************************************************************** + * \brief Check is Target has received ATR + * + * This method checks if the NFCIP module is configured as target and if a + * ATR REQ has been received ( whether is in activation or in data exchange) + * + * \return true : a ATR has already been received + * \return false : no ATR has been received + ****************************************************************************** + */ +bool rfalNfcDepTargetRcvdATR( void ); + +/*! + ***************************************************************************** + * \brief NFCDEP Start Listen Activation Handling + * + * Start Activation Handling and setup to receive first frame which may + * contain complete or partial DEP-REQ after activation is completed + * + * Pass in ATR_REQ for NFC-DEP to handle ATR_RES. The Activation Handling + * handles ATR_RES and PSL_RES if a PSL_REQ is received + * + * Activation is completed if PSL_RES is sent or if first I-PDU is received + * + * \ref rfalNfcDepListenGetActivationStatus() provide status of the + * ongoing activation + * + * \warning nfcDepGetTransceiveStatus() shall be called right after activation + * is completed (i.e. rfalNfcDepListenGetActivationStatus() return ERR_NONE) + * to check for first received frame. + * + * \param[in] param : Target parameters to be used + * \param[in] atrReq : reference to buffer containing ATR_REQ + * \param[in] atrReqLength: Length of ATR_REQ + * \param[out] rxParam : references to buffer, length and chaining indication + * for first complete LLCP to be received + * + * \return ERR_NONE : ATR_REQ is valid and activation ongoing + * \return ERR_PARAM : ATR_REQ or other params are invalid + * \return ERR_LINK_LOSS : Remote Field is turned off + ***************************************************************************** + */ +ReturnCode rfalNfcDepListenStartActivation( const rfalNfcDepTargetParam *param, const uint8_t *atrReq, uint16_t atrReqLength, rfalNfcDepListenActvParam rxParam ); + + +/*! + ***************************************************************************** + * \brief Get the current NFC-DEP Activation Status + * + * \return ERR_NONE : Activation has completed successfully + * \return ERR_BUSY : Activation is ongoing + * \return ERR_LINK_LOSS : Remote Field was turned off + ***************************************************************************** + */ +ReturnCode rfalNfcDepListenGetActivationStatus( void ); + +/*! + ***************************************************************************** + * \brief Start Transceive + * + * Transceives a complete or partial DEP block + * + * The txBuf contains complete or partial of DEP to be transmitted. + * The Prologue field of the I-PDU is handled internally + * + * If the buffer contains partial LLCP and is not the last block, then + * isTxChaining must be set to true + * + * \param[in] param: reference parameters to be used for the Transceive + * + * \return ERR_PARAM : Bad request + * \return ERR_WRONG_STATE : The module is not in a proper state + * \return ERR_NONE : The Transceive request has been started + ***************************************************************************** + */ +ReturnCode rfalNfcDepStartTransceive( rfalNfcDepTxRxParam *param ); + + +/*! + ***************************************************************************** + * \brief Return the Transceive status + * + * Returns the status of the NFC-DEP Transceive + * + * \warning When the other device is performing chaining once a chained + * block is received the error ERR_AGAIN is sent. At this point + * caller must handle the received data immediately. + * When ERR_AGAIN is returned an ACK has already been sent to + * the other device and the next block might be incoming. + * If rfalWorker() is called frequently it will place the next + * block on the given buffer + * + * \return ERR_NONE : Transceive has been completed successfully + * \return ERR_BUSY : Transceive is ongoing + * \return ERR_PROTO : Protocol error occurred + * \return ERR_TIMEOUT : Timeout error occurred + * \return ERR_SLEEP_REQ : Deselect has been received and responded + * \return ERR_NOMEM : The received I-PDU does not fit into the + * receive buffer + * \return ERR_LINK_LOSS : Communication is lost because Reader/Writer + * has turned off its field + * \return ERR_AGAIN : received one chaining block, continue to call + * this method to retrieve the remaining blocks + ***************************************************************************** + */ +ReturnCode rfalNfcDepGetTransceiveStatus( void ); + + +#endif /* RFAL_NFCDEP_H_ */ + +/** + * @} + * + * @} + * + * @} + */ diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_nfca.h b/Software/Middlewares/ST/rfal/Inc/rfal_nfca.h new file mode 100644 index 0000000..d834fce --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_nfca.h @@ -0,0 +1,391 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_nfca.h + * + * \author Gustavo Patricio + * + * \brief Provides several NFC-A convenience methods and definitions + * + * It provides a Poller (ISO14443A PCD) interface and as well as + * some NFC-A Listener (ISO14443A PICC) helpers. + * + * The definitions and helpers methods provided by this module are only + * up to ISO14443-3 layer + * + * + * An usage example is provided here: \ref exampleRfalNfca.c + * \example exampleRfalNfca.c + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-AL + * \brief RFAL Abstraction Layer + * @{ + * + * \addtogroup NFC-A + * \brief RFAL NFC-A Module + * @{ + * + */ + + +#ifndef RFAL_NFCA_H +#define RFAL_NFCA_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_rf.h" +#include "rfal_t1t.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define RFAL_NFCA_CASCADE_1_UID_LEN 4U /*!< UID length of cascade level 1 only tag */ +#define RFAL_NFCA_CASCADE_2_UID_LEN 7U /*!< UID length of cascade level 2 only tag */ +#define RFAL_NFCA_CASCADE_3_UID_LEN 10U /*!< UID length of cascade level 3 only tag */ + +#define RFAL_NFCA_SENS_RES_PLATFORM_MASK 0x0FU /*!< SENS_RES (ATQA) platform configuration mask Digital 1.1 Table 10 */ +#define RFAL_NFCA_SENS_RES_PLATFORM_T1T 0x0CU /*!< SENS_RES (ATQA) T1T platform configuration Digital 1.1 Table 10 */ + +#define RFAL_NFCA_SEL_RES_CONF_MASK 0x60U /*!< SEL_RES (SAK) platform configuration mask Digital 1.1 Table 19 */ +#define RFAL_NFCA_SEL_RES_CONF_T2T 0x00U /*!< SEL_RES (SAK) T2T configuration Digital 1.1 Table 19 */ +#define RFAL_NFCA_SEL_RES_CONF_T4T 0x20U /*!< SEL_RES (SAK) T4T configuration Digital 1.1 Table 19 */ +#define RFAL_NFCA_SEL_RES_CONF_NFCDEP 0x40U /*!< SEL_RES (SAK) NFC-DEP configuration Digital 1.1 Table 19 */ +#define RFAL_NFCA_SEL_RES_CONF_T4T_NFCDEP 0x60U /*!< SEL_RES (SAK) T4T and NFC-DEP configuration Digital 1.1 Table 19 */ + + +/*! NFC-A minimum FDT(listen) = ((n * 128 + (84)) / fc) with n_min = 9 Digital 1.1 6.10.1 + * = (1236)/fc + * Relax with 3etu: (3*128)/fc as with multiple NFC-A cards, response may take longer (JCOP cards) + * = (1236 + 384)/fc = 1620 / fc */ +#define RFAL_NFCA_FDTMIN 1620U +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +/*! Checks if device is a T1T given its SENS_RES */ +#define rfalNfcaIsSensResT1T( sensRes ) ((((rfalNfcaSensRes*)(sensRes))->platformInfo & RFAL_NFCA_SENS_RES_PLATFORM_MASK) == RFAL_NFCA_SENS_RES_PLATFORM_T1T ) + +/*! Checks if device is a T2T given its SENS_RES */ +#define rfalNfcaIsSelResT2T( selRes ) ((((rfalNfcaSelRes*)(selRes))->sak & RFAL_NFCA_SEL_RES_CONF_MASK) == RFAL_NFCA_SEL_RES_CONF_T2T ) + +/*! Checks if device is a T4T given its SENS_RES */ +#define rfalNfcaIsSelResT4T( selRes ) ((((rfalNfcaSelRes*)(selRes))->sak & RFAL_NFCA_SEL_RES_CONF_MASK) == RFAL_NFCA_SEL_RES_CONF_T4T ) + +/*! Checks if device supports NFC-DEP protocol given its SENS_RES */ +#define rfalNfcaIsSelResNFCDEP( selRes ) ((((rfalNfcaSelRes*)(selRes))->sak & RFAL_NFCA_SEL_RES_CONF_MASK) == RFAL_NFCA_SEL_RES_CONF_NFCDEP ) + +/*! Checks if device supports ISO-DEP and NFC-DEP protocol given its SENS_RES */ +#define rfalNfcaIsSelResT4TNFCDEP( selRes ) ((((rfalNfcaSelRes*)(selRes))->sak & RFAL_NFCA_SEL_RES_CONF_MASK) == RFAL_NFCA_SEL_RES_CONF_T4T_NFCDEP ) + +/*! Checks if a NFC-A listener device supports multiple protocols (ISO-DEP and NFC-DEP) */ +#define rfalNfcaLisDevIsMultiProto( lisDev ) (((rfalNfcaListenDevice*)(lisDev))->type == RFAL_NFCA_T4T_NFCDEP ) + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + +/*! NFC-A Listen device types */ +typedef enum { + RFAL_NFCA_T1T = 0x01, /* Device configured for T1T Digital 1.1 Table 9 */ + RFAL_NFCA_T2T = 0x00, /* Device configured for T2T Digital 1.1 Table 19 */ + RFAL_NFCA_T4T = 0x20, /* Device configured for T4T Digital 1.1 Table 19 */ + RFAL_NFCA_NFCDEP = 0x40, /* Device configured for NFC-DEP Digital 1.1 Table 19 */ + RFAL_NFCA_T4T_NFCDEP = 0x60 /* Device configured for NFC-DEP and T4T Digital 1.1 Table 19 */ +} rfalNfcaListenDeviceType; + + +/*! SENS_RES (ATQA) format Digital 1.1 6.6.3 & Table 7 */ +typedef struct +{ + uint8_t anticollisionInfo; /*!< SENS_RES Anticollision Information */ + uint8_t platformInfo; /*!< SENS_RES Platform Information */ +} rfalNfcaSensRes; + + +/*! SDD_REQ (Anticollision) format Digital 1.1 6.7.1 & Table 11 */ +typedef struct +{ + uint8_t selCmd; /*!< SDD_REQ SEL_CMD: cascade Level */ + uint8_t selPar; /*!< SDD_REQ SEL_PAR: Byte Count[4b] | Bit Count[4b] (NVB: Number of Valid Bits)*/ +} rfalNfcaSddReq; + + +/*! SDD_RES (UID CLn) format Digital 1.1 6.7.2 & Table 15 */ +typedef struct +{ + uint8_t nfcid1[RFAL_NFCA_CASCADE_1_UID_LEN]; /*!< NFCID1 cascade level NFCID */ + uint8_t bcc; /*!< BCC Exclusive-OR over first 4 bytes of SDD_RES */ +} rfalNfcaSddRes; + + +/*! SEL_REQ (Select) format Digital 1.1 6.8.1 & Table 17 */ +typedef struct +{ + uint8_t selCmd; /*!< SDD_REQ SEL_CMD: cascade Level */ + uint8_t selPar; /*!< SDD_REQ SEL_PAR: Byte Count[4b] | Bit Count[4b] (NVB: Number of Valid Bits)*/ + uint8_t nfcid1[RFAL_NFCA_CASCADE_1_UID_LEN]; /*!< NFCID1 data */ + uint8_t bcc; /*!< Checksum calculated as exclusive-OR over the 4 bytes of NFCID1 CLn */ +} rfalNfcaSelReq; + + +/*! SEL_RES (SAK) format Digital 1.1 6.8.2 & Table 19 */ +typedef struct +{ + uint8_t sak; /*!< Select Acknowledge */ +} rfalNfcaSelRes; + + +/*! NFC-A listener device (PICC) struct */ +typedef struct +{ + rfalNfcaListenDeviceType type; /*!< NFC-A Listen device type */ + rfalNfcaSensRes sensRes; /*!< SENS_RES (ATQA) */ + rfalNfcaSelRes selRes; /*!< SEL_RES (SAK) */ + uint8_t nfcId1Len; /*!< NFCID1 Length */ + uint8_t nfcId1[RFAL_NFCA_CASCADE_3_UID_LEN]; /*!< NFCID1 (UID) */ +#ifdef RFAL_FEATURE_T1T + rfalT1TRidRes ridRes; /*!< RID_RES */ +#endif /* RFAL_FEATURE_T1T */ + bool isSleep; /*!< Device sleeping flag */ +} rfalNfcaListenDevice; + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +/*! + ***************************************************************************** + * \brief Initialize NFC-A Poller mode + * + * This methods configures RFAL RF layer to perform as a + * NFC-A Poller/RW (ISO14443A PCD) including all default timings and bit rate + * to 106 kbps + + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcaPollerInitialize( void ); + + +/*! + ***************************************************************************** + * \brief NFC-A Poller Check Presence + * + * This method checks if a NFC-A Listen device (PICC) is present on the field + * by sending an ALL_REQ (WUPA) or SENS_REQ (REQA) + * + * \param[in] cmd : Indicate if to send an ALL_REQ or a SENS_REQ + * \param[out] sensRes : If received, the SENS_RES + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_RF_COLLISION : Collision detected one or more device in the field + * \return ERR_PAR : Parity error detected, one or more device in the field + * \return ERR_CRC : CRC error detected, one or more device in the field + * \return ERR_FRAMING : Framing error detected, one or more device in the field + * \return ERR_PROTO : Protocol error detected, one or more device in the field + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_NONE : No error, one or more device in the field + ***************************************************************************** + */ +ReturnCode rfalNfcaPollerCheckPresence( rfal14443AShortFrameCmd cmd, rfalNfcaSensRes *sensRes ); + + +/*! + ***************************************************************************** + * \brief NFC-A Poller Select + * + * This method selects a NFC-A Listener device (PICC) + * + * \param[in] nfcid1 : Listener device NFCID1 to be selected + * \param[in] nfcidLen : Length of the NFCID1 to be selected + * \param[out] selRes : pointer to place the SEL_RES + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error + * \return ERR_PAR : Parity error detected + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error, SEL_RES received + ***************************************************************************** + */ +ReturnCode rfalNfcaPollerSelect( const uint8_t *nfcid1, uint8_t nfcidLen, rfalNfcaSelRes *selRes ); + + +/*! + ***************************************************************************** + * \brief NFC-A Poller Sleep + * + * This method sends a SLP_REQ (HLTA) + * No response is expected afterwards Digital 1.1 6.9.2.1 + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcaPollerSleep( void ); + + +/*! + ***************************************************************************** + * \brief NFC-A Technology Detection + * + * This method performs NFC-A Technology Detection as defined in the spec + * given in the compliance mode + * + * \param[in] compMode : compliance mode to be performed + * \param[out] sensRes : location to store the SENS_RES, if received + * + * When compMode is set to ISO compliance a SLP_REQ (HLTA) is not sent + * after detection. When set to EMV a ALL_REQ (WUPA) is sent instead of + * a SENS_REQ (REQA) + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_NONE : No error, one or more device in the field + ***************************************************************************** + */ +ReturnCode rfalNfcaPollerTechnologyDetection( rfalComplianceMode compMode, rfalNfcaSensRes *sensRes ); + + +/*! + ***************************************************************************** + * \brief NFC-A Poller Collision Resolution + * + * Collision resolution for one NFC-A Listener device/card (PICC) as + * defined in Activity 1.1 9.3.4 + * + * This method executes anti collision loop and select the device with higher NFCID1 + * + * When devLimit = 0 it is configured to perform collision detection only. Once a collision + * is detected the collision resolution is aborted immidiatly. If only one device is found + * with no collisions, it will properly resolved. + * + * \param[in] devLimit : device limit value (CON_DEVICES_LIMIT) + * \param[out] collPending : pointer to collision pending flag (INT_COLL_PEND) + * \param[out] selRes : location to store the last Select Response from listener device (PICC) + * \param[out] nfcId1 : location to store the NFCID1 (UID), ensure RFAL_NFCA_CASCADE_3_UID_LEN + * \param[out] nfcId1Len : pointer to length of NFCID1 (UID) + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_PROTO : Card length invalid + * \return ERR_IGNORE : conDevLimit is 0 and there is a collision + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcaPollerSingleCollisionResolution( uint8_t devLimit, bool *collPending, rfalNfcaSelRes *selRes, uint8_t *nfcId1, uint8_t *nfcId1Len ); + + +/*! + ***************************************************************************** + * \brief NFC-A Poller Full Collision Resolution + * + * Performs a full Collision resolution as defined in Activity 1.0 or 1.1 9.3.4 + * + * \param[in] compMode : compliance mode to be performed + * \param[in] devLimit : device limit value, and size nfcaDevList + * \param[out] nfcaDevList : NFC-A listener device info + * \param[out] devCnt : Devices found counter + * + * When compMode is set to ISO compliance it assumes that the device is + * not sleeping and therefore no ALL_REQ (WUPA) is sent at the beginning. + * + * When compMode is set to NFC compliance an additional ALL_REQ (WUPA) is sent at + * the beginning and a proprietary behaviour also takes place. Once a device has been + * resolved an additional SLP_REQ (HLTA) is sent regardless if there was a collision + * (except if the number of devices found already equals the limit). + * This proprietary behaviour ensures proper activation of certain devices that suffer + * from influence of Type B commands as foreseen in ISO14443-3 5.2.3 + * + * + * When devLimit = 0 it is configured to perform collision detection only. Once a collision + * is detected the collision resolution is aborted immidiatly. If only one device is found + * with no collisions, it will properly resolved. + * + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcaPollerFullCollisionResolution( rfalComplianceMode compMode, uint8_t devLimit, rfalNfcaListenDevice *nfcaDevList, uint8_t *devCnt ); + + +/*! + ***************************************************************************** + * \brief NFC-A Listener is SLP_REQ + * + * Checks if the given buffer contains valid NFC-A SLP_REQ (HALT) + * + * \param[in] buf: buffer containing data + * \param[in] bufLen: length of the data in buffer to be checked + * + * \return true if data in buf contains a SLP_REQ ; false otherwise + ***************************************************************************** + */ +bool rfalNfcaListenerIsSleepReq( const uint8_t *buf, uint16_t bufLen ); + +#endif /* RFAL_NFCA_H */ + +/** + * @} + * + * @} + * + * @} + */ diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_nfcb.h b/Software/Middlewares/ST/rfal/Inc/rfal_nfcb.h new file mode 100644 index 0000000..ea4cab0 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_nfcb.h @@ -0,0 +1,398 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_nfcb.h + * + * \author Gustavo Patricio + * + * \brief Implementation of NFC-B (ISO14443B) helpers + * + * It provides a NFC-B Poller (ISO14443B PCD) interface and + * also provides some NFC-B Listener (ISO14443B PICC) helpers + * + * The definitions and helpers methods provided by this module are only + * up to ISO14443-3 layer (excluding ATTRIB) + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-AL + * \brief RFAL Abstraction Layer + * @{ + * + * \addtogroup NFC-B + * \brief RFAL NFC-B Module + * @{ + * + */ + + +#ifndef RFAL_NFCB_H +#define RFAL_NFCB_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_rf.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define RFAL_NFCB_FWTSENSB 7680U /*!< NFC-B FWT(SENSB) Digital 2.0 B.3 */ +#define RFAL_NFCB_DFWT 49152U /*!< NFC-B dFWT Delta 2.0 7.9.1.3 & B.3 */ +#define RFAL_NFCB_DTPOLL_10 rfalConvMsTo1fc(20) /*!< NFC-B Delta Tb Poll Digital 1.0 A.2 */ +#define RFAL_NFCB_DTPOLL_20 rfalConvMsTo1fc(17) /*!< NFC-B Delta Tb Poll Digital 2.1 B.3 */ + +#define RFAL_NFCB_AFI 0x00U /*!< NFC-B default Application Family Digital 1.1 7.6.1.1 */ +#define RFAL_NFCB_PARAM 0x00U /*!< NFC-B default SENSB_REQ PARAM */ +#define RFAL_NFCB_CRC_LEN 2U /*!< NFC-B CRC length and CRC_B(AID) Digital 1.1 Table 28 */ +#define RFAL_NFCB_NFCID0_LEN 4U /*!< Length of NFC-B NFCID0 */ +#define RFAL_NFCB_CMD_LEN 1U /*!< Length of NFC-B Command */ + +#define RFAL_NFCB_SENSB_RES_LEN 12U /*!< Standard length of SENSB_RES without SFGI byte */ +#define RFAL_NFCB_SENSB_RES_EXT_LEN 13U /*!< Extended length of SENSB_RES with SFGI byte */ + +#define RFAL_NFCB_SENSB_REQ_ADV_FEATURE 0x20U /*!< Bit mask for Advance Feature in SENSB_REQ */ +#define RFAL_NFCB_SENSB_RES_FSCI_MASK 0x0FU /*!< Bit mask for FSCI value in SENSB_RES */ +#define RFAL_NFCB_SENSB_RES_FSCI_SHIFT 4U /*!< Shift for FSCI value in SENSB_RES */ +#define RFAL_NFCB_SENSB_RES_PROTO_RFU_MASK 0x08U /*!< Bit mask for Protocol Type RFU in SENSB_RES */ +#define RFAL_NFCB_SENSB_RES_PROTO_TR2_MASK 0x03U /*!< Bit mask for Protocol Type TR2 in SENSB_RES */ +#define RFAL_NFCB_SENSB_RES_PROTO_TR2_SHIFT 1U /*!< Shift for Protocol Type TR2 in SENSB_RES */ +#define RFAL_NFCB_SENSB_RES_PROTO_ISO_MASK 0x01U /*!< Bit mask Protocol Type ISO14443 Compliant in SENSB_RES */ +#define RFAL_NFCB_SENSB_RES_FWI_MASK 0x0FU /*!< Bit mask for FWI value in SENSB_RES */ +#define RFAL_NFCB_SENSB_RES_FWI_SHIFT 4U /*!< Bit mask for FWI value in SENSB_RES */ +#define RFAL_NFCB_SENSB_RES_ADC_MASK 0x0CU /*!< Bit mask for ADC value in SENSB_RES */ +#define RFAL_NFCB_SENSB_RES_ADC_ADV_FEATURE_MASK 0x08U /*!< Bit mask for ADC.Advanced Proto Features in SENSB_RES */ +#define RFAL_NFCB_SENSB_RES_ADC_PROPRIETARY_MASK 0x04U /*!< Bit mask for ADC.Proprietary Application in SENSB_RES */ +#define RFAL_NFCB_SENSB_RES_FO_DID_MASK 0x01U /*!< Bit mask for DID in SENSB_RES */ +#define RFAL_NFCB_SENSB_RES_FO_NAD_MASK 0x02U /*!< Bit mask for DID in SENSB_RES */ +#define RFAL_NFCB_SENSB_RES_FO_MASK 0x03U /*!< Bit mask for FO value in SENSB_RES (NAD and DID) */ +#define RFAL_NFCB_SENSB_RES_SFGI_MASK 0x0FU /*!< Bit mask for SFGI in SENSB_RES */ +#define RFAL_NFCB_SENSB_RES_SFGI_SHIFT 4U /*!< Shift for SFGI in SENSB_RES */ + +/* +****************************************************************************** +* GLOBAL MACROS +****************************************************************************** +*/ + +/*! Get device's FSCI given its SENSB_RES Digital 1.1 7.6.2 */ +#define rfalNfcbGetFSCI( sensbRes ) ((((rfalNfcbSensbRes*)(sensbRes))->protInfo.FsciProType >> RFAL_NFCB_SENSB_RES_FSCI_SHIFT) & RFAL_NFCB_SENSB_RES_FSCI_MASK ) + +/*! Checks if the given NFC-B device indicates ISO-DEP support */ +#define rfalNfcbIsIsoDepSupported( dev ) ( (((rfalNfcbListenDevice*)(dev))->sensbRes.protInfo.FsciProType & RFAL_NFCB_SENSB_RES_PROTO_ISO_MASK) != 0U ) + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + +/*! SENSB_REQ and ALLB_REQ param Digital 1.1 7.6.1 */ +typedef enum +{ + RFAL_NFCB_SENS_CMD_ALLB_REQ = 0x08, /*!< ALLB_REQ (WUPB) */ + RFAL_NFCB_SENS_CMD_SENSB_REQ = 0x00 /*!< SENSB_REQ (REQB) */ +} rfalNfcbSensCmd; + + +/*! Number of Slots (NI) codes used for NFC-B anti collision Digital 1.1 Table 26 */ +typedef enum +{ + RFAL_NFCB_SLOT_NUM_1 = 0, /*!< N=0 : 1 slot */ + RFAL_NFCB_SLOT_NUM_2 = 1, /*!< N=1 : 2 slots */ + RFAL_NFCB_SLOT_NUM_4 = 2, /*!< N=2 : 4 slots */ + RFAL_NFCB_SLOT_NUM_8 = 3, /*!< N=3 : 8 slots */ + RFAL_NFCB_SLOT_NUM_16 = 4 /*!< N=4 : 16 slots */ +}rfalNfcbSlots; + + +/*! SENSB_RES (ATQB) Application Data Format Digital 1.1 Table 28 */ +typedef struct +{ + uint8_t AFI; /*!< Application Family Identifier */ + uint8_t CRC_B[RFAL_NFCB_CRC_LEN]; /*!< CRC_B of AID */ + uint8_t numApps; /*!< Number of Applications */ +} rfalNfcbSensbResAppData; + + +/*! SENSB_RES Protocol Info format Digital 1.1 Table 29 */ +typedef struct +{ + uint8_t BRC; /*!< Bit Rate Capability */ + uint8_t FsciProType; /*!< Frame Size Card Integer [4b] | Protocol Type[4 bits] */ + uint8_t FwiAdcFo; /*!< Frame Waiting Integer [4b] | Application Data Coding [2b] | Frame Options [2b] */ + uint8_t SFGI; /*!< Optional: Start-Up Frame Guard Time Integer[4b] | RFU [4b] */ +} rfalNfcbSensbResProtocolInfo; + + +/*! SENSB_RES format Digital 1.1 7.6.2 */ +typedef struct +{ + uint8_t cmd; /*!< SENSB_RES: 50h */ + uint8_t nfcid0[RFAL_NFCB_NFCID0_LEN]; /*!< NFC Identifier (PUPI)*/ + rfalNfcbSensbResAppData appData; /*!< Application Data */ + rfalNfcbSensbResProtocolInfo protInfo; /*!< Protocol Information */ +} rfalNfcbSensbRes; + + +/*! NFC-B listener device (PICC) struct */ +typedef struct +{ + uint8_t sensbResLen; /*!< SENSB_RES length */ + rfalNfcbSensbRes sensbRes; /*!< SENSB_RES */ + bool isSleep; /*!< Device sleeping flag */ +}rfalNfcbListenDevice; + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +/*! + ***************************************************************************** + * \brief Initialize NFC-B Poller mode + * + * This methods configures RFAL RF layer to perform as a + * NFC-B Poller/RW (ISO14443B PCD) including all default timings + * + * It sets NFC-B parameters (AFI, PARAM) to default values + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcbPollerInitialize( void ); + + +/*! + ***************************************************************************** + * \brief Set NFC-B Poller parameters + * + * This methods configures RFAL RF layer to perform as a + * NFCA Poller/RW (ISO14443A PCD) including all default timings + * + * Additionally configures NFC-B specific parameters to be used on the + * following communications + * + * \param[in] AFI : Application Family Identifier to be used + * \param[in] PARAM : PARAM to be used, it announces whether Advanced + * Features or Extended SENSB_RES is supported + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcbPollerInitializeWithParams( uint8_t AFI, uint8_t PARAM ); + + +/*! + ***************************************************************************** + * \brief NFC-B Poller Check Presence + * + * This method checks if a NFC-B Listen device (PICC) is present on the field + * by sending an ALLB_REQ (WUPB) or SENSB_REQ (REQB) + * + * \param[in] cmd : Indicate if to send an ALL_REQ or a SENS_REQ + * \param[in] slots : The number of slots to be announced + * \param[out] sensbRes : If received, the SENSB_RES + * \param[out] sensbResLen : If received, the SENSB_RES length + * + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_RF_COLLISION : Collision detected one or more device in the field + * \return ERR_PAR : Parity error detected, one or more device in the field + * \return ERR_CRC : CRC error detected, one or more device in the field + * \return ERR_FRAMING : Framing error detected, one or more device in the field + * \return ERR_PROTO : Protocol error detected, invalid SENSB_RES received + * \return ERR_NONE : No error, SENSB_RES received + ***************************************************************************** + */ +ReturnCode rfalNfcbPollerCheckPresence( rfalNfcbSensCmd cmd, rfalNfcbSlots slots, rfalNfcbSensbRes *sensbRes, uint8_t *sensbResLen ); + + +/*! + ***************************************************************************** + * \brief NFC-B Poller Sleep + * + * This function is used to send the SLPB_REQ (HLTB) command to put the PICC with + * the given NFCID0 to state HALT so that they do not reply to further SENSB_REQ + * commands (only to ALLB_REQ) + * + * \param[in] nfcid0 : NFCID of the device to be put to Sleep + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcbPollerSleep( const uint8_t* nfcid0 ); + + +/*! + ***************************************************************************** + * \brief NFC-B Poller Slot Marker + * + * This method selects a NFC-B Slot marker frame + * + * \param[in] slotCode : Slot Code [1-15] + * \param[out] sensbRes : If received, the SENSB_RES + * \param[out] sensbResLen : If received, the SENSB_RES length + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error + * \return ERR_PAR : Parity error detected + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error, SEL_RES received + ***************************************************************************** + */ +ReturnCode rfalNfcbPollerSlotMarker( uint8_t slotCode, rfalNfcbSensbRes *sensbRes, uint8_t *sensbResLen ); + +/*! + ***************************************************************************** + * \brief NFC-B Technology Detection + * + * This method performs NFC-B Technology Detection as defined in the spec + * given in the compliance mode + * + * \param[in] compMode : compliance mode to be performed + * \param[out] sensbRes : location to store the SENSB_RES, if received + * \param[out] sensbResLen : length of the SENSB_RES, if received + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_NONE : No error, one or more device in the field + ***************************************************************************** + */ +ReturnCode rfalNfcbPollerTechnologyDetection( rfalComplianceMode compMode, rfalNfcbSensbRes *sensbRes, uint8_t *sensbResLen ); + +/*! + ***************************************************************************** + * \brief NFC-B Poller Collision Resolution + * + * NFC-B Collision resolution Listener device/card (PICC) as + * defined in Activity 1.1 9.3.5 + * + * This function is used to perform collision resolution for detection in case + * of multiple NFC Forum Devices with Technology B detected. + * Target with valid SENSB_RES will be stored in devInfo and nfcbDevCount incremented. + * + * \param[in] compMode : compliance mode to be performed + * \param[in] devLimit : device limit value, and size nfcbDevList + * \param[out] nfcbDevList : NFC-B listener device info + * \param[out] devCnt : devices found counter + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcbPollerCollisionResolution( rfalComplianceMode compMode, uint8_t devLimit, rfalNfcbListenDevice *nfcbDevList, uint8_t *devCnt ); + +/*! + ***************************************************************************** + * \brief NFC-B Poller Collision Resolution Slotted + * + * NFC-B Collision resolution Listener device/card (PICC). The sequence can + * be configured to be according to NFC Forum Activity 1.1 9.3.5, ISO10373 + * or EMVCo + * + * This function is used to perform collision resolution for detection in case + * of multiple NFC Forum Devices with Technology B are detected. + * Target with valid SENSB_RES will be stored in devInfo and nfcbDevCount incremented. + * + * This method provides the means to perform a collision resolution loop with specific + * initial and end number of slots. This allows to user to start the loop already with + * greater number of slots, and or limit the end number of slots. At the end a flag + * indicating whether there were collisions pending is returned. + * + * If RFAL_COMPLIANCE_MODE_ISO is used \a initSlots must be set to RFAL_NFCB_SLOT_NUM_1 + * + * + * \param[in] compMode : compliance mode to be performed + * \param[in] devLimit : device limit value, and size nfcbDevList + * \param[in] initSlots : number of slots to open initially + * \param[in] endSlots : number of slots when to stop collision resolution + * \param[out] nfcbDevList : NFC-B listener device info + * \param[out] devCnt : devices found counter + * \param[out] colPending : flag indicating whether collision are still pending + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcbPollerSlottedCollisionResolution( rfalComplianceMode compMode, uint8_t devLimit, rfalNfcbSlots initSlots, rfalNfcbSlots endSlots, rfalNfcbListenDevice *nfcbDevList, uint8_t *devCnt, bool *colPending ); + + +/*! + ***************************************************************************** + * \brief NFC-B TR2 code to FDT + * + * Converts the TR2 code as defined in Digital 1.1 Table 33 Minimum + * TR2 Coding to Frame Delay Time (FDT) in 1/Fc + * + * \param[in] tr2Code : TR2 code as defined in Digital 1.1 Table 33 + * + * \return FDT in 1/Fc + ***************************************************************************** + */ +uint32_t rfalNfcbTR2ToFDT( uint8_t tr2Code ); + + +#endif /* RFAL_NFCB_H */ + +/** + * @} + * + * @} + * + * @} + */ diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_nfcf.h b/Software/Middlewares/ST/rfal/Inc/rfal_nfcf.h new file mode 100644 index 0000000..936f941 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_nfcf.h @@ -0,0 +1,370 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_nfcf.h + * + * \author Gustavo Patricio + * + * \brief Implementation of NFC-F Poller (FeliCa PCD) device + * + * The definitions and helpers methods provided by this module are + * aligned with NFC-F (FeliCa - JIS X6319-4) + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-AL + * \brief RFAL Abstraction Layer + * @{ + * + * \addtogroup NFC-F + * \brief RFAL NFC-F Module + * @{ + * + */ + + +#ifndef RFAL_NFCF_H +#define RFAL_NFCF_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_rf.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define RFAL_NFCF_NFCID2_LEN 8U /*!< NFCID2 (FeliCa IDm) length */ +#define RFAL_NFCF_SENSF_RES_LEN_MIN 16U /*!< SENSF_RES minimum length */ +#define RFAL_NFCF_SENSF_RES_LEN_MAX 18U /*!< SENSF_RES maximum length */ +#define RFAL_NFCF_SENSF_RES_PAD0_LEN 2U /*!< SENSF_RES PAD0 length */ +#define RFAL_NFCF_SENSF_RES_PAD1_LEN 2U /*!< SENSF_RES PAD1 length */ +#define RFAL_NFCF_SENSF_RES_RD_LEN 2U /*!< SENSF_RES Request Data length */ +#define RFAL_NFCF_SENSF_RES_BYTE1 1U /*!< SENSF_RES first byte value */ +#define RFAL_NFCF_SENSF_SC_LEN 2U /*!< Felica SENSF_REQ System Code length */ +#define RFAL_NFCF_SENSF_PARAMS_SC1_POS 0U /*!< System Code byte1 position in the SENSF_REQ */ +#define RFAL_NFCF_SENSF_PARAMS_SC2_POS 1U /*!< System Code byte2 position in the SENSF_REQ */ +#define RFAL_NFCF_SENSF_PARAMS_RC_POS 2U /*!< Request Code position in the SENSF_REQ */ +#define RFAL_NFCF_SENSF_PARAMS_TSN_POS 3U /*!< Time Slot Number position in the SENSF_REQ */ +#define RFAL_NFCF_POLL_MAXCARDS 16U /*!< Max number slots/cards 16 */ + + +#define RFAL_NFCF_CMD_POS 0U /*!< Command/Responce code length */ +#define RFAL_NFCF_CMD_LEN 1U /*!< Command/Responce code length */ +#define RFAL_NFCF_LENGTH_LEN 1U /*!< LEN field length */ +#define RFAL_NFCF_HEADER_LEN (RFAL_NFCF_LENGTH_LEN + RFAL_NFCF_CMD_LEN) /*!< Header length*/ + + +#define RFAL_NFCF_SENSF_NFCID2_BYTE1_POS 0U /*!< NFCID2 byte1 position */ +#define RFAL_NFCF_SENSF_NFCID2_BYTE2_POS 1U /*!< NFCID2 byte2 position */ + +#define RFAL_NFCF_SENSF_NFCID2_PROT_TYPE_LEN 2U /*!< NFCID2 length for byte 1 and byte 2 indicating NFC-DEP or T3T support */ +#define RFAL_NFCF_SENSF_NFCID2_BYTE1_NFCDEP 0x01U /*!< NFCID2 byte1 NFC-DEP support Digital 1.0 Table 44 */ +#define RFAL_NFCF_SENSF_NFCID2_BYTE2_NFCDEP 0xFEU /*!< NFCID2 byte2 NFC-DEP support Digital 1.0 Table 44 */ + +#define RFAL_NFCF_SYSTEMCODE 0xFFFFU /*!< SENSF_RES Default System Code Digital 1.0 6.6.1.1 */ + +#define RFAL_NFCF_BLOCK_LEN 16U /*!< NFCF T3T Block size T3T 1.0 4.1 */ +#define RFAL_NFCF_CHECKUPDATE_RES_ST1_POS 9U /*!< Check|Update Res Status Flag 1 position T3T 1.0 Table 8 */ +#define RFAL_NFCF_CHECKUPDATE_RES_ST2_POS 10U /*!< Check|Update Res Status Flag 2 position T3T 1.0 Table 8 */ +#define RFAL_NFCF_CHECKUPDATE_RES_NOB_POS 11U /*!< Check|Update Res Number of Blocks position T3T 1.0 Table 8 */ + +#define RFAL_NFCF_STATUS_FLAG_SUCCESS 0x00U /*!< Check response Number of Blocks position T3T 1.0 Table 11 */ +#define RFAL_NFCF_STATUS_FLAG_ERROR 0xFFU /*!< Check response Number of Blocks position T3T 1.0 Table 11 */ + +#define RFAL_NFCF_BLOCKLISTELEM_LEN 0x80U /*!< Block List Element Length bit (2|3 bytes) T3T 1.0 5.6.1 */ + +#define RFAL_NFCF_SERVICECODE_RDONLY 0x000BU /*!< NDEF Service Code as Read-Only T3T 1.0 7.2.1 */ +#define RFAL_NFCF_SERVICECODE_RDWR 0x0009U /*!< NDEF Service Code as Read and Write T3T 1.0 7.2.1 */ + + +/*! NFC-F Felica command set JIS X6319-4 9.1 */ +enum +{ + RFAL_NFCF_CMD_POLLING = 0x00, /*!< SENSF_REQ (Felica Poll/REQC command to identify a card ) */ + RFAL_NFCF_CMD_POLLING_RES = 0x01, /*!< SENSF_RES (Felica Poll/REQC command response ) */ + RFAL_NFCF_CMD_REQUEST_SERVICE = 0x02, /*!< verify the existence of Area and Service */ + RFAL_NFCF_CMD_REQUEST_RESPONSE = 0x04, /*!< verify the existence of a card */ + RFAL_NFCF_CMD_READ_WITHOUT_ENCRYPTION = 0x06, /*!< read Block Data from a Service that requires no authentication */ + RFAL_NFCF_CMD_READ_WITHOUT_ENCRYPTION_RES = 0x07, /*!< read Block Data response from a Service with no authentication */ + RFAL_NFCF_CMD_WRITE_WITHOUT_ENCRYPTION = 0x08, /*!< write Block Data to a Service that requires no authentication */ + RFAL_NFCF_CMD_WRITE_WITHOUT_ENCRYPTION_RES = 0x09, /*!< write Block Data response to a Service with no authentication */ + RFAL_NFCF_CMD_REQUEST_SYSTEM_CODE = 0x0c, /*!< acquire the System Code registered to a card */ + RFAL_NFCF_CMD_AUTHENTICATION1 = 0x10, /*!< authenticate a card */ + RFAL_NFCF_CMD_AUTHENTICATION2 = 0x12, /*!< allow a card to authenticate a Reader/Writer */ + RFAL_NFCF_CMD_READ = 0x14, /*!< read Block Data from a Service that requires authentication */ + RFAL_NFCF_CMD_WRITE = 0x16, /*!< write Block Data to a Service that requires authentication */ +}; + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +/*! Checks if the given NFC-F device indicates NFC-DEP support */ +#define rfalNfcfIsNfcDepSupported( dev ) ( (((rfalNfcfListenDevice*)(dev))->sensfRes.NFCID2[RFAL_NFCF_SENSF_NFCID2_BYTE1_POS] == RFAL_NFCF_SENSF_NFCID2_BYTE1_NFCDEP) && \ + (((rfalNfcfListenDevice*)(dev))->sensfRes.NFCID2[RFAL_NFCF_SENSF_NFCID2_BYTE2_POS] == RFAL_NFCF_SENSF_NFCID2_BYTE2_NFCDEP) ) + + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + + +/*! NFC-F SENSF_RES format Digital 1.1 8.6.2 */ +typedef struct +{ + uint8_t CMD; /*!< Command Code: 01h */ + uint8_t NFCID2[RFAL_NFCF_NFCID2_LEN]; /*!< NFCID2 */ + uint8_t PAD0[RFAL_NFCF_SENSF_RES_PAD0_LEN]; /*!< PAD0 */ + uint8_t PAD1[RFAL_NFCF_SENSF_RES_PAD1_LEN]; /*!< PAD1 */ + uint8_t MRTIcheck; /*!< MRTIcheck */ + uint8_t MRTIupdate; /*!< MRTIupdate */ + uint8_t PAD2; /*!< PAD2 */ + uint8_t RD[RFAL_NFCF_SENSF_RES_RD_LEN]; /*!< Request Data */ +} rfalNfcfSensfRes; + + +/*! NFC-F poller device (PCD) struct */ +typedef struct +{ + uint8_t NFCID2[RFAL_NFCF_NFCID2_LEN]; /*!< NFCID2 */ +} rfalNfcfPollDevice; + +/*! NFC-F listener device (PICC) struct */ +typedef struct +{ + uint8_t sensfResLen; /*!< SENF_RES length */ + rfalNfcfSensfRes sensfRes; /*!< SENF_RES */ +} rfalNfcfListenDevice; + +typedef uint16_t rfalNfcfServ; /*!< NFC-F Service Code */ + +/*! NFC-F Block List Element (2 or 3 bytes element) T3T 1.0 5.6.1 */ +typedef struct +{ + uint8_t conf; /*!< Access Mode | Serv Code List Order */ + uint16_t blockNum; /*!< Block Number */ +}rfalNfcfBlockListElem; + +/*! Check Update Service list and Block list parameter */ +typedef struct +{ + uint8_t numServ; /*!< Number of Services */ + rfalNfcfServ *servList; /*!< Service Code List */ + uint8_t numBlock; /*!< Number of Blocks */ + rfalNfcfBlockListElem *blockList; /*!< Block Number List */ +}rfalNfcfServBlockListParam; + + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +/*! + ***************************************************************************** + * \brief Initialize NFC-F Poller mode + * + * This methods configures RFAL RF layer to perform as a + * NFC-F Poller/RW (FeliCa PCD) including all default timings + * + * \param[in] bitRate : NFC-F bitrate to be initialize (212 or 424) + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Incorrect bitrate + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcfPollerInitialize( rfalBitRate bitRate ); + + +/*! + ***************************************************************************** + * \brief NFC-F Poller Check Presence + * + * This function sends a Poll/SENSF command according to NFC Activity spec + * It detects if a NCF-F device is within range + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_NONE : No error and some NFC-F device was detected + * + ***************************************************************************** + */ +ReturnCode rfalNfcfPollerCheckPresence( void ); + + +/*! + ***************************************************************************** + * \brief NFC-F Poller Poll + * + * This function sends to all PICCs in field the POLL command with the given + * number of slots. + * + * \param[in] slots : the number of slots to be performed + * \param[in] sysCode : as given in FeliCa poll command + * \param[in] reqCode : FeliCa communication parameters + * \param[out] cardList : Parameter of type rfalFeliCaPollRes which will hold the cards found + * \param[out] devCnt : actual number of cards found + * \param[out] collisions : number of collisions encountered + * + * \warning the list cardList has to be as big as the number of slots for the Poll + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_NONE : No error and some NFC-F device was detected + * + ***************************************************************************** + */ +ReturnCode rfalNfcfPollerPoll( rfalFeliCaPollSlots slots, uint16_t sysCode, uint8_t reqCode, rfalFeliCaPollRes *cardList, uint8_t *devCnt, uint8_t *collisions ); + + +/*! + ***************************************************************************** + * \brief NFC-F Poller Full Collision Resolution + * + * Performs a full Collision resolution as defined in Activity 1.1 9.3.4 + * + * \param[in] compMode : compliance mode to be performed + * \param[in] devLimit : device limit value, and size nfcaDevList + * \param[out] nfcfDevList : NFC-F listener devices list + * \param[out] devCnt : Devices found counter + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcfPollerCollisionResolution( rfalComplianceMode compMode, uint8_t devLimit, rfalNfcfListenDevice *nfcfDevList, uint8_t *devCnt ); + + +/*! + ***************************************************************************** + * \brief NFC-F Poller Check/Read + * + * It computes a Check / Read command accoring to T3T 1.0 and JIS X6319-4 and + * sends it to PICC. If sucessfully, the rxBuf will contain the the number of + * blocks in the first byte followed by the blocks data. + * + * \param[in] nfcid2 : nfcid2 of the device + * \param[in] servBlock : parameter containing the list of Services and + * Blocks to be addressed by this command + * \param[out] rxBuf : buffer to place check/read data + * \param[in] rxBufLen : size of the rxBuf + * \param[out] rcvdLen : length of data placed in rxBuf + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_REQUEST : The request was executed with error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcfPollerCheck( const uint8_t* nfcid2, const rfalNfcfServBlockListParam *servBlock, uint8_t *rxBuf, uint16_t rxBufLen, uint16_t *rcvdLen ); + + +/*! + ***************************************************************************** + * \brief NFC-F Poller Update/Write + * + * It computes a Update / Write command accoring to T3T 1.0 and JIS X6319-4 and + * sends it to PICC. + * + * \param[in] nfcid2 : nfcid2 of the device + * \param[in] servBlock : parameter containing the list of Services and + * Blocks to be addressed by this command + * \param[in] txBuf : buffer where the request will be composed + * \param[in] txBufLen : size of txBuf + * \param[in] blockData : data to written on the given block(s) + * \param[out] rxBuf : buffer to place check/read data + * \param[in] rxBufLen : size of the rxBuf + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_REQUEST : The request was executed with error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalNfcfPollerUpdate( const uint8_t* nfcid2, const rfalNfcfServBlockListParam *servBlock, uint8_t *txBuf, uint16_t txBufLen, const uint8_t *blockData, uint8_t *rxBuf, uint16_t rxBufLen); + +/*! + ***************************************************************************** + * \brief NFC-F Listener is T3T Request + * + * This method checks if the given data is a valid T3T command (Read or Write) + * and in case a valid request has been received it may output the request's NFCID2 + * + * \param[in] buf : buffer holding Initiator's received command + * \param[in] bufLen : length of received command in bytes + * \param[out] nfcid2 : pointer to where the NFCID2 may be outputed, + * nfcid2 has NFCF_SENSF_NFCID2_LEN as length + * Pass NULL if output parameter not desired + * + * \return true : Valid T3T command (Read or Write) received + * \return false : Invalid protocol request + * + ***************************************************************************** + */ +bool rfalNfcfListenerIsT3TReq( const uint8_t* buf, uint16_t bufLen, uint8_t* nfcid2 ); + + +#endif /* RFAL_NFCF_H */ + +/** + * @} + * + * @} + * + * @} + */ diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_nfcv.h b/Software/Middlewares/ST/rfal/Inc/rfal_nfcv.h new file mode 100644 index 0000000..36875b1 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_nfcv.h @@ -0,0 +1,772 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_nfcv.h + * + * \author Gustavo Patricio + * + * \brief Implementation of NFC-V Poller (ISO15693) device + * + * The definitions and helpers methods provided by this module + * are aligned with NFC-V Digital 2.1 + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-AL + * \brief RFAL Abstraction Layer + * @{ + * + * \addtogroup NFC-V + * \brief RFAL NFC-V Module + * @{ + * + */ + +#ifndef RFAL_NFCV_H +#define RFAL_NFCV_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_rf.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define RFAL_NFCV_UID_LEN 8U /*!< NFC-V UID length */ +#define RFAL_NFCV_MAX_BLOCK_LEN 32U /*!< Max Block size: can be of up to 256 bits ISO 15693 2000 5 */ +#define RFAL_NFCV_BNO_LEN 1U /*!< NFC-V Block Number length */ +#define RFAL_NFCV_CRC_LEN 2U /*!< NFC-V CRC length */ +#define RFAL_NFCV_MAX_GEN_DATA_LEN (RFAL_NFCV_MAX_BLOCK_LEN + RFAL_NFCV_BNO_LEN + RFAL_NFCV_UID_LEN) /*!
© COPYRIGHT 2016 STMicroelectronics

a3o=oHhw@2n7cV50tfTX8~F8mF`!( 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

7zy-k7B!d-A$Ni)0Rm6`v5^$YL z_0#=IMQI%$wTKygj?e5l0UZHg9e8CY-<_5Z(S9#!DX|MhKZs5jP5o!!Ud*a`nR6yh zhZNqGKoP<52jq2Sm^{9onp3WEo-ZHGE-OW#-uMv9d14r4LW&@)R52}3M1mu-+~Q#Z zvfV=>9Q<=c&U%!rnFZBSUqPLKF(~v>Htk8U_rkjh%vjl;!@$WLb8?Ha7vC^D;~&rH zv7g8pU|%)hLLxigs=gS*rTYl9!+n+D$bq5WEGLkn{Q~R4Lm8WcotjUK4`;NhacW8Y z8R(0Y^>Tr39yugWVkX}FNg!fNEtI|eeQ;xQgS;EDFQN;fF!Jy26pZ7s)e;|;$9P^>CUQJ>Q)2cqP zyJukXo}gk>|I(^T=Jx-tK37Q>*+f??4yc5}$rJCcMmU0=&aTKv)DW77dzJRJ8uU8n zl&rH{3=9O$QwOebeGF}87DcP&r1u91??M!fAps04Oy8kAs~;u)C5`kb%DGJbBU)PX zEN%8D{U?t}KEfYv0bpsVG|!<>9vg~!gskiNyjZRLgp>Wn>p|kUNSP0cT6ETfK`DPz z;Q0+2e*t^z16oJd@ zc|!|us)Rq%7J_sgBLaVK_T82{FB1W`#NDJgvOppT_TIkW@Q%&<5pJQ>3kPUd@TBTX z^eH}5so11AiX&mS^i@|1`(1yYx828L7oYNoO1qGSC_Hv0%uRM-S9qP|@-WZ<)&lDdogA)Kusu~LTPwSt4OSg<kN(DwGK39cqw?ZUtPoj%j_4lFwBH_q$3!~8!!Gb0O(mU*TQk>hNFw)jz zQL1)G6!KX7W^9@(tH~Q3rvo*MB>HxVI{-Zw!Z8_cpc~<{wShS&0Yw z?Ml$>#wVx&RrzOTJG@h@-#u<-i*YOUyR8&Zx$r_X5`6!U-$p+kzN=R1yBk(J>Kif0 z5MrSN0rUjBcMb)&yO-#g_z0II2pxIJf9JEkFoXB=L(}b4SpL^d4B|7}Wml<8(z7B9 zPNaHq2kv2J+IXgqiJ3{Gff8|(>&DpeWs4g1iO`(@yR-quLj(jOZH4ergZ%;;-A);k zC>P^!V_}Ue0g^`l4zx_0D;^`a(ja9&Z1tfFE6w9#%0mMYAV3%lz)77!hZ+dhToaC8skKSzE< z`hc+CkvfUd+E-y7!Fqcoe5dkjVh=HQve87=d z05$RC<)GNvK%))}7O}D&vs|F_-oWSpA8tPg&0k`K!c}DII)u# zU>x@Y%r>y!E{GJoAXeLGU*@_;lE0-Bl7u>|Hdf!Op(_jk*b1LAIdQN}jhLk$)7z5l z%qhhYKOVULWz}9K1eI_3s+UXu0q6vwidS5{kD#<6?ujT6%W-u&(`KSNb~*`7c0;d; zmX~*!MXS3E8{1a@-3m3&QWEx)f32cR4lnIfA=12(qUpa#`ie!cX&MkWj?2` zz*6jP?0=N`2%{#Mdm0)YU}n^sVKa*y=DO=`c&01EW_xDLR<&_}Un+B08rMiI$i<7K z6&1gwK?D&XqxkM62baI|w@)TQLPq^`f9#O%S$!3!a%1F8Aj`6TPx4)78mrJo2$xLS z0f{koDOb6oC)f){K-wXbUwOG^Gz~Wo02fCn|0S~YKpCe3e#2*0{q($SCzImMb|x0qCkTFx%V`L4DhA`a0%V(j&{>LELU92IC8XMZx?FUNt1JoYFKmv9nPGqho{y;$S`$fjV{O z()f)gyoamHv7Fv`((%0yj^1LtnwoTjB^RG)BfGhl8i>;-V6ACwP5{tHw`aU*%;1`O z#UPBs2eP&5Swt(>R&<%#nflnhiFH9PPZjd`#M*!I!pLLNyReXjIwx>TTD-4Rrz>#d z8bYh4G!?zRZ{g3*Thh|Df3VrzMNG6x*hATZ;Lri4uh+`09^GWj-vZ<-a8m-vzE)XW z%528+6BI@l%z0M7F~24fXz3MP-rA%ejfp^0HiEoM-e%XF(Gnm#Z&IQ-kOb+Nj!X+|bw>u771_*G)a4t=cHl1kHYT*K3lq$pex&j zVT%3sqwa&tG4Hz^2h*X+6MO4$sxP|_+nw>JQspYHXehOcUX&v-xP zuT&Sb<0&ZyVs#}&9zz#i9Q^IKO%G(A<{e)Zr3*a|{*>Iq2;}4=ukn~{BpP0uXjO+)&5K1ItUSjdEssk=)qq<+})KWYR(a!c^AlR^E24Zg_m_B zi`lDAE@9`K1A57fPz)z7!n(ns*QpV^=V8f%auv|$oE6vQvli%QlzxEy%TJH=hSAjG zLq^Ed9re$3QX_ZSNr?b%i=9g@XZ{G?rP;1L$xSp=#6oNk*2;$sF0z%X~ z2!|q}^JV;WXtdl?tl?OFKcBfLsAmF$yfx<`4%wv#8T)y4b(zq?jAIKX4)*E%PzggDv z?Tu9Rjbf3|wTDtZ*VV2F@WywnBmmC2R*cAsNxpD@ZHMzelN&$SX|h*jUny~eIRqmZ zIL$BSLC1g9^&^Bu1MLrc+|k2fXGXFtw#AOR3{c$_HP2@B`vJ)x9g#xvqX0iZz`y43 z=@iutkd+&X_SVCT@i)Rbpsq8xv21J&-S*vA zv-ZIHtN%Ak8gAw;R@bu1!TIK&F-Xc$y0FNMN;SauRiqQ5VxdNr*s8yXb&BH72mX0l z34;CD%SoQJD$u@vG}Hl-Km=z}`N+U8Gy19vzVB6IfAeSA08dy5KRd#zLyO~ITk9k? z^oRo~qWmrmMJFrkp!ib}9G#65s~o!?FVLWl>&+|)j*K#l>J^H9y^9)A$H-C#V7^QA&Ty=NTr1v(pzUQUyOeg1n=FUP)9;}G1BI+@DRL1vlx z-lsxzmBp9cHq$fREeqU_vfivO!@NF*)>+&pK&(jcc0H?poDk4Dry=8lBVVB>)_Bk- zn)ixKgSmQ4gBb?HCApUl&Nd+t>4+zzzn-N+l+QbK34zmm(A~s(N#86fq;V0AJ+xA9 zO*~#7^7a{64wru*M)4V~sLF9$KvOd;xudkqLKtpJTxe0CJnJL1pix3;T!m@c(alvRzIH8CkiuX!dWLy^|7|A-?Y7U!Gbo z6UHVgPI<<9eONEl_+S=G9Pi))G%tu4Pl*)6k%mJ+*8q+Ms5}s_*Yfp5iYXpC?k7;s z%^iNSS(Tr^qGCcBnHE>#f45+UQqJ}blN~ETskV-Bs}t+SZSEdP3^bMP_7_B|+DR_0 zB_w(tu>G_sCp!`=7h&2gLzIhbkt*Td2h62uX@GB~7ILdQTc*kKOeQ8{@mkuAb1kr_ zgb4y84@IJ(TkZ$FjKA-E0W^d93ZK{m4VDmMr3k6J2-v^00v`D%ywUMtwrP!CAJ9PZ zq>UGC-Mv%*PWtslTxe$pb9jOPzbR;(96_TJ>5^!Lb9-M_VHCD_~9O07s-)S(h8oDo$g0DtL(X9Og{8;p^Am(#GT7+jZHjxZ7*1~Gd1 zuF7AyFAYA{Ro&3$HO^=ahOd=$q(}=bjQ1VP#maZox}wNBwrbooEOW`_V9P~#p6k!H zd;v+9*z_-iF18)Lxvx2Q1SXW$id!<5KD8dlkN(y{^GL!s8*rX;`3EoVr`MUjtXfJr zvAfjHR821&pGDU(>r`2h^9GLB+W0$3kxj&qiSmJTCK}Jn8FLwK(_AmHT1XET9<=G4 zcw5>O9$asM2M%+Yg9ClVMe-T(GqSp6Ky5lGSn(zon6pqx=2^5HkEQMIhd|RZw1$ zyBPvc;e>MUAY&Zpx4V7vo&aJ+xc5nnI^kZI7iU`gt0T_WZyF8y19F=Bkn7hukTe=Y zR|1ObU1U!ho{6tzDAA$0ntrVJ51nlCubyLIV`7OGAc3jKq{=WB9@VbRHO6EX%qEuf zTZz}e=>0pkPRXk)u9ieU==UHjT9k1$KJXrV$~k-kAo`4UkxlRB;aX>r{4#+D)wGY# zhef^T5P?UBg$AfJ{=J8!aGm1p#?Cyhxb_kad(G8j80!jHaRT@OBn@fT^VX2*9!ePd zUT64pyK>rXsJ7^ISz~F8;)GU>kJI>?Ll==E;?TLV2)}_u2P2(Zm_5y3`$lUNaO3j4Y-oRst7D*mSnt6J~oj~{I5VS|4y!ERl|L4(< z*`#|`dvMngLbMiz-Igs*8H-vriN`gbuG+{AwZs^Z3I+(Jx*K`=V}`Bcu6T(bqK6H- z@pP+Q`shQ_>ZD-wv|O&AN~EvQO!+xzwHyA+(iF01$e~LE2sCJe{I&*3o5L*@YF>~` zB0>T`-`h%7)uXvYR@!v>HP(!rZv|`L(Ru&YPwCZu9hy1wne*RSajz3sjqzswL;c zGVC;s+E|T>bp%98?Z69E%&YX3GlIQ$_I|^$KJ%d4Xy+$n$nGnzX+v(7XvA<2{sj%&XpYb_>C8$ zCNuTsk~m{edqTp#Ze2!1POKMvpDexNEm3=4Vm$og!jjaed}1`6p^`4qRetM&Z4sIZ7B?F;^`p4$zvfhZe_xW znf*nLFTP)tuNA{k)cdl2Em+Kp3Fxfy!#8T>?$w9LX>bs<2ic8JY~)1ADBh*uW8^ymuf zbWOOFV2Ca?7~!2bk-~*{BeXWky&gb}+>#A{?wDpjhXN>@+4Bm2b?e!StFmb*gGHRb zchi|0^*)4-ZtpT}QwIG7)isnrEtkA2B94oGWKgQdUH$Lr3dffzq^dcjJzC|#9J z@HN^vMbX67{10z2!{m$dj4#%ljfp4Y?q*vfF~VI6@QK+^ZDuH^hASIyMf1TxeWI2H z@|U)SFAdBD%fb-LX*E_7xq%)h>F;o5gYlZK31*ZiMNI8XKaT%6(~Hfl&AG}<_Do^!u*e+8%-sc-5oj-E#0gGY(OV8;2=Tuk{)t)+KrjI!Z$^upG`4$Ul>C-BEIR;?5qD6-ebzT_o zPU#%1IDq?S{L`qYsEJNR>oLwV z{AX9{%4(U@L6cx55_<$F^Q+Q-?$-Im|xtT=u`#TVkV33@%xI&BJ!M>ZGCN z3@R(HBq-1b1itEyNbE7=mg9FnS$9M*nS~UPWJ$ezX}nIi6ZZ;y#{yd)B5J;8SeY3< z)@uOt6I5z5m1%zUxL5kAvd@oY127vUZ>$%-%PC3bY9|(~@e8I?U>n5$&H>Dk%pr9+dDW>#)@n6;xKGf3DlS{`^pV>SU~hVG|cHx zKw*!8Kap345=82z>>zi;l~OPE{5q|~#(IB}i0)O#W3C@X~OIiTgJDk2@xBF+~ zFvaSaclOAQVI;!8gxF>!9l)}v(cl%Y*(TJK#y$jE!sw%4V_OP(rY^g3Av9>Pj(~Bv zdSWQot6E*u_*a1ecMBC~2@OC{m)eDy(4vVMX1)`BgZlW8uh@l$gi;;Hd47 zVMB{(gdaiBRy6Y_jYACHg(J0*zplb-Um8-ulHsljy^y87pzr*G9N5EoK>@ZDJSC+6 zfhNS^vmY~{zc-YYwR^*ARrrjk;a64xgWTRF(6H&rTqK3nM`CCBjsxQ@;t}BQ6XlS7 z3FNGO58}6xPsH_ly$t_lDhYnd=MF-@MiU_x=j^bP&eZv8GbeF{P)q2H<(`TdMuOZA zvZg0)cq1&L(+xIaYySB!<^f1kjMUfe^R(WhTgtO8<~TDtl)>kf+~19gVsTZo%yJ-q zxbO~nkw!6Qx)x!>ikqf3gm|kc`?#2%bILq0W?z%SC&eISdL;d>sUIFo@vnh)t)LYUr)!_%Byh5kY@{<2=mk*36z+rMvHjbWIXcE z1~D{C!T;jf_+nerrD5xmEYkB$Klof}O+Gl?d$qBw)>)tM(C%wpn|6Ha>}#X7o9}fa zPD616Xk<%rd}Wh)`QhkQXK2U1nsfHi_7Aw=-D{a601Q`@Bg3zKL0I9gZ8tg}_VKW} z{i)8L{o~}S#p-r!WWu9IyzgXRd1Qs#wa?ZL=boPOhk8qYIG?Jy=KGij=Km^0HYDn@ zL#3f6?R%`6iHNm>GLz1 z;17pfRmUga4+QDan}hal)op4PgM5xPuP5^2#|`yO2LJk{EFR`>V`D-oN~loo@oeO( z&-FSHLj0amy6H6S@qSe$5_qW=xu`H$v?%OowBk`g@>e4}dbA zm33}j%?(v_g=at5n{D2A)Dvn_0MaSjH+UTU!LkBTYHNv5?PqyfF2Lw~Vm)tFR|?6` z2GYv<^hjG-l;QT>eL{a=zc1sHkAJR=x&ack6YtEC@SCn939QpH z?m{W?cXZl5XEdF^-MjjFe%8tI!VP$}E)Xb1`Gzp9V_C)aqIhdKpoJn2y~b0PTC=VdA zq02?lQLLY_(yL))+KOKd9l~2L+}McjL!esl#xr*Iku2FVPM+XX1gSnsOL8S~emoAT z^A~9^L~*Ex4??C5Uv|_qgDjoxZKkqQ28KYQ?TffStl7D#D@HwXXgl<=gn7>DIXy4M zb1(R_BRQOs5kS_-iD*O*N`EY{QemV+@4msgQ-R;p9a3CTjzuwmooHrz&NU!#YoGSoa$CQ|wMcSj- zk<+~b9FpH)xPW5XppJA+8dIr;Oi?L=g`LA(G+GJm!&>)D`^OM7L^3dTXG%?!;8YVo z)_>P=dx&Kh?i(_WPJX`~wx|hX8F@#=J^H~43qa9H%kUvMMB8v+1zmHGnwn{`)kk?i z=BSGn!2J@4tEJ^iYmn=%BNoGKobcODE9+1BVr5vIRa7c-z_FKti?XFE#7Y1t#)4=$ z5_@(`f+Sj(l<^Yc)AcUMI?$Liun8k^SSMT{3%W*P|IV-HUjU9PZh%9|ytfA9+39G` zD1RpS1DCKp#O2Y{{|>U`_vwjcfQv2ra^98!j2CJS)v&ZHX64HDmGg0q;QxA|r59bp ztNCI&&tQhY%A>>)QOh$>N&!0)7i9~SqLf!X(n>nq=RwpbqZK#i`2c)4T#oSW&y2~c zE4|CP2k#aGNF>ngGTx%=DN((%L>mQ7jL#!QcLoh|URjkJee|`Rt8ie&AFv5z*Us

FAp!UjH^wY)Z>NwU0v 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

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_rf.h + * + * \author Gustavo Patricio + * + * \brief RF Abstraction Layer (RFAL) + * + * RFAL (RF Abstraction Layer) provides several functionalities required to + * perform RF/NFC communications.
The RFAL encapsulates the different + * RF ICs (ST25R3911, ST25R391x, etc) into a common and easy to use interface. + * + * It provides interfaces to configure the RF IC, set/get timings, modes, bit rates, + * specific handlings, execute listen mode, etc. + * + * Furthermore it provides a common interface to perform a Transceive operations. + * The Transceive can be executed in a blocking or non blocking way.
+ * Additionally few specific Transceive methods are available to cope with the + * specifics of these particular operations. + * + * The most common interfaces are: + *
  rfalInitialize() + *
  rfalSetFDTPoll() + *
  rfalSetFDTListen() + *
  rfalSetGT() + *
  rfalSetBitRate() + *
  rfalSetMode() + *
  rfalFieldOnAndStartGT() + *
  rfalFieldOff() + *
  rfalStartTransceive() + *
  rfalGetTransceiveStatus() + *
  rfalTransceiveBlockingTxRx() + * + * An usage example is provided here: \ref exampleRfalPoller.c + * \example exampleRfalPoller.c + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-HAL + * \brief RFAL Hardware Abstraction Layer + * @{ + * + * \addtogroup RF + * \brief RFAL RF Abstraction Layer + * @{ + * + */ + +#ifndef RFAL_RF_H +#define RFAL_RF_H + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "platform.h" +#include "st_errno.h" +#include "rfal_features.h" + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ +#define RFAL_VERSION (uint32_t)0x02000aU /*!< RFAL Current Version: v2.0.10 */ + +#define RFAL_FWT_NONE 0xFFFFFFFFU /*!< Disabled FWT: Wait forever for a response */ +#define RFAL_GT_NONE RFAL_TIMING_NONE /*!< Disabled GT: No GT will be applied after Field On */ + +#define RFAL_TIMING_NONE 0x00U /*!< Timing disabled | Don't apply */ + +#define RFAL_1FC_IN_4096FC (uint32_t)4096U /*!< Number of 1/fc cycles in one 4096/fc */ +#define RFAL_1FC_IN_512FC (uint32_t)512U /*!< Number of 1/fc cycles in one 512/fc */ +#define RFAL_1FC_IN_64FC (uint32_t)64U /*!< Number of 1/fc cycles in one 64/fc */ +#define RFAL_1FC_IN_8FC (uint32_t)8U /*!< Number of 1/fc cycles in one 8/fc */ +#define RFAL_US_IN_MS (uint32_t)1000U /*!< Number of us in one ms */ +#define RFAL_1MS_IN_1FC (uint32_t)13560U /*!< Number of 1/fc cycles in 1ms */ +#define RFAL_BITS_IN_BYTE (uint16_t)8U /*!< Number of bits in one byte */ + +#define RFAL_CRC_LEN 2U /*!< RF CRC LEN */ + +/*! Default TxRx flags: Tx CRC automatic, Rx CRC removed, NFCIP1 mode off, AGC On, Tx Parity automatic, Rx Parity removed */ +#define RFAL_TXRX_FLAGS_DEFAULT ( (uint32_t)RFAL_TXRX_FLAGS_CRC_TX_AUTO | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_REMV | (uint32_t)RFAL_TXRX_FLAGS_NFCIP1_OFF | (uint32_t)RFAL_TXRX_FLAGS_AGC_ON | (uint32_t)RFAL_TXRX_FLAGS_PAR_RX_REMV | (uint32_t)RFAL_TXRX_FLAGS_PAR_TX_AUTO | (uint32_t)RFAL_TXRX_FLAGS_NFCV_FLAG_AUTO) + + + +#define RFAL_LM_MASK_NFCA (1U<<(uint8_t)RFAL_MODE_LISTEN_NFCA) /*!< Bitmask for Listen Mode enabling Listen NFCA */ +#define RFAL_LM_MASK_NFCB (1U<<(uint8_t)RFAL_MODE_LISTEN_NFCB) /*!< Bitmask for Listen Mode enabling Listen NFCB */ +#define RFAL_LM_MASK_NFCF (1U<<(uint8_t)RFAL_MODE_LISTEN_NFCF) /*!< Bitmask for Listen Mode enabling Listen NFCF */ +#define RFAL_LM_MASK_ACTIVE_P2P (1U<<(uint8_t)RFAL_MODE_LISTEN_ACTIVE_P2P) /*!< Bitmask for Listen Mode enabling Listen AP2P */ + +#define RFAL_LM_SENS_RES_LEN 2U /*!< NFC-A SENS_RES (ATQA) length */ +#define RFAL_LM_SENSB_RES_LEN 13U /*!< NFC-B SENSB_RES (ATQB) length */ +#define RFAL_LM_SENSF_RES_LEN 19U /*!< NFC-F SENSF_RES length */ +#define RFAL_LM_SENSF_SC_LEN 2U /*!< NFC-F System Code length */ + +#define RFAL_NFCID3_LEN 10U /*!< NFCID3 length */ +#define RFAL_NFCID2_LEN 8U /*!< NFCID2 length */ +#define RFAL_NFCID1_TRIPLE_LEN 10U /*!< NFCID1 length */ +#define RFAL_NFCID1_DOUBLE_LEN 7U /*!< NFCID1 length */ +#define RFAL_NFCID1_SIMPLE_LEN 4U /*!< NFCID1 length */ + + +/* +****************************************************************************** +* GLOBAL MACROS +****************************************************************************** +*/ + +/*! Returns the maximum supported bit rate for RW mode. Caller must check if mode is supported before, as even if mode is not supported will return the min */ +#define rfalGetMaxBrRW() ( ((RFAL_SUPPORT_BR_RW_6780) ? RFAL_BR_6780 : ((RFAL_SUPPORT_BR_RW_3390) ? RFAL_BR_3390 : ((RFAL_SUPPORT_BR_RW_1695) ? RFAL_BR_1695 : ((RFAL_SUPPORT_BR_RW_848) ? RFAL_BR_848 : ((RFAL_SUPPORT_BR_RW_424) ? RFAL_BR_424 : ((RFAL_SUPPORT_BR_RW_212) ? RFAL_BR_212 : RFAL_BR_106 ) ) ) ) ) ) ) + +/*! Returns the maximum supported bit rate for AP2P mode. Caller must check if mode is supported before, as even if mode is not supported will return the min */ +#define rfalGetMaxBrAP2P() ( ((RFAL_SUPPORT_BR_AP2P_848) ? RFAL_BR_848 : ((RFAL_SUPPORT_BR_AP2P_424) ? RFAL_BR_424 : ((RFAL_SUPPORT_BR_AP2P_212) ? RFAL_BR_212 : RFAL_BR_106 ) ) ) ) + +/*! Returns the maximum supported bit rate for CE-A mode. Caller must check if mode is supported before, as even if mode is not supported will return the min */ +#define rfalGetMaxBrCEA() ( ((RFAL_SUPPORT_BR_CE_A_848) ? RFAL_BR_848 : ((RFAL_SUPPORT_BR_CE_A_424) ? RFAL_BR_424 : ((RFAL_SUPPORT_BR_CE_A_212) ? RFAL_BR_212 : RFAL_BR_106 ) ) ) ) + +/*! Returns the maximum supported bit rate for CE-B mode. Caller must check if mode is supported before, as even if mode is not supported will return the min */ +#define rfalGetMaxBrCEB() ( ((RFAL_SUPPORT_BR_CE_B_848) ? RFAL_BR_848 : ((RFAL_SUPPORT_BR_CE_B_424) ? RFAL_BR_424 : ((RFAL_SUPPORT_BR_CE_B_212) ? RFAL_BR_212 : RFAL_BR_106 ) ) ) ) + +/*! Returns the maximum supported bit rate for CE-F mode. Caller must check if mode is supported before, as even if mode is not supported will return the min */ +#define rfalGetMaxBrCEF() ( ((RFAL_SUPPORT_BR_CE_F_424) ? RFAL_BR_424 : RFAL_BR_212 ) ) + + +#define rfalIsModeActiveComm( md ) ( ((md) == RFAL_MODE_POLL_ACTIVE_P2P) || ((md) == RFAL_MODE_LISTEN_ACTIVE_P2P) ) /*!< Checks if mode md is Active Communication */ +#define rfalIsModePassiveComm( md ) ( !rfalIsModeActiveComm(md) ) /*!< Checks if mode md is Passive Communication */ +#define rfalIsModePassiveListen( md ) ( ((md) == RFAL_MODE_LISTEN_NFCA) || ((md) == RFAL_MODE_LISTEN_NFCB) || ((md) == RFAL_MODE_LISTEN_NFCF) ) /*!< Checks if mode md is Passive Listen */ +#define rfalIsModePassivePoll( md ) ( rfalIsModePassiveComm(md) && !rfalIsModePassiveListen(md) ) /*!< Checks if mode md is Passive Poll */ + + +#define rfalConv1fcTo8fc( t ) (uint32_t)( (uint32_t)(t) / RFAL_1FC_IN_8FC ) /*!< Converts the given t from 1/fc to 8/fc */ +#define rfalConv8fcTo1fc( t ) (uint32_t)( (uint32_t)(t) * RFAL_1FC_IN_8FC ) /*!< Converts the given t from 8/fc to 1/fc */ + +#define rfalConv1fcTo64fc( t ) (uint32_t)( (uint32_t)(t) / RFAL_1FC_IN_64FC ) /*!< Converts the given t from 1/fc to 64/fc */ +#define rfalConv64fcTo1fc( t ) (uint32_t)( (uint32_t)(t) * RFAL_1FC_IN_64FC ) /*!< Converts the given t from 64/fc to 1/fc */ + +#define rfalConv1fcTo512fc( t ) (uint32_t)( (uint32_t)(t) / RFAL_1FC_IN_512FC ) /*!< Converts the given t from 1/fc to 512/fc */ +#define rfalConv512fcTo1fc( t ) (uint32_t)( (uint32_t)(t) * RFAL_1FC_IN_512FC ) /*!< Converts the given t from 512/fc to 1/fc */ + +#define rfalConv1fcTo4096fc( t ) (uint32_t)( (uint32_t)(t) / RFAL_1FC_IN_4096FC ) /*!< Converts the given t from 1/fc to 4096/fc */ +#define rfalConv4096fcTo1fc( t ) (uint32_t)( (uint32_t)(t) * RFAL_1FC_IN_4096FC ) /*!< Converts the given t from 4096/fc to 1/fc */ + +#define rfalConv1fcToMs( t ) (uint32_t)( (uint32_t)(t) / RFAL_1MS_IN_1FC ) /*!< Converts the given t from 1/fc to ms */ +#define rfalConvMsTo1fc( t ) (uint32_t)( (uint32_t)(t) * RFAL_1MS_IN_1FC ) /*!< Converts the given t from ms to 1/fc */ + +#define rfalConv1fcToUs( t ) (uint32_t)( ((uint32_t)(t) * RFAL_US_IN_MS) / RFAL_1MS_IN_1FC) /*!< Converts the given t from 1/fc to us */ +#define rfalConvUsTo1fc( t ) (uint32_t)( ((uint32_t)(t) * RFAL_1MS_IN_1FC) / RFAL_US_IN_MS) /*!< Converts the given t from us to 1/fc */ + +#define rfalConv64fcToMs( t ) (uint32_t)( (uint32_t)(t) / (RFAL_1MS_IN_1FC / RFAL_1FC_IN_64FC) ) /*!< Converts the given t from 64/fc to ms */ +#define rfalConvMsTo64fc( t ) (uint32_t)( (uint32_t)(t) * (RFAL_1MS_IN_1FC / RFAL_1FC_IN_64FC) ) /*!< Converts the given t from ms to 64/fc */ + +#define rfalConvBitsToBytes( n ) (uint16_t)( ((uint16_t)(n)+(RFAL_BITS_IN_BYTE-1U)) / (RFAL_BITS_IN_BYTE) ) /*!< Converts the given n from bits to bytes */ +#define rfalConvBytesToBits( n ) (uint32_t)( (uint32_t)(n) * (RFAL_BITS_IN_BYTE) ) /*!< Converts the given n from bytes to bits */ + + + +/*! Computes a Transceive context \a ctx with default flags and the lengths + * in bytes with the given arguments + * \a ctx : Transceive context to be assigned + * \a tB : txBuf the pointer to the buffer to be sent + * \a tBL : txBuf length in bytes + * \a rB : rxBuf the pointer to the buffer to place the received frame + * \a rBL : rxBuf length in bytes + * \a rBL : rxBuf length in bytes + * \a t : FWT to be used on this transceive in 1/fc + */ +#define rfalCreateByteTxRxContext( ctx, tB, tBL, rB, rBL, rdL, t ) \ + (ctx).txBuf = (uint8_t*)(tB); \ + (ctx).txBufLen = (uint16_t)rfalConvBytesToBits(tBL); \ + (ctx).rxBuf = (uint8_t*)(rB); \ + (ctx).rxBufLen = (uint16_t)rfalConvBytesToBits(rBL); \ + (ctx).rxRcvdLen = (uint16_t*)(rdL); \ + (ctx).flags = (uint32_t)RFAL_TXRX_FLAGS_DEFAULT; \ + (ctx).fwt = (uint32_t)(t); + + +/*! Computes a Transceive context \a ctx using lengths in bytes + * with the given flags and arguments + * \a ctx : Transceive context to be assigned + * \a tB : txBuf the pointer to the buffer to be sent + * \a tBL : txBuf length in bytes + * \a rB : rxBuf the pointer to the buffer to place the received frame + * \a rBL : rxBuf length in bytes + * \a rBL : rxBuf length in bytes + * \a t : FWT to be used on this transceive in 1/fc + */ +#define rfalCreateByteFlagsTxRxContext( ctx, tB, tBL, rB, rBL, rdL, fl, t ) \ + (ctx).txBuf = (uint8_t*)(tB); \ + (ctx).txBufLen = (uint16_t)rfalConvBytesToBits(tBL); \ + (ctx).rxBuf = (uint8_t*)(rB); \ + (ctx).rxBufLen = (uint16_t)rfalConvBytesToBits(rBL); \ + (ctx).rxRcvdLen = (uint16_t*)(rdL); \ + (ctx).flags = (uint32_t)(fl); \ + (ctx).fwt = (uint32_t)(t); + + +#define rfalLogE(...) platformLog(__VA_ARGS__) /*!< Macro for the error log method */ +#define rfalLogW(...) platformLog(__VA_ARGS__) /*!< Macro for the warning log method */ +#define rfalLogI(...) platformLog(__VA_ARGS__) /*!< Macro for the info log method */ +#define rfalLogD(...) platformLog(__VA_ARGS__) /*!< Macro for the debug log method */ + + +/* +****************************************************************************** +* GLOBAL ENUMS +****************************************************************************** +*/ + +/* RFAL Guard Time (GT) default values */ +#define RFAL_GT_NFCA rfalConvMsTo1fc(5U) /*!< GTA Digital 2.0 6.10.4.1 & B.2 */ +#define RFAL_GT_NFCB rfalConvMsTo1fc(5U) /*!< GTB Digital 2.0 7.9.4.1 & B.3 */ +#define RFAL_GT_NFCF rfalConvMsTo1fc(20U) /*!< GTF Digital 2.0 8.7.4.1 & B.4 */ +#define RFAL_GT_NFCV rfalConvMsTo1fc(5U) /*!< GTV Digital 2.0 9.7.5.1 & B.5 */ +#define RFAL_GT_PICOPASS rfalConvMsTo1fc(1U) /*!< GT Picopass */ +#define RFAL_GT_AP2P rfalConvMsTo1fc(5U) /*!< TIRFG Ecma 340 11.1.1 */ +#define RFAL_GT_AP2P_ADJUSTED rfalConvMsTo1fc(5U+25U) /*!< Adjusted GT for greater interoperability (Sony XPERIA P, Nokia N9, Huawei P2) */ + +/* RFAL Frame Delay Time (FDT) Listen default values */ +#define RFAL_FDT_LISTEN_NFCA_POLLER 1172U /*!< FDTA,LISTEN,MIN (n=9) Last bit: Logic "1" - tnn,min/2 Digital 1.1 6.10 ; EMV CCP Spec Book D v2.01 4.8.1.3 */ +#define RFAL_FDT_LISTEN_NFCB_POLLER 1008U /*!< TR0B,MIN Digital 1.1 7.1.3 & A.3 ; EMV CCP Spec Book D v2.01 4.8.1.3 & Table A.5 */ +#define RFAL_FDT_LISTEN_NFCF_POLLER 2672U /*!< TR0F,LISTEN,MIN Digital 1.1 8.7.1.1 & A.4 */ +#define RFAL_FDT_LISTEN_NFCV_POLLER 4310U /*!< FDTV,LISTEN,MIN t1 min Digital 2.1 B.5 ; ISO15693-3 2009 9.1 */ +#define RFAL_FDT_LISTEN_PICOPASS_POLLER 3400U /*!< ISO15693 t1 min - observed adjustment */ +#define RFAL_FDT_LISTEN_AP2P_POLLER 64U /*!< FDT AP2P No actual FDTListen is required as fields switch and collision avoidance */ +#define RFAL_FDT_LISTEN_NFCA_LISTENER 1172U /*!< FDTA,LISTEN,MIN Digital 1.1 6.10 */ +#define RFAL_FDT_LISTEN_NFCB_LISTENER 1024U /*!< TR0B,MIN Digital 1.1 7.1.3 & A.3 ; EMV CCP Spec Book D v2.01 4.8.1.3 & Table A.5 */ +#define RFAL_FDT_LISTEN_NFCF_LISTENER 2688U /*!< TR0F,LISTEN,MIN Digital 1.1 8.7.1.1 & A.4 */ +#define RFAL_FDT_LISTEN_AP2P_LISTENER 64U /*!< FDT AP2P No actual FDTListen exists as fields switch and collision avoidance */ + +/* RFAL Frame Delay Time (FDT) Poll default values */ +#define RFAL_FDT_POLL_NFCA_POLLER 6780U /*!< FDTA,POLL,MIN Digital 1.1 6.10.3.1 & A.2 */ +#define RFAL_FDT_POLL_NFCA_T1T_POLLER 384U /*!< RRDDT1T,MIN,B1 Digital 1.1 10.7.1 & A.5 */ +#define RFAL_FDT_POLL_NFCB_POLLER 6780U /*!< FDTB,POLL,MIN = TR2B,MIN,DEFAULT Digital 1.1 7.9.3 & A.3 ; EMVCo 3.0 FDTB,PCD,MIN Table A.5 */ +#define RFAL_FDT_POLL_NFCF_POLLER 2672U /*!< FDTF,POLL,MIN Digital 1.1 8.7.3 & A.4 */ +#define RFAL_FDT_POLL_NFCV_POLLER 4192U /*!< FDTV,POLL Digital 2.1 9.7.3.1 & B.5 */ +#define RFAL_FDT_POLL_PICOPASS_POLLER 1790U /*!< FDT Max */ +#define RFAL_FDT_POLL_AP2P_POLLER 0U /*!< FDT AP2P No actual FDTPoll exists as fields switch and collision avoidance */ + + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + +/*! RFAL modes */ +typedef enum { + RFAL_MODE_NONE = 0, /*!< No mode selected/defined */ + RFAL_MODE_POLL_NFCA = 1, /*!< Mode to perform as NFCA (ISO14443A) Poller (PCD) */ + RFAL_MODE_POLL_NFCA_T1T = 2, /*!< Mode to perform as NFCA T1T (Topaz) Poller (PCD) */ + RFAL_MODE_POLL_NFCB = 3, /*!< Mode to perform as NFCB (ISO14443B) Poller (PCD) */ + RFAL_MODE_POLL_B_PRIME = 4, /*!< Mode to perform as B' Calypso (Innovatron) (PCD) */ + RFAL_MODE_POLL_B_CTS = 5, /*!< Mode to perform as CTS Poller (PCD) */ + RFAL_MODE_POLL_NFCF = 6, /*!< Mode to perform as NFCF (FeliCa) Poller (PCD) */ + RFAL_MODE_POLL_NFCV = 7, /*!< Mode to perform as NFCV (ISO15963) Poller (PCD) */ + RFAL_MODE_POLL_PICOPASS = 8, /*!< Mode to perform as PicoPass / iClass Poller (PCD) */ + RFAL_MODE_POLL_ACTIVE_P2P = 9, /*!< Mode to perform as Active P2P (ISO18092) Initiator */ + RFAL_MODE_LISTEN_NFCA = 10, /*!< Mode to perform as NFCA (ISO14443A) Listener (PICC) */ + RFAL_MODE_LISTEN_NFCB = 11, /*!< Mode to perform as NFCA (ISO14443B) Listener (PICC) */ + RFAL_MODE_LISTEN_NFCF = 12, /*!< Mode to perform as NFCA (ISO15963) Listener (PICC) */ + RFAL_MODE_LISTEN_ACTIVE_P2P = 13 /*!< Mode to perform as Active P2P (ISO18092) Target */ +} rfalMode; + + +/*! RFAL Bit rates */ +typedef enum { + RFAL_BR_106 = 0, /*!< Bit Rate 106 kbit/s (fc/128) */ + RFAL_BR_212 = 1, /*!< Bit Rate 212 kbit/s (fc/64) */ + RFAL_BR_424 = 2, /*!< Bit Rate 424 kbit/s (fc/32) */ + RFAL_BR_848 = 3, /*!< Bit Rate 848 kbit/s (fc/16) */ + RFAL_BR_1695 = 4, /*!< Bit Rate 1695 kbit/s (fc/8) */ + RFAL_BR_3390 = 5, /*!< Bit Rate 3390 kbit/s (fc/4) */ + RFAL_BR_6780 = 6, /*!< Bit Rate 6780 kbit/s (fc/2) */ + RFAL_BR_13560 = 7, /*!< Bit Rate 13560 kbit/s (fc) */ + RFAL_BR_52p97 = 0xEB, /*!< Bit Rate 52.97 kbit/s (fc/256) Fast Mode VICC->VCD */ + RFAL_BR_26p48 = 0xEC, /*!< Bit Rate 26,48 kbit/s (fc/512) NFCV VICC->VCD & VCD->VICC 1of4 */ + RFAL_BR_1p66 = 0xED, /*!< Bit Rate 1,66 kbit/s (fc/8192) NFCV VCD->VICC 1of256 */ + RFAL_BR_KEEP = 0xFF /*!< Value indicating to keep the same previous bit rate */ +} rfalBitRate; + + +/*! RFAL Compliance modes for upper modules */ +typedef enum { + RFAL_COMPLIANCE_MODE_NFC, /*!< Perform with NFC Forum 1.1 compliance */ + RFAL_COMPLIANCE_MODE_EMV, /*!< Perform with EMVCo compliance */ + RFAL_COMPLIANCE_MODE_ISO /*!< Perform with ISO10373 compliance */ +}rfalComplianceMode; + + +/*! RFAL main states flags */ +typedef enum { + RFAL_STATE_IDLE = 0, + RFAL_STATE_INIT = 1, + RFAL_STATE_MODE_SET = 2, + + RFAL_STATE_TXRX = 3, + RFAL_STATE_LM = 4, + RFAL_STATE_WUM = 5 + +} rfalState; + +/*! RFAL transceive states */ +typedef enum { + RFAL_TXRX_STATE_IDLE = 0, + RFAL_TXRX_STATE_INIT = 1, + RFAL_TXRX_STATE_START = 2, + + RFAL_TXRX_STATE_TX_IDLE = 11, + RFAL_TXRX_STATE_TX_WAIT_GT = 12, + RFAL_TXRX_STATE_TX_WAIT_FDT = 13, + RFAL_TXRX_STATE_TX_TRANSMIT = 14, + RFAL_TXRX_STATE_TX_WAIT_WL = 15, + RFAL_TXRX_STATE_TX_RELOAD_FIFO = 16, + RFAL_TXRX_STATE_TX_WAIT_TXE = 17, + RFAL_TXRX_STATE_TX_DONE = 18, + RFAL_TXRX_STATE_TX_FAIL = 19, + + RFAL_TXRX_STATE_RX_IDLE = 81, + RFAL_TXRX_STATE_RX_WAIT_EON = 82, + RFAL_TXRX_STATE_RX_WAIT_RXS = 83, + RFAL_TXRX_STATE_RX_WAIT_RXE = 84, + RFAL_TXRX_STATE_RX_READ_FIFO = 85, + RFAL_TXRX_STATE_RX_ERR_CHECK = 86, + RFAL_TXRX_STATE_RX_READ_DATA = 87, + RFAL_TXRX_STATE_RX_WAIT_EOF = 88, + RFAL_TXRX_STATE_RX_DONE = 89, + RFAL_TXRX_STATE_RX_FAIL = 90, + +} rfalTransceiveState; + + +/*! RFAL transceive flags */ +enum { + RFAL_TXRX_FLAGS_CRC_TX_AUTO = (0U<<0), /*!< CRC will be generated automatic upon transmission */ + RFAL_TXRX_FLAGS_CRC_TX_MANUAL = (1U<<0), /*!< CRC was calculated manually, included in txBuffer */ + RFAL_TXRX_FLAGS_CRC_RX_KEEP = (1U<<1), /*!< Upon Reception keep the CRC in rxBuffer (reflected on rcvd length) */ + RFAL_TXRX_FLAGS_CRC_RX_REMV = (0U<<1), /*!< Upon Reception remove the CRC from rxBuffer */ + RFAL_TXRX_FLAGS_NFCIP1_ON = (1U<<2), /*!< Enable NFCIP1 mode: Add SB(F0) and LEN bytes during Tx and skip SB(F0) byte during Rx */ + RFAL_TXRX_FLAGS_NFCIP1_OFF = (0U<<2), /*!< Disable NFCIP1 mode: do not append protocol bytes while Tx nor skip while Rx */ + RFAL_TXRX_FLAGS_AGC_OFF = (1U<<3), /*!< Disable Automatic Gain Control, improving multiple devices collision detection */ + RFAL_TXRX_FLAGS_AGC_ON = (0U<<3), /*!< Enable Automatic Gain Control, improving single device reception */ + RFAL_TXRX_FLAGS_PAR_RX_KEEP = (1U<<4), /*!< Disable Parity and CRC check and keep the Parity and CRC bits in the received buffer */ + RFAL_TXRX_FLAGS_PAR_RX_REMV = (0U<<0), /*!< Enable Parity check and remove the parity bits from the received buffer */ + RFAL_TXRX_FLAGS_PAR_TX_NONE = (1U<<5), /*!< Disable automatic Parity generation (ISO14443A) and use the one provided in the buffer*/ + RFAL_TXRX_FLAGS_PAR_TX_AUTO = (0U<<5), /*!< Enable automatic Parity generation (ISO14443A) */ + RFAL_TXRX_FLAGS_NFCV_FLAG_MANUAL = (1U<<6), /*!< Disable automatic adaption of flag byte (ISO15693) according to current comm params */ + RFAL_TXRX_FLAGS_NFCV_FLAG_AUTO = (0U<<6), /*!< Enable automatic adaption of flag byte (ISO115693) according to current comm params */ +}; + + +/*! RFAL error handling */ +typedef enum { + RFAL_ERRORHANDLING_NONE = 0, /*!< No special error handling will be performed */ + RFAL_ERRORHANDLING_NFC = 1, /*!< Error handling set to perform as NFC complaint device */ + RFAL_ERRORHANDLING_EMVCO = 2 /*!< Error handling set to perform as EMVCo complaint device */ +} rfalEHandling; + + +/*! Struct that holds all context to be used on a Transceive */ +typedef struct { + uint8_t* txBuf; /*!< (In) Buffer where outgoing message is located */ + uint16_t txBufLen; /*!< (In) Length of the outgoing message in bits */ + + uint8_t* rxBuf; /*!< (Out) Buffer where incoming message will be placed */ + uint16_t rxBufLen; /*!< (In) Maximum length of the incoming message in bits */ + uint16_t* rxRcvdLen; /*!< (Out) Actual received length in bits */ + + uint32_t flags; /*!< (In) TransceiveFlags indication special handling */ + uint32_t fwt; /*!< (In) Frame Waiting Time in 1/fc */ +} rfalTransceiveContext; + + +/*! System callback to indicate an event that requires a system reRun */ +typedef void (* rfalUpperLayerCallback)(void); + +/*! Callback to be executed before a Transceive */ +typedef void (* rfalPreTxRxCallback)(void); + +/*! Callback to be executed after a Transceive */ +typedef void (* rfalPostTxRxCallback)(void); + + +/*******************************************************************************/ +/* ISO14443A */ +/*******************************************************************************/ + +/*! RFAL ISO 14443A Short Frame Command */ +typedef enum +{ + RFAL_14443A_SHORTFRAME_CMD_WUPA = 0x52, /*!< ISO14443A WUPA / NFC-A ALL_REQ */ + RFAL_14443A_SHORTFRAME_CMD_REQA = 0x26 /*!< ISO14443A REQA / NFC-A SENS_REQ */ +} rfal14443AShortFrameCmd; + +/*******************************************************************************/ + + +/*******************************************************************************/ +/* FeliCa */ +/*******************************************************************************/ + +#define RFAL_FELICA_LEN_LEN 1U /*!< FeliCa LEN byte length */ +#define RFAL_FELICA_POLL_REQ_LEN (RFAL_FELICA_LEN_LEN + 1U + 2U + 1U + 1U) /*!< FeliCa Poll Request length (LEN + CMD + SC + RC + TSN) */ +#define RFAL_FELICA_POLL_RES_LEN (RFAL_FELICA_LEN_LEN + 1U + 8U + 8U + 2U) /*!< Maximum FeliCa Poll Response length (LEN + CMD + NFCID2 + PAD + RD) */ +#define RFAL_FELICA_POLL_MAX_SLOTS 16U /*!< Maximum number of slots (TSN) on FeliCa Poll */ + + +/*! NFC-F RC (Request Code) codes NFC Forum Digital 1.1 Table 42 */ +enum +{ + RFAL_FELICA_POLL_RC_NO_REQUEST = 0x00, /*!< RC: No System Code information requested */ + RFAL_FELICA_POLL_RC_SYSTEM_CODE = 0x01, /*!< RC: System Code information requested */ + RFAL_FELICA_POLL_RC_COM_PERFORMANCE = 0x02 /*!< RC: Advanced protocol features supported */ +}; + + +/*! NFC-F TSN (Time Slot Number) codes NFC Forum Digital 1.1 Table 43 */ +typedef enum +{ + RFAL_FELICA_1_SLOT = 0, /*!< TSN with number of Time Slots: 1 */ + RFAL_FELICA_2_SLOTS = 1, /*!< TSN with number of Time Slots: 2 */ + RFAL_FELICA_4_SLOTS = 3, /*!< TSN with number of Time Slots: 4 */ + RFAL_FELICA_8_SLOTS = 7, /*!< TSN with number of Time Slots: 8 */ + RFAL_FELICA_16_SLOTS = 15 /*!< TSN with number of Time Slots: 16 */ +} rfalFeliCaPollSlots; + + +/*! NFCF Poll Response NFC Forum Digital 1.1 Table 44 */ +typedef uint8_t rfalFeliCaPollRes[RFAL_FELICA_POLL_RES_LEN]; + + +/*******************************************************************************/ + + +/*******************************************************************************/ +/* Listen Mode */ +/*******************************************************************************/ + +/*! RFAL Listen Mode NFCID Length */ +typedef enum +{ + RFAL_LM_NFCID_LEN_04 = 4, /*!< Listen mode indicates 4 byte NFCID */ + RFAL_LM_NFCID_LEN_07 = 7, /*!< Listen mode indicates 7 byte NFCID */ + RFAL_LM_NFCID_LEN_10 = 10, /*!< Listen mode indicates 10 byte NFCID */ +} rfalLmNfcidLen; + + +/*! RFAL Listen Mode States */ +typedef enum +{ + RFAL_LM_STATE_NOT_INIT = 0x00, /*!< Not Initialized state */ + RFAL_LM_STATE_POWER_OFF = 0x01, /*!< Power Off state */ + RFAL_LM_STATE_IDLE = 0x02, /*!< Idle state Activity 1.1 5.2 */ + RFAL_LM_STATE_READY_A = 0x03, /*!< Ready A state Activity 1.1 5.3 5.4 & 5.5 */ + RFAL_LM_STATE_READY_B = 0x04, /*!< Ready B state Activity 1.1 5.11 5.12 */ + RFAL_LM_STATE_READY_F = 0x05, /*!< Ready F state Activity 1.1 5.15 */ + RFAL_LM_STATE_ACTIVE_A = 0x06, /*!< Active A state Activity 1.1 5.6 */ + RFAL_LM_STATE_CARDEMU_4A = 0x07, /*!< Card Emulation 4A state Activity 1.1 5.10 */ + RFAL_LM_STATE_CARDEMU_4B = 0x08, /*!< Card Emulation 4B state Activity 1.1 5.14 */ + RFAL_LM_STATE_CARDEMU_3 = 0x09, /*!< Card Emulation 3 state Activity 1.1 5.18 */ + RFAL_LM_STATE_TARGET_A = 0x0A, /*!< Target A state Activity 1.1 5.9 */ + RFAL_LM_STATE_TARGET_F = 0x0B, /*!< Target F state Activity 1.1 5.17 */ + RFAL_LM_STATE_SLEEP_A = 0x0C, /*!< Sleep A state Activity 1.1 5.7 */ + RFAL_LM_STATE_SLEEP_B = 0x0D, /*!< Sleep B state Activity 1.1 5.13 */ + RFAL_LM_STATE_READY_Ax = 0x0E, /*!< Ready A* state Activity 1.1 5.3 5.4 & 5.5 */ + RFAL_LM_STATE_ACTIVE_Ax = 0x0F, /*!< Active A* state Activity 1.1 5.6 */ + RFAL_LM_STATE_SLEEP_AF = 0x10, /*!< Sleep AF state Activity 1.1 5.19 */ +} rfalLmState; + + +/*! RFAL Listen Mode Passive A configs */ +typedef struct +{ + rfalLmNfcidLen nfcidLen; /*!< NFCID Len (00: 4bytes ; 01: 7bytes) */ + uint8_t nfcid[RFAL_NFCID1_TRIPLE_LEN]; /*!< NFCID */ + uint8_t SENS_RES[RFAL_LM_SENS_RES_LEN]; /*!< NFC-106k; SENS_REQ Response */ + uint8_t SEL_RES; /*!< SEL_RES (SAK) with complete NFCID1 (UID) */ +} rfalLmConfPA; + + +/*! RFAL Listen Mode Passive B configs */ +typedef struct +{ + uint8_t SENSB_RES[RFAL_LM_SENSB_RES_LEN]; /*!< SENSF_RES */ +} rfalLmConfPB; + + +/*! RFAL Listen Mode Passive F configs */ +typedef struct +{ + uint8_t SC[RFAL_LM_SENSF_SC_LEN]; /*!< System Code to listen for */ + uint8_t SENSF_RES[RFAL_LM_SENSF_RES_LEN]; /*!< SENSF_RES */ +} rfalLmConfPF; + +/*******************************************************************************/ + + +/*******************************************************************************/ +/* Wake-Up Mode */ +/*******************************************************************************/ + +#define RFAL_WUM_REFERENCE_AUTO 0xFFU /*!< Indicates new reference is set by the driver*/ + +/*! RFAL Wake-Up Mode States */ +typedef enum +{ + RFAL_WUM_STATE_NOT_INIT = 0x00, /*!< Not Initialized state */ + RFAL_WUM_STATE_ENABLED = 0x01, /*!< Wake-Up mode is enabled */ + RFAL_WUM_STATE_ENABLED_WOKE = 0x02, /*!< Wake-Up mode enabled and has received IRQ(s)*/ +} rfalWumState; + +/*! RFAL Wake-Up Period/Timer */ +typedef enum +{ + RFAL_WUM_PERIOD_10MS = 0x00, /*!< Wake-Up timer 10ms */ + RFAL_WUM_PERIOD_20MS = 0x01, /*!< Wake-Up timer 20ms */ + RFAL_WUM_PERIOD_30MS = 0x02, /*!< Wake-Up timer 30ms */ + RFAL_WUM_PERIOD_40MS = 0x03, /*!< Wake-Up timer 40ms */ + RFAL_WUM_PERIOD_50MS = 0x04, /*!< Wake-Up timer 50ms */ + RFAL_WUM_PERIOD_60MS = 0x05, /*!< Wake-Up timer 60ms */ + RFAL_WUM_PERIOD_70MS = 0x06, /*!< Wake-Up timer 70ms */ + RFAL_WUM_PERIOD_80MS = 0x07, /*!< Wake-Up timer 80ms */ + RFAL_WUM_PERIOD_100MS = 0x10, /*!< Wake-Up timer 100ms */ + RFAL_WUM_PERIOD_200MS = 0x11, /*!< Wake-Up timer 200ms */ + RFAL_WUM_PERIOD_300MS = 0x12, /*!< Wake-Up timer 300ms */ + RFAL_WUM_PERIOD_400MS = 0x13, /*!< Wake-Up timer 400ms */ + RFAL_WUM_PERIOD_500MS = 0x14, /*!< Wake-Up timer 500ms */ + RFAL_WUM_PERIOD_600MS = 0x15, /*!< Wake-Up timer 600ms */ + RFAL_WUM_PERIOD_700MS = 0x16, /*!< Wake-Up timer 700ms */ + RFAL_WUM_PERIOD_800MS = 0x17, /*!< Wake-Up timer 800ms */ +} rfalWumPeriod; + + +/*! RFAL Wake-Up Period/Timer */ +typedef enum +{ + RFAL_WUM_AA_WEIGHT_4 = 0x00, /*!< Wake-Up Auto Average Weight 4 */ + RFAL_WUM_AA_WEIGHT_8 = 0x01, /*!< Wake-Up Auto Average Weight 8 */ + RFAL_WUM_AA_WEIGHT_16 = 0x02, /*!< Wake-Up Auto Average Weight 16 */ + RFAL_WUM_AA_WEIGHT_32 = 0x03, /*!< Wake-Up Auto Average Weight 32 */ +} rfalWumAAWeight; + + +/*! RFAL Wake-Up Mode configuration */ +typedef struct +{ + rfalWumPeriod period; /*!< Wake-Up Timer period;how often measurement(s) is performed */ + bool irqTout; /*!< IRQ at every timeout will refresh the measurement(s) */ + bool swTagDetect;/*!< Use SW Tag Detection instead of HW Wake-Up mode */ + + struct{ + bool enabled; /*!< Inductive Amplitude measurement enabled */ + uint8_t delta; /*!< Delta between the reference and measurement to wake-up */ + uint8_t reference; /*!< Reference to be used;RFAL_WUM_REFERENCE_AUTO sets it auto */ + bool autoAvg; /*!< Use the HW Auto Averaging feature */ + bool aaInclMeas; /*!< When AutoAvg is enabled, include IRQ measurement */ + rfalWumAAWeight aaWeight; /*!< When AutoAvg is enabled, last measure weight */ + }indAmp; /*!< Inductive Amplitude Configuration */ + struct{ + bool enabled; /*!< Inductive Phase measurement enabled */ + uint8_t delta; /*!< Delta between the reference and measurement to wake-up */ + uint8_t reference; /*!< Reference to be used;RFAL_WUM_REFERENCE_AUTO sets it auto */ + bool autoAvg; /*!< Use the HW Auto Averaging feature */ + bool aaInclMeas; /*!< When AutoAvg is enabled, include IRQ measurement */ + rfalWumAAWeight aaWeight; /*!< When AutoAvg is enabled, last measure weight */ + }indPha; /*!< Inductive Phase Configuration */ + struct{ + bool enabled; /*!< Capacitive measurement enabled */ + uint8_t delta; /*!< Delta between the reference and measurement to wake-up */ + uint8_t reference; /*!< Reference to be used;RFAL_WUM_REFERENCE_AUTO sets it auto */ + bool autoAvg; /*!< Use the HW Auto Averaging feature */ + bool aaInclMeas; /*!< When AutoAvg is enabled, include IRQ measurement */ + rfalWumAAWeight aaWeight; /*!< When AutoAvg is enabled, last measure weight */ + }cap; /*!< Capacitive Configuration */ +} rfalWakeUpConfig; + + +/*******************************************************************************/ + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + + +/*! + ***************************************************************************** + * \brief RFAL Initialize + * + * Initializes RFAL layer and the ST25R391x + * Ensures that ST25R391x is properly connected and returns error if any problem + * is detected + * + * \warning rfalAnalogConfigInitialize() should be called before so that + * the Analog config table has been previously initialized. + * + * \return ERR_HW_MISMATCH : Expected HW do not match or communication error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalInitialize( void ); + + +/*! + ***************************************************************************** + * \brief RFAL Calibrate + * + * Performs necessary calibration of RF chip in case it is indicated by current + * register settings. E.g. antenna calibration and regulator calibration + * + * \return ERR_WRONG_STATE : RFAL not initialized + * \return ERR_NONE : No error + * + ***************************************************************************** + */ +ReturnCode rfalCalibrate( void ); + + +/*! + ***************************************************************************** + * \brief RFAL Adjust Regulators + * + * Adjusts ST25R391x regulators + * + * \param[out] result : the result of the calibrate antenna in mV + * NULL if result not requested + * + * \return ERR_WRONG_STATE : RFAL not initialized + * \return ERR_NONE : No error + * + ***************************************************************************** + */ +ReturnCode rfalAdjustRegulators( uint16_t* result ); + + +/*! + ***************************************************************************** + * \brief RFAL Set System Callback + * + * Sets a callback for the driver to call when an event has occurred that + * may require the system to be notified + * + * \param[in] pFunc : method pointer for the upper layer callback + * + ***************************************************************************** + */ +void rfalSetUpperLayerCallback( rfalUpperLayerCallback pFunc ); + + +/*! + ***************************************************************************** + * \brief RFAL Set Pre Tx Callback + * + * Sets a callback for the driver to call before a Transceive + * + * \param[in] pFunc : method pointer for the Pre Tx callback + * + ***************************************************************************** + */ +void rfalSetPreTxRxCallback( rfalPreTxRxCallback pFunc ); + +/*! + ***************************************************************************** + * \brief RFAL Set Post Tx Callback + * + * Sets a callback for the driver to call after a Transceive + * + * \param[in] pFunc : method pointer for the Post Tx callback + * + ***************************************************************************** + */ +void rfalSetPostTxRxCallback( rfalPostTxRxCallback pFunc ); + +/*! + ***************************************************************************** + * \brief RFAL Deinitialize + * + * Deinitializes RFAL layer and the ST25R391x + * + * \return ERR_NONE : No error + * + ***************************************************************************** + */ +ReturnCode rfalDeinitialize( void ); + + +/*! + ***************************************************************************** + * \brief RFAL Set Mode + * + * Sets the mode that RFAL will operate on the following communications. + * Proper initializations will be performed on the ST25R391x + * + * \warning bit rate value RFAL_BR_KEEP is not allowed, only in rfalSetBitRate() + * + * \warning the mode will be applied immediately on the RFchip regardless of + * any ongoing operations like Transceive, ListenMode + * + * \param[in] mode : mode for the RFAL/RFchip to perform + * \param[in] txBR : transmit bit rate + * \param[in] rxBR : receive bit rate + * + * \see rfalIsGTDone + * \see rfalMode + * + * \return ERR_WRONG_STATE : RFAL not initialized + * \return ERR_PARAM : Invalid parameter + * \return ERR_NONE : No error + * + ***************************************************************************** + */ +ReturnCode rfalSetMode( rfalMode mode, rfalBitRate txBR, rfalBitRate rxBR ); + + +/*! + ***************************************************************************** + * \brief RFAL Get Mode + * + * Gets the mode that RFAL is set to operate + * + * \see rfalMode + * + * \return rfalMode : The current RFAL mode + ***************************************************************************** + */ +rfalMode rfalGetMode( void ); + + +/*! + ***************************************************************************** + * \brief RFAL Set Bit Rate + * + * Sets the Tx and Rx bit rates with the given values + * The bit rate change is applied on the RF chip remaining in the same + * mode previous defined with rfalSetMode() + * + * If no mode is defined bit rates will not be applied and an error + * is returned + * + * \param[in] txBR : transmit bit rate + * \param[in] rxBR : receive bit rate + * + * \see rfalSetMode + * \see rfalMode + * \see rfalBitRate + * + * \return ERR_WRONG_STATE : RFAL not initialized + * \return ERR_PARAM : Invalid parameter + * \return ERR_NOT_IMPLEMENTED : Mode not implemented + * \return ERR_NONE : No error + * + ***************************************************************************** + */ +ReturnCode rfalSetBitRate( rfalBitRate txBR, rfalBitRate rxBR ); + + +/*! + ***************************************************************************** + * \brief RFAL Get Bit Rate + * + * Gets the Tx and Rx current bit rates + * + * If RFAL is not initialized or mode not set the bit rates return will + * be invalid RFAL_BR_KEEP + * + * \param[out] txBR : RFAL's current Tx Bit Rate + * \param[out] rxBR : RFAL's current Rx Bit Rate + * + * \see rfalSetBitRate + * \see rfalBitRate + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalGetBitRate( rfalBitRate *txBR, rfalBitRate *rxBR ); + + +/*! + ***************************************************************************** + * \brief Set Error Handling Mode + * + * Sets the error handling mode to be used by the RFAL + * + * \param[in] eHandling : the error handling mode + * + ***************************************************************************** + */ +void rfalSetErrorHandling( rfalEHandling eHandling ); + + +/*! + ***************************************************************************** + * \brief Get Error Handling Mode + * + * Gets the error handling mode currently used by the RFAL + * + * \return rfalEHandling : Current error handling mode + ***************************************************************************** + */ +rfalEHandling rfalGetErrorHandling( void ); + + +/*! + ***************************************************************************** + * \brief Set Observation Mode + * + * Sets ST25R391x observation modes for RF debug purposes + * + * \param[in] txMode : the observation mode to be used during transmission + * \param[in] rxMode : the observation mode to be used during reception + * + * \warning The Observation Mode is an advanced feature and should be set + * according to the documentation of the part number in use. + * Please refer to the corresponding Datasheet or Application Note(s) + ***************************************************************************** + */ +void rfalSetObsvMode( uint8_t txMode, uint8_t rxMode ); + + +/*! + ***************************************************************************** + * \brief Get Observation Mode + * + * Gets ST25R391x the current configured observation modes + * + * \param[in] txMode : the current observation mode configured for transmission + * \param[in] rxMode : the current observation mode configured for reception + * + ***************************************************************************** + */ +void rfalGetObsvMode( uint8_t* txMode, uint8_t* rxMode ); + + +/*! + ***************************************************************************** + * \brief Disable Observation Mode + * + * Disables the ST25R391x observation mode + ***************************************************************************** + */ +void rfalDisableObsvMode( void ); + + +/*! + ***************************************************************************** + * \brief RFAL Set FDT Poll + * + * Sets the Frame Delay Time (FDT) to be used on the following + * communications. + * + * FDT Poll is the minimum time following a Poll Frame during + * which no subsequent Poll Frame can be sent (without a response from + * the Listener in between) + * FDTx,PP,MIN - Digital 1.1 6.10.2 & 7.9.2 & 8.7.2 + * + * \param[in] FDTPoll : Frame Delay Time in 1/fc cycles + * + ***************************************************************************** + */ +void rfalSetFDTPoll( uint32_t FDTPoll ); + + +/*! + ***************************************************************************** + * \brief RFAL Set FDT Poll + * + * Gets the current Frame Delay Time (FDT) + * + * FDT Poll is the minimum time following a Poll Frame during + * which no subsequent Poll Frame can be sent (without a response from + * the Listener in between) + * FDTx,PP,MIN - Digital 1.1 6.10.2 & 7.9.2 & 8.7.2 + * + * \return FDT : current FDT value in 1/fc cycles + * + ***************************************************************************** + */ +uint32_t rfalGetFDTPoll( void ); + + +/*! + ***************************************************************************** + * \brief RFAL Set FDT Listen + * + * Sets the Frame Delay Time (FDT) Listen minimum to be used on the + * following communications. + * + * FDT Listen is the minimum time between a Poll Frame and a Listen Frame + * FDTx,LISTEN,MIN - Digital 1.1 6.10.1 & 7.9.1 & 8.7.1 + * + * \param[in] FDTListen : Frame Delay Time in 1/fc cycles + * + ***************************************************************************** + */ +void rfalSetFDTListen( uint32_t FDTListen ); + + +/*! + ***************************************************************************** + * \brief RFAL Set FDT Listen + * + * Gets the Frame Delay Time (FDT) Listen minimum + * + * FDT Listen is the minimum time between a Poll Frame and a Listen Frame + * FDTx,LISTEN,MIN - Digital 1.1 6.10.1 & 7.9.1 & 8.7.1 + * + * \return FDT : current FDT value in 1/fc cycles + * + ***************************************************************************** + */ +uint32_t rfalGetFDTListen( void ); + + +/*! + ***************************************************************************** + * \brief RFAL Get GT + * + * Gets the current Guard Time (GT) + * + * GT is the minimum time when a device in Listen Mode is exposed to an + * unmodulated carrier + * + * \return GT : Guard Time in 1/fc cycles + * + ***************************************************************************** + */ +uint32_t rfalGetGT( void ); + + +/*! + ***************************************************************************** + * \brief RFAL Set GT + * + * Sets the Guard Time (GT) to be used on the following communications. + * + * GT is the minimum time when a device in Listen Mode is exposed to an + * unmodulated carrier + * + * \param[in] GT : Guard Time in 1/fc cycles + * RFAL_GT_NONE if no GT should be applied + * + ***************************************************************************** + */ +void rfalSetGT( uint32_t GT ); + + +/*! + ***************************************************************************** + * \brief RFAL Is GT expired + * + * Checks whether the GT timer has expired + * + * \return true : GT has expired or not running + * \return false : GT is still running + * + ***************************************************************************** + */ +bool rfalIsGTExpired( void ); + + +/*! + ***************************************************************************** + * \brief RFAL Turn Field On and Start GT + * + * Turns the Field On, performing Initial Collision Avoidance + * + * After Field On, if GT was set before, it starts the GT timer to be + * used on the following communications. + * + * \return ERR_RF_COLLISION : External field detected + * \return ERR_NONE : Field turned On + * + ***************************************************************************** + */ +ReturnCode rfalFieldOnAndStartGT( void ); + + +/*! + ***************************************************************************** + * \brief RFAL Turn Field Off + * + * Turns the Field Off + * + * \return ERR_NONE : Field turned Off + ***************************************************************************** + */ +ReturnCode rfalFieldOff( void ); + + + +/***************************************************************************** + * Transceive * + *****************************************************************************/ + +/*! + ***************************************************************************** + * \brief RFAL Set transceive context + * + * Set the context that will be used for the following Transceive + * Output and input buffers have to be passed and all other details prior to + * the Transceive itself has been started + * + * This method only sets the context, once set rfalWorker has + * to be executed until is done + * + * \param[in] ctx : the context for the following Transceive + * + * \see rfalWorker + * \see rfalGetTransceiveStatus + * + * \return ERR_NONE : Done with no error + * \return ERR_WRONG_STATE : Not initialized properly + * \return ERR_PARAM : Invalid parameter or configuration + ***************************************************************************** + */ +ReturnCode rfalStartTransceive( const rfalTransceiveContext *ctx ); + + +/*! + ***************************************************************************** + * \brief Get Transceive State + * + * Gets current Transceive internal State + * + * \return rfalTransceiveState : the current Transceive internal State + ***************************************************************************** + */ +rfalTransceiveState rfalGetTransceiveState( void ); + + +/*! + ***************************************************************************** + * \brief Get Transceive Status + * + * Gets current Transceive status + * + * \return ERR_NONE : Transceive done with no error + * \return ERR_BUSY : Transceive ongoing + * \return ERR_XXXX : Error occurred + * \return ERR_TIMEOUT : No response + * \return ERR_FRAMING : Framing error detected + * \return ERR_PAR : Parity error detected + * \return ERR_CRC : CRC error detected + * \return ERR_LINK_LOSS : Link Loss - External Field is Off + * \return ERR_RF_COLLISION : Collision detected + * \return ERR_IO : Internal error + ***************************************************************************** + */ +ReturnCode rfalGetTransceiveStatus( void ); + + +/*! + ***************************************************************************** + * \brief Is Transceive in Tx + * + * Checks if Transceive is in Transmission state + * + * \return true Transmission ongoing + * \return false Not in transmission state + ***************************************************************************** + */ +bool rfalIsTransceiveInTx( void ); + + +/*! + ***************************************************************************** + * \brief Is Transceive in Rx + * + * Checks if Transceive is in Reception state + * + * \return true Transmission done/reception ongoing + * \return false Not in reception state + ***************************************************************************** + */ +bool rfalIsTransceiveInRx( void ); + + +/*! + ***************************************************************************** + * \brief Get Transceive RSSI + * + * Gets the RSSI value of the last executed Transceive in mV + * + * \param[out] rssi : RSSI value + * + * \return ERR_NOTSUPP : Feature not supported + * \return ERR_PARAM : Invalid parameter + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalGetTransceiveRSSI( uint16_t *rssi ); + + +/*! + ***************************************************************************** + * \brief RFAL Worker + * + * This runs RFAL layer, which drives the actual Transceive procedure + * It MUST be executed frequently in order to execute the RFAL internal + * states and perform the requested operations + * + ***************************************************************************** + */ +void rfalWorker( void ); + + +/***************************************************************************** + * ISO1443A * + *****************************************************************************/ + +/*! + ***************************************************************************** + * \brief Transceives an ISO14443A ShortFrame + * + * Sends REQA to detect if there is any PICC in the field + * + * \param[in] txCmd: Command to be sent: + * 0x52 WUPA / ALL_REQ + * 0x26 REQA / SENS_REQ + * + * \param[in] txCmd : type of short frame to be sent REQA or WUPA + * \param[out] rxBuf : buffer to place the response + * \param[in] rxBufLen : length of rxBuf + * \param[out] rxRcvdLen: received length + * \param[in] fwt : Frame Waiting Time in 1/fc + * + * \warning If fwt is set to RFAL_FWT_NONE it will make endlessly for + * a response, which on a blocking method may not be the + * desired usage + * + * \return ERR_NONE if there is response + * \return ERR_TIMEOUT if there is no response + * \return ERR_COLLISION collision has occurred + * + ***************************************************************************** + */ +ReturnCode rfalISO14443ATransceiveShortFrame( rfal14443AShortFrameCmd txCmd, uint8_t* rxBuf, uint8_t rxBufLen, uint16_t* rxRcvdLen, uint32_t fwt ); + + +/*! + ***************************************************************************** + * \brief Sends an ISO14443A Anticollision Frame + * + * This is use to perform ISO14443A anti-collision. + * \note Anticollision is sent without CRC + * + * + * \param[in] buf : reference to ANTICOLLISION command (with known UID if any) to be sent (also out param) + * reception will be place on this buf after bytesToSend + * \param[in] bytesToSend: reference number of full bytes to be sent (including CMD byte and SEL_PAR) + * if a collision occurs will contain the number of clear bytes + * \param[in] bitsToSend : reference to number of bits (0-7) to be sent; and received (also out param) + * if a collision occurs will indicate the number of clear bits (also out param) + * \param[out] rxLength : reference to the return the received length + * \param[in] fwt : Frame Waiting Time in 1/fc + * + * \return ERR_NONE if there is no error + ***************************************************************************** + */ +ReturnCode rfalISO14443ATransceiveAnticollisionFrame( uint8_t *buf, uint8_t *bytesToSend, uint8_t *bitsToSend, uint16_t *rxLength, uint32_t fwt ); + + +/***************************************************************************** + * FeliCa * + *****************************************************************************/ + +/*! + ***************************************************************************** + * \brief FeliCa Poll + * + * Sends a Poll Request and collects all Poll Responses according to the + * given slots + * + * + * \param[in] slots : number of slots for the Poll Request + * \param[in] sysCode : system code (SC) for the Poll Request + * \param[in] reqCode : request code (RC) for the Poll Request + * \param[out] pollResList : list of all responses + * \param[in] pollResListSize : number of responses that can be placed in pollResList + * \param[out] devicesDetected : number of cards found + * \param[out] collisionsDetected: number of collisions detected + * + * \return ERR_NONE if there is no error + * \return ERR_TIMEOUT if there is no response + ***************************************************************************** + */ +ReturnCode rfalFeliCaPoll( rfalFeliCaPollSlots slots, uint16_t sysCode, uint8_t reqCode, rfalFeliCaPollRes* pollResList, uint8_t pollResListSize, uint8_t *devicesDetected, uint8_t *collisionsDetected ); + + +/***************************************************************************** + * ISO15693 * + *****************************************************************************/ + +/*! + ***************************************************************************** + * \brief Sends an ISO15693 Anticollision Frame + * + * This send the Anticollision|Inventory frame (INVENTORY_REQ) + * + * \warning rxBuf must be able to contain the payload and CRC + * + * \param[in] txBuf : Buffer where outgoing message is located + * \param[in] txBufLen : Length of the outgoing message in bytes + * \param[out] rxBuf : Buffer where incoming message will be placed + * \param[in] rxBufLen : Maximum length of the incoming message in bytes + * \param[out] actLen : Actual received length in bits + * + * \return ERR_NONE : Transceive done with no error + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_IO : Internal error + ***************************************************************************** + */ +ReturnCode rfalISO15693TransceiveAnticollisionFrame( uint8_t *txBuf, uint8_t txBufLen, uint8_t *rxBuf, uint8_t rxBufLen, uint16_t *actLen ); + + +/*! + ***************************************************************************** + * \brief Sends an ISO15693 Anticollision EOF + * + * This sends the Anticollision|Inventory EOF used as a slot marker + * + * \warning rxBuf must be able to contain the payload and CRC + * + * \param[out] rxBuf : Buffer where incoming message will be placed + * \param[in] rxBufLen : Maximum length of the incoming message in bytes + * \param[out] actLen : Actual received length in bits + * + * \return ERR_NONE : Transceive done with no error + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_IO : Internal error + ***************************************************************************** + */ +ReturnCode rfalISO15693TransceiveEOFAnticollision( uint8_t *rxBuf, uint8_t rxBufLen, uint16_t *actLen ); + + +/*! + ***************************************************************************** + * \brief Sends an ISO15693 EOF + * + * This is method sends an ISO15693 (EoF) used for a Write operation + * + * \warning rxBuf must be able to contain the payload and CRC + * + * \param[out] rxBuf : Buffer where incoming message will be placed + * \param[in] rxBufLen : Maximum length of the incoming message in bytes + * \param[out] actLen : Actual received length in bytes + * + * \return ERR_NONE : Transceive done with no error + * \return ERR_IO : Internal error + ***************************************************************************** + */ +ReturnCode rfalISO15693TransceiveEOF( uint8_t *rxBuf, uint8_t rxBufLen, uint16_t *actLen ); + + +/*! + ***************************************************************************** + * \brief Transceive Blocking Tx + * + * This is method triggers a Transceive and executes it blocking until the + * Tx has been completed + * + * \param[in] txBuf : Buffer where outgoing message is located + * \param[in] txBufLen : Length of the outgoing message in bytes + * \param[out] rxBuf : Buffer where incoming message will be placed + * \param[in] rxBufLen : Maximum length of the incoming message in bytes + * \param[out] actLen : Actual received length in bits + * \param[in] flags : TransceiveFlags indication special handling + * \param[in] fwt : Frame Waiting Time in 1/fc + * + * \return ERR_NONE : Transceive done with no error + * \return ERR_BUSY : Transceive ongoing + * \return ERR_XXXX : Error occurred + * \return ERR_LINK_LOSS : Link Loss - External Field is Off + * \return ERR_RF_COLLISION : Collision detected + * \return ERR_IO : Internal error + ***************************************************************************** + */ +ReturnCode rfalTransceiveBlockingTx( uint8_t* txBuf, uint16_t txBufLen, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t* actLen, uint32_t flags, uint32_t fwt ); + +/*! + ***************************************************************************** + * \brief Transceive Blocking Rx + * + * This is method executes the reception of an ongoing Transceive triggered + * before by rfalTransceiveBlockingTx() + * + * \return ERR_NONE : Transceive done with no error + * \return ERR_BUSY : Transceive ongoing + * \return ERR_XXXX : Error occurred + * \return ERR_TIMEOUT : No response + * \return ERR_FRAMING : Framing error detected + * \return ERR_PAR : Parity error detected + * \return ERR_CRC : CRC error detected + * \return ERR_LINK_LOSS : Link Loss - External Field is Off + * \return ERR_RF_COLLISION : Collision detected + * \return ERR_IO : Internal error + ***************************************************************************** + */ +ReturnCode rfalTransceiveBlockingRx( void ); + +/*! + ***************************************************************************** + * \brief Transceive Blocking + * + * This is method triggers a Transceive and executes it blocking until it + * has been completed + * + * \param[in] txBuf : Buffer where outgoing message is located + * \param[in] txBufLen : Length of the outgoing message in bytes + * \param[out] rxBuf : Buffer where incoming message will be placed + * \param[in] rxBufLen : Maximum length of the incoming message in bytes + * \param[out] actLen : Actual received length in bytes + * \param[in] flags : TransceiveFlags indication special handling + * \param[in] fwt : Frame Waiting Time in 1/fc + * + * \return ERR_NONE : Transceive done with no error + * \return ERR_BUSY : Transceive ongoing + * \return ERR_XXXX : Error occurred + * \return ERR_TIMEOUT : No response + * \return ERR_FRAMING : Framing error detected + * \return ERR_PAR : Parity error detected + * \return ERR_CRC : CRC error detected + * \return ERR_LINK_LOSS : Link Loss - External Field is Off + * \return ERR_RF_COLLISION : Collision detected + * \return ERR_IO : Internal error + ***************************************************************************** + */ +ReturnCode rfalTransceiveBlockingTxRx( uint8_t* txBuf, uint16_t txBufLen, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t* actLen, uint32_t flags, uint32_t fwt ); + + + +/***************************************************************************** + * Listen Mode * + *****************************************************************************/ + +/*! + ***************************************************************************** + * \brief Is external Field On + * + * Checks if external field (other peer/device) is on/detected + * + * \return true External field is On + * \return false No external field is detected + * + ***************************************************************************** + */ +bool rfalIsExtFieldOn( void ); + + +/*! + ***************************************************************************** + * \brief Listen Mode start + * + * Configures RF Chip to go into listen mode enabling the given technologies + * + * + * \param[in] lmMask: mask with the enabled/disabled listen modes + * use: RFAL_LM_MASK_NFCA ; RFAL_LM_MASK_NFCB ; + * RFAL_LM_MASK_NFCF ; RFAL_LM_MASK_ACTIVE_P2P + * \param[in] confA: pointer to Passive A configurations (NULL if disabled) + * \param[in] confB: pointer to Passive B configurations (NULL if disabled) + * \param[in] confF: pointer to Passive F configurations (NULL if disabled) + * \param[in] rxBuf: buffer to place incoming data + * \param[in] rxBufLen: length in bits of rxBuf + * \param[in] rxLen: pointer to write the data length in bits placed into rxBuf + * + * + * \return ERR_PARAM Invalid parameter + * \return ERR_REQUEST Invalid listen mode mask + * \return ERR_NONE Done with no error + * + ***************************************************************************** + */ +ReturnCode rfalListenStart( uint32_t lmMask, const rfalLmConfPA *confA, const rfalLmConfPB *confB, const rfalLmConfPF *confF, uint8_t *rxBuf, uint16_t rxBufLen, uint16_t *rxLen ); + + +/*! + ***************************************************************************** + * \brief Listen Mode start Sleeping + * + * + ***************************************************************************** + */ +ReturnCode rfalListenSleepStart( rfalLmState sleepSt, uint8_t *rxBuf, uint16_t rxBufLen, uint16_t *rxLen ); + + +/*! + ***************************************************************************** + * \brief Listen Mode Stop + * + * Disables the listen mode on the RF Chip + * + * \warning the listen mode will be disabled immediately on the RFchip regardless + * of any ongoing operations like Transceive + * + * \return ERR_NONE Done with no error + * + ***************************************************************************** + */ +ReturnCode rfalListenStop( void ); + + +/*! + ***************************************************************************** + * \brief Listen Mode get state + * + * Sets the new state of the Listen Mode and applies the necessary changes + * on the RF Chip + * + * \param[out] dataFlag: indicates that Listen Mode has rcvd data and caller + * must process it. The received message is located + * at the rxBuf passed on rfalListenStart(). + * rfalListenSetState() will clear this flag + * if NULL output parameter will no be written/returned + * \param[out] lastBR: bit rate detected of the last initiator request + * if NULL output parameter will no be written/returned + * + * \return rfalLmState RFAL_LM_STATE_NOT_INIT : LM not initialized properly + * Any Other : LM State + * + ***************************************************************************** + */ +rfalLmState rfalListenGetState( bool *dataFlag, rfalBitRate *lastBR ); + + +/*! + ***************************************************************************** + * \brief Listen Mode set state + * + * Sets the new state of the Listen Mode and applies the necessary changes + * on the RF Chip + * + * \param[in] newSt : New state to go to + * + * \return ERR_WRONG_STATE : Not initialized properly + * \return ERR_PARAM : Invalid parameter + * \return ERR_NONE : Done with no error + * + ***************************************************************************** + */ +ReturnCode rfalListenSetState( rfalLmState newSt ); + + +/***************************************************************************** + * Wake-Up Mode * + *****************************************************************************/ + +/*! + ***************************************************************************** + * \brief Wake-Up Mode Start + * + * Sets the RF Chip in Low Power Wake-Up Mode according to the given + * configuration. + * + * \param[in] config : Generic Wake-Up configuration provided by lower + * layers. If NULL will automatically configure the + * Wake-Up mode + * + * \return ERR_WRONG_STATE : Not initialized properly + * \return ERR_PARAM : Invalid parameter + * \return ERR_NONE : Done with no error + * + ***************************************************************************** + */ +ReturnCode rfalWakeUpModeStart( const rfalWakeUpConfig *config ); + + +/*! + ***************************************************************************** + * \brief Wake-Up Has Woke + * + * Returns true if the Wake-Up mode is enabled and it has already received + * the indication from the RF Chip that the surrounding environment has changed + * and flagged at least one wake-Up interrupt + * + * \return true : Wake-Up mode enabled and has received a wake-up IRQ + * \return false : no Wake-Up IRQ has been received + * + ***************************************************************************** + */ +bool rfalWakeUpModeHasWoke( void ); + + +/*! + ***************************************************************************** + * \brief Wake-Up Mode Stop + * + * Stops the Wake-Up Mode + * + * \return ERR_WRONG_STATE : Not initialized properly + * \return ERR_PARAM : Invalid parameter + * \return ERR_NONE : Done with no error + * + ***************************************************************************** + */ +ReturnCode rfalWakeUpModeStop( void ); + + +#endif /* RFAL_RF_H */ + + +/** + * @} + * + * @} + * + * @} + */ diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_st25tb.h b/Software/Middlewares/ST/rfal/Inc/rfal_st25tb.h new file mode 100644 index 0000000..12a18a8 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_st25tb.h @@ -0,0 +1,355 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_st25tb.h + * + * \author Gustavo Patricio + * + * \brief Implementation of ST25TB interface + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-AL + * \brief RFAL Abstraction Layer + * @{ + * + * \addtogroup ST25TB + * \brief RFAL ST25TB Module + * @{ + * + */ + + +#ifndef RFAL_ST25TB_H +#define RFAL_ST25TB_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_rf.h" +#include "rfal_nfcb.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define RFAL_ST25TB_CHIP_ID_LEN 1U /*!< ST25TB chip ID length */ +#define RFAL_ST25TB_CRC_LEN 2U /*!< ST25TB CRC length */ +#define RFAL_ST25TB_UID_LEN 8U /*!< ST25TB Unique ID length */ +#define RFAL_ST25TB_BLOCK_LEN 4U /*!< ST25TB Data Block length */ + +/* +****************************************************************************** +* GLOBAL MACROS +****************************************************************************** +*/ + + + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ +typedef uint8_t rfalSt25tbUID[RFAL_ST25TB_UID_LEN]; /*!< ST25TB UID type */ +typedef uint8_t rfalSt25tbBlock[RFAL_ST25TB_BLOCK_LEN]; /*!< ST25TB Block type */ + + +/*! ST25TB listener device (PICC) struct */ +typedef struct +{ + uint8_t chipID; /*!< Device's session Chip ID */ + rfalSt25tbUID UID; /*!< Device's UID */ + bool isDeselected; /*!< Device deselect flag */ +}rfalSt25tbListenDevice; + + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +/*! + ***************************************************************************** + * \brief Initialize ST25TB Poller mode + * + * This methods configures RFAL RF layer to perform as a + * ST25TB Poller/RW including all default timings + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalSt25tbPollerInitialize( void ); + + +/*! + ***************************************************************************** + * \brief ST25TB Poller Check Presence + * + * This method checks if a ST25TB Listen device (PICC) is present on the field + * by sending an Initiate command + * + * \param[out] chipId : if successfully retrieved, the device's chip ID + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_RF_COLLISION : Collision detected one or more device in the field + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalSt25tbPollerCheckPresence( uint8_t *chipId ); + + +/*! + ***************************************************************************** + * \brief ST25TB Poller Collision Resolution + * + * This method performs ST25TB Collision resolution, selects the each device, + * retrieves its UID and then deselects. + * In case only one device is identified the ST25TB device is left in select + * state. + * + * \param[in] devLimit : device limit value, and size st25tbDevList + * \param[out] st25tbDevList : ST35TB listener device info + * \param[out] devCnt : Devices found counter + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_RF_COLLISION : Collision detected one or more device in the field + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalSt25tbPollerCollisionResolution( uint8_t devLimit, rfalSt25tbListenDevice *st25tbDevList, uint8_t *devCnt ); + +/*! + ***************************************************************************** + * \brief ST25TB Poller Initiate + * + * This method sends an Initiate command + * + * If a single device responds the chip ID will be retrieved + * + * \param[out] chipId : chip ID of the device + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalSt25tbPollerInitiate( uint8_t *chipId ); + + +/*! + ***************************************************************************** + * \brief ST25TB Poller Pcall + * + * This method sends a Pcall command + * If successful the device's chip ID will be retrieved + * + * \param[out] chipId : Chip ID of the device + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalSt25tbPollerPcall( uint8_t *chipId ); + + +/*! + ***************************************************************************** + * \brief ST25TB Poller Slot Marker + * + * This method sends a Slot Marker + * + * If a single device responds the chip ID will be retrieved + * + * \param[in] slotNum : Slot Number + * \param[out] chipIdRes : Chip ID of the device + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalSt25tbPollerSlotMarker( uint8_t slotNum, uint8_t *chipIdRes ); + + +/*! + ***************************************************************************** + * \brief ST25TB Poller Select + * + * This method sends a ST25TB Select command with the given chip ID. + * + * If the device is already in Selected state and receives an incorrect chip + * ID, it goes into Deselected state + * + * \param[in] chipId : chip ID of the device to be selected + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalSt25tbPollerSelect( uint8_t chipId ); + + +/*! + ***************************************************************************** + * \brief ST25TB Get UID + * + * This method sends a Get_UID command + * + * If a single device responds the chip UID will be retrieved + * + * \param[out] UID : UID of the found device + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalSt25tbPollerGetUID( rfalSt25tbUID *UID ); + + +/*! + ***************************************************************************** + * \brief ST25TB Poller Read Block + * + * This method reads a block of the ST25TB + * + * \param[in] blockAddress : address of the block to be read + * \param[out] blockData : location to place the data read from block + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalSt25tbPollerReadBlock( uint8_t blockAddress, rfalSt25tbBlock *blockData ); + + +/*! + ***************************************************************************** + * \brief ST25TB Poller Write Block + * + * This method writes a block of the ST25TB + * + * \param[in] blockAddress : address of the block to be written + * \param[in] blockData : data to be written on the block + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalSt25tbPollerWriteBlock( uint8_t blockAddress, const rfalSt25tbBlock *blockData ); + + +/*! + ***************************************************************************** + * \brief ST25TB Poller Completion + * + * This method sends a completion command to the ST25TB. After the + * completion the card no longer will reply to any command. + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_PROTO : Protocol error detected, invalid SENSB_RES received + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalSt25tbPollerCompletion( void ); + + +/*! + ***************************************************************************** + * \brief ST25TB Poller Reset to Inventory + * + * This method sends a Reset to Inventory command to the ST25TB. + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_TIMEOUT : Timeout error, no listener device detected + * \return ERR_PROTO : Protocol error detected, invalid SENSB_RES received + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalSt25tbPollerResetToInventory( void ); + + +#endif /* RFAL_ST25TB_H */ + +/** + * @} + * + * @} + * + * @} + */ + diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_st25xv.h b/Software/Middlewares/ST/rfal/Inc/rfal_st25xv.h new file mode 100644 index 0000000..0927e0a --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_st25xv.h @@ -0,0 +1,729 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_st25xv.h + * + * \author Gustavo Patricio + * + * \brief NFC-V ST25 NFC-V Tag specific features + * + * This module provides support for ST's specific features available on + * NFC-V (ISO15693) tag families: ST25D, ST25TV, M24LR + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-AL + * \brief RFAL Abstraction Layer + * @{ + * + * \addtogroup ST25xV + * \brief RFAL ST25xV Module + * @{ + * + */ + +#ifndef RFAL_ST25xV_H +#define RFAL_ST25xV_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_nfc.h" +#include "rfal_rf.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + + +#define RFAL_NFCV_BLOCKNUM_M24LR_LEN 2U /*!< Block Number length of MR24LR tags: 16 bits */ +#define RFAL_NFCV_ST_IC_MFG_CODE 0x02 /*!< ST IC Mfg code (used for custom commands) */ + +/*! + ***************************************************************************** + * \brief NFC-V Poller Read Single Block (M24LR) + * + * Reads a Single Block from a M24LR tag which has the number of blocks + * bigger than 256 (M24LR16 ; M24LR64) + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * default: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] blockNum : Number of the block to read (16 bits) + * \param[out] rxBuf : buffer to store response (also with RES_FLAGS) + * \param[in] rxBufLen : length of rxBuf + * \param[out] rcvLen : number of bytes received + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerM24LRReadSingleBlock( uint8_t flags, const uint8_t* uid, uint16_t blockNum, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Fast Read Single Block (M24LR) + * + * Reads a Single Block from a M24LR tag which has the number of blocks + * bigger than 256 (M24LR16 ; M24LR64) using ST Fast mode + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * default: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] blockNum : Number of the block to read (16 bits) + * \param[out] rxBuf : buffer to store response (also with RES_FLAGS) + * \param[in] rxBufLen : length of rxBuf + * \param[out] rcvLen : number of bytes received + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerM24LRFastReadSingleBlock( uint8_t flags, const uint8_t* uid, uint16_t blockNum, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Write Single Block (M24LR) + * + * Writes a Single Block from a M24LR tag which has the number of blocks + * bigger than 256 (M24LR16 ; M24LR64) + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be written + * if not provided Select mode will be used + * \param[in] blockNum : Number of the block to write (16 bits) + * \param[in] wrData : data to be written on the given block + * \param[in] blockLen : number of bytes of a block + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerM24LRWriteSingleBlock( uint8_t flags, const uint8_t* uid, uint16_t blockNum, const uint8_t* wrData, uint8_t blockLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Read Multiple Blocks (M24LR) + * + * Reads Multiple Blocks from a device from a M24LR tag which has the number of blocks + * bigger than 256 (M24LR16 ; M24LR64) + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] firstBlockNum : first block to be read (16 bits) + * \param[in] numOfBlocks : number of block to read + * \param[out] rxBuf : buffer to store response (also with RES_FLAGS) + * \param[in] rxBufLen : length of rxBuf + * \param[out] rcvLen : number of bytes received + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerM24LRReadMultipleBlocks( uint8_t flags, const uint8_t* uid, uint16_t firstBlockNum, uint8_t numOfBlocks, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ); + + +/*! + ***************************************************************************** + * \brief NFC-V Poller Fast Read Multiple Blocks (M24LR) + * + * Reads Multiple Blocks from a device from a M24LR tag which has the number of blocks + * bigger than 256 (M24LR16 ; M24LR64) using ST Fast mode + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] firstBlockNum : first block to be read (16 bits) + * \param[in] numOfBlocks : number of block to read + * \param[out] rxBuf : buffer to store response (also with RES_FLAGS) + * \param[in] rxBufLen : length of rxBuf + * \param[out] rcvLen : number of bytes received + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerM24LRFastReadMultipleBlocks( uint8_t flags, const uint8_t* uid, uint16_t firstBlockNum, uint8_t numOfBlocks, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Fast Read Single Block + * + * Reads a Single Block from a device (VICC) using ST Fast mode + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] blockNum : Number of the block to read + * \param[out] rxBuf : buffer to store response (also with RES_FLAGS) + * \param[in] rxBufLen : length of rxBuf + * \param[out] rcvLen : number of bytes received + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerFastReadSingleBlock( uint8_t flags, const uint8_t* uid, uint8_t blockNum, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Fast Read Multiple Blocks + * + * Reads Multiple Blocks from a device (VICC) using ST Fast mode + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] firstBlockNum : first block to be read + * \param[in] numOfBlocks : number of block to read + * \param[out] rxBuf : buffer to store response (also with RES_FLAGS) + * \param[in] rxBufLen : length of rxBuf + * \param[out] rcvLen : number of bytes received + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerFastReadMultipleBlocks( uint8_t flags, const uint8_t* uid, uint8_t firstBlockNum, uint8_t numOfBlocks, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Fast Extended Read Single Block + * + * Reads a Single Block from a device (VICC) supporting extended commands using ST Fast mode + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] blockNum : Number of the block to read (16 bits) + * \param[out] rxBuf : buffer to store response (also with RES_FLAGS) + * \param[in] rxBufLen : length of rxBuf + * \param[out] rcvLen : number of bytes received + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerFastExtendedReadSingleBlock( uint8_t flags, const uint8_t* uid, uint16_t blockNum, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Fast Extended Read Multiple Blocks + * + * Reads Multiple Blocks from a device (VICC) supporting extended commands using ST Fast mode + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] firstBlockNum : first block to be read (16 bits) + * \param[in] numOfBlocks : number of consecutive blocks to read (16 bits) + * \param[out] rxBuf : buffer to store response (also with RES_FLAGS) + * \param[in] rxBufLen : length of rxBuf + * \param[out] rcvLen : number of bytes received + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerFastExtReadMultipleBlocks( uint8_t flags, const uint8_t* uid, uint16_t firstBlockNum, uint16_t numOfBlocks, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Read Configuration + * + * Reads static configuration registers at the Pointer address + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] pointer : Pointer address + * \param[out] regValue : Register value + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerReadConfiguration( uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t* regValue ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Write Configuration + * + * Writes static configuration registers at the Pointer address + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] pointer : Pointer address + * \param[in] regValue : Register value + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerWriteConfiguration( uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t regValue ); + + +/*! + ***************************************************************************** + * \brief NFC-V Poller Read Dynamic Configuration + * + * Reads dynamic registers at the Pointer address + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] pointer : Pointer address + * \param[out] regValue : Register value + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerReadDynamicConfiguration( uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t* regValue ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Write Dynamic Configuration + * + * Writes dynamic registers at the Pointer address + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] pointer : Pointer address + * \param[in] regValue : Register value + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerWriteDynamicConfiguration( uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t regValue ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Fast Read Dynamic Configuration + * + * Reads dynamic registers at the Pointer address using ST Fast mode + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] pointer : Pointer address + * \param[out] regValue : Register value + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerFastReadDynamicConfiguration( uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t* regValue ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Fast Write Dynamic Configuration + * + * Writes dynamic registers at the Pointer address using ST Fast mode + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] pointer : Pointer address + * \param[in] regValue : Register value + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerFastWriteDynamicConfiguration( uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t regValue ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Present Password + * + * Sends the Present Password command + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] pwdNum : Password number + * \param[in] pwd : Password + * \param[in] pwdLen : Password length + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerPresentPassword( uint8_t flags, const uint8_t* uid, uint8_t pwdNum, const uint8_t* pwd, uint8_t pwdLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Get Random Number + * + * Returns a 16 bit random number + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[out] rxBuf : buffer to store response (also with RES_FLAGS) + * \param[in] rxBufLen : length of rxBuf + * \param[out] rcvLen : number of bytes received + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerGetRandomNumber( uint8_t flags, const uint8_t* uid, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Read Message length + * + * Sends a Read Message Length message to retrieve the value of MB_LEN_Dyn + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[out] msgLen : Message Length + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerReadMessageLength( uint8_t flags, const uint8_t* uid, uint8_t* msgLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Fast Read Message length + * + * Sends a Fast Read Message Length message to retrieve the value of MB_LEN_Dyn using ST Fast mode. + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[out] msgLen : Message Length + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerFastReadMsgLength( uint8_t flags, const uint8_t* uid, uint8_t* msgLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Read Message + * + * Reads up to 256 bytes in the Mailbox from the location + * specified by MBpointer and sends back their value in the rxBuf response. + * First MailBox location is '00'. When Number of bytes is set to 00h + * and MBPointer is equals to 00h, the MB_LEN bytes of the full message + * are returned. Otherwise, Read Message command returns (Number of Bytes + 1) bytes + * (i.e. 01h returns 2 bytes, FFh returns 256 bytes). + * An error is reported if (Pointer + Nb of bytes + 1) is greater than the message length. + * RF Reading of the last byte of the mailbox message automatically clears b1 + * of MB_CTRL_Dyn HOST_PUT_MSG, and allows RF to put a new message. + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] mbPointer : MPpointer + * \param[in] numBytes : number of bytes + * \param[out] rxBuf : buffer to store response (also with RES_FLAGS) + * \param[in] rxBufLen : length of rxBuf + * \param[out] rcvLen : number of bytes received + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerReadMessage( uint8_t flags, const uint8_t* uid, uint8_t mbPointer, uint8_t numBytes, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Fast Read Message + * + * Reads up to 256 bytes in the Mailbox from the location + * specified by MBpointer and sends back their value in the rxBuf response using ST Fast mode. + * First MailBox location is '00'. When Number of bytes is set to 00h + * and MBPointer is equals to 00h, the MB_LEN bytes of the full message + * are returned. Otherwise, Read Message command returns (Number of Bytes + 1) bytes + * (i.e. 01h returns 2 bytes, FFh returns 256 bytes). + * An error is reported if (Pointer + Nb of bytes + 1) is greater than the message length. + * RF Reading of the last byte of the mailbox message automatically clears b1 + * of MB_CTRL_Dyn HOST_PUT_MSG, and allows RF to put a new message. + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] mbPointer : MPpointer + * \param[in] numBytes : number of bytes + * \param[out] rxBuf : buffer to store response (also with RES_FLAGS) + * \param[in] rxBufLen : length of rxBuf + * \param[out] rcvLen : number of bytes received + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerFastReadMessage( uint8_t flags, const uint8_t* uid, uint8_t mbPointer, uint8_t numBytes, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Write Message + * + * Sends Write message Command + * + * On receiving the Write Message command, the ST25DVxxx puts the data contained + * in the request into the Mailbox buffer, update the MB_LEN_Dyn register, and + * set bit RF_PUT_MSG in MB_CTRL_Dyn register. It then reports if the write operation was successful + * in the response. The ST25DVxxx Mailbox contains up to 256 data bytes which are filled from the + * first location '00'. MSGlength parameter of the command is the number of + * Data bytes minus 1 (00 for 1 byte of data, FFh for 256 bytes of data). + * Write Message could be executed only when Mailbox is accessible by RF. + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] msgLen : MSGLen number of Data bytes minus 1 + * \param[in] msgData : Message Data + * \param[out] txBuf : buffer to used to build the Write Message command + * \param[in] txBufLen : length of txBuf + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerWriteMessage( uint8_t flags, const uint8_t* uid, uint8_t msgLen, const uint8_t* msgData, uint8_t* txBuf, uint16_t txBufLen ); + +/*! + ***************************************************************************** + * \brief NFC-V Poller Fast Write Message + * + * Sends Fast Write message Command using ST Fast mode + * + * On receiving the Write Message command, the ST25DVxxx puts the data contained + * in the request into the Mailbox buffer, update the MB_LEN_Dyn register, and + * set bit RF_PUT_MSG in MB_CTRL_Dyn register. It then reports if the write operation was successful + * in the response. The ST25DVxxx Mailbox contains up to 256 data bytes which are filled from the + * first location '00'. MSGlength parameter of the command is the number of + * Data bytes minus 1 (00 for 1 byte of data, FFh for 256 bytes of data). + * Write Message could be executed only when Mailbox is accessible by RF. + * + * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option + * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT + * \param[in] uid : UID of the device to be put to be read + * if not provided Select mode will be used + * \param[in] msgLen : MSGLen number of Data bytes minus 1 + * \param[in] msgData : Message Data + * \param[out] txBuf : buffer to used to build the Write Message command + * \param[in] txBufLen : length of txBuf + * + * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode + * \return ERR_PARAM : Invalid parameters + * \return ERR_IO : Generic internal error + * \return ERR_CRC : CRC error detected + * \return ERR_FRAMING : Framing error detected + * \return ERR_PROTO : Protocol error detected + * \return ERR_TIMEOUT : Timeout error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalST25xVPollerFastWriteMessage( uint8_t flags, const uint8_t* uid, uint8_t msgLen, const uint8_t* msgData, uint8_t* txBuf, uint16_t txBufLen ); + +#endif /* RFAL_ST25xV_H */ + +/** + * @} + * + * @} + * + * @} + */ + diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_t1t.h b/Software/Middlewares/ST/rfal/Inc/rfal_t1t.h new file mode 100644 index 0000000..0f619f9 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_t1t.h @@ -0,0 +1,187 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_t1t.h + * + * \author Gustavo Patricio + * + * \brief Provides NFC-A T1T convenience methods and definitions + * + * This module provides an interface to perform as a NFC-A Reader/Writer + * to handle a Type 1 Tag T1T (Topaz) + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-AL + * \brief RFAL Abstraction Layer + * @{ + * + * \addtogroup T1T + * \brief RFAL T1T Module + * @{ + * + */ + + +#ifndef RFAL_T1T_H +#define RFAL_T1T_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_rf.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ +#define RFAL_T1T_UID_LEN 4 /*!< T1T UID length of cascade level 1 only tag */ +#define RFAL_T1T_HR_LENGTH 2 /*!< T1T HR(Header ROM) length */ + +#define RFAL_T1T_HR0_NDEF_MASK 0xF0 /*!< T1T HR0 NDEF capability mask T1T 1.2 2.2.2 */ +#define RFAL_T1T_HR0_NDEF_SUPPORT 0x10 /*!< T1T HR0 NDEF capable value T1T 1.2 2.2.2 */ + + +/*! NFC-A T1T (Topaz) command set */ +typedef enum +{ + RFAL_T1T_CMD_RID = 0x78, /*!< T1T Read UID */ + RFAL_T1T_CMD_RALL = 0x00, /*!< T1T Read All */ + RFAL_T1T_CMD_READ = 0x01, /*!< T1T Read */ + RFAL_T1T_CMD_WRITE_E = 0x53, /*!< T1T Write with erase (single byte) */ + RFAL_T1T_CMD_WRITE_NE = 0x1A /*!< T1T Write with no erase (single byte) */ +} rfalT1Tcmds; + + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + + +/*! NFC-A T1T (Topaz) RID_RES Digital 1.1 10.6.2 & Table 50 */ +typedef struct +{ + uint8_t hr0; /*!< T1T Header ROM: HR0 */ + uint8_t hr1; /*!< T1T Header ROM: HR1 */ + uint8_t uid[RFAL_T1T_UID_LEN]; /*!< T1T UID */ +} rfalT1TRidRes; + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + + +/*! + ***************************************************************************** + * \brief Initialize NFC-A T1T Poller mode + * + * This methods configures RFAL RF layer to perform as a + * NFC-A T1T Poller/RW (Topaz) including all default timings + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT1TPollerInitialize( void ); + + +/*! + ***************************************************************************** + * \brief NFC-A T1T Poller RID + * + * This method reads the UID of a NFC-A T1T Listener device + * + * + * \param[out] ridRes : pointer to place the RID_RES + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameter + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT1TPollerRid( rfalT1TRidRes *ridRes ); + + +/*! + ***************************************************************************** + * \brief NFC-A T1T Poller RALL + * + * This method send a Read All command to a NFC-A T1T Listener device + * + * + * \param[in] uid : the UID of the device to read data + * \param[out] rxBuf : pointer to place the read data + * \param[in] rxBufLen : size of rxBuf + * \param[out] rxRcvdLen : actual received data + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameter + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT1TPollerRall( const uint8_t* uid, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rxRcvdLen ); + + +/*! + ***************************************************************************** + * \brief NFC-A T1T Poller Write + * + * This method writes the given data on the address of a NFC-A T1T Listener device + * + * + * \param[in] uid : the UID of the device to read data + * \param[in] address : address to write the data + * \param[in] data : the data to be written + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameter + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT1TPollerWrite( const uint8_t* uid, uint8_t address, uint8_t data ); + +#endif /* RFAL_T1T_H */ + +/** + * @} + * + * @} + * + * @} + */ diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_t2t.h b/Software/Middlewares/ST/rfal/Inc/rfal_t2t.h new file mode 100644 index 0000000..c153a89 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_t2t.h @@ -0,0 +1,153 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_t2t.h + * + * \author Gustavo Patricio + * + * \brief Provides NFC-A T2T convenience methods and definitions + * + * This module provides an interface to perform as a NFC-A Reader/Writer + * to handle a Type 2 Tag T2T + * + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-AL + * \brief RFAL Abstraction Layer + * @{ + * + * \addtogroup T2T + * \brief RFAL T2T Module + * @{ + * + */ + + +#ifndef RFAL_T2T_H +#define RFAL_T2T_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_rf.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define RFAL_T2T_BLOCK_LEN 4U /*!< T2T block length */ +#define RFAL_T2T_READ_DATA_LEN (4U * RFAL_T2T_BLOCK_LEN) /*!< T2T READ data length */ +#define RFAL_T2T_WRITE_DATA_LEN RFAL_T2T_BLOCK_LEN /*!< T2T WRITE data length */ + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +/*! + ***************************************************************************** + * \brief NFC-A T2T Poller Read + * + * This method sends a Read command to a NFC-A T2T Listener device + * + * + * \param[in] blockNum : Number of the block to read + * \param[out] rxBuf : pointer to place the read data + * \param[in] rxBufLen : size of rxBuf (RFAL_T2T_READ_DATA_LEN) + * \param[out] rcvLen : actual received data + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT2TPollerRead( uint8_t blockNum, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ); + + +/*! + ***************************************************************************** + * \brief NFC-A T2T Poller Write + * + * This method sends a Write command to a NFC-A T2T Listener device + * + * + * \param[in] blockNum : Number of the block to write + * \param[in] wrData : data to be written on the given block + * size must be of RFAL_T2T_WRITE_DATA_LEN + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT2TPollerWrite( uint8_t blockNum, const uint8_t* wrData ); + + +/*! + ***************************************************************************** + * \brief NFC-A T2T Poller Sector Select + * + * This method sends a Sector Select commands to a NFC-A T2T Listener device + * + * \param[in] sectorNum : Sector Number + * + * \return ERR_WRONG_STATE : RFAL not initialized or mode not set + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ + ReturnCode rfalT2TPollerSectorSelect( uint8_t sectorNum ); + +#endif /* RFAL_T2T_H */ + +/** + * @} + * + * @} + * + * @} + */ diff --git a/Software/Middlewares/ST/rfal/Inc/rfal_t4t.h b/Software/Middlewares/ST/rfal/Inc/rfal_t4t.h new file mode 100644 index 0000000..0b49339 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Inc/rfal_t4t.h @@ -0,0 +1,365 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_t4t.h + * + * \author Gustavo Patricio + * + * \brief Provides convenience methods and definitions for T4T (ISO7816-4) + * + * This module provides an interface to exchange T4T APDUs according to + * NFC Forum T4T and ISO7816-4 + * + * This implementation was based on the following specs: + * - ISO/IEC 7816-4 3rd Edition 2013-04-15 + * - NFC Forum T4T Technical Specification 1.0 2017-08-28 + * + * \addtogroup RFAL + * @{ + * + * \addtogroup RFAL-AL + * \brief RFAL Abstraction Layer + * @{ + * + * \addtogroup T4T + * \brief RFAL T4T Module + * @{ + * + */ + + +#ifndef RFAL_T4T_H +#define RFAL_T4T_H + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "platform.h" +#include "st_errno.h" +#include "rfal_rf.h" +#include "rfal_isoDep.h" + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define RFAL_T4T_MAX_CAPDU_PROLOGUE_LEN 4U /*!< Command-APDU prologue length (CLA INS P1 P2) */ +#define RFAL_T4T_LE_LEN 1U /*!< Le Expected Response Length (short field coding) */ +#define RFAL_T4T_LC_LEN 1U /*!< Lc Data field length (short field coding) */ +#define RFAL_T4T_MAX_RAPDU_SW1SW2_LEN 2U /*!< SW1 SW2 length */ +#define RFAL_T4T_CLA 0x00U /*!< Class byte (contains 00h because secure message are not used) */ + +#define RFAL_T4T_ISO7816_P1_SELECT_BY_DF_NAME 0x04U /*!< P1 value for Select by name */ +#define RFAL_T4T_ISO7816_P1_SELECT_BY_FILEID 0x00U /*!< P1 value for Select by file identifier */ +#define RFAL_T4T_ISO7816_P2_SELECT_FIRST_OR_ONLY_OCCURENCE 0x00U /*!< b2b1 P2 value for First or only occurence */ +#define RFAL_T4T_ISO7816_P2_SELECT_RETURN_FCI_TEMPLATE 0x00U /*!< b4b3 P2 value for Return FCI template */ +#define RFAL_T4T_ISO7816_P2_SELECT_NO_RESPONSE_DATA 0x0CU /*!< b4b3 P2 value for No responce data */ + +#define RFAL_T4T_ISO7816_STATUS_COMPLETE 0x9000U /*!< Command completed \ Normal processing - No further qualification*/ + + +/* +****************************************************************************** +* GLOBAL VARIABLES +****************************************************************************** +*/ + + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ +/*! NFC-A T4T Command-APDU structure */ +typedef struct +{ + uint8_t CLA; /*!< Class byte */ + uint8_t INS; /*!< Instruction byte */ + uint8_t P1; /*!< Parameter byte 1 */ + uint8_t P2; /*!< Parameter byte 2 */ + uint8_t Lc; /*!< Data field length */ + bool LcFlag; /*!< Lc flag (append Lc when true) */ + uint8_t Le; /*!< Expected Response Length */ + bool LeFlag; /*!< Le flag (append Le when true) */ + + rfalIsoDepApduBufFormat *cApduBuf; /*!< Command-APDU buffer (Tx) */ + uint16_t *cApduLen; /*!< Command-APDU Length */ +}rfalT4tCApduParam; + +/*! NFC-A T4T Response-APDU structure */ +typedef struct +{ + rfalIsoDepApduBufFormat *rApduBuf; /*!< Response-APDU buffer (Rx) */ + uint16_t rcvdLen; /*!< Full response length */ + uint16_t rApduBodyLen; /*!< Response body length */ + uint16_t statusWord; /*!< R-APDU Status Word SW1|SW2 */ +}rfalT4tRApduParam; + + + +/*! NFC-A T4T command set T4T 1.0 & ISO7816-4 2013 Table 4 */ +typedef enum +{ + RFAL_T4T_INS_SELECT = 0xA4U, /*!< T4T Select */ + RFAL_T4T_INS_READBINARY = 0xB0U, /*!< T4T ReadBinary */ + RFAL_T4T_INS_UPDATEBINARY = 0xD6U, /*!< T4T UpdateBinay */ + RFAL_T4T_INS_READBINARY_ODO = 0xB1U, /*!< T4T ReadBinary using ODO */ + RFAL_T4T_INS_UPDATEBINARY_ODO = 0xD7U /*!< T4T UpdateBinay using ODO */ +} rfalT4tCmds; + +/* +****************************************************************************** +* GLOBAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +/*! + ***************************************************************************** + * \brief T4T Compose APDU + * + * This method computes a C-APDU according to NFC Forum T4T and ISO7816-4. + * + * If C-APDU contains data to be sent, it must be placed inside the buffer + * rfalT4tTxRxApduParam.txRx.cApduBuf.apdu and signaled by Lc + * + * To transceive the formed APDU the ISO-DEP layer shall be used + * + * \see rfalIsoDepStartApduTransceive() + * \see rfalIsoDepGetApduTransceiveStatus() + * \see rfalT4TPollerParseRAPDU() + * + * \warning The ISO-DEP module is used to perform the tranceive. Usually + * activation has been done via ISO-DEP activatiavtion. If not + * please call rfalIsoDepInitialize() before. + * + * \param[in,out] apduParam : APDU parameters + * apduParam.cApduLen will contain the APDU length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT4TPollerComposeCAPDU( rfalT4tCApduParam *apduParam ); + + +/*! + ***************************************************************************** + * \brief T4T Parse R-APDU + * + * This method parses a R-APDU according to NFC Forum T4T and ISO7816-4. + * It will extract the data length and check if the Satus word is expected. + * + * \param[in,out] apduParam : APDU parameters + * apduParam.rApduBodyLen will contain the data length + * apduParam.statusWord will contain the SW1 and SW2 + * + * \return ERR_REQUEST : Status word (SW1 SW2) different from 9000 + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT4TPollerParseRAPDU( rfalT4tRApduParam *apduParam ); + +/*! + ***************************************************************************** + * \brief T4T Compose Select Application APDU + * + * This method computes a Select Application APDU according to NFC Forum T4T + * + * To transceive the formed APDU the ISO-DEP layer shall be used + * + * \see rfalIsoDepStartApduTransceive() + * \see rfalIsoDepGetApduTransceiveStatus() + * + * \param[out] cApduBuf : buffer where the C-APDU will be placed + * \param[in] aid : Application ID to be used + * \param[in] aidLen : Application ID length + * \param[out] cApduLen : Composed C-APDU length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT4TPollerComposeSelectAppl( rfalIsoDepApduBufFormat *cApduBuf, const uint8_t* aid, uint8_t aidLen, uint16_t *cApduLen ); + +/*! + ***************************************************************************** + * \brief T4T Compose Select File APDU + * + * This method computes a Select File APDU according to NFC Forum T4T + * + * To transceive the formed APDU the ISO-DEP layer shall be used + * + * \see rfalIsoDepStartApduTransceive() + * \see rfalIsoDepGetApduTransceiveStatus() + * + * \param[out] cApduBuf : buffer where the C-APDU will be placed + * \param[in] fid : File ID to be used + * \param[in] fidLen : File ID length + * \param[out] cApduLen : Composed C-APDU length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT4TPollerComposeSelectFile( rfalIsoDepApduBufFormat *cApduBuf, const uint8_t* fid, uint8_t fidLen, uint16_t *cApduLen ); + +/*! + ***************************************************************************** + * \brief T4T Compose Select File APDU for Mapping Version 1 + * + * This method computes a Select File APDU according to NFC Forum T4TOP_v1.0 + * + * To transceive the formed APDU the ISO-DEP layer shall be used + * + * \see rfalIsoDepStartApduTransceive() + * \see rfalIsoDepGetApduTransceiveStatus() + * + * \param[out] cApduBuf : buffer where the C-APDU will be placed + * \param[in] fid : File ID to be used + * \param[in] fidLen : File ID length + * \param[out] cApduLen : Composed C-APDU length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT4TPollerComposeSelectFileV1Mapping( rfalIsoDepApduBufFormat *cApduBuf, const uint8_t* fid, uint8_t fidLen, uint16_t *cApduLen ); + +/*! + ***************************************************************************** + * \brief T4T Compose Read Data APDU + * + * This method computes a Read Data APDU according to NFC Forum T4T + * + * To transceive the formed APDU the ISO-DEP layer shall be used + * + * \see rfalIsoDepStartApduTransceive() + * \see rfalIsoDepGetApduTransceiveStatus() + * + * \param[out] cApduBuf : buffer where the C-APDU will be placed + * \param[in] offset : File offset + * \param[in] expLen : Expected length (Le) + * \param[out] cApduLen : Composed C-APDU length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT4TPollerComposeReadData( rfalIsoDepApduBufFormat *cApduBuf, uint16_t offset, uint8_t expLen, uint16_t *cApduLen ); + +/*! + ***************************************************************************** + * \brief T4T Compose Read Data ODO APDU + * + * This method computes a Read Data ODO APDU according to NFC Forum T4T + * + * To transceive the formed APDU the ISO-DEP layer shall be used + * + * \see rfalIsoDepStartApduTransceive() + * \see rfalIsoDepGetApduTransceiveStatus() + * + * \param[out] cApduBuf : buffer where the C-APDU will be placed + * \param[in] offset : File offset + * \param[in] expLen : Expected length (Le) + * \param[out] cApduLen : Composed C-APDU length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT4TPollerComposeReadDataODO( rfalIsoDepApduBufFormat *cApduBuf, uint32_t offset, uint8_t expLen, uint16_t *cApduLen ); + +/*! + ***************************************************************************** + * \brief T4T Compose Write Data APDU + * + * This method computes a Write Data APDU according to NFC Forum T4T + * + * To transceive the formed APDU the ISO-DEP layer shall be used + * + * \see rfalIsoDepStartApduTransceive() + * \see rfalIsoDepGetApduTransceiveStatus() + * + * \param[out] cApduBuf : buffer where the C-APDU will be placed + * \param[in] offset : File offset + * \param[in] data : Data to be written + * \param[in] dataLen : Data length to be written (Lc) + * \param[out] cApduLen : Composed C-APDU length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT4TPollerComposeWriteData( rfalIsoDepApduBufFormat *cApduBuf, uint16_t offset, const uint8_t* data, uint8_t dataLen, uint16_t *cApduLen ); + +/*! + ***************************************************************************** + * \brief T4T Compose Write Data ODO APDU + * + * This method computes a Write Data ODO sAPDU according to NFC Forum T4T + * + * To transceive the formed APDU the ISO-DEP layer shall be used + * + * \see rfalIsoDepStartApduTransceive() + * \see rfalIsoDepGetApduTransceiveStatus() + * + * \param[out] cApduBuf : buffer where the C-APDU will be placed + * \param[in] offset : File offset + * \param[in] data : Data to be written + * \param[in] dataLen : Data length to be written (Lc) + * \param[out] cApduLen : Composed C-APDU length + * + * \return ERR_PARAM : Invalid parameter + * \return ERR_PROTO : Protocol error + * \return ERR_NONE : No error + ***************************************************************************** + */ +ReturnCode rfalT4TPollerComposeWriteDataODO( rfalIsoDepApduBufFormat *cApduBuf, uint32_t offset, const uint8_t* data, uint8_t dataLen, uint16_t *cApduLen ); + +#endif /* RFAL_T4T_H */ + +/** + * @} + * + * @} + * + * @} + */ diff --git a/Software/Middlewares/ST/rfal/Src/rfal_analogConfig.c b/Software/Middlewares/ST/rfal/Src/rfal_analogConfig.c new file mode 100644 index 0000000..64b646b --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_analogConfig.c @@ -0,0 +1,417 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_analogConfig.c + * + * \author bkam + * + * \brief Funcitons to manage and set analog settings. + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "rfal_analogConfig.h" +#include "rfal_chip.h" +#include "st_errno.h" +#include "platform.h" +#include "utils.h" + + +/* Check whether the Default Analog settings are to be used or custom ones */ +#ifdef RFAL_ANALOG_CONFIG_CUSTOM + extern const uint8_t* rfalAnalogConfigCustomSettings; + extern const uint16_t rfalAnalogConfigCustomSettingsLength; +#else + #include "rfal_analogConfigTbl.h" +#endif + +/* + ****************************************************************************** + * DEFINES + ****************************************************************************** + */ + + +#define RFAL_TEST_REG 0x0080U /*!< Test Register indicator */ + +/* + ****************************************************************************** + * MACROS + ****************************************************************************** + */ + +/* + ****************************************************************************** + * LOCAL DATA TYPES + ****************************************************************************** + */ + +#if RFAL_FEATURE_DYNAMIC_ANALOG_CONFIG + static uint8_t gRfalAnalogConfig[RFAL_ANALOG_CONFIG_TBL_SIZE]; /*!< Analog Configuration Settings List */ +#endif /* RFAL_FEATURE_DYNAMIC_ANALOG_CONFIG */ + + +/*! Struct for Analog Config Look Up Table Update */ +typedef struct { + const uint8_t *currentAnalogConfigTbl; /*!< Reference to start of current Analog Configuration */ + uint16_t configTblSize; /*!< Total size of Analog Configuration */ + bool ready; /*!< Indicate if Look Up Table is complete and ready for use */ +} rfalAnalogConfigMgmt; + +static rfalAnalogConfigMgmt gRfalAnalogConfigMgmt; /*!< Analog Configuration LUT management */ + +/* + ****************************************************************************** + * LOCAL TABLES + ****************************************************************************** + */ + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ +static rfalAnalogConfigNum rfalAnalogConfigSearch( rfalAnalogConfigId configId, uint16_t *configOffset ); + +#if RFAL_FEATURE_DYNAMIC_ANALOG_CONFIG + static void rfalAnalogConfigPtrUpdate( const uint8_t* analogConfigTbl ); +#endif /* RFAL_FEATURE_DYNAMIC_ANALOG_CONFIG */ + +/* + ****************************************************************************** + * GLOBAL VARIABLE DEFINITIONS + ****************************************************************************** + */ + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + +void rfalAnalogConfigInitialize( void ) +{ + /* Use default Analog configuration settings in Flash by default. */ + +/* Check whether the Default Analog settings are to be used or custom ones */ +#ifdef RFAL_ANALOG_CONFIG_CUSTOM + gRfalAnalogConfigMgmt.currentAnalogConfigTbl = (const uint8_t *)&rfalAnalogConfigCustomSettings; + gRfalAnalogConfigMgmt.configTblSize = rfalAnalogConfigCustomSettingsLength; +#else + gRfalAnalogConfigMgmt.currentAnalogConfigTbl = (const uint8_t *)&rfalAnalogConfigDefaultSettings; + gRfalAnalogConfigMgmt.configTblSize = sizeof(rfalAnalogConfigDefaultSettings); +#endif + + gRfalAnalogConfigMgmt.ready = true; +} /* rfalAnalogConfigInitialize() */ + + +bool rfalAnalogConfigIsReady( void ) +{ + return gRfalAnalogConfigMgmt.ready; +} + +ReturnCode rfalAnalogConfigListWriteRaw( const uint8_t *configTbl, uint16_t configTblSize ) +{ +#if RFAL_FEATURE_DYNAMIC_ANALOG_CONFIG + + /* Check if the Configuration Table exceed the Table size */ + if ( configTblSize >= RFAL_ANALOG_CONFIG_TBL_SIZE ) + { + rfalAnalogConfigInitialize(); /* Revert to default Analog Configuration */ + return ERR_NOMEM; + } + + /* Check for invalid parameters */ + if( (configTbl == NULL) || (configTblSize == 0U) ) + { + return ERR_PARAM; + } + + /* NOTE: Function does not check for the validity of the Table contents (conf IDs, conf sets, register address) */ + ST_MEMCPY( gRfalAnalogConfig, configTbl, configTblSize ); + + /* Update the total size of configuration settings */ + gRfalAnalogConfigMgmt.configTblSize = configTblSize; + + rfalAnalogConfigPtrUpdate(gRfalAnalogConfig); + return ERR_NONE; + +#else + + // If Analog Configuration Update is to be disabled + NO_WARNING(configTbl); + NO_WARNING(configTblSize); + return ERR_REQUEST; + +#endif /* RFAL_FEATURE_DYNAMIC_ANALOG_CONFIG */ +} + +ReturnCode rfalAnalogConfigListWrite( uint8_t more, const rfalAnalogConfig *config ) +{ +#if RFAL_FEATURE_DYNAMIC_ANALOG_CONFIG + + rfalAnalogConfigId configId; + rfalAnalogConfigNum numConfig; + uint8_t configSize; + + if (true == gRfalAnalogConfigMgmt.ready) + { /* First Update to the Configuration list. */ + gRfalAnalogConfigMgmt.ready = false; // invalidate the config List + gRfalAnalogConfigMgmt.configTblSize = 0; // Clear the config List + } + + configId = GETU16(config->id); + + /* Check validity of the Configuration ID. */ + if ( (RFAL_ANALOG_CONFIG_TECH_RFU <= RFAL_ANALOG_CONFIG_ID_GET_TECH(configId)) + ||((RFAL_ANALOG_CONFIG_BITRATE_6780 < RFAL_ANALOG_CONFIG_ID_GET_BITRATE(configId)) && (RFAL_ANALOG_CONFIG_BITRATE_1OF4 > RFAL_ANALOG_CONFIG_ID_GET_BITRATE(configId))) + ||(RFAL_ANALOG_CONFIG_BITRATE_1OF256 < RFAL_ANALOG_CONFIG_ID_GET_BITRATE(configId)) + ) + { + rfalAnalogConfigInitialize(); /* Revert to default Analog Configuration */ + return ERR_PARAM; + } + + numConfig = config->num; + configSize = (uint8_t)(sizeof(rfalAnalogConfigId) + sizeof(rfalAnalogConfigNum) + (numConfig * sizeof(rfalAnalogConfigRegAddrMaskVal))); + + /* Check if the Configuration Set exceed the Table size. */ + if ( RFAL_ANALOG_CONFIG_TBL_SIZE <= (gRfalAnalogConfigMgmt.configTblSize + configSize) ) + { + rfalAnalogConfigInitialize(); /* Revert to default Analog Configuration */ + return ERR_NOMEM; + } + + /* NOTE: Function does not check for the validity of the Register Address. */ + ST_MEMCPY(&gRfalAnalogConfig[gRfalAnalogConfigMgmt.configTblSize], (const uint8_t*)config, configSize); + + /* Increment the total size of configuration settings. */ + gRfalAnalogConfigMgmt.configTblSize += configSize; + + /* Check if it is the last Analog Configuration to load. */ + if (RFAL_ANALOG_CONFIG_UPDATE_LAST == more) + { /* Update the Analog Configuration to the new settings. */ + rfalAnalogConfigPtrUpdate(gRfalAnalogConfig); + } + + return ERR_NONE; + +#else + + // If Analog Configuration Update is to be disabled + NO_WARNING(config); + NO_WARNING(more); + return ERR_DISABLED; + +#endif /* RFAL_FEATURE_DYNAMIC_ANALOG_CONFIG */ + +} /* rfalAnalogConfigListUpdate() */ + +ReturnCode rfalAnalogConfigListReadRaw( uint8_t *tblBuf, uint16_t tblBufLen, uint16_t *configTblSize ) +{ + /* Check if the the current table will fit into the given buffer */ + if( tblBufLen < gRfalAnalogConfigMgmt.configTblSize ) + { + return ERR_NOMEM; + } + + /* Check for invalid parameters */ + if( configTblSize == NULL ) + { + return ERR_PARAM; + } + + /* Copy the whole Table to the given buffer */ + if( gRfalAnalogConfigMgmt.configTblSize > 0U ) /* MISRA 21.18 */ + { + ST_MEMCPY( tblBuf, gRfalAnalogConfigMgmt.currentAnalogConfigTbl, gRfalAnalogConfigMgmt.configTblSize ); + } + *configTblSize = gRfalAnalogConfigMgmt.configTblSize; + + return ERR_NONE; +} + +ReturnCode rfalAnalogConfigListRead( rfalAnalogConfigOffset *configOffset, uint8_t *more, rfalAnalogConfig *config, rfalAnalogConfigNum numConfig ) +{ + uint16_t configSize; + rfalAnalogConfigOffset offset = *configOffset; + rfalAnalogConfigNum numConfigSet; + + /* Check if the number of register-mask-value settings for the respective Configuration ID will fit into the buffer passed in. */ + if (gRfalAnalogConfigMgmt.currentAnalogConfigTbl[offset + sizeof(rfalAnalogConfigId)] > numConfig) + { + return ERR_NOMEM; + } + + /* Get the number of Configuration set */ + numConfigSet = gRfalAnalogConfigMgmt.currentAnalogConfigTbl[offset + sizeof(rfalAnalogConfigId)]; + + /* Pass Configuration Register-Mask-Value sets */ + configSize = (sizeof(rfalAnalogConfigId) + sizeof(rfalAnalogConfigNum) + (uint16_t)(numConfigSet * sizeof(rfalAnalogConfigRegAddrMaskVal))); + ST_MEMCPY( (uint8_t*) config + , &gRfalAnalogConfigMgmt.currentAnalogConfigTbl[offset] + , configSize + ); + *configOffset = offset + configSize; + + /* Check if it is the last Analog Configuration in the Table.*/ + *more = (uint8_t)((*configOffset >= gRfalAnalogConfigMgmt.configTblSize) ? RFAL_ANALOG_CONFIG_UPDATE_LAST + : RFAL_ANALOG_CONFIG_UPDATE_MORE); + + return ERR_NONE; +} /* rfalAnalogConfigListRead() */ + + +ReturnCode rfalSetAnalogConfig( rfalAnalogConfigId configId ) +{ + rfalAnalogConfigOffset configOffset = 0; + rfalAnalogConfigNum numConfigSet; + rfalAnalogConfigRegAddrMaskVal *configTbl; + ReturnCode retCode = ERR_NONE; + rfalAnalogConfigNum i; + + if (true != gRfalAnalogConfigMgmt.ready) + { + return ERR_REQUEST; + } + + /* Search LUT for the specific Configuration ID. */ + while(true) + { + numConfigSet = rfalAnalogConfigSearch(configId, &configOffset); + if( RFAL_ANALOG_CONFIG_LUT_NOT_FOUND == numConfigSet ) + { + break; + } + + configTbl = (rfalAnalogConfigRegAddrMaskVal *)( (uint32_t)gRfalAnalogConfigMgmt.currentAnalogConfigTbl + (uint32_t)configOffset); + /* Increment the offset to the next index to search from. */ + configOffset += (uint16_t)(numConfigSet * sizeof(rfalAnalogConfigRegAddrMaskVal)); + + if ((gRfalAnalogConfigMgmt.configTblSize + 1U) < configOffset) + { /* Error check make sure that the we do not access outside the configuration Table Size */ + return ERR_NOMEM; + } + + for ( i = 0; i < numConfigSet; i++) + { + if( (GETU16(configTbl[i].addr) & RFAL_TEST_REG) != 0U ) + { + EXIT_ON_ERR(retCode, rfalChipChangeTestRegBits( (GETU16(configTbl[i].addr) & ~RFAL_TEST_REG), configTbl[i].mask, configTbl[i].val) ); + } + else + { + EXIT_ON_ERR(retCode, rfalChipChangeRegBits( GETU16(configTbl[i].addr), configTbl[i].mask, configTbl[i].val) ); + } + } + + } /* while(found Analog Config Id) */ + + return retCode; + +} /* rfalSetAnalogConfig() */ + +/* + ****************************************************************************** + * LOCAL FUNCTIONS + ****************************************************************************** + */ + +/*! + ***************************************************************************** + * \brief Update the link to Analog Configuration LUT + * + * Update the link to the Analog Configuration LUT for the subsequent search + * of Analog Settings. + * + * \param[in] analogConfigTbl: reference to the start of the new Analog Configuration Table + * + ***************************************************************************** + */ +#if RFAL_FEATURE_DYNAMIC_ANALOG_CONFIG +static void rfalAnalogConfigPtrUpdate( const uint8_t* analogConfigTbl ) +{ + + gRfalAnalogConfigMgmt.currentAnalogConfigTbl = analogConfigTbl; + gRfalAnalogConfigMgmt.ready = true; + +} /* rfalAnalogConfigPtrUpdate() */ +#endif /* RFAL_FEATURE_DYNAMIC_ANALOG_CONFIG */ + + +/*! + ***************************************************************************** + * \brief Search the Analog Configuration LUT for a specific Configuration ID. + * + * Search the Analog Configuration LUT for the Configuration ID. + * + * \param[in] configId: Configuration ID to search for. + * \param[in] configOffset: Configuration Offset in Table + * + * \return number of Configuration Sets + * \return #RFAL_ANALOG_CONFIG_LUT_NOT_FOUND in case Configuration ID is not found. + ***************************************************************************** + */ +static rfalAnalogConfigNum rfalAnalogConfigSearch( rfalAnalogConfigId configId, uint16_t *configOffset ) +{ + rfalAnalogConfigId foundConfigId; + rfalAnalogConfigId configIdMaskVal; + const uint8_t *configTbl; + const uint8_t *currentConfigTbl; + uint16_t i; + + currentConfigTbl = gRfalAnalogConfigMgmt.currentAnalogConfigTbl; + configIdMaskVal = ((RFAL_ANALOG_CONFIG_POLL_LISTEN_MODE_MASK | RFAL_ANALOG_CONFIG_BITRATE_MASK) + |((RFAL_ANALOG_CONFIG_TECH_CHIP == RFAL_ANALOG_CONFIG_ID_GET_TECH(configId)) ? (RFAL_ANALOG_CONFIG_TECH_MASK | RFAL_ANALOG_CONFIG_CHIP_SPECIFIC_MASK) : configId) + |((RFAL_ANALOG_CONFIG_NO_DIRECTION == RFAL_ANALOG_CONFIG_ID_GET_DIRECTION(configId)) ? RFAL_ANALOG_CONFIG_DIRECTION_MASK : configId) + ); + + i = *configOffset; + while (i < gRfalAnalogConfigMgmt.configTblSize) + { + configTbl = ¤tConfigTbl[i]; + foundConfigId = GETU16(configTbl); + if (configId == (foundConfigId & configIdMaskVal)) + { + *configOffset = (uint16_t)(i + sizeof(rfalAnalogConfigId) + sizeof(rfalAnalogConfigNum)); + return configTbl[sizeof(rfalAnalogConfigId)]; + } + + /* If Config Id does not match, increment to next Configuration Id */ + i += (uint16_t)( sizeof(rfalAnalogConfigId) + sizeof(rfalAnalogConfigNum) + + (configTbl[sizeof(rfalAnalogConfigId)] * sizeof(rfalAnalogConfigRegAddrMaskVal) ) + ); + } /* for */ + + return RFAL_ANALOG_CONFIG_LUT_NOT_FOUND; +} /* rfalAnalogConfigSearch() */ diff --git a/Software/Middlewares/ST/rfal/Src/rfal_crc.c b/Software/Middlewares/ST/rfal/Src/rfal_crc.c new file mode 100644 index 0000000..27384ff --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_crc.c @@ -0,0 +1,86 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_crc.c + * + * \author Oliver Regenfelder + * + * \brief CRC calculation implementation + * + */ + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "rfal_crc.h" + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ +static uint16_t rfalCrcUpdateCcitt(uint16_t crcSeed, uint8_t dataByte); + +/* +****************************************************************************** +* GLOBAL FUNCTIONS +****************************************************************************** +*/ +uint16_t rfalCrcCalculateCcitt(uint16_t preloadValue, const uint8_t* buf, uint16_t length) +{ + uint16_t crc = preloadValue; + uint16_t index; + + for (index = 0; index < length; index++) + { + crc = rfalCrcUpdateCcitt(crc, buf[index]); + } + + return crc; +} + +/* +****************************************************************************** +* LOCAL FUNCTIONS +****************************************************************************** +*/ +static uint16_t rfalCrcUpdateCcitt(uint16_t crcSeed, uint8_t dataByte) +{ + uint16_t crc = crcSeed; + uint8_t dat = dataByte; + + dat ^= (uint8_t)(crc & 0xFFU); + dat ^= (dat << 4); + + crc = (crc >> 8)^(((uint16_t) dat) << 8)^(((uint16_t) dat) << 3)^(((uint16_t) dat) >> 4); + + return crc; +} + diff --git a/Software/Middlewares/ST/rfal/Src/rfal_dpo.c b/Software/Middlewares/ST/rfal/Src/rfal_dpo.c new file mode 100644 index 0000000..95f3b5e --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_dpo.c @@ -0,0 +1,240 @@ + +/****************************************************************************** + * @attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * $Revision: $ + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_dpo.c + * + * \author Martin Zechleitner + * + * \brief Functions to manage and set dynamic power settings. + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "rfal_dpoTbl.h" +#include "rfal_dpo.h" +#include "platform.h" +#include "rfal_rf.h" +#include "rfal_chip.h" +#include "utils.h" + + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_DPO + #define RFAL_FEATURE_DPO false /* Dynamic Power Module configuration missing. Disabled by default */ +#endif + +#if RFAL_FEATURE_DPO + +/* + ****************************************************************************** + * LOCAL DATA TYPES + ****************************************************************************** + */ + +static bool gRfalDpoIsEnabled = false; +static uint8_t* gRfalCurrentDpo; +static uint8_t gRfalDpoTableEntries; +static uint8_t gRfalDpo[RFAL_DPO_TABLE_SIZE_MAX]; +static uint8_t gRfalDpoTableEntry; +static rfalDpoMeasureFunc gRfalDpoMeasureCallback = NULL; + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ +void rfalDpoInitialize( void ) +{ + /* Use the default Dynamic Power values */ + gRfalCurrentDpo = (uint8_t*) rfalDpoDefaultSettings; + gRfalDpoTableEntries = (sizeof(rfalDpoDefaultSettings) / RFAL_DPO_TABLE_PARAMETER); + + ST_MEMCPY( gRfalDpo, gRfalCurrentDpo, sizeof(rfalDpoDefaultSettings) ); + + /* by default use amplitude measurement */ + gRfalDpoMeasureCallback = rfalChipMeasureAmplitude; + + /* by default DPO is disabled */ + gRfalDpoIsEnabled = false; + + gRfalDpoTableEntry = 0; +} + +void rfalDpoSetMeasureCallback( rfalDpoMeasureFunc pMeasureFunc ) +{ + gRfalDpoMeasureCallback = pMeasureFunc; +} + +/*******************************************************************************/ +ReturnCode rfalDpoTableWrite( rfalDpoEntry* powerTbl, uint8_t powerTblEntries ) +{ + uint8_t entry = 0; + + /* check if the table size parameter is too big */ + if( (powerTblEntries * RFAL_DPO_TABLE_PARAMETER) > RFAL_DPO_TABLE_SIZE_MAX) + { + return ERR_NOMEM; + } + + /* check if the first increase entry is 0xFF */ + if( (powerTblEntries == 0) || (powerTbl == NULL) ) + { + return ERR_PARAM; + } + + /* check if the entries of the dynamic power table are valid */ + for (entry = 0; entry < powerTblEntries; entry++) + { + if(powerTbl[entry].inc < powerTbl[entry].dec) + { + return ERR_PARAM; + } + } + + /* copy the data set */ + ST_MEMCPY( gRfalDpo, powerTbl, (powerTblEntries * RFAL_DPO_TABLE_PARAMETER) ); + gRfalCurrentDpo = gRfalDpo; + gRfalDpoTableEntries = powerTblEntries; + + if(gRfalDpoTableEntry > powerTblEntries) + { + /* is always greater then zero, otherwise we already returned ERR_PARAM */ + gRfalDpoTableEntry = (powerTblEntries - 1); + } + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode rfalDpoTableRead( rfalDpoEntry* tblBuf, uint8_t tblBufEntries, uint8_t* tableEntries ) +{ + /* wrong request */ + if( (tblBuf == NULL) || (tblBufEntries < gRfalDpoTableEntries) || (tableEntries == NULL) ) + { + return ERR_PARAM; + } + + /* Copy the whole Table to the given buffer */ + ST_MEMCPY( tblBuf, gRfalCurrentDpo, (tblBufEntries * RFAL_DPO_TABLE_PARAMETER) ); + *tableEntries = gRfalDpoTableEntries; + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode rfalDpoAdjust( void ) +{ + uint8_t refValue = 0; + rfalDpoEntry* dpoTable = (rfalDpoEntry*) gRfalCurrentDpo; + + /* Check if the Power Adjustment is disabled and * + * if the callback to the measurement method is properly set */ + if( (gRfalCurrentDpo == NULL) || (!gRfalDpoIsEnabled) || (gRfalDpoMeasureCallback == NULL) ) + { + return ERR_PARAM; + } + + /* Ensure that the current mode is Passive Poller */ + if( !rfalIsModePassivePoll( rfalGetMode() ) ) + { + return ERR_WRONG_STATE; + } + + /* Ensure a proper measure reference value */ + if( ERR_NONE != gRfalDpoMeasureCallback( &refValue ) ) + { + return ERR_IO; + } + + + /* Increase the output power */ + if( refValue >= dpoTable[gRfalDpoTableEntry].inc ) + { + /* the top of the table represents the highest amplitude value*/ + if( gRfalDpoTableEntry == 0 ) + { + /* check if the maximum driver value has been reached */ + return ERR_NONE; + } + /* go up in the table to decrease the driver resistance */ + gRfalDpoTableEntry--; + } + else + { + /* decrease the output power */ + if(refValue <= dpoTable[gRfalDpoTableEntry].dec) + { + /* The bottom is the highest possible value */ + if( (gRfalDpoTableEntry + 1) >= gRfalDpoTableEntries) + { + /* check if the minimum driver value has been reached */ + return ERR_NONE; + } + /* go down in the table to increase the driver resistance */ + gRfalDpoTableEntry++; + } + else + { + /* do not write the driver again with the same value */ + } + } + + /* get the new value for RFO resistance form the table and apply the new RFO resistance setting */ + rfalChipSetRFO( dpoTable[gRfalDpoTableEntry].rfoRes ); + return ERR_NONE; +} + +/*******************************************************************************/ +rfalDpoEntry* rfalDpoGetCurrentTableEntry( void ) +{ + rfalDpoEntry* dpoTable = (rfalDpoEntry*) gRfalCurrentDpo; + return &dpoTable[gRfalDpoTableEntry]; +} + +/*******************************************************************************/ +void rfalDpoSetEnabled( bool enable ) +{ + gRfalDpoIsEnabled = enable; +} + +/*******************************************************************************/ +bool rfalDpoIsEnabled( void ) +{ + return gRfalDpoIsEnabled; +} + +#endif /* RFAL_FEATURE_DPO */ diff --git a/Software/Middlewares/ST/rfal/Src/rfal_iso15693_2.c b/Software/Middlewares/ST/rfal/Src/rfal_iso15693_2.c new file mode 100644 index 0000000..94ea414 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_iso15693_2.c @@ -0,0 +1,534 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_iso15693_2.c + * + * \author Ulrich Herrmann + * + * \brief Implementation of ISO-15693-2 + * + */ + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ +#include "rfal_iso15693_2.h" +#include "rfal_crc.h" +#include "utils.h" + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_NFCV + #define RFAL_FEATURE_NFCV false /* NFC-V module configuration missing. Disabled by default */ +#endif + +#if RFAL_FEATURE_NFCV + +/* +****************************************************************************** +* LOCAL MACROS +****************************************************************************** +*/ + +//#define ISO_15693_DEBUG dbgLog +#define ISO_15693_DEBUG(...) /*!< Macro for the log method */ + +/* +****************************************************************************** +* LOCAL DEFINES +****************************************************************************** +*/ +#define ISO15693_DAT_SOF_1_4 0x21 /* LSB constants */ +#define ISO15693_DAT_EOF_1_4 0x04 +#define ISO15693_DAT_00_1_4 0x02 +#define ISO15693_DAT_01_1_4 0x08 +#define ISO15693_DAT_10_1_4 0x20 +#define ISO15693_DAT_11_1_4 0x80 + +#define ISO15693_DAT_SOF_1_256 0x81 +#define ISO15693_DAT_EOF_1_256 0x04 +#define ISO15693_DAT_SLOT0_1_256 0x02 +#define ISO15693_DAT_SLOT1_1_256 0x08 +#define ISO15693_DAT_SLOT2_1_256 0x20 +#define ISO15693_DAT_SLOT3_1_256 0x80 + +#define ISO15693_PHY_DAT_MANCHESTER_1 0xaaaa + +#define ISO15693_PHY_BIT_BUFFER_SIZE 1000 /*!< size of the receiving buffer. Might be adjusted if longer datastreams are expected. */ + + +/* +****************************************************************************** +* LOCAL VARIABLES +****************************************************************************** +*/ +static iso15693PhyConfig_t iso15693PhyConfig; /*!< current phy configuration */ + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ +static ReturnCode iso15693PhyVCDCode1Of4(const uint8_t data, uint8_t* outbuffer, uint16_t maxOutBufLen, uint16_t* outBufLen); +static ReturnCode iso15693PhyVCDCode1Of256(const uint8_t data, uint8_t* outbuffer, uint16_t maxOutBufLen, uint16_t* outBufLen); + + + +/* +****************************************************************************** +* GLOBAL FUNCTIONS +****************************************************************************** +*/ +ReturnCode iso15693PhyConfigure(const iso15693PhyConfig_t* config, const struct iso15693StreamConfig ** needed_stream_config ) +{ + static struct iso15693StreamConfig stream_config = { /* MISRA 8.9 */ + .useBPSK = 0, /* 0: subcarrier, 1:BPSK */ + .din = 5, /* 2^5*fc = 423750 Hz: divider for the in subcarrier frequency */ + .dout = 7, /*!< 2^7*fc = 105937 : divider for the in subcarrier frequency */ + .report_period_length = 3, /*!< 8=2^3 the length of the reporting period */ + }; + + + /* make a copy of the configuration */ + ST_MEMCPY( (uint8_t*)&iso15693PhyConfig, (const uint8_t*)config, sizeof(iso15693PhyConfig_t)); + + if ( config->speedMode <= 3U) + { /* If valid speed mode adjust report period accordingly */ + stream_config.report_period_length = (3U - (uint8_t)config->speedMode); + } + else + { /* If invalid default to normal (high) speed */ + stream_config.report_period_length = 3; + } + + *needed_stream_config = &stream_config; + + return ERR_NONE; +} + +ReturnCode iso15693PhyGetConfiguration(iso15693PhyConfig_t* config) +{ + ST_MEMCPY(config, &iso15693PhyConfig, sizeof(iso15693PhyConfig_t)); + + return ERR_NONE; +} + +ReturnCode iso15693VCDCode(uint8_t* buffer, uint16_t length, bool sendCrc, bool sendFlags, bool picopassMode, + uint16_t *subbit_total_length, uint16_t *offset, + uint8_t* outbuf, uint16_t outBufSize, uint16_t* actOutBufSize) +{ + ReturnCode err = ERR_NONE; + uint8_t eof, sof; + uint8_t transbuf[2]; + uint16_t crc = 0; + ReturnCode (*txFunc)(const uint8_t data, uint8_t* outbuffer, uint16_t maxOutBufLen, uint16_t* outBufLen); + uint8_t crc_len; + uint8_t* outputBuf; + uint16_t outputBufSize; + + crc_len = (uint8_t)((sendCrc)?2:0); + + *actOutBufSize = 0; + + if (ISO15693_VCD_CODING_1_4 == iso15693PhyConfig.coding) + { + sof = ISO15693_DAT_SOF_1_4; + eof = ISO15693_DAT_EOF_1_4; + txFunc = iso15693PhyVCDCode1Of4; + *subbit_total_length = ( + ( 1U /* SOF */ + + ((length + (uint16_t)crc_len) * 4U) + + 1U) /* EOF */ + ); + if (outBufSize < 5U) { /* 5 should be safe: enough for sof + 1byte data in 1of4 */ + return ERR_NOMEM; + } + } + else + { + sof = ISO15693_DAT_SOF_1_256; + eof = ISO15693_DAT_EOF_1_256; + txFunc = iso15693PhyVCDCode1Of256; + *subbit_total_length = ( + ( 1U /* SOF */ + + ((length + (uint16_t)crc_len) * 64U) + + 1U) /* EOF */ + ); + + if (*offset != 0U) + { + if (outBufSize < 64U) { /* 64 should be safe: enough a single byte data in 1of256 */ + return ERR_NOMEM; + } + } + else + { + if (outBufSize < 65U) { /* At beginning of a frame we need at least 65 bytes to start: enough for sof + 1byte data in 1of256 */ + return ERR_NOMEM; + } + } + } + + if (length == 0U) + { + *subbit_total_length = 1; + } + + if ((length != 0U) && (0U == *offset) && sendFlags && !picopassMode) + { + /* set high datarate flag */ + buffer[0] |= (uint8_t)ISO15693_REQ_FLAG_HIGH_DATARATE; + /* clear sub-carrier flag - we only support single sub-carrier */ + buffer[0] = (uint8_t)(buffer[0] & ~ISO15693_REQ_FLAG_TWO_SUBCARRIERS); /* MISRA 10.3 */ + } + + outputBuf = outbuf; /* MISRA 17.8: Use intermediate variable */ + outputBufSize = outBufSize; /* MISRA 17.8: Use intermediate variable */ + + /* Send SOF if at 0 offset */ + if ((length != 0U) && (0U == *offset)) + { + *outputBuf = sof; + (*actOutBufSize)++; + outputBufSize--; + outputBuf++; + } + + while ((*offset < length) && (err == ERR_NONE)) + { + uint16_t filled_size; + /* send data */ + err = txFunc(buffer[*offset], outputBuf, outputBufSize, &filled_size); + (*actOutBufSize) += filled_size; + outputBuf = &outputBuf[filled_size]; /* MISRA 18.4: Avoid pointer arithmetic */ + outputBufSize -= filled_size; + if (err == ERR_NONE) { + (*offset)++; + } + } + if (err != ERR_NONE) { + return ERR_AGAIN; + } + + while ((err == ERR_NONE) && sendCrc && (*offset < (length + 2U))) + { + uint16_t filled_size; + if (0U==crc) + { + crc = rfalCrcCalculateCcitt( (uint16_t) ((picopassMode) ? 0xE012U : 0xFFFFU), /* In PicoPass Mode a different Preset Value is used */ + ((picopassMode) ? (buffer + 1U) : buffer), /* CMD byte is not taken into account in PicoPass mode */ + ((picopassMode) ? (length - 1U) : length)); /* CMD byte is not taken into account in PicoPass mode */ + + crc = (uint16_t)((picopassMode) ? crc : ~crc); + } + /* send crc */ + transbuf[0] = (uint8_t)(crc & 0xffU); + transbuf[1] = (uint8_t)((crc >> 8) & 0xffU); + err = txFunc(transbuf[*offset - length], outputBuf, outputBufSize, &filled_size); + (*actOutBufSize) += filled_size; + outputBuf = &outputBuf[filled_size]; /* MISRA 18.4: Avoid pointer arithmetic */ + outputBufSize -= filled_size; + if (err == ERR_NONE) { + (*offset)++; + } + } + if (err != ERR_NONE) { + return ERR_AGAIN; + } + + if ((!sendCrc && (*offset == length)) + || (sendCrc && (*offset == (length + 2U)))) + { + *outputBuf = eof; + (*actOutBufSize)++; + outputBufSize--; + outputBuf++; + } + else + { + return ERR_AGAIN; + } + + return err; +} + +ReturnCode iso15693VICCDecode(const uint8_t *inBuf, + uint16_t inBufLen, + uint8_t* outBuf, + uint16_t outBufLen, + uint16_t* outBufPos, + uint16_t* bitsBeforeCol, + uint16_t ignoreBits, + bool picopassMode ) +{ + ReturnCode err = ERR_NONE; + uint16_t crc; + uint16_t mp; /* Current bit position in manchester bit inBuf*/ + uint16_t bp; /* Current bit position in outBuf */ + + *bitsBeforeCol = 0; + *outBufPos = 0; + + /* first check for valid SOF. Since it starts with 3 unmodulated pulses it is 0x17. */ + if ((inBuf[0] & 0x1fU) != 0x17U) + { + ISO_15693_DEBUG("0x%x\n", iso15693PhyBitBuffer[0]); + return ERR_FRAMING; + } + ISO_15693_DEBUG("SOF\n"); + + if (outBufLen == 0U) + { + return ERR_NONE; + } + + mp = 5; /* 5 bits were SOF, now manchester starts: 2 bits per payload bit */ + bp = 0; + + ST_MEMSET(outBuf,0,outBufLen); + + if (inBufLen == 0U) + { + return ERR_CRC; + } + + for ( ; mp < ((inBufLen * 8U) - 2U); mp+=2U ) + { + bool isEOF = false; + + uint8_t man; + man = (inBuf[mp/8U] >> (mp%8U)) & 0x1U; + man |= ((inBuf[(mp+1U)/8U] >> ((mp+1U)%8U)) & 0x1U) << 1; + if (1U == man) + { + bp++; + } + if (2U == man) + { + outBuf[bp/8U] = (uint8_t)(outBuf[bp/8U] | (1U <<(bp%8U))); /* MISRA 10.3 */ + bp++; + } + if ((bp%8U) == 0U) + { /* Check for EOF */ + ISO_15693_DEBUG("ceof %hhx %hhx\n", inBuf[mp/8U], inBuf[mp/8+1]); + if ( ((inBuf[mp/8U] & 0xe0U) == 0xa0U) + &&(inBuf[(mp/8U)+1U] == 0x03U)) + { /* Now we know that it was 10111000 = EOF */ + ISO_15693_DEBUG("EOF\n"); + isEOF = true; + } + } + if ( ((0U == man) || (3U == man)) && !isEOF ) + { + if (bp >= ignoreBits) + { + err = ERR_RF_COLLISION; + } + else + { + /* ignored collision: leave as 0 */ + bp++; + } + } + if ( (bp >= (outBufLen * 8U)) || (err == ERR_RF_COLLISION) || isEOF ) + { /* Don't write beyond the end */ + break; + } + } + + *outBufPos = (bp / 8U); + *bitsBeforeCol = bp; + + if (err != ERR_NONE) + { + return err; + } + + if ((bp%8U) != 0U) + { + return ERR_CRC; + } + + if (*outBufPos > 2U) + { + /* finally, check crc */ + ISO_15693_DEBUG("Calculate CRC, val: 0x%x, outBufLen: ", *outBuf); + ISO_15693_DEBUG("0x%x ", *outBufPos - 2); + + crc = rfalCrcCalculateCcitt(((picopassMode) ? 0xE012U : 0xFFFFU), outBuf, *outBufPos - 2U); + crc = (uint16_t)((picopassMode) ? crc : ~crc); + + if (((crc & 0xffU) == outBuf[*outBufPos-2U]) && + (((crc >> 8U) & 0xffU) == outBuf[*outBufPos-1U])) + { + err = ERR_NONE; + ISO_15693_DEBUG("OK\n"); + } + else + { + ISO_15693_DEBUG("error! Expected: 0x%x, got ", crc); + ISO_15693_DEBUG("0x%hhx 0x%hhx\n", outBuf[*outBufPos-2], outBuf[*outBufPos-1]); + err = ERR_CRC; + } + } + else + { + err = ERR_CRC; + } + + return err; +} + +/* +****************************************************************************** +* LOCAL FUNCTIONS +****************************************************************************** +*/ +/*! + ***************************************************************************** + * \brief Perform 1 of 4 coding and send coded data + * + * This function takes \a length bytes from \a buffer, perform 1 of 4 coding + * (see ISO15693-2 specification) and sends the data using stream mode. + * + * \param[in] sendSof : send SOF prior to data. + * \param[in] buffer : data to send. + * \param[in] length : number of bytes to send. + * + * \return ERR_IO : Error during communication. + * \return ERR_NONE : No error. + * + ***************************************************************************** + */ +static ReturnCode iso15693PhyVCDCode1Of4(const uint8_t data, uint8_t* outbuffer, uint16_t maxOutBufLen, uint16_t* outBufLen) +{ + uint8_t tmp; + ReturnCode err = ERR_NONE; + uint16_t a; + uint8_t* outbuf = outbuffer; + + *outBufLen = 0; + + if (maxOutBufLen < 4U) { + return ERR_NOMEM; + } + + tmp = data; + for (a = 0; a < 4U; a++) + { + switch (tmp & 0x3U) + { + case 0: + *outbuf = ISO15693_DAT_00_1_4; + break; + case 1: + *outbuf = ISO15693_DAT_01_1_4; + break; + case 2: + *outbuf = ISO15693_DAT_10_1_4; + break; + case 3: + *outbuf = ISO15693_DAT_11_1_4; + break; + default: + /* MISRA 16.4: mandatory default statement */ + break; + } + outbuf++; + (*outBufLen)++; + tmp >>= 2; + } + return err; +} + +/*! + ***************************************************************************** + * \brief Perform 1 of 256 coding and send coded data + * + * This function takes \a length bytes from \a buffer, perform 1 of 256 coding + * (see ISO15693-2 specification) and sends the data using stream mode. + * \note This function sends SOF prior to the data. + * + * \param[in] sendSof : send SOF prior to data. + * \param[in] buffer : data to send. + * \param[in] length : number of bytes to send. + * + * \return ERR_IO : Error during communication. + * \return ERR_NONE : No error. + * + ***************************************************************************** + */ +static ReturnCode iso15693PhyVCDCode1Of256(const uint8_t data, uint8_t* outbuffer, uint16_t maxOutBufLen, uint16_t* outBufLen) +{ + uint8_t tmp; + ReturnCode err = ERR_NONE; + uint16_t a; + uint8_t* outbuf = outbuffer; + + *outBufLen = 0; + + if (maxOutBufLen < 64U) { + return ERR_NOMEM; + } + + tmp = data; + for (a = 0; a < 64U; a++) + { + switch (tmp) + { + case 0: + *outbuf = ISO15693_DAT_SLOT0_1_256; + break; + case 1: + *outbuf = ISO15693_DAT_SLOT1_1_256; + break; + case 2: + *outbuf = ISO15693_DAT_SLOT2_1_256; + break; + case 3: + *outbuf = ISO15693_DAT_SLOT3_1_256; + break; + default: + *outbuf = 0; + break; + } + outbuf++; + (*outBufLen)++; + tmp -= 4U; + } + + return err; +} + +#endif /* RFAL_FEATURE_NFCV */ diff --git a/Software/Middlewares/ST/rfal/Src/rfal_isoDep.c b/Software/Middlewares/ST/rfal/Src/rfal_isoDep.c new file mode 100644 index 0000000..2048841 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_isoDep.c @@ -0,0 +1,2552 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: NFCC firmware + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_isoDep.c + * + * \author Gustavo Patricio + * + * \brief Implementation of ISO-DEP protocol + * + * This implementation was based on the following specs: + * - ISO/IEC 14443-4 2nd Edition 2008-07-15 + * - NFC Forum Digital Protocol 1.1 2014-01-14 + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + +#include "rfal_isoDep.h" +#include "rfal_rf.h" +#include "utils.h" + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_ISO_DEP + #define RFAL_FEATURE_ISO_DEP false /* ISO-DEP module configuration missing. Disabled by default */ +#endif + +#if RFAL_FEATURE_ISO_DEP + +#if ( !RFAL_FEATURE_ISO_DEP_POLL && !RFAL_FEATURE_ISO_DEP_LISTEN ) + #error " RFAL: Invalid ISO-DEP Configuration. Please select at least one mode: Poller and/or Listener. " +#endif + +/* Check for valid I-Block length [RFAL_ISODEP_FSX_16 ; RFAL_ISODEP_FSX_4096]*/ +#if( (RFAL_FEATURE_ISO_DEP_IBLOCK_MAX_LEN > 4096 ) || (RFAL_FEATURE_ISO_DEP_IBLOCK_MAX_LEN < 16) ) + #error " RFAL: Invalid ISO-DEP IBlock Max length. Please change RFAL_FEATURE_ISO_DEP_IBLOCK_MAX_LEN. " +#endif + +/* Check for valid APDU length, It must be n*IBlock */ +#if( (RFAL_FEATURE_ISO_DEP_APDU_MAX_LEN < RFAL_FEATURE_ISO_DEP_IBLOCK_MAX_LEN) || (RFAL_FEATURE_ISO_DEP_APDU_MAX_LEN % RFAL_FEATURE_ISO_DEP_IBLOCK_MAX_LEN) ) + #error " RFAL: Invalid ISO-DEP APDU Max length. Please change RFAL_FEATURE_ISO_DEP_APDU_MAX_LEN. " +#endif + +/* + ****************************************************************************** + * DEFINES + ****************************************************************************** + */ +#define ISODEP_CRC_LEN RFAL_CRC_LEN /*!< ISO1443 CRC Length */ + + +#define ISODEP_PCB_POS (0U) /*!< PCB position on message header*/ +#define ISODEP_SWTX_INF_POS (1U) /*!< INF position in a S-WTX */ + +#define ISODEP_DID_POS (1U) /*!< DID position on message header*/ +#define ISODEP_SWTX_PARAM_LEN (1U) /*!< SWTX parameter length */ + +#define ISODEP_DSL_MAX_LEN ( RFAL_ISODEP_PCB_LEN + RFAL_ISODEP_DID_LEN ) /*!< Deselect Req/Res length */ + +#define ISODEP_PCB_xBLOCK_MASK (0xC0U) /*!< Bit mask for Block type */ +#define ISODEP_PCB_IBLOCK (0x00U) /*!< Bit mask indicating a I-Block */ +#define ISODEP_PCB_RBLOCK (0x80U) /*!< Bit mask indicating a R-Block */ +#define ISODEP_PCB_SBLOCK (0xC0U) /*!< Bit mask indicating a S-Block */ +#define ISODEP_PCB_INVALID (0x40U) /*!< Bit mask of an Invalid PCB */ + +#define ISODEP_HDR_MAX_LEN (RFAL_ISODEP_PCB_LEN + RFAL_ISODEP_DID_LEN + RFAL_ISODEP_NAD_LEN) /*!< Max header length (PCB + DID + NAD) */ + +#define ISODEP_PCB_IB_VALID_MASK (ISODEP_PCB_B6_BIT | ISODEP_PCB_B2_BIT) /*!< Bit mask for the MUST bits on I-Block */ +#define ISODEP_PCB_IB_VALID_VAL (ISODEP_PCB_B2_BIT) /*!< Value for the MUST bits on I-Block */ +#define ISODEP_PCB_RB_VALID_MASK (ISODEP_PCB_B6_BIT | ISODEP_PCB_B3_BIT | ISODEP_PCB_B2_BIT) /*!< Bit mask for the MUST bits on R-Block */ +#define ISODEP_PCB_RB_VALID_VAL (ISODEP_PCB_B6_BIT | ISODEP_PCB_B2_BIT) /*!< Value for the MUST bits on R-Block */ +#define ISODEP_PCB_SB_VALID_MASK (ISODEP_PCB_B3_BIT | ISODEP_PCB_B2_BIT | ISODEP_PCB_B1_BIT) /*!< Bit mask for the MUST bits on I-Block */ +#define ISODEP_PCB_SB_VALID_VAL (ISODEP_PCB_B2_BIT) /*!< Value for the MUST bits on I-Block */ + + +#define ISODEP_PCB_B1_BIT (0x01U) /*!< Bit mask for the RFU S Blocks */ +#define ISODEP_PCB_B2_BIT (0x02U) /*!< Bit mask for the RFU bit2 in I,S,R Blocks */ +#define ISODEP_PCB_B3_BIT (0x04U) /*!< Bit mask for the RFU bit3 in R Blocks */ +#define ISODEP_PCB_B6_BIT (0x20U) /*!< Bit mask for the RFU bit2 in R Blocks */ +#define ISODEP_PCB_CHAINING_BIT (0x10U) /*!< Bit mask for the chaining bit of an ISO DEP I-Block in PCB. */ +#define ISODEP_PCB_DID_BIT (0x08U) /*!< Bit mask for the DID presence bit of an ISO DEP I,S,R Blocks PCB. */ +#define ISODEP_PCB_NAD_BIT (0x04U) /*!< Bit mask for the NAD presence bit of an ISO DEP I,S,R Blocks in PCB */ +#define ISODEP_PCB_BN_MASK (0x01U) /*!< Bit mask for the block number of an ISO DEP I,R Block in PCB */ + +#define ISODEP_SWTX_PL_MASK (0xC0U) /*!< Bit mask for the Power Level bits of the inf byte of an WTX request or response */ +#define ISODEP_SWTX_WTXM_MASK (0x3FU) /*!< Bit mask for the WTXM bits of the inf byte of an WTX request or response */ + + +#define ISODEP_RBLOCK_INF_LEN (0U) /*!< INF length of R-Block Digital 1.1 15.1.3 */ +#define ISODEP_SDSL_INF_LEN (0U) /*!< INF length of S(DSL) Digital 1.1 15.1.3 */ +#define ISODEP_SWTX_INF_LEN (1U) /*!< INF length of S(WTX) Digital 1.1 15.2.2 */ + +#define ISODEP_WTXM_MIN (1U) /*!< Minimum allowed value for the WTXM, Digital 1.0 13.2.2 */ +#define ISODEP_WTXM_MAX (59U) /*!< Maximum allowed value for the WTXM, Digital 1.0 13.2.2 */ + +#define ISODEP_PCB_Sxx_MASK (0x30U) /*!< Bit mask for the S-Block type */ +#define ISODEP_PCB_DESELECT (0x00U) /*!< Bit mask for S-Block indicating Deselect */ +#define ISODEP_PCB_WTX (0x30U) /*!< Bit mask for S-Block indicating Waiting Time eXtension */ + +#define ISODEP_PCB_Rx_MASK (0x10U) /*!< Bit mask for the R-Block type */ +#define ISODEP_PCB_ACK (0x00U) /*!< Bit mask for R-Block indicating ACK */ +#define ISODEP_PCB_NAK (0x10U) /*!< Bit mask for R-Block indicating NAK */ + +/*! Maximum length of control message (no INF) */ +#define ISODEP_CONTROLMSG_BUF_LEN (RFAL_ISODEP_PCB_LEN + RFAL_ISODEP_DID_LEN + RFAL_ISODEP_NAD_LEN + ISODEP_SWTX_PARAM_LEN) + +#define ISODEP_FWT_DEACTIVATION (71680U) /*!< FWT to be used after DESELECT, Digital 1.0 A9 */ +#define ISODEP_MAX_RERUNS (0x0FFFFFFFU)/*!< Maximum rerun retrys for a blocking protocol run*/ + + +#define ISODEP_PCBSBLOCK ( 0x00U | ISODEP_PCB_SBLOCK | ISODEP_PCB_B2_BIT ) /*!< PCB Value of a S-Block */ +#define ISODEP_PCB_SDSL ( ISODEP_PCBSBLOCK | ISODEP_PCB_DESELECT ) /*!< PCB Value of a S-Block with DESELECT */ +#define ISODEP_PCB_SWTX ( ISODEP_PCBSBLOCK | ISODEP_PCB_WTX ) /*!< PCB Value of a S-Block with WTX */ +#define ISODEP_PCB_SPARAMETERS ( ISODEP_PCB_SBLOCK | ISODEP_PCB_WTX ) /*!< PCB Value of a S-Block with PARAMETERS */ + +#define ISODEP_FWI_LIS_MAX_NFC 8U /*!< FWT Listener Max FWIT4ATmax FWIBmax Digital 1.1 A6 & A3 */ +#define ISODEP_FWI_LIS_MAX_EMVCO 7U /*!< FWT Listener Max FWIMAX EMVCo 2.6 A.5 */ +#define ISODEP_FWI_LIS_MAX (uint8_t)((gIsoDep.compMode == RFAL_COMPLIANCE_MODE_EMV) ? ISODEP_FWI_LIS_MAX_EMVCO : ISODEP_FWI_LIS_MAX_NFC) /*!< FWI Listener Max as NFC / EMVCo */ +#define ISODEP_FWT_LIS_MAX rfalIsoDepFWI2FWT(ISODEP_FWI_LIS_MAX) /*!< FWT Listener Max */ + +#define ISODEP_FWI_MIN_10 (1U) /*!< Minimum value for FWI Digital 1.0 11.6.2.17 */ +#define ISODEP_FWI_MIN_11 (0U) /*!< Default value for FWI Digital 1.1 13.6.2 */ +#define ISODEP_FWI_MAX (14U) /*!< Maximum value for FWI Digital 1.0 11.6.2.17 */ +#define ISODEP_SFGI_MIN (0U) /*!< Default value for FWI Digital 1.1 13.6.2.22 */ +#define ISODEP_SFGI_MAX (14U) /*!< Maximum value for FWI Digital 1.1 13.6.2.22 */ + + +#define RFAL_ISODEP_SPARAM_TVL_HDR_LEN (2U) /*!< S(PARAMETERS) TVL header length: Tag + Len */ +#define RFAL_ISODEP_SPARAM_HDR_LEN (RFAL_ISODEP_PCB_LEN + RFAL_ISODEP_SPARAM_TVL_HDR_LEN) /*!< S(PARAMETERS) header length: PCB + Tag + Len */ + + +/**********************************************************************************************************************/ +/**********************************************************************************************************************/ +#define RFAL_ISODEP_NO_PARAM (0U) /*!< No parameter flag for isoDepHandleControlMsg() */ + +#define RFAL_ISODEP_CMD_RATS (0xE0U) /*!< RATS command Digital 1.1 13.6.1 */ + +#define RFAL_ISODEP_ATS_MIN_LEN (1U) /*!< Minimum ATS length Digital 1.1 13.6.2 */ +#define RFAL_ISODEP_ATS_HDR_LEN (5U) /*!< ATS headerlength Digital 1.1 13.6.2 */ +#define RFAL_ISODEP_ATS_MAX_LEN (RFAL_ISODEP_ATS_HDR_LEN + RFAL_ISODEP_ATS_HB_MAX_LEN) /*!< Maximum ATS length Digital 1.1 13.6.2 */ +#define RFAL_ISODEP_ATS_T0_FSCI_MASK (0x0FU) /*!< ATS T0's FSCI mask Digital 1.1 13.6.2 */ +#define RFAL_ISODEP_ATS_TB_FWI_SHIFT (4U) /*!< ATS TB's FWI shift Digital 1.1 13.6.2 */ +#define RFAL_ISODEP_ATS_FWI_MASK (0x0FU) /*!< ATS TB's FWI shift Digital 1.1 13.6.2 */ + + +#define RFAL_ISODEP_PPS_SB (0xD0U) /*!< PPS REQ PPSS's SB value (no CID) ISO14443-4 5.3 */ +#define RFAL_ISODEP_PPS_MASK (0xF0U) /*!< PPS REQ PPSS's SB mask ISO14443-4 5.3 */ +#define RFAL_ISODEP_PPS_SB_DID_MASK (0x0FU) /*!< PPS REQ PPSS's DID|CID mask ISO14443-4 5.3 */ +#define RFAL_ISODEP_PPS_PPS0_PPS1_PRESENT (0x11U) /*!< PPS REQ PPS0 indicating that PPS1 is present */ +#define RFAL_ISODEP_PPS_PPS1 (0x00U) /*!< PPS REQ PPS1 fixed value ISO14443-4 5.3 */ +#define RFAL_ISODEP_PPS_PPS1_DSI_SHIFT (2U) /*!< PPS REQ PPS1 fixed value ISO14443-4 5.3 */ +#define RFAL_ISODEP_PPS_PPS1_DXI_MASK (0x0FU) /*!< PPS REQ PPS1 fixed value ISO14443-4 5.3 */ +#define RFAL_ISODEP_PPS_RES_LEN (1U) /*!< PPS Response length ISO14443-4 5.4 */ +#define RFAL_ISODEP_PPS_STARTBYTE_POS (0U) /*!< PPS REQ PPSS's byte position ISO14443-4 5.4 */ +#define RFAL_ISODEP_PPS_PPS0_POS (1U) /*!< PPS REQ PPS0's byte position ISO14443-4 5.4 */ +#define RFAL_ISODEP_PPS_PPS1_POS (2U) /*!< PPS REQ PPS1's byte position ISO14443-4 5.4 */ +#define RFAL_ISODEP_PPS0_VALID_MASK (0xEFU) /*!< PPS REQ PPS0 valid coding mask ISO14443-4 5.4 */ + +#define RFAL_ISODEP_CMD_ATTRIB (0x1DU) /*!< ATTRIB command Digital 1.1 14.6.1 */ +#define RFAL_ISODEP_ATTRIB_PARAM2_DSI_SHIFT (6U) /*!< ATTRIB PARAM2 DSI shift Digital 1.1 14.6.1 */ +#define RFAL_ISODEP_ATTRIB_PARAM2_DRI_SHIFT (4U) /*!< ATTRIB PARAM2 DRI shift Digital 1.1 14.6.1 */ +#define RFAL_ISODEP_ATTRIB_PARAM2_DXI_MASK (0xF0U) /*!< ATTRIB PARAM2 DxI mask Digital 1.1 14.6.1 */ +#define RFAL_ISODEP_ATTRIB_PARAM2_FSDI_MASK (0x0FU) /*!< ATTRIB PARAM2 FSDI mask Digital 1.1 14.6.1 */ +#define RFAL_ISODEP_ATTRIB_PARAM4_DID_MASK (0x0FU) /*!< ATTRIB PARAM4 DID mask Digital 1.1 14.6.1 */ +#define RFAL_ISODEP_ATTRIB_HDR_LEN (9U) /*!< ATTRIB REQ header length Digital 1.1 14.6.1 */ + +#define RFAL_ISODEP_ATTRIB_RES_HDR_LEN (1U) /*!< ATTRIB RES header length Digital 1.1 14.6.2 */ +#define RFAL_ISODEP_ATTRIB_RES_DID_MASK (0x0FU) /*!< ATTRIB RES DID mask Digital 1.1 14.6.2 */ +#define RFAL_ISODEP_ATTRIB_RES_MBLI_MASK (0x0FU) /*!< ATTRIB RES MBLI mask Digital 1.1 14.6.2 */ +#define RFAL_ISODEP_ATTRIB_RES_MBLI_SHIFT (4U) /*!< ATTRIB RES MBLI shift Digital 1.1 14.6.2 */ + +#define RFAL_ISODEP_DID_MASK (0x0FU) /*!< ISODEP's DID mask */ +#define RFAL_ISODEP_DID_00 (0U) /*!< ISODEP's DID value 0 */ + +#define RFAL_ISODEP_FSDI_MAX_NFC (8U) /*!< Max FSDI value Digital 2.0 14.6.1.9 & B7 & B8 */ +#define RFAL_ISODEP_FSDI_MAX_EMV (0x0CU) /*!< Max FSDI value EMVCo 3.0 5.7.2.5 */ + +#define RFAL_ISODEP_RATS_PARAM_FSDI_MASK (0xF0U) /*!< Mask bits for FSDI in RATS */ +#define RFAL_ISODEP_RATS_PARAM_FSDI_SHIFT (4U) /*!< Shift for FSDI in RATS */ +#define RFAL_ISODEP_RATS_PARAM_DID_MASK (0x0FU) /*!< Mask bits for DID in RATS */ + +#define RFAL_ISODEP_ATS_TL_OFFSET (0x00U) /*!< Offset of TL on ATS */ +#define RFAL_ISODEP_ATS_TA_OFFSET (0x02U) /*!< Offset of TA if it is present on ATS */ +#define RFAL_ISODEP_ATS_TB_OFFSET (0x03U) /*!< Offset of TB if both TA and TB is present on ATS */ +#define RFAL_ISODEP_ATS_TC_OFFSET (0x04U) /*!< Offset of TC if both TA,TB & TC are present on ATS */ +#define RFAL_ISODEP_ATS_HIST_OFFSET (0x05U) /*!< Offset of Historical Bytes if TA, TB & TC are present on ATS */ +#define RFAL_ISODEP_ATS_TC_ADV_FEAT (0x10U) /*!< Bit mask indicating support for Advanced protocol features: DID & NAD */ +#define RFAL_ISODEP_ATS_TC_DID (0x02U) /*!< Bit mask indicating support for DID */ +#define RFAL_ISODEP_ATS_TC_NAD (0x01U) /*!< Bit mask indicating support for NAD */ + +#define RFAL_ISODEP_PPS0_PPS1_PRESENT (0x11U) /*!< PPS0 byte indicating that PPS1 is present */ +#define RFAL_ISODEP_PPS0_PPS1_NOT_PRESENT (0x01U) /*!< PPS0 byte indicating that PPS1 is NOT present */ +#define RFAL_ISODEP_PPS1_DRI_MASK (0x03U) /*!< PPS1 byte DRI mask bits */ +#define RFAL_ISODEP_PPS1_DSI_MASK (0x0CU) /*!< PPS1 byte DSI mask bits */ +#define RFAL_ISODEP_PPS1_DSI_SHIFT (2U) /*!< PPS1 byte DSI shift */ +#define RFAL_ISODEP_PPS1_DxI_MASK (0x03U) /*!< PPS1 byte DSI/DRS mask bits */ + + +/*! Delta Time for polling during Activation (ATS) : 20ms Digital 1.0 11.7.1.1 & A.7 */ +#define RFAL_ISODEP_T4T_DTIME_POLL_10 rfalConvMsTo1fc(20) + +/*! Delta Time for polling during Activation (ATS) : 16.4ms Digital 1.1 13.8.1.1 & A.6 + * Use 16 ms as testcase T4AT_BI_10_03 sends a frame exactly at the border */ +#define RFAL_ISODEP_T4T_DTIME_POLL_11 216960U + +/*! Activation frame waiting time FWT(act) = 71680/fc (~5286us) Digital 1.1 13.8.1.1 & A.6 */ +#define RFAL_ISODEP_T4T_FWT_ACTIVATION (71680U + RFAL_ISODEP_T4T_DTIME_POLL_11) + + +/*! Delta frame waiting time = 16/fc Digital 1.0 11.7.1.3 & A.7*/ +#define RFAL_ISODEP_DFWT_10 16U + +/*! Delta frame waiting time = 16/fc Digital 2.0 14.8.1.3 & B.7*/ +#define RFAL_ISODEP_DFWT_20 49152U + +/* + ****************************************************************************** + * MACROS + ****************************************************************************** + */ + +#define isoDep_PCBisIBlock( pcb ) ( ((pcb) & (ISODEP_PCB_xBLOCK_MASK | ISODEP_PCB_IB_VALID_MASK)) == (ISODEP_PCB_IBLOCK | ISODEP_PCB_IB_VALID_VAL)) /*!< Checks if pcb is a I-Block */ +#define isoDep_PCBisRBlock( pcb ) ( ((pcb) & (ISODEP_PCB_xBLOCK_MASK | ISODEP_PCB_RB_VALID_MASK)) == (ISODEP_PCB_RBLOCK | ISODEP_PCB_RB_VALID_VAL)) /*!< Checks if pcb is a R-Block */ +#define isoDep_PCBisSBlock( pcb ) ( ((pcb) & (ISODEP_PCB_xBLOCK_MASK | ISODEP_PCB_SB_VALID_MASK)) == (ISODEP_PCB_SBLOCK | ISODEP_PCB_SB_VALID_VAL)) /*!< Checks if pcb is a S-Block */ + +#define isoDep_PCBisChaining( pcb ) ( ((pcb) & ISODEP_PCB_CHAINING_BIT) == ISODEP_PCB_CHAINING_BIT) /*!< Checks if pcb is indicating chaining */ + +#define isoDep_PCBisDeselect( pcb ) ( ((pcb) & ISODEP_PCB_Sxx_MASK) == ISODEP_PCB_DESELECT) /*!< Checks if pcb is indicating DESELECT */ +#define isoDep_PCBisWTX( pcb ) ( ((pcb) & ISODEP_PCB_Sxx_MASK) == ISODEP_PCB_WTX) /*!< Checks if pcb is indicating WTX */ + +#define isoDep_PCBisACK( pcb ) ( ((pcb) & ISODEP_PCB_Rx_MASK) == ISODEP_PCB_ACK) /*!< Checks if pcb is indicating ACK */ +#define isoDep_PCBisNAK( pcb ) ( ((pcb) & ISODEP_PCB_Rx_MASK) == ISODEP_PCB_NAK) /*!< Checks if pcb is indicating ACK */ + +#define isoDep_PCBhasDID( pcb ) ( ((pcb) & ISODEP_PCB_DID_BIT) == ISODEP_PCB_DID_BIT) /*!< Checks if pcb is indicating DID */ +#define isoDep_PCBhasNAD( pcb ) ( ((pcb) & ISODEP_PCB_NAD_BIT) == ISODEP_PCB_NAD_BIT) /*!< Checks if pcb is indicating NAD */ + + +#define isoDep_PCBisIChaining( pcb ) ( isoDep_PCBisIBlock(pcb) && isoDep_PCBisChaining(pcb) ) /*!< Checks if pcb is I-Block indicating chaining*/ + +#define isoDep_PCBisSDeselect( pcb ) ( isoDep_PCBisSBlock(pcb) && isoDep_PCBisDeselect(pcb) ) /*!< Checks if pcb is S-Block indicating DESELECT*/ +#define isoDep_PCBisSWTX( pcb ) ( isoDep_PCBisSBlock(pcb) && isoDep_PCBisWTX(pcb) ) /*!< Checks if pcb is S-Block indicating WTX */ + +#define isoDep_PCBisRACK( pcb ) ( isoDep_PCBisRBlock(pcb) && isoDep_PCBisACK(pcb) ) /*!< Checks if pcb is R-Block indicating ACK */ +#define isoDep_PCBisRNAK( pcb ) ( isoDep_PCBisRBlock(pcb) && isoDep_PCBisNAK(pcb) ) /*!< Checks if pcb is R-Block indicating NAK */ + + +#define isoDep_PCBIBlock( bn ) ( (uint8_t)( 0x00U | ISODEP_PCB_IBLOCK | ISODEP_PCB_B2_BIT | ((bn) & ISODEP_PCB_BN_MASK) )) /*!< Returns an I-Block with the given block number (bn) */ +#define isoDep_PCBIBlockChaining( bn ) ( (uint8_t)(isoDep_PCBIBlock(bn) | ISODEP_PCB_CHAINING_BIT)) /*!< Returns an I-Block with the given block number (bn) indicating chaining */ + +#define isoDep_PCBRBlock( bn ) ( (uint8_t)( 0x00U | ISODEP_PCB_RBLOCK | ISODEP_PCB_B6_BIT | ISODEP_PCB_B2_BIT | ((bn) & ISODEP_PCB_BN_MASK) ) ) /*!< Returns an R-Block with the given block number (bn) */ +#define isoDep_PCBRACK( bn ) ( (uint8_t)( isoDep_PCBRBlock( bn ) | ISODEP_PCB_ACK ) ) /*!< Returns an R-Block with the given block number (bn) indicating ACK */ +#define isoDep_PCBRNAK( bn ) ( (uint8_t)( isoDep_PCBRBlock( bn ) | ISODEP_PCB_NAK ) ) /*!< Returns an R-Block with the given block number (bn) indicating NAK */ + + +#define isoDep_GetBN( pcb ) ( (uint8_t) ((pcb) & ISODEP_PCB_BN_MASK ) ) /*!< Returns the block number (bn) from the given pcb */ +#define isoDep_GetWTXM( inf ) ( (uint8_t) ((inf) & ISODEP_SWTX_WTXM_MASK) ) /*!< Returns the WTX value from the given inf byte */ +#define isoDep_isWTXMValid( wtxm ) (((wtxm) >= ISODEP_WTXM_MIN) && ((wtxm) <= ISODEP_WTXM_MAX)) /*!< Checks if the given wtxm is valid */ + +#define isoDep_WTXMListenerMax( fwt ) ( MIN( (uint8_t)(ISODEP_FWT_LIS_MAX / (fwt)), ISODEP_WTXM_MAX) ) /*!< Calculates the Max WTXM value for the given fwt as a Listener */ + +#define isoDepCalcdSGFT( s ) (384U * ((uint32_t)1U << (s))) /*!< Calculates the dSFGT with given SFGI Digital 1.1 13.8.2.1 & A.6*/ +#define isoDepCalcSGFT( s ) (4096U * ((uint32_t)1U << (s))) /*!< Calculates the SFGT with given SFGI Digital 1.1 13.8.2 */ + +#define isoDep_PCBNextBN( bn ) (((uint8_t)(bn)^0x01U) & ISODEP_PCB_BN_MASK) /*!< Returns the value of the next block number based on bn */ +#define isoDep_PCBPrevBN( bn ) isoDep_PCBNextBN(bn) /*!< Returns the value of the previous block number based on bn */ +#define isoDep_ToggleBN( bn ) ((bn) = (((bn)^0x01U) & ISODEP_PCB_BN_MASK) ) /*!< Toggles the block number value of the given bn */ + +#define isoDep_WTXAdjust( v ) ((v) - ((v)>>3)) /*!< Adjust WTX timer value to a percentage of the total, current 88% */ + + +/*! ISO 14443-4 7.5.6.2 & Digital 1.1 - 15.2.6.2 The CE SHALL NOT attempt error recovery and remains in Rx mode upon Transmission or a Protocol Error */ +#define isoDepReEnableRx( rxB, rxBL, rxL ) rfalTransceiveBlockingTx( NULL, 0, rxB, rxBL, rxL, RFAL_TXRX_FLAGS_DEFAULT, RFAL_FWT_NONE ) + +#define isoDepTimerStart( timer, time_ms ) (timer) = platformTimerCreate((uint16_t)(time_ms)) /*!< Configures and starts the WTX timer */ +#define isoDepTimerisExpired( timer ) platformTimerIsExpired( timer ) /*!< Checks WTX timer has expired */ + +/* + ****************************************************************************** + * LOCAL DATA TYPES + ****************************************************************************** + */ + + /*! Internal structure to be used in handling of S(PARAMETRS) only */ +typedef struct +{ + uint8_t pcb; /*!< PCB byte */ + rfalIsoDepSParameter sParam; /*!< S(PARAMETERS) */ +} rfalIsoDepControlMsgSParam; + +/*! Enumeration of the possible control message types */ +typedef enum +{ + ISODEP_R_ACK, /*!< R-ACK Acknowledge */ + ISODEP_R_NAK, /*!< R-NACK Negative acknowledge */ + ISODEP_S_WTX, /*!< S-WTX Waiting Time Extension */ + ISODEP_S_DSL /*!< S-DSL Deselect */ +} rfalIsoDepControlMsg; + +/*! Enumeration of the IsoDep roles */ +typedef enum +{ + ISODEP_ROLE_PCD, /*!< Perform as Reader/PCD */ + ISODEP_ROLE_PICC /*!< Perform as Card/PICC */ +} rfalIsoDepRole; + +/*! ISO-DEP layer states */ +typedef enum +{ + ISODEP_ST_IDLE, /*!< Idle State */ + ISODEP_ST_PCD_TX, /*!< PCD Transmission State */ + ISODEP_ST_PCD_RX, /*!< PCD Reception State */ + ISODEP_ST_PCD_WAIT_DSL, /*!< PCD Wait for DSL response */ + + ISODEP_ST_PICC_ACT_ATS, /*!< PICC has replied to RATS (ATS) */ + ISODEP_ST_PICC_ACT_ATTRIB, /*!< PICC has replied to ATTRIB */ + ISODEP_ST_PICC_RX, /*!< PICC REception State */ + ISODEP_ST_PICC_SWTX, /*!< PICC Waiting Time eXtension */ + ISODEP_ST_PICC_TX, /*!< PICC Transmission State */ +} rfalIsoDepState; + + + + +/*! Holds all ISO-DEP data(counters, buffers, ID, timeouts, frame size) */ +typedef struct{ + rfalIsoDepState state; /*!< ISO-DEP module state */ + rfalIsoDepRole role; /*!< Current ISO-DEP role */ + + uint8_t blockNumber; /*!< Current block number */ + uint8_t did; /*!< Current DID */ + uint8_t nad; /*!< Current DID */ + uint8_t cntIRetrys; /*!< I-Block retry counter */ + uint8_t cntRRetrys; /*!< R-Block retry counter */ + uint8_t cntSRetrys; /*!< S-Block retry counter */ + uint32_t fwt; /*!< Current FWT (Frame Waiting Time) */ + uint32_t dFwt; /*!< Current delta FWT */ + uint16_t fsx; /*!< Current FSx FSC or FSD (max Frame size) */ + bool isTxChaining; /*!< Flag for chaining on Tx */ + bool isRxChaining; /*!< Flag for chaining on Rx */ + uint8_t* txBuf; /*!< Tx buffer pointer */ + uint8_t* rxBuf; /*!< Rx buffer pointer */ + uint16_t txBufLen; /*!< Tx buffer length */ + uint16_t rxBufLen; /*!< Rx buffer length */ + uint8_t txBufInfPos; /*!< Start of payload in txBuf */ + uint8_t rxBufInfPos; /*!< Start of payload in rxBuf */ + + + uint16_t ourFsx; /*!< Our current FSx FSC or FSD (Frame size) */ + uint8_t lastPCB; /*!< Last PCB sent */ + uint8_t lastWTXM; /*!< Last WTXM sent */ + uint8_t atsTA; /*!< TA on ATS */ + uint8_t hdrLen; /*!< Current ISO-DEP length */ + rfalBitRate txBR; /*!< Current Tx Bit Rate */ + rfalBitRate rxBR; /*!< Current Rx Bit Rate */ + uint16_t *rxLen; /*!< Output parameter ptr to Rx length */ + bool *rxChaining; /*!< Output parameter ptr to Rx chaining flag */ + uint32_t WTXTimer; /*!< Timer used for WTX */ + bool lastDID00; /*!< Last PCD block had DID flag (for DID = 0) */ + + bool isTxPending; /*!< Flag pending Block while waiting WTX Ack */ + bool isWait4WTX; /*!< Flag for waiting WTX Ack */ + + uint32_t SFGTTimer; /*!< Timer used for SFGT */ + + uint8_t maxRetriesI; /*!< Number of retries for a I-Block */ + uint8_t maxRetriesS; /*!< Number of retries for a S-Block */ + uint8_t maxRetriesR; /*!< Number of retries for a R-Block */ + uint8_t maxRetriesRATS;/*!< Number of retries for RATS */ + + rfalComplianceMode compMode; /*!< Compliance mode */ + + uint8_t ctrlRxBuf[ISODEP_CONTROLMSG_BUF_LEN]; /*!< Control msg buf */ + uint16_t ctrlRxLen; /*!< Control msg rcvd len (used only for DSL) */ + + + rfalIsoDepListenActvParam actvParam; /*!< Listen Activation context */ + + rfalIsoDepApduTxRxParam APDUParam; /*!< APDU TxRx params */ + uint16_t APDUTxPos; /*!< APDU Tx position */ + uint16_t APDURxPos; /*!< APDU Rx position */ + bool isAPDURxChaining; /*!< APDU Transceive chaining flag */ + +}rfalIsoDep; + + + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + +static rfalIsoDep gIsoDep; /*!< ISO-DEP Module instance */ + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ +static void isoDepClearCounters( void ); +static ReturnCode isoDepTx( uint8_t pcb, const uint8_t* txBuf, uint8_t *infBuf, uint16_t infLen, uint32_t fwt ); +static ReturnCode isoDepHandleControlMsg( rfalIsoDepControlMsg controlMsg, uint8_t param ); +static void rfalIsoDepApdu2IBLockParam( rfalIsoDepApduTxRxParam apduParam, rfalIsoDepTxRxParam *iBlockParam, uint16_t txPos, uint16_t rxPos ); + +#if RFAL_FEATURE_ISO_DEP_POLL + static ReturnCode isoDepDataExchangePCD( uint16_t *outActRxLen, bool *outIsChaining ); + static void rfalIsoDepCalcBitRate(rfalBitRate maxAllowedBR, uint8_t piccBRCapability, rfalBitRate *dsi, rfalBitRate *dri); + static uint32_t rfalIsoDepSFGI2SFGT( uint8_t sfgi ); +#endif +#if RFAL_FEATURE_ISO_DEP_LISTEN + static ReturnCode isoDepDataExchangePICC( void ); + static ReturnCode isoDepReSendControlMsg( void ); +#endif + + + + +/* + ****************************************************************************** + * LOCAL FUNCTIONS + ****************************************************************************** + */ + +/*******************************************************************************/ +static void isoDepClearCounters( void ) +{ + gIsoDep.cntIRetrys = 0; + gIsoDep.cntRRetrys = 0; + gIsoDep.cntSRetrys = 0; +} + +/*******************************************************************************/ +static ReturnCode isoDepTx( uint8_t pcb, const uint8_t* txBuf, uint8_t *infBuf, uint16_t infLen, uint32_t fwt ) +{ + uint8_t *txBlock; + uint16_t txBufLen; + uint8_t computedPcb; + + + txBlock = infBuf; /* Point to beginning of the INF, and go backwards */ + gIsoDep.lastPCB = pcb; /* Store the last PCB sent */ + + + if ( infLen > 0U ) + { + if ( ((uint32_t)infBuf - (uint32_t)txBuf) < gIsoDep.hdrLen ) /* Check that we can fit the header in the given space */ + { + return ERR_NOMEM; + } + } + + + /*******************************************************************************/ + /* Compute optional PCB bits */ + computedPcb = pcb; + if ((gIsoDep.did != RFAL_ISODEP_NO_DID) || ((gIsoDep.did == RFAL_ISODEP_DID_00) && gIsoDep.lastDID00) ) { computedPcb |= ISODEP_PCB_DID_BIT; } + if (gIsoDep.nad != RFAL_ISODEP_NO_NAD) { computedPcb |= ISODEP_PCB_NAD_BIT; } + if ((gIsoDep.isTxChaining) && (isoDep_PCBisIBlock(computedPcb)) ) { computedPcb |= ISODEP_PCB_CHAINING_BIT; } + + + /*******************************************************************************/ + /* Compute Payload on the given txBuf, start by the PCB | DID | NAD | before INF */ + + if (gIsoDep.nad != RFAL_ISODEP_NO_NAD) + { + *(--txBlock) = gIsoDep.nad; /* NAD is optional */ + } + + if ( (gIsoDep.did != RFAL_ISODEP_NO_DID) || ((gIsoDep.did == RFAL_ISODEP_DID_00) && gIsoDep.lastDID00) ) + { + *(--txBlock) = gIsoDep.did; /* DID is optional */ + } + + *(--txBlock) = computedPcb; /* PCB always present */ + + txBufLen = (infLen + (uint16_t)((uint32_t)infBuf - (uint32_t)txBlock)); /* Calculate overall buffer size */ + + if ( txBufLen > (gIsoDep.fsx - ISODEP_CRC_LEN) ) /* Check if msg length violates the maximum frame size FSC */ + { + return ERR_NOTSUPP; + } + + return rfalTransceiveBlockingTx( txBlock, txBufLen, gIsoDep.rxBuf, gIsoDep.rxBufLen, gIsoDep.rxLen, RFAL_TXRX_FLAGS_DEFAULT, ((gIsoDep.role == ISODEP_ROLE_PICC) ? RFAL_FWT_NONE : fwt ) ); +} + +/*******************************************************************************/ +static ReturnCode isoDepHandleControlMsg( rfalIsoDepControlMsg controlMsg, uint8_t param ) +{ + uint8_t pcb; + uint8_t ctrlMsgBuf[ISODEP_CONTROLMSG_BUF_LEN]; + uint8_t infLen; + uint32_t fwtTemp; + + infLen = 0; + fwtTemp = (gIsoDep.fwt + gIsoDep.dFwt); + ST_MEMSET( ctrlMsgBuf, 0x00, ISODEP_CONTROLMSG_BUF_LEN ); + + switch( controlMsg ) + { + /*******************************************************************************/ + case ISODEP_R_ACK: + + if( gIsoDep.cntRRetrys++ > gIsoDep.maxRetriesR ) + { + return ERR_PROTO; + } + + pcb = isoDep_PCBRACK( gIsoDep.blockNumber ); + break; + + /*******************************************************************************/ + case ISODEP_R_NAK: + if( gIsoDep.cntRRetrys++ > gIsoDep.maxRetriesR ) + { + return ERR_TIMEOUT; + } + + pcb = isoDep_PCBRNAK( gIsoDep.blockNumber ); + break; + + /*******************************************************************************/ + case ISODEP_S_WTX: + if( gIsoDep.cntSRetrys++ > gIsoDep.maxRetriesS ) + { + return ERR_PROTO; + } + + /* Check if WTXM is valid */ + if( ! isoDep_isWTXMValid(param) ) + { + return ERR_PROTO; + } + + if( gIsoDep.role == ISODEP_ROLE_PCD ) + { + /* Calculate temp Wait Time eXtension */ + fwtTemp = (gIsoDep.fwt * param); + fwtTemp = MIN( RFAL_ISODEP_MAX_FWT, fwtTemp ); + fwtTemp += gIsoDep.dFwt; + } + + pcb = ISODEP_PCB_SWTX; + ctrlMsgBuf[ RFAL_ISODEP_PCB_LEN + RFAL_ISODEP_DID_LEN + infLen++] = param; + break; + + /*******************************************************************************/ + case ISODEP_S_DSL: + if( gIsoDep.cntSRetrys++ > gIsoDep.maxRetriesS ) + { + return ERR_PROTO; + } + + if( gIsoDep.role == ISODEP_ROLE_PCD ) + { + /* Digital 1.0 - 13.2.7.3 Poller must wait fwtDEACTIVATION */ + fwtTemp = ISODEP_FWT_DEACTIVATION; + gIsoDep.state = ISODEP_ST_PCD_WAIT_DSL; + } + pcb = ISODEP_PCB_SDSL; + break; + + /*******************************************************************************/ + default: + return ERR_INTERNAL; + } + + return isoDepTx( pcb, ctrlMsgBuf, &ctrlMsgBuf[RFAL_ISODEP_PCB_LEN + RFAL_ISODEP_DID_LEN], infLen, fwtTemp ); +} + +#if RFAL_FEATURE_ISO_DEP_LISTEN +/*******************************************************************************/ +static ReturnCode isoDepReSendControlMsg( void ) +{ + if( isoDep_PCBisRACK( gIsoDep.lastPCB ) ) + { + return isoDepHandleControlMsg( ISODEP_R_ACK, RFAL_ISODEP_NO_PARAM ); + } + + if( isoDep_PCBisRNAK( gIsoDep.lastPCB ) ) + { + return isoDepHandleControlMsg( ISODEP_R_NAK, RFAL_ISODEP_NO_PARAM ); + } + + if( isoDep_PCBisSDeselect( gIsoDep.lastPCB ) ) + { + return isoDepHandleControlMsg( ISODEP_S_DSL, RFAL_ISODEP_NO_PARAM ); + } + + if( isoDep_PCBisSWTX( gIsoDep.lastPCB ) ) + { + return isoDepHandleControlMsg( ISODEP_S_WTX, gIsoDep.lastWTXM ); + } + return ERR_WRONG_STATE; +} +#endif /* RFAL_FEATURE_ISO_DEP_LISTEN */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + + +/*******************************************************************************/ +void rfalIsoDepInitialize( void ) +{ + gIsoDep.state = ISODEP_ST_IDLE; + gIsoDep.role = ISODEP_ROLE_PCD; + gIsoDep.did = RFAL_ISODEP_NO_DID; + gIsoDep.nad = RFAL_ISODEP_NO_NAD; + gIsoDep.blockNumber = 0; + gIsoDep.isTxChaining = false; + gIsoDep.isRxChaining = false; + gIsoDep.lastDID00 = false; + gIsoDep.lastPCB = ISODEP_PCB_INVALID; + gIsoDep.fsx = (uint16_t)RFAL_ISODEP_FSX_16; + gIsoDep.ourFsx = (uint16_t)RFAL_ISODEP_FSX_16; + gIsoDep.hdrLen = RFAL_ISODEP_PCB_LEN; + + gIsoDep.rxLen = NULL; + gIsoDep.rxBuf = NULL; + + gIsoDep.isTxPending = false; + gIsoDep.isWait4WTX = false; + + gIsoDep.compMode = RFAL_COMPLIANCE_MODE_NFC; + gIsoDep.maxRetriesR = RFAL_ISODEP_MAX_R_RETRYS; + gIsoDep.maxRetriesS = RFAL_ISODEP_MAX_S_RETRYS; + gIsoDep.maxRetriesI = RFAL_ISODEP_MAX_I_RETRYS; + gIsoDep.maxRetriesRATS = RFAL_ISODEP_RATS_RETRIES; + + isoDepClearCounters(); +} + + +/*******************************************************************************/ +void rfalIsoDepInitializeWithParams( rfalComplianceMode compMode, uint8_t maxRetriesR, uint8_t maxRetriesS, uint8_t maxRetriesI, uint8_t maxRetriesRATS ) +{ + rfalIsoDepInitialize(); + + gIsoDep.compMode = compMode; + gIsoDep.maxRetriesR = maxRetriesR; + gIsoDep.maxRetriesS = maxRetriesS; + gIsoDep.maxRetriesI = maxRetriesI; + gIsoDep.maxRetriesRATS = maxRetriesRATS; +} + + +#if RFAL_FEATURE_ISO_DEP_POLL +/*******************************************************************************/ +static ReturnCode isoDepDataExchangePCD( uint16_t *outActRxLen, bool *outIsChaining ) +{ + ReturnCode ret; + uint8_t rxPCB; + + /* Check out parameters */ + if( (outActRxLen == NULL) || (outIsChaining == NULL) ) + { + return ERR_PARAM; + } + + *outIsChaining = false; + + /* Calculate header required and check if the buffers InfPositions are suitable */ + gIsoDep.hdrLen = RFAL_ISODEP_PCB_LEN; + if (gIsoDep.did != RFAL_ISODEP_NO_DID) { gIsoDep.hdrLen += RFAL_ISODEP_DID_LEN; } + if (gIsoDep.nad != RFAL_ISODEP_NO_NAD) { gIsoDep.hdrLen += RFAL_ISODEP_NAD_LEN; } + + /* check if there is enough space before the infPos to append ISO-DEP headers on rx and tx */ + if( (gIsoDep.rxBufInfPos < gIsoDep.hdrLen) || (gIsoDep.txBufInfPos < gIsoDep.hdrLen) ) + { + return ERR_PARAM; + } + + /*******************************************************************************/ + /* Wait until SFGT has been fulfilled (as a PCD) */ + if(gIsoDep.SFGTTimer != 0U) + { + if( !isoDepTimerisExpired( gIsoDep.SFGTTimer ) ) + { + return ERR_BUSY; + } + } + /* Once done, clear SFGT timer */ + gIsoDep.SFGTTimer = 0; + + + /*******************************************************************************/ + switch( gIsoDep.state ) + { + /*******************************************************************************/ + case ISODEP_ST_IDLE: + return ERR_NONE; + + /*******************************************************************************/ + case ISODEP_ST_PCD_TX: + ret = isoDepTx( isoDep_PCBIBlock( gIsoDep.blockNumber ), gIsoDep.txBuf, &gIsoDep.txBuf[gIsoDep.txBufInfPos], gIsoDep.txBufLen, (gIsoDep.fwt + gIsoDep.dFwt) ); + switch( ret ) + { + case ERR_NONE: + gIsoDep.state = ISODEP_ST_PCD_RX; + break; + + default: + return ret; + } + /* fall through */ + + /*******************************************************************************/ + case ISODEP_ST_PCD_WAIT_DSL: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + case ISODEP_ST_PCD_RX: + + ret = rfalGetTransceiveStatus(); + switch( ret ) + { + /* Data rcvd with error or timeout -> Send R-NAK */ + case ERR_TIMEOUT: + case ERR_CRC: + case ERR_PAR: + case ERR_FRAMING: /* added to handle test cases scenario TC_POL_NFCB_T4AT_BI_82_x_y & TC_POL_NFCB_T4BT_BI_82_x_y */ + case ERR_INCOMPLETE_BYTE: /* added to handle test cases scenario TC_POL_NFCB_T4AT_BI_82_x_y & TC_POL_NFCB_T4BT_BI_82_x_y */ + + if( gIsoDep.isRxChaining ) + { /* Rule 5 - In PICC chaining when a invalid/timeout occurs -> R-ACK */ + EXIT_ON_ERR( ret, isoDepHandleControlMsg( ISODEP_R_ACK, RFAL_ISODEP_NO_PARAM ) ); + } + else if( gIsoDep.state == ISODEP_ST_PCD_WAIT_DSL ) + { /* Rule 8 - If s-Deselect response fails MAY retransmit */ + EXIT_ON_ERR( ret, isoDepHandleControlMsg( ISODEP_S_DSL, RFAL_ISODEP_NO_PARAM ) ); + } + else + { /* Rule 4 - When a invalid block or timeout occurs -> R-NACK */ + EXIT_ON_ERR( ret, isoDepHandleControlMsg( ISODEP_R_NAK, RFAL_ISODEP_NO_PARAM ) ); + } + return ERR_BUSY; + + case ERR_NONE: + break; + + case ERR_BUSY: + return ERR_BUSY; /* Debug purposes */ + + default: + return ret; + } + + /*******************************************************************************/ + /* No error, process incoming msg */ + /*******************************************************************************/ + + (*outActRxLen) = rfalConvBitsToBytes( *outActRxLen ); + + + /* Check rcvd msg length, cannot be less then the expected header */ + if( ((*outActRxLen) < gIsoDep.hdrLen) || ((*outActRxLen) >= gIsoDep.ourFsx) ) + { + return ERR_PROTO; + } + + /* Grab rcvd PCB */ + rxPCB = gIsoDep.rxBuf[ ISODEP_PCB_POS ]; + + + /* EMVCo doesn't allow usage of for CID or NAD EMVCo 2.6 TAble 10.2 */ + if( (gIsoDep.compMode == RFAL_COMPLIANCE_MODE_EMV) && ( isoDep_PCBhasDID(rxPCB) || isoDep_PCBhasNAD(rxPCB)) ) + { + return ERR_PROTO; + } + + /* If we are expecting DID, check if PCB signals its presence and if device ID match*/ + if( (gIsoDep.did != RFAL_ISODEP_NO_DID) && ( !isoDep_PCBhasDID(rxPCB) || (gIsoDep.did != gIsoDep.rxBuf[ ISODEP_DID_POS ])) ) + { + return ERR_PROTO; + } + + + /*******************************************************************************/ + /* Process S-Block */ + /*******************************************************************************/ + if( isoDep_PCBisSBlock(rxPCB) ) + { + /* Check if is a Wait Time eXtension */ + if( isoDep_PCBisSWTX(rxPCB) ) + { + /* Rule 3 - respond to S-block: get 1st INF byte S(STW): Power + WTXM */ + EXIT_ON_ERR( ret, isoDepHandleControlMsg( ISODEP_S_WTX, isoDep_GetWTXM(gIsoDep.rxBuf[gIsoDep.hdrLen]) ) ); + return ERR_BUSY; + } + + /* Check if is a deselect response */ + if( isoDep_PCBisSDeselect(rxPCB) ) + { + if( gIsoDep.state == ISODEP_ST_PCD_WAIT_DSL ) + { + rfalIsoDepInitialize(); /* Session finished reInit vars */ + return ERR_NONE; + } + + /* Deselect response not expected */ + /* fall through to PROTO error */ + } + /* Unexpected S-Block */ + return ERR_PROTO; + } + + /*******************************************************************************/ + /* Process R-Block */ + /*******************************************************************************/ + else if( isoDep_PCBisRBlock(rxPCB) ) + { + if( isoDep_PCBisRACK(rxPCB) ) /* Check if is a R-ACK */ + { + if( isoDep_GetBN(rxPCB) == gIsoDep.blockNumber ) /* Expected block number */ + { + /* Rule B - ACK with expected bn -> Increment block number */ + gIsoDep.blockNumber = isoDep_PCBNextBN( gIsoDep.blockNumber ); + + /* R-ACK only allowed when PCD chaining */ + if( !gIsoDep.isTxChaining ) + { + return ERR_PROTO; + } + + /* Rule 7 - Chaining transaction done, continue chaining */ + isoDepClearCounters(); + return ERR_NONE; /* This block has been transmitted */ + } + else + { + /* Rule 6 - R-ACK with wrong block number retransmit */ + if( gIsoDep.cntIRetrys++ < gIsoDep.maxRetriesI ) + { + gIsoDep.cntRRetrys = 0; /* Clear R counter only */ + gIsoDep.state = ISODEP_ST_PCD_TX; + return ERR_BUSY; + } + return ERR_PROTO; + } + } + else /* Unexcpected R-Block */ + { + return ERR_PROTO; + } + } + + /*******************************************************************************/ + /* Process I-Block */ + /*******************************************************************************/ + else if( isoDep_PCBisIBlock(rxPCB) ) + { + /*******************************************************************************/ + /* is PICC performing chaining */ + if( isoDep_PCBisChaining(rxPCB) ) + { + gIsoDep.isRxChaining = true; + *outIsChaining = true; + + if( isoDep_GetBN(rxPCB) == gIsoDep.blockNumber ) + { + /* Rule B - ACK with correct block number -> Increase Block number */ + isoDep_ToggleBN( gIsoDep.blockNumber ); + + isoDepClearCounters(); /* Clear counters in case R counter is already at max */ + + /* Rule 2 - Send ACK */ + EXIT_ON_ERR( ret, isoDepHandleControlMsg( ISODEP_R_ACK, RFAL_ISODEP_NO_PARAM ) ); + + /* Received I-Block with chaining, send current data to DH */ + + /* remove ISO DEP header, check is necessary to move the INF data on the buffer */ + *outActRxLen -= gIsoDep.hdrLen; + if( (gIsoDep.hdrLen != gIsoDep.rxBufInfPos) && (*outActRxLen > 0U) ) + { + ST_MEMMOVE( &gIsoDep.rxBuf[gIsoDep.rxBufInfPos], &gIsoDep.rxBuf[gIsoDep.hdrLen], *outActRxLen ); + } + + isoDepClearCounters(); + return ERR_AGAIN; /* Send Again signalling to run again, but some chaining data has arrived */ + } + else + { + /* Rule 5 - PICC chaining invalid I-Block -> R-ACK */ + EXIT_ON_ERR( ret, isoDepHandleControlMsg( ISODEP_R_ACK, RFAL_ISODEP_NO_PARAM ) ); + } + return ERR_BUSY; + } + + gIsoDep.isRxChaining = false; /* clear PICC chaining flag */ + + if( isoDep_GetBN(rxPCB) == gIsoDep.blockNumber ) + { + /* Rule B - I-Block with correct block number -> Increase Block number */ + isoDep_ToggleBN( gIsoDep.blockNumber ); + + /* I-Block transaction done successfully */ + + /* remove ISO DEP header, check is necessary to move the INF data on the buffer */ + *outActRxLen -= gIsoDep.hdrLen; + if( (gIsoDep.hdrLen != gIsoDep.rxBufInfPos) && (*outActRxLen > 0U) ) + { + ST_MEMMOVE( &gIsoDep.rxBuf[gIsoDep.rxBufInfPos], &gIsoDep.rxBuf[gIsoDep.hdrLen], *outActRxLen ); + } + + gIsoDep.state = ISODEP_ST_IDLE; + isoDepClearCounters(); + return ERR_NONE; + } + else + { + if( (gIsoDep.compMode != RFAL_COMPLIANCE_MODE_ISO) ) + { + /* Invalid Block (not chaining) -> Raise error Digital 1.1 15.2.6.4 EMVCo 2.6 10.3.5.4 */ + return ERR_PROTO; + } + + /* Rule 4 - Invalid Block -> R-NAK */ + EXIT_ON_ERR( ret, isoDepHandleControlMsg( ISODEP_R_NAK, RFAL_ISODEP_NO_PARAM ) ); + return ERR_BUSY; + } + } + else /* not S/R/I - Block */ + { + return ERR_PROTO; + } + /* fall through */ + + /*******************************************************************************/ + default: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + /* MISRA 16.4: no empty default (comment will suffice) */ + break; + } + + return ERR_INTERNAL; +} + +/*******************************************************************************/ +ReturnCode rfalIsoDepDeselect( void ) +{ + ReturnCode ret; + uint32_t cntRerun; + bool dummyB; + + /*******************************************************************************/ + /* Check if rx parameters have been set before, otherwise use global variable * + * To cope with a Deselect after RATS\ATTRIB without any I-Block exchanged */ + if( (gIsoDep.rxLen == NULL) || (gIsoDep.rxBuf == NULL) ) + { + /* Using local vars would be safe as rfalIsoDepInitialize will clear the * + * reference to local vars before exiting (no EXIT_ON_ERR), * + * but MISRA 18.6 3217 would be still be flagged. Using static variables */ + gIsoDep.rxLen = &gIsoDep.ctrlRxLen; + gIsoDep.rxBuf = gIsoDep.ctrlRxBuf; + + gIsoDep.rxBufLen = ISODEP_CONTROLMSG_BUF_LEN; + gIsoDep.rxBufInfPos = (RFAL_ISODEP_PCB_LEN + RFAL_ISODEP_DID_LEN); + gIsoDep.txBufInfPos = (RFAL_ISODEP_PCB_LEN + RFAL_ISODEP_DID_LEN); + } + + + /*******************************************************************************/ + /* The Deselect process is being done blocking, Digital 1.0 - 13.2.7.1 MUST wait response and retry*/ + /* Set the maximum reruns while we will wait for a response */ + cntRerun = ISODEP_MAX_RERUNS; + + /* Send DSL request and run protocol until get a response, error or "timeout" */ + EXIT_ON_ERR( ret, isoDepHandleControlMsg( ISODEP_S_DSL, RFAL_ISODEP_NO_PARAM )); + do{ + ret = isoDepDataExchangePCD( gIsoDep.rxLen, &dummyB ); + rfalWorker(); + } + while( ((cntRerun--) != 0U) && (ret == ERR_BUSY) ); + + rfalIsoDepInitialize(); + return ((cntRerun == 0U) ? ERR_TIMEOUT : ret); +} + +#endif /* RFAL_FEATURE_ISO_DEP_POLL */ + + +/*******************************************************************************/ +uint32_t rfalIsoDepFWI2FWT( uint8_t fwi ) +{ + uint32_t result; + uint8_t tmpFWI; + + tmpFWI = fwi; + + /* RFU values -> take the default value + * Digital 1.0 11.6.2.17 FWI[1,14] + * Digital 1.1 7.6.2.22 FWI[0,14] + * EMVCo 2.6 Table A.5 FWI[0,14] */ + if( tmpFWI > ISODEP_FWI_MAX ) + { + tmpFWI = RFAL_ISODEP_FWI_DEFAULT; + } + + /* FWT = (256 x 16/fC) x 2^FWI => 2^(FWI+12) Digital 1.1 13.8.1 & 7.9.1 */ + + result = ((uint32_t)1U << (tmpFWI + 12U)); + result = MIN( RFAL_ISODEP_MAX_FWT, result); /* Maximum Frame Waiting Time must be fulfilled */ + + return result; +} + + +/*******************************************************************************/ +uint16_t rfalIsoDepFSxI2FSx( uint8_t FSxI ) +{ + uint16_t fsx; + uint8_t fsi; + + /* Enforce maximum FSxI/FSx allowed - NFC Forum and EMVCo differ */ + fsi = (( gIsoDep.compMode == RFAL_COMPLIANCE_MODE_EMV ) ? MIN( FSxI, RFAL_ISODEP_FSDI_MAX_EMV ) : MIN( FSxI, RFAL_ISODEP_FSDI_MAX_NFC )); + + switch( fsi ) + { + case (uint8_t)RFAL_ISODEP_FSXI_16: fsx = (uint16_t)RFAL_ISODEP_FSX_16; break; + case (uint8_t)RFAL_ISODEP_FSXI_24: fsx = (uint16_t)RFAL_ISODEP_FSX_24; break; + case (uint8_t)RFAL_ISODEP_FSXI_32: fsx = (uint16_t)RFAL_ISODEP_FSX_32; break; + case (uint8_t)RFAL_ISODEP_FSXI_40: fsx = (uint16_t)RFAL_ISODEP_FSX_40; break; + case (uint8_t)RFAL_ISODEP_FSXI_48: fsx = (uint16_t)RFAL_ISODEP_FSX_48; break; + case (uint8_t)RFAL_ISODEP_FSXI_64: fsx = (uint16_t)RFAL_ISODEP_FSX_64; break; + case (uint8_t)RFAL_ISODEP_FSXI_96: fsx = (uint16_t)RFAL_ISODEP_FSX_96; break; + case (uint8_t)RFAL_ISODEP_FSXI_128: fsx = (uint16_t)RFAL_ISODEP_FSX_128; break; + case (uint8_t)RFAL_ISODEP_FSXI_256: fsx = (uint16_t)RFAL_ISODEP_FSX_256; break; + case (uint8_t)RFAL_ISODEP_FSXI_512: fsx = (uint16_t)RFAL_ISODEP_FSX_512; break; + case (uint8_t)RFAL_ISODEP_FSXI_1024: fsx = (uint16_t)RFAL_ISODEP_FSX_1024; break; + case (uint8_t)RFAL_ISODEP_FSXI_2048: fsx = (uint16_t)RFAL_ISODEP_FSX_2048; break; + case (uint8_t)RFAL_ISODEP_FSXI_4096: fsx = (uint16_t)RFAL_ISODEP_FSX_4096; break; + default: fsx = (uint16_t)RFAL_ISODEP_FSX_256; break; + } + return fsx; +} + + +#if RFAL_FEATURE_ISO_DEP_LISTEN + +/*******************************************************************************/ +bool rfalIsoDepIsRats( const uint8_t *buf, uint8_t bufLen ) +{ + if(buf != NULL) + { + if ((RFAL_ISODEP_CMD_RATS == (uint8_t)*buf) && (sizeof(rfalIsoDepRats) == bufLen)) + { + return true; + } + } + return false; +} + + +/*******************************************************************************/ +bool rfalIsoDepIsAttrib( const uint8_t *buf, uint8_t bufLen ) +{ + if(buf != NULL) + { + if ( (RFAL_ISODEP_CMD_ATTRIB == (uint8_t)*buf) && + (RFAL_ISODEP_ATTRIB_REQ_MIN_LEN <= bufLen) && + ((RFAL_ISODEP_ATTRIB_REQ_MIN_LEN + RFAL_ISODEP_ATTRIB_HLINFO_LEN) >= bufLen) ) + { + return true; + } + } + return false; +} + + + +/*******************************************************************************/ +ReturnCode rfalIsoDepListenStartActivation( rfalIsoDepAtsParam *atsParam, const rfalIsoDepAttribResParam *attribResParam, uint8_t *buf, uint16_t bufLen, rfalIsoDepListenActvParam actParam) +{ + uint8_t *txBuf; + uint8_t bufIt; + uint8_t *buffer = buf; + + /*******************************************************************************/ + bufIt = 0; + txBuf = (uint8_t*)actParam.rxBuf; /* Use the rxBuf as TxBuf as well, the struct enforces a size enough MAX( NFCA_ATS_MAX_LEN, NFCB_ATTRIB_RES_MAX_LEN ) */ + gIsoDep.txBR = RFAL_BR_106; + gIsoDep.rxBR = RFAL_BR_106; + + /* Check for a valid buffer pointer */ + if( buffer == NULL ) + { + return ERR_PARAM; + } + + /*******************************************************************************/ + if( *buffer == RFAL_ISODEP_CMD_RATS ) + { + /* Check ATS parameters */ + if( atsParam == NULL ) + { + return ERR_PARAM; + } + + /* If requested copy RATS to device info */ + if( actParam.isoDepDev != NULL ) + { + ST_MEMCPY( (uint8_t*)&actParam.isoDepDev->activation.A.Poller.RATS, buffer, sizeof(rfalIsoDepRats) ); /* Copy RATS' CMD + PARAM */ + } + + + /*******************************************************************************/ + /* Process RATS */ + buffer++; + gIsoDep.fsx = rfalIsoDepFSxI2FSx( (((*buffer) & RFAL_ISODEP_RATS_PARAM_FSDI_MASK) >> RFAL_ISODEP_RATS_PARAM_FSDI_SHIFT) ); + gIsoDep.did = (*buffer & RFAL_ISODEP_DID_MASK); + + + /*******************************************************************************/ + /* Digital 1.1 13.6.1.8 - DID as to between 0 and 14 */ + if( gIsoDep.did > RFAL_ISODEP_DID_MAX ) + { + return ERR_PROTO; + } + + /* Check if we are configured to support DID */ + if( (gIsoDep.did != RFAL_ISODEP_DID_00) && (!atsParam->didSupport) ) + { + return ERR_NOTSUPP; + } + + + /*******************************************************************************/ + /* Check RFAL supported bit rates */ + if( (!(RFAL_SUPPORT_BR_CE_A_212) && (((atsParam->ta & RFAL_ISODEP_ATS_TA_DPL_212) != 0U) || ((atsParam->ta & RFAL_ISODEP_ATS_TA_DLP_212) != 0U))) || + (!(RFAL_SUPPORT_BR_CE_A_424) && (((atsParam->ta & RFAL_ISODEP_ATS_TA_DPL_424) != 0U) || ((atsParam->ta & RFAL_ISODEP_ATS_TA_DLP_424) != 0U))) || + (!(RFAL_SUPPORT_BR_CE_A_848) && (((atsParam->ta & RFAL_ISODEP_ATS_TA_DPL_848) != 0U) || ((atsParam->ta & RFAL_ISODEP_ATS_TA_DLP_848) != 0U))) ) + { + return ERR_NOTSUPP; + } + + /* Enforce proper FWI configuration */ + if( atsParam->fwi > ISODEP_FWI_LIS_MAX) + { + atsParam->fwi = ISODEP_FWI_LIS_MAX; + } + + gIsoDep.atsTA = atsParam->ta; + gIsoDep.fwt = rfalIsoDepFWI2FWT(atsParam->fwi); + gIsoDep.ourFsx = rfalIsoDepFSxI2FSx(atsParam->fsci); + + + /* Ensure proper/maximum Historical Bytes length */ + atsParam->hbLen = MIN( RFAL_ISODEP_ATS_HB_MAX_LEN, atsParam->hbLen ); + + /*******************************************************************************/ + /* Compute ATS */ + + txBuf[ bufIt++ ] = (RFAL_ISODEP_ATS_HIST_OFFSET + atsParam->hbLen); /* TL */ + txBuf[ bufIt++ ] = ( (RFAL_ISODEP_ATS_T0_TA_PRESENCE_MASK | RFAL_ISODEP_ATS_T0_TB_PRESENCE_MASK | + RFAL_ISODEP_ATS_T0_TC_PRESENCE_MASK)| atsParam->fsci ); /* T0 */ + txBuf[ bufIt++ ] = atsParam->ta; /* TA */ + txBuf[ bufIt++ ] = ( (atsParam->fwi << RFAL_ISODEP_RATS_PARAM_FSDI_SHIFT) | + (atsParam->sfgi & RFAL_ISODEP_RATS_PARAM_FSDI_MASK) ); /* TB */ + txBuf[ bufIt++ ] = (uint8_t)((atsParam->didSupport) ? RFAL_ISODEP_ATS_TC_DID : 0U); /* TC */ + + if( atsParam->hbLen > 0U ) /* MISRA 21.18 */ + { + ST_MEMCPY( &txBuf[bufIt], atsParam->hb, atsParam->hbLen ); /* T1-Tk */ + bufIt += atsParam->hbLen; + } + + gIsoDep.state = ISODEP_ST_PICC_ACT_ATS; + + } + /*******************************************************************************/ + else if( *buffer == RFAL_ISODEP_CMD_ATTRIB ) + { + /* Check ATTRIB parameters */ + if( attribResParam == NULL ) + { + return ERR_PARAM; + } + + /* REMARK: ATTRIB handling */ + NO_WARNING(attribResParam); + NO_WARNING(bufLen); + return ERR_NOT_IMPLEMENTED; + } + else + { + return ERR_PARAM; + } + + gIsoDep.actvParam = actParam; + + + /*******************************************************************************/ + /* If requested copy to ISO-DEP device info */ + if( actParam.isoDepDev != NULL ) + { + actParam.isoDepDev->info.DID = gIsoDep.did; + actParam.isoDepDev->info.FSx = gIsoDep.fsx; + actParam.isoDepDev->info.FWT = gIsoDep.fwt; + actParam.isoDepDev->info.dFWT = 0; + actParam.isoDepDev->info.DSI = gIsoDep.txBR; + actParam.isoDepDev->info.DRI = gIsoDep.rxBR; + } + + return rfalTransceiveBlockingTx( txBuf, bufIt, (uint8_t*)actParam.rxBuf, sizeof( rfalIsoDepBufFormat ), actParam.rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_FWT_NONE ); +} + + +/*******************************************************************************/ +ReturnCode rfalIsoDepListenGetActivationStatus( void ) +{ + ReturnCode err; + uint8_t* txBuf; + uint8_t bufIt; + + rfalBitRate dsi; + rfalBitRate dri; + + + /* Check if Activation is running */ + if( gIsoDep.state < ISODEP_ST_PICC_ACT_ATS ) + { + return ERR_WRONG_STATE; + } + + /* Check if Activation has finished already */ + if( gIsoDep.state >= ISODEP_ST_PICC_RX ) + { + return ERR_NONE; + } + + + /*******************************************************************************/ + /* Check for incoming msg */ + err = rfalGetTransceiveStatus(); + switch( err ) + { + /*******************************************************************************/ + case ERR_NONE: + break; + + /*******************************************************************************/ + case ERR_LINK_LOSS: + case ERR_BUSY: + return err; + + /*******************************************************************************/ + case ERR_CRC: + case ERR_PAR: + case ERR_FRAMING: + + /* ISO14443 4 5.6.2.2 2 If ATS has been replied upon a invalid block, PICC disables the PPS responses */ + if( gIsoDep.state == ISODEP_ST_PICC_ACT_ATS ) + { + gIsoDep.state = ISODEP_ST_PICC_RX; + break; + } + /* fall through */ + + /*******************************************************************************/ + default: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + /* ReEnable the receiver and wait for another frame */ + isoDepReEnableRx( (uint8_t*)gIsoDep.actvParam.rxBuf, sizeof( rfalIsoDepBufFormat ), gIsoDep.actvParam.rxLen ); + + return ERR_BUSY; + } + + + txBuf = (uint8_t*)gIsoDep.actvParam.rxBuf; /* Use the rxBuf as TxBuf as well, the struct enforces a size enough MAX(NFCA_PPS_RES_LEN, ISODEP_DSL_MAX_LEN) */ + dri = RFAL_BR_KEEP; /* The RFAL_BR_KEEP is used to check if PPS with BR change was requested */ + dsi = RFAL_BR_KEEP; /* MISRA 9.1 */ + bufIt = 0; + + + /*******************************************************************************/ + gIsoDep.role = ISODEP_ROLE_PICC; + + /*******************************************************************************/ + if( gIsoDep.state == ISODEP_ST_PICC_ACT_ATS ) + { + /* Check for a PPS ISO 14443-4 5.3 */ + if( ( ((uint8_t*)gIsoDep.actvParam.rxBuf)[RFAL_ISODEP_PPS_STARTBYTE_POS] & RFAL_ISODEP_PPS_MASK) == RFAL_ISODEP_PPS_SB ) + { + /* ISO 14443-4 5.3.1 Check if the we are the addressed DID/CID */ + /* ISO 14443-4 5.3.2 Check for a valid PPS0 */ + if( (( ((uint8_t*)gIsoDep.actvParam.rxBuf)[RFAL_ISODEP_PPS_STARTBYTE_POS] & RFAL_ISODEP_DID_MASK) != gIsoDep.did) || + (( ((uint8_t*)gIsoDep.actvParam.rxBuf)[RFAL_ISODEP_PPS_PPS0_POS] & RFAL_ISODEP_PPS0_VALID_MASK) != RFAL_ISODEP_PPS0_PPS1_NOT_PRESENT) ) + { + /* Invalid DID on PPS request or Invalid PPS0, reEnable the receiver and wait another frame */ + isoDepReEnableRx( (uint8_t*)gIsoDep.actvParam.rxBuf, sizeof( rfalIsoDepBufFormat ), gIsoDep.actvParam.rxLen ); + + return ERR_BUSY; + } + + /*******************************************************************************/ + /* Check PPS1 presence */ + if( ((uint8_t*)gIsoDep.actvParam.rxBuf)[RFAL_ISODEP_PPS_PPS0_POS] == RFAL_ISODEP_PPS0_PPS1_PRESENT ) + { + uint8_t newdri = ((uint8_t*)gIsoDep.actvParam.rxBuf)[RFAL_ISODEP_PPS_PPS1_POS] & RFAL_ISODEP_PPS1_DxI_MASK; /* MISRA 10.8 */ + uint8_t newdsi = (((uint8_t*)gIsoDep.actvParam.rxBuf)[RFAL_ISODEP_PPS_PPS1_POS] >> RFAL_ISODEP_PPS1_DSI_SHIFT) & RFAL_ISODEP_PPS1_DxI_MASK; /* MISRA 10.8 */ + /* PRQA S 4342 2 # MISRA 10.5 - Layout of enum rfalBitRate and above masks guarantee no invalid enum values to be created */ + dri = (rfalBitRate) (newdri); + dsi = (rfalBitRate) (newdsi); + + if( (!(RFAL_SUPPORT_BR_CE_A_106) && (( dsi == RFAL_BR_106 ) || ( dri == RFAL_BR_106 ))) || + (!(RFAL_SUPPORT_BR_CE_A_212) && (( dsi == RFAL_BR_212 ) || ( dri == RFAL_BR_212 ))) || + (!(RFAL_SUPPORT_BR_CE_A_424) && (( dsi == RFAL_BR_424 ) || ( dri == RFAL_BR_424 ))) || + (!(RFAL_SUPPORT_BR_CE_A_848) && (( dsi == RFAL_BR_848 ) || ( dri == RFAL_BR_848 ))) ) + { + return ERR_PROTO; + } + } + + /*******************************************************************************/ + /* Compute and send PPS RES / Ack */ + txBuf[ bufIt++ ] = ((uint8_t*)gIsoDep.actvParam.rxBuf)[RFAL_ISODEP_PPS_STARTBYTE_POS]; + + rfalTransceiveBlockingTx( txBuf, bufIt, (uint8_t*)gIsoDep.actvParam.rxBuf, sizeof( rfalIsoDepBufFormat ), gIsoDep.actvParam.rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_FWT_NONE ); + + /*******************************************************************************/ + /* Exchange the bit rates if requested */ + if( dri != RFAL_BR_KEEP ) + { + rfalSetBitRate( dsi, dri ); /* PRQA S 2880 # MISRA 2.1 - Unreachable code due to configuration option being set/unset above (RFAL_SUPPORT_BR_CE_A_xxx) */ + + gIsoDep.txBR = dsi; /* DSI codes the divisor from PICC to PCD */ + gIsoDep.rxBR = dri; /* DRI codes the divisor from PCD to PICC */ + + + if(gIsoDep.actvParam.isoDepDev != NULL) + { + gIsoDep.actvParam.isoDepDev->info.DSI = dsi; + gIsoDep.actvParam.isoDepDev->info.DRI = dri; + } + } + } + /* Check for a S-Deselect is done on Data Exchange Activity */ + } + + /*******************************************************************************/ + gIsoDep.hdrLen = RFAL_ISODEP_PCB_LEN; + gIsoDep.hdrLen += RFAL_ISODEP_DID_LEN; /* Always assume DID to be aligned with Digital 1.1 15.1.2 and ISO14443 4 5.6.3 #454 */ + gIsoDep.hdrLen += (uint8_t)((gIsoDep.nad != RFAL_ISODEP_NO_NAD) ? RFAL_ISODEP_NAD_LEN : 0U); + + /*******************************************************************************/ + /* Rule C - The PICC block number shall be initialized to 1 at activation */ + gIsoDep.blockNumber = 1; + + /* Activation done, keep the rcvd data in, reMap the activation buffer to the global to be retrieved by the DEP method */ + gIsoDep.rxBuf = (uint8_t*)gIsoDep.actvParam.rxBuf; + gIsoDep.rxBufLen = sizeof( rfalIsoDepBufFormat ); + gIsoDep.rxBufInfPos = (uint8_t)((uint32_t)gIsoDep.actvParam.rxBuf->inf - (uint32_t)gIsoDep.actvParam.rxBuf->prologue); + gIsoDep.rxLen = gIsoDep.actvParam.rxLen; + gIsoDep.rxChaining = gIsoDep.actvParam.isRxChaining; + + gIsoDep.state = ISODEP_ST_PICC_RX; + return ERR_NONE; +} + +#endif /* RFAL_FEATURE_ISO_DEP_LISTEN */ + + +/*******************************************************************************/ +uint16_t rfalIsoDepGetMaxInfLen( void ) +{ + /* Check whether all parameters are valid, otherwise return minimum default value */ + if( (gIsoDep.fsx < (uint16_t)RFAL_ISODEP_FSX_16) || (gIsoDep.fsx > (uint16_t)RFAL_ISODEP_FSX_4096) || (gIsoDep.hdrLen > ISODEP_HDR_MAX_LEN) ) + { + uint16_t isodepFsx16 = (uint16_t)RFAL_ISODEP_FSX_16; /* MISRA 10.1 */ + return (isodepFsx16 - RFAL_ISODEP_PCB_LEN - ISODEP_CRC_LEN); + } + + return (gIsoDep.fsx - gIsoDep.hdrLen - ISODEP_CRC_LEN); +} + + +/*******************************************************************************/ +ReturnCode rfalIsoDepStartTransceive( rfalIsoDepTxRxParam param ) +{ + gIsoDep.txBuf = param.txBuf->prologue; + gIsoDep.txBufInfPos = (uint8_t)((uint32_t)param.txBuf->inf - (uint32_t)param.txBuf->prologue); + gIsoDep.txBufLen = param.txBufLen; + gIsoDep.isTxChaining = param.isTxChaining; + + gIsoDep.rxBuf = param.rxBuf->prologue; + gIsoDep.rxBufInfPos = (uint8_t)((uint32_t)param.rxBuf->inf - (uint32_t)param.rxBuf->prologue); + gIsoDep.rxBufLen = sizeof(rfalIsoDepBufFormat); + + gIsoDep.rxLen = param.rxLen; + gIsoDep.rxChaining = param.isRxChaining; + + + gIsoDep.fwt = param.FWT; + gIsoDep.dFwt = param.dFWT; + gIsoDep.fsx = param.FSx; + gIsoDep.did = param.DID; + + /* Only change the FSx from activation if no to Keep */ + gIsoDep.ourFsx = (( param.ourFSx != RFAL_ISODEP_FSX_KEEP ) ? param.ourFSx : gIsoDep.ourFsx); + + /* Clear inner control params for next dataExchange */ + gIsoDep.isRxChaining = false; + isoDepClearCounters(); + + if(gIsoDep.role == ISODEP_ROLE_PICC) + { + if(gIsoDep.txBufLen > 0U) + { + /* Ensure that an RTOX Ack is not being expected at moment */ + if( !gIsoDep.isWait4WTX ) + { + gIsoDep.state = ISODEP_ST_PICC_TX; + return ERR_NONE; + } + else + { + /* If RTOX Ack is expected, signal a pending Tx to be transmitted right after */ + gIsoDep.isTxPending = true; + } + } + + /* Digital 1.1 15.2.5.1 The first block SHALL be sent by the Reader/Writer */ + gIsoDep.state = ISODEP_ST_PICC_RX; + return ERR_NONE; + } + + gIsoDep.state = ISODEP_ST_PCD_TX; + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalIsoDepGetTransceiveStatus( void ) +{ + if( gIsoDep.role == ISODEP_ROLE_PICC) + { +#if RFAL_FEATURE_ISO_DEP_LISTEN + return isoDepDataExchangePICC(); +#else + return ERR_NOTSUPP; +#endif /* RFAL_FEATURE_ISO_DEP_LISTEN */ + } + else + { +#if RFAL_FEATURE_ISO_DEP_POLL + return isoDepDataExchangePCD( gIsoDep.rxLen, gIsoDep.rxChaining ); +#else + return ERR_NOTSUPP; +#endif /* RFAL_FEATURE_ISO_DEP_POLL */ + } +} + + +#if RFAL_FEATURE_ISO_DEP_LISTEN + +/*******************************************************************************/ +static ReturnCode isoDepDataExchangePICC( void ) +{ + uint8_t rxPCB; + ReturnCode ret; + + switch( gIsoDep.state ) + { + /*******************************************************************************/ + case ISODEP_ST_IDLE: + return ERR_NONE; + + + /*******************************************************************************/ + case ISODEP_ST_PICC_TX: + + ret = isoDepTx( isoDep_PCBIBlock( gIsoDep.blockNumber ), gIsoDep.txBuf, &gIsoDep.txBuf[gIsoDep.txBufInfPos], gIsoDep.txBufLen, RFAL_FWT_NONE ); + + /* Clear pending Tx flag */ + gIsoDep.isTxPending = false; + + switch( ret ) + { + case ERR_NONE: + gIsoDep.state = ISODEP_ST_PICC_RX; + return ERR_BUSY; + + default: + /* MISRA 16.4: no empty default statement (a comment being enough) */ + break; + } + return ret; + + + /*******************************************************************************/ + case ISODEP_ST_PICC_RX: + + ret = rfalGetTransceiveStatus(); + switch( ret ) + { + /*******************************************************************************/ + /* Data rcvd with error or timeout -> mute */ + case ERR_TIMEOUT: + case ERR_CRC: + case ERR_PAR: + case ERR_FRAMING: + + /* Digital 1.1 - 15.2.6.2 The CE SHALL NOT attempt error recovery and remains in Rx mode upon Transmission or a Protocol Error */ + isoDepReEnableRx( (uint8_t*)gIsoDep.rxBuf, sizeof( rfalIsoDepBufFormat ), gIsoDep.rxLen ); + + return ERR_BUSY; + + /*******************************************************************************/ + case ERR_LINK_LOSS: + return ret; /* Debug purposes */ + + case ERR_BUSY: + return ret; /* Debug purposes */ + + /*******************************************************************************/ + case ERR_NONE: + *gIsoDep.rxLen = rfalConvBitsToBytes( *gIsoDep.rxLen ); + break; + + /*******************************************************************************/ + default: + return ret; + } + break; + + + /*******************************************************************************/ + case ISODEP_ST_PICC_SWTX: + + if( !isoDepTimerisExpired( gIsoDep.WTXTimer ) ) /* Do nothing until WTX timer has expired */ + { + return ERR_BUSY; + } + + /* Set waiting for WTX Ack Flag */ + gIsoDep.isWait4WTX = true; + + /* Digital 1.1 15.2.2.9 - Calculate the WTXM such that FWTtemp <= FWTmax */ + gIsoDep.lastWTXM = (uint8_t)isoDep_WTXMListenerMax( gIsoDep.fwt ); + EXIT_ON_ERR( ret, isoDepHandleControlMsg( ISODEP_S_WTX, gIsoDep.lastWTXM ) ); + + gIsoDep.state = ISODEP_ST_PICC_RX; /* Go back to Rx to process WTX ack */ + return ERR_BUSY; + + + /*******************************************************************************/ + default: + return ERR_INTERNAL; + } + + /* ISO 14443-4 7.5.6.2 CE SHALL NOT attempt error recovery -> clear counters */ + isoDepClearCounters(); + + /*******************************************************************************/ + /* No error, process incoming msg */ + /*******************************************************************************/ + + /* Grab rcvd PCB */ + rxPCB = gIsoDep.rxBuf[ ISODEP_PCB_POS ]; + + + /*******************************************************************************/ + /* When DID=0 PCD may or may not use DID, therefore check whether current PCD request + * has DID present to be reflected on max INF length #454 */ + + /* ReCalculate Header Length */ + gIsoDep.hdrLen = RFAL_ISODEP_PCB_LEN; + gIsoDep.hdrLen += (uint8_t)( (isoDep_PCBhasDID(rxPCB)) ? RFAL_ISODEP_DID_LEN : 0U ); + gIsoDep.hdrLen += (uint8_t)( (isoDep_PCBhasNAD(rxPCB)) ? RFAL_ISODEP_NAD_LEN : 0U ); + + /* Store whether last PCD block had DID. for PICC special handling of DID = 0 */ + if( gIsoDep.did == RFAL_ISODEP_DID_00 ) + { + gIsoDep.lastDID00 = ( (isoDep_PCBhasDID(rxPCB)) ? true : false ); + } + + /*******************************************************************************/ + /* Check rcvd msg length, cannot be less then the expected header OR * + * if the rcvd msg exceeds our announced frame size (FSD) */ + if( ((*gIsoDep.rxLen) < gIsoDep.hdrLen) || ((*gIsoDep.rxLen) > (gIsoDep.ourFsx - ISODEP_CRC_LEN)) ) + { + isoDepReEnableRx( (uint8_t*)gIsoDep.actvParam.rxBuf, sizeof( rfalIsoDepBufFormat ), gIsoDep.actvParam.rxLen ); + return ERR_BUSY; /* ERR_PROTO Ignore this protocol request */ + } + + /* If we are expecting DID, check if PCB signals its presence and if device ID match OR + * If our DID=0 and DID is sent but with an incorrect value */ + if( ((gIsoDep.did != RFAL_ISODEP_DID_00) && ( !isoDep_PCBhasDID(rxPCB) || (gIsoDep.did != gIsoDep.rxBuf[ ISODEP_DID_POS ]))) || + ((gIsoDep.did == RFAL_ISODEP_DID_00) && isoDep_PCBhasDID(rxPCB) && (RFAL_ISODEP_DID_00 != gIsoDep.rxBuf[ ISODEP_DID_POS ]) ) ) + { + isoDepReEnableRx( (uint8_t*)gIsoDep.actvParam.rxBuf, sizeof( rfalIsoDepBufFormat ), gIsoDep.actvParam.rxLen ); + return ERR_BUSY; /* Ignore a wrong DID request */ + } + + /* If we aren't expecting NAD and it's received */ + if( (gIsoDep.nad == RFAL_ISODEP_NO_NAD) && isoDep_PCBhasNAD(rxPCB) ) + { + isoDepReEnableRx( (uint8_t*)gIsoDep.actvParam.rxBuf, sizeof( rfalIsoDepBufFormat ), gIsoDep.actvParam.rxLen ); + return ERR_BUSY; /* Ignore a unexpected NAD request */ + } + + /*******************************************************************************/ + /* Process S-Block */ + /*******************************************************************************/ + if( isoDep_PCBisSBlock(rxPCB) ) + { + /* Check if is a Wait Time eXtension */ + if( isoDep_PCBisSWTX(rxPCB) ) + { + /* Check if we're expecting a S-WTX */ + if( isoDep_PCBisWTX( gIsoDep.lastPCB ) ) + { + /* Digital 1.1 15.2.2.11 S(WTX) Ack with different WTXM -> Protocol Error * + * Power level indication also should be set to 0 */ + if( ( gIsoDep.rxBuf[ gIsoDep.hdrLen ] == gIsoDep.lastWTXM) && ((*gIsoDep.rxLen - gIsoDep.hdrLen) == ISODEP_SWTX_INF_LEN) ) + { + /* Clear waiting for RTOX Ack Flag */ + gIsoDep.isWait4WTX = false; + + /* Check if a Tx is already pending */ + if( gIsoDep.isTxPending ) + { + /* Has a pending Tx, go immediately to TX */ + gIsoDep.state = ISODEP_ST_PICC_TX; + return ERR_BUSY; + } + + /* Set WTX timer */ + isoDepTimerStart( gIsoDep.WTXTimer, isoDep_WTXAdjust( (gIsoDep.lastWTXM * rfalConv1fcToMs( gIsoDep.fwt )) ) ); + + gIsoDep.state = ISODEP_ST_PICC_SWTX; + return ERR_BUSY; + } + } + /* Unexpected/Incorrect S-WTX, fall into reRenable */ + } + + /* Check if is a deselect request */ + if( isoDep_PCBisSDeselect(rxPCB) && ((*gIsoDep.rxLen - gIsoDep.hdrLen) == ISODEP_SDSL_INF_LEN) ) + { + EXIT_ON_ERR( ret, isoDepHandleControlMsg( ISODEP_S_DSL, RFAL_ISODEP_NO_PARAM ) ); + + rfalIsoDepInitialize(); /* Session finished reInit vars */ + return ERR_SLEEP_REQ; + } + + /* Unexpected S-Block, fall into reRenable */ + } + + /*******************************************************************************/ + /* Process R-Block */ + /*******************************************************************************/ + else if( isoDep_PCBisRBlock(rxPCB) && ((*gIsoDep.rxLen - gIsoDep.hdrLen) == ISODEP_RBLOCK_INF_LEN)) + { + if( isoDep_PCBisRACK(rxPCB) ) /* Check if is a R-ACK */ + { + if( isoDep_GetBN(rxPCB) == gIsoDep.blockNumber ) /* Check block number */ + { + /* Rule 11 - R(ACK) with current bn -> re-transmit */ + if( !isoDep_PCBisIBlock(gIsoDep.lastPCB) ) + { + isoDepReSendControlMsg(); + } + else + { + gIsoDep.state = ISODEP_ST_PICC_TX; + } + + return ERR_BUSY; + } + else + { + if( !gIsoDep.isTxChaining ) + { + /* Rule 13 violation R(ACK) without performing chaining */ + isoDepReEnableRx( (uint8_t*)gIsoDep.rxBuf, sizeof( rfalIsoDepBufFormat ), gIsoDep.rxLen ); + return ERR_BUSY; + } + + /* Rule E - R(ACK) with not current bn -> toogle bn */ + isoDep_ToggleBN( gIsoDep.blockNumber ); + + /* This block has been transmitted and acknowledged, perform WTX until next data is provided */ + + /* Rule 9 - PICC is allowed to send an S(WTX) instead of an I-block or an R(ACK) */ + isoDepTimerStart( gIsoDep.WTXTimer, isoDep_WTXAdjust( rfalConv1fcToMs( gIsoDep.fwt )) ); + gIsoDep.state = ISODEP_ST_PICC_SWTX; + + /* Rule 13 - R(ACK) with not current bn -> continue chaining */ + return ERR_NONE; /* This block has been transmitted */ + } + } + else if( isoDep_PCBisRNAK(rxPCB) ) /* Check if is a R-NACK */ + { + if( isoDep_GetBN(rxPCB) == gIsoDep.blockNumber ) /* Check block number */ + { + /* Rule 11 - R(NAK) with current bn -> re-transmit last x-Block */ + if( !isoDep_PCBisIBlock(gIsoDep.lastPCB) ) + { + isoDepReSendControlMsg(); + } + else + { + gIsoDep.state = ISODEP_ST_PICC_TX; + } + + return ERR_BUSY; + } + else + { + /* Rule 12 - R(NAK) with not current bn -> R(ACK) */ + EXIT_ON_ERR( ret, isoDepHandleControlMsg( ISODEP_R_ACK, RFAL_ISODEP_NO_PARAM ) ); + + return ERR_BUSY; + } + } + else + { + /* MISRA 15.7 - Empty else */ + } + + /* Unexpected R-Block, fall into reRenable */ + } + + /*******************************************************************************/ + /* Process I-Block */ + /*******************************************************************************/ + else if( isoDep_PCBisIBlock(rxPCB) ) + { + /* Rule D - When an I-block is received, the PICC shall toggle its block number before sending a block */ + isoDep_ToggleBN( gIsoDep.blockNumber ); + + /*******************************************************************************/ + /* Check if the block number is the one expected */ + /* Check if PCD sent an I-Block instead ACK/NACK when we are chaining */ + if( (isoDep_GetBN(rxPCB) != gIsoDep.blockNumber) || (gIsoDep.isTxChaining) ) + { + /* Remain in the same Block Number */ + isoDep_ToggleBN( gIsoDep.blockNumber ); + + /* ISO 14443-4 7.5.6.2 & Digital 1.1 - 15.2.6.2 The CE SHALL NOT attempt error recovery and remains in Rx mode upon Transmission or a Protocol Error */ + isoDepReEnableRx( (uint8_t*)gIsoDep.rxBuf, sizeof( rfalIsoDepBufFormat ), gIsoDep.rxLen ); + return ERR_BUSY; + } + + /*******************************************************************************/ + /* is PCD performing chaining ? */ + if( isoDep_PCBisChaining(rxPCB) ) + { + gIsoDep.isRxChaining = true; + *gIsoDep.rxChaining = true; /* Output Parameter*/ + + EXIT_ON_ERR( ret, isoDepHandleControlMsg( ISODEP_R_ACK, RFAL_ISODEP_NO_PARAM ) ); + + /* Received I-Block with chaining, send current data to DH */ + + /* remove ISO DEP header, check is necessary to move the INF data on the buffer */ + *gIsoDep.rxLen -= gIsoDep.hdrLen; + if( (gIsoDep.hdrLen != gIsoDep.rxBufInfPos) && (*gIsoDep.rxLen > 0U) ) + { + ST_MEMMOVE( &gIsoDep.rxBuf[gIsoDep.rxBufInfPos], &gIsoDep.rxBuf[gIsoDep.hdrLen], *gIsoDep.rxLen ); + } + return ERR_AGAIN; /* Send Again signalling to run again, but some chaining data has arrived*/ + } + + + /*******************************************************************************/ + /* PCD is not performing chaining */ + gIsoDep.isRxChaining = false; /* clear PCD chaining flag */ + *gIsoDep.rxChaining = false; /* Output Parameter */ + + /* remove ISO DEP header, check is necessary to move the INF data on the buffer */ + *gIsoDep.rxLen -= gIsoDep.hdrLen; + if( (gIsoDep.hdrLen != gIsoDep.rxBufInfPos) && (*gIsoDep.rxLen > 0U) ) + { + ST_MEMMOVE( &gIsoDep.rxBuf[gIsoDep.rxBufInfPos], &gIsoDep.rxBuf[gIsoDep.hdrLen], *gIsoDep.rxLen ); + } + + + /*******************************************************************************/ + /* Reception done, send data back and start WTX timer */ + isoDepTimerStart( gIsoDep.WTXTimer, isoDep_WTXAdjust( rfalConv1fcToMs( gIsoDep.fwt )) ); + + gIsoDep.state = ISODEP_ST_PICC_SWTX; + return ERR_NONE; + } + else + { + /* MISRA 15.7 - Empty else */ + } + + /* Unexpected/Unknown Block */ + /* ISO 14443-4 7.5.6.2 & Digital 1.1 - 15.2.6.2 The CE SHALL NOT attempt error recovery and remains in Rx mode upon Transmission or a Protocol Error */ + isoDepReEnableRx( (uint8_t*)gIsoDep.rxBuf, sizeof( rfalIsoDepBufFormat ), gIsoDep.rxLen ); + + return ERR_BUSY; +} +#endif /* RFAL_FEATURE_ISO_DEP_LISTEN */ + + +#if RFAL_FEATURE_ISO_DEP_POLL + +#if RFAL_FEATURE_NFCA + +/*******************************************************************************/ +ReturnCode rfalIsoDepRATS( rfalIsoDepFSxI FSDI, uint8_t DID, rfalIsoDepAts *ats , uint8_t *atsLen) +{ + uint16_t rcvLen; + ReturnCode ret; + rfalIsoDepRats ratsReq; + + if( ats == NULL ) + { + return ERR_PARAM; + } + + /*******************************************************************************/ + /* Compose RATS */ + ratsReq.CMD = RFAL_ISODEP_CMD_RATS; + ratsReq.PARAM = (((uint8_t)FSDI << RFAL_ISODEP_RATS_PARAM_FSDI_SHIFT) & RFAL_ISODEP_RATS_PARAM_FSDI_MASK) | (DID & RFAL_ISODEP_RATS_PARAM_DID_MASK); + + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&ratsReq, sizeof(rfalIsoDepRats), (uint8_t*)ats, sizeof(rfalIsoDepAts), &rcvLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_ISODEP_T4T_FWT_ACTIVATION ); + + if( ret == ERR_NONE ) + { + /* Check for valid ATS length Digital 1.1 13.6.2.1 & 13.6.2.3 */ + if( (rcvLen < RFAL_ISODEP_ATS_MIN_LEN) || (rcvLen > RFAL_ISODEP_ATS_MAX_LEN) || (ats->TL != rcvLen) ) + { + return ERR_PROTO; + } + + /* Assign our FSx, in case the a Deselect is send without Transceive */ + gIsoDep.ourFsx = rfalIsoDepFSxI2FSx( (uint8_t)FSDI ); + } + + /* Check and assign if ATS length was requested (length also available on TL) */ + if( atsLen != NULL ) + { + *atsLen = (uint8_t)rcvLen; + } + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalIsoDepPPS( uint8_t DID, rfalBitRate DSI, rfalBitRate DRI, rfalIsoDepPpsRes *ppsRes ) +{ + uint16_t rcvLen; + ReturnCode ret; + rfalIsoDepPpsReq ppsReq; + + if( (ppsRes == NULL) || (DSI > RFAL_BR_848) || (DRI > RFAL_BR_848) || (DID > RFAL_ISODEP_DID_MAX) ) + { + return ERR_PARAM; + } + + /*******************************************************************************/ + /* Compose PPS Request */ + ppsReq.PPSS = (RFAL_ISODEP_PPS_SB | (DID & RFAL_ISODEP_PPS_SB_DID_MASK)); + ppsReq.PPS0 = RFAL_ISODEP_PPS_PPS0_PPS1_PRESENT; + ppsReq.PPS1 = (RFAL_ISODEP_PPS_PPS1 | ((((uint8_t)DSI<PPSS != ppsReq.PPSS) ) + { + return ERR_PROTO; + } + } + return ret; +} + +#endif /* RFAL_FEATURE_NFCA */ + + +#if RFAL_FEATURE_NFCB + +/*******************************************************************************/ +ReturnCode rfalIsoDepATTRIB( const uint8_t* nfcid0, uint8_t PARAM1, rfalBitRate DSI, rfalBitRate DRI, rfalIsoDepFSxI FSDI, uint8_t PARAM3, uint8_t DID, const uint8_t* HLInfo, uint8_t HLInfoLen, uint32_t fwt, rfalIsoDepAttribRes *attribRes, uint8_t *attribResLen ) +{ + uint16_t rcvLen; + ReturnCode ret; + rfalIsoDepAttribCmd attribCmd; + + + if( (attribRes == NULL) || (attribResLen == NULL) || (DSI > RFAL_BR_848) || (DRI > RFAL_BR_848) || (DID > RFAL_ISODEP_DID_MAX) ) + { + return ERR_NONE; + } + + /*******************************************************************************/ + /* Compose ATTRIB command */ + attribCmd.cmd = RFAL_ISODEP_CMD_ATTRIB; + attribCmd.Param.PARAM1 = PARAM1; + attribCmd.Param.PARAM2 = ( ((((uint8_t)DSI< 0U) ) + { + ST_MEMCPY(attribCmd.HLInfo, HLInfo, MIN(HLInfoLen, RFAL_ISODEP_ATTRIB_HLINFO_LEN) ); + } + + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&attribCmd, (RFAL_ISODEP_ATTRIB_HDR_LEN + MIN((uint16_t)HLInfoLen, RFAL_ISODEP_ATTRIB_HLINFO_LEN)), (uint8_t*)attribRes, sizeof(rfalIsoDepAttribRes), &rcvLen, RFAL_TXRX_FLAGS_DEFAULT, fwt ); + + *attribResLen = (uint8_t)rcvLen; + + if( ret == ERR_NONE ) + { + /* Check a for valid ATTRIB Response Digital 1.1 15.6.2.1 */ + if( (rcvLen < RFAL_ISODEP_ATTRIB_RES_HDR_LEN) || ((attribRes->mbliDid & RFAL_ISODEP_ATTRIB_RES_DID_MASK) != DID) ) + { + return ERR_PROTO; + } + } + + return ret; +} + +#endif /* RFAL_FEATURE_NFCB */ + + +#if RFAL_FEATURE_NFCA + +/*******************************************************************************/ +ReturnCode rfalIsoDepPollAHandleActivation( rfalIsoDepFSxI FSDI, uint8_t DID, rfalBitRate maxBR, rfalIsoDepDevice *isoDepDev ) +{ + uint8_t RATSretries; + uint8_t msgIt; + ReturnCode ret; + rfalIsoDepPpsRes ppsRes; + + if( isoDepDev == NULL ) + { + return ERR_PARAM; + } + + /* Enable EMD handling according Digital 1.1 4.1.1.1 ; EMVCo 2.6 4.9.2 */ + rfalSetErrorHandling( RFAL_ERRORHANDLING_EMVCO ); + + RATSretries = gIsoDep.maxRetriesRATS; + + /***************************************************************************/ + /* Send RATS */ + do + { + /* Digital 1.1 13.7.1.1 and ISO 14443-4 5.6.1.1 - Upon a failed RATS it may be retransmited [0,1] */ + ret = rfalIsoDepRATS( FSDI, DID, &isoDepDev->activation.A.Listener.ATS, &isoDepDev->activation.A.Listener.ATSLen ); + + /* EMVCo 2.6 9.6.1.1 & 9.6.1.2 If a timeout error is detected retransmit, on transmission error abort */ + if( (gIsoDep.compMode == RFAL_COMPLIANCE_MODE_EMV) && (ret != ERR_NONE) && (ret != ERR_TIMEOUT) ) + { + break; + } + + platformDelay(1); + } + while( ((RATSretries--) != 0U) && (ret != ERR_NONE) ); + + + + /* Switch between NFC Forum and ISO14443-4 behaviour #595 + * ISO14443-4 5.6.1 If RATS fails, a Deactivation sequence should be performed as defined on clause 8 + * Activity 1.1 9.6 Device Deactivation Activity is to be only performed when there's an active device */ + if( ret != ERR_NONE ) + { + if( gIsoDep.compMode == RFAL_COMPLIANCE_MODE_ISO ) + { + rfalIsoDepDeselect(); + } + return ret; + } + + /*******************************************************************************/ + /* Process ATS Response */ + isoDepDev->info.FWI = RFAL_ISODEP_FWI_DEFAULT; /* Default value EMVCo 2.6 5.7.2.6 */ + isoDepDev->info.SFGI = 0; + isoDepDev->info.MBL = 0; + isoDepDev->info.DSI = RFAL_BR_106; + isoDepDev->info.DRI = RFAL_BR_106; + isoDepDev->info.FSxI = (uint8_t)RFAL_ISODEP_FSXI_32; /* FSC default value is 32 bytes ISO14443-A 5.2.3 */ + + + /*******************************************************************************/ + /* Check for ATS optional fields */ + if( isoDepDev->activation.A.Listener.ATS.TL > RFAL_ISODEP_ATS_MIN_LEN ) + { + msgIt = RFAL_ISODEP_ATS_MIN_LEN; + + /* Format byte T0 is optional, if present assign FSDI */ + isoDepDev->info.FSxI = (isoDepDev->activation.A.Listener.ATS.T0 & RFAL_ISODEP_ATS_T0_FSCI_MASK); + + /* T0 has already been processed, always the same position */ + msgIt++; + + /* Check if TA is present */ + if( (isoDepDev->activation.A.Listener.ATS.T0 & RFAL_ISODEP_ATS_T0_TA_PRESENCE_MASK) != 0U ) + { + rfalIsoDepCalcBitRate( maxBR, ((uint8_t*)&isoDepDev->activation.A.Listener.ATS)[msgIt++], &isoDepDev->info.DSI, &isoDepDev->info.DRI ); + } + + /* Check if TB is present */ + if( (isoDepDev->activation.A.Listener.ATS.T0 & RFAL_ISODEP_ATS_T0_TB_PRESENCE_MASK) != 0U ) + { + isoDepDev->info.SFGI = ((uint8_t*)&isoDepDev->activation.A.Listener.ATS)[msgIt++]; + isoDepDev->info.FWI = (uint8_t)((isoDepDev->info.SFGI >> RFAL_ISODEP_ATS_TB_FWI_SHIFT) & RFAL_ISODEP_ATS_FWI_MASK); + isoDepDev->info.SFGI &= RFAL_ISODEP_ATS_TB_SFGI_MASK; + } + + /* Check if TC is present */ + if( (isoDepDev->activation.A.Listener.ATS.T0 & RFAL_ISODEP_ATS_T0_TC_PRESENCE_MASK) != 0U ) + { + /* Check for Protocol features support */ + /* Advanced protocol features defined on Digital 1.0 Table 69, removed after */ + isoDepDev->info.supAdFt = (((((uint8_t*)&isoDepDev->activation.A.Listener.ATS)[msgIt] & RFAL_ISODEP_ATS_TC_ADV_FEAT) != 0U) ? true : false); + isoDepDev->info.supDID = (((((uint8_t*)&isoDepDev->activation.A.Listener.ATS)[msgIt] & RFAL_ISODEP_ATS_TC_DID) != 0U) ? true : false); + isoDepDev->info.supNAD = (((((uint8_t*)&isoDepDev->activation.A.Listener.ATS)[msgIt++] & RFAL_ISODEP_ATS_TC_NAD) != 0U) ? true : false); + } + } + + isoDepDev->info.FSx = rfalIsoDepFSxI2FSx(isoDepDev->info.FSxI); + + isoDepDev->info.SFGT = rfalIsoDepSFGI2SFGT( (uint8_t)isoDepDev->info.SFGI ); + isoDepTimerStart( gIsoDep.SFGTTimer, isoDepDev->info.SFGT ); + + isoDepDev->info.FWT = rfalIsoDepFWI2FWT( isoDepDev->info.FWI ); + isoDepDev->info.dFWT = RFAL_ISODEP_DFWT_20; + + isoDepDev->info.DID = ( (isoDepDev->info.supDID) ? DID : RFAL_ISODEP_NO_DID); + isoDepDev->info.NAD = RFAL_ISODEP_NO_NAD; + + + /*******************************************************************************/ + /* If higher bit rates are supported by both devices, send PPS */ + if( (isoDepDev->info.DSI != RFAL_BR_106) || (isoDepDev->info.DRI != RFAL_BR_106) ) + { + /* Wait until SFGT has been fulfilled */ + while( !isoDepTimerisExpired( gIsoDep.SFGTTimer ) ) { /* MISRA 15.6: mandatory brackets */ }; + + ret = rfalIsoDepPPS( isoDepDev->info.DID, isoDepDev->info.DSI, isoDepDev->info.DRI, &ppsRes ); + + if( ret == ERR_NONE ) + { + /* DSI code the divisor from PICC to PCD */ + /* DRI code the divisor from PCD to PICC */ + rfalSetBitRate( isoDepDev->info.DRI, isoDepDev->info.DSI ); + } + else + { + isoDepDev->info.DSI = RFAL_BR_106; + isoDepDev->info.DRI = RFAL_BR_106; + } + } + + /*******************************************************************************/ + /* Store already FS info, rfalIsoDepGetMaxInfLen() may be called before setting TxRx params */ + gIsoDep.fsx = isoDepDev->info.FSx; + gIsoDep.ourFsx = rfalIsoDepFSxI2FSx( (uint8_t)FSDI ); + + return ERR_NONE; +} + +#endif /* RFAL_FEATURE_NFCA */ + +#if RFAL_FEATURE_NFCB + +/*******************************************************************************/ +ReturnCode rfalIsoDepPollBHandleActivation( rfalIsoDepFSxI FSDI, uint8_t DID, rfalBitRate maxBR, uint8_t PARAM1, const rfalNfcbListenDevice *nfcbDev, const uint8_t* HLInfo, uint8_t HLInfoLen, rfalIsoDepDevice *isoDepDev ) +{ + ReturnCode ret; + uint8_t mbli; + + /***************************************************************************/ + /* Initialize ISO-DEP Device with info from SENSB_RES */ + isoDepDev->info.FWI = ((nfcbDev->sensbRes.protInfo.FwiAdcFo >> RFAL_NFCB_SENSB_RES_FWI_SHIFT) & RFAL_NFCB_SENSB_RES_FWI_MASK); + isoDepDev->info.FWT = rfalIsoDepFWI2FWT( isoDepDev->info.FWI ); + isoDepDev->info.dFWT = RFAL_NFCB_DFWT; + isoDepDev->info.SFGI = (((uint32_t)nfcbDev->sensbRes.protInfo.SFGI >> RFAL_NFCB_SENSB_RES_SFGI_SHIFT) & RFAL_NFCB_SENSB_RES_SFGI_MASK); + isoDepDev->info.SFGT = rfalIsoDepSFGI2SFGT( (uint8_t)isoDepDev->info.SFGI ); + isoDepDev->info.FSxI = ((nfcbDev->sensbRes.protInfo.FsciProType >> RFAL_NFCB_SENSB_RES_FSCI_SHIFT) & RFAL_NFCB_SENSB_RES_FSCI_MASK); + isoDepDev->info.FSx = rfalIsoDepFSxI2FSx(isoDepDev->info.FSxI); + isoDepDev->info.DID = DID; + isoDepDev->info.supDID = ((( nfcbDev->sensbRes.protInfo.FwiAdcFo & RFAL_NFCB_SENSB_RES_FO_DID_MASK ) != 0U) ? true : false); + isoDepDev->info.supNAD = ((( nfcbDev->sensbRes.protInfo.FwiAdcFo & RFAL_NFCB_SENSB_RES_FO_NAD_MASK ) != 0U) ? true : false); + + + /* Check if DID requested is supported by PICC */ + if( (DID != RFAL_ISODEP_NO_DID) && (!isoDepDev->info.supDID) ) + { + return ERR_PARAM; + } + + /* Enable EMD handling according Digital 2.1 4.1.1.1 ; EMVCo 3.0 4.9.2 */ + rfalSetErrorHandling( RFAL_ERRORHANDLING_EMVCO ); + + /***************************************************************************/ + /* Set FDT Poll to be used on upcoming communications */ + if( gIsoDep.compMode == RFAL_COMPLIANCE_MODE_EMV ) + { + /* Disregard Minimum TR2 returned by PICC, always use FDTb MIN EMVCo 3.0 6.3.2.10 */ + rfalSetFDTPoll( RFAL_FDT_POLL_NFCB_POLLER ); + } + else + { + /* Apply minimum TR2 from SENSB_RES Digital 2.1 7.6.2.23 */ + rfalSetFDTPoll( rfalNfcbTR2ToFDT(((nfcbDev->sensbRes.protInfo.FsciProType >>RFAL_NFCB_SENSB_RES_PROTO_TR2_SHIFT) & RFAL_NFCB_SENSB_RES_PROTO_TR2_MASK)) ); + } + + + /* Calculate max Bit Rate */ + rfalIsoDepCalcBitRate( maxBR, nfcbDev->sensbRes.protInfo.BRC, &isoDepDev->info.DSI, &isoDepDev->info.DRI ); + + /***************************************************************************/ + /* Send ATTRIB Command */ + ret = rfalIsoDepATTRIB( (const uint8_t*)&nfcbDev->sensbRes.nfcid0, + (((nfcbDev->sensbRes.protInfo.FwiAdcFo & RFAL_NFCB_SENSB_RES_ADC_ADV_FEATURE_MASK) != 0U) ? PARAM1 : RFAL_ISODEP_ATTRIB_REQ_PARAM1_DEFAULT), + isoDepDev->info.DSI, + isoDepDev->info.DRI, + FSDI, + (gIsoDep.compMode == RFAL_COMPLIANCE_MODE_EMV) ? RFAL_NFCB_SENSB_RES_PROTO_ISO_MASK : (nfcbDev->sensbRes.protInfo.FsciProType & ( (RFAL_NFCB_SENSB_RES_PROTO_TR2_MASK<info.FWT + isoDepDev->info.dFWT), + &isoDepDev->activation.B.Listener.ATTRIB_RES, + &isoDepDev->activation.B.Listener.ATTRIB_RESLen + ); + + /***************************************************************************/ + /* Process ATTRIB Response */ + if( ret == ERR_NONE ) + { + /* Digital 1.1 14.6.2.3 - Check if received DID match */ + if( (isoDepDev->activation.B.Listener.ATTRIB_RES.mbliDid & RFAL_ISODEP_ATTRIB_RES_DID_MASK) != DID ) + { + return ERR_PROTO; + } + + /* Retrieve MBLI and calculate new FDS/MBL (Maximum Buffer Length) */ + mbli = ((isoDepDev->activation.B.Listener.ATTRIB_RES.mbliDid >> RFAL_ISODEP_ATTRIB_RES_MBLI_SHIFT) & RFAL_ISODEP_ATTRIB_RES_MBLI_MASK); + if( mbli > 0U) + { + /* Digital 1.1 14.6.2 Calculate Maximum Buffer Length MBL = FSC x 2^(MBLI-1) */ + isoDepDev->info.MBL = (isoDepDev->info.FSx * ((uint32_t)1U<<(mbli-1U))); + } + + /* DSI code the divisor from PICC to PCD */ + /* DRI code the divisor from PCD to PICC */ + rfalSetBitRate( isoDepDev->info.DRI, isoDepDev->info.DSI ); + + + if( (nfcbDev->sensbRes.protInfo.FwiAdcFo & RFAL_NFCB_SENSB_RES_ADC_ADV_FEATURE_MASK) != 0U ) + { + /* REMARK: SoF EoF TR0 and TR1 are not passed on to RF layer */ + } + + /* Start the SFGT timer */ + isoDepTimerStart( gIsoDep.SFGTTimer, isoDepDev->info.SFGT ); + } + else + { + isoDepDev->info.DSI = RFAL_BR_106; + isoDepDev->info.DRI = RFAL_BR_106; + } + + /*******************************************************************************/ + /* Store already FS info, rfalIsoDepGetMaxInfLen() may be called before setting TxRx params */ + gIsoDep.fsx = isoDepDev->info.FSx; + gIsoDep.ourFsx = rfalIsoDepFSxI2FSx( (uint8_t)FSDI ); + + return ret; +} + +#endif /* RFAL_FEATURE_NFCB */ + + +/*******************************************************************************/ +ReturnCode rfalIsoDepPollHandleSParameters( rfalIsoDepDevice *isoDepDev, rfalBitRate maxTxBR, rfalBitRate maxRxBR ) +{ + uint8_t it; + uint8_t supPCD2PICC; + uint8_t supPICC2PCD; + uint8_t currenttxBR; + uint8_t currentrxBR; + rfalBitRate txBR; + rfalBitRate rxBR; + uint16_t rcvLen; + ReturnCode ret; + rfalIsoDepControlMsgSParam sParam; + + + if( (isoDepDev == NULL) || (maxTxBR > RFAL_BR_13560) || (maxRxBR > RFAL_BR_13560) ) + { + return ERR_PARAM; + } + + it = 0; + supPICC2PCD = 0x00; + supPCD2PICC = 0x00; + txBR = RFAL_BR_106; + rxBR = RFAL_BR_106; + sParam.pcb = ISODEP_PCB_SPARAMETERS; + + /*******************************************************************************/ + /* Send S(PARAMETERS) - Block Info */ + sParam.sParam.tag = RFAL_ISODEP_SPARAM_TAG_BLOCKINFO; + sParam.sParam.value[it++] = RFAL_ISODEP_SPARAM_TAG_BRREQ; + sParam.sParam.value[it++] = RFAL_ISODEP_SPARAM_TAG_BRREQ_LEN; + sParam.sParam.length = it; + + EXIT_ON_ERR( ret, rfalTransceiveBlockingTxRx( (uint8_t*)&sParam, (RFAL_ISODEP_SPARAM_HDR_LEN + (uint16_t)it), (uint8_t*)&sParam, sizeof(rfalIsoDepControlMsgSParam), &rcvLen, RFAL_TXRX_FLAGS_DEFAULT, (isoDepDev->info.FWT + isoDepDev->info.dFWT) )); + + it = 0; + + /*******************************************************************************/ + /* Check S(PARAMETERS) response */ + if( (sParam.pcb != ISODEP_PCB_SPARAMETERS) || (sParam.sParam.tag != RFAL_ISODEP_SPARAM_TAG_BLOCKINFO) || + (sParam.sParam.value[it] != RFAL_ISODEP_SPARAM_TAG_BRIND) || (rcvLen < RFAL_ISODEP_SPARAM_HDR_LEN) || + (rcvLen != ((uint16_t)sParam.sParam.length + RFAL_ISODEP_SPARAM_HDR_LEN)) ) + { + return ERR_PROTO; + } + + /* Retrieve PICC's bit rate PICC capabilities */ + for( it=0; it<(rcvLen-(uint16_t)RFAL_ISODEP_SPARAM_TAG_LEN); it++ ) + { + if( (sParam.sParam.value[it] == RFAL_ISODEP_SPARAM_TAG_SUP_PCD2PICC) && (sParam.sParam.value[it+(uint16_t)RFAL_ISODEP_SPARAM_TAG_LEN] == RFAL_ISODEP_SPARAM_TAG_PCD2PICC_LEN) ) + { + supPCD2PICC = sParam.sParam.value[it + RFAL_ISODEP_SPARAM_TAG_PCD2PICC_LEN]; + } + + if( (sParam.sParam.value[it] == RFAL_ISODEP_SPARAM_TAG_SUP_PICC2PCD) && (sParam.sParam.value[it+(uint16_t)RFAL_ISODEP_SPARAM_TAG_LEN] == RFAL_ISODEP_SPARAM_TAG_PICC2PCD_LEN) ) + { + supPICC2PCD = sParam.sParam.value[it + RFAL_ISODEP_SPARAM_TAG_PICC2PCD_LEN]; + } + } + + /*******************************************************************************/ + /* Check if requested bit rates are supported by PICC */ + if( (supPICC2PCD == 0x00U) || (supPCD2PICC == 0x00U) ) + { + return ERR_PROTO; + } + + for( it=0; it<=(uint8_t)maxTxBR; it++ ) + { + if( (supPCD2PICC & (0x01U << it)) != 0U ) + { + txBR = (rfalBitRate)it; /* PRQA S 4342 # MISRA 10.5 - Layout of enum rfalBitRate and above clamping of maxTxBR guarantee no invalid enum values to be created */ + } + } + for( it=0; it<=(uint8_t)maxRxBR; it++ ) + { + if( (supPICC2PCD & (0x01U << it)) != 0U ) + { + rxBR = (rfalBitRate)it; /* PRQA S 4342 # MISRA 10.5 - Layout of enum rfalBitRate and above clamping of maxTxBR guarantee no invalid enum values to be created */ + } + } + + it = 0; + currenttxBR = (uint8_t)txBR; + currentrxBR = (uint8_t)rxBR; + + /*******************************************************************************/ + /* Send S(PARAMETERS) - Bit rates Activation */ + sParam.sParam.tag = RFAL_ISODEP_SPARAM_TAG_BLOCKINFO; + sParam.sParam.value[it++] = RFAL_ISODEP_SPARAM_TAG_BRACT; + sParam.sParam.value[it++] = ( RFAL_ISODEP_SPARAM_TVL_HDR_LEN + RFAL_ISODEP_SPARAM_TAG_PCD2PICC_LEN + RFAL_ISODEP_SPARAM_TVL_HDR_LEN + RFAL_ISODEP_SPARAM_TAG_PICC2PCD_LEN); + sParam.sParam.value[it++] = RFAL_ISODEP_SPARAM_TAG_SEL_PCD2PICC; + sParam.sParam.value[it++] = RFAL_ISODEP_SPARAM_TAG_PCD2PICC_LEN; + sParam.sParam.value[it++] = ((uint8_t)0x01U << currenttxBR); + sParam.sParam.value[it++] = 0x00U; + sParam.sParam.value[it++] = RFAL_ISODEP_SPARAM_TAG_SEL_PICC2PCD; + sParam.sParam.value[it++] = RFAL_ISODEP_SPARAM_TAG_PICC2PCD_LEN; + sParam.sParam.value[it++] = ((uint8_t)0x01U << currentrxBR); + sParam.sParam.value[it++] = 0x00U; + sParam.sParam.length = it; + + EXIT_ON_ERR( ret, rfalTransceiveBlockingTxRx( (uint8_t*)&sParam, (RFAL_ISODEP_SPARAM_HDR_LEN + (uint16_t)it), (uint8_t*)&sParam, sizeof(rfalIsoDepControlMsgSParam), &rcvLen, RFAL_TXRX_FLAGS_DEFAULT, (isoDepDev->info.FWT + isoDepDev->info.dFWT) )); + + it = 0; + + /*******************************************************************************/ + /* Check S(PARAMETERS) Acknowledge */ + if( (sParam.pcb != ISODEP_PCB_SPARAMETERS) || (sParam.sParam.tag != RFAL_ISODEP_SPARAM_TAG_BLOCKINFO) || + (sParam.sParam.value[it] != RFAL_ISODEP_SPARAM_TAG_BRACK) || (rcvLen < RFAL_ISODEP_SPARAM_HDR_LEN) ) + { + return ERR_PROTO; + } + + EXIT_ON_ERR( ret, rfalSetBitRate( txBR, rxBR ) ); + + isoDepDev->info.DRI = txBR; + isoDepDev->info.DSI = rxBR; + + return ERR_NONE; +} + + +/*******************************************************************************/ +static void rfalIsoDepCalcBitRate( rfalBitRate maxAllowedBR, uint8_t piccBRCapability, rfalBitRate *dsi, rfalBitRate *dri ) +{ + uint8_t driMask; + uint8_t dsiMask; + int8_t i; + bool bitrateFound; + rfalBitRate curMaxBR; + + curMaxBR = maxAllowedBR; + + do + { + bitrateFound = true; + + (*dsi) = RFAL_BR_106; + (*dri) = RFAL_BR_106; + + /* Digital 1.0 5.6.2.5 & 11.6.2.14: A received RFU value of b4 = 1b MUST be interpreted as if b7 to b1 ? 0000000b (only 106 kbits/s in both direction) */ + if( ((RFAL_ISODEP_BITRATE_RFU_MASK & piccBRCapability) != 0U) || (curMaxBR > RFAL_BR_848) ) + { + return; + } + + /***************************************************************************/ + /* Determine Listen->Poll bit rate */ + dsiMask = (piccBRCapability & RFAL_ISODEP_BSI_MASK); + for( i = 2; i >= 0; i-- ) // Check supported bit rate from the highest + { + if (((dsiMask & (0x10U << (uint8_t)i)) != 0U) && (((uint8_t)i+1U) <= (uint8_t)curMaxBR)) + { + uint8_t newdsi = ((uint8_t) i) + 1U; + (*dsi) = (rfalBitRate)newdsi; /* PRQA S 4342 # MISRA 10.5 - Layout of enum rfalBitRate and range of loop variable guarantee no invalid enum values to be created */ + break; + } + } + + /***************************************************************************/ + /* Determine Poll->Listen bit rate */ + driMask = (piccBRCapability & RFAL_ISODEP_BRI_MASK); + for( i = 2; i >= 0; i-- ) /* Check supported bit rate from the highest */ + { + if (((driMask & (0x01U << (uint8_t)i)) != 0U) && (((uint8_t)i+1U) <= (uint8_t)curMaxBR)) + { + uint8_t newdri = ((uint8_t) i) + 1U; + (*dri) = (rfalBitRate)newdri; /* PRQA S 4342 # MISRA 10.5 - Layout of enum rfalBitRate and range of loop variable guarantee no invalid enum values to be created */ + break; + } + } + + /***************************************************************************/ + /* Check if different bit rate is supported */ + + /* Digital 1.0 Table 67: if b8=1b, then only the same bit rate divisor for both directions is supported */ + if( (piccBRCapability & RFAL_ISODEP_SAME_BITRATE_MASK) != 0U ) + { + (*dsi) = MIN((*dsi), (*dri)); + (*dri) = (*dsi); + /* Check that the baudrate is supported */ + if( (RFAL_BR_106 != (*dsi)) && ( !(((dsiMask & (0x10U << ((uint8_t)(*dsi) - 1U))) != 0U) && ((driMask & (0x01U << ((uint8_t)(*dri) - 1U))) != 0U)) ) ) + { + bitrateFound = false; + curMaxBR = (*dsi); /* set allowed bitrate to be lowest and determine bit rate again */ + } + } + } while (!(bitrateFound)); + +} + +/*******************************************************************************/ +static uint32_t rfalIsoDepSFGI2SFGT( uint8_t sfgi ) +{ + uint32_t sfgt; + uint8_t tmpSFGI; + + tmpSFGI = sfgi; + + if (tmpSFGI > ISODEP_SFGI_MAX) + { + tmpSFGI = ISODEP_SFGI_MIN; + } + + if (tmpSFGI != ISODEP_SFGI_MIN) + { + /* If sfgi != 0 wait SFGT + dSFGT Digital 1.1 13.8.2.1 */ + sfgt = isoDepCalcSGFT(sfgi) + isoDepCalcdSGFT(sfgi); + } + /* Otherwise use FDTPoll min Digital 1.1 13.8.2.3*/ + else + { + sfgt = RFAL_FDT_POLL_NFCA_POLLER; + } + + /* Convert carrier cycles to milli seconds */ + return (rfalConv1fcToMs(sfgt) + 1U); +} + +#endif /* RFAL_FEATURE_ISO_DEP_POLL */ + + + /*******************************************************************************/ + static void rfalIsoDepApdu2IBLockParam( rfalIsoDepApduTxRxParam apduParam, rfalIsoDepTxRxParam *iBlockParam, uint16_t txPos, uint16_t rxPos ) +{ + NO_WARNING(rxPos); /* Keep this param for future use */ + + iBlockParam->DID = apduParam.DID; + iBlockParam->FSx = apduParam.FSx; + iBlockParam->ourFSx = apduParam.ourFSx; + iBlockParam->FWT = apduParam.FWT; + iBlockParam->dFWT = apduParam.dFWT; + + if( (apduParam.txBufLen - txPos) > rfalIsoDepGetMaxInfLen() ) + { + iBlockParam->isTxChaining = true; + iBlockParam->txBufLen = rfalIsoDepGetMaxInfLen(); + } + else + { + iBlockParam->isTxChaining = false; + iBlockParam->txBufLen = (apduParam.txBufLen - txPos); + } + + /* TxBuf is moved to the beginning for every I-Block */ + iBlockParam->txBuf = (rfalIsoDepBufFormat*)apduParam.txBuf; /* PRQA S 0310 # MISRA 11.3 - Intentional safe cast to avoiding large buffer duplication */ + iBlockParam->rxBuf = apduParam.tmpBuf; /* Simply using the apdu buffer is not possible because of current ACK handling */ + iBlockParam->isRxChaining = &gIsoDep.isAPDURxChaining; + iBlockParam->rxLen = apduParam.rxLen; +} + + +/*******************************************************************************/ +ReturnCode rfalIsoDepStartApduTransceive( rfalIsoDepApduTxRxParam param ) +{ + rfalIsoDepTxRxParam txRxParam; + + /* Initialize and store APDU context */ + gIsoDep.APDUParam = param; + gIsoDep.APDUTxPos = 0; + gIsoDep.APDURxPos = 0; + + /* Assign current FSx to calculate INF length */ + gIsoDep.ourFsx = param.ourFSx; + gIsoDep.fsx = param.FSx; + + /* Convert APDU TxRxParams to I-Block TxRxParams */ + rfalIsoDepApdu2IBLockParam( gIsoDep.APDUParam, &txRxParam, gIsoDep.APDUTxPos, gIsoDep.APDURxPos ); + + return rfalIsoDepStartTransceive( txRxParam ); +} + + +/*******************************************************************************/ +ReturnCode rfalIsoDepGetApduTransceiveStatus( void ) +{ + ReturnCode ret; + rfalIsoDepTxRxParam txRxParam; + + ret = rfalIsoDepGetTransceiveStatus(); + switch( ret ) + { + /*******************************************************************************/ + case ERR_NONE: + + /* Check if we are still doing chaining on Tx */ + if( gIsoDep.isTxChaining ) + { + /* Add already Tx bytes */ + gIsoDep.APDUTxPos += gIsoDep.txBufLen; + + /* Convert APDU TxRxParams to I-Block TxRxParams */ + rfalIsoDepApdu2IBLockParam( gIsoDep.APDUParam, &txRxParam, gIsoDep.APDUTxPos, gIsoDep.APDURxPos ); + + if( txRxParam.txBufLen > 0U ) /* MISRA 21.18 */ + { + /* Move next I-Block to beginning of APDU Tx buffer */ + ST_MEMCPY( gIsoDep.APDUParam.txBuf->apdu, &gIsoDep.APDUParam.txBuf->apdu[gIsoDep.APDUTxPos], txRxParam.txBufLen ); + } + + rfalIsoDepStartTransceive( txRxParam ); + return ERR_BUSY; + } + + if( *gIsoDep.APDUParam.rxLen > 0U ) /* MISRA 21.18 */ + { + /* Copy packet from tmp buffer to APDU buffer */ + ST_MEMCPY( &gIsoDep.APDUParam.rxBuf->apdu[gIsoDep.APDURxPos], gIsoDep.APDUParam.tmpBuf->inf, *gIsoDep.APDUParam.rxLen ); + gIsoDep.APDURxPos += *gIsoDep.APDUParam.rxLen; + } + + /* APDU TxRx is done */ + break; + + /*******************************************************************************/ + case ERR_AGAIN: + + if( *gIsoDep.APDUParam.rxLen > 0U ) /* MISRA 21.18 */ + { + /* Copy chained packet from tmp buffer to APDU buffer */ + ST_MEMCPY( &gIsoDep.APDUParam.rxBuf->apdu[gIsoDep.APDURxPos], gIsoDep.APDUParam.tmpBuf->inf, *gIsoDep.APDUParam.rxLen ); + gIsoDep.APDURxPos += *gIsoDep.APDUParam.rxLen; + } + + /* Wait for next I-Block */ + return ERR_BUSY; + + /*******************************************************************************/ + default: + return ret; + } + + *gIsoDep.APDUParam.rxLen = gIsoDep.APDURxPos; + + return ERR_NONE; + } + +#endif /* RFAL_FEATURE_ISO_DEP */ diff --git a/Software/Middlewares/ST/rfal/Src/rfal_nfc.c b/Software/Middlewares/ST/rfal/Src/rfal_nfc.c new file mode 100644 index 0000000..da4008e --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_nfc.c @@ -0,0 +1,1684 @@ +/** + ****************************************************************************** + * + * COPYRIGHT(c) 2017 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/*! \file rfal_nfc.c + * + * \author Gustavo Patricio + * + * \brief RFAL NFC device + * + * This module provides the required features to behave as an NFC Poller + * or Listener device. It grants an easy to use interface for the following + * activities: Technology Detection, Collision Resollution, Activation, + * Data Exchange, and Deactivation + * + * This layer is influenced by (but not fully aligned with) the NFC Forum + * specifications, in particular: Activity 2.0 and NCI 2.0 + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "rfal_nfc.h" +#include "utils.h" +#include "rfal_analogConfig.h" + + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ +#define RFAL_NFC_MAX_DEVICES 5U /* Max number of devices supported */ + + +/* +****************************************************************************** +* GLOBAL MACROS +****************************************************************************** +*/ +#define rfalNfcIsRemDevPoller( tp ) ( ((tp)>= RFAL_NFC_POLL_TYPE_NFCA) && ((tp)<=RFAL_NFC_POLL_TYPE_AP2P ) ) +#define rfalNfcIsRemDevListener( tp ) ( /*((tp)>= RFAL_NFC_LISTEN_TYPE_NFCA) && */ ((tp)<=RFAL_NFC_LISTEN_TYPE_AP2P) ) + +#define rfalNfcNfcNotify( st ) if( gNfcDev.disc.notifyCb != NULL ) gNfcDev.disc.notifyCb( st ) + + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + +typedef struct{ + rfalNfcState state; /* Main state */ + uint16_t techsFound; /* Technologies found bitmask */ + uint16_t techs2do; /* Technologies still to be performed */ + rfalBitRate ap2pBR; /* Bit rate to poll for AP2P */ + uint8_t selDevIdx; /* Selected device index */ + rfalNfcDevice *activeDev; /* Active device pointer */ + rfalNfcDiscoverParam disc; /* Discovery parameters pointer */ + rfalNfcDevice devList[RFAL_NFC_MAX_DEVICES]; /*!< Location of device list */ + uint8_t devCnt; /* Decices found counter */ + uint32_t discTmr; /* Discovery Total duration timer */ + ReturnCode dataExErr; /* Last Data Exchange error */ + bool discRestart; /* Restart discover after deactivation flag */ + bool isRxChaining; /* Flag indicating Other device is chaining */ + uint32_t lmMask; /* Listen Mode mask */ + + rfalNfcBuffer txBuf; /* Tx buffer for Data Exchange */ + rfalNfcBuffer rxBuf; /* Rx buffer for Data Exchange */ + uint16_t rxLen; /* Length of received data on Data Exchange */ +}rfalNfc; + + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ +static rfalNfc gNfcDev; + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ +static ReturnCode rfalNfcPollTechDetetection( void ); +static ReturnCode rfalNfcPollCollResolution( void ); +static ReturnCode rfalNfcPollActivation( uint8_t devIt ); +static ReturnCode rfalNfcDeactivation( void ); + +#if RFAL_FEATURE_NFC_DEP +static ReturnCode rfalNfcNfcDepActivate( rfalNfcDevice *device, rfalNfcDepCommMode commMode, const uint8_t *atrReq, uint16_t atrReqLen ); +#endif /* RFAL_FEATURE_NFC_DEP */ + +#if RFAL_FEATURE_LISTEN_MODE +static ReturnCode rfalNfcListenActivation( void ); +#endif /* RFAL_FEATURE_LISTEN_MODE*/ + + +/*******************************************************************************/ +ReturnCode rfalNfcInitialize( void ) +{ + ReturnCode err; + + gNfcDev.state = RFAL_NFC_STATE_NOTINIT; + + rfalAnalogConfigInitialize(); /* Initialize RFAL's Analog Configs */ + EXIT_ON_ERR( err, rfalInitialize() ); /* Initialize RFAL */ + + gNfcDev.state = RFAL_NFC_STATE_IDLE; /* Go to initialized */ + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode rfalNfcDiscover( const rfalNfcDiscoverParam *disParams ) +{ + /* Check if initialization has been performed */ + if( gNfcDev.state != RFAL_NFC_STATE_IDLE ) + { + return ERR_WRONG_STATE; + } + + /* Check valid parameters */ + if( (disParams == NULL) || (disParams->devLimit > RFAL_NFC_MAX_DEVICES) || (disParams->devLimit == 0U) || + ( ((disParams->techs2Find & RFAL_NFC_POLL_TECH_F) != 0U) && (disParams->nfcfBR != RFAL_BR_212) && (disParams->nfcfBR != RFAL_BR_424) ) || + ( (((disParams->techs2Find & RFAL_NFC_POLL_TECH_AP2P) != 0U) && (disParams->ap2pBR > RFAL_BR_424)) || (disParams->GBLen > RFAL_NFCDEP_GB_MAX_LEN)) ) + { + return ERR_PARAM; + } + + if( (((disParams->techs2Find & RFAL_NFC_POLL_TECH_A) != 0U) && !((bool)RFAL_FEATURE_NFCA)) || + (((disParams->techs2Find & RFAL_NFC_POLL_TECH_B) != 0U) && !((bool)RFAL_FEATURE_NFCB)) || + (((disParams->techs2Find & RFAL_NFC_POLL_TECH_F) != 0U) && !((bool)RFAL_FEATURE_NFCF)) || + (((disParams->techs2Find & RFAL_NFC_POLL_TECH_V) != 0U) && !((bool)RFAL_FEATURE_NFCV)) || + (((disParams->techs2Find & RFAL_NFC_POLL_TECH_ST25TB) != 0U) && !((bool)RFAL_FEATURE_ST25TB)) || + (((disParams->techs2Find & RFAL_NFC_POLL_TECH_AP2P) != 0U) && !((bool)RFAL_FEATURE_NFC_DEP)) || + (((disParams->techs2Find & RFAL_NFC_LISTEN_TECH_A) != 0U) && !((bool)RFAL_FEATURE_NFCA)) || + (((disParams->techs2Find & RFAL_NFC_LISTEN_TECH_B) != 0U) && !((bool)RFAL_FEATURE_NFCB)) || + (((disParams->techs2Find & RFAL_NFC_LISTEN_TECH_F) != 0U) && !((bool)RFAL_FEATURE_NFCF)) || + (((disParams->techs2Find & RFAL_NFC_LISTEN_TECH_AP2P) != 0U) && !((bool)RFAL_FEATURE_NFC_DEP)) ) + { + return ERR_DISABLED; /* PRQA S 2880 # MISRA 2.1 - Unreachable code due to configuration option being set/unset */ + } + + /* Initialize context for discovery */ + gNfcDev.activeDev = NULL; + gNfcDev.techsFound = RFAL_NFC_TECH_NONE; + gNfcDev.devCnt = 0; + gNfcDev.discRestart = true; + gNfcDev.disc = *disParams; + + + /* Calculate Listen Mask */ + gNfcDev.lmMask = 0U; + gNfcDev.lmMask |= (((gNfcDev.disc.techs2Find & RFAL_NFC_LISTEN_TECH_A) != 0U) ? RFAL_LM_MASK_NFCA : 0U); + gNfcDev.lmMask |= (((gNfcDev.disc.techs2Find & RFAL_NFC_LISTEN_TECH_B) != 0U) ? RFAL_LM_MASK_NFCB : 0U); + gNfcDev.lmMask |= (((gNfcDev.disc.techs2Find & RFAL_NFC_LISTEN_TECH_F) != 0U) ? RFAL_LM_MASK_NFCF : 0U); + gNfcDev.lmMask |= (((gNfcDev.disc.techs2Find & RFAL_NFC_LISTEN_TECH_AP2P) != 0U) ? RFAL_LM_MASK_ACTIVE_P2P : 0U); + +#if !RFAL_FEATURE_LISTEN_MODE + /* Check if Listen Mode is supported/Enabled */ + if( gNfcDev.lmMask != 0U ) + { + return ERR_NOTSUPP; + } +#endif + + gNfcDev.state = RFAL_NFC_STATE_START_DISCOVERY; + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode rfalNfcDeactivate( bool discovery ) +{ + /* Check for valid state */ + if( gNfcDev.state <= RFAL_NFC_STATE_IDLE ) + { + return ERR_WRONG_STATE; + } + + /* Check if discovery is to continue afterwards */ + if( discovery == true ) + { + /* If so let the state machine continue*/ + gNfcDev.discRestart = discovery; + gNfcDev.state = RFAL_NFC_STATE_DEACTIVATION; + } + else + { + /* Otherwise deactivate immediately and go to IDLE */ + rfalNfcDeactivation(); + gNfcDev.state = RFAL_NFC_STATE_IDLE; + } + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode rfalNfcSelect( uint8_t devIdx ) +{ + /* Check for valid state */ + if( gNfcDev.state != RFAL_NFC_STATE_POLL_SELECT ) + { + return ERR_WRONG_STATE; + } + + gNfcDev.selDevIdx = devIdx; + gNfcDev.state = RFAL_NFC_STATE_POLL_ACTIVATION; + + return ERR_NONE; +} + +/*******************************************************************************/ +rfalNfcState rfalNfcGetState( void ) +{ + return gNfcDev.state; +} + +/*******************************************************************************/ +ReturnCode rfalNfcGetDevicesFound( rfalNfcDevice **devList, uint8_t *devCnt ) +{ + /* Check for valid state */ + if( gNfcDev.state < RFAL_NFC_STATE_POLL_SELECT ) + { + return ERR_WRONG_STATE; + } + + /* Check valid parameters */ + if( (devList == NULL) || (devCnt == NULL) ) + { + return ERR_PARAM; + } + + *devCnt = gNfcDev.devCnt; + *devList = gNfcDev.devList; + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode rfalNfcGetActiveDevice( rfalNfcDevice **dev ) +{ + /* Check for valid state */ + if( gNfcDev.state < RFAL_NFC_STATE_ACTIVATED ) + { + return ERR_WRONG_STATE; + } + + /* Check valid parameter */ + if( dev == NULL ) + { + return ERR_PARAM; + } + + /* Check for valid state */ + if( (gNfcDev.devCnt == 0U) || (gNfcDev.activeDev == NULL) ) + { + return ERR_REQUEST; + } + + *dev = gNfcDev.activeDev; + return ERR_NONE; +} + +/*******************************************************************************/ +void rfalNfcWorker( void ) +{ + ReturnCode err; + + rfalWorker(); /* Execute RFAL process */ + + switch( gNfcDev.state ) + { + /*******************************************************************************/ + case RFAL_NFC_STATE_NOTINIT: + case RFAL_NFC_STATE_IDLE: + break; + + /*******************************************************************************/ + case RFAL_NFC_STATE_START_DISCOVERY: + + /* Initialize context for discovery cycle */ + gNfcDev.devCnt = 0; + gNfcDev.selDevIdx = 0; + gNfcDev.techsFound = RFAL_NFC_TECH_NONE; + gNfcDev.techs2do = gNfcDev.disc.techs2Find; + gNfcDev.state = RFAL_NFC_STATE_POLL_TECHDETECT; + + #if RFAL_FEATURE_WAKEUP_MODE + /* Check if Low power Wake-Up is to be performed */ + if( gNfcDev.disc.wakeupEnabled ) + { + /* Initialize Low power Wake-up mode and wait */ + err = rfalWakeUpModeStart( (gNfcDev.disc.wakeupConfigDefault ? NULL : &gNfcDev.disc.wakeupConfig) ); + if( err == ERR_NONE ) + { + gNfcDev.state = RFAL_NFC_STATE_WAKEUP_MODE; + rfalNfcNfcNotify( gNfcDev.state ); /* Notify caller that WU was started */ + } + } + #endif /* RFAL_FEATURE_WAKEUP_MODE */ + break; + + /*******************************************************************************/ + case RFAL_NFC_STATE_WAKEUP_MODE: + + #if RFAL_FEATURE_WAKEUP_MODE + /* Check if the Wake-up mode has woke */ + if( rfalWakeUpModeHasWoke() ) + { + rfalWakeUpModeStop(); /* Disable Wake-up mode */ + gNfcDev.state = RFAL_NFC_STATE_POLL_TECHDETECT; /* Go to Technology detection */ + + rfalNfcNfcNotify( gNfcDev.state ); /* Notify caller that WU has woke */ + } + #endif /* RFAL_FEATURE_WAKEUP_MODE */ + + break; + + /*******************************************************************************/ + case RFAL_NFC_STATE_POLL_TECHDETECT: + + /* Start total duration timer */ + gNfcDev.discTmr = (uint32_t)platformTimerCreate( gNfcDev.disc.totalDuration ); + + err = rfalNfcPollTechDetetection(); /* Perform Technology Detection */ + if( err != ERR_BUSY ) /* Wait until all technologies are performed */ + { + if( ( err != ERR_NONE) || (gNfcDev.techsFound == RFAL_NFC_TECH_NONE) )/* Check if any error occurred or no techs were found */ + { + rfalFieldOff(); + gNfcDev.state = RFAL_NFC_STATE_LISTEN_TECHDETECT; /* Nothing found as poller, go to listener */ + break; + } + + gNfcDev.techs2do = gNfcDev.techsFound; /* Store the found technologies for collision resolution */ + gNfcDev.state = RFAL_NFC_STATE_POLL_COLAVOIDANCE; /* One or more devices found, go to Collision Avoidance */ + } + break; + + + /*******************************************************************************/ + case RFAL_NFC_STATE_POLL_COLAVOIDANCE: + + err = rfalNfcPollCollResolution(); /* Resolve any eventual collision */ + if( err != ERR_BUSY ) /* Wait until all technologies are performed */ + { + if( (err != ERR_NONE) || (gNfcDev.devCnt == 0U) ) /* Check if any error occurred or no devices were found */ + { + gNfcDev.state = RFAL_NFC_STATE_DEACTIVATION; + break; /* Unable to retrieve any device, restart loop */ + } + + /* Check if more than one device has been found */ + if( gNfcDev.devCnt > 1U ) + { + /* If more than one device was found inform upper layer to choose which one to activate */ + if( gNfcDev.disc.notifyCb != NULL ) + { + gNfcDev.state = RFAL_NFC_STATE_POLL_SELECT; + gNfcDev.disc.notifyCb( gNfcDev.state ); + break; + } + } + + /* If only one device or no callback has been set, activate the first device found */ + gNfcDev.selDevIdx = 0U; + gNfcDev.state = RFAL_NFC_STATE_POLL_ACTIVATION; + } + break; + + + /*******************************************************************************/ + case RFAL_NFC_STATE_POLL_ACTIVATION: + + if( rfalNfcPollActivation( gNfcDev.selDevIdx ) != ERR_NONE ) /* Activate selected device */ + { + gNfcDev.state = RFAL_NFC_STATE_DEACTIVATION; /* If Activation failed, restart loop */ + break; + } + + gNfcDev.state = RFAL_NFC_STATE_ACTIVATED; /* Device has been properly activated */ + rfalNfcNfcNotify( gNfcDev.state ); /* Inform upper layer that a device has been activated */ + break; + + + /*******************************************************************************/ + case RFAL_NFC_STATE_DATAEXCHANGE: + + rfalNfcDataExchangeGetStatus(); /* Run the internal state machine */ + + if( gNfcDev.dataExErr != ERR_BUSY ) /* If Dataexchange has terminated */ + { + gNfcDev.state = RFAL_NFC_STATE_DATAEXCHANGE_DONE; /* Go to done state */ + rfalNfcNfcNotify( gNfcDev.state ); /* And notify caller */ + } + if( gNfcDev.dataExErr == ERR_SLEEP_REQ ) /* Check if Listen mode has to go to Sleep */ + { + gNfcDev.state = RFAL_NFC_STATE_LISTEN_SLEEP; /* Go to Listen Sleep state */ + rfalNfcNfcNotify( gNfcDev.state ); /* And notify caller */ + } + break; + + + /*******************************************************************************/ + case RFAL_NFC_STATE_DEACTIVATION: + + rfalNfcDeactivation(); /* Deactivate current device */ + + gNfcDev.state = ((gNfcDev.discRestart) ? RFAL_NFC_STATE_START_DISCOVERY : RFAL_NFC_STATE_IDLE); + rfalNfcNfcNotify( gNfcDev.state ); /* Notify caller */ + break; + + /*******************************************************************************/ + case RFAL_NFC_STATE_LISTEN_TECHDETECT: + + if( platformTimerIsExpired( gNfcDev.discTmr ) ) + { + #if RFAL_FEATURE_LISTEN_MODE + rfalListenStop(); + #else + rfalFieldOff(); + #endif /* RFAL_FEATURE_LISTEN_MODE */ + + gNfcDev.state = RFAL_NFC_STATE_START_DISCOVERY; /* Restart the discovery loop */ + break; + } + + #if RFAL_FEATURE_LISTEN_MODE + err = rfalListenStart( gNfcDev.lmMask, &gNfcDev.disc.lmConfigPA, NULL, &gNfcDev.disc.lmConfigPF, (uint8_t*)&gNfcDev.rxBuf.rfBuf, sizeof(gNfcDev.rxBuf.rfBuf), &gNfcDev.rxLen ); + if( err == ERR_NONE ) + { + gNfcDev.state = RFAL_NFC_STATE_LISTEN_COLAVOIDANCE; /* Wait for listen mode to be activated */ + } + break; + + + /*******************************************************************************/ + case RFAL_NFC_STATE_LISTEN_COLAVOIDANCE: + + if( platformTimerIsExpired( gNfcDev.discTmr ) ) /* Check if the total duration has been reached */ + { + rfalListenStop(); + gNfcDev.state = RFAL_NFC_STATE_START_DISCOVERY; /* Restart the discovery loop */ + break; + } + + /* Check for external field */ + if( rfalListenGetState( NULL, NULL ) >= RFAL_LM_STATE_IDLE ) + { + gNfcDev.state = RFAL_NFC_STATE_LISTEN_ACTIVATION; /* Wait for listen mode to be activated */ + } + break; + + + /*******************************************************************************/ + case RFAL_NFC_STATE_LISTEN_ACTIVATION: + case RFAL_NFC_STATE_LISTEN_SLEEP: + + err = rfalNfcListenActivation(); + if( err != ERR_BUSY ) + { + if( err == ERR_NONE ) + { + gNfcDev.activeDev = gNfcDev.devList; /* Assign the active device to be used further on */ + gNfcDev.devCnt++; + + gNfcDev.state = RFAL_NFC_STATE_ACTIVATED; /* Device has been properly activated */ + rfalNfcNfcNotify( gNfcDev.state ); /* Inform upper layer that a device has been activated */ + } + else + { + rfalListenStop(); + gNfcDev.state = RFAL_NFC_STATE_START_DISCOVERY; /* Restart the discovery loop */ + } + } + #endif /* RFAL_FEATURE_LISTEN_MODE */ + break; + + /*******************************************************************************/ + case RFAL_NFC_STATE_ACTIVATED: + case RFAL_NFC_STATE_POLL_SELECT: + case RFAL_NFC_STATE_DATAEXCHANGE_DONE: + default: + return; + } +} + + +/*******************************************************************************/ +ReturnCode rfalNfcDataExchangeStart( uint8_t *txData, uint16_t txDataLen, uint8_t **rxData, uint16_t **rvdLen, uint32_t fwt ) +{ + ReturnCode err; + rfalTransceiveContext ctx; + + /*******************************************************************************/ + /* The Data Exchange is divided in two different moments, the trigger/Start of * + * the transfer followed by the check until its completion */ + if( (gNfcDev.state >= RFAL_NFC_STATE_ACTIVATED) && (gNfcDev.activeDev != NULL) ) + { + + /*******************************************************************************/ + /* In Listen mode is the Poller that initiates the communicatation */ + /* Assign output parameters and rfalNfcDataExchangeGetStatus will return */ + /* incoming data from Poller/Initiator */ + if( (gNfcDev.state == RFAL_NFC_STATE_ACTIVATED) && rfalNfcIsRemDevPoller( gNfcDev.activeDev->type ) ) + { + if( txDataLen > 0U ) + { + return ERR_WRONG_STATE; + } + + *rvdLen = (uint16_t*)&gNfcDev.rxLen; + *rxData = (uint8_t*)( (gNfcDev.activeDev->rfInterface == RFAL_NFC_INTERFACE_ISODEP) ? gNfcDev.rxBuf.isoDepBuf.inf : + ((gNfcDev.activeDev->rfInterface == RFAL_NFC_INTERFACE_NFCDEP) ? gNfcDev.rxBuf.nfcDepBuf.inf : gNfcDev.rxBuf.rfBuf) ); + return ERR_NONE; + } + + + /*******************************************************************************/ + switch( gNfcDev.activeDev->rfInterface ) /* Check which RF interface shall be used/has been activated */ + { + /*******************************************************************************/ + case RFAL_NFC_INTERFACE_RF: + + rfalCreateByteFlagsTxRxContext( ctx, (uint8_t*)txData, txDataLen, gNfcDev.rxBuf.rfBuf, sizeof(gNfcDev.rxBuf.rfBuf), &gNfcDev.rxLen, RFAL_TXRX_FLAGS_DEFAULT, fwt ); + *rxData = (uint8_t*)gNfcDev.rxBuf.rfBuf; + *rvdLen = (uint16_t*)&gNfcDev.rxLen; + err = rfalStartTransceive( &ctx ); + break; + + #if RFAL_FEATURE_ISO_DEP + /*******************************************************************************/ + case RFAL_NFC_INTERFACE_ISODEP: + { + rfalIsoDepTxRxParam isoDepTxRx; + + if( txDataLen > 0U ) + { + ST_MEMCPY( (uint8_t*)gNfcDev.txBuf.isoDepBuf.inf, txData, txDataLen ); + } + + isoDepTxRx.DID = RFAL_ISODEP_NO_DID; + isoDepTxRx.ourFSx = RFAL_ISODEP_FSX_KEEP; + isoDepTxRx.FSx = gNfcDev.activeDev->proto.isoDep.info.FSx; + isoDepTxRx.dFWT = gNfcDev.activeDev->proto.isoDep.info.dFWT; + isoDepTxRx.FWT = gNfcDev.activeDev->proto.isoDep.info.FWT; + isoDepTxRx.txBuf = &gNfcDev.txBuf.isoDepBuf; + isoDepTxRx.txBufLen = txDataLen; + isoDepTxRx.isTxChaining = false; + isoDepTxRx.rxBuf = &gNfcDev.rxBuf.isoDepBuf; + isoDepTxRx.rxLen = &gNfcDev.rxLen; + isoDepTxRx.isRxChaining = &gNfcDev.isRxChaining; + *rxData = (uint8_t*)gNfcDev.rxBuf.isoDepBuf.inf; + *rvdLen = (uint16_t*)&gNfcDev.rxLen; + + /*******************************************************************************/ + /* Trigger a RFAL ISO-DEP Transceive */ + err = rfalIsoDepStartTransceive( isoDepTxRx ); + break; + } + #endif /* RFAL_FEATURE_ISO_DEP */ + + #if RFAL_FEATURE_NFC_DEP + /*******************************************************************************/ + case RFAL_NFC_INTERFACE_NFCDEP: + { + rfalNfcDepTxRxParam nfcDepTxRx; + + if( txDataLen > 0U) + { + ST_MEMCPY( (uint8_t*)gNfcDev.txBuf.nfcDepBuf.inf, txData, txDataLen ); + } + + nfcDepTxRx.DID = RFAL_NFCDEP_DID_KEEP; + nfcDepTxRx.FSx = rfalNfcDepLR2FS( (uint8_t)rfalNfcDepPP2LR( gNfcDev.activeDev->proto.nfcDep.activation.Target.ATR_RES.PPt ) ); + nfcDepTxRx.dFWT = gNfcDev.activeDev->proto.nfcDep.info.dFWT; + nfcDepTxRx.FWT = gNfcDev.activeDev->proto.nfcDep.info.FWT; + nfcDepTxRx.txBuf = &gNfcDev.txBuf.nfcDepBuf; + nfcDepTxRx.txBufLen = txDataLen; + nfcDepTxRx.isTxChaining = false; + nfcDepTxRx.rxBuf = &gNfcDev.rxBuf.nfcDepBuf; + nfcDepTxRx.rxLen = &gNfcDev.rxLen; + nfcDepTxRx.isRxChaining = &gNfcDev.isRxChaining; + *rxData = (uint8_t*)gNfcDev.rxBuf.nfcDepBuf.inf; + *rvdLen = (uint16_t*)&gNfcDev.rxLen; + + /*******************************************************************************/ + /* Trigger a RFAL NFC-DEP Transceive */ + err = rfalNfcDepStartTransceive( &nfcDepTxRx ); + break; + } + #endif /* RFAL_FEATURE_NFC_DEP */ + + /*******************************************************************************/ + default: + err = ERR_PARAM; + break; + } + + /* If a transceive has succesfully started flag Data Exchange as ongoing */ + if( err == ERR_NONE ) + { + gNfcDev.dataExErr = ERR_BUSY; + gNfcDev.state = RFAL_NFC_STATE_DATAEXCHANGE; + } + + return err; + } + + return ERR_WRONG_STATE; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcDataExchangeGetStatus( void ) +{ + /*******************************************************************************/ + /* Check if it's the first frame received in Listen mode */ + if( gNfcDev.state == RFAL_NFC_STATE_ACTIVATED ) + { + /* Continue data exchange as normal */ + gNfcDev.dataExErr = ERR_BUSY; + gNfcDev.state = RFAL_NFC_STATE_DATAEXCHANGE; + + /* Check if we performing in T3T CE */ + if( (gNfcDev.activeDev->type == RFAL_NFC_POLL_TYPE_NFCF) && (gNfcDev.activeDev->rfInterface == RFAL_NFC_INTERFACE_RF) ) + { + /* The first frame has been retrieved by rfalListenMode, flag data immediately */ + /* Can only call rfalGetTransceiveStatus() after starting a transceive with rfalStartTransceive */ + gNfcDev.dataExErr = ERR_NONE; + } + } + + + /*******************************************************************************/ + /* Check if we are in we have been placed to sleep, and return last error */ + if( gNfcDev.state == RFAL_NFC_STATE_LISTEN_SLEEP ) + { + return gNfcDev.dataExErr; /* ERR_SLEEP_REQ */ + } + + + /*******************************************************************************/ + /* Check if Data exchange has been started */ + if( (gNfcDev.state != RFAL_NFC_STATE_DATAEXCHANGE) && (gNfcDev.state != RFAL_NFC_STATE_DATAEXCHANGE_DONE) ) + { + return ERR_WRONG_STATE; + } + + /* Check if Data exchange is still ongoing */ + if( gNfcDev.dataExErr == ERR_BUSY ) + { + switch( gNfcDev.activeDev->rfInterface ) + { + /*******************************************************************************/ + case RFAL_NFC_INTERFACE_RF: + gNfcDev.dataExErr = rfalGetTransceiveStatus(); + break; + + #if RFAL_FEATURE_ISO_DEP + /*******************************************************************************/ + case RFAL_NFC_INTERFACE_ISODEP: + gNfcDev.dataExErr = rfalIsoDepGetTransceiveStatus(); + break; + #endif /* RFAL_FEATURE_ISO_DEP */ + + /*******************************************************************************/ + #if RFAL_FEATURE_NFC_DEP + case RFAL_NFC_INTERFACE_NFCDEP: + gNfcDev.dataExErr = rfalNfcDepGetTransceiveStatus(); + break; + #endif /* RFAL_FEATURE_NFC_DEP */ + + /*******************************************************************************/ + default: + gNfcDev.dataExErr = ERR_PARAM; + break; + } + + + #if RFAL_FEATURE_LISTEN_MODE + /*******************************************************************************/ + /* If a Sleep request has been received (Listen Mode) go to sleep immediately */ + if( gNfcDev.dataExErr == ERR_SLEEP_REQ ) + { + EXIT_ON_ERR( gNfcDev.dataExErr, rfalListenSleepStart( RFAL_LM_STATE_SLEEP_A, gNfcDev.rxBuf.rfBuf, sizeof(gNfcDev.rxBuf.rfBuf), &gNfcDev.rxLen ) ); + + /* If set Sleep was succesfull keep restore the Sleep request signal */ + gNfcDev.dataExErr = ERR_SLEEP_REQ; + } + #endif /* RFAL_FEATURE_LISTEN_MODE */ + + } + + return gNfcDev.dataExErr; +} + +/*! + ****************************************************************************** + * \brief Poller Technology Detection + * + * This method implements the Technology Detection / Poll for different + * device technologies. + * + * \return ERR_NONE : Operation completed with no error + * \return ERR_BUSY : Operation ongoing + * \return ERR_XXXX : Error occurred + * + ****************************************************************************** + */ +static ReturnCode rfalNfcPollTechDetetection( void ) +{ + ReturnCode err; + + err = ERR_NONE; + + /* Supress warning when specific RFAL features have been disabled */ + NO_WARNING(err); + + + /*******************************************************************************/ + /* AP2P Technology Detection */ + /*******************************************************************************/ + if( ((gNfcDev.disc.techs2Find & RFAL_NFC_POLL_TECH_AP2P) != 0U) && ((gNfcDev.techs2do & RFAL_NFC_POLL_TECH_AP2P) != 0U) ) + { + gNfcDev.techs2do &= ~RFAL_NFC_POLL_TECH_AP2P; + + #if RFAL_FEATURE_NFC_DEP + + EXIT_ON_ERR( err, rfalSetMode( RFAL_MODE_POLL_ACTIVE_P2P, gNfcDev.disc.ap2pBR, gNfcDev.disc.ap2pBR ) ); + rfalSetErrorHandling( RFAL_ERRORHANDLING_NFC ); + rfalSetFDTListen( RFAL_FDT_LISTEN_AP2P_POLLER ); + rfalSetFDTPoll( RFAL_TIMING_NONE ); + rfalSetGT( RFAL_GT_AP2P_ADJUSTED ); + EXIT_ON_ERR( err, rfalFieldOnAndStartGT() ); /* Turns the Field On and starts GT timer */ + + err = rfalNfcNfcDepActivate( gNfcDev.devList, RFAL_NFCDEP_COMM_ACTIVE, NULL, 0 );/* Poll for NFC-A devices */ + if( err == ERR_NONE ) + { + gNfcDev.techsFound |= RFAL_NFC_POLL_TECH_AP2P; + + gNfcDev.devList->type = RFAL_NFC_LISTEN_TYPE_AP2P; + gNfcDev.devList->rfInterface = RFAL_NFC_INTERFACE_NFCDEP; + gNfcDev.devCnt++; + + return ERR_NONE; + } + + rfalFieldOff(); + return ERR_BUSY; + + #endif /* RFAL_FEATURE_NFC_DEP */ + } + + + /*******************************************************************************/ + /* Passive NFC-A Technology Detection */ + /*******************************************************************************/ + if( ((gNfcDev.disc.techs2Find & RFAL_NFC_POLL_TECH_A) != 0U) && ((gNfcDev.techs2do & RFAL_NFC_POLL_TECH_A) != 0U) ) + { + gNfcDev.techs2do &= ~RFAL_NFC_POLL_TECH_A; + + #if RFAL_FEATURE_NFCA + { + rfalNfcaSensRes sensRes; + + EXIT_ON_ERR( err, rfalNfcaPollerInitialize() ); /* Initialize RFAL for NFC-A */ + EXIT_ON_ERR( err, rfalFieldOnAndStartGT() ); /* Turns the Field On and starts GT timer */ + + err = rfalNfcaPollerTechnologyDetection( gNfcDev.disc.compMode, &sensRes );/* Poll for NFC-A devices */ + if( err == ERR_NONE ) + { + gNfcDev.techsFound |= RFAL_NFC_POLL_TECH_A; + } + + return ERR_BUSY; + } + + #endif /* RFAL_FEATURE_NFCA */ + } + + + /*******************************************************************************/ + /* Passive NFC-B Technology Detection */ + /*******************************************************************************/ + if( ((gNfcDev.disc.techs2Find & RFAL_NFC_POLL_TECH_B) != 0U) && ((gNfcDev.techs2do & RFAL_NFC_POLL_TECH_B) != 0U) ) + { + gNfcDev.techs2do &= ~RFAL_NFC_POLL_TECH_B; + + #if RFAL_FEATURE_NFCB + { + rfalNfcbSensbRes sensbRes; + uint8_t sensbResLen; + + EXIT_ON_ERR( err, rfalNfcbPollerInitialize() ); /* Initialize RFAL for NFC-B */ + EXIT_ON_ERR( err, rfalFieldOnAndStartGT() ); /* As field is already On only starts GT timer */ + + err = rfalNfcbPollerTechnologyDetection( gNfcDev.disc.compMode, &sensbRes, &sensbResLen ); /* Poll for NFC-B devices */ + if( err == ERR_NONE ) + { + gNfcDev.techsFound |= RFAL_NFC_POLL_TECH_B; + } + + return ERR_BUSY; + } + + #endif /* RFAL_FEATURE_NFCB */ + } + + /*******************************************************************************/ + /* Passive NFC-F Technology Detection */ + /*******************************************************************************/ + if( ((gNfcDev.disc.techs2Find & RFAL_NFC_POLL_TECH_F) != 0U) && ((gNfcDev.techs2do & RFAL_NFC_POLL_TECH_F) != 0U) ) + { + gNfcDev.techs2do &= ~RFAL_NFC_POLL_TECH_F; + + #if RFAL_FEATURE_NFCF + + EXIT_ON_ERR( err, rfalNfcfPollerInitialize( gNfcDev.disc.nfcfBR ) ); /* Initialize RFAL for NFC-F */ + EXIT_ON_ERR( err, rfalFieldOnAndStartGT() ); /* As field is already On only starts GT timer */ + + err = rfalNfcfPollerCheckPresence(); /* Poll for NFC-F devices */ + if( err == ERR_NONE ) + { + gNfcDev.techsFound |= RFAL_NFC_POLL_TECH_F; + } + + return ERR_BUSY; + + #endif /* RFAL_FEATURE_NFCF */ + } + + + /*******************************************************************************/ + /* Passive NFC-V Technology Detection */ + /*******************************************************************************/ + if( ((gNfcDev.disc.techs2Find & RFAL_NFC_POLL_TECH_V) != 0U) && ((gNfcDev.techs2do & RFAL_NFC_POLL_TECH_V) != 0U) ) + { + gNfcDev.techs2do &= ~RFAL_NFC_POLL_TECH_V; + + #if RFAL_FEATURE_NFCV + { + rfalNfcvInventoryRes invRes; + + EXIT_ON_ERR( err, rfalNfcvPollerInitialize() ); /* Initialize RFAL for NFC-V */ + EXIT_ON_ERR( err, rfalFieldOnAndStartGT() ); /* As field is already On only starts GT timer */ + + err = rfalNfcvPollerCheckPresence( &invRes ); /* Poll for NFC-V devices */ + if( err == ERR_NONE ) + { + gNfcDev.techsFound |= RFAL_NFC_POLL_TECH_V; + } + + return ERR_BUSY; + } + + #endif /* RFAL_FEATURE_NFCV */ + } + + + /*******************************************************************************/ + /* Passive Proprietary Technology ST25TB */ + /*******************************************************************************/ + if( ((gNfcDev.disc.techs2Find & RFAL_NFC_POLL_TECH_ST25TB) != 0U) && ((gNfcDev.techs2do & RFAL_NFC_POLL_TECH_ST25TB) != 0U) ) + { + gNfcDev.techs2do &= ~RFAL_NFC_POLL_TECH_ST25TB; + + #if RFAL_FEATURE_ST25TB + + EXIT_ON_ERR( err, rfalSt25tbPollerInitialize() ); /* Initialize RFAL for NFC-V */ + EXIT_ON_ERR( err, rfalFieldOnAndStartGT() ); /* As field is already On only starts GT timer */ + + err = rfalSt25tbPollerCheckPresence( NULL ); /* Poll for ST25TB devices */ + if( err == ERR_NONE ) + { + gNfcDev.techsFound |= RFAL_NFC_POLL_TECH_ST25TB; + } + + #endif /* RFAL_FEATURE_ST25TB */ + } + + return ERR_NONE; +} + +/*! + ****************************************************************************** + * \brief Poller Collision Resolution + * + * This method implements the Collision Resolution on all technologies that + * have been detected before. + * + * \return ERR_NONE : Operation completed with no error + * \return ERR_BUSY : Operation ongoing + * \return ERR_XXXX : Error occurred + * + ****************************************************************************** + */ +static ReturnCode rfalNfcPollCollResolution( void ) +{ + uint8_t i; + uint8_t devCnt; + ReturnCode err; + + err = ERR_NONE; + devCnt = 0; + i = 0; + + /* Supress warning when specific RFAL features have been disabled */ + NO_WARNING(err); + NO_WARNING(devCnt); + NO_WARNING(i); + + /* Check if device limit has been reached */ + if( gNfcDev.devCnt >= gNfcDev.disc.devLimit ) + { + return ERR_NONE; + } + + /*******************************************************************************/ + /* NFC-A Collision Resolution */ + /*******************************************************************************/ +#if RFAL_FEATURE_NFCA + if( ((gNfcDev.techsFound & RFAL_NFC_POLL_TECH_A) != 0U) && ((gNfcDev.techs2do & RFAL_NFC_POLL_TECH_A) != 0U) ) /* If a NFC-A device was found/detected, perform Collision Resolution */ + { + rfalNfcaListenDevice nfcaDevList[RFAL_NFC_MAX_DEVICES]; + + gNfcDev.techs2do &= ~RFAL_NFC_POLL_TECH_A; + + EXIT_ON_ERR( err, rfalNfcaPollerInitialize()); /* Initialize RFAL for NFC-A */ + EXIT_ON_ERR( err, rfalFieldOnAndStartGT() ); /* Ensure GT again as other technologies have also been polled */ + + err = rfalNfcaPollerFullCollisionResolution( gNfcDev.disc.compMode, (gNfcDev.disc.devLimit - gNfcDev.devCnt), nfcaDevList, &devCnt ); + if( (err == ERR_NONE) && (devCnt != 0U) ) + { + for( i=0; i gNfcDev.devCnt ) + { + return ERR_WRONG_STATE; + } + + switch( gNfcDev.devList[devIt].type ) + { + /*******************************************************************************/ + /* AP2P Activation */ + /*******************************************************************************/ + #if RFAL_FEATURE_NFC_DEP + case RFAL_NFC_LISTEN_TYPE_AP2P: + /* Activation has already been perfomed (ATR_REQ) */ + + gNfcDev.devList[devIt].nfcid = gNfcDev.devList[devIt].proto.nfcDep.activation.Target.ATR_RES.NFCID3; + gNfcDev.devList[devIt].nfcidLen = RFAL_NFCDEP_NFCID3_LEN; + break; + #endif /* RFAL_FEATURE_NFC_DEP */ + + + /*******************************************************************************/ + /* Passive NFC-A Activation */ + /*******************************************************************************/ + #if RFAL_FEATURE_NFCA + case RFAL_NFC_LISTEN_TYPE_NFCA: + + rfalNfcaPollerInitialize(); + if( gNfcDev.devList[devIt].dev.nfca.isSleep ) /* Check if desired device is in Sleep */ + { + rfalNfcaSensRes sensRes; + rfalNfcaSelRes selRes; + + EXIT_ON_ERR( err, rfalNfcaPollerCheckPresence( RFAL_14443A_SHORTFRAME_CMD_WUPA, &sensRes ) ); /* Wake up all cards */ + EXIT_ON_ERR( err, rfalNfcaPollerSelect( gNfcDev.devList[devIt].dev.nfca.nfcId1, gNfcDev.devList[devIt].dev.nfca.nfcId1Len, &selRes ) ); /* Select specific device */ + } + + /* Set NFCID */ + gNfcDev.devList[devIt].nfcid = gNfcDev.devList[devIt].dev.nfca.nfcId1; + gNfcDev.devList[devIt].nfcidLen = gNfcDev.devList[devIt].dev.nfca.nfcId1Len; + + /*******************************************************************************/ + /* Perform protocol specific activation */ + switch( gNfcDev.devList[devIt].dev.nfca.type ) + { + /*******************************************************************************/ + case RFAL_NFCA_T1T: + + /* No further activation needed for T1T (RID already performed) */ + + gNfcDev.devList[devIt].nfcid = gNfcDev.devList[devIt].dev.nfca.ridRes.uid; + gNfcDev.devList[devIt].nfcidLen = RFAL_T1T_UID_LEN; + + gNfcDev.devList[devIt].rfInterface = RFAL_NFC_INTERFACE_RF; + break; + + case RFAL_NFCA_T2T: + + /* No further activation needed for a T2T */ + + gNfcDev.devList[devIt].rfInterface = RFAL_NFC_INTERFACE_RF; + break; + + + /*******************************************************************************/ + case RFAL_NFCA_T4T: /* Device supports ISO-DEP */ + + #if RFAL_FEATURE_ISO_DEP_POLL + /* Perform ISO-DEP (ISO14443-4) activation: RATS and PPS if supported */ + rfalIsoDepInitialize(); + EXIT_ON_ERR( err, rfalIsoDepPollAHandleActivation( (rfalIsoDepFSxI)RFAL_ISODEP_FSDI_DEFAULT, RFAL_ISODEP_NO_DID, RFAL_BR_424, &gNfcDev.devList[devIt].proto.isoDep ) ); + + gNfcDev.devList[devIt].rfInterface = RFAL_NFC_INTERFACE_ISODEP; /* NFC-A T4T device activated */ + #else + gNfcDev.devList[devIt].rfInterface = RFAL_NFC_INTERFACE_RF; /* No ISO-DEP supported activate using RF interface */ + #endif /* RFAL_FEATURE_ISO_DEP_POLL */ + break; + + + + /*******************************************************************************/ + case RFAL_NFCA_T4T_NFCDEP: /* Device supports both T4T and NFC-DEP */ + case RFAL_NFCA_NFCDEP: /* Device supports NFC-DEP */ + + #if RFAL_FEATURE_NFC_DEP + /* Perform NFC-DEP (P2P) activation: ATR and PSL if supported */ + EXIT_ON_ERR( err, rfalNfcNfcDepActivate( &gNfcDev.devList[devIt], RFAL_NFCDEP_COMM_PASSIVE, NULL, 0 ) ); + + gNfcDev.devList[devIt].nfcid = gNfcDev.devList[devIt].proto.nfcDep.activation.Target.ATR_RES.NFCID3; + gNfcDev.devList[devIt].nfcidLen = RFAL_NFCDEP_NFCID3_LEN; + + gNfcDev.devList[devIt].rfInterface = RFAL_NFC_INTERFACE_NFCDEP; /* NFC-A P2P device activated */ + #else + gNfcDev.devList[devIt].rfInterface = RFAL_NFC_INTERFACE_RF; /* No NFC-DEP supported activate using RF interface */ + #endif /* RFAL_FEATURE_NFC_DEP */ + break; + + /*******************************************************************************/ + default: + return ERR_WRONG_STATE; + } + break; + #endif /* RFAL_FEATURE_NFCA */ + + + /*******************************************************************************/ + /* Passive NFC-B Activation */ + /*******************************************************************************/ + #if RFAL_FEATURE_NFCB + case RFAL_NFC_LISTEN_TYPE_NFCB: + + rfalNfcbPollerInitialize(); + if( gNfcDev.devList[devIt].dev.nfcb.isSleep ) /* Check if desired device is in Sleep */ + { + rfalNfcbSensbRes sensbRes; + uint8_t sensbResLen; + + /* Wake up all cards. SENSB_RES may return collision but the NFCID0 is available to explicitly select NFC-B card via ATTRIB; so error will be ignored here */ + rfalNfcbPollerCheckPresence( RFAL_NFCB_SENS_CMD_ALLB_REQ, RFAL_NFCB_SLOT_NUM_1, &sensbRes, &sensbResLen ); + } + + /* Set NFCID */ + gNfcDev.devList[devIt].nfcid = gNfcDev.devList[devIt].dev.nfcb.sensbRes.nfcid0; + gNfcDev.devList[devIt].nfcidLen = RFAL_NFCB_NFCID0_LEN; + + #if RFAL_FEATURE_ISO_DEP_POLL + /* Check if device supports ISO-DEP (ISO14443-4) */ + if( (gNfcDev.devList[devIt].dev.nfcb.sensbRes.protInfo.FsciProType & RFAL_NFCB_SENSB_RES_PROTO_ISO_MASK) != 0U ) + { + rfalIsoDepInitialize(); + /* Perform ISO-DEP (ISO14443-4) activation: RATS and PPS if supported */ + EXIT_ON_ERR( err, rfalIsoDepPollBHandleActivation( (rfalIsoDepFSxI)RFAL_ISODEP_FSDI_DEFAULT, RFAL_ISODEP_NO_DID, RFAL_BR_424, 0x00, &gNfcDev.devList[devIt].dev.nfcb, NULL, 0, &gNfcDev.devList[devIt].proto.isoDep ) ); + + gNfcDev.devList[devIt].rfInterface = RFAL_NFC_INTERFACE_ISODEP; /* NFC-B T4T device activated */ + break; + } + #endif /* RFAL_FEATURE_ISO_DEP_POLL */ + + gNfcDev.devList[devIt].rfInterface = RFAL_NFC_INTERFACE_RF; /* NFC-B device activated */ + break; + + #endif /* RFAL_FEATURE_NFCB */ + + + /*******************************************************************************/ + /* Passive NFC-F Activation */ + /*******************************************************************************/ + #if RFAL_FEATURE_NFCF + case RFAL_NFC_LISTEN_TYPE_NFCF: + + rfalNfcfPollerInitialize( gNfcDev.disc.nfcfBR ); + + #if RFAL_FEATURE_NFC_DEP + if( rfalNfcfIsNfcDepSupported( &gNfcDev.devList[devIt].dev.nfcf ) ) + { + /* Perform NFC-DEP (P2P) activation: ATR and PSL if supported */ + EXIT_ON_ERR( err, rfalNfcNfcDepActivate( &gNfcDev.devList[devIt], RFAL_NFCDEP_COMM_PASSIVE, NULL, 0 ) ); + + /* Set NFCID */ + gNfcDev.devList[devIt].nfcid = gNfcDev.devList[devIt].proto.nfcDep.activation.Target.ATR_RES.NFCID3; + gNfcDev.devList[devIt].nfcidLen = RFAL_NFCDEP_NFCID3_LEN; + + gNfcDev.devList[devIt].rfInterface = RFAL_NFC_INTERFACE_NFCDEP; /* NFC-F P2P device activated */ + break; + } + #endif /* RFAL_FEATURE_NFC_DEP */ + + /* Set NFCID */ + gNfcDev.devList[devIt].nfcid = gNfcDev.devList[devIt].dev.nfcf.sensfRes.NFCID2; + gNfcDev.devList[devIt].nfcidLen = RFAL_NFCF_NFCID2_LEN; + + gNfcDev.devList[devIt].rfInterface = RFAL_NFC_INTERFACE_RF; /* NFC-F T3T device activated */ + break; + #endif /* RFAL_FEATURE_NFCF */ + + + /*******************************************************************************/ + /* Passive NFC-V Activation */ + /*******************************************************************************/ + #if RFAL_FEATURE_NFCV + case RFAL_NFC_LISTEN_TYPE_NFCV: + + rfalNfcvPollerInitialize(); + + /* No specific activation needed for a T5T */ + + /* Set NFCID */ + gNfcDev.devList[devIt].nfcid = gNfcDev.devList[devIt].dev.nfcv.InvRes.UID; + gNfcDev.devList[devIt].nfcidLen = RFAL_NFCV_UID_LEN; + + gNfcDev.devList[devIt].rfInterface = RFAL_NFC_INTERFACE_RF; /* NFC-V T5T device activated */ + break; + #endif /* RFAL_FEATURE_NFCV */ + + + /*******************************************************************************/ + /* Passive ST25TB Activation */ + /*******************************************************************************/ + #if RFAL_FEATURE_ST25TB + case RFAL_NFC_LISTEN_TYPE_ST25TB: + + rfalSt25tbPollerInitialize(); + + /* No specific activation needed for a ST25TB */ + + /* Set NFCID */ + gNfcDev.devList[devIt].nfcid = gNfcDev.devList[devIt].dev.st25tb.UID; + gNfcDev.devList[devIt].nfcidLen = RFAL_ST25TB_UID_LEN; + + gNfcDev.devList[devIt].rfInterface = RFAL_NFC_INTERFACE_RF; /* ST25TB device activated */ + break; + #endif /* RFAL_FEATURE_ST25TB */ + + /*******************************************************************************/ + default: + return ERR_WRONG_STATE; + } + + gNfcDev.activeDev = &gNfcDev.devList[devIt]; /* Assign active device to be used further on */ + return ERR_NONE; +} + + +/*! + ****************************************************************************** + * \brief Listener Activation + * + * This method handles the listen mode Activation according to the different + * protocols the Reader/Initiator performs + * + * \return ERR_NONE : Operation completed with no error + * \return ERR_BUSY : Operation ongoing + * \return ERR_PROTO : Unexpected frame received + * \return ERR_XXXX : Error occurred + * + ****************************************************************************** + */ +#if RFAL_FEATURE_LISTEN_MODE +static ReturnCode rfalNfcListenActivation( void ) +{ + bool isDataRcvd; + uint8_t hdrLen; + ReturnCode ret; + rfalLmState lmSt; + rfalBitRate bitRate; + + lmSt = rfalListenGetState( &isDataRcvd, &bitRate ); + switch(lmSt) + { + /*******************************************************************************/ + case RFAL_LM_STATE_ACTIVE_A: /* NFC-A CE activation */ + case RFAL_LM_STATE_ACTIVE_Ax: + + if( isDataRcvd ) /* Check if Reader/Initator has sent some data */ + { + /* Set the header length in NFC-A */ + hdrLen = (RFAL_NFCDEP_SB_LEN + RFAL_NFCDEP_LEN_LEN); + + NO_WARNING(hdrLen); /* Supress warning if feature switch is disabled */ + + /* Check if received data is a Sleep request */ + if( rfalNfcaListenerIsSleepReq( gNfcDev.rxBuf.rfBuf, rfalConvBitsToBytes(gNfcDev.rxLen)) ) /* Check if received data is a SLP_REQ */ + { + /* Set the Listen Mode in Sleep state */ + EXIT_ON_ERR( ret, rfalListenSleepStart( RFAL_LM_STATE_SLEEP_A, gNfcDev.rxBuf.rfBuf, sizeof(gNfcDev.rxBuf.rfBuf), &gNfcDev.rxLen ) ); + } + + #if RFAL_FEATURE_ISO_DEP_LISTEN + /* Check if received data is a valid RATS */ + else if( rfalIsoDepIsRats( gNfcDev.rxBuf.rfBuf, (uint8_t)rfalConvBitsToBytes(gNfcDev.rxLen) ) ) + { + rfalIsoDepAtsParam atsParam; + rfalIsoDepListenActvParam rxParam; + + /* Set ATS parameters */ + atsParam.fsci = (uint8_t)RFAL_ISODEP_DEFAULT_FSCI; + atsParam.fwi = RFAL_ISODEP_DEFAULT_FWI; + atsParam.sfgi = RFAL_ISODEP_DEFAULT_SFGI; + atsParam.didSupport = false; + atsParam.ta = RFAL_ISODEP_ATS_TA_SAME_D; + atsParam.hb = NULL; + atsParam.hbLen = 0; + + /* Set Rx parameters */ + rxParam.rxBuf = (rfalIsoDepBufFormat*) &gNfcDev.rxBuf.isoDepBuf; + rxParam.rxLen = &gNfcDev.rxLen; + rxParam.isoDepDev = &gNfcDev.devList->proto.isoDep; + rxParam.isRxChaining = &gNfcDev.isRxChaining; + + rfalListenSetState( RFAL_LM_STATE_CARDEMU_4A ); /* Set next state CE T4T */ + rfalIsoDepInitialize(); /* Initialize ISO-DEP layer to handle ISO14443-a activation / RATS */ + + /* Set ISO-DEP layer to digest RATS and handle activation */ + EXIT_ON_ERR( ret, rfalIsoDepListenStartActivation( &atsParam, NULL, gNfcDev.rxBuf.rfBuf, gNfcDev.rxLen, rxParam ) ); + } + #endif /* RFAL_FEATURE_ISO_DEP_LISTEN */ + + #if RFAL_FEATURE_NFC_DEP + /* Check if received data is a valid ATR_REQ */ + else if( rfalNfcDepIsAtrReq( &gNfcDev.rxBuf.rfBuf[hdrLen], (rfalConvBitsToBytes(gNfcDev.rxLen) - hdrLen), gNfcDev.devList->nfcid ) ) + { + gNfcDev.devList->type = RFAL_NFC_POLL_TYPE_NFCA; + EXIT_ON_ERR( ret, rfalNfcNfcDepActivate( gNfcDev.devList, RFAL_NFCDEP_COMM_PASSIVE, &gNfcDev.rxBuf.rfBuf[hdrLen], (rfalConvBitsToBytes(gNfcDev.rxLen) - hdrLen) ) ); + } + #endif /* RFAL_FEATURE_NFC_DEP */ + + else + { + return ERR_PROTO; + } + } + return ERR_BUSY; + + #if RFAL_FEATURE_ISO_DEP_LISTEN + /*******************************************************************************/ + case RFAL_LM_STATE_CARDEMU_4A: /* T4T ISO-DEP activation */ + + ret = rfalIsoDepListenGetActivationStatus(); + if( ret == ERR_NONE ) + { + gNfcDev.devList->type = RFAL_NFC_POLL_TYPE_NFCA; + gNfcDev.devList->rfInterface = RFAL_NFC_INTERFACE_ISODEP; + gNfcDev.devList->nfcid = NULL; + gNfcDev.devList->nfcidLen = 0; + } + return ret; + #endif /* RFAL_FEATURE_ISO_DEP_LISTEN */ + + /*******************************************************************************/ + case RFAL_LM_STATE_READY_F: /* NFC-F CE activation */ + + if( isDataRcvd ) /* Wait for the first received data */ + { + #if RFAL_FEATURE_NFC_DEP + /* Set the header length in NFC-F */ + hdrLen = RFAL_NFCDEP_LEN_LEN; + + if( rfalNfcDepIsAtrReq( &gNfcDev.rxBuf.rfBuf[hdrLen], (rfalConvBitsToBytes(gNfcDev.rxLen) - hdrLen), gNfcDev.devList->nfcid ) ) + { + gNfcDev.devList->type = RFAL_NFC_POLL_TYPE_NFCF; + EXIT_ON_ERR( ret, rfalNfcNfcDepActivate( gNfcDev.devList, RFAL_NFCDEP_COMM_PASSIVE, &gNfcDev.rxBuf.rfBuf[hdrLen], (rfalConvBitsToBytes(gNfcDev.rxLen) - hdrLen) ) ); + } + else + #endif /* RFAL_FEATURE_NFC_DEP */ + { + rfalListenSetState( RFAL_LM_STATE_CARDEMU_3 ); /* First data already received - set T3T CE */ + } + } + return ERR_BUSY; + + /*******************************************************************************/ + case RFAL_LM_STATE_CARDEMU_3: /* T3T activated */ + + gNfcDev.devList->type = RFAL_NFC_POLL_TYPE_NFCF; + gNfcDev.devList->rfInterface = RFAL_NFC_INTERFACE_RF; + gNfcDev.devList->nfcid = NULL; + gNfcDev.devList->nfcidLen = 0; + + return ERR_NONE; + + #if RFAL_FEATURE_NFC_DEP + /*******************************************************************************/ + case RFAL_LM_STATE_TARGET_A: /* NFC-DEP activation */ + case RFAL_LM_STATE_TARGET_F: + + ret = rfalNfcDepListenGetActivationStatus(); + if( ret == ERR_NONE ) + { + gNfcDev.devList->rfInterface = RFAL_NFC_INTERFACE_NFCDEP; + gNfcDev.devList->nfcidLen = RFAL_NFCDEP_NFCID3_LEN; + } + return ret; + #endif /* RFAL_FEATURE_NFC_DEP */ + + /*******************************************************************************/ + case RFAL_LM_STATE_IDLE: /* AP2P activation */ + if( isDataRcvd ) /* Check if Reader/Initator has sent some data */ + { + + if( (gNfcDev.lmMask & RFAL_LM_MASK_ACTIVE_P2P) != 0U ) /* Check if AP2P is enabled */ + { + + #if RFAL_FEATURE_NFC_DEP + /* Calculate the header length in NFC-A or NFC-F mode*/ + hdrLen = ( (bitRate == RFAL_BR_106) ? (RFAL_NFCDEP_SB_LEN + RFAL_NFCDEP_LEN_LEN) : RFAL_NFCDEP_LEN_LEN ); + + if( rfalNfcDepIsAtrReq( &gNfcDev.rxBuf.rfBuf[hdrLen], (rfalConvBitsToBytes(gNfcDev.rxLen) - hdrLen), NULL) ) + { + gNfcDev.devList->type = RFAL_NFC_POLL_TYPE_AP2P; + EXIT_ON_ERR( ret, rfalNfcNfcDepActivate( gNfcDev.devList, RFAL_NFCDEP_COMM_ACTIVE, &gNfcDev.rxBuf.rfBuf[hdrLen], (rfalConvBitsToBytes(gNfcDev.rxLen) - hdrLen) ) ); + } + else + #endif /* RFAL_FEATURE_NFC_DEP */ + { + return ERR_PROTO; + } + } + } + return ERR_BUSY; + + /*******************************************************************************/ + case RFAL_LM_STATE_READY_A: + case RFAL_LM_STATE_READY_Ax: + case RFAL_LM_STATE_SLEEP_A: + case RFAL_LM_STATE_SLEEP_AF: + return ERR_BUSY; + + /*******************************************************************************/ + case RFAL_LM_STATE_POWER_OFF: + return ERR_LINK_LOSS; + + default: /* Wait for activation */ + break; + } + + return ERR_INTERNAL; +} +#endif /* RFAL_FEATURE_LISTEN_MODE */ + + +/*! + ****************************************************************************** + * \brief Poller NFC DEP Activate + * + * This method performs NFC-DEP Activation + * + * \param[in] device : device info + * \param[in] commMode : communication mode (Passive/Active) + * \param[in] atrReq : received ATR_REQ + * \param[in] atrReqLen : received ATR_REQ size + * + * \return ERR_NONE : Operation completed with no error + * \return ERR_BUSY : Operation ongoing + * \return ERR_XXXX : Error occurred + * + ****************************************************************************** + */ +#if RFAL_FEATURE_NFC_DEP +static ReturnCode rfalNfcNfcDepActivate( rfalNfcDevice *device, rfalNfcDepCommMode commMode, const uint8_t *atrReq, uint16_t atrReqLen ) +{ + rfalNfcDepAtrParam initParam; + + /* If we are in Poll mode */ + if( rfalNfcIsRemDevListener( device->type ) ) + { + /*******************************************************************************/ + /* If Passive F use the NFCID2 retrieved from SENSF */ + if( device->type == RFAL_NFC_LISTEN_TYPE_NFCF ) + { + initParam.nfcid = device->dev.nfcf.sensfRes.NFCID2; + initParam.nfcidLen = RFAL_NFCF_NFCID2_LEN; + } + else + { + initParam.nfcid = gNfcDev.disc.nfcid3; + initParam.nfcidLen = RFAL_NFCDEP_NFCID3_LEN; + } + + initParam.BS = RFAL_NFCDEP_Bx_NO_HIGH_BR; + initParam.BR = RFAL_NFCDEP_Bx_NO_HIGH_BR; + initParam.DID = RFAL_NFCDEP_DID_NO; + initParam.NAD = RFAL_NFCDEP_NAD_NO; + initParam.LR = RFAL_NFCDEP_LR_254; + initParam.GB = gNfcDev.disc.GB; + initParam.GBLen = gNfcDev.disc.GBLen; + initParam.commMode = commMode; + initParam.operParam = (RFAL_NFCDEP_OPER_FULL_MI_EN | RFAL_NFCDEP_OPER_EMPTY_DEP_DIS | RFAL_NFCDEP_OPER_ATN_EN | RFAL_NFCDEP_OPER_RTOX_REQ_EN); + + rfalNfcDepInitialize(); + /* Perform NFC-DEP (P2P) activation: ATR and PSL if supported */ + return rfalNfcDepInitiatorHandleActivation( &initParam, RFAL_BR_424, &device->proto.nfcDep ); + } + + /* If we are in Listen mode */ +#if RFAL_FEATURE_LISTEN_MODE + else if( rfalNfcIsRemDevPoller( device->type ) ) + { + rfalNfcDepListenActvParam actvParams; + rfalNfcDepTargetParam targetParam; + + ST_MEMCPY(targetParam.nfcid3, (uint8_t*)gNfcDev.disc.nfcid3, RFAL_NFCDEP_NFCID3_LEN); + targetParam.bst = RFAL_NFCDEP_Bx_NO_HIGH_BR; + targetParam.brt = RFAL_NFCDEP_Bx_NO_HIGH_BR; + targetParam.to = RFAL_NFCDEP_WT_TRG_MAX; + targetParam.ppt = rfalNfcDepLR2PP(RFAL_NFCDEP_LR_254); + targetParam.GBtLen = 0; + targetParam.operParam = (RFAL_NFCDEP_OPER_FULL_MI_EN | RFAL_NFCDEP_OPER_EMPTY_DEP_DIS | RFAL_NFCDEP_OPER_ATN_EN | RFAL_NFCDEP_OPER_RTOX_REQ_EN); + targetParam.commMode = commMode; + + + /* Set activation buffer (including header) for NFC-DEP */ + actvParams.rxBuf = &gNfcDev.rxBuf.nfcDepBuf; + actvParams.rxLen = &gNfcDev.rxLen; + actvParams.isRxChaining = &gNfcDev.isRxChaining; + actvParams.nfcDepDev = &gNfcDev.devList->proto.nfcDep; + + rfalListenSetState( ((device->type == RFAL_NFC_POLL_TYPE_NFCA) ? RFAL_LM_STATE_TARGET_A : RFAL_LM_STATE_TARGET_F) ); + + rfalNfcDepInitialize(); + /* Perform NFC-DEP (P2P) activation: send ATR_RES and handle activation */ + return rfalNfcDepListenStartActivation( &targetParam, atrReq, atrReqLen, actvParams ); + } +#endif /* RFAL_FEATURE_LISTEN_MODE */ + + else + { + return ERR_INTERNAL; + } +} +#endif /* RFAL_FEATURE_NFC_DEP */ + + +/*! + ****************************************************************************** + * \brief Poller NFC Deactivate + * + * This method Deactivates the device if a deactivation procedure exists + * + * \return ERR_NONE : Operation completed with no error + * \return ERR_BUSY : Operation ongoing + * \return ERR_XXXX : Error occurred + * + ****************************************************************************** + */ +static ReturnCode rfalNfcDeactivation( void ) +{ + /* Check if a device has been activated */ + if( gNfcDev.activeDev != NULL ) + { + switch( gNfcDev.activeDev->rfInterface ) + { + /*******************************************************************************/ + case RFAL_NFC_INTERFACE_RF: + break; /* No specific deactivation to be performed */ + + /*******************************************************************************/ + #if RFAL_FEATURE_ISO_DEP_POLL + case RFAL_NFC_INTERFACE_ISODEP: + rfalIsoDepDeselect(); /* Send a Deselect to device */ + break; + #endif /* RFAL_FEATURE_ISO_DEP_POLL */ + + /*******************************************************************************/ + #if RFAL_FEATURE_NFC_DEP + case RFAL_NFC_INTERFACE_NFCDEP: + rfalNfcDepRLS(); /* Send a Release to device */ + break; + #endif /* RFAL_FEATURE_NFC_DEP */ + + default: + return ERR_REQUEST; + } + } + + #if RFAL_FEATURE_WAKEUP_MODE + rfalWakeUpModeStop(); + #endif /* RFAL_FEATURE_WAKEUP_MODE */ + + #if RFAL_FEATURE_LISTEN_MODE + rfalListenStop(); + #else + rfalFieldOff(); + #endif + + gNfcDev.activeDev = NULL; + return ERR_NONE; +} diff --git a/Software/Middlewares/ST/rfal/Src/rfal_nfcDep.c b/Software/Middlewares/ST/rfal/Src/rfal_nfcDep.c new file mode 100644 index 0000000..c92c877 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_nfcDep.c @@ -0,0 +1,2530 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: NFCC firmware + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_nfcDep.c + * + * \author Gustavo Patricio + * + * \brief Implementation of NFC-DEP protocol + * + * NFC-DEP is also known as NFCIP - Near Field Communication + * Interface and Protocol + * + * This implementation was based on the following specs: + * - NFC Forum Digital 1.1 + * - ECMA 340 3rd Edition 2013 + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "rfal_nfcDep.h" +#include "rfal_nfcf.h" +#include "utils.h" + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_NFC_DEP + #define RFAL_FEATURE_NFC_DEP false /* NFC-DEP module configuration missing. Disabled by default */ +#endif + +#if RFAL_FEATURE_NFC_DEP + +/* + ****************************************************************************** + * DEFINES + ****************************************************************************** + */ +#define NFCIP_ATR_RETRY_MAX 2U /*!< Max consecutive retrys of an ATR REQ with transm error*/ + +#define NFCIP_PSLPAY_LEN (2U) /*!< PSL Payload length (BRS + FSL) */ +#define NFCIP_PSLREQ_LEN (3U + RFAL_NFCDEP_LEN_LEN) /*!< PSL REQ length (incl LEN) */ +#define NFCIP_PSLRES_LEN (3U + RFAL_NFCDEP_LEN_LEN) /*!< PSL RES length (incl LEN) */ + +#define NFCIP_ATRREQ_BUF_LEN (RFAL_NFCDEP_ATRREQ_MAX_LEN + RFAL_NFCDEP_LEN_LEN) /*!< ATR REQ max length (incl LEN) */ +#define NFCIP_ATRRES_BUF_LEN (RFAL_NFCDEP_ATRRES_MAX_LEN + RFAL_NFCDEP_LEN_LEN) /*!< ATR RES max length (incl LEN) */ + +#define NFCIP_RLSREQ_LEN (3U + RFAL_NFCDEP_LEN_LEN) /*!< RLS REQ length (incl LEN) */ +#define NFCIP_RLSRES_LEN (3U + RFAL_NFCDEP_LEN_LEN) /*!< RSL RES length (incl LEN) */ +#define NFCIP_RLSRES_MIN (2U + RFAL_NFCDEP_LEN_LEN) /*!< Minimum length for a RLS RES (incl LEN) */ + +#define NFCIP_DSLREQ_LEN (3U + RFAL_NFCDEP_LEN_LEN) /*!< DSL REQ length (incl LEN) */ +#define NFCIP_DSLRES_LEN (3U + RFAL_NFCDEP_LEN_LEN) /*!< DSL RES length (incl LEN) */ +#define NFCIP_DSLRES_MIN (2U + RFAL_NFCDEP_LEN_LEN) /*!< Minimum length for a DSL RES (incl LEN) */ + +#define NFCIP_DSLRES_MAX_LEN (3U + RFAL_NFCDEP_LEN_LEN) /*!< Maximum length for a DSL RES (incl LEN) */ +#define NFCIP_RLSRES_MAX_LEN (3U + RFAL_NFCDEP_LEN_LEN) /*!< Minimum length for a RLS RES (incl LEN) */ +#define NFCIP_TARGET_RES_MAX ( MAX( NFCIP_RLSRES_MAX_LEN, NFCIP_DSLRES_MAX_LEN) ) /*!< Max target control res length */ + + + +#define NFCIP_NO_FWT RFAL_FWT_NONE /*!< No FWT value - Target Mode */ +#define NFCIP_INIT_MIN_RTOX 1U /*!< Minimum RTOX value Digital 1.0 14.8.4.1 */ +#define NFCIP_INIT_MAX_RTOX 59U /*!< Maximum RTOX value Digital 1.0 14.8.4.1 */ + +#define NFCIP_TARG_MIN_RTOX 1U /*!< Minimum target RTOX value Digital 1.0 14.8.4.1 */ +#define NFCIP_TARG_MAX_RTOX 59U /*!< Maximum target RTOX value Digital 1.0 14.8.4.1 */ + +#define NFCIP_TRECOV 1280U /*!< Digital 1.0 A.10 Trecov */ + +#define NFCIP_TIMEOUT_ADJUSTMENT 512U /*!< Timeout Adjustment to compensate timing from end of Tx to end of frame */ +#define NFCIP_RWT_ACTIVATION (0x1000001U + NFCIP_TIMEOUT_ADJUSTMENT) /*!< Digital 2.0 B.10 RWT ACTIVATION 2^24 + RWT Delta + Adjustment*/ +#define NFCIP_RWT_ACM_ACTIVATION (0x200001U + NFCIP_TIMEOUT_ADJUSTMENT) /*!< Digital 2.0 B.10 RWT ACTIVATION 2^21 + RWT Delta + Adjustment*/ + +#define RFAL_NFCDEP_HEADER_PAD (RFAL_NFCDEP_DEPREQ_HEADER_LEN - RFAL_NFCDEP_LEN_MIN) /*!< Difference between expected rcvd header len and max foreseen */ + + +#define NFCIP_MAX_TX_RETRYS (uint8_t)3U /*!< Number of retransmit retyrs */ +#define NFCIP_MAX_TO_RETRYS (uint8_t)3U /*!< Number of retrys for Timeout */ +#define NFCIP_MAX_RTOX_RETRYS (uint8_t)3U /*!< Number of retrys for RTOX */ +#define NFCIP_MAX_NACK_RETRYS (uint8_t)3U /*!< Number of retrys for NACK */ +#define NFCIP_MAX_ATN_RETRYS (uint8_t)3U /*!< Number of retrys for ATN */ + +#define NFCIP_MIN_TXERROR_LEN 4U /*!< Minimum frame length with error to be ignored Digital 1.0 14.12.5.4 */ + +#define NFCIP_REQ (uint8_t)0xD4U /*!= NFCIP_ST_INIT_IDLE) && ((st) <= NFCIP_ST_INIT_RLS) ) /*!< Checks if module is set as Initiator */ +#define nfcipIsTarget( st ) (!nfcipIsInitiator(st)) /*!< Checks if module is set as Target */ + +#define nfcipIsBRAllowed( br, mBR ) (((1U<<(br)) & (mBR)) != 0U) /*!< Checks bit rate is allowed by given mask */ + +#define nfcipIsEmptyDEPEnabled( op ) (!nfcipIsEmptyDEPDisabled(op)) /*!< Checks if empty payload is allowed by operation config NCI 1.0 Table 81 */ +#define nfcipIsEmptyDEPDisabled( op ) (((op) & RFAL_NFCDEP_OPER_EMPTY_DEP_DIS) != 0U) /*!< Checks if empty payload is not allowed by operation config NCI 1.0 Table 81 */ + +#define nfcipIsRTOXReqEnabled( op ) (!nfcipIsRTOXReqDisabled(op)) /*!< Checks if send a RTOX_REQ is allowed by operation config NCI 1.0 Table 81 */ +#define nfcipIsRTOXReqDisabled( op ) (((op) & RFAL_NFCDEP_OPER_RTOX_REQ_DIS) != 0U) /*!< Checks if send a RTOX_REQ is not allowed by operation config NCI 1.0 Table 81 */ + + +/*! Checks if isDeactivating callback is set and calls it, otherwise returns false */ +#define nfcipIsDeactivationPending() ( (gNfcip.isDeactivating == NULL) ? false : gNfcip.isDeactivating() ) + +/*! Returns the RWT Activation according to the current communication mode */ +#define nfcipRWTActivation() ((gNfcip.cfg.commMode == RFAL_NFCDEP_COMM_ACTIVE) ? NFCIP_RWT_ACM_ACTIVATION : NFCIP_RWT_ACTIVATION) + + +#define nfcipRTOXAdjust( v ) ((v) - ((v)>>3)) /*!< Adjust RTOX timer value to a percentage of the total, current 88% */ + +/*******************************************************************************/ + +// timerPollTimeoutValue is necessary after timerCalculateTimeout so that system will wake up upon timer timeout. +#define nfcipTimerStart( timer, time_ms ) (timer) = platformTimerCreate((uint16_t)(time_ms)) /*!< Configures and starts the RTOX timer */ +#define nfcipTimerisExpired( timer ) platformTimerIsExpired( timer ) /*!< Checks RTOX timer has expired */ + +#define nfcipLogE(...) /*!< Macro for the error log method */ +#define nfcipLogW(...) /*!< Macro for the warning log method */ +#define nfcipLogI(...) /*!< Macro for the info log method */ +#define nfcipLogD(...) /*!< Macro for the debug log method */ + + +/*! Digital 1.1 - 16.12.5.2 The Target SHALL NOT attempt any error recovery and remains in Rx mode upon Transmission or a Protocol Error */ +#define nfcDepReEnableRx( rxB, rxBL, rxL ) rfalTransceiveBlockingTx( NULL, 0, (rxB), (rxBL), (rxL), ( RFAL_TXRX_FLAGS_DEFAULT | (uint32_t)RFAL_TXRX_FLAGS_NFCIP1_ON ), RFAL_FWT_NONE ) + +/* + ****************************************************************************** + * LOCAL DATA TYPES + ****************************************************************************** + */ + +/*! Struct that holds all DEP parameters/configs for the following communications */ +typedef struct{ + uint8_t did; /*!< Device ID (DID) to be used */ + + uint8_t* txBuf; /*!< Pointer to the Tx buffer to be sent */ + uint16_t txBufLen; /*!< Length of the data in the txBuf */ + uint8_t txBufPaylPos; /*!< Position inside txBuf where data starts */ + bool txChaining; /*!< Flag indicating chaining on transmission */ + + uint8_t* rxBuf; /*!< Pointer to the Rx buffer for incoming data */ + uint16_t rxBufLen; /*!< Length of the data in the rxBuf */ + uint8_t rxBufPaylPos; /*!< Position inside rxBuf where data is to be placed*/ + + uint32_t fwt; /*!< Frame Waiting Time (FWT) to be used */ + uint32_t dFwt; /*!< Delta Frame Waiting Time (dFWT) to be used */ + uint16_t fsc; /*!< Frame Size (FSC) to be used */ + +} rfalNfcDepDEPParams; + +/*! NFCIP module states */ +typedef enum +{ + NFCIP_ST_IDLE, + NFCIP_ST_INIT_IDLE, + NFCIP_ST_INIT_ATR, + NFCIP_ST_INIT_PSL, + NFCIP_ST_INIT_DEP_IDLE, + NFCIP_ST_INIT_DEP_TX, + NFCIP_ST_INIT_DEP_RX, + NFCIP_ST_INIT_DEP_ATN, + NFCIP_ST_INIT_DSL, + NFCIP_ST_INIT_RLS, + + NFCIP_ST_TARG_WAIT_ATR, + NFCIP_ST_TARG_WAIT_ACTV, + NFCIP_ST_TARG_DEP_IDLE, + NFCIP_ST_TARG_DEP_RX, + NFCIP_ST_TARG_DEP_RTOX, + NFCIP_ST_TARG_DEP_TX, + NFCIP_ST_TARG_DEP_SLEEP +} rfalNfcDepState; + +/*! NFCIP commands (Request, Response) */ +typedef enum{ + NFCIP_CMD_ATR_REQ = 0x00, + NFCIP_CMD_ATR_RES = 0x01, + NFCIP_CMD_WUP_REQ = 0x02, + NFCIP_CMD_WUP_RES = 0x03, + NFCIP_CMD_PSL_REQ = 0x04, + NFCIP_CMD_PSL_RES = 0x05, + NFCIP_CMD_DEP_REQ = 0x06, + NFCIP_CMD_DEP_RES = 0x07, + NFCIP_CMD_DSL_REQ = 0x08, + NFCIP_CMD_DSL_RES = 0x09, + NFCIP_CMD_RLS_REQ = 0x0A, + NFCIP_CMD_RLS_RES = 0x0B +} rfalNfcDepCmd; + + +/*! Struct that holds all NFCIP data */ +typedef struct{ + rfalNfcDepConfigs cfg; /*!< Holds the current configuration to be used */ + + rfalNfcDepState state; /*!< Current state of the NFCIP module */ + uint8_t pni; /*!< Packet Number Information (PNI) counter */ + + uint8_t lastCmd; /*!< Last command sent */ + uint8_t lastPFB; /*!< Last PFB sent */ + uint8_t lastPFBnATN; /*!< Last PFB sent (excluding ATN) */ + uint8_t lastRTOX; /*!< Last RTOX value sent */ + + uint8_t cntTxRetrys; /*!< Retransmissions counter */ + uint8_t cntTORetrys; /*!< Timeouts counter */ + uint8_t cntRTOXRetrys; /*!< RTOX counter */ + uint8_t cntNACKRetrys; /*!< NACK counter */ + uint8_t cntATNRetrys; /*!< Attention (ATN) counter */ + + uint16_t fsc; /*!< Current Frame Size (FSC) to be used */ + bool isTxChaining; /*!< Flag for chaining on Transmission */ + bool isRxChaining; /*!< Flag for chaining on Reception */ + uint8_t* txBuf; /*!< Pointer to the Tx buffer to be sent */ + uint8_t* rxBuf; /*!< Pointer to the Rx buffer for incoming data */ + uint16_t txBufLen; /*!< Length of the data in the txBuf */ + uint16_t rxBufLen; /*!< Length of rxBuf buffer */ + uint16_t* rxRcvdLen; /*!< Length of the data in the rxBuf */ + uint8_t txBufPaylPos; /*!< Position in txBuf where data starts */ + uint8_t rxBufPaylPos; /*!< Position in rxBuf where data is to be placed */ + bool *isChaining; /*!< Flag for chaining on Reception */ + + rfalNfcDepDevice *nfcDepDev; /*!< Pointer to NFC-DEP device info */ + + uint32_t RTOXTimer; /*!< Timer used for RTOX */ + rfalNfcDepDeactCallback isDeactivating; /*!< Deactivating flag check callback */ + + bool isReqPending; /*!< Flag pending REQ from Target activation */ + bool isTxPending; /*!< Flag pending DEP Block while waiting RTOX Ack */ + bool isWait4RTOX; /*!< Flag for waiting RTOX Ack */ +}rfalNfcDep; + + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + +static rfalNfcDep gNfcip; /*!< NFCIP module instance */ + + +/* + ****************************************************************************** + * LOCAL FUNCTION PROTOTYPES + ****************************************************************************** + */ + +static ReturnCode nfcipTxRx( rfalNfcDepCmd cmd, uint8_t* txBuf, uint32_t fwt, uint8_t* paylBuf, uint8_t paylBufLen, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rxActLen ); +static ReturnCode nfcipTx( rfalNfcDepCmd cmd, uint8_t* txBuf, uint8_t *paylBuf, uint16_t paylLen, uint8_t pfbData, uint32_t fwt ); +static ReturnCode nfcipDEPControlMsg( uint8_t pfb, uint8_t RTOX ); +static ReturnCode nfcipInitiatorHandleDEP( ReturnCode rxRes, uint16_t rxLen, uint16_t *outActRxLen, bool *outIsChaining ); +static ReturnCode nfcipTargetHandleRX( ReturnCode rxRes, uint16_t *outActRxLen, bool *outIsChaining ); +static ReturnCode nfcipTargetHandleActivation( rfalNfcDepDevice *nfcDepDev, uint8_t *outBRS ); + + +/*! + ****************************************************************************** + * \brief NFCIP Configure + * + * Configures the nfcip layer with the given configurations + * + * \param[in] cfg : nfcip configuration for following communication + ****************************************************************************** + */ +static void nfcipConfig( const rfalNfcDepConfigs * cfg ); + + +/*! + ****************************************************************************** + * \brief Set DEP parameters + * + * This method sets the parameters/configs for following Data Exchange + * Sets the nfcip module state according to the role it is configured + * + * + * \warning To be used only after proper Initiator/Target activation: + * nfcipTargetHandleActivation() or nfcipInitiatorActivate() has + * returned success + * + * This must be called before nfcipRun() in case of Target to pass + * rxBuffer + * + * Everytime some data needs to be transmitted call this to set it and + * call nfcipRun() until done or error + * + * \param[in] DEPParams : the parameters to be used during Data Exchange + ****************************************************************************** + */ +static void nfcipSetDEPParams( rfalNfcDepDEPParams *DEPParams ); + + +/*! + ****************************************************************************** + * \brief NFCIP run protocol + * + * This method handles all the nfcip protocol during Data Exchange (DEP + * requests and responses). + * + * A data exchange cycle is considered a DEP REQ and a DEP RES. + * + * In case of Tx chaining(MI) must signal it with nfcipSetDEPParams() + * In case of Rx chaining(MI) outIsChaining will be set to true and the + * current data returned + * + * \param[out] outActRxLen : data received length + * \param[out] outIsChaining : true if other peer is performing chaining(MI) + * + * \return ERR_NONE : Data exchange cycle completed successfully + * \return ERR_TIMEOUT : Timeout occurred + * \return ERR_PROTO : Protocol error occurred + * \return ERR_AGAIN : Other peer is doing chaining(MI), current block + * was received successfully call again until complete + * + ****************************************************************************** + */ +static ReturnCode nfcipRun( uint16_t *outActRxLen, bool *outIsChaining ); + + +/*! + ****************************************************************************** + * \brief Transmission method + * + * This method checks if the current communication is Active or Passive + * and performs the necessary procedures for each communication type + * + * Transmits the data hold in txBuf + * + * \param[in] txBuf : buffer to transmit + * \param[in] txBufLen : txBuffer capacity + * \param[in] fwt : fwt for current Tx + * + * \return ERR_NONE : No error + ****************************************************************************** + */ +static ReturnCode nfcipDataTx( uint8_t* txBuf, uint16_t txBufLen, uint32_t fwt ); + + +/*! + ****************************************************************************** + * \brief Reception method + * + * This method checks if the current communication is Active or Passive + * and calls the appropriate reception method + * + * Copies incoming data to rxBuf + * + * \param[in] blocking : reception is to be done blocking or non-blocking + * + * \return ERR_BUSY : Busy + * \return ERR_NONE : No error + ****************************************************************************** + */ +static ReturnCode nfcipDataRx( bool blocking ); + + +/* + ****************************************************************************** + * LOCAL FUNCTIONS + ****************************************************************************** + */ + +/*******************************************************************************/ + + +/*******************************************************************************/ +static bool nfcipDxIsSupported( uint8_t Dx, uint8_t BRx, uint8_t BSx ) +{ + uint8_t Bx; + + /* Take the min of the possible bit rates, we'll use one for both directions */ + Bx = MIN(BRx, BSx); + + /* Lower bit rates must be supported for P2P */ + if( (Dx <= (uint8_t)RFAL_NFCDEP_Dx_04_424) ) + { + return true; + } + + if( (Dx == (uint8_t)RFAL_NFCDEP_Dx_08_848) && (Bx >= (uint8_t)RFAL_NFCDEP_Bx_08_848) ) + { + return true; + } + + return false; +} + + +/*******************************************************************************/ +static ReturnCode nfcipTxRx( rfalNfcDepCmd cmd, uint8_t* txBuf, uint32_t fwt, uint8_t* paylBuf, uint8_t paylBufLen, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rxActLen ) +{ + ReturnCode ret; + + if( (cmd == NFCIP_CMD_DEP_REQ) || (cmd == NFCIP_CMD_DEP_RES) ) /* this method cannot be used for DEPs */ + { + return ERR_PARAM; + } + + /* Assign the global params for this TxRx */ + gNfcip.rxBuf = rxBuf; + gNfcip.rxBufLen = rxBufLen; + gNfcip.rxRcvdLen = rxActLen; + + + /*******************************************************************************/ + /* Transmission */ + /*******************************************************************************/ + if(txBuf != NULL) /* if nothing to Tx, just do Rx */ + { + EXIT_ON_ERR( ret, nfcipTx( cmd, txBuf, paylBuf, paylBufLen, 0, fwt ) ); + } + + /*******************************************************************************/ + /* Reception */ + /*******************************************************************************/ + ret = nfcipDataRx( true ); + if( ret != ERR_NONE ) + { + return ret; + } + + /*******************************************************************************/ + *rxActLen = *rxBuf; /* Use LEN byte instead due to with/without CRC modes */ + return ERR_NONE; /* Tx and Rx completed successfully */ +} + + +/*******************************************************************************/ +static ReturnCode nfcipDEPControlMsg( uint8_t pfb, uint8_t RTOX ) +{ + uint8_t ctrlMsg[20]; + rfalNfcDepCmd depCmd; + uint32_t fwt; + + + /*******************************************************************************/ + /* Calculate Cmd and fwt to be used */ + /*******************************************************************************/ + depCmd = ((gNfcip.cfg.role == RFAL_NFCDEP_ROLE_TARGET) ? NFCIP_CMD_DEP_RES : NFCIP_CMD_DEP_REQ); + fwt = ((gNfcip.cfg.role == RFAL_NFCDEP_ROLE_TARGET) ? NFCIP_NO_FWT : (nfcip_PFBisSTO( pfb ) ? ( (RTOX*gNfcip.cfg.fwt) + gNfcip.cfg.dFwt) : (gNfcip.cfg.fwt + gNfcip.cfg.dFwt) ) ); + + if( nfcip_PFBisSTO( pfb ) ) + { + ctrlMsg[RFAL_NFCDEP_DEPREQ_HEADER_LEN] = RTOX; + return nfcipTx( depCmd, ctrlMsg, &ctrlMsg[RFAL_NFCDEP_DEPREQ_HEADER_LEN], sizeof(uint8_t), pfb, fwt ); + } + else + { + return nfcipTx( depCmd, ctrlMsg, NULL, 0, pfb, fwt ); + } +} + +/*******************************************************************************/ +static void nfcipClearCounters( void ) +{ + gNfcip.cntATNRetrys = 0; + gNfcip.cntNACKRetrys = 0; + gNfcip.cntTORetrys = 0; + gNfcip.cntTxRetrys = 0; + gNfcip.cntRTOXRetrys = 0; +} + +/*******************************************************************************/ +static ReturnCode nfcipInitiatorHandleDEP( ReturnCode rxRes, uint16_t rxLen, uint16_t *outActRxLen, bool *outIsChaining ) +{ + ReturnCode ret; + uint8_t nfcDepLen; + uint8_t rxMsgIt; + uint8_t rxPFB; + uint8_t rxRTOX; + uint8_t optHdrLen; + + ret = ERR_INTERNAL; + rxMsgIt = 0; + optHdrLen = 0; + + *outActRxLen = 0; + *outIsChaining = false; + + + /*******************************************************************************/ + /* Handle reception errors */ + /*******************************************************************************/ + switch( rxRes ) + { + /*******************************************************************************/ + /* Timeout -> Digital 1.0 14.15.5.6 */ + case ERR_TIMEOUT: + + nfcipLogI( " NFCIP(I) TIMEOUT TORetrys:%d \r\n", gNfcip.cntTORetrys ); + + /* Digital 1.0 14.15.5.6 - If nTO >= Max raise protocol error */ + if( gNfcip.cntTORetrys++ >= NFCIP_MAX_TO_RETRYS ) + { + return ERR_PROTO; + } + + /*******************************************************************************/ + /* Upon Timeout error, if Deactivation is pending, no more error recovery + * will be done #54. + * This is used to address the issue some devices that havea big TO. + * Normally LLCP layer has timeout already, and NFCIP layer is still + * running error handling, retrying ATN/NACKs */ + /*******************************************************************************/ + if( nfcipIsDeactivationPending() ) + { + nfcipLogI( " skipping error recovery due deactivation pending \r\n"); + return ERR_TIMEOUT; + } + + /* Digital 1.0 14.15.5.6 1) If last PDU was NACK */ + if( nfcip_PFBisRNACK(gNfcip.lastPFB) ) + { + /* Digital 1.0 14.15.5.6 2) if NACKs failed raise protocol error */ + if( gNfcip.cntNACKRetrys++ >= NFCIP_MAX_NACK_RETRYS ) + { + return ERR_PROTO; + } + + /* Send NACK */ + nfcipLogI( " NFCIP(I) Sending NACK retry: %d \r\n", gNfcip.cntNACKRetrys ); + EXIT_ON_ERR( ret, nfcipDEPControlMsg( nfcip_PFBRPDU_NACK(gNfcip.pni), 0 ) ); + return ERR_BUSY; + } + + nfcipLogI( " NFCIP(I) Checking if to send ATN ATNRetrys: %d \r\n", gNfcip.cntATNRetrys ); + + /* Digital 1.0 14.15.5.6 3) Otherwise send ATN */ + if( gNfcip.cntATNRetrys++ >= NFCIP_MAX_NACK_RETRYS ) + { + return ERR_PROTO; + } + + /* Send ATN */ + nfcipLogI( " NFCIP(I) Sending ATN \r\n" ); + EXIT_ON_ERR( ret, nfcipDEPControlMsg( nfcip_PFBSPDU_ATN(), 0 ) ); + return ERR_BUSY; + + /*******************************************************************************/ + /* Data rcvd with error -> Digital 1.0 14.12.5.4 */ + case ERR_CRC: + case ERR_PAR: + case ERR_FRAMING: + case ERR_RF_COLLISION: + + nfcipLogI( " NFCIP(I) rx Error: %d \r\n", rxRes ); + + /* Digital 1.0 14.12.5.4 Tx Error with data, ignore */ + if( rxLen < NFCIP_MIN_TXERROR_LEN ) + { + nfcipLogI( " NFCIP(I) Transmission error w data \r\n" ); +#if 0 + if(gNfcip.cfg.commMode == RFAL_NFCDEP_COMM_PASSIVE) + { + nfcipLogI( " NFCIP(I) Transmission error w data -> reEnabling Rx \r\n" ); + nfcipReEnableRxTout( NFCIP_TRECOV ); + return ERR_BUSY; + } +#endif /* 0 */ + } + + /* Digital 1.1 16.12.5.4 if NACKs failed raise Transmission error */ + if( gNfcip.cntNACKRetrys++ >= NFCIP_MAX_NACK_RETRYS ) + { + return ERR_FRAMING; + } + + /* Send NACK */ + nfcipLogI( " NFCIP(I) Sending NACK \r\n" ); + EXIT_ON_ERR( ret, nfcipDEPControlMsg( nfcip_PFBRPDU_NACK(gNfcip.pni), 0 ) ); + return ERR_BUSY; + + case ERR_NONE: + break; + + case ERR_BUSY: + return ERR_BUSY; /* Debug purposes */ + + default: + nfcipLogW( " NFCIP(I) Error: %d \r\n", rxRes ); + return rxRes; + } + + /*******************************************************************************/ + /* Rx OK check if valid DEP PDU */ + /*******************************************************************************/ + + /* Due to different modes on ST25R391x (with/without CRC) use NFC-DEP LEN instead of bytes retrieved */ + nfcDepLen = gNfcip.rxBuf[rxMsgIt++]; + + nfcipLogD( " NFCIP(I) rx OK: %d bytes \r\n", nfcDepLen ); + + /* Digital 1.0 14.15.5.5 Protocol Error */ + if( gNfcip.rxBuf[rxMsgIt++] != NFCIP_RES ) + { + nfcipLogW( " NFCIP(I) error %02X instead of %02X \r\n", gNfcip.rxBuf[--rxMsgIt], NFCIP_RES ); + return ERR_PROTO; + } + + /* Digital 1.0 14.15.5.5 Protocol Error */ + if( gNfcip.rxBuf[rxMsgIt++] != (uint8_t)NFCIP_CMD_DEP_RES ) + { + nfcipLogW( " NFCIP(I) error %02X instead of %02X \r\n", gNfcip.rxBuf[--rxMsgIt], NFCIP_CMD_DEP_RES ); + return ERR_PROTO; + } + + rxPFB = gNfcip.rxBuf[rxMsgIt++]; + + /*******************************************************************************/ + /* Check for valid PFB type */ + if( !(nfcip_PFBisSPDU( rxPFB ) || nfcip_PFBisRPDU( rxPFB ) || nfcip_PFBisIPDU( rxPFB )) ) + { + return ERR_PROTO; + } + + /*******************************************************************************/ + /* Digital 1.0 14.8.2.1 check if DID is expected and match -> Protocol Error */ + if( gNfcip.cfg.did != RFAL_NFCDEP_DID_NO ) + { + if( (gNfcip.rxBuf[rxMsgIt++] != gNfcip.cfg.did) || !nfcip_PFBhasDID( rxPFB ) ) + { + return ERR_PROTO; + } + optHdrLen++; /* Inc header optional field cnt*/ + } + else if( nfcip_PFBhasDID( rxPFB ) ) /* DID not expected but rcv */ + { + return ERR_PROTO; + } + else + { + /* MISRA 15.7 - Empty else */ + } + + /*******************************************************************************/ + /* Digital 1.0 14.6.2.8 & 14.6.3.11 NAD must not be used */ + if( gNfcip.cfg.nad != RFAL_NFCDEP_NAD_NO ) + { + if( (gNfcip.rxBuf[rxMsgIt++] != gNfcip.cfg.nad) || !nfcip_PFBhasNAD( rxPFB ) ) + { + return ERR_PROTO; + } + optHdrLen++; /* Inc header optional field cnt*/ + } + else if( nfcip_PFBhasNAD( rxPFB ) ) /* NAD not expected but rcv */ + { + return ERR_PROTO; + } + else + { + /* MISRA 15.7 - Empty else */ + } + + /*******************************************************************************/ + /* Process R-PDU */ + /*******************************************************************************/ + if( nfcip_PFBisRPDU( rxPFB ) ) + { + /*******************************************************************************/ + /* R ACK */ + /*******************************************************************************/ + if( nfcip_PFBisRACK( rxPFB ) ) + { + nfcipLogI( " NFCIP(I) Rcvd ACK \r\n" ); + if( gNfcip.pni == nfcip_PBF_PNI( rxPFB ) ) + { + /* 14.12.3.3 R-ACK with correct PNI -> Increment */ + gNfcip.pni = nfcip_PNIInc( gNfcip.pni ); + + /* R-ACK while not performing chaining -> Protocol error*/ + if( !gNfcip.isTxChaining ) + { + return ERR_PROTO; + } + + nfcipClearCounters(); + gNfcip.state = NFCIP_ST_INIT_DEP_IDLE; + return ERR_NONE; /* This block has been transmitted */ + } + else /* Digital 1.0 14.12.4.5 ACK with wrong PNI Initiator may retransmit */ + { + if( gNfcip.cntTxRetrys++ >= NFCIP_MAX_TX_RETRYS ) + { + return ERR_PROTO; + } + + /* Extended the MAY in Digital 1.0 14.12.4.5 to only reTransmit if the ACK + * is for the previous DEP, otherwise raise Protocol immediately + * If the PNI difference is more than 1 it is worthless to reTransmit 3x + * and after raise the error */ + + if( nfcip_PNIDec( gNfcip.pni ) == nfcip_PBF_PNI( rxPFB ) ) + { + /* ReTransmit */ + nfcipLogI( " NFCIP(I) Rcvd ACK prev PNI -> reTx \r\n" ); + gNfcip.state = NFCIP_ST_INIT_DEP_TX; + return ERR_BUSY; + } + + nfcipLogI( " NFCIP(I) Rcvd ACK unexpected far PNI -> Error \r\n" ); + return ERR_PROTO; + } + } + else /* Digital 1.0 - 14.12.5.2 Target must never send NACK */ + { + return ERR_PROTO; + } + } + + /*******************************************************************************/ + /* Process S-PDU */ + /*******************************************************************************/ + if( nfcip_PFBisSPDU( rxPFB ) ) + { + nfcipLogI( " NFCIP(I) Rcvd S-PDU \r\n" ); + /*******************************************************************************/ + /* S ATN */ + /*******************************************************************************/ + if( nfcip_PFBisSATN( rxPFB ) ) /* If is a S-ATN */ + { + nfcipLogI( " NFCIP(I) Rcvd ATN \r\n" ); + if( nfcip_PFBisSATN( gNfcip.lastPFB ) ) /* Check if is expected */ + { + gNfcip.cntATNRetrys = 0; /* Clear ATN counter */ + + /* Although spec is not clear NFC Forum Digital test is expecting to + * retransmit upon receiving ATN_RES */ + if( nfcip_PFBisSTO( gNfcip.lastPFBnATN ) ) + { + nfcipLogI( " NFCIP(I) Rcvd ATN -> reTx RTOX_RES \r\n" ); + EXIT_ON_ERR( ret, nfcipDEPControlMsg( nfcip_PFBSPDU_TO(), gNfcip.lastRTOX ) ); + } + else + { + /* ReTransmit ? */ + if( gNfcip.cntTxRetrys++ >= NFCIP_MAX_TX_RETRYS ) + { + return ERR_PROTO; + } + + nfcipLogI( " NFCIP(I) Rcvd ATN -> reTx PNI: %d \r\n", gNfcip.pni ); + gNfcip.state = NFCIP_ST_INIT_DEP_TX; + } + + return ERR_BUSY; + } + else /* Digital 1.0 14.12.4.4 & 14.12.4.8 */ + { + return ERR_PROTO; + } + } + /*******************************************************************************/ + /* S TO */ + /*******************************************************************************/ + else if( nfcip_PFBisSTO( rxPFB ) ) /* If is a S-TO (RTOX) */ + { + nfcipLogI( " NFCIP(I) Rcvd TO \r\n" ); + + rxRTOX = gNfcip.rxBuf[rxMsgIt++]; + + /* Digital 1.1 16.12.4.3 - Initiator MAY stop accepting subsequent RTOX Req * + * - RTOX request to an ATN -> Protocol error */ + if( (gNfcip.cntRTOXRetrys++ > NFCIP_MAX_RTOX_RETRYS) || nfcip_PFBisSATN( gNfcip.lastPFB ) ) + { + return ERR_PROTO; + } + + /* Digital 1.1 16.8.4.1 RTOX must be between [1,59] */ + if( (rxRTOX < NFCIP_INIT_MIN_RTOX) || (rxRTOX > NFCIP_INIT_MAX_RTOX) ) + { + return ERR_PROTO; + } + + EXIT_ON_ERR( ret, nfcipDEPControlMsg( nfcip_PFBSPDU_TO(), rxRTOX ) ); + gNfcip.lastRTOX = rxRTOX; + + return ERR_BUSY; + } + else + { + /* Unexpected S-PDU */ + return ERR_PROTO; /* PRQA S 2880 # MISRA 2.1 - Guard code to prevent unexpected behavior */ + } + } + + /*******************************************************************************/ + /* Process I-PDU */ + /*******************************************************************************/ + if( nfcip_PFBisIPDU( rxPFB ) ) + { + if( gNfcip.pni != nfcip_PBF_PNI( rxPFB ) ) + { + nfcipLogI( " NFCIP(I) Rcvd IPDU wrong PNI curPNI: %d rxPNI: %d \r\n", gNfcip.pni , nfcip_PBF_PNI( rxPFB ) ); + return ERR_PROTO; + } + + nfcipLogD( " NFCIP(I) Rcvd IPDU OK PNI: %d \r\n", gNfcip.pni ); + + /* 14.12.3.3 I-PDU with correct PNI -> Increment */ + gNfcip.pni = nfcip_PNIInc( gNfcip.pni ); + + + /* Successful data Exchange */ + nfcipClearCounters(); + *outActRxLen = ((uint16_t)nfcDepLen - RFAL_NFCDEP_DEP_HEADER - (uint16_t)optHdrLen); + + if( (&gNfcip.rxBuf[gNfcip.rxBufPaylPos] != &gNfcip.rxBuf[RFAL_NFCDEP_DEP_HEADER + optHdrLen]) && (*outActRxLen > 0U) ) + { + ST_MEMMOVE( &gNfcip.rxBuf[gNfcip.rxBufPaylPos], &gNfcip.rxBuf[RFAL_NFCDEP_DEP_HEADER + optHdrLen], *outActRxLen ); + } + + /*******************************************************************************/ + /* Check if target is indicating chaining MI */ + /*******************************************************************************/ + if( nfcip_PFBisIMI( rxPFB ) ) + { + gNfcip.isRxChaining = true; + *outIsChaining = true; + + nfcipLogD( " NFCIP(I) Rcvd IPDU OK w MI -> ACK \r\n" ); + EXIT_ON_ERR( ret, nfcipDEPControlMsg( nfcip_PFBRPDU_ACK( gNfcip.pni ), gNfcip.rxBuf[rxMsgIt++] ) ); + + return ERR_AGAIN; /* Send Again signalling to run again, but some chaining data has arrived*/ + } + else + { + gNfcip.isRxChaining = false; + gNfcip.state = NFCIP_ST_INIT_DEP_IDLE; + + ret = ERR_NONE; /* Data exchange done */ + } + } + return ret; +} + + +/*******************************************************************************/ +static ReturnCode nfcipTargetHandleRX( ReturnCode rxRes, uint16_t *outActRxLen, bool *outIsChaining ) +{ + ReturnCode ret; + uint8_t nfcDepLen; + uint8_t rxMsgIt; + uint8_t rxPFB; + uint8_t optHdrLen; + uint8_t resBuf[RFAL_NFCDEP_HEADER_PAD + NFCIP_TARGET_RES_MAX]; + + + ret = ERR_INTERNAL; + rxMsgIt = 0; + optHdrLen = 0; + + *outActRxLen = 0; + *outIsChaining = false; + + + /*******************************************************************************/ + /* Handle reception errors */ + /*******************************************************************************/ + switch( rxRes ) + { + /*******************************************************************************/ + case ERR_NONE: + break; + + case ERR_LINK_LOSS: + nfcipLogW( " NFCIP(T) Error: %d \r\n", rxRes ); + return rxRes; + + case ERR_BUSY: + return ERR_BUSY; /* Debug purposes */ + + case ERR_TIMEOUT: + case ERR_CRC: + case ERR_PAR: + case ERR_FRAMING: + case ERR_PROTO: + default: + /* Digital 1.1 16.12.5.2 The Target MUST NOT attempt any error recovery. * + * The Target MUST always stay in receive mode when a * + * Transmission Error or a Protocol Error occurs. * + * * + * Do not push Transmission/Protocol Errors to upper layer in Listen Mode #766 */ + + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + return ERR_BUSY; + } + + /*******************************************************************************/ + /* Rx OK check if valid DEP PDU */ + /*******************************************************************************/ + + /* Due to different modes on ST25R391x (with/without CRC) use NFC-DEP LEN instead of bytes retrieved */ + nfcDepLen = gNfcip.rxBuf[rxMsgIt++]; + + nfcipLogD( " NFCIP(T) rx OK: %d bytes \r\n", nfcDepLen ); + + if( gNfcip.rxBuf[rxMsgIt++] != NFCIP_REQ ) + { + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + return ERR_BUSY; /* ERR_PROTO - Ignore bad request */ + } + + + /*******************************************************************************/ + /* Check whether target rcvd a normal DEP or deactivation request */ + /*******************************************************************************/ + switch( gNfcip.rxBuf[rxMsgIt++] ) + { + /*******************************************************************************/ + case (uint8_t)NFCIP_CMD_DEP_REQ: + break; /* Continue to normal DEP processing */ + + /*******************************************************************************/ + case (uint8_t)NFCIP_CMD_DSL_REQ: + + nfcipLogI( " NFCIP(T) rx DSL \r\n" ); + + /* Digital 1.0 14.9.1.2 If DID is used and incorrect ignore it */ + /* [Digital 1.0, 16.9.1.2]: If DID == 0, Target SHALL ignore DSL_REQ with DID */ + if ( (((gNfcip.rxBuf[rxMsgIt++] != gNfcip.cfg.did) || (nfcDepLen != RFAL_NFCDEP_DSL_RLS_LEN_DID)) && (gNfcip.cfg.did != RFAL_NFCDEP_DID_NO) ) + || ((gNfcip.cfg.did == RFAL_NFCDEP_DID_NO) && (nfcDepLen != RFAL_NFCDEP_DSL_RLS_LEN_NO_DID)) + ) + { + nfcipLogI( " NFCIP(T) DSL wrong DID, ignoring \r\n" ); + return ERR_BUSY; + } + + nfcipTx( NFCIP_CMD_DSL_RES, resBuf, NULL, 0, 0, NFCIP_NO_FWT ); + + gNfcip.state = NFCIP_ST_TARG_DEP_SLEEP; + return ERR_SLEEP_REQ; + + /*******************************************************************************/ + case (uint8_t)NFCIP_CMD_RLS_REQ: + + nfcipLogI( " NFCIP(T) rx RLS \r\n" ); + + /* Digital 1.0 14.10.1.2 If DID is used and incorrect ignore it */ + /* [Digital 1.0, 16.10.2.2]: If DID == 0, Target SHALL ignore DSL_REQ with DID */ + if ( (((gNfcip.rxBuf[rxMsgIt++] != gNfcip.cfg.did) || (nfcDepLen != RFAL_NFCDEP_DSL_RLS_LEN_DID)) && (gNfcip.cfg.did != RFAL_NFCDEP_DID_NO) ) + || ((gNfcip.cfg.did == RFAL_NFCDEP_DID_NO) && (nfcDepLen > RFAL_NFCDEP_DSL_RLS_LEN_NO_DID)) + ) + { + nfcipLogI( " NFCIP(T) RLS wrong DID, ignoring \r\n" ); + return ERR_BUSY; + } + + nfcipTx( NFCIP_CMD_RLS_RES, resBuf, NULL, 0, 0, NFCIP_NO_FWT ); + + gNfcip.state = NFCIP_ST_TARG_DEP_IDLE; + return ERR_RELEASE_REQ; + + /*******************************************************************************/ + /*case NFCIP_CMD_PSL_REQ: PSL must be handled in Activation only */ + /*case NFCIP_CMD_WUP_REQ: WUP not in NFC Forum Digital 1.0 */ + default: + + /* Don't go to NFCIP_ST_TARG_DEP_IDLE state as it needs to ignore this * + * invalid frame, and keep waiting for more frames */ + + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + return ERR_BUSY; /* ERR_PROTO - Ignore bad frame */ + } + + /*******************************************************************************/ + + rxPFB = gNfcip.rxBuf[rxMsgIt++]; /* Store rcvd PFB */ + + /*******************************************************************************/ + /* Check for valid PFB type */ + if( !(nfcip_PFBisSPDU( rxPFB ) || nfcip_PFBisRPDU( rxPFB ) || nfcip_PFBisIPDU( rxPFB )) ) + { + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + return ERR_BUSY; /* ERR_PROTO - Ignore invalid PFB */ + } + + /*******************************************************************************/ + if( gNfcip.cfg.did != RFAL_NFCDEP_DID_NO ) + { + if( !nfcip_PFBhasDID( rxPFB ) ) + { + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + return ERR_BUSY; /* ERR_PROTO - Ignore bad/missing DID */ + } + if( gNfcip.rxBuf[rxMsgIt++] != gNfcip.cfg.did ) /* MISRA 13.5 */ + { + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + return ERR_BUSY; /* ERR_PROTO - Ignore bad/missing DID */ + } + optHdrLen++; /* Inc header optional field cnt*/ + } + else if( nfcip_PFBhasDID( rxPFB ) ) /* DID not expected but rcv */ + { + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + return ERR_BUSY; /* ERR_PROTO - Ignore unexpected DID */ + } + else + { + /* MISRA 15.7 - Empty else */ + } + + + /*******************************************************************************/ + if( gNfcip.cfg.nad != RFAL_NFCDEP_NAD_NO ) + { + if( (gNfcip.rxBuf[rxMsgIt++] != gNfcip.cfg.did) || !nfcip_PFBhasDID( rxPFB ) ) + { + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + return ERR_BUSY; /* ERR_PROTO - Ignore bad/missing DID */ + } + optHdrLen++; /* Inc header optional field cnt*/ + } + else if( nfcip_PFBhasNAD( rxPFB ) ) /* NAD not expected but rcv */ + { + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + return ERR_BUSY; /* ERR_PROTO - Ignore unexpected NAD */ + } + else + { + /* MISRA 15.7 - Empty else */ + } + + + /*******************************************************************************/ + /* Process R-PDU */ + /*******************************************************************************/ + if( nfcip_PFBisRPDU( rxPFB ) ) + { + nfcipLogD( " NFCIP(T) Rcvd R-PDU \r\n" ); + /*******************************************************************************/ + /* R ACK */ + /*******************************************************************************/ + if( nfcip_PFBisRACK( rxPFB ) ) + { + nfcipLogI( " NFCIP(T) Rcvd ACK \r\n" ); + if( gNfcip.pni == nfcip_PBF_PNI( rxPFB ) ) + { + /* R-ACK while not performing chaining -> Protocol error */ + if( !gNfcip.isTxChaining ) + { + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + return ERR_BUSY; /* ERR_PROTO - Ignore unexpected ACK */ + } + + /* This block has been transmitted and acknowledged, perform RTOX until next data is provided */ + + /* Digital 1.1 16.12.4.7 - If ACK rcvd continue with chaining or an RTOX */ + nfcipTimerStart( gNfcip.RTOXTimer, nfcipRTOXAdjust( nfcipConv1FcToMs( rfalNfcDepWT2RWT( gNfcip.cfg.to ) )) ); + gNfcip.state = NFCIP_ST_TARG_DEP_RTOX; + + return ERR_NONE; /* This block has been transmitted */ + } + + /* Digital 1.0 14.12.3.4 - If last send was ATN and rx PNI is minus 1 */ + else if( nfcip_PFBisSATN( gNfcip.lastPFB ) && (nfcip_PNIDec(gNfcip.pni) == nfcip_PBF_PNI( rxPFB )) ) + { + nfcipLogI( " NFCIP(T) wrong PNI, last was ATN reTx \r\n" ); + /* Spec says to leave current PNI as is, but will be Inc after Tx, remaining the same */ + gNfcip.pni = nfcip_PNIDec( gNfcip.pni ); + + gNfcip.state = NFCIP_ST_TARG_DEP_TX; + return ERR_BUSY; + } + else + { + /* MISRA 15.7 - Empty else */ + } + } + /*******************************************************************************/ + /* R NACK */ + /*******************************************************************************/ + /* ISO 18092 12.6.1.3.3 When rcv NACK if PNI = prev PNI sent -> reTx */ + else if( nfcip_PFBisRNACK( rxPFB ) && (nfcip_PNIDec(gNfcip.pni) == nfcip_PBF_PNI( rxPFB ) ) ) + { + nfcipLogI( " NFCIP(T) Rcvd NACK \r\n" ); + + gNfcip.pni = nfcip_PNIDec( gNfcip.pni ); /* Dec so that has the prev PNI */ + + gNfcip.state = NFCIP_ST_TARG_DEP_TX; + return ERR_BUSY; + } + else + { + nfcipLogI( " NFCIP(T) Unexpected R-PDU \r\n" ); + + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + return ERR_BUSY; /* ERR_PROTO - Ignore unexpected R-PDU */ + } + } + + /*******************************************************************************/ + /* Process S-PDU */ + /*******************************************************************************/ + if( nfcip_PFBisSPDU( rxPFB ) ) + { + nfcipLogD( " NFCIP(T) Rcvd S-PDU \r\n" ); + + /*******************************************************************************/ + /* S ATN */ + /*******************************************************************************/ + /* ISO 18092 12.6.3 Attention */ + if( nfcip_PFBisSATN( rxPFB ) ) /* If is a S-ATN */ + { + nfcipLogI( " NFCIP(T) Rcvd ATN curPNI: %d \r\n", gNfcip.pni ); + EXIT_ON_ERR( ret, nfcipDEPControlMsg( nfcip_PFBSPDU_ATN(), 0 ) ); + return ERR_BUSY; + } + + /*******************************************************************************/ + /* S TO */ + /*******************************************************************************/ + else if( nfcip_PFBisSTO( rxPFB ) ) /* If is a S-TO (RTOX) */ + { + if( nfcip_PFBisSTO( gNfcip.lastPFBnATN ) ) + { + nfcipLogI( " NFCIP(T) Rcvd TO \r\n" ); + + /* Digital 1.1 16.8.4.6 RTOX value in RES different that in REQ -> Protocol Error */ + if( gNfcip.lastRTOX != gNfcip.rxBuf[rxMsgIt++] ) + { + nfcipLogI( " NFCIP(T) Mismatched RTOX value \r\n" ); + + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + return ERR_BUSY; /* ERR_PROTO - Ignore unexpected RTOX value */ + } + + /* Clear waiting for RTOX Ack Flag */ + gNfcip.isWait4RTOX = false; + + /* Check if a Tx is already pending */ + if( gNfcip.isTxPending ) + { + nfcipLogW( " NFCIP(T) Tx pending, go immediately to TX \r\n" ); + + gNfcip.state = NFCIP_ST_TARG_DEP_TX; + return ERR_BUSY; + } + + /* Start RTOX timer and change to check state */ + nfcipTimerStart( gNfcip.RTOXTimer, nfcipRTOXAdjust( nfcipConv1FcToMs( gNfcip.lastRTOX * rfalNfcDepWT2RWT(gNfcip.cfg.to ) ) ) ); + gNfcip.state = NFCIP_ST_TARG_DEP_RTOX; + + return ERR_BUSY; + } + } + else + { + /* Unexpected S-PDU */ + nfcipLogI( " NFCIP(T) Unexpected S-PDU \r\n" ); /* PRQA S 2880 # MISRA 2.1 - Guard code to prevent unexpected behavior */ + + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + return ERR_BUSY; /* ERR_PROTO - Ignore unexpected S-PDU */ + } + } + + /*******************************************************************************/ + /* Process I-PDU */ + /*******************************************************************************/ + if( nfcip_PFBisIPDU( rxPFB ) ) + { + if( gNfcip.pni != nfcip_PBF_PNI( rxPFB ) ) + { + nfcipLogI( " NFCIP(T) Rcvd IPDU wrong PNI curPNI: %d rxPNI: %d \r\n", gNfcip.pni, nfcip_PBF_PNI( rxPFB ) ); + + /* Digital 1.1 16.12.3.4 - If last send was ATN and rx PNI is minus 1 */ + if( nfcip_PFBisSATN(gNfcip.lastPFB ) && (nfcip_PNIDec(gNfcip.pni) == nfcip_PBF_PNI( rxPFB )) ) + { + /* Spec says to leave current PNI as is, but will be Inc after Data Tx, remaining the same */ + gNfcip.pni = nfcip_PNIDec(gNfcip.pni); + + if( nfcip_PFBisIMI( rxPFB ) ) + { + nfcipLogI( " NFCIP(T) PNI = prevPNI && ATN before && chaining -> send ACK \r\n" ); + EXIT_ON_ERR( ret, nfcipDEPControlMsg( nfcip_PFBRPDU_ACK( gNfcip.pni ), gNfcip.rxBuf[rxMsgIt++] ) ); + + /* Digital 1.1 16.12.3.4 (...) leave the current PNI unchanged afterwards */ + gNfcip.pni = nfcip_PNIInc( gNfcip.pni ); + } + else + { + nfcipLogI( " NFCIP(T) PNI = prevPNI && ATN before -> reTx last I-PDU \r\n" ); + gNfcip.state = NFCIP_ST_TARG_DEP_TX; + } + + return ERR_BUSY; + } + + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + return ERR_BUSY; /* ERR_PROTO - Ignore bad PNI value */ + } + + nfcipLogD( " NFCIP(T) Rcvd IPDU OK PNI: %d \r\n", gNfcip.pni ); + + /*******************************************************************************/ + /* Successful data exchange */ + /*******************************************************************************/ + *outActRxLen = ((uint16_t)nfcDepLen - RFAL_NFCDEP_DEP_HEADER - (uint16_t)optHdrLen); + + nfcipClearCounters(); + + if( (&gNfcip.rxBuf[gNfcip.rxBufPaylPos] != &gNfcip.rxBuf[RFAL_NFCDEP_DEP_HEADER + optHdrLen]) && (*outActRxLen > 0U) ) + { + ST_MEMMOVE( &gNfcip.rxBuf[gNfcip.rxBufPaylPos], &gNfcip.rxBuf[RFAL_NFCDEP_DEP_HEADER + optHdrLen], *outActRxLen ); + } + + + /*******************************************************************************/ + /* Check if Initiator is indicating chaining MI */ + /*******************************************************************************/ + if( nfcip_PFBisIMI( rxPFB ) ) + { + gNfcip.isRxChaining = true; + *outIsChaining = true; + + nfcipLogD( " NFCIP(T) Rcvd IPDU OK w MI -> ACK \r\n" ); + EXIT_ON_ERR( ret, nfcipDEPControlMsg( nfcip_PFBRPDU_ACK( gNfcip.pni ), gNfcip.rxBuf[rxMsgIt++] ) ); + + gNfcip.pni = nfcip_PNIInc( gNfcip.pni ); + + return ERR_AGAIN; /* Send Again signalling to run again, but some chaining data has arrived*/ + } + else + { + if(gNfcip.isRxChaining) + { + nfcipLogI( " NFCIP(T) Rcvd last IPDU chaining finished \r\n" ); + } + + /*******************************************************************************/ + /* Reception done, send to DH and start RTOX timer */ + /*******************************************************************************/ + nfcipTimerStart( gNfcip.RTOXTimer, nfcipRTOXAdjust( nfcipConv1FcToMs( rfalNfcDepWT2RWT( gNfcip.cfg.to ) )) ); + gNfcip.state = NFCIP_ST_TARG_DEP_RTOX; + + gNfcip.isRxChaining = false; + ret = ERR_NONE; /* Data exchange done */ + } + } + return ret; +} + + +/*******************************************************************************/ +static ReturnCode nfcipTx( rfalNfcDepCmd cmd, uint8_t* txBuf, uint8_t *paylBuf, uint16_t paylLen, uint8_t pfbData, uint32_t fwt ) +{ + uint16_t txBufIt; + uint8_t *txBlock; + uint8_t *payloadBuf; + uint8_t pfb; + + + if( txBuf == NULL ) + { + return ERR_PARAM; + } + + + payloadBuf = paylBuf; /* MISRA 17.8: Use intermediate variable */ + + if( (paylLen == 0U) || (payloadBuf == NULL) ) + { + payloadBuf = (uint8_t*) &txBuf[RFAL_NFCDEP_DEPREQ_HEADER_LEN]; /* If not a DEP (no Data) ensure enough space for header */ + } + + + txBufIt = 0; + pfb = pfbData; /* MISRA 17.8: Use intermediate variable */ + + txBlock = payloadBuf; /* Point to beginning of the Data, and go backwards */ + + + gNfcip.lastCmd = (uint8_t)cmd; /* Store last cmd sent */ + gNfcip.lastPFB = NFCIP_PFB_INVALID; /* Reset last pfb sent */ + + /*******************************************************************************/ + /* Compute outgoing NFCIP message */ + /*******************************************************************************/ + switch( cmd ) + { + /*******************************************************************************/ + case NFCIP_CMD_ATR_RES: + case NFCIP_CMD_ATR_REQ: + + rfalNfcDepSetNFCID( payloadBuf, gNfcip.cfg.nfcid, gNfcip.cfg.nfcidLen ); /* NFCID */ + txBufIt += RFAL_NFCDEP_NFCID3_LEN; + + payloadBuf[txBufIt++] = gNfcip.cfg.did; /* DID */ + payloadBuf[txBufIt++] = gNfcip.cfg.bs; /* BS */ + payloadBuf[txBufIt++] = gNfcip.cfg.br; /* BR */ + + if( cmd == NFCIP_CMD_ATR_RES ) + { + payloadBuf[txBufIt++] = gNfcip.cfg.to; /* ATR_RES[ TO ] */ + } + + if( gNfcip.cfg.gbLen > 0U) + { + payloadBuf[txBufIt++] = nfcip_PPwGB( gNfcip.cfg.lr ); /* PP signalling GB */ + ST_MEMCPY( &payloadBuf[txBufIt], gNfcip.cfg.gb, gNfcip.cfg.gbLen ); /* set General Bytes */ + txBufIt += gNfcip.cfg.gbLen; + } + else + { + payloadBuf[txBufIt++] = rfalNfcDepLR2PP( gNfcip.cfg.lr ); /* PP without GB */ + } + + if( (txBufIt + RFAL_NFCDEP_CMDTYPE_LEN + RFAL_NFCDEP_CMD_LEN) > RFAL_NFCDEP_ATRREQ_MAX_LEN ) /* Check max ATR length (ATR_REQ = ATR_RES)*/ + { + return ERR_PARAM; + } + break; + + /*******************************************************************************/ + case NFCIP_CMD_WUP_REQ: /* ISO 18092 - 12.5.2.1 */ + + rfalNfcDepSetNFCID( (payloadBuf), gNfcip.cfg.nfcid, gNfcip.cfg.nfcidLen ); /* NFCID */ + txBufIt += RFAL_NFCDEP_NFCID3_LEN; + + *(--txBlock) = gNfcip.cfg.did; /* DID */ + break; + + /*******************************************************************************/ + case NFCIP_CMD_WUP_RES: /* ISO 18092 - 12.5.2.2 */ + case NFCIP_CMD_PSL_REQ: + case NFCIP_CMD_PSL_RES: + + *(--txBlock) = gNfcip.cfg.did; /* DID */ + break; + + /*******************************************************************************/ + case NFCIP_CMD_RLS_REQ: + case NFCIP_CMD_RLS_RES: + case NFCIP_CMD_DSL_REQ: + case NFCIP_CMD_DSL_RES: + + /* Digital 1.0 - 14.8.1.1 & 14.9.1.1 & 14.10.1.1 Only add DID if not 0 */ + if( gNfcip.cfg.did != RFAL_NFCDEP_DID_NO ) + { + *(--txBlock) = gNfcip.cfg.did; /* DID */ + } + break; + + /*******************************************************************************/ + case NFCIP_CMD_DEP_REQ: + case NFCIP_CMD_DEP_RES: + + /* Compute optional PFB bits */ + if (gNfcip.cfg.did != RFAL_NFCDEP_DID_NO) { pfb |= NFCIP_PFB_DID_BIT; } + if (gNfcip.cfg.nad != RFAL_NFCDEP_NAD_NO) { pfb |= NFCIP_PFB_NAD_BIT; } + if ((gNfcip.isTxChaining) && (nfcip_PFBisIPDU(pfb)) ) { pfb |= NFCIP_PFB_MI_BIT; } + + /* Store PFB for future handling */ + gNfcip.lastPFB = pfb; /* store PFB sent */ + + if( !nfcip_PFBisSATN(pfb) ) + { + gNfcip.lastPFBnATN = pfb; /* store last PFB different then ATN */ + } + + + /* Add NAD if it is to be supported */ + if( gNfcip.cfg.nad != RFAL_NFCDEP_NAD_NO ) + { + *(--txBlock) = gNfcip.cfg.nad; /* NAD */ + } + + /* Digital 1.0 - 14.8.1.1 & 14.8.1.1 Only add DID if not 0 */ + if( gNfcip.cfg.did != RFAL_NFCDEP_DID_NO ) + { + *(--txBlock) = gNfcip.cfg.did; /* DID */ + } + + *(--txBlock) = pfb; /* PFB */ + + + /* NCI 1.0 - Check if Empty frames are allowed */ + if( (paylLen == 0U) && nfcipIsEmptyDEPDisabled(gNfcip.cfg.oper) && nfcip_PFBisIPDU(pfb) ) + { + return ERR_PARAM; + } + break; + + /*******************************************************************************/ + default: + return ERR_PARAM; + } + + /*******************************************************************************/ + /* Prepend Header */ + /*******************************************************************************/ + *(--txBlock) = (uint8_t)cmd; /* CMD */ + *(--txBlock) = (uint8_t)( nfcipCmdIsReq(cmd) ? NFCIP_REQ : NFCIP_RES ); /* CMDType */ + + + txBufIt += paylLen + (uint16_t)((uint32_t)payloadBuf - (uint32_t)txBlock); /* Calculate overall buffer size */ + + + if( txBufIt > gNfcip.fsc ) /* Check if msg length violates the maximum payload size FSC */ + { + return ERR_NOTSUPP; + } + + /*******************************************************************************/ + return nfcipDataTx( txBlock, txBufIt, fwt ); +} + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + +/*******************************************************************************/ +static void nfcipConfig( const rfalNfcDepConfigs * cfg ) +{ + if (cfg == NULL) + { + return; + } + + ST_MEMCPY(&gNfcip.cfg, cfg, sizeof(rfalNfcDepConfigs)); /* Copy given config to local */ + + gNfcip.cfg.to = MIN( RFAL_NFCDEP_WT_TRG_MAX, gNfcip.cfg.to); /* Ensure proper WT value */ + gNfcip.cfg.did = nfcip_DIDMax( gNfcip.cfg.did ); /* Ensure proper DID value */ + gNfcip.fsc = rfalNfcDepLR2FS( gNfcip.cfg.lr ); /* Calculate FSC based on given LR */ + + gNfcip.state = ( ( gNfcip.cfg.role == RFAL_NFCDEP_ROLE_TARGET) ? NFCIP_ST_TARG_WAIT_ATR : NFCIP_ST_INIT_IDLE ); +} + + +/*******************************************************************************/ +static ReturnCode nfcipRun( uint16_t *outActRxLen, bool *outIsChaining ) +{ + ReturnCode ret; + + ret = ERR_SYNTAX; + + nfcipLogD( " NFCIP Run() state: %d \r\n", gNfcip.state ); + + switch( gNfcip.state ) + { + /*******************************************************************************/ + case NFCIP_ST_IDLE: + case NFCIP_ST_INIT_DEP_IDLE: + case NFCIP_ST_TARG_DEP_IDLE: + case NFCIP_ST_TARG_DEP_SLEEP: + return ERR_NONE; + + /*******************************************************************************/ + case NFCIP_ST_INIT_DEP_TX: + + nfcipLogD( " NFCIP(I) Tx PNI: %d txLen: %d \r\n", gNfcip.pni, gNfcip.txBufLen ); + ret = nfcipTx( NFCIP_CMD_DEP_REQ, gNfcip.txBuf, &gNfcip.txBuf[gNfcip.txBufPaylPos], gNfcip.txBufLen, nfcip_PFBIPDU( gNfcip.pni ), (gNfcip.cfg.fwt + gNfcip.cfg.dFwt) ); + + switch( ret ) + { + case ERR_PARAM: + default: + gNfcip.state = NFCIP_ST_INIT_DEP_IDLE; + return ret; + + case ERR_NONE: + gNfcip.state = NFCIP_ST_INIT_DEP_RX; + break; + } + /* fall through */ + + /*******************************************************************************/ + case NFCIP_ST_INIT_DEP_RX: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + + ret = nfcipDataRx( false ); + + if( ret != ERR_BUSY ) + { + ret = nfcipInitiatorHandleDEP( ret, *gNfcip.rxRcvdLen, outActRxLen, outIsChaining ); + } + + break; + + /*******************************************************************************/ + case NFCIP_ST_TARG_DEP_RTOX: + + if( !nfcipTimerisExpired( gNfcip.RTOXTimer ) ) /* Do nothing until RTOX timer has expired */ + { + return ERR_BUSY; + } + + /* If we cannot send a RTOX raise a Timeout error so that we do not + * hold the field On forever in AP2P */ + if( nfcipIsRTOXReqDisabled(gNfcip.cfg.oper) ) + { + /* We should reEnable Rx, and measure time between our field Off to + * either report link loss or recover #287 */ + nfcipLogI( " NFCIP(T) RTOX not sent due to config, NOT reenabling Rx \r\n" ); + return ERR_TIMEOUT; + } + + if( gNfcip.cntRTOXRetrys++ > NFCIP_MAX_RTOX_RETRYS ) /* Check maximum consecutive RTOX requests */ + { + return ERR_PROTO; + } + + nfcipLogI( " NFCIP(T) RTOX sent \r\n" ); + + gNfcip.lastRTOX = nfcip_RTOXTargMax(gNfcip.cfg.to); /* Calculate requested RTOX value, and send it */ + EXIT_ON_ERR( ret, nfcipDEPControlMsg( nfcip_PFBSPDU_TO(), gNfcip.lastRTOX ) ); + + /* Set waiting for RTOX Ack Flag */ + gNfcip.isWait4RTOX = true; + + gNfcip.state = NFCIP_ST_TARG_DEP_RX; /* Go back to Rx to process RTOX ack */ + return ERR_BUSY; + + /*******************************************************************************/ + case NFCIP_ST_TARG_DEP_TX: + + nfcipLogD( " NFCIP(T) Tx PNI: %d txLen: %d \r\n", gNfcip.pni, gNfcip.txBufLen ); + ret = nfcipTx( NFCIP_CMD_DEP_RES, gNfcip.txBuf, &gNfcip.txBuf[gNfcip.txBufPaylPos], gNfcip.txBufLen, nfcip_PFBIPDU( gNfcip.pni ), NFCIP_NO_FWT ); + + /* Clear flags */ + gNfcip.isTxPending = false; + gNfcip.isWait4RTOX = false; + + /* Digital 1.0 14.12.3.4 Increment the current PNI after Tx */ + gNfcip.pni = nfcip_PNIInc( gNfcip.pni ); + + switch( ret ) + { + case ERR_PARAM: + default: + gNfcip.state = NFCIP_ST_TARG_DEP_IDLE; /* Upon Tx error, goto IDLE state */ + return ret; + + case ERR_NONE: + gNfcip.state = NFCIP_ST_TARG_DEP_RX; /* All OK, goto Rx state */ + break; + } + /* fall through */ + + /*******************************************************************************/ + case NFCIP_ST_TARG_DEP_RX: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + + if( gNfcip.isReqPending ) /* if already has Data should be from a DEP from nfcipTargetHandleActivation() */ + { + nfcipLogD( " NFCIP(T) Skipping Rx Using DEP from Activation \r\n" ); + + gNfcip.isReqPending = false; + ret = ERR_NONE; + } + else + { + ret = nfcipDataRx( false ); + } + + if( ret != ERR_BUSY ) + { + ret = nfcipTargetHandleRX( ret, outActRxLen, outIsChaining ); + } + + break; + + /*******************************************************************************/ + default: + /* MISRA 16.4: no empty default statement (a comment being enough) */ + break; + } + return ret; +} + + +/*******************************************************************************/ +void rfalNfcDepSetDeactivatingCallback( rfalNfcDepDeactCallback pFunc ) +{ + gNfcip.isDeactivating = pFunc; +} + + +/*******************************************************************************/ +void rfalNfcDepInitialize( void ) +{ + nfcipLogD( " NFCIP Ini() \r\n" ); + + gNfcip.state = NFCIP_ST_IDLE; + gNfcip.isDeactivating = NULL; + + gNfcip.isTxPending = false; + gNfcip.isWait4RTOX = false; + gNfcip.isReqPending = false; + + + gNfcip.cfg.oper = (RFAL_NFCDEP_OPER_FULL_MI_DIS | RFAL_NFCDEP_OPER_EMPTY_DEP_EN | RFAL_NFCDEP_OPER_ATN_EN | RFAL_NFCDEP_OPER_RTOX_REQ_EN); + + gNfcip.cfg.did = RFAL_NFCDEP_DID_NO; + gNfcip.cfg.nad = RFAL_NFCDEP_NAD_NO; + + gNfcip.cfg.br = RFAL_NFCDEP_Bx_NO_HIGH_BR; + gNfcip.cfg.bs = RFAL_NFCDEP_Bx_NO_HIGH_BR; + + gNfcip.cfg.lr = RFAL_NFCDEP_LR_254; + gNfcip.fsc = rfalNfcDepLR2FS( gNfcip.cfg.lr ); + + gNfcip.cfg.gbLen = 0; + + gNfcip.cfg.fwt = RFAL_NFCDEP_MAX_FWT; + gNfcip.cfg.dFwt = RFAL_NFCDEP_MAX_FWT; + + gNfcip.pni = 0; + gNfcip.RTOXTimer = 0; + + nfcipClearCounters(); +} + + +/*******************************************************************************/ +static void nfcipSetDEPParams( rfalNfcDepDEPParams *DEPParams ) +{ + nfcipLogD( " NFCIP SetDEP() txLen: %d \r\n", DEPParams->txBufLen ); + + gNfcip.isTxChaining = DEPParams->txChaining; + gNfcip.txBuf = DEPParams->txBuf; + gNfcip.rxBuf = DEPParams->rxBuf; + gNfcip.txBufLen = DEPParams->txBufLen; + gNfcip.rxBufLen = DEPParams->rxBufLen; + gNfcip.txBufPaylPos = DEPParams->txBufPaylPos; + gNfcip.rxBufPaylPos = DEPParams->rxBufPaylPos; + + if( DEPParams->did != RFAL_NFCDEP_DID_KEEP ) + { + gNfcip.cfg.did = nfcip_DIDMax( DEPParams->did ); + } + + gNfcip.cfg.fwt = DEPParams->fwt; + gNfcip.cfg.dFwt = DEPParams->dFwt; + gNfcip.fsc = DEPParams->fsc; + + + + if(gNfcip.cfg.role == RFAL_NFCDEP_ROLE_TARGET) + { + /* If there's any data to be sent go for Tx */ + if(DEPParams->txBufLen > 0U) + { + /* Ensure that an RTOX Ack is not being expected at moment */ + if( !gNfcip.isWait4RTOX ) + { + gNfcip.state = NFCIP_ST_TARG_DEP_TX; + return; + } + else + { + /* If RTOX Ack is expected, signal a pending Tx to be transmitted right after */ + gNfcip.isTxPending = true; + nfcipLogW( " NFCIP(T) Waiting RTOX, queueing outgoing DEP Block \r\n" ); + } + } + + /*Digital 1.0 14.12.4.1 In target mode the first PDU MUST be sent by the Initiator */ + gNfcip.state = NFCIP_ST_TARG_DEP_RX; + return; + } + + /* New data TxRx request clear previous error counters for consecutive TxRx without reseting communication/protocol layer*/ + nfcipClearCounters(); + + gNfcip.state = NFCIP_ST_INIT_DEP_TX; +} + + +/*******************************************************************************/ +bool rfalNfcDepTargetRcvdATR( void ) +{ + return ( (gNfcip.cfg.role == RFAL_NFCDEP_ROLE_TARGET) && nfcipIsTarget(gNfcip.state) && (gNfcip.state > NFCIP_ST_TARG_WAIT_ATR) ); +} + + +/*******************************************************************************/ +bool rfalNfcDepIsAtrReq( const uint8_t* buf, uint16_t bufLen, uint8_t* nfcid3 ) +{ + uint8_t msgIt; + + msgIt = 0; + + if ( (bufLen < RFAL_NFCDEP_ATRREQ_MIN_LEN) || (bufLen > RFAL_NFCDEP_ATRREQ_MAX_LEN) ) + { + return false; + } + + if ( buf[msgIt++] != NFCIP_REQ ) + { + return false; + } + + if( buf[msgIt++] != (uint8_t)NFCIP_CMD_ATR_REQ ) + { + return false; + } + + /* Output NFID3 if requested */ + if( nfcid3 != NULL ) + { + ST_MEMCPY( nfcid3, &buf[RFAL_NFCDEP_ATR_REQ_NFCID3_POS], RFAL_NFCDEP_NFCID3_LEN ); + } + + return true; +} + + +/*******************************************************************************/ +static ReturnCode nfcipTargetHandleActivation( rfalNfcDepDevice *nfcDepDev, uint8_t *outBRS ) +{ + ReturnCode ret; + uint8_t msgIt; + uint8_t txBuf[RFAL_NFCDEP_HEADER_PAD + NFCIP_PSLRES_LEN]; + + /*******************************************************************************/ + /* Check if we are in correct state */ + /*******************************************************************************/ + if( gNfcip.state != NFCIP_ST_TARG_WAIT_ACTV ) + { + return ERR_WRONG_STATE; + } + + + /*******************************************************************************/ + /* Check required parameters */ + /*******************************************************************************/ + if( outBRS == NULL ) + { + return ERR_PARAM; + } + + /*******************************************************************************/ + /* Wait and process incoming cmd (PSL / DEP) */ + /*******************************************************************************/ + ret = nfcipDataRx( false ); + + if( ret != ERR_NONE ) + { + return ret; + } + + msgIt = 0; + *outBRS = RFAL_NFCDEP_BRS_MAINTAIN; /* set out BRS to be maintained */ + + msgIt++; /* Skip LEN byte */ + + if ( gNfcip.rxBuf[msgIt++] != NFCIP_REQ ) + { + return ERR_PROTO; + } + + if( gNfcip.rxBuf[msgIt] == (uint8_t)NFCIP_CMD_PSL_REQ ) + { + msgIt++; + + if( gNfcip.rxBuf[msgIt++] != gNfcip.cfg.did ) /* Checking DID */ + { + return ERR_PROTO; + } + + nfcipLogI( " NFCIP(T) PSL REQ rcvd \r\n" ); + + *outBRS = gNfcip.rxBuf[msgIt++]; /* assign output BRS value */ + + /* Store FSL(LR) and update current config */ + gNfcip.cfg.lr = (gNfcip.rxBuf[msgIt++] & RFAL_NFCDEP_LR_VAL_MASK); + gNfcip.fsc = rfalNfcDepLR2FS( gNfcip.cfg.lr ); + + /*******************************************************************************/ + /* Update NFC-DDE Device info */ + if( nfcDepDev != NULL ) + { + /* Update Bitrate info */ + /* PRQA S 4342 2 # MISRA 10.5 - Layout of enum rfalBitRate and definition of rfalNfcDepBRS2DSI guarantee no invalid enum values to be created */ + nfcDepDev->info.DSI = (rfalBitRate)rfalNfcDepBRS2DSI( *outBRS ); /* DSI codes the bit rate from Initiator to Target */ + nfcDepDev->info.DRI = (rfalBitRate)rfalNfcDepBRS2DRI( *outBRS ); /* DRI codes the bit rate from Target to Initiator */ + + /* Update Length Reduction and Frame Size */ + nfcDepDev->info.LR = gNfcip.cfg.lr; + nfcDepDev->info.FS = gNfcip.fsc; + + /* Update PPi byte */ + nfcDepDev->activation.Initiator.ATR_REQ.PPi &= ~RFAL_NFCDEP_PP_LR_MASK; + nfcDepDev->activation.Initiator.ATR_REQ.PPi |= rfalNfcDepLR2PP( gNfcip.cfg.lr ); + } + + EXIT_ON_ERR( ret, nfcipTx( NFCIP_CMD_PSL_RES, txBuf, NULL, 0, 0, NFCIP_NO_FWT ) ); + } + else + { + if( gNfcip.rxBuf[msgIt] == (uint8_t)NFCIP_CMD_DEP_REQ ) + { + msgIt++; + + /*******************************************************************************/ + /* Digital 1.0 14.12.3.1 PNI must be initialized to 0 */ + if( nfcip_PBF_PNI( gNfcip.rxBuf[msgIt] ) != 0U ) + { + return ERR_PROTO; + } + + /*******************************************************************************/ + /* Digital 1.0 14.8.2.1 check if DID is expected and match -> Protocol Error */ + if( nfcip_PFBhasDID( gNfcip.rxBuf[ msgIt] ) ) + { + if( gNfcip.rxBuf[++msgIt] != gNfcip.cfg.did ) + { + return ERR_PROTO; + } + } + else if( gNfcip.cfg.did != RFAL_NFCDEP_DID_NO ) /* DID expected but not rcv */ + { + return ERR_PROTO; + } + else + { + /* MISRA 15.7 - Empty else */ + } + } + + /* Signal Request pending to be digested on normal Handling (DEP_REQ, DSL_REQ, RLS_REQ) */ + gNfcip.isReqPending = true; + } + + gNfcip.state = NFCIP_ST_TARG_DEP_RX; + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcDepATR( const rfalNfcDepAtrParam* param, rfalNfcDepAtrRes *atrRes, uint8_t* atrResLen ) +{ + ReturnCode ret; + rfalNfcDepConfigs cfg; + uint16_t rxLen; + uint8_t msgIt; + uint8_t txBuf[RFAL_NFCDEP_ATRREQ_MAX_LEN]; + uint8_t rxBuf[NFCIP_ATRRES_BUF_LEN]; + + + if( (param == NULL) || (atrRes == NULL) || (atrResLen == NULL) ) + { + return ERR_PARAM; + } + + /*******************************************************************************/ + /* Configure NFC-DEP layer */ + /*******************************************************************************/ + + cfg.did = param->DID; + cfg.nad = param->NAD; + cfg.fwt = RFAL_NFCDEP_MAX_FWT; + cfg.dFwt = RFAL_NFCDEP_MAX_FWT; + cfg.br = param->BR; + cfg.bs = param->BS; + cfg.lr = param->LR; + cfg.to = RFAL_NFCDEP_WT_TRG_MAX; /* Not used in Initiator mode */ + + + cfg.gbLen = param->GBLen; + if( cfg.gbLen > 0U ) /* MISRA 21.18 */ + { + ST_MEMCPY( cfg.gb, param->GB, cfg.gbLen ); + } + + cfg.nfcidLen = param->nfcidLen; + if( cfg.nfcidLen > 0U ) /* MISRA 21.18 */ + { + ST_MEMCPY( cfg.nfcid, param->nfcid, cfg.nfcidLen ); + } + + cfg.role = RFAL_NFCDEP_ROLE_INITIATOR; + cfg.oper = param->operParam; + cfg.commMode = param->commMode; + + rfalNfcDepInitialize(); + nfcipConfig( &cfg ); + + /*******************************************************************************/ + /* Send ATR_REQ */ + /*******************************************************************************/ + + EXIT_ON_ERR( ret, nfcipTxRx(NFCIP_CMD_ATR_REQ, txBuf, nfcipRWTActivation(), NULL, 0, rxBuf, NFCIP_ATRRES_BUF_LEN, &rxLen ) ); + + + /*******************************************************************************/ + /* ATR sent, check response */ + /*******************************************************************************/ + msgIt = 0; + rxLen = ((uint16_t)rxBuf[msgIt++] - RFAL_NFCDEP_LEN_LEN); /* use LEN byte */ + + if( (rxLen < RFAL_NFCDEP_ATRRES_MIN_LEN) || (rxLen > RFAL_NFCDEP_ATRRES_MAX_LEN) ) /* Checking length: ATR_RES */ + { + return ERR_PROTO; + } + + if( rxBuf[msgIt++] != NFCIP_RES ) /* Checking if is a response*/ + { + return ERR_PROTO; + } + + if( rxBuf[msgIt++] != (uint8_t)NFCIP_CMD_ATR_RES ) /* Checking if is a ATR RES */ + { + return ERR_PROTO; + } + + ST_MEMCPY( (uint8_t*)atrRes, (rxBuf + RFAL_NFCDEP_LEN_LEN), rxLen ); + *atrResLen = (uint8_t)rxLen; + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcDepPSL( uint8_t BRS, uint8_t FSL ) +{ + ReturnCode ret; + uint16_t rxLen; + uint8_t msgIt; + uint8_t txBuf[NFCIP_PSLREQ_LEN + NFCIP_PSLPAY_LEN]; + uint8_t rxBuf[NFCIP_PSLRES_LEN]; + + msgIt = NFCIP_PSLREQ_LEN; + + txBuf[msgIt++] = BRS; + txBuf[msgIt++] = FSL; + + /*******************************************************************************/ + /* Send PSL REQ and wait for response */ + /*******************************************************************************/ + EXIT_ON_ERR( ret, nfcipTxRx( NFCIP_CMD_PSL_REQ, txBuf, nfcipRWTActivation(), &txBuf[NFCIP_PSLREQ_LEN], (msgIt - NFCIP_PSLREQ_LEN), rxBuf, NFCIP_PSLRES_LEN, &rxLen ) ); + + + /*******************************************************************************/ + /* PSL sent, check response */ + /*******************************************************************************/ + msgIt = 0; + rxLen = (uint16_t)(rxBuf[msgIt++]); /* use LEN byte */ + + if( rxLen < NFCIP_PSLRES_LEN ) /* Checking length: LEN + RLS_RES */ + { + return ERR_PROTO; + } + + if( rxBuf[msgIt++] != NFCIP_RES ) /* Checking if is a response */ + { + return ERR_PROTO; + } + + if( rxBuf[msgIt++] != (uint8_t)NFCIP_CMD_PSL_RES ) /* Checking if is a PSL RES */ + { + return ERR_PROTO; + } + + if( rxBuf[msgIt++] != gNfcip.cfg.did ) /* Checking DID */ + { + return ERR_PROTO; + } + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcDepDSL( void ) +{ + ReturnCode ret; + uint8_t txBuf[ RFAL_NFCDEP_HEADER_PAD + NFCIP_DSLREQ_LEN]; + uint8_t rxBuf[NFCIP_DSLRES_LEN]; + uint8_t rxMsgIt; + uint16_t rxLen = 0; + + if( gNfcip.cfg.role == RFAL_NFCDEP_ROLE_TARGET ) + { + return ERR_NONE; /* Target has no deselect procedure */ + } + + /* Repeating a DSL REQ is optional, not doing it */ + EXIT_ON_ERR( ret, nfcipTxRx( NFCIP_CMD_DSL_REQ, txBuf, nfcipRWTActivation(), NULL, 0, rxBuf, RFAL_NFCDEP_ATRRES_MAX_LEN, &rxLen ) ); + + /*******************************************************************************/ + rxMsgIt = 0; + + if( rxBuf[rxMsgIt++] < NFCIP_DSLRES_MIN ) /* Checking length: LEN + DSL_RES */ + { + return ERR_PROTO; + } + + if( rxBuf[rxMsgIt++] != NFCIP_RES ) /* Checking if is a response */ + { + return ERR_PROTO; + } + + if( rxBuf[rxMsgIt++] != (uint8_t)NFCIP_CMD_DSL_RES ) /* Checking if is DSL RES */ + { + return ERR_PROTO; + } + + if( gNfcip.cfg.did != RFAL_NFCDEP_DID_NO ) + { + if ( rxBuf[rxMsgIt++] != gNfcip.cfg.did ) + { + return ERR_PROTO; + } + } + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcDepRLS( void ) +{ + ReturnCode ret; + uint8_t txBuf[RFAL_NFCDEP_HEADER_PAD + NFCIP_RLSREQ_LEN]; + uint8_t rxBuf[NFCIP_RLSRES_LEN]; + uint8_t rxMsgIt; + uint16_t rxLen = 0; + + if ( gNfcip.cfg.role == RFAL_NFCDEP_ROLE_TARGET ) /* Target has no release procedure */ + { + return ERR_NONE; + } + + /* Repeating a RLS REQ is optional, not doing it */ + EXIT_ON_ERR( ret, nfcipTxRx( NFCIP_CMD_RLS_REQ, txBuf, nfcipRWTActivation(), NULL, 0, rxBuf, RFAL_NFCDEP_ATRRES_MAX_LEN, &rxLen ) ); + + /*******************************************************************************/ + rxMsgIt = 0; + + if( rxBuf[rxMsgIt++] < NFCIP_RLSRES_MIN ) /* Checking length: LEN + RLS_RES */ + { + return ERR_PROTO; + } + + if( rxBuf[rxMsgIt++] != NFCIP_RES ) /* Checking if is a response */ + { + return ERR_PROTO; + } + + if( rxBuf[rxMsgIt++] != (uint8_t)NFCIP_CMD_RLS_RES ) /* Checking if is RLS RES */ + { + return ERR_PROTO; + } + + if( gNfcip.cfg.did != RFAL_NFCDEP_DID_NO ) + { + if ( rxBuf[rxMsgIt++] != gNfcip.cfg.did ) + { + return ERR_PROTO; + } + } + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcDepInitiatorHandleActivation( rfalNfcDepAtrParam* param, rfalBitRate desiredBR, rfalNfcDepDevice* nfcDepDev ) +{ + ReturnCode ret; + uint8_t maxRetyrs; + uint8_t PSL_BRS; + uint8_t PSL_FSL; + bool sendPSL; + + if( (param == NULL) || (nfcDepDev == NULL) ) + { + return ERR_PARAM; + } + + param->NAD = RFAL_NFCDEP_NAD_NO; /* Digital 1.1 16.6.2.9 Initiator SHALL NOT use NAD */ + maxRetyrs = NFCIP_ATR_RETRY_MAX; + + /*******************************************************************************/ + /* Send ATR REQ and wait for response */ + /*******************************************************************************/ + do{ /* Upon transmission error ATR REQ should be retried */ + + ret = rfalNfcDepATR( param, &nfcDepDev->activation.Target.ATR_RES, &nfcDepDev->activation.Target.ATR_RESLen ); + + if( nfcipIsTransmissionError(ret) ) + { + continue; + } + break; + } + while( (maxRetyrs--) != 0U ); + + if( ret != ERR_NONE ) + { + return ret; + } + + /*******************************************************************************/ + /* Compute NFC-DEP device with ATR_RES */ + /*******************************************************************************/ + nfcDepDev->info.GBLen = (nfcDepDev->activation.Target.ATR_RESLen - RFAL_NFCDEP_ATRRES_MIN_LEN); + nfcDepDev->info.DID = nfcDepDev->activation.Target.ATR_RES.DID; + nfcDepDev->info.NAD = RFAL_NFCDEP_NAD_NO; /* Digital 1.1 16.6.3.11 Initiator SHALL ignore b1 of PPt */ + nfcDepDev->info.LR = rfalNfcDepPP2LR( nfcDepDev->activation.Target.ATR_RES.PPt ); + nfcDepDev->info.FS = rfalNfcDepLR2FS( nfcDepDev->info.LR ); + nfcDepDev->info.WT = (nfcDepDev->activation.Target.ATR_RES.TO & RFAL_NFCDEP_WT_MASK); + nfcDepDev->info.FWT = rfalNfcDepCalculateRWT( nfcDepDev->info.WT ); + nfcDepDev->info.dFWT = RFAL_NFCDEP_WT_DELTA; + + rfalGetBitRate( &nfcDepDev->info.DSI, &nfcDepDev->info.DRI ); + + + + /*******************************************************************************/ + /* Check if a PSL needs to be sent */ + /*******************************************************************************/ + sendPSL = false; + PSL_BRS = rfalNfcDepDx2BRS( nfcDepDev->info.DSI ); /* Set current bit rate divisor on both directions */ + PSL_FSL = nfcDepDev->info.LR; /* Set current Frame Size */ + + + + /* Activity 1.0 9.4.4.15 & 9.4.6.3 NFC-DEP Activation PSL + * Activity 2.0 9.4.4.17 & 9.4.6.6 NFC-DEP Activation PSL + * + * PSL_REQ shall only be sent if desired bit rate is different from current (Activity 1.0) + * PSL_REQ shall be sent to update LR or bit rate (Activity 2.0) + * */ + +#if 0 /* PSL due to LR is disabled, can be enabled if desired*/ + /*******************************************************************************/ + /* Check Frame Size */ + /*******************************************************************************/ + if( gNfcip.cfg.lr < nfcDepDev->info.LR ) /* If our Length reduction is smaller */ + { + sendPSL = true; + + nfcDepDev->info.LR = MIN( nfcDepDev->info.LR, gNfcip.cfg.lr ); + + gNfcip.cfg.lr = nfcDepDev->info.LR; /* Update nfcip LR to be used */ + gNfcip.fsc = rfalNfcDepLR2FS( gNfcip.cfg.lr ); /* Update nfcip FSC to be used */ + + PSL_FSL = gNfcip.cfg.lr; /* Set LR to be sent */ + + nfcipLogI( " NFCIP(I) Frame Size differ, PSL new fsc: %d \r\n", gNfcip.fsc ); + } +#endif + + + /*******************************************************************************/ + /* Check Baud rates */ + /*******************************************************************************/ + if( nfcDepDev->info.DSI != desiredBR ) /* if desired BR is different */ + { + /* || (target->brt != RFAL_NFCDEP_Bx_NO_HIGH_BR) || (target->bst != RFAL_NFCDEP_Bx_NO_HIGH_BR) */ /* if target supports higher BR, must send PSL? */ + if( nfcipDxIsSupported( (uint8_t)desiredBR, nfcDepDev->activation.Target.ATR_RES.BRt, nfcDepDev->activation.Target.ATR_RES.BSt ) ) /* if desired BR is supported */ /* MISRA 13.5 */ + { + sendPSL = true; + PSL_BRS = rfalNfcDepDx2BRS( desiredBR ); + + nfcipLogI( " NFCIP(I) BR differ, PSL BR: 0x%02X \r\n", PSL_BRS ); + } + } + + + /*******************************************************************************/ + if( sendPSL ) + { + /*******************************************************************************/ + /* Send PSL REQ and wait for response */ + /*******************************************************************************/ + EXIT_ON_ERR( ret, rfalNfcDepPSL(PSL_BRS, PSL_FSL) ); + + /* Check if bit rate has been changed */ + if( nfcDepDev->info.DSI != desiredBR ) + { + /* Check if device was in Passive NFC-A and went to higher bit rates, use NFC-F */ + if( (nfcDepDev->info.DSI == RFAL_BR_106) && (gNfcip.cfg.commMode == RFAL_NFCDEP_COMM_PASSIVE) ) + { + + #if RFAL_FEATURE_NFCF + /* If Passive initialize NFC-F module */ + rfalNfcfPollerInitialize( desiredBR ); + #else /* RFAL_FEATURE_NFCF */ + return ERR_NOTSUPP; + #endif /* RFAL_FEATURE_NFCF */ + + } + + nfcDepDev->info.DRI = desiredBR; /* DSI Bit Rate coding from Initiator to Target */ + nfcDepDev->info.DSI = desiredBR; /* DRI Bit Rate coding from Target to Initiator */ + + rfalSetBitRate( nfcDepDev->info.DSI, nfcDepDev->info.DRI ); + } + + + return ERR_NONE; /* PSL has been sent */ + } + + return ERR_NONE; /* No PSL has been sent */ +} + + +/*******************************************************************************/ +uint32_t rfalNfcDepCalculateRWT( uint8_t wt ) +{ + /* Digital 1.0 14.6.3.8 & Digital 1.1 16.6.3.9 */ + /* Digital 1.1 16.6.3.9 treat all RFU values as WT=14 */ + uint8_t responseWaitTime = MIN( RFAL_NFCDEP_WT_INI_MAX, wt ); + + return (uint32_t)rfalNfcDepWT2RWT(responseWaitTime); +} + + + +/*******************************************************************************/ +static ReturnCode nfcipDataTx( uint8_t* txBuf, uint16_t txBufLen, uint32_t fwt ) +{ + return rfalTransceiveBlockingTx( txBuf, txBufLen, gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen, (RFAL_TXRX_FLAGS_DEFAULT | (uint32_t)RFAL_TXRX_FLAGS_NFCIP1_ON), ((fwt == NFCIP_NO_FWT) ? RFAL_FWT_NONE : fwt) ); +} + + +/*******************************************************************************/ +static ReturnCode nfcipDataRx( bool blocking ) +{ + ReturnCode ret; + + /* Perform Rx either blocking or non-blocking */ + if( blocking ) + { + ret = rfalTransceiveBlockingRx(); + } + else + { + ret = rfalGetTransceiveStatus(); + } + + if( ret != ERR_BUSY ) + { + if( gNfcip.rxRcvdLen != NULL ) + { + (*gNfcip.rxRcvdLen) = rfalConvBitsToBytes( *gNfcip.rxRcvdLen ); + + if( (ret == ERR_NONE) && (gNfcip.rxBuf != NULL) ) + { + /* Digital 1.1 16.4.1.3 - Length byte LEN SHALL have a value between 3 and 255 -> otherwise treat as Transmission Error * + * - Ensure that actual received and frame length do match, otherwise treat as Transmission error */ + if( (*gNfcip.rxRcvdLen != (uint16_t)*gNfcip.rxBuf) || (*gNfcip.rxRcvdLen < RFAL_NFCDEP_LEN_MIN) || (*gNfcip.rxRcvdLen > RFAL_NFCDEP_LEN_MAX) ) + { + return ERR_FRAMING; + } + } + } + } + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcDepListenStartActivation( const rfalNfcDepTargetParam *param, const uint8_t *atrReq, uint16_t atrReqLength, rfalNfcDepListenActvParam rxParam ) +{ + ReturnCode ret; + rfalNfcDepConfigs cfg; + + + if( (param == NULL) || (atrReq == NULL) || (rxParam.rxLen == NULL) ) + { + return ERR_PARAM; + } + + + /*******************************************************************************/ + /* Check whether is a valid ATR_REQ Compute NFC-DEP device */ + if( !rfalNfcDepIsAtrReq( atrReq, atrReqLength, NULL ) ) + { + return ERR_PARAM; + } + + rxParam.nfcDepDev->activation.Initiator.ATR_REQLen = (uint8_t)atrReqLength; /* nfcipIsAtrReq() is already checking Min and Max buffer lengths */ + if( atrReqLength > 0U ) /* MISRA 21.18 */ + { + ST_MEMCPY( (uint8_t*)&rxParam.nfcDepDev->activation.Initiator.ATR_REQ, atrReq, atrReqLength ); + } + + rxParam.nfcDepDev->info.GBLen = (uint8_t)(atrReqLength - RFAL_NFCDEP_ATRREQ_MIN_LEN); + rxParam.nfcDepDev->info.DID = rxParam.nfcDepDev->activation.Initiator.ATR_REQ.DID; + rxParam.nfcDepDev->info.NAD = RFAL_NFCDEP_NAD_NO; /* Digital 1.1 16.6.2.9 Initiator SHALL NOT use NAD */ + rxParam.nfcDepDev->info.LR = rfalNfcDepPP2LR( rxParam.nfcDepDev->activation.Initiator.ATR_REQ.PPi ); + rxParam.nfcDepDev->info.FS = rfalNfcDepLR2FS( rxParam.nfcDepDev->info.LR ); + rxParam.nfcDepDev->info.WT = 0; + rxParam.nfcDepDev->info.FWT = NFCIP_NO_FWT; + rxParam.nfcDepDev->info.dFWT = NFCIP_NO_FWT; + + rfalGetBitRate( &rxParam.nfcDepDev->info.DSI, &rxParam.nfcDepDev->info.DRI ); + + + /* Store Device Info location, updated upon a PSL */ + gNfcip.nfcDepDev = rxParam.nfcDepDev; + + + /*******************************************************************************/ + cfg.did = rxParam.nfcDepDev->activation.Initiator.ATR_REQ.DID; + cfg.nad = RFAL_NFCDEP_NAD_NO; + + cfg.fwt = RFAL_NFCDEP_MAX_FWT; + cfg.dFwt = RFAL_NFCDEP_MAX_FWT; + + cfg.br = param->brt; + cfg.bs = param->bst; + + cfg.lr = rfalNfcDepPP2LR(param->ppt); + + cfg.gbLen = param->GBtLen; + if( cfg.gbLen > 0U ) /* MISRA 21.18 */ + { + ST_MEMCPY(cfg.gb, param->GBt, cfg.gbLen); + } + + cfg.nfcidLen = RFAL_NFCDEP_NFCID3_LEN; + ST_MEMCPY(cfg.nfcid, param->nfcid3, RFAL_NFCDEP_NFCID3_LEN); + + cfg.to = param->to; + + cfg.role = RFAL_NFCDEP_ROLE_TARGET; + cfg.oper = param->operParam; + cfg.commMode = param->commMode; + + rfalNfcDepInitialize(); + nfcipConfig( &cfg ); + + + /*******************************************************************************/ + /* Reply with ATR RES to Initiator */ + /*******************************************************************************/ + gNfcip.rxBuf = (uint8_t*)rxParam.rxBuf; + gNfcip.rxBufLen = sizeof(rfalNfcDepBufFormat); + gNfcip.rxRcvdLen = rxParam.rxLen; + gNfcip.rxBufPaylPos = RFAL_NFCDEP_DEPREQ_HEADER_LEN; + gNfcip.isChaining = rxParam.isRxChaining; + gNfcip.txBufPaylPos = RFAL_NFCDEP_DEPREQ_HEADER_LEN; + + EXIT_ON_ERR( ret, nfcipTx( NFCIP_CMD_ATR_RES, (uint8_t*) gNfcip.rxBuf, NULL, 0, 0, NFCIP_NO_FWT ) ); + + gNfcip.state = NFCIP_ST_TARG_WAIT_ACTV; + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcDepListenGetActivationStatus( void ) +{ + ReturnCode err; + uint8_t BRS; + + BRS = RFAL_NFCDEP_BRS_MAINTAIN; + + err = nfcipTargetHandleActivation( gNfcip.nfcDepDev, &BRS ); + + switch (err) + { + case ERR_NONE: + + if( BRS != RFAL_NFCDEP_BRS_MAINTAIN ) + { + /* DSI codes the bit rate from Initiator to Target */ + /* DRI codes the bit rate from Target to Initiator */ + + if( gNfcip.cfg.commMode == RFAL_NFCDEP_COMM_ACTIVE ) + { + EXIT_ON_ERR( err, rfalSetMode( RFAL_MODE_LISTEN_ACTIVE_P2P, gNfcip.nfcDepDev->info.DRI, gNfcip.nfcDepDev->info.DSI )); + } + else + { + EXIT_ON_ERR( err, rfalSetMode( ((RFAL_BR_106 == gNfcip.nfcDepDev->info.DRI) ? RFAL_MODE_LISTEN_NFCA : RFAL_MODE_LISTEN_NFCF), gNfcip.nfcDepDev->info.DRI, gNfcip.nfcDepDev->info.DSI )); + } + } + break; + + case ERR_BUSY: + // do nothing + break; + + case ERR_PROTO: + default: + // re-enable receiving of data + nfcDepReEnableRx( gNfcip.rxBuf, gNfcip.rxBufLen, gNfcip.rxRcvdLen ); + break; + } // if (no err) + + return err; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcDepStartTransceive( rfalNfcDepTxRxParam *param ) +{ + rfalNfcDepDEPParams nfcDepParams; + + nfcDepParams.txBuf = (uint8_t *)param->txBuf; + nfcDepParams.txBufLen = param->txBufLen; + nfcDepParams.txChaining = param->isTxChaining; + nfcDepParams.txBufPaylPos = RFAL_NFCDEP_DEPREQ_HEADER_LEN; /* position in txBuf where actual outgoing data is located */ + nfcDepParams.did = RFAL_NFCDEP_DID_KEEP; + nfcDepParams.rxBufPaylPos = RFAL_NFCDEP_DEPREQ_HEADER_LEN; + nfcDepParams.rxBuf = (uint8_t *)param->rxBuf; + nfcDepParams.rxBufLen = sizeof(rfalNfcDepBufFormat); + nfcDepParams.fsc = param->FSx; + nfcDepParams.fwt = param->FWT; + nfcDepParams.dFwt = param->dFWT; + + gNfcip.rxRcvdLen = param->rxLen; + gNfcip.isChaining = param->isRxChaining; + + nfcipSetDEPParams(&nfcDepParams); + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcDepGetTransceiveStatus( void ) +{ + return nfcipRun( gNfcip.rxRcvdLen, gNfcip.isChaining ); +} + +#endif /* RFAL_FEATURE_NFC_DEP */ diff --git a/Software/Middlewares/ST/rfal/Src/rfal_nfca.c b/Software/Middlewares/ST/rfal/Src/rfal_nfca.c new file mode 100644 index 0000000..03cb2e9 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_nfca.c @@ -0,0 +1,630 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_nfca.c + * + * \author Gustavo Patricio + * + * \brief Provides several NFC-A convenience methods and definitions + * + * It provides a Poller (ISO14443A PCD) interface and as well as + * some NFC-A Listener (ISO14443A PICC) helpers. + * + * The definitions and helpers methods provided by this module are only + * up to ISO14443-3 layer + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "rfal_nfca.h" +#include "utils.h" + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_NFCA + #define RFAL_FEATURE_NFCA false /* NFC-A module configuration missing. Disabled by default */ +#endif + +#if RFAL_FEATURE_NFCA + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define RFAL_NFCA_SLP_FWT rfalConvMsTo1fc(1) /*!< Check 1ms for any modulation ISO14443-3 6.4.3 */ +#define RFAL_NFCA_SLP_CMD 0x50U /*!< SLP cmd (byte1) Digital 1.1 6.9.1 & Table 20 */ +#define RFAL_NFCA_SLP_BYTE2 0x00U /*!< SLP byte2 Digital 1.1 6.9.1 & Table 20 */ +#define RFAL_NFCA_SLP_CMD_POS 0U /*!< SLP cmd position Digital 1.1 6.9.1 & Table 20 */ +#define RFAL_NFCA_SLP_BYTE2_POS 1U /*!< SLP byte2 position Digital 1.1 6.9.1 & Table 20 */ + +#define RFAL_NFCA_SDD_CT 0x88U /*!< Cascade Tag value Digital 1.1 6.7.2 */ +#define RFAL_NFCA_SDD_CT_LEN 1U /*!< Cascade Tag length */ + +#define RFAL_NFCA_SLP_REQ_LEN 2U /*!< SLP_REQ length */ + +#define RFAL_NFCA_SEL_CMD_LEN 1U /*!< SEL_CMD length */ +#define RFAL_NFCA_SEL_PAR_LEN 1U /*!< SEL_PAR length */ +#define RFAL_NFCA_SEL_SELPAR rfalNfcaSelPar(7U, 0U)/*!< SEL_PAR on Select is always with 4 data/nfcid */ +#define RFAL_NFCA_BCC_LEN 1U /*!< BCC length */ + +#define RFAL_NFCA_SDD_REQ_LEN (RFAL_NFCA_SEL_CMD_LEN + RFAL_NFCA_SEL_PAR_LEN) /*!< SDD_REQ length */ +#define RFAL_NFCA_SDD_RES_LEN (RFAL_NFCA_CASCADE_1_UID_LEN + RFAL_NFCA_BCC_LEN) /*!< SDD_RES length */ + +#define RFAL_NFCA_T_RETRANS 5U /*!< t RETRANSMISSION [3, 33]ms EMVCo 2.6 A.5 */ +#define RFAL_NFCA_N_RETRANS 2U /*!< Number of retries EMVCo 2.6 9.6.1.3 */ + + +/*! SDD_REQ (Select) Cascade Levels */ +enum +{ + RFAL_NFCA_SEL_CASCADE_L1 = 0, /*!< SDD_REQ Cascade Level 1 */ + RFAL_NFCA_SEL_CASCADE_L2 = 1, /*!< SDD_REQ Cascade Level 2 */ + RFAL_NFCA_SEL_CASCADE_L3 = 2 /*!< SDD_REQ Cascade Level 3 */ +}; + +/*! SDD_REQ (Select) request Cascade Level command Digital 1.1 Table 15 */ +enum +{ + RFAL_NFCA_CMD_SEL_CL1 = 0x93, /*!< SDD_REQ command Cascade Level 1 */ + RFAL_NFCA_CMD_SEL_CL2 = 0x95, /*!< SDD_REQ command Cascade Level 2 */ + RFAL_NFCA_CMD_SEL_CL3 = 0x97, /*!< SDD_REQ command Cascade Level 3 */ +}; + +/* +****************************************************************************** +* GLOBAL MACROS +****************************************************************************** +*/ +#define rfalNfcaSelPar( nBy, nbi ) (uint8_t)((((nBy)<<4U) & 0xF0U) | ((nbi)&0x0FU) ) /*!< Calculates SEL_PAR with the bytes/bits to be sent */ +#define rfalNfcaCLn2SELCMD( cl ) (uint8_t)((uint8_t)(RFAL_NFCA_CMD_SEL_CL1) + (2U*(cl))) /*!< Calculates SEL_CMD with the given cascade level */ +#define rfalNfcaNfcidLen2CL( len ) ((len) / 5U) /*!< Calculates cascade level by the NFCID length */ + +/*! Executes the given Tx method (f) and if a Timeout error is detected it retries (rt) times performing a delay of (dl) in between */ +#define rfalNfcaTxRetry( r, f, rt, dl ) \ + { \ + uint8_t rts = (uint8_t)(rt); \ + do { \ + (r)=(f); \ + if (((rt)!=0U) && ((dl)!=0U)) { \ + platformDelay(dl); \ + } \ + } while( ((rts--) != 0U) && ((r)==ERR_TIMEOUT) ); \ + } + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + +/*! SLP_REQ (HLTA) format Digital 1.1 6.9.1 & Table 20 */ +typedef struct +{ + uint8_t frame[RFAL_NFCA_SLP_REQ_LEN]; /*!< SLP: 0x50 0x00 */ +} rfalNfcaSlpReq; + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ +static uint8_t rfalNfcaCalculateBcc( const uint8_t* buf, uint8_t bufLen ); + + +/* + ****************************************************************************** + * LOCAL FUNCTIONS + ****************************************************************************** + */ + +static uint8_t rfalNfcaCalculateBcc( const uint8_t* buf, uint8_t bufLen ) +{ + uint8_t i; + uint8_t BCC; + + BCC = 0; + + /* BCC is XOR over first 4 bytes of the SDD_RES Digital 1.1 6.7.2 */ + for(i = 0; i < bufLen; i++) + { + BCC ^= buf[i]; + } + + return BCC; +} + +/* +****************************************************************************** +* GLOBAL FUNCTIONS +****************************************************************************** +*/ + +/*******************************************************************************/ +ReturnCode rfalNfcaPollerInitialize( void ) +{ + ReturnCode ret; + + EXIT_ON_ERR( ret, rfalSetMode( RFAL_MODE_POLL_NFCA, RFAL_BR_106, RFAL_BR_106 ) ); + rfalSetErrorHandling( RFAL_ERRORHANDLING_NFC ); + + rfalSetGT( RFAL_GT_NFCA ); + rfalSetFDTListen( RFAL_FDT_LISTEN_NFCA_POLLER ); + rfalSetFDTPoll( RFAL_FDT_POLL_NFCA_POLLER ); + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcaPollerCheckPresence( rfal14443AShortFrameCmd cmd, rfalNfcaSensRes *sensRes ) +{ + ReturnCode ret; + uint16_t rcvLen; + + /* Digital 1.1 6.10.1.3 For Commands ALL_REQ, SENS_REQ, SDD_REQ, and SEL_REQ, the NFC Forum Device * + * MUST treat receipt of a Listen Frame at a time after FDT(Listen, min) as a Timeour Error */ + + ret = rfalISO14443ATransceiveShortFrame( cmd, (uint8_t*)sensRes, (uint8_t)rfalConvBytesToBits(sizeof(rfalNfcaSensRes)), &rcvLen, RFAL_NFCA_FDTMIN ); + if( (ret == ERR_RF_COLLISION) || (ret == ERR_CRC) || (ret == ERR_NOMEM) || (ret == ERR_FRAMING) || (ret == ERR_PAR) ) + { + ret = ERR_NONE; + } + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcaPollerTechnologyDetection( rfalComplianceMode compMode, rfalNfcaSensRes *sensRes ) +{ + ReturnCode ret; + + EXIT_ON_ERR( ret, rfalNfcaPollerCheckPresence( ((compMode == RFAL_COMPLIANCE_MODE_EMV) ? RFAL_14443A_SHORTFRAME_CMD_WUPA : RFAL_14443A_SHORTFRAME_CMD_REQA), sensRes ) ); + + /* Send SLP_REQ as Activity 1.1 9.2.3.6 and EMVCo 2.6 9.2.1.3 */ + if( compMode != RFAL_COMPLIANCE_MODE_ISO) + { + rfalNfcaPollerSleep(); + } + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode rfalNfcaPollerSingleCollisionResolution( uint8_t devLimit, bool *collPending, rfalNfcaSelRes *selRes, uint8_t *nfcId1, uint8_t *nfcId1Len ) +{ + uint8_t i; + ReturnCode ret; + rfalNfcaSelReq selReq; + uint16_t bytesRx; + uint8_t bytesTxRx; + uint8_t bitsTxRx; + bool doBacktrack = false; + uint8_t backtrackCnt = 3; + + /* Check parameters */ + if( (collPending == NULL) || (selRes == NULL) || (nfcId1 == NULL) || (nfcId1Len == NULL) ) + { + return ERR_PARAM; + } + + /* Initialize output parameters */ + *collPending = false; /* Activity 1.1 9.3.4.6 */ + *nfcId1Len = 0; + ST_MEMSET( nfcId1, 0x00, RFAL_NFCA_CASCADE_3_UID_LEN ); + + /*******************************************************************************/ + /* Go through all Cascade Levels Activity 1.1 9.3.4 */ + for( i = (uint8_t)RFAL_NFCA_SEL_CASCADE_L1; i <= (uint8_t)RFAL_NFCA_SEL_CASCADE_L3; i++) + { + /* Initialize the SDD_REQ to send for the new cascade level */ + ST_MEMSET( (uint8_t*)&selReq, 0x00, sizeof(rfalNfcaSelReq) ); + selReq.selCmd = rfalNfcaCLn2SELCMD(i); + + bytesTxRx = RFAL_NFCA_SDD_REQ_LEN; + bitsTxRx = 0; + + /*******************************************************************************/ + /* Go through Collision loop */ + do + { + uint8_t collBit = 1; /* standards mandate or recommend collision bit to be set to One. */ + /* Calculate SEL_PAR with the bytes/bits to be sent */ + selReq.selPar = rfalNfcaSelPar(bytesTxRx, bitsTxRx); + + /* Send SDD_REQ (Anticollision frame) - Retry upon timeout EMVCo 2.6 9.6.1.3 */ + rfalNfcaTxRetry( ret, rfalISO14443ATransceiveAnticollisionFrame( (uint8_t*)&selReq, &bytesTxRx, &bitsTxRx, &bytesRx, RFAL_NFCA_FDTMIN ), ((devLimit==0U)?RFAL_NFCA_N_RETRANS:0U), RFAL_NFCA_T_RETRANS ); + + bytesRx = rfalConvBitsToBytes(bytesRx); + + if ((ret == ERR_TIMEOUT) + && (backtrackCnt != 0U) && !doBacktrack + && !((RFAL_NFCA_SDD_REQ_LEN==bytesTxRx) && (0U==bitsTxRx))) + { + /* In multiple card scenarios it may always happen that some + * collisions of a weaker tag go unnoticed. If then a later + * collision is recognized and the strong tag has a 0 at the + * collision position then no tag will respond. Catch this + * corner case and then try with the bit being sent as zero. */ + rfalNfcaSensRes sensRes; + ret = ERR_RF_COLLISION; + rfalNfcaPollerCheckPresence( RFAL_14443A_SHORTFRAME_CMD_REQA, &sensRes ); + /* Algorithm below does a post-increment, decrement to go back to current position */ + if (0U == bitsTxRx) + { + bitsTxRx = 7; + bytesTxRx--; + } + else + { + bitsTxRx--; + } + collBit = (uint8_t)( ((uint8_t*)&selReq)[bytesTxRx] & (1U << bitsTxRx) ); + collBit = (uint8_t)((0U==collBit)?1U:0U); // invert the collision bit + doBacktrack = true; + backtrackCnt--; + } + else + { + doBacktrack = false; + } + + if( ret == ERR_RF_COLLISION ) + { + /* Check received length */ + if( (bytesTxRx + ((bitsTxRx != 0U) ? 1U : 0U)) > (RFAL_NFCA_SDD_RES_LEN + RFAL_NFCA_SDD_REQ_LEN) ) + { + return ERR_PROTO; + } + + if( ((bytesTxRx + ((bitsTxRx != 0U) ? 1U : 0U)) > (RFAL_NFCA_CASCADE_1_UID_LEN + RFAL_NFCA_SDD_REQ_LEN)) && (backtrackCnt != 0U) ) + { /* Collision in BCC: Anticollide only UID part */ + backtrackCnt--; + bytesTxRx = RFAL_NFCA_CASCADE_1_UID_LEN + RFAL_NFCA_SDD_REQ_LEN - 1U; + bitsTxRx = 7; + collBit = (uint8_t)( ((uint8_t*)&selReq)[bytesTxRx] & (1U << bitsTxRx) ); /* Not a real collision, extract the actual bit for the subsequent code */ + } + + if( (devLimit == 0U) && !(*collPending) ) + { + /* Activity 1.0 & 1.1 9.3.4.12: If CON_DEVICES_LIMIT has a value of 0, then + * NFC Forum Device is configured to perform collision detection only */ + *collPending = true; + return ERR_IGNORE; + } + + *collPending = true; + + /* Set and select the collision bit, with the number of bytes/bits successfully TxRx */ + if (collBit != 0U) + { + ((uint8_t*)&selReq)[bytesTxRx] = (uint8_t)(((uint8_t*)&selReq)[bytesTxRx] | (1U << bitsTxRx)); /* MISRA 10.3 */ + } + else + { + ((uint8_t*)&selReq)[bytesTxRx] = (uint8_t)(((uint8_t*)&selReq)[bytesTxRx] & ~(1U << bitsTxRx)); /* MISRA 10.3 */ + } + + bitsTxRx++; + + /* Check if number of bits form a byte */ + if( bitsTxRx == RFAL_BITS_IN_BYTE ) + { + bitsTxRx = 0; + bytesTxRx++; + } + } + }while (ret == ERR_RF_COLLISION); + + + /*******************************************************************************/ + /* Check if Collision loop has failed */ + if( ret != ERR_NONE ) + { + return ret; + } + + + /* If collisions are to be reported check whether the response is complete */ + if( (devLimit == 0U) && (bytesRx != sizeof(rfalNfcaSddRes)) ) + { + return ERR_PROTO; + } + + /* Check if the received BCC match */ + if( selReq.bcc != rfalNfcaCalculateBcc( selReq.nfcid1, RFAL_NFCA_CASCADE_1_UID_LEN ) ) + { + return ERR_PROTO; + } + + /*******************************************************************************/ + /* Anticollision OK, Select this Cascade Level */ + selReq.selPar = RFAL_NFCA_SEL_SELPAR; + + /* Send SEL_REQ (Select command) - Retry upon timeout EMVCo 2.6 9.6.1.3 */ + rfalNfcaTxRetry( ret, rfalTransceiveBlockingTxRx( (uint8_t*)&selReq, sizeof(rfalNfcaSelReq), (uint8_t*)selRes, sizeof(rfalNfcaSelRes), &bytesRx, RFAL_TXRX_FLAGS_DEFAULT, RFAL_NFCA_FDTMIN ), ((devLimit==0U)?RFAL_NFCA_N_RETRANS:0U), RFAL_NFCA_T_RETRANS ); + + if( ret != ERR_NONE ) + { + return ret; + } + + + /* Ensure proper response length */ + if( bytesRx != sizeof(rfalNfcaSelRes) ) + { + return ERR_PROTO; + } + + /*******************************************************************************/ + /* Check cascade byte, if cascade tag then go next cascade level */ + if( (ret == ERR_NONE) && (*selReq.nfcid1 == RFAL_NFCA_SDD_CT) ) + { + /* Cascade Tag present, store nfcid1 bytes (excluding cascade tag) and continue for next CL */ + ST_MEMCPY( &nfcId1[*nfcId1Len], &((uint8_t*)&selReq.nfcid1)[RFAL_NFCA_SDD_CT_LEN], (RFAL_NFCA_CASCADE_1_UID_LEN - RFAL_NFCA_SDD_CT_LEN) ); + *nfcId1Len += (RFAL_NFCA_CASCADE_1_UID_LEN - RFAL_NFCA_SDD_CT_LEN); + } + else + { + /* UID Selection complete, Stop Cascade Level loop */ + ST_MEMCPY( &nfcId1[*nfcId1Len], (uint8_t*)&selReq.nfcid1, RFAL_NFCA_CASCADE_1_UID_LEN ); + *nfcId1Len += RFAL_NFCA_CASCADE_1_UID_LEN; + return ERR_NONE; + } + } + return ERR_INTERNAL; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcaPollerFullCollisionResolution( rfalComplianceMode compMode, uint8_t devLimit, rfalNfcaListenDevice *nfcaDevList, uint8_t *devCnt ) +{ + ReturnCode ret; + bool collPending; + rfalNfcaSensRes sensRes; + uint16_t rcvLen; + + if( (nfcaDevList == NULL) || (devCnt == NULL) ) + { + return ERR_PARAM; + } + + *devCnt = 0; + ret = ERR_NONE; + + /*******************************************************************************/ + /* Send ALL_REQ before Anticollision if a Sleep was sent before Activity 1.1 9.3.4.1 and EMVco 2.6 9.3.2.1 */ + if( compMode != RFAL_COMPLIANCE_MODE_ISO ) + { + ret = rfalISO14443ATransceiveShortFrame( RFAL_14443A_SHORTFRAME_CMD_WUPA, (uint8_t*)&nfcaDevList->sensRes, (uint8_t)rfalConvBytesToBits(sizeof(rfalNfcaSensRes)), &rcvLen, RFAL_NFCA_FDTMIN ); + if(ret != ERR_NONE) + { + if( (compMode == RFAL_COMPLIANCE_MODE_EMV) || ((ret != ERR_RF_COLLISION) && (ret != ERR_CRC) && (ret != ERR_FRAMING) && (ret != ERR_PAR)) ) + { + return ret; + } + } + + /* Check proper SENS_RES/ATQA size */ + if( (ret == ERR_NONE) && (rfalConvBytesToBits(sizeof(rfalNfcaSensRes)) != rcvLen) ) + { + return ERR_PROTO; + } + } + + + #if RFAL_FEATURE_T1T + /*******************************************************************************/ + /* Only check for T1T if previous SENS_RES was received without a transmission * + * error. When collisions occur bits in the SENS_RES may look like a T1T */ + /* If T1T Anticollision is not supported Activity 1.1 9.3.4.3 */ + if( rfalNfcaIsSensResT1T( &nfcaDevList->sensRes ) && (devLimit != 0U) && (ret == ERR_NONE) && (compMode != RFAL_COMPLIANCE_MODE_EMV) ) + { + /* RID_REQ shall be performed with rfalT1TPollerRid() Activity 1.1 9.3.4.24 */ + rfalT1TPollerInitialize(); + EXIT_ON_ERR( ret, rfalT1TPollerRid( &nfcaDevList->ridRes ) ); + + /* T1T doesn't support Anticollision */ + *devCnt = 1; + nfcaDevList->isSleep = false; + nfcaDevList->type = RFAL_NFCA_T1T; + nfcaDevList->nfcId1Len = RFAL_NFCA_CASCADE_1_UID_LEN; + ST_MEMCPY( &nfcaDevList->nfcId1, &nfcaDevList->ridRes.uid, RFAL_NFCA_CASCADE_1_UID_LEN ); + + return ERR_NONE; + } + #endif /* RFAL_FEATURE_T1T */ + + /*******************************************************************************/ + /* Store the SENS_RES from Technology Detection or from WUPA */ + sensRes = nfcaDevList->sensRes; + + if( devLimit > 0U ) /* MISRA 21.18 */ + { + ST_MEMSET( nfcaDevList, 0x00, (sizeof(rfalNfcaListenDevice) * devLimit) ); + } + + /* Restore the prev SENS_RES, assuming that the SENS_RES received is from first device + * When only one device is detected it's not woken up then we'll have no SENS_RES (ATQA) */ + nfcaDevList->sensRes = sensRes; + + + /*******************************************************************************/ + do + { + uint8_t newDeviceType; + + EXIT_ON_ERR( ret, rfalNfcaPollerSingleCollisionResolution( devLimit, &collPending, &nfcaDevList[*devCnt].selRes, (uint8_t*)&nfcaDevList[*devCnt].nfcId1, (uint8_t*)&nfcaDevList[*devCnt].nfcId1Len ) ); + + /* Assign Listen Device */ + newDeviceType = ((uint8_t)nfcaDevList[*devCnt].selRes.sak) & RFAL_NFCA_SEL_RES_CONF_MASK; /* MISRA 10.8 */ + /* PRQA S 4342 1 # MISRA 10.5 - Guaranteed that no invalid enum values are created: see guard_eq_RFAL_NFCA_T2T, .... */ + nfcaDevList[*devCnt].type = (rfalNfcaListenDeviceType) (newDeviceType); + nfcaDevList[*devCnt].isSleep = false; + (*devCnt)++; + + + /* If a collision was detected and device counter is lower than limit Activity 1.1 9.3.4.21 */ + if( (*devCnt < devLimit) && ((collPending) || (compMode != RFAL_COMPLIANCE_MODE_ISO) ) ) + { + /* Put this device to Sleep Activity 1.1 9.3.4.22 */ + rfalNfcaPollerSleep(); + nfcaDevList[(*devCnt - 1U)].isSleep = true; + + + /* Send a new SENS_REQ to check for other cards Activity 1.1 9.3.4.23 */ + ret = rfalNfcaPollerCheckPresence( RFAL_14443A_SHORTFRAME_CMD_REQA, &nfcaDevList[*devCnt].sensRes ); + if( ret == ERR_TIMEOUT ) + { + /* No more devices found, exit */ + collPending = false; + } + else + { + /* Another device found, continue loop */ + collPending = true; + } + } + else + { + /* Exit loop */ + collPending = false; + } + }while( (*devCnt < devLimit) && (collPending) ); + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcaPollerSelect( const uint8_t *nfcid1, uint8_t nfcidLen, rfalNfcaSelRes *selRes ) +{ + uint8_t i; + uint8_t cl; + uint8_t nfcidOffset; + uint16_t rxLen; + ReturnCode ret; + rfalNfcaSelReq selReq; + + if( (nfcid1 == NULL) || (nfcidLen > RFAL_NFCA_CASCADE_3_UID_LEN) || (selRes == NULL) ) + { + return ERR_PARAM; + } + + + /* Calculate Cascate Level */ + cl = rfalNfcaNfcidLen2CL( nfcidLen ); + nfcidOffset = 0; + + /*******************************************************************************/ + /* Go through all Cascade Levels Activity 1.1 9.4.4 */ + for( i = RFAL_NFCA_SEL_CASCADE_L1; i <= cl; i++ ) + { + /* Assign SEL_CMD according to the CLn and SEL_PAR*/ + selReq.selCmd = rfalNfcaCLn2SELCMD(i); + selReq.selPar = RFAL_NFCA_SEL_SELPAR; + + /* Compute NFCID/Data on the SEL_REQ command Digital 1.1 Table 18 */ + if( cl != i ) + { + *selReq.nfcid1 = RFAL_NFCA_SDD_CT; + ST_MEMCPY( &selReq.nfcid1[RFAL_NFCA_SDD_CT_LEN], &nfcid1[nfcidOffset], (RFAL_NFCA_CASCADE_1_UID_LEN - RFAL_NFCA_SDD_CT_LEN) ); + nfcidOffset += (RFAL_NFCA_CASCADE_1_UID_LEN - RFAL_NFCA_SDD_CT_LEN); + } + else + { + ST_MEMCPY( selReq.nfcid1, &nfcid1[nfcidOffset], RFAL_NFCA_CASCADE_1_UID_LEN ); + } + + /* Calculate nfcid's BCC */ + selReq.bcc = rfalNfcaCalculateBcc( (uint8_t*)&selReq.nfcid1, sizeof(selReq.nfcid1) ); + + /*******************************************************************************/ + /* Send SEL_REQ */ + EXIT_ON_ERR( ret, rfalTransceiveBlockingTxRx( (uint8_t*)&selReq, sizeof(rfalNfcaSelReq), (uint8_t*)selRes, sizeof(rfalNfcaSelRes), &rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_NFCA_FDTMIN ) ); + + /* Ensure proper response length */ + if( rxLen != sizeof(rfalNfcaSelRes) ) + { + return ERR_PROTO; + } + } + + /* REMARK: Could check if NFCID1 is complete */ + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcaPollerSleep( void ) +{ + rfalNfcaSlpReq slpReq; + uint8_t rxBuf; /* dummy buffer, just to perform Rx */ + + slpReq.frame[RFAL_NFCA_SLP_CMD_POS] = RFAL_NFCA_SLP_CMD; + slpReq.frame[RFAL_NFCA_SLP_BYTE2_POS] = RFAL_NFCA_SLP_BYTE2; + + rfalTransceiveBlockingTxRx( (uint8_t*)&slpReq, sizeof(rfalNfcaSlpReq), &rxBuf, sizeof(rxBuf), NULL, RFAL_TXRX_FLAGS_DEFAULT, RFAL_NFCA_SLP_FWT ); + + /* ISO14443-3 6.4.3 HLTA - If PICC responds with any modulation during 1 ms this response shall be interpreted as not acknowledge + Digital 2.0 6.9.2.1 & EMVCo 3.0 5.6.2.1 - consider the HLTA command always acknowledged + No check to be compliant with NFC and EMVCo, and to improve interoprability (Kovio RFID Tag) + */ + + return ERR_NONE; +} + + +/*******************************************************************************/ +bool rfalNfcaListenerIsSleepReq( const uint8_t *buf, uint16_t bufLen ) +{ + /* Check if length and payload match */ + if( (bufLen != sizeof(rfalNfcaSlpReq)) || (buf[RFAL_NFCA_SLP_CMD_POS] != RFAL_NFCA_SLP_CMD) || (buf[RFAL_NFCA_SLP_BYTE2_POS] != RFAL_NFCA_SLP_BYTE2) ) + { + return false; + } + + return true; +} + +/* If the guards here don't compile then the code above cannot work anymore. */ +extern uint8_t guard_eq_RFAL_NFCA_T2T[((RFAL_NFCA_SEL_RES_CONF_MASK&(uint8_t)RFAL_NFCA_T2T) == (uint8_t)RFAL_NFCA_T2T)?1:(-1)]; +extern uint8_t guard_eq_RFAL_NFCA_T4T[((RFAL_NFCA_SEL_RES_CONF_MASK&(uint8_t)RFAL_NFCA_T4T) == (uint8_t)RFAL_NFCA_T4T)?1:(-1)]; +extern uint8_t guard_eq_RFAL_NFCA_NFCDEP[((RFAL_NFCA_SEL_RES_CONF_MASK&(uint8_t)RFAL_NFCA_NFCDEP) == (uint8_t)RFAL_NFCA_NFCDEP)?1:(-1)]; +extern uint8_t guard_eq_RFAL_NFCA_T4T_NFCDEP[((RFAL_NFCA_SEL_RES_CONF_MASK&(uint8_t)RFAL_NFCA_T4T_NFCDEP) == (uint8_t)RFAL_NFCA_T4T_NFCDEP)?1:(-1)]; +#endif /* RFAL_FEATURE_NFCA */ diff --git a/Software/Middlewares/ST/rfal/Src/rfal_nfcb.c b/Software/Middlewares/ST/rfal/Src/rfal_nfcb.c new file mode 100644 index 0000000..49abebc --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_nfcb.c @@ -0,0 +1,504 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_nfcb.c + * + * \author Gustavo Patricio + * + * \brief Implementation of NFC-B (ISO14443B) helpers + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "rfal_nfcb.h" +#include "utils.h" + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_NFCB + #define RFAL_FEATURE_NFCB false /* NFC-B module configuration missing. Disabled by default */ +#endif + +#if RFAL_FEATURE_NFCB + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define RFAL_NFCB_SENSB_REQ_EXT_SENSB_RES_SUPPORTED 0x10U /*!< Bit mask for Extended SensB Response support in SENSB_REQ */ +#define RFAL_NFCB_SENSB_RES_PROT_TYPE_RFU 0x08U /*!< Bit mask for Protocol Type RFU in SENSB_RES */ +#define RFAL_NFCB_SLOT_MARKER_SC_SHIFT 4U /*!< Slot Code position on SLOT_MARKER APn */ + +#define RFAL_NFCB_SLOTMARKER_SLOTCODE_MIN 1U /*!< SLOT_MARKER Slot Code minimum Digital 1.1 Table 37 */ +#define RFAL_NFCB_SLOTMARKER_SLOTCODE_MAX 16U /*!< SLOT_MARKER Slot Code maximum Digital 1.1 Table 37 */ + +#define RFAL_NFCB_ACTIVATION_FWT (RFAL_NFCB_FWTSENSB + RFAL_NFCB_DTPOLL_20) /*!< FWT(SENSB) + dTbPoll Digital 2.0 7.9.1.3 */ + +/*! Advanced and Extended bit mask in Parameter of SENSB_REQ */ +#define RFAL_NFCB_SENSB_REQ_PARAM (RFAL_NFCB_SENSB_REQ_ADV_FEATURE | RFAL_NFCB_SENSB_REQ_EXT_SENSB_RES_SUPPORTED) + + +/*! NFC-B commands definition */ +enum +{ + RFAL_NFCB_CMD_SENSB_REQ = 0x05, /*!< SENSB_REQ (REQB) & SLOT_MARKER Digital 1.1 Table 24 */ + RFAL_NFCB_CMD_SENSB_RES = 0x50, /*!< SENSB_RES (ATQB) & SLOT_MARKER Digital 1.1 Table 27 */ + RFAL_NFCB_CMD_SLPB_REQ = 0x50, /*!< SLPB_REQ (HLTB command) Digital 1.1 Table 38 */ + RFAL_NFCB_CMD_SLPB_RES = 0x00 /*!< SLPB_RES (HLTB Answer) Digital 1.1 Table 39 */ +}; + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +#define rfalNfcbNI2NumberOfSlots( ni ) (uint8_t)(1U << (ni)) /*!< Converts the Number of slots Identifier to slot number */ + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + +/*! ALLB_REQ (WUPB) and SENSB_REQ (REQB) Command Format Digital 1.1 7.6.1 */ +typedef struct +{ + uint8_t cmd; /*!< xxxxB_REQ: 05h */ + uint8_t AFI; /*!< NFC Identifier */ + uint8_t PARAM; /*!< Application Data */ +} rfalNfcbSensbReq; + +/*! SLOT_MARKER Command format Digital 1.1 7.7.1 */ +typedef struct +{ + uint8_t APn; /*!< Slot number 2..16 | 0101b */ +} rfalNfcbSlotMarker; + +/*! SLPB_REQ (HLTB) Command Format Digital 1.1 7.8.1 */ +typedef struct +{ + uint8_t cmd; /*!< SLPB_REQ: 50h */ + uint8_t nfcid0[RFAL_NFCB_NFCID0_LEN]; /*!< NFC Identifier (PUPI)*/ +} rfalNfcbSlpbReq; + + +/*! SLPB_RES (HLTB) Response Format Digital 1.1 7.8.2 */ +typedef struct +{ + uint8_t cmd; /*!< SLPB_RES: 00h */ +} rfalNfcbSlpbRes; + + +/*! RFAL NFC-B instance */ +typedef struct +{ + uint8_t AFI; /*!< AFI to be used */ + uint8_t PARAM; /*!< PARAM to be used */ +} rfalNfcb; + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ +static ReturnCode rfalNfcbCheckSensbRes( const rfalNfcbSensbRes *sensbRes, uint8_t sensbResLen ); + + +/* +****************************************************************************** +* LOCAL VARIABLES +****************************************************************************** +*/ + +static rfalNfcb gRfalNfcb; /*!< RFAL NFC-B Instance */ + + +/* +****************************************************************************** +* LOCAL FUNCTIONS +****************************************************************************** +*/ + +/*******************************************************************************/ +static ReturnCode rfalNfcbCheckSensbRes( const rfalNfcbSensbRes *sensbRes, uint8_t sensbResLen ) +{ + /* Check response length */ + if( ( (sensbResLen != RFAL_NFCB_SENSB_RES_LEN) && (sensbResLen != RFAL_NFCB_SENSB_RES_EXT_LEN) ) ) + { + return ERR_PROTO; + } + + /* Check SENSB_RES and Protocol Type Digital 1.1 7.6.2.19 */ + if( ((sensbRes->protInfo.FsciProType & RFAL_NFCB_SENSB_RES_PROT_TYPE_RFU) != 0U) || (sensbRes->cmd != (uint8_t)RFAL_NFCB_CMD_SENSB_RES) ) + { + return ERR_PROTO; + } + return ERR_NONE; +} + +/* +****************************************************************************** +* GLOBAL FUNCTIONS +****************************************************************************** +*/ + +/*******************************************************************************/ +ReturnCode rfalNfcbPollerInitialize( void ) +{ + ReturnCode ret; + + EXIT_ON_ERR( ret, rfalSetMode( RFAL_MODE_POLL_NFCB, RFAL_BR_106, RFAL_BR_106 ) ); + rfalSetErrorHandling( RFAL_ERRORHANDLING_NFC ); + + rfalSetGT( RFAL_GT_NFCB ); + rfalSetFDTListen( RFAL_FDT_LISTEN_NFCB_POLLER ); + rfalSetFDTPoll( RFAL_FDT_POLL_NFCB_POLLER ); + + gRfalNfcb.AFI = RFAL_NFCB_AFI; + gRfalNfcb.PARAM = RFAL_NFCB_PARAM; + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode rfalNfcbPollerInitializeWithParams( uint8_t AFI, uint8_t PARAM ) +{ + ReturnCode ret; + + EXIT_ON_ERR( ret, rfalNfcbPollerInitialize() ); + + gRfalNfcb.AFI = AFI; + gRfalNfcb.PARAM = (PARAM & RFAL_NFCB_SENSB_REQ_PARAM); + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcbPollerCheckPresence( rfalNfcbSensCmd cmd, rfalNfcbSlots slots, rfalNfcbSensbRes *sensbRes, uint8_t *sensbResLen ) +{ + uint16_t rxLen; + ReturnCode ret; + rfalNfcbSensbReq sensbReq; + + + /* Check if the command requested and given the slot number are valid */ + if( ((RFAL_NFCB_SENS_CMD_SENSB_REQ != cmd) && (RFAL_NFCB_SENS_CMD_ALLB_REQ != cmd)) || + (slots > RFAL_NFCB_SLOT_NUM_16) || (sensbRes == NULL) || (sensbResLen == NULL) ) + { + return ERR_PARAM; + } + + *sensbResLen = 0; + ST_MEMSET(sensbRes, 0x00, sizeof(rfalNfcbSensbRes) ); + + /* Compute SENSB_REQ */ + sensbReq.cmd = RFAL_NFCB_CMD_SENSB_REQ; + sensbReq.AFI = gRfalNfcb.AFI; + sensbReq.PARAM = (((uint8_t)gRfalNfcb.PARAM & RFAL_NFCB_SENSB_REQ_PARAM) | (uint8_t)cmd | (uint8_t)slots); + + /* Send SENSB_REQ and disable AGC to detect collisions */ + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&sensbReq, sizeof(rfalNfcbSensbReq), (uint8_t*)sensbRes, sizeof(rfalNfcbSensbRes), &rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_NFCB_FWTSENSB ); + + *sensbResLen = (uint8_t)rxLen; + + /* Check if a transmission error was detected */ + if( (ret == ERR_CRC) || (ret == ERR_FRAMING) ) + { + /* Invalidate received frame as an error was detected (CollisionResolution checks if valid) */ + *sensbResLen = 0; + return ERR_NONE; + } + + if( ret == ERR_NONE ) + { + return rfalNfcbCheckSensbRes( sensbRes, *sensbResLen ); + } + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcbPollerSleep( const uint8_t* nfcid0 ) +{ + uint16_t rxLen; + ReturnCode ret; + rfalNfcbSlpbReq slpbReq; + rfalNfcbSlpbRes slpbRes; + + if( nfcid0 == NULL ) + { + return ERR_PARAM; + } + + /* Compute SLPB_REQ */ + slpbReq.cmd = RFAL_NFCB_CMD_SLPB_REQ; + ST_MEMCPY( slpbReq.nfcid0, nfcid0, RFAL_NFCB_NFCID0_LEN ); + + EXIT_ON_ERR( ret, rfalTransceiveBlockingTxRx( (uint8_t*)&slpbReq, sizeof(rfalNfcbSlpbReq), (uint8_t*)&slpbRes, sizeof(rfalNfcbSlpbRes), &rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_NFCB_ACTIVATION_FWT )); + + /* Check SLPB_RES */ + if( (rxLen != sizeof(rfalNfcbSlpbRes)) || (slpbRes.cmd != (uint8_t)RFAL_NFCB_CMD_SLPB_RES) ) + { + return ERR_PROTO; + } + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcbPollerSlotMarker( uint8_t slotCode, rfalNfcbSensbRes *sensbRes, uint8_t *sensbResLen ) +{ + ReturnCode ret; + rfalNfcbSlotMarker slotMarker; + uint16_t rxLen; + + /* Check parameters */ + if( (sensbRes == NULL) || (sensbResLen == NULL) || + (slotCode < RFAL_NFCB_SLOTMARKER_SLOTCODE_MIN) || + (slotCode > RFAL_NFCB_SLOTMARKER_SLOTCODE_MAX) ) + { + return ERR_PARAM; + } + /* Compose and send SLOT_MARKER with disabled AGC to detect collisions */ + slotMarker.APn = ((slotCode << RFAL_NFCB_SLOT_MARKER_SC_SHIFT) | (uint8_t)RFAL_NFCB_CMD_SENSB_REQ); + + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&slotMarker, sizeof(rfalNfcbSlotMarker), (uint8_t*)sensbRes, sizeof(rfalNfcbSensbRes), &rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_NFCB_ACTIVATION_FWT ); + + *sensbResLen = (uint8_t)rxLen; + + /* Check if a transmission error was detected */ + if( (ret == ERR_CRC) || (ret == ERR_FRAMING) ) + { + return ERR_RF_COLLISION; + } + + if( ret == ERR_NONE ) + { + return rfalNfcbCheckSensbRes( sensbRes, *sensbResLen ); + } + + return ret; +} + + +ReturnCode rfalNfcbPollerTechnologyDetection( rfalComplianceMode compMode, rfalNfcbSensbRes *sensbRes, uint8_t *sensbResLen ) +{ + NO_WARNING(compMode); + + return rfalNfcbPollerCheckPresence( RFAL_NFCB_SENS_CMD_SENSB_REQ, RFAL_NFCB_SLOT_NUM_1, sensbRes, sensbResLen ); +} + + +/*******************************************************************************/ +ReturnCode rfalNfcbPollerCollisionResolution( rfalComplianceMode compMode, uint8_t devLimit, rfalNfcbListenDevice *nfcbDevList, uint8_t *devCnt ) +{ + bool colPending; /* dummy */ + return rfalNfcbPollerSlottedCollisionResolution( compMode, devLimit, RFAL_NFCB_SLOT_NUM_1, RFAL_NFCB_SLOT_NUM_16, nfcbDevList, devCnt, &colPending ); +} + + +/*******************************************************************************/ +ReturnCode rfalNfcbPollerSlottedCollisionResolution( rfalComplianceMode compMode, uint8_t devLimit, rfalNfcbSlots initSlots, rfalNfcbSlots endSlots, rfalNfcbListenDevice *nfcbDevList, uint8_t *devCnt, bool *colPending ) +{ + ReturnCode ret; + uint8_t slotsNum; + uint8_t slotCode; + uint8_t curDevCnt; + + + /* Check parameters. In ISO | Activity 1.0 mode the initial slots must be 1 as continuation of Technology Detection */ + if( (nfcbDevList == NULL) || (devCnt == NULL) || (colPending == NULL) || (initSlots > RFAL_NFCB_SLOT_NUM_16) || + (endSlots > RFAL_NFCB_SLOT_NUM_16) || ((compMode == RFAL_COMPLIANCE_MODE_ISO) && (initSlots != RFAL_NFCB_SLOT_NUM_1)) ) + { + return ERR_PARAM; + } + + /* Initialise as no error in case Activity 1.0 where the previous SENSB_RES from technology detection should be used */ + ret = ERR_NONE; + *devCnt = 0; + curDevCnt = 0; + *colPending = false; + + + /* Send ALLB_REQ Activity 1.1 9.3.5.2 and 9.3.5.3 (Symbol 1 and 2) */ + if( compMode != RFAL_COMPLIANCE_MODE_ISO ) + { + ret = rfalNfcbPollerCheckPresence( RFAL_NFCB_SENS_CMD_ALLB_REQ, initSlots, &nfcbDevList->sensbRes, &nfcbDevList->sensbResLen ); + if( (ret != ERR_NONE) && (initSlots == RFAL_NFCB_SLOT_NUM_1) ) + { + return ret; + } + } + + + /* Check if there was a transmission error on WUPB EMVCo 2.6 9.3.3.1 */ + if( (compMode == RFAL_COMPLIANCE_MODE_EMV) && (nfcbDevList->sensbResLen == 0U) ) + { + return ERR_FRAMING; + } + + for( slotsNum = (uint8_t)initSlots; slotsNum <= (uint8_t)endSlots; slotsNum++ ) + { + do { + /* Activity 1.1 9.3.5.23 - Symbol 22 */ + if( (compMode == RFAL_COMPLIANCE_MODE_NFC) && (curDevCnt != 0U) ) + { + rfalNfcbPollerSleep( nfcbDevList[(*devCnt-1U)].sensbRes.nfcid0 ); + nfcbDevList[(*devCnt-1U)].isSleep = true; + } + + /* Send SENSB_REQ with number of slots if not the first Activity 1.1 9.3.5.24 - Symbol 23 */ + if( (slotsNum != (uint8_t)initSlots) || *colPending ) + { + /* PRQA S 4342 1 # MISRA 10.5 - Layout of rfalNfcbSlots and above loop guarantee that no invalid enum values are created. */ + ret = rfalNfcbPollerCheckPresence( RFAL_NFCB_SENS_CMD_SENSB_REQ, (rfalNfcbSlots)slotsNum, &nfcbDevList[*devCnt].sensbRes, &nfcbDevList[*devCnt].sensbResLen ); + } + + /* Activity 1.1 9.3.5.6 - Symbol 5 */ + slotCode = 0; + curDevCnt = 0; + *colPending = false; + + do{ + /* Activity 1.1 9.3.5.26 - Symbol 25 */ + if( slotCode != 0U ) + { + ret = rfalNfcbPollerSlotMarker( slotCode, &nfcbDevList[*devCnt].sensbRes, &nfcbDevList[*devCnt].sensbResLen ); + } + + /* Activity 1.1 9.3.5.7 and 9.3.5.8 - Symbol 6 */ + if( ret != ERR_TIMEOUT ) + { + /* Activity 1.1 9.3.5.8 - Symbol 7 */ + if( (rfalNfcbCheckSensbRes( &nfcbDevList[*devCnt].sensbRes, nfcbDevList[*devCnt].sensbResLen) == ERR_NONE) && (ret == ERR_NONE) ) + { + nfcbDevList[*devCnt].isSleep = false; + + if( compMode == RFAL_COMPLIANCE_MODE_EMV ) + { + (*devCnt)++; + return ret; + } + else if( compMode == RFAL_COMPLIANCE_MODE_ISO ) + { + /* Activity 1.0 9.3.5.8 - Symbol 7 */ + (*devCnt)++; + curDevCnt++; + + /* Activity 1.0 9.3.5.10 - Symbol 9 */ + if( (*devCnt >= devLimit) || (slotsNum == (uint8_t)RFAL_NFCB_SLOT_NUM_1) ) + { + return ret; + } + + /* Activity 1.0 9.3.5.11 - Symbol 10 */ + rfalNfcbPollerSleep( nfcbDevList[*devCnt-1U].sensbRes.nfcid0 ); + nfcbDevList[*devCnt-1U].isSleep = true; + } + else if( compMode == RFAL_COMPLIANCE_MODE_NFC ) + { + /* Activity 1.1 9.3.5.10 and 9.3.5.11 - Symbol 9 and Symbol 11*/ + if(curDevCnt != 0U) + { + rfalNfcbPollerSleep( nfcbDevList[*devCnt-1U].sensbRes.nfcid0 ); + nfcbDevList[*devCnt-1U].isSleep = true; + } + + /* Activity 1.1 9.3.5.12 - Symbol 11 */ + (*devCnt)++; + curDevCnt++; + + /* Activity 1.1 9.3.5.6 - Symbol 13 */ + if( (*devCnt >= devLimit) || (slotsNum == (uint8_t)RFAL_NFCB_SLOT_NUM_1) ) + { + return ret; + } + } + else + { + /* MISRA 15.7 - Empty else */ + } + } + else + { + /* If deviceLimit is set to 0 the NFC Forum Device is configured to perform collision detection only Activity 1.0 and 1.1 9.3.5.5 - Symbol 4 */ + if( (devLimit == 0U) && (slotsNum == (uint8_t)RFAL_NFCB_SLOT_NUM_1) ) + { + return ERR_RF_COLLISION; + } + + /* Activity 1.1 9.3.5.9 - Symbol 8 */ + *colPending = true; + } + } + + /* Activity 1.1 9.3.5.15 - Symbol 14 */ + slotCode++; + } + while( slotCode < rfalNfcbNI2NumberOfSlots(slotsNum) ); + + /* Activity 1.1 9.3.5.17 - Symbol 16 */ + if( !(*colPending) ) + { + return ERR_NONE; + } + + /* Activity 1.1 9.3.5.18 - Symbol 17 */ + } while (curDevCnt != 0U); /* If a collision is detected and card(s) were found on this loop keep the same number of available slots */ + } + + return ERR_NONE; +} + + +/*******************************************************************************/ +uint32_t rfalNfcbTR2ToFDT( uint8_t tr2Code ) +{ + /*******************************************************************************/ + /* MISRA 8.9 An object should be defined at block scope if its identifier only appears in a single function */ + /*! TR2 Table according to Digital 1.1 Table 33 */ + const uint16_t rfalNfcbTr2Table[] = { 1792, 3328, 5376, 9472 }; + /*******************************************************************************/ + + return rfalNfcbTr2Table[ (tr2Code & RFAL_NFCB_SENSB_RES_PROTO_TR2_MASK) ]; +} + +#endif /* RFAL_FEATURE_NFCB */ diff --git a/Software/Middlewares/ST/rfal/Src/rfal_nfcf.c b/Software/Middlewares/ST/rfal/Src/rfal_nfcf.c new file mode 100644 index 0000000..e3dd112 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_nfcf.c @@ -0,0 +1,546 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_nfcf.c + * + * \author Gustavo Patricio + * + * \brief Implementation of NFC-F Poller (FeliCa PCD) device + * + * The definitions and helpers methods provided by this module are + * aligned with NFC-F (FeliCa - JIS X6319-4) + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "rfal_nfcf.h" +#include "utils.h" + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_NFCF + #define RFAL_FEATURE_NFCF false /* NFC-F module configuration missing. Disabled by default */ +#endif + +#if RFAL_FEATURE_NFCF + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ +#define RFAL_NFCF_SENSF_REQ_LEN_MIN 5U /*!< SENSF_RES minimum length */ + +#define RFAL_NFCF_READ_WO_ENCRYPTION_MIN_LEN 15U /*!< Minimum length for a Check Command T3T 5.4.1 */ +#define RFAL_NFCF_WRITE_WO_ENCRYPTION_MIN_LEN 31U /*!< Minimum length for an Update Command T3T 5.5.1 */ + +#define RFAL_NFCF_CHECK_RES_MIN_LEN 11U /*!< CHECK Response minimum length T3T 1.0 Table 8 */ +#define RFAL_NFCF_UPDATE_RES_MIN_LEN 11U /*!< UPDATE Response minimum length T3T 1.0 Table 8 */ + +#define RFAL_NFCF_CHECK_REQ_MAX_LEN 86U /*!< Max length of a Check request T3T 1.0 Table 7 */ +#define RFAL_NFCF_CHECK_REQ_MAX_SERV 15U /*!< Max Services number on Check request T3T 1.0 5.4.1.5 */ +#define RFAL_NFCF_CHECK_REQ_MAX_BLOCK 15U /*!< Max Blocks number on Check request T3T 1.0 5.4.1.10 */ +#define RFAL_NFCF_UPDATE_REQ_MAX_SERV 15U /*!< Max Services number Update request T3T 1.0 5.4.1.5 */ +#define RFAL_NFCF_UPDATE_REQ_MAX_BLOCK 13U /*!< Max Blocks number on Update request T3T 1.0 5.4.1.10 */ + + +/*! MRT Check | Uupdate = (Tt3t x ((A+1) + n (B+1)) x 4^E) + dRWTt3t T3T 5.8 + Max values used: A = 7 ; B = 7 ; E = 3 ; n = 15 (NFC Forum n = 15, JIS n = 32) +*/ +#define RFAL_NFCF_MRT_CHECK_UPDATE ((4096 * (8 + (15 * 8)) * 64 ) + 16) + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ +#define rfalNfcfSlots2CardNum( s ) ((uint8_t)(s)+1U) /*!< Converts Time Slot Number (TSN) into num of slots */ + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + +/*! Structure/Buffer to hold the SENSF_RES with LEN byte prepended */ +typedef struct{ + uint8_t LEN; /*!< NFC-F LEN byte */ + rfalNfcfSensfRes SENSF_RES; /*!< SENSF_RES */ +} rfalNfcfSensfResBuf; + + +/*! Greedy collection for NFCF GRE_POLL_F Activity 1.0 Table 10 */ +typedef struct{ + uint8_t pollFound; /*!< Number of devices found by the Poll */ + uint8_t pollCollision; /*!< Number of collisions detected */ + rfalFeliCaPollRes POLL_F[RFAL_NFCF_POLL_MAXCARDS]; /*!< GRE_POLL_F Activity 1.0 Table 10 */ +} rfalNfcfGreedyF; + + +/*! NFC-F SENSF_REQ format Digital 1.1 8.6.1 */ +typedef struct +{ + uint8_t CMD; /*!< Command code: 00h */ + uint8_t SC[RFAL_NFCF_SENSF_SC_LEN]; /*!< System Code */ + uint8_t RC; /*!< Request Code */ + uint8_t TSN; /*!< Time Slot Number */ +} rfalNfcfSensfReq; + + +/* +****************************************************************************** +* LOCAL VARIABLES +****************************************************************************** +*/ +static rfalNfcfGreedyF gRfalNfcfGreedyF; /*!< Activity's NFCF Greedy collection */ + + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ +static void rfalNfcfComputeValidSENF( rfalNfcfListenDevice *outDevInfo, uint8_t *curDevIdx, uint8_t devLimit, bool overwrite, bool *nfcDepFound ); + + +/* +****************************************************************************** +* LOCAL VARIABLES +****************************************************************************** +*/ + +/*******************************************************************************/ +static void rfalNfcfComputeValidSENF( rfalNfcfListenDevice *outDevInfo, uint8_t *curDevIdx, uint8_t devLimit, bool overwrite, bool *nfcDepFound ) +{ + uint8_t tmpIdx; + bool duplicate; + rfalNfcfSensfResBuf *sensfBuf; + rfalNfcfSensfResBuf sensfCopy; + + + /*******************************************************************************/ + /* Go through all responses check if valid and duplicates */ + /*******************************************************************************/ + while( (gRfalNfcfGreedyF.pollFound > 0U) && ((*curDevIdx) < devLimit) ) + { + duplicate = false; + gRfalNfcfGreedyF.pollFound--; + + /* MISRA 11.3 - Cannot point directly into different object type, use local copy */ + ST_MEMCPY( (uint8_t*)&sensfCopy, (uint8_t*)&gRfalNfcfGreedyF.POLL_F[gRfalNfcfGreedyF.pollFound], sizeof(rfalNfcfSensfResBuf) ); + + + /* Point to received SENSF_RES */ + sensfBuf = &sensfCopy; + + + /* Check for devices that are already in device list */ + for( tmpIdx = 0; tmpIdx < (*curDevIdx); tmpIdx++ ) + { + if( ST_BYTECMP( sensfBuf->SENSF_RES.NFCID2, outDevInfo[tmpIdx].sensfRes.NFCID2, RFAL_NFCF_NFCID2_LEN ) == 0 ) + { + duplicate = true; + break; + } + } + + /* If is a duplicate skip this (and not to overwrite)*/ + if(duplicate && !overwrite) + { + continue; + } + + /* Check if response length is OK */ + if( (( sensfBuf->LEN - RFAL_NFCF_HEADER_LEN) < RFAL_NFCF_SENSF_RES_LEN_MIN) || ((sensfBuf->LEN - RFAL_NFCF_HEADER_LEN) > RFAL_NFCF_SENSF_RES_LEN_MAX) ) + { + continue; + } + + /* Check if the response is a SENSF_RES / Polling response */ + if( sensfBuf->SENSF_RES.CMD != (uint8_t)RFAL_NFCF_CMD_POLLING_RES ) + { + continue; + } + + /* Check if is an overwrite request or new device*/ + if(duplicate && overwrite) + { + /* overwrite deviceInfo/GRE_SENSF_RES with SENSF_RES */ + outDevInfo[tmpIdx].sensfResLen = (sensfBuf->LEN - RFAL_NFCF_LENGTH_LEN); + ST_MEMCPY( &outDevInfo[tmpIdx].sensfRes, &sensfBuf->SENSF_RES, outDevInfo[tmpIdx].sensfResLen ); + continue; + } + else + { + /* fill deviceInfo/GRE_SENSF_RES with new SENSF_RES */ + outDevInfo[(*curDevIdx)].sensfResLen = (sensfBuf->LEN - RFAL_NFCF_LENGTH_LEN); + ST_MEMCPY( &outDevInfo[(*curDevIdx)].sensfRes, &sensfBuf->SENSF_RES, outDevInfo[(*curDevIdx)].sensfResLen ); + } + + /* Check if this device supports NFC-DEP and signal it (ACTIVITY 1.1 9.3.6.63) */ + *nfcDepFound = rfalNfcfIsNfcDepSupported( &outDevInfo[(*curDevIdx)] ); + + (*curDevIdx)++; + } +} + +/* +****************************************************************************** +* GLOBAL FUNCTIONS +****************************************************************************** +*/ + +/*******************************************************************************/ +ReturnCode rfalNfcfPollerInitialize( rfalBitRate bitRate ) +{ + ReturnCode ret; + + if( (bitRate != RFAL_BR_212) && (bitRate != RFAL_BR_424) ) + { + return ERR_PARAM; + } + + EXIT_ON_ERR( ret, rfalSetMode( RFAL_MODE_POLL_NFCF, bitRate, bitRate ) ); + rfalSetErrorHandling( RFAL_ERRORHANDLING_NFC ); + + rfalSetGT( RFAL_GT_NFCF ); + rfalSetFDTListen( RFAL_FDT_LISTEN_NFCF_POLLER ); + rfalSetFDTPoll( RFAL_FDT_POLL_NFCF_POLLER ); + + return ERR_NONE; +} + + + +/*******************************************************************************/ +ReturnCode rfalNfcfPollerPoll( rfalFeliCaPollSlots slots, uint16_t sysCode, uint8_t reqCode, rfalFeliCaPollRes *cardList, uint8_t *devCnt, uint8_t *collisions ) +{ + return rfalFeliCaPoll( slots, sysCode, reqCode, cardList, rfalNfcfSlots2CardNum(slots), devCnt, collisions ); +} + +/*******************************************************************************/ +ReturnCode rfalNfcfPollerCheckPresence( void ) +{ + gRfalNfcfGreedyF.pollFound = 0; + gRfalNfcfGreedyF.pollCollision = 0; + + /* ACTIVITY 1.0 & 1.1 - 9.2.3.17 SENSF_REQ must be with number of slots equal to 4 + * SC must be 0xFFFF + * RC must be 0x00 (No system code info required) */ + return rfalFeliCaPoll( RFAL_FELICA_4_SLOTS, RFAL_NFCF_SYSTEMCODE, RFAL_FELICA_POLL_RC_NO_REQUEST, gRfalNfcfGreedyF.POLL_F, rfalNfcfSlots2CardNum(RFAL_FELICA_4_SLOTS), &gRfalNfcfGreedyF.pollFound, &gRfalNfcfGreedyF.pollCollision ); +} + + +/*******************************************************************************/ +ReturnCode rfalNfcfPollerCollisionResolution( rfalComplianceMode compMode, uint8_t devLimit, rfalNfcfListenDevice *nfcfDevList, uint8_t *devCnt ) +{ + ReturnCode ret; + bool nfcDepFound; + + if( (nfcfDevList == NULL) || (devCnt == NULL) ) + { + return ERR_PARAM; + } + + *devCnt = 0; + nfcDepFound = false; + + + /*******************************************************************************************/ + /* ACTIVITY 1.0 - 9.3.6.3 Copy valid SENSF_RES in GRE_POLL_F into GRE_SENSF_RES */ + /* ACTIVITY 1.0 - 9.3.6.6 The NFC Forum Device MUST remove all entries from GRE_SENSF_RES[]*/ + /* ACTIVITY 1.1 - 9.3.63.59 Populate GRE_SENSF_RES with data from GRE_POLL_F */ + /* */ + /* CON_DEVICES_LIMIT = 0 Just check if devices from Tech Detection exceeds -> always true */ + /* Allow the number of slots open on Technology Detection */ + /*******************************************************************************************/ + rfalNfcfComputeValidSENF( nfcfDevList, devCnt, ((devLimit == 0U) ? rfalNfcfSlots2CardNum( RFAL_FELICA_4_SLOTS ) : devLimit), false, &nfcDepFound ); + + + /*******************************************************************************/ + /* ACTIVITY 1.0 - 9.3.6.4 */ + /* ACTIVITY 1.1 - 9.3.63.60 Check if devices found are lower than the limit */ + /* and send a SENSF_REQ if so */ + /*******************************************************************************/ + if( *devCnt < devLimit ) + { + /* ACTIVITY 1.0 - 9.3.6.5 Copy valid SENSF_RES and then to remove it + * ACTIVITY 1.1 - 9.3.6.65 Copy and filter duplicates + * For now, due to some devices keep generating different nfcid2, we use 1.0 + * Phones detected: Samsung Galaxy Nexus,Samsung Galaxy S3,Samsung Nexus S */ + *devCnt = 0; + + ret = rfalNfcfPollerPoll( RFAL_FELICA_16_SLOTS, RFAL_NFCF_SYSTEMCODE, RFAL_FELICA_POLL_RC_NO_REQUEST, gRfalNfcfGreedyF.POLL_F, &gRfalNfcfGreedyF.pollFound, &gRfalNfcfGreedyF.pollCollision ); + if( ret == ERR_NONE ) + { + rfalNfcfComputeValidSENF( nfcfDevList, devCnt, devLimit, false, &nfcDepFound ); + } + + /*******************************************************************************/ + /* ACTIVITY 1.1 - 9.3.6.63 Check if any device supports NFC DEP */ + /*******************************************************************************/ + if( nfcDepFound && (compMode == RFAL_COMPLIANCE_MODE_NFC) ) + { + ret = rfalNfcfPollerPoll( RFAL_FELICA_16_SLOTS, RFAL_NFCF_SYSTEMCODE, RFAL_FELICA_POLL_RC_SYSTEM_CODE, gRfalNfcfGreedyF.POLL_F, &gRfalNfcfGreedyF.pollFound, &gRfalNfcfGreedyF.pollCollision ); + if( ret == ERR_NONE ) + { + rfalNfcfComputeValidSENF( nfcfDevList, devCnt, devLimit, true, &nfcDepFound ); + } + } + } + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode rfalNfcfPollerCheck( const uint8_t* nfcid2, const rfalNfcfServBlockListParam *servBlock, uint8_t *rxBuf, uint16_t rxBufLen, uint16_t *rcvdLen ) +{ + uint8_t txBuf[RFAL_NFCF_CHECK_REQ_MAX_LEN]; + uint8_t msgIt; + uint8_t i; + ReturnCode ret; + uint8_t *checkRes; + + /* Check parameters */ + if( (nfcid2 == NULL) || (rxBuf == NULL) || (servBlock == NULL) || + (servBlock->numBlock == 0U) || (servBlock->numBlock > RFAL_NFCF_CHECK_REQ_MAX_BLOCK) || + (servBlock->numServ == 0U) || (servBlock->numServ > RFAL_NFCF_CHECK_REQ_MAX_SERV) || + (rxBufLen < (RFAL_NFCF_LENGTH_LEN + RFAL_NFCF_CHECK_RES_MIN_LEN)) ) + { + return ERR_PARAM; + } + + msgIt = 0; + + /*******************************************************************************/ + /* Compose CHECK command/request */ + + txBuf[msgIt++] = RFAL_NFCF_CMD_READ_WITHOUT_ENCRYPTION; /* Command Code */ + + ST_MEMCPY( &txBuf[msgIt], nfcid2, RFAL_NFCF_NFCID2_LEN ); /* NFCID2 */ + msgIt += RFAL_NFCF_NFCID2_LEN; + + txBuf[msgIt++] = servBlock->numServ; /* NoS */ + for( i = 0; i < servBlock->numServ; i++) + { + txBuf[msgIt++] = (uint8_t)((servBlock->servList[i] >> 0U) & 0xFFU); /* Service Code */ + txBuf[msgIt++] = (uint8_t)((servBlock->servList[i] >> 8U) & 0xFFU); + } + + txBuf[msgIt++] = servBlock->numBlock; /* NoB */ + for( i = 0; i < servBlock->numBlock; i++) + { + txBuf[msgIt++] = servBlock->blockList[i].conf; /* Block list element conf (Flag|Access|Service) */ + if( (servBlock->blockList[i].conf & 0x80U) != 0U ) /* Check if 2 or 3 byte block list element */ + { + txBuf[msgIt++] = (uint8_t)(servBlock->blockList[i].blockNum & 0xFFU); /* 1byte Block Num */ + } + else + { + txBuf[msgIt++] = (uint8_t)((servBlock->blockList[i].blockNum >> 0U) & 0xFFU); /* 2byte Block Num */ + txBuf[msgIt++] = (uint8_t)((servBlock->blockList[i].blockNum >> 8U) & 0xFFU); + } + } + + /*******************************************************************************/ + /* Transceive CHECK command/request */ + ret = rfalTransceiveBlockingTxRx( txBuf, msgIt, rxBuf, rxBufLen, rcvdLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_NFCF_MRT_CHECK_UPDATE ); + + if( ret == ERR_NONE ) + { + /* Skip LEN byte */ + checkRes = (rxBuf + RFAL_NFCF_LENGTH_LEN); + + /* Check response length */ + if( *rcvdLen < (RFAL_NFCF_LENGTH_LEN + RFAL_NFCF_CHECKUPDATE_RES_ST2_POS) ) + { + ret = ERR_PROTO; + } + /* Check for a valid response */ + else if( (checkRes[RFAL_NFCF_CMD_POS] != (uint8_t)RFAL_NFCF_CMD_READ_WITHOUT_ENCRYPTION_RES) || + (checkRes[RFAL_NFCF_CHECKUPDATE_RES_ST1_POS] != RFAL_NFCF_STATUS_FLAG_SUCCESS) || + (checkRes[RFAL_NFCF_CHECKUPDATE_RES_ST2_POS] != RFAL_NFCF_STATUS_FLAG_SUCCESS) ) + { + ret = ERR_REQUEST; + } + /* CHECK succesfull, remove header */ + else + { + (*rcvdLen) -= (RFAL_NFCF_LENGTH_LEN + RFAL_NFCF_CHECKUPDATE_RES_NOB_POS); + + if( *rcvdLen > 0U ) + { + ST_MEMMOVE( rxBuf, &checkRes[RFAL_NFCF_CHECKUPDATE_RES_NOB_POS], (*rcvdLen) ); + } + } + } + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalNfcfPollerUpdate( const uint8_t* nfcid2, const rfalNfcfServBlockListParam *servBlock, uint8_t *txBuf, uint16_t txBufLen, const uint8_t *blockData, uint8_t *rxBuf, uint16_t rxBufLen ) +{ + uint8_t i; + uint16_t msgIt; + uint16_t rcvdLen; + uint16_t auxLen; + uint8_t *updateRes; + ReturnCode ret; + + /* Check parameters */ + if( (nfcid2 == NULL) || (rxBuf == NULL) || (servBlock == NULL) || (txBuf == NULL) || + (servBlock->numBlock == 0U) || (servBlock->numBlock > RFAL_NFCF_UPDATE_REQ_MAX_BLOCK) || + (servBlock->numServ == 0U) || (servBlock->numServ > RFAL_NFCF_UPDATE_REQ_MAX_SERV) || + (rxBufLen < (RFAL_NFCF_LENGTH_LEN + RFAL_NFCF_UPDATE_RES_MIN_LEN)) ) + { + return ERR_PARAM; + } + + /* Calculate required txBuffer lenth */ + auxLen = (uint16_t)( RFAL_NFCF_CMD_LEN + RFAL_NFCF_NFCID2_LEN + ( servBlock->numServ * sizeof(rfalNfcfServ) ) + + (servBlock->numBlock * sizeof(rfalNfcfBlockListElem)) + (uint16_t)((uint16_t)servBlock->numBlock * RFAL_NFCF_BLOCK_LEN) ); + + /* Check whether the provided buffer is sufficient for this request */ + if( txBufLen < auxLen ) + { + return ERR_PARAM; + } + + msgIt = 0; + + /*******************************************************************************/ + /* Compose UPDATE command/request */ + + txBuf[msgIt++] = RFAL_NFCF_CMD_WRITE_WITHOUT_ENCRYPTION; /* Command Code */ + + ST_MEMCPY( &txBuf[msgIt], nfcid2, RFAL_NFCF_NFCID2_LEN ); /* NFCID2 */ + msgIt += RFAL_NFCF_NFCID2_LEN; + + txBuf[msgIt++] = servBlock->numServ; /* NoS */ + for( i = 0; i < servBlock->numServ; i++) + { + txBuf[msgIt++] = (uint8_t)((servBlock->servList[i] >> 0U) & 0xFFU); /* Service Code */ + txBuf[msgIt++] = (uint8_t)((servBlock->servList[i] >> 8U) & 0xFFU); + } + + txBuf[msgIt++] = servBlock->numBlock; /* NoB */ + for( i = 0; i < servBlock->numBlock; i++) + { + txBuf[msgIt++] = servBlock->blockList[i].conf; /* Block list element conf (Flag|Access|Service) */ + if( (servBlock->blockList[i].conf & 0x80U) != 0U ) /* Check if 2 or 3 byte block list element */ + { + txBuf[msgIt++] = (uint8_t)(servBlock->blockList[i].blockNum & 0xFFU); /* 1byte Block Num */ + } + else + { + txBuf[msgIt++] = (uint8_t)((servBlock->blockList[i].blockNum >> 0U) & 0xFFU); /* 2byte Block Num */ + txBuf[msgIt++] = (uint8_t)((servBlock->blockList[i].blockNum >> 8U) & 0xFFU); + } + } + + auxLen = ((uint16_t)servBlock->numBlock * RFAL_NFCF_BLOCK_LEN); + ST_MEMCPY( &txBuf[msgIt], blockData, auxLen ); /* Block Data */ + msgIt += auxLen; + + + /*******************************************************************************/ + /* Transceive UPDATE command/request */ + ret = rfalTransceiveBlockingTxRx( txBuf, msgIt, rxBuf, rxBufLen, &rcvdLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_NFCF_MRT_CHECK_UPDATE ); + + if( ret == ERR_NONE ) + { + /* Skip LEN byte */ + updateRes = (rxBuf + RFAL_NFCF_LENGTH_LEN); + + /* Check response length */ + if( rcvdLen < (RFAL_NFCF_LENGTH_LEN + RFAL_NFCF_CHECKUPDATE_RES_ST2_POS) ) + { + ret = ERR_PROTO; + } + /* Check for a valid response */ + else if( (updateRes[RFAL_NFCF_CMD_POS] != (uint8_t)RFAL_NFCF_CMD_WRITE_WITHOUT_ENCRYPTION_RES) || + (updateRes[RFAL_NFCF_CHECKUPDATE_RES_ST1_POS] != RFAL_NFCF_STATUS_FLAG_SUCCESS) || + (updateRes[RFAL_NFCF_CHECKUPDATE_RES_ST2_POS] != RFAL_NFCF_STATUS_FLAG_SUCCESS) ) + { + ret = ERR_REQUEST; + } + else + { + /* MISRA 15.7 - Empty else */ + } + } + + return ret; +} + + + +/*******************************************************************************/ +bool rfalNfcfListenerIsT3TReq( const uint8_t* buf, uint16_t bufLen, uint8_t* nfcid2 ) +{ + /* Check cmd byte */ + switch( *buf ) + { + case RFAL_NFCF_CMD_READ_WITHOUT_ENCRYPTION: + if( bufLen < RFAL_NFCF_READ_WO_ENCRYPTION_MIN_LEN ) + { + return false; + } + break; + + case RFAL_NFCF_CMD_WRITE_WITHOUT_ENCRYPTION: + if( bufLen < RFAL_NFCF_WRITE_WO_ENCRYPTION_MIN_LEN ) + { + return false; + } + break; + + default: + return false; + } + + /* Output NFID2 if requested */ + if( nfcid2 != NULL ) + { + ST_MEMCPY( nfcid2, &buf[RFAL_NFCF_CMD_LEN], RFAL_NFCF_NFCID2_LEN ); + } + + return true; +} + +#endif /* RFAL_FEATURE_NFCF */ diff --git a/Software/Middlewares/ST/rfal/Src/rfal_nfcv.c b/Software/Middlewares/ST/rfal/Src/rfal_nfcv.c new file mode 100644 index 0000000..b38c6ba --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_nfcv.c @@ -0,0 +1,874 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_nfcv.c + * + * \author Gustavo Patricio + * + * \brief Implementation of NFC-V Poller (ISO15693) device + * + * The definitions and helpers methods provided by this module are + * aligned with NFC-V (ISO15693) + * + * The definitions and helpers methods provided by this module + * are aligned with NFC-V Digital 2.1 + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "rfal_nfcv.h" +#include "utils.h" + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_NFCV + #define RFAL_FEATURE_NFCV false /* NFC-V module configuration missing. Disabled by default */ +#endif + +#if RFAL_FEATURE_NFCV + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define RFAL_NFCV_INV_REQ_FLAG 0x06U /*!< INVENTORY_REQ INV_FLAG Digital 2.1 9.6.1 */ +#define RFAL_NFCV_MASKVAL_MAX_LEN 8U /*!< Mask value max length: 64 bits (UID length) */ +#define RFAL_NFCV_MASKVAL_MAX_1SLOT_LEN 64U /*!< Mask value max length in 1 Slot mode in bits Digital 2.1 9.6.1.6 */ +#define RFAL_NFCV_MASKVAL_MAX_16SLOT_LEN 60U /*!< Mask value max length in 16 Slot mode in bits Digital 2.1 9.6.1.6 */ +#define RFAL_NFCV_MAX_SLOTS 16U /*!< NFC-V max number of Slots */ +#define RFAL_NFCV_INV_REQ_HEADER_LEN 3U /*!< INVENTORY_REQ header length (INV_FLAG, CMD, MASK_LEN) */ +#define RFAL_NFCV_INV_RES_LEN 10U /*!< INVENTORY_RES length */ +#define RFAL_NFCV_WR_MUL_REQ_HEADER_LEN 4U /*!< Write Multiple header length (INV_FLAG, CMD, [UID], BNo, Bno) */ + + +#define RFAL_CMD_LEN 1U /*!< Commandbyte length */ +#define RFAL_NFCV_FLAG_POS 0U /*!< Flag byte position */ +#define RFAL_NFCV_FLAG_LEN 1U /*!< Flag byte length */ +#define RFAL_NFCV_DATASTART_POS 1U /*!< Position of start of data */ +#define RFAL_NFCV_DSFI_LEN 1U /*!< DSFID length */ +#define RFAL_NFCV_SLPREQ_REQ_FLAG 0x22U /*!< SLPV_REQ request flags Digital 2.0 (Candidate) 9.7.1.1 */ + +#define RFAL_NFCV_MAX_COLL_SUPPORTED 16U /*!< Maximum number of collisions supported by the Anticollision loop */ + +#define RFAL_FDT_POLL_MAX rfalConvMsTo1fc(20) /*!< Maximum Wait time FDTV,EOF 20 ms Digital 2.0 B.5 */ + + + +/*! Time from special frame to EOF + * ISO15693 2009 10.4.2 : 20ms + * NFC Forum defines Digital 2.0 9.7.4 : FDTV,EOF = [10 ; 20]ms + */ +#define RFAL_NFCV_FDT_EOF 20U + + + +/*! Time between slots - ISO 15693 defines t3min depending on modulation depth and data rate. + * With only high-bitrate supported, AM modulation and a length of 12 bytes (96bits) for INV_RES we get: + * - ISO t3min = 96/26 ms + 300us = 4 ms + * - NFC Forum defines FDTV,INVENT_NORES = (4394 + 2048)/fc. Digital 2.0 B.5*/ +#define RFAL_NFCV_FDT_V_INVENT_NORES 4U + + + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + +/*! NFC-V INVENTORY_REQ format Digital 2.0 9.6.1 */ +typedef struct +{ + uint8_t INV_FLAG; /*!< Inventory Flags */ + uint8_t CMD; /*!< Command code: 01h */ + uint8_t MASK_LEN; /*!< Mask Value Length */ + uint8_t MASK_VALUE[RFAL_NFCV_MASKVAL_MAX_LEN]; /*!< Mask Value */ +} rfalNfcvInventoryReq; + + +/*! NFC-V SLP_REQ format Digital 2.0 (Candidate) 9.7.1 */ +typedef struct +{ + uint8_t REQ_FLAG; /*!< Request Flags */ + uint8_t CMD; /*!< Command code: 02h */ + uint8_t UID[RFAL_NFCV_UID_LEN]; /*!< Mask Value */ +} rfalNfcvSlpvReq; + + +/*! Container for a collision found during Anticollision loop */ +typedef struct +{ + uint8_t maskLen; + uint8_t maskVal[RFAL_NFCV_MASKVAL_MAX_LEN]; +}rfalNfcvCollision; + + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ +static ReturnCode rfalNfcvParseError( uint8_t err ); + +/* +****************************************************************************** +* LOCAL VARIABLES +****************************************************************************** +*/ + +/* +****************************************************************************** +* LOCAL FUNCTIONS +****************************************************************************** +*/ + +/*******************************************************************************/ +static ReturnCode rfalNfcvParseError( uint8_t err ) +{ + switch(err) + { + case RFAL_NFCV_ERROR_CMD_NOT_SUPPORTED: + case RFAL_NFCV_ERROR_OPTION_NOT_SUPPORTED: + return ERR_NOTSUPP; + + case RFAL_NFCV_ERROR_CMD_NOT_RECOGNIZED: + return ERR_PROTO; + + case RFAL_NFCV_ERROR_WRITE_FAILED: + return ERR_WRITE; + + default: + return ERR_REQUEST; + } +} + +/* +****************************************************************************** +* GLOBAL FUNCTIONS +****************************************************************************** +*/ + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerInitialize( void ) +{ + ReturnCode ret; + + EXIT_ON_ERR( ret, rfalSetMode( RFAL_MODE_POLL_NFCV, RFAL_BR_26p48, RFAL_BR_26p48 ) ); + rfalSetErrorHandling( RFAL_ERRORHANDLING_NFC ); + + rfalSetGT( RFAL_GT_NFCV ); + rfalSetFDTListen( RFAL_FDT_LISTEN_NFCV_POLLER ); + rfalSetFDTPoll( RFAL_FDT_POLL_NFCV_POLLER ); + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerCheckPresence( rfalNfcvInventoryRes *invRes ) +{ + ReturnCode ret; + + /* INVENTORY_REQ with 1 slot and no Mask Activity 2.0 (Candidate) 9.2.3.32 */ + ret = rfalNfcvPollerInventory( RFAL_NFCV_NUM_SLOTS_1, 0, NULL, invRes, NULL ); + + if( (ret == ERR_RF_COLLISION) || (ret == ERR_CRC) || + (ret == ERR_FRAMING) || (ret == ERR_PROTO) ) + { + ret = ERR_NONE; + } + + return ret; +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerInventory( rfalNfcvNumSlots nSlots, uint8_t maskLen, const uint8_t *maskVal, rfalNfcvInventoryRes *invRes, uint16_t* rcvdLen ) +{ + ReturnCode ret; + rfalNfcvInventoryReq invReq; + uint16_t rxLen; + + if( ((maskVal == NULL) && (maskLen != 0U)) || (invRes == NULL) ) + { + return ERR_PARAM; + } + + invReq.INV_FLAG = (RFAL_NFCV_INV_REQ_FLAG | (uint8_t)nSlots); + invReq.CMD = RFAL_NFCV_CMD_INVENTORY; + invReq.MASK_LEN = (uint8_t)MIN( maskLen, ((nSlots == RFAL_NFCV_NUM_SLOTS_1) ? RFAL_NFCV_MASKVAL_MAX_1SLOT_LEN : RFAL_NFCV_MASKVAL_MAX_16SLOT_LEN) ); /* Digital 2.0 9.6.1.6 */ + + if( rfalConvBitsToBytes(invReq.MASK_LEN) > 0U ) /* MISRA 21.18 */ + { + ST_MEMCPY( invReq.MASK_VALUE, maskVal, rfalConvBitsToBytes(invReq.MASK_LEN) ); + } + + ret = rfalISO15693TransceiveAnticollisionFrame( (uint8_t*)&invReq, (uint8_t)(RFAL_NFCV_INV_REQ_HEADER_LEN + rfalConvBitsToBytes(invReq.MASK_LEN)), (uint8_t*)invRes, sizeof(rfalNfcvInventoryRes), &rxLen ); + + /* Check for optional output parameter */ + if( rcvdLen != NULL ) + { + *rcvdLen = rxLen; + } + + if( ret == ERR_NONE ) + { + if( rxLen != rfalConvBytesToBits(RFAL_NFCV_INV_RES_LEN + RFAL_NFCV_CRC_LEN) ) + { + return ERR_PROTO; + } + } + + return ret; +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerCollisionResolution( rfalComplianceMode compMode, uint8_t devLimit, rfalNfcvListenDevice *nfcvDevList, uint8_t *devCnt ) +{ + ReturnCode ret; + uint8_t slotNum; + uint16_t rcvdLen; + uint8_t colIt; + uint8_t colCnt; + uint8_t colPos; + bool colPending; + rfalNfcvCollision colFound[RFAL_NFCV_MAX_COLL_SUPPORTED]; + + + if( (nfcvDevList == NULL) || (devCnt == NULL) ) + { + return ERR_PARAM; + } + + /* Initialize parameters */ + *devCnt = 0; + colIt = 0; + colCnt = 0; + colPending = false; + ST_MEMSET(colFound, 0x00, (sizeof(rfalNfcvCollision)*RFAL_NFCV_MAX_COLL_SUPPORTED) ); + + if( devLimit > 0U ) /* MISRA 21.18 */ + { + ST_MEMSET(nfcvDevList, 0x00, (sizeof(rfalNfcvListenDevice)*devLimit) ); + } + + NO_WARNING(colPending); /* colPending is not exposed externally, in future it might become exposed/ouput parameter */ + + if( compMode == RFAL_COMPLIANCE_MODE_NFC ) + { + /* Send INVENTORY_REQ with one slot Activity 2.0 9.3.7.1 (Symbol 0) */ + ret = rfalNfcvPollerInventory( RFAL_NFCV_NUM_SLOTS_1, 0, NULL, &nfcvDevList->InvRes, NULL ); + + if( ret == ERR_TIMEOUT ) /* Exit if no device found Activity 2.0 9.3.7.2 (Symbol 1) */ + { + return ERR_NONE; + } + if( ret == ERR_NONE ) /* Device found without transmission error/collision Activity 2.0 9.3.7.3 (Symbol 2) */ + { + (*devCnt)++; + return ERR_NONE; + } + + /* A Collision has been identified Activity 2.0 9.3.7.2 (Symbol 3) */ + colPending = true; + colCnt = 1; + + /* Check if the Collision Resolution is set to perform only Collision detection Activity 2.0 9.3.7.5 (Symbol 4)*/ + if( devLimit == 0U ) + { + return ERR_RF_COLLISION; + } + + platformDelay(RFAL_NFCV_FDT_V_INVENT_NORES); + + /*******************************************************************************/ + /* Collisions pending, Anticollision loop must be executed */ + /*******************************************************************************/ + } + else + { + /* Advance to 16 slots below without mask. Will give a good chance to identify multiple cards */ + colPending = true; + colCnt = 1; + } + + + /* Execute until all collisions are resolved Activity 2.0 9.3.7.16 (Symbol 17) */ + do + { + /* Activity 2.0 9.3.7.5 (Symbol 6) */ + colPending = false; + slotNum = 0; + + do + { + if( slotNum == 0U ) + { + /* Send INVENTORY_REQ with 16 slots Activity 2.0 9.3.7.7 (Symbol 8) */ + ret = rfalNfcvPollerInventory( RFAL_NFCV_NUM_SLOTS_16, colFound[colIt].maskLen, colFound[colIt].maskVal, &nfcvDevList[(*devCnt)].InvRes, &rcvdLen ); + } + else + { + ret = rfalISO15693TransceiveEOFAnticollision( (uint8_t*)&nfcvDevList[(*devCnt)].InvRes, sizeof(rfalNfcvInventoryRes), &rcvdLen ); + } + slotNum++; + + /*******************************************************************************/ + if( ret != ERR_TIMEOUT ) + { + if( rcvdLen < rfalConvBytesToBits(RFAL_NFCV_INV_RES_LEN + RFAL_NFCV_CRC_LEN) ) + { /* If only a partial frame was received make sure the FDT_V_INVENT_NORES is fulfilled */ + platformDelay(RFAL_NFCV_FDT_V_INVENT_NORES); + } + + if( ret == ERR_NONE ) + { + /* Check if the device found is already on the list and its response is a valid INVENTORY_RES */ + if( rcvdLen == rfalConvBytesToBits(RFAL_NFCV_INV_RES_LEN + RFAL_NFCV_CRC_LEN) ) + { + /* Activity 2.0 9.3.7.15 (Symbol 11) */ + (*devCnt)++; + } + } + else /* Treat everything else as collision */ + { + /* Activity 2.0 9.3.7.15 (Symbol 16) */ + colPending = true; + + + /*******************************************************************************/ + /* Ensure that this collision still fits on the container */ + if( colCnt < RFAL_NFCV_MAX_COLL_SUPPORTED ) + { + /* Store this collision on the container to be resolved later */ + /* Activity 2.0 9.3.7.15 (Symbol 16): add the collision information + * (MASK_VAL + SN) to the list containing the collision information */ + ST_MEMCPY(colFound[colCnt].maskVal, colFound[colIt].maskVal, RFAL_NFCV_UID_LEN); + colPos = colFound[colIt].maskLen; + colFound[colCnt].maskVal[(colPos/RFAL_BITS_IN_BYTE)] &= (uint8_t)((1U << (colPos % RFAL_BITS_IN_BYTE)) - 1U); + colFound[colCnt].maskVal[(colPos/RFAL_BITS_IN_BYTE)] |= (uint8_t)((slotNum-1U) << (colPos % RFAL_BITS_IN_BYTE)); + colFound[colCnt].maskVal[((colPos/RFAL_BITS_IN_BYTE)+1U)] = (uint8_t)((slotNum-1U) >> (RFAL_BITS_IN_BYTE - (colPos % RFAL_BITS_IN_BYTE))); + + colFound[colCnt].maskLen = (colFound[colIt].maskLen + 4U); + + colCnt++; + } + } + } + else + { + /* Timeout */ + platformDelay(RFAL_NFCV_FDT_V_INVENT_NORES); + } + + /* Check if devices found have reached device limit Activity 2.0 9.3.7.15 (Symbol 16) */ + if( *devCnt >= devLimit ) + { + return ERR_NONE; + } + } while( slotNum < RFAL_NFCV_MAX_SLOTS ); /* Slot loop */ + colIt++; + } while( colIt < colCnt ); /* Collisions found loop */ + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerSleepCollisionResolution( uint8_t devLimit, rfalNfcvListenDevice *nfcvDevList, uint8_t *devCnt ) +{ + uint8_t locDevCnt; + ReturnCode ret; + uint8_t i; + + if( (nfcvDevList == NULL) || (devCnt == NULL) ) + { + return ERR_PARAM; + } + + *devCnt = 0; + + do + { + locDevCnt = 0; + ret = rfalNfcvPollerCollisionResolution( RFAL_COMPLIANCE_MODE_ISO, (devLimit - *devCnt), &nfcvDevList[*devCnt], &locDevCnt ); + + for( i = *devCnt; i < (*devCnt + locDevCnt); i++ ) + { + rfalNfcvPollerSleep( 0x00, nfcvDevList[i].InvRes.UID ); + nfcvDevList[i].isSleep = true; + } + *devCnt += locDevCnt; + } + while( (locDevCnt > 0U) && (*devCnt < devLimit) ); + + return ret; +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerSleep( uint8_t flags, const uint8_t* uid ) +{ + ReturnCode ret; + rfalNfcvSlpvReq slpReq; + uint8_t rxBuf; /* dummy buffer, just to perform Rx */ + + if( uid == NULL ) + { + return ERR_PARAM; + } + + /* Compute SLPV_REQ */ + slpReq.REQ_FLAG = (flags | (uint8_t)RFAL_NFCV_REQ_FLAG_ADDRESS); /* Should be with UID according Digital 2.0 (Candidate) 9.7.1.1 */ + slpReq.CMD = RFAL_NFCV_CMD_SLPV; + ST_MEMCPY( slpReq.UID, uid, RFAL_NFCV_UID_LEN ); + + /* NFC Forum device SHALL wait at least FDTVpp to consider the SLPV acknowledged (FDTVpp = FDTVpoll) Digital 2.0 (Candidate) 9.7 9.8.2 */ + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&slpReq, sizeof(rfalNfcvSlpvReq), &rxBuf, sizeof(rxBuf), NULL, RFAL_TXRX_FLAGS_DEFAULT, RFAL_FDT_POLL_NFCV_POLLER ); + if( ret != ERR_TIMEOUT ) + { + return ret; + } + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerSelect( uint8_t flags, const uint8_t* uid ) +{ + uint16_t rcvLen; + rfalNfcvGenericRes res; + + if( uid == NULL ) + { + return ERR_PARAM; + } + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_SELECT, flags, RFAL_NFCV_PARAM_SKIP, uid, NULL, 0U, (uint8_t*)&res, sizeof(rfalNfcvGenericRes), &rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerReadSingleBlock( uint8_t flags, const uint8_t* uid, uint8_t blockNum, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + uint8_t bn; + + bn = blockNum; + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_READ_SINGLE_BLOCK, flags, RFAL_NFCV_PARAM_SKIP, uid, &bn, sizeof(uint8_t), rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerWriteSingleBlock( uint8_t flags, const uint8_t* uid, uint8_t blockNum, const uint8_t* wrData, uint8_t blockLen ) +{ + uint8_t data[(RFAL_NFCV_BLOCKNUM_LEN + RFAL_NFCV_MAX_BLOCK_LEN)]; + uint8_t dataLen; + uint16_t rcvLen; + rfalNfcvGenericRes res; + + /* Check for valid parameters */ + if( (blockLen == 0U) || (blockLen > (uint8_t)RFAL_NFCV_MAX_BLOCK_LEN) || (wrData == NULL) ) + { + return ERR_PARAM; + } + + dataLen = 0U; + + /* Compute Request Data */ + data[dataLen++] = blockNum; /* Set Block Number (8 bits) */ + ST_MEMCPY( &data[dataLen], wrData, blockLen ); /* Append Block data to write */ + dataLen += blockLen; + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_WRITE_SINGLE_BLOCK, flags, RFAL_NFCV_PARAM_SKIP, uid, data, dataLen, (uint8_t*)&res, sizeof(rfalNfcvGenericRes), &rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerLockBlock( uint8_t flags, const uint8_t* uid, uint8_t blockNum ) +{ + uint16_t rcvLen; + rfalNfcvGenericRes res; + uint8_t bn; + + bn = blockNum; + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_LOCK_BLOCK, flags, RFAL_NFCV_PARAM_SKIP, uid, &bn, sizeof(uint8_t), (uint8_t*)&res, sizeof(rfalNfcvGenericRes), &rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerReadMultipleBlocks( uint8_t flags, const uint8_t* uid, uint8_t firstBlockNum, uint8_t numOfBlocks, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + uint8_t data[(RFAL_NFCV_BLOCKNUM_LEN + RFAL_NFCV_BLOCKNUM_LEN)]; + uint8_t dataLen; + + dataLen = 0U; + + /* Compute Request Data */ + data[dataLen++] = firstBlockNum; /* Set first Block Number */ + data[dataLen++] = numOfBlocks; /* Set number of blocks to read */ + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_READ_MULTIPLE_BLOCKS, flags, RFAL_NFCV_PARAM_SKIP, uid, data, dataLen, rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerWriteMultipleBlocks( uint8_t flags, const uint8_t* uid, uint8_t firstBlockNum, uint8_t numOfBlocks, uint8_t *txBuf, uint16_t txBufLen, uint8_t blockLen, const uint8_t* wrData, uint16_t wrDataLen ) +{ + ReturnCode ret; + uint16_t rcvLen; + uint16_t reqLen; + rfalNfcvGenericRes res; + uint16_t msgIt; + + /* Calculate required buffer length */ + reqLen = (uint16_t)((uid != NULL) ? (RFAL_NFCV_WR_MUL_REQ_HEADER_LEN + RFAL_NFCV_UID_LEN + wrDataLen) : (RFAL_NFCV_WR_MUL_REQ_HEADER_LEN + wrDataLen)); + + if( (reqLen > txBufLen) || (blockLen > (uint8_t)RFAL_NFCV_MAX_BLOCK_LEN) || ((((uint16_t)numOfBlocks) * (uint16_t)blockLen) != wrDataLen) || (numOfBlocks == 0U) || (wrData == NULL) ) + { + return ERR_PARAM; + } + + msgIt = 0; + + /* Compute Request Command */ + txBuf[msgIt++] = (uint8_t)(flags & (~((uint32_t)RFAL_NFCV_REQ_FLAG_ADDRESS) & ~((uint32_t)RFAL_NFCV_REQ_FLAG_SELECT))); + txBuf[msgIt++] = RFAL_NFCV_CMD_WRITE_MULTIPLE_BLOCKS; + + /* Check if Request is to be sent in Addressed or Selected mode */ + if( uid != NULL ) + { + txBuf[RFAL_NFCV_FLAG_POS] |= (uint8_t)RFAL_NFCV_REQ_FLAG_ADDRESS; + ST_MEMCPY( &txBuf[msgIt], uid, RFAL_NFCV_UID_LEN ); + msgIt += (uint8_t)RFAL_NFCV_UID_LEN; + } + else + { + txBuf[RFAL_NFCV_FLAG_POS] |= (uint8_t)RFAL_NFCV_REQ_FLAG_SELECT; + } + + txBuf[msgIt++] = firstBlockNum; + txBuf[msgIt++] = (numOfBlocks - 1U); + + if( wrDataLen > 0U ) /* MISRA 21.18 */ + { + ST_MEMCPY( &txBuf[msgIt], wrData, wrDataLen ); + msgIt += wrDataLen; + } + + /* Transceive Command */ + ret = rfalTransceiveBlockingTxRx( txBuf, msgIt, (uint8_t*)&res, sizeof(rfalNfcvGenericRes), &rcvLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_FDT_POLL_MAX ); + + if( ret != ERR_NONE ) + { + return ret; + } + + /* Check if the response minimum length has been received */ + if( rcvLen < (uint8_t)RFAL_NFCV_FLAG_LEN ) + { + return ERR_PROTO; + } + + /* Check if an error has been signalled */ + if( (res.RES_FLAG & (uint8_t)RFAL_NFCV_RES_FLAG_ERROR) != 0U ) + { + return rfalNfcvParseError( *res.data ); + } + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerExtendedReadSingleBlock( uint8_t flags, const uint8_t* uid, uint16_t blockNum, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + uint8_t data[RFAL_NFCV_BLOCKNUM_EXTENDED_LEN]; + uint8_t dataLen; + + dataLen = 0U; + + /* Compute Request Data */ + data[dataLen++] = (uint8_t)blockNum; /* TS T5T 1.0 BNo is considered as a multi-byte field. TS T5T 1.0 5.1.1.13 multi-byte field follows [DIGITAL]. [DIGITAL] 9.3.1 A multiple byte field is transmitted LSB first. */ + data[dataLen++] = (uint8_t)((blockNum >> 8U) & 0xFFU); + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_EXTENDED_READ_SINGLE_BLOCK, flags, RFAL_NFCV_PARAM_SKIP, uid, data, dataLen, rxBuf, rxBufLen, rcvLen ); +} + + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerExtendedWriteSingleBlock( uint8_t flags, const uint8_t* uid, uint16_t blockNum, const uint8_t* wrData, uint8_t blockLen ) +{ + uint8_t data[(RFAL_NFCV_BLOCKNUM_EXTENDED_LEN + RFAL_NFCV_MAX_BLOCK_LEN)]; + uint8_t dataLen; + uint16_t rcvLen; + rfalNfcvGenericRes res; + + /* Check for valid parameters */ + if( (blockLen == 0U) || (blockLen > (uint8_t)RFAL_NFCV_MAX_BLOCK_LEN) ) + { + return ERR_PARAM; + } + + dataLen = 0U; + + /* Compute Request Data */ + data[dataLen++] = (uint8_t)blockNum; /* TS T5T 1.0 BNo is considered as a multi-byte field. TS T5T 1.0 5.1.1.13 multi-byte field follows [DIGITAL]. [DIGITAL] 9.3.1 A multiple byte field is transmitted LSB first. */ + data[dataLen++] = (uint8_t)((blockNum >> 8U) & 0xFFU); + ST_MEMCPY( &data[dataLen], wrData, blockLen ); /* Append Block data to write */ + dataLen += blockLen; + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_EXTENDED_WRITE_SINGLE_BLOCK, flags, RFAL_NFCV_PARAM_SKIP, uid, data, dataLen, (uint8_t*)&res, sizeof(rfalNfcvGenericRes), &rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerExtendedLockSingleBlock( uint8_t flags, const uint8_t* uid, uint16_t blockNum ) +{ + uint8_t data[RFAL_NFCV_BLOCKNUM_EXTENDED_LEN]; + uint8_t dataLen; + uint16_t rcvLen; + rfalNfcvGenericRes res; + + dataLen = 0U; + + /* Compute Request Data */ + data[dataLen++] = (uint8_t)blockNum; /* TS T5T 1.0 BNo is considered as a multi-byte field. TS T5T 1.0 5.1.1.13 multi-byte field follows [DIGITAL]. [DIGITAL] 9.3.1 A multiple byte field is transmitted LSB first. */ + data[dataLen++] = (uint8_t)((blockNum >> 8U) & 0xFFU); + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_EXTENDED_LOCK_SINGLE_BLOCK, flags, RFAL_NFCV_PARAM_SKIP, uid, data, dataLen, (uint8_t*)&res, sizeof(rfalNfcvGenericRes), &rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerExtendedReadMultipleBlocks( uint8_t flags, const uint8_t* uid, uint16_t firstBlockNum, uint16_t numOfBlocks, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + uint8_t data[(RFAL_NFCV_BLOCKNUM_EXTENDED_LEN + RFAL_NFCV_BLOCKNUM_EXTENDED_LEN)]; + uint8_t dataLen; + + dataLen = 0U; + + /* Compute Request Data */ + data[dataLen++] = (uint8_t)((firstBlockNum >> 0U) & 0xFFU); + data[dataLen++] = (uint8_t)((firstBlockNum >> 8U) & 0xFFU); + data[dataLen++] = (uint8_t)((numOfBlocks >> 0U) & 0xFFU); + data[dataLen++] = (uint8_t)((numOfBlocks >> 8U) & 0xFFU); + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_EXTENDED_READ_MULTIPLE_BLOCK, flags, RFAL_NFCV_PARAM_SKIP, uid, data, dataLen, rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerExtendedWriteMultipleBlocks( uint8_t flags, const uint8_t* uid, uint16_t firstBlockNum, uint16_t numOfBlocks, uint8_t *txBuf, uint16_t txBufLen, uint8_t blockLen, const uint8_t* wrData, uint16_t wrDataLen ) +{ + ReturnCode ret; + uint16_t rcvLen; + uint16_t reqLen; + rfalNfcvGenericRes res; + uint16_t msgIt; + uint16_t nBlocks; + + /* Calculate required buffer length */ + reqLen = ((uid != NULL) ? (RFAL_NFCV_WR_MUL_REQ_HEADER_LEN + RFAL_NFCV_UID_LEN + wrDataLen) : (RFAL_NFCV_WR_MUL_REQ_HEADER_LEN + wrDataLen) ); + + if( (reqLen > txBufLen) || (blockLen > (uint8_t)RFAL_NFCV_MAX_BLOCK_LEN) || (( (uint16_t)numOfBlocks * (uint16_t)blockLen) != wrDataLen) || (numOfBlocks == 0U) ) + { + return ERR_PARAM; + } + + msgIt = 0; + nBlocks = (numOfBlocks - 1U); + + /* Compute Request Command */ + txBuf[msgIt++] = (uint8_t)(flags & (~((uint32_t)RFAL_NFCV_REQ_FLAG_ADDRESS) & ~((uint32_t)RFAL_NFCV_REQ_FLAG_SELECT))); + txBuf[msgIt++] = RFAL_NFCV_CMD_EXTENDED_WRITE_MULTIPLE_BLOCK; + + /* Check if Request is to be sent in Addressed or Selected mode */ + if( uid != NULL ) + { + txBuf[RFAL_NFCV_FLAG_POS] |= (uint8_t)RFAL_NFCV_REQ_FLAG_ADDRESS; + ST_MEMCPY( &txBuf[msgIt], uid, RFAL_NFCV_UID_LEN ); + msgIt += (uint8_t)RFAL_NFCV_UID_LEN; + } + else + { + txBuf[RFAL_NFCV_FLAG_POS] |= (uint8_t)RFAL_NFCV_REQ_FLAG_SELECT; + } + + txBuf[msgIt++] = (uint8_t)((firstBlockNum >> 0) & 0xFFU); + txBuf[msgIt++] = (uint8_t)((firstBlockNum >> 8) & 0xFFU); + txBuf[msgIt++] = (uint8_t)((nBlocks >> 0) & 0xFFU); + txBuf[msgIt++] = (uint8_t)((nBlocks >> 8) & 0xFFU); + + if( wrDataLen > 0U ) /* MISRA 21.18 */ + { + ST_MEMCPY( &txBuf[msgIt], wrData, wrDataLen ); + msgIt += wrDataLen; + } + + /* Transceive Command */ + ret = rfalTransceiveBlockingTxRx( txBuf, msgIt, (uint8_t*)&res, sizeof(rfalNfcvGenericRes), &rcvLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_FDT_POLL_MAX ); + + if( ret != ERR_NONE ) + { + return ret; + } + + /* Check if the response minimum length has been received */ + if( rcvLen < (uint8_t)RFAL_NFCV_FLAG_LEN ) + { + return ERR_PROTO; + } + + /* Check if an error has been signalled */ + if( (res.RES_FLAG & (uint8_t)RFAL_NFCV_RES_FLAG_ERROR) != 0U ) + { + return rfalNfcvParseError( *res.data ); + } + + return ERR_NONE; +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerGetSystemInformation( uint8_t flags, const uint8_t* uid, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_GET_SYS_INFO, flags, RFAL_NFCV_PARAM_SKIP, uid, NULL, 0U, rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerExtendedGetSystemInformation( uint8_t flags, const uint8_t* uid, uint8_t requestField, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_EXTENDED_GET_SYS_INFO, flags, requestField, uid, NULL, 0U, rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalNfcvPollerTransceiveReq( uint8_t cmd, uint8_t flags, uint8_t param, const uint8_t* uid, const uint8_t *data, uint16_t dataLen, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + ReturnCode ret; + rfalNfcvGenericReq req; + uint8_t msgIt; + rfalBitRate rxBR; + bool fastMode; + + msgIt = 0; + fastMode = false; + + /* Check for valid parameters */ + if( (rxBuf == NULL) || (rcvLen == NULL) || ((dataLen > 0U) && (data == NULL)) || + (dataLen > ((uid != NULL) ? RFAL_NFCV_MAX_GEN_DATA_LEN : (RFAL_NFCV_MAX_GEN_DATA_LEN - RFAL_NFCV_UID_LEN))) ) + { + return ERR_PARAM; + } + + + /* Check if the command is an ST's Fast command */ + if( (cmd == (uint8_t)RFAL_NFCV_CMD_FAST_READ_SINGLE_BLOCK) || (cmd == (uint8_t)RFAL_NFCV_CMD_FAST_EXTENDED_READ_SINGLE_BLOCK) || + (cmd == (uint8_t)RFAL_NFCV_CMD_FAST_READ_MULTIPLE_BLOCKS) || (cmd == (uint8_t)RFAL_NFCV_CMD_FAST_EXTENDED_READ_MULTIPLE_BLOCKS) || + (cmd == (uint8_t)RFAL_NFCV_CMD_FAST_WRITE_MESSAGE) || (cmd == (uint8_t)RFAL_NFCV_CMD_FAST_READ_MESSAGE_LENGTH) || + (cmd == (uint8_t)RFAL_NFCV_CMD_FAST_READ_MESSAGE) || (cmd == (uint8_t)RFAL_NFCV_CMD_FAST_READ_DYN_CONFIGURATION) || + (cmd == (uint8_t)RFAL_NFCV_CMD_FAST_WRITE_DYN_CONFIGURATION) ) + { + /* Store current Rx bit rate and move to fast mode */ + rfalGetBitRate( NULL, &rxBR ); + rfalSetBitRate( RFAL_BR_KEEP, RFAL_BR_52p97 ); + + fastMode = true; + } + + + /* Compute Request Command */ + req.REQ_FLAG = (uint8_t)(flags & (~((uint32_t)RFAL_NFCV_REQ_FLAG_ADDRESS) & ~((uint32_t)RFAL_NFCV_REQ_FLAG_SELECT))); + req.CMD = cmd; + + /* Prepend parameter on ceratin proprietary requests: IC Manuf, Parameters */ + if( param != RFAL_NFCV_PARAM_SKIP ) + { + req.payload.data[msgIt++] = param; + } + + /* Check if request is to be sent in Addressed or Selected mode */ + if( uid != NULL ) + { + req.REQ_FLAG |= (uint8_t)RFAL_NFCV_REQ_FLAG_ADDRESS; + ST_MEMCPY( &req.payload.data[msgIt], uid, RFAL_NFCV_UID_LEN ); + msgIt += RFAL_NFCV_UID_LEN; + } + else + { + req.REQ_FLAG |= (uint8_t)RFAL_NFCV_REQ_FLAG_SELECT; + } + + if( dataLen > 0U ) + { + ST_MEMCPY( &req.payload.data[msgIt], data, dataLen); + msgIt += (uint8_t)dataLen; + } + + /* Transceive Command */ + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&req, (RFAL_CMD_LEN + RFAL_NFCV_FLAG_LEN +(uint16_t)msgIt), rxBuf, rxBufLen, rcvLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_FDT_POLL_MAX ); + + /* If the Option Flag is set in certain commands an EOF needs to be sent after 20ms to retrieve the VICC response ISO15693-3 2009 10.4.2 & 10.4.3 & 10.4.5 */ + if( ((flags & (uint8_t)RFAL_NFCV_REQ_FLAG_OPTION) != 0U) && ((cmd == (uint8_t)RFAL_NFCV_CMD_WRITE_SINGLE_BLOCK) || (cmd == (uint8_t)RFAL_NFCV_CMD_WRITE_MULTIPLE_BLOCKS) || + (cmd == (uint8_t)RFAL_NFCV_CMD_LOCK_BLOCK) || (cmd == (uint8_t)RFAL_NFCV_CMD_EXTENDED_WRITE_SINGLE_BLOCK) || + (cmd == (uint8_t)RFAL_NFCV_CMD_EXTENDED_LOCK_SINGLE_BLOCK) || (cmd == (uint8_t)RFAL_NFCV_CMD_EXTENDED_WRITE_MULTIPLE_BLOCK)) ) + { + ret = rfalISO15693TransceiveEOF( rxBuf, (uint8_t)rxBufLen, rcvLen ); + } + + /* Restore Rx BitRate */ + if( fastMode ) + { + rfalSetBitRate( RFAL_BR_KEEP, rxBR ); + } + + if( ret != ERR_NONE ) + { + return ret; + } + + /* Check if the response minimum length has been received */ + if( (*rcvLen) < (uint8_t)RFAL_NFCV_FLAG_LEN ) + { + return ERR_PROTO; + } + + /* Check if an error has been signalled */ + if( (rxBuf[RFAL_NFCV_FLAG_POS] & (uint8_t)RFAL_NFCV_RES_FLAG_ERROR) != 0U ) + { + return rfalNfcvParseError( rxBuf[RFAL_NFCV_DATASTART_POS] ); + } + + return ERR_NONE; +} + +#endif /* RFAL_FEATURE_NFCV */ diff --git a/Software/Middlewares/ST/rfal/Src/rfal_rfst25r3911.c b/Software/Middlewares/ST/rfal/Src/rfal_rfst25r3911.c new file mode 100644 index 0000000..c9f9979 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_rfst25r3911.c @@ -0,0 +1,3733 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + + +/* + * PROJECT: ST25R3911 firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file + * + * \author Gustavo Patricio + * + * \brief RF Abstraction Layer (RFAL) + * + * RFAL implementation for ST25R3911 + */ + + +/* +****************************************************************************** +* INCLUDES +****************************************************************************** +*/ + +#include "rfal_chip.h" +#include "utils.h" +#include "st25r3911.h" +#include "st25r3911_com.h" +#include "st25r3911_interrupt.h" +#include "rfal_analogConfig.h" +#include "rfal_iso15693_2.h" + +/* + ****************************************************************************** + * ENABLE SWITCHS + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_LISTEN_MODE + #error " RFAL: Module configuration missing. Please enable/disable support for Listen Mode: RFAL_FEATURE_LISTEN_MODE " +#endif + +#ifndef RFAL_FEATURE_WAKEUP_MODE + #error " RFAL: Module configuration missing. Please enable/disable support for Wake-Up Mode: RFAL_FEATURE_WAKEUP_MODE " +#endif + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + +/*! Struct that holds all involved on a Transceive including the context passed by the caller */ +typedef struct{ + rfalTransceiveState state; /*!< Current transceive state */ + rfalTransceiveState lastState; /*!< Last transceive state (debug purposes) */ + ReturnCode status; /*!< Current status/error of the transceive */ + bool rxse; /*!< Flag indicating if RXE was received with RXS */ + + rfalTransceiveContext ctx; /*!< The transceive context given by the caller */ +} rfalTxRx; + + +/*! Struct that holds all context for the Listen Mode */ +typedef struct{ + rfalLmState state; /*!< Current Listen Mode state */ + rfalBitRate brDetected; /*!< Last bit rate detected */ + + uint8_t* rxBuf; /*!< Location to store incoming data in Listen Mode */ + uint16_t rxBufLen; /*!< Length of rxBuf */ + uint16_t* rxLen; /*!< Pointer to write the data length placed into rxBuf */ + bool dataFlag; /*!< Listen Mode current Data Flag */ +} rfalLm; + + +/*! Struct that holds all context for the Wake-Up Mode */ +typedef struct{ + rfalWumState state; /*!< Current Wake-Up Mode state */ + rfalWakeUpConfig cfg; /*!< Current Wake-Up Mode context */ +} rfalWum; + + +/*! Struct that holds the timings GT and FDTs */ +typedef struct{ + uint32_t GT; /*!< GT in 1/fc */ + uint32_t FDTListen; /*!< FDTListen in 1/fc */ + uint32_t FDTPoll; /*!< FDTPoll in 1/fc */ +} rfalTimings; + + +/*! Struct that holds the software timers */ +typedef struct{ + uint32_t GT; /*!< RFAL's GT timer */ + uint32_t FWT; /*!< FWT/RWT timer for Active P2P*/ + uint32_t RXE; /*!< Timer between RXS and RXE */ +} rfalTimers; + + +/*! Struct that holds the RFAL's callbacks */ +typedef struct{ + rfalPreTxRxCallback preTxRx; /*!< RFAL's Pre TxRx callback */ + rfalPostTxRxCallback postTxRx; /*!< RFAL's Post TxRx callback */ +} rfalCallbacks; + + +/*! Struct that holds counters to control the FIFO on Tx and Rx */ +typedef struct{ + uint16_t expWL; /*!< The amount of bytes expected to be Tx when a WL interrupt occours */ + uint16_t bytesTotal; /*!< Total bytes to be transmitted OR the total bytes received */ + uint16_t bytesWritten;/*!< Amount of bytes already written on FIFO (Tx) OR read (RX) from FIFO and written on rxBuffer*/ + uint8_t status[ST25R3911_FIFO_STATUS_LEN]; /*!< FIFO Status Registers */ +} rfalFIFO; + + +/*! Struct that holds RFAL's configuration settings */ +typedef struct{ + uint8_t obsvModeTx; /*!< RFAL's config of the ST25R3911's observation mode while Tx */ + uint8_t obsvModeRx; /*!< RFAL's config of the ST25R3911's observation mode while Rx */ + rfalEHandling eHandling; /*!< RFAL's error handling config/mode */ +} rfalConfigs; + + +/*! Struct that holds NFC-F data - Used only inside rfalFelicaPoll() (static to avoid adding it into stack) */ +typedef struct{ + rfalFeliCaPollRes pollResponses[RFAL_FELICA_POLL_MAX_SLOTS]; /* FeliCa Poll response container for 16 slots */ +} rfalNfcfWorkingData; + + +/*! Struct that holds NFC-V current context + * + * 96 bytes is FIFO size of ST25R3911, codingBuffer has to be big enough for coping with maximum response size (Manchester coded) + * - current implementation expects it be written in one bulk into FIFO + * - needs to be above FIFO water level of ST25R3911 (64) + * - 65 is actually 1 byte too much, but ~75us in 1of256 another byte is already gone + * + * - inventory requests responses: 14 bytes + * - Max read single block responses: 32 bytes + * - Read multiple block responses: variable + * + * ISO15693 frame: SOF + Flags + Data + CRC + EOF + */ +typedef struct{ + uint8_t codingBuffer[((2 + 255 + 3)*2)];/*!< Coding buffer, length MUST be above 64: [65; ...] */ + uint16_t nfcvOffset; /*!< Offset needed for ISO15693 coding function */ + rfalTransceiveContext origCtx; /*!< Context provided by user */ + uint16_t ignoreBits; /*!< Number of bits at the beginning of a frame to be ignored when decoding*/ +} rfalNfcvWorkingData; + + +/*! RFAL instance */ +typedef struct{ + rfalState state; /*!< RFAL's current state */ + rfalMode mode; /*!< RFAL's current mode */ + rfalBitRate txBR; /*!< RFAL's current Tx Bit Rate */ + rfalBitRate rxBR; /*!< RFAL's current Rx Bit Rate */ + bool field; /*!< Current field state (On / Off) */ + + rfalConfigs conf; /*!< RFAL's configuration settings */ + rfalTimings timings; /*!< RFAL's timing setting */ + rfalTxRx TxRx; /*!< RFAL's transceive management */ + rfalFIFO fifo; /*!< RFAL's FIFO management */ + rfalTimers tmr; /*!< RFAL's Software timers */ + rfalCallbacks callbacks; /*!< RFAL's callbacks */ + +#if RFAL_FEATURE_LISTEN_MODE + rfalLm Lm; /*!< RFAL's listen mode management */ +#endif /* RFAL_FEATURE_LISTEN_MODE */ + +#if RFAL_FEATURE_WAKEUP_MODE + rfalWum wum; /*!< RFAL's Wake-up mode management */ +#endif /* RFAL_FEATURE_WAKEUP_MODE */ + +#if RFAL_FEATURE_NFCF + rfalNfcfWorkingData nfcfData; /*!< RFAL's working data when supporting NFC-F */ +#endif /* RFAL_FEATURE_NFCF */ + +#if RFAL_FEATURE_NFCV + rfalNfcvWorkingData nfcvData; /*!< RFAL's working data when supporting NFC-V */ +#endif /* RFAL_FEATURE_NFCV */ + +} rfal; + + + +/*! Felica's command set */ +typedef enum +{ + FELICA_CMD_POLLING = 0x00, /*!< Felica Poll/REQC command (aka SENSF_REQ) to identify a card */ + FELICA_CMD_POLLING_RES = 0x01, /*!< Felica Poll/REQC command (aka SENSF_RES) response */ + FELICA_CMD_REQUEST_SERVICE = 0x02, /*!< verify the existence of Area and Service */ + FELICA_CMD_REQUEST_RESPONSE = 0x04, /*!< verify the existence of a card */ + FELICA_CMD_READ_WITHOUT_ENCRYPTION = 0x06, /*!< read Block Data from a Service that requires no authentication */ + FELICA_CMD_WRITE_WITHOUT_ENCRYPTION = 0x08, /*!< write Block Data to a Service that requires no authentication */ + FELICA_CMD_REQUEST_SYSTEM_CODE = 0x0c, /*!< acquire the System Code registered to a card */ + FELICA_CMD_AUTHENTICATION1 = 0x10, /*!< authenticate a card */ + FELICA_CMD_AUTHENTICATION2 = 0x12, /*!< allow a card to authenticate a Reader/Writer */ + FELICA_CMD_READ = 0x14, /*!< read Block Data from a Service that requires authentication */ + FELICA_CMD_WRITE = 0x16, /*!< write Block Data to a Service that requires authentication */ +}t_rfalFeliCaCmd; + +/* +****************************************************************************** +* GLOBAL DEFINES +****************************************************************************** +*/ + +#define RFAL_FIFO_IN_LT_32 32U /*!< Number of bytes in the FIFO when WL interrupt occurs while Tx ( fifo_lt: 0 ) */ +#define RFAL_FIFO_IN_LT_16 16U /*!< Number of bytes in the FIFO when WL interrupt occurs while Tx ( fifo_lt: 1 ) */ + +#define RFAL_FIFO_OUT_LT_32 (ST25R3911_FIFO_DEPTH - RFAL_FIFO_IN_LT_32) /*!< Number of bytes sent/out of the FIFO when WL interrupt occurs while Tx ( fifo_lt: 0 ) */ +#define RFAL_FIFO_OUT_LT_16 (ST25R3911_FIFO_DEPTH - RFAL_FIFO_IN_LT_16) /*!< Number of bytes sent/out of the FIFO when WL interrupt occurs while Tx ( fifo_lt: 1 ) */ + +#define RFAL_FIFO_STATUS_REG1 0U /*!< Location of FIFO status register 1 in local copy */ +#define RFAL_FIFO_STATUS_REG2 1U /*!< Location of FIFO status register 2 in local copy */ +#define RFAL_FIFO_STATUS_INVALID 0xFFU /*!< Value indicating that the local FIFO status in invalid|cleared */ + +#define RFAL_ST25R3911_GPT_MAX_1FC rfalConv8fcTo1fc( 0xFFFFU ) /*!< Max GPT steps in 1fc (0xFFFF steps of 8/fc => 0xFFFF * 590ns = 38,7ms) */ +#define RFAL_ST25R3911_NRT_MAX_1FC rfalConv4096fcTo1fc( 0xFFFFU ) /*!< Max NRT steps in 1fc (0xFFFF steps of 4096/fc => 0xFFFF * 302us = 19.8s ) */ +#define RFAL_ST25R3911_NRT_DISABLED 0U /*!< NRT Disabled: All 0 No-response timer is not started, wait forever */ +#define RFAL_ST25R3911_MRT_MAX_1FC rfalConv64fcTo1fc( 0x00FFU ) /*!< Max MRT steps in 1fc (0x00FF steps of 64/fc => 0x00FF * 4.72us = 1.2ms ) */ +#define RFAL_ST25R3911_MRT_MIN_1FC rfalConv64fcTo1fc( 0x0004U ) /*!< Min MRT steps in 1fc ( 0<=mrt<=4 ; 4 (64/fc) => 0x0004 * 4.72us = 18.88us ) */ +#define RFAL_ST25R3911_GT_MAX_1FC rfalConvMsTo1fc( 5000U ) /*!< Max GT value allowed in 1/fc */ +#define RFAL_ST25R3911_GT_MIN_1FC rfalConvMsTo1fc(RFAL_ST25R3911_SW_TMR_MIN_1MS) /*!< Min GT value allowed in 1/fc */ +#define RFAL_ST25R3911_SW_TMR_MIN_1MS 1U /*!< Min value of a SW timer in ms */ + +#define RFAL_OBSMODE_DISABLE 0x00U /*!< Observation Mode disabled */ + +#define RFAL_NFC_RX_INCOMPLETE_LEN (uint8_t)1U /*!< Threshold value where incoming rx may be considered as incomplete in NFC */ +#define RFAL_EMVCO_RX_MAXLEN (uint8_t)4U /*!< Maximum value where EMVCo to apply special error handling */ +#define RFAL_EMVCO_RX_MINLEN (uint8_t)2U /*!< Minimum value where EMVCo to apply special error handling */ + +#define RFAL_NORXE_TOUT 10U /*!< Timeout to be used on a potential missing RXE - Silicon ST25R3911B Errata #1.1 */ + +#define RFAL_ISO14443A_SDD_RES_LEN 5U /*!< SDD_RES | Anticollision (UID CLn) length - rfalNfcaSddRes */ + +#define RFAL_FELICA_POLL_DELAY_TIME 512U /*!< FeliCa Poll Processing time is 2.417 ms ~512*64/fc Digital 1.1 A4 */ +#define RFAL_FELICA_POLL_SLOT_TIME 256U /*!< FeliCa Poll Time Slot duration is 1.208 ms ~256*64/fc Digital 1.1 A4 */ + +#define RFAL_ISO15693_IGNORE_BITS rfalConvBytesToBits(2U) /*!< Ignore collisions before the UID (RES_FLAG + DSFID) */ + + +/*******************************************************************************/ + +#define RFAL_LM_GT rfalConvUsTo1fc(100U) /*!< Listen Mode Guard Time enforced (GT - Passive; TIRFG - Active) */ +#define RFAL_FDT_POLL_ADJUSTMENT rfalConvUsTo1fc(80U) /*!< FDT Poll adjustment: Time between the expiration of GPT to the actual Tx */ +#define RFAL_FDT_LISTEN_MRT_ADJUSTMENT 64U /*!< MRT jitter adjustment: timeout will be between [ tout ; tout + 64 cycles ] */ +#define RFAL_AP2P_FIELDOFF_TRFW rfalConv8fcTo1fc(64U) /*!< Time after TXE and Field Off in AP2P Trfw: 37.76us -> 64 (8/fc) */ + + +/*! FWT adjustment: + * 64 : NRT jitter between TXE and NRT start */ +#define RFAL_FWT_ADJUSTMENT 64U + +/*! FWT ISO14443A adjustment: + * 512 : Initial 4bit length */ +#define RFAL_FWT_A_ADJUSTMENT 512U + +/*! FWT ISO14443B adjustment: + * 2784 : Adjustment for the SOF and initial byte */ +#define RFAL_FWT_B_ADJUSTMENT 2784U + + +/*! FWT FeliCa 212 adjustment: + * 1024 : Length of the two Sync bytes at 212kbps */ +#define RFAL_FWT_F_212_ADJUSTMENT 1024U + +/*! FWT FeliCa 424 adjustment: + * 512 : Length of the two Sync bytes at 424kbps */ +#define RFAL_FWT_F_424_ADJUSTMENT 512U + + +/*! Time between our field Off and other peer field On : Tadt + (n x Trfw) + * Ecma 340 11.1.2 - Tadt: [56.64 , 188.72] us ; n: [0 , 3] ; Trfw = 37.76 us + * Should be: 189 + (3*38) = 303us ; we'll use a more relaxed setting: 605 us */ +#define RFAL_AP2P_FIELDON_TADTTRFW rfalConvUsTo1fc(605U) + + +/*! FDT Listen adjustment for ISO14443A EMVCo 2.6 4.8.1.3 ; Digital 1.1 6.10 + * + * 276: Time from the rising pulse of the pause of the logic '1' (i.e. the time point to measure the deaftime from), + * to the actual end of the EOF sequence (the point where the MRT starts). Please note that the ST25R391x uses the + * ISO14443-2 definition where the EOF consists of logic '0' followed by sequence Y. + */ +#define RFAL_FDT_LISTEN_A_ADJUSTMENT 276U + + +/*! FDT Listen adjustment for ISO14443B EMVCo 2.6 4.8.1.6 ; Digital 1.1 7.9 + * + * 340: Time from the rising edge of the EoS to the starting point of the MRT timer (sometime after the final high + * part of the EoS is completed). + * + * -64: Adjustment for the TR1PUTMIN. + * The TR1PUTMIN of the ST25R3911 is 1152/fc (72/fs). The EMVCo test case TB0000 measures the TR1PUTMIN. + * It takes the default value of TR1PUTMIN (79/fs) and reduces it by 128/fc in every iteration. + * This results in a TR1PUTMIN of 1136/fc (71/fs) for the second iteration. The ST25R3911 sends a NAK because + * the TR1PUTMIN of the ST25R3911 (72/fs) is higher than 71/fs. + * Therefore the test suite assumes TR1PUTMIN of 1264/fc (79/fs). + * The test cases TB340.0 and TB435.0 uses the TR1PUTMIN to send frames too early. In order to correctly + * recognise these frames as being sent too early (starting inside reader deaf time), the MRT has to be + * increased by at least 64/fc (8/fs). + */ +#define RFAL_FDT_LISTEN_B_ADJUSTMENT (340U - 64U) + + +/*! FDT Listen adjustment for ISO15693 + * ISO15693 2000 8.4 t1 MIN = 4192/fc + * ISO15693 2009 9.1 t1 MIN = 4320/fc + * Digital 2.1 B.5 FDTV,LISTEN,MIN = 4310/fc + * Set FDT Listen one step earlier than on the more recent spec versions for greater interoprability + */ +#define RFAL_FDT_LISTEN_V_ADJUSTMENT 128U + + + +/* +****************************************************************************** +* GLOBAL MACROS +****************************************************************************** +*/ + +#define rfalCalcNumBytes( nBits ) (((uint32_t)(nBits) + 7U) / 8U) /*!< Returns the number of bytes required to fit given the number of bits */ + +#define rfalTimerStart( timer, time_ms ) (timer) = platformTimerCreate((uint16_t)(time_ms)) /*!< Configures and starts the RTOX timer */ +#define rfalTimerisExpired( timer ) platformTimerIsExpired( timer ) /*!< Checks if timer has expired */ + +#define rfalST25R3911ObsModeDisable() st25r3911WriteTestRegister(0x01U, 0x00U) /*!< Disable ST25R3911 Observation mode */ +#define rfalST25R3911ObsModeTx() st25r3911WriteTestRegister(0x01U, gRFAL.conf.obsvModeTx) /*!< Enable Observation mode 0x0A CSI: Digital TX modulation signal CSO: none */ +#define rfalST25R3911ObsModeRx() st25r3911WriteTestRegister(0x01U, gRFAL.conf.obsvModeRx) /*!< Enable Observation mode 0x04 CSI: Digital output of AM channel CSO: Digital output of PM channel */ + + +#define rfalCheckDisableObsMode() if(gRFAL.conf.obsvModeRx != 0U){ rfalST25R3911ObsModeDisable(); } /*!< Checks if the observation mode is enabled, and applies on ST25R3911 */ +#define rfalCheckEnableObsModeTx() if(gRFAL.conf.obsvModeTx != 0U){ rfalST25R3911ObsModeTx(); } /*!< Checks if the observation mode is enabled, and applies on ST25R3911 */ +#define rfalCheckEnableObsModeRx() if(gRFAL.conf.obsvModeRx != 0U){ rfalST25R3911ObsModeRx(); } /*!< Checks if the observation mode is enabled, and applies on ST25R3911 */ + + +#define rfalGetIncmplBits( FIFOStatus2 ) (( (FIFOStatus2) >> 1) & 0x07U) /*!< Returns the number of bits from fifo status */ +#define rfalIsIncompleteByteError( error ) (((error) >= ERR_INCOMPLETE_BYTE) && ((error) <= ERR_INCOMPLETE_BYTE_07)) /*!< Checks if given error is a Incomplete error */ + +#define rfalAdjACBR( b ) (((uint16_t)(b) >= (uint16_t)RFAL_BR_52p97) ? (uint16_t)(b) : ((uint16_t)(b)+1U)) /*!< Adjusts ST25R391x Bit rate to Analog Configuration */ +#define rfalConvBR2ACBR( b ) (((rfalAdjACBR((b)))<din; + streamConf.dout = isoStreamConfig->dout; + streamConf.report_period_length = isoStreamConfig->report_period_length; + streamConf.useBPSK = isoStreamConfig->useBPSK; + st25r3911StreamConfigure(&streamConf); + } + + /* Set Analog configurations for this bit rate */ + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_TECH_CHIP | RFAL_ANALOG_CONFIG_CHIP_POLL_COMMON) ); + rfalSetAnalogConfig( (rfalAnalogConfigId)(RFAL_ANALOG_CONFIG_POLL | RFAL_ANALOG_CONFIG_TECH_NFCV | rfalConvBR2ACBR(gRFAL.txBR) | RFAL_ANALOG_CONFIG_TX ) ); + rfalSetAnalogConfig( (rfalAnalogConfigId)(RFAL_ANALOG_CONFIG_POLL | RFAL_ANALOG_CONFIG_TECH_NFCV | rfalConvBR2ACBR(gRFAL.rxBR) | RFAL_ANALOG_CONFIG_RX ) ); + break; + + #endif /* RFAL_FEATURE_NFCV */ + + + /*******************************************************************************/ + case RFAL_MODE_POLL_ACTIVE_P2P: + + /* Set Analog configurations for this bit rate */ + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_TECH_CHIP | RFAL_ANALOG_CONFIG_CHIP_POLL_COMMON) ); + rfalSetAnalogConfig( (rfalAnalogConfigId)(RFAL_ANALOG_CONFIG_POLL | RFAL_ANALOG_CONFIG_TECH_AP2P | rfalConvBR2ACBR(gRFAL.txBR) | RFAL_ANALOG_CONFIG_TX ) ); + rfalSetAnalogConfig( (rfalAnalogConfigId)(RFAL_ANALOG_CONFIG_POLL | RFAL_ANALOG_CONFIG_TECH_AP2P | rfalConvBR2ACBR(gRFAL.rxBR) | RFAL_ANALOG_CONFIG_RX ) ); + break; + + /*******************************************************************************/ + case RFAL_MODE_LISTEN_ACTIVE_P2P: + + /* Set Analog configurations for this bit rate */ + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_TECH_CHIP | RFAL_ANALOG_CONFIG_CHIP_LISTEN_COMMON) ); + rfalSetAnalogConfig( (rfalAnalogConfigId)(RFAL_ANALOG_CONFIG_LISTEN | RFAL_ANALOG_CONFIG_TECH_AP2P | rfalConvBR2ACBR(gRFAL.txBR) | RFAL_ANALOG_CONFIG_TX ) ); + rfalSetAnalogConfig( (rfalAnalogConfigId)(RFAL_ANALOG_CONFIG_LISTEN | RFAL_ANALOG_CONFIG_TECH_AP2P | rfalConvBR2ACBR(gRFAL.rxBR) | RFAL_ANALOG_CONFIG_RX ) ); + break; + + /*******************************************************************************/ + case RFAL_MODE_LISTEN_NFCA: + case RFAL_MODE_LISTEN_NFCB: + case RFAL_MODE_LISTEN_NFCF: + case RFAL_MODE_NONE: + return ERR_WRONG_STATE; + + /*******************************************************************************/ + default: + return ERR_NOT_IMPLEMENTED; + } + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalGetBitRate( rfalBitRate *txBR, rfalBitRate *rxBR ) +{ + if( (gRFAL.state == RFAL_STATE_IDLE) || (gRFAL.mode == RFAL_MODE_NONE) ) + { + return ERR_WRONG_STATE; + } + + if( txBR != NULL ) + { + *txBR = gRFAL.txBR; + } + + if( rxBR != NULL ) + { + *rxBR = gRFAL.rxBR; + } + + return ERR_NONE; +} + + +/*******************************************************************************/ +void rfalSetErrorHandling( rfalEHandling eHandling ) +{ + gRFAL.conf.eHandling = eHandling; +} + + +/*******************************************************************************/ +rfalEHandling rfalGetErrorHandling( void ) +{ + return gRFAL.conf.eHandling; +} + + +/*******************************************************************************/ +void rfalSetFDTPoll( uint32_t FDTPoll ) +{ + gRFAL.timings.FDTPoll = MIN( FDTPoll, RFAL_ST25R3911_GPT_MAX_1FC ); +} + + +/*******************************************************************************/ +uint32_t rfalGetFDTPoll( void ) +{ + return gRFAL.timings.FDTPoll; +} + + +/*******************************************************************************/ +void rfalSetFDTListen( uint32_t FDTListen ) +{ + gRFAL.timings.FDTListen = MIN( FDTListen, RFAL_ST25R3911_MRT_MAX_1FC); +} + +/*******************************************************************************/ +uint32_t rfalGetFDTListen( void ) +{ + return gRFAL.timings.FDTListen; +} + +void rfalSetGT( uint32_t GT ) +{ + gRFAL.timings.GT = MIN( GT, RFAL_ST25R3911_GT_MAX_1FC ); +} + +/*******************************************************************************/ +uint32_t rfalGetGT( void ) +{ + return gRFAL.timings.GT; +} + +/*******************************************************************************/ +bool rfalIsGTExpired( void ) +{ + if( gRFAL.tmr.GT != RFAL_TIMING_NONE ) + { + if( !rfalTimerisExpired( gRFAL.tmr.GT ) ) + { + return false; + } + } + return true; +} + +/*******************************************************************************/ +ReturnCode rfalFieldOnAndStartGT( void ) +{ + ReturnCode ret; + + /* Check if RFAL has been initialized (Oscillator should be running) and also + * if a direct register access has been performed and left the Oscillator Off */ + if( !st25r3911IsOscOn() || (gRFAL.state < RFAL_STATE_INIT) ) + { + return ERR_WRONG_STATE; + } + + ret = ERR_NONE; + + /* Set Analog configurations for Field On event */ + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_TECH_CHIP | RFAL_ANALOG_CONFIG_CHIP_FIELD_ON) ); + + /*******************************************************************************/ + /* Perform collision avoidance and turn field On if not already On */ + if( !st25r3911IsTxEnabled() || !gRFAL.field ) + { + /* Use Thresholds set by AnalogConfig */ + ret = st25r3911PerformCollisionAvoidance( ST25R3911_CMD_RESPONSE_RF_COLLISION_0, ST25R3911_THRESHOLD_DO_NOT_SET, ST25R3911_THRESHOLD_DO_NOT_SET, 0 ); + + gRFAL.field = st25r3911IsTxEnabled(); + + /* Only turn on Receiver and Transmitter if field was successfully turned On */ + if(gRFAL.field) + { + st25r3911TxRxOn(); /* Enable Tx and Rx (Tx is already On) */ + } + } + + /*******************************************************************************/ + /* Start GT timer in case the GT value is set */ + if( (gRFAL.timings.GT != RFAL_TIMING_NONE) ) + { + /* Ensure that a SW timer doesn't have a lower value then the minimum */ + rfalTimerStart( gRFAL.tmr.GT, rfalConv1fcToMs( MAX( (gRFAL.timings.GT), RFAL_ST25R3911_GT_MIN_1FC) ) ); + } + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalFieldOff( void ) +{ + /* Check whether a TxRx is not yet finished */ + if( gRFAL.TxRx.state != RFAL_TXRX_STATE_IDLE ) + { + rfalCleanupTransceive(); + } + + /* Disable Tx and Rx */ + st25r3911TxRxOff(); + + /* Set Analog configurations for Field Off event */ + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_TECH_CHIP | RFAL_ANALOG_CONFIG_CHIP_FIELD_OFF) ); + gRFAL.field = false; + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalStartTransceive( const rfalTransceiveContext *ctx ) +{ + uint32_t FxTAdj; /* FWT or FDT adjustment calculation */ + + /* Check for valid parameters */ + if( ctx == NULL ) + { + return ERR_PARAM; + } + + /* Ensure that RFAL is already Initialized and the mode has been set */ + if( (gRFAL.state >= RFAL_STATE_MODE_SET) /*&& (gRFAL.TxRx.state == RFAL_TXRX_STATE_INIT )*/ ) + { + /*******************************************************************************/ + /* Check whether the field is already On, otherwise no TXE will be received */ + if( !st25r3911IsTxEnabled() && (!rfalIsModePassiveListen( gRFAL.mode ) && (ctx->txBuf != NULL)) ) + { + return ERR_WRONG_STATE; + } + + gRFAL.TxRx.ctx = *ctx; + + /*******************************************************************************/ + if( gRFAL.timings.FDTListen != RFAL_TIMING_NONE ) + { + /* Calculate MRT adjustment accordingly to the current mode */ + FxTAdj = RFAL_FDT_LISTEN_MRT_ADJUSTMENT; + if(gRFAL.mode == RFAL_MODE_POLL_NFCA) { FxTAdj += (uint32_t)RFAL_FDT_LISTEN_A_ADJUSTMENT; } + if(gRFAL.mode == RFAL_MODE_POLL_NFCA_T1T) { FxTAdj += (uint32_t)RFAL_FDT_LISTEN_A_ADJUSTMENT; } + if(gRFAL.mode == RFAL_MODE_POLL_NFCB) { FxTAdj += (uint32_t)RFAL_FDT_LISTEN_B_ADJUSTMENT; } + if(gRFAL.mode == RFAL_MODE_POLL_NFCV) { FxTAdj += (uint32_t)RFAL_FDT_LISTEN_V_ADJUSTMENT; } + + + /* Set Minimum FDT(Listen) in which PICC is not allowed to send a response */ + st25r3911WriteRegister( ST25R3911_REG_MASK_RX_TIMER, (uint8_t)rfalConv1fcTo64fc( (FxTAdj > gRFAL.timings.FDTListen) ? RFAL_ST25R3911_MRT_MIN_1FC : (gRFAL.timings.FDTListen - FxTAdj) ) ); + } + + /*******************************************************************************/ + /* FDT Poll will be loaded in rfalPrepareTransceive() once the previous was expired */ + + /*******************************************************************************/ + if( rfalIsModePassiveComm( gRFAL.mode ) ) /* Passive Comms */ + { + if( (gRFAL.TxRx.ctx.fwt != RFAL_FWT_NONE) && (gRFAL.TxRx.ctx.fwt != 0U) ) + { + /* Ensure proper timing configuration */ + if( gRFAL.timings.FDTListen >= gRFAL.TxRx.ctx.fwt ) + { + return ERR_PARAM; + } + + FxTAdj = RFAL_FWT_ADJUSTMENT; + if(gRFAL.mode == RFAL_MODE_POLL_NFCA) { FxTAdj += (uint32_t)RFAL_FWT_A_ADJUSTMENT; } + if(gRFAL.mode == RFAL_MODE_POLL_NFCA_T1T) { FxTAdj += (uint32_t)RFAL_FWT_A_ADJUSTMENT; } + if(gRFAL.mode == RFAL_MODE_POLL_NFCB) { FxTAdj += (uint32_t)RFAL_FWT_B_ADJUSTMENT; } + if(gRFAL.mode == RFAL_MODE_POLL_NFCF) + { + FxTAdj += (uint32_t)((gRFAL.txBR == RFAL_BR_212) ? RFAL_FWT_F_212_ADJUSTMENT : RFAL_FWT_F_424_ADJUSTMENT ); + } + + /* Ensure that the given FWT doesn't exceed NRT maximum */ + gRFAL.TxRx.ctx.fwt = MIN( (gRFAL.TxRx.ctx.fwt + FxTAdj), RFAL_ST25R3911_NRT_MAX_1FC ); + + /* Set FWT in the NRT */ + st25r3911SetNoResponseTime_64fcs( rfalConv1fcTo64fc( gRFAL.TxRx.ctx.fwt ) ); + } + else + { + /* Disable NRT, no NRE will be triggered, therefore wait endlessly for Rx */ + st25r3911SetNoResponseTime_64fcs( RFAL_ST25R3911_NRT_DISABLED ); + } + } + else /* Active Comms */ + { + /* Setup NRT timer for rf response RF collision timeout. */ + st25r3911SetNoResponseTime_64fcs( rfalConv1fcTo64fc(RFAL_AP2P_FIELDON_TADTTRFW) ); + + /* In Active Mode No Response Timer cannot be used to measure FWT a SW timer is used instead */ + } + + gRFAL.state = RFAL_STATE_TXRX; + gRFAL.TxRx.state = RFAL_TXRX_STATE_TX_IDLE; + gRFAL.TxRx.status = ERR_BUSY; + gRFAL.TxRx.rxse = false; + + #if RFAL_FEATURE_NFCV + /*******************************************************************************/ + if( (RFAL_MODE_POLL_NFCV == gRFAL.mode) || (RFAL_MODE_POLL_PICOPASS == gRFAL.mode) ) + { /* Exchange receive buffer with internal buffer */ + gRFAL.nfcvData.origCtx = gRFAL.TxRx.ctx; + + gRFAL.TxRx.ctx.rxBuf = ((gRFAL.nfcvData.origCtx.rxBuf != NULL) ? gRFAL.nfcvData.codingBuffer : NULL); + gRFAL.TxRx.ctx.rxBufLen = (uint16_t)rfalConvBytesToBits(sizeof(gRFAL.nfcvData.codingBuffer)); + gRFAL.TxRx.ctx.flags = (uint32_t)RFAL_TXRX_FLAGS_CRC_TX_MANUAL + | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_KEEP + | (uint32_t)RFAL_TXRX_FLAGS_NFCIP1_OFF + | (uint32_t)(gRFAL.nfcvData.origCtx.flags & (uint32_t)RFAL_TXRX_FLAGS_AGC_OFF) + | (uint32_t)RFAL_TXRX_FLAGS_PAR_RX_KEEP + | (uint32_t)RFAL_TXRX_FLAGS_PAR_TX_NONE; + + /* In NFCV a TxRx with a valid txBuf and txBufSize==0 indicates to send an EOF */ + /* Skip logic below that would go directly into receive */ + if ( gRFAL.TxRx.ctx.txBuf != NULL ) + { + return ERR_NONE; + } + } + #endif /* RFAL_FEATURE_NFCV */ + + + /*******************************************************************************/ + /* Check if the Transceive start performing Tx or goes directly to Rx */ + if( (gRFAL.TxRx.ctx.txBuf == NULL) || (gRFAL.TxRx.ctx.txBufLen == 0U) ) + { + /* Clear FIFO, Clear and Enable the Interrupts */ + rfalPrepareTransceive( ); + + /* Disable our field upon a Rx reEnable on AP2P */ + if( rfalIsModeActiveComm(gRFAL.mode) ) + { + st25r3911TxOff(); + } + + /* No Tx done, enable the Receiver */ + st25r3911ExecuteCommand( ST25R3911_CMD_UNMASK_RECEIVE_DATA ); + + /* Start NRT manually, if FWT = 0 (wait endlessly for Rx) chip will ignore anyhow */ + st25r3911ExecuteCommand( ST25R3911_CMD_START_NO_RESPONSE_TIMER ); + + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_IDLE; + } + + return ERR_NONE; + } + + return ERR_WRONG_STATE; +} + + +/*******************************************************************************/ +bool rfalIsTransceiveInTx( void ) +{ + return ( (gRFAL.TxRx.state >= RFAL_TXRX_STATE_TX_IDLE) && (gRFAL.TxRx.state < RFAL_TXRX_STATE_RX_IDLE) ); +} + + +/*******************************************************************************/ +bool rfalIsTransceiveInRx( void ) +{ + return (gRFAL.TxRx.state >= RFAL_TXRX_STATE_RX_IDLE); +} + + +/*******************************************************************************/ +ReturnCode rfalTransceiveBlockingTx( uint8_t* txBuf, uint16_t txBufLen, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t* actLen, uint32_t flags, uint32_t fwt ) +{ + ReturnCode ret; + rfalTransceiveContext ctx; + + rfalCreateByteFlagsTxRxContext( ctx, txBuf, txBufLen, rxBuf, rxBufLen, actLen, flags, fwt ); + EXIT_ON_ERR( ret, rfalStartTransceive( &ctx ) ); + + return rfalTransceiveRunBlockingTx(); +} + + +/*******************************************************************************/ +static ReturnCode rfalTransceiveRunBlockingTx( void ) +{ + ReturnCode ret; + + do{ + rfalWorker(); + ret = rfalGetTransceiveStatus(); + } + while( rfalIsTransceiveInTx() && (ret == ERR_BUSY) ); + + if( rfalIsTransceiveInRx() ) + { + return ERR_NONE; + } + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalTransceiveBlockingRx( void ) +{ + ReturnCode ret; + + do{ + rfalWorker(); + ret = rfalGetTransceiveStatus(); + } + while( rfalIsTransceiveInRx() && (ret == ERR_BUSY) ); + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalTransceiveBlockingTxRx( uint8_t* txBuf, uint16_t txBufLen, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t* actLen, uint32_t flags, uint32_t fwt ) +{ + ReturnCode ret; + + EXIT_ON_ERR( ret, rfalTransceiveBlockingTx( txBuf, txBufLen, rxBuf, rxBufLen, actLen, flags, fwt ) ); + ret = rfalTransceiveBlockingRx(); + + /* Convert received bits to bytes */ + if( actLen != NULL ) + { + *actLen = rfalConvBitsToBytes(*actLen); + } + + return ret; +} + + +/*******************************************************************************/ +static ReturnCode rfalRunTransceiveWorker( void ) +{ + if( gRFAL.state == RFAL_STATE_TXRX ) + { + /* Run Tx or Rx state machines */ + if( rfalIsTransceiveInTx() ) + { + rfalTransceiveTx(); + return rfalGetTransceiveStatus(); + } + + if( rfalIsTransceiveInRx() ) + { + rfalTransceiveRx(); + return rfalGetTransceiveStatus(); + } + } + return ERR_WRONG_STATE; +} + +/*******************************************************************************/ +rfalTransceiveState rfalGetTransceiveState( void ) +{ + return gRFAL.TxRx.state; +} + +ReturnCode rfalGetTransceiveStatus( void ) +{ + return ((gRFAL.TxRx.state == RFAL_TXRX_STATE_IDLE) ? gRFAL.TxRx.status : ERR_BUSY); +} + + +/*******************************************************************************/ +ReturnCode rfalGetTransceiveRSSI( uint16_t *rssi ) +{ + uint16_t amRSSI; + uint16_t pmRSSI; + + if( rssi == NULL ) + { + return ERR_PARAM; + } + + /* Check if Manual channel is enabled */ + if( st25r3911CheckReg( ST25R3911_REG_OP_CONTROL, ST25R3911_REG_OP_CONTROL_rx_man, ST25R3911_REG_OP_CONTROL_rx_man ) ) + { + st25r3911GetRSSI( &amRSSI, &pmRSSI ); + + /* Check which channel is selected */ + *rssi = ( st25r3911CheckReg( ST25R3911_REG_RX_CONF1, ST25R3911_REG_RX_CONF1_ch_sel, ST25R3911_REG_RX_CONF1_ch_sel ) ? pmRSSI : amRSSI ); + return ERR_NONE; + } + + *rssi = 0; + return ERR_NOTSUPP; +} + + +/*******************************************************************************/ +void rfalWorker( void ) +{ + platformProtectWorker(); /* Protect RFAL Worker/Task/Process */ + + switch( gRFAL.state ) + { + case RFAL_STATE_TXRX: + rfalRunTransceiveWorker(); + break; + + #if RFAL_FEATURE_LISTEN_MODE + case RFAL_STATE_LM: + rfalRunListenModeWorker(); + break; + #endif /* RFAL_FEATURE_LISTEN_MODE */ + + #if RFAL_FEATURE_WAKEUP_MODE + case RFAL_STATE_WUM: + rfalRunWakeUpModeWorker(); + break; + #endif /* RFAL_FEATURE_WAKEUP_MODE */ + + /* Nothing to be done */ + default: + /* MISRA 16.4: no empty default statement (a comment being enough) */ + break; + } + + platformUnprotectWorker(); /* Unprotect RFAL Worker/Task/Process */ +} + + +/*******************************************************************************/ +static void rfalErrorHandling( void ) +{ + bool rxHasIncParError; + uint8_t fifoBytesToRead; + uint8_t reEnRx[] = { ST25R3911_CMD_CLEAR_FIFO, ST25R3911_CMD_UNMASK_RECEIVE_DATA }; + + + fifoBytesToRead = rfalFIFOStatusGetNumBytes(); + + + /*******************************************************************************/ + /* EMVCo */ + /*******************************************************************************/ + if( gRFAL.conf.eHandling == RFAL_ERRORHANDLING_EMVCO ) + { + /*******************************************************************************/ + /* EMD Handling - NFC Forum Digital 1.1 4.1.1.1 ; EMVCo 2.6 4.9.2 */ + /* ReEnable the receiver on frames with a length < 4 bytes, upon: */ + /* - Collision or Framing error detected */ + /* - Residual bits are detected (hard framing error) */ + /* - Parity error */ + /* - CRC error */ + /*******************************************************************************/ + + /* Check if reception has incompete bytes or parity error */ + rxHasIncParError = ( rfalFIFOStatusIsIncompleteByte() ? true : rfalFIFOStatusIsMissingPar() ); /* MISRA 13.5 */ + + /* In case there are residual bits decrement FIFO bytes */ + if( (fifoBytesToRead > 0U) && rxHasIncParError) + { + fifoBytesToRead--; + } + + if( ( (gRFAL.fifo.bytesTotal + fifoBytesToRead) < RFAL_EMVCO_RX_MAXLEN ) && + ( (gRFAL.TxRx.status == ERR_RF_COLLISION) || (gRFAL.TxRx.status == ERR_FRAMING) || + (gRFAL.TxRx.status == ERR_PAR) || (gRFAL.TxRx.status == ERR_CRC) || + rxHasIncParError ) ) + { + /* Ignore this reception, ReEnable receiver */ + st25r3911ExecuteCommands( reEnRx, sizeof(reEnRx) ); + + rfalFIFOStatusClear(); + gRFAL.fifo.bytesTotal = 0; + gRFAL.TxRx.status = ERR_BUSY; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_WAIT_RXS; + } + return; + } + + /*******************************************************************************/ + /* ISO14443A Mode */ + /*******************************************************************************/ + if( gRFAL.mode == RFAL_MODE_POLL_NFCA ) + { + + /*******************************************************************************/ + /* If we received one incomplete byte (not a block and a incomplete byte at * + * the end) we will raise a specific error ( support for T2T 4 bit ACK / NAK ) * + * Otherwise just leave it as an CRC/FRAMING/PAR error */ + /*******************************************************************************/ + if( (gRFAL.TxRx.status == ERR_PAR) || (gRFAL.TxRx.status == ERR_CRC) ) + { + if( rfalFIFOStatusIsIncompleteByte() && (fifoBytesToRead == RFAL_NFC_RX_INCOMPLETE_LEN) ) + { + st25r3911ReadFifo( (uint8_t*)(gRFAL.TxRx.ctx.rxBuf), fifoBytesToRead ); + if( (gRFAL.TxRx.ctx.rxRcvdLen) != NULL ) + { + *gRFAL.TxRx.ctx.rxRcvdLen = rfalFIFOGetNumIncompleteBits(); + } + + gRFAL.TxRx.status = ERR_INCOMPLETE_BYTE; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + } + } + } + +} + + +/*******************************************************************************/ +static void rfalCleanupTransceive( void ) +{ + /*******************************************************************************/ + /* Transceive flags */ + /*******************************************************************************/ + + /* Restore default settings on NFCIP1 mode, Receiving parity + CRC bits and manual Tx Parity*/ + st25r3911ClrRegisterBits( ST25R3911_REG_ISO14443A_NFC, (ST25R3911_REG_ISO14443A_NFC_no_tx_par | ST25R3911_REG_ISO14443A_NFC_no_rx_par | ST25R3911_REG_ISO14443A_NFC_nfc_f0) ); + + /* Restore AGC enabled */ + st25r3911SetRegisterBits( ST25R3911_REG_RX_CONF2, ST25R3911_REG_RX_CONF2_agc_en ); + + /*******************************************************************************/ + + + + /*******************************************************************************/ + /* Execute Post Transceive Callback */ + /*******************************************************************************/ + if( gRFAL.callbacks.postTxRx != NULL ) + { + gRFAL.callbacks.postTxRx(); + } + /*******************************************************************************/ + +} + + +/*******************************************************************************/ +static void rfalPrepareTransceive( void ) +{ + uint32_t maskInterrupts; + uint8_t reg; + + /*******************************************************************************/ + /* In the EMVCo mode the NRT will continue to run. * + * For the clear to stop it, the EMV mode has to be disabled before */ + st25r3911ClrRegisterBits( ST25R3911_REG_GPT_CONTROL, ST25R3911_REG_GPT_CONTROL_nrt_emv ); + + /* Reset receive logic */ + st25r3911ExecuteCommand( ST25R3911_CMD_CLEAR_FIFO ); + + /* Reset Rx Gain */ + st25r3911ExecuteCommand( ST25R3911_CMD_CLEAR_SQUELCH ); + + + /*******************************************************************************/ + /* FDT Poll */ + /*******************************************************************************/ + if( rfalIsModePassiveComm( gRFAL.mode ) ) /* Passive Comms */ + { + /* In Passive communications General Purpose Timer is used to measure FDT Poll */ + if( gRFAL.timings.FDTPoll != RFAL_TIMING_NONE ) + { + /* Configure GPT to start at RX end */ + st25r3911StartGPTimer_8fcs( (uint16_t)rfalConv1fcTo8fc( MIN( gRFAL.timings.FDTPoll, (gRFAL.timings.FDTPoll - RFAL_FDT_POLL_ADJUSTMENT) ) ), ST25R3911_REG_GPT_CONTROL_gptc_erx ); + } + } + + + /*******************************************************************************/ + /* Execute Pre Transceive Callback */ + /*******************************************************************************/ + if( gRFAL.callbacks.preTxRx != NULL ) + { + gRFAL.callbacks.preTxRx(); + } + /*******************************************************************************/ + + maskInterrupts = ( ST25R3911_IRQ_MASK_FWL | ST25R3911_IRQ_MASK_TXE | + ST25R3911_IRQ_MASK_RXS | ST25R3911_IRQ_MASK_RXE | + ST25R3911_IRQ_MASK_FWL | ST25R3911_IRQ_MASK_NRE | + ST25R3911_IRQ_MASK_PAR | ST25R3911_IRQ_MASK_CRC | + ST25R3911_IRQ_MASK_ERR1 | ST25R3911_IRQ_MASK_ERR2 ); + + + /*******************************************************************************/ + /* Transceive flags */ + /*******************************************************************************/ + + reg = (ST25R3911_REG_ISO14443A_NFC_no_tx_par_off | ST25R3911_REG_ISO14443A_NFC_no_rx_par_off | ST25R3911_REG_ISO14443A_NFC_nfc_f0_off); + + /* Check if NFCIP1 mode is to be enabled */ + if( (gRFAL.TxRx.ctx.flags & (uint8_t)RFAL_TXRX_FLAGS_NFCIP1_ON) != 0U ) + { + reg |= ST25R3911_REG_ISO14443A_NFC_nfc_f0; + } + + /* Check if Parity check is to be skipped and to keep the parity + CRC bits in FIFO */ + if( (gRFAL.TxRx.ctx.flags & (uint8_t)RFAL_TXRX_FLAGS_PAR_RX_KEEP) != 0U ) + { + reg |= ST25R3911_REG_ISO14443A_NFC_no_rx_par; + } + + /* Check if automatic Parity bits is to be disabled */ + if( (gRFAL.TxRx.ctx.flags & (uint8_t)RFAL_TXRX_FLAGS_PAR_TX_NONE) != 0U ) + { + reg |= ST25R3911_REG_ISO14443A_NFC_no_tx_par; + } + + /* Apply current TxRx flags on ISO14443A and NFC 106kb/s Settings Register */ + st25r3911ChangeRegisterBits( ST25R3911_REG_ISO14443A_NFC, (ST25R3911_REG_ISO14443A_NFC_no_tx_par | ST25R3911_REG_ISO14443A_NFC_no_rx_par | ST25R3911_REG_ISO14443A_NFC_nfc_f0), reg ); + + + /* Check if AGC is to be disabled */ + if( (gRFAL.TxRx.ctx.flags & (uint8_t)RFAL_TXRX_FLAGS_AGC_OFF) != 0U ) + { + st25r3911ClrRegisterBits( ST25R3911_REG_RX_CONF2, ST25R3911_REG_RX_CONF2_agc_en ); + } + else + { + st25r3911SetRegisterBits( ST25R3911_REG_RX_CONF2, ST25R3911_REG_RX_CONF2_agc_en ); + } + /*******************************************************************************/ + + + + /*******************************************************************************/ + /* EMVCo NRT mode */ + /*******************************************************************************/ + if( gRFAL.conf.eHandling == RFAL_ERRORHANDLING_EMVCO ) + { + st25r3911SetRegisterBits( ST25R3911_REG_GPT_CONTROL, ST25R3911_REG_GPT_CONTROL_nrt_emv ); + } + else + { + st25r3911ClrRegisterBits( ST25R3911_REG_GPT_CONTROL, ST25R3911_REG_GPT_CONTROL_nrt_emv ); + } + /*******************************************************************************/ + + + + /* In Active comms enable also External Field interrupts */ + if( rfalIsModeActiveComm( gRFAL.mode ) ) + { + maskInterrupts |= ( ST25R3911_IRQ_MASK_EOF | ST25R3911_IRQ_MASK_EON | ST25R3911_IRQ_MASK_CAT | ST25R3911_IRQ_MASK_CAC ); + } + + + /*******************************************************************************/ + /* clear and enable these interrupts */ + st25r3911GetInterrupt( maskInterrupts ); + st25r3911EnableInterrupts( maskInterrupts ); + + /* Clear FIFO status local copy */ + rfalFIFOStatusClear(); +} + +/*******************************************************************************/ +static void rfalTransceiveTx( void ) +{ + volatile uint32_t irqs; + uint16_t tmp; + ReturnCode ret; + + /* Supress warning in case NFC-V feature is disabled */ + ret = ERR_NONE; + NO_WARNING(ret); + + + irqs = ST25R3911_IRQ_MASK_NONE; + + if( gRFAL.TxRx.state != gRFAL.TxRx.lastState ) + { + /* rfalLogD( "RFAL: lastSt: %d curSt: %d \r\n", gRFAL.TxRx.lastState, gRFAL.TxRx.state ); */ + gRFAL.TxRx.lastState = gRFAL.TxRx.state; + } + + switch( gRFAL.TxRx.state ) + { + /*******************************************************************************/ + case RFAL_TXRX_STATE_TX_IDLE: + + /* Nothing to do */ + + gRFAL.TxRx.state = RFAL_TXRX_STATE_TX_WAIT_GT ; + /* fall through */ + + + /*******************************************************************************/ + case RFAL_TXRX_STATE_TX_WAIT_GT: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + + if( !rfalIsGTExpired() ) + { + break; + } + + gRFAL.tmr.GT = RFAL_TIMING_NONE; + + gRFAL.TxRx.state = RFAL_TXRX_STATE_TX_WAIT_FDT; + /* fall through */ + + + /*******************************************************************************/ + case RFAL_TXRX_STATE_TX_WAIT_FDT: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + + /* Only in Passive communications GPT is used to measure FDT Poll */ + if( rfalIsModePassiveComm( gRFAL.mode ) ) + { + if( st25r3911IsGPTRunning() ) + { + break; + } + } + + gRFAL.TxRx.state = RFAL_TXRX_STATE_TX_TRANSMIT; + /* fall through */ + + + /*******************************************************************************/ + case RFAL_TXRX_STATE_TX_TRANSMIT: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + + /* Clear FIFO, Clear and Enable the Interrupts */ + rfalPrepareTransceive( ); + + /* Calculate when Water Level Interrupt will be triggered */ + gRFAL.fifo.expWL = (uint16_t)( st25r3911CheckReg( ST25R3911_REG_IO_CONF1, ST25R3911_REG_IO_CONF1_fifo_lt, ST25R3911_REG_IO_CONF1_fifo_lt_16bytes) ? RFAL_FIFO_OUT_LT_16 : RFAL_FIFO_OUT_LT_32 ); + + #if RFAL_FEATURE_NFCV + /*******************************************************************************/ + /* In NFC-V streaming mode, the FIFO needs to be loaded with the coded bits */ + if( (RFAL_MODE_POLL_NFCV == gRFAL.mode) || (RFAL_MODE_POLL_PICOPASS == gRFAL.mode) ) + { + #if 0 + /* Debugging code: output the payload bits by writing into the FIFO and subsequent clearing */ + st25r3911WriteFifo(gRFAL.TxRx.ctx.txBuf, rfalConvBitsToBytes(gRFAL.TxRx.ctx.txBufLen)); + st25r3911ExecuteCommand( ST25R3911_CMD_CLEAR_FIFO ); + #endif + /* Calculate the bytes needed to be Written into FIFO (a incomplete byte will be added as 1byte) */ + gRFAL.nfcvData.nfcvOffset = 0; + ret = iso15693VCDCode(gRFAL.TxRx.ctx.txBuf, rfalConvBitsToBytes(gRFAL.TxRx.ctx.txBufLen), (((gRFAL.nfcvData.origCtx.flags & (uint32_t)RFAL_TXRX_FLAGS_CRC_TX_MANUAL) != 0U)?false:true),(((gRFAL.nfcvData.origCtx.flags & (uint32_t)RFAL_TXRX_FLAGS_NFCV_FLAG_MANUAL) != 0U)?false:true), (RFAL_MODE_POLL_PICOPASS == gRFAL.mode), + &gRFAL.fifo.bytesTotal, &gRFAL.nfcvData.nfcvOffset, gRFAL.nfcvData.codingBuffer, MIN( (uint16_t)ST25R3911_FIFO_DEPTH, (uint16_t)sizeof(gRFAL.nfcvData.codingBuffer) ), &gRFAL.fifo.bytesWritten); + + if( (ret != ERR_NONE) && (ret != ERR_AGAIN) ) + { + gRFAL.TxRx.status = ret; + gRFAL.TxRx.state = RFAL_TXRX_STATE_TX_FAIL; + break; + } + /* Set the number of full bytes and bits to be transmitted */ + st25r3911SetNumTxBits( rfalConvBytesToBits(gRFAL.fifo.bytesTotal) ); + + /* Load FIFO with coded bytes */ + /* TODO: check bytesWritten does not exceed 255 */ + st25r3911WriteFifo( gRFAL.nfcvData.codingBuffer, (uint8_t)gRFAL.fifo.bytesWritten ); + + } + /*******************************************************************************/ + else + #endif /* RFAL_FEATURE_NFCV */ + { + /* Calculate the bytes needed to be Written into FIFO (a incomplete byte will be added as 1byte) */ + gRFAL.fifo.bytesTotal = (uint16_t)rfalCalcNumBytes(gRFAL.TxRx.ctx.txBufLen); + + /* Set the number of full bytes and bits to be transmitted */ + st25r3911SetNumTxBits( gRFAL.TxRx.ctx.txBufLen ); + + /* Load FIFO with total length or FIFO's maximum */ + gRFAL.fifo.bytesWritten = MIN( gRFAL.fifo.bytesTotal, ST25R3911_FIFO_DEPTH ); + st25r3911WriteFifo( gRFAL.TxRx.ctx.txBuf, (uint8_t)gRFAL.fifo.bytesWritten ); + } + + /*Check if Observation Mode is enabled and set it on ST25R391x */ + rfalCheckEnableObsModeTx(); + + /*******************************************************************************/ + /* Trigger/Start transmission */ + if( (gRFAL.TxRx.ctx.flags & (uint32_t)RFAL_TXRX_FLAGS_CRC_TX_MANUAL) != 0U ) + { + st25r3911ExecuteCommand( ST25R3911_CMD_TRANSMIT_WITHOUT_CRC ); + } + else + { + st25r3911ExecuteCommand( ST25R3911_CMD_TRANSMIT_WITH_CRC ); + } + + /* Check if a WL level is expected or TXE should come */ + gRFAL.TxRx.state = (( gRFAL.fifo.bytesWritten < gRFAL.fifo.bytesTotal ) ? RFAL_TXRX_STATE_TX_WAIT_WL : RFAL_TXRX_STATE_TX_WAIT_TXE); + break; + + /*******************************************************************************/ + case RFAL_TXRX_STATE_TX_WAIT_WL: + + irqs = st25r3911GetInterrupt( (ST25R3911_IRQ_MASK_FWL | ST25R3911_IRQ_MASK_TXE) ); + if( irqs == ST25R3911_IRQ_MASK_NONE ) + { + break; /* No interrupt to process */ + } + + if( ((irqs & ST25R3911_IRQ_MASK_FWL) != 0U) && ((irqs & ST25R3911_IRQ_MASK_TXE) == 0U) ) + { + gRFAL.TxRx.state = RFAL_TXRX_STATE_TX_RELOAD_FIFO; + } + else + { + gRFAL.TxRx.status = ERR_IO; + gRFAL.TxRx.state = RFAL_TXRX_STATE_TX_FAIL; + break; + } + + /* fall through */ + + /*******************************************************************************/ + case RFAL_TXRX_STATE_TX_RELOAD_FIFO: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + + #if RFAL_FEATURE_NFCV + /*******************************************************************************/ + /* In NFC-V streaming mode, the FIFO needs to be loaded with the coded bits */ + if( (RFAL_MODE_POLL_NFCV == gRFAL.mode) || (RFAL_MODE_POLL_PICOPASS == gRFAL.mode) ) + { + uint16_t maxLen; + + /* Load FIFO with the remaining length or maximum available (which fit on the coding buffer) */ + maxLen = (uint16_t)MIN( (gRFAL.fifo.bytesTotal - gRFAL.fifo.bytesWritten), gRFAL.fifo.expWL); + maxLen = (uint16_t)MIN( maxLen, sizeof(gRFAL.nfcvData.codingBuffer) ); + tmp = 0; + + /* Calculate the bytes needed to be Written into FIFO (a incomplete byte will be added as 1byte) */ + ret = iso15693VCDCode(gRFAL.TxRx.ctx.txBuf, rfalConvBitsToBytes(gRFAL.TxRx.ctx.txBufLen), (((gRFAL.nfcvData.origCtx.flags & (uint32_t)RFAL_TXRX_FLAGS_CRC_TX_MANUAL) != 0U)?false:true), (((gRFAL.nfcvData.origCtx.flags & (uint32_t)RFAL_TXRX_FLAGS_NFCV_FLAG_MANUAL) != 0U)?false:true), (RFAL_MODE_POLL_PICOPASS == gRFAL.mode), + &gRFAL.fifo.bytesTotal, &gRFAL.nfcvData.nfcvOffset, gRFAL.nfcvData.codingBuffer, maxLen, &tmp); + + if( (ret != ERR_NONE) && (ret != ERR_AGAIN) ) + { + gRFAL.TxRx.status = ret; + gRFAL.TxRx.state = RFAL_TXRX_STATE_TX_FAIL; + break; + } + + /* Load FIFO with coded bytes */ + /* TODO: check tmp does not exceed 255 */ + st25r3911WriteFifo( gRFAL.nfcvData.codingBuffer, (uint8_t)tmp ); + } + /*******************************************************************************/ + else + #endif /* RFAL_FEATURE_NFCV */ + { + /* Load FIFO with the remaining length or maximum available */ + tmp = MIN( (gRFAL.fifo.bytesTotal - gRFAL.fifo.bytesWritten), gRFAL.fifo.expWL); /* tmp holds the number of bytes written on this iteration */ + /* TODO: check tmp does not exceed 255 */ + st25r3911WriteFifo( &gRFAL.TxRx.ctx.txBuf[gRFAL.fifo.bytesWritten], (uint8_t)tmp ); + } + + /* Update total written bytes to FIFO */ + gRFAL.fifo.bytesWritten += tmp; + + /* Check if a WL level is expected or TXE should come */ + gRFAL.TxRx.state = (( gRFAL.fifo.bytesWritten < gRFAL.fifo.bytesTotal ) ? RFAL_TXRX_STATE_TX_WAIT_WL : RFAL_TXRX_STATE_TX_WAIT_TXE); + break; + + + /*******************************************************************************/ + case RFAL_TXRX_STATE_TX_WAIT_TXE: + + irqs = st25r3911GetInterrupt( (ST25R3911_IRQ_MASK_FWL | ST25R3911_IRQ_MASK_TXE) ); + if( irqs == ST25R3911_IRQ_MASK_NONE ) + { + break; /* No interrupt to process */ + } + + + if( (irqs & ST25R3911_IRQ_MASK_TXE) != 0U ) + { + /* In Active comm start SW timer to measure FWT */ + if( rfalIsModeActiveComm( gRFAL.mode) && (gRFAL.TxRx.ctx.fwt != RFAL_FWT_NONE) && (gRFAL.TxRx.ctx.fwt != 0U) ) + { + rfalTimerStart( gRFAL.tmr.FWT, rfalConv1fcToMs( gRFAL.TxRx.ctx.fwt ) ); + } + + gRFAL.TxRx.state = RFAL_TXRX_STATE_TX_DONE; + } + else if( (irqs & ST25R3911_IRQ_MASK_FWL) != 0U ) + { + /*******************************************************************************/ + /* REMARK: Silicon workaround ST25R3911 Errata #TBD */ + /* ST25R3911 may send a WL even when all bytes have been written to FIFO */ + /*******************************************************************************/ + break; /* Ignore ST25R3911 FIFO WL if total TxLen is already on the FIFO */ + } + else + { + gRFAL.TxRx.status = ERR_IO; + gRFAL.TxRx.state = RFAL_TXRX_STATE_TX_FAIL; + break; + } + + /* fall through */ + + + /*******************************************************************************/ + case RFAL_TXRX_STATE_TX_DONE: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + + /* If no rxBuf is provided do not wait/expect Rx */ + if( gRFAL.TxRx.ctx.rxBuf == NULL ) + { + /*Check if Observation Mode was enabled and disable it on ST25R391x */ + rfalCheckDisableObsMode(); + + /* Clean up Transceive */ + rfalCleanupTransceive(); + + gRFAL.TxRx.status = ERR_NONE; + gRFAL.TxRx.state = RFAL_TXRX_STATE_IDLE; + break; + } + + rfalCheckEnableObsModeRx(); + + /* Goto Rx */ + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_IDLE; + break; + + /*******************************************************************************/ + case RFAL_TXRX_STATE_TX_FAIL: + + /* Error should be assigned by previous state */ + if( gRFAL.TxRx.status == ERR_BUSY ) + { + gRFAL.TxRx.status = ERR_SYSTEM; + } + + /*Check if Observation Mode was enabled and disable it on ST25R391x */ + rfalCheckDisableObsMode(); + + /* Clean up Transceive */ + rfalCleanupTransceive(); + + gRFAL.TxRx.state = RFAL_TXRX_STATE_IDLE; + break; + + /*******************************************************************************/ + default: + gRFAL.TxRx.status = ERR_SYSTEM; + gRFAL.TxRx.state = RFAL_TXRX_STATE_TX_FAIL; + break; + } +} + + +/*******************************************************************************/ +static void rfalTransceiveRx( void ) +{ + volatile uint32_t irqs; + uint8_t tmp; + uint8_t aux; + + irqs = ST25R3911_IRQ_MASK_NONE; + + if( gRFAL.TxRx.state != gRFAL.TxRx.lastState ) + { + /* rfalLogD( "RFAL: lastSt: %d curSt: %d \r\n", gRFAL.TxRx.lastState, gRFAL.TxRx.state ); */ + gRFAL.TxRx.lastState = gRFAL.TxRx.state; + } + + switch( gRFAL.TxRx.state ) + { + /*******************************************************************************/ + case RFAL_TXRX_STATE_RX_IDLE: + + /* Clear rx counters */ + gRFAL.fifo.bytesWritten = 0; // Total bytes written on RxBuffer + gRFAL.fifo.bytesTotal = 0; // Total bytes in FIFO will now be from Rx + if( gRFAL.TxRx.ctx.rxRcvdLen != NULL ) + { + *gRFAL.TxRx.ctx.rxRcvdLen = 0; + } + + gRFAL.TxRx.state = ( rfalIsModeActiveComm( gRFAL.mode ) ? RFAL_TXRX_STATE_RX_WAIT_EON : RFAL_TXRX_STATE_RX_WAIT_RXS ); + break; + + + /*******************************************************************************/ + case RFAL_TXRX_STATE_RX_WAIT_RXS: + + /*******************************************************************************/ + /* If in Active comm, Check if FWT SW timer has expired */ + if( rfalIsModeActiveComm( gRFAL.mode ) && (gRFAL.TxRx.ctx.fwt != RFAL_FWT_NONE) && (gRFAL.TxRx.ctx.fwt != 0U) ) + { + if( rfalTimerisExpired( gRFAL.tmr.FWT ) ) + { + gRFAL.TxRx.status = ERR_TIMEOUT; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + break; + } + } + + /*******************************************************************************/ + irqs = st25r3911GetInterrupt( ( ST25R3911_IRQ_MASK_RXS | ST25R3911_IRQ_MASK_NRE | ST25R3911_IRQ_MASK_EOF | ST25R3911_IRQ_MASK_RXE) ); + if( irqs == ST25R3911_IRQ_MASK_NONE ) + { + break; /* No interrupt to process */ + } + + + /*******************************************************************************/ + /* REMARK: Silicon workaround ST25R3911 Errata #1.7 */ + /* NRE interrupt may be triggered twice */ + /* Ignore NRE if is detected together with no Rx Start */ + /*******************************************************************************/ + + /* Only raise Timeout if NRE is detected with no Rx Start (NRT EMV mode) */ + if( ((irqs & ST25R3911_IRQ_MASK_NRE) != 0U) && ((irqs & ST25R3911_IRQ_MASK_RXS) == 0U) ) + { + gRFAL.TxRx.status = ERR_TIMEOUT; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + break; + } + + /* Only raise Link Loss if EOF is detected with no Rx Start */ + if( ((irqs & ST25R3911_IRQ_MASK_EOF) != 0U) && ((irqs & ST25R3911_IRQ_MASK_RXS) == 0U) ) + { + /* In AP2P a Field On has already occurred - treat this as timeout | mute */ + gRFAL.TxRx.status = ( rfalIsModeActiveComm( gRFAL.mode ) ? ERR_TIMEOUT : ERR_LINK_LOSS ); + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + break; + } + + if( (irqs & ST25R3911_IRQ_MASK_RXS) != 0U ) + { + /* If we got RXS + RXE together, jump directly into RFAL_TXRX_STATE_RX_ERR_CHECK */ + if( (irqs & ST25R3911_IRQ_MASK_RXE) != 0U ) + { + gRFAL.TxRx.rxse = true; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_ERR_CHECK; + break; + } + else + { + /*******************************************************************************/ + /* REMARK: Silicon workaround ST25R3911 Errata #1.1 */ + /* Rarely on corrupted frames I_rxs gets signaled but I_rxe is not signaled */ + /* Use a SW timer to handle an eventual missing RXE */ + rfalTimerStart( gRFAL.tmr.RXE, RFAL_NORXE_TOUT ); + /*******************************************************************************/ + + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_WAIT_RXE; + } + } + else if( (irqs & ST25R3911_IRQ_MASK_RXE) != 0U ) + { + /*******************************************************************************/ + /* REMARK: Silicon workaround ST25R3911 Errata #1.9 */ + /* ST25R3911 may indicate RXE without RXS previously, this happens upon some */ + /* noise or incomplete byte frames with less than 4 bits */ + /*******************************************************************************/ + + gRFAL.TxRx.status = ERR_IO; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + + rfalErrorHandling(); + break; + } + else + { + gRFAL.TxRx.status = ERR_IO; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + break; + } + + /* fall through */ + + + /*******************************************************************************/ + case RFAL_TXRX_STATE_RX_WAIT_RXE: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + + irqs = st25r3911GetInterrupt( (ST25R3911_IRQ_MASK_RXE | ST25R3911_IRQ_MASK_FWL | ST25R3911_IRQ_MASK_EOF) ); + if( irqs == ST25R3911_IRQ_MASK_NONE ) + { + /*******************************************************************************/ + /* REMARK: Silicon workaround ST25R3911B Errata #1.1 */ + /* ST25R3911 may indicate RXS without RXE afterwards, this happens rarely on */ + /* corrupted frames. */ + /* SW timer is used to timeout upon a missing RXE */ + if( rfalTimerisExpired( gRFAL.tmr.RXE ) ) + { + gRFAL.TxRx.status = ERR_FRAMING; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + } + /*******************************************************************************/ + + break; /* No interrupt to process */ + } + + if( ((irqs & ST25R3911_IRQ_MASK_FWL) != 0U) && ((irqs & ST25R3911_IRQ_MASK_RXE) == 0U) ) + { + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_READ_FIFO; + break; + } + + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_ERR_CHECK; + /* fall through */ + + + /*******************************************************************************/ + case RFAL_TXRX_STATE_RX_ERR_CHECK: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + + /* Retrieve and check for any error irqs */ + irqs |= st25r3911GetInterrupt( (ST25R3911_IRQ_MASK_CRC | ST25R3911_IRQ_MASK_PAR | ST25R3911_IRQ_MASK_ERR1 | ST25R3911_IRQ_MASK_ERR2 | ST25R3911_IRQ_MASK_COL) ); + + if( (irqs & ST25R3911_IRQ_MASK_ERR1) != 0U ) + { + gRFAL.TxRx.status = ERR_FRAMING; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_READ_DATA; + + /* Check if there's a specific error handling for this */ + rfalErrorHandling(); + break; + } + /* Discard Soft Framing errors if not in EMVCo error handling */ + else if( ((irqs & ST25R3911_IRQ_MASK_ERR2) != 0U) && (gRFAL.conf.eHandling == RFAL_ERRORHANDLING_EMVCO) ) + { + gRFAL.TxRx.status = ERR_FRAMING; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_READ_DATA; + + /* Check if there's a specific error handling for this */ + rfalErrorHandling(); + break; + } + else if( (irqs & ST25R3911_IRQ_MASK_PAR) != 0U ) + { + gRFAL.TxRx.status = ERR_PAR; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_READ_DATA; + + /* Check if there's a specific error handling for this */ + rfalErrorHandling(); + break; + } + else if( (irqs & ST25R3911_IRQ_MASK_CRC) != 0U ) + { + gRFAL.TxRx.status = ERR_CRC; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_READ_DATA; + + /* Check if there's a specific error handling for this */ + rfalErrorHandling(); + break; + } + else if( (irqs & ST25R3911_IRQ_MASK_COL) != 0U ) + { + gRFAL.TxRx.status = ERR_RF_COLLISION; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_READ_DATA; + + /* Check if there's a specific error handling for this */ + rfalErrorHandling(); + break; + } + else if( ((irqs & ST25R3911_IRQ_MASK_EOF) != 0U) && ((irqs & ST25R3911_IRQ_MASK_RXE) == 0U) ) + { + gRFAL.TxRx.status = ERR_LINK_LOSS; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + break; + } + else if( ((irqs & ST25R3911_IRQ_MASK_RXE) != 0U) || (gRFAL.TxRx.rxse) ) + { + /* Reception ended without any error indication, * + * check FIFO status for malformed or incomplete frames */ + + /* Check if the reception ends with an incomplete byte (residual bits) */ + if( rfalFIFOStatusIsIncompleteByte() ) + { + gRFAL.TxRx.status = ERR_INCOMPLETE_BYTE; + } + /* Check if the reception ends with missing parity bit */ + else if( rfalFIFOStatusIsMissingPar() ) + { + gRFAL.TxRx.status = ERR_FRAMING; + } + else + { + /* MISRA 15.7 - Empty else */ + } + + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_READ_DATA; + } + else + { + gRFAL.TxRx.status = ERR_IO; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + break; + } + + /* fall through */ + + + /*******************************************************************************/ + case RFAL_TXRX_STATE_RX_READ_DATA: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + + tmp = rfalFIFOStatusGetNumBytes(); + + /*******************************************************************************/ + /* Check if CRC should not be placed in rxBuf */ + if( ((gRFAL.TxRx.ctx.flags & (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_KEEP) == 0U) ) + { + /* Check if CRC is being placed into the FIFO and if received frame was bigger than CRC */ + if( st25r3911IsCRCinFIFO() && ((gRFAL.fifo.bytesTotal + tmp) > 0U) ) + { + /* By default CRC will not be placed into the rxBuffer */ + if( ( tmp > (uint8_t)RFAL_CRC_LEN) ) + { + tmp -= (uint8_t)RFAL_CRC_LEN; + } + /* If the CRC was already placed into rxBuffer (due to WL interrupt where CRC was already in FIFO Read) + * cannot remove it from rxBuf. Can only remove it from rxBufLen not indicate the presence of CRC */ + else if(gRFAL.fifo.bytesTotal > (uint16_t)RFAL_CRC_LEN) + { + gRFAL.fifo.bytesTotal -= (uint16_t)RFAL_CRC_LEN; + } + else + { + /* MISRA 15.7 - Empty else */ + } + } + } + + gRFAL.fifo.bytesTotal += tmp; /* add to total bytes counter */ + + /*******************************************************************************/ + /* Check if remaining bytes fit on the rxBuf available */ + if( gRFAL.fifo.bytesTotal > rfalConvBitsToBytes(gRFAL.TxRx.ctx.rxBufLen) ) + { + tmp = (uint8_t)( rfalConvBitsToBytes(gRFAL.TxRx.ctx.rxBufLen) - gRFAL.fifo.bytesWritten); + + gRFAL.TxRx.status = ERR_NOMEM; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + } + + /*******************************************************************************/ + /* Retrieve remaining bytes from FIFO to rxBuf, and assign total length rcvd */ + st25r3911ReadFifo( &gRFAL.TxRx.ctx.rxBuf[gRFAL.fifo.bytesWritten], tmp); + if( (gRFAL.TxRx.ctx.rxRcvdLen != NULL) ) + { + (*gRFAL.TxRx.ctx.rxRcvdLen) = (uint16_t)rfalConvBytesToBits( gRFAL.fifo.bytesTotal ); + if( rfalFIFOStatusIsIncompleteByte() ) + { + (*gRFAL.TxRx.ctx.rxRcvdLen) -= (RFAL_BITS_IN_BYTE - rfalFIFOGetNumIncompleteBits()); + } + } + + #if RFAL_FEATURE_NFCV + /*******************************************************************************/ + /* Decode sub bit stream into payload bits for NFCV, if no error found so far */ + if( ((RFAL_MODE_POLL_NFCV == gRFAL.mode) || (RFAL_MODE_POLL_PICOPASS == gRFAL.mode)) && (gRFAL.TxRx.status == ERR_BUSY) ) + { + ReturnCode ret; + uint16_t offset = 0; + + ret = iso15693VICCDecode(gRFAL.TxRx.ctx.rxBuf, gRFAL.fifo.bytesTotal, + gRFAL.nfcvData.origCtx.rxBuf, rfalConvBitsToBytes(gRFAL.nfcvData.origCtx.rxBufLen), &offset, gRFAL.nfcvData.origCtx.rxRcvdLen, gRFAL.nfcvData.ignoreBits, (RFAL_MODE_POLL_PICOPASS == gRFAL.mode) ); + + if( ((ERR_NONE == ret) || (ERR_CRC == ret)) + && (((uint32_t)RFAL_TXRX_FLAGS_CRC_RX_KEEP & gRFAL.nfcvData.origCtx.flags) == 0U) + && ((*gRFAL.nfcvData.origCtx.rxRcvdLen % RFAL_BITS_IN_BYTE) == 0U) + && (*gRFAL.nfcvData.origCtx.rxRcvdLen >= rfalConvBytesToBits(RFAL_CRC_LEN) ) + ) + { + *gRFAL.nfcvData.origCtx.rxRcvdLen -= (uint16_t)rfalConvBytesToBits(RFAL_CRC_LEN); /* Remove CRC */ + } + + /* Restore original ctx */ + gRFAL.TxRx.ctx = gRFAL.nfcvData.origCtx; + gRFAL.TxRx.status = ((ret != ERR_NONE) ? ret : ERR_BUSY); + } + #endif /* RFAL_FEATURE_NFCV */ + + /*******************************************************************************/ + /* If an error as been marked/detected don't fall into to RX_DONE */ + if( gRFAL.TxRx.status != ERR_BUSY ) + { + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + break; + } + + if( rfalIsModeActiveComm( gRFAL.mode ) ) + { + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_WAIT_EOF; + break; + } + + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_DONE; + /* fall through */ + + + /*******************************************************************************/ + case RFAL_TXRX_STATE_RX_DONE: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + + /*Check if Observation Mode was enabled and disable it on ST25R391x */ + rfalCheckDisableObsMode(); + + /* Clean up Transceive */ + rfalCleanupTransceive(); + + + gRFAL.TxRx.status = ERR_NONE; + gRFAL.TxRx.state = RFAL_TXRX_STATE_IDLE; + break; + + + /*******************************************************************************/ + case RFAL_TXRX_STATE_RX_READ_FIFO: + + /*******************************************************************************/ + /* REMARK: Silicon workaround ST25R3911B Errata #1.1 */ + /* ST25R3911 may indicate RXS without RXE afterwards, this happens rarely on */ + /* corrupted frames. */ + /* Re-Start SW timer to handle an eventual missing RXE */ + rfalTimerStart( gRFAL.tmr.RXE, RFAL_NORXE_TOUT ); + /*******************************************************************************/ + + + tmp = rfalFIFOStatusGetNumBytes(); + gRFAL.fifo.bytesTotal += tmp; + + /*******************************************************************************/ + /* Calculate the amount of bytes that still fits in rxBuf */ + aux = (uint8_t)(( gRFAL.fifo.bytesTotal > rfalConvBitsToBytes(gRFAL.TxRx.ctx.rxBufLen) ) ? (rfalConvBitsToBytes(gRFAL.TxRx.ctx.rxBufLen) - gRFAL.fifo.bytesWritten) : tmp); + + /*******************************************************************************/ + /* Retrieve incoming bytes from FIFO to rxBuf, and store already read amount */ + st25r3911ReadFifo( &gRFAL.TxRx.ctx.rxBuf[gRFAL.fifo.bytesWritten], aux); + gRFAL.fifo.bytesWritten += aux; + + /*******************************************************************************/ + /* If the bytes already read were not the full FIFO WL, dump the remaining * + * FIFO so that ST25R391x can continue with reception */ + if( aux < tmp ) + { + st25r3911ReadFifo( NULL, (tmp - aux) ); + } + + rfalFIFOStatusClear(); + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_WAIT_RXE; + break; + + + /*******************************************************************************/ + case RFAL_TXRX_STATE_RX_FAIL: + + /*Check if Observation Mode was enabled and disable it on ST25R391x */ + rfalCheckDisableObsMode(); + + /* Clean up Transceive */ + rfalCleanupTransceive(); + + /* Error should be assigned by previous state */ + if( gRFAL.TxRx.status == ERR_BUSY ) + { + gRFAL.TxRx.status = ERR_SYSTEM; + } + + /*rfalLogD( "RFAL: curSt: %d Error: %d \r\n", gRFAL.TxRx.state, gRFAL.TxRx.status );*/ + gRFAL.TxRx.state = RFAL_TXRX_STATE_IDLE; + break; + + + /*******************************************************************************/ + case RFAL_TXRX_STATE_RX_WAIT_EON: + + irqs = st25r3911GetInterrupt( (ST25R3911_IRQ_MASK_EON | ST25R3911_IRQ_MASK_NRE) ); + if( irqs == ST25R3911_IRQ_MASK_NONE ) + { + break; /* No interrupt to process */ + } + + if( (irqs & ST25R3911_IRQ_MASK_EON) != 0U ) + { + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_WAIT_RXS; + } + + if( (irqs & ST25R3911_IRQ_MASK_NRE) != 0U ) + { + /* ST25R3911 uses the NRT to measure other device's Field On max time: Tadt + (n x Trfw) */ + gRFAL.TxRx.status = ERR_LINK_LOSS; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + } + break; + + + /*******************************************************************************/ + case RFAL_TXRX_STATE_RX_WAIT_EOF: + + irqs = st25r3911GetInterrupt( (ST25R3911_IRQ_MASK_CAT | ST25R3911_IRQ_MASK_CAC) ); + if( irqs == ST25R3911_IRQ_MASK_NONE ) + { + break; /* No interrupt to process */ + } + + if( (irqs & ST25R3911_IRQ_MASK_CAT) != 0U ) + { + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_DONE; + } + else if( (irqs & ST25R3911_IRQ_MASK_CAC) != 0U ) + { + gRFAL.TxRx.status = ERR_RF_COLLISION; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + } + else + { + gRFAL.TxRx.status = ERR_IO; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + } + break; + + + /*******************************************************************************/ + default: + gRFAL.TxRx.status = ERR_SYSTEM; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL; + break; + } +} + +/*******************************************************************************/ +static void rfalFIFOStatusUpdate( void ) +{ + if(gRFAL.fifo.status[RFAL_FIFO_STATUS_REG2] == RFAL_FIFO_STATUS_INVALID) + { + st25r3911ReadMultipleRegisters( ST25R3911_REG_FIFO_RX_STATUS1, gRFAL.fifo.status, ST25R3911_FIFO_STATUS_LEN ); + } +} + + +/*******************************************************************************/ +static void rfalFIFOStatusClear( void ) +{ + gRFAL.fifo.status[RFAL_FIFO_STATUS_REG2] = RFAL_FIFO_STATUS_INVALID; +} + + +/*******************************************************************************/ +static uint8_t rfalFIFOStatusGetNumBytes( void ) +{ + rfalFIFOStatusUpdate(); + + return gRFAL.fifo.status[RFAL_FIFO_STATUS_REG1]; + +} + + +/*******************************************************************************/ +static bool rfalFIFOStatusIsIncompleteByte( void ) +{ + rfalFIFOStatusUpdate(); + return ((gRFAL.fifo.status[RFAL_FIFO_STATUS_REG2] & (ST25R3911_REG_FIFO_RX_STATUS2_mask_fifo_lb | ST25R3911_REG_FIFO_RX_STATUS2_fifo_ncp)) != 0U); +} + + +/*******************************************************************************/ +static bool rfalFIFOStatusIsMissingPar( void ) +{ + rfalFIFOStatusUpdate(); + return ((gRFAL.fifo.status[RFAL_FIFO_STATUS_REG2] & ST25R3911_REG_FIFO_RX_STATUS2_np_lb) != 0U); +} + + +/*******************************************************************************/ +static uint8_t rfalFIFOGetNumIncompleteBits( void ) +{ + rfalFIFOStatusUpdate(); + return ((gRFAL.fifo.status[RFAL_FIFO_STATUS_REG2] & ST25R3911_REG_FIFO_RX_STATUS2_mask_fifo_lb) >> ST25R3911_REG_FIFO_RX_STATUS2_shift_fifo_lb); +} + + +#if RFAL_FEATURE_NFCA + +/*******************************************************************************/ +ReturnCode rfalISO14443ATransceiveShortFrame( rfal14443AShortFrameCmd txCmd, uint8_t* rxBuf, uint8_t rxBufLen, uint16_t* rxRcvdLen, uint32_t fwt ) +{ + ReturnCode ret; + uint8_t directCmd; + + /* Check if RFAL is properly initialized */ + if( !st25r3911IsTxEnabled() || (gRFAL.state < RFAL_STATE_MODE_SET) || (( gRFAL.mode != RFAL_MODE_POLL_NFCA ) && ( gRFAL.mode != RFAL_MODE_POLL_NFCA_T1T )) ) + { + return ERR_WRONG_STATE; + } + + /* Check for valid parameters */ + if( (rxBuf == NULL) || (rxRcvdLen == NULL) || (fwt == RFAL_FWT_NONE) ) + { + return ERR_PARAM; + } + + /*******************************************************************************/ + /* Select the Direct Command to be performed */ + switch (txCmd) + { + case RFAL_14443A_SHORTFRAME_CMD_WUPA: + directCmd = ST25R3911_CMD_TRANSMIT_WUPA; + break; + + case RFAL_14443A_SHORTFRAME_CMD_REQA: + directCmd = ST25R3911_CMD_TRANSMIT_REQA; + break; + + default: + return ERR_PARAM; + } + + + /*******************************************************************************/ + /* Enable anti collision to recognise collision in first byte of SENS_REQ */ + st25r3911SetRegisterBits( ST25R3911_REG_ISO14443A_NFC, ST25R3911_REG_ISO14443A_NFC_antcl); + + /* Disable CRC while receiving since ATQA has no CRC included */ + st25r3911SetRegisterBits( ST25R3911_REG_AUX, ST25R3911_REG_AUX_no_crc_rx ); + + + /*******************************************************************************/ + /* Wait for GT and FDT */ + while( !rfalIsGTExpired() ) { /* MISRA 15.6: mandatory brackets */ }; + while( st25r3911IsGPTRunning() ) { /* MISRA 15.6: mandatory brackets */ }; + + gRFAL.tmr.GT = RFAL_TIMING_NONE; + + + /*******************************************************************************/ + /* Prepare for Transceive, Receive only (bypass Tx states) */ + gRFAL.TxRx.ctx.flags = ((uint32_t) RFAL_TXRX_FLAGS_CRC_TX_MANUAL | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_KEEP ); + gRFAL.TxRx.ctx.rxBuf = rxBuf; + gRFAL.TxRx.ctx.rxBufLen = rxBufLen; + gRFAL.TxRx.ctx.rxRcvdLen = rxRcvdLen; + + /*******************************************************************************/ + /* Load NRT with FWT */ + st25r3911SetNoResponseTime_64fcs( rfalConv1fcTo64fc( MIN( (fwt + RFAL_FWT_ADJUSTMENT + RFAL_FWT_A_ADJUSTMENT), RFAL_ST25R3911_NRT_MAX_1FC ) ) ); + + if( gRFAL.timings.FDTListen != RFAL_TIMING_NONE ) + { + /* Set Minimum FDT(Listen) in which PICC is not allowed to send a response */ + st25r3911WriteRegister( ST25R3911_REG_MASK_RX_TIMER, (uint8_t)rfalConv1fcTo64fc( ((RFAL_FDT_LISTEN_MRT_ADJUSTMENT + RFAL_FDT_LISTEN_A_ADJUSTMENT) > gRFAL.timings.FDTListen) ? RFAL_ST25R3911_MRT_MIN_1FC : (gRFAL.timings.FDTListen - (RFAL_FDT_LISTEN_MRT_ADJUSTMENT + RFAL_FDT_LISTEN_A_ADJUSTMENT)) ) ); + } + + /* In Passive communications General Purpose Timer is used to measure FDT Poll */ + if( gRFAL.timings.FDTPoll != RFAL_TIMING_NONE ) + { + /* Configure GPT to start at RX end */ + st25r3911StartGPTimer_8fcs( (uint16_t)rfalConv1fcTo8fc( MIN( gRFAL.timings.FDTPoll, (gRFAL.timings.FDTPoll - RFAL_FDT_POLL_ADJUSTMENT) ) ), ST25R3911_REG_GPT_CONTROL_gptc_erx ); + } + + /*******************************************************************************/ + rfalPrepareTransceive(); + + /* Also enable bit collision interrupt */ + st25r3911GetInterrupt( ST25R3911_IRQ_MASK_COL ); + st25r3911EnableInterrupts( ST25R3911_IRQ_MASK_COL ); + + /*Check if Observation Mode is enabled and set it on ST25R391x */ + rfalCheckEnableObsModeTx(); + + /*******************************************************************************/ + /* Chip bug: Clear nbtx bits before sending WUPA/REQA - otherwise ST25R3911 will report parity error */ + st25r3911WriteRegister( ST25R3911_REG_NUM_TX_BYTES2, 0); + + /* Send either WUPA or REQA. All affected tags will backscatter ATQA and change to READY state */ + st25r3911ExecuteCommand( directCmd ); + + /* Wait for TXE */ + if( st25r3911WaitForInterruptsTimed( ST25R3911_IRQ_MASK_TXE, (uint16_t)MAX( rfalConv1fcToMs( fwt ), RFAL_ST25R3911_SW_TMR_MIN_1MS ) ) == 0U) + { + ret = ERR_IO; + } + else + { + /*Check if Observation Mode is enabled and set it on ST25R391x */ + rfalCheckEnableObsModeRx(); + + /* Jump into a transceive Rx state for reception (bypass Tx states) */ + gRFAL.state = RFAL_STATE_TXRX; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_IDLE; + gRFAL.TxRx.status = ERR_BUSY; + + /* Execute Transceive Rx blocking */ + ret = rfalTransceiveBlockingRx(); + } + + + /* Disable Collision interrupt */ + st25r3911DisableInterrupts( (ST25R3911_IRQ_MASK_COL) ); + + /* Disable anti collision again */ + st25r3911ClrRegisterBits( ST25R3911_REG_ISO14443A_NFC, ST25R3911_REG_ISO14443A_NFC_antcl ); + + /* ReEnable CRC on Rx */ + st25r3911ClrRegisterBits(ST25R3911_REG_AUX, ST25R3911_REG_AUX_no_crc_rx ); + + return ret; +} + +/*******************************************************************************/ +ReturnCode rfalISO14443ATransceiveAnticollisionFrame( uint8_t *buf, uint8_t *bytesToSend, uint8_t *bitsToSend, uint16_t *rxLength, uint32_t fwt ) +{ + ReturnCode ret; + rfalTransceiveContext ctx; + uint8_t collByte; + uint8_t collData; + + /* Check if RFAL is properly initialized */ + if( (gRFAL.state < RFAL_STATE_MODE_SET) || ( gRFAL.mode != RFAL_MODE_POLL_NFCA ) ) + { + return ERR_WRONG_STATE; + } + + /* Check for valid parameters */ + if( (buf == NULL) || (bytesToSend == NULL) || (bitsToSend == NULL) || (rxLength == NULL) ) + { + return ERR_PARAM; + } + + /*******************************************************************************/ + /* Set speficic Analog Config for Anticolission if needed */ + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_POLL | RFAL_ANALOG_CONFIG_TECH_NFCA | RFAL_ANALOG_CONFIG_BITRATE_COMMON | RFAL_ANALOG_CONFIG_ANTICOL) ); + + + /*******************************************************************************/ + /* Enable anti collision to recognise collision in first byte of SENS_REQ */ + st25r3911SetRegisterBits( ST25R3911_REG_ISO14443A_NFC, ST25R3911_REG_ISO14443A_NFC_antcl ); + + /* Disable CRC while receiving */ + st25r3911SetRegisterBits( ST25R3911_REG_AUX, ST25R3911_REG_AUX_no_crc_rx ); + + + + /*******************************************************************************/ + /* Prepare for Transceive */ + ctx.flags = ( (uint32_t)RFAL_TXRX_FLAGS_CRC_TX_MANUAL | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_KEEP | (uint32_t)RFAL_TXRX_FLAGS_AGC_OFF ); /* Disable Automatic Gain Control (AGC) for better detection of collision */ + ctx.txBuf = buf; + ctx.txBufLen = (uint16_t)(rfalConvBytesToBits( *bytesToSend ) + *bitsToSend ); + ctx.rxBuf = &buf[*bytesToSend]; + ctx.rxBufLen = (uint16_t)rfalConvBytesToBits( RFAL_ISO14443A_SDD_RES_LEN ); + ctx.rxRcvdLen = rxLength; + ctx.fwt = fwt; + + rfalStartTransceive( &ctx ); + + /* Additionally enable bit collision interrupt */ + st25r3911GetInterrupt( ST25R3911_IRQ_MASK_COL ); + st25r3911EnableInterrupts( ST25R3911_IRQ_MASK_COL ); + + /*******************************************************************************/ + collByte = 0; + + /* save the collision byte */ + if ((*bitsToSend) > 0U) + { + buf[(*bytesToSend)] <<= (RFAL_BITS_IN_BYTE - (*bitsToSend)); + buf[(*bytesToSend)] >>= (RFAL_BITS_IN_BYTE - (*bitsToSend)); + collByte = buf[(*bytesToSend)]; + } + + + /*******************************************************************************/ + /* Run Transceive blocking */ + ret = rfalTransceiveRunBlockingTx(); + if( ret == ERR_NONE) + { + ret = rfalTransceiveBlockingRx(); + + /*******************************************************************************/ + if ((*bitsToSend) > 0U) + { + buf[(*bytesToSend)] >>= (*bitsToSend); + buf[(*bytesToSend)] <<= (*bitsToSend); + buf[(*bytesToSend)] |= collByte; + } + + if( (ERR_RF_COLLISION == ret) ) + { + /* read out collision register */ + st25r3911ReadRegister( ST25R3911_REG_COLLISION_STATUS, &collData); + + (*bytesToSend) = ((collData >> ST25R3911_REG_COLLISION_STATUS_shift_c_byte) & 0x0FU); // 4-bits Byte information + (*bitsToSend) = ((collData >> ST25R3911_REG_COLLISION_STATUS_shift_c_bit) & 0x07U); // 3-bits bit information + + } + } + + + /*******************************************************************************/ + /* Disable Collision interrupt */ + st25r3911DisableInterrupts( (ST25R3911_IRQ_MASK_COL) ); + + /* Disable anti collision again */ + st25r3911ClrRegisterBits( ST25R3911_REG_ISO14443A_NFC, ST25R3911_REG_ISO14443A_NFC_antcl ); + + /* ReEnable CRC on Rx */ + st25r3911ClrRegisterBits( ST25R3911_REG_AUX, ST25R3911_REG_AUX_no_crc_rx ); + /*******************************************************************************/ + + + /* Restore common Analog configurations for this mode */ + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_POLL | RFAL_ANALOG_CONFIG_TECH_NFCA | RFAL_ANALOG_CONFIG_BITRATE_COMMON | RFAL_ANALOG_CONFIG_TX) ); + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_POLL | RFAL_ANALOG_CONFIG_TECH_NFCA | RFAL_ANALOG_CONFIG_BITRATE_COMMON | RFAL_ANALOG_CONFIG_RX) ); + + return ret; +} + +#endif /* RFAL_FEATURE_NFCA */ + +#if RFAL_FEATURE_NFCV + +/*******************************************************************************/ +ReturnCode rfalISO15693TransceiveAnticollisionFrame( uint8_t *txBuf, uint8_t txBufLen, uint8_t *rxBuf, uint8_t rxBufLen, uint16_t *actLen ) +{ + ReturnCode ret; + rfalTransceiveContext ctx; + + /* Check if RFAL is properly initialized */ + if( (gRFAL.state < RFAL_STATE_MODE_SET) || ( gRFAL.mode != RFAL_MODE_POLL_NFCV ) ) + { + return ERR_WRONG_STATE; + } + + /*******************************************************************************/ + /* Set speficic Analog Config for Anticolission if needed */ + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_POLL | RFAL_ANALOG_CONFIG_TECH_NFCV | RFAL_ANALOG_CONFIG_BITRATE_COMMON | RFAL_ANALOG_CONFIG_ANTICOL) ); + + + /* Ignoring collisions before the UID (RES_FLAG + DSFID) */ + gRFAL.nfcvData.ignoreBits = (uint16_t)RFAL_ISO15693_IGNORE_BITS; + + /*******************************************************************************/ + /* Prepare for Transceive */ + ctx.flags = ((txBufLen==0U)?(uint32_t)RFAL_TXRX_FLAGS_CRC_TX_MANUAL:(uint32_t)RFAL_TXRX_FLAGS_CRC_TX_AUTO) | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_KEEP | (uint32_t)RFAL_TXRX_FLAGS_AGC_OFF | ((txBufLen==0U)?(uint32_t)RFAL_TXRX_FLAGS_NFCV_FLAG_MANUAL:(uint32_t)RFAL_TXRX_FLAGS_NFCV_FLAG_AUTO); /* Disable Automatic Gain Control (AGC) for better detection of collision */ + ctx.txBuf = txBuf; + ctx.txBufLen = (uint16_t)rfalConvBytesToBits(txBufLen); + ctx.rxBuf = rxBuf; + ctx.rxBufLen = (uint16_t)rfalConvBytesToBits(rxBufLen); + ctx.rxRcvdLen = actLen; + ctx.fwt = rfalConv64fcTo1fc(ISO15693_FWT); + + rfalStartTransceive( &ctx ); + + /*******************************************************************************/ + /* Run Transceive blocking */ + ret = rfalTransceiveRunBlockingTx(); + if( ret == ERR_NONE) + { + ret = rfalTransceiveBlockingRx(); + } + + /* Restore common Analog configurations for this mode */ + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_POLL | RFAL_ANALOG_CONFIG_TECH_NFCV | RFAL_ANALOG_CONFIG_BITRATE_COMMON | RFAL_ANALOG_CONFIG_TX) ); + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_POLL | RFAL_ANALOG_CONFIG_TECH_NFCV | RFAL_ANALOG_CONFIG_BITRATE_COMMON | RFAL_ANALOG_CONFIG_RX) ); + + gRFAL.nfcvData.ignoreBits = 0; + return ret; +} + +/*******************************************************************************/ +ReturnCode rfalISO15693TransceiveEOFAnticollision( uint8_t *rxBuf, uint8_t rxBufLen, uint16_t *actLen ) +{ + uint8_t dummy; + + return rfalISO15693TransceiveAnticollisionFrame( &dummy, 0, rxBuf, rxBufLen, actLen ); +} + +/*******************************************************************************/ +ReturnCode rfalISO15693TransceiveEOF( uint8_t *rxBuf, uint8_t rxBufLen, uint16_t *actLen ) +{ + ReturnCode ret; + uint8_t dummy; + + /* Check if RFAL is properly initialized */ + if( ( gRFAL.state < RFAL_STATE_MODE_SET ) || ( gRFAL.mode != RFAL_MODE_POLL_NFCV ) ) + { + return ERR_WRONG_STATE; + } + + /*******************************************************************************/ + /* Run Transceive blocking */ + ret = rfalTransceiveBlockingTxRx( &dummy, + 0, + rxBuf, + rxBufLen, + actLen, + ( (uint32_t)RFAL_TXRX_FLAGS_CRC_TX_MANUAL | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_KEEP |(uint32_t)RFAL_TXRX_FLAGS_AGC_ON ), + rfalConv64fcTo1fc(ISO15693_FWT) ); + return ret; +} + +#endif /* RFAL_FEATURE_NFCV */ + +#if RFAL_FEATURE_NFCF + +/*******************************************************************************/ +ReturnCode rfalFeliCaPoll( rfalFeliCaPollSlots slots, uint16_t sysCode, uint8_t reqCode, rfalFeliCaPollRes* pollResList, uint8_t pollResListSize, uint8_t *devicesDetected, uint8_t *collisionsDetected ) +{ + ReturnCode ret; + uint8_t frame[RFAL_FELICA_POLL_REQ_LEN - RFAL_FELICA_LEN_LEN]; // LEN is added by ST25R3911 automatically + uint16_t actLen; + uint8_t frameIdx; + uint8_t devDetected; + uint8_t colDetected; + rfalEHandling curHandling; + uint8_t nbSlots; + + /* Check if RFAL is properly initialized */ + if( (gRFAL.state < RFAL_STATE_MODE_SET) || ( gRFAL.mode != RFAL_MODE_POLL_NFCF ) ) + { + return ERR_WRONG_STATE; + } + + frameIdx = 0; + colDetected = 0; + devDetected = 0; + nbSlots = (uint8_t)slots; + + /*******************************************************************************/ + /* Compute SENSF_REQ frame */ + frame[frameIdx++] = (uint8_t)FELICA_CMD_POLLING; /* CMD: SENF_REQ */ + frame[frameIdx++] = (uint8_t)(sysCode >> 8); /* System Code (SC) */ + frame[frameIdx++] = (uint8_t)(sysCode & 0xFFU); /* System Code (SC) */ + frame[frameIdx++] = reqCode; /* Communication Parameter Request (RC)*/ + frame[frameIdx++] = nbSlots; /* TimeSlot (TSN) */ + + + /*******************************************************************************/ + /* NRT should not stop on reception - Use EMVCo mode to run NRT in nrt_emv * + * ERRORHANDLING_EMVCO has no special handling for NFC-F mode */ + curHandling = gRFAL.conf.eHandling; + rfalSetErrorHandling( RFAL_ERRORHANDLING_EMVCO ); + + /*******************************************************************************/ + /* Run transceive blocking, + * Calculate Total Response Time in(64/fc): + * 512 PICC process time + (n * 256 Time Slot duration) */ + ret = rfalTransceiveBlockingTx( frame, + (uint16_t)frameIdx, + (uint8_t*)gRFAL.nfcfData.pollResponses, + RFAL_FELICA_POLL_RES_LEN, + &actLen, + (RFAL_TXRX_FLAGS_DEFAULT), + rfalConv64fcTo1fc( RFAL_FELICA_POLL_DELAY_TIME + (RFAL_FELICA_POLL_SLOT_TIME * ((uint32_t)nbSlots + 1U)) ) ); + + /*******************************************************************************/ + /* If Tx OK, Wait for all responses, store them as soon as they appear */ + if( ret == ERR_NONE ) + { + bool timeout; + + do + { + ret = rfalTransceiveBlockingRx(); + if( ret == ERR_TIMEOUT ) + { + /* Upon timeout the full Poll Delay + (Slot time)*(nbSlots) has expired */ + timeout = true; + } + else + { + /* Reception done, reEnabled Rx for following Slot */ + st25r3911ExecuteCommand( ST25R3911_CMD_UNMASK_RECEIVE_DATA ); + st25r3911ExecuteCommand( ST25R3911_CMD_CLEAR_SQUELCH ); + + /* If the reception was OK, new device found */ + if( ret == ERR_NONE ) + { + devDetected++; + + /* Overwrite the Transceive context for the next reception */ + gRFAL.TxRx.ctx.rxBuf = (uint8_t*)gRFAL.nfcfData.pollResponses[devDetected]; + } + /* If the reception was not OK, mark as collision */ + else + { + colDetected++; + } + + /* Check whether NRT has expired meanwhile */ + timeout = st25r3911CheckReg( ST25R3911_REG_REGULATOR_RESULT, ST25R3911_REG_REGULATOR_RESULT_nrt_on, 0x00 ); + if( !timeout ) + { + /* Jump again into transceive Rx state for the following reception */ + gRFAL.TxRx.status = ERR_BUSY; + gRFAL.state = RFAL_STATE_TXRX; + gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_IDLE; + } + } + }while( ((nbSlots--) != 0U) && !timeout ); + } + + /*******************************************************************************/ + /* Restore NRT to normal mode - back to previous error handling */ + rfalSetErrorHandling( curHandling ); + + /*******************************************************************************/ + /* Assign output parameters if requested */ + + if( (pollResList != NULL) && (pollResListSize > 0U) && (devDetected > 0U) ) + { + ST_MEMCPY( pollResList, gRFAL.nfcfData.pollResponses, (RFAL_FELICA_POLL_RES_LEN * (uint32_t)MIN(pollResListSize, devDetected) ) ); + } + + if( devicesDetected != NULL ) + { + *devicesDetected = devDetected; + } + + if( collisionsDetected != NULL ) + { + *collisionsDetected = colDetected; + } + + return (( (colDetected != 0U) || (devDetected != 0U)) ? ERR_NONE : ret); +} + +#endif /* RFAL_FEATURE_NFCF */ + + +/***************************************************************************** + * Listen Mode * + *****************************************************************************/ + + + +/*******************************************************************************/ +bool rfalIsExtFieldOn( void ) +{ + return st25r3911IsExtFieldOn(); +} + +#if RFAL_FEATURE_LISTEN_MODE + +/*******************************************************************************/ +ReturnCode rfalListenStart( uint32_t lmMask, const rfalLmConfPA *confA, const rfalLmConfPB *confB, const rfalLmConfPF *confF, uint8_t *rxBuf, uint16_t rxBufLen, uint16_t *rxLen ) +{ + NO_WARNING(confA); + NO_WARNING(confB); + NO_WARNING(confF); + + + gRFAL.Lm.state = RFAL_LM_STATE_NOT_INIT; + + + /*******************************************************************************/ + if( ((lmMask & RFAL_LM_MASK_NFCA) != 0U) || ((lmMask & RFAL_LM_MASK_NFCB) != 0U) || ((lmMask & RFAL_LM_MASK_NFCF) != 0U) ) + { + return ERR_NOTSUPP; + } + + + /*******************************************************************************/ + if( (lmMask & RFAL_LM_MASK_ACTIVE_P2P) != 0U ) + { + gRFAL.state = RFAL_STATE_LM; + + gRFAL.Lm.rxBuf = rxBuf; + gRFAL.Lm.rxBufLen = rxBufLen; + gRFAL.Lm.rxLen = rxLen; + *gRFAL.Lm.rxLen = 0; + gRFAL.Lm.dataFlag = false; + + /* Disable GPT trigger source */ + st25r3911ChangeRegisterBits( ST25R3911_REG_GPT_CONTROL, ST25R3911_REG_GPT_CONTROL_gptc_mask, ST25R3911_REG_GPT_CONTROL_gptc_no_trigger ); + + /* On Bit Rate Detection Mode ST25R391x will filter incoming frames during MRT time starting on External Field On event, use 512/fc steps */ + st25r3911WriteRegister( ST25R3911_REG_MASK_RX_TIMER, (uint8_t)rfalConv1fcTo512fc( RFAL_LM_GT ) ); + + /* Restore default settings on NFCIP1 mode, Receiving parity + CRC bits and manual Tx Parity*/ + st25r3911ClrRegisterBits( ST25R3911_REG_ISO14443A_NFC, (ST25R3911_REG_ISO14443A_NFC_no_tx_par | ST25R3911_REG_ISO14443A_NFC_no_rx_par | ST25R3911_REG_ISO14443A_NFC_nfc_f0) ); + + /* Enable External Field Detector */ + st25r3911SetRegisterBits( ST25R3911_REG_AUX, ST25R3911_REG_AUX_en_fd ); + + /* Enable Receiver */ + st25r3911ChangeRegisterBits( ST25R3911_REG_OP_CONTROL, ST25R3911_REG_OP_CONTROL_rx_en, ST25R3911_REG_OP_CONTROL_rx_en ); + + /* Set Analog configurations for generic Listen mode */ + /* Not on SetState(POWER OFF) as otherwise would be applied on every Field Event */ + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_TECH_CHIP | RFAL_ANALOG_CONFIG_CHIP_LISTEN_ON) ); + + /* Initialize as POWER_OFF and set proper mode in RF Chip */ + rfalListenSetState( RFAL_LM_STATE_POWER_OFF ); + } + else + { + return ERR_REQUEST; /* Listen Start called but no mode was enabled */ + } + + return ERR_NONE; +} + + + +/*******************************************************************************/ +static ReturnCode rfalRunListenModeWorker( void ) +{ + volatile uint32_t irqs; + uint8_t tmp; + + if( gRFAL.state != RFAL_STATE_LM ) + { + return ERR_WRONG_STATE; + } + + switch( gRFAL.Lm.state ) + { + /*******************************************************************************/ + case RFAL_LM_STATE_POWER_OFF: + + irqs = st25r3911GetInterrupt( ( ST25R3911_IRQ_MASK_EON ) ); + if( irqs == ST25R3911_IRQ_MASK_NONE ) + { + break; /* No interrupt to process */ + } + + if( (irqs & ST25R3911_IRQ_MASK_EON) != 0U ) + { + rfalListenSetState( RFAL_LM_STATE_IDLE ); + } + else + { + break; + } + /* fall through */ + + + /*******************************************************************************/ + case RFAL_LM_STATE_IDLE: /* PRQA S 2003 # MISRA 16.3 - Intentional fall through */ + + irqs = st25r3911GetInterrupt( ( ST25R3911_IRQ_MASK_NFCT | ST25R3911_IRQ_MASK_RXE | ST25R3911_IRQ_MASK_EOF ) ); + if( irqs == ST25R3911_IRQ_MASK_NONE ) + { + break; /* No interrupt to process */ + } + + if( (irqs & ST25R3911_IRQ_MASK_NFCT) != 0U ) + { + /* Retrieve detected bitrate */ + uint8_t newBr; + st25r3911ReadRegister( ST25R3911_REG_NFCIP1_BIT_RATE, &newBr ); + newBr >>= ST25R3911_REG_NFCIP1_BIT_RATE_nfc_rate_shift; + + if (newBr > ST25R3911_REG_BIT_RATE_rxrate_424) + { + newBr = ST25R3911_REG_BIT_RATE_rxrate_424; + } + + gRFAL.Lm.brDetected = (rfalBitRate)(newBr); /* PRQA S 4342 # MISRA 10.5 - Guaranteed that no invalid enum values may be created. See also equalityGuard_RFAL_BR_106 ff.*/ + } + if( ((irqs & ST25R3911_IRQ_MASK_RXE) != 0U) && (gRFAL.Lm.brDetected != RFAL_BR_KEEP) ) + { + irqs = st25r3911GetInterrupt( ( ST25R3911_IRQ_MASK_RXE | ST25R3911_IRQ_MASK_EOF | ST25R3911_IRQ_MASK_CRC | ST25R3911_IRQ_MASK_PAR | ST25R3911_IRQ_MASK_ERR2 | ST25R3911_IRQ_MASK_ERR1 ) ); + + if( ((irqs & ST25R3911_IRQ_MASK_CRC) != 0U) || ((irqs & ST25R3911_IRQ_MASK_PAR) != 0U) || ((irqs & ST25R3911_IRQ_MASK_ERR1) != 0U) ) + { + /* nfc_ar may have triggered RF Collision Avoidance, disable it before executing Clear (Stop All activities) */ + st25r3911ClrRegisterBits( ST25R3911_REG_MODE, ST25R3911_REG_MODE_nfc_ar ); + st25r3911ExecuteCommand( ST25R3911_CMD_CLEAR_FIFO ); + st25r3911ExecuteCommand( ST25R3911_CMD_UNMASK_RECEIVE_DATA ); + st25r3911SetRegisterBits( ST25R3911_REG_MODE, ST25R3911_REG_MODE_nfc_ar ); + st25r3911TxOff(); + break; /* A bad reception occurred, remain in same state */ + } + + /* Retrieve received data */ + st25r3911ReadRegister(ST25R3911_REG_FIFO_RX_STATUS1, &tmp); + *gRFAL.Lm.rxLen = tmp; + + st25r3911ReadFifo( gRFAL.Lm.rxBuf, (uint8_t)MIN( *gRFAL.Lm.rxLen, rfalConvBitsToBytes(gRFAL.Lm.rxBufLen) ) ); + + /* Check if the data we got has at least the CRC and remove it, otherwise leave at 0 */ + *gRFAL.Lm.rxLen -= ((*gRFAL.Lm.rxLen > RFAL_CRC_LEN) ? RFAL_CRC_LEN : *gRFAL.Lm.rxLen); + *gRFAL.Lm.rxLen = (uint16_t)rfalConvBytesToBits( *gRFAL.Lm.rxLen ); + gRFAL.Lm.dataFlag = true; + + /*Check if Observation Mode was enabled and disable it on ST25R391x */ + rfalCheckDisableObsMode(); + } + else if( ((irqs & ST25R3911_IRQ_MASK_EOF) != 0U) && (!gRFAL.Lm.dataFlag) ) + { + rfalListenSetState( RFAL_LM_STATE_POWER_OFF ); + } + else + { + /* MISRA 15.7 - Empty else */ + } + break; + + /*******************************************************************************/ + case RFAL_LM_STATE_READY_F: + case RFAL_LM_STATE_READY_A: + case RFAL_LM_STATE_ACTIVE_A: + case RFAL_LM_STATE_ACTIVE_Ax: + case RFAL_LM_STATE_SLEEP_A: + case RFAL_LM_STATE_SLEEP_B: + case RFAL_LM_STATE_SLEEP_AF: + case RFAL_LM_STATE_READY_Ax: + case RFAL_LM_STATE_CARDEMU_4A: + case RFAL_LM_STATE_CARDEMU_4B: + case RFAL_LM_STATE_CARDEMU_3: + return ERR_INTERNAL; + + case RFAL_LM_STATE_TARGET_F: + case RFAL_LM_STATE_TARGET_A: + break; + + /*******************************************************************************/ + default: + return ERR_WRONG_STATE; + } + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalListenStop( void ) +{ + gRFAL.Lm.state = RFAL_LM_STATE_NOT_INIT; + + /*Check if Observation Mode was enabled and disable it on ST25R391x */ + rfalCheckDisableObsMode(); + + /* Disable Receiver and Transmitter */ + rfalFieldOff(); + + /* As there's no Off mode, set default value: ISO14443A with automatic RF Collision Avoidance Off */ + st25r3911WriteRegister( ST25R3911_REG_MODE, (ST25R3911_REG_MODE_om_iso14443a | ST25R3911_REG_MODE_nfc_ar_off) ); + + /* Set Analog configurations for Listen Off event */ + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_TECH_CHIP | RFAL_ANALOG_CONFIG_CHIP_LISTEN_OFF) ); + + return ERR_NONE; +} + + +/*******************************************************************************/ +/* PRQA S 3673 1 # MISRA 8.13 - ST25R3911B does not support Listen mode. Implementation for other chips will modify rxBuf and rxLen */ +ReturnCode rfalListenSleepStart( rfalLmState sleepSt, uint8_t *rxBuf, uint16_t rxBufLen, uint16_t *rxLen ) +{ + NO_WARNING(sleepSt); + NO_WARNING(rxBuf); + NO_WARNING(rxBufLen); + NO_WARNING(rxLen); + + return ERR_NOTSUPP; +} + + +/*******************************************************************************/ +rfalLmState rfalListenGetState( bool *dataFlag, rfalBitRate *lastBR ) +{ + /* Allow state retrieval even if gRFAL.state != RFAL_STATE_LM so * + * that this Lm state can be used by caller after activation */ + + if( lastBR != NULL ) + { + *lastBR = gRFAL.Lm.brDetected; + } + + if( dataFlag != NULL ) + { + *dataFlag = gRFAL.Lm.dataFlag; + } + + return gRFAL.Lm.state; +} + + +/*******************************************************************************/ +ReturnCode rfalListenSetState( rfalLmState newSt ) +{ + ReturnCode ret; + uint8_t tmp; + rfalLmState newState; + bool reSetState; + + /*rfalLogD( "RFAL: curState: %02X newState: %02X \r\n", gRFAL.Lm.state, newSt );*/ + + /* SetState clears the Data flag */ + gRFAL.Lm.dataFlag = false; + newState = newSt; + ret = ERR_NONE; + + do{ + reSetState = false; + + /*******************************************************************************/ + switch( newState ) + { + /*******************************************************************************/ + case RFAL_LM_STATE_POWER_OFF: + + /*******************************************************************************/ + /* Disable nfc_ar as RF Collision Avoidance timer may have already started */ + st25r3911ClrRegisterBits( ST25R3911_REG_MODE, ST25R3911_REG_MODE_nfc_ar ); + + st25r3911ExecuteCommand( ST25R3911_CMD_CLEAR_FIFO ); + + /* Ensure that our field is Off, as automatic response RF Collision Avoidance may have been triggered */ + st25r3911TxOff(); + + /*******************************************************************************/ + /* Ensure that the NFCIP1 mode is disabled */ + st25r3911ClrRegisterBits( ST25R3911_REG_ISO14443A_NFC, ST25R3911_REG_ISO14443A_NFC_nfc_f0 ); + + + /*******************************************************************************/ + /* Clear and enable required IRQs */ + st25r3911DisableInterrupts( ST25R3911_IRQ_MASK_ALL ); + + + st25r3911GetInterrupt( (ST25R3911_IRQ_MASK_NFCT | ST25R3911_IRQ_MASK_RXS | ST25R3911_IRQ_MASK_CRC | ST25R3911_IRQ_MASK_ERR1 | + ST25R3911_IRQ_MASK_ERR2 | ST25R3911_IRQ_MASK_PAR | ST25R3911_IRQ_MASK_EON | ST25R3911_IRQ_MASK_EOF | ST25R3911_IRQ_MASK_RXE ) ); + + + /*******************************************************************************/ + /* REMARK: Silicon workaround ST25R3911 Errata TDB */ + /* RXS and NFCT are triggered very close (specially in higher bitrates). * + * If the interrupt status register is being read when NFCT is trigerred, the * + * IRQ line might go low and NFCT is not signalled on the status register. * + * For initial bitrate detection, mask RXS, only wait for NFCT and RXE. */ + /*******************************************************************************/ + + st25r3911EnableInterrupts( (ST25R3911_IRQ_MASK_NFCT | ST25R3911_IRQ_MASK_CRC | ST25R3911_IRQ_MASK_ERR1 | + ST25R3911_IRQ_MASK_ERR2 | ST25R3911_IRQ_MASK_PAR | ST25R3911_IRQ_MASK_EON | ST25R3911_IRQ_MASK_EOF | ST25R3911_IRQ_MASK_RXE ) ); + + /*******************************************************************************/ + /* Clear the bitRate previously detected */ + gRFAL.Lm.brDetected = RFAL_BR_KEEP; + + + /*******************************************************************************/ + /* Apply the BitRate detection mode mode */ + st25r3911WriteRegister( ST25R3911_REG_MODE, (ST25R3911_REG_MODE_targ_targ | ST25R3911_REG_MODE_om_bit_rate_detection | ST25R3911_REG_MODE_nfc_ar_on) ); + + + /*******************************************************************************/ + /* REMARK: Silicon workaround ST25R3911 Errata #1.3 */ + /* Even though bitrate is going to be detected the bitrate must be set to * + * 106kbps to get correct 106kbps parity */ + st25r3911WriteRegister( ST25R3911_REG_BIT_RATE, (ST25R3911_REG_BIT_RATE_txrate_106 | ST25R3911_REG_BIT_RATE_rxrate_106) ); + /*******************************************************************************/ + + + /*******************************************************************************/ + /* Check if external Field is already On */ + if( rfalIsExtFieldOn() ) + { + reSetState = true; + newState = RFAL_LM_STATE_IDLE; /* Set IDLE state */ + } + break; + + /*******************************************************************************/ + case RFAL_LM_STATE_IDLE: + + /*******************************************************************************/ + /* In Active P2P the Initiator may: Turn its field On; LM goes into IDLE state; + * Initiator sends an unexpected frame raising a Protocol error; Initiator + * turns its field Off and ST25R3911 performs the automatic RF Collision + * Avoidance keeping our field On; upon a Protocol error upper layer sets + * again the state to IDLE to clear dataFlag and wait for next data. + * + * Ensure that when upper layer calls SetState(IDLE), it restores initial + * configuration and that check whether an external Field is still present */ + + /* nfc_ar may have triggered RF Collision Avoidance, disable it before executing Clear (Stop All activities) */ + st25r3911ClrRegisterBits( ST25R3911_REG_MODE, ST25R3911_REG_MODE_nfc_ar ); + st25r3911ExecuteCommand( ST25R3911_CMD_CLEAR_FIFO ); + st25r3911SetRegisterBits( ST25R3911_REG_MODE, ST25R3911_REG_MODE_nfc_ar ); + + /* Ensure that our field is Off, as automatic response RF Collision Avoidance may have been triggered */ + st25r3911TxOff(); + + + /* Load 2nd/3rd stage gain setting from registers into the receiver */ + st25r3911ExecuteCommand( ST25R3911_CMD_CLEAR_SQUELCH ); + + /*******************************************************************************/ + /* REMARK: Silicon workaround ST25R3911 Errata #1.4 */ + /* Enable; disable; enable mixer to make sure the digital decoder is in * + * high state. This also switches the demodulator to mixer mode. */ + st25r3911ReadRegister( ST25R3911_REG_RX_CONF1, &tmp ); + st25r3911WriteRegister( ST25R3911_REG_RX_CONF1, (tmp | ST25R3911_REG_RX_CONF1_amd_sel) ); + st25r3911WriteRegister( ST25R3911_REG_RX_CONF1, (uint8_t)(tmp & ~ST25R3911_REG_RX_CONF1_amd_sel) ); + st25r3911WriteRegister( ST25R3911_REG_RX_CONF1, (tmp | ST25R3911_REG_RX_CONF1_amd_sel) ); + /*******************************************************************************/ + + /* ReEnable the receiver */ + st25r3911ExecuteCommand( ST25R3911_CMD_UNMASK_RECEIVE_DATA ); + + + /* If external Field is no longer detected go back to POWER_OFF */ + if( !st25r3911IsExtFieldOn() ) + { + reSetState = true; + newState = RFAL_LM_STATE_POWER_OFF; /* Set POWER_OFF state */ + } + + /*******************************************************************************/ + /*Check if Observation Mode is enabled and set it on ST25R391x */ + rfalCheckEnableObsModeRx(); + break; + + /*******************************************************************************/ + case RFAL_LM_STATE_TARGET_A: + case RFAL_LM_STATE_TARGET_F: + /* States not handled by the LM, just keep state context */ + break; + + /*******************************************************************************/ + case RFAL_LM_STATE_READY_F: + case RFAL_LM_STATE_CARDEMU_3: + case RFAL_LM_STATE_READY_Ax: + case RFAL_LM_STATE_READY_A: + case RFAL_LM_STATE_ACTIVE_Ax: + case RFAL_LM_STATE_ACTIVE_A: + case RFAL_LM_STATE_SLEEP_A: + case RFAL_LM_STATE_SLEEP_B: + case RFAL_LM_STATE_SLEEP_AF: + case RFAL_LM_STATE_CARDEMU_4A: + case RFAL_LM_STATE_CARDEMU_4B: + return ERR_NOTSUPP; + + /*******************************************************************************/ + default: + return ERR_WRONG_STATE; + } + } + while( reSetState ); + + gRFAL.Lm.state = newState; + + return ret; +} + +#endif /* RFAL_FEATURE_LISTEN_MODE */ + + +/******************************************************************************* + * Wake-Up Mode * + *******************************************************************************/ + +#if RFAL_FEATURE_WAKEUP_MODE + +/*******************************************************************************/ +ReturnCode rfalWakeUpModeStart( const rfalWakeUpConfig *config ) +{ + uint8_t aux; + uint8_t reg; + uint32_t irqs; + + /* The Wake-Up procedure is explained in detail in Application Note: AN4985 */ + + if( config == NULL ) + { + gRFAL.wum.cfg.period = RFAL_WUM_PERIOD_500MS; + gRFAL.wum.cfg.irqTout = false; + gRFAL.wum.cfg.swTagDetect = false; + + gRFAL.wum.cfg.indAmp.enabled = true; + gRFAL.wum.cfg.indPha.enabled = true; + gRFAL.wum.cfg.cap.enabled = false; + gRFAL.wum.cfg.indAmp.delta = 2U; + gRFAL.wum.cfg.indAmp.reference = RFAL_WUM_REFERENCE_AUTO; + gRFAL.wum.cfg.indAmp.autoAvg = false; + gRFAL.wum.cfg.indPha.delta = 2U; + gRFAL.wum.cfg.indPha.reference = RFAL_WUM_REFERENCE_AUTO; + gRFAL.wum.cfg.indPha.autoAvg = false; + } + else + { + gRFAL.wum.cfg = *config; + } + + + /* Check for valid configuration */ + if( (gRFAL.wum.cfg.cap.enabled && (gRFAL.wum.cfg.indAmp.enabled || gRFAL.wum.cfg.indPha.enabled)) || + (!gRFAL.wum.cfg.cap.enabled && !gRFAL.wum.cfg.indAmp.enabled && !gRFAL.wum.cfg.indPha.enabled) || + gRFAL.wum.cfg.swTagDetect ) + { + return ERR_PARAM; + } + + irqs = ST25R3911_IRQ_MASK_NONE; + + + /* Disable Tx, Rx, External Field Detector and set default ISO14443A mode */ + st25r3911TxRxOff(); + st25r3911ClrRegisterBits( ST25R3911_REG_AUX, ST25R3911_REG_AUX_en_fd ); + st25r3911ChangeRegisterBits(ST25R3911_REG_MODE, (ST25R3911_REG_MODE_targ | ST25R3911_REG_MODE_mask_om), (ST25R3911_REG_MODE_targ_init | ST25R3911_REG_MODE_om_iso14443a) ); + + /* Set Analog configurations for Wake-up On event */ + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_TECH_CHIP | RFAL_ANALOG_CONFIG_CHIP_WAKEUP_ON) ); + + /*******************************************************************************/ + /* Prepare Wake-Up Timer Control Register */ + reg = (uint8_t)(((uint8_t)gRFAL.wum.cfg.period & 0x0FU) << ST25R3911_REG_WUP_TIMER_CONTROL_shift_wut); + reg |= (uint8_t)(((uint8_t)gRFAL.wum.cfg.period < (uint8_t)RFAL_WUM_PERIOD_100MS) ? ST25R3911_REG_WUP_TIMER_CONTROL_wur : 0x00U); + + if(gRFAL.wum.cfg.irqTout) + { + reg |= ST25R3911_REG_WUP_TIMER_CONTROL_wto; + irqs |= ST25R3911_IRQ_MASK_WT; + } + + /*******************************************************************************/ + /* Check if Inductive Amplitude is to be performed */ + if( gRFAL.wum.cfg.indAmp.enabled ) + { + aux = (uint8_t)((gRFAL.wum.cfg.indAmp.delta) << ST25R3911_REG_AMPLITUDE_MEASURE_CONF_shift_am_d); + aux |= (uint8_t)(gRFAL.wum.cfg.indAmp.aaInclMeas ? ST25R3911_REG_AMPLITUDE_MEASURE_CONF_am_aam : 0x00U); + aux |= (uint8_t)(((uint8_t)gRFAL.wum.cfg.indAmp.aaWeight << ST25R3911_REG_AMPLITUDE_MEASURE_CONF_shift_am_aew) & ST25R3911_REG_AMPLITUDE_MEASURE_CONF_mask_am_aew); + aux |= (uint8_t)(gRFAL.wum.cfg.indAmp.autoAvg ? ST25R3911_REG_AMPLITUDE_MEASURE_CONF_am_ae : 0x00U); + + st25r3911WriteRegister( ST25R3911_REG_AMPLITUDE_MEASURE_CONF, aux ); + + /* Only need to set the reference if not using Auto Average */ + if( !gRFAL.wum.cfg.indAmp.autoAvg ) + { + if( gRFAL.wum.cfg.indAmp.reference == RFAL_WUM_REFERENCE_AUTO ) + { + st25r3911MeasureAmplitude( &gRFAL.wum.cfg.indAmp.reference ); + } + st25r3911WriteRegister( ST25R3911_REG_AMPLITUDE_MEASURE_REF, gRFAL.wum.cfg.indAmp.reference ); + } + + reg |= ST25R3911_REG_WUP_TIMER_CONTROL_wam; + irqs |= ST25R3911_IRQ_MASK_WAM; + } + + /*******************************************************************************/ + /* Check if Inductive Phase is to be performed */ + if( gRFAL.wum.cfg.indPha.enabled ) + { + aux = (uint8_t)((gRFAL.wum.cfg.indPha.delta) << ST25R3911_REG_PHASE_MEASURE_CONF_shift_pm_d); + aux |= (uint8_t)(gRFAL.wum.cfg.indPha.aaInclMeas ? ST25R3911_REG_PHASE_MEASURE_CONF_pm_aam : 0x00U); + aux |= (uint8_t)(((uint8_t)gRFAL.wum.cfg.indPha.aaWeight << ST25R3911_REG_PHASE_MEASURE_CONF_shift_pm_aew) & ST25R3911_REG_PHASE_MEASURE_CONF_mask_pm_aew); + aux |= (uint8_t)(gRFAL.wum.cfg.indPha.autoAvg ? ST25R3911_REG_PHASE_MEASURE_CONF_pm_ae : 0x00U); + + st25r3911WriteRegister( ST25R3911_REG_PHASE_MEASURE_CONF, aux ); + + /* Only need to set the reference if not using Auto Average */ + if( !gRFAL.wum.cfg.indPha.autoAvg ) + { + if( gRFAL.wum.cfg.indPha.reference == RFAL_WUM_REFERENCE_AUTO ) + { + st25r3911MeasurePhase( &gRFAL.wum.cfg.indPha.reference ); + } + st25r3911WriteRegister( ST25R3911_REG_PHASE_MEASURE_REF, gRFAL.wum.cfg.indPha.reference ); + } + + reg |= ST25R3911_REG_WUP_TIMER_CONTROL_wph; + irqs |= ST25R3911_IRQ_MASK_WPH; + } + + /*******************************************************************************/ + /* Check if Capacitive is to be performed */ + if( gRFAL.wum.cfg.cap.enabled ) + { + /*******************************************************************************/ + /* Perform Capacitive sensor calibration */ + + /* Disable Oscillator and Field */ + st25r3911ClrRegisterBits( ST25R3911_REG_OP_CONTROL, (ST25R3911_REG_OP_CONTROL_en | ST25R3911_REG_OP_CONTROL_tx_en) ); + + /* Sensor gain should be configured on Analog Config */ + + /* Perform calibration procedure */ + st25r3911CalibrateCapacitiveSensor( NULL ); + + + /*******************************************************************************/ + aux = (uint8_t)((gRFAL.wum.cfg.cap.delta) << ST25R3911_REG_CAPACITANCE_MEASURE_CONF_shift_cm_d); + aux |= (uint8_t)(gRFAL.wum.cfg.cap.aaInclMeas ? ST25R3911_REG_CAPACITANCE_MEASURE_CONF_cm_aam : 0x00U); + aux |= (uint8_t)(((uint8_t)gRFAL.wum.cfg.cap.aaWeight << ST25R3911_REG_CAPACITANCE_MEASURE_CONF_shift_cm_aew) & ST25R3911_REG_CAPACITANCE_MEASURE_CONF_mask_cm_aew); + aux |= (uint8_t)(gRFAL.wum.cfg.cap.autoAvg ? ST25R3911_REG_CAPACITANCE_MEASURE_CONF_cm_ae : 0x00U); + + st25r3911WriteRegister( ST25R3911_REG_CAPACITANCE_MEASURE_CONF, aux ); + + /* Only need to set the reference if not using Auto Average */ + if( !gRFAL.wum.cfg.cap.autoAvg ) + { + if( gRFAL.wum.cfg.indPha.reference == RFAL_WUM_REFERENCE_AUTO ) + { + st25r3911MeasureCapacitance( &gRFAL.wum.cfg.cap.reference ); + } + st25r3911WriteRegister( ST25R3911_REG_CAPACITANCE_MEASURE_REF, gRFAL.wum.cfg.cap.reference ); + } + + reg |= ST25R3911_REG_WUP_TIMER_CONTROL_wcap; + irqs |= ST25R3911_IRQ_MASK_WCAP; + } + + /* Disable and clear all interrupts except Wake-Up IRQs */ + st25r3911DisableInterrupts( ST25R3911_IRQ_MASK_ALL ); + st25r3911GetInterrupt( irqs ); + st25r3911EnableInterrupts( irqs ); + + /* Enable Low Power Wake-Up Mode */ + st25r3911WriteRegister( ST25R3911_REG_WUP_TIMER_CONTROL, reg ); + st25r3911ChangeRegisterBits( ST25R3911_REG_OP_CONTROL, (ST25R3911_REG_OP_CONTROL_en | ST25R3911_REG_OP_CONTROL_wu), ST25R3911_REG_OP_CONTROL_wu ); + + gRFAL.wum.state = RFAL_WUM_STATE_ENABLED; + gRFAL.state = RFAL_STATE_WUM; + + return ERR_NONE; +} + + +/*******************************************************************************/ +bool rfalWakeUpModeHasWoke( void ) +{ + return (gRFAL.wum.state >= RFAL_WUM_STATE_ENABLED_WOKE); +} + + +/*******************************************************************************/ +static void rfalRunWakeUpModeWorker( void ) +{ + uint32_t irqs; + + if( gRFAL.state != RFAL_STATE_WUM ) + { + return; + } + + switch( gRFAL.wum.state ) + { + case RFAL_WUM_STATE_ENABLED: + case RFAL_WUM_STATE_ENABLED_WOKE: + + irqs = st25r3911GetInterrupt( ( ST25R3911_IRQ_MASK_WT | ST25R3911_IRQ_MASK_WAM | ST25R3911_IRQ_MASK_WPH | ST25R3911_IRQ_MASK_WCAP ) ); + if( irqs == ST25R3911_IRQ_MASK_NONE ) + { + break; /* No interrupt to process */ + } + + /*******************************************************************************/ + /* Check and mark which measurement(s) cause interrupt */ + if((irqs & ST25R3911_IRQ_MASK_WAM) != 0U) + { + gRFAL.wum.state = RFAL_WUM_STATE_ENABLED_WOKE; + } + + if((irqs & ST25R3911_IRQ_MASK_WPH) != 0U) + { + gRFAL.wum.state = RFAL_WUM_STATE_ENABLED_WOKE; + } + + if((irqs & ST25R3911_IRQ_MASK_WCAP) != 0U) + { + gRFAL.wum.state = RFAL_WUM_STATE_ENABLED_WOKE; + } + break; + + default: + /* MISRA 16.4: no empty default statement (a comment being enough) */ + break; + } +} + + +/*******************************************************************************/ +ReturnCode rfalWakeUpModeStop( void ) +{ + if( gRFAL.wum.state == RFAL_WUM_STATE_NOT_INIT ) + { + return ERR_WRONG_STATE; + } + + gRFAL.wum.state = RFAL_WUM_STATE_NOT_INIT; + + /* Re-Enable External Field Detector */ + st25r3911SetRegisterBits( ST25R3911_REG_AUX, ST25R3911_REG_AUX_en_fd ); + + /* Disable Wake-Up Mode */ + st25r3911ClrRegisterBits( ST25R3911_REG_OP_CONTROL, ST25R3911_REG_OP_CONTROL_wu ); + st25r3911DisableInterrupts( (ST25R3911_IRQ_MASK_WT | ST25R3911_IRQ_MASK_WAM | ST25R3911_IRQ_MASK_WPH | ST25R3911_IRQ_MASK_WCAP) ); + + /* Re-Enable the Oscillator */ + st25r3911OscOn(); + + /* Set Analog configurations for Wake-up Off event */ + rfalSetAnalogConfig( (RFAL_ANALOG_CONFIG_TECH_CHIP | RFAL_ANALOG_CONFIG_CHIP_WAKEUP_OFF) ); + + return ERR_NONE; +} + +#endif /* RFAL_FEATURE_WAKEUP_MODE */ + + +/******************************************************************************* + * RF Chip * + *******************************************************************************/ + +/*******************************************************************************/ +ReturnCode rfalChipWriteReg( uint16_t reg, const uint8_t* values, uint8_t len ) +{ + if( !st25r3911IsRegValid( (uint8_t)reg) ) + { + return ERR_PARAM; + } + + st25r3911WriteMultipleRegisters( (uint8_t)reg, values, len ); + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalChipReadReg( uint16_t reg, uint8_t* values, uint8_t len ) +{ + if( !st25r3911IsRegValid( (uint8_t)reg) ) + { + return ERR_PARAM; + } + + st25r3911ReadMultipleRegisters( (uint8_t)reg, values, len ); + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalChipExecCmd( uint16_t cmd ) +{ + if( !st25r3911IsCmdValid( (uint8_t)cmd) ) + { + return ERR_PARAM; + } + + st25r3911ExecuteCommand( (uint8_t) cmd ); + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalChipWriteTestReg( uint16_t reg, uint8_t value ) +{ + st25r3911WriteTestRegister( (uint8_t)reg, value ); + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalChipReadTestReg( uint16_t reg, uint8_t* value ) +{ + st25r3911ReadTestRegister( (uint8_t)reg, value ); + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalChipChangeRegBits( uint16_t reg, uint8_t valueMask, uint8_t value ) +{ + st25r3911ChangeRegisterBits( (uint8_t)reg, valueMask, value ); + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalChipChangeTestRegBits( uint16_t reg, uint8_t valueMask, uint8_t value ) +{ + st25r3911ChangeTestRegisterBits( (uint8_t)reg, valueMask, value ); + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalChipSetRFO( uint8_t rfo ) +{ + st25r3911WriteRegister( ST25R3911_REG_RFO_AM_OFF_LEVEL, rfo ); + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalChipGetRFO( uint8_t* result ) +{ + st25r3911ReadRegister(ST25R3911_REG_RFO_AM_ON_LEVEL, result); + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalChipMeasureAmplitude( uint8_t* result ) +{ + st25r3911MeasureAmplitude( result ); + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalChipMeasurePhase( uint8_t* result ) +{ + st25r3911MeasurePhase( result ); + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalChipMeasureCapacitance( uint8_t* result ) +{ + st25r3911MeasureCapacitance( result ); + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalChipMeasurePowerSupply( uint8_t param, uint8_t* result ) +{ + *result = st25r3911MeasurePowerSupply( param ); + + return ERR_NONE; +} + + + +/*******************************************************************************/ + +/* All bitrates defined in ST25R3911B registers are nibbles. This rfal code + * up there only works if equality to values of enum rfalBitrate is guaranteed: */ +extern uint8_t equalityGuard_RFAL_BR_106[(ST25R3911_REG_BIT_RATE_rxrate_106==(uint8_t)RFAL_BR_106)?1:(-1)]; +extern uint8_t equalityGuard_RFAL_BR_212[(ST25R3911_REG_BIT_RATE_rxrate_212==(uint8_t)RFAL_BR_212)?1:(-1)]; +extern uint8_t equalityGuard_RFAL_BR_424[(ST25R3911_REG_BIT_RATE_rxrate_424==(uint8_t)RFAL_BR_424)?1:(-1)]; +extern uint8_t equalityGuard_RFAL_BR_848[(ST25R3911_REG_BIT_RATE_rxrate_848==(uint8_t)RFAL_BR_848)?1:(-1)]; +extern uint8_t equalityGuard_RFAL_BR_1695[(ST25R3911_REG_BIT_RATE_rxrate_1695==(uint8_t)RFAL_BR_1695)?1:(-1)]; +extern uint8_t equalityGuard_RFAL_BR_3390[(ST25R3911_REG_BIT_RATE_rxrate_3390==(uint8_t)RFAL_BR_3390)?1:(-1)]; +extern uint8_t equalityGuard_RFAL_BR_6780[(ST25R3911_REG_BIT_RATE_rxrate_6780==(uint8_t)RFAL_BR_6780)?1:(-1)]; diff --git a/Software/Middlewares/ST/rfal/Src/rfal_st25tb.c b/Software/Middlewares/ST/rfal/Src/rfal_st25tb.c new file mode 100644 index 0000000..41c9430 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_st25tb.c @@ -0,0 +1,551 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_st25tb.c + * + * \author Gustavo Patricio + * + * \brief Implementation of ST25TB interface + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "rfal_st25tb.h" +#include "utils.h" + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ +#ifndef RFAL_FEATURE_ST25TB + #define RFAL_FEATURE_ST25TB false /* ST25TB module configuration missing. Disabled by default */ +#endif + +#if RFAL_FEATURE_ST25TB + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define RFAL_ST25TB_CMD_LEN 1U /*!< ST25TB length of a command */ +#define RFAL_ST25TB_SLOTS 16U /*!< ST25TB number of slots */ +#define RFAL_ST25TB_SLOTNUM_MASK 0x0FU /*!< ST25TB Slot Number bit mask on SlotMarker */ +#define RFAL_ST25TB_SLOTNUM_SHIFT 4U /*!< ST25TB Slot Number shift on SlotMarker */ + +#define RFAL_ST25TB_INITIATE_CMD1 0x06U /*!< ST25TB Initiate command byte1 */ +#define RFAL_ST25TB_INITIATE_CMD2 0x00U /*!< ST25TB Initiate command byte2 */ +#define RFAL_ST25TB_PCALL_CMD1 0x06U /*!< ST25TB Pcall16 command byte1 */ +#define RFAL_ST25TB_PCALL_CMD2 0x04U /*!< ST25TB Pcall16 command byte2 */ +#define RFAL_ST25TB_SELECT_CMD 0x0EU /*!< ST25TB Select command */ +#define RFAL_ST25TB_GET_UID_CMD 0x0BU /*!< ST25TB Get UID command */ +#define RFAL_ST25TB_COMPLETION_CMD 0x0FU /*!< ST25TB Completion command */ +#define RFAL_ST25TB_RESET_INV_CMD 0x0CU /*!< ST25TB Reset to Inventory command */ +#define RFAL_ST25TB_READ_BLOCK_CMD 0x08U /*!< ST25TB Read Block command */ +#define RFAL_ST25TB_WRITE_BLOCK_CMD 0x09U /*!< ST25TB Write Block command */ + + +#define RFAL_ST25TB_T0 2157U /*!< ST25TB t0 159 us ST25TB RF characteristics */ +#define RFAL_ST25TB_T1 2048U /*!< ST25TB t1 151 us ST25TB RF characteristics */ + +#define RFAL_ST25TB_FWT (RFAL_ST25TB_T0 + RFAL_ST25TB_T1) /*!< ST25TB FWT = T0 + T1 */ +#define RFAL_ST25TB_TW rfalConvMsTo1fc(7U) /*!< ST25TB TW : Programming time for write max 7ms */ + + +/* + ****************************************************************************** + * GLOBAL MACROS + ****************************************************************************** + */ + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + +/*! Initiate Request */ +typedef struct +{ + uint8_t cmd1; /*!< Initiate Request cmd1: 0x06 */ + uint8_t cmd2; /*!< Initiate Request cmd2: 0x00 */ +} rfalSt25tbInitiateReq; + +/*! Pcall16 Request */ +typedef struct +{ + uint8_t cmd1; /*!< Pcal16 Request cmd1: 0x06 */ + uint8_t cmd2; /*!< Pcal16 Request cmd2: 0x04 */ +} rfalSt25tbPcallReq; + + +/*! Select Request */ +typedef struct +{ + uint8_t cmd; /*!< Select Request cmd: 0x0E */ + uint8_t chipId; /*!< Chip ID */ +} rfalSt25tbSelectReq; + +/*! Read Block Request */ +typedef struct +{ + uint8_t cmd; /*!< Select Request cmd: 0x08 */ + uint8_t address; /*!< Block address */ +} rfalSt25tbReadBlockReq; + +/*! Write Block Request */ +typedef struct +{ + uint8_t cmd; /*!< Select Request cmd: 0x09 */ + uint8_t address; /*!< Block address */ + rfalSt25tbBlock data; /*!< Block Data */ +} rfalSt25tbWriteBlockReq; + + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ +/*! + ***************************************************************************** + * \brief ST25TB Poller Do Collision Resolution + * + * This method performs ST25TB Collision resolution loop for each slot + * + * \param[in] devLimit : device limit value, and size st25tbDevList + * \param[out] st25tbDevList : ST35TB listener device info + * \param[out] devCnt : Devices found counter + * + * \return colPending : true if a collision was detected + ***************************************************************************** + */ +static bool rfalSt25tbPollerDoCollisionResolution( uint8_t devLimit, rfalSt25tbListenDevice *st25tbDevList, uint8_t *devCnt ); + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + + +static bool rfalSt25tbPollerDoCollisionResolution( uint8_t devLimit, rfalSt25tbListenDevice *st25tbDevList, uint8_t *devCnt ) +{ + uint8_t i; + uint8_t chipId; + ReturnCode ret; + bool col; + + col = false; + + for(i = 0; i < RFAL_ST25TB_SLOTS; i++) + { + platformDelay(1); /* Wait t2: Answer to new request delay */ + + if( i==0U ) + { + /* Step 2: Send Pcall16 */ + ret = rfalSt25tbPollerPcall( &chipId ); + } + else + { + /* Step 3-17: Send Pcall16 */ + ret = rfalSt25tbPollerSlotMarker( i, &chipId ); + } + + if( ret == ERR_NONE ) + { + /* Found another device */ + st25tbDevList[*devCnt].chipID = chipId; + st25tbDevList[*devCnt].isDeselected = false; + + /* Select Device, retrieve its UID */ + ret = rfalSt25tbPollerSelect( chipId ); + + /* By Selecting this device, the previous gets Deselected */ + if( (*devCnt) > 0U ) + { + st25tbDevList[(*devCnt)-1U].isDeselected = true; + } + + if( ERR_NONE == ret ) + { + rfalSt25tbPollerGetUID( &st25tbDevList[*devCnt].UID ); + } + + if( ERR_NONE == ret ) + { + (*devCnt)++; + } + } + else if( (ret == ERR_CRC) || (ret == ERR_FRAMING) ) + { + col = true; + } + else + { + /* MISRA 15.7 - Empty else */ + } + + if( *devCnt >= devLimit ) + { + break; + } + } + return col; +} + + +/* +****************************************************************************** +* LOCAL VARIABLES +****************************************************************************** +*/ + +/* +****************************************************************************** +* GLOBAL FUNCTIONS +****************************************************************************** +*/ + +/*******************************************************************************/ +ReturnCode rfalSt25tbPollerInitialize( void ) +{ + return rfalNfcbPollerInitialize(); +} + + +/*******************************************************************************/ +ReturnCode rfalSt25tbPollerCheckPresence( uint8_t *chipId ) +{ + ReturnCode ret; + uint8_t chipIdRes; + + chipIdRes = 0x00; + + /* Send Initiate Request */ + ret = rfalSt25tbPollerInitiate( &chipIdRes ); + + /* Check if a transmission error was detected */ + if( (ret == ERR_CRC) || (ret == ERR_FRAMING) ) + { + return ERR_NONE; + } + + /* Copy chip ID if requested */ + if( chipId != NULL ) + { + *chipId = chipIdRes; + } + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalSt25tbPollerInitiate( uint8_t *chipId ) +{ + ReturnCode ret; + uint16_t rxLen; + rfalSt25tbInitiateReq initiateReq; + uint8_t rxBuf[RFAL_ST25TB_CHIP_ID_LEN + RFAL_ST25TB_CRC_LEN]; /* In case we receive less data that CRC, RF layer will not remove the CRC from buffer */ + + /* Compute Initiate Request */ + initiateReq.cmd1 = RFAL_ST25TB_INITIATE_CMD1; + initiateReq.cmd2 = RFAL_ST25TB_INITIATE_CMD2; + + /* Send Initiate Request */ + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&initiateReq, sizeof(rfalSt25tbInitiateReq), (uint8_t*)rxBuf, sizeof(rxBuf), &rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_ST25TB_FWT ); + + /* Check for valid Select Response */ + if( (ret == ERR_NONE) && (rxLen != RFAL_ST25TB_CHIP_ID_LEN) ) + { + return ERR_PROTO; + } + + /* Copy chip ID if requested */ + if( chipId != NULL ) + { + *chipId = *rxBuf; + } + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalSt25tbPollerPcall( uint8_t *chipId ) +{ + ReturnCode ret; + uint16_t rxLen; + rfalSt25tbPcallReq pcallReq; + + /* Compute Pcal16 Request */ + pcallReq.cmd1 = RFAL_ST25TB_PCALL_CMD1; + pcallReq.cmd2 = RFAL_ST25TB_PCALL_CMD2; + + /* Send Pcal16 Request */ + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&pcallReq, sizeof(rfalSt25tbPcallReq), (uint8_t*)chipId, RFAL_ST25TB_CHIP_ID_LEN, &rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_ST25TB_FWT ); + + /* Check for valid Select Response */ + if( (ret == ERR_NONE) && (rxLen != RFAL_ST25TB_CHIP_ID_LEN) ) + { + return ERR_PROTO; + } + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalSt25tbPollerSlotMarker( uint8_t slotNum, uint8_t *chipIdRes ) +{ + ReturnCode ret; + uint16_t rxLen; + uint8_t slotMarker; + + if( (slotNum == 0U) || (slotNum > 15U) ) + { + return ERR_PARAM; + } + + /* Compute SlotMarker */ + slotMarker = ( ((slotNum & RFAL_ST25TB_SLOTNUM_MASK) << RFAL_ST25TB_SLOTNUM_SHIFT) | RFAL_ST25TB_PCALL_CMD1 ); + + + /* Send SlotMarker */ + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&slotMarker, RFAL_ST25TB_CMD_LEN, (uint8_t*)chipIdRes, RFAL_ST25TB_CHIP_ID_LEN, &rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_ST25TB_FWT ); + + /* Check for valid ChipID Response */ + if( (ret == ERR_NONE) && (rxLen != RFAL_ST25TB_CHIP_ID_LEN) ) + { + return ERR_PROTO; + } + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalSt25tbPollerSelect( uint8_t chipId ) +{ + ReturnCode ret; + uint16_t rxLen; + rfalSt25tbSelectReq selectReq; + uint8_t chipIdRes; + + /* Compute Select Request */ + selectReq.cmd = RFAL_ST25TB_SELECT_CMD; + selectReq.chipId = chipId; + + /* Send Select Request */ + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&selectReq, sizeof(rfalSt25tbSelectReq), (uint8_t*)&chipIdRes, RFAL_ST25TB_CHIP_ID_LEN, &rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_ST25TB_FWT ); + + /* Check for valid Select Response */ + if( (ret == ERR_NONE) && ((rxLen != RFAL_ST25TB_CHIP_ID_LEN) || (chipIdRes != chipId)) ) + { + return ERR_PROTO; + } + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalSt25tbPollerGetUID( rfalSt25tbUID *UID ) +{ + ReturnCode ret; + uint16_t rxLen; + uint8_t getUidReq; + + + /* Compute Get UID Request */ + getUidReq = RFAL_ST25TB_GET_UID_CMD; + + /* Send Select Request */ + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&getUidReq, RFAL_ST25TB_CMD_LEN, (uint8_t*)UID, sizeof(rfalSt25tbUID), &rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_ST25TB_FWT ); + + /* Check for valid UID Response */ + if( (ret == ERR_NONE) && (rxLen != RFAL_ST25TB_UID_LEN) ) + { + return ERR_PROTO; + } + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalSt25tbPollerCollisionResolution( uint8_t devLimit, rfalSt25tbListenDevice *st25tbDevList, uint8_t *devCnt ) +{ + + uint8_t chipId; + ReturnCode ret; + bool detected; /* collision or device was detected */ + + if( (st25tbDevList == NULL) || (devCnt == NULL) || (devLimit == 0U) ) + { + return ERR_PARAM; + } + + *devCnt = 0; + + /* Step 1: Send Initiate */ + ret = rfalSt25tbPollerInitiate( &chipId ); + if( ret == ERR_NONE ) + { + /* If only 1 answer is detected */ + st25tbDevList[*devCnt].chipID = chipId; + st25tbDevList[*devCnt].isDeselected = false; + + /* Retrieve its UID and keep it Selected*/ + ret = rfalSt25tbPollerSelect( chipId ); + + if( ERR_NONE == ret ) + { + ret = rfalSt25tbPollerGetUID( &st25tbDevList[*devCnt].UID ); + } + + if( ERR_NONE == ret ) + { + (*devCnt)++; + } + } + /* Always proceed to Pcall16 anticollision as phase differences of tags can lead to no tag recognized, even if there is one */ + if( *devCnt < devLimit ) + { + /* Multiple device responses */ + do + { + detected = rfalSt25tbPollerDoCollisionResolution( devLimit, st25tbDevList, devCnt ); + } + while( (detected == true) && (*devCnt < devLimit) ); + } + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalSt25tbPollerReadBlock( uint8_t blockAddress, rfalSt25tbBlock *blockData ) +{ + ReturnCode ret; + uint16_t rxLen; + rfalSt25tbReadBlockReq readBlockReq; + + + /* Compute Read Block Request */ + readBlockReq.cmd = RFAL_ST25TB_READ_BLOCK_CMD; + readBlockReq.address = blockAddress; + + /* Send Read Block Request */ + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&readBlockReq, sizeof(rfalSt25tbReadBlockReq), (uint8_t*)blockData, sizeof(rfalSt25tbBlock), &rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_ST25TB_FWT ); + + /* Check for valid UID Response */ + if( (ret == ERR_NONE) && (rxLen != RFAL_ST25TB_BLOCK_LEN) ) + { + return ERR_PROTO; + } + + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalSt25tbPollerWriteBlock( uint8_t blockAddress, const rfalSt25tbBlock *blockData ) +{ + ReturnCode ret; + uint16_t rxLen; + rfalSt25tbWriteBlockReq writeBlockReq; + rfalSt25tbBlock tmpBlockData; + + + /* Compute Write Block Request */ + writeBlockReq.cmd = RFAL_ST25TB_WRITE_BLOCK_CMD; + writeBlockReq.address = blockAddress; + ST_MEMCPY( &writeBlockReq.data, blockData, RFAL_ST25TB_BLOCK_LEN ); + + /* Send Write Block Request */ + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&writeBlockReq, sizeof(rfalSt25tbWriteBlockReq), tmpBlockData, RFAL_ST25TB_BLOCK_LEN, &rxLen, RFAL_TXRX_FLAGS_DEFAULT, (RFAL_ST25TB_FWT + RFAL_ST25TB_TW) ); + + /* Check if an unexpected answer was received */ + if( ret == ERR_NONE ) + { + return ERR_PROTO; + } + /* Check there was any error besides Timeout*/ + if( ret != ERR_TIMEOUT ) + { + return ret; + } + + ret = rfalSt25tbPollerReadBlock(blockAddress, &tmpBlockData); + if( ret == ERR_NONE ) + { + if( ST_BYTECMP( &tmpBlockData, blockData, RFAL_ST25TB_BLOCK_LEN ) == 0 ) + { + return ERR_NONE; + } + return ERR_PROTO; + } + return ret; +} + + +/*******************************************************************************/ +ReturnCode rfalSt25tbPollerCompletion( void ) +{ + uint8_t completionReq; + + /* Compute Completion Request */ + completionReq = RFAL_ST25TB_COMPLETION_CMD; + + /* Send Completion Request, no response is expected */ + return rfalTransceiveBlockingTxRx( (uint8_t*)&completionReq, RFAL_ST25TB_CMD_LEN, NULL, 0, NULL, RFAL_TXRX_FLAGS_DEFAULT, RFAL_ST25TB_FWT ); +} + + +/*******************************************************************************/ +ReturnCode rfalSt25tbPollerResetToInventory( void ) +{ + uint8_t resetInvReq; + + /* Compute Completion Request */ + resetInvReq = RFAL_ST25TB_RESET_INV_CMD; + + /* Send Completion Request, no response is expected */ + return rfalTransceiveBlockingTxRx( (uint8_t*)&resetInvReq, RFAL_ST25TB_CMD_LEN, NULL, 0, NULL, RFAL_TXRX_FLAGS_DEFAULT, RFAL_ST25TB_FWT ); +} + +#endif /* RFAL_FEATURE_ST25TB */ diff --git a/Software/Middlewares/ST/rfal/Src/rfal_st25xv.c b/Software/Middlewares/ST/rfal/Src/rfal_st25xv.c new file mode 100644 index 0000000..c835004 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_st25xv.c @@ -0,0 +1,528 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_st25xv.c + * + * \author Gustavo Patricio + * + * \brief NFC-V ST25 NFC-V Tag specific features + * + * This module provides support for ST's specific features available on + * NFC-V (ISO15693) tag families: ST25D, ST25TV, M24LR + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "rfal_st25xv.h" +#include "rfal_nfcv.h" +#include "utils.h" + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_ST25xV + #define RFAL_FEATURE_ST25xV false /* ST25xV module configuration missing. Disabled by default */ +#endif + +#if RFAL_FEATURE_ST25xV + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define RFAL_ST25xV_READ_CONFIG_LEN 2U /*!< READ CONFIGURATION length */ +#define RFAL_ST25xV_READ_MSG_LEN_LEN 2U /*!< READ MESSAGE LENGTH length */ +#define RFAL_ST25xV_CONF_POINTER_LEN 1U /*!< READ/WRITE CONFIGURATION Pointer length */ +#define RFAL_ST25xV_CONF_REGISTER_LEN 1U /*!< READ/WRITE CONFIGURATION Register length */ +#define RFAL_ST25xV_PWDNUM_LEN 1U /*!< Password Number length */ +#define RFAL_ST25xV_PWD_LEN 8U /*!< Password length */ +#define RFAL_ST25xV_MBPOINTER_LEN 1U /*!< Read Message MBPointer length */ +#define RFAL_ST25xV_NUMBYTES_LEN 1U /*!< Read Message Number of Bytes length */ + +#define RFAL_ST25TV02K_TBOOT_RF 1U /*!< RF Boot time (Minimum time from carrier generation to first data) */ +#define RFAL_ST25TV02K_TRF_OFF 2U /*!< RF OFF time */ + +#define RFAL_FDT_POLL_MAX rfalConvMsTo1fc(20) /*!< Maximum Wait time FDTV,EOF 20 ms Digital 2.0 B.5 */ +#define RFAL_NFCV_FLAG_POS 0U /*!< Flag byte position */ +#define RFAL_NFCV_FLAG_LEN 1U /*!< Flag byte length */ + + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +static ReturnCode rfalST25xVPollerGenericReadConfiguration(uint8_t cmd, uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t* regValue ); +static ReturnCode rfalST25xVPollerGenericWriteConfiguration( uint8_t cmd, uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t regValue ); +static ReturnCode rfalST25xVPollerGenericReadMessageLength( uint8_t cmd, uint8_t flags, const uint8_t* uid, uint8_t* msgLen ); +static ReturnCode rfalST25xVPollerGenericReadMessage( uint8_t cmd, uint8_t flags, const uint8_t* uid, uint8_t mbPointer, uint8_t numBytes, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ); +static ReturnCode rfalST25xVPollerGenericWriteMessage( uint8_t cmd, uint8_t flags, const uint8_t* uid, uint8_t msgLen, const uint8_t* msgData, uint8_t* txBuf, uint16_t txBufLen ); +/* +****************************************************************************** +* LOCAL FUNCTIONS +****************************************************************************** +*/ + +/*******************************************************************************/ +static ReturnCode rfalST25xVPollerGenericReadConfiguration(uint8_t cmd, uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t* regValue ) +{ + ReturnCode ret; + uint8_t p; + uint16_t rcvLen; + rfalNfcvGenericRes res; + + if( regValue == NULL ) + { + return ERR_PARAM; + } + + p = pointer; + + ret = rfalNfcvPollerTransceiveReq( cmd, flags, RFAL_NFCV_ST_IC_MFG_CODE, uid, &p, sizeof(uint8_t), (uint8_t*)&res, sizeof(rfalNfcvGenericRes), &rcvLen ); + if( ret == ERR_NONE ) + { + if( rcvLen < RFAL_ST25xV_READ_CONFIG_LEN ) + { + ret = ERR_PROTO; + } + else + { + *regValue = res.data[0]; + } + } + return ret; +} + +/*******************************************************************************/ +static ReturnCode rfalST25xVPollerGenericWriteConfiguration( uint8_t cmd, uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t regValue ) +{ + uint8_t data[RFAL_ST25xV_CONF_POINTER_LEN + RFAL_ST25xV_CONF_REGISTER_LEN]; + uint8_t dataLen; + uint16_t rcvLen; + rfalNfcvGenericRes res; + + dataLen = 0U; + + data[dataLen++] = pointer; + data[dataLen++] = regValue; + + return rfalNfcvPollerTransceiveReq( cmd, flags, RFAL_NFCV_ST_IC_MFG_CODE, uid, data, dataLen, (uint8_t*)&res, sizeof(rfalNfcvGenericRes), &rcvLen ); + +} + +/*******************************************************************************/ +static ReturnCode rfalST25xVPollerGenericReadMessageLength( uint8_t cmd, uint8_t flags, const uint8_t* uid, uint8_t* msgLen ) +{ + ReturnCode ret; + uint16_t rcvLen; + rfalNfcvGenericRes res; + + if( msgLen == NULL ) + { + return ERR_PARAM; + } + + ret = rfalNfcvPollerTransceiveReq( cmd, flags, RFAL_NFCV_ST_IC_MFG_CODE, uid, NULL, 0, (uint8_t*)&res, sizeof(rfalNfcvGenericRes), &rcvLen ); + if( ret == ERR_NONE ) + { + if( rcvLen < RFAL_ST25xV_READ_MSG_LEN_LEN ) + { + ret = ERR_PROTO; + } + else + { + *msgLen = res.data[0]; + } + } + return ret; +} + +/*******************************************************************************/ +static ReturnCode rfalST25xVPollerGenericReadMessage( uint8_t cmd, uint8_t flags, const uint8_t* uid, uint8_t mbPointer, uint8_t numBytes, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + uint8_t data[RFAL_ST25xV_MBPOINTER_LEN + RFAL_ST25xV_NUMBYTES_LEN]; + uint8_t dataLen; + + dataLen = 0; + + /* Compute Request Data */ + data[dataLen++] = mbPointer; + data[dataLen++] = numBytes; + + return rfalNfcvPollerTransceiveReq( cmd, flags, RFAL_NFCV_ST_IC_MFG_CODE, uid, data, dataLen, rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +static ReturnCode rfalST25xVPollerGenericWriteMessage( uint8_t cmd, uint8_t flags, const uint8_t* uid, uint8_t msgLen, const uint8_t* msgData, uint8_t* txBuf, uint16_t txBufLen ) +{ + ReturnCode ret; + uint8_t reqFlag; + uint16_t msgIt; + rfalBitRate rxBR; + bool fastMode; + rfalNfcvGenericRes res; + uint16_t rcvLen; + + /* Calculate required Tx buf length: Mfg Code UID MSGLen MSGLen+1 */ + msgIt = (uint16_t)( msgLen + sizeof(flags) + sizeof(cmd) + 1U + ((uid != NULL) ? RFAL_NFCV_UID_LEN : 0U) + 1U + 1U ); + + /* Check for valid parameters */ + if( (txBuf == NULL) || (msgData == NULL) || (msgLen == 0U) || (msgLen == 0xFFU) || (txBufLen < msgIt) ) + { + return ERR_PARAM; + } + + msgIt = 0; + fastMode = false; + + /* Check if the command is an ST's Fast command */ + if( cmd == (uint8_t)RFAL_NFCV_CMD_FAST_WRITE_MESSAGE ) + { + /* Store current Rx bit rate and move to fast mode */ + rfalGetBitRate( NULL, &rxBR ); + rfalSetBitRate( RFAL_BR_KEEP, RFAL_BR_52p97 ); + + fastMode = true; + } + + /* Compute Request Command */ + reqFlag = (uint8_t)(flags & (~((uint32_t)RFAL_NFCV_REQ_FLAG_ADDRESS) & ~((uint32_t)RFAL_NFCV_REQ_FLAG_SELECT))); + reqFlag |= (( uid != NULL ) ? (uint8_t)RFAL_NFCV_REQ_FLAG_ADDRESS : (uint8_t)RFAL_NFCV_REQ_FLAG_SELECT); + + txBuf[msgIt++] = reqFlag; + txBuf[msgIt++] = cmd; + txBuf[msgIt++] = RFAL_NFCV_ST_IC_MFG_CODE; + + if( uid != NULL ) + { + ST_MEMCPY( &txBuf[msgIt], uid, RFAL_NFCV_UID_LEN ); + msgIt += RFAL_NFCV_UID_LEN; + } + txBuf[msgIt++] = msgLen; + ST_MEMCPY( &txBuf[msgIt], msgData, (uint8_t)(msgLen + 1U) ); /* Message Data contains (MSGLength + 1) bytes */ + msgIt += (uint8_t)(msgLen + 1U); + + /* Transceive Command */ + ret = rfalTransceiveBlockingTxRx( txBuf, msgIt, (uint8_t*)&res, sizeof(rfalNfcvGenericRes), &rcvLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_FDT_POLL_MAX ); + + + /* Restore Rx BitRate */ + if( fastMode ) + { + rfalSetBitRate( RFAL_BR_KEEP, rxBR ); + } + + if( ret != ERR_NONE ) + { + return ret; + } + + /* Check if the response minimum length has been received */ + if( rcvLen < (uint8_t)RFAL_NFCV_FLAG_LEN ) + { + return ERR_PROTO; + } + + /* Check if an error has been signalled */ + if( (res.RES_FLAG & (uint8_t)RFAL_NFCV_RES_FLAG_ERROR) != 0U ) + { + return ERR_PROTO; + } + + return ERR_NONE; +} + +/* +****************************************************************************** +* GLOBAL FUNCTIONS +****************************************************************************** +*/ + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerM24LRReadSingleBlock( uint8_t flags, const uint8_t* uid, uint16_t blockNum, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + uint8_t data[RFAL_NFCV_BLOCKNUM_M24LR_LEN]; + uint8_t dataLen; + + dataLen = 0; + + /* Compute Request Data */ + data[dataLen++] = (uint8_t)blockNum; /* Set M24LR Block Number (16 bits) LSB */ + data[dataLen++] = (uint8_t)(blockNum >> 8U); /* Set M24LR Block Number (16 bits) MSB */ + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_READ_SINGLE_BLOCK, (flags | (uint8_t)RFAL_NFCV_REQ_FLAG_PROTOCOL_EXT), RFAL_NFCV_PARAM_SKIP, uid, data, dataLen, rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerM24LRWriteSingleBlock( uint8_t flags, const uint8_t* uid, uint16_t blockNum, const uint8_t* wrData, uint8_t blockLen ) +{ + uint8_t data[(RFAL_NFCV_BLOCKNUM_M24LR_LEN + RFAL_NFCV_MAX_BLOCK_LEN)]; + uint8_t dataLen; + uint16_t rcvLen; + rfalNfcvGenericRes res; + + /* Check for valid parameters */ + if( (blockLen == 0U) || (blockLen > (uint8_t)RFAL_NFCV_MAX_BLOCK_LEN) || (wrData == NULL) ) + { + return ERR_PARAM; + } + + dataLen = 0U; + + /* Compute Request Data */ + data[dataLen++] = (uint8_t)blockNum; /* Set M24LR Block Number (16 bits) LSB */ + data[dataLen++] = (uint8_t)(blockNum >> 8U); /* Set M24LR Block Number (16 bits) MSB */ + ST_MEMCPY( &data[dataLen], wrData, blockLen ); /* Append Block data to write */ + dataLen += blockLen; + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_WRITE_SINGLE_BLOCK, (flags | (uint8_t)RFAL_NFCV_REQ_FLAG_PROTOCOL_EXT), RFAL_NFCV_PARAM_SKIP, uid, data, dataLen, (uint8_t*)&res, sizeof(rfalNfcvGenericRes), &rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerM24LRReadMultipleBlocks( uint8_t flags, const uint8_t* uid, uint16_t firstBlockNum, uint8_t numOfBlocks, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + uint8_t data[(RFAL_NFCV_BLOCKNUM_M24LR_LEN + RFAL_NFCV_BLOCKNUM_M24LR_LEN)]; + uint8_t dataLen; + + dataLen = 0U; + + /* Compute Request Data */ + data[dataLen++] = (uint8_t)firstBlockNum; /* Set M24LR Block Number (16 bits) LSB */ + data[dataLen++] = (uint8_t)(firstBlockNum >> 8U); /* Set M24LR Block Number (16 bits) MSB */ + data[dataLen++] = numOfBlocks; /* Set number of blocks to read */ + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_READ_MULTIPLE_BLOCKS, (flags | (uint8_t)RFAL_NFCV_REQ_FLAG_PROTOCOL_EXT), RFAL_NFCV_PARAM_SKIP, uid, data, dataLen, rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerFastReadSingleBlock( uint8_t flags, const uint8_t* uid, uint8_t blockNum, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + uint8_t bn; + + bn = blockNum; + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_FAST_READ_SINGLE_BLOCK, flags, RFAL_NFCV_ST_IC_MFG_CODE, uid, &bn, sizeof(uint8_t), rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerM24LRFastReadSingleBlock( uint8_t flags, const uint8_t* uid, uint16_t blockNum, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + uint8_t data[RFAL_NFCV_BLOCKNUM_M24LR_LEN]; + uint8_t dataLen; + + dataLen = 0; + + /* Compute Request Data */ + data[dataLen++] = (uint8_t)blockNum; /* Set M24LR Block Number (16 bits) LSB */ + data[dataLen++] = (uint8_t)(blockNum >> 8U); /* Set M24LR Block Number (16 bits) MSB */ + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_FAST_READ_SINGLE_BLOCK, (flags | (uint8_t)RFAL_NFCV_REQ_FLAG_PROTOCOL_EXT), RFAL_NFCV_ST_IC_MFG_CODE, uid, data, dataLen, rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerM24LRFastReadMultipleBlocks( uint8_t flags, const uint8_t* uid, uint16_t firstBlockNum, uint8_t numOfBlocks, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + uint8_t data[(RFAL_NFCV_BLOCKNUM_M24LR_LEN + RFAL_NFCV_BLOCKNUM_M24LR_LEN)]; + uint8_t dataLen; + + dataLen = 0U; + + /* Compute Request Data */ + data[dataLen++] = (uint8_t)firstBlockNum; /* Set M24LR Block Number (16 bits) LSB */ + data[dataLen++] = (uint8_t)(firstBlockNum >> 8U); /* Set M24LR Block Number (16 bits) MSB */ + data[dataLen++] = numOfBlocks; /* Set number of blocks to read */ + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_FAST_READ_MULTIPLE_BLOCKS, (flags | (uint8_t)RFAL_NFCV_REQ_FLAG_PROTOCOL_EXT), RFAL_NFCV_ST_IC_MFG_CODE, uid, data, dataLen, rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerFastReadMultipleBlocks( uint8_t flags, const uint8_t* uid, uint8_t firstBlockNum, uint8_t numOfBlocks, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + uint8_t data[(RFAL_NFCV_BLOCKNUM_LEN + RFAL_NFCV_BLOCKNUM_LEN)]; + uint8_t dataLen; + + dataLen = 0U; + + /* Compute Request Data */ + data[dataLen++] = firstBlockNum; /* Set first Block Number */ + data[dataLen++] = numOfBlocks; /* Set number of blocks to read */ + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_FAST_READ_MULTIPLE_BLOCKS, flags, RFAL_NFCV_ST_IC_MFG_CODE, uid, data, dataLen, rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerFastExtendedReadSingleBlock( uint8_t flags, const uint8_t* uid, uint16_t blockNum, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + uint8_t data[RFAL_NFCV_BLOCKNUM_EXTENDED_LEN]; + uint8_t dataLen; + + dataLen = 0U; + + /* Compute Request Data */ + data[dataLen++] = (uint8_t)blockNum; /* TS T5T 1.0 BNo is considered as a multi-byte field. TS T5T 1.0 5.1.1.13 multi-byte field follows [DIGITAL]. [DIGITAL] 9.3.1 A multiple byte field is transmitted LSB first. */ + data[dataLen++] = (uint8_t)((blockNum >> 8U) & 0xFFU); + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_FAST_EXTENDED_READ_SINGLE_BLOCK, flags, RFAL_NFCV_ST_IC_MFG_CODE, uid, data, dataLen, rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerFastExtReadMultipleBlocks( uint8_t flags, const uint8_t* uid, uint16_t firstBlockNum, uint16_t numOfBlocks, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + uint8_t data[(RFAL_NFCV_BLOCKNUM_EXTENDED_LEN + RFAL_NFCV_BLOCKNUM_EXTENDED_LEN)]; + uint8_t dataLen; + + dataLen = 0U; + + /* Compute Request Data */ + data[dataLen++] = (uint8_t)((firstBlockNum >> 0U) & 0xFFU); + data[dataLen++] = (uint8_t)((firstBlockNum >> 8U) & 0xFFU); + data[dataLen++] = (uint8_t)((numOfBlocks >> 0U) & 0xFFU); + data[dataLen++] = (uint8_t)((numOfBlocks >> 8U) & 0xFFU); + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_FAST_EXTENDED_READ_MULTIPLE_BLOCKS, flags, RFAL_NFCV_ST_IC_MFG_CODE, uid, data, dataLen, rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerReadConfiguration( uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t* regValue ) +{ + return rfalST25xVPollerGenericReadConfiguration(RFAL_NFCV_CMD_READ_CONFIGURATION, flags, uid, pointer, regValue ); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerWriteConfiguration( uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t regValue ) +{ + return rfalST25xVPollerGenericWriteConfiguration( RFAL_NFCV_CMD_WRITE_CONFIGURATION, flags, uid, pointer, regValue); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerReadDynamicConfiguration( uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t* regValue ) +{ + return rfalST25xVPollerGenericReadConfiguration(RFAL_NFCV_CMD_READ_DYN_CONFIGURATION, flags, uid, pointer, regValue ); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerWriteDynamicConfiguration( uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t regValue ) +{ + return rfalST25xVPollerGenericWriteConfiguration( RFAL_NFCV_CMD_WRITE_DYN_CONFIGURATION, flags, uid, pointer, regValue); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerFastReadDynamicConfiguration( uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t* regValue ) +{ + return rfalST25xVPollerGenericReadConfiguration(RFAL_NFCV_CMD_FAST_READ_DYN_CONFIGURATION, flags, uid, pointer, regValue ); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerFastWriteDynamicConfiguration( uint8_t flags, const uint8_t* uid, uint8_t pointer, uint8_t regValue ) +{ + return rfalST25xVPollerGenericWriteConfiguration( RFAL_NFCV_CMD_FAST_WRITE_DYN_CONFIGURATION, flags, uid, pointer, regValue); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerPresentPassword( uint8_t flags, const uint8_t* uid, uint8_t pwdNum, const uint8_t *pwd, uint8_t pwdLen) +{ + uint8_t data[RFAL_ST25xV_PWDNUM_LEN + RFAL_ST25xV_PWD_LEN]; + uint8_t dataLen; + uint16_t rcvLen; + rfalNfcvGenericRes res; + + if( (pwdLen > RFAL_ST25xV_PWD_LEN) || (pwd == NULL) ) + { + return ERR_PARAM; + } + + dataLen = 0U; + data[dataLen++] = pwdNum;; + if( pwdLen > 0U ) + { + ST_MEMCPY(&data[dataLen], pwd, pwdLen); + } + dataLen += pwdLen; + + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_PRESENT_PASSWORD, flags, RFAL_NFCV_ST_IC_MFG_CODE, uid, data, dataLen, (uint8_t*)&res, sizeof(rfalNfcvGenericRes), &rcvLen ); + +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerGetRandomNumber( uint8_t flags, const uint8_t* uid, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + rfalFieldOff(); + platformDelay(RFAL_ST25TV02K_TRF_OFF); + rfalNfcvPollerInitialize(); + rfalFieldOnAndStartGT(); + platformDelay(RFAL_ST25TV02K_TBOOT_RF); + return rfalNfcvPollerTransceiveReq( RFAL_NFCV_CMD_GET_RANDOM_NUMBER, flags, RFAL_NFCV_ST_IC_MFG_CODE, uid, NULL, 0U, rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerWriteMessage( uint8_t flags, const uint8_t* uid, uint8_t msgLen, const uint8_t* msgData, uint8_t* txBuf, uint16_t txBufLen ) +{ + return rfalST25xVPollerGenericWriteMessage( RFAL_NFCV_CMD_WRITE_MESSAGE, flags, uid, msgLen, msgData, txBuf, txBufLen); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerFastWriteMessage( uint8_t flags, const uint8_t* uid, uint8_t msgLen, const uint8_t* msgData, uint8_t* txBuf, uint16_t txBufLen ) +{ + return rfalST25xVPollerGenericWriteMessage( RFAL_NFCV_CMD_FAST_WRITE_MESSAGE, flags, uid, msgLen, msgData, txBuf, txBufLen); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerReadMessageLength( uint8_t flags, const uint8_t* uid, uint8_t* msgLen ) +{ + return rfalST25xVPollerGenericReadMessageLength(RFAL_NFCV_CMD_READ_MESSAGE_LENGTH, flags, uid, msgLen); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerFastReadMsgLength( uint8_t flags, const uint8_t* uid, uint8_t* msgLen ) +{ + return rfalST25xVPollerGenericReadMessageLength(RFAL_NFCV_CMD_FAST_READ_MESSAGE_LENGTH, flags, uid, msgLen); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerReadMessage( uint8_t flags, const uint8_t* uid, uint8_t mbPointer, uint8_t numBytes, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + return rfalST25xVPollerGenericReadMessage(RFAL_NFCV_CMD_READ_MESSAGE, flags, uid, mbPointer, numBytes, rxBuf, rxBufLen, rcvLen ); +} + +/*******************************************************************************/ +ReturnCode rfalST25xVPollerFastReadMessage( uint8_t flags, const uint8_t* uid, uint8_t mbPointer, uint8_t numBytes, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) +{ + return rfalST25xVPollerGenericReadMessage(RFAL_NFCV_CMD_FAST_READ_MESSAGE, flags, uid, mbPointer, numBytes, rxBuf, rxBufLen, rcvLen ); +} + +#endif /* RFAL_FEATURE_ST25xV */ diff --git a/Software/Middlewares/ST/rfal/Src/rfal_t1t.c b/Software/Middlewares/ST/rfal/Src/rfal_t1t.c new file mode 100644 index 0000000..995899c --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_t1t.c @@ -0,0 +1,220 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_t1t.c + * + * \author Gustavo Patricio + * + * \brief Provides NFC-A T1T convenience methods and definitions + * + * This module provides an interface to perform as a NFC-A Reader/Writer + * to handle a Type 1 Tag T1T (Topaz) + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ +#include "rfal_t1t.h" +#include "utils.h" + +/* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_T1T + #define RFAL_FEATURE_T1T false /* T1T module configuration missing. Disabled by default */ +#endif + +#if RFAL_FEATURE_T1T + +/* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + +#define RFAL_T1T_DRD_READ (1236U*2U) /*!< DRD for Reads with n=9 => 1236/fc ~= 91 us T1T 1.2 4.4.2 */ +#define RFAL_T1T_DRD_WRITE 36052U /*!< DRD for Write with n=281 => 36052/fc ~= 2659 us T1T 1.2 4.4.2 */ +#define RFAL_T1T_DRD_WRITE_E 70996U /*!< DRD for Write/Erase with n=554 => 70996/fc ~= 5236 us T1T 1.2 4.4.2 */ + +#define RFAL_T1T_RID_RES_HR0_VAL 0x10U /*!< HR0 indicating NDEF support Digital 2.0 (Candidate) 11.6.2.1 */ +#define RFAL_T1T_RID_RES_HR0_MASK 0xF0U /*!< HR0 most significant nibble mask */ + +/* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + +/*! NFC-A T1T (Topaz) RID_REQ Digital 1.1 10.6.1 & Table 49 */ +typedef struct +{ + uint8_t cmd; /*!< T1T cmd: RID */ + uint8_t add; /*!< ADD: undefined value */ + uint8_t data; /*!< DATA: undefined value */ + uint8_t uid[RFAL_T1T_UID_LEN]; /*!< UID-echo: undefined value */ +} rfalT1TRidReq; + + +/*! NFC-A T1T (Topaz) RALL_REQ T1T 1.2 Table 4 */ +typedef struct +{ + uint8_t cmd; /*!< T1T cmd: RALL */ + uint8_t add1; /*!< ADD: 0x00 */ + uint8_t add0; /*!< ADD: 0x00 */ + uint8_t uid[RFAL_T1T_UID_LEN]; /*!< UID */ +} rfalT1TRallReq; + + +/*! NFC-A T1T (Topaz) WRITE_REQ T1T 1.2 Table 4 */ +typedef struct +{ + uint8_t cmd; /*!< T1T cmd: RALL */ + uint8_t add; /*!< ADD */ + uint8_t data; /*!< DAT */ + uint8_t uid[RFAL_T1T_UID_LEN]; /*!< UID */ +} rfalT1TWriteReq; + + +/*! NFC-A T1T (Topaz) WRITE_RES T1T 1.2 Table 4 */ +typedef struct +{ + uint8_t add; /*!< ADD */ + uint8_t data; /*!< DAT */ +} rfalT1TWriteRes; + +/* +****************************************************************************** +* LOCAL FUNCTION PROTOTYPES +****************************************************************************** +*/ + +/* +****************************************************************************** +* GLOBAL FUNCTIONS +****************************************************************************** +*/ + +ReturnCode rfalT1TPollerInitialize( void ) +{ + ReturnCode ret; + + EXIT_ON_ERR(ret, rfalSetMode( RFAL_MODE_POLL_NFCA_T1T, RFAL_BR_106, RFAL_BR_106 ) ); + rfalSetErrorHandling( RFAL_ERRORHANDLING_NFC ); + + rfalSetGT( RFAL_GT_NONE ); /* T1T should only be initialized after NFC-A mode, therefore the GT has been fulfilled */ + rfalSetFDTListen( RFAL_FDT_LISTEN_NFCA_POLLER ); /* T1T uses NFC-A FDT Listen with n=9 Digital 1.1 10.7.2 */ + rfalSetFDTPoll( RFAL_FDT_POLL_NFCA_T1T_POLLER ); + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalT1TPollerRid( rfalT1TRidRes *ridRes ) +{ + ReturnCode ret; + rfalT1TRidReq ridReq; + uint16_t rcvdLen; + + if( ridRes == NULL ) + { + return ERR_PARAM; + } + + /* Compute RID command and set Undefined Values to 0x00 Digital 1.1 10.6.1 */ + ST_MEMSET( &ridReq, 0x00, sizeof(rfalT1TRidReq) ); + ridReq.cmd = (uint8_t)RFAL_T1T_CMD_RID; + + EXIT_ON_ERR( ret, rfalTransceiveBlockingTxRx( (uint8_t*)&ridReq, sizeof(rfalT1TRidReq), (uint8_t*)ridRes, sizeof(rfalT1TRidRes), &rcvdLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_T1T_DRD_READ ) ); + + /* Check expected RID response length and the HR0 Digital 2.0 (Candidate) 11.6.2.1 */ + if( (rcvdLen != sizeof(rfalT1TRidRes)) || ((ridRes->hr0 & RFAL_T1T_RID_RES_HR0_MASK) != RFAL_T1T_RID_RES_HR0_VAL) ) + { + return ERR_PROTO; + } + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalT1TPollerRall( const uint8_t* uid, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rxRcvdLen ) +{ + rfalT1TRallReq rallReq; + + if( (rxBuf == NULL) || (uid == NULL) || (rxRcvdLen == NULL) ) + { + return ERR_PARAM; + } + + /* Compute RALL command and set Add to 0x00 */ + ST_MEMSET( &rallReq, 0x00, sizeof(rfalT1TRallReq) ); + rallReq.cmd = (uint8_t)RFAL_T1T_CMD_RALL; + ST_MEMCPY(rallReq.uid, uid, RFAL_T1T_UID_LEN); + + return rfalTransceiveBlockingTxRx( (uint8_t*)&rallReq, sizeof(rfalT1TRallReq), (uint8_t*)rxBuf, rxBufLen, rxRcvdLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_T1T_DRD_READ ); +} + + +/*******************************************************************************/ +ReturnCode rfalT1TPollerWrite( const uint8_t* uid, uint8_t address, uint8_t data ) +{ + rfalT1TWriteReq writeReq; + rfalT1TWriteRes writeRes; + uint16_t rxRcvdLen; + ReturnCode err; + + if( uid == NULL ) + { + return ERR_PARAM; + } + + writeReq.cmd = (uint8_t)RFAL_T1T_CMD_WRITE_E; + writeReq.add = address; + writeReq.data = data; + ST_MEMCPY(writeReq.uid, uid, RFAL_T1T_UID_LEN); + + err = rfalTransceiveBlockingTxRx( (uint8_t*)&writeReq, sizeof(rfalT1TWriteReq), (uint8_t*)&writeRes, sizeof(rfalT1TWriteRes), &rxRcvdLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_T1T_DRD_WRITE_E ); + + if( err == ERR_NONE ) + { + if( (writeReq.add != writeRes.add) || (writeReq.data != writeRes.data) || (rxRcvdLen != sizeof(rfalT1TWriteRes)) ) + { + return ERR_PROTO; + } + } + return err; +} + +#endif /* RFAL_FEATURE_T1T */ diff --git a/Software/Middlewares/ST/rfal/Src/rfal_t2t.c b/Software/Middlewares/ST/rfal/Src/rfal_t2t.c new file mode 100644 index 0000000..de80a81 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_t2t.c @@ -0,0 +1,242 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2018 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_t2t.c + * + * \author + * + * \brief Provides NFC-A T2T convenience methods and definitions + * + * This module provides an interface to perform as a NFC-A Reader/Writer + * to handle a Type 2 Tag T2T + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + #include "rfal_t2t.h" + #include "utils.h" + + /* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_T2T + #define RFAL_FEATURE_T2T false /* T2T module configuration missing. Disabled by default */ +#endif + +#if RFAL_FEATURE_T2T + + /* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ + #define RFAL_FDT_POLL_READ_MAX rfalConvMsTo1fc(5U) /*!< Maximum Wait time for Read command as defined in TS T2T 1.0 table 18 */ + #define RFAL_FDT_POLL_WRITE_MAX rfalConvMsTo1fc(10U) /*!< Maximum Wait time for Write command as defined in TS T2T 1.0 table 18 */ + #define RFAL_FDT_POLL_SL_MAX rfalConvMsTo1fc(1U) /*!< Maximum Wait time for Sector Select as defined in TS T2T 1.0 table 18 */ + #define RFAL_T2T_ACK_NACK_LEN 1U /*!< Len of NACK in bytes (4 bits) */ + #define RFAL_T2T_ACK 0x0AU /*!< ACK value */ + #define RFAL_T2T_ACK_MASK 0x0FU /*!< ACK value */ + + + #define RFAL_T2T_SECTOR_SELECT_P1_BYTE2 0xFFU /*!< Sector Select Packet 1 byte 2 */ + #define RFAL_T2T_SECTOR_SELECT_P2_RFU_LEN 3U /*!< Sector Select RFU length */ + + + + /* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + +/*! NFC-A T2T command set T2T 1.0 5.1 */ +typedef enum +{ + RFAL_T2T_CMD_READ = 0x30, /*!< T2T Read */ + RFAL_T2T_CMD_WRITE = 0xA2, /*!< T2T Write */ + RFAL_T2T_CMD_SECTOR_SELECT = 0xC2 /*!< T2T Sector Select */ +} rfalT2Tcmds; + + + /*! NFC-A T2T READ T2T 1.0 5.2 and table 11 */ +typedef struct +{ + uint8_t code; /*!< Command code */ + uint8_t blNo; /*!< Block number */ +} rfalT2TReadReq; + + + /*! NFC-A T2T WRITE T2T 1.0 5.3 and table 12 */ +typedef struct +{ + uint8_t code; /*!< Command code */ + uint8_t blNo; /*!< Block number */ + uint8_t data[RFAL_T2T_WRITE_DATA_LEN]; /*!< Data */ +} rfalT2TWriteReq; + + +/*! NFC-A T2T SECTOR SELECT Packet 1 T2T 1.0 5.4 and table 13 */ +typedef struct +{ + uint8_t code; /*!< Command code */ + uint8_t byte2; /*!< Sector Select Packet 1 byte 2 */ +} rfalT2TSectorSelectP1Req; + + +/*! NFC-A T2T SECTOR SELECT Packet 2 T2T 1.0 5.4 and table 13 */ +typedef struct +{ + uint8_t secNo; /*!< Block number */ + uint8_t rfu[RFAL_T2T_SECTOR_SELECT_P2_RFU_LEN]; /*!< Sector Select Packet RFU */ +} rfalT2TSectorSelectP2Req; + + + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + + ReturnCode rfalT2TPollerRead( uint8_t blockNum, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t *rcvLen ) + { + ReturnCode ret; + rfalT2TReadReq req; + + if( (rxBuf == NULL) || (rcvLen == NULL) ) + { + return ERR_PARAM; + } + + req.code = (uint8_t)RFAL_T2T_CMD_READ; + req.blNo = blockNum; + + /* Transceive Command */ + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&req, sizeof(rfalT2TReadReq), rxBuf, rxBufLen, rcvLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_FDT_POLL_READ_MAX ); + + /* T2T 1.0 5.2.1.7 The Reader/Writer SHALL treat a NACK in response to a READ Command as a Protocol Error */ + if( (ret == ERR_INCOMPLETE_BYTE) && (*rcvLen == RFAL_T2T_ACK_NACK_LEN) && ((*rxBuf & RFAL_T2T_ACK_MASK) != RFAL_T2T_ACK) ) + { + return ERR_PROTO; + } + return ret; + } + + + /*******************************************************************************/ + ReturnCode rfalT2TPollerWrite( uint8_t blockNum, const uint8_t* wrData ) + { + ReturnCode ret; + rfalT2TWriteReq req; + uint8_t res; + uint16_t rxLen; + + req.code = (uint8_t)RFAL_T2T_CMD_WRITE; + req.blNo = blockNum; + ST_MEMCPY(req.data, wrData, RFAL_T2T_WRITE_DATA_LEN); + + + /* Transceive WRITE Command */ + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&req, sizeof(rfalT2TWriteReq), &res, sizeof(uint8_t), &rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_FDT_POLL_READ_MAX ); + + /* Check for a valid ACK */ + if( (ret == ERR_INCOMPLETE_BYTE) || (ret == ERR_NONE) ) + { + ret = ERR_PROTO; + + if( (rxLen == RFAL_T2T_ACK_NACK_LEN) && ((res & RFAL_T2T_ACK_MASK) == RFAL_T2T_ACK) ) + { + ret = ERR_NONE; + } + } + + return ret; + } + + + /*******************************************************************************/ + ReturnCode rfalT2TPollerSectorSelect( uint8_t sectorNum ) + { + rfalT2TSectorSelectP1Req p1Req; + rfalT2TSectorSelectP2Req p2Req; + ReturnCode ret; + uint8_t res; + uint16_t rxLen; + + + /* Compute SECTOR SELECT Packet 1 */ + p1Req.code = (uint8_t)RFAL_T2T_CMD_SECTOR_SELECT; + p1Req.byte2 = RFAL_T2T_SECTOR_SELECT_P1_BYTE2; + + /* Transceive SECTOR SELECT Packet 1 */ + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&p1Req, sizeof(rfalT2TSectorSelectP1Req), &res, sizeof(uint8_t), &rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_FDT_POLL_SL_MAX ); + + /* Check and report any transmission error */ + if( (ret != ERR_INCOMPLETE_BYTE) && (ret != ERR_NONE) ) + { + return ret; + } + + /* Ensure that an ACK was received */ + if( (ret != ERR_INCOMPLETE_BYTE) || (rxLen != RFAL_T2T_ACK_NACK_LEN) || ((res & RFAL_T2T_ACK_MASK) != RFAL_T2T_ACK) ) + { + return ERR_PROTO; + } + + + /* Compute SECTOR SELECT Packet 2 */ + p2Req.secNo = sectorNum; + ST_MEMSET( &p2Req.rfu, 0x00, RFAL_T2T_SECTOR_SELECT_P2_RFU_LEN ); + + + /* Transceive SECTOR SELECT Packet 2 */ + ret = rfalTransceiveBlockingTxRx( (uint8_t*)&p2Req, sizeof(rfalT2TSectorSelectP2Req), &res, sizeof(uint8_t), &rxLen, RFAL_TXRX_FLAGS_DEFAULT, RFAL_FDT_POLL_SL_MAX ); + + /* T2T 1.0 5.4.1.14 The Reader/Writer SHALL treat any response received before the end of PATT2T,SL,MAX as a Protocol Error */ + if( (ret == ERR_NONE) || (ret == ERR_INCOMPLETE_BYTE) ) + { + return ERR_PROTO; + } + + /* T2T 1.0 5.4.1.13 The Reader/Writer SHALL treat the transmission of the SECTOR SELECT Command Packet 2 as being successful when it receives no response until PATT2T,SL,MAX. */ + if( ret == ERR_TIMEOUT ) + { + return ERR_NONE; + } + + return ret; + } + +#endif /* RFAL_FEATURE_T2T */ diff --git a/Software/Middlewares/ST/rfal/Src/rfal_t4t.c b/Software/Middlewares/ST/rfal/Src/rfal_t4t.c new file mode 100644 index 0000000..3353f91 --- /dev/null +++ b/Software/Middlewares/ST/rfal/Src/rfal_t4t.c @@ -0,0 +1,398 @@ + +/****************************************************************************** + * \attention + * + *

© COPYRIGHT 2018 STMicroelectronics

+ * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * www.st.com/myliberty + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * +******************************************************************************/ + +/* + * PROJECT: ST25R391x firmware + * Revision: + * LANGUAGE: ISO C99 + */ + +/*! \file rfal_t4t.h + * + * \author Gustavo Patricio + * + * \brief Provides convenience methods and definitions for T4T (ISO7816-4) + * + * This module provides an interface to exchange T4T APDUs according to + * NFC Forum T4T and ISO7816-4 + * + * This implementation was based on the following specs: + * - ISO/IEC 7816-4 3rd Edition 2013-04-15 + * - NFC Forum T4T Technical Specification 1.0 2017-08-28 + * + */ + +/* + ****************************************************************************** + * INCLUDES + ****************************************************************************** + */ + #include "rfal_t4t.h" + #include "utils.h" + + /* + ****************************************************************************** + * ENABLE SWITCH + ****************************************************************************** + */ + +#ifndef RFAL_FEATURE_T4T + #define RFAL_FEATURE_T4T false /* T4T module configuration missing. Disabled by default */ +#endif + +#if RFAL_FEATURE_T4T + + /* + ****************************************************************************** + * GLOBAL DEFINES + ****************************************************************************** + */ +#define RFAL_T4T_OFFSET_DO 0x54U /*!< Tag value for offset BER-TLV data object */ +#define RFAL_T4T_LENGTH_DO 0x03U /*!< Len value for offset BER-TLV data object */ +#define RFAL_T4T_DATA_DO 0x53U /*!< Tag value for data BER-TLV data object */ + +#define RFAL_T4T_MAX_LC 255U /*!< Maximum Lc value for short Lc coding */ + /* +****************************************************************************** +* GLOBAL TYPES +****************************************************************************** +*/ + + +/* +****************************************************************************** +* GLOBAL MACROS +****************************************************************************** +*/ + + +/* + ****************************************************************************** + * LOCAL VARIABLES + ****************************************************************************** + */ + + +/* + ****************************************************************************** + * GLOBAL FUNCTIONS + ****************************************************************************** + */ + +/*******************************************************************************/ +ReturnCode rfalT4TPollerComposeCAPDU( rfalT4tCApduParam *apduParam ) +{ + uint8_t hdrLen; + uint16_t msgIt; + + if( (apduParam == NULL) || (apduParam->cApduBuf == NULL) || (apduParam->cApduLen == NULL) ) + { + return ERR_PARAM; + } + + msgIt = 0; + *(apduParam->cApduLen) = 0; + + /*******************************************************************************/ + /* Compute Command-APDU according to the format T4T 1.0 5.1.2 & ISO7816-4 2013 Table 1 */ + + /* Check if Data is present */ + if( apduParam->LcFlag ) + { + if( apduParam->Lc == 0U ) + { + /* Extented field coding not supported */ + return ERR_PARAM; + } + + /* Check whether requested Lc fits */ + if( (uint16_t)apduParam->Lc > (uint16_t)(RFAL_FEATURE_ISO_DEP_APDU_MAX_LEN - RFAL_T4T_LE_LEN) ) + { + return ERR_PARAM; /* PRQA S 2880 # MISRA 2.1 - Unreachable code due to configuration option being set/unset */ + } + + /* Calculate the header length a place the data/body where it should be */ + hdrLen = RFAL_T4T_MAX_CAPDU_PROLOGUE_LEN + RFAL_T4T_LC_LEN; + + /* make sure not to exceed buffer size */ + if( ((uint16_t)hdrLen + (uint16_t)apduParam->Lc + (apduParam->LeFlag ? RFAL_T4T_LC_LEN : 0U)) > RFAL_FEATURE_ISO_DEP_APDU_MAX_LEN ) + { + return ERR_NOMEM; /* PRQA S 2880 # MISRA 2.1 - Unreachable code due to configuration option being set/unset */ + } + ST_MEMMOVE( &apduParam->cApduBuf->apdu[hdrLen], apduParam->cApduBuf->apdu, apduParam->Lc ); + } + + /* Prepend the ADPDU's header */ + apduParam->cApduBuf->apdu[msgIt++] = apduParam->CLA; + apduParam->cApduBuf->apdu[msgIt++] = apduParam->INS; + apduParam->cApduBuf->apdu[msgIt++] = apduParam->P1; + apduParam->cApduBuf->apdu[msgIt++] = apduParam->P2; + + + /* Check if Data field length is to be added */ + if( apduParam->LcFlag ) + { + apduParam->cApduBuf->apdu[msgIt++] = apduParam->Lc; + msgIt += apduParam->Lc; + } + + /* Check if Expected Response Length is to be added */ + if( apduParam->LeFlag ) + { + apduParam->cApduBuf->apdu[msgIt++] = apduParam->Le; + } + + *(apduParam->cApduLen) = msgIt; + + return ERR_NONE; +} + + +/*******************************************************************************/ +ReturnCode rfalT4TPollerParseRAPDU( rfalT4tRApduParam *apduParam ) +{ + if( (apduParam == NULL) || (apduParam->rApduBuf == NULL) ) + { + return ERR_PARAM; + } + + if( apduParam->rcvdLen < RFAL_T4T_MAX_RAPDU_SW1SW2_LEN ) + { + return ERR_PROTO; + } + + apduParam->rApduBodyLen = (apduParam->rcvdLen - (uint16_t)RFAL_T4T_MAX_RAPDU_SW1SW2_LEN); + apduParam->statusWord = GETU16( &apduParam->rApduBuf->apdu[ apduParam->rApduBodyLen ] ); + + /* Check SW1 SW2 T4T 1.0 5.1.3 NOTE */ + if( apduParam->statusWord == RFAL_T4T_ISO7816_STATUS_COMPLETE ) + { + return ERR_NONE; + } + + return ERR_REQUEST; +} + + +/*******************************************************************************/ +ReturnCode rfalT4TPollerComposeSelectAppl( rfalIsoDepApduBufFormat *cApduBuf, const uint8_t* aid, uint8_t aidLen, uint16_t *cApduLen ) +{ + rfalT4tCApduParam cAPDU; + + /* CLA INS P1 P2 Lc Data Le */ + /* 00h A4h 00h 00h 07h AID 00h */ + cAPDU.CLA = RFAL_T4T_CLA; + cAPDU.INS = (uint8_t)RFAL_T4T_INS_SELECT; + cAPDU.P1 = RFAL_T4T_ISO7816_P1_SELECT_BY_DF_NAME; + cAPDU.P2 = RFAL_T4T_ISO7816_P2_SELECT_FIRST_OR_ONLY_OCCURENCE | RFAL_T4T_ISO7816_P2_SELECT_RETURN_FCI_TEMPLATE; + cAPDU.Lc = aidLen; + cAPDU.Le = 0x00; + cAPDU.LcFlag = true; + cAPDU.LeFlag = true; + cAPDU.cApduBuf = cApduBuf; + cAPDU.cApduLen = cApduLen; + + if( aidLen > 0U ) + { + ST_MEMCPY( cAPDU.cApduBuf->apdu, aid, aidLen ); + } + + return rfalT4TPollerComposeCAPDU( &cAPDU ); +} + + +/*******************************************************************************/ +ReturnCode rfalT4TPollerComposeSelectFile( rfalIsoDepApduBufFormat *cApduBuf, const uint8_t* fid, uint8_t fidLen, uint16_t *cApduLen ) +{ + rfalT4tCApduParam cAPDU; + + /* CLA INS P1 P2 Lc Data Le */ + /* 00h A4h 00h 0Ch 02h FID - */ + cAPDU.CLA = RFAL_T4T_CLA; + cAPDU.INS = (uint8_t)RFAL_T4T_INS_SELECT; + cAPDU.P1 = RFAL_T4T_ISO7816_P1_SELECT_BY_FILEID; + cAPDU.P2 = RFAL_T4T_ISO7816_P2_SELECT_FIRST_OR_ONLY_OCCURENCE | RFAL_T4T_ISO7816_P2_SELECT_NO_RESPONSE_DATA; + cAPDU.Lc = fidLen; + cAPDU.Le = 0x00; + cAPDU.LcFlag = true; + cAPDU.LeFlag = false; + cAPDU.cApduBuf = cApduBuf; + cAPDU.cApduLen = cApduLen; + + if( fidLen > 0U ) + { + ST_MEMCPY( cAPDU.cApduBuf->apdu, fid, fidLen ); + } + + return rfalT4TPollerComposeCAPDU( &cAPDU ); +} + + +/*******************************************************************************/ +ReturnCode rfalT4TPollerComposeSelectFileV1Mapping( rfalIsoDepApduBufFormat *cApduBuf, const uint8_t* fid, uint8_t fidLen, uint16_t *cApduLen ) +{ + rfalT4tCApduParam cAPDU; + + /* CLA INS P1 P2 Lc Data Le */ + /* 00h A4h 00h 00h 02h FID - */ + cAPDU.CLA = RFAL_T4T_CLA; + cAPDU.INS = (uint8_t)RFAL_T4T_INS_SELECT; + cAPDU.P1 = RFAL_T4T_ISO7816_P1_SELECT_BY_FILEID; + cAPDU.P2 = RFAL_T4T_ISO7816_P2_SELECT_FIRST_OR_ONLY_OCCURENCE | RFAL_T4T_ISO7816_P2_SELECT_RETURN_FCI_TEMPLATE; + cAPDU.Lc = fidLen; + cAPDU.Le = 0x00; + cAPDU.LcFlag = true; + cAPDU.LeFlag = false; + cAPDU.cApduBuf = cApduBuf; + cAPDU.cApduLen = cApduLen; + + if( fidLen > 0U ) + { + ST_MEMCPY( cAPDU.cApduBuf->apdu, fid, fidLen ); + } + + return rfalT4TPollerComposeCAPDU( &cAPDU ); +} + + +/*******************************************************************************/ +ReturnCode rfalT4TPollerComposeReadData( rfalIsoDepApduBufFormat *cApduBuf, uint16_t offset, uint8_t expLen, uint16_t *cApduLen ) +{ + rfalT4tCApduParam cAPDU; + + /* CLA INS P1 P2 Lc Data Le */ + /* 00h B0h [Offset] - - len */ + cAPDU.CLA = RFAL_T4T_CLA; + cAPDU.INS = (uint8_t)RFAL_T4T_INS_READBINARY; + cAPDU.P1 = (uint8_t)((offset >> 8U) & 0xFFU); + cAPDU.P2 = (uint8_t)((offset >> 0U) & 0xFFU); + cAPDU.Le = expLen; + cAPDU.LcFlag = false; + cAPDU.LeFlag = true; + cAPDU.cApduBuf = cApduBuf; + cAPDU.cApduLen = cApduLen; + + return rfalT4TPollerComposeCAPDU( &cAPDU ); +} + + +/*******************************************************************************/ +ReturnCode rfalT4TPollerComposeReadDataODO( rfalIsoDepApduBufFormat *cApduBuf, uint32_t offset, uint8_t expLen, uint16_t *cApduLen ) +{ + rfalT4tCApduParam cAPDU; + uint8_t dataIt; + + /* CLA INS P1 P2 Lc Data Le */ + /* 00h B1h 00h 00h Lc 54 03 xxyyzz len */ + /* [Offset] */ + cAPDU.CLA = RFAL_T4T_CLA; + cAPDU.INS = (uint8_t)RFAL_T4T_INS_READBINARY_ODO; + cAPDU.P1 = 0x00U; + cAPDU.P2 = 0x00U; + cAPDU.Le = expLen; + cAPDU.LcFlag = true; + cAPDU.LeFlag = true; + cAPDU.cApduBuf = cApduBuf; + cAPDU.cApduLen = cApduLen; + + dataIt = 0U; + cApduBuf->apdu[dataIt++] = RFAL_T4T_OFFSET_DO; + cApduBuf->apdu[dataIt++] = RFAL_T4T_LENGTH_DO; + cApduBuf->apdu[dataIt++] = (uint8_t)(offset >> 16U); + cApduBuf->apdu[dataIt++] = (uint8_t)(offset >> 8U); + cApduBuf->apdu[dataIt++] = (uint8_t)(offset); + cAPDU.Lc = dataIt; + + return rfalT4TPollerComposeCAPDU( &cAPDU ); +} + + +/*******************************************************************************/ +ReturnCode rfalT4TPollerComposeWriteData( rfalIsoDepApduBufFormat *cApduBuf, uint16_t offset, const uint8_t* data, uint8_t dataLen, uint16_t *cApduLen ) +{ + rfalT4tCApduParam cAPDU; + + + /* CLA INS P1 P2 Lc Data Le */ + /* 00h D6h [Offset] len Data - */ + cAPDU.CLA = RFAL_T4T_CLA; + cAPDU.INS = (uint8_t)RFAL_T4T_INS_UPDATEBINARY; + cAPDU.P1 = (uint8_t)((offset >> 8U) & 0xFFU); + cAPDU.P2 = (uint8_t)((offset >> 0U) & 0xFFU); + cAPDU.Lc = dataLen; + cAPDU.LcFlag = true; + cAPDU.LeFlag = false; + cAPDU.cApduBuf = cApduBuf; + cAPDU.cApduLen = cApduLen; + + if( dataLen > 0U ) + { + ST_MEMCPY( cAPDU.cApduBuf->apdu, data, dataLen ); + } + + return rfalT4TPollerComposeCAPDU( &cAPDU ); +} + +/*******************************************************************************/ +ReturnCode rfalT4TPollerComposeWriteDataODO( rfalIsoDepApduBufFormat *cApduBuf, uint32_t offset, const uint8_t* data, uint8_t dataLen, uint16_t *cApduLen ) +{ + rfalT4tCApduParam cAPDU; + uint8_t dataIt; + + /* CLA INS P1 P2 Lc Data Le */ + /* 00h D7h 00h 00h len 54 03 xxyyzz 53 Ld data - */ + /* [offset] [data] */ + cAPDU.CLA = RFAL_T4T_CLA; + cAPDU.INS = (uint8_t)RFAL_T4T_INS_UPDATEBINARY_ODO; + cAPDU.P1 = 0x00U; + cAPDU.P2 = 0x00U; + cAPDU.LcFlag = true; + cAPDU.LeFlag = false; + cAPDU.cApduBuf = cApduBuf; + cAPDU.cApduLen = cApduLen; + + dataIt = 0U; + cApduBuf->apdu[dataIt++] = RFAL_T4T_OFFSET_DO; + cApduBuf->apdu[dataIt++] = RFAL_T4T_LENGTH_DO; + cApduBuf->apdu[dataIt++] = (uint8_t)(offset >> 16U); + cApduBuf->apdu[dataIt++] = (uint8_t)(offset >> 8U); + cApduBuf->apdu[dataIt++] = (uint8_t)(offset); + cApduBuf->apdu[dataIt++] = RFAL_T4T_DATA_DO; + cApduBuf->apdu[dataIt++] = dataLen; + + if( (((uint32_t)dataLen + (uint32_t)dataIt) >= RFAL_T4T_MAX_LC) || (((uint32_t)dataLen + (uint32_t)dataIt) >= RFAL_FEATURE_ISO_DEP_APDU_MAX_LEN) ) + { + return (ERR_NOMEM); + } + + if( dataLen > 0U ) + { + ST_MEMCPY( &cAPDU.cApduBuf->apdu[dataIt], data, dataLen ); + } + dataIt += dataLen; + cAPDU.Lc = dataIt; + + return rfalT4TPollerComposeCAPDU( &cAPDU ); +} + + +#endif /* RFAL_FEATURE_T4T */ diff --git a/Software/Middlewares/ST/rfal/doc/Release_Notes.html b/Software/Middlewares/ST/rfal/doc/Release_Notes.html new file mode 100644 index 0000000..43fbda7 --- /dev/null +++ b/Software/Middlewares/ST/rfal/doc/Release_Notes.html @@ -0,0 +1,303 @@ + + + + + + + + + + + + + Release Notes for RFAL Library + + + + + + + + + +
+


+

+
+ + + + + + +
+ + + + + + + + + +

+
+

Release +Notes for RFAL software Library

+

Copyright +2019 STMicroelectronics

+

+
+

 

+ + + + + + +

+
The RFAL Library +(RF Abstraction Layer) provides several functionalities required to perform RF/NFC communications. +The RFAL encapsulates the different RF ICs (ST25R3911, ST25R3916, ST25R95 and future ST25R devices) into a common and easy to use interface.
+
+ The technologies currently supported by RFAL are: +
    +
  • NFC-A \ ISO14443A (T1T, T2T, T4TA)
  • +
  • NFC-B \ ISO14443B (T4TB)
  • +
  • NFC-F \ FeliCa (T3T)
  • +
  • NFC-V \ ISO15693 (T5T)
  • +
  • P2P \ ISO18092 (NFCIP1, Passive-Active P2P)
  • +
  • ST25TB (ISO14443-2 Type B with Proprietary Protocol)
  • +
  • PicoPass \ iClass
  • +
  • B' \ Calypso
  • +
  • CTS \ CTM
  • +
+

+ The protocols provided by RFAL are: +
    +
  • ISO-DEP (ISO14443-4)
  • +
  • NFC-DEP (ISO18092)
  • +
+
+
+
    +
+ +

Update History

+
+ +

V2.0.10 / 25-Jun-2019

+

+

Main Changes

+
    +
  • Various improvements on RFAL NFC Higher layer
  • +
  • Added alternative NFC-V anticollision method (non NFC Forum compliant)
  • +
  • Several minor improvements and fixes
  • +
+
+ +

V2.0.6 / 10-Apr-2019

+

+

Main Changes

+
    +
  • Several NFC-V interoperability improvements
  • +
  • Extended support for specific features of ST's ISO15693 Tags. New ST25Dx module added
  • +
  • Interrupt handling changed and further protection added
  • +
  • RFAL feature switches have been modified and features are now disabled if omitted
  • +
  • ST25R3916 AAT (Automatic Antenna Tunning) module added
  • +
  • RFAL NFC Higher layer added
  • +
  • Several driver improvements
  • +
+
+ +

V2.0.4 / 06-Fev-2019

+

Provided with ST25R3916 DISCO v1.0.0 / EMVCo v1.2.0

+

Main Changes

+
    +
  • Minor improvements on NFC-F module
  • +
  • Several improvements on NFC-V module including support for ST proprietary features
  • +
  • Fixed issue with Delta RWT calculation
  • +
  • Fixed incorrect usage of NFCB dTbPoll / DdFWT
  • +
  • Added compile switch for Listen Mode
  • +
  • Low power Listen Mode support added
  • +
  • Listen Mode aligned to NFC Forum Digital 2.1
  • +
  • Added handling for EMVCo 3.0 static FDTListen
  • +
  • Introduced SW Tag Detection
  • +
+
+ +

V2.0.2 / 31-Oct-2018

+

Provided with ST25R3916 DISCO v0.9.4 (binary only)

+

Main Changes

+
    +
  • New T4T module added
  • +
  • Added support for T3T Check and Update commands
  • +
  • Improved NFC-V module and added Write Multiple Blocks support
  • +
  • New rfalWorker protection added for improved control in multi-thread environments
  • +
  • Added support for user defined Analog Config tables
  • +
  • Several driver improvements and protections added
  • +
+
+ +

V2.0.0 / 28-Aug-2018

+ +

Main Changes

+
    +
  • MISRA C 2012 compliant
  • +
  • ST25R3916 support added
  • +
  • ST25R95 support added
  • +
  • Fix unwanted Field Detector disable when entering Wake-up mode
  • +
  • Extended Analog Config to have specific events
  • +
  • Fixed NFC-DEP potential issue if DID used
  • +
  • Extended NFC-V commands
  • +
  • T2T module added
  • +
  • Improved initial Listen mode handling
  • +
  • Extended Wake-Up mode to support Capacitive measurement
  • +
+
+ +

V1.3.6 / 08-May-2018

+

Provided with ST25R3911B DISCO v1.2.0

+

Main Changes

+
    +
  • Added ISO15693 x4 and x8 mode support
  • +
  • Added S(PARAMETERS) support
  • +
  • Interface changes for measurement, Wake-Up and DPO methods
  • +
  • Added further feature switches to enable/disable individual modules
  • +
  • Changed communication protection
  • +
  • Improved NFC-A anti-collision
  • +
  • Several driver improvements
  • +
+
+

V1.3.4 / 07-May-2018

+ +

Main Changes

+
    +
  • Fixed NFC-V Read operation in addressed mode
  • +
+
+

V1.3.2 / 31-January-2018

+ +

Main Changes

+
    +
  • Modified Wake-Up mode interface
  • +
  • Fixed SFGI calculation in ISO-DEP
  • +
+
+

V1.3.0 / 22-January-2018

+ +

Main Changes

+
    +
  • Introduced a new IRQ status handling to read the registers only once
  • +
  • Several changes for supporting Linux platform
  • +
  • SPI Select/Deselect moved to platform.h
  • +
  • Aditional protection of the IRQ status reading, new macros available: platformProtectST25R391xIrqStatus / platformUnprotectST25R391xIrqStatus
  • +
  • Renamed the IRQ Enable/Disable macros to platformProtectST25R391xComm / platformUnprotectST25R391xComm
  • +
  • Renamed SPI pins from chip specific to ST25R391X
  • +
  • Introduced a new option ST25R391X_COM_SINGLETXRX which executes SPI in one single exchange (additional buffer required)
  • +
  • Updated and added errata handlings to latest ST25R3911 Errata version
  • +
  • Fixed inconsitency on Analog settings for NFC-V
  • +
  • Fixed issue on NFC-V 1of256 decoding
  • +
  • Changed the default NFC-A FDT Listen to be more strict
  • +
  • Added Wake-Up mode support
  • +
  • Added RFAL version definition
  • +
+
+

V1.2.0 / 17-August-2017

+

Provided with ST25R3911B Disco v1.1.16

+

Main Changes

+
    +
  • Aligned Technology modules to NFC Activity v1.1 and EMVCo v2.6
  • +
  • Extended NFC-B Collision Resolution allowing user define Slots
  • +
  • Added feature switches to enable/disable individual modules
  • +
  • ISO-DEP Interface changes allowing more user configurations and further EMVCo alignment
  • +
  • Changed ST25TB detection to always perform Anti Collision loop regardeless of the result of the Poll
  • +
  • Fixed FIFO WL handling
  • +
  • Modified FDT Poll handling
  • +
  • changed rfalCalibrate() to not overwrite dynamic configs
  • +
  • Added adjustment for TR1PUTMIN
  • +
+ +
+

V1.1.0 / 30-June-2017

+

Provided with ST25R3911B Disco v1.1.12

+

Main Changes

+
    +
  • EMD supression enabled for ST25R3911B
  • +
+ +
+

V1.0.0 / 16-May-2017

+

Provided with X-NUCLEO-NFC05A1 v1.0.0

+

Main Changes

+
    +
  • Added support for B', CTS and PicoPass/iClass mode
  • +
  • Several impromvements for NFC-V mode
  • +
  • Improved error detection during NFC-B collision resolution
  • +
  • Extended T1T module
  • +
+ +
+

V0.9.0 / 02-March-2017

+

Provided with ST25R3911B Discovery Kit on Embedded World Conference (binary only)

+

Main Changes

+ +
+ +
+

+
+
+

 

+
+ diff --git a/Software/Middlewares/ST/rfal/doc/ST25R3916_MisraComplianceReport.html b/Software/Middlewares/ST/rfal/doc/ST25R3916_MisraComplianceReport.html new file mode 100644 index 0000000..849cf3c --- /dev/null +++ b/Software/Middlewares/ST/rfal/doc/ST25R3916_MisraComplianceReport.html @@ -0,0 +1,8747 @@ + + + + + +PRQA GEP/GCS/GRP Report + + +
+ +
+
+
+
+
+ +This section targets to provide an overview of Guidelines Enforcement Plan (GEP).
+
+This document will only focus on STMicroelectronics NFC RF Abstraction Layer (RFAL).
+
+The project has been designed to comply with the standard ISO/IEC 9899:1999 ([C99]). +
+
+

1. Tools version

+The tool used for MISRA compliance is:
+
+PRQA Framework - v2.2.2
+

+It is composed of the following subcomponents: +

+
    +
  • Component: qacpp

  • +
      Version: 4.2.0
    +
      Target: C++
    +
  • Component: rcma

  • +
      Version: 1.6.0
    +
      Target: C_CPP
    +
  • Component: m3cm

  • +
      Version: 2.3.1
    +
      Target: C
    +
  • Component: qac

  • +
      Version: 9.3.1
    +
      Target: C
    +
      +
    • Options:
    • +
        -d : __schedule_barrier=_ignore_semi
      +
        -namelength : 63
      +
    +
+

2. Configuration

+This section targets to provide the main configuration options used for MISRA compliance.
+
+The project complies to [C99],
+the variables length has been consequently set to a dedicated value (cf 'namelength' option in table above). +
+
+Repository/components:
+
    +
  • MCU target:
  • +
      STM32

    +
  • Parent repository:
  • +
      ST25R3916_nucleo

    +
  • RFAL informations:
  • +
      Path: .../ST25R3916_nucleo/rfal
    +
      Version: v2.0.10
    +
  • Project repositories SHA1:
  • +
      .../ST25R3916_nucleo: 959b80e
    +
      .../ST25R3916_nucleo/common: f953a19
    +
      .../ST25R3916_nucleo/nucleo: 22a04ae
    +
      .../ST25R3916_nucleo/rfal: b566bd2
    +
    +
+

3. Assistance/Enforcement

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GuidelineCategoryDescriptionAssistance/Enforcement Sub Rules
Dir-1.1RequiredAny implementation-defined behaviour on which the output of the program depends shall be documented and understood
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
0202 [I] '-' character in '[]' conversion specification is implementation defined.
0284 [I] Multiple character constants have implementation defined values.
0285 [I] Character constant contains character which is not a member of the basic source character set.
0286 [I] String literal contains character which is not a member of the basic source character set.
0287 [I] Header name contains character which is not a member of the basic source character set.
0288 [I] Source file '%s' has comments containing characters which are not members of the basic source character set.
0289 [I] Source file '%s' has preprocessing tokens containing characters which are not members of the basic source character set.
0292 [I] Source file '%s' has comments containing one of the characters '$', '@' or '`'.
0299 [I] Source file '%s' includes #pragma directives containing characters which are not members of the basic source character set.
0314 [I] Cast from a pointer to object type to a pointer to void.
0315 [I] Implicit conversion from a pointer to object type to a pointer to void.
0371 [L] Nesting levels of blocks exceeds 127 - program does not conform strictly to ISO:C99.
0372 [L] More than 63 levels of nested conditional inclusion - program does not conform strictly to ISO:C99.
0375 [L] Nesting of parenthesized expressions exceeds 63 - program does not conform strictly to ISO:C99.
0380 [L] Number of macro definitions exceeds 4095 - program does not conform strictly to ISO:C99.
0388 [L] '#include "%s"' causes nesting to exceed 15 levels - program does not conform strictly to ISO:C99.
0390 [L] Number of members in 'struct' or 'union' exceeds 1023 - program does not conform strictly to ISO:C99.
0391 [L] Number of enumeration constants exceeds 1023 - program does not conform strictly to ISO:C99.
0392 [L] Nesting of 'struct' or 'union' types exceeds 63 - program does not conform strictly to ISO:C99.
0581 [I] Floating-point constant may be too small to be representable.
0634 [I] Bit-fields in this struct/union have not been declared explicitly as unsigned or signed.
2850 Constant: Implicit conversion to a signed integer type of insufficient size.
2851 Definite: Implicit conversion to a signed integer type of insufficient size.
2852 Apparent: Implicit conversion to a signed integer type of insufficient size.
2855 Constant: Casting to a signed integer type of insufficient size.
2856 Definite: Casting to a signed integer type of insufficient size.
2857 Apparent: Casting to a signed integer type of insufficient size.
2860 Constant: Implementation-defined value resulting from left shift operation on expression of signed type.
2861 Definite: Implementation-defined value resulting from left shift operation on expression of signed type.
2862 Apparent: Implementation-defined value resulting from left shift operation on expression of signed type.
2895 Constant: Negative value cast to an unsigned type.
2896 Definite: Negative value cast to an unsigned type.
2897 Apparent: Negative value cast to an unsigned type.
3116 Unrecognized #pragma arguments '%s' This #pragma directive has been ignored.
+
Dir-2.1RequiredAll source files shall compile without any compilation errorsUnassisted

+Remarks:
+Dedicated checks deployed in Jenkins.
Dir-3.1RequiredAll code shall be traceable to documented requirementsUnassisted

+Remarks:
+Limited management of requirements.
Dir-4.1RequiredRun-time failures shall be minimized
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
2791 Definite: Right hand operand of shift operator is negative or too large.
2792 Apparent: Right hand operand of shift operator is negative or too large.
2801 Definite: Overflow in signed arithmetic operation.
2802 Apparent: Overflow in signed arithmetic operation.
2811 Definite: Dereference of NULL pointer.
2812 Apparent: Dereference of NULL pointer.
2821 Definite: Arithmetic operation on NULL pointer.
2822 Apparent: Arithmetic operation on NULL pointer.
2831 Definite: Division by zero.
2832 Apparent: Division by zero.
2841 Definite: Dereference of an invalid pointer value.
2842 Apparent: Dereference of an invalid pointer value.
2845 Constant: Maximum number of characters to be written is larger than the target buffer size.
2846 Definite: Maximum number of characters to be written is larger than the target buffer size.
2847 Apparent: Maximum number of characters to be written is larger than the target buffer size.
2871 Infinite loop identified.
2872 This loop, if entered, will never terminate.
2877 This loop will never be executed more than once.
+
Dir-4.10RequiredPrecautions shall be taken in order to prevent the contents of a header file being included more then once
+ + + + + +
QacDescription
0883 Include file code is not protected against repeated inclusion
+
Dir-4.11RequiredThe validity of values passed to library functions shall be checkedUnassisted

+Remarks:
+No automated check deployed.
+Manual checks done by developers.
Dir-4.12RequiredDynamic memory allocation shall not be usedUnassisted

+Remarks:
+No memory allocation functions (malloc(), calloc(), realloc()) being called in RFAL.
Dir-4.13AdvisoryFunctions which are designed to provide operations on a resource should be called in an appropriate sequenceUnassisted
Dir-4.14RequiredThe validity of values received from external sources shall be checked
+ + + + + +
QacDescription
2956 Definite: Using object '%s' with tainted value.
+
Dir-4.2AdvisoryAll usage of assembly language should be documented
+ + + + + + + + + +
QacDescription
1003 [E] '#%s' is a language extension for in-line assembler. All statements located between #asm and #endasm will be ignored.
1006 [E] This in-line assembler construct is a language extension. The code has been ignored.
+
Dir-4.3RequiredAssembly language shall be encapsulated and isolated
+ + + + + + + + + +
QacDescription
3006 This function contains a mixture of in-line assembler statements and C statements.
3008 This function contains a mixture of in-line assembler statements and C code.
+
Dir-4.4AdvisorySections of code should not be "commented out"Unassisted
Dir-4.5AdvisoryIdentifiers in the same name space with overlapping visibility should be typographically unambiguousUnassisted
Dir-4.6Advisorytypedefs that indicate size and signedness should be used in place of the basic numerical types
+ + + + + +
QacDescription
5209 Use of basic type '%s'.
+
Dir-4.7RequiredIf a function returns error information, then that error information shall be testedUnassisted

+Remarks:
+Dir-4.7 is similar to Rule-17.7 which is currently dismissed.
+This directive is consequently considered as disapplied.
Dir-4.8AdvisoryIf a pointer to a structure or union is never dereferenced within a translation unit, then the implementation of the object should be hiddenUnassisted
Dir-4.9AdvisoryA function should be used in preference to a function-like macro where they are interchangeable
+ + + + + +
QacDescription
3453 A function could probably be used instead of this function-like macro.
+
Rule-1.1RequiredThe program shall contain no violations of the standard C syntax and constraints, and shall not exceed the implementation's translation limits
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
0232 [C] Value of hex escape sequence is not representable in type 'unsigned char'.
0233 [C] Value of octal escape sequence is not representable in type 'unsigned char'.
0244 [C] Value of character constant is not representable in type 'int'.
0268 [S] Comment open at end of translation unit.
0321 [C] Declaration within 'for' statement defines an identifier '%s' which is not an object.
0322 [C] Illegal storage class specifier used in 'for' statement declaration.
0338 [C] Octal or hex escape sequence value is too large for 'unsigned char' or 'wchar_t' type.
0422 [C] Function call contains fewer arguments than prototype specifies.
0423 [C] Function call contains more arguments than prototype specifies.
0426 [C] Called function has incomplete return type.
0427 [C] Object identifier used as if it were a function or a function pointer identifier.
0429 [C] Function argument is not of arithmetic type.
0430 [C] Function argument is not of compatible 'struct'/'union' type.
0431 [C] Function argument points to a more heavily qualified type.
0432 [C] Function argument is not of compatible pointer type.
0435 [C] The 'struct'/'union' member '%s' does not exist.
0436 [C] Left operand of '.' must be a 'struct' or 'union' object.
0437 [C] Left operand of '->' must be a pointer to a 'struct' or 'union' object.
0446 [C] Operand of ++/-- must have scalar (arithmetic or pointer) type.
0447 [C] Operand of ++/-- must be a modifiable object.
0448 [C] Operand of ++/-- must not be a pointer to an object of unknown size.
0449 [C] Operand of ++/-- must not be a pointer to a function.
0450 [C] An expression of array type cannot be cast.
0451 [C] Subscripting requires a pointer (or array lvalue).
0452 [C] Cannot subscript a pointer to an object of unknown size.
0453 [C] An array subscript must have integral type.
0454 [C] The address-of operator '&' cannot be applied to an object declared with 'register'.
0456 [C] This expression does not have an address - '&' may only be applied to an lvalue or a function designator.
0457 [C] The address-of operator '&' cannot be applied to a bit-field.
0458 [C] Indirection operator '*' requires operand of pointer type.
0460 [C] The keyword static is used in the declaration of the index of an array which is not a function parameter.
0461 [C] The keyword static is used in the declaration of an inner index of a multi-dimensional array.
0462 [C] A type qualifier (const, volatile or restrict) is used in the declaration of the index of an array which is not a function parameter.
0463 [C] A type qualifier (const, volatile or restrict) is used in the declaration of an inner index of a multi-dimensional array.
0466 [C] Unary '+' requires arithmetic operand.
0467 [C] Operand of '!' must have scalar (arithmetic or pointer) type.
0468 [C] Unary '-' requires arithmetic operand.
0469 [C] Bitwise not '~' requires integral operand.
0476 [C] 'sizeof' cannot be applied to a bit-field.
0477 [C] 'sizeof' cannot be applied to a function.
0478 [C] 'sizeof' cannot be applied to an object of unknown size.
0481 [C] Only scalar expressions may be cast to other types.
0482 [C] Expressions may only be cast to 'void' or scalar types.
0483 [C] A pointer to an object of unknown size cannot be the operand of an addition operator.
0484 [C] A pointer to an object of unknown size cannot be the operand of a subtraction operator.
0485 [C] Only integral expressions may be added to pointers.
0486 [C] Only integral expressions and compatible pointers may be subtracted from pointers.
0487 [C] If two pointers are subtracted, they must be pointers that address compatible types.
0493 [C] Type of left operand is not compatible with this operator.
0494 [C] Type of right operand is not compatible with this operator.
0495 [C] Left operand of '%', '<<', '>>', '&', '^' or '|' must have integral type.
0496 [C] Right operand of '%', '<<', '>>', '&', '^' or '|' must have integral type.
0513 [C] Relational operator used to compare pointers to incompatible types.
0514 [C] Relational operator used to compare a pointer with an incompatible operand.
0515 [C] Equality operator used to compare a pointer with an incompatible operand.
0536 [C] First operand of '&&', '||' or '?' must have scalar (arithmetic or pointer) type.
0537 [C] Second operand of '&&' or '||' must have scalar (arithmetic or pointer) type.
0540 [C] 2nd and 3rd operands of conditional operator '?' must have compatible types.
0541 [C] Argument no. %s does not have object type.
0542 [C] Controlling expression must have scalar (arithmetic or pointer) type.
0546 [C] 'enum %s' has unknown content. Use of an enum tag with undefined content is not permitted.
0547 [C] This declaration of tag '%s' conflicts with a previous declaration.
0550 [C] Left operand of '+=' or '-=' is a pointer to an object of unknown size.
0554 [C] 'static %s()' has been declared and called but no definition has been given.
0555 [C] Invalid assignment to object of void type or array type.
0556 [C] Left operand of assignment must be a modifiable object.
0557 [C] Right operand of assignment is not of arithmetic type.
0558 [C] Right operand of '+=' or '-=' must have integral type when left operand is a pointer.
0559 [C] Right operand of '<<=', '>>=', '&=', '|=', '^=' or '%=' must have integral type.
0560 [C] Left operand of '<<=', '>>=', '&=', '|=', '^=' or '%=' must have integral type.
0561 [C] Right operand of assignment is not of compatible 'struct'/'union' type.
0562 [C] Right operand of assignment points to a more heavily qualified type.
0563 [C] Right operand of assignment is not of compatible pointer type.
0564 [C] Left operand of assignment must be an lvalue (it must designate an object).
0565 [C] Left operand of '+=' or '-=' must be of arithmetic or pointer to object type.
0580 [C] Constant is too large to be representable.
0588 [C] Width of bit-field must be an integral constant expression.
0589 [C] Enumeration constant must be an integral constant expression.
0590 [C] Array bound must be an integral constant expression.
0591 [C] A 'case' label must be an integral constant expression.
0605 [C] A declaration must declare a tag or an identifier.
0616 [C] Illegal combination of type specifiers or storage class specifiers.
0619 [C] The identifier '%s' has already been defined in the current scope within the ordinary identifier namespace.
0620 [C] Cannot initialize '%s' because it has unknown size.
0621 [C] The struct/union '%s' cannot be initialized because it has unknown size.
0622 [C] The identifier '%s' has been declared both with and without linkage in the same scope.
0627 [C] '%s' has different type to previous declaration in the same scope.
0628 [C] '%s' has different type to previous declaration at wider scope.
0629 [C] More than one definition of '%s' (with internal linkage).
0631 [C] More than one declaration of '%s' (with no linkage).
0638 [C] Duplicate member name '%s' in 'struct' or 'union'.
0640 [C] '%s' in 'struct' or 'union' type may not have 'void' type.
0641 [C] '%s' in 'struct' or 'union' type may not have function type.
0642 [C] '%s' in 'struct' or 'union' type may not be an array of unknown size.
0643 [C] '%s' in 'struct' or 'union' type may not be a 'struct' or 'union' with unknown content.
0644 [C] Width of bit-field must be no bigger than the width of an 'int'.
0645 [C] A zero width bit-field cannot be given a name.
0646 [C] Enumeration constants must have values representable as 'int's.
0649 [C] K&R style declaration of parameters is not legal after a function header that includes a parameter list.
0650 [C] Illegal storage class specifier on named function parameter.
0651 [C] Missing type specifiers in function declaration.
0653 [C] Duplicate definition of 'struct', 'union' or 'enum' tag '%s'.
0655 [C] Illegal storage class specifier on unnamed function parameter.
0656 [C] Function return type cannot be function or array type, or an incomplete struct/union (for function definition).
0657 [C] Unnamed parameter specified in function definition.
0659 [C] The identifier '%s' was not given in the parameter list.
0664 [C] Parameter specified with type 'void'.
0665 [C] Two parameters have been declared with the same name '%s'.
0669 [C] The restrict qualifier can only be applied to pointer types derived from object or incomplete types.
0671 [C] Initializer for object of arithmetic type is not of arithmetic type.
0673 [C] Initializer points to a more heavily qualified type.
0674 [C] Initializer for pointer is of incompatible type.
0675 [C] Initializer is not of compatible 'struct'/'union' type.
0677 [C] Array size is negative, or unrepresentable.
0682 [C] Initializer for object of a character type is a string literal.
0683 [C] Initializer for object of a character type is a wide string literal.
0684 [C] Too many initializers.
0685 [C] Initializer for any object with static storage duration must be a constant expression.
0690 [C] String literal contains too many characters to initialize object.
0698 [C] String literal used to initialize an object of incompatible type.
0699 [C] String literal used to initialize a pointer of incompatible type.
0708 [C] No definition found for the label '%s' in this function.
0709 [C] Initialization of locally declared 'extern %s' is illegal.
0736 [C] 'case' label does not have unique value within this 'switch' statement.
0737 [C] More than one 'default' label found in 'switch' statement.
0738 [C] Controlling expression in a 'switch' statement must have integral type.
0746 [C] 'return exp;' found in '%s()' whose return type is 'void'.
0747 [C] 'return exp;' found in '%s()' whose return type is qualified 'void'.
0755 [C] 'return' expression is not of arithmetic type.
0756 [C] 'return' expression is not of compatible 'struct'/'union' type.
0757 [C] 'return' expression points to a more heavily qualified type.
0758 [C] 'return' expression is not of compatible pointer type.
0766 [C] 'continue' statement found outside an iteration statement.
0767 [C] 'break' statement found outside a 'switch' or iteration statement.
0768 [C] 'case' or 'default' found outside a 'switch' statement.
0774 [C] 'auto' may not be specified on global declaration of '%s'.
0775 [C] 'register' may not be specified on global declaration of '%s'.
0801 [C] The '##' operator may not be the first token in a macro replacement list.
0802 [C] The '##' operator may not be the last token in a macro replacement list.
0803 [C] The '#' operator may only appear before a macro parameter.
0804 [C] Macro parameter '%s' is not unique.
0811 [C] The glue operator '##' may only appear in a '#define' preprocessing directive.
0812 [C] Header name token '' found outside '#include' preprocessing directive.
0817 [S] Closing quote or bracket '>' missing from include filename.
0818 [Q] Cannot find '%s' - Perhaps the appropriate search path was not given ?
0821 [C] '#include' does not identify a header or source file that can be processed.
0834 [C] Function-like macro '%s()' is being redefined as an object-like macro.
0835 [C] Macro '%s' is being redefined with different parameter names.
0844 [C] Macro '%s' is being redefined with a different replacement list.
0845 [C] Object-like macro '%s' is being redefined as a function-like macro.
0851 [C] More arguments in macro call than specified in definition.
0852 [S] Unable to find the ')' that marks the end of the macro call.
0866 [C] The string literal in a '#line' directive cannot be a 'wide string literal'.
0873 [C] Preprocessing token cannot be converted to an actual token.
0877 [C] '#if' and '#elif' expressions may contain only integral constants.
0940 [C] Illegal usage of a variably modified type.
0941 [C] A variable length array may not be initialized.
0943 [C] Jump to label '%s' is a jump into the scope of an identifier with variably modified type.
0944 [C] The label '%s' is inside the scope of an identifier with variably modified type.
1023 [C] Using '__alignof__' on function types is illegal.
1024 [C] Using '__alignof__' on incomplete types is illegal.
1025 [C] Using '__alignof__' on bit-fields is illegal.
1033 [C] The identifier __VA_ARGS__ may only be used in the replacement list of a variadic macro.
1047 [C] Function is being declared with default argument syntax after a previous call to the function. This is not allowed.
1048 [C] Default argument values are missing for some parameters in this function declaration. This is not allowed.
1050 [C] Nested functions cannot be 'extern' or 'static'.
1061 [C] Structure '%1s' with flexible array member '%2s' cannot be used in the declaration of structure member '%3s'.
1062 [C] Structure '%1s' with flexible array member '%2s' cannot be used in the declaration of array elements.
3236 [C] 'inline' may not be applied to function 'main'.
3237 [C] inline function '%1s' has external linkage and is defining an object, '%2s', with static storage duration.
3238 [C] inline function '%1s' has external linkage and is referring to an object, '%2s', with internal linkage.
3244 [C] 'inline' may only be used in the declaration of a function identifier.
+
Rule-1.2AdvisoryLanguage extensions should not be used
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
0240 [E] This file contains the control-M character at the end of a line.
0241 [E] This file contains the control-Z character - was this transferred from a PC?
0246 [E] Binary integer constants are a language extension.
0551 [E] Cast may not operate on the left operand of the assignment operator.
0601 [E] Function 'main()' is not of type 'int (void)' or 'int (int, char *[])'.
0633 [E] Empty structures and unions are a language extension.
0635 [E] Bit-fields in this struct/union have been declared with types other than int, signed int, unsigned int or _Bool.
0660 [E] Defining an unnamed member in a struct or union. This is a language extension.
0662 [E] Accessing a member of an unnamed struct or union member in this way is a language extension.
0830 [E] Unrecognized text encountered after a preprocessing directive.
0831 [E] Use of '\\' in this '#include' line is a PC extension - this usage is non-portable.
0840 [E] Extra tokens at end of #include directive.
0883 Include file code is not protected against repeated inclusion
0899 [E] Unrecognized preprocessing directive has been ignored - assumed to be a language extension.
0981 [E] Redundant semicolon in 'struct' or 'union' member declaration list is a language extension.
1001 [E] '#include %s' is a VMS extension.
1002 [E] '%s' is not a legal identifier in ISO C.
1003 [E] '#%s' is a language extension for in-line assembler. All statements located between #asm and #endasm will be ignored.
1006 [E] This in-line assembler construct is a language extension. The code has been ignored.
1008 [E] '#%s' is not a legal ISO C preprocessing directive.
1012 [E] Use of a C++ reference type ('type &') will be treated as a language extension.
1014 [E] Non-standard type specifier - this will be treated as a language extension.
1015 [E] '%s' is not a legal keyword in ISO C - this will be treated as a language extension.
1019 [E] '@ address' is not supported in ISO C - this will be treated as a language extension.
1020 [E] '__typeof__' is not supported in ISO C, and is treated as a language extension.
1021 [E] A statement expression is not supported in ISO C, and is treated as a language extension.
1022 [E] '__alignof__' is not supported in ISO C, and is treated as a language extension.
1026 [E] The indicated @word construct has been ignored.
1028 [E] Use of the sizeof operator in a preprocessing directive is a language extension.
1029 [E] Whitespace encountered between backslash and new-line has been ignored.
1034 [E] Macro defined with named variable argument list. This is a language extension.
1035 [E] No macro arguments supplied for variable argument list. This is a language extension.
1036 [E] Comma before ## ignored in expansion of variadic macro. This is a language extension.
1037 [E] Arrays of length zero are a language extension.
1038 [E] The sequence ", ##__VA_ARGS__" is a language extension.
1039 [E] Treating array of length one as potentially flexible member.
1041 [E] Empty aggregate initializers are a language extension.
1042 [E] Using I64 or UI64 as an integer constant suffix. This is a language extension.
1043 [E] Defining an anonymous union object. This is a language extension.
1044 [E] Defining an anonymous struct object. This is a language extension.
1045 [E] Use of the #include_next preprocessing directive is a language extension.
1046 [E] Function is being declared with default argument syntax. This is a language extension.
1049 [E] Nested functions are a language extension.
3445 [E] Conditional expression with middle operand omitted is a language extension.
3664 [E] Using a dot operator to access an individual bit is a language extension.
+
Rule-1.3RequiredThere shall be no occurrence of undefined or critical unspecified behaviour
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
0160 [U] Using unsupported conversion specifier number %s.
0161 [U] Unknown length modifier used with 'i' or 'd' conversion specifier, number %s.
0162 [U] Unknown length modifier used with 'o' conversion specifier, number %s.
0163 [U] Unknown length modifier used with 'u' conversion specifier, number %s.
0164 [U] Unknown length modifier used with 'x' conversion specifier, number %s.
0165 [U] Unknown length modifier used with 'X' conversion specifier, number %s.
0166 [U] Unknown length modifier used with 'f' conversion specifier, number %s.
0167 [U] Unknown length modifier used with 'e' conversion specifier, number %s.
0168 [U] Unknown length modifier used with 'E' conversion specifier, number %s.
0169 [U] Unknown length modifier used with 'g' conversion specifier, number %s.
0170 [U] Unknown length modifier used with 'G' conversion specifier, number %s.
0171 [U] Unknown length modifier used with 'c' conversion specifier, number %s.
0172 [U] Unknown length modifier used with '%%' conversion specifier, number %s.
0173 [U] Unknown length modifier used with 's' conversion specifier, number %s.
0174 [U] Unknown length modifier used with 'n' conversion specifier, number %s.
0175 [U] Unknown length modifier used with 'p' conversion specifier, number %s.
0176 [U] Incomplete conversion specifier, number %s.
0177 [U] Field width of format conversion specifier exceeds 509 characters.
0178 [U] Precision of format conversion specifier exceeds 509 characters.
0179 [U] Argument type does not match conversion specifier number %s.
0184 [U] Insufficient arguments to satisfy conversion specifier, number %s.
0185 [U] Call contains more arguments than conversion specifiers.
0186 [U] A call to this function must include at least one argument.
0190 [U] Using unsupported conversion specifier number %s.
0191 [U] Unknown length modifier used with 'd/i/n' conversion specifier, number %s.
0192 [U] Unknown length modifier used with 'o' conversion specifier, number %s.
0193 [U] Unknown length modifier used with 'u' conversion specifier, number %s.
0194 [U] Unknown length modifier used with 'x/X' conversion specifier, number %s.
0195 [U] Unknown length modifier used with 'e/E/f/F/g/G' conversion specifier, number %s.
0196 [U] Unknown length modifier used with 's' conversion specifier, number %s.
0197 [U] Unknown length modifier used with 'p' conversion specifier, number %s.
0198 [U] Unknown length modifier used with '%%' conversion specifier, number %s.
0199 [U] Unknown length modifier used with '[' conversion specifier, number %s.
0200 [U] Unknown length modifier used with 'c' conversion specifier, number %s.
0201 [U] Incomplete conversion specifier, number %s.
0203 [U] Value of character prior to '-' in '[]' is greater than following character.
0204 [U] Field width of format conversion specifier exceeds 509 characters.
0206 [U] Argument type does not match conversion specifier number %s.
0207 [U] 'scanf' expects address of objects being stored into.
0208 [U] Same character occurs in scanset more than once.
0235 [U] Unknown escape sequence.
0275 [U] Floating value is out of range for conversion to destination type.
0301 [u] Cast between a pointer to object and a floating type.
0302 [u] Cast between a pointer to function and a floating type.
0304 [U] The address of an array declared 'register' may not be computed.
0307 [u] Cast between a pointer to object and a pointer to function.
0309 [U] Integral type is not large enough to hold a pointer value.
0327 [I] Cast between a pointer to void and an floating type.
0337 [U] String literal has undefined value. This may be a result of using '#' on \\.
0400 [U] '%s' is modified more than once between sequence points - evaluation order unspecified.
0401 [U] '%s' may be modified more than once between sequence points - evaluation order unspecified.
0402 [U] '%s' is modified and accessed between sequence points - evaluation order unspecified.
0403 [U] '%s' may be modified and accessed between sequence points - evaluation order unspecified.
0404 More than one read access to volatile objects between sequence points.
0405 More than one modification of volatile objects between sequence points.
0475 [u] Operand of 'sizeof' is an expression designating a bit-field.
0543 [U] 'void' expressions have no value and may not be used in expressions.
0544 [U] The value of an incomplete 'union' may not be used.
0545 [U] The value of an incomplete 'struct' may not be used.
0602 [U] The identifier '%s' is reserved for use by the library.
0603 [U] The macro identifier '%s' is reserved.
0623 [U] '%s' has incomplete type and no linkage - this is undefined.
0625 [U] '%s' has been declared with both internal and external linkage - the behaviour is undefined.
0626 [U] '%s' has different type to previous declaration (which is no longer in scope).
0630 [U] More than one definition of '%s' (with external linkage).
0632 [U] Tentative definition of '%s' with internal linkage cannot have unknown size.
0636 [U] There are no named members in this 'struct' or 'union'.
0654 [U] Using 'const' or 'volatile' in a function return type is undefined.
0658 [U] Parameter cannot have 'void' type.
0661 [U] '%s()' may not have a storage class specifier of 'static' when declared at block scope.
0667 [U] '%s' is declared as a typedef and may not be redeclared as an object at an inner scope without an explicit type specifier.
0668 [U] '%s' is declared as a typedef and may not be redeclared as a member of a 'struct' or 'union' without an explicit type specifier.
0672 [U] The initializer for a 'struct', 'union' or array is not enclosed in braces.
0676 [u] Array element is of function type. Arrays cannot be constructed from function types.
0678 [u] Array element is array of unknown size. Arrays cannot be constructed from incomplete types.
0680 [u] Array element is 'void' or an incomplete 'struct' or 'union'. Arrays cannot be constructed from incomplete types.
0706 [U] Label '%s' is not unique within this function.
0745 [U] 'return;' found in '%s()', which has been defined with a non-'void' return type.
0777 [U] External identifier does not differ from other identifier(s) (e.g. '%s') within the specified number of significant characters.
0779 [U] Identifier does not differ from other identifier(s) (e.g. '%s') within the specified number of significant characters.
0813 [U] Using any of the characters ' " or /* in '#include <%s>' gives undefined behaviour.
0814 [U] Using the characters ' or /* in '#include "%s"' gives undefined behaviour.
0836 [U] Definition of macro named 'defined'.
0837 [U] Use of '#undef' to remove the operator 'defined'.
0840 [E] Extra tokens at end of #include directive.
0848 [U] Attempting to #undef '%s', which is a predefined macro name.
0853 [U] Macro arguments contain a sequence of tokens that has the form of a preprocessing directive.
0854 [U] Attempting to #define '%s', which is a predefined macro name.
0864 [U] '#line' directive specifies line number which is not in the range 1 to 32767.
0865 [U] '#line' directive is badly formed.
0867 [U] '#line' has not been followed by a line number.
0872 [U] Result of '##' operator is not a legal preprocessing token.
0874 [U] Character string literal and wide character string literal are adjacent.
0885 [U] The token 'defined' is generated in the expansion of this macro.
0887 [U] Use of 'defined' must match either 'defined(identifier)' or 'defined identifier'.
0888 [U] 'defined' requires an identifier as an argument.
0914 [U] Source file does not end with a newline character.
0915 [U] Source file ends with a backslash character followed by a newline.
0942 [U] A * can only be used to specify array size within function prototype scope.
1331 Type or number of arguments doesn't match previous use of the function.
1332 Type or number of arguments doesn't match prototype found later.
1333 Type or number of arguments doesn't match function definition found later.
2800 Constant: Overflow in signed arithmetic operation.
2810 Constant: Dereference of NULL pointer.
2820 Constant: Arithmetic operation on NULL pointer.
2830 Constant: Division by zero.
2840 Constant: Dereference of an invalid pointer value.
3113 [U] 'return' statement includes no expression but function '%s()' is implicitly of type 'int'.
3114 [U] Function '%s()' is implicitly of type 'int' but ends without returning a value.
3239 [U] inline function '%1s' has external linkage, but is not defined within this translation unit.
3311 [u] An earlier jump to this statement will bypass the initialization of local variables.
3312 [u] This goto statement will jump into a previous block and bypass the initialization of local variables.
3319 [U] Function called with number of arguments which differs from number of parameters in definition.
3320 Type of argument no. %s differs from its type in definition of function.
3437 [u] The assert macro has been suppressed to call a function of that name.
3438 [U] #undef'ing the assert macro to call a function of that name causes undefined behaviour.
1509 '%1s' has external linkage and has multiple definitions.
1510 '%1s' has external linkage and has incompatible declarations.
+
Rule-10.1RequiredOperands shall not be of an inappropriate essential type.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
3101 Unary '-' applied to an operand of type unsigned int or unsigned long gives an unsigned result.
3102 Unary '-' applied to an operand whose underlying type is unsigned.
4500 An expression of 'essentially Boolean' type (%1s) is being used as an array subscript.
4501 An expression of 'essentially Boolean' type (%1s) is being used as the %2s operand of this arithmetic operator (%3s).
4502 An expression of 'essentially Boolean' type (%1s) is being used as the %2s operand of this bitwise operator (%3s).
4503 An expression of 'essentially Boolean' type (%1s) is being used as the left-hand operand of this shift operator (%2s).
4504 An expression of 'essentially Boolean' type (%1s) is being used as the right-hand operand of this shift operator (%2s).
4505 An expression of 'essentially Boolean' type (%1s) is being used as the %2s operand of this relational operator (%3s).
4507 An expression of 'essentially Boolean' type (%1s) is being used as the operand of this increment/decrement operator (%2s).
4510 An expression of 'essentially character' type (%1s) is being used as an array subscript.
4511 An expression of 'essentially character' type (%1s) is being used as the %2s operand of this arithmetic operator (%3s).
4512 An expression of 'essentially character' type (%1s) is being used as the %2s operand of this bitwise operator (%3s).
4513 An expression of 'essentially character' type (%1s) is being used as the left-hand operand of this shift operator (%2s).
4514 An expression of 'essentially character' type (%1s) is being used as the right-hand operand of this shift operator (%2s).
4518 An expression of 'essentially character' type (%1s) is being used as the %2s operand of this logical operator (%3s).
4519 An expression of 'essentially character' type (%1s) is being used as the first operand of this conditional operator (%2s).
4521 An expression of 'essentially enum' type (%1s) is being used as the %2s operand of this arithmetic operator (%3s).
4522 An expression of 'essentially enum' type (%1s) is being used as the %2s operand of this bitwise operator (%3s).
4523 An expression of 'essentially enum' type (%1s) is being used as the left-hand operand of this shift operator (%2s).
4524 An expression of 'essentially enum' type (%1s) is being used as the right-hand operand of this shift operator (%2s).
4527 An expression of 'essentially enum' type is being used as the operand of this increment/decrement operator.
4528 An expression of 'essentially enum' type (%1s) is being used as the %2s operand of this logical operator (%3s).
4529 An expression of 'essentially enum' type (%1s) is being used as the first operand of this conditional operator (%2s).
4532 An expression of 'essentially signed' type (%1s) is being used as the %2s operand of this bitwise operator (%3s).
4533 An expression of 'essentially signed' type (%1s) is being used as the left-hand operand of this shift operator (%2s).
4534 An expression of 'essentially signed' type (%1s) is being used as the right-hand operand of this shift operator (%2s).
4538 An expression of 'essentially signed' type (%1s) is being used as the %2s operand of this logical operator (%3s).
4539 An expression of 'essentially signed' type (%1s) is being used as the first operand of this conditional operator (%2s).
4542 A non-negative constant expression of 'essentially signed' type (%1s) is being used as the %2s operand of this bitwise operator (%3s).
4543 A non-negative constant expression of 'essentially signed' type (%1s) is being used as the left-hand operand of this shift operator (%2s).
4548 A non-negative constant expression of 'essentially signed' type (%1s) is being used as the %2s operand of this logical operator (%3s).
4549 A non-negative constant expression of 'essentially signed' type (%1s) is being used as the first operand of this conditional operator (%2s).
4558 An expression of 'essentially unsigned' type (%1s) is being used as the %2s operand of this logical operator (%3s).
4559 An expression of 'essentially unsigned' type (%1s) is being used as the first operand of this conditional operator (%2s).
4568 An expression of 'essentially floating' type (%1s) is being used as the %2s operand of this logical operator (%3s).
4569 An expression of 'essentially floating' type (%1s) is being used as the first operand of this conditional operator (%2s).
+
Rule-10.2RequiredExpressions of essentially character type shall not be used inappropriately in addition and subtraction operations
+ + + + + + + + + + + + + + + + + +
QacDescription
1810 An operand of 'essentially character' type is being added to another operand of 'essentially character' type.
1811 An operand of 'essentially character' type is being subtracted from an operand of 'essentially signed' type.
1812 An operand of 'essentially character' type is being subtracted from an operand of 'essentially unsigned' type.
1813 An operand of 'essentially character' type is being balanced with an operand of 'essentially floating' type in this arithmetic operation.
+
Rule-10.3RequiredThe value of an expression shall not be assigned to an object with a narrower essential type or of a different essential type category.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
0570 This switch case label of 'essential type' '%1s', is not consistent with a controlling expression of essential type '%2s'.
0572 This switch case label of 'essential type' '%1s' is not consistent with a controlling expression which has an essential type of lower rank (%2s).
1257 An integer constant suffixed with L or LL is being converted to a type of lower rank on assignment.
1264 A suffixed floating constant is being converted to a different floating type on assignment.
1265 An unsuffixed floating constant is being converted to a different floating type on assignment.
1266 A floating constant is being converted to integral type on assignment.
1291 An integer constant of 'essentially unsigned' type is being converted to signed type on assignment.
1292 An integer constant of 'essentially signed' type is being converted to type char on assignment.
1293 An integer constant of 'essentially unsigned' type is being converted to type char on assignment.
1294 An integer constant of 'essentially signed' type is being converted to type _Bool on assignment.
1295 An integer constant of 'essentially unsigned' type is being converted to type _Bool on assignment.
1296 An integer constant of 'essentially signed' type is being converted to enum type on assignment.
1297 An integer constant of 'essentially unsigned' type is being converted to enum type on assignment.
1298 An integer constant of 'essentially signed' type is being converted to floating type on assignment.
1299 An integer constant of 'essentially unsigned' type is being converted to floating type on assignment.
2850 Constant: Implicit conversion to a signed integer type of insufficient size.
2890 Constant: Negative value implicitly converted to an unsigned type.
2900 Constant: Positive integer value truncated by implicit conversion to a smaller unsigned type.
4401 An expression of 'essentially Boolean' type (%1s) is being converted to character type, '%2s' on assignment.
4402 An expression of 'essentially Boolean' type (%1s) is being converted to enum type, '%2s' on assignment.
4403 An expression of 'essentially Boolean' type (%1s) is being converted to signed type, '%2s' on assignment.
4404 An expression of 'essentially Boolean' type (%1s) is being converted to unsigned type, '%2s' on assignment.
4405 An expression of 'essentially Boolean' type (%1s) is being converted to floating type, '%2s' on assignment.
4410 An expression of 'essentially character' type (%1s) is being converted to Boolean type, '%2s' on assignment.
4412 An expression of 'essentially character' type (%1s) is being converted to enum type, '%2s' on assignment.
4413 An expression of 'essentially character' type (%1s) is being converted to signed type, '%2s' on assignment.
4414 An expression of 'essentially character' type (%1s) is being converted to unsigned type, '%2s' on assignment.
4415 An expression of 'essentially character' type (%1s) is being converted to floating type, '%2s' on assignment.
4420 An expression of 'essentially enum' type (%1s) is being converted to Boolean type, '%2s' on assignment.
4421 An expression of 'essentially enum' type (%1s) is being converted to character type, '%2s' on assignment.
4422 An expression of 'essentially enum' type (%1s) is being converted to a different enum type, '%2s' on assignment.
4423 An expression of 'essentially enum' type (%1s) is being converted to signed type, '%2s' on assignment.
4424 An expression of 'essentially enum' type (%1s) is being converted to unsigned type, '%2s' on assignment.
4425 An expression of 'essentially enum' type (%1s) is being converted to floating type, '%2s' on assignment.
4430 An expression of 'essentially signed' type (%1s) is being converted to Boolean type, '%2s' on assignment.
4431 An expression of 'essentially signed' type (%1s) is being converted to character type, '%2s' on assignment.
4432 An expression of 'essentially signed' type (%1s) is being converted to enum type, '%2s' on assignment.
4434 A non-constant expression of 'essentially signed' type (%1s) is being converted to unsigned type, '%2s' on assignment.
4435 A non-constant expression of 'essentially signed' type (%1s) is being converted to floating type, '%2s' on assignment.
4437 A constant expression of 'essentially signed' type (%1s) is being converted to floating type, '%2s' on assignment.
4440 An expression of 'essentially unsigned' type (%1s) is being converted to Boolean type, '%2s' on assignment.
4441 An expression of 'essentially unsigned' type (%1s) is being converted to character type, '%2s' on assignment.
4442 An expression of 'essentially unsigned' type (%1s) is being converted to enum type, '%2s' on assignment.
4443 A non-constant expression of 'essentially unsigned' type (%1s) is being converted to a wider signed type, '%2s' on assignment.
4445 An expression of 'essentially unsigned' type (%1s) is being converted to floating type, '%2s' on assignment.
4446 A non-constant expression of 'essentially unsigned' type (%1s) is being converted to signed type, '%2s' on assignment.
4447 A constant expression of 'essentially unsigned' type (%1s) is being converted to signed type, '%2s' on assignment.
4450 An expression of 'essentially floating' type (%1s) is being converted to Boolean type, '%2s' on assignment.
4451 An expression of 'essentially floating' type (%1s) is being converted to character type, '%2s' on assignment.
4452 An expression of 'essentially floating' type (%1s) is being converted to enum type, '%2s' on assignment.
4453 An expression of 'essentially floating' type (%1s) is being converted to signed type, '%2s' on assignment.
4454 An expression of 'essentially floating' type (%1s) is being converted to unsigned type, '%2s' on assignment.
4460 A non-constant expression of 'essentially signed' type (%1s) is being converted to narrower signed type, '%2s' on assignment.
4461 A non-constant expression of 'essentially unsigned' type (%1s) is being converted to narrower unsigned type, '%2s' on assignment.
4462 A non-constant expression of 'essentially floating' type (%1s) is being converted to narrower floating type, '%2s' on assignment.
4463 A constant expression of 'essentially signed' type (%1s) is being converted to narrower signed type, '%2s' on assignment.
4464 A constant expression of 'essentially unsigned' type (%1s) is being converted to narrower unsigned type, '%2s' on assignment.
4465 A constant expression of 'essentially floating' type (%1s) is being converted to narrower floating type, '%2s' on assignment.
+
Rule-10.4RequiredBoth operands of an operator in which the usual arithmetic conversions are performed shall have the same essential type category
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
1800 The %1s operand (essential type: '%2s') will be implicitly converted to a floating type, '%3s', in this arithmetic operation.
1802 The %1s operand (essential type: '%2s') will be implicitly converted to a floating type, '%3s', in this relational operation.
1803 The %1s operand (essential type: '%2s') will be implicitly converted to a floating type, '%3s', in this equality operation.
1804 The %1s operand (essential type: '%2s') will be implicitly converted to a floating type, '%3s', in this conditional operation.
1820 The %1s operand is non-constant and 'essentially signed' (%2s) but will be implicitly converted to an unsigned type (%3s) in this arithmetic operation.
1821 The %1s operand is non-constant and 'essentially signed' (%2s) but will be implicitly converted to an unsigned type (%3s) in this bitwise operation.
1822 The %1s operand is non-constant and 'essentially signed' (%2s) but will be implicitly converted to an unsigned type (%3s) in this relational operation.
1823 The %1s operand is non-constant and 'essentially signed' (%2s) but will be implicitly converted to an unsigned type (%3s) in this equality operation.
1824 The %1s operand is non-constant and 'essentially signed' (%2s) but will be implicitly converted to an unsigned type (%3s) in this conditional operation.
1830 The %1s operand is constant, 'essentially signed' (%2s) and negative but will be implicitly converted to an unsigned type (%3s) in this arithmetic operation.
1831 The %1s operand is constant, 'essentially signed' (%2s) and negative but will be implicitly converted to an unsigned type (%3s) in this bitwise operation.
1832 The %1s operand is constant, 'essentially signed' (%2s) and negative but will be implicitly converted to an unsigned type (%3s) in this relational operation.
1833 The %1s operand is constant, 'essentially signed' (%2s) and negative but will be implicitly converted to an unsigned type (%3s) in this equality operation.
1834 The %1s operand is constant, 'essentially signed' (%2s) and negative but will be implicitly converted to an unsigned type (%3s) in this conditional operation.
1840 The %1s operand is constant, 'essentially signed' (%2s) and non-negative but will be implicitly converted to an unsigned type (%3s) in this arithmetic operation.
1841 The %1s operand is constant, 'essentially signed' (%2s) and non-negative but will be implicitly converted to an unsigned type (%3s) in this bitwise operation.
1842 The %1s operand is constant, 'essentially signed' (%2s) and non-negative but will be implicitly converted to an unsigned type (%3s) in this relational operation.
1843 The %1s operand is constant, 'essentially signed' (%2s) and non-negative but will be implicitly converted to an unsigned type (%3s) in this equality operation.
1844 The %1s operand is constant, 'essentially signed' (%2s) and non-negative but will be implicitly converted to an unsigned type (%3s) in this conditional operation.
1850 The %1s operand is 'essentially unsigned' (%2s) but will be implicitly converted to a signed type (%3s) in this arithmetic operation.
1851 The %1s operand is 'essentially unsigned' (%2s) but will be implicitly converted to a signed type (%3s) in this bitwise operation.
1852 The %1s operand is 'essentially unsigned' (%2s) but will be implicitly converted to a signed type (%3s) in this relational operation.
1853 The %1s operand is 'essentially unsigned' (%2s) but will be implicitly converted to a signed type (%3s) in this equality operation.
1854 The %1s operand is 'essentially unsigned' (%2s) but will be implicitly converted to a signed type (%3s) in this conditional operation.
1860 The operands of this arithmetic operator are of different 'essential signedness' but will generate a result of type 'signed int'.
1861 The operands of this bitwise operator are of different 'essential signedness' but will generate a result of type 'signed int'.
1862 The operands of this relational operator are of different 'essential signedness' but will both be promoted to 'signed int' for comparison.
1863 The operands of this equality operator are of different 'essential signedness' but will both be promoted to 'signed int' for comparison.
1864 The 2nd and 3rd operands of this conditional operator are of different 'essential signedness'. The result will be in the promoted type 'signed int'.
1880 The operands of this relational operator are expressions of different 'essential type' categories (%1s and %2s).
1881 The operands of this equality operator are expressions of different 'essential type' categories (%1s and %2s).
1882 The 2nd and 3rd operands of this conditional operator are expressions of different 'essential type' categories (%1s and %2s).
+
Rule-10.5AdvisoryThe value of an expression should not be cast to an inappropriate essential type
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
4301 An expression of 'essentially Boolean' type (%1s) is being cast to character type '%2s'.
4302 An expression of 'essentially Boolean' type (%1s) is being cast to enum type '%2s'.
4303 An expression of 'essentially Boolean' type (%1s) is being cast to signed type '%2s'.
4304 An expression of 'essentially Boolean' type (%1s) is being cast to unsigned type '%2s'.
4305 An expression of 'essentially Boolean' type (%1s) is being cast to floating type '%2s'.
4310 An expression of 'essentially character' type (%1s) is being cast to Boolean type, '%2s'.
4312 An expression of 'essentially character' type (%1s) is being cast to enum type, '%2s'.
4315 An expression of 'essentially character' type (%1s) is being cast to floating type, '%2s'.
4320 An expression of 'essentially enum' type (%1s) is being cast to Boolean type, '%2s'.
4322 An expression of 'essentially enum' type (%1s) is being cast to a different enum type, '%2s'.
4330 An expression of 'essentially signed' type (%1s) is being cast to Boolean type '%2s'.
4332 An expression of 'essentially signed' type (%1s) is being cast to enum type, '%2s'.
4340 An expression of 'essentially unsigned' type (%1s) is being cast to Boolean type '%2s'.
4342 An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.
4350 An expression of 'essentially floating' type (%1s) is being cast to Boolean type '%2s'.
4351 An expression of 'essentially floating' type (%1s) is being cast to character type '%2s'.
4352 An expression of 'essentially floating' type (%1s) is being cast to enum type, '%2s'.
+
Rule-10.6RequiredThe value of a composite expression shall not be assigned to an object with wider essential type
+ + + + + + + + + + + + + + + + + +
QacDescription
4490 A composite expression of 'essentially signed' type (%1s) is being converted to wider signed type, '%2s' on assignment.
4491 A composite expression of 'essentially unsigned' type (%1s) is being converted to wider unsigned type, '%2s' on assignment.
4492 A composite expression of 'essentially floating' type (%1s) is being converted to wider floating type, '%2s' on assignment.
4499 An expression which is the result of a ~ or << operation has been converted to a wider essential type on assignment.
+
Rule-10.7RequiredIf a composite expression is used as one operand of an operator in which the usual arithmetic conversions are performed then the other operand shall not have wider essential type
+ + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
1890 A composite expression of 'essentially signed' type (%1s) is being implicitly converted to a wider signed type, '%2s'.
1891 A composite expression of 'essentially unsigned' type (%1s) is being implicitly converted to a wider unsigned type, '%2s'.
1892 A composite expression of 'essentially floating' type (%1s) is being implicitly converted to a wider floating type, '%2s'.
1893 The 2nd and 3rd operands of this conditional operator are both 'essentially signed' ('%1s' and '%2s') but one is a composite expression of a narrower type than the other.
1894 The 2nd and 3rd operands of this conditional operator are both 'essentially unsigned' ('%1s' and '%2s') but one is a composite expression of a narrower type than the other.
1895 The 2nd and 3rd operands of this conditional operator are both 'essentially floating' ('%1s' and '%2s') but one is a composite expression of a narrower type than the other.
+
Rule-10.8RequiredThe value of a composite expression shall not be cast to a different essential type category or a wider essential type
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
4389 A composite expression of 'essentially char' type (%1s) is being cast to a different type category, '%2s'.
4390 A composite expression of 'essentially signed' type (%1s) is being cast to a wider signed type, '%2s'.
4391 A composite expression of 'essentially unsigned' type (%1s) is being cast to a wider unsigned type, '%2s'.
4392 A composite expression of 'essentially floating' type (%1s) is being cast to a wider floating type, '%2s'.
4393 A composite expression of 'essentially signed' type (%1s) is being cast to a different type category, '%2s'.
4394 A composite expression of 'essentially unsigned' type (%1s) is being cast to a different type category, '%2s'.
4395 A composite expression of 'essentially floating' type (%1s) is being cast to a different type category, '%2s'.
4398 An expression which is the result of a ~ or << operation has been cast to a different essential type category.
4399 An expression which is the result of a ~ or << operation has been cast to a wider type.
+
Rule-11.1RequiredConversions shall not be performed between a pointer to a function and any other type
+ + + + + + + + + + + + + + + + + +
QacDescription
0302 [u] Cast between a pointer to function and a floating type.
0305 [I] Cast between a pointer to function and an integral type.
0307 [u] Cast between a pointer to object and a pointer to function.
0313 Casting to different function pointer type.
+
Rule-11.2RequiredConversions shall not be performed between a pointer to an incomplete type and any other type
+ + + + + + + + + + + + + + + + + +
QacDescription
0308 Non-portable cast involving pointer to an incomplete type.
0323 [u] Cast between a pointer to incomplete type and a floating type.
0324 [u] Cast between a pointer to incomplete type and an integral type.
0325 [u] Cast between a pointer to incomplete type and a pointer to function.
+
Rule-11.3RequiredA cast shall not be performed between a pointer to object type and a pointer to a different object type
+ + + + + + + + + +
QacDescription
0310 Casting to different object pointer type.
3305 Pointer cast to stricter alignment.
+
Rule-11.4AdvisoryA conversion should not be performed between a pointer to object and an integer type
+ + + + + + + + + + + + + + + + + + + + + +
QacDescription
0303 [I] Cast between a pointer to volatile object and an integral type.
0306 [I] Cast between a pointer to object and an integral type.
0360 An expression of pointer type is being converted to type _Bool on assignment.
0361 An expression of pointer type is being cast to type _Bool.
0362 An expression of essentially Boolean type is being cast to a pointer.
+
Rule-11.5AdvisoryA conversion should not be performed from pointer to void into pointer to object
+ + + + + + + + + +
QacDescription
0316 [I] Cast from a pointer to void to a pointer to object type.
0317 [I] Implicit conversion from a pointer to void to a pointer to object type.
+
Rule-11.6RequiredA cast shall not be performed between pointer to void and an arithmetic type
+ + + + + + + + + +
QacDescription
0326 [I] Cast between a pointer to void and an integral type.
0327 [I] Cast between a pointer to void and an floating type.
+
Rule-11.7RequiredA cast shall not be performed between pointer to object and a non-integer arithmetic type
+ + + + + + + + + +
QacDescription
0301 [u] Cast between a pointer to object and a floating type.
0328 [u] Cast between a pointer to object and an essential type other than signed/unsigned.
+
Rule-11.8RequiredA cast shall not remove any const or volatile qualification from the type pointed to by a pointer
+ + + + + + + + + +
QacDescription
0311 Dangerous pointer cast results in loss of const qualification.
0312 Dangerous pointer cast results in loss of volatile qualification.
+
Rule-11.9RequiredThe macro NULL shall be the only permitted form of integer null pointer constant
+ + + + + + + + + +
QacDescription
3003 This character constant is being interpreted as a NULL pointer constant.
3004 This integral constant expression is being interpreted as a NULL pointer constant.
+
Rule-12.1AdvisoryThe precedence of operators within expressions should be made explicit
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
3389 Extra parentheses recommended to clarify the ordering of a % operator and another arithmetic operator (* / % + -).
3391 Extra parentheses recommended. A conditional operation is the operand of another conditional operator.
3392 Extra parentheses recommended. A shift, relational or equality operation is the operand of a second identical operator.
3394 Extra parentheses recommended. A shift, relational or equality operation is the operand of a different operator with the same precedence.
3395 Extra parentheses recommended. A * or / operation is the operand of a + or - operator.
3396 Extra parentheses recommended. A binary operation is the operand of a conditional operator.
3397 Extra parentheses recommended. A binary operation is the operand of a binary operator with different precedence.
+
Rule-12.2RequiredThe right hand operand of a shift operator shall lie in the range zero to one less than the width in bits of the essential type of the left hand operand
+ + + + + + + + + + + + + + + + + +
QacDescription
0499 Right operand of shift operator is greater than or equal to the width of the essential type of the left operand.
2790 Constant: Right hand operand of shift operator is negative or too large.
2791 Definite: Right hand operand of shift operator is negative or too large.
2792 Apparent: Right hand operand of shift operator is negative or too large.
+
Rule-12.3AdvisoryThe comma operator should not be used
+ + + + + + + + + +
QacDescription
3417 The comma operator has been used outside a 'for' statement.
3418 The comma operator has been used in a 'for' statement.
+
Rule-12.4AdvisoryEvaluation of constant expressions should not lead to unsigned integer wrap-around
+ + + + + +
QacDescription
2910 Constant: Wraparound in unsigned arithmetic operation.
+
Rule-12.5MandatoryThe sizeof operator shall not have an operand which is a function parameter declared as 'array of type'
+ + + + + +
QacDescription
1321 Operand of sizeof is a function parameter of array type.
+
Rule-13.1RequiredInitializer lists shall not contain persistent side-effects
+ + + + + +
QacDescription
3421 Expression with possible side effects is used in an initializer list.
+
Rule-13.2RequiredThe value of an expression and its persistent side-effects shall be the same under all permitted evaluation orders
+ + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
0400 [U] '%s' is modified more than once between sequence points - evaluation order unspecified.
0401 [U] '%s' may be modified more than once between sequence points - evaluation order unspecified.
0402 [U] '%s' is modified and accessed between sequence points - evaluation order unspecified.
0403 [U] '%s' may be modified and accessed between sequence points - evaluation order unspecified.
0404 More than one read access to volatile objects between sequence points.
0405 More than one modification of volatile objects between sequence points.
+
Rule-13.3AdvisoryA full expression containing an increment (++) or decrement (--) operator should have no other potential side effects other than that caused by the increment or decrement operator
+ + + + + +
QacDescription
3440 Using the value resulting from a ++ or -- operation.
+
Rule-13.4AdvisoryThe result of an assignment operator should not be used
+ + + + + + + + + +
QacDescription
3226 The result of an assignment is being used in an arithmetic operation or another assigning operation.
3326 The result of an assignment is being used in a logical operation.
+
Rule-13.5RequiredThe right hand operand of a logical && or || operator shall not contain persistent side effects
+ + + + + +
QacDescription
3415 Right hand operand of '&&' or '||' is an expression with possible side effects.
+
Rule-13.6MandatoryThe operand of the sizeof operator shall not contain any expression which has potential side-effects
+ + + + + + + + + +
QacDescription
0945 [C99] Operand of sizeof is an expression of variable length array type with side effects.
3307 The operand of 'sizeof' is an expression with implied side effects, but they will not be evaluated.
+
Rule-14.1RequiredA loop counter shall not have essentially floating type
+ + + + + + + + + + + + + +
QacDescription
3339 Floating point variable used as 'while' loop control variable.
3340 Floating point variable used as 'for' loop control variable.
3342 Controlling expression of 'for' loop is a floating point comparison.
+
Rule-14.2RequiredA for loop shall be well-formed
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
2461 Loop control variable in this 'for' statement, %s, has file scope.
2462 The variable initialized in the first expression of this 'for' statement is not the variable identified as the 'loop control variable' (%s).
2463 The variable incremented in the third expression of this 'for' statement is not the variable identified as the 'loop control variable' (%s).
2464 Loop control variable, %s, modified twice in for-loop header.
2467 Loop control variable in this 'for' statement, %s, is not modified inside loop.
2468 Loop control variable in this 'for' statement, %s, is not modified inside loop but has file scope.
2469 Loop control variable in this 'for' statement, %s, is modified in the body of the loop.
2471 Unable to identify a loop control variable.
2472 More than one possible loop control variable.
+
Rule-14.3RequiredControlling expressions shall not be invariant
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
2741 This 'if' controlling expression is a constant expression and its value is 'true'.
2742 This 'if' controlling expression is a constant expression and its value is 'false'.
2990 The value of this loop controlling expression is always 'true'.
2991 The value of this 'if' controlling expression is always 'true'.
2992 The value of this 'if' controlling expression is always 'false'.
2993 The value of this 'do - while' loop controlling expression is always 'false'. The loop will only be executed once.
2994 The value of this 'while' or 'for' loop controlling expression is always 'false'. The loop will not be entered.
2997 The first operand of this conditional operator is always 'true'.
2998 The first operand of this conditional operator is always 'false'.
3493 The first operand of this conditional operator is always constant 'true'.
3494 The first operand of this conditional operator is always constant 'false'.
+
Rule-14.4RequiredThe controlling expression of an if-statement and the controlling expression of an iteration-statement shall have essentially Boolean type
+ + + + + +
QacDescription
3344 Controlling expression is not an 'essentially Boolean' expression.
+
Rule-15.1AdvisoryThe goto statement should not be used
+ + + + + +
QacDescription
2001 A 'goto' statement has been used.
+
Rule-15.2RequiredThe goto statement shall jump to a label declared later in the same function
+ + + + + +
QacDescription
3310 This 'goto' statement involves a backward jump.
+
Rule-15.3RequiredAny label referenced by a goto statement shall be declared in the same block, or in any block enclosing the goto statement
+ + + + + +
QacDescription
3327 This goto statement references a label that is declared in a separate block.
+
Rule-15.4AdvisoryThere should be no more than one break or goto statement used to terminate any iteration statement
+ + + + + +
QacDescription
0771 More than one 'break' statement has been used to terminate this iteration statement.
+
Rule-15.5AdvisoryA function should have a single point of exit at the end
+ + + + + +
QacDescription
2889 This function has more than one 'return' path.
+
Rule-15.6RequiredThe body of an iteration-statement or a selection-statement shall be a compound-statement
+ + + + + + + + + + + + + + + + + + + + + +
QacDescription
2212 Body of control statement is not enclosed within braces.
2214 Body of control statement is on the same line and is not enclosed within braces.
2218 Body of switch statement is not enclosed within braces.
2219 Body of switch statement is on the same line and is not enclosed within braces.
3402 Braces are needed to clarify the structure of this 'if'-'if'-'else' statement.
+
Rule-15.7RequiredAll if ... else if constructs shall be terminated with an else statement
+ + + + + + + + + +
QacDescription
2004 No concluding 'else' exists in this 'if'-'else'-'if' statement.
2013 This 'if .. else if ' construct 'else' statement is empty.
+
Rule-16.1RequiredAll switch statements shall be well-formed
+ + + + + + + + + +
QacDescription
2008 Code statements precede the first label in this 'switch' construct.
3234 Declarations precede the first label in this 'switch' construct.
+
Rule-16.2RequiredA switch label shall only be used when the most closely-enclosing compound statement is the body of a switch statement
+ + + + + +
QacDescription
2019 'Switch' label is located within a nested code block.
+
Rule-16.3RequiredAn unconditional break statement shall terminate every switch-clause
+ + + + + + + + + +
QacDescription
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
2020 Final 'switch' clause does not end with an explicit 'jump' statement.
+
Rule-16.4RequiredEvery switch statement shall have a default label
+ + + + + + + + + +
QacDescription
2002 No 'default' label found in this 'switch' statement.
2016 This 'switch' statement 'default' clause is empty.
+
Rule-16.5RequiredA default label shall appear as either the first or the last switch label of a switch statement
+ + + + + +
QacDescription
2012 This 'default' label is neither the first nor the last label within the 'switch' block.
+
Rule-16.6RequiredEvery switch statement shall have at least two switch-clauses
+ + + + + +
QacDescription
3315 This 'switch' statement is redundant.
+
Rule-16.7RequiredA switch-expression shall not have essentially Boolean type
+ + + + + +
QacDescription
0735 Switch expression is of essentially Boolean type.
+
Rule-17.1RequiredThe features of shall not be used
+ + + + + + + + + +
QacDescription
5130 Use of standard header file .
1337 Function defined with a variable number of parameters.
+
Rule-17.2RequiredFunctions shall not call themselves, either directly or indirectly
+ + + + + + + + + +
QacDescription
3670 Recursive call to function containing this call.
1520 Functions are indirectly recursive.
+
Rule-17.3MandatoryA function shall not be declared implicitly
+ + + + + +
QacDescription
3335 No function declaration. Implicit declaration inserted: 'extern int %s();'.
+
Rule-17.4MandatoryAll exit paths from a function with non-void return type shall have an explicit return statement with an expression
+ + + + + + + + + + + + + + + + + + + + + +
QacDescription
0745 [U] 'return;' found in '%s()', which has been defined with a non-'void' return type.
2887 Function 'main' ends with an implicit 'return' statement.
2888 This function has been declared with a non-void 'return' type but ends with an implicit 'return ;' statement.
3113 [U] 'return' statement includes no expression but function '%s()' is implicitly of type 'int'.
3114 [U] Function '%s()' is implicitly of type 'int' but ends without returning a value.
+
Rule-17.5AdvisoryThe function argument corresponding to a parameter declared to have an array type shall have an appropriate number of elements
+ + + + + + + + + + + + + + + + + +
QacDescription
2781 Definite: Function argument has fewer elements than the array dimension in the parameter declaration for non-inlined call.
2782 Apparent: Function argument has fewer elements than the array dimension in the parameter declaration for non-inlined call.
2783 Suspicious: Function argument has fewer elements than the array dimension in the parameter declaration for non-inlined call.
2784 Possible: Function argument has fewer elements than the array dimension in the parameter declaration for non-inlined call.
+
Rule-17.6MandatoryThe declaration of an array parameter shall not contain the static keyword between the [ ]
+ + + + + +
QacDescription
1058 [C99] The keyword 'static' is used in the declaration of a function parameter of array type.
+
Rule-17.7RequiredThe value returned by a function having non-void return type shall be used
+ + + + + +
QacDescription
3200 '%s' returns a value which is not being used.
+
Rule-17.8AdvisoryA function parameter should not be modified
+ + + + + + + + + + + + + +
QacDescription
1338 The parameter '%s' is being modified.
1339 Evaluating the address of the parameter '%s'.
1340 Storing the address of the parameter '%s' in a constant pointer.
+
Rule-18.1RequiredA pointer resulting from arithmetic on a pointer operand shall address an element of the same array as that pointer operand
+ + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
2840 Constant: Dereference of an invalid pointer value.
2841 Definite: Dereference of an invalid pointer value.
2842 Apparent: Dereference of an invalid pointer value.
2930 Constant: Computing an invalid pointer value.
2931 Definite: Computing an invalid pointer value.
2932 Apparent: Computing an invalid pointer value.
+
Rule-18.2RequiredSubtraction between pointers shall only be applied to pointers that address elements of the same array
+ + + + + + + + + + + + + +
QacDescription
2668 Subtraction of a pointer to an array and a pointer to a non array.
2761 Definite: Subtracting pointers that address different objects.
2762 Apparent: Subtracting pointers that address different objects.
+
Rule-18.3RequiredThe relational operators >, >=, < and <= shall not be applied to objects of pointer type except where they point into the same object
+ + + + + + + + + + + + + +
QacDescription
2669 Comparison of a pointer to an array and a pointer to a non array.
2771 Definite: Comparing pointers that address different objects.
2772 Apparent: Comparing pointers that address different objects.
+
Rule-18.4AdvisoryThe +, -, += and -= operators should not be applied to an expression of pointer type
+ + + + + +
QacDescription
0488 Performing pointer arithmetic.
+
Rule-18.5AdvisoryDeclarations should contain no more than two levels of pointer nesting
+ + + + + + + + + + + + + + + + + +
QacDescription
3260 Typedef defined with more than 2 levels of indirection.
3261 Member of struct/union defined with more than 2 levels of indirection.
3262 Object defined or declared with more than 2 levels of indirection.
3263 Function defined or declared with a return type which has more than 2 levels of indirection.
+
Rule-18.6RequiredThe address of an object with automatic storage shall not be copied to another object that persists after the first object has ceased to exist
+ + + + + + + + + + + + + + + + + +
QacDescription
3217 Address of automatic object exported to a pointer with linkage or wider scope.
3225 Address of automatic object exported using a function parameter.
3230 Address of automatic object assigned to local pointer with static storage duration.
4140 Address of automatic object exported in function return value.
+
Rule-18.7RequiredFlexible array members shall not be declared
+ + + + + +
QacDescription
1060 [C99] A flexible array member has been declared.
+
Rule-18.8RequiredVariable-length array types shall not be used
+ + + + + + + + + +
QacDescription
1051 [C99] A variable length array has been declared.
1052 [C99] A variable length array of unspecified size has been declared.
+
Rule-19.1MandatoryAn object shall not be assigned or copied to an overlapping object
+ + + + + + + + + + + + + +
QacDescription
0681 [U] Assignment between two incompatible members of the same union.
2776 Definite: Copy between overlapping objects.
2777 Apparent: Copy between overlapping objects.
+
Rule-19.2AdvisoryThe union keyword should not be used
+ + + + + + + + + +
QacDescription
0750 A union type specifier has been defined.
0759 An object of union type has been defined.
+
Rule-2.1RequiredA project shall not contain unreachable code
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
0594 Negative 'case' label expression is incompatible with unsigned controlling expression in 'switch' statement.
1460 'Switch' label value, %s, not contained in enum type.
2744 This 'while' or 'for' loop controlling expression is a constant expression and its value is 'false'. The loop will not be entered.
2880 This code is unreachable.
2882 This 'switch' statement will bypass the initialization of local variables.
3219 Static function '%s()' is not used within this translation unit.
1503 The function '%1s' is defined but is not used within this project.
+
Rule-2.2RequiredThere shall be no dead code
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
2980 The value of this function parameter is never used before being modified.
2981 This initialization is redundant. The value of this object is never used before being modified.
2982 This assignment is redundant. The value of this object is never used before being modified.
2983 This assignment is redundant. The value of this object is never subsequently used.
2985 This operation is redundant. The value of the result is always that of the left-hand operand.
2986 This operation is redundant. The value of the result is always that of the right-hand operand.
2987 This function call produces no side effects and is redundant.
2995 The result of this logical operation is always 'true'.
2996 The result of this logical operation is always 'false'.
3110 The left-hand operand of this ',' has no side effects.
3112 This statement has no side-effect - it can be removed.
3404 Statement contains a redundant * operator at top level. *p++ means *(p++) not (*p)++.
3422 Statement contains a redundant operator at top level.
3423 Statement contains a redundant cast at top level.
3424 Statement contains a redundant & or | at top level.
3425 One branch of this conditional operation is a redundant expression.
3426 Right hand side of comma expression has no side effect and its value is not used.
3427 Right hand side of logical operator has no side effect and its value is not used.
+
Rule-2.3AdvisoryA project should not contain unused type declarations
+ + + + + +
QacDescription
3205 The identifier '%s' is not used and could be removed.
+
Rule-2.4AdvisoryA project should not contain unused tag declarations
+ + + + + + + + + +
QacDescription
3213 The tag '%s' is not used and could be removed.
1755 The tag '%1s' is declared but not used within this project.
+
Rule-2.5AdvisoryA project should not contain unused macro declarations
+ + + + + +
QacDescription
3214 The macro '%s' is not used and could be removed.
+
Rule-2.6AdvisoryA function should not contain unused label declarations
+ + + + + +
QacDescription
3202 The label '%s:' is not used in this function and could be removed.
+
Rule-2.7AdvisoryThere should be no unused parameters in functions
+ + + + + +
QacDescription
3206 The parameter '%s' is not used in this function.
+
Rule-20.1Advisory#include directives should only be preceded by preprocessor directives or comments
+ + + + + +
QacDescription
5087 Use of #include directive after code fragment.
+
Rule-20.10AdvisoryThe # and ## preprocessor operators should not be used
+ + + + + + + + + +
QacDescription
0341 Using the stringify operator '#'.
0342 Using the glue operator '##'.
+
Rule-20.11RequiredA macro parameter immediately following a # operator shall not immediately be followed by a ## operator
+ + + + + +
QacDescription
0892 This macro parameter is preceded by '#' and followed by '##'.
+
Rule-20.12RequiredA macro parameter used as an operand to the # or ## operators, which is itself subject to further macro replacement, shall only be used as an operand to these operators
+ + + + + +
QacDescription
0893 Macro parameter '%s' is inconsistently subject to macro replacement.
+
Rule-20.13RequiredA line whose first token is # shall be a valid preprocessing directive
+ + + + + +
QacDescription
3115 Unrecognized preprocessing directive has been ignored because of conditional inclusion directives.
+
Rule-20.14RequiredAll #else, #elif and #endif preprocessor directives shall reside in the same file as the #if, #ifdef or #ifndef directive to which they are related
+ + + + + + + + + +
QacDescription
3317 '#if...' not matched by '#endif' in included file. This is probably an error.
3318 '#else'/'#elif'/'#endif' in included file matched '#if...' in parent file. This is probably an error.
+
Rule-20.2RequiredThe ', " or \ characters and the /* or // character sequences shall not occur in a header file name
+ + + + + + + + + + + + + +
QacDescription
0813 [U] Using any of the characters ' " or /* in '#include <%s>' gives undefined behaviour.
0814 [U] Using the characters ' or /* in '#include "%s"' gives undefined behaviour.
0831 [E] Use of '\\' in this '#include' line is a PC extension - this usage is non-portable.
+
Rule-20.3RequiredThe #include directive shall be followed by either a or "filename" sequence
+ + + + + + + + + + + + + +
QacDescription
0817 [S] Closing quote or bracket '>' missing from include filename.
0821 [C] '#include' does not identify a header or source file that can be processed.
0840 [E] Extra tokens at end of #include directive.
+
Rule-20.4RequiredA macro shall not be defined with the same name as a keyword
+ + + + + + + + + +
QacDescription
3439 Macro redefines a keyword.
3468 The name of this macro is a reserved identifier in C90 and a keyword in C99.
+
Rule-20.5Advisory#undef should not be used
+ + + + + +
QacDescription
0841 Using '#undef'.
+
Rule-20.6RequiredTokens that look like a preprocessing directive shall not occur within a macro argument
+ + + + + +
QacDescription
0853 [U] Macro arguments contain a sequence of tokens that has the form of a preprocessing directive.
+
Rule-20.7RequiredExpressions resulting from the expansion of macro parameters shall be enclosed in parentheses
+ + + + + + + + + +
QacDescription
3430 Macro argument expression may require parentheses.
3432 Simple macro argument expression is not parenthesized.
+
Rule-20.8RequiredThe controlling expression of a #if or #elif preprocessing directive shall evaluate to 0 or 1
+ + + + + +
QacDescription
0894 '#%s' directive controlling expression does not evaluate to zero or one.
+
Rule-20.9RequiredAll identifiers used in the controlling expression of #if or #elif preprocessing directives shall be #define'd before evaluation
+ + + + + +
QacDescription
3332 The macro '%s' used in this '#if' or '#elif' expression is not defined.
+
Rule-21.1Required#define and #undef shall not be used on a reserved identifier or reserved macro name
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
0603 [U] The macro identifier '%s' is reserved.
0836 [U] Definition of macro named 'defined'.
0848 [U] Attempting to #undef '%s', which is a predefined macro name.
0854 [U] Attempting to #define '%s', which is a predefined macro name.
4600 The macro '%1s' is also defined in '<%2s>'.
4601 The macro '%1s' is the name of an identifier in '<%2s>'.
4620 The macro '%1s' may also be defined as a macro in '<%2s>'.
4621 The macro '%1s' may also be defined as a typedef in '<%2s>'.
+
Rule-21.10RequiredThe Standard Library time and date functions shall not be used
+ + + + + +
QacDescription
5127 Use of standard header file .
+
Rule-21.11RequiredThe standard header file shall not be used
+ + + + + +
QacDescription
5131 Use of standard header file .
+
Rule-21.12AdvisoryThe exception handling features of should not be used
+ + + + + +
QacDescription
5136 Use of exception handling identifier: feclearexcept, fegetexceptflag, feraiseexcept, fesetexceptflag or fetestexcept.
+
Rule-21.13MandatoryAny value passed to a function in shall be representable as an unsigned char or be the value EOF
+ + + + + + + + + +
QacDescription
2796 Definite: Calling a standard library character handling function with an invalid character value.
2797 Apparent: Calling a standard library character handling function with an invalid character value.
+
Rule-21.14RequiredThe Standard Library function memcmp shall not be used to compare null terminated strings
+ + + + + + + + + +
QacDescription
2785 Constant: Null terminated string is being passed as argument to Standard Library function memcmp.
2786 Definite: Null terminated string is being passed as argument to Standard Library function memcmp.
+
Rule-21.15RequiredThe pointer arguments to the Standard Library functions memcpy, memmove and memcmp shall be pointers to qualified or unqualified versions of compatible types
+ + + + + + + + + + + + + +
QacDescription
1487 Comparing the representations of objects of different types.
1495 Destination and source objects have incompatible types.
1496 Destination and source objects may have incompatible types.
+
Rule-21.16RequiredThe pointer arguments to the Standard Library function memcpy shall point to either a pointer type, an essentially signed type, an essentially unsigned type, an essentially Boolean type or an essentially enum type
+ + + + + + + + + + + + + + + + + + + + + +
QacDescription
1488 Comparison of a struct object representation.
1489 Comparison of a union object representation.
1490 Comparison of a floating point object representation.
1491 Comparison of an object representation.
1497 Comparison of a string object representation.
+
Rule-21.17MandatoryUse of the string handling functions from shall not result in accesses beyond the bounds of the objects referenced by their pointer parameters
+ + + + + + + + + +
QacDescription
2835 Constant: Non null terminated string used in a string function.
2836 Definite: Non null terminated string used in a string function.
+
Rule-21.18MandatoryThe size_t argument passed to any function in shall have an appropriate value
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
2840 Constant: Dereference of an invalid pointer value.
2841 Definite: Dereference of an invalid pointer value.
2842 Apparent: Dereference of an invalid pointer value.
2865 Constant: Using 0 as size parameter of a function call.
2866 Definite: Using 0 as size parameter of a function call.
2867 Apparent: Using 0 as size parameter of a function call.
2868 Suspicious: Using 0 as size parameter of a function call.
2869 Possible: Using 0 as size parameter of a function call.
+
Rule-21.19MandatoryThe pointers returned by the Standard Library functions lovaleconv, getenv, setlocale or strerror shall only be used as if they have pointer to const-qualified type
+ + + + + + + + + + + + + + + + + +
QacDescription
1492 The result of library function '%s' is used to modify the referenced object.
1493 The result of library function '%s' is used as a pointer to a modifiable object.
1494 The result of library function '%s' might be modified.
1498 The string referenced by type 'struct lconv' member '%s' is being modified.
+
Rule-21.2RequiredA reserved identifier or macro name shall not be declared
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
0602 [U] The identifier '%s' is reserved for use by the library.
4602 The identifier '%1s' is declared as a macro in '<%2s>'.
4603 The object/function '%1s'is being defined with the same name as an ordinary identifier defined in '<%2s>'.
4604 The object/function '%1s' is being declared with the same name as an ordinary identifier defined in '<%2s>'.
4605 The typedef '%1s' is also defined in '<%2s>'.
4606 The typedef '%1s' has the same name as another ordinary identifier in '<%2s>'.
4607 The enum constant '%1s' has the same name as another ordinary identifier in '<%2s>'.
4608 The tag '%1s' is also defined in '<%2s>'.
+
Rule-21.20MandatoryThe pointer returned by the Standard Library functions asctime, ctime, gmtime, localtime, localeconv, getenv, setlocale, or strerror shall not be used following a subsequent call to the same function
+ + + + + + + + + +
QacDescription
2681 Definite: Using an invalidated value '%s' returned from a Standard Library function.
2682 Apparent: Using an invalidated value '%s' returned from a Standard Library function.
+
Rule-21.3RequiredThe memory allocation and deallocation functions of shall not be used
+ + + + + +
QacDescription
5118 Use of memory allocation or deallocation function: calloc, malloc, realloc or free.
+
Rule-21.4RequiredThe standard header file shall not be used
+ + + + + +
QacDescription
5132 Use of standard header file .
+
Rule-21.5RequiredThe standard header file shall not be used
+ + + + + +
QacDescription
5123 Use of standard header file .
+
Rule-21.6RequiredThe Standard Library input/output functions shall not be used
+ + + + + +
QacDescription
5124 The Standard Library input/output functions shall not be used
+
Rule-21.7RequiredThe atof, atoi, atol and atoll functions of shall not be used
+ + + + + +
QacDescription
5125 Use of function: atof, atoi, atol or atoll.
+
Rule-21.8RequiredThe library functions abort, exit and system of shall not be used
+ + + + + + + + + +
QacDescription
5126 Use of function: abort, exit or system.
5128 Use of function: getenv.
+
Rule-21.9RequiredThe library functions bsearch and qsort of shall not be used
+ + + + + +
QacDescription
5135 Use of function: bsearch or qsort.
+
Rule-22.1RequiredAll resources obtained dynamically by means of Standard Library functions shall be explicitly released
+ + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
2701 Definite: Opened file is not closed.
2702 Apparent: Opened file is not closed.
2706 Definite: Allocated memory is not deallocated.
2707 Apparent: Allocated memory is not deallocated.
2736 Definite: Created resource is not destroyed.
2737 Apparent: Created resource is not destroyed.
+
Rule-22.10RequiredThe value of errno shall only be tested when the last function to be called was an errno-setting-function
+ + + + + +
QacDescription
2503 Testing of 'errno' is not immediately preceded by a call to an 'errno' setting function.
+
Rule-22.2MandatoryA block of memory shall only be freed if it was allocated by means of a Standard Library function
+ + + + + + + + + +
QacDescription
2721 Definite: Deallocation of non dynamic memory.
2722 Apparent: Deallocation of non dynamic memory.
+
Rule-22.3RequiredThe same file shall not be open for read and write access at the same time on different streams
+ + + + + + + + + + + + + +
QacDescription
2691 Definite: The same file will be open with write access and another mode.
2692 Apparent: The same file will be open with write access and another mode.
2693 Suspicious: The same file will be open with write access and another mode.
+
Rule-22.4MandatoryThere shall be no attempt to write to a stream which has been opened as read-only
+ + + + + + + + + + + + + +
QacDescription
2686 Definite: Writing to a file opened for reading.
2687 Apparent: Writing to a file opened for reading.
2688 Suspicious: Writing to a file opened for reading.
+
Rule-22.5MandatoryA pointer to a FILE object shall not be dereferenced
+ + + + + + + + + +
QacDescription
1485 A pointer to a FILE object is dereferenced.
1486 A pointer to a FILE object is converted to a different type.
+
Rule-22.6MandatoryThe value of a pointer to a FILE shall not be used after the associated stream has been closed
+ + + + + + + + + +
QacDescription
2696 Definite: Attempt to access a file which has been closed.
2697 Apparent: Attempt to access a file which has been closed.
+
Rule-22.7RequiredThe macro EOF shall on ly be compared with the unmodified return value from any Standard Library function capable of returning EOF
+ + + + + + + + + +
QacDescription
2671 Definite: The value being compared with macro EOF does not originate from an EOF returning function.
2676 Definite: The value originating from an EOF returning function was modified before being compared with macro EOF.
+
Rule-22.8RequiredThe value of errno shall be set to zero prior to a call to an errno-setting-function
+ + + + + +
QacDescription
2500 Call to '%s' is not immediately preceded by the zeroing of 'errno'.
+
Rule-22.9RequiredThe value of errno shall be tested against zero after calling an errno-setting-function
+ + + + + +
QacDescription
2501 Call to '%s' is not immediately followed by the testing of 'errno'.
+
Rule-3.1RequiredThe character sequences /* and // shall not be used within a comment.
+ + + + + +
QacDescription
3108 Nested comments are not recognized in the ISO standard.
+
Rule-3.2RequiredLine-splicing shall not be used in // comments.
+ + + + + +
QacDescription
5134 C++ style comment uses line splicing.
+
Rule-4.1RequiredOctal and hexadecimal escape sequences shall be terminated
+ + + + + + + + + +
QacDescription
3636 Octal escape sequence '%s' is not terminated.
3637 Hexadecimal escape sequence '%s' is not terminated.
+
Rule-4.2AdvisoryTrigraphs should not be used
+ + + + + +
QacDescription
3601 Trigraphs (??x) are an ISO feature.
+
Rule-5.1RequiredExternal identifiers shall be distinct
+ + + + + +
QacDescription
0777 [U] External identifier does not differ from other identifier(s) (e.g. '%s') within the specified number of significant characters.
+
Rule-5.2RequiredIdentifiers declared in the same scope and name space shall be distinct
+ + + + + +
QacDescription
0779 [U] Identifier does not differ from other identifier(s) (e.g. '%s') within the specified number of significant characters.
+
Rule-5.3RequiredAn identifier declared in an inner scope shall not hide an identifier declared in an outer scope
+ + + + + + + + + + + + + +
QacDescription
0795 Identifier matches other identifier(s) (e.g. '%s') in an outer scope within the specified number of significant characters.
2547 This declaration of tag '%s' hides a more global declaration.
3334 This declaration of '%s' hides a more global declaration.
+
Rule-5.4RequiredMacro identifiers shall be distinct
+ + + + + + + + + +
QacDescription
0788 This identifier, '%s', is used as both a macro name and a function-like macro parameter name.
0791 [U] Macro identifier does not differ from other macro identifier(s) (e.g. '%s') within the specified number of significant characters.
+
Rule-5.5RequiredIdentifiers shall be distinct from macro names
+ + + + + + + + + + + + + + + + + +
QacDescription
0784 Identifier '%s' is also used as a macro name.
0785 Identifier matches other macro name(s) (e.g. '%s') in first 31 characters.
0786 Identifier matches other macro name(s) (e.g. '%s') in first 63 characters.
0787 Identifier does not differ from other macro name(s) (e.g. '%s') within the specified number of significant characters.
+
Rule-5.6RequiredA typedef name shall be a unique identifier
+ + + + + + + + + + + + + +
QacDescription
1506 The identifier '%1s' is declared as a typedef and is used elsewhere for a different kind of declaration.
1507 '%1s' is used as a typedef for different types.
1508 The typedef '%1s' is declared in more than one location.
+
Rule-5.7RequiredA tag name shall be a unique identifier
+ + + + + + + + + +
QacDescription
2547 This declaration of tag '%s' hides a more global declaration.
1750 '%1s' has multiple definitions.
+
Rule-5.8RequiredIdentifiers that define objects or functions with external linkage shall be unique
+ + + + + + + + + + + + + +
QacDescription
1525 Object/function with external linkage has same identifier as another object/function with internal linkage.
1526 Object with no linkage has same identifier as another object/function with external linkage.
1756 External identifier '%1s' shall be unique.
+
Rule-5.9AdvisoryIdentifiers that define objects or functions with internal linkage should be unique
+ + + + + + + + + + + + + +
QacDescription
1525 Object/function with external linkage has same identifier as another object/function with internal linkage.
1527 Object/function with internal linkage has same identifier as another object/function with internal linkage.
1528 Object with no linkage has same identifier as another object/function with internal linkage.
+
Rule-6.1RequiredBit-fields shall only be declared with an appropriate type
+ + + + + + + + + +
QacDescription
0634 [I] Bit-fields in this struct/union have not been declared explicitly as unsigned or signed.
0635 [E] Bit-fields in this struct/union have been declared with types other than int, signed int, unsigned int or _Bool.
+
Rule-6.2RequiredSingle-bit named bit fields shall not be of a signed type
+ + + + + +
QacDescription
3660 Named bit-field consisting of a single bit declared with a signed type.
+
Rule-7.1RequiredOctal constants shall not be used
+ + + + + + + + + +
QacDescription
0336 Macro defined as an octal constant.
0339 Octal constant used.
+
Rule-7.2RequiredA "u" or "U" suffix shall be applied to all integer constants that are represented in an unsigned type
+ + + + + +
QacDescription
1281 Integer literal constant is of an unsigned type but does not include a "U" suffix.
+
Rule-7.3RequiredThe lowercase character "l" shall not be used in a literal suffix
+ + + + + +
QacDescription
1280 A lowercase letter L (l) has been used in an integer or floating suffix.
+
Rule-7.4RequiredA string literal shall not be assigned to an object unless the object's type is "pointer to const-qualified char"
+ + + + + + + + + +
QacDescription
0752 String literal passed as argument to function whose parameter is not a 'pointer to const'.
0753 String literal assigned to pointer which is not a 'pointer to const'.
+
Rule-8.1RequiredTypes shall be explicitly specified
+ + + + + + + + + + + + + +
QacDescription
2050 The 'int' type specifier has been omitted from a function declaration.
2051 The 'int' type specifier has been omitted from an object declaration.
1525 Object/function with external linkage has same identifier as another object/function with internal linkage.
+
Rule-8.10RequiredAn inline function shall be declared with the static storage class
+ + + + + + + + + +
QacDescription
3240 inline function '%s' is being defined with external linkage.
3243 inline function '%s' is also an 'external definition'.
+
Rule-8.11AdvisoryWhen an array with external linkage is declared, its size should be explicitly specified
+ + + + + +
QacDescription
3684 Array declared with unknown size.
+
Rule-8.12RequiredWithin an enumerator list, the value of an implicitly-specified enumeration constant shall be unique
+ + + + + +
QacDescription
0724 The value of this implicitly-specified enumeration constant is not unique.
+
Rule-8.13AdvisoryA pointer should point to a const-qualified type whenever possible
+ + + + + +
QacDescription
3673 The object addressed by the pointer parameter '%s' is not modified and so the pointer could be of type 'pointer to const'.
+
Rule-8.14RequiredThe restrict type qualifier shall not be used
+ + + + + +
QacDescription
1057 [C99] The keyword 'restrict' has been used.
+
Rule-8.2RequiredFunction types shall be in prototype form with named parameters
+ + + + + + + + + + + + + + + + + + + + + +
QacDescription
1335 Parameter identifiers missing in function prototype declaration.
1336 Parameter identifiers missing in declaration of a function type.
3001 Function has been declared with an empty parameter list.
3002 Defining '%s()' with an identifier list and separate parameter declarations is an obsolescent feature.
3007 "void" has been omitted when defining a function with no parameters.
+
Rule-8.3RequiredAll declarations of an object or function shall use the same names and type qualifiers
+ + + + + + + + + + + + + +
QacDescription
0624 Function '%s' is declared using typedefs which are different to those in a previous declaration.
1330 The parameter identifiers in this function declaration differ from those in a previous declaration.
3675 Function parameter declared with type qualification which differs from previous declaration.
+
Rule-8.4RequiredA compatible declaration shall be visible when an object or function with external linkage is defined
+ + + + + +
QacDescription
3408 '%s' has external linkage and is being defined without any previous declaration.
+
Rule-8.5RequiredAn external object or function shall be declared once in one and only one file
+ + + + + + + + + + + + + +
QacDescription
3449 Multiple declarations of external object or function.
3451 The global identifier '%s' has been declared in more than one file.
1513 Identifier '%1s' with external linkage has separate non-defining declarations in more than one location.
+
Rule-8.6RequiredAn identifier with external linkage shall have exactly one external definition
+ + + + + + + + + + + + + + + + + + + + + +
QacDescription
0630 [U] More than one definition of '%s' (with external linkage).
3406 Object/function '%s', with external linkage, has been defined in a header file.
1509 '%1s' has external linkage and has multiple definitions.
1752 The object '%1s' with external linkage is declared but not defined within this project.
1753 The function '%1s' with external linkage is declared but not defined within this project.
+
Rule-8.7AdvisoryFunctions and objects should not be defined with external linkage if they are referenced in only one translation unit
+ + + + + + + + + + + + + + + + + +
QacDescription
1504 The object '%1s' is only referenced in the translation unit where it is defined.
1505 The function '%1s' is only referenced in the translation unit where it is defined.
1531 The object '%1s' is referenced in only one translation unit - but not the one in which it is defined.
1532 The function '%1s' is only referenced in one translation unit - but not the one in which it is defined.
+
Rule-8.8RequiredThe static storage class specifier shall be used in all declarations of objects and functions that have internal linkage
+ + + + + +
QacDescription
3224 This identifier has previously been declared with internal linkage but is not declared here with the static storage class specifier.
+
Rule-8.9AdvisoryAn object should be defined at block scope if its identifier only appears in a single function
+ + + + + + + + + + + + + +
QacDescription
3218 File scope static, '%s', is only accessed in one function.
1514 The object '%1s' is only referenced by function '%2s', in the translation unit where it is defined
1533 The object '%1s' is only referenced by function '%2s'.
+
Rule-9.1MandatoryThe value of an object with automatic storage duration shall not be read before it has been set
+ + + + + + + + + + + + + + + + + + + + + +
QacDescription
2883 This 'goto' statement will always bypass the initialization of local variables.
2961 Definite: Using value of uninitialized automatic object '%s'.
2962 Apparent: Using value of uninitialized automatic object '%s'.
2971 Definite: Passing address of uninitialized object '%s' to a function parameter declared as a pointer to const.
2972 Apparent: Passing address of uninitialized object '%s' to a function parameter declared as a pointer to const.
+
Rule-9.2RequiredThe initializer for an aggregate or union shall be enclosed in braces
+ + + + + + + + + +
QacDescription
0693 Struct initializer is missing the optional {.
0694 Array initializer is missing the optional {.
+
Rule-9.3RequiredArrays shall not be partially initialized
+ + + + + +
QacDescription
0686 Array has fewer initializers than its declared size. Default initialization is applied to the remainder of the array elements.
+
Rule-9.4RequiredAn element of an object shall not be initialized more than once
+ + + + + + + + + + + + + +
QacDescription
1397 Array element '%s' has already been initialized.
1398 Structure member '%s' has already been initialized.
1399 A union member has already been initialized.
+
Rule-9.5RequiredWhere designated initializers are used to initialize an array object the size of the array shall be specified explicitly
+ + + + + +
QacDescription
3676 Designators are used to initialize an array of unspecified size.
+
+
+
+ +This section targets to provide an overview of Guidelines Recategorization Plan. +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GuidelineDescriptionCategoryRevised Category
Dir-1.1Any implementation-defined behaviour on which the output of the program depends shall be documented and understoodRequiredRequired
Dir-2.1All source files shall compile without any compilation errorsRequiredDisapplied
Dir-3.1All code shall be traceable to documented requirementsRequiredDisapplied
Dir-4.1Run-time failures shall be minimizedRequiredRequired
Dir-4.10Precautions shall be taken in order to prevent the contents of a header file being included more then onceRequiredRequired
Dir-4.11The validity of values passed to library functions shall be checkedRequiredDisapplied
Dir-4.12Dynamic memory allocation shall not be usedRequiredDisapplied
Dir-4.13Functions which are designed to provide operations on a resource should be called in an appropriate sequenceAdvisoryDisapplied
Dir-4.14The validity of values received from external sources shall be checkedRequiredRequired
Dir-4.2All usage of assembly language should be documentedAdvisoryAdvisory
Dir-4.3Assembly language shall be encapsulated and isolatedRequiredRequired
Dir-4.4Sections of code should not be "commented out"AdvisoryDisapplied
Dir-4.5Identifiers in the same name space with overlapping visibility should be typographically unambiguousAdvisoryDisapplied
Dir-4.6typedefs that indicate size and signedness should be used in place of the basic numerical typesAdvisoryAdvisory
Dir-4.7If a function returns error information, then that error information shall be testedRequiredDisapplied
Dir-4.8If a pointer to a structure or union is never dereferenced within a translation unit, then the implementation of the object should be hiddenAdvisoryDisapplied
Dir-4.9A function should be used in preference to a function-like macro where they are interchangeableAdvisoryDisapplied
Rule-1.1The program shall contain no violations of the standard C syntax and constraints, and shall not exceed the implementation's translation limitsRequiredRequired
Rule-1.2Language extensions should not be usedAdvisoryAdvisory
Rule-1.3There shall be no occurrence of undefined or critical unspecified behaviourRequiredRequired
Rule-10.1Operands shall not be of an inappropriate essential type.RequiredRequired
Rule-10.2Expressions of essentially character type shall not be used inappropriately in addition and subtraction operationsRequiredRequired
Rule-10.3The value of an expression shall not be assigned to an object with a narrower essential type or of a different essential type category.RequiredRequired
Rule-10.4Both operands of an operator in which the usual arithmetic conversions are performed shall have the same essential type categoryRequiredRequired
Rule-10.5The value of an expression should not be cast to an inappropriate essential typeAdvisoryAdvisory
Rule-10.6The value of a composite expression shall not be assigned to an object with wider essential typeRequiredRequired
Rule-10.7If a composite expression is used as one operand of an operator in which the usual arithmetic conversions are performed then the other operand shall not have wider essential typeRequiredRequired
Rule-10.8The value of a composite expression shall not be cast to a different essential type category or a wider essential typeRequiredRequired
Rule-11.1Conversions shall not be performed between a pointer to a function and any other typeRequiredRequired
Rule-11.2Conversions shall not be performed between a pointer to an incomplete type and any other typeRequiredRequired
Rule-11.3A cast shall not be performed between a pointer to object type and a pointer to a different object typeRequiredRequired
Rule-11.4A conversion should not be performed between a pointer to object and an integer typeAdvisoryAdvisory
Rule-11.5A conversion should not be performed from pointer to void into pointer to objectAdvisoryAdvisory
Rule-11.6A cast shall not be performed between pointer to void and an arithmetic typeRequiredRequired
Rule-11.7A cast shall not be performed between pointer to object and a non-integer arithmetic typeRequiredRequired
Rule-11.8A cast shall not remove any const or volatile qualification from the type pointed to by a pointerRequiredRequired
Rule-11.9The macro NULL shall be the only permitted form of integer null pointer constantRequiredDisapplied
Rule-12.1The precedence of operators within expressions should be made explicitAdvisoryAdvisory
Rule-12.2The right hand operand of a shift operator shall lie in the range zero to one less than the width in bits of the essential type of the left hand operandRequiredRequired
Rule-12.3The comma operator should not be usedAdvisoryAdvisory
Rule-12.4Evaluation of constant expressions should not lead to unsigned integer wrap-aroundAdvisoryAdvisory
Rule-12.5The sizeof operator shall not have an operand which is a function parameter declared as 'array of type'MandatoryMandatory
Rule-13.1Initializer lists shall not contain persistent side-effectsRequiredRequired
Rule-13.2The value of an expression and its persistent side-effects shall be the same under all permitted evaluation ordersRequiredRequired
Rule-13.3A full expression containing an increment (++) or decrement (--) operator should have no other potential side effects other than that caused by the increment or decrement operatorAdvisoryDisapplied
Rule-13.4The result of an assignment operator should not be usedAdvisoryAdvisory
Rule-13.5The right hand operand of a logical && or || operator shall not contain persistent side effectsRequiredRequired
Rule-13.6The operand of the sizeof operator shall not contain any expression which has potential side-effectsMandatoryMandatory
Rule-14.1A loop counter shall not have essentially floating typeRequiredRequired
Rule-14.2A for loop shall be well-formedRequiredRequired
Rule-14.3Controlling expressions shall not be invariantRequiredRequired
Rule-14.4The controlling expression of an if-statement and the controlling expression of an iteration-statement shall have essentially Boolean typeRequiredRequired
Rule-15.1The goto statement should not be usedAdvisoryAdvisory
Rule-15.2The goto statement shall jump to a label declared later in the same functionRequiredRequired
Rule-15.3Any label referenced by a goto statement shall be declared in the same block, or in any block enclosing the goto statementRequiredRequired
Rule-15.4There should be no more than one break or goto statement used to terminate any iteration statementAdvisoryAdvisory
Rule-15.5A function should have a single point of exit at the endAdvisoryDisapplied
Rule-15.6The body of an iteration-statement or a selection-statement shall be a compound-statementRequiredRequired
Rule-15.7All if ... else if constructs shall be terminated with an else statementRequiredRequired
Rule-16.1All switch statements shall be well-formedRequiredRequired
Rule-16.2A switch label shall only be used when the most closely-enclosing compound statement is the body of a switch statementRequiredRequired
Rule-16.3An unconditional break statement shall terminate every switch-clauseRequiredRequired
Rule-16.4Every switch statement shall have a default labelRequiredRequired
Rule-16.5A default label shall appear as either the first or the last switch label of a switch statementRequiredRequired
Rule-16.6Every switch statement shall have at least two switch-clausesRequiredRequired
Rule-16.7A switch-expression shall not have essentially Boolean typeRequiredRequired
Rule-17.1The features of shall not be usedRequiredRequired
Rule-17.2Functions shall not call themselves, either directly or indirectlyRequiredRequired
Rule-17.3A function shall not be declared implicitlyMandatoryMandatory
Rule-17.4All exit paths from a function with non-void return type shall have an explicit return statement with an expressionMandatoryMandatory
Rule-17.5The function argument corresponding to a parameter declared to have an array type shall have an appropriate number of elementsAdvisoryAdvisory
Rule-17.6The declaration of an array parameter shall not contain the static keyword between the [ ]MandatoryMandatory
Rule-17.7The value returned by a function having non-void return type shall be usedRequiredDisapplied
Rule-17.8A function parameter should not be modifiedAdvisoryAdvisory
Rule-18.1A pointer resulting from arithmetic on a pointer operand shall address an element of the same array as that pointer operandRequiredRequired
Rule-18.2Subtraction between pointers shall only be applied to pointers that address elements of the same arrayRequiredRequired
Rule-18.3The relational operators >, >=, < and <= shall not be applied to objects of pointer type except where they point into the same objectRequiredRequired
Rule-18.4The +, -, += and -= operators should not be applied to an expression of pointer typeAdvisoryAdvisory
Rule-18.5Declarations should contain no more than two levels of pointer nestingAdvisoryAdvisory
Rule-18.6The address of an object with automatic storage shall not be copied to another object that persists after the first object has ceased to existRequiredRequired
Rule-18.7Flexible array members shall not be declaredRequiredRequired
Rule-18.8Variable-length array types shall not be usedRequiredRequired
Rule-19.1An object shall not be assigned or copied to an overlapping objectMandatoryMandatory
Rule-19.2The union keyword should not be usedAdvisoryAdvisory
Rule-2.1A project shall not contain unreachable codeRequiredRequired
Rule-2.2There shall be no dead codeRequiredRequired
Rule-2.3A project should not contain unused type declarationsAdvisoryDisapplied
Rule-2.4A project should not contain unused tag declarationsAdvisoryAdvisory
Rule-2.5A project should not contain unused macro declarationsAdvisoryDisapplied
Rule-2.6A function should not contain unused label declarationsAdvisoryAdvisory
Rule-2.7There should be no unused parameters in functionsAdvisoryAdvisory
Rule-20.1#include directives should only be preceded by preprocessor directives or commentsAdvisoryAdvisory
Rule-20.10The # and ## preprocessor operators should not be usedAdvisoryAdvisory
Rule-20.11A macro parameter immediately following a # operator shall not immediately be followed by a ## operatorRequiredRequired
Rule-20.12A macro parameter used as an operand to the # or ## operators, which is itself subject to further macro replacement, shall only be used as an operand to these operatorsRequiredRequired
Rule-20.13A line whose first token is # shall be a valid preprocessing directiveRequiredRequired
Rule-20.14All #else, #elif and #endif preprocessor directives shall reside in the same file as the #if, #ifdef or #ifndef directive to which they are relatedRequiredRequired
Rule-20.2The ', " or \ characters and the /* or // character sequences shall not occur in a header file nameRequiredRequired
Rule-20.3The #include directive shall be followed by either a or "filename" sequenceRequiredRequired
Rule-20.4A macro shall not be defined with the same name as a keywordRequiredRequired
Rule-20.5#undef should not be usedAdvisoryAdvisory
Rule-20.6Tokens that look like a preprocessing directive shall not occur within a macro argumentRequiredRequired
Rule-20.7Expressions resulting from the expansion of macro parameters shall be enclosed in parenthesesRequiredRequired
Rule-20.8The controlling expression of a #if or #elif preprocessing directive shall evaluate to 0 or 1RequiredRequired
Rule-20.9All identifiers used in the controlling expression of #if or #elif preprocessing directives shall be #define'd before evaluationRequiredRequired
Rule-21.1#define and #undef shall not be used on a reserved identifier or reserved macro nameRequiredRequired
Rule-21.10The Standard Library time and date functions shall not be usedRequiredRequired
Rule-21.11The standard header file shall not be usedRequiredRequired
Rule-21.12The exception handling features of should not be usedAdvisoryAdvisory
Rule-21.13Any value passed to a function in shall be representable as an unsigned char or be the value EOFMandatoryMandatory
Rule-21.14The Standard Library function memcmp shall not be used to compare null terminated stringsRequiredRequired
Rule-21.15The pointer arguments to the Standard Library functions memcpy, memmove and memcmp shall be pointers to qualified or unqualified versions of compatible typesRequiredRequired
Rule-21.16The pointer arguments to the Standard Library function memcpy shall point to either a pointer type, an essentially signed type, an essentially unsigned type, an essentially Boolean type or an essentially enum typeRequiredRequired
Rule-21.17Use of the string handling functions from shall not result in accesses beyond the bounds of the objects referenced by their pointer parametersMandatoryMandatory
Rule-21.18The size_t argument passed to any function in shall have an appropriate valueMandatoryMandatory
Rule-21.19The pointers returned by the Standard Library functions lovaleconv, getenv, setlocale or strerror shall only be used as if they have pointer to const-qualified typeMandatoryMandatory
Rule-21.2A reserved identifier or macro name shall not be declaredRequiredRequired
Rule-21.20The pointer returned by the Standard Library functions asctime, ctime, gmtime, localtime, localeconv, getenv, setlocale, or strerror shall not be used following a subsequent call to the same functionMandatoryMandatory
Rule-21.3The memory allocation and deallocation functions of shall not be usedRequiredRequired
Rule-21.4The standard header file shall not be usedRequiredRequired
Rule-21.5The standard header file shall not be usedRequiredRequired
Rule-21.6The Standard Library input/output functions shall not be usedRequiredRequired
Rule-21.7The atof, atoi, atol and atoll functions of shall not be usedRequiredRequired
Rule-21.8The library functions abort, exit and system of shall not be usedRequiredRequired
Rule-21.9The library functions bsearch and qsort of shall not be usedRequiredRequired
Rule-22.1All resources obtained dynamically by means of Standard Library functions shall be explicitly releasedRequiredRequired
Rule-22.10The value of errno shall only be tested when the last function to be called was an errno-setting-functionRequiredRequired
Rule-22.2A block of memory shall only be freed if it was allocated by means of a Standard Library functionMandatoryMandatory
Rule-22.3The same file shall not be open for read and write access at the same time on different streamsRequiredRequired
Rule-22.4There shall be no attempt to write to a stream which has been opened as read-onlyMandatoryMandatory
Rule-22.5A pointer to a FILE object shall not be dereferencedMandatoryMandatory
Rule-22.6The value of a pointer to a FILE shall not be used after the associated stream has been closedMandatoryMandatory
Rule-22.7The macro EOF shall on ly be compared with the unmodified return value from any Standard Library function capable of returning EOFRequiredRequired
Rule-22.8The value of errno shall be set to zero prior to a call to an errno-setting-functionRequiredRequired
Rule-22.9The value of errno shall be tested against zero after calling an errno-setting-functionRequiredRequired
Rule-3.1The character sequences /* and // shall not be used within a comment.RequiredRequired
Rule-3.2Line-splicing shall not be used in // comments.RequiredRequired
Rule-4.1Octal and hexadecimal escape sequences shall be terminatedRequiredRequired
Rule-4.2Trigraphs should not be usedAdvisoryAdvisory
Rule-5.1External identifiers shall be distinctRequiredRequired
Rule-5.2Identifiers declared in the same scope and name space shall be distinctRequiredRequired
Rule-5.3An identifier declared in an inner scope shall not hide an identifier declared in an outer scopeRequiredRequired
Rule-5.4Macro identifiers shall be distinctRequiredRequired
Rule-5.5Identifiers shall be distinct from macro namesRequiredRequired
Rule-5.6A typedef name shall be a unique identifierRequiredRequired
Rule-5.7A tag name shall be a unique identifierRequiredRequired
Rule-5.8Identifiers that define objects or functions with external linkage shall be uniqueRequiredRequired
Rule-5.9Identifiers that define objects or functions with internal linkage should be uniqueAdvisoryAdvisory
Rule-6.1Bit-fields shall only be declared with an appropriate typeRequiredRequired
Rule-6.2Single-bit named bit fields shall not be of a signed typeRequiredRequired
Rule-7.1Octal constants shall not be usedRequiredRequired
Rule-7.2A "u" or "U" suffix shall be applied to all integer constants that are represented in an unsigned typeRequiredRequired
Rule-7.3The lowercase character "l" shall not be used in a literal suffixRequiredRequired
Rule-7.4A string literal shall not be assigned to an object unless the object's type is "pointer to const-qualified char"RequiredRequired
Rule-8.1Types shall be explicitly specifiedRequiredRequired
Rule-8.10An inline function shall be declared with the static storage classRequiredRequired
Rule-8.11When an array with external linkage is declared, its size should be explicitly specifiedAdvisoryAdvisory
Rule-8.12Within an enumerator list, the value of an implicitly-specified enumeration constant shall be uniqueRequiredRequired
Rule-8.13A pointer should point to a const-qualified type whenever possibleAdvisoryAdvisory
Rule-8.14The restrict type qualifier shall not be usedRequiredRequired
Rule-8.2Function types shall be in prototype form with named parametersRequiredRequired
Rule-8.3All declarations of an object or function shall use the same names and type qualifiersRequiredRequired
Rule-8.4A compatible declaration shall be visible when an object or function with external linkage is definedRequiredRequired
Rule-8.5An external object or function shall be declared once in one and only one fileRequiredRequired
Rule-8.6An identifier with external linkage shall have exactly one external definitionRequiredRequired
Rule-8.7Functions and objects should not be defined with external linkage if they are referenced in only one translation unitAdvisoryDisapplied
Rule-8.8The static storage class specifier shall be used in all declarations of objects and functions that have internal linkageRequiredRequired
Rule-8.9An object should be defined at block scope if its identifier only appears in a single functionAdvisoryAdvisory
Rule-9.1The value of an object with automatic storage duration shall not be read before it has been setMandatoryMandatory
Rule-9.2The initializer for an aggregate or union shall be enclosed in bracesRequiredRequired
Rule-9.3Arrays shall not be partially initializedRequiredRequired
Rule-9.4An element of an object shall not be initialized more than onceRequiredRequired
Rule-9.5Where designated initializers are used to initialize an array object the size of the array shall be specified explicitlyRequiredRequired
+
+
+ +This section targets to provide an overview of Guidelines Compliance Summary. +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GuidelineCategoryDescriptionCompliance
Dir-1.1RequiredAny implementation-defined behaviour on which the output of the program depends shall be documented and understoodCompliant

with deviations:
+
+ + + + + + + + + + + + + +
QacDescription
0292 [I] Source file '%s' has comments containing one of the characters '$', '@' or '`'.
0315 [I] Implicit conversion from a pointer to object type to a pointer to void.
0380 [L] Number of macro definitions exceeds 4095 - program does not conform strictly to ISO:C99.
+
Dir-2.1RequiredAll source files shall compile without any compilation errorsDisapplied
Dir-3.1RequiredAll code shall be traceable to documented requirementsDisapplied
Dir-4.1RequiredRun-time failures shall be minimizedCompliant
Dir-4.10RequiredPrecautions shall be taken in order to prevent the contents of a header file being included more then onceCompliant
Dir-4.11RequiredThe validity of values passed to library functions shall be checkedDisapplied
Dir-4.12RequiredDynamic memory allocation shall not be usedDisapplied
Dir-4.13AdvisoryFunctions which are designed to provide operations on a resource should be called in an appropriate sequenceDisapplied
Dir-4.14RequiredThe validity of values received from external sources shall be checkedCompliant
Dir-4.2AdvisoryAll usage of assembly language should be documentedCompliant
Dir-4.3RequiredAssembly language shall be encapsulated and isolatedCompliant
Dir-4.4AdvisorySections of code should not be "commented out"Disapplied
Dir-4.5AdvisoryIdentifiers in the same name space with overlapping visibility should be typographically unambiguousDisapplied
Dir-4.6Advisorytypedefs that indicate size and signedness should be used in place of the basic numerical typesCompliant
Dir-4.7RequiredIf a function returns error information, then that error information shall be testedDisapplied
Dir-4.8AdvisoryIf a pointer to a structure or union is never dereferenced within a translation unit, then the implementation of the object should be hiddenDisapplied
Dir-4.9AdvisoryA function should be used in preference to a function-like macro where they are interchangeableDisapplied
Rule-1.1RequiredThe program shall contain no violations of the standard C syntax and constraints, and shall not exceed the implementation's translation limitsCompliant
Rule-1.2AdvisoryLanguage extensions should not be usedCompliant
Rule-1.3RequiredThere shall be no occurrence of undefined or critical unspecified behaviourCompliant
Rule-10.1RequiredOperands shall not be of an inappropriate essential type.Compliant
Rule-10.2RequiredExpressions of essentially character type shall not be used inappropriately in addition and subtraction operationsCompliant
Rule-10.3RequiredThe value of an expression shall not be assigned to an object with a narrower essential type or of a different essential type category.Compliant
Rule-10.4RequiredBoth operands of an operator in which the usual arithmetic conversions are performed shall have the same essential type categoryCompliant
Rule-10.5AdvisoryThe value of an expression should not be cast to an inappropriate essential typeCompliant
Rule-10.6RequiredThe value of a composite expression shall not be assigned to an object with wider essential typeCompliant
Rule-10.7RequiredIf a composite expression is used as one operand of an operator in which the usual arithmetic conversions are performed then the other operand shall not have wider essential typeCompliant
Rule-10.8RequiredThe value of a composite expression shall not be cast to a different essential type category or a wider essential typeCompliant
Rule-11.1RequiredConversions shall not be performed between a pointer to a function and any other typeCompliant
Rule-11.2RequiredConversions shall not be performed between a pointer to an incomplete type and any other typeCompliant
Rule-11.3RequiredA cast shall not be performed between a pointer to object type and a pointer to a different object typeCompliant
Rule-11.4AdvisoryA conversion should not be performed between a pointer to object and an integer typeCompliant

with deviations:
+
+ + + + + +
QacDescription
0306 [I] Cast between a pointer to object and an integral type.
+
Rule-11.5AdvisoryA conversion should not be performed from pointer to void into pointer to objectCompliant
Rule-11.6RequiredA cast shall not be performed between pointer to void and an arithmetic typeCompliant
Rule-11.7RequiredA cast shall not be performed between pointer to object and a non-integer arithmetic typeCompliant
Rule-11.8RequiredA cast shall not remove any const or volatile qualification from the type pointed to by a pointerCompliant
Rule-11.9RequiredThe macro NULL shall be the only permitted form of integer null pointer constantDisapplied
Rule-12.1AdvisoryThe precedence of operators within expressions should be made explicitCompliant
Rule-12.2RequiredThe right hand operand of a shift operator shall lie in the range zero to one less than the width in bits of the essential type of the left hand operandCompliant
Rule-12.3AdvisoryThe comma operator should not be usedCompliant
Rule-12.4AdvisoryEvaluation of constant expressions should not lead to unsigned integer wrap-aroundCompliant
Rule-12.5MandatoryThe sizeof operator shall not have an operand which is a function parameter declared as 'array of type'Compliant
Rule-13.1RequiredInitializer lists shall not contain persistent side-effectsCompliant
Rule-13.2RequiredThe value of an expression and its persistent side-effects shall be the same under all permitted evaluation ordersCompliant
Rule-13.3AdvisoryA full expression containing an increment (++) or decrement (--) operator should have no other potential side effects other than that caused by the increment or decrement operatorDisapplied
Rule-13.4AdvisoryThe result of an assignment operator should not be usedCompliant
Rule-13.5RequiredThe right hand operand of a logical && or || operator shall not contain persistent side effectsCompliant
Rule-13.6MandatoryThe operand of the sizeof operator shall not contain any expression which has potential side-effectsCompliant
Rule-14.1RequiredA loop counter shall not have essentially floating typeCompliant
Rule-14.2RequiredA for loop shall be well-formedCompliant
Rule-14.3RequiredControlling expressions shall not be invariantCompliant

with deviations:
+
+ + + + + + + + + + + + + + + + + + + + + +
QacDescription
2991 The value of this 'if' controlling expression is always 'true'.
2992 The value of this 'if' controlling expression is always 'false'.
2998 The first operand of this conditional operator is always 'false'.
3493 The first operand of this conditional operator is always constant 'true'.
3494 The first operand of this conditional operator is always constant 'false'.
+
Rule-14.4RequiredThe controlling expression of an if-statement and the controlling expression of an iteration-statement shall have essentially Boolean typeCompliant
Rule-15.1AdvisoryThe goto statement should not be usedCompliant
Rule-15.2RequiredThe goto statement shall jump to a label declared later in the same functionCompliant
Rule-15.3RequiredAny label referenced by a goto statement shall be declared in the same block, or in any block enclosing the goto statementCompliant
Rule-15.4AdvisoryThere should be no more than one break or goto statement used to terminate any iteration statementCompliant
Rule-15.5AdvisoryA function should have a single point of exit at the endDisapplied
Rule-15.6RequiredThe body of an iteration-statement or a selection-statement shall be a compound-statementCompliant
Rule-15.7RequiredAll if ... else if constructs shall be terminated with an else statementCompliant
Rule-16.1RequiredAll switch statements shall be well-formedCompliant
Rule-16.2RequiredA switch label shall only be used when the most closely-enclosing compound statement is the body of a switch statementCompliant
Rule-16.3RequiredAn unconditional break statement shall terminate every switch-clauseCompliant
Rule-16.4RequiredEvery switch statement shall have a default labelCompliant
Rule-16.5RequiredA default label shall appear as either the first or the last switch label of a switch statementCompliant
Rule-16.6RequiredEvery switch statement shall have at least two switch-clausesCompliant
Rule-16.7RequiredA switch-expression shall not have essentially Boolean typeCompliant
Rule-17.1RequiredThe features of shall not be usedCompliant
Rule-17.2RequiredFunctions shall not call themselves, either directly or indirectlyCompliant
Rule-17.3MandatoryA function shall not be declared implicitlyCompliant
Rule-17.4MandatoryAll exit paths from a function with non-void return type shall have an explicit return statement with an expressionCompliant
Rule-17.5AdvisoryThe function argument corresponding to a parameter declared to have an array type shall have an appropriate number of elementsCompliant
Rule-17.6MandatoryThe declaration of an array parameter shall not contain the static keyword between the [ ]Compliant
Rule-17.7RequiredThe value returned by a function having non-void return type shall be usedDisapplied
Rule-17.8AdvisoryA function parameter should not be modifiedCompliant
Rule-18.1RequiredA pointer resulting from arithmetic on a pointer operand shall address an element of the same array as that pointer operandCompliant
Rule-18.2RequiredSubtraction between pointers shall only be applied to pointers that address elements of the same arrayCompliant
Rule-18.3RequiredThe relational operators >, >=, < and <= shall not be applied to objects of pointer type except where they point into the same objectCompliant
Rule-18.4AdvisoryThe +, -, += and -= operators should not be applied to an expression of pointer typeCompliant
Rule-18.5AdvisoryDeclarations should contain no more than two levels of pointer nestingCompliant
Rule-18.6RequiredThe address of an object with automatic storage shall not be copied to another object that persists after the first object has ceased to existCompliant
Rule-18.7RequiredFlexible array members shall not be declaredCompliant
Rule-18.8RequiredVariable-length array types shall not be usedCompliant
Rule-19.1MandatoryAn object shall not be assigned or copied to an overlapping objectCompliant
Rule-19.2AdvisoryThe union keyword should not be usedCompliant
Rule-2.1RequiredA project shall not contain unreachable codeCompliant

with deviations:
+
+ + + + + +
QacDescription
1503 The function '%1s' is defined but is not used within this project.
+
Rule-2.2RequiredThere shall be no dead codeCompliant

with deviations:
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
2982 This assignment is redundant. The value of this object is never used before being modified.
2983 This assignment is redundant. The value of this object is never subsequently used.
2985 This operation is redundant. The value of the result is always that of the left-hand operand.
2986 This operation is redundant. The value of the result is always that of the right-hand operand.
2995 The result of this logical operation is always 'true'.
2996 The result of this logical operation is always 'false'.
3112 This statement has no side-effect - it can be removed.
+
Rule-2.3AdvisoryA project should not contain unused type declarationsDisapplied
Rule-2.4AdvisoryA project should not contain unused tag declarationsCompliant
Rule-2.5AdvisoryA project should not contain unused macro declarationsDisapplied
Rule-2.6AdvisoryA function should not contain unused label declarationsCompliant
Rule-2.7AdvisoryThere should be no unused parameters in functionsCompliant
Rule-20.1Advisory#include directives should only be preceded by preprocessor directives or commentsCompliant
Rule-20.10AdvisoryThe # and ## preprocessor operators should not be usedCompliant
Rule-20.11RequiredA macro parameter immediately following a # operator shall not immediately be followed by a ## operatorCompliant
Rule-20.12RequiredA macro parameter used as an operand to the # or ## operators, which is itself subject to further macro replacement, shall only be used as an operand to these operatorsCompliant
Rule-20.13RequiredA line whose first token is # shall be a valid preprocessing directiveCompliant
Rule-20.14RequiredAll #else, #elif and #endif preprocessor directives shall reside in the same file as the #if, #ifdef or #ifndef directive to which they are relatedCompliant
Rule-20.2RequiredThe ', " or \ characters and the /* or // character sequences shall not occur in a header file nameCompliant
Rule-20.3RequiredThe #include directive shall be followed by either a or "filename" sequenceCompliant
Rule-20.4RequiredA macro shall not be defined with the same name as a keywordCompliant
Rule-20.5Advisory#undef should not be usedCompliant
Rule-20.6RequiredTokens that look like a preprocessing directive shall not occur within a macro argumentCompliant
Rule-20.7RequiredExpressions resulting from the expansion of macro parameters shall be enclosed in parenthesesCompliant
Rule-20.8RequiredThe controlling expression of a #if or #elif preprocessing directive shall evaluate to 0 or 1Compliant
Rule-20.9RequiredAll identifiers used in the controlling expression of #if or #elif preprocessing directives shall be #define'd before evaluationCompliant
Rule-21.1Required#define and #undef shall not be used on a reserved identifier or reserved macro nameCompliant
Rule-21.10RequiredThe Standard Library time and date functions shall not be usedCompliant
Rule-21.11RequiredThe standard header file shall not be usedCompliant
Rule-21.12AdvisoryThe exception handling features of should not be usedCompliant
Rule-21.13MandatoryAny value passed to a function in shall be representable as an unsigned char or be the value EOFCompliant
Rule-21.14RequiredThe Standard Library function memcmp shall not be used to compare null terminated stringsCompliant
Rule-21.15RequiredThe pointer arguments to the Standard Library functions memcpy, memmove and memcmp shall be pointers to qualified or unqualified versions of compatible typesCompliant
Rule-21.16RequiredThe pointer arguments to the Standard Library function memcpy shall point to either a pointer type, an essentially signed type, an essentially unsigned type, an essentially Boolean type or an essentially enum typeCompliant
Rule-21.17MandatoryUse of the string handling functions from shall not result in accesses beyond the bounds of the objects referenced by their pointer parametersCompliant
Rule-21.18MandatoryThe size_t argument passed to any function in shall have an appropriate valueCompliant
Rule-21.19MandatoryThe pointers returned by the Standard Library functions lovaleconv, getenv, setlocale or strerror shall only be used as if they have pointer to const-qualified typeCompliant
Rule-21.2RequiredA reserved identifier or macro name shall not be declaredCompliant
Rule-21.20MandatoryThe pointer returned by the Standard Library functions asctime, ctime, gmtime, localtime, localeconv, getenv, setlocale, or strerror shall not be used following a subsequent call to the same functionCompliant
Rule-21.3RequiredThe memory allocation and deallocation functions of shall not be usedCompliant
Rule-21.4RequiredThe standard header file shall not be usedCompliant
Rule-21.5RequiredThe standard header file shall not be usedCompliant
Rule-21.6RequiredThe Standard Library input/output functions shall not be usedCompliant
Rule-21.7RequiredThe atof, atoi, atol and atoll functions of shall not be usedCompliant
Rule-21.8RequiredThe library functions abort, exit and system of shall not be usedCompliant

with deviations:
+
+ + + + + +
QacDescription
5128 Use of function: getenv.
+
Rule-21.9RequiredThe library functions bsearch and qsort of shall not be usedCompliant
Rule-22.1RequiredAll resources obtained dynamically by means of Standard Library functions shall be explicitly releasedCompliant
Rule-22.10RequiredThe value of errno shall only be tested when the last function to be called was an errno-setting-functionCompliant
Rule-22.2MandatoryA block of memory shall only be freed if it was allocated by means of a Standard Library functionCompliant
Rule-22.3RequiredThe same file shall not be open for read and write access at the same time on different streamsCompliant
Rule-22.4MandatoryThere shall be no attempt to write to a stream which has been opened as read-onlyCompliant
Rule-22.5MandatoryA pointer to a FILE object shall not be dereferencedCompliant
Rule-22.6MandatoryThe value of a pointer to a FILE shall not be used after the associated stream has been closedCompliant
Rule-22.7RequiredThe macro EOF shall on ly be compared with the unmodified return value from any Standard Library function capable of returning EOFCompliant
Rule-22.8RequiredThe value of errno shall be set to zero prior to a call to an errno-setting-functionCompliant
Rule-22.9RequiredThe value of errno shall be tested against zero after calling an errno-setting-functionCompliant
Rule-3.1RequiredThe character sequences /* and // shall not be used within a comment.Compliant
Rule-3.2RequiredLine-splicing shall not be used in // comments.Compliant
Rule-4.1RequiredOctal and hexadecimal escape sequences shall be terminatedCompliant
Rule-4.2AdvisoryTrigraphs should not be usedCompliant
Rule-5.1RequiredExternal identifiers shall be distinctCompliant
Rule-5.2RequiredIdentifiers declared in the same scope and name space shall be distinctCompliant
Rule-5.3RequiredAn identifier declared in an inner scope shall not hide an identifier declared in an outer scopeCompliant
Rule-5.4RequiredMacro identifiers shall be distinctCompliant
Rule-5.5RequiredIdentifiers shall be distinct from macro namesCompliant
Rule-5.6RequiredA typedef name shall be a unique identifierCompliant
Rule-5.7RequiredA tag name shall be a unique identifierCompliant
Rule-5.8RequiredIdentifiers that define objects or functions with external linkage shall be uniqueCompliant
Rule-5.9AdvisoryIdentifiers that define objects or functions with internal linkage should be uniqueCompliant
Rule-6.1RequiredBit-fields shall only be declared with an appropriate typeCompliant
Rule-6.2RequiredSingle-bit named bit fields shall not be of a signed typeCompliant
Rule-7.1RequiredOctal constants shall not be usedCompliant
Rule-7.2RequiredA "u" or "U" suffix shall be applied to all integer constants that are represented in an unsigned typeCompliant
Rule-7.3RequiredThe lowercase character "l" shall not be used in a literal suffixCompliant
Rule-7.4RequiredA string literal shall not be assigned to an object unless the object's type is "pointer to const-qualified char"Compliant
Rule-8.1RequiredTypes shall be explicitly specifiedCompliant
Rule-8.10RequiredAn inline function shall be declared with the static storage classCompliant
Rule-8.11AdvisoryWhen an array with external linkage is declared, its size should be explicitly specifiedCompliant
Rule-8.12RequiredWithin an enumerator list, the value of an implicitly-specified enumeration constant shall be uniqueCompliant
Rule-8.13AdvisoryA pointer should point to a const-qualified type whenever possibleCompliant
Rule-8.14RequiredThe restrict type qualifier shall not be usedCompliant
Rule-8.2RequiredFunction types shall be in prototype form with named parametersCompliant
Rule-8.3RequiredAll declarations of an object or function shall use the same names and type qualifiersCompliant
Rule-8.4RequiredA compatible declaration shall be visible when an object or function with external linkage is definedCompliant
Rule-8.5RequiredAn external object or function shall be declared once in one and only one fileCompliant
Rule-8.6RequiredAn identifier with external linkage shall have exactly one external definitionCompliant
Rule-8.7AdvisoryFunctions and objects should not be defined with external linkage if they are referenced in only one translation unitDisapplied
Rule-8.8RequiredThe static storage class specifier shall be used in all declarations of objects and functions that have internal linkageCompliant
Rule-8.9AdvisoryAn object should be defined at block scope if its identifier only appears in a single functionCompliant
Rule-9.1MandatoryThe value of an object with automatic storage duration shall not be read before it has been setCompliant
Rule-9.2RequiredThe initializer for an aggregate or union shall be enclosed in bracesCompliant
Rule-9.3RequiredArrays shall not be partially initializedCompliant
Rule-9.4RequiredAn element of an object shall not be initialized more than onceCompliant
Rule-9.5RequiredWhere designated initializers are used to initialize an array object the size of the array shall be specified explicitlyCompliant
+
+
+ +This section targets to provide an overview of Deviation Permits.
+All the rules corresponding to the deviation permits are disabled inside PRQA and will not cause any violation or deviation in the Deviation records section below. +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GuidelineCategoryDescriptionRatioSub RulesCharacteristicsReason
Dir-1.1RequiredAny implementation-defined behaviour on which the output of the program depends shall be documented and understood3/34
+ + + + + + + + + + + + + +
QacDescription
0292 [I] Source file '%s' has comments containing one of the characters '$', '@' or '`'.
0315 [I] Implicit conversion from a pointer to object type to a pointer to void.
0380 [L] Number of macro definitions exceeds 4095 - program does not conform strictly to ISO:C99.
+
Maintainability / Analysability0292: Invalid characters in comments: Doxygen comments are used.
+0315: Library string.h functions (memcpy, etc.) are used and trigger this implicit conversion.
+0380: Already CMSIS and STM32HAL trigger this.
+
Dir-4.9AdvisoryA function should be used in preference to a function-like macro where they are interchangeable1/1
+ + + + + +
QacDescription
3453 A function could probably be used instead of this function-like macro.
+
Performance / Resource utilizationSuppressed due to code optimization and efficiency.
Rule-11.4AdvisoryA conversion should not be performed between a pointer to object and an integer type1/5
+ + + + + +
QacDescription
0306 [I] Cast between a pointer to object and an integral type.
+
Maintainability / ModifiabilityUsing STM32 HAL already creates many violations. Also needed to do pointer arithmetic, calculating offsets inside a buffer.
Rule-11.9RequiredThe macro NULL shall be the only permitted form of integer null pointer constant1/2
+ + + + + +
QacDescription
3004 This integral constant expression is being interpreted as a NULL pointer constant.
+
Keil stddef.h: "define NULL 0" causes violations. PRQA acknowledged this as a false positive.
Rule-13.3AdvisoryA full expression containing an increment (++) or decrement (--) operator should have no other potential side effects other than that caused by the increment or decrement operator1/1
+ + + + + +
QacDescription
3440 Using the value resulting from a ++ or -- operation.
+
Maintainability / AnalysabilityRFAL uses the increment often for building buffers (array[i++] = 42; ...). Splitting this would decrease readability.
Rule-14.3RequiredControlling expressions shall not be invariant6/11
+ + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
3440 Using the value resulting from a ++ or -- operation.
2991 The value of this 'if' controlling expression is always 'true'.
2992 The value of this 'if' controlling expression is always 'false'.
2998 The first operand of this conditional operator is always 'false'.
3493 The first operand of this conditional operator is always constant 'true'.
3494 The first operand of this conditional operator is always constant 'false'.
+
Portability / AdaptabilityRFAL is configurable through compile time switches. This causes some ifs to have invariant conditions at the used configuration. Suppress 14.3 for if statements.
Rule-15.5AdvisoryA function should have a single point of exit at the end1/1
+ + + + + +
QacDescription
2889 This function has more than one 'return' path.
+
Maintainability / AnalysabilitySuppressed due to readability and simplicity of code logic.
Rule-17.7RequiredThe value returned by a function having non-void return type shall be used1/1
+ + + + + +
QacDescription
3200 '%s' returns a value which is not being used.
+
Maintainability / AnalysabilityTreating the return codes of functions in all places without exception handling would makes the code hard to read and maintain. Error checking has been reduced to the places where needed.
Rule-2.1RequiredA project shall not contain unreachable code1/7
+ + + + + +
QacDescription
1503 The function '%1s' is defined but is not used within this project.
+
Maintainability / ModularityRFAL provides many functions - some are not used within the checked project.
Rule-2.2RequiredThere shall be no dead code7/18
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QacDescription
2982 This assignment is redundant. The value of this object is never used before being modified.
2983 This assignment is redundant. The value of this object is never subsequently used.
2985 This operation is redundant. The value of the result is always that of the left-hand operand.
2986 This operation is redundant. The value of the result is always that of the right-hand operand.
2996 The result of this logical operation is always 'false'.
2997 The first operand of this conditional operator is always 'true'.
3112 This statement has no side-effect - it can be removed.
+
Usability / User error protectionAll the violations were checked and fixing the violation would deteriorate robustness: Removing checks which are unnecessary at the given position, removing trailing iterator increment, etc.
Rule-2.3AdvisoryA project should not contain unused type declarations1/1
+ + + + + +
QacDescription
3205 The identifier '%s' is not used and could be removed.
+
Compatibility / InteroperabilityRFAL defines enums for all identifiers available in NFC Forum - some are unused.
Rule-2.5AdvisoryA project should not contain unused macro declarations1/1
+ + + + + +
QacDescription
3214 The macro '%s' is not used and could be removed.
+
Compatibility / InteroperabilityRFAL defines macros for all identifiers of NFC Forum and RF chip register map - some are not used.
Rule-8.7AdvisoryFunctions and objects should not be defined with external linkage if they are referenced in only one translation unit4/4
+ + + + + + + + + + + + + + + + + +
QacDescription
1504 The object '%1s' is only referenced in the translation unit where it is defined.
1505 The function '%1s' is only referenced in the translation unit where it is defined.
1531 The object '%1s' is referenced in only one translation unit - but not the one in which it is defined.
1532 The function '%1s' is only referenced in one translation unit - but not the one in which it is defined.
+
Maintainability / ModularityRFAL defines functions which could be called by the user but are not called in the current project.
+
+
+ +This section targets to provide an overview of Deviation Records. +
+
+
+ +

File: .../ST25R3916_nucleo/rfal/source/rfal_isoDep.c

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LinesCountSuppressed QacsComment
1292-12921
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
2286-22861
+ + + + +
4342 An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.
+
MISRA 10.5 - Layout of enum rfalBitRate and above clamping of maxTxBR guarantee no invalid enum values to be created
1332-13342
+ + + + +
4342 An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.
+
MISRA 10.5 - Layout of enum rfalBitRate and above masks guarantee no invalid enum values to be created
2460-24601
+ + + + +
0310 Casting to different object pointer type.
+
MISRA 11.3 - Intentional safe cast to avoiding large buffer duplication
2369-23691
+ + + + +
4342 An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.
+
MISRA 10.5 - Layout of enum rfalBitRate and range of loop variable guarantee no invalid enum values to be created
2293-22931
+ + + + +
4342 An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.
+
MISRA 10.5 - Layout of enum rfalBitRate and above clamping of maxTxBR guarantee no invalid enum values to be created
962-9621
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
2382-23821
+ + + + +
4342 An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.
+
MISRA 10.5 - Layout of enum rfalBitRate and range of loop variable guarantee no invalid enum values to be created
744-7441
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
+

File: .../ST25R3916_nucleo/rfal/source/rfal_nfc.c

+
+ + + + + + + + + +
LinesCountSuppressed QacsComment
172-1721
+ + + + +
2880 This code is unreachable.
+
MISRA 2.1 - Unreachable code due to configuration option being set/unset
+

File: .../ST25R3916_nucleo/rfal/source/rfal_nfcDep.c

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LinesCountSuppressed QacsComment
1879-18812
+ + + + +
4342 An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.
+
MISRA 10.5 - Layout of enum rfalBitRate and definition of rfalNfcDepBRS2DSI guarantee no invalid enum values to be created
1574-15741
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
1646-16461
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
887-8871
+ + + + +
2880 This code is unreachable.
+
MISRA 2.1 - Guard code to prevent unexpected behavior
1254-12541
+ + + + +
2880 This code is unreachable.
+
MISRA 2.1 - Guard code to prevent unexpected behavior
+

File: .../ST25R3916_nucleo/rfal/source/rfal_nfca.c

+
+ + + + + + + + + +
LinesCountSuppressed QacsComment
495-4961
+ + + + +
4342 An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.
+
MISRA 10.5 - Guaranteed that no invalid enum values are created: see guard_eq_RFAL_NFCA_T2T, ....
+

File: .../ST25R3916_nucleo/rfal/source/rfal_nfcb.c

+
+ + + + + + + + + +
LinesCountSuppressed QacsComment
391-3921
+ + + + +
4342 An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.
+
MISRA 10.5 - Layout of rfalNfcbSlots and above loop guarantee that no invalid enum values are created.
+

File: .../ST25R3916_nucleo/rfal/source/st25r3916/rfal_rfst25r3916.c

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LinesCountSuppressed QacsComment
2293-22931
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
1998-19981
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
1803-18031
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
3312-33121
+ + + + +
4342 An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.
+
MISRA 10.5 - Guaranteed that no invalid enum values may be created. See also equalityGuard_RFAL_BR_106 ff.
226-2261
+ + + + +
0750 A union type specifier has been defined.
+
MISRA 19.2 - Both members are of the same type, just different names. Thus no problem can occur.
1924-19241
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
1819-18191
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
3511-35111
+ + + + +
4342 An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.
+
MISRA 10.5 - Guaranteed that no invalid enum values may be created. See also equalityGuard_RFAL_BR_106 ff.
2206-22061
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
1789-17891
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
2131-21311
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
3056-30561
+ + + + +
0759 An object of union type has been defined.
+
MISRA 19.2 - Allocating Union where members are of the same type, just different names. Thus no problem can occur.
3292-32921
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
2396-23961
+ + + + +
2003 The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.
+
MISRA 16.3 - Intentional fall through
1474-14741
+ + + + +
5209 Use of basic type '%s'.
+
MISRA 4.9 - External function (sqrt()) requires double
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileRequiredAdvisoryTotal
.../ST25R3916_nucleo/rfal/include/rfal_nfcv.h011
.../ST25R3916_nucleo/rfal/include/rfal_nfc.h033
.../ST25R3916_nucleo/rfal/include/rfal_nfcDep.h011
.../ST25R3916_nucleo/rfal/include/rfal_analogConfig.h101
.../ST25R3916_nucleo/rfal/include/rfal_isoDep.h011
.../ST25R3916_nucleo/rfal/source/rfal_isoDep.c4610
.../ST25R3916_nucleo/rfal/source/rfal_nfcb.c011
.../ST25R3916_nucleo/rfal/source/rfal_nfca.c011
.../ST25R3916_nucleo/rfal/source/rfal_nfc.c101
.../ST25R3916_nucleo/rfal/source/rfal_nfcDep.c426
.../ST25R3916_nucleo/rfal/source/st25r3916/rfal_analogConfigTbl.h112
.../ST25R3916_nucleo/rfal/source/st25r3916/rfal_rfst25r3916.c10515
Total212243
+
+
+ + +There are no duplicated suppressions. + +

File: .../ST25R3916_nucleo/rfal/source/rfal_isoDep.c

+
+ + + + + + + +
LineUnused QacsComment
1355
+ + + + +
2880 This code is unreachable.
+
MISRA 2.1 - Unreachable code due to configuration option being set/unset above (RFAL_SUPPORT_BR_CE_A_xxx)
+
+
+ +There are no continuous suppressions by file. +
+
+ +Active Diagnostics refers to diagnostics that are not suppressed (note: no suppressed diagnostics have been taken into account for the calculation of information in this document). +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FilesActive DiagnosticsViolated RulesViolation CountCompliance Index
.../ST25R3916_nucleo/rfal/include/rfal_analogConfig.h000100.00
.../ST25R3916_nucleo/rfal/include/rfal_chip.h000100.00
.../ST25R3916_nucleo/rfal/include/rfal_isoDep.h000100.00
.../ST25R3916_nucleo/rfal/include/rfal_nfc.h000100.00
.../ST25R3916_nucleo/rfal/include/rfal_nfcDep.h000100.00
.../ST25R3916_nucleo/rfal/include/rfal_nfca.h000100.00
.../ST25R3916_nucleo/rfal/include/rfal_nfcb.h000100.00
.../ST25R3916_nucleo/rfal/include/rfal_nfcf.h000100.00
.../ST25R3916_nucleo/rfal/include/rfal_nfcv.h000100.00
.../ST25R3916_nucleo/rfal/include/rfal_rf.h000100.00
.../ST25R3916_nucleo/rfal/include/rfal_st25tb.h000100.00
.../ST25R3916_nucleo/rfal/include/rfal_t1t.h000100.00
.../ST25R3916_nucleo/rfal/source/rfal_analogConfig.c000100.00
.../ST25R3916_nucleo/rfal/source/rfal_crc.c000100.00
.../ST25R3916_nucleo/rfal/source/rfal_crc.h000100.00
.../ST25R3916_nucleo/rfal/source/rfal_iso15693_2.c000100.00
.../ST25R3916_nucleo/rfal/source/rfal_iso15693_2.h000100.00
.../ST25R3916_nucleo/rfal/source/rfal_isoDep.c000100.00
.../ST25R3916_nucleo/rfal/source/rfal_nfc.c000100.00
.../ST25R3916_nucleo/rfal/source/rfal_nfcDep.c000100.00
.../ST25R3916_nucleo/rfal/source/rfal_nfca.c000100.00
.../ST25R3916_nucleo/rfal/source/rfal_nfcb.c000100.00
.../ST25R3916_nucleo/rfal/source/rfal_nfcf.c000100.00
.../ST25R3916_nucleo/rfal/source/rfal_nfcv.c000100.00
.../ST25R3916_nucleo/rfal/source/rfal_st25tb.c000100.00
.../ST25R3916_nucleo/rfal/source/rfal_t1t.c000100.00
.../ST25R3916_nucleo/rfal/source/st25r3916/rfal_analogConfigTbl.h000100.00
.../ST25R3916_nucleo/rfal/source/st25r3916/rfal_features.h000100.00
.../ST25R3916_nucleo/rfal/source/st25r3916/rfal_rfst25r3916.c000100.00
.../ST25R3916_nucleo/rfal/source/st25r3916/st25R3916_irq.h000100.00
.../ST25R3916_nucleo/rfal/source/st25r3916/st25r3916.c000100.00
.../ST25R3916_nucleo/rfal/source/st25r3916/st25r3916.h000100.00
.../ST25R3916_nucleo/rfal/source/st25r3916/st25r3916_com.c000100.00
.../ST25R3916_nucleo/rfal/source/st25r3916/st25r3916_com.h000100.00
.../ST25R3916_nucleo/rfal/source/st25r3916/st25r3916_irq.c000100.00
.../ST25R3916_nucleo/rfal/source/st25r3916/st25r3916_irq.h000100.00
.../ST25R3916_nucleo/rfal/source/st25r3916/st25r3916_led.c000100.00
.../ST25R3916_nucleo/rfal/source/st25r3916/st25r3916_led.h000100.00
Total000100.00
+ +

+Nota: Calculation of Compliance Index
+The Compliance Index is the percentage of groups which have no messages in them.
+For each file it is calculated as follows:
+
+( Ntotal - Nerror ) / Ntotal x 100
+
+Ntotal is the total number of enforced rules (i.e. the number of rules that have at least one message mapped to it directly).
+Nerror is the number of rules for which messages appear in that file.
+The File Compliance Index is the mean of all the individual file compliances.
+ +
+
+
+
+ + diff --git a/Software/Middlewares/ST/rfal/doc/_htmresc/st_logo.png b/Software/Middlewares/ST/rfal/doc/_htmresc/st_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8b80057fd3a454a97de1c9d732b7fede82c83227 GIT binary patch literal 18616 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 literal 0 HcmV?d00001 diff --git a/Software/Middlewares/ST/rfal/doc/rfal.chm b/Software/Middlewares/ST/rfal/doc/rfal.chm new file mode 100644 index 0000000000000000000000000000000000000000..a16f086b413b441de3ae5d3bd9802503e7a27142 GIT binary patch literal 2359250 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

TA}!N{h@4^VGMD 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%0D83+P(dKlz)-p|1JxW`B}R7d46qC}3&hcc*T9Q& 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�|Ksb% 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

    mms&%0NDNJd@7wID$6T8Or6XLp=vgY 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%0DI-)aH;#(%X-pwpp~K`*W|Kkh<+ZU`ukF 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�ETe|Zt7{WF;vY`15*^$e%H-{VIDvb4E0 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

    RbJd~;n{H2kH}KK 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�=?BmLL=`&*F)0KW8qObh=UJq~-9L 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�bJ9}a+E)*ns&6sr)z_%%zltTdedYSF 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Πf2%*+5sAQQ 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≥oSFl`(ECAW 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 Dma#kc^nHr{(mzBJW#X-! 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 tE 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∓N>j1 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%0DJu=Ei(9N3n}crvOS%+@3)gKdq+(D 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/BO2Hx`BZzbPur3Lxqhkb_0 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

    DIImvez@&xpWoQq%Wcmt$=~Jw$ zDy%ql3GM!rQYVVrDG5C*T~AE-zMl;hAKq%oKNlo|s4AFI#Grcgb_@C`kRg105L|lA zmz3s^v~62B$$_~h@I4o@Wkq#$=el*lKr3YAb#!{aTNXQMG~QI1bgmLk=?S(@F>j|z zU()f;=Z^AIL$jB?%M8tp9wlDD+q&oPh3^H+0UA-T&donS{;Z(;M>GSnOM8TF>3F75n2U56ntP(aL<~apQto3xH|g4c>>j z-pkN?`M2SFL;|~+h8CZf#D7@nFW=XccG||PW>F&()A`2e-jXsWB#nAc&IZsZnq`=f zAn1xj^w$hb-vwz5)CerlnxN|^haVT#vrO>OeKL9RiAdTmF9>F@lF!@FUqihFRIP5aw^)K_D z0&*lGPF_NBpa3yd95&AKVE%LmNI+(H5J0kJcw=ys^1%T&i+=98XJ)3A&gG{%SJptt z&&SE5TaZo)@vN}w5U_Ix`7|LziQf)4Lru#;l3 zFW+^&5}T&iA++6+%nR6UHsvhrO7u#qQBsxwRgdw<5Gm;i@iMgVa+mJk&#G+w+~>YX zwvb`>P|Llp3xCJG({wnB!`qM04cb-5f0}hxg zU16|6%Qtqg=QOS`bm)WU`6+4(a(m19o2MuxqX0!?E^K~Iernh7h);+V4d8|HHp9fb z*EQ0!>y1x7dVVylHAU-T@1J;GDO`^`8Q6tvhmap+_4Kq`F`DPpsgsq=XsXpLM3JZS z9{+!TeW#jm8Kny#VfN>1O)x*);D1u3C$xZ`ss^%#ka!0J3igR~7JIczw&FkP+q8*a zNaxW>2sKg`0O(Un5tldsdkFtv#;1ca-f8u-&w2kFWB&jM{O6w@h3)Ga{}7!HZ!A*o z2QGlL>sBBvA~RzmAi-0eQcV*?sNaz)4;48DySEZ&;1sSu<;QS^`8mH~OmyLBwR4&VV6HzSa zOyxh^akTo-jd9WN0Ez)uuov zT2A)4aPaE)#UrN{W1YF#DY32D4}Q%nibum73UUSpE?6dTvd`?I=mP&gCn&59RmtF5 zz>!jE(0yOzyNNH*Tel3w$CoZEw@OHpBhYmj(6XRbouZC>RrOn*q%01Ymo8#0L}xcg zG)FCM*R~5x1=o7mqm(vDkB}Q4Yzl*RTfVP~}|4 zdG1sXny6%DGc(Gnoi+kPP)7QxVPL~Q3hdnE)=Hkj_IXl zEj@ekRQmEvPX!jst zVTxM|bOMVo*ekoHyIs?fgg4DT8t*;S?%oU{X1H1hh>!w>oA-Mdlb5SjJnWWcOWI<# z#LyVT@YIgJOBAVEWbDmq_}P{cbYNRXovZBbqdfMb`e>704zhLmibh_u)wnjdT#4OD z?Io^<}PxBME%6wiOwbBoJ#JW%M-0v2K<_M*ieoe);~~A_S(DXO;ze-5s{` zi4Tb2xQXGif0$3PD1p3`8|(%~y9|EfqXJ1b;qOc^HvFjFcxNH}6@p@S%ONsq_x^+d%fL^{;-g zC{{}C?D&6pqyCZpTg9a4rluas_TvUT5T3bJywuJ@M&qC6Bec6FOTFj-IrQBut^L^# z;Ib3LJIsT-J$GDt{#(ij82>BKrY4mcrImH1W+x+O0sp4&qkaZ^pr4`+SIn8wE{$*k z*Bb!^@_A0(V@m#NKzEqJFKgp{2W@!k9*pQg)kqa*SCCl5!b7756sVt zO&QY4%IKXYa%+*8-$;ka-yo{HE^SSr-G-gR*l{rz?P$At?uV&KP4*SJQlXNvn~Wk@ zZQSKraL6bBAqT{bPiT@i@*p;CW+lM}?^)*7*k>K(_d7(Z8DS6fGqV^hc7`@qEGwLo zsYXIXMkN9U$hfEDkz^>oV(x!_6u`g^n>(wIYbsA~R|x7`>xQuLF>&-O1y{MAiP@fx zkFfvOiK2>%bD}~q?~61{d;HHEO@#MStIoV$;~z9Bmo)XV+>4ZcC=%dOz?0X}d*x+X z{7g~3n~}@Rrbq^KeEolyc#Uu!SdVy1SvOu^BkU3RPkE7_eS6S-=J%J$xY31J_S`yh zQ*+rm*bR!+S7>NUd(Av~o)-!|yrbMNwrTXX50n0Fac0<;O#k>Ce)@6q4*#mBhX5VN z#`27^d%?6dq|Ky6AG*aBRfg2Ll$X!r%^yf64j*EQlO5ywARq+<+st(fYuUG%%6z>M zkN;YT!Hzufej|20Zi&@%e#Y8*=I+KTywnSJr9@aJTtiu9^LL-dnV)GLCr}^}p542E zXEGS*xv)emHEIWGXGg zi#06ms=W~|-NVbHOlfif&}{v)y@07hrvuf3X>22e^ROI$uze%i>Z_Li5#5x2(P`Bu z2Gf0=u?wNGDgGw&ys4m zG7-$%n(q)OyYuiCXz!EozyBY{Sw-m#C$OYk{VU7<|Fvkj9JnpCtzCMlWjr19gJ7e; zxp^8KGYGm`-D=R0G^LzHvH0&U5pB zyThrh-$cjB+vXbs-(p(X`JxKF279c!>K>gGkJg;RU{+~h7OFX;XA;_ln0t!`4+>`_Qsw9!~|Du7)5=|tu3JoH7{fAno**;5Ue`|*_?|1kHnjf+8FBZ~cg zXg>aL{UvZFKfBwI=)<2@mtfq!qSRhtL??hCqB+)RNuLm&4@`=*ROH0&ukdVae*~18 zl@+huQ8uag(g*PL3b^|;7?N6hSOwP?>&|@5zrmVOKd#n>#Kv~`BVTP>;hI04gmd!R zaN$2**vIF%nJc;DwmPumFx=_sR9riYc6qOyrH*R%rG9}5W)8GPS zhw#AZTHw2i#N)7T7X%-22hiWgKJe#M9bDtfwKQkZLl{ber^qgOZw)zD@RYS;pc>nq zpAmfl4zJ7Na|GkPn1|g`(yWmn&5asm6yE{K^(fVGCeXv73;Ve#b|<0xPcPp&?cYKD z0H@oPpv_IQR=9IE4@V zBM$WG_nQ)u(+y`M$8AZ?dKEM}R(9V>Nr0A<8y!a5&264Bq;*-7-q~3>YH9b)L59x@ zSJew${8Xjnj>Qh^z^Z(j@ZIgUc2F}N2YWQb$R;AgCW}OkvC|MC&S0ELDV%eEqxwaIWwh_MYB`+B@#yh(a)1;}b1bT@m(v+=CsRf+xTNm41o4 zWNfp|oW<*z%iD&suB7IQHM@2iTl=^`UxS5}K7)n7)ig0kK%c{1lC>Pi$6A4wn28e6 zb6H@>ulz?rC~H89Oja9AExNI3TB9oVq)nLoDa008>TbTeXTM!r3B*(CS(#$WtuA7u z|Nf$A=}vlXi;9f_;XghUQ;+5Ork8w~79aWm!n$a~RAaPlSH=&nymEnFPwlDb-SfnG zzyTTIb@!-LWWEKwDX#?6N$GlCadPZcHR>->qx7-m%*34JVv?*#Vc$++efqp7I~;Y) zE8CG4-#0%!ztqW-YRdSIred4@Ay#=2xNGblG$lM6b`3go<&2`^=f;Ap|yG4Z9w<&J2=}HRNR?Y*9Jv;7K~K8 zmqTYm^D~M7y>}cKh`#&B1E@rwx8*!+`)@CD8?y*}8_`2(Ut&#NXy5mirJMBg0`tj> z6@KGCCT}=Xv&-yrn`s*a(@KT?Bf$HQUuBL;J~hg#&7;1Z4vYlQ^=5UZJ2=PrDe6nU zUjl*$|BIVZkf8~fMS)=&A5MAiZ~Nr%fERUSI{g31qjF#SuPOeja43u`!ch%-iGi+wqy&K$yUPq_!uccO_b7YR#a?OYjM)4sBcCrxO zEl<0F{U!Tv&Sj|PZ}--wJ{n>z^OEDp%_qtQOH1)>5;bPnJ!f>CJ#=tz7nGfQ&LgRB zAm$2S0knHP;D-sY^V?e(WmtJm_^P9n+Yma^^w#iE(A|Cd6j4=6I|Rf*IPRra(u3 zgr5s}+#0&Ze&1hUv}hm5OnI!4!;OByEEtiaEQDotQb{i)fm3J zs(`YBU15=lwljw~8PE+hX8D zNFg=jE0xtWE@kbc>uVKc+E~yM$EID1^LbMj?S;#6J8}^ z(2KkN?o^h3t)``(UslscEsn%?h3M#vC(ljR5GPBd+uHV~mwA4UL-V*H#(yVC^?5{u zF(#sy0XLoXiJvzV&K@G-D8OFMQ1Q_GUI`K~+&!FG@?m5YXC$?3x_rf|Wdp!G0?D!L z3O#?)Sf~l{Pn)4o)d&?4Tq_!}m3&}n@+xkYfrb&O&ln(qeNwGU!`MVf1!N|7}~%fIawrN>x+ z@!9FFe)eT@uSv<*@~yvMQhvdnKtnu)sY!Bb>ee@}vd#*C!;5*4-%ahteA*Bp$yrBi z_~Z6WJxc00eHM>f#cK*r&X-F{)0*%p3gU?K)M zAMb||jV@_c2%AWfxxMPU@4Uv}r1TYwd`%ezZth}WdQ#sRUxy^vLtdCr#{JQjJ_2`K zl5aFv&R=RZ&0Y+nW@JCnE~ZTmtseLxof9oAg*`>Gsbno&sRYUVv~XjDTsTI|sN=6N zD=~+RtV}stc-ZE*I*ze1Q!m50FJ-}W&o;a zFT6gO_ILtq1UTP!X8v#lNmvY$!}wqT zXiAEP;HZG=0m}NXKJK-~D$oH^JoGC^J;DdSi0L~U11XOQEe5 zfHi0CH;z6#VnDEj31x&CfRIWgWwaZLLI$0NyO3mq1I5Fk*rAy2tyr>wo34B;oS{$- z@f!e!tgL3nsA#OJX#w2s-MkO_8M)=NF?5BY2eMKM-yN4DRgIuj*0@o?z$P8ltAiEf_b2W&PaYi?5_&7$c_$ zCJdAjP@t6mIY=~FLCLd+n9f~?T0cK;UQi6k5z-q7B<*X;7Zl{wwiSXES$IcJO<(8} z`O(;ztPaLuIn93d{$2Q02zx(z8kuGG&F#tedq^TMyq@gTDSX2>0 zGZP?)w9KZ(FtX}|`s9LxcPy)jG=Rt$KrHhKRZQB6zVbF}e2`YDrP+2C-_QBIP9# z`7O4UVe`QK7m$w?Hl7$8jpOO4zUtc8aV-`I)O@WFfswn05rkSm0K|IbjesS=waiL* zzUx6j8DVYwQitst6}trle!(&adnWAc^(pJd(uJJ43Dh-pP3OO_B^J&#&LXHG(9dW^ zH5xRoafO*s?}UIzhoq*pH9C@w)uzsnLeCXbdsgETbe5OhEl&~DYY(N71$=a-wc0}l z;*t@KsG_^pjcLX(yRB{U4u$O+a_TmD1|$j&Fwk}TO$I>n@dTec(L^TPgSg+<$&ban zJ@`>DrWthk=iO!OMWb zjlisErpTJc*6f9rS%b8FbunrJ+zzr+Fc?MIE(r+Kh$E;|{}YXdx~40@SoNpMy7Sxv zFFbD74mBgdh)qQ$iKg{T$y%2-x~@=*b`;V>#J+LyIj~P#7CweT5;KzpSgX$*C*=%S z#>tZj`W)r=+Ilu@pyl&?I$iBH)6BpkYPSl@vBoFHxa&NiV=&9G>Y$U|0Z8W&y9yXzw72aR#~C296+3PY<(^2>lU3oxHf*_yja7|tg!71DYrY~ z@Pf!pL*e?I(o>)o)@P`sZj#%f?^vg`d6RJPyg7!=%;1!{AyU2j%<-{9Z_=;9#uV~w zAuGrJ=v=VfBcROEJ(LtPART;~in&x%Xanj7|CxE>-dqJtg^xOg1HCG)auO>_D#u<8 zfw08&D{g<`iG|hlUxjtpD7hzg)>91Daiq)oaad>0&UrAb%bF2txnT@K9=1qI0R|(` z=IZ7fS)Em$q>VeGmUe~hkAL9fe`EEtfaf8;QMKm0d75q{uYVS?SM9pgj+AkrIEFI>cT@b2ZXmF)NWRvp;%nowVU&1WZvlbcFW_m zY7|wbb4^Smy3L=HuP)w0;_WU%h8~$?#_Makj?bOq#?P*0wKni_auAJ&%$o;!!q8PC zY5dm4#;x}CMH0_p+9Foc>(=WFbKa!J5biWJ1WQQ7Q`D5AwOgzp&j21Mp7PcH&6|jL z#;8}V)vl_MsZGFf(I1l-1ZsdjC~$VB-mAiMT^!ocg$?-9vbvie9sBcn#rYpGp_rR} zc+4OZS}Nt};JS1g)}~2IQ!W-hMGsNl>+^Y67t97SI>A9rw()Ybi_V){|4fkJU7B~) z`s}2npe7rZ9=eLyTUJOX52g)N$)UY{e7Jj?x4ydBmiTqjyR=u!ORAmYEg(%%$2@>i zq0Vok%XjK#_3aJh5t4e#>aK&H?PgMG0#5j!%^((U_8#I2JVoFQ2Vaa z_g7kR&HlLfpDUqRR_f3s(Ip4;#{TlotmJi~1+uiIvS*S+Nxz(uL-9C26YXNx~TDyo2r5>z|E zlq%Qk>$0Qi+!KK)@Khyyv^-h~jI^3`*qBXWeXr~8&`Qa=fFr|NG?v>#U5?LN-L3aW zzaq4}v-9g-%Zj<(WM$H}Q{3`}sZ7Mumv2cjtW3Vxb(>?Qbi0$T&+44xXLV@Y#Xf+) zgHOg*NIp$ z61Q3c((K1{;$GafW!?(^VJl+Z8S9_rGQCmGzx{d~C$$$x3UO28y^6Wp*YA_J#LG9^ zRb89z&@779^5qk%N)ruK9JRHgZ2?|bjN>?(2&`WTrwS^ngME6YsFEbutYvV{S8Q%f2RjH`#^wBK2)M$} zPt-(*ORY{)haX{kva#iQp4AGjJI$q{VP2aEJ0i1zZ}Yabztid$5TwZ5uV4iswD zYwQ5(KMdw{RAT;`1Z+jui)}plu{)38liMz}C$P;qKi10a2=g{aMjmZuHk#tlH7ZD3 zd+&LNXgkgU%;h{;;A&s!ymsEl_{8&yDj?7kElROgoRcoxm-@c>nxrFuQB=93lU$7t zPF_Y{4&r;GHqQhum#Vhf1q+7y%}x|-QD^I-Yu%&Tlvz|wEXk#UlY43J=Ccp8#CE3H zcr{4uW=~eU@#bCi*(XMpYSnPhy>!%fM4!~Iwl0OMv`|nTcoBKrUGU|7bmYh({`&D{ zbh354cVKVpYS;B~h&SinnZbe#kblQfNL&lcI8qno&)m8~`%Y2|@oAdaaEOez%-m+! zGkv}}0^^<J0sfZW4BY;)skmswq>95=g_`r z8*?5BK6rQ1+;@pDKn=pS4gAVOp1UU0rysPhN<$cpN>=ybD}ccjW25L402Q5~Rlfc- znB<@D#g0Q692_st38|V|Dq`}G7j|lkqDOJC$0QynNz$E;Ys+DHD{J-4iyz;mokPOr z4oHj_4X|)@(-n0w!7)&g7|cc-4rImA@Imo*o?A%h3#fcUib9xYF;J`U;k$zWv@=FY zrR~@=+gHP4mZfDyy9HX>f!giQw;P2JM5J6}O`2Z8`=#Ox24^`0YUWa%<}ulc}R*l_oq#W7~qDktNfUNuQaw7ENbb zc;{fKWveT8n#u{dz?rgcmI#@ZjaY`vM`dF@qU^AA?>D^+Fxs37ryjBU3%K|V05$(| z%bCWnxd*qwp&$DcDfi32 z4nJrDPsIstxNS0XEZhLU`6BY`Joi{v#%rb`Ic5OChgr+7$GgB!_*-46VSh zC4~wKtBu@hn6(*iIr^E|F0g_G6zPc3xtk1t5{b#Xm*s6KcTl2jTs8rai@v+O9E43} zZ_c*(Dqy4wg>33=l;}%_ed(~~*DMM->DMW;eem2{x(NXSaB+)k$K18DtwuRuIV@d| zHM;h(!tF4-MP{?#kOi&}Qkc-x48>`6%a;|(57^I47xa7(;uBAZ;~Plv z9*C2uRdh?Tn%k@!A51I<_mXlLRPJ)qyPWj)G<9#cNSD#cojB6;7Yw~~=%~%1 z7JzGM(y)5*ri~O-El4qi*yN732r@>VRAzKb79d7pD#na)H@2l*YIe;U*2b9E9DZ%Q-RM(R1gC6t4qh39C6RUKk*h zxZV2MrU*T{T_sVpSi-+q3I3yZ&Yatt?F&HQgU@u9QzvVLJ|!Cj?oG*_V+;D!hN{gZ zTOb3w>W`4oPRL%UNL49SE6?++K;%K`gp|;fk3?3k9?YeE+i(DrzQL>Y%x}d5w5bF@ z+a=88hOw2Q4&DyFXk)-8E1Nyr`)U%SI@EOM(UQr}qSe@ie}Z=ZH>VRSMXU4f6GcNI zrN>XshQP`w+X*Pyi`EZjD{ZoHA9T;vbZ%4#zPIBmx<2cIgglyz_AjBJ z%+k$83fibUS<~!cBgIvoA%F*wniLHukDcy-5fq+p!5S(-O&Boq1erBe=`^quQxZVl zYsI)ry%F2q{^Op!Vn(|1raqs!p*Am*yy#7T?l!dOT>#t*I7q^%p`-XNW~ia9FHeZXa$kp4VK*n6Tqokc6c)grj+qHp(*dEe^nDV1PVDdU5O zomz!WlrCqe3Vafjb8)xqJ5&AS!kJ(Mm2p9(=Ngt#Ie2{!jp9nzMu&o$UIp1V> zzB1!}Nfwy4g%Mye-}G4cWOguUDF{wZsI_KSyw|?71HRBHyGVwNP}iq6OqW&o8_@hG zL_uofF=a-HWR$>*l}SAZ!I0kcD;o<5hYVj)&QQn5ilu`xu1axY;r8VHX5~BNzReGs z?ts)o8me5w^s2zOF8V|&-@0yEwvaPnHPCta!Gg)iA7oS&;ZV|d_GVLUwzOIV>deXx zLfY?OhXO?g5*Pq4K+wN=@B!NS7*t!phWs6<#;JWXMDypQ>LAgO?}Kf@a0a)`E5%oL zZu~>=CyRVpSr0Kipt``ZfPKLLpoM^7KWz>cxWf?pB^F*gcb0CRWX01A!!)YF)%4wT zNm~kB@jWMPyeVYvuieaKicaJcP`dZz>m}+%cT%B|7^)6#f?n(9F5;It_u$Sy`gVrA zO+`50l=wXT9F_YYJzI1h*+d!FyUhOwtz@kg>=4)+Zr%?}G+7*+@jOW;fBlgyOuwrRq)(xV7xMs%Fz$?yZ{yfu%VZv2K=LAGqML8elEHq6O# zTP->^x%c_av+6K>eEoIU9F@86+}Tobkd`uN1nFXmv4FAWopXb}{0c3yu5Z!+Z1aw& zHQhyTd}C&uv34v}6F>zgbL=MBX(UCk+qsq+e{9?D9xDyucdK%igsUK^(qy99kQv4n zSut$}ks!MV+tR?6jz`RSyb2ZEm`$y7eUg0+sltUZ*wGg=Waq+Xq%;|1j*~q|f<$cS z>li{JX>4dWheTfq*Ufn;W>|?T1J~hFs}?{|tO=n3Z^%^LJ??B`$d6h|iUD>`1$zxq zELLfAG*FB49Ui;vtUc zawFxBCls2%?td)T&SrqjWp^-qqII52U*A!gNOcmD3Zvm;*d?6=&1$Y~B~; z^rxG$clWv~Tfh0;bRO&ug;k%5b#yZUhVq>B$e{1G>suRs!A=hcP8U<%pQnBPn|9i^ z0KBN10qAzB$xCG+f~_0?u?@aYjv)4WFnxK3hD#MS=1T}V%THxBSTl{(-(0rf_g*Q} z*W>}k$#?VWd3Cqr-*o5gJ@@QbsViA<=M;ib38ZvQ$z-8vDlPR1Be|-hVgO4TXU0d5 z5xoYt7jF1mVqa& z2yO)7na_D_*Wywsblf8embWyf8~Qj!=?X70gFD3>Fl$-mnYQa)EJH~ZS7v{O5bxY# zlEH6hgAt9fxyX9`%WN#|tooL8PD0c+k@2-)BYI%@()8jFsfHQZ*P$1A*;^T74yB}d z#X~L0o-N_-e$}Z3I{CreYc3GB?7g{4b_UzDI<)tj5(7)dn2M52ZH~xZ>v%rAFH223 zg65ejV-KC3P_}D@NiB05t3<81z3Y2pG}gPXXy=A$*S(C)zVI)60yjAL*sNRua;_%1 zdy^j{@hG*mYy#bNs>_l=_XBk)0Z0~u47hn3V1KivuyD+g4H@DL`hQ%-%YXZ5l{|XW4)1C zRTHQvOa{Hr@S(6yPVO(K2i+=-X_B4K=&GVT%05>;9fgO}p8&uPmiJN{3$3)o@4&`F zhe^XAQ2n&`BX7k^Rry^~xKU zP_%VtGdakAga3`i^D+GX3|+gtiu0>DKV+cmV`MYN@Z zB|(Z?yqbJznUh!T=NFzo?$DBr<;fbg_}0^dz*(76co#_U#~8P7fYt3Xw= zcSGbjhNiW}f!QL|@MKJhTig{k)wE6=qhdi8Jo+0@9P3^HPqM}4iJ*KFdLyeyFDTqh zF#-YaMWbyP{?_6Enm@%7)CfI#tfyryGky-8s(xl?Y1JNj&SKC2fDjM^00aOtLspTRw(E&T(6fImXZ-=gy54!y{Fd6VJqq5&!_u0FlfAKqwTGLM$;Ue7mfC zY;TI)w4MTEyH>4Gm5wC^XcUj|iP9${g7i(}%GXwAX8%9w{}fu1l zcY#fh{&(#k|7v&cyL!$P^BXc$H`>AN;QeIB$lHM()@;zz=2r6wSNMzH~v3rXT4Ey_sp zn8B5>9PHtF^=ixyGLBGE00psV$Ma5EE?~8K6r@WK;P&KnfGi;}L3m|g$zwH6B3XsV zo;K-t_PGmpPxIA_=LxCY9#m|}lB!w+BrS??NF~=m2>^Cjo_lame(;u79wBe(4h9$= zp(+^>G5EMTvUSuFXyaqTcxP$7fA7IxWS|I|3Bo}}=di?+!}Pg=QmqJpFs8VomW;FM5qK<6&)|{3+w7Zl>Uy&v)Qfa-DTvoXI>^IO zsOWHeq>I{e4Tn_p!n(T2AHX1i=vobT9B-4b!>qDVnUax?0Krzik_`+pZ}~L8ADh_7 z{@Q^bYmXp=bg;~J5l? zYmdr_Qj^kQj%A2tNah+t1ZarGYcp)%N|HYHcwWLcl%%1Ed;!iPog`85kyu!TK^S4Q z$~V^^m5Fll%s^P;R>%g;F*m4B0pnp*L*e5j&_!(|wC;e`52uj!OpB?HG_xJ@2lb|R z3HwNF`DlAcLo5rtv=6mp;S}nXB6rnp#Wyom1H6o$$^RUqzw?bN2cg`*qe&7s5_)ho zI6MWIHjVzynPoBuZWq(l&}aTDEvbHT3An(thmb%nYm|_%GT7S)J2t^l`(@rMtvQLD zhRRMUb%T&dlp_<=O!<{^<%jJH4$)+bJL9)C#A?XWK#)igl8(~>Mgl7=@8w|Vv$J)} z?HR&dDpAXnZ}-@Sl4mM`*BqA3iLz%E-kGPQo@pg)n}1wKK==C6*#M!S#v`>LSy=)N z{Cx3b&6Uw|dm%kqaTDdjTE=r)socoJvMAvt-7DYtSxfMkA!Al_xL1j%Qvf(4E`*|fR9b+?GM_K4XOw|uK}y#)I3jwWdg>;W4K zJH;0>6zg{+D@b;24{WerIzixc2rBQm=6Q)Se3Mu*4ZS0soSKwCS!v)73G$YoXcc?# zDOJBzW7CPki^FT9_{GNJ$lnA?3X$DFp6})nNW!*wpxe9Z0* z%1>EV7BMUSl9d?|8)hXKiA7~_cc0OlJ2A3#&Ds&A=avxfPx6(Ysc=j}z|0vYhe3C{ zhS!Wn@fkOy1*>#^B|XqP;OJOSj}`r(pXee1dX%W#Hl!-kAnQaRt8vl3jhg_6+LsNY zTa6)e?-+mt8Hj8blrxC561v4pk+;A$5@+%XCHDME9hAXS%7i-y(868iIwf+ z|3hyoJClrPd0J3?Ei&vFmG&-rvLpku-@8gttww$X#Y?Dz2wq47c?1F-X{e3$$np9o z>4UrST{nd&g2#(~&X{=FXzh@5@ z#S3PXc#*mvo2qpmT04Vi@a5!nenSjsfzG0@q5WO+wMhwwtM!I8N9S@oqB9I8jaoC41j27r#=_pwBQJHo{(N)K6#(| zMDbvm+HbnYigxY*{+hkQ9k5N^>Z1nIA=fPaHlDcxXncLGITvz$Qt^JZ+k`C_464sv z2waDJ&)mqS^J?VFJN1M8>HGiT2mf1VXMx#$=}Zx@@18Lv}gM)D;Nt%m-WS!1t8b3=4L3h;yEP8$Sq3 zHd`g(b_ikY6bDg&%6FFcT3HlXOU)8|Ww>@g&b3HI+sJ?J z<$kw@9Dwn_K!@8L?II? z_yFIevZS+cx0H$i>}pt{`R;b}vDB;H*^Bf)b%-A$?LD6LwE{eVq)Q_EB8hkbYNy1`*EUPLbB7;kYK9D=z#LY2)`6b=XOr`f0P_Pln1OrBxCAl-I zK=0`g_IU2%MSis9LB=hh_hE(QW}olukh3br3VFV^lzUlM4#~Fc93y%yPHII8ze=_B zhBq^)(!AX7DX9Tx#kdv76Pu>9mGFPbQGV@6n#1q#ouAcY{o{d1z0I#z^96<(_o9ZD zV{yE>!&CznTyWnU$2>H-#xsA&#rFz{2T5G1Az*JO?2WiySXKA@-F(GOJtRIE(*^AE z%glE(EQOQqkcUNM1QpejsNt4}Ex1BB^aRn3GS;PcH6T?l*BVy~@gTFSM5iy|0H^GU zQZ)H&vEssrn`z`p)iuMipaw+a^3jjs(oT(EBsG<=p@W_8Ma|TV|Ey$)tW2g+Te#vw z;Y^{;?(Coipm4$}uQ=r?PdP6cb+>qeecYC>BkOx?)TnWC~In? zx93&wZ6Q;Sd?U|CVVMnLl`nX_i1n=A)k5!rM$rq@72~(pu)7G9{bBJ>!g5*;=U>x- z5WTGTF8hg)elClVwc=zepe3&le=)2GVZ1$ZN98pwy6|DIbM4%?cEG??rLCIKVKyxJ zfL~p!k02xQmQ@PSLz~uneH^)c0rIO-zLY2c)+lfyfr(21o|BNPrN393>VnD!4s{p{ zy&G?=d0a$e97vc>Od@eH&p`uv@ufVT+3O$%8aT)PiGdb>+l zTJ`F)YoV?$8>A2r1-ntsTJoKeuh1J?>$H%|(R*{&cn*<&_n`TYD)4IlmQ)VZQAW=$ z@(^w`-+6dsnPGAj8EobF@6@eE{@rv84a{Gb#>L=YeoBq*2PrN{7p?&3VBwzlPwd!y zcc)3OmQTl937ILsfeKnCuvm}-fbTOMeZ1#&Z$q)W>dV+U|Lun#X9!8>Re!UI^W~{O8YphE`4Z?Xfrg(iQ z>UJx9xGF+YYdRBWhDEtRmdF##(-bO;gDx8aLSFf=LIT)qGx-4A zz_wZ<9^ouGvwOv7Bi^Ykr{&-J1b6}(Pv>)H^1z=Gr{7p~NMzixf@A`nPQl6?R8(WB zRc;A7%r;*RKFzta#bw{f-WnVk8<*Vfz5FTE^}NUpvz1=cjTy z_`KOQ&rs~p&k3xZr)e(-UIbWT`saI^+(T?1#LLhJ&ro=gi_sWseaCO$loFRwm%Pa; zxQ+BE;I#VlArAlY9ns9q$DzoASvwuRtf}$#5JYNSQ~FzIQ<MAoSY`+@VR%-B%5 znMc<3m>8;!21HwIgY}WX)Bb1XE`Og-C-~&`{?E{^ zS8zGfyx#EZ7*F?a0bjrAC3qI@4AXx%v9y2Xkw>@NKem@nhBkH$Wqcfr%;_WJ*P}Qt zL)fZ)m@P(WA~M~Cqi;-EV&U!t@QByuxXM|C+l*N$_yfiLS1|yd2+H{A;yINSW{X~U z1p7r$oVy(ww2}N?XM8Tj=?T8SBY3L4v_dCdy^Us2@Y+auX?c2e{iQPl?yf^+2=|70 zPAC%m{lBR@5gnP{iI(4IrKI>++YK>aT7PI71D;v~BFN4qNyN%&$-pzMCE%~%ZPz{O zQ4qSKL`}@TX2?I?Nf$ab+5Msqn#q|Rvj-&CC^fW#=!+s|Bn5f{bDKol-WxG!3wuTL zeZ51YVKp=|=~%d2Gt*jHrVj5wTz@0jv1SV}<}h)@58&aNBcraFzXpD>T)ug|nb)6X z_JJK-iXy(p73$A-B%C-JCfoHMjdcnlw#RV0q?#{{owb?}mt*hQifj}5uJG}w)%tKL zlqcGwWkK7ud)HrqxItk_8p1CQPj8J>{b##n_XZ`KY~SPHg>ByaOS9Fu3$sh>n!;R@ zT&{b+S2DBhZnmnV>%X$UQhe0VI{Ivz$&rcMyIBmjCdcjf_@=u{w^jfMr|c)^g66EfN6FH*ICbS6`er5Jr5DgtGKz%OYNm6_-_=a+qHMD zq#fIJf_3Zmi5W*~>(^$A1>mML!@p*;iiu68Zr~+%C5G1+g)0BzX6n#1jUJt z#*#zZz00I*5GF4#i~HI91>O7G=Q~3;JKHcH8IfEXID5MM(o50>GePHIcxI|Fa*`M zV~BXD|MPL3l|-Fko{Ew$nR-_OmtFVz+1|KJzt{eibEz6q^>b4xQ7QnCSm82`>Y!s? z@*Sq#RN?26{~uOovFk7yp1){E47R^K@3(#M80;Nt{-;iPOYxan7IyQ6F3K>x8QW9l zyx;mAlh!xfwgoQO!VkuaUntOqCkfBTM-~Zt5S!jOz?q7QyRX>^@{2R|f5t^p=Xmoz zimpC3BS~W2VzRSxU$3mHB(k;cz>I33=|Sz^1epr z90dB>y4cI;PsMJ$SHlJkXC{6sV;26ZT&up}MhPU?I=2&UF!=rZvr+u{U7It*l)*HO zn!zw1$>DUgor7V->x*OW-evvJDbU7oq0pH{#jDIVaruy{*olE?vQ4;JA1%K-k136R zZ`0d+*w}g61OJ5c^)!39Gr`r2^=kl903=mP04D0ldbxlwXKBiB^HTw=f4&4Va#862 zV!@mQyoPYpfHPFe#)%Xt7@U7af8GwL^JHTkerO!#GwwVBISir#2qDZEYC5a(i}K`& zPv+bG5TevP!|;eH^-_ddM&tg%3UBk!0kTu8+e29G_Vqn#`e0-r4kef&jygj23<-!- z692tNulLDe|LNb}uNuE`LmHwT3wR_V<>W?Xtd2@2&UiHcVjCYKJ7IN`;#BQilC*P_&5d5^Sl!gL^7A}9HxL_TiMp48HwXN3z_{=&$0Ejgt zdtd#7633O$83|KLECoi)^NO*c-8D3{IyW@?YL6ullwmGX$Tm3rXW&!F^ zfa6Xhksb)G0vq_|{KlOi6|z5}Izxu@?$|cd1U`xklPQuwuGC&C zloxoB8WGbg7pTMliGIRvSCa=te&~QTPn+Sq!fK|;j8pW$ifuVpK=tZ-Cig&dTMUVR zez#GWm5~Eu7y(aVk~p%|;P9sR+U2L6?#Tz*)_nu09K##sInpAPLOD%4cOo%Mi%JDl zb+4|&M4e}xNUZGI%|d)EK|n*m67<;ie4ug&X2A8*QVR6p8~)uCKZa5E20rDw2R?gA zjul}sL9z2fqXIegJKul+@@X^-3$(!?M@43IkOPzv`{l;BkTG3Y|6U8@e+U_oYhqK! zh$w;QPK{@chB{OZM$AfT0pOoUnn57IV$SXSwPhDK`th6~O2l6`vw&Kx79xE0oc$#{ zAR=v8DYo|~B{J5Z2>(j$Epz&npV`}w?7K!QsDt#1EY zSBFC5$I;%QI|JLLRv`@IGZUudf@id#ZmNw`TA_~Gbr9~!eOa6F95w@iu~t3I0Gm(R0 z8pTD!F-TzyaFSq~I#G_iyz&0r70SaP@Tl@35XF*a1XDQ67VR6=5s(zknT#W-gaW#)#;ZY#ofipduDfX*4EaiAbtYVzAe71NB#GLRx8k5r7L1Bpt(tiF3BL!Ch+9q3>K z2|0jFPq_gHSW10c;;ri^-Y-8covh-8U@0769#olmBzQoEs4hXq46Bhw6s0jH zr9^YQmm*|(9`JBIE;+lpAv~fbwGAyJeuJGKOK4wm4Af4?t2}pH;r4`VXy0y*dHB)= z9Y1YL*G$8Jfr%^(6B%J?q{hZVyq)Ke{cfMw&e(XJ-F9E#L4bU*V?P`&#m3x>w2ca2 z4ccfCA%})gZYR$rPGo#0npcL~SJBWx=V8aClBOPoG&T}c9d&?hB!yW$QCf~pdqe8H zAI#{0w=Bg9O1%1jv}4%V8G#z?-H1K3*EF{DD1#;dK384^kX`!3*Yz<#!Kg41b$ukD z1Y`JO_`#x${A4FQo_OQekW8)p5Ydmr(f3`p`yE_qcX#OlIxQa9GZ+yNEHMfwp?w83 zw;STHoK_hPzp3w;T)9~x8b}A{IJFF=DUvA&R9NM<*npu@VFGi}b0<&$IS(X;-PC+@WR4>me71fx)>p#0oNL28bcawV@X4OBr7f=c?mHTj4b zC=tat>EP6@IFf225H6+~krZ-TdYUzluL3F*MmQ^z8h<%xiPxrqx`Zz`vL@YH^3@u)qVqgG?IQZX1AJQ7kEiz3& z4AcX6_JQ%jfer(cCxN8j3AKa%3dL}1v_vtTXl$Z1j7h_k0_LEUz2M_{9%ns%Aa zJu@>FXbccIM~|aYdU9xV_(*K_j+i0TIwJw$ZJ5T7C~(!wN-kH$tu6^W<;M@0S! z(Mjfq9@#6$sVUOJ;*XEPM(7yCNTos7#ugfjrDR?IS(p|{5>{t>ZEo(9>WmF z6_GkE!Xy=aNt)HWOGQOz)eJFyjZ+C60i%dGJ~V)<%S2o8=EVED9QFAMV=WoRQUw!o zsF(uM;kD@Rt$rn`vQGt~8?zE9z_E3ix>0<1Rr4Dtw8&tB$`M_35?~mNjh;`hPphC0 zhw+Es%tF5cvkE0@VYBpShO0n)Y-*q}Ns-Q*4g0*CG2i{Yf6m{#clPh!m1*t)^h}sb zo(V3I$gio20u?78#w*Am|7I8P6VB2uJ@k@9?Rmsez$&r0F~@PB{(~`=I=NvDD2cgg zcp*z&+MKBDJOPyn_zK$-@`Qi#w(Mg$DWBy8!qbW%Fp zD8AQ32TKjXjL*6x$Xrp9Bo;`yW(|1glIZG3YmK*T+aAY%pP{R?1HTZ#n2H<2Qw!c} z8OdH57=u`dI}~HJGd2U($7O*0ZXSlhdII9NY(^Na;K^BjFY;vQk3V46&HHzsThB zppv#*^#|B91x@Wg!=!7CY*yI9GOs34q=xeCq%#4J_c3st2k>DJ7sGNW^)N zD0b9r`brE?1nQ95LWvPjtsw%@q3`;4pIM<~Udk;X8P;{Ch)};Qk58+|jcPw}_6+90qWHC-ks9HFwXG<)XUagreIyv46 z|B*~6`hcUxysU)TFy`qg@BM)6Uy2UQ!rsPd<=2hcUN4F9)?7JmYwax%v4*2szwO4 zbKo8)kt7=Aq1tgQhA#tYOY#DruSZ6Qu}B$HCn*h;DaZM|Qq}@EclO4*AE*7hJMH`j zvMOba7?^b~hS>`=*C=GJummPftn2MoUZr5O20*kxAU<%1q(Cte5in#^8d)feKLkVS}*wn+^<>g%J@Fg2f*#X2er9}+)*yOyT>MYR!NF0+KKg$_H3 z%Yp#T|# z_B+fT_pdArQmjBx%3NaySgSh!e{TpVK!{46zz7Ex#^k81MuhF(m!yMkXr+eTvvb-9E$%?dV6#K=*r&p~im;H_ zmB9}|Y=wft2o_M0fFWO)tL%Ox58}`3{D3MD5CZ@N05ekrAOK))RnMw40af4sWA?kH z?rF>d6pq6f&`B18&ixk**#(wYK;j0|9$`omc$N97>87hTF`piVevp<+v&p` zRzY+@hdLfsSTUWAYo^3t0}wy}VE_Q38L*i$0NREo$vD=8(1FDCi=7nC+H9Rqx4N|~ z+asMg?)Yum;)41v+A6UrJBdb<3kD#HT`su~pFIxI98HB7W*&X)VA!PHpZw?)POeI$5UDcF` z!c3J*&?AzVyquyDzx1O?bD{AhxF1N4-RNagF=0}bg%OGReaE7Gqvx*ljSIV5`|CJl zc_|P+E3UK*g965WWvQG@Fj@81hbxx+dtXs6&+=n82b41z_ z<(3sm+i4n=Vw>sCj22o)6E<}2{&yv*Zwk|s$p@kAtByj3t5WRR5oX>GX;_yy`mO%wX?SW_#=<`wUyon^ z-_PTd_qyGFjDIqTomHi!^8+0Le1_jS<0A1|F@JjRyt(hGng6823((Pjh99*Wb1Qzg z?)OttN%+AzZ->98B1U3U&(E5vci?D?(6jpMy(p4K;>Gtl)6g*;kKRUH{D!WGz zsb+Y4eHLkyNWry$ve*Gi#Sgr_SH%H&&+aSfXlH8hSM+n8U4GlOhwZ5@#F%?BlGweU z)6c|0D3+|Xi9%)EnxfUa>uwRW~cycZ(8^zT!i)-^`Ey-9?l2J9LG}J<;rr-Vh zo&8PBoNVl#yl~DN8#51ye$?-(_Df+>sh16}@H`{yETxI~rP)d^t(V{xZ<|XSlawQ% z(!1fIGIb_1Vl>%hwi0XEaTTZD9|Ar)!Fkyb!ze_o8;7-;eP?kDf*~@RO=mOqKzUEK zYc?&^jSNf*@hnxG1il@+Y3ERfWnIign2 znt?Rq*}!}@_@fmCWfYT?LM?x$Z`7nU8wE#wVqZKywa{vx@xlgdjNYW;M@kfs`juT$ za30E-^CP2-ZJC##g?*Y>slFyc;LCfn6$x;uF*Lnv>5gFiqT0Qwx}Jl%)H~|(shBL(K+HIkI?)76Fthd-Go6C*n}Co?-X7kVL)?KWj_u};$pdO?a!avxP2 z-&hDcXx|dqht9;r!hZcJ)t8;ui+1g^FmiG%>>M%AppU6IZq{ysS0-RnRSllPtimd$ z)H`y>_w2&;WU}+)rLAsS6V9^sJaog6u&NCjs|~4$W?`OpB`O45zVPrBzOwbj=1+^B z-Izy13>bK0&cUGJPW2E8QIy8x-$ElqZJ6Z8x_rm%JY3D3%!jyO1EA$j*1lI=hIqI1 z=zXUfdr-UC;YY=e!%oieCu8g6Br$w}#l7YX<~>WlJWy8Mk_jvR#IpGN@VFRx zS=iXw_zW?%3R+cG&J{xW@%a(JfV0ip)D~}s#~St?e|Z_0nc)3Nr#gofUGZ^*sINd)`w=<8ny=)v2F_#VSMVojdc<-+&ziIvD%Hr%*xK3 z%Ii~jfQihk^R@_4O*vBzV^luNV#1}dhi3_f%SJwKJ{LYaV;V2Xk$mjTH>uxaYKthJ zs-LaAIbTs+SR=R%%(J7m41*ikv%<;S#6`1bxw5rove^d1){qL!sjF%RsvJ3kFt|K$ zc0RLty$`D&7sc1a&dtKIu#g!$p~{P*Jrht0;T>)$`JdDoE7pqR$lD#u;%mn{TeA!B zl{eFgwXTav4mMGo;^OZU$F^mv)0XUfD9i`jDYb*|@`ZV_zaO* zNDHbuzQ1~`YRe}TWrx9T6Wb@gAv`RcjLp7AWj02A9eQ`loD1_HZm!$aPd2og*PB{y zSy}!gP03RuFWQaB*|PF8a(FRkF|BiVEmLd2xws1lZs#%rweX$6&TR|1iG)^16ShB1 z7GhPM*ZYz^j8J4p^stf#mVqmB!n|`+JA9E$>}*`uF4AK8$il<3HlU#~Th3LvjW!xw z=eCU0@}Uh}1&cOMQ)DGpUDR8env@h6)x%Y*@0BVmuknYQ+n0szHCDcEc4t4*7LCaE zaVJnOx-4H$c~t5n>$yw{&cBY&rQ1?HwB z%e-VTCC|BcRkUvJFBUhIe}{!5ho5TFjFpiiv=vd4Ple8n?Ca8>Mxf^+{P{Eeac>B6 zg>G8VBS%j8pU09IBxXy+r=LpOYR?%nuuJ?~j|99rnm}h3CyDJ!;K1wZr3U5~*@*va zQ2`4zn~aRk&Kf`an`;|x#WgM-<>S7!YC<-ypr|slqH)ScC-i~QMq}#twt2%9C>0K=e3Os;X8FJ zk64c6Y`Ob5VL>k<({cM-*v8O}<8l_POcmbb#$OWP%t%c=#kbTd(5dcb)1f-6bxhw` zvb_(UY$e79-s3WBj_@Xu%j?)A)we0D+pW(Fo1JEvo^psbJ50LA+^o~jh~&^rW@7Xw zDxrp|klmfwxEitv12OQ^3+XY-#(Xi2Y5tzF+ah$n7W(1bA{|t)>OSVVin0lpug4e7@Xs8J0N5^^=zH$C}Hf=hm+_MmL+46Ce3re;XGqrj(?>pV- zQS3`IH>ipC&3v)RM!KnEA=_Rgk0ItpQ*D~9#mXrDb8ph9!~Jk_eL~L{6<+ zP2|;8QDR%g61vlWwdd}aI89w7aZcE;{*QM5mb+_S+m5E3mKj49s2!$ipHgeCPlcUx z3H_WpIUe=8x{{SL@Fc7RGat>Z>p-XhQ*)VQvE`2iRQYBlan!f z@ppXQ`%7k?&ZUo4Q>srLbeicZwAA9NDJ>-4WNdxV+`SkNKble~I z)EwdywYa!TEIhalH+lMGD-sY{UCRUsf>VM7 zyqCJgYpax9HqljZO_J^kUn5WKpyOhX{N(d|-mSaH<2J9!S5`K$!I(8(XEI8A6;WAx z%xH6Z;GR;qdw4n&pOO0n3+mdgR8Z}-e0$Bam@mlQfpQQ}iD=}EL0wjiW?|FaNwT=Y z?&pnPknwnyxdCRoB5h42yf*|7R6Gh4Hm@$7|azwQp6AH9r@(P=N;C z0Owz1P48olZYuPLfB7G4&#N_lyB!m?GiH@E7?fBay1H)C?@btiEMtSFbvli|LJTMo^PPWQ$QXcf82>gSQTvS)R8*}9p&%b?&j;MD{#tJ@h zURzBUdmbP@it1XZZO>(2FU{=U(mJoC;Me^Z=uIyEo?`r~YyGEgl<(#{L!JTMMc>j= zr!c!`0!8S{l|l2d=5>(L6+q{2Aj%#l_ zGmEiG>3I_WS?9wI&zst2XSe+)Zm^wR7VUHhd{q_5EyvSc5@OEmtkN(3qez_?Ke?=m z%Q+Ej%7UPt;P3gJFc6ULw{{PA{p|Si?1#nI{qwTq1LbD+aT@={AfsQZ=PIts^fB4PN=I+@s_p-k`&@LeQ_ri4m*u95~GkdJzCRT%x6x}3_P<&bPMxVLTQ03Yow>#(|y(v`2I0EKMP z5)EhC9N4%%PcWd1QT&L!F+KmXdnaXo_V?+sDjkej>d*h#U}ia)z4a4PugTHv$Q*n2 zn3%mZ(Wold?~ctwzK*N#N17|&`Q)5UvDbAZKsHY%c4j_fSN01Wva5#X*353-EJR9r@1`o~GYk@i)|NZ!vqe_aj7z9(n-tDr`qb^`>#s1M z{=XeEUbOmlCAr?Yp?-GtAv_vW@?={1+X~~yR@eKiehPZaTlBGc8q=3?(}%{SJM%5B zi@<)atEdUn<^k|! zv42=KJI3$&LYYE~Tt!+@ei^r%M`RB+E9>y*{QVmX3_t?I_g@x+3%*za>1>A%k!-IrP0`I|3165x%? z(KeQ!O#ZVYd?@f!oZoKc=~6jT%{95~dLVqE5EfG6o%tisWkryg>ztR=3oF;e(T=Np z#rLI?h7EV>9M}e-eH|eze2;wdz0Q(0L>oetkZWGv@0?Y- z7vyt>pAxapTUkv^)w3;wJ1k|sV}W3an~>h*iQ#TLj_|Q@=yfsku~m2yh9le%CKkV$>V0P}ErXl#hrL&@ zwtm)Lh6HgMT)-P8|4r)AcVtW2?wkyig7UG({w{W2USCc;IYuMC3QLM2g?l?eT(Wxq zEUv>foxRtsHGdpCoLD%D{1d@8PSddlSMj%SI{mzVykCZm`CM9`{s7k6kI%ffukpG@ z5<)4d4I*P?is&$`18K`q#%bNhyt_W*bOdB7J^<`2BRh;!mydl12&*f=n%|`#E_(U< zCE$E#N^N3-L?#)*flq-oBWWX&q@uK3k}o<>DXhuCZ6M`OG_e6m#h2ENu&E%KQF3DG zA2(?-_+)0=jKT$4*QD4&wH6;BYM7wRDU@-Ev{@xzaDT~N1nX=U3eA%b>oqW2Einq@ zz~EXsZ`Y7qu~PE89X;tl&eTCRn9Vim)k9=;;Q^TTMnl6*~D6rpth{6 z84-mDj&MMMk;ABuBl&{U^9IA8wkgJv%*5=#^913L9lsY;5tVanjK(%ptv-(VP+}}| z>VZy5Jr{>6MpB5Oy`TgJZ`?KUB0XR?>7>+JBdtPOEYl!Rv6F)y27CmXkXqPn9_tgO zz9CvI0D(=?1EGiMR1Ha#OHo7|Tn-|3WHP(#+jZw-zZN&z*7ugMERZ61dIJs>U|FyT zoe&r!cn&{3A{UDyju#j1JP18d3^FfE3~6W2LW)Aen1nX4Z@(u^w{?l^IJhY05aC zVSEhc+2QRqU1gM__-IWroa?es?JTkCK7rgixF@qp@$gi92s5X!q9 zzi{u1y*(J;=-wL7U}%_2Yhs8N&kWQ%C%MBk%^z}vqZk<3AXs?xv*T55#>Nb|5eQ^p z=MX_4U<|OyHMuXUAGfAX4GuDJiMwFIFBMkKRgX*N18G(pcn$##3%U8*&tlq#UH?p9 z0E*T`uO;AGId($QI31g~7T7>VbVdzcW(l!dyQN-75`=LDsln12l*DJKVe+K{B+}aI zT5TzgJ-goCf2Ox{D*p-QDLiHq4dX3ULe5N;z+pP?&7b0tprj65R0C&mUAcw$okFLn z)Z^VB4OmmBCKakTf$PEV&Wpw$mb(qaat-i76IsP3A?qoQzXKizW9tE54V8LhVN41p zSSbu+V(-xmVHZKo^hDl`T$kK0u^;%QeLsC^hNqr#6`9K&7;9J@2U(b;Q|im1j?ecw zCiyWK&piHfV*AKI5EBZw6@Li6;@e|qcsntKN0kzRl*TCLz?7X^zhPrM569{X^J48>2zYabBZh?$5e0CtdXNAk z1*$gi;JaG(;ZHf&G5=+SA8BOD5>K_;N@NnHH=g_K8iof! z*m;AuRZ4GqZ^Y=@xa_$Gwb{CDgT_`;A1y2U3lt^C)rO`Q)OX$ECXVAC;4?HxQ_18Y zMXgN|DN`A1^nqHlej72EZgNnh&b6pSfsS8fB(9A<;; z9(>-o1IK_bq`_M0hm=P+2pUi_&bUhbIXCo?ugA!hQ<-+I4j7<;0qvzUhfAZd2r1TK zCq-+f{3Ws+xG}yfMY&*tkz+}ZZQQU{d5s1NnNi4tpOn$HlCM6|wOo=Ygh197q0uhl zx$PE!rIxhtY2(=(#bt?@{HV?EDFe;xEinK}XQ1TFz82!ofqm6-aSO0EmvH#>U>XQFNkW+bXvX{y@v{i$GHWI5T-4hNB#Rxak z{PP}7u{ksDR1T#;-Z6-lT`3}E3xY>?`7ptKXX35t?~*zmE44uePJuawMDMBytxVH{ zo#$yyO19S|LKhl79zg7ZHHOHoMq0^n2Q|oHFi5mU(a{#s`9z*B@bp1Sfy8p0BDDZw zl1K%Rfi2s(k2>hzGT#3)MMtUk7Te#|xFO_;%{m<3?x?iG-7CAE13tw;ZM z$9B5Yq><-|SW=o-Dhd4-WZVFmfksow?|4gZ*O!vJceUQQdx&rb?becFk4+R369!a{ za0sSlTaGxT>Xlp9T_R9@>BpUrwEbLcz#vB=LqJEIiZe7-c%unYMSpY&a=2feV=%o# z2m5|{AoptT_YSG~{+&RY=>NS&|33VM`)OIF{a1>{>Wv2OF9!-wqCG|Z3ysGvgfB(0 z)a4O@Dev%v%xe>z+JY}M@75GdYt3hzL6%@{UdnPNoHKf)qU8Fee|P*-2OnTp!GizZ zy~9A9DL8BD)yU5oNkSF_TLK=kn&(U0Q2cpI{fURK;H=Y2(4549Sg4Gm%Hh6V)EeP$m6q-N+Q{Gom=CfoeX)TX= z^gx|h--d7CC*Z3mN>JWGL^+V;J4IwF286w&@nDp!$bhOVh|x#cP*+h(C`JC``3Lg< zQFjU&0c@lPm0ruJosV5TDM1uPgdM~(2*Dzv+FTnEpmuUff)Zoubo&| zK}td1)r^o0oZViN_NuD@b!&5osU!B{RtJ=zilQ_gBv5pV5&VkynzA<~NLnNw*6tP#N{I|@h~5>Z08HwVKG zJKE~K3)YA=MAc59wow6OAp;QuUbWo;Wf{d6tEQARh;3Bu?qWpeNw1+yB z0jwz2rsddc16l+@%1ZmDR{MTurcQYiOdC$3fO=gA_sGuFRA}1TgRSbchyehNZXhc0 z?dv)m1C&v$nu@K{w;*Gsfml-GRh+MpXgbh=IQwh=$N$_>U*YOh*LQofHqQKU7TPd&G$tBdV?lRT&rpBBrv8gQT8;7<>IN{xiM( zfF3u9g$Z1HHR5>$(omkQ%qUDz(o?Pe^aScF$8G}j7B$~*T z8bbp4rl>X}i~rTK)p{3r2$_ZgHZD=XfxxvPuboyRFy`oN$9Sm&BSDSWdv_|o5LT3W z3fcxK$%SdX*gy_ET*r?|08kXuAZ7wVpMoV#sU4m>sAt{l<-{&5Vo0ivX@DHD0j)cvwb5Zp4@?kUC}6xnu()s_SDb{q{&Ik=@HCW0 z+F_VBlL!PZ6i~DdO0bG@OKOIuW0*d}K&i25&K^Jq<~wHPP1cB+Q#Zxskbz*PY**MlAM9Vi*;sz&BHk$_8j%8-wl8-Nhp$&GfwVX;Iiv3oH%-PMnlD5Diz# ze7I;t?YqR&^p^C^0Jsnk0{{a6Lqh{L0AO!q9+W`<%4h!yT7S#}#{-Qdk;5{{^++J< z1p(i;OlsVg+jw<){~nZo00dDD5fK2~fC0!e%ZnNKm9W|DC-8+&@YUzK>%d+38DS0L zg|CsQi0pGcOW+Trm)&1ig!1lJ*09mr_pD>0hi>6E*)`4)P00CnJ0~MOwOw`&*U$}R zyk)PNOe)kk{@L8G_3gj9_OVFZDLx^lfM={NRw79bh*+#P9wD#4U;D6U z%kJO0uUkJz^|QM2`_7qT>)gaYuTQ=8b*G~Feu-;_HN#UJxN<2{M^*G|c7o$OYnYgg4RoIISYZQQp$s$=;& zGyGo8HJtd@UrDoX+^1ITwU_>->5-^^*^ zzD`F+kl3`=QBB5XDJRmVnktpYO!KK#AWd6M$o=+ao1u``YS1CZM5i-X{IIGCsVoG# zB0Dn?3MG9sjl6$jLR4Twb4@&3#Rq_iR8JzxnozGf0rD`W&wQG!*sMdw$~2Cg^3)R3 z%4C&?;L{;nxEJtUP=zLxmCsGI^Av(7wWSKlo=7zW@p{5*rfpm8wolRVuI2)4TXz&^ zq|62l>7|<0s>uT*U&5r}GnNm~ckFp8_T!!Vc31oKsXZMpyR%3^SVB+IayJB-{J)K#;7o$Fgaui=M(0nPU7?xyHVKhNQoGA_NRjJM%_o}}hMtlW;&r(I*` z&wa0m((F6+SQ#7g3^$$-6!I`b#U6#vF@<>8`o#h3r8=06)Z^FdU$ypEE$xaXWk!3( z7|N5to6F_dD>6+=iszyn8_PX%>$x@e%*L)MaGgh?AJ1nlyK9i!S@xT$7Ub-2>)`UG zDG6oELq3_B`TRx+_gJi2I?Z<0`ZS^a>e04!t{0kmpQzO=+Xfcoauz~1J;)3w?YP5er7nwm1&h5$9J1j3vVML?ijt!g6O>gSlhvGyF*GM{Fd7+r%x$)AX~&=wZ-yPo`;UJ@NO_L$fMF zKtp$&gey6jv+W#lmU;=|6Cm%_u2!Q@cPkqN;jD`-h9=OMADerNm4al?i}Wr2WJLS= z-B|WuSu3}^aa}EZg1b8gXu?RTn-N8$PH@e*r=2~=cM-X38rcgMyzT>cc40K5o9dty ziHI&f$c_bD@pktW+6ED{V<}w!-I+;v%z5VO24*8Q@Y9Td2AiHOU_gYQa*R1P&f=8& zF4>vUy!8*T8!c^9SqQl1@pkjGgeDs#PwPXk)7k~Hf6)GXe7=f{`Q zt@pzF?L{v?d_aEqU9|tN@k}Tfv)pP=VH0&yZ$}LlFZwm%Usr2U&sW~g*|pD5EJ_AE z+z2>7M3b#lVy)XuA(fx@Xcc*HB-vUl_bj5BDp&)ZBe|fqK4t4OnNNE6_8;_iy?tHl zW?N^AWu2`q=c;qH&HpbW87)Tp;BBw_l@!pe>+SnTuJSOhr#+%k++ZfJxHV+Bk<^!=sX&{XNsX=vnSNM`vPcdlwF)A_*Gg2PtMDAH(zqW4Y=EbA^3+8G@^ z5-O&$4b9f$9Q9&rc&Gt^CJOw!2Mx)Ceq7jp5THF04sC@`BICC*ZJJOE7vQ zeX<(M!Iq9!^{ha+b>;R7Qw278Yb0`TSum*@MOlN!EM zj>cq$vaE0kASO4f(OlY$DeFnn0qSM}(3%3>tDHZxpCd!1-XA)2dRbL6p2!L(d}W~a zQ8RV3uvAbhFSUKk&b(7*(cSURM>CJ5rIE zMyF(W+bOQhFaHDfHyb81?n-TGTl1NC9kArJaz`2O*1c=Rgl{)BQd#|_{dW)PBSq-U z&KepL)A(c}6rb0S#1H`4YtZYZ@Dbj-~3-hy+_M?`@WxlU22-yQ#zS> zPMGUfA zzb8^&y*0PdTX47Wnq`NrH%Al#dTXI@L?=uO-oBovm6?dR)Y+dAl@+_WwGqnB)X}4% zC6QlRe3nu0f;^QTny$@QuYxb!*}-5`s9^TUP~+0h$k5Qt&&`eVIa;~-R&pfiHcui- zP}RQl#7!Pl%Uxl)ZDvaIMe29ox^;GI2-Z72Hu$O9pUA0kQ$$>BSijM`D-lC&D;tJJ zHD*n(;A&Omo52MU`%hqRGnUMuBVcDz*FE4v^mtjAn0_xnh* znnoP^?4G;_?T;F+*YI2ELOto9>JcefGce_B^79?n7lB5~(fE1!5-x66 zBQXYhgomfag}5o%n}6b$hGuS7{%5Q$sFeiV8I60NhT8QSzVOC0m%KOqW8B@qE#c>S z|L4Ijt7LG^_zziB7U)@-F8^uj&1d>?`t7k@FP`&~ihCLY5a6`=UePL}^r0R74bCy@ zQEiUikx|Fd(9&n=w^(;-gWg6H!D~;o%h`NA`OALSEhT|NgP}g)R!&?-`Pq4I1@-`0 zBfm4#>8P8W_8Qf824663EbMLFGe=?Z(4)@VGxYL(iic=i8I6`33?sJG6Kk4I;fF>|9b^RcD;7 z#+MFz+k_2GDW01j)>5?AQ1vr#OZvw6>%c>AHyX^ASiXg==9>4uxep9D<%`~!DmIS{ zK95$0y=T_rde<7guGo_6gusjRmk2t~^_8(zt!Dg;ETy#bhj#oWTuNT^*fHU1PNPNK z{v}3Stxa6`5W8Aip`F9QS9Ms-ru&Mj)U&EM?1`P0?pv+!GyQ~OX!rvgZJ z$8U|6{tQNb!0=SIcVydZbi+cJ0BtgAmvCyS#kfBfPfMo7M^`^1GfNsL-b$!9=xg|e z#6m6iCryLVk!{|=Ly;aT8~QXT0XmWU4Q|zSx2Kl9wXR z+xiJWWDUV}hMVRJ+|2}35_{;?m1d_JE1`=rfUR@EKDyc9_ig!wVt8#5t>`Qq!FfX* z^7v`z8Cv8%!-Dwk5tV~9YkkjfsGm$|%WtiaiG`#rEli{gGOHzap|M9cN1wUB4U=)i z;b*dQ_p#_=Hvd0!|Jf9Vk(F%+Jx^QauzxM)3O`}6whI25Cl+|ah$V;b(M@<4xsTXh zDNRvV9N{ixMwF<^E1S1k|DvYtv+{$BJjB3oYrE9L$W=7uU$iBV_V8~#yRU4SPeq%V zI`7#TnzzI1<`N!r=^s7y91bTD+0uo*S*?&gZbb&Qr?#t` z0OG;B`?T*Mr94W%5&t@S?_8s`b&;NVab+?@-rxYeEwS9rD-ot={C;zdkDP9n3wF-Z@Mo>%0O|@twqa_$I&o%~nk!!E&@4W@cvZGqV!H)Celm}Zk;)Qp$Xm0-2=bPFxEslpU zck+_pc*4Q=8p13-?&}#Q+gu`DaGhd+&24NHZ_pvP{>y6HDBj{iLeK~=?u&Zv&)D9g zMQQ-~A>6T#r6yCcb9DB5|E9GRK5hsrG)=Ab_@=&$QLKw*<{MU)9gp*Y1#ovdT>jYy z@0{J}O;r^^<#BwXjd1FyeZR}nqoIJu>IO|)HwKZ;#E@jJ@;9plC47X}R4D!>=56Y_ zZ)}+}{O#*pCe|kAQ@&6ORsZHmJn=G(wdA4e9fqv-!q(T6ZiC_=Z64`trvEE2@wof^ z@KHx+sb1`)x^6pE54yCn7X4r10%oMPy85jAAvi0s&c5jOYmQ0RNoMd(J<}F^JMnJV zljZ`~a&nw9+qHDPG&!?DY;VIfPz&W|@rK-FYeoud(96Wy-;~peiu)!$USn1$@!`R( zd9e|mG#q4y!fJdN-x4K%_oy5d;Xsrv;iQ|hiKw}_?R~h9KZJ@fmA?h+`?!K!ib#_Iq?@1_Acyuc*V6JsyCO#5nM*81Edd@FaG;f}( ztVR{Pp@rwtdSiS(AN?GcMTgR#CsAL|+D3n=j!1WInivPRRiet+{crDmB3fVVIw0ov zw_T*j?zqFzOeV=aR!L`gqZNu>xybR{^7D_q@G`=$ZVXd*uK~&wv~3eZee0c2^KCV% z3#ld2ch}-8+rr`RvPRr0?^i>pcWup!rf}RgY8Cu3uZh3SnU(L))T_j>ibb;GVLPxz zaf9?#@s}($V>&uwmX1GW00#)$SYK$1X)9~n`3iY)_VSw_-;!yD4y_ zzYC0uDLh^^mF?HTA&VL@Eh?!+_h;kiZ1cRg!F~&v{P{x@WrRx%H#$X-$T*`f#s3?U z(oiroPvB)G!h04^ecvygJXx#D?CK%n>u_e(ygiN^tqf7}x|GK>l5@c2C4Zk}%Tds7v6`oZ`cfV$Bg;qhhm*AG!*)Onr zUxxA{_z%&tt{V1RQ$)jFXUTI+Gw)FEZm|y>b5OTD*vmJ|a;>oysFIqjY>Gf5mAhEe zVSSoiIQJ6%B4XqbY;0QOy*iDZZ}nuleeab(OCLia-Puize^Z6;1}1lvS}(cdQBVgQ zOJ@aW8yYpff#zFa(28i-l12r;XkhZ*U(EKJ{kxv>?yBm^f}9mGa8x$Pd)`~={^hFC z+W5SV5v7>sBXxiG8;_lmaAmmfI31$wlpTt z?Rv8zwxPnQI>@h)xS5X{HWIA3uB{qUze*NZZ=adcKI~-o3{sa|#P#1n1d#3a4Kt~c zU-Rl&W>={o7A6RB6ziY#s=kID{`2k(>INEVI?pR(xA33dQWfT}x4r2bWmK$HZRATd93}_Wi@!}U3x3ydclNhSSoe~tmNUhE@D=Kr;ku!~~6_x1d z5nTu?DIJu0HNz1BlW<*#4FSa|kLEU-w_9VJ9TQ9DAgKhk2V59Zw6syc4}|)<$N%nb z1pD$Tp_mq?)wzxmW6=5XUzcVL`}dtXFYWK$y#Lo^8Ol+2WP&|b8rM80 zA_4@UO4LscSrzF#l!BQYCT_PyHaii*HPU*_;|{2mP(+-k=iLUu1a!w zWHgNgVro#`u_y>9X_-!hi{^Z5y_U3W_RCgXLg4rFb<85ZQ?{~F5`>^=QOL!V)Yoqj zBm|4Z1#jCXWWE7|VNr9U!B#|+%qu~Crr$mSD{Zs!hxQW;xECqJ5E-p7I;Tb*nU*Sx zmxneb33!c<2<}cS9Azk`5fwn;w?kQHF$u(+WOC^~+!EW2zDRZV5S&y9^B03%w1_*I z_xB7|xGCiF7P-~k;+rLEE+su+Ktin*od03Q8CNx>NT9-H{@issMp99^k2@DjCF+Dl zMo@yZQ}ETOT@?dnRhM+!U+T_$3qb{{07-#~F4hn+ftISET(z^Us2nG|x~CW??$rfE zY7Ik3euy`ms696k!F%WXVCUFF%y)d)3fD+6MdoEH(^9oCy(cP*@;Djt+!CG4oYiEQ zv9QDQvvnVVNCAedO*L$gyir!pH(lmt4QwT%i|+7HiZWsjQ<6#vn?$ZwY(t!A&&=A8 ztWyLJFr7?UDh$fZT7!}EaHP%0hNXpWhoMH$>?E2qXu+|(T54en3qDj(Eep;qfuYkB zINwC2kx)8t2}T5AVBqL07l|CEVUX`n`0?yQdX4y$jU>{0i@@Is0zg#Aky>C$3|#3g zeo;?;N=jC=fso~n+-%nTRNzYqQE8D@TL`;e z2)h6LiD$Q-#72tv)ew+4ix*x~^oO+q_llR~DFjnOx?^A`r6)#Cg_lsD9n(-mF*(kL ztN7x3t-Ty>g^UD~Q%s^m6wRlmKDsiNQy4!jl)OZm&NulH# z5dtU|TIu@U4v{B3m%4(qH-(~^OB?K_gzjmT8Vy4Cr!NAz>Zp*AE_kA;FJCdcTjU6B zFqR1j>wvjXOsJ3yUQ_9gM$qv9O=Oc-Vky@}QIO;9>??-iL z?s($)!t!Wk#evrkQ*rye1+*Oeo_nZ3c5$xBY~+yKP`!JC;Ci3u0ql{ADg17WrDGFn|P z)=?d5|8Q6I!?Id{=oZnyVu@%h>`|(KGOkyOwve_M_>mWu2(cjn^wgdzL~)4*P~zhf;p z%0XU%rDwWrNyDklFQ;$EA2N{^DXbhd3S~%;O|Vx;qQ$_I1WpK6On>Xt#(p9eAogmi z^vW?Uo-tEUiG|>+xW=$9_|Lfs#(R3Jcdw%pM))aCN)gm#A9n-Ijuy$P{k9G-um=#tW4n9CoRZ)8} zr8-jIv}d2pc8>E`T472KsMe&h1!7yxvy|k#AWXP~u*M(!+D&HPkvjcx4M|h;EMT^c z1kSTk#hLwziqKb#UUzCWQk(YHfOKi2AF}4bN5q5iv%3jQKgF`f5JKjry`^Wi^G> z3{7(Y&Wy@d;;v4^BU zJsCyUr#e(aL`ZCgcTNK<$9i+`;CCu@iYd4pHMB~2rQHy6G1qGFf!;TW)OXZE_2jAt zu^G0E0n1W+yy6dlPEjBP613t62-PEx#g6^^ZF$d-p#(|nwTfo7q!lWyqlg`V=1Vkn z?w#9iKV`Dd#M;z|ajYA_pJu9w$)ecNwEB{K{hTd_ zGY&-3Tp_$ZR4J4eMY$>}#_|aqQk~pQ8Nn$<(ryr4Q&T)~3LQhuJMGJvENdp}&4J~;*R4y2(pF@a* zrq(9DQi&VZchc4B)D1cDUM6S9w@>;pS$#Gx38i3c!lhau;_+izdi;s^UW0KqK z^uo=axA#f-P z%26A_^@IR?h%e!@^^*037%-Z z#}ZWgnj|n@l3^*B2u+A4)TabPfR5D(2D%4-Fdv~!77l-$mqNyr2T6)lP=TXi3T7^c zRzpWOlOCftq0vs6$<5Ho^T-GVye<-wjR+thhfXN1xH2Vhj%tSnwWN<*dqS=fMWhA{ z@4#B4!r)>AQn6>s>ekvM_r_JncaWo>mCz=3Qv?Uql8UE7((j#;c}FRX&1#LiQv>(^ zcdilZ8g#(Zrcmp|&x%S?4UF7UcW@5_-iM9zhyirDDyO&_ImFjoO{s`q44o#~5^+8>+KKeVxYJUL z7L5QAu~LoPq~)HcqR?89!=2C{$~%^yp0lymf?BF68@T10KG8Dp{X11BX({Q^t_A&K z0}c90rYE|cxAHg1b&2(6z*7t$2q`47#XCExc8XQ47eYf6&y|!f=hUfwGGMZDnT7p_iADe&SH*^-{|mrzb5sVD8nOrZcJw z-b^F!bC$6w$Iq?xNrsN0firs0RL}x7#Y8lXjt+|I*yD@lexA@~9$slKqsmboCIwOk zy6TFX!FX_PXY8~#=kDnZ_l9LJ&VUaFS?nfik12Qxmoj@Cts!MS2peSVgMLq!bOpoGwr1WoKXR? zV+hry=RNY4oHj2eTt41>QGK=1vR46kEW!mZS)yRHddx-2zb&;_mm0_sRMOF(?X%9uL&< zK%^p%=87vC4s=BhP>i*BjcJdYDm93{xw-T`=$s3R(-O`^m-MdMx}GYbSF8Q{?T4zC z^iBJKl)iuzL56FGXp9mdmSU*}9Ee;2VXcD~{$Uzg3|)V&NkZ|toKHt5e{^6&VzixC zK+dbA)*p=Es-^$rFLS3i+9Z4|h*+r|DF%BeRbT0;sH8^(-I>eSs#Wu-LibvUL8e+y zhd@tyg-nuI0!BFvpPV{3>2>F5N0&A?*?QHR#Z;C-yu;vtNhOAY)r0%z#M1Y)*>NTk z{tW8x%K>0Noi7TF9nXoV;tG(NqJVC$g3eKlecj|^-Nx@%ySYojh>*1d8iYz=GR1@u zQWLHU)C_I?uB6vfqq<&Ey!Ge^TD*$$PfJ=O)u)2Uyq%l&n>gUUWa?ZAFlCnYB5Vex*7-CUouA!C@99&LM|_hE!@QS_||L z0luiHeC*0;s@(#*9plZ!8@g@*6$+Kn zD`no53S0z)WK>NN<5}*^ncMW6?jl@*UPbRKj#opXG{@*-X*`OJOvqOc7KzTR zH2`V|NQ{j}$skaBu1x72ensG-1;vh!n=RV-T5rI z6R+60zyJ{$k{f0uEPR35 zd^+?l9rzt+0)NnTdZx=DS@`klemz-1H}OT(?0&kslmB1fxbBuU%#p2uleBbOc23R_ z4$s(r&XtYG`gZLaF{)I#EMu26APj(b007Ml5DgUo+d@f>2{8ajqQv~fZls3HcW>Kv zTy9IYBbV8F0VD3oBM<_*Wj7SLp^oFm_!9Gl|BIgRuimXwOR3ebtfkUqYSs9CojU3- zn)@!@+K=4!vLfUqR#Z_er%)>~3N%;K?k`dFfA;QMJL=t4u`j68>mQtblisnt_2y5y zUmfapF6T6f*rUQGuoTpKqF^Y&PsKI#L&7}_FZ00hF&{wmnt(mM>9t*DtPO8 z*i_Bfeb3pA`esR@cJ!f`yCmkX-R+WMkf3KIlBPUt*np(MbX1zprhZDSXcy1Y=g@m; zJJ+3NPf5_1d#|sb0_SU|`;g`NXI@ z1n5-XzN^|s--bHGUB;Qc&9m7_6xA_Xf0-V3&eOBA-Cfvo2Ub$csyCgY%Za;^QrUb7Pqn#?Q*Bak?q&wV+xW!X(rGhq3g7jGe%|T z?m2tGSd_ni%{@g@1!A6&pn(>TJt&~}o~;wq^G%0hGlb)1)@J6aUU*bRzVl))HWl=P zDBp1aiwpjJrsVcpHS&V%?srI?7;>AAq(Sf~R7xlQBcwP*X0ITA9_ zo+%2oa+5s&%;#dtK;?gG?&RLnU|ius><)BMpS!m3lISCIlekH&h|U2px3qt z0aKu+@y5bjxU$ZuCOXo&O~RM_(4k6^>P?F|RJ}~B(CkI`IjxKmJS2*{-Iwu&m!rSU z)3B^UGDZ2|3*eKgAaE@)gg3nahNdsyfG6@Libi9+&iY(p%Pbk*U>R)zdGNZX3xz|+daeS zJuIZoESr!g;(5d@Sn%lC>3Cw;DaHJ`v<*rpbvYwC4c>PTNVf1y1O+>Nyu8;~1t$m+ zR!}xC2s}OjGD!uu+S>PZvUqbc`ZQfN6&!hy#I}Ub{`RUPgeW1-0{0P;t#NS|K1pdC`9St8TL&FB&=Ia4 zQ>WFZ6&ac)nF%7Z6lSLB_qe+v?4yCi2;Q$xJAtDVJEx@C+j%Toq3Q{I! zuz(~%sdqPq*aDItGD~kHW+>)F6k8C+L9GfHgrO8gxX8zb=XKt^Z>~E}woW-cgA~Vd z8JeA$G`M>wP8h|}+FTrNMEKjbQ{<&d*sJvF$Gh&O*#8Na=@ke~b4jaQU(0IIi*dkn zSMh5SqG#8=y`4UtMvoTNyd|u!8q++XU-Cp$T1iPc@c=W(J_3?|{w!aoWkaKV*@Vp7 z%JmWW?}&G2jN0SvWB5%4@eDq#KfiudyA{?k%UkA?Q$)E$&Yc3~>}<6(d6HY_ZJiC{ z=@I_JruF8RMHV|(r*$6G+ynAkXUSiQ#92vNsw@G zq}@&Bs^N)ueQ@t0ndB-y#2cm>8~Q!4*JN)RvDKFz`F_${)-YY_X+9lyG%6Jh%(%On)V6e2y#zV<2H+jo1Hmhy*=qT$6Y_=u;3V13r0Io>|8e-C3UzqenrgFMGA znI*=jb3gf3jJva$aYwY7ucccTIQO1JLId_)_?+A`xcV6#hyHns5piOz)NGlHy&`Aov{2$y-MpkbbfG)P(-msB>ou#hDWjr zS(22(F4F--L(4UlGkIOBBWfErXZRgchf;BOzv?OiaB1gij$_w-$Bhr~SL2Z070vEo8BMzd&0QiD_g?@^U6%^(xboY+70xL^p3XL-{ak>dm4>24S zhq^su(Q@uvbly1dnSd&^D(cak5Mptx_1I(H9eQFMqg^fX+k zW3v>BZOh;DTm)H8Ea>6Is&!Zw?Oa1rfz6H$`zro{#Py!_XYj3l@k(S;7IKl_EG*PC zc%^)ZSCEmx@eV?9d`n*wQ>%vyRFsIzEv8?%xFC-SC`c0t`$M~lO?cJc_&DQI@s=@e zyg1{&oNLcu2wsjdxZzEN_t#0^Xi{}DIy&mspDLCR2;s#W?}XnH+KJ<1!kHc$K6kgL z_k}JqBQ|{4b3DdGw<_}<%Q1o}No%5xL2&p9zcVybbbO1QJ2nr5^Tt<(pa`Slv*hI# z4tL831mEu0Ml8p__uQ_EB1IUJo27pmQ}1PKw6m4IhJKaYTDt4}E1C6&Zx-lh%JA;# z^aqJs!l!XoM>XyPLucVvDc)j?lYnqDc;T)HO?oWFFjV<{f2bp)34^(n)^=sK(s?mr z3mZgJw6~Aj9rT6hmsc-tUvqCgbMC+Mes%xoOGaqr3~h|ex9=}c+E=5r)JZ?O{BMun zX1QNt|AP2;+Bo-}VIbbVURLmby85!yspG`64Jl47|Jcj7y;R0(o2}~A4rL>z>c{%) zx_Z6Z)?nlPj+jjHc`p%X+W1FCR>o-EKABY35169b38Zm&i@`CXx?*Evnye}+grVGT z_@N(@9{G_UNbS8>F5JlCP{Z+{{G&3?cksAYVMR4lv*mqTUdt@#UW*&ZNMF4V{>&d8 zQrT?NhTGx(UoslaR2Uo%L#@Mu$#BZhT zOOrq%IGml(^E+cj(254`eb_g)*J=Dbibc3?p^8~@Qxdg_+YxWPxBw7c3j~b@S}oPW^zc%>M7V@6;_t^j_oc&&AQth$O*XT1r!e9#P3n`wJn05l0Gt zirq*QI&XFKONQF66crnNb^p#76o+`I@z~$VCeLr0kUEBSb#&$0R^r}x?}K-F?h(5~ zMO@z6e>N93ba!3froOIDEx+yG+9%xx?_cC%gzYAVB{zdwaVtMO9~hCtvtKRKOVgZo zBimzI-*nQGzl9@MUGncB)@A}P4^*f2YG{@yUJ?02dAOSYFtlCbyTY1xb$+ib-o2d8 zl6vN$jpO3vD=A^ii*R4iupo$jc>UN)fip}ShRrUVB*kjMBNfS5E8R5EZsOP)m8SJlvcP2&Ag!5>3qMt`! za+I5QBgJk~7{1a zB+t=mCpJ~ZuxDyMaS8Er@x0J1Z~R^(PKVLUL{|m+jWOGWRJiS2fHzl_eO9C`zqJOB ztL*s4`EGVE(ao=5Q1Pg7$^*=2c-o>W)+LkT>M>q@;tuIWhwrDOrC_}~HJlTAT zlln@SgcTWa@ly9im1f#fz0m;PNJT3YL$Sle{ar$_7Ul6$?J;{6;` z>75h2-(tL{-0+qw!v`_lhvHqOt?xYFbE#z)jFQ+cVn#xJ#v*+7u$!6sjtOYl*Tg+j zJO5rP9AD$S71AY9){@OT)GASbJhaH!Y+qa6dT##6e0u8B`*fZ@Pq$6s!`3%wf244Q$K(qrhh>v~+nh^O~ET!~dEb z333%fGItrE#q-wAEQ?>Vqe`9l#N?_~)Fl>lk7PF-9T}I-Ht&qt`AqpIJ?I8rxvz$4 znbuWU-m6XI zckU;NZnJWSP0-LOV9Z}Q3aWt^lUp+kaXa*JS_~8F&tHAe%JThpQbDrEd>HTC9lL(4 z{| z6h86OAcL{dIEi||cXw~5eoJ3YW;VsDHXXuD1ZK7 z-T<8L{*PuMyQx)_WeP&YVOuF=k}Im~Nqq}Em=H!K(usC9Oa}>;i!5bgqKN~+7K7xa zLAt13oBw&hzs|2Ha zdI4tC)`rNmW|oN!Aek0vWQ9=mL`BI;uBBX8){nXjt83ka;INf^sOqx99n$Kb(5a}u#NtqXS{lSNH5ew2$?*D0+2Dl7|@QdWB_~SR^u}&qC z=#DDJltC~I1a>^Pq(#=^pp`@4N`9x7TZUfZ1VmJ*@I{1z$%k}9 z6vWxFOh2ld`?1#IqJ5kq

    wNw0MfZCAGE_?uwWKxvs3<8C^mVe~1Dppb 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

    8aoPxn;bbzpuNyqy4@L3}9Ac>{N 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

    uC;*#nVniA6Sy=|BB3!%?t~a1eRDPdv80t^ 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